Index: test/cctest/test-assembler-arm.cc |
diff --git a/test/cctest/test-assembler-arm.cc b/test/cctest/test-assembler-arm.cc |
index 680b1233f756fcc0f2439e6fce17c77ab278ff95..ac6b6203a5063125053405a40c8f679569012ebc 100644 |
--- a/test/cctest/test-assembler-arm.cc |
+++ b/test/cctest/test-assembler-arm.cc |
@@ -1301,6 +1301,8 @@ TEST(15) { |
uint32_t vadd8[4], vadd16[4], vadd32[4]; |
uint32_t vsub8[4], vsub16[4], vsub32[4]; |
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 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]; |
@@ -1671,6 +1673,32 @@ TEST(15) { |
__ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vmul32)))); |
__ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4)); |
+ // vshl. |
+ __ mov(r4, Operand(0x55)); |
+ __ vdup(Neon8, q0, r4); |
+ __ vshl(NeonS8, q1, q0, 1); |
+ __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vshl8)))); |
+ __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4)); |
+ __ vshl(NeonU16, q1, q0, 9); |
+ __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vshl16)))); |
+ __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4)); |
+ __ vshl(NeonS32, q1, q0, 17); |
+ __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vshl32)))); |
+ __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4)); |
+ |
+ // vshr.s, vshr.u. |
+ __ mov(r4, Operand(0x80)); |
+ __ vdup(Neon8, q0, r4); |
+ __ vshr(NeonS8, q1, q0, 1); |
+ __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vshr_s8)))); |
+ __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4)); |
+ __ vshr(NeonU16, q1, q0, 9); |
+ __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vshr_u16)))); |
+ __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4)); |
+ __ vshr(NeonS32, q1, q0, 17); |
+ __ add(r4, r0, Operand(static_cast<int32_t>(offsetof(T, vshr_s32)))); |
+ __ vst1(Neon8, NeonListOperand(q1), NeonMemOperand(r4)); |
+ |
// vceq. |
__ mov(r4, Operand(0x03)); |
__ vdup(Neon8, q0, r4); |
@@ -1926,6 +1954,12 @@ TEST(15) { |
CHECK_EQ_SPLAT(vmul8, 0x04040404u); |
CHECK_EQ_SPLAT(vmul16, 0x00040004u); |
CHECK_EQ_SPLAT(vmul32, 0x00000004u); |
+ CHECK_EQ_SPLAT(vshl8, 0xaaaaaaaau); |
+ CHECK_EQ_SPLAT(vshl16, 0xaa00aa00u); |
+ CHECK_EQ_SPLAT(vshl32, 0xaaaa0000u); |
+ CHECK_EQ_SPLAT(vshr_s8, 0xc0c0c0c0u); |
+ CHECK_EQ_SPLAT(vshr_u16, 0x00400040u); |
+ CHECK_EQ_SPLAT(vshr_s32, 0xffffc040u); |
CHECK_EQ_SPLAT(vceq, 0x00ff00ffu); |
// [0, 3, 0, 3, ...] >= [3, 3, 3, 3, ...] |
CHECK_EQ_SPLAT(vcge_s8, 0x00ff00ffu); |