Index: test/cctest/test-macro-assembler-arm.cc |
diff --git a/test/cctest/test-macro-assembler-arm.cc b/test/cctest/test-macro-assembler-arm.cc |
index dcc5fba0a26244b55a69cf0e6ae02894c143fcca..4de4647f983cc4766ab86f5b5aac487f79cd3f0f 100644 |
--- a/test/cctest/test-macro-assembler-arm.cc |
+++ b/test/cctest/test-macro-assembler-arm.cc |
@@ -156,6 +156,8 @@ TEST(ExtractLane) { |
int32_t i8x16_high[16]; |
int32_t f32x4_low[4]; |
int32_t f32x4_high[4]; |
+ int32_t i8x16_low_d[16]; |
+ int32_t i8x16_high_d[16]; |
} T; |
T t; |
@@ -185,6 +187,15 @@ TEST(ExtractLane) { |
__ str(r5, MemOperand(r0, offsetof(T, i8x16_low) + 4 * i)); |
} |
+ for (int i = 0; i < 8; i++) { |
+ __ mov(r4, Operand(i)); |
+ __ vdup(Neon8, q1, r4); // q1 = d2,d3 |
+ __ ExtractLane(r5, d2, NeonS8, i); |
+ __ str(r5, MemOperand(r0, offsetof(T, i8x16_low_d) + 4 * i)); |
+ __ ExtractLane(r5, d3, NeonS8, i); |
+ __ str(r5, MemOperand(r0, offsetof(T, i8x16_low_d) + 4 * (i + 8))); |
+ } |
+ |
if (CpuFeatures::IsSupported(VFP32DREGS)) { |
for (int i = 0; i < 4; i++) { |
__ mov(r4, Operand(-i)); |
@@ -209,6 +220,15 @@ TEST(ExtractLane) { |
__ ExtractLane(r5, q15, NeonS8, i); |
__ str(r5, MemOperand(r0, offsetof(T, i8x16_high) + 4 * i)); |
} |
+ |
+ for (int i = 0; i < 8; i++) { |
+ __ mov(r4, Operand(-i)); |
+ __ vdup(Neon8, q15, r4); // q1 = d30,d31 |
+ __ ExtractLane(r5, d30, NeonS8, i); |
+ __ str(r5, MemOperand(r0, offsetof(T, i8x16_high_d) + 4 * i)); |
+ __ ExtractLane(r5, d31, NeonS8, i); |
+ __ str(r5, MemOperand(r0, offsetof(T, i8x16_high_d) + 4 * (i + 8))); |
+ } |
} |
__ ldm(ia_w, sp, r4.bit() | r5.bit() | pc.bit()); |
@@ -234,6 +254,10 @@ TEST(ExtractLane) { |
for (int i = 0; i < 16; i++) { |
CHECK_EQ(i, t.i8x16_low[i]); |
} |
+ for (int i = 0; i < 8; i++) { |
+ CHECK_EQ(i, t.i8x16_low_d[i]); |
+ CHECK_EQ(i, t.i8x16_low_d[i + 8]); |
+ } |
if (CpuFeatures::IsSupported(VFP32DREGS)) { |
for (int i = 0; i < 4; i++) { |
CHECK_EQ(-i, t.i32x4_high[i]); |
@@ -245,6 +269,10 @@ TEST(ExtractLane) { |
for (int i = 0; i < 16; i++) { |
CHECK_EQ(-i, t.i8x16_high[i]); |
} |
+ for (int i = 0; i < 8; i++) { |
+ CHECK_EQ(-i, t.i8x16_high_d[i]); |
+ CHECK_EQ(-i, t.i8x16_high_d[i + 8]); |
+ } |
} |
} |