| Index: runtime/vm/assembler_arm.h
|
| diff --git a/runtime/vm/assembler_arm.h b/runtime/vm/assembler_arm.h
|
| index 38dcedcca3ef24e13712deb28a50f125a14623be..9ba279c5f571b57fc2a9cf5b28587524ea05d3fa 100644
|
| --- a/runtime/vm/assembler_arm.h
|
| +++ b/runtime/vm/assembler_arm.h
|
| @@ -23,6 +23,49 @@ namespace dart {
|
| class RuntimeEntry;
|
| class StubEntry;
|
|
|
| +
|
| +// Instruction encoding bits.
|
| +enum {
|
| + H = 1 << 5, // halfword (or byte)
|
| + L = 1 << 20, // load (or store)
|
| + S = 1 << 20, // set condition code (or leave unchanged)
|
| + W = 1 << 21, // writeback base register (or leave unchanged)
|
| + A = 1 << 21, // accumulate in multiply instruction (or not)
|
| + B = 1 << 22, // unsigned byte (or word)
|
| + D = 1 << 22, // high/lo bit of start of s/d register range
|
| + N = 1 << 22, // long (or short)
|
| + U = 1 << 23, // positive (or negative) offset/index
|
| + P = 1 << 24, // offset/pre-indexed addressing (or post-indexed addressing)
|
| + I = 1 << 25, // immediate shifter operand (or not)
|
| +
|
| + B0 = 1,
|
| + B1 = 1 << 1,
|
| + B2 = 1 << 2,
|
| + B3 = 1 << 3,
|
| + B4 = 1 << 4,
|
| + B5 = 1 << 5,
|
| + B6 = 1 << 6,
|
| + B7 = 1 << 7,
|
| + B8 = 1 << 8,
|
| + B9 = 1 << 9,
|
| + B10 = 1 << 10,
|
| + B11 = 1 << 11,
|
| + B12 = 1 << 12,
|
| + B16 = 1 << 16,
|
| + B17 = 1 << 17,
|
| + B18 = 1 << 18,
|
| + B19 = 1 << 19,
|
| + B20 = 1 << 20,
|
| + B21 = 1 << 21,
|
| + B22 = 1 << 22,
|
| + B23 = 1 << 23,
|
| + B24 = 1 << 24,
|
| + B25 = 1 << 25,
|
| + B26 = 1 << 26,
|
| + B27 = 1 << 27,
|
| +};
|
| +
|
| +
|
| class Label : public ValueObject {
|
| public:
|
| Label() : position_(0) { }
|
| @@ -488,6 +531,16 @@ class Assembler : public ValueObject {
|
| // Note that gdb sets breakpoints using the undefined instruction 0xe7f001f0.
|
| void bkpt(uint16_t imm16);
|
|
|
| + static int32_t BkptEncoding(uint16_t imm16) {
|
| + // bkpt requires that the cond field is AL.
|
| + return (AL << kConditionShift) | B24 | B21 |
|
| + ((imm16 >> 4) << 8) | B6 | B5 | B4 | (imm16 & 0xf);
|
| + }
|
| +
|
| + static uword GetBreakInstructionFiller() {
|
| + return BkptEncoding(0);
|
| + }
|
| +
|
| // Floating point instructions (VFPv3-D16 and VFPv3-D32 profiles).
|
| void vmovsr(SRegister sn, Register rt, Condition cond = AL);
|
| void vmovrs(Register rt, SRegister sn, Condition cond = AL);
|
|
|