Index: test/cctest/test-assembler-x64.cc |
diff --git a/test/cctest/test-assembler-x64.cc b/test/cctest/test-assembler-x64.cc |
index 30577751ed4aad226a05f6b8d3f378f6bd186ed5..ca49dfd96ad12f29f2d1b17b532462db03a0c319 100644 |
--- a/test/cctest/test-assembler-x64.cc |
+++ b/test/cctest/test-assembler-x64.cc |
@@ -35,34 +35,7 @@ |
#include "serialize.h" |
#include "cctest.h" |
-using v8::internal::Assembler; |
-using v8::internal::Code; |
-using v8::internal::CodeDesc; |
-using v8::internal::FUNCTION_CAST; |
-using v8::internal::Immediate; |
-using v8::internal::Isolate; |
-using v8::internal::Label; |
-using v8::internal::OS; |
-using v8::internal::Operand; |
-using v8::internal::byte; |
-using v8::internal::greater; |
-using v8::internal::less_equal; |
-using v8::internal::equal; |
-using v8::internal::not_equal; |
-using v8::internal::r13; |
-using v8::internal::r15; |
-using v8::internal::r8; |
-using v8::internal::r9; |
-using v8::internal::rax; |
-using v8::internal::rbx; |
-using v8::internal::rbp; |
-using v8::internal::rcx; |
-using v8::internal::rdi; |
-using v8::internal::rdx; |
-using v8::internal::rsi; |
-using v8::internal::rsp; |
-using v8::internal::times_1; |
-using v8::internal::xmm0; |
+using namespace v8::internal; |
// Test the x64 assembler by compiling some simple functions into |
// a buffer and executing them. These tests do not initialize the |
@@ -77,13 +50,14 @@ using v8::internal::xmm0; |
typedef int (*F0)(); |
typedef int (*F1)(int64_t x); |
typedef int (*F2)(int64_t x, int64_t y); |
+typedef int (*F3)(double x); |
#ifdef _WIN64 |
-static const v8::internal::Register arg1 = rcx; |
-static const v8::internal::Register arg2 = rdx; |
+static const Register arg1 = rcx; |
+static const Register arg2 = rdx; |
#else |
-static const v8::internal::Register arg1 = rdi; |
-static const v8::internal::Register arg2 = rsi; |
+static const Register arg1 = rdi; |
+static const Register arg2 = rsi; |
#endif |
#define __ assm. |
@@ -366,7 +340,7 @@ TEST(AssemblerX64LabelChaining) { |
TEST(AssemblerMultiByteNop) { |
CcTest::InitializeVM(); |
v8::HandleScope scope(CcTest::isolate()); |
- v8::internal::byte buffer[1024]; |
+ byte buffer[1024]; |
Isolate* isolate = CcTest::i_isolate(); |
Assembler assm(isolate, buffer, sizeof(buffer)); |
__ push(rbx); |
@@ -420,7 +394,7 @@ TEST(AssemblerMultiByteNop) { |
Code* code = Code::cast(isolate->heap()->CreateCode( |
desc, |
Code::ComputeFlags(Code::STUB), |
- v8::internal::Handle<Code>())->ToObjectChecked()); |
+ Handle<Code>())->ToObjectChecked()); |
CHECK(code->IsCode()); |
F0 f = FUNCTION_CAST<F0>(code->entry()); |
@@ -434,7 +408,7 @@ TEST(AssemblerMultiByteNop) { |
void DoSSE2(const v8::FunctionCallbackInfo<v8::Value>& args) { |
v8::HandleScope scope(CcTest::isolate()); |
- v8::internal::byte buffer[1024]; |
+ byte buffer[1024]; |
CHECK(args[0]->IsArray()); |
v8::Local<v8::Array> vec = v8::Local<v8::Array>::Cast(args[0]); |
@@ -472,7 +446,7 @@ void DoSSE2(const v8::FunctionCallbackInfo<v8::Value>& args) { |
Code* code = Code::cast(isolate->heap()->CreateCode( |
desc, |
Code::ComputeFlags(Code::STUB), |
- v8::internal::Handle<Code>())->ToObjectChecked()); |
+ Handle<Code>())->ToObjectChecked()); |
CHECK(code->IsCode()); |
F0 f = FUNCTION_CAST<F0>(code->entry()); |
@@ -517,4 +491,33 @@ TEST(StackAlignmentForSSE2) { |
#endif // __GNUC__ |
+TEST(AssemblerX64Extractps) { |
+ CcTest::InitializeVM(); |
+ if (!CpuFeatures::IsSupported(SSE4_1)) return; |
+ |
+ v8::HandleScope scope(CcTest::isolate()); |
+ byte buffer[256]; |
+ Isolate* isolate = CcTest::i_isolate(); |
+ Assembler assm(isolate, buffer, sizeof(buffer)); |
+ { CpuFeatureScope fscope2(&assm, SSE4_1); |
+ __ extractps(rax, xmm0, 0x1); |
+ __ ret(0); |
+ } |
+ |
+ CodeDesc desc; |
+ assm.GetCode(&desc); |
+ Code* code = Code::cast(isolate->heap()->CreateCode( |
+ desc, |
+ Code::ComputeFlags(Code::STUB), |
+ Handle<Code>())->ToObjectChecked()); |
+ CHECK(code->IsCode()); |
+#ifdef OBJECT_PRINT |
+ Code::cast(code)->Print(); |
+#endif |
+ |
+ F3 f = FUNCTION_CAST<F3>(Code::cast(code)->entry()); |
+ CHECK_EQ(0x7FF80000, f(OS::nan_value())); |
+} |
+ |
+ |
#undef __ |