| Index: test/cctest/test-assembler-mips64.cc
|
| diff --git a/test/cctest/test-assembler-mips64.cc b/test/cctest/test-assembler-mips64.cc
|
| index dd8841a26a84be03a2d5259d000ca74767bae58d..b2f7ba8b8d9e0283cf9e37be498640569e7238ee 100644
|
| --- a/test/cctest/test-assembler-mips64.cc
|
| +++ b/test/cctest/test-assembler-mips64.cc
|
| @@ -45,6 +45,8 @@ typedef Object* (*F1)(int x, int p1, int p2, int p3, int p4);
|
| typedef Object* (*F2)(int x, int y, int p2, int p3, int p4);
|
| typedef Object* (*F3)(void* p, int p1, int p2, int p3, int p4);
|
|
|
| +// clang-format off
|
| +
|
|
|
| #define __ assm.
|
|
|
| @@ -337,6 +339,13 @@ TEST(MIPS3) {
|
| double g;
|
| double h;
|
| double i;
|
| + float fa;
|
| + float fb;
|
| + float fc;
|
| + float fd;
|
| + float fe;
|
| + float ff;
|
| + float fg;
|
| } T;
|
| T t;
|
|
|
| @@ -345,6 +354,7 @@ TEST(MIPS3) {
|
| MacroAssembler assm(isolate, NULL, 0);
|
| Label L, C;
|
|
|
| + // Double precision floating point instructions.
|
| __ ldc1(f4, MemOperand(a0, OFFSET_OF(T, a)) );
|
| __ ldc1(f6, MemOperand(a0, OFFSET_OF(T, b)) );
|
| __ add_d(f8, f4, f6);
|
| @@ -377,6 +387,30 @@ TEST(MIPS3) {
|
| __ sdc1(f14, MemOperand(a0, OFFSET_OF(T, h)) );
|
| }
|
|
|
| + // Single precision floating point instructions.
|
| + __ lwc1(f4, MemOperand(a0, OFFSET_OF(T, fa)) );
|
| + __ lwc1(f6, MemOperand(a0, OFFSET_OF(T, fb)) );
|
| + __ add_s(f8, f4, f6);
|
| + __ swc1(f8, MemOperand(a0, OFFSET_OF(T, fc)) ); // fc = fa + fb.
|
| +
|
| + __ neg_s(f10, f6); // -fb
|
| + __ sub_s(f10, f8, f10);
|
| + __ swc1(f10, MemOperand(a0, OFFSET_OF(T, fd)) ); // fd = fc - (-fb).
|
| +
|
| + __ swc1(f4, MemOperand(a0, OFFSET_OF(T, fb)) ); // fb = fa.
|
| +
|
| + __ li(t0, 120);
|
| + __ mtc1(t0, f14);
|
| + __ cvt_s_w(f14, f14); // f14 = 120.0.
|
| + __ mul_s(f10, f10, f14);
|
| + __ swc1(f10, MemOperand(a0, OFFSET_OF(T, fe)) ); // fe = fd * 120
|
| +
|
| + __ div_s(f12, f10, f4);
|
| + __ swc1(f12, MemOperand(a0, OFFSET_OF(T, ff)) ); // ff = fe / fa
|
| +
|
| + __ sqrt_s(f14, f12);
|
| + __ swc1(f14, MemOperand(a0, OFFSET_OF(T, fg)) );
|
| +
|
| __ jr(ra);
|
| __ nop();
|
|
|
| @@ -385,6 +419,7 @@ TEST(MIPS3) {
|
| Handle<Code> code = isolate->factory()->NewCode(
|
| desc, Code::ComputeFlags(Code::STUB), Handle<Code>());
|
| F3 f = FUNCTION_CAST<F3>(code->entry());
|
| + // Double test values.
|
| t.a = 1.5e14;
|
| t.b = 2.75e11;
|
| t.c = 0.0;
|
| @@ -393,8 +428,16 @@ TEST(MIPS3) {
|
| t.f = 0.0;
|
| t.h = 1.5;
|
| t.i = 2.75;
|
| + // Single test values.
|
| + t.fa = 1.5e6;
|
| + t.fb = 2.75e4;
|
| + t.fc = 0.0;
|
| + t.fd = 0.0;
|
| + t.fe = 0.0;
|
| + t.ff = 0.0;
|
| Object* dummy = CALL_GENERATED_CODE(f, &t, 0, 0, 0, 0);
|
| USE(dummy);
|
| + // Expected double results.
|
| CHECK_EQ(1.5e14, t.a);
|
| CHECK_EQ(1.5e14, t.b);
|
| CHECK_EQ(1.50275e14, t.c);
|
| @@ -405,6 +448,14 @@ TEST(MIPS3) {
|
| if (kArchVariant == kMips64r2) {
|
| CHECK_EQ(6.875, t.h);
|
| }
|
| + // Expected single results.
|
| + CHECK_EQ(1.5e6, t.fa);
|
| + CHECK_EQ(1.5e6, t.fb);
|
| + CHECK_EQ(1.5275e06, t.fc);
|
| + CHECK_EQ(1.5550e06, t.fd);
|
| + CHECK_EQ(1.866e08, t.fe);
|
| + CHECK_EQ(124.40000152587890625, t.ff);
|
| + CHECK_EQ(11.1534748077392578125, t.fg);
|
| }
|
|
|
|
|
|
|