Index: test/cctest/test-assembler-mips64.cc |
diff --git a/test/cctest/test-assembler-mips64.cc b/test/cctest/test-assembler-mips64.cc |
index 4e9238930a81ae7f04017c0d0c8806005f420f3e..1ec9a65c960ca6c76720cd95340d5842ebb04e0e 100644 |
--- a/test/cctest/test-assembler-mips64.cc |
+++ b/test/cctest/test-assembler-mips64.cc |
@@ -353,14 +353,17 @@ TEST(MIPS4) { |
double a; |
double b; |
double c; |
+ double d; |
+ int64_t high; |
+ int64_t low; |
} T; |
T t; |
Assembler assm(isolate, NULL, 0); |
Label L, C; |
- __ ldc1(f4, MemOperand(a0, OFFSET_OF(T, a)) ); |
- __ ldc1(f5, MemOperand(a0, OFFSET_OF(T, b)) ); |
+ __ ldc1(f4, MemOperand(a0, OFFSET_OF(T, a))); |
+ __ ldc1(f5, MemOperand(a0, OFFSET_OF(T, b))); |
// Swap f4 and f5, by using 3 integer registers, a4-a6, |
// both two 32-bit chunks, and one 64-bit chunk. |
@@ -375,8 +378,16 @@ TEST(MIPS4) { |
__ dmtc1(a6, f4); |
// Store the swapped f4 and f5 back to memory. |
- __ sdc1(f4, MemOperand(a0, OFFSET_OF(T, a)) ); |
- __ sdc1(f5, MemOperand(a0, OFFSET_OF(T, c)) ); |
+ __ sdc1(f4, MemOperand(a0, OFFSET_OF(T, a))); |
+ __ sdc1(f5, MemOperand(a0, OFFSET_OF(T, c))); |
+ |
+ // Test sign extension of move operations from coprocessor. |
+ __ ldc1(f4, MemOperand(a0, OFFSET_OF(T, d))); |
+ __ mfhc1(a4, f4); |
+ __ mfc1(a5, f4); |
+ |
+ __ sd(a4, MemOperand(a0, OFFSET_OF(T, high))); |
+ __ sd(a5, MemOperand(a0, OFFSET_OF(T, low))); |
__ jr(ra); |
__ nop(); |
@@ -389,12 +400,15 @@ TEST(MIPS4) { |
t.a = 1.5e22; |
t.b = 2.75e11; |
t.c = 17.17; |
+ t.d = -2.75e11; |
Object* dummy = CALL_GENERATED_CODE(f, &t, 0, 0, 0, 0); |
USE(dummy); |
CHECK_EQ(2.75e11, t.a); |
CHECK_EQ(2.75e11, t.b); |
CHECK_EQ(1.5e22, t.c); |
+ CHECK_EQ(0xffffffffc25001d1L, t.high); |
+ CHECK_EQ(0xffffffffbf800000L, t.low); |
} |
@@ -870,80 +884,80 @@ TEST(MIPS11) { |
Assembler assm(isolate, NULL, 0); |
// Test all combinations of LWL and vAddr. |
- __ lw(a4, MemOperand(a0, OFFSET_OF(T, reg_init)) ); |
- __ lwl(a4, MemOperand(a0, OFFSET_OF(T, mem_init)) ); |
- __ sw(a4, MemOperand(a0, OFFSET_OF(T, lwl_0)) ); |
+ __ lw(a4, MemOperand(a0, OFFSET_OF(T, reg_init))); |
+ __ lwl(a4, MemOperand(a0, OFFSET_OF(T, mem_init))); |
+ __ sw(a4, MemOperand(a0, OFFSET_OF(T, lwl_0))); |
- __ lw(a5, MemOperand(a0, OFFSET_OF(T, reg_init)) ); |
- __ lwl(a5, MemOperand(a0, OFFSET_OF(T, mem_init) + 1) ); |
- __ sw(a5, MemOperand(a0, OFFSET_OF(T, lwl_1)) ); |
+ __ lw(a5, MemOperand(a0, OFFSET_OF(T, reg_init))); |
+ __ lwl(a5, MemOperand(a0, OFFSET_OF(T, mem_init) + 1)); |
+ __ sw(a5, MemOperand(a0, OFFSET_OF(T, lwl_1))); |
- __ lw(a6, MemOperand(a0, OFFSET_OF(T, reg_init)) ); |
- __ lwl(a6, MemOperand(a0, OFFSET_OF(T, mem_init) + 2) ); |
- __ sw(a6, MemOperand(a0, OFFSET_OF(T, lwl_2)) ); |
+ __ lw(a6, MemOperand(a0, OFFSET_OF(T, reg_init))); |
+ __ lwl(a6, MemOperand(a0, OFFSET_OF(T, mem_init) + 2)); |
+ __ sw(a6, MemOperand(a0, OFFSET_OF(T, lwl_2))); |
- __ lw(a7, MemOperand(a0, OFFSET_OF(T, reg_init)) ); |
- __ lwl(a7, MemOperand(a0, OFFSET_OF(T, mem_init) + 3) ); |
- __ sw(a7, MemOperand(a0, OFFSET_OF(T, lwl_3)) ); |
+ __ lw(a7, MemOperand(a0, OFFSET_OF(T, reg_init))); |
+ __ lwl(a7, MemOperand(a0, OFFSET_OF(T, mem_init) + 3)); |
+ __ sw(a7, MemOperand(a0, OFFSET_OF(T, lwl_3))); |
// Test all combinations of LWR and vAddr. |
- __ lw(a4, MemOperand(a0, OFFSET_OF(T, reg_init)) ); |
- __ lwr(a4, MemOperand(a0, OFFSET_OF(T, mem_init)) ); |
- __ sw(a4, MemOperand(a0, OFFSET_OF(T, lwr_0)) ); |
+ __ lw(a4, MemOperand(a0, OFFSET_OF(T, reg_init))); |
+ __ lwr(a4, MemOperand(a0, OFFSET_OF(T, mem_init))); |
+ __ sw(a4, MemOperand(a0, OFFSET_OF(T, lwr_0))); |
- __ lw(a5, MemOperand(a0, OFFSET_OF(T, reg_init)) ); |
- __ lwr(a5, MemOperand(a0, OFFSET_OF(T, mem_init) + 1) ); |
- __ sw(a5, MemOperand(a0, OFFSET_OF(T, lwr_1)) ); |
+ __ lw(a5, MemOperand(a0, OFFSET_OF(T, reg_init))); |
+ __ lwr(a5, MemOperand(a0, OFFSET_OF(T, mem_init) + 1)); |
+ __ sw(a5, MemOperand(a0, OFFSET_OF(T, lwr_1))); |
- __ lw(a6, MemOperand(a0, OFFSET_OF(T, reg_init)) ); |
- __ lwr(a6, MemOperand(a0, OFFSET_OF(T, mem_init) + 2) ); |
+ __ lw(a6, MemOperand(a0, OFFSET_OF(T, reg_init))); |
+ __ lwr(a6, MemOperand(a0, OFFSET_OF(T, mem_init) + 2)); |
__ sw(a6, MemOperand(a0, OFFSET_OF(T, lwr_2)) ); |
- __ lw(a7, MemOperand(a0, OFFSET_OF(T, reg_init)) ); |
- __ lwr(a7, MemOperand(a0, OFFSET_OF(T, mem_init) + 3) ); |
+ __ lw(a7, MemOperand(a0, OFFSET_OF(T, reg_init))); |
+ __ lwr(a7, MemOperand(a0, OFFSET_OF(T, mem_init) + 3)); |
__ sw(a7, MemOperand(a0, OFFSET_OF(T, lwr_3)) ); |
// Test all combinations of SWL and vAddr. |
- __ lw(a4, MemOperand(a0, OFFSET_OF(T, mem_init)) ); |
- __ sw(a4, MemOperand(a0, OFFSET_OF(T, swl_0)) ); |
- __ lw(a4, MemOperand(a0, OFFSET_OF(T, reg_init)) ); |
- __ swl(a4, MemOperand(a0, OFFSET_OF(T, swl_0)) ); |
- |
- __ lw(a5, MemOperand(a0, OFFSET_OF(T, mem_init)) ); |
- __ sw(a5, MemOperand(a0, OFFSET_OF(T, swl_1)) ); |
- __ lw(a5, MemOperand(a0, OFFSET_OF(T, reg_init)) ); |
- __ swl(a5, MemOperand(a0, OFFSET_OF(T, swl_1) + 1) ); |
- |
- __ lw(a6, MemOperand(a0, OFFSET_OF(T, mem_init)) ); |
- __ sw(a6, MemOperand(a0, OFFSET_OF(T, swl_2)) ); |
- __ lw(a6, MemOperand(a0, OFFSET_OF(T, reg_init)) ); |
- __ swl(a6, MemOperand(a0, OFFSET_OF(T, swl_2) + 2) ); |
- |
- __ lw(a7, MemOperand(a0, OFFSET_OF(T, mem_init)) ); |
- __ sw(a7, MemOperand(a0, OFFSET_OF(T, swl_3)) ); |
- __ lw(a7, MemOperand(a0, OFFSET_OF(T, reg_init)) ); |
- __ swl(a7, MemOperand(a0, OFFSET_OF(T, swl_3) + 3) ); |
+ __ lw(a4, MemOperand(a0, OFFSET_OF(T, mem_init))); |
+ __ sw(a4, MemOperand(a0, OFFSET_OF(T, swl_0))); |
+ __ lw(a4, MemOperand(a0, OFFSET_OF(T, reg_init))); |
+ __ swl(a4, MemOperand(a0, OFFSET_OF(T, swl_0))); |
+ |
+ __ lw(a5, MemOperand(a0, OFFSET_OF(T, mem_init))); |
+ __ sw(a5, MemOperand(a0, OFFSET_OF(T, swl_1))); |
+ __ lw(a5, MemOperand(a0, OFFSET_OF(T, reg_init))); |
+ __ swl(a5, MemOperand(a0, OFFSET_OF(T, swl_1) + 1)); |
+ |
+ __ lw(a6, MemOperand(a0, OFFSET_OF(T, mem_init))); |
+ __ sw(a6, MemOperand(a0, OFFSET_OF(T, swl_2))); |
+ __ lw(a6, MemOperand(a0, OFFSET_OF(T, reg_init))); |
+ __ swl(a6, MemOperand(a0, OFFSET_OF(T, swl_2) + 2)); |
+ |
+ __ lw(a7, MemOperand(a0, OFFSET_OF(T, mem_init))); |
+ __ sw(a7, MemOperand(a0, OFFSET_OF(T, swl_3))); |
+ __ lw(a7, MemOperand(a0, OFFSET_OF(T, reg_init))); |
+ __ swl(a7, MemOperand(a0, OFFSET_OF(T, swl_3) + 3)); |
// Test all combinations of SWR and vAddr. |
- __ lw(a4, MemOperand(a0, OFFSET_OF(T, mem_init)) ); |
- __ sw(a4, MemOperand(a0, OFFSET_OF(T, swr_0)) ); |
- __ lw(a4, MemOperand(a0, OFFSET_OF(T, reg_init)) ); |
- __ swr(a4, MemOperand(a0, OFFSET_OF(T, swr_0)) ); |
- |
- __ lw(a5, MemOperand(a0, OFFSET_OF(T, mem_init)) ); |
- __ sw(a5, MemOperand(a0, OFFSET_OF(T, swr_1)) ); |
- __ lw(a5, MemOperand(a0, OFFSET_OF(T, reg_init)) ); |
- __ swr(a5, MemOperand(a0, OFFSET_OF(T, swr_1) + 1) ); |
- |
- __ lw(a6, MemOperand(a0, OFFSET_OF(T, mem_init)) ); |
- __ sw(a6, MemOperand(a0, OFFSET_OF(T, swr_2)) ); |
- __ lw(a6, MemOperand(a0, OFFSET_OF(T, reg_init)) ); |
- __ swr(a6, MemOperand(a0, OFFSET_OF(T, swr_2) + 2) ); |
- |
- __ lw(a7, MemOperand(a0, OFFSET_OF(T, mem_init)) ); |
- __ sw(a7, MemOperand(a0, OFFSET_OF(T, swr_3)) ); |
- __ lw(a7, MemOperand(a0, OFFSET_OF(T, reg_init)) ); |
- __ swr(a7, MemOperand(a0, OFFSET_OF(T, swr_3) + 3) ); |
+ __ lw(a4, MemOperand(a0, OFFSET_OF(T, mem_init))); |
+ __ sw(a4, MemOperand(a0, OFFSET_OF(T, swr_0))); |
+ __ lw(a4, MemOperand(a0, OFFSET_OF(T, reg_init))); |
+ __ swr(a4, MemOperand(a0, OFFSET_OF(T, swr_0))); |
+ |
+ __ lw(a5, MemOperand(a0, OFFSET_OF(T, mem_init))); |
+ __ sw(a5, MemOperand(a0, OFFSET_OF(T, swr_1))); |
+ __ lw(a5, MemOperand(a0, OFFSET_OF(T, reg_init))); |
+ __ swr(a5, MemOperand(a0, OFFSET_OF(T, swr_1) + 1)); |
+ |
+ __ lw(a6, MemOperand(a0, OFFSET_OF(T, mem_init))); |
+ __ sw(a6, MemOperand(a0, OFFSET_OF(T, swr_2))); |
+ __ lw(a6, MemOperand(a0, OFFSET_OF(T, reg_init))); |
+ __ swr(a6, MemOperand(a0, OFFSET_OF(T, swr_2) + 2)); |
+ |
+ __ lw(a7, MemOperand(a0, OFFSET_OF(T, mem_init))); |
+ __ sw(a7, MemOperand(a0, OFFSET_OF(T, swr_3))); |
+ __ lw(a7, MemOperand(a0, OFFSET_OF(T, reg_init))); |
+ __ swr(a7, MemOperand(a0, OFFSET_OF(T, swr_3) + 3)); |
__ jr(ra); |
__ nop(); |
@@ -1001,8 +1015,8 @@ TEST(MIPS12) { |
__ mov(t2, fp); // Save frame pointer. |
__ mov(fp, a0); // Access struct T by fp. |
- __ lw(a4, MemOperand(a0, OFFSET_OF(T, y)) ); |
- __ lw(a7, MemOperand(a0, OFFSET_OF(T, y4)) ); |
+ __ lw(a4, MemOperand(a0, OFFSET_OF(T, y))); |
+ __ lw(a7, MemOperand(a0, OFFSET_OF(T, y4))); |
__ addu(a5, a4, a7); |
__ subu(t0, a4, a7); |
@@ -1020,30 +1034,30 @@ TEST(MIPS12) { |
__ push(a7); |
__ pop(t0); |
__ nop(); |
- __ sw(a4, MemOperand(fp, OFFSET_OF(T, y)) ); |
- __ lw(a4, MemOperand(fp, OFFSET_OF(T, y)) ); |
+ __ sw(a4, MemOperand(fp, OFFSET_OF(T, y))); |
+ __ lw(a4, MemOperand(fp, OFFSET_OF(T, y))); |
__ nop(); |
- __ sw(a4, MemOperand(fp, OFFSET_OF(T, y)) ); |
- __ lw(a5, MemOperand(fp, OFFSET_OF(T, y)) ); |
+ __ sw(a4, MemOperand(fp, OFFSET_OF(T, y))); |
+ __ lw(a5, MemOperand(fp, OFFSET_OF(T, y))); |
__ nop(); |
__ push(a5); |
- __ lw(a5, MemOperand(fp, OFFSET_OF(T, y)) ); |
+ __ lw(a5, MemOperand(fp, OFFSET_OF(T, y))); |
__ pop(a5); |
__ nop(); |
__ push(a5); |
- __ lw(a6, MemOperand(fp, OFFSET_OF(T, y)) ); |
+ __ lw(a6, MemOperand(fp, OFFSET_OF(T, y))); |
__ pop(a5); |
__ nop(); |
__ push(a5); |
- __ lw(a6, MemOperand(fp, OFFSET_OF(T, y)) ); |
+ __ lw(a6, MemOperand(fp, OFFSET_OF(T, y))); |
__ pop(a6); |
__ nop(); |
__ push(a6); |
- __ lw(a6, MemOperand(fp, OFFSET_OF(T, y)) ); |
+ __ lw(a6, MemOperand(fp, OFFSET_OF(T, y))); |
__ pop(a5); |
__ nop(); |
__ push(a5); |
- __ lw(a6, MemOperand(fp, OFFSET_OF(T, y)) ); |
+ __ lw(a6, MemOperand(fp, OFFSET_OF(T, y))); |
__ pop(a7); |
__ nop(); |
@@ -1297,48 +1311,48 @@ TEST(MIPS16) { |
Label L, C; |
// Basic 32-bit word load/store, with un-signed data. |
- __ lw(a4, MemOperand(a0, OFFSET_OF(T, ui)) ); |
- __ sw(a4, MemOperand(a0, OFFSET_OF(T, r1)) ); |
+ __ lw(a4, MemOperand(a0, OFFSET_OF(T, ui))); |
+ __ sw(a4, MemOperand(a0, OFFSET_OF(T, r1))); |
// Check that the data got zero-extended into 64-bit a4. |
- __ sd(a4, MemOperand(a0, OFFSET_OF(T, r2)) ); |
+ __ sd(a4, MemOperand(a0, OFFSET_OF(T, r2))); |
// Basic 32-bit word load/store, with SIGNED data. |
- __ lw(a5, MemOperand(a0, OFFSET_OF(T, si)) ); |
- __ sw(a5, MemOperand(a0, OFFSET_OF(T, r3)) ); |
+ __ lw(a5, MemOperand(a0, OFFSET_OF(T, si))); |
+ __ sw(a5, MemOperand(a0, OFFSET_OF(T, r3))); |
// Check that the data got sign-extended into 64-bit a4. |
- __ sd(a5, MemOperand(a0, OFFSET_OF(T, r4)) ); |
+ __ sd(a5, MemOperand(a0, OFFSET_OF(T, r4))); |
// 32-bit UNSIGNED word load/store, with SIGNED data. |
- __ lwu(a6, MemOperand(a0, OFFSET_OF(T, si)) ); |
- __ sw(a6, MemOperand(a0, OFFSET_OF(T, r5)) ); |
+ __ lwu(a6, MemOperand(a0, OFFSET_OF(T, si))); |
+ __ sw(a6, MemOperand(a0, OFFSET_OF(T, r5))); |
// Check that the data got zero-extended into 64-bit a4. |
- __ sd(a6, MemOperand(a0, OFFSET_OF(T, r6)) ); |
+ __ sd(a6, MemOperand(a0, OFFSET_OF(T, r6))); |
// lh with positive data. |
- __ lh(a5, MemOperand(a0, OFFSET_OF(T, ui)) ); |
- __ sw(a5, MemOperand(a0, OFFSET_OF(T, r2)) ); |
+ __ lh(a5, MemOperand(a0, OFFSET_OF(T, ui))); |
+ __ sw(a5, MemOperand(a0, OFFSET_OF(T, r2))); |
// lh with negative data. |
- __ lh(a6, MemOperand(a0, OFFSET_OF(T, si)) ); |
- __ sw(a6, MemOperand(a0, OFFSET_OF(T, r3)) ); |
+ __ lh(a6, MemOperand(a0, OFFSET_OF(T, si))); |
+ __ sw(a6, MemOperand(a0, OFFSET_OF(T, r3))); |
// lhu with negative data. |
- __ lhu(a7, MemOperand(a0, OFFSET_OF(T, si)) ); |
- __ sw(a7, MemOperand(a0, OFFSET_OF(T, r4)) ); |
+ __ lhu(a7, MemOperand(a0, OFFSET_OF(T, si))); |
+ __ sw(a7, MemOperand(a0, OFFSET_OF(T, r4))); |
// lb with negative data. |
- __ lb(t0, MemOperand(a0, OFFSET_OF(T, si)) ); |
- __ sw(t0, MemOperand(a0, OFFSET_OF(T, r5)) ); |
+ __ lb(t0, MemOperand(a0, OFFSET_OF(T, si))); |
+ __ sw(t0, MemOperand(a0, OFFSET_OF(T, r5))); |
// // sh writes only 1/2 of word. |
__ lui(t1, 0x3333); |
__ ori(t1, t1, 0x3333); |
- __ sw(t1, MemOperand(a0, OFFSET_OF(T, r6)) ); |
- __ lhu(t1, MemOperand(a0, OFFSET_OF(T, si)) ); |
- __ sh(t1, MemOperand(a0, OFFSET_OF(T, r6)) ); |
+ __ sw(t1, MemOperand(a0, OFFSET_OF(T, r6))); |
+ __ lhu(t1, MemOperand(a0, OFFSET_OF(T, si))); |
+ __ sh(t1, MemOperand(a0, OFFSET_OF(T, r6))); |
__ jr(ra); |
__ nop(); |