diff options
author | Myles Borins <mylesborins@google.com> | 2017-08-01 11:36:44 -0500 |
---|---|---|
committer | Myles Borins <mylesborins@google.com> | 2017-08-01 15:23:15 -0500 |
commit | 0a66b223e149a841669bfad5598e4254589730cb (patch) | |
tree | 5ec050f7f78aafbf5b1e0e50d639fb843141e162 /deps/v8/test/cctest/test-assembler-arm.cc | |
parent | 1782b3836ba58ef0da6b687f2bb970c0bd8199ad (diff) | |
download | android-node-v8-0a66b223e149a841669bfad5598e4254589730cb.tar.gz android-node-v8-0a66b223e149a841669bfad5598e4254589730cb.tar.bz2 android-node-v8-0a66b223e149a841669bfad5598e4254589730cb.zip |
deps: update V8 to 6.0.286.52
PR-URL: https://github.com/nodejs/node/pull/14004
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Franziska Hinkelmann <franziska.hinkelmann@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Diffstat (limited to 'deps/v8/test/cctest/test-assembler-arm.cc')
-rw-r--r-- | deps/v8/test/cctest/test-assembler-arm.cc | 113 |
1 files changed, 83 insertions, 30 deletions
diff --git a/deps/v8/test/cctest/test-assembler-arm.cc b/deps/v8/test/cctest/test-assembler-arm.cc index 056dd9ffa5..44b35f8d46 100644 --- a/deps/v8/test/cctest/test-assembler-arm.cc +++ b/deps/v8/test/cctest/test-assembler-arm.cc @@ -1297,9 +1297,11 @@ TEST(15) { uint32_t vabs_s8[4], vabs_s16[4], vabs_s32[4]; uint32_t vneg_s8[4], vneg_s16[4], vneg_s32[4]; uint32_t veor[4], vand[4], vorr[4]; - float vdupf[4], vaddf[4], vsubf[4], vmulf[4]; + float vdupf[4], vaddf[4], vpaddf[2], vsubf[4], vmulf[4]; + uint32_t vdupf_16[2], vdupf_8[4]; uint32_t vmin_s8[4], vmin_u16[4], vmin_s32[4]; uint32_t vmax_s8[4], vmax_u16[4], vmax_s32[4]; + uint32_t vpadd_i8[2], vpadd_i16[2], vpadd_i32[2]; uint32_t vpmin_s8[2], vpmin_u16[2], vpmin_s32[2]; uint32_t vpmax_s8[2], vpmax_u16[2], vpmax_s32[2]; uint32_t vadd8[4], vadd16[4], vadd32[4]; @@ -1309,6 +1311,7 @@ TEST(15) { uint32_t vmul8[4], vmul16[4], vmul32[4]; uint32_t vshl8[4], vshl16[4], vshl32[5]; uint32_t vshr_s8[4], vshr_u16[4], vshr_s32[5]; + uint32_t vsli_64[2], vsri_64[2], vsli_32[2], vsri_32[2]; uint32_t vceq[4], vceqf[4], vcgef[4], vcgtf[4]; uint32_t vcge_s8[4], vcge_u16[4], vcge_s32[4]; uint32_t vcgt_s8[4], vcgt_u16[4], vcgt_s32[4]; @@ -1439,7 +1442,7 @@ TEST(15) { __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vcvt_f32_u32)))); __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4)); - // vdup (integer). + // vdup (from register). __ mov(r4, Operand(0xa)); __ vdup(Neon8, q0, r4); __ vdup(Neon16, q1, r4); @@ -1451,11 +1454,16 @@ TEST(15) { __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vdup32)))); __ vst1(Neon8, NeonListOperand(q2), NeonMemOperand(r4)); - // vdup (float). + // vdup (from scalar). __ vmov(s0, -1.0); - __ vdup(q0, s0); + __ vdup(Neon32, q1, d0, 0); __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vdupf)))); - __ vst1(Neon8, NeonListOperand(q0), NeonMemOperand(r4)); + __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4)); + __ vdup(Neon16, d2, d0, 1); + __ vstr(d2, r0, offsetof(T, vdupf_16)); + __ vdup(Neon8, q1, d0, 3); + __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vdupf_8)))); + __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4)); // vabs (float). __ vmov(s0, -1.0); @@ -1524,74 +1532,81 @@ TEST(15) { // vmin (float). __ vmov(s4, 2.0); - __ vdup(q0, s4); + __ vdup(Neon32, q0, d2, 0); __ vmov(s4, 1.0); - __ vdup(q1, s4); + __ vdup(Neon32, q1, d2, 0); __ vmin(q1, q1, q0); __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vminf)))); __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4)); // vmax (float). __ vmov(s4, 2.0); - __ vdup(q0, s4); + __ vdup(Neon32, q0, d2, 0); __ vmov(s4, 1.0); - __ vdup(q1, s4); + __ vdup(Neon32, q1, d2, 0); __ vmax(q1, q1, q0); __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vmaxf)))); __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4)); // vadd (float). __ vmov(s4, 1.0); - __ vdup(q0, s4); - __ vdup(q1, s4); + __ vdup(Neon32, q0, d2, 0); + __ vdup(Neon32, q1, d2, 0); __ vadd(q1, q1, q0); __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vaddf)))); __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4)); + // vpadd (float). + __ vmov(s0, 1.0); + __ vmov(s1, 2.0); + __ vmov(s2, 3.0); + __ vmov(s3, 4.0); + __ vpadd(d2, d0, d1); + __ vstr(d2, r0, offsetof(T, vpaddf)); // vsub (float). __ vmov(s4, 2.0); - __ vdup(q0, s4); + __ vdup(Neon32, q0, d2, 0); __ vmov(s4, 1.0); - __ vdup(q1, s4); + __ vdup(Neon32, q1, d2, 0); __ vsub(q1, q1, q0); __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vsubf)))); __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4)); // vmul (float). __ vmov(s4, 2.0); - __ vdup(q0, s4); - __ vdup(q1, s4); + __ vdup(Neon32, q0, d2, 0); + __ vdup(Neon32, q1, d2, 0); __ vmul(q1, q1, q0); __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vmulf)))); __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4)); // vrecpe. __ vmov(s4, 2.0); - __ vdup(q0, s4); + __ vdup(Neon32, q0, d2, 0); __ vrecpe(q1, q0); __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vrecpe)))); __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4)); // vrecps. __ vmov(s4, 2.0); - __ vdup(q0, s4); + __ vdup(Neon32, q0, d2, 0); __ vmov(s4, 1.5); - __ vdup(q1, s4); + __ vdup(Neon32, q1, d2, 0); __ vrecps(q1, q0, q1); __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vrecps)))); __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4)); // vrsqrte. __ vmov(s4, 4.0); - __ vdup(q0, s4); + __ vdup(Neon32, q0, d2, 0); __ vrsqrte(q1, q0); __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vrsqrte)))); __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4)); // vrsqrts. __ vmov(s4, 2.0); - __ vdup(q0, s4); + __ vdup(Neon32, q0, d2, 0); __ vmov(s4, 2.5); - __ vdup(q1, s4); + __ vdup(Neon32, q1, d2, 0); __ vrsqrts(q1, q0, q1); __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vrsqrts)))); __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4)); // vceq (float). __ vmov(s4, 1.0); - __ vdup(q0, s4); - __ vdup(q1, s4); + __ vdup(Neon32, q0, d2, 0); + __ vdup(Neon32, q1, d2, 0); __ vceq(q1, q1, q0); __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vceqf)))); __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4)); @@ -1600,7 +1615,7 @@ TEST(15) { __ vmov(s1, -1.0); __ vmov(s2, -0.0); __ vmov(s3, 0.0); - __ vdup(q1, s3); + __ vdup(Neon32, q1, d1, 1); __ vcge(q2, q1, q0); __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vcgef)))); __ vst1(Neon8, NeonListOperand(q2), NeonMemOperand(r4)); @@ -1637,6 +1652,17 @@ TEST(15) { __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vmax_s32)))); __ vst1(Neon8, NeonListOperand(q2), NeonMemOperand(r4)); + // vpadd integer. + __ mov(r4, Operand(0x03)); + __ vdup(Neon16, q0, r4); + __ vdup(Neon8, q1, r4); + __ vpadd(Neon8, d0, d0, d2); + __ vstr(d0, r0, offsetof(T, vpadd_i8)); + __ vpadd(Neon16, d0, d0, d2); + __ vstr(d0, r0, offsetof(T, vpadd_i16)); + __ vpadd(Neon32, d0, d0, d2); + __ vstr(d0, r0, offsetof(T, vpadd_i32)); + // vpmin/vpmax integer. __ mov(r4, Operand(0x03)); __ vdup(Neon16, q0, r4); @@ -1795,6 +1821,26 @@ TEST(15) { __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vshr_s32)))); __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4)); + // vsli, vsri. + __ mov(r4, Operand(0xffffffff)); + __ mov(r5, Operand(0x1)); + __ vmov(d0, r4, r5); + __ vmov(d1, r5, r5); + __ vsli(Neon64, d1, d0, 32); + __ vstr(d1, r0, offsetof(T, vsli_64)); + __ vmov(d0, r5, r4); + __ vmov(d1, r5, r5); + __ vsri(Neon64, d1, d0, 32); + __ vstr(d1, r0, offsetof(T, vsri_64)); + __ vmov(d0, r4, r5); + __ vmov(d1, r5, r5); + __ vsli(Neon32, d1, d0, 16); + __ vstr(d1, r0, offsetof(T, vsli_32)); + __ vmov(d0, r5, r4); + __ vmov(d1, r5, r5); + __ vsri(Neon32, d1, d0, 16); + __ vstr(d1, r0, offsetof(T, vsri_32)); + // vceq. __ mov(r4, Operand(0x03)); __ vdup(Neon8, q0, r4); @@ -2088,7 +2134,9 @@ TEST(15) { CHECK_EQ_SPLAT(vdup8, 0x0a0a0a0au); CHECK_EQ_SPLAT(vdup16, 0x000a000au); CHECK_EQ_SPLAT(vdup32, 0x0000000au); - CHECK_EQ_SPLAT(vdupf, -1.0); + CHECK_EQ_SPLAT(vdupf, -1.0); // bit pattern is 0xbf800000. + CHECK_EQ_32X2(vdupf_16, 0xbf80bf80u, 0xbf80bf80u); + CHECK_EQ_SPLAT(vdupf_8, 0xbfbfbfbfu); // src: [-1, -1, 1, 1] CHECK_EQ_32X4(vcvt_s32_f32, -1, -1, 1, 1); @@ -2115,6 +2163,7 @@ TEST(15) { CHECK_EQ_SPLAT(vand, 0x00fe00feu); CHECK_EQ_SPLAT(vorr, 0x00ff00ffu); CHECK_EQ_SPLAT(vaddf, 2.0); + CHECK_EQ_32X2(vpaddf, 3.0, 7.0); CHECK_EQ_SPLAT(vminf, 1.0); CHECK_EQ_SPLAT(vmaxf, 2.0); CHECK_EQ_SPLAT(vsubf, -1.0); @@ -2137,6 +2186,9 @@ TEST(15) { CHECK_EQ_SPLAT(vmin_s32, 0xffffffffu); CHECK_EQ_SPLAT(vmax_s32, 0xffu); // [0, 3, 0, 3, ...] and [3, 3, 3, 3, ...] + CHECK_EQ_32X2(vpadd_i8, 0x03030303u, 0x06060606u); + CHECK_EQ_32X2(vpadd_i16, 0x0c0c0606u, 0x06060606u); + CHECK_EQ_32X2(vpadd_i32, 0x12120c0cu, 0x06060606u); CHECK_EQ_32X2(vpmin_s8, 0x00000000u, 0x03030303u); CHECK_EQ_32X2(vpmax_s8, 0x03030303u, 0x03030303u); // [0, ffff, 0, ffff] and [ffff, ffff] @@ -2166,6 +2218,10 @@ TEST(15) { CHECK_EQ_SPLAT(vshr_s8, 0xc0c0c0c0u); CHECK_EQ_SPLAT(vshr_u16, 0x00400040u); CHECK_EQ_SPLAT(vshr_s32, 0xffffc040u); + CHECK_EQ_32X2(vsli_64, 0x01u, 0xffffffffu); + CHECK_EQ_32X2(vsri_64, 0xffffffffu, 0x01u); + CHECK_EQ_32X2(vsli_32, 0xffff0001u, 0x00010001u); + CHECK_EQ_32X2(vsri_32, 0x00000000u, 0x0000ffffu); CHECK_EQ_SPLAT(vceq, 0x00ff00ffu); // [0, 3, 0, 3, ...] >= [3, 3, 3, 3, ...] CHECK_EQ_SPLAT(vcge_s8, 0x00ff00ffu); @@ -3817,11 +3873,8 @@ TEST(vswp) { const uint32_t test_2 = 0x89abcdef; __ mov(r4, Operand(test_1)); __ mov(r5, Operand(test_2)); - // TODO(bbudge) replace with vdup when implemented. - __ vmov(d8, r4, r4); - __ vmov(d9, r4, r4); // q4 = [1.0, 1.0] - __ vmov(d10, r5, r5); - __ vmov(d11, r5, r5); // q5 = [-1.0, -1.0] + __ vdup(Neon32, q4, r4); + __ vdup(Neon32, q5, r5); __ vswp(q4, q5); __ add(r6, r0, Operand(static_cast<int32_t>(offsetof(T, vswp_q4)))); __ vst1(Neon8, NeonListOperand(q4), NeonMemOperand(r6)); |