blob: 0b155fbdffd01102b1dacac0bbe2ee6fede97a4a [file] [log] [blame]
.syntax unified
.thumb
.macro it_test opcode operands:vararg
itt eq
\opcode\()eq r15, \operands
moveq r0, r0
.endm
.macro it_testw opcode operands:vararg
itt eq
\opcode\()eq.w r15, \operands
moveq r0, r0
.endm
.macro LOAD operands:vararg
it_test ldr, \operands
.endm
.macro LOADw operands:vararg
it_testw ldr, \operands
.endm
@ Loads ===============================================================
@ LDR (register)
LOAD [r0]
LOAD [r0,#0]
LOAD [sp]
LOAD [sp,#0]
LOADw [r0]
LOADw [r0,#0]
LOAD [r0,#-4]
LOAD [r0],#4
LOAD [r0,#0]!
@ LDR (literal)
LOAD label
LOADw label
LOADw [pc, #-0]
@ LDR (register)
LOAD [r0, r1]
LOADw [r0, r1]
LOADw [r0, r1, LSL #2]
@ LDRB (immediate, Thumb)
ldrb pc, [r0,#4] @ low reg
@ldrb r0, [pc,#4] @ ALLOWED!
ldrb.w sp, [r0,#4] @ Unpredictable
ldrb.w pc, [r0,#4] @ => PLD
ldrb pc, [r0, #-4] @ => PLD
@ LDRB<c><q> <Rt>, [<Rn>, #+<imm>] => See LDRBT
ldrb pc, [r0],#4 @ BadReg
ldrb sp, [r0],#4 @ ditto
ldrb pc,[r0,#4]! @ ditto
ldrb sp,[r0,#4]! @ ditto
@ LDRB (literal)
ldrb pc,label @ => PLD
ldrb pc,[PC,#-0] @ => PLD (special case)
ldrb sp,label @ Unpredictable
ldrb sp,[PC,#-0] @ ditto
@ LDRB (register)
ldrb pc,[r0,r1] @ low reg
ldrb r0,[pc,r1] @ ditto
ldrb r0,[r1,pc] @ ditto
ldrb.w pc,[r0,r1,LSL #1] @ => PLD
ldrb.w sp,[r0,r1] @ Unpredictable
ldrb.w r2,[r0,pc,LSL #2] @ BadReg
ldrb.w r2,[r0,sp,LSL #2] @ ditto
@ LDRBT
ldrbt pc, [r0, #4] @ BadReg
ldrbt sp, [r0, #4] @ ditto
@ LDRD (immediate)
ldrd pc, r0, [r1] @ BadReg
ldrd sp, r0, [r1] @ ditto
ldrd r12, [r1] @ ditto
ldrd r14, [r1] @ ditto
ldrd r0, pc, [r1] @ ditto
ldrd r0, sp, [r1] @ ditto
ldrd pc, r0, [r1], #4 @ ditto
ldrd sp, r0, [r1], #4 @ ditto
ldrd r0, pc, [r1], #4 @ ditto
ldrd r0, sp, [r1], #4 @ ditto
ldrd r12, [r1], #4 @ ditto
ldrd r14, [r1], #4 @ ditto
ldrd pc, r0, [r1, #4]! @ ditto
ldrd sp, r0, [r1, #4]! @ ditto
ldrd r0, pc, [r1, #4]! @ ditto
ldrd r0, sp, [r1, #4]! @ ditto
ldrd r12, [r1, #4]! @ ditto
ldrd r14, [r1, #4]! @ ditto
@ LDRD (literal)
ldrd pc, r0, label @ BadReg
ldrd sp, r0, label @ ditto
ldrd r0, pc, label @ ditto
ldrd r0, sp, label @ ditto
ldrd pc, r0, [pc, #-0] @ ditto
ldrd sp, r0, [pc, #-0] @ ditto
ldrd r0, pc, [pc, #-0] @ ditto
ldrd r0, sp, [pc, #-0] @ ditto
@ LDRD (register): ARM only
@ LDREX/B/D/H
ldrex pc, [r0] @ BadReg
ldrex sp, [r0] @ ditto
ldrex r0, [pc] @ Unpredictable
ldrexb pc, [r0] @ BadReg
ldrexb sp, [r0] @ ditto
ldrexb r0, [pc] @ Unpredictable
ldrexd pc, r0, [r1] @ BadReg
ldrexd sp, r0, [r1] @ ditto
ldrexd r0, pc, [r1] @ ditto
ldrexd r0, sp, [r1] @ ditto
ldrexd r0, r1, [pc] @ Unpredictable
ldrexh pc, [r0] @ BadReg
ldrexh sp, [r0] @ ditto
ldrexh r0, [pc] @ Unpredictable
@ LDRH (immediate)
ldrh pc, [r0] @ low reg
ldrh pc, [r0, #4] @ ditto
@ldrh r0, [pc] @ ALLOWED!
@ldrh r0, [pc, #4] @ ditto
ldrh.w pc, [r0] @ => Unallocated memory hints
ldrh.w pc, [r0, #4] @ ditto
ldrh.w sp, [r0] @ Unpredictable
ldrh.w sp, [r0, #4] @ ditto
ldrh pc, [r0, #-3] @ => Unallocated memory hint
@ LDRH<c><q> <Rt>, [<Rn>, #+<imm>] => See LDRHT
ldrh pc,[r0],#4 @ BadReg
ldrh sp,[r0],#4 @ ditto
ldrh pc,[r0,#4]! @ ditto
ldrh sp,[r0,#4]! @ ditto
@ LDRH (literal)
ldrh pc, label @ Unallocated memory hint
ldrh pc, [pc, #-0] @ ditto
ldrh sp, label @ Unpredictable
ldrh sp, [pc, #-0] @ ditto
@ LDRH (register)
ldrh pc, [r0, r1] @ low reg
ldrh r0, [pc, r1] @ ditto
ldrh r0, [r1, pc] @ ditto
ldrh.w pc,[r0,r1,LSL #1] @ => Unallocated memory hints
ldrh.w sp,[r0,r1,LSL #1] @ Unpredictable
ldrh.w r2,[r0,pc,LSL #1] @ ditto
ldrh.w r2,[r0,sp,LSL #1] @ ditto
@ LDRHT
ldrht pc, [r0, #4] @ BadReg
ldrht sp, [r0, #4] @ ditto
@ LDRSB (immediate)
ldrsb pc, [r0, #4] @ => PLI
@ldrsb r0, [pc, #4] => LDRSB (literal)
ldrsb sp, [r0, #4] @ Unpredictable
ldrsb pc, [r0, #-4] @ => PLI
ldrsb sp,[r0,#-4] @ BadReg
ldrsb pc,[r0],#4 @ ditto
ldrsb sp,[r0],#4 @ ditto
ldrsb pc,[r0,#4]! @ ditto
ldrsb sp,[r0,#4]! @ ditto
@ LDRSB (literal)
ldrsb pc, label @ => PLI
ldrsb pc, [pc, #-0] @ => PLI
ldrsb sp, label @ Unpredictable
ldrsb sp, [pc, #-0] @ ditto
@ LDRSB (register)
ldrsb pc, [r0, r1] @ low reg
ldrsb r0, [pc, r1] @ ditto
ldrsb r0, [r1, pc] @ ditto
ldrsb.w pc, [r0, r1, LSL #2] @ => PLI
@ldrsb.w r0, [pc, r0, LSL #2] => LDRSB (literal)
ldrsb.w sp, [r0, r1, LSL #2] @ Unpredictable
ldrsb.w r2, [r0, pc, LSL #2] @ ditto
ldrsb.w r2, [r0, sp, LSL #2] @ ditto
@ LDRSBT
@ldrsbt r0, [pc, #4] => LDRSB (literal)
ldrsbt pc, [r0, #4] @ BadReg
ldrsbt sp, [r0, #4] @ ditto
@ LDRSH (immediate)
@ldrsh r0,[pc,#4] => LDRSH (literal)
ldrsh pc,[r0,#4] @ => Unallocated memory hints
ldrsh sp,[r0,#4] @ Unpredictable
ldrsh pc, [r0, #-4] @ => Unallocated memory hints
ldrsh pc,[r0],#4 @ BadReg
ldrsh pc,[r0,#4]! @ ditto
ldrsh sp,[r0,#-4] @ ditto
ldrsh sp,[r0],#4 @ ditto
ldrsh sp,[r0,#4]! @ ditto
@ LDRSH (literal)
ldrsh pc, label @ => Unallocated memory hints
ldrsh sp, label @ Unpredictable
ldrsh sp, [pc,#-0] @ ditto
@ LDRSH (register)
ldrsh pc,[r0,r1] @ low reg
ldrsh r0,[pc,r1] @ ditto
ldrsh r0,[r1,pc] @ ditto
@ldrsh.w r0,[pc,r1,LSL #3] => LDRSH (literal)
ldrsh.w pc,[r0,r1,LSL #3] @ => Unallocated memory hints
ldrsh.w sp,[r0,r1,LSL #3] @ Unpredictable
ldrsh.w r0,[r1,sp,LSL #3] @ BadReg
ldrsh.w r0,[r1,pc,LSL #3] @ ditto
@ LDRSHT
@ldrsht r0,[pc,#4] => LDRSH (literal)
ldrsht pc,[r0,#4] @ BadReg
ldrsht sp,[r0,#4] @ ditto
@ LDRT
@ldrt r0,[pc,#4] => LDR (literal)
ldrt pc,[r0,#4] @ BadReg
ldrt sp,[r0,#4] @ ditto
@ Stores ==============================================================
@ STR (immediate, Thumb)
str pc, [r0, #4] @ Unpredictable
str.w r0, [pc, #4] @ Undefined
str r0, [pc, #-4] @ ditto
str r0, [pc], #4 @ ditto
str r0, [pc, #4]! @ ditto
@ STR (register)
str.w r0,[pc,r1] @ Undefined
str.w r0,[pc,r1,LSL #2] @ ditto
@str.w pc,[r0,r1{,LSL #<imm2>}] @ Unpredictable
@str.w r1,[r0,sp{,LSL #<imm2>}] @ ditto
@str.w r1,[r0,pc{,LSL #<imm2>}] @ ditto
@ STRB (immediate, Thumb)
strb.w r0,[pc,#4] @ Undefined
strb.w pc,[r0,#4] @ Unpredictable
strb.w sp,[r0,#4] @ ditto
strb r0,[pc,#-4] @ Undefined
strb r0,[pc],#4 @ ditto
strb r0,[pc,#4]! @ ditto
strb pc,[r0,#-4] @ Unpredictable
strb pc,[r0],#4 @ ditto
strb pc,[r0,#4]! @ ditto
strb sp,[r0,#-4] @ ditto
strb sp,[r0],#4 @ ditto
strb sp,[r0,#4]! @ ditto
@ STRB (register)
strb.w r0,[pc,r1] @ Undefined
strb.w r0,[pc,r1,LSL #2] @ ditto
strb.w pc,[r0,r1] @ Unpredictable
strb.w pc,[r0,r1,LSL #2] @ ditto
strb.w sp,[r0,r1] @ ditto
strb.w sp,[r0,r1,LSL #2] @ ditto
strb.w r0,[r1,pc] @ ditto
strb.w r0,[r1,pc,LSL #2] @ ditto
strb.w r0,[r1,sp] @ ditto
strb.w r0,[r1,sp,LSL #2] @ ditto
@ STRBT
strbt r0,[pc,#4] @ Undefined
strbt pc,[r0,#4] @ Unpredictable
strbt sp,[r0,#4] @ ditto
@ STRD (immediate)
strd r0,r1,[pc,#4] @ Unpredictable
strd r0,r1,[pc],#4 @ ditto
strd r0,r1,[pc,#4]! @ ditto
strd pc,r0,[r1,#4] @ ditto
strd pc,r0,[r1],#4 @ ditto
strd pc,r0,[r1,#4]! @ ditto
strd sp,r0,[r1,#4] @ ditto
strd sp,r0,[r1],#4 @ ditto
strd sp,r0,[r1,#4]! @ ditto
strd r0,pc,[r1,#4] @ ditto
strd r0,pc,[r1],#4 @ ditto
strd r0,pc,[r1,#4]! @ ditto
strd r0,sp,[r1,#4] @ ditto
strd r0,sp,[r1],#4 @ ditto
strd r0,sp,[r1,#4]! @ ditto
@ STRD (register)
@No thumb.
@ STREX
strex pc,r0,[r1] @ Unpredictable
strex pc,r0,[r1,#4] @ ditto
strex sp,r0,[r1] @ ditto
strex sp,r0,[r1,#4] @ ditto
strex r0,pc,[r1] @ ditto
strex r0,pc,[r1,#4] @ ditto
strex r0,sp,[r1] @ ditto
strex r0,sp,[r1,#4] @ ditto
strex r0,r1,[pc] @ ditto
strex r0,r1,[pc,#4] @ ditto
@ STREXB
strexb pc,r0,[r1] @ Unpredictable
strexb sp,r0,[r1] @ ditto
strexb r0,pc,[r1] @ ditto
strexb r0,sp,[r1] @ ditto
strexb r0,r1,[pc] @ ditto
@ STREXD
strexd pc,r0,r1,[r2] @ Unpredictable
strexd sp,r0,r1,[r2] @ ditto
strexd r0,pc,r1,[r2] @ ditto
strexd r0,sp,r1,[r2] @ ditto
strexd r0,r1,pc,[r2] @ ditto
strexd r0,r1,sp,[r2] @ ditto
strexd r0,r1,r2,[pc] @ ditto
@ STREXH
strexh pc,r0,[r1] @ Unpredictable
strexh sp,r0,[r1] @ ditto
strexh r0,pc,[r1] @ ditto
strexh r0,sp,[r1] @ ditto
strexh r0,r1,[pc] @ ditto
@ STRH (immediate, Thumb)
strh.w r0,[pc] @ Undefined
strh.w r0,[pc,#4] @ ditto
strh r0,[pc,#-4] @ ditto
strh r0,[pc],#4 @ ditto
strh r0,[pc,#4]! @ ditto
@ STRH (register)
strh.w r0,[pc,r1] @ Undefined
strh.w r0,[pc,r1,LSL #2] @ ditto
strh.w pc,[r0,#4] @ Unpredictable
strh.w pc,[r0] @ ditto
strh.w sp,[r0,#4] @ ditto
strh.w sp,[r0] @ ditto
strh pc,[r0,#-4] @ ditto
strh pc,[r0],#4 @ ditto
strh pc,[r0,#4]! @ ditto
strh sp,[r0,#-4] @ ditto
strh sp,[r0],#4 @ ditto
strh sp,[r0,#4]! @ ditto
strh.w pc,[r0,r1] @ ditto
strh.w sp,[r0,r1] @ ditto
strh.w r0,[r1,pc] @ ditto
strh.w r0,[r1,sp] @ ditto
strh.w pc,[r0,r1,LSL #2] @ ditto
strh.w sp,[r0,r1,LSL #2] @ ditto
strh.w r0,[r1,pc,LSL #2] @ ditto
strh.w r0,[r1,sp,LSL #2] @ ditto
@ STRHT
strht r0,[pc,#4] @ Undefined
strht pc,[r0,#4] @ Unpredictable
strht sp,[pc,#4] @ ditto
@ STRT
strt r0,[pc,#4] @ Undefined
strt pc,[r0,#4] @ Unpredictable
strt sp,[r0,#4] @ ditto
@ ============================================================================
.label:
ldr r0, [r1]