Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(321)

Side by Side Diff: test/cctest/test-assembler-arm.cc

Issue 2868603002: [ARM] Improve VFP register moves. (Closed)
Patch Set: Rebase. Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/compiler/arm/code-generator-arm.cc ('k') | test/cctest/test-disasm-arm.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 1280 matching lines...) Expand 10 before | Expand all | Expand 10 after
1291 uint32_t vqmovn_s8[2], vqmovn_u16[2], vqmovn_s32[2]; 1291 uint32_t vqmovn_s8[2], vqmovn_u16[2], vqmovn_s32[2];
1292 int32_t vcvt_s32_f32[4]; 1292 int32_t vcvt_s32_f32[4];
1293 uint32_t vcvt_u32_f32[4]; 1293 uint32_t vcvt_u32_f32[4];
1294 float vcvt_f32_s32[4], vcvt_f32_u32[4]; 1294 float vcvt_f32_s32[4], vcvt_f32_u32[4];
1295 uint32_t vdup8[4], vdup16[4], vdup32[4]; 1295 uint32_t vdup8[4], vdup16[4], vdup32[4];
1296 float vabsf[4], vnegf[4]; 1296 float vabsf[4], vnegf[4];
1297 uint32_t vabs_s8[4], vabs_s16[4], vabs_s32[4]; 1297 uint32_t vabs_s8[4], vabs_s16[4], vabs_s32[4];
1298 uint32_t vneg_s8[4], vneg_s16[4], vneg_s32[4]; 1298 uint32_t vneg_s8[4], vneg_s16[4], vneg_s32[4];
1299 uint32_t veor[4], vand[4], vorr[4]; 1299 uint32_t veor[4], vand[4], vorr[4];
1300 float vdupf[4], vaddf[4], vpaddf[2], vsubf[4], vmulf[4]; 1300 float vdupf[4], vaddf[4], vpaddf[2], vsubf[4], vmulf[4];
1301 uint32_t vdupf_16[2], vdupf_8[4];
1301 uint32_t vmin_s8[4], vmin_u16[4], vmin_s32[4]; 1302 uint32_t vmin_s8[4], vmin_u16[4], vmin_s32[4];
1302 uint32_t vmax_s8[4], vmax_u16[4], vmax_s32[4]; 1303 uint32_t vmax_s8[4], vmax_u16[4], vmax_s32[4];
1303 uint32_t vpadd_i8[2], vpadd_i16[2], vpadd_i32[2]; 1304 uint32_t vpadd_i8[2], vpadd_i16[2], vpadd_i32[2];
1304 uint32_t vpmin_s8[2], vpmin_u16[2], vpmin_s32[2]; 1305 uint32_t vpmin_s8[2], vpmin_u16[2], vpmin_s32[2];
1305 uint32_t vpmax_s8[2], vpmax_u16[2], vpmax_s32[2]; 1306 uint32_t vpmax_s8[2], vpmax_u16[2], vpmax_s32[2];
1306 uint32_t vadd8[4], vadd16[4], vadd32[4]; 1307 uint32_t vadd8[4], vadd16[4], vadd32[4];
1307 uint32_t vqadd_s8[4], vqadd_u16[4], vqadd_s32[4]; 1308 uint32_t vqadd_s8[4], vqadd_u16[4], vqadd_s32[4];
1308 uint32_t vsub8[4], vsub16[4], vsub32[4]; 1309 uint32_t vsub8[4], vsub16[4], vsub32[4];
1309 uint32_t vqsub_u8[4], vqsub_s16[4], vqsub_u32[4]; 1310 uint32_t vqsub_u8[4], vqsub_s16[4], vqsub_u32[4];
1310 uint32_t vmul8[4], vmul16[4], vmul32[4]; 1311 uint32_t vmul8[4], vmul16[4], vmul32[4];
1311 uint32_t vshl8[4], vshl16[4], vshl32[5]; 1312 uint32_t vshl8[4], vshl16[4], vshl32[5];
1312 uint32_t vshr_s8[4], vshr_u16[4], vshr_s32[5]; 1313 uint32_t vshr_s8[4], vshr_u16[4], vshr_s32[5];
1314 uint32_t vsli_64[2], vsri_64[2], vsli_32[2], vsri_32[2];
1313 uint32_t vceq[4], vceqf[4], vcgef[4], vcgtf[4]; 1315 uint32_t vceq[4], vceqf[4], vcgef[4], vcgtf[4];
1314 uint32_t vcge_s8[4], vcge_u16[4], vcge_s32[4]; 1316 uint32_t vcge_s8[4], vcge_u16[4], vcge_s32[4];
1315 uint32_t vcgt_s8[4], vcgt_u16[4], vcgt_s32[4]; 1317 uint32_t vcgt_s8[4], vcgt_u16[4], vcgt_s32[4];
1316 float vrecpe[4], vrecps[4], vrsqrte[4], vrsqrts[4]; 1318 float vrecpe[4], vrecps[4], vrsqrte[4], vrsqrts[4];
1317 float vminf[4], vmaxf[4]; 1319 float vminf[4], vmaxf[4];
1318 uint32_t vtst[4], vbsl[4]; 1320 uint32_t vtst[4], vbsl[4];
1319 uint32_t vext[4]; 1321 uint32_t vext[4];
1320 uint32_t vzip8a[4], vzip8b[4], vzip16a[4], vzip16b[4], vzip32a[4], 1322 uint32_t vzip8a[4], vzip8b[4], vzip16a[4], vzip16b[4], vzip32a[4],
1321 vzip32b[4]; 1323 vzip32b[4];
1322 uint32_t vzipd8a[2], vzipd8b[2], vzipd16a[2], vzipd16b[2]; 1324 uint32_t vzipd8a[2], vzipd8b[2], vzipd16a[2], vzipd16b[2];
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
1433 __ mov(r4, Operand(kMaxUInt32)); 1435 __ mov(r4, Operand(kMaxUInt32));
1434 __ mov(r5, Operand(kMinInt + 1)); 1436 __ mov(r5, Operand(kMinInt + 1));
1435 __ vmov(d1, r4, r5); // q0 = [kMinInt, kMaxInt, kMaxUInt32, kMinInt + 1] 1437 __ vmov(d1, r4, r5); // q0 = [kMinInt, kMaxInt, kMaxUInt32, kMinInt + 1]
1436 __ vcvt_f32_s32(q1, q0); 1438 __ vcvt_f32_s32(q1, q0);
1437 __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vcvt_f32_s32)))); 1439 __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vcvt_f32_s32))));
1438 __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4)); 1440 __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4));
1439 __ vcvt_f32_u32(q1, q0); 1441 __ vcvt_f32_u32(q1, q0);
1440 __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vcvt_f32_u32)))); 1442 __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vcvt_f32_u32))));
1441 __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4)); 1443 __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4));
1442 1444
1443 // vdup (integer). 1445 // vdup (from register).
1444 __ mov(r4, Operand(0xa)); 1446 __ mov(r4, Operand(0xa));
1445 __ vdup(Neon8, q0, r4); 1447 __ vdup(Neon8, q0, r4);
1446 __ vdup(Neon16, q1, r4); 1448 __ vdup(Neon16, q1, r4);
1447 __ vdup(Neon32, q2, r4); 1449 __ vdup(Neon32, q2, r4);
1448 __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vdup8)))); 1450 __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vdup8))));
1449 __ vst1(Neon8, NeonListOperand(q0), NeonMemOperand(r4)); 1451 __ vst1(Neon8, NeonListOperand(q0), NeonMemOperand(r4));
1450 __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vdup16)))); 1452 __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vdup16))));
1451 __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4)); 1453 __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4));
1452 __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vdup32)))); 1454 __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vdup32))));
1453 __ vst1(Neon8, NeonListOperand(q2), NeonMemOperand(r4)); 1455 __ vst1(Neon8, NeonListOperand(q2), NeonMemOperand(r4));
1454 1456
1455 // vdup (float). 1457 // vdup (from scalar).
1456 __ vmov(s0, -1.0); 1458 __ vmov(s0, -1.0);
1457 __ vdup(q0, s0); 1459 __ vdup(Neon32, q1, d0, 0);
1458 __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vdupf)))); 1460 __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vdupf))));
1459 __ vst1(Neon8, NeonListOperand(q0), NeonMemOperand(r4)); 1461 __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4));
1462 __ vdup(Neon16, d2, d0, 1);
1463 __ vstr(d2, r0, offsetof(T, vdupf_16));
1464 __ vdup(Neon8, q1, d0, 3);
1465 __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vdupf_8))));
1466 __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4));
1460 1467
1461 // vabs (float). 1468 // vabs (float).
1462 __ vmov(s0, -1.0); 1469 __ vmov(s0, -1.0);
1463 __ vmov(s1, -0.0); 1470 __ vmov(s1, -0.0);
1464 __ vmov(s2, 0.0); 1471 __ vmov(s2, 0.0);
1465 __ vmov(s3, 1.0); 1472 __ vmov(s3, 1.0);
1466 __ vabs(q1, q0); 1473 __ vabs(q1, q0);
1467 __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vabsf)))); 1474 __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vabsf))));
1468 __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4)); 1475 __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4));
1469 // vneg (float). 1476 // vneg (float).
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
1518 __ mov(r4, Operand(0xaa)); 1525 __ mov(r4, Operand(0xaa));
1519 __ vdup(Neon16, q0, r4); 1526 __ vdup(Neon16, q0, r4);
1520 __ mov(r4, Operand(0x55)); 1527 __ mov(r4, Operand(0x55));
1521 __ vdup(Neon16, q1, r4); 1528 __ vdup(Neon16, q1, r4);
1522 __ vorr(q1, q1, q0); 1529 __ vorr(q1, q1, q0);
1523 __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vorr)))); 1530 __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vorr))));
1524 __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4)); 1531 __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4));
1525 1532
1526 // vmin (float). 1533 // vmin (float).
1527 __ vmov(s4, 2.0); 1534 __ vmov(s4, 2.0);
1528 __ vdup(q0, s4); 1535 __ vdup(Neon32, q0, d2, 0);
1529 __ vmov(s4, 1.0); 1536 __ vmov(s4, 1.0);
1530 __ vdup(q1, s4); 1537 __ vdup(Neon32, q1, d2, 0);
1531 __ vmin(q1, q1, q0); 1538 __ vmin(q1, q1, q0);
1532 __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vminf)))); 1539 __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vminf))));
1533 __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4)); 1540 __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4));
1534 // vmax (float). 1541 // vmax (float).
1535 __ vmov(s4, 2.0); 1542 __ vmov(s4, 2.0);
1536 __ vdup(q0, s4); 1543 __ vdup(Neon32, q0, d2, 0);
1537 __ vmov(s4, 1.0); 1544 __ vmov(s4, 1.0);
1538 __ vdup(q1, s4); 1545 __ vdup(Neon32, q1, d2, 0);
1539 __ vmax(q1, q1, q0); 1546 __ vmax(q1, q1, q0);
1540 __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vmaxf)))); 1547 __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vmaxf))));
1541 __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4)); 1548 __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4));
1542 // vadd (float). 1549 // vadd (float).
1543 __ vmov(s4, 1.0); 1550 __ vmov(s4, 1.0);
1544 __ vdup(q0, s4); 1551 __ vdup(Neon32, q0, d2, 0);
1545 __ vdup(q1, s4); 1552 __ vdup(Neon32, q1, d2, 0);
1546 __ vadd(q1, q1, q0); 1553 __ vadd(q1, q1, q0);
1547 __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vaddf)))); 1554 __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vaddf))));
1548 __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4)); 1555 __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4));
1549 // vpadd (float). 1556 // vpadd (float).
1550 __ vmov(s0, 1.0); 1557 __ vmov(s0, 1.0);
1551 __ vmov(s1, 2.0); 1558 __ vmov(s1, 2.0);
1552 __ vmov(s2, 3.0); 1559 __ vmov(s2, 3.0);
1553 __ vmov(s3, 4.0); 1560 __ vmov(s3, 4.0);
1554 __ vpadd(d2, d0, d1); 1561 __ vpadd(d2, d0, d1);
1555 __ vstr(d2, r0, offsetof(T, vpaddf)); 1562 __ vstr(d2, r0, offsetof(T, vpaddf));
1556 // vsub (float). 1563 // vsub (float).
1557 __ vmov(s4, 2.0); 1564 __ vmov(s4, 2.0);
1558 __ vdup(q0, s4); 1565 __ vdup(Neon32, q0, d2, 0);
1559 __ vmov(s4, 1.0); 1566 __ vmov(s4, 1.0);
1560 __ vdup(q1, s4); 1567 __ vdup(Neon32, q1, d2, 0);
1561 __ vsub(q1, q1, q0); 1568 __ vsub(q1, q1, q0);
1562 __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vsubf)))); 1569 __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vsubf))));
1563 __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4)); 1570 __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4));
1564 // vmul (float). 1571 // vmul (float).
1565 __ vmov(s4, 2.0); 1572 __ vmov(s4, 2.0);
1566 __ vdup(q0, s4); 1573 __ vdup(Neon32, q0, d2, 0);
1567 __ vdup(q1, s4); 1574 __ vdup(Neon32, q1, d2, 0);
1568 __ vmul(q1, q1, q0); 1575 __ vmul(q1, q1, q0);
1569 __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vmulf)))); 1576 __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vmulf))));
1570 __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4)); 1577 __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4));
1571 // vrecpe. 1578 // vrecpe.
1572 __ vmov(s4, 2.0); 1579 __ vmov(s4, 2.0);
1573 __ vdup(q0, s4); 1580 __ vdup(Neon32, q0, d2, 0);
1574 __ vrecpe(q1, q0); 1581 __ vrecpe(q1, q0);
1575 __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vrecpe)))); 1582 __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vrecpe))));
1576 __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4)); 1583 __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4));
1577 // vrecps. 1584 // vrecps.
1578 __ vmov(s4, 2.0); 1585 __ vmov(s4, 2.0);
1579 __ vdup(q0, s4); 1586 __ vdup(Neon32, q0, d2, 0);
1580 __ vmov(s4, 1.5); 1587 __ vmov(s4, 1.5);
1581 __ vdup(q1, s4); 1588 __ vdup(Neon32, q1, d2, 0);
1582 __ vrecps(q1, q0, q1); 1589 __ vrecps(q1, q0, q1);
1583 __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vrecps)))); 1590 __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vrecps))));
1584 __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4)); 1591 __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4));
1585 // vrsqrte. 1592 // vrsqrte.
1586 __ vmov(s4, 4.0); 1593 __ vmov(s4, 4.0);
1587 __ vdup(q0, s4); 1594 __ vdup(Neon32, q0, d2, 0);
1588 __ vrsqrte(q1, q0); 1595 __ vrsqrte(q1, q0);
1589 __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vrsqrte)))); 1596 __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vrsqrte))));
1590 __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4)); 1597 __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4));
1591 // vrsqrts. 1598 // vrsqrts.
1592 __ vmov(s4, 2.0); 1599 __ vmov(s4, 2.0);
1593 __ vdup(q0, s4); 1600 __ vdup(Neon32, q0, d2, 0);
1594 __ vmov(s4, 2.5); 1601 __ vmov(s4, 2.5);
1595 __ vdup(q1, s4); 1602 __ vdup(Neon32, q1, d2, 0);
1596 __ vrsqrts(q1, q0, q1); 1603 __ vrsqrts(q1, q0, q1);
1597 __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vrsqrts)))); 1604 __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vrsqrts))));
1598 __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4)); 1605 __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4));
1599 // vceq (float). 1606 // vceq (float).
1600 __ vmov(s4, 1.0); 1607 __ vmov(s4, 1.0);
1601 __ vdup(q0, s4); 1608 __ vdup(Neon32, q0, d2, 0);
1602 __ vdup(q1, s4); 1609 __ vdup(Neon32, q1, d2, 0);
1603 __ vceq(q1, q1, q0); 1610 __ vceq(q1, q1, q0);
1604 __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vceqf)))); 1611 __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vceqf))));
1605 __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4)); 1612 __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4));
1606 // vcge (float). 1613 // vcge (float).
1607 __ vmov(s0, 1.0); 1614 __ vmov(s0, 1.0);
1608 __ vmov(s1, -1.0); 1615 __ vmov(s1, -1.0);
1609 __ vmov(s2, -0.0); 1616 __ vmov(s2, -0.0);
1610 __ vmov(s3, 0.0); 1617 __ vmov(s3, 0.0);
1611 __ vdup(q1, s3); 1618 __ vdup(Neon32, q1, d1, 1);
1612 __ vcge(q2, q1, q0); 1619 __ vcge(q2, q1, q0);
1613 __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vcgef)))); 1620 __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vcgef))));
1614 __ vst1(Neon8, NeonListOperand(q2), NeonMemOperand(r4)); 1621 __ vst1(Neon8, NeonListOperand(q2), NeonMemOperand(r4));
1615 __ vcgt(q2, q1, q0); 1622 __ vcgt(q2, q1, q0);
1616 __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vcgtf)))); 1623 __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vcgtf))));
1617 __ vst1(Neon8, NeonListOperand(q2), NeonMemOperand(r4)); 1624 __ vst1(Neon8, NeonListOperand(q2), NeonMemOperand(r4));
1618 1625
1619 // vmin/vmax integer. 1626 // vmin/vmax integer.
1620 __ mov(r4, Operand(0x03)); 1627 __ mov(r4, Operand(0x03));
1621 __ vdup(Neon16, q0, r4); 1628 __ vdup(Neon16, q0, r4);
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
1807 __ vshr(NeonS8, q1, q0, 1); 1814 __ vshr(NeonS8, q1, q0, 1);
1808 __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vshr_s8)))); 1815 __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vshr_s8))));
1809 __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4)); 1816 __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4));
1810 __ vshr(NeonU16, q1, q0, 9); 1817 __ vshr(NeonU16, q1, q0, 9);
1811 __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vshr_u16)))); 1818 __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vshr_u16))));
1812 __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4)); 1819 __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4));
1813 __ vshr(NeonS32, q1, q0, 17); 1820 __ vshr(NeonS32, q1, q0, 17);
1814 __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vshr_s32)))); 1821 __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vshr_s32))));
1815 __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4)); 1822 __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4));
1816 1823
1824 // vsli, vsri.
1825 __ mov(r4, Operand(0xffffffff));
1826 __ mov(r5, Operand(0x1));
1827 __ vmov(d0, r4, r5);
1828 __ vmov(d1, r5, r5);
1829 __ vsli(Neon64, d1, d0, 32);
1830 __ vstr(d1, r0, offsetof(T, vsli_64));
1831 __ vmov(d0, r5, r4);
1832 __ vmov(d1, r5, r5);
1833 __ vsri(Neon64, d1, d0, 32);
1834 __ vstr(d1, r0, offsetof(T, vsri_64));
1835 __ vmov(d0, r4, r5);
1836 __ vmov(d1, r5, r5);
1837 __ vsli(Neon32, d1, d0, 16);
1838 __ vstr(d1, r0, offsetof(T, vsli_32));
1839 __ vmov(d0, r5, r4);
1840 __ vmov(d1, r5, r5);
1841 __ vsri(Neon32, d1, d0, 16);
1842 __ vstr(d1, r0, offsetof(T, vsri_32));
1843
1817 // vceq. 1844 // vceq.
1818 __ mov(r4, Operand(0x03)); 1845 __ mov(r4, Operand(0x03));
1819 __ vdup(Neon8, q0, r4); 1846 __ vdup(Neon8, q0, r4);
1820 __ vdup(Neon16, q1, r4); 1847 __ vdup(Neon16, q1, r4);
1821 __ vceq(Neon8, q1, q0, q1); 1848 __ vceq(Neon8, q1, q0, q1);
1822 __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vceq)))); 1849 __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vceq))));
1823 __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4)); 1850 __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4));
1824 1851
1825 // vcge/vcgt (integer). 1852 // vcge/vcgt (integer).
1826 __ mov(r4, Operand(0x03)); 1853 __ mov(r4, Operand(0x03));
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after
2100 CHECK_EQ(0xFFFFFFFFu, t.vmov_from_scalar_s16); 2127 CHECK_EQ(0xFFFFFFFFu, t.vmov_from_scalar_s16);
2101 CHECK_EQ(0xFFFFu, t.vmov_from_scalar_u16); 2128 CHECK_EQ(0xFFFFu, t.vmov_from_scalar_u16);
2102 CHECK_EQ(0xFFFFFFFFu, t.vmov_from_scalar_32); 2129 CHECK_EQ(0xFFFFFFFFu, t.vmov_from_scalar_32);
2103 2130
2104 CHECK_EQ_32X4(vmov, 0x03020100u, 0x07060504u, 0x0b0a0908u, 0x0f0e0d0cu); 2131 CHECK_EQ_32X4(vmov, 0x03020100u, 0x07060504u, 0x0b0a0908u, 0x0f0e0d0cu);
2105 CHECK_EQ_32X4(vmvn, 0xfcfdfeffu, 0xf8f9fafbu, 0xf4f5f6f7u, 0xf0f1f2f3u); 2132 CHECK_EQ_32X4(vmvn, 0xfcfdfeffu, 0xf8f9fafbu, 0xf4f5f6f7u, 0xf0f1f2f3u);
2106 2133
2107 CHECK_EQ_SPLAT(vdup8, 0x0a0a0a0au); 2134 CHECK_EQ_SPLAT(vdup8, 0x0a0a0a0au);
2108 CHECK_EQ_SPLAT(vdup16, 0x000a000au); 2135 CHECK_EQ_SPLAT(vdup16, 0x000a000au);
2109 CHECK_EQ_SPLAT(vdup32, 0x0000000au); 2136 CHECK_EQ_SPLAT(vdup32, 0x0000000au);
2110 CHECK_EQ_SPLAT(vdupf, -1.0); 2137 CHECK_EQ_SPLAT(vdupf, -1.0); // bit pattern is 0xbf800000.
2138 CHECK_EQ_32X2(vdupf_16, 0xbf80bf80u, 0xbf80bf80u);
2139 CHECK_EQ_SPLAT(vdupf_8, 0xbfbfbfbfu);
2111 2140
2112 // src: [-1, -1, 1, 1] 2141 // src: [-1, -1, 1, 1]
2113 CHECK_EQ_32X4(vcvt_s32_f32, -1, -1, 1, 1); 2142 CHECK_EQ_32X4(vcvt_s32_f32, -1, -1, 1, 1);
2114 CHECK_EQ_32X4(vcvt_u32_f32, 0u, 0u, 1u, 1u); 2143 CHECK_EQ_32X4(vcvt_u32_f32, 0u, 0u, 1u, 1u);
2115 // src: [kMinInt, kMaxInt, kMaxUInt32, kMinInt + 1] 2144 // src: [kMinInt, kMaxInt, kMaxUInt32, kMinInt + 1]
2116 CHECK_EQ_32X4(vcvt_f32_s32, INT32_TO_FLOAT(kMinInt), 2145 CHECK_EQ_32X4(vcvt_f32_s32, INT32_TO_FLOAT(kMinInt),
2117 INT32_TO_FLOAT(kMaxInt), INT32_TO_FLOAT(kMaxUInt32), 2146 INT32_TO_FLOAT(kMaxInt), INT32_TO_FLOAT(kMaxUInt32),
2118 INT32_TO_FLOAT(kMinInt + 1)); 2147 INT32_TO_FLOAT(kMinInt + 1));
2119 CHECK_EQ_32X4(vcvt_f32_u32, UINT32_TO_FLOAT(kMinInt), 2148 CHECK_EQ_32X4(vcvt_f32_u32, UINT32_TO_FLOAT(kMinInt),
2120 UINT32_TO_FLOAT(kMaxInt), UINT32_TO_FLOAT(kMaxUInt32), 2149 UINT32_TO_FLOAT(kMaxInt), UINT32_TO_FLOAT(kMaxUInt32),
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
2182 CHECK_EQ_SPLAT(vsub32, 0xfffffffeu); 2211 CHECK_EQ_SPLAT(vsub32, 0xfffffffeu);
2183 CHECK_EQ_SPLAT(vmul8, 0x04040404u); 2212 CHECK_EQ_SPLAT(vmul8, 0x04040404u);
2184 CHECK_EQ_SPLAT(vmul16, 0x00040004u); 2213 CHECK_EQ_SPLAT(vmul16, 0x00040004u);
2185 CHECK_EQ_SPLAT(vmul32, 0x00000004u); 2214 CHECK_EQ_SPLAT(vmul32, 0x00000004u);
2186 CHECK_EQ_SPLAT(vshl8, 0xaaaaaaaau); 2215 CHECK_EQ_SPLAT(vshl8, 0xaaaaaaaau);
2187 CHECK_EQ_SPLAT(vshl16, 0xaa00aa00u); 2216 CHECK_EQ_SPLAT(vshl16, 0xaa00aa00u);
2188 CHECK_EQ_SPLAT(vshl32, 0xaaaa0000u); 2217 CHECK_EQ_SPLAT(vshl32, 0xaaaa0000u);
2189 CHECK_EQ_SPLAT(vshr_s8, 0xc0c0c0c0u); 2218 CHECK_EQ_SPLAT(vshr_s8, 0xc0c0c0c0u);
2190 CHECK_EQ_SPLAT(vshr_u16, 0x00400040u); 2219 CHECK_EQ_SPLAT(vshr_u16, 0x00400040u);
2191 CHECK_EQ_SPLAT(vshr_s32, 0xffffc040u); 2220 CHECK_EQ_SPLAT(vshr_s32, 0xffffc040u);
2221 CHECK_EQ_32X2(vsli_64, 0x01u, 0xffffffffu);
2222 CHECK_EQ_32X2(vsri_64, 0xffffffffu, 0x01u);
2223 CHECK_EQ_32X2(vsli_32, 0xffff0001u, 0x00010001u);
2224 CHECK_EQ_32X2(vsri_32, 0x00000000u, 0x0000ffffu);
2192 CHECK_EQ_SPLAT(vceq, 0x00ff00ffu); 2225 CHECK_EQ_SPLAT(vceq, 0x00ff00ffu);
2193 // [0, 3, 0, 3, ...] >= [3, 3, 3, 3, ...] 2226 // [0, 3, 0, 3, ...] >= [3, 3, 3, 3, ...]
2194 CHECK_EQ_SPLAT(vcge_s8, 0x00ff00ffu); 2227 CHECK_EQ_SPLAT(vcge_s8, 0x00ff00ffu);
2195 CHECK_EQ_SPLAT(vcgt_s8, 0u); 2228 CHECK_EQ_SPLAT(vcgt_s8, 0u);
2196 // [0x00ff, 0x00ff, ...] >= [0xffff, 0xffff, ...] 2229 // [0x00ff, 0x00ff, ...] >= [0xffff, 0xffff, ...]
2197 CHECK_EQ_SPLAT(vcge_u16, 0u); 2230 CHECK_EQ_SPLAT(vcge_u16, 0u);
2198 CHECK_EQ_SPLAT(vcgt_u16, 0u); 2231 CHECK_EQ_SPLAT(vcgt_u16, 0u);
2199 // [0x000000ff, 0x000000ff, ...] >= [0xffffffff, 0xffffffff, ...] 2232 // [0x000000ff, 0x000000ff, ...] >= [0xffffffff, 0xffffffff, ...]
2200 CHECK_EQ_SPLAT(vcge_s32, 0xffffffffu); 2233 CHECK_EQ_SPLAT(vcge_s32, 0xffffffffu);
2201 CHECK_EQ_SPLAT(vcgt_s32, 0xffffffffu); 2234 CHECK_EQ_SPLAT(vcgt_s32, 0xffffffffu);
(...skipping 1631 matching lines...) Expand 10 before | Expand all | Expand 10 after
3833 __ vswp(d30, d31); 3866 __ vswp(d30, d31);
3834 __ vstr(d30, r0, offsetof(T, vswp_d30)); 3867 __ vstr(d30, r0, offsetof(T, vswp_d30));
3835 __ vstr(d31, r0, offsetof(T, vswp_d31)); 3868 __ vstr(d31, r0, offsetof(T, vswp_d31));
3836 } 3869 }
3837 3870
3838 // q-register swap. 3871 // q-register swap.
3839 const uint32_t test_1 = 0x01234567; 3872 const uint32_t test_1 = 0x01234567;
3840 const uint32_t test_2 = 0x89abcdef; 3873 const uint32_t test_2 = 0x89abcdef;
3841 __ mov(r4, Operand(test_1)); 3874 __ mov(r4, Operand(test_1));
3842 __ mov(r5, Operand(test_2)); 3875 __ mov(r5, Operand(test_2));
3843 // TODO(bbudge) replace with vdup when implemented. 3876 __ vdup(Neon32, q4, r4);
3844 __ vmov(d8, r4, r4); 3877 __ vdup(Neon32, q5, r5);
3845 __ vmov(d9, r4, r4); // q4 = [1.0, 1.0]
3846 __ vmov(d10, r5, r5);
3847 __ vmov(d11, r5, r5); // q5 = [-1.0, -1.0]
3848 __ vswp(q4, q5); 3878 __ vswp(q4, q5);
3849 __ add(r6, r0, Operand(static_cast<int32_t>(offsetof(T, vswp_q4)))); 3879 __ add(r6, r0, Operand(static_cast<int32_t>(offsetof(T, vswp_q4))));
3850 __ vst1(Neon8, NeonListOperand(q4), NeonMemOperand(r6)); 3880 __ vst1(Neon8, NeonListOperand(q4), NeonMemOperand(r6));
3851 __ add(r6, r0, Operand(static_cast<int32_t>(offsetof(T, vswp_q5)))); 3881 __ add(r6, r0, Operand(static_cast<int32_t>(offsetof(T, vswp_q5))));
3852 __ vst1(Neon8, NeonListOperand(q5), NeonMemOperand(r6)); 3882 __ vst1(Neon8, NeonListOperand(q5), NeonMemOperand(r6));
3853 3883
3854 __ ldm(ia_w, sp, r4.bit() | r5.bit() | r6.bit() | r7.bit() | pc.bit()); 3884 __ ldm(ia_w, sp, r4.bit() | r5.bit() | r6.bit() | r7.bit() | pc.bit());
3855 __ bx(lr); 3885 __ bx(lr);
3856 3886
3857 CodeDesc desc; 3887 CodeDesc desc;
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
3932 HandleScope scope(isolate); 3962 HandleScope scope(isolate);
3933 3963
3934 Assembler assm(isolate, NULL, 0); 3964 Assembler assm(isolate, NULL, 0);
3935 __ mov(r0, Operand(isolate->factory()->infinity_value())); 3965 __ mov(r0, Operand(isolate->factory()->infinity_value()));
3936 __ BlockConstPoolFor(1019); 3966 __ BlockConstPoolFor(1019);
3937 for (int i = 0; i < 1019; ++i) __ nop(); 3967 for (int i = 0; i < 1019; ++i) __ nop();
3938 __ vldr(d0, MemOperand(r0, 0)); 3968 __ vldr(d0, MemOperand(r0, 0));
3939 } 3969 }
3940 3970
3941 #undef __ 3971 #undef __
OLDNEW
« no previous file with comments | « src/compiler/arm/code-generator-arm.cc ('k') | test/cctest/test-disasm-arm.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698