| Index: test/cctest/test-assembler-mips.cc
|
| diff --git a/test/cctest/test-assembler-mips.cc b/test/cctest/test-assembler-mips.cc
|
| index d29419e2ff18f18f37e7d1c7476f373e2e749c80..fbb858cc6d03b5a6fde69aa64b20f8ff35a285bf 100644
|
| --- a/test/cctest/test-assembler-mips.cc
|
| +++ b/test/cctest/test-assembler-mips.cc
|
| @@ -48,94 +48,6 @@ typedef Object* (*F3)(void* p, int p1, int p2, int p3, int p4);
|
|
|
|
|
| #define __ assm.
|
| -TEST(MIPS16) {
|
| - CcTest::InitializeVM();
|
| - Isolate* isolate = CcTest::i_isolate();
|
| - HandleScope scope(isolate);
|
| - MacroAssembler assm(isolate, NULL, 0);
|
| -
|
| - typedef struct test {
|
| - int a;
|
| - int b;
|
| - int c;
|
| - int d;
|
| - double e;
|
| - double f;
|
| - double g;
|
| - double h;
|
| - double i;
|
| - double j;
|
| - double k;
|
| - double l;
|
| - } Test;
|
| -
|
| - Test test;
|
| - // integer part of test
|
| - __ addiu(t1, zero_reg, 1); // t1=1
|
| - __ seleqz(t1, zero_reg, t3); // t3=1
|
| - __ sw(t3, MemOperand(a0, OFFSET_OF(Test, a))); // a=1
|
| - __ seleqz(t1, t1, t2); // t2=0
|
| - __ sw(t2, MemOperand(a0, OFFSET_OF(Test, b))); // b=0
|
| - __ selnez(t1, zero_reg, t3); // t3=1;
|
| - __ sw(t3, MemOperand(a0, OFFSET_OF(Test, c))); // c=0
|
| - __ selnez(t1, t1, t3); // t3=1
|
| - __ sw(t3, MemOperand(a0, OFFSET_OF(Test, d))); // d=1
|
| - // floating point part of test S format
|
| - __ li(t0, 0x80);
|
| - __ mtc1(t0, f4);
|
| - __ cvt_d_w(f4, f4); // f4=0x80
|
| - __ li(t0, 0xf3);
|
| - __ mtc1(t0, f6);
|
| - __ cvt_d_w(f6, f6); // f6=0xf3
|
| - __ seleqz(S, f8, f4, f6); // f8=0xf3
|
| - __ seleqz(S, f10, f6, f6); // f10=0
|
| - __ sdc1(f8, MemOperand(a0, OFFSET_OF(Test, e))); // e=0xf3
|
| - __ sdc1(f10, MemOperand(a0, OFFSET_OF(Test, f))); // f=0
|
| - __ selnez(S, f8, f4, f6); // f8=0
|
| - __ selnez(S, f10, f6, f6); // f10=0xf3*/
|
| - __ sdc1(f8, MemOperand(a0, OFFSET_OF(Test, g))); // g=0
|
| - __ sdc1(f10, MemOperand(a0, OFFSET_OF(Test, h))); // h=0xf3
|
| -
|
| - __ li(t0, 0x80);
|
| - __ mtc1(t0, f4);
|
| - __ cvt_d_w(f4, f4); // f4=0x80
|
| - __ li(t0, 0xf3);
|
| - __ mtc1(t0, f6);
|
| - __ cvt_d_w(f6, f6); // f6=0xf3
|
| - __ seleqz(D, f8, f4, f6); // f8=0xf3
|
| - __ seleqz(D, f10, f6, f6); // f10=0
|
| - __ sdc1(f8, MemOperand(a0, OFFSET_OF(Test, i))); // i=0xf3
|
| - __ sdc1(f10, MemOperand(a0, OFFSET_OF(Test, j))); // j=0
|
| - __ selnez(S, f8, f4, f6); // f8=0
|
| - __ selnez(S, f10, f6, f6); // f10=0xf3*/
|
| - __ sdc1(f8, MemOperand(a0, OFFSET_OF(Test, k))); // k=0
|
| - __ sdc1(f10, MemOperand(a0, OFFSET_OF(Test, l))); // l=0xf3
|
| - __ 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());
|
| -
|
| - (CALL_GENERATED_CODE(f, &test, 0, 0, 0, 0));
|
| -
|
| - CHECK_EQ(test.a, 1);
|
| - CHECK_EQ(test.b, 0);
|
| - CHECK_EQ(test.c, 0);
|
| - CHECK_EQ(test.d, 1);
|
| -
|
| - CHECK_EQ(test.e, 0xf3);
|
| - CHECK_EQ(test.f, 0x0);
|
| - CHECK_EQ(test.g, 0);
|
| - CHECK_EQ(test.h, 0xf3);
|
| -
|
| - CHECK_EQ(test.i, 0xf3);
|
| - CHECK_EQ(test.j, 0x0);
|
| - CHECK_EQ(test.k, 0);
|
| - CHECK_EQ(test.l, 0xf3);
|
| -}
|
| -
|
|
|
| TEST(MIPS0) {
|
| CcTest::InitializeVM();
|
| @@ -1363,6 +1275,97 @@ TEST(MIPS15) {
|
| }
|
|
|
|
|
| +TEST(MIPS16) {
|
| + if (IsMipsArchVariant(kMips32r6)) {
|
| + CcTest::InitializeVM();
|
| + Isolate* isolate = CcTest::i_isolate();
|
| + HandleScope scope(isolate);
|
| + MacroAssembler assm(isolate, NULL, 0);
|
| +
|
| + typedef struct test {
|
| + int a;
|
| + int b;
|
| + int c;
|
| + int d;
|
| + double e;
|
| + double f;
|
| + double g;
|
| + double h;
|
| + double i;
|
| + double j;
|
| + double k;
|
| + double l;
|
| + } Test;
|
| +
|
| + Test test;
|
| + // Integer part of test.
|
| + __ addiu(t1, zero_reg, 1); // t1 = 1
|
| + __ seleqz(t1, zero_reg, t3); // t3 = 1
|
| + __ sw(t3, MemOperand(a0, OFFSET_OF(Test, a))); // a = 1
|
| + __ seleqz(t1, t1, t2); // t2 = 0
|
| + __ sw(t2, MemOperand(a0, OFFSET_OF(Test, b))); // b = 0
|
| + __ selnez(t1, zero_reg, t3); // t3 = 1;
|
| + __ sw(t3, MemOperand(a0, OFFSET_OF(Test, c))); // c = 0
|
| + __ selnez(t1, t1, t3); // t3 = 1
|
| + __ sw(t3, MemOperand(a0, OFFSET_OF(Test, d))); // d = 1
|
| + // Floating point part of test S format.
|
| + __ li(t0, 0x80);
|
| + __ mtc1(t0, f4);
|
| + __ cvt_d_w(f4, f4); // f4 = 0x80
|
| + __ li(t0, 0xf3);
|
| + __ mtc1(t0, f6);
|
| + __ cvt_d_w(f6, f6); // f6 = 0xf3
|
| + __ seleqz(S, f8, f4, f6); // f8 = 0xf3
|
| + __ seleqz(S, f10, f6, f6); // f10 = 0
|
| + __ sdc1(f8, MemOperand(a0, OFFSET_OF(Test, e))); // e = 0xf3
|
| + __ sdc1(f10, MemOperand(a0, OFFSET_OF(Test, f))); // f = 0
|
| + __ selnez(S, f8, f4, f6); // f8 = 0
|
| + __ selnez(S, f10, f6, f6); // f10 = 0xf3
|
| + __ sdc1(f8, MemOperand(a0, OFFSET_OF(Test, g))); // g = 0
|
| + __ sdc1(f10, MemOperand(a0, OFFSET_OF(Test, h))); // h = 0xf3
|
| +
|
| + __ li(t0, 0x80);
|
| + __ mtc1(t0, f4);
|
| + __ cvt_d_w(f4, f4); // f4 = 0x80
|
| + __ li(t0, 0xf3);
|
| + __ mtc1(t0, f6);
|
| + __ cvt_d_w(f6, f6); // f6 = 0xf3
|
| + __ seleqz(D, f8, f4, f6); // f8 = 0xf3
|
| + __ seleqz(D, f10, f6, f6); // f10 = 0
|
| + __ sdc1(f8, MemOperand(a0, OFFSET_OF(Test, i))); // i = 0xf3
|
| + __ sdc1(f10, MemOperand(a0, OFFSET_OF(Test, j))); // j = 0
|
| + __ selnez(S, f8, f4, f6); // f8 = 0
|
| + __ selnez(S, f10, f6, f6); // f10 = 0xf3
|
| + __ sdc1(f8, MemOperand(a0, OFFSET_OF(Test, k))); // k = 0
|
| + __ sdc1(f10, MemOperand(a0, OFFSET_OF(Test, l))); // l = 0xf3
|
| + __ 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());
|
| +
|
| + (CALL_GENERATED_CODE(f, &test, 0, 0, 0, 0));
|
| +
|
| + CHECK_EQ(test.a, 1);
|
| + CHECK_EQ(test.b, 0);
|
| + CHECK_EQ(test.c, 0);
|
| + CHECK_EQ(test.d, 1);
|
| +
|
| + CHECK_EQ(test.e, 0xf3);
|
| + CHECK_EQ(test.f, 0x0);
|
| + CHECK_EQ(test.g, 0);
|
| + CHECK_EQ(test.h, 0xf3);
|
| +
|
| + CHECK_EQ(test.i, 0xf3);
|
| + CHECK_EQ(test.j, 0x0);
|
| + CHECK_EQ(test.k, 0);
|
| + CHECK_EQ(test.l, 0xf3);
|
| + }
|
| +}
|
| +
|
| +
|
| TEST(jump_tables1) {
|
| // Test jump tables with forward jumps.
|
| CcTest::InitializeVM();
|
|
|