Index: test/cctest/test-assembler-mips64.cc |
diff --git a/test/cctest/test-assembler-mips64.cc b/test/cctest/test-assembler-mips64.cc |
index 9529dab2422b69f094aa5e7ae2940d9a901ab963..f8f6b79f2209e057a44d942f077ebbf86f3d4991 100644 |
--- a/test/cctest/test-assembler-mips64.cc |
+++ b/test/cctest/test-assembler-mips64.cc |
@@ -3563,6 +3563,69 @@ TEST(BITSWAP) { |
} |
} |
+TEST(SIGNEXTEND) { |
+ if (kArchVariant == kMips64r6 || kArchVariant == kMips64r2) { |
+ CcTest::InitializeVM(); |
+ Isolate* isolate = CcTest::i_isolate(); |
+ HandleScope scope(isolate); |
+ |
+ typedef struct { |
+ int64_t r1; |
+ int64_t r2; |
+ int64_t r3; |
+ int64_t r4; |
+ } T; |
+ T t; |
+ |
+ Assembler assm(isolate, NULL, 0); |
+ |
+ __ ld(a4, MemOperand(a0, offsetof(T, r1))); |
+ __ nop(); |
+ __ seh(a6, a4); |
+ __ sll(a6, a6, 0); |
+ __ sd(a6, MemOperand(a0, offsetof(T, r1))); |
+ |
+ __ ld(a4, MemOperand(a0, offsetof(T, r2))); |
+ __ nop(); |
+ __ seh(a6, a4); |
+ __ sll(a6, a6, 0); |
+ __ sd(a6, MemOperand(a0, offsetof(T, r2))); |
+ |
+ __ ld(a4, MemOperand(a0, offsetof(T, r3))); |
+ __ nop(); |
+ __ seb(a6, a4); |
+ __ sll(a6, a6, 0); |
+ __ sd(a6, MemOperand(a0, offsetof(T, r3))); |
+ |
+ __ ld(a4, MemOperand(a0, offsetof(T, r4))); |
+ __ nop(); |
+ __ seb(a6, a4); |
+ __ sll(a6, a6, 0); |
+ __ sd(a6, MemOperand(a0, offsetof(T, r4))); |
+ |
+ __ jr(ra); |
+ __ nop(); |
+ |
+ CodeDesc desc; |
+ |
+ assm.GetCode(&desc); |
+ Handle<Code> code = isolate->factory()->NewCode( |
+ desc, Code::ComputeFlags(Code::STUB), Handle<Code>()); |
+ |
+ F3 f = FUNCTION_CAST<F3>(code->entry()); |
+ t.r1 = 0x15C3; |
+ t.r2 = 0xFCDE; |
+ t.r3 = 0xC3; |
+ t.r4 = 0x5E; |
+ Object* dummy = CALL_GENERATED_CODE(isolate, f, &t, 0, 0, 0, 0); |
+ USE(dummy); |
+ |
+ CHECK_EQ(static_cast<int64_t>(0x00000000000015C3), t.r1); |
+ CHECK_EQ(static_cast<int64_t>(0xFFFFFFFFFFFFFCDE), t.r2); |
+ CHECK_EQ(static_cast<int64_t>(0xFFFFFFFFFFFFFFC3), t.r3); |
+ CHECK_EQ(static_cast<int64_t>(0x000000000000005E), t.r4); |
+ } |
+} |
TEST(class_fmt) { |
if (kArchVariant == kMips64r6) { |