Index: test/cctest/test-assembler-arm.cc |
diff --git a/test/cctest/test-assembler-arm.cc b/test/cctest/test-assembler-arm.cc |
index 9b25c5dfe27f50e598ec5e53f02739c85bb86106..349a6eb565c31eaf74f1d64884139e4dec2fb9b5 100644 |
--- a/test/cctest/test-assembler-arm.cc |
+++ b/test/cctest/test-assembler-arm.cc |
@@ -1281,16 +1281,14 @@ TEST(15) { |
uint32_t dstA1; |
uint32_t dstA2; |
uint32_t dstA3; |
- uint32_t dstA4; |
- uint32_t dstA5; |
- uint32_t dstA6; |
- uint32_t dstA7; |
uint32_t lane_test[4]; |
uint64_t vmov_to_scalar1, vmov_to_scalar2; |
uint32_t vmov_from_scalar_s8, vmov_from_scalar_u8; |
uint32_t vmov_from_scalar_s16, vmov_from_scalar_u16; |
uint32_t vmov_from_scalar_32; |
uint32_t vmov[4], vmvn[4]; |
+ uint32_t vmovl_s8[4], vmovl_u16[4], vmovl_s32[4]; |
+ uint32_t vqmovn_s8[2], vqmovn_u16[2], vqmovn_s32[2]; |
int32_t vcvt_s32_f32[4]; |
uint32_t vcvt_u32_f32[4]; |
float vcvt_f32_s32[4], vcvt_f32_u32[4]; |
@@ -1354,9 +1352,23 @@ TEST(15) { |
// The same expansion, but with different source and destination registers. |
__ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, srcA0)))); |
__ vld1(Neon8, NeonListOperand(d1), NeonMemOperand(r4)); |
- __ vmovl(NeonU8, q1, d1); |
- __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, dstA4)))); |
- __ vst1(Neon8, NeonListOperand(d2, 2), NeonMemOperand(r4)); |
+ __ vmovl(NeonS8, q1, d1); |
+ __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vmovl_s8)))); |
+ __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4)); |
+ __ vmovl(NeonU16, q2, d3); |
+ __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vmovl_u16)))); |
+ __ vst1(Neon8, NeonListOperand(q2), NeonMemOperand(r4)); |
+ __ vmovl(NeonS32, q3, d4); |
+ __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vmovl_s32)))); |
+ __ vst1(Neon8, NeonListOperand(q3), NeonMemOperand(r4)); |
+ // Narrow what we widened. |
+ __ vqmovn(NeonU16, d0, q2); |
+ __ vstr(d0, r0, offsetof(T, vqmovn_u16)); |
+ __ vmov(d1, d0); |
+ __ vqmovn(NeonS8, d2, q0); |
+ __ vstr(d2, r0, offsetof(T, vqmovn_s8)); |
+ __ vqmovn(NeonS32, d4, q3); |
+ __ vstr(d4, r0, offsetof(T, vqmovn_s32)); |
// ARM core register to scalar. |
__ mov(r4, Operand(0xfffffff8)); |
@@ -1987,10 +1999,6 @@ TEST(15) { |
t.dstA1 = 0; |
t.dstA2 = 0; |
t.dstA3 = 0; |
- t.dstA4 = 0; |
- t.dstA5 = 0; |
- t.dstA6 = 0; |
- t.dstA7 = 0; |
t.lane_test[0] = 0x03020100; |
t.lane_test[1] = 0x07060504; |
t.lane_test[2] = 0x0b0a0908; |
@@ -2010,10 +2018,13 @@ TEST(15) { |
CHECK_EQ(0x00410042u, t.dstA1); |
CHECK_EQ(0x00830084u, t.dstA2); |
CHECK_EQ(0x00810082u, t.dstA3); |
- CHECK_EQ(0x00430044u, t.dstA4); |
- CHECK_EQ(0x00410042u, t.dstA5); |
- CHECK_EQ(0x00830084u, t.dstA6); |
- CHECK_EQ(0x00810082u, t.dstA7); |
+ |
+ CHECK_EQ_32X4(vmovl_s8, 0x00430044u, 0x00410042u, 0xff83ff84u, 0xff81ff82u); |
+ CHECK_EQ_32X4(vmovl_u16, 0xff84u, 0xff83u, 0xff82u, 0xff81u); |
+ CHECK_EQ_32X4(vmovl_s32, 0xff84u, 0x0u, 0xff83u, 0x0u); |
+ CHECK_EQ_32X2(vqmovn_u16, 0xff83ff84u, 0xff81ff82u); |
+ CHECK_EQ_32X2(vqmovn_s8, 0x81828384u, 0x81828384u); |
+ CHECK_EQ_32X2(vqmovn_s32, 0xff84u, 0xff83u); |
CHECK_EQ(0xfffffff8fff8f800u, t.vmov_to_scalar1); |
CHECK_EQ(0xfff80000f8000000u, t.vmov_to_scalar2); |