Home | History | Annotate | Download | only in arm
      1 .syntax unified
      2 .arch armv7-a
      3 .thumb
      4 .macro it_test opcode operands:vararg
      5 itt eq
      6 \opcode\()eq r15, \operands
      7 moveq r0, r0
      8 .endm
      9 
     10 .macro it_testw opcode operands:vararg
     11 itt eq
     12 \opcode\()eq.w r15, \operands
     13 moveq r0, r0
     14 .endm
     15 
     16 .macro LOAD operands:vararg
     17 it_test ldr, \operands
     18 .endm
     19 
     20 .macro LOADw operands:vararg
     21 it_testw ldr, \operands
     22 .endm
     23 
     24 @ Loads ===============================================================
     25 
     26 @ LDR (register)
     27 LOAD  [r0]
     28 LOAD  [r0,#0]
     29 LOAD  [sp]
     30 LOAD  [sp,#0]
     31 LOADw [r0]
     32 LOADw [r0,#0]
     33 LOAD  [r0,#-4]
     34 LOAD  [r0],#4
     35 LOAD  [r0,#0]!
     36 
     37 @ LDR (literal)
     38 LOAD  label
     39 LOADw label
     40 LOADw [pc, #-0]
     41 
     42 @ LDR (register)
     43 LOAD  [r0, r1]
     44 LOADw [r0, r1]
     45 LOADw [r0, r1, LSL #2]
     46 
     47 @ LDRB (immediate, Thumb)
     48 ldrb	pc, [r0,#4]			@ low reg
     49 @ldrb	r0, [pc,#4]			@ ALLOWED!
     50 ldrb.w	sp, [r0,#4]			@ Unpredictable
     51 ldrb.w	pc, [r0,#4]			@ => PLD
     52 ldrb	pc, [r0, #-4]			@ => PLD
     53 @ LDRB<c><q> <Rt>, [<Rn>, #+<imm>]	=> See LDRBT
     54 ldrb	pc, [r0],#4			@ BadReg
     55 ldrb	sp, [r0],#4			@ ditto
     56 ldrb	pc,[r0,#4]!			@ ditto
     57 ldrb	sp,[r0,#4]!			@ ditto
     58 
     59 @ LDRB (literal)
     60 ldrb	pc,label			@ => PLD
     61 ldrb	pc,[PC,#-0]			@ => PLD (special case)
     62 ldrb	sp,label			@ Unpredictable
     63 ldrb	sp,[PC,#-0]			@ ditto
     64 
     65 @ LDRB (register)
     66 ldrb	pc,[r0,r1]			@ low reg
     67 ldrb	r0,[pc,r1]			@ ditto
     68 ldrb	r0,[r1,pc]			@ ditto
     69 ldrb.w	pc,[r0,r1,LSL #1]		@ => PLD
     70 ldrb.w	sp,[r0,r1]			@ Unpredictable
     71 ldrb.w	r2,[r0,pc,LSL #2]		@ BadReg
     72 ldrb.w	r2,[r0,sp,LSL #2]		@ ditto
     73 
     74 @ LDRBT
     75 ldrbt	pc, [r0, #4]			@ BadReg
     76 ldrbt	sp, [r0, #4]			@ ditto
     77 
     78 @ LDRD (immediate)
     79 ldrd pc, r0, [r1]			@ BadReg
     80 ldrd sp, r0, [r1]			@ ditto
     81 ldrd r12, [r1]				@ ditto
     82 ldrd r14, [r1]				@ ditto
     83 ldrd r0, pc, [r1]			@ ditto
     84 ldrd r0, sp, [r1]			@ ditto
     85 ldrd pc, r0, [r1], #4			@ ditto
     86 ldrd sp, r0, [r1], #4			@ ditto
     87 ldrd r0, pc, [r1], #4			@ ditto
     88 ldrd r0, sp, [r1], #4			@ ditto
     89 ldrd r12, [r1], #4			@ ditto
     90 ldrd r14, [r1], #4			@ ditto
     91 ldrd pc, r0, [r1, #4]!			@ ditto
     92 ldrd sp, r0, [r1, #4]!			@ ditto
     93 ldrd r0, pc, [r1, #4]!			@ ditto
     94 ldrd r0, sp, [r1, #4]!			@ ditto
     95 ldrd r12, [r1, #4]!			@ ditto
     96 ldrd r14, [r1, #4]!			@ ditto
     97 
     98 @ LDRD (literal)
     99 ldrd pc, r0, label			@ BadReg
    100 ldrd sp, r0, label			@ ditto
    101 ldrd r0, pc, label			@ ditto
    102 ldrd r0, sp, label			@ ditto
    103 ldrd pc, r0, [pc, #-0]			@ ditto
    104 ldrd sp, r0, [pc, #-0]			@ ditto
    105 ldrd r0, pc, [pc, #-0]			@ ditto
    106 ldrd r0, sp, [pc, #-0]			@ ditto
    107 
    108 @ LDRD (register): ARM only
    109 
    110 @ LDREX/B/D/H
    111 ldrex  pc, [r0]				@ BadReg
    112 ldrex  sp, [r0]				@ ditto
    113 ldrex  r0, [pc]				@ Unpredictable
    114 ldrexb pc, [r0]				@ BadReg
    115 ldrexb sp, [r0]				@ ditto
    116 ldrexb r0, [pc]				@ Unpredictable
    117 ldrexd pc, r0, [r1]			@ BadReg
    118 ldrexd sp, r0, [r1]			@ ditto
    119 ldrexd r0, pc, [r1]			@ ditto
    120 ldrexd r0, sp, [r1]			@ ditto
    121 ldrexd r0, r1, [pc]			@ Unpredictable
    122 ldrexh pc, [r0]				@ BadReg
    123 ldrexh sp, [r0]				@ ditto
    124 ldrexh r0, [pc]				@ Unpredictable
    125 
    126 @ LDRH (immediate)
    127 ldrh pc, [r0]				@ low reg
    128 ldrh pc, [r0, #4]			@ ditto
    129 @ldrh r0, [pc]				@ ALLOWED!
    130 @ldrh r0, [pc, #4]			@ ditto
    131 ldrh.w pc, [r0]				@ => Unallocated memory hints
    132 ldrh.w pc, [r0, #4]			@ ditto
    133 ldrh.w sp, [r0]				@ Unpredictable
    134 ldrh.w sp, [r0, #4]			@ ditto
    135 ldrh pc, [r0, #-3]			@ => Unallocated memory hint
    136 @ LDRH<c><q> <Rt>, [<Rn>, #+<imm>]	=> See LDRHT
    137 ldrh pc,[r0],#4				@ BadReg
    138 ldrh sp,[r0],#4				@ ditto
    139 ldrh pc,[r0,#4]!			@ ditto
    140 ldrh sp,[r0,#4]!			@ ditto
    141 
    142 @ LDRH (literal)
    143 ldrh pc, label				@ Unallocated memory hint
    144 ldrh pc, [pc, #-0]			@ ditto
    145 ldrh sp, label				@ Unpredictable
    146 ldrh sp, [pc, #-0]			@ ditto
    147 
    148 @ LDRH (register)
    149 ldrh pc, [r0, r1]			@ low reg
    150 ldrh r0, [pc, r1]			@ ditto
    151 ldrh r0, [r1, pc]			@ ditto
    152 ldrh.w pc,[r0,r1,LSL #1]		@ => Unallocated memory hints
    153 ldrh.w sp,[r0,r1,LSL #1]		@ Unpredictable
    154 ldrh.w r2,[r0,pc,LSL #1]		@ ditto
    155 ldrh.w r2,[r0,sp,LSL #1]		@ ditto
    156 
    157 @ LDRHT
    158 ldrht pc, [r0, #4]			@ BadReg
    159 ldrht sp, [r0, #4]			@ ditto
    160 
    161 @ LDRSB (immediate)
    162 ldrsb pc, [r0, #4]			@ => PLI
    163 @ldrsb r0, [pc, #4]			=> LDRSB (literal)
    164 ldrsb sp, [r0, #4]			@ Unpredictable
    165 ldrsb pc, [r0, #-4]			@ => PLI
    166 ldrsb sp,[r0,#-4]			@ BadReg
    167 ldrsb pc,[r0],#4			@ ditto
    168 ldrsb sp,[r0],#4			@ ditto
    169 ldrsb pc,[r0,#4]!			@ ditto
    170 ldrsb sp,[r0,#4]!			@ ditto
    171 
    172 @ LDRSB (literal)
    173 ldrsb pc, label				@ => PLI
    174 ldrsb pc, [pc, #-0]			@ => PLI
    175 ldrsb sp, label				@ Unpredictable
    176 ldrsb sp, [pc, #-0]			@ ditto
    177 
    178 @ LDRSB (register)
    179 ldrsb pc, [r0, r1]			@ low reg
    180 ldrsb r0, [pc, r1]			@ ditto
    181 ldrsb r0, [r1, pc]			@ ditto
    182 ldrsb.w pc, [r0, r1, LSL #2]		@ => PLI
    183 @ldrsb.w r0, [pc, r0, LSL #2]		=> LDRSB (literal)
    184 ldrsb.w sp, [r0, r1, LSL #2]		@ Unpredictable
    185 ldrsb.w r2, [r0, pc, LSL #2]		@ ditto
    186 ldrsb.w r2, [r0, sp, LSL #2]		@ ditto
    187 
    188 @ LDRSBT
    189 @ldrsbt r0, [pc, #4]			=> LDRSB (literal)
    190 ldrsbt pc, [r0, #4]			@ BadReg
    191 ldrsbt sp, [r0, #4]			@ ditto
    192 
    193 @ LDRSH (immediate)
    194 @ldrsh r0,[pc,#4]			=> LDRSH (literal)
    195 ldrsh pc,[r0,#4]			@ => Unallocated memory hints
    196 ldrsh sp,[r0,#4]			@ Unpredictable
    197 ldrsh pc, [r0, #-4]			@ => Unallocated memory hints
    198 ldrsh pc,[r0],#4			@ BadReg
    199 ldrsh pc,[r0,#4]!			@ ditto
    200 ldrsh sp,[r0,#-4]			@ ditto
    201 ldrsh sp,[r0],#4			@ ditto
    202 ldrsh sp,[r0,#4]!			@ ditto
    203 
    204 @ LDRSH (literal)
    205 ldrsh pc, label				@ => Unallocated memory hints
    206 ldrsh sp, label				@ Unpredictable
    207 ldrsh sp, [pc,#-0]			@ ditto
    208 
    209 @ LDRSH (register)
    210 ldrsh pc,[r0,r1]			@ low reg
    211 ldrsh r0,[pc,r1]			@ ditto
    212 ldrsh r0,[r1,pc]			@ ditto
    213 @ldrsh.w r0,[pc,r1,LSL #3]		=> LDRSH (literal)
    214 ldrsh.w pc,[r0,r1,LSL #3]		@ => Unallocated memory hints
    215 ldrsh.w sp,[r0,r1,LSL #3]		@ Unpredictable
    216 ldrsh.w r0,[r1,sp,LSL #3]		@ BadReg
    217 ldrsh.w r0,[r1,pc,LSL #3]		@ ditto
    218 
    219 @ LDRSHT
    220 @ldrsht r0,[pc,#4]			=> LDRSH (literal)
    221 ldrsht pc,[r0,#4]			@ BadReg
    222 ldrsht sp,[r0,#4]			@ ditto
    223 
    224 @ LDRT
    225 @ldrt r0,[pc,#4]			=> LDR (literal)
    226 ldrt pc,[r0,#4]				@ BadReg
    227 ldrt sp,[r0,#4]				@ ditto
    228 
    229 @ Stores ==============================================================
    230 
    231 @ STR (immediate, Thumb)
    232 str pc, [r0, #4]			@ Unpredictable
    233 str.w r0, [pc, #4]			@ Undefined
    234 str r0, [pc, #-4]			@ ditto
    235 str r0, [pc], #4			@ ditto
    236 str r0, [pc, #4]!			@ ditto
    237 
    238 @ STR (register)
    239 str.w r0,[pc,r1]			@ Undefined
    240 str.w r0,[pc,r1,LSL #2]			@ ditto
    241 @str.w pc,[r0,r1{,LSL #<imm2>}]		@ Unpredictable
    242 @str.w r1,[r0,sp{,LSL #<imm2>}]		@ ditto
    243 @str.w r1,[r0,pc{,LSL #<imm2>}]		@ ditto
    244 
    245 @ STRB (immediate, Thumb)
    246 strb.w r0,[pc,#4]			@ Undefined
    247 strb.w pc,[r0,#4]			@ Unpredictable
    248 strb.w sp,[r0,#4]			@ ditto
    249 strb r0,[pc,#-4]			@ Undefined
    250 strb r0,[pc],#4				@ ditto
    251 strb r0,[pc,#4]!			@ ditto
    252 strb pc,[r0,#-4]			@ Unpredictable
    253 strb pc,[r0],#4				@ ditto
    254 strb pc,[r0,#4]!			@ ditto
    255 strb sp,[r0,#-4]			@ ditto
    256 strb sp,[r0],#4				@ ditto
    257 strb sp,[r0,#4]!			@ ditto
    258 
    259 @ STRB (register)
    260 strb.w r0,[pc,r1]			@ Undefined
    261 strb.w r0,[pc,r1,LSL #2]		@ ditto
    262 strb.w pc,[r0,r1]			@ Unpredictable
    263 strb.w pc,[r0,r1,LSL #2]		@ ditto
    264 strb.w sp,[r0,r1]			@ ditto
    265 strb.w sp,[r0,r1,LSL #2]		@ ditto
    266 strb.w r0,[r1,pc]			@ ditto
    267 strb.w r0,[r1,pc,LSL #2]		@ ditto
    268 strb.w r0,[r1,sp]			@ ditto
    269 strb.w r0,[r1,sp,LSL #2]		@ ditto
    270 
    271 @ STRBT
    272 strbt r0,[pc,#4]			@ Undefined
    273 strbt pc,[r0,#4]			@ Unpredictable
    274 strbt sp,[r0,#4]			@ ditto
    275 
    276 @ STRD (immediate)
    277 strd r0,r1,[pc,#4]			@ Unpredictable
    278 strd r0,r1,[pc],#4			@ ditto
    279 strd r0,r1,[pc,#4]!			@ ditto
    280 strd pc,r0,[r1,#4]			@ ditto
    281 strd pc,r0,[r1],#4			@ ditto
    282 strd pc,r0,[r1,#4]!			@ ditto
    283 strd sp,r0,[r1,#4]			@ ditto
    284 strd sp,r0,[r1],#4			@ ditto
    285 strd sp,r0,[r1,#4]!			@ ditto
    286 strd r0,pc,[r1,#4]			@ ditto
    287 strd r0,pc,[r1],#4			@ ditto
    288 strd r0,pc,[r1,#4]!			@ ditto
    289 strd r0,sp,[r1,#4]			@ ditto
    290 strd r0,sp,[r1],#4			@ ditto
    291 strd r0,sp,[r1,#4]!			@ ditto
    292 
    293 @ STRD (register)
    294 @No thumb.
    295 
    296 @ STREX
    297 strex pc,r0,[r1]			@ Unpredictable
    298 strex pc,r0,[r1,#4]			@ ditto
    299 strex sp,r0,[r1]			@ ditto
    300 strex sp,r0,[r1,#4]			@ ditto
    301 strex r0,pc,[r1]			@ ditto
    302 strex r0,pc,[r1,#4]			@ ditto
    303 strex r0,sp,[r1]			@ ditto
    304 strex r0,sp,[r1,#4]			@ ditto
    305 strex r0,r1,[pc]			@ ditto
    306 strex r0,r1,[pc,#4]			@ ditto
    307 
    308 @ STREXB
    309 strexb pc,r0,[r1]			@ Unpredictable
    310 strexb sp,r0,[r1]			@ ditto
    311 strexb r0,pc,[r1]			@ ditto
    312 strexb r0,sp,[r1]			@ ditto
    313 strexb r0,r1,[pc]			@ ditto
    314 
    315 @ STREXD
    316 strexd pc,r0,r1,[r2]			@ Unpredictable
    317 strexd sp,r0,r1,[r2]			@ ditto
    318 strexd r0,pc,r1,[r2]			@ ditto
    319 strexd r0,sp,r1,[r2]			@ ditto
    320 strexd r0,r1,pc,[r2]			@ ditto
    321 strexd r0,r1,sp,[r2]			@ ditto
    322 strexd r0,r1,r2,[pc]			@ ditto
    323 
    324 @ STREXH
    325 strexh pc,r0,[r1]			@ Unpredictable
    326 strexh sp,r0,[r1]			@ ditto
    327 strexh r0,pc,[r1]			@ ditto
    328 strexh r0,sp,[r1]			@ ditto
    329 strexh r0,r1,[pc]			@ ditto
    330 
    331 @ STRH (immediate, Thumb)
    332 strh.w r0,[pc]				@ Undefined
    333 strh.w r0,[pc,#4]			@ ditto
    334 strh r0,[pc,#-4]			@ ditto
    335 strh r0,[pc],#4				@ ditto
    336 strh r0,[pc,#4]!			@ ditto
    337 
    338 @ STRH (register)
    339 strh.w r0,[pc,r1]			@ Undefined
    340 strh.w r0,[pc,r1,LSL #2]		@ ditto
    341 strh.w pc,[r0,#4]			@ Unpredictable
    342 strh.w pc,[r0]				@ ditto
    343 strh.w sp,[r0,#4]			@ ditto
    344 strh.w sp,[r0]				@ ditto
    345 strh pc,[r0,#-4]			@ ditto
    346 strh pc,[r0],#4				@ ditto
    347 strh pc,[r0,#4]!			@ ditto
    348 strh sp,[r0,#-4]			@ ditto
    349 strh sp,[r0],#4				@ ditto
    350 strh sp,[r0,#4]!			@ ditto
    351 strh.w pc,[r0,r1]			@ ditto
    352 strh.w sp,[r0,r1]			@ ditto
    353 strh.w r0,[r1,pc]			@ ditto
    354 strh.w r0,[r1,sp]			@ ditto
    355 strh.w pc,[r0,r1,LSL #2]		@ ditto
    356 strh.w sp,[r0,r1,LSL #2]		@ ditto
    357 strh.w r0,[r1,pc,LSL #2]		@ ditto
    358 strh.w r0,[r1,sp,LSL #2]		@ ditto
    359 
    360 @ STRHT
    361 strht r0,[pc,#4]			@ Undefined
    362 strht pc,[r0,#4]			@ Unpredictable
    363 strht sp,[pc,#4]			@ ditto
    364 
    365 @ STRT
    366 strt r0,[pc,#4]				@ Undefined
    367 strt pc,[r0,#4]				@ Unpredictable
    368 strt sp,[r0,#4]				@ ditto
    369 
    370 @ ============================================================================
    371 
    372 .label:
    373 ldr r0, [r1]
    374