@@ -1147,25 +1147,21 @@ define i64 @x_to_u64(x86_fp80 %a) nounwind {
1147
1147
;
1148
1148
; SSE3_64_WIN-LABEL: x_to_u64:
1149
1149
; SSE3_64_WIN: # %bb.0:
1150
- ; SSE3_64_WIN-NEXT: subq $16, %rsp
1150
+ ; SSE3_64_WIN-NEXT: pushq %rax
1151
1151
; SSE3_64_WIN-NEXT: fldt (%rcx)
1152
1152
; SSE3_64_WIN-NEXT: flds __real@{{.*}}(%rip)
1153
1153
; SSE3_64_WIN-NEXT: fld %st(1)
1154
1154
; SSE3_64_WIN-NEXT: fsub %st(1)
1155
- ; SSE3_64_WIN-NEXT: fisttpll {{[0-9]+}}(%rsp)
1156
- ; SSE3_64_WIN-NEXT: fld %st(1)
1155
+ ; SSE3_64_WIN-NEXT: xorl %eax, %eax
1156
+ ; SSE3_64_WIN-NEXT: fxch %st(1)
1157
+ ; SSE3_64_WIN-NEXT: fucompi %st(2)
1158
+ ; SSE3_64_WIN-NEXT: fcmovnbe %st(1), %st(0)
1159
+ ; SSE3_64_WIN-NEXT: fstp %st(1)
1157
1160
; SSE3_64_WIN-NEXT: fisttpll (%rsp)
1158
- ; SSE3_64_WIN-NEXT: fucompi %st(1)
1159
- ; SSE3_64_WIN-NEXT: fstp %st(0)
1160
- ; SSE3_64_WIN-NEXT: jbe .LBB4_1
1161
- ; SSE3_64_WIN-NEXT: # %bb.2:
1162
- ; SSE3_64_WIN-NEXT: movq (%rsp), %rax
1163
- ; SSE3_64_WIN-NEXT: addq $16, %rsp
1164
- ; SSE3_64_WIN-NEXT: retq
1165
- ; SSE3_64_WIN-NEXT: .LBB4_1:
1166
- ; SSE3_64_WIN-NEXT: movabsq $-9223372036854775808, %rax # imm = 0x8000000000000000
1167
- ; SSE3_64_WIN-NEXT: xorq {{[0-9]+}}(%rsp), %rax
1168
- ; SSE3_64_WIN-NEXT: addq $16, %rsp
1161
+ ; SSE3_64_WIN-NEXT: setbe %al
1162
+ ; SSE3_64_WIN-NEXT: shlq $63, %rax
1163
+ ; SSE3_64_WIN-NEXT: xorq (%rsp), %rax
1164
+ ; SSE3_64_WIN-NEXT: popq %rcx
1169
1165
; SSE3_64_WIN-NEXT: retq
1170
1166
;
1171
1167
; SSE3_64_LIN-LABEL: x_to_u64:
@@ -1174,17 +1170,14 @@ define i64 @x_to_u64(x86_fp80 %a) nounwind {
1174
1170
; SSE3_64_LIN-NEXT: flds {{.*}}(%rip)
1175
1171
; SSE3_64_LIN-NEXT: fld %st(1)
1176
1172
; SSE3_64_LIN-NEXT: fsub %st(1)
1173
+ ; SSE3_64_LIN-NEXT: xorl %eax, %eax
1174
+ ; SSE3_64_LIN-NEXT: fxch %st(1)
1175
+ ; SSE3_64_LIN-NEXT: fucompi %st(2)
1176
+ ; SSE3_64_LIN-NEXT: fcmovnbe %st(1), %st(0)
1177
+ ; SSE3_64_LIN-NEXT: fstp %st(1)
1177
1178
; SSE3_64_LIN-NEXT: fisttpll -{{[0-9]+}}(%rsp)
1178
- ; SSE3_64_LIN-NEXT: fld %st(1)
1179
- ; SSE3_64_LIN-NEXT: fisttpll -{{[0-9]+}}(%rsp)
1180
- ; SSE3_64_LIN-NEXT: fucompi %st(1)
1181
- ; SSE3_64_LIN-NEXT: fstp %st(0)
1182
- ; SSE3_64_LIN-NEXT: jbe .LBB4_1
1183
- ; SSE3_64_LIN-NEXT: # %bb.2:
1184
- ; SSE3_64_LIN-NEXT: movq -{{[0-9]+}}(%rsp), %rax
1185
- ; SSE3_64_LIN-NEXT: retq
1186
- ; SSE3_64_LIN-NEXT: .LBB4_1:
1187
- ; SSE3_64_LIN-NEXT: movabsq $-9223372036854775808, %rax # imm = 0x8000000000000000
1179
+ ; SSE3_64_LIN-NEXT: setbe %al
1180
+ ; SSE3_64_LIN-NEXT: shlq $63, %rax
1188
1181
; SSE3_64_LIN-NEXT: xorq -{{[0-9]+}}(%rsp), %rax
1189
1182
; SSE3_64_LIN-NEXT: retq
1190
1183
;
@@ -1246,37 +1239,27 @@ define i64 @x_to_u64(x86_fp80 %a) nounwind {
1246
1239
;
1247
1240
; SSE2_64_WIN-LABEL: x_to_u64:
1248
1241
; SSE2_64_WIN: # %bb.0:
1249
- ; SSE2_64_WIN-NEXT: subq $24 , %rsp
1242
+ ; SSE2_64_WIN-NEXT: subq $16 , %rsp
1250
1243
; SSE2_64_WIN-NEXT: fldt (%rcx)
1251
1244
; SSE2_64_WIN-NEXT: flds __real@{{.*}}(%rip)
1252
1245
; SSE2_64_WIN-NEXT: fld %st(1)
1253
1246
; SSE2_64_WIN-NEXT: fsub %st(1)
1247
+ ; SSE2_64_WIN-NEXT: xorl %eax, %eax
1248
+ ; SSE2_64_WIN-NEXT: fxch %st(1)
1249
+ ; SSE2_64_WIN-NEXT: fucompi %st(2)
1250
+ ; SSE2_64_WIN-NEXT: fcmovnbe %st(1), %st(0)
1251
+ ; SSE2_64_WIN-NEXT: fstp %st(1)
1254
1252
; SSE2_64_WIN-NEXT: fnstcw {{[0-9]+}}(%rsp)
1255
- ; SSE2_64_WIN-NEXT: movzwl {{[0-9]+}}(%rsp), %eax
1253
+ ; SSE2_64_WIN-NEXT: movzwl {{[0-9]+}}(%rsp), %ecx
1256
1254
; SSE2_64_WIN-NEXT: movw $3199, {{[0-9]+}}(%rsp) # imm = 0xC7F
1257
1255
; SSE2_64_WIN-NEXT: fldcw {{[0-9]+}}(%rsp)
1258
- ; SSE2_64_WIN-NEXT: movw %ax , {{[0-9]+}}(%rsp)
1256
+ ; SSE2_64_WIN-NEXT: movw %cx , {{[0-9]+}}(%rsp)
1259
1257
; SSE2_64_WIN-NEXT: fistpll {{[0-9]+}}(%rsp)
1260
1258
; SSE2_64_WIN-NEXT: fldcw {{[0-9]+}}(%rsp)
1261
- ; SSE2_64_WIN-NEXT: fnstcw {{[0-9]+}}(%rsp)
1262
- ; SSE2_64_WIN-NEXT: movzwl {{[0-9]+}}(%rsp), %eax
1263
- ; SSE2_64_WIN-NEXT: movw $3199, {{[0-9]+}}(%rsp) # imm = 0xC7F
1264
- ; SSE2_64_WIN-NEXT: fldcw {{[0-9]+}}(%rsp)
1265
- ; SSE2_64_WIN-NEXT: movw %ax, {{[0-9]+}}(%rsp)
1266
- ; SSE2_64_WIN-NEXT: fld %st(1)
1267
- ; SSE2_64_WIN-NEXT: fistpll {{[0-9]+}}(%rsp)
1268
- ; SSE2_64_WIN-NEXT: fldcw {{[0-9]+}}(%rsp)
1269
- ; SSE2_64_WIN-NEXT: fucompi %st(1)
1270
- ; SSE2_64_WIN-NEXT: fstp %st(0)
1271
- ; SSE2_64_WIN-NEXT: jbe .LBB4_1
1272
- ; SSE2_64_WIN-NEXT: # %bb.2:
1273
- ; SSE2_64_WIN-NEXT: movq {{[0-9]+}}(%rsp), %rax
1274
- ; SSE2_64_WIN-NEXT: addq $24, %rsp
1275
- ; SSE2_64_WIN-NEXT: retq
1276
- ; SSE2_64_WIN-NEXT: .LBB4_1:
1277
- ; SSE2_64_WIN-NEXT: movabsq $-9223372036854775808, %rax # imm = 0x8000000000000000
1259
+ ; SSE2_64_WIN-NEXT: setbe %al
1260
+ ; SSE2_64_WIN-NEXT: shlq $63, %rax
1278
1261
; SSE2_64_WIN-NEXT: xorq {{[0-9]+}}(%rsp), %rax
1279
- ; SSE2_64_WIN-NEXT: addq $24 , %rsp
1262
+ ; SSE2_64_WIN-NEXT: addq $16 , %rsp
1280
1263
; SSE2_64_WIN-NEXT: retq
1281
1264
;
1282
1265
; SSE2_64_LIN-LABEL: x_to_u64:
@@ -1285,29 +1268,20 @@ define i64 @x_to_u64(x86_fp80 %a) nounwind {
1285
1268
; SSE2_64_LIN-NEXT: flds {{.*}}(%rip)
1286
1269
; SSE2_64_LIN-NEXT: fld %st(1)
1287
1270
; SSE2_64_LIN-NEXT: fsub %st(1)
1271
+ ; SSE2_64_LIN-NEXT: xorl %eax, %eax
1272
+ ; SSE2_64_LIN-NEXT: fxch %st(1)
1273
+ ; SSE2_64_LIN-NEXT: fucompi %st(2)
1274
+ ; SSE2_64_LIN-NEXT: fcmovnbe %st(1), %st(0)
1275
+ ; SSE2_64_LIN-NEXT: fstp %st(1)
1288
1276
; SSE2_64_LIN-NEXT: fnstcw -{{[0-9]+}}(%rsp)
1289
- ; SSE2_64_LIN-NEXT: movzwl -{{[0-9]+}}(%rsp), %eax
1277
+ ; SSE2_64_LIN-NEXT: movzwl -{{[0-9]+}}(%rsp), %ecx
1290
1278
; SSE2_64_LIN-NEXT: movw $3199, -{{[0-9]+}}(%rsp) # imm = 0xC7F
1291
1279
; SSE2_64_LIN-NEXT: fldcw -{{[0-9]+}}(%rsp)
1292
- ; SSE2_64_LIN-NEXT: movw %ax , -{{[0-9]+}}(%rsp)
1280
+ ; SSE2_64_LIN-NEXT: movw %cx , -{{[0-9]+}}(%rsp)
1293
1281
; SSE2_64_LIN-NEXT: fistpll -{{[0-9]+}}(%rsp)
1294
1282
; SSE2_64_LIN-NEXT: fldcw -{{[0-9]+}}(%rsp)
1295
- ; SSE2_64_LIN-NEXT: fnstcw -{{[0-9]+}}(%rsp)
1296
- ; SSE2_64_LIN-NEXT: movzwl -{{[0-9]+}}(%rsp), %eax
1297
- ; SSE2_64_LIN-NEXT: movw $3199, -{{[0-9]+}}(%rsp) # imm = 0xC7F
1298
- ; SSE2_64_LIN-NEXT: fldcw -{{[0-9]+}}(%rsp)
1299
- ; SSE2_64_LIN-NEXT: movw %ax, -{{[0-9]+}}(%rsp)
1300
- ; SSE2_64_LIN-NEXT: fld %st(1)
1301
- ; SSE2_64_LIN-NEXT: fistpll -{{[0-9]+}}(%rsp)
1302
- ; SSE2_64_LIN-NEXT: fldcw -{{[0-9]+}}(%rsp)
1303
- ; SSE2_64_LIN-NEXT: fucompi %st(1)
1304
- ; SSE2_64_LIN-NEXT: fstp %st(0)
1305
- ; SSE2_64_LIN-NEXT: jbe .LBB4_1
1306
- ; SSE2_64_LIN-NEXT: # %bb.2:
1307
- ; SSE2_64_LIN-NEXT: movq -{{[0-9]+}}(%rsp), %rax
1308
- ; SSE2_64_LIN-NEXT: retq
1309
- ; SSE2_64_LIN-NEXT: .LBB4_1:
1310
- ; SSE2_64_LIN-NEXT: movabsq $-9223372036854775808, %rax # imm = 0x8000000000000000
1283
+ ; SSE2_64_LIN-NEXT: setbe %al
1284
+ ; SSE2_64_LIN-NEXT: shlq $63, %rax
1311
1285
; SSE2_64_LIN-NEXT: xorq -{{[0-9]+}}(%rsp), %rax
1312
1286
; SSE2_64_LIN-NEXT: retq
1313
1287
;
0 commit comments