| 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 __
|
|
|