| Index: runtime/vm/assembler_mips_test.cc
|
| ===================================================================
|
| --- runtime/vm/assembler_mips_test.cc (revision 31003)
|
| +++ runtime/vm/assembler_mips_test.cc (working copy)
|
| @@ -693,6 +693,27 @@
|
| }
|
|
|
|
|
| +ASSEMBLER_TEST_GENERATE(Beq_backward_far, assembler) {
|
| + Label l;
|
| +
|
| + __ set_use_far_branches(true);
|
| +
|
| + __ LoadImmediate(T1, 0);
|
| + __ LoadImmediate(T2, 1);
|
| + __ Bind(&l);
|
| + __ addiu(T1, T1, Immediate(1));
|
| + __ beq(T1, T2, &l);
|
| + __ ori(V0, T1, Immediate(0));
|
| + __ jr(RA);
|
| +}
|
| +
|
| +
|
| +ASSEMBLER_TEST_RUN(Beq_backward_far, test) {
|
| + typedef int (*SimpleCode)();
|
| + EXPECT_EQ(2, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
|
| +}
|
| +
|
| +
|
| ASSEMBLER_TEST_GENERATE(Beq_backward_delay, assembler) {
|
| Label l;
|
|
|
| @@ -733,6 +754,28 @@
|
| }
|
|
|
|
|
| +ASSEMBLER_TEST_GENERATE(Beq_forward_taken_far, assembler) {
|
| + Label l;
|
| +
|
| + __ set_use_far_branches(true);
|
| +
|
| + __ LoadImmediate(T5, 1);
|
| + __ LoadImmediate(T6, 1);
|
| +
|
| + __ LoadImmediate(V0, 42);
|
| + __ beq(T5, T6, &l);
|
| + __ LoadImmediate(V0, 0);
|
| + __ Bind(&l);
|
| + __ jr(RA);
|
| +}
|
| +
|
| +
|
| +ASSEMBLER_TEST_RUN(Beq_forward_taken_far, test) {
|
| + typedef int (*SimpleCode)();
|
| + EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
|
| +}
|
| +
|
| +
|
| ASSEMBLER_TEST_GENERATE(Beq_forward_not_taken, assembler) {
|
| Label l;
|
|
|
| @@ -741,6 +784,7 @@
|
|
|
| __ LoadImmediate(V0, 42);
|
| __ beq(T5, T6, &l);
|
| + __ nop();
|
| __ LoadImmediate(V0, 0);
|
| __ Bind(&l);
|
| __ jr(RA);
|
| @@ -753,6 +797,55 @@
|
| }
|
|
|
|
|
| +ASSEMBLER_TEST_GENERATE(Beq_forward_not_taken_far, assembler) {
|
| + Label l;
|
| +
|
| + __ set_use_far_branches(true);
|
| +
|
| + __ LoadImmediate(T5, 0);
|
| + __ LoadImmediate(T6, 1);
|
| +
|
| + __ LoadImmediate(V0, 42);
|
| + __ beq(T5, T6, &l);
|
| + __ nop();
|
| + __ LoadImmediate(V0, 0);
|
| + __ Bind(&l);
|
| + __ jr(RA);
|
| +}
|
| +
|
| +
|
| +ASSEMBLER_TEST_RUN(Beq_forward_not_taken_far, test) {
|
| + typedef int (*SimpleCode)();
|
| + EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
|
| +}
|
| +
|
| +
|
| +ASSEMBLER_TEST_GENERATE(Beq_forward_not_taken_far2, assembler) {
|
| + Label l;
|
| +
|
| + __ set_use_far_branches(true);
|
| +
|
| + __ LoadImmediate(T5, 0);
|
| + __ LoadImmediate(T6, 1);
|
| +
|
| + __ LoadImmediate(V0, 42);
|
| + __ beq(T5, T6, &l);
|
| + __ nop();
|
| + for (int i = 0; i < (1 << 15); i++) {
|
| + __ nop();
|
| + }
|
| + __ LoadImmediate(V0, 0);
|
| + __ Bind(&l);
|
| + __ jr(RA);
|
| +}
|
| +
|
| +
|
| +ASSEMBLER_TEST_RUN(Beq_forward_not_taken_far2, test) {
|
| + typedef int (*SimpleCode)();
|
| + EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
|
| +}
|
| +
|
| +
|
| ASSEMBLER_TEST_GENERATE(Beq_forward_taken2, assembler) {
|
| Label l;
|
|
|
| @@ -775,6 +868,57 @@
|
| }
|
|
|
|
|
| +ASSEMBLER_TEST_GENERATE(Beq_forward_taken_far2, assembler) {
|
| + Label l;
|
| +
|
| + __ set_use_far_branches(true);
|
| +
|
| + __ LoadImmediate(T5, 1);
|
| + __ LoadImmediate(T6, 1);
|
| +
|
| + __ LoadImmediate(V0, 42);
|
| + __ beq(T5, T6, &l);
|
| + __ nop();
|
| + __ nop();
|
| + __ LoadImmediate(V0, 0);
|
| + __ Bind(&l);
|
| + __ jr(RA);
|
| +}
|
| +
|
| +
|
| +ASSEMBLER_TEST_RUN(Beq_forward_taken_far2, test) {
|
| + typedef int (*SimpleCode)();
|
| + EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
|
| +}
|
| +
|
| +
|
| +ASSEMBLER_TEST_GENERATE(Beq_forward_taken_far3, assembler) {
|
| + Label l;
|
| +
|
| + __ set_use_far_branches(true);
|
| +
|
| + __ LoadImmediate(T5, 1);
|
| + __ LoadImmediate(T6, 1);
|
| +
|
| + __ LoadImmediate(V0, 42);
|
| + __ beq(T5, T6, &l);
|
| + __ nop();
|
| + for (int i = 0; i < (1 << 15); i++) {
|
| + __ nop();
|
| + }
|
| + __ nop();
|
| + __ LoadImmediate(V0, 0);
|
| + __ Bind(&l);
|
| + __ jr(RA);
|
| +}
|
| +
|
| +
|
| +ASSEMBLER_TEST_RUN(Beq_forward_taken_far3, test) {
|
| + typedef int (*SimpleCode)();
|
| + EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
|
| +}
|
| +
|
| +
|
| ASSEMBLER_TEST_GENERATE(Beq_forward_taken_delay, assembler) {
|
| Label l;
|
|
|
| @@ -855,6 +999,145 @@
|
| }
|
|
|
|
|
| +ASSEMBLER_TEST_GENERATE(Bgez_far, assembler) {
|
| + Label l;
|
| +
|
| + __ set_use_far_branches(true);
|
| +
|
| + __ LoadImmediate(T5, 3);
|
| + __ Bind(&l);
|
| + __ bgez(T5, &l);
|
| + __ delay_slot()->addiu(T5, T5, Immediate(-1));
|
| + __ ori(V0, T5, Immediate(0));
|
| + __ jr(RA);
|
| +}
|
| +
|
| +
|
| +ASSEMBLER_TEST_RUN(Bgez_far, test) {
|
| + typedef int (*SimpleCode)();
|
| + EXPECT_EQ(-2, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
|
| +}
|
| +
|
| +
|
| +ASSEMBLER_TEST_GENERATE(Bgez_far2, assembler) {
|
| + Label l;
|
| +
|
| + __ set_use_far_branches(true);
|
| +
|
| + __ LoadImmediate(T5, 3);
|
| + __ Bind(&l);
|
| + for (int i = 0; i < (1 << 15); i++) {
|
| + __ nop();
|
| + }
|
| + __ bgez(T5, &l);
|
| + __ delay_slot()->addiu(T5, T5, Immediate(-1));
|
| + __ ori(V0, T5, Immediate(0));
|
| + __ jr(RA);
|
| +}
|
| +
|
| +
|
| +ASSEMBLER_TEST_RUN(Bgez_far2, test) {
|
| + typedef int (*SimpleCode)();
|
| + EXPECT_EQ(-2, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
|
| +}
|
| +
|
| +
|
| +ASSEMBLER_TEST_GENERATE(Bgez_taken_forward_far, assembler) {
|
| + Label l;
|
| +
|
| + __ set_use_far_branches(true);
|
| +
|
| + __ LoadImmediate(T5, 1);
|
| +
|
| + __ LoadImmediate(V0, 42);
|
| + __ bgez(T5, &l);
|
| + __ nop();
|
| + __ nop();
|
| + __ LoadImmediate(V0, 0);
|
| + __ Bind(&l);
|
| + __ jr(RA);
|
| +}
|
| +
|
| +
|
| +ASSEMBLER_TEST_RUN(Bgez_taken_forward_far, test) {
|
| + typedef int (*SimpleCode)();
|
| + EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
|
| +}
|
| +
|
| +
|
| +ASSEMBLER_TEST_GENERATE(Bgez_taken_forward_far2, assembler) {
|
| + Label l;
|
| +
|
| + __ set_use_far_branches(true);
|
| +
|
| + __ LoadImmediate(T5, 1);
|
| +
|
| + __ LoadImmediate(V0, 42);
|
| + __ bgez(T5, &l);
|
| + __ nop();
|
| + for (int i = 0; i < (1 << 15); i++) {
|
| + __ nop();
|
| + }
|
| + __ LoadImmediate(V0, 0);
|
| + __ Bind(&l);
|
| + __ jr(RA);
|
| +}
|
| +
|
| +
|
| +ASSEMBLER_TEST_RUN(Bgez_taken_forward_far2, test) {
|
| + typedef int (*SimpleCode)();
|
| + EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
|
| +}
|
| +
|
| +
|
| +ASSEMBLER_TEST_GENERATE(Bgez_not_taken_forward_far, assembler) {
|
| + Label l;
|
| +
|
| + __ set_use_far_branches(true);
|
| +
|
| + __ LoadImmediate(T5, -1);
|
| +
|
| + __ LoadImmediate(V0, 42);
|
| + __ bgez(T5, &l);
|
| + __ nop();
|
| + __ nop();
|
| + __ LoadImmediate(V0, 0);
|
| + __ Bind(&l);
|
| + __ jr(RA);
|
| +}
|
| +
|
| +
|
| +ASSEMBLER_TEST_RUN(Bgez_not_taken_forward_far, test) {
|
| + typedef int (*SimpleCode)();
|
| + EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
|
| +}
|
| +
|
| +
|
| +ASSEMBLER_TEST_GENERATE(Bgez_not_taken_forward_far2, assembler) {
|
| + Label l;
|
| +
|
| + __ set_use_far_branches(true);
|
| +
|
| + __ LoadImmediate(T5, -1);
|
| +
|
| + __ LoadImmediate(V0, 42);
|
| + __ bgez(T5, &l);
|
| + __ nop();
|
| + for (int i = 0; i < (1 << 15); i++) {
|
| + __ nop();
|
| + }
|
| + __ LoadImmediate(V0, 0);
|
| + __ Bind(&l);
|
| + __ jr(RA);
|
| +}
|
| +
|
| +
|
| +ASSEMBLER_TEST_RUN(Bgez_not_taken_forward_far2, test) {
|
| + typedef int (*SimpleCode)();
|
| + EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
|
| +}
|
| +
|
| +
|
| ASSEMBLER_TEST_GENERATE(Bgezl, assembler) {
|
| Label l;
|
|
|
| @@ -891,6 +1174,95 @@
|
| }
|
|
|
|
|
| +ASSEMBLER_TEST_GENERATE(Blez_far, assembler) {
|
| + Label l;
|
| +
|
| + __ set_use_far_branches(true);
|
| +
|
| + __ LoadImmediate(T5, -3);
|
| + __ Bind(&l);
|
| + __ blez(T5, &l);
|
| + __ delay_slot()->addiu(T5, T5, Immediate(1));
|
| + __ ori(V0, T5, Immediate(0));
|
| + __ jr(RA);
|
| +}
|
| +
|
| +
|
| +ASSEMBLER_TEST_RUN(Blez_far, test) {
|
| + typedef int (*SimpleCode)();
|
| + EXPECT_EQ(2, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
|
| +}
|
| +
|
| +
|
| +ASSEMBLER_TEST_GENERATE(Blez_far2, assembler) {
|
| + Label l;
|
| +
|
| + __ set_use_far_branches(true);
|
| +
|
| + __ LoadImmediate(T5, -3);
|
| + __ Bind(&l);
|
| + for (int i = 0; i < (1 << 15); i++) {
|
| + __ nop();
|
| + }
|
| + __ blez(T5, &l);
|
| + __ delay_slot()->addiu(T5, T5, Immediate(1));
|
| + __ ori(V0, T5, Immediate(0));
|
| + __ jr(RA);
|
| +}
|
| +
|
| +
|
| +ASSEMBLER_TEST_RUN(Blez_far2, test) {
|
| + typedef int (*SimpleCode)();
|
| + EXPECT_EQ(2, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
|
| +}
|
| +
|
| +
|
| +ASSEMBLER_TEST_GENERATE(Blez_taken_forward_far, assembler) {
|
| + Label l;
|
| +
|
| + __ set_use_far_branches(true);
|
| +
|
| + __ LoadImmediate(T5, -1);
|
| +
|
| + __ LoadImmediate(V0, 42);
|
| + __ blez(T5, &l);
|
| + __ nop();
|
| + __ nop();
|
| + __ LoadImmediate(V0, 0);
|
| + __ Bind(&l);
|
| + __ jr(RA);
|
| +}
|
| +
|
| +
|
| +ASSEMBLER_TEST_RUN(Blez_taken_forward_far, test) {
|
| + typedef int (*SimpleCode)();
|
| + EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
|
| +}
|
| +
|
| +
|
| +ASSEMBLER_TEST_GENERATE(Blez_not_taken_forward_far, assembler) {
|
| + Label l;
|
| +
|
| + __ set_use_far_branches(true);
|
| +
|
| + __ LoadImmediate(T5, 1);
|
| +
|
| + __ LoadImmediate(V0, 42);
|
| + __ blez(T5, &l);
|
| + __ nop();
|
| + __ nop();
|
| + __ LoadImmediate(V0, 0);
|
| + __ Bind(&l);
|
| + __ jr(RA);
|
| +}
|
| +
|
| +
|
| +ASSEMBLER_TEST_RUN(Blez_not_taken_forward_far, test) {
|
| + typedef int (*SimpleCode)();
|
| + EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
|
| +}
|
| +
|
| +
|
| ASSEMBLER_TEST_GENERATE(Blezl, assembler) {
|
| Label l;
|
|
|
|
|