diff options
author | 2014-06-25 12:37:10 -0700 | |
---|---|---|
committer | 2014-06-26 10:46:19 -0700 | |
commit | 45fdb93f04b981f70f7b6d98949ab3986b7331f8 (patch) | |
tree | 8233265f998fdd9d4de38acb5ed56a663b10c26e /compiler/utils/arm/assembler_arm32.h | |
parent | 1528b02c4d5241e785bb680f13de70c355e67429 (diff) |
Support additional instructions in ARM and thumb assemblers
This adds the following support for the ARM and thumb assemblers:
1. Shifting by a register.
2. LDR/STR with a register offset, possibly shifted.
3. LDR(literal).
4. STR PC relative.
Also adds tests for them in the thumb assembler gtest.
Change-Id: Ie467e3c1d06b699cacbdef3482ed9a92e4f1809b
Diffstat (limited to 'compiler/utils/arm/assembler_arm32.h')
-rw-r--r-- | compiler/utils/arm/assembler_arm32.h | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/compiler/utils/arm/assembler_arm32.h b/compiler/utils/arm/assembler_arm32.h index 7a0fce2e6a..7f9094d664 100644 --- a/compiler/utils/arm/assembler_arm32.h +++ b/compiler/utils/arm/assembler_arm32.h @@ -197,11 +197,25 @@ class Arm32Assembler FINAL : public ArmAssembler { void bl(Label* label, Condition cond = AL); void blx(Register rm, Condition cond = AL) OVERRIDE; void bx(Register rm, Condition cond = AL) OVERRIDE; - void Lsl(Register rd, Register rm, uint32_t shift_imm, Condition cond = AL); - void Lsr(Register rd, Register rm, uint32_t shift_imm, Condition cond = AL); - void Asr(Register rd, Register rm, uint32_t shift_imm, Condition cond = AL); - void Ror(Register rd, Register rm, uint32_t shift_imm, Condition cond = AL); - void Rrx(Register rd, Register rm, Condition cond = AL); + void Lsl(Register rd, Register rm, uint32_t shift_imm, bool setcc = false, + Condition cond = AL) OVERRIDE; + void Lsr(Register rd, Register rm, uint32_t shift_imm, bool setcc = false, + Condition cond = AL) OVERRIDE; + void Asr(Register rd, Register rm, uint32_t shift_imm, bool setcc = false, + Condition cond = AL) OVERRIDE; + void Ror(Register rd, Register rm, uint32_t shift_imm, bool setcc = false, + Condition cond = AL) OVERRIDE; + void Rrx(Register rd, Register rm, bool setcc = false, + Condition cond = AL) OVERRIDE; + + void Lsl(Register rd, Register rm, Register rn, bool setcc = false, + Condition cond = AL) OVERRIDE; + void Lsr(Register rd, Register rm, Register rn, bool setcc = false, + Condition cond = AL) OVERRIDE; + void Asr(Register rd, Register rm, Register rn, bool setcc = false, + Condition cond = AL) OVERRIDE; + void Ror(Register rd, Register rm, Register rn, bool setcc = false, + Condition cond = AL) OVERRIDE; void Push(Register rd, Condition cond = AL) OVERRIDE; void Pop(Register rd, Condition cond = AL) OVERRIDE; |