Index: test/cctest/test-disasm-x64.cc |
diff --git a/test/cctest/test-disasm-x64.cc b/test/cctest/test-disasm-x64.cc |
index 284ca859bef204843af60fab34eab48c3c4464e2..af8beaaa83a90694002eb58d7c3e5d1a7c77f6fd 100644 |
--- a/test/cctest/test-disasm-x64.cc |
+++ b/test/cctest/test-disasm-x64.cc |
@@ -50,7 +50,7 @@ TEST(DisasmX64) { |
CcTest::InitializeVM(); |
Isolate* isolate = CcTest::i_isolate(); |
HandleScope scope(isolate); |
- v8::internal::byte buffer[4096]; |
+ v8::internal::byte buffer[8192]; |
Assembler assm(isolate, buffer, sizeof buffer); |
DummyStaticFunction(NULL); // just bloody use it (DELETE; debugging) |
@@ -420,7 +420,8 @@ TEST(DisasmX64) { |
__ ucomiss(xmm0, xmm1); |
__ ucomiss(xmm0, Operand(rbx, rcx, times_4, 10000)); |
} |
- // SSE 2 instructions |
+ |
+ // SSE2 instructions |
{ |
__ cvttsd2si(rdx, Operand(rbx, rcx, times_4, 10000)); |
__ cvttsd2si(rdx, xmm1); |
@@ -467,6 +468,13 @@ TEST(DisasmX64) { |
__ punpckldq(xmm1, xmm11); |
__ punpckldq(xmm5, Operand(rdx, 4)); |
__ punpckhdq(xmm8, xmm15); |
+ |
+#define EMIT_SSE2_INSTR(instruction, notUsed1, notUsed2, notUsed3) \ |
+ __ instruction(xmm5, xmm1); \ |
+ __ instruction(xmm5, Operand(rdx, 4)); |
+ |
+ SSE2_INSTRUCTION_LIST(EMIT_SSE2_INSTR) |
+#undef EMIT_SSE2_INSTR |
} |
// cmov. |
@@ -490,6 +498,24 @@ TEST(DisasmX64) { |
} |
{ |
+ if (CpuFeatures::IsSupported(SSE3)) { |
+ CpuFeatureScope scope(&assm, SSE3); |
+ __ lddqu(xmm1, Operand(rdx, 4)); |
+ } |
+ } |
+ |
+#define EMIT_SSE34_INSTR(instruction, notUsed1, notUsed2, notUsed3, notUsed4) \ |
+ __ instruction(xmm5, xmm1); \ |
+ __ instruction(xmm5, Operand(rdx, 4)); |
+ |
+ { |
+ if (CpuFeatures::IsSupported(SSSE3)) { |
+ CpuFeatureScope scope(&assm, SSSE3); |
+ SSSE3_INSTRUCTION_LIST(EMIT_SSE34_INSTR) |
+ } |
+ } |
+ |
+ { |
if (CpuFeatures::IsSupported(SSE4_1)) { |
CpuFeatureScope scope(&assm, SSE4_1); |
__ insertps(xmm5, xmm1, 123); |
@@ -539,12 +565,10 @@ TEST(DisasmX64) { |
__ movups(xmm5, xmm1); |
__ movups(xmm5, Operand(rdx, 4)); |
__ movups(Operand(rdx, 4), xmm5); |
- __ paddd(xmm5, xmm1); |
- __ paddd(xmm5, Operand(rdx, 4)); |
- __ psubd(xmm5, xmm1); |
- __ psubd(xmm5, Operand(rdx, 4)); |
__ pmulld(xmm5, xmm1); |
__ pmulld(xmm5, Operand(rdx, 4)); |
+ __ pmullw(xmm5, xmm1); |
+ __ pmullw(xmm5, Operand(rdx, 4)); |
__ pmuludq(xmm5, xmm1); |
__ pmuludq(xmm5, Operand(rdx, 4)); |
__ psrldq(xmm5, 123); |
@@ -553,8 +577,11 @@ TEST(DisasmX64) { |
__ cvtps2dq(xmm5, Operand(rdx, 4)); |
__ cvtdq2ps(xmm5, xmm1); |
__ cvtdq2ps(xmm5, Operand(rdx, 4)); |
+ |
+ SSE4_INSTRUCTION_LIST(EMIT_SSE34_INSTR) |
} |
} |
+#undef EMIT_SSE34_INSTR |
// AVX instruction |
{ |
@@ -678,6 +705,41 @@ TEST(DisasmX64) { |
__ vcmpnltpd(xmm5, xmm4, Operand(rbx, rcx, times_4, 10000)); |
__ vcmpnlepd(xmm5, xmm4, xmm1); |
__ vcmpnlepd(xmm5, xmm4, Operand(rbx, rcx, times_4, 10000)); |
+ |
+#define EMIT_SSE2_AVXINSTR(instruction, notUsed1, notUsed2, notUsed3) \ |
+ __ v##instruction(xmm10, xmm5, xmm1); \ |
+ __ v##instruction(xmm10, xmm5, Operand(rdx, 4)); |
+ |
+#define EMIT_SSE34_AVXINSTR(instruction, notUsed1, notUsed2, notUsed3, \ |
+ notUsed4) \ |
+ __ v##instruction(xmm10, xmm5, xmm1); \ |
+ __ v##instruction(xmm10, xmm5, Operand(rdx, 4)); |
+ |
+ SSE2_INSTRUCTION_LIST(EMIT_SSE2_AVXINSTR) |
+ SSSE3_INSTRUCTION_LIST(EMIT_SSE34_AVXINSTR) |
+ SSE4_INSTRUCTION_LIST(EMIT_SSE34_AVXINSTR) |
+#undef EMIT_SSE2_AVXINSTR |
+#undef EMIT_SSE34_AVXINSTR |
+ |
+ __ vlddqu(xmm1, Operand(rbx, rcx, times_4, 10000)); |
+ __ vpsllw(xmm0, xmm15, 21); |
+ __ vpsrlw(xmm0, xmm15, 21); |
+ __ vpsraw(xmm0, xmm15, 21); |
+ __ vpsrad(xmm0, xmm15, 21); |
+ __ vpextrb(rax, xmm2, 12); |
+ __ vpextrb(Operand(rbx, rcx, times_4, 10000), xmm2, 12); |
+ __ vpextrw(rax, xmm2, 5); |
+ __ vpextrw(Operand(rbx, rcx, times_4, 10000), xmm2, 5); |
+ __ vpextrd(rax, xmm2, 2); |
+ __ vpextrd(Operand(rbx, rcx, times_4, 10000), xmm2, 2); |
+ |
+ __ vpinsrb(xmm1, xmm2, rax, 12); |
+ __ vpinsrb(xmm1, xmm2, Operand(rbx, rcx, times_4, 10000), 12); |
+ __ vpinsrw(xmm1, xmm2, rax, 5); |
+ __ vpinsrw(xmm1, xmm2, Operand(rbx, rcx, times_4, 10000), 5); |
+ __ vpinsrd(xmm1, xmm2, rax, 2); |
+ __ vpinsrd(xmm1, xmm2, Operand(rbx, rcx, times_4, 10000), 2); |
+ __ vpshufd(xmm1, xmm2, 85); |
} |
} |