@@ -1306,6 +1306,160 @@ entry:
1306
1306
ret <2 x double > %c
1307
1307
}
1308
1308
1309
+ define <3 x double > @stofp_v3i128_v3f64 (<3 x i128 > %a ) {
1310
+ ; CHECK-SD-LABEL: stofp_v3i128_v3f64:
1311
+ ; CHECK-SD: // %bb.0: // %entry
1312
+ ; CHECK-SD-NEXT: stp d9, d8, [sp, #-64]! // 16-byte Folded Spill
1313
+ ; CHECK-SD-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
1314
+ ; CHECK-SD-NEXT: stp x22, x21, [sp, #32] // 16-byte Folded Spill
1315
+ ; CHECK-SD-NEXT: stp x20, x19, [sp, #48] // 16-byte Folded Spill
1316
+ ; CHECK-SD-NEXT: .cfi_def_cfa_offset 64
1317
+ ; CHECK-SD-NEXT: .cfi_offset w19, -8
1318
+ ; CHECK-SD-NEXT: .cfi_offset w20, -16
1319
+ ; CHECK-SD-NEXT: .cfi_offset w21, -24
1320
+ ; CHECK-SD-NEXT: .cfi_offset w22, -32
1321
+ ; CHECK-SD-NEXT: .cfi_offset w30, -48
1322
+ ; CHECK-SD-NEXT: .cfi_offset b8, -56
1323
+ ; CHECK-SD-NEXT: .cfi_offset b9, -64
1324
+ ; CHECK-SD-NEXT: mov x19, x5
1325
+ ; CHECK-SD-NEXT: mov x20, x4
1326
+ ; CHECK-SD-NEXT: mov x21, x3
1327
+ ; CHECK-SD-NEXT: mov x22, x2
1328
+ ; CHECK-SD-NEXT: bl __floattidf
1329
+ ; CHECK-SD-NEXT: mov x0, x22
1330
+ ; CHECK-SD-NEXT: mov x1, x21
1331
+ ; CHECK-SD-NEXT: fmov d8, d0
1332
+ ; CHECK-SD-NEXT: bl __floattidf
1333
+ ; CHECK-SD-NEXT: mov x0, x20
1334
+ ; CHECK-SD-NEXT: mov x1, x19
1335
+ ; CHECK-SD-NEXT: fmov d9, d0
1336
+ ; CHECK-SD-NEXT: bl __floattidf
1337
+ ; CHECK-SD-NEXT: ldp x20, x19, [sp, #48] // 16-byte Folded Reload
1338
+ ; CHECK-SD-NEXT: fmov d2, d0
1339
+ ; CHECK-SD-NEXT: ldp x22, x21, [sp, #32] // 16-byte Folded Reload
1340
+ ; CHECK-SD-NEXT: fmov d0, d8
1341
+ ; CHECK-SD-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload
1342
+ ; CHECK-SD-NEXT: fmov d1, d9
1343
+ ; CHECK-SD-NEXT: ldp d9, d8, [sp], #64 // 16-byte Folded Reload
1344
+ ; CHECK-SD-NEXT: ret
1345
+ ;
1346
+ ; CHECK-GI-LABEL: stofp_v3i128_v3f64:
1347
+ ; CHECK-GI: // %bb.0: // %entry
1348
+ ; CHECK-GI-NEXT: stp d9, d8, [sp, #-64]! // 16-byte Folded Spill
1349
+ ; CHECK-GI-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
1350
+ ; CHECK-GI-NEXT: stp x22, x21, [sp, #32] // 16-byte Folded Spill
1351
+ ; CHECK-GI-NEXT: stp x20, x19, [sp, #48] // 16-byte Folded Spill
1352
+ ; CHECK-GI-NEXT: .cfi_def_cfa_offset 64
1353
+ ; CHECK-GI-NEXT: .cfi_offset w19, -8
1354
+ ; CHECK-GI-NEXT: .cfi_offset w20, -16
1355
+ ; CHECK-GI-NEXT: .cfi_offset w21, -24
1356
+ ; CHECK-GI-NEXT: .cfi_offset w22, -32
1357
+ ; CHECK-GI-NEXT: .cfi_offset w30, -48
1358
+ ; CHECK-GI-NEXT: .cfi_offset b8, -56
1359
+ ; CHECK-GI-NEXT: .cfi_offset b9, -64
1360
+ ; CHECK-GI-NEXT: mov x19, x2
1361
+ ; CHECK-GI-NEXT: mov x20, x3
1362
+ ; CHECK-GI-NEXT: mov x21, x4
1363
+ ; CHECK-GI-NEXT: mov x22, x5
1364
+ ; CHECK-GI-NEXT: bl __floattidf
1365
+ ; CHECK-GI-NEXT: mov x0, x19
1366
+ ; CHECK-GI-NEXT: mov x1, x20
1367
+ ; CHECK-GI-NEXT: fmov d8, d0
1368
+ ; CHECK-GI-NEXT: bl __floattidf
1369
+ ; CHECK-GI-NEXT: mov x0, x21
1370
+ ; CHECK-GI-NEXT: mov x1, x22
1371
+ ; CHECK-GI-NEXT: fmov d9, d0
1372
+ ; CHECK-GI-NEXT: bl __floattidf
1373
+ ; CHECK-GI-NEXT: ldp x20, x19, [sp, #48] // 16-byte Folded Reload
1374
+ ; CHECK-GI-NEXT: fmov d2, d0
1375
+ ; CHECK-GI-NEXT: ldp x22, x21, [sp, #32] // 16-byte Folded Reload
1376
+ ; CHECK-GI-NEXT: fmov d0, d8
1377
+ ; CHECK-GI-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload
1378
+ ; CHECK-GI-NEXT: fmov d1, d9
1379
+ ; CHECK-GI-NEXT: ldp d9, d8, [sp], #64 // 16-byte Folded Reload
1380
+ ; CHECK-GI-NEXT: ret
1381
+ entry:
1382
+ %c = sitofp <3 x i128 > %a to <3 x double >
1383
+ ret <3 x double > %c
1384
+ }
1385
+
1386
+ define <3 x double > @utofp_v3i128_v3f64 (<3 x i128 > %a ) {
1387
+ ; CHECK-SD-LABEL: utofp_v3i128_v3f64:
1388
+ ; CHECK-SD: // %bb.0: // %entry
1389
+ ; CHECK-SD-NEXT: stp d9, d8, [sp, #-64]! // 16-byte Folded Spill
1390
+ ; CHECK-SD-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
1391
+ ; CHECK-SD-NEXT: stp x22, x21, [sp, #32] // 16-byte Folded Spill
1392
+ ; CHECK-SD-NEXT: stp x20, x19, [sp, #48] // 16-byte Folded Spill
1393
+ ; CHECK-SD-NEXT: .cfi_def_cfa_offset 64
1394
+ ; CHECK-SD-NEXT: .cfi_offset w19, -8
1395
+ ; CHECK-SD-NEXT: .cfi_offset w20, -16
1396
+ ; CHECK-SD-NEXT: .cfi_offset w21, -24
1397
+ ; CHECK-SD-NEXT: .cfi_offset w22, -32
1398
+ ; CHECK-SD-NEXT: .cfi_offset w30, -48
1399
+ ; CHECK-SD-NEXT: .cfi_offset b8, -56
1400
+ ; CHECK-SD-NEXT: .cfi_offset b9, -64
1401
+ ; CHECK-SD-NEXT: mov x19, x5
1402
+ ; CHECK-SD-NEXT: mov x20, x4
1403
+ ; CHECK-SD-NEXT: mov x21, x3
1404
+ ; CHECK-SD-NEXT: mov x22, x2
1405
+ ; CHECK-SD-NEXT: bl __floatuntidf
1406
+ ; CHECK-SD-NEXT: mov x0, x22
1407
+ ; CHECK-SD-NEXT: mov x1, x21
1408
+ ; CHECK-SD-NEXT: fmov d8, d0
1409
+ ; CHECK-SD-NEXT: bl __floatuntidf
1410
+ ; CHECK-SD-NEXT: mov x0, x20
1411
+ ; CHECK-SD-NEXT: mov x1, x19
1412
+ ; CHECK-SD-NEXT: fmov d9, d0
1413
+ ; CHECK-SD-NEXT: bl __floatuntidf
1414
+ ; CHECK-SD-NEXT: ldp x20, x19, [sp, #48] // 16-byte Folded Reload
1415
+ ; CHECK-SD-NEXT: fmov d2, d0
1416
+ ; CHECK-SD-NEXT: ldp x22, x21, [sp, #32] // 16-byte Folded Reload
1417
+ ; CHECK-SD-NEXT: fmov d0, d8
1418
+ ; CHECK-SD-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload
1419
+ ; CHECK-SD-NEXT: fmov d1, d9
1420
+ ; CHECK-SD-NEXT: ldp d9, d8, [sp], #64 // 16-byte Folded Reload
1421
+ ; CHECK-SD-NEXT: ret
1422
+ ;
1423
+ ; CHECK-GI-LABEL: utofp_v3i128_v3f64:
1424
+ ; CHECK-GI: // %bb.0: // %entry
1425
+ ; CHECK-GI-NEXT: stp d9, d8, [sp, #-64]! // 16-byte Folded Spill
1426
+ ; CHECK-GI-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
1427
+ ; CHECK-GI-NEXT: stp x22, x21, [sp, #32] // 16-byte Folded Spill
1428
+ ; CHECK-GI-NEXT: stp x20, x19, [sp, #48] // 16-byte Folded Spill
1429
+ ; CHECK-GI-NEXT: .cfi_def_cfa_offset 64
1430
+ ; CHECK-GI-NEXT: .cfi_offset w19, -8
1431
+ ; CHECK-GI-NEXT: .cfi_offset w20, -16
1432
+ ; CHECK-GI-NEXT: .cfi_offset w21, -24
1433
+ ; CHECK-GI-NEXT: .cfi_offset w22, -32
1434
+ ; CHECK-GI-NEXT: .cfi_offset w30, -48
1435
+ ; CHECK-GI-NEXT: .cfi_offset b8, -56
1436
+ ; CHECK-GI-NEXT: .cfi_offset b9, -64
1437
+ ; CHECK-GI-NEXT: mov x19, x2
1438
+ ; CHECK-GI-NEXT: mov x20, x3
1439
+ ; CHECK-GI-NEXT: mov x21, x4
1440
+ ; CHECK-GI-NEXT: mov x22, x5
1441
+ ; CHECK-GI-NEXT: bl __floatuntidf
1442
+ ; CHECK-GI-NEXT: mov x0, x19
1443
+ ; CHECK-GI-NEXT: mov x1, x20
1444
+ ; CHECK-GI-NEXT: fmov d8, d0
1445
+ ; CHECK-GI-NEXT: bl __floatuntidf
1446
+ ; CHECK-GI-NEXT: mov x0, x21
1447
+ ; CHECK-GI-NEXT: mov x1, x22
1448
+ ; CHECK-GI-NEXT: fmov d9, d0
1449
+ ; CHECK-GI-NEXT: bl __floatuntidf
1450
+ ; CHECK-GI-NEXT: ldp x20, x19, [sp, #48] // 16-byte Folded Reload
1451
+ ; CHECK-GI-NEXT: fmov d2, d0
1452
+ ; CHECK-GI-NEXT: ldp x22, x21, [sp, #32] // 16-byte Folded Reload
1453
+ ; CHECK-GI-NEXT: fmov d0, d8
1454
+ ; CHECK-GI-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload
1455
+ ; CHECK-GI-NEXT: fmov d1, d9
1456
+ ; CHECK-GI-NEXT: ldp d9, d8, [sp], #64 // 16-byte Folded Reload
1457
+ ; CHECK-GI-NEXT: ret
1458
+ entry:
1459
+ %c = uitofp <3 x i128 > %a to <3 x double >
1460
+ ret <3 x double > %c
1461
+ }
1462
+
1309
1463
define <2 x double > @stofp_v2i64_v2f64 (<2 x i64 > %a ) {
1310
1464
; CHECK-LABEL: stofp_v2i64_v2f64:
1311
1465
; CHECK: // %bb.0: // %entry
0 commit comments