@@ -1319,10 +1319,20 @@ entry:
13191319define <2 x i128 > @and_v2i128 (<2 x i128 > %d , <2 x i128 > %e ) {
13201320; CHECK-SD-LABEL: and_v2i128:
13211321; CHECK-SD: // %bb.0: // %entry
1322- ; CHECK-SD-NEXT: and x2, x2, x6
1323- ; CHECK-SD-NEXT: and x0, x0, x4
1324- ; CHECK-SD-NEXT: and x1, x1, x5
1325- ; CHECK-SD-NEXT: and x3, x3, x7
1322+ ; CHECK-SD-NEXT: fmov d0, x4
1323+ ; CHECK-SD-NEXT: fmov d1, x0
1324+ ; CHECK-SD-NEXT: fmov d2, x6
1325+ ; CHECK-SD-NEXT: fmov d3, x2
1326+ ; CHECK-SD-NEXT: mov v0.d[1], x5
1327+ ; CHECK-SD-NEXT: mov v1.d[1], x1
1328+ ; CHECK-SD-NEXT: mov v2.d[1], x7
1329+ ; CHECK-SD-NEXT: mov v3.d[1], x3
1330+ ; CHECK-SD-NEXT: and v0.16b, v1.16b, v0.16b
1331+ ; CHECK-SD-NEXT: and v2.16b, v3.16b, v2.16b
1332+ ; CHECK-SD-NEXT: mov x1, v0.d[1]
1333+ ; CHECK-SD-NEXT: fmov x0, d0
1334+ ; CHECK-SD-NEXT: mov x3, v2.d[1]
1335+ ; CHECK-SD-NEXT: fmov x2, d2
13261336; CHECK-SD-NEXT: ret
13271337;
13281338; CHECK-GI-LABEL: and_v2i128:
@@ -1340,10 +1350,20 @@ entry:
13401350define <2 x i128 > @or_v2i128 (<2 x i128 > %d , <2 x i128 > %e ) {
13411351; CHECK-SD-LABEL: or_v2i128:
13421352; CHECK-SD: // %bb.0: // %entry
1343- ; CHECK-SD-NEXT: orr x2, x2, x6
1344- ; CHECK-SD-NEXT: orr x0, x0, x4
1345- ; CHECK-SD-NEXT: orr x1, x1, x5
1346- ; CHECK-SD-NEXT: orr x3, x3, x7
1353+ ; CHECK-SD-NEXT: fmov d0, x4
1354+ ; CHECK-SD-NEXT: fmov d1, x0
1355+ ; CHECK-SD-NEXT: fmov d2, x6
1356+ ; CHECK-SD-NEXT: fmov d3, x2
1357+ ; CHECK-SD-NEXT: mov v0.d[1], x5
1358+ ; CHECK-SD-NEXT: mov v1.d[1], x1
1359+ ; CHECK-SD-NEXT: mov v2.d[1], x7
1360+ ; CHECK-SD-NEXT: mov v3.d[1], x3
1361+ ; CHECK-SD-NEXT: orr v0.16b, v1.16b, v0.16b
1362+ ; CHECK-SD-NEXT: orr v2.16b, v3.16b, v2.16b
1363+ ; CHECK-SD-NEXT: mov x1, v0.d[1]
1364+ ; CHECK-SD-NEXT: fmov x0, d0
1365+ ; CHECK-SD-NEXT: mov x3, v2.d[1]
1366+ ; CHECK-SD-NEXT: fmov x2, d2
13471367; CHECK-SD-NEXT: ret
13481368;
13491369; CHECK-GI-LABEL: or_v2i128:
@@ -1361,10 +1381,20 @@ entry:
13611381define <2 x i128 > @xor_v2i128 (<2 x i128 > %d , <2 x i128 > %e ) {
13621382; CHECK-SD-LABEL: xor_v2i128:
13631383; CHECK-SD: // %bb.0: // %entry
1364- ; CHECK-SD-NEXT: eor x2, x2, x6
1365- ; CHECK-SD-NEXT: eor x0, x0, x4
1366- ; CHECK-SD-NEXT: eor x1, x1, x5
1367- ; CHECK-SD-NEXT: eor x3, x3, x7
1384+ ; CHECK-SD-NEXT: fmov d0, x4
1385+ ; CHECK-SD-NEXT: fmov d1, x0
1386+ ; CHECK-SD-NEXT: fmov d2, x6
1387+ ; CHECK-SD-NEXT: fmov d3, x2
1388+ ; CHECK-SD-NEXT: mov v0.d[1], x5
1389+ ; CHECK-SD-NEXT: mov v1.d[1], x1
1390+ ; CHECK-SD-NEXT: mov v2.d[1], x7
1391+ ; CHECK-SD-NEXT: mov v3.d[1], x3
1392+ ; CHECK-SD-NEXT: eor v0.16b, v1.16b, v0.16b
1393+ ; CHECK-SD-NEXT: eor v2.16b, v3.16b, v2.16b
1394+ ; CHECK-SD-NEXT: mov x1, v0.d[1]
1395+ ; CHECK-SD-NEXT: fmov x0, d0
1396+ ; CHECK-SD-NEXT: mov x3, v2.d[1]
1397+ ; CHECK-SD-NEXT: fmov x2, d2
13681398; CHECK-SD-NEXT: ret
13691399;
13701400; CHECK-GI-LABEL: xor_v2i128:
@@ -1382,14 +1412,29 @@ entry:
13821412define <3 x i128 > @and_v3i128 (<3 x i128 > %d , <3 x i128 > %e ) {
13831413; CHECK-SD-LABEL: and_v3i128:
13841414; CHECK-SD: // %bb.0: // %entry
1385- ; CHECK-SD-NEXT: ldp x8, x9, [sp]
1386- ; CHECK-SD-NEXT: and x0, x0, x6
1387- ; CHECK-SD-NEXT: ldp x11, x10, [sp, #16]
1388- ; CHECK-SD-NEXT: and x1, x1, x7
1389- ; CHECK-SD-NEXT: and x2, x2, x8
1390- ; CHECK-SD-NEXT: and x3, x3, x9
1391- ; CHECK-SD-NEXT: and x4, x4, x11
1392- ; CHECK-SD-NEXT: and x5, x5, x10
1415+ ; CHECK-SD-NEXT: fmov d0, x6
1416+ ; CHECK-SD-NEXT: fmov d1, x0
1417+ ; CHECK-SD-NEXT: ldr d2, [sp]
1418+ ; CHECK-SD-NEXT: fmov d3, x2
1419+ ; CHECK-SD-NEXT: fmov d5, x4
1420+ ; CHECK-SD-NEXT: ldr d4, [sp, #16]
1421+ ; CHECK-SD-NEXT: add x8, sp, #8
1422+ ; CHECK-SD-NEXT: add x9, sp, #24
1423+ ; CHECK-SD-NEXT: mov v0.d[1], x7
1424+ ; CHECK-SD-NEXT: mov v1.d[1], x1
1425+ ; CHECK-SD-NEXT: ld1 { v2.d }[1], [x8]
1426+ ; CHECK-SD-NEXT: mov v3.d[1], x3
1427+ ; CHECK-SD-NEXT: mov v5.d[1], x5
1428+ ; CHECK-SD-NEXT: ld1 { v4.d }[1], [x9]
1429+ ; CHECK-SD-NEXT: and v0.16b, v1.16b, v0.16b
1430+ ; CHECK-SD-NEXT: and v1.16b, v5.16b, v4.16b
1431+ ; CHECK-SD-NEXT: and v2.16b, v3.16b, v2.16b
1432+ ; CHECK-SD-NEXT: mov x1, v0.d[1]
1433+ ; CHECK-SD-NEXT: fmov x0, d0
1434+ ; CHECK-SD-NEXT: mov x3, v2.d[1]
1435+ ; CHECK-SD-NEXT: mov x5, v1.d[1]
1436+ ; CHECK-SD-NEXT: fmov x2, d2
1437+ ; CHECK-SD-NEXT: fmov x4, d1
13931438; CHECK-SD-NEXT: ret
13941439;
13951440; CHECK-GI-LABEL: and_v3i128:
@@ -1411,14 +1456,29 @@ entry:
14111456define <3 x i128 > @or_v3i128 (<3 x i128 > %d , <3 x i128 > %e ) {
14121457; CHECK-SD-LABEL: or_v3i128:
14131458; CHECK-SD: // %bb.0: // %entry
1414- ; CHECK-SD-NEXT: ldp x8, x9, [sp]
1415- ; CHECK-SD-NEXT: orr x0, x0, x6
1416- ; CHECK-SD-NEXT: ldp x11, x10, [sp, #16]
1417- ; CHECK-SD-NEXT: orr x1, x1, x7
1418- ; CHECK-SD-NEXT: orr x2, x2, x8
1419- ; CHECK-SD-NEXT: orr x3, x3, x9
1420- ; CHECK-SD-NEXT: orr x4, x4, x11
1421- ; CHECK-SD-NEXT: orr x5, x5, x10
1459+ ; CHECK-SD-NEXT: fmov d0, x6
1460+ ; CHECK-SD-NEXT: fmov d1, x0
1461+ ; CHECK-SD-NEXT: ldr d2, [sp]
1462+ ; CHECK-SD-NEXT: fmov d3, x2
1463+ ; CHECK-SD-NEXT: fmov d5, x4
1464+ ; CHECK-SD-NEXT: ldr d4, [sp, #16]
1465+ ; CHECK-SD-NEXT: add x8, sp, #8
1466+ ; CHECK-SD-NEXT: add x9, sp, #24
1467+ ; CHECK-SD-NEXT: mov v0.d[1], x7
1468+ ; CHECK-SD-NEXT: mov v1.d[1], x1
1469+ ; CHECK-SD-NEXT: ld1 { v2.d }[1], [x8]
1470+ ; CHECK-SD-NEXT: mov v3.d[1], x3
1471+ ; CHECK-SD-NEXT: mov v5.d[1], x5
1472+ ; CHECK-SD-NEXT: ld1 { v4.d }[1], [x9]
1473+ ; CHECK-SD-NEXT: orr v0.16b, v1.16b, v0.16b
1474+ ; CHECK-SD-NEXT: orr v1.16b, v5.16b, v4.16b
1475+ ; CHECK-SD-NEXT: orr v2.16b, v3.16b, v2.16b
1476+ ; CHECK-SD-NEXT: mov x1, v0.d[1]
1477+ ; CHECK-SD-NEXT: fmov x0, d0
1478+ ; CHECK-SD-NEXT: mov x3, v2.d[1]
1479+ ; CHECK-SD-NEXT: mov x5, v1.d[1]
1480+ ; CHECK-SD-NEXT: fmov x2, d2
1481+ ; CHECK-SD-NEXT: fmov x4, d1
14221482; CHECK-SD-NEXT: ret
14231483;
14241484; CHECK-GI-LABEL: or_v3i128:
@@ -1440,14 +1500,29 @@ entry:
14401500define <3 x i128 > @xor_v3i128 (<3 x i128 > %d , <3 x i128 > %e ) {
14411501; CHECK-SD-LABEL: xor_v3i128:
14421502; CHECK-SD: // %bb.0: // %entry
1443- ; CHECK-SD-NEXT: ldp x8, x9, [sp]
1444- ; CHECK-SD-NEXT: eor x0, x0, x6
1445- ; CHECK-SD-NEXT: ldp x11, x10, [sp, #16]
1446- ; CHECK-SD-NEXT: eor x1, x1, x7
1447- ; CHECK-SD-NEXT: eor x2, x2, x8
1448- ; CHECK-SD-NEXT: eor x3, x3, x9
1449- ; CHECK-SD-NEXT: eor x4, x4, x11
1450- ; CHECK-SD-NEXT: eor x5, x5, x10
1503+ ; CHECK-SD-NEXT: fmov d0, x6
1504+ ; CHECK-SD-NEXT: fmov d1, x0
1505+ ; CHECK-SD-NEXT: ldr d2, [sp]
1506+ ; CHECK-SD-NEXT: fmov d3, x2
1507+ ; CHECK-SD-NEXT: fmov d5, x4
1508+ ; CHECK-SD-NEXT: ldr d4, [sp, #16]
1509+ ; CHECK-SD-NEXT: add x8, sp, #8
1510+ ; CHECK-SD-NEXT: add x9, sp, #24
1511+ ; CHECK-SD-NEXT: mov v0.d[1], x7
1512+ ; CHECK-SD-NEXT: mov v1.d[1], x1
1513+ ; CHECK-SD-NEXT: ld1 { v2.d }[1], [x8]
1514+ ; CHECK-SD-NEXT: mov v3.d[1], x3
1515+ ; CHECK-SD-NEXT: mov v5.d[1], x5
1516+ ; CHECK-SD-NEXT: ld1 { v4.d }[1], [x9]
1517+ ; CHECK-SD-NEXT: eor v0.16b, v1.16b, v0.16b
1518+ ; CHECK-SD-NEXT: eor v1.16b, v5.16b, v4.16b
1519+ ; CHECK-SD-NEXT: eor v2.16b, v3.16b, v2.16b
1520+ ; CHECK-SD-NEXT: mov x1, v0.d[1]
1521+ ; CHECK-SD-NEXT: fmov x0, d0
1522+ ; CHECK-SD-NEXT: mov x3, v2.d[1]
1523+ ; CHECK-SD-NEXT: mov x5, v1.d[1]
1524+ ; CHECK-SD-NEXT: fmov x2, d2
1525+ ; CHECK-SD-NEXT: fmov x4, d1
14511526; CHECK-SD-NEXT: ret
14521527;
14531528; CHECK-GI-LABEL: xor_v3i128:
@@ -1469,18 +1544,38 @@ entry:
14691544define <4 x i128 > @and_v4i128 (<4 x i128 > %d , <4 x i128 > %e ) {
14701545; CHECK-SD-LABEL: and_v4i128:
14711546; CHECK-SD: // %bb.0: // %entry
1472- ; CHECK-SD-NEXT: ldp x9, x8, [sp, #32]
1473- ; CHECK-SD-NEXT: ldp x11, x10, [sp]
1474- ; CHECK-SD-NEXT: ldp x13, x12, [sp, #16]
1475- ; CHECK-SD-NEXT: ldp x15, x14, [sp, #48]
1476- ; CHECK-SD-NEXT: and x4, x4, x9
1477- ; CHECK-SD-NEXT: and x0, x0, x11
1478- ; CHECK-SD-NEXT: and x1, x1, x10
1479- ; CHECK-SD-NEXT: and x5, x5, x8
1480- ; CHECK-SD-NEXT: and x2, x2, x13
1481- ; CHECK-SD-NEXT: and x3, x3, x12
1482- ; CHECK-SD-NEXT: and x6, x6, x15
1483- ; CHECK-SD-NEXT: and x7, x7, x14
1547+ ; CHECK-SD-NEXT: ldr d0, [sp]
1548+ ; CHECK-SD-NEXT: fmov d2, x0
1549+ ; CHECK-SD-NEXT: fmov d3, x2
1550+ ; CHECK-SD-NEXT: fmov d5, x4
1551+ ; CHECK-SD-NEXT: fmov d7, x6
1552+ ; CHECK-SD-NEXT: add x8, sp, #8
1553+ ; CHECK-SD-NEXT: ldr d1, [sp, #16]
1554+ ; CHECK-SD-NEXT: ld1 { v0.d }[1], [x8]
1555+ ; CHECK-SD-NEXT: add x8, sp, #24
1556+ ; CHECK-SD-NEXT: ldr d4, [sp, #32]
1557+ ; CHECK-SD-NEXT: ldr d6, [sp, #48]
1558+ ; CHECK-SD-NEXT: mov v2.d[1], x1
1559+ ; CHECK-SD-NEXT: ld1 { v1.d }[1], [x8]
1560+ ; CHECK-SD-NEXT: mov v3.d[1], x3
1561+ ; CHECK-SD-NEXT: add x8, sp, #40
1562+ ; CHECK-SD-NEXT: mov v5.d[1], x5
1563+ ; CHECK-SD-NEXT: add x9, sp, #56
1564+ ; CHECK-SD-NEXT: mov v7.d[1], x7
1565+ ; CHECK-SD-NEXT: ld1 { v4.d }[1], [x8]
1566+ ; CHECK-SD-NEXT: ld1 { v6.d }[1], [x9]
1567+ ; CHECK-SD-NEXT: and v0.16b, v2.16b, v0.16b
1568+ ; CHECK-SD-NEXT: and v1.16b, v3.16b, v1.16b
1569+ ; CHECK-SD-NEXT: and v2.16b, v7.16b, v6.16b
1570+ ; CHECK-SD-NEXT: and v3.16b, v5.16b, v4.16b
1571+ ; CHECK-SD-NEXT: mov x1, v0.d[1]
1572+ ; CHECK-SD-NEXT: fmov x0, d0
1573+ ; CHECK-SD-NEXT: mov x3, v1.d[1]
1574+ ; CHECK-SD-NEXT: fmov x2, d1
1575+ ; CHECK-SD-NEXT: mov x5, v3.d[1]
1576+ ; CHECK-SD-NEXT: mov x7, v2.d[1]
1577+ ; CHECK-SD-NEXT: fmov x4, d3
1578+ ; CHECK-SD-NEXT: fmov x6, d2
14841579; CHECK-SD-NEXT: ret
14851580;
14861581; CHECK-GI-LABEL: and_v4i128:
@@ -1506,18 +1601,38 @@ entry:
15061601define <4 x i128 > @or_v4i128 (<4 x i128 > %d , <4 x i128 > %e ) {
15071602; CHECK-SD-LABEL: or_v4i128:
15081603; CHECK-SD: // %bb.0: // %entry
1509- ; CHECK-SD-NEXT: ldp x9, x8, [sp, #32]
1510- ; CHECK-SD-NEXT: ldp x11, x10, [sp]
1511- ; CHECK-SD-NEXT: ldp x13, x12, [sp, #16]
1512- ; CHECK-SD-NEXT: ldp x15, x14, [sp, #48]
1513- ; CHECK-SD-NEXT: orr x4, x4, x9
1514- ; CHECK-SD-NEXT: orr x0, x0, x11
1515- ; CHECK-SD-NEXT: orr x1, x1, x10
1516- ; CHECK-SD-NEXT: orr x5, x5, x8
1517- ; CHECK-SD-NEXT: orr x2, x2, x13
1518- ; CHECK-SD-NEXT: orr x3, x3, x12
1519- ; CHECK-SD-NEXT: orr x6, x6, x15
1520- ; CHECK-SD-NEXT: orr x7, x7, x14
1604+ ; CHECK-SD-NEXT: ldr d0, [sp]
1605+ ; CHECK-SD-NEXT: fmov d2, x0
1606+ ; CHECK-SD-NEXT: fmov d3, x2
1607+ ; CHECK-SD-NEXT: fmov d5, x4
1608+ ; CHECK-SD-NEXT: fmov d7, x6
1609+ ; CHECK-SD-NEXT: add x8, sp, #8
1610+ ; CHECK-SD-NEXT: ldr d1, [sp, #16]
1611+ ; CHECK-SD-NEXT: ld1 { v0.d }[1], [x8]
1612+ ; CHECK-SD-NEXT: add x8, sp, #24
1613+ ; CHECK-SD-NEXT: ldr d4, [sp, #32]
1614+ ; CHECK-SD-NEXT: ldr d6, [sp, #48]
1615+ ; CHECK-SD-NEXT: mov v2.d[1], x1
1616+ ; CHECK-SD-NEXT: ld1 { v1.d }[1], [x8]
1617+ ; CHECK-SD-NEXT: mov v3.d[1], x3
1618+ ; CHECK-SD-NEXT: add x8, sp, #40
1619+ ; CHECK-SD-NEXT: mov v5.d[1], x5
1620+ ; CHECK-SD-NEXT: add x9, sp, #56
1621+ ; CHECK-SD-NEXT: mov v7.d[1], x7
1622+ ; CHECK-SD-NEXT: ld1 { v4.d }[1], [x8]
1623+ ; CHECK-SD-NEXT: ld1 { v6.d }[1], [x9]
1624+ ; CHECK-SD-NEXT: orr v0.16b, v2.16b, v0.16b
1625+ ; CHECK-SD-NEXT: orr v1.16b, v3.16b, v1.16b
1626+ ; CHECK-SD-NEXT: orr v2.16b, v7.16b, v6.16b
1627+ ; CHECK-SD-NEXT: orr v3.16b, v5.16b, v4.16b
1628+ ; CHECK-SD-NEXT: mov x1, v0.d[1]
1629+ ; CHECK-SD-NEXT: fmov x0, d0
1630+ ; CHECK-SD-NEXT: mov x3, v1.d[1]
1631+ ; CHECK-SD-NEXT: fmov x2, d1
1632+ ; CHECK-SD-NEXT: mov x5, v3.d[1]
1633+ ; CHECK-SD-NEXT: mov x7, v2.d[1]
1634+ ; CHECK-SD-NEXT: fmov x4, d3
1635+ ; CHECK-SD-NEXT: fmov x6, d2
15211636; CHECK-SD-NEXT: ret
15221637;
15231638; CHECK-GI-LABEL: or_v4i128:
@@ -1543,18 +1658,38 @@ entry:
15431658define <4 x i128 > @xor_v4i128 (<4 x i128 > %d , <4 x i128 > %e ) {
15441659; CHECK-SD-LABEL: xor_v4i128:
15451660; CHECK-SD: // %bb.0: // %entry
1546- ; CHECK-SD-NEXT: ldp x9, x8, [sp, #32]
1547- ; CHECK-SD-NEXT: ldp x11, x10, [sp]
1548- ; CHECK-SD-NEXT: ldp x13, x12, [sp, #16]
1549- ; CHECK-SD-NEXT: ldp x15, x14, [sp, #48]
1550- ; CHECK-SD-NEXT: eor x4, x4, x9
1551- ; CHECK-SD-NEXT: eor x0, x0, x11
1552- ; CHECK-SD-NEXT: eor x1, x1, x10
1553- ; CHECK-SD-NEXT: eor x5, x5, x8
1554- ; CHECK-SD-NEXT: eor x2, x2, x13
1555- ; CHECK-SD-NEXT: eor x3, x3, x12
1556- ; CHECK-SD-NEXT: eor x6, x6, x15
1557- ; CHECK-SD-NEXT: eor x7, x7, x14
1661+ ; CHECK-SD-NEXT: ldr d0, [sp]
1662+ ; CHECK-SD-NEXT: fmov d2, x0
1663+ ; CHECK-SD-NEXT: fmov d3, x2
1664+ ; CHECK-SD-NEXT: fmov d5, x4
1665+ ; CHECK-SD-NEXT: fmov d7, x6
1666+ ; CHECK-SD-NEXT: add x8, sp, #8
1667+ ; CHECK-SD-NEXT: ldr d1, [sp, #16]
1668+ ; CHECK-SD-NEXT: ld1 { v0.d }[1], [x8]
1669+ ; CHECK-SD-NEXT: add x8, sp, #24
1670+ ; CHECK-SD-NEXT: ldr d4, [sp, #32]
1671+ ; CHECK-SD-NEXT: ldr d6, [sp, #48]
1672+ ; CHECK-SD-NEXT: mov v2.d[1], x1
1673+ ; CHECK-SD-NEXT: ld1 { v1.d }[1], [x8]
1674+ ; CHECK-SD-NEXT: mov v3.d[1], x3
1675+ ; CHECK-SD-NEXT: add x8, sp, #40
1676+ ; CHECK-SD-NEXT: mov v5.d[1], x5
1677+ ; CHECK-SD-NEXT: add x9, sp, #56
1678+ ; CHECK-SD-NEXT: mov v7.d[1], x7
1679+ ; CHECK-SD-NEXT: ld1 { v4.d }[1], [x8]
1680+ ; CHECK-SD-NEXT: ld1 { v6.d }[1], [x9]
1681+ ; CHECK-SD-NEXT: eor v0.16b, v2.16b, v0.16b
1682+ ; CHECK-SD-NEXT: eor v1.16b, v3.16b, v1.16b
1683+ ; CHECK-SD-NEXT: eor v2.16b, v7.16b, v6.16b
1684+ ; CHECK-SD-NEXT: eor v3.16b, v5.16b, v4.16b
1685+ ; CHECK-SD-NEXT: mov x1, v0.d[1]
1686+ ; CHECK-SD-NEXT: fmov x0, d0
1687+ ; CHECK-SD-NEXT: mov x3, v1.d[1]
1688+ ; CHECK-SD-NEXT: fmov x2, d1
1689+ ; CHECK-SD-NEXT: mov x5, v3.d[1]
1690+ ; CHECK-SD-NEXT: mov x7, v2.d[1]
1691+ ; CHECK-SD-NEXT: fmov x4, d3
1692+ ; CHECK-SD-NEXT: fmov x6, d2
15581693; CHECK-SD-NEXT: ret
15591694;
15601695; CHECK-GI-LABEL: xor_v4i128:
0 commit comments