| Index: runtime/vm/assembler_arm64_test.cc
|
| ===================================================================
|
| --- runtime/vm/assembler_arm64_test.cc (revision 41606)
|
| +++ runtime/vm/assembler_arm64_test.cc (working copy)
|
| @@ -887,6 +887,82 @@
|
| }
|
|
|
|
|
| +ASSEMBLER_TEST_GENERATE(CmpBranchIfZero, assembler) {
|
| + Label l;
|
| +
|
| + __ movz(R0, Immediate(42), 0);
|
| + __ movz(R1, Immediate(0), 0);
|
| +
|
| + __ cbz(&l, R1);
|
| + __ movz(R0, Immediate(0), 0);
|
| + __ Bind(&l);
|
| + __ ret();
|
| +}
|
| +
|
| +
|
| +ASSEMBLER_TEST_RUN(CmpBranchIfZero, test) {
|
| + typedef int64_t (*Int64Return)() DART_UNUSED;
|
| + EXPECT_EQ(42, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
|
| +}
|
| +
|
| +
|
| +ASSEMBLER_TEST_GENERATE(CmpBranchIfZeroNotTaken, assembler) {
|
| + Label l;
|
| +
|
| + __ movz(R0, Immediate(0), 0);
|
| + __ movz(R1, Immediate(1), 0);
|
| +
|
| + __ cbz(&l, R1);
|
| + __ movz(R0, Immediate(42), 0);
|
| + __ Bind(&l);
|
| + __ ret();
|
| +}
|
| +
|
| +
|
| +ASSEMBLER_TEST_RUN(CmpBranchIfZeroNotTaken, test) {
|
| + typedef int64_t (*Int64Return)() DART_UNUSED;
|
| + EXPECT_EQ(42, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
|
| +}
|
| +
|
| +
|
| +ASSEMBLER_TEST_GENERATE(CmpBranchIfNotZero, assembler) {
|
| + Label l;
|
| +
|
| + __ movz(R0, Immediate(42), 0);
|
| + __ movz(R1, Immediate(1), 0);
|
| +
|
| + __ cbnz(&l, R1);
|
| + __ movz(R0, Immediate(0), 0);
|
| + __ Bind(&l);
|
| + __ ret();
|
| +}
|
| +
|
| +
|
| +ASSEMBLER_TEST_RUN(CmpBranchIfNotZero, test) {
|
| + typedef int64_t (*Int64Return)() DART_UNUSED;
|
| + EXPECT_EQ(42, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
|
| +}
|
| +
|
| +
|
| +ASSEMBLER_TEST_GENERATE(CmpBranchIfNotZeroNotTaken, assembler) {
|
| + Label l;
|
| +
|
| + __ movz(R0, Immediate(0), 0);
|
| + __ movz(R1, Immediate(0), 0);
|
| +
|
| + __ cbnz(&l, R1);
|
| + __ movz(R0, Immediate(42), 0);
|
| + __ Bind(&l);
|
| + __ ret();
|
| +}
|
| +
|
| +
|
| +ASSEMBLER_TEST_RUN(CmpBranchIfNotZeroNotTaken, test) {
|
| + typedef int64_t (*Int64Return)() DART_UNUSED;
|
| + EXPECT_EQ(42, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
|
| +}
|
| +
|
| +
|
| ASSEMBLER_TEST_GENERATE(FcmpEqBranch, assembler) {
|
| Label l;
|
|
|
| @@ -1373,6 +1449,21 @@
|
| }
|
|
|
|
|
| +ASSEMBLER_TEST_GENERATE(Umaddl, assembler) {
|
| + __ movn(R1, Immediate(0), 0); // W1 = 0xffffffff.
|
| + __ movz(R2, Immediate(7), 0); // W2 = 7.
|
| + __ movz(R3, Immediate(8), 0); // X3 = 8.
|
| + __ umaddl(R0, R1, R2, R3); // X0 = W1*W2 + X3 = 0x700000001.
|
| + __ ret();
|
| +}
|
| +
|
| +
|
| +ASSEMBLER_TEST_RUN(Umaddl, test) {
|
| + typedef int64_t (*Int64Return)() DART_UNUSED;
|
| + EXPECT_EQ(0x700000001, EXECUTE_TEST_CODE_INT64(Int64Return, test->entry()));
|
| +}
|
| +
|
| +
|
| // Loading immediate values without the object pool.
|
| ASSEMBLER_TEST_GENERATE(LoadImmediateSmall, assembler) {
|
| __ LoadImmediate(R0, 42, kNoRegister);
|
|
|