| Index: runtime/vm/object_arm64_test.cc
|
| ===================================================================
|
| --- runtime/vm/object_arm64_test.cc (revision 35070)
|
| +++ runtime/vm/object_arm64_test.cc (working copy)
|
| @@ -6,6 +6,51 @@
|
| #include "vm/globals.h"
|
| #if defined(TARGET_ARCH_ARM64)
|
|
|
| -// TODO(zra): Port these tests.
|
| +#include "vm/assembler.h"
|
| +#include "vm/object.h"
|
| +#include "vm/unit_test.h"
|
|
|
| +namespace dart {
|
| +
|
| +#define __ assembler->
|
| +
|
| +// Generate a simple dart code sequence.
|
| +// This is used to test Code and Instruction object creation.
|
| +void GenerateIncrement(Assembler* assembler) {
|
| + __ movz(R0, 0, 0);
|
| + __ Push(R0);
|
| + __ add(R0, R0, Operand(1));
|
| + __ str(R0, Address(SP));
|
| + __ ldr(R1, Address(SP));
|
| + __ add(R1, R1, Operand(1));
|
| + __ Pop(R0);
|
| + __ mov(R0, R1);
|
| + __ ret();
|
| +}
|
| +
|
| +
|
| +// Generate a dart code sequence that embeds a string object in it.
|
| +// This is used to test Embedded String objects in the instructions.
|
| +void GenerateEmbedStringInCode(Assembler* assembler, const char* str) {
|
| + const String& string_object =
|
| + String::ZoneHandle(String::New(str, Heap::kOld));
|
| + __ Push(PP); // Save caller's pool pointer and load a new one here.
|
| + __ LoadPoolPointer(PP);
|
| + __ LoadObject(R0, string_object, PP);
|
| + __ Pop(PP); // Restore caller's pool pointer.
|
| + __ ret();
|
| +}
|
| +
|
| +
|
| +// Generate a dart code sequence that embeds a smi object in it.
|
| +// This is used to test Embedded Smi objects in the instructions.
|
| +void GenerateEmbedSmiInCode(Assembler* assembler, intptr_t value) {
|
| + const Smi& smi_object = Smi::ZoneHandle(Smi::New(value));
|
| + const int64_t val = reinterpret_cast<int64_t>(smi_object.raw());
|
| + __ LoadImmediate(R0, val, kNoRegister);
|
| + __ ret();
|
| +}
|
| +
|
| +} // namespace dart
|
| +
|
| #endif // defined TARGET_ARCH_ARM64
|
|
|