Commit | Line | Data |
---|---|---|
c19d1205 ZW |
1 | .text |
2 | .thumb | |
3 | .syntax unified | |
4 | ||
5 | encode_thumb32_immediate: | |
6 | orr r0, r1, #0x00000000 | |
7 | orr r0, r1, #0x000000a5 | |
8 | orr r0, r1, #0x00a500a5 | |
9 | orr r0, r1, #0xa500a500 | |
10 | orr r0, r1, #0xa5a5a5a5 | |
11 | ||
12 | orr r0, r1, #0xa5 << 31 | |
13 | orr r0, r1, #0xa5 << 30 | |
14 | orr r0, r1, #0xa5 << 29 | |
15 | orr r0, r1, #0xa5 << 28 | |
16 | orr r0, r1, #0xa5 << 27 | |
17 | orr r0, r1, #0xa5 << 26 | |
18 | orr r0, r1, #0xa5 << 25 | |
19 | orr r0, r1, #0xa5 << 24 | |
20 | orr r0, r1, #0xa5 << 23 | |
21 | orr r0, r1, #0xa5 << 22 | |
22 | orr r0, r1, #0xa5 << 21 | |
23 | orr r0, r1, #0xa5 << 20 | |
24 | orr r0, r1, #0xa5 << 19 | |
25 | orr r0, r1, #0xa5 << 18 | |
26 | orr r0, r1, #0xa5 << 17 | |
27 | orr r0, r1, #0xa5 << 16 | |
28 | orr r0, r1, #0xa5 << 15 | |
29 | orr r0, r1, #0xa5 << 14 | |
30 | orr r0, r1, #0xa5 << 13 | |
31 | orr r0, r1, #0xa5 << 12 | |
32 | orr r0, r1, #0xa5 << 11 | |
33 | orr r0, r1, #0xa5 << 10 | |
34 | orr r0, r1, #0xa5 << 9 | |
35 | orr r0, r1, #0xa5 << 8 | |
36 | orr r0, r1, #0xa5 << 7 | |
37 | orr r0, r1, #0xa5 << 6 | |
38 | orr r0, r1, #0xa5 << 5 | |
39 | orr r0, r1, #0xa5 << 4 | |
40 | orr r0, r1, #0xa5 << 3 | |
41 | orr r0, r1, #0xa5 << 2 | |
42 | orr r0, r1, #0xa5 << 1 | |
43 | ||
44 | add_sub: | |
0110f2b8 PB |
45 | @ Should be format 1, Some have equivalent format 2 encodings |
46 | adds r0, r0, #0 | |
c19d1205 ZW |
47 | adds r5, r0, #0 |
48 | adds r0, r5, #0 | |
0110f2b8 | 49 | adds r0, r2, #5 |
c19d1205 ZW |
50 | |
51 | adds r0, #129 @ format 2 | |
52 | adds r0, r0, #129 | |
53 | adds r5, #126 | |
54 | ||
55 | adds r0, r0, r0 @ format 3 | |
56 | adds r5, r0, r0 | |
57 | adds r0, r5, r0 | |
58 | adds r0, r0, r5 | |
59 | adds r1, r2, r3 | |
60 | ||
61 | add r8, r0 @ format 4 | |
62 | add r0, r8 | |
63 | add r0, r8, r0 | |
64 | add r0, r0, r8 | |
65 | add r8, r0, r0 @ ... not this one | |
66 | ||
67 | add r1, r0 | |
68 | add r0, r1 | |
69 | ||
70 | add r0, pc, #0 @ format 5 | |
71 | add r5, pc, #0 | |
72 | add r0, pc, #516 | |
73 | ||
74 | add r0, sp, #0 @ format 6 | |
75 | add r5, sp, #0 | |
76 | add r0, sp, #516 | |
77 | ||
78 | add sp, #0 @ format 7 | |
79 | add sp, sp, #0 | |
80 | add sp, #260 | |
81 | ||
82 | add.w r0, r0, #0 @ T32 format 1 | |
83 | adds.w r0, r0, #0 | |
84 | add.w r9, r0, #0 | |
85 | add.w r0, r9, #0 | |
86 | add.w r0, r0, #129 | |
0110f2b8 PB |
87 | adds r5, r3, #0x10000 |
88 | add r0, sp, #1 | |
89 | add r9, sp, #0 | |
90 | add.w sp, sp, #4 | |
c19d1205 ZW |
91 | |
92 | add.w r0, r0, r0 @ T32 format 2 | |
93 | adds.w r0, r0, r0 | |
94 | add.w r9, r0, r0 | |
95 | add.w r0, r9, r0 | |
96 | add.w r0, r0, r9 | |
97 | ||
98 | add.w r8, r9, r10 | |
99 | add.w r8, r9, r10, lsl #17 | |
100 | add.w r8, r8, r10, lsr #32 | |
101 | add.w r8, r8, r10, lsr #17 | |
102 | add.w r8, r9, r10, asr #32 | |
103 | add.w r8, r9, r10, asr #17 | |
104 | add.w r8, r9, r10, rrx | |
105 | add.w r8, r9, r10, ror #17 | |
106 | ||
107 | subs r0, r0, #0 @ format 1 | |
108 | subs r5, r0, #0 | |
109 | subs r0, r5, #0 | |
0110f2b8 | 110 | subs r0, r2, #5 |
c19d1205 ZW |
111 | |
112 | subs r0, r0, #129 | |
113 | subs r5, #8 | |
114 | ||
115 | subs r0, r0, r0 @ format 3 | |
116 | subs r5, r0, r0 | |
117 | subs r0, r5, r0 | |
118 | subs r0, r0, r5 | |
119 | ||
120 | sub sp, #260 @ format 4 | |
121 | sub sp, sp, #260 | |
122 | ||
123 | subs r8, r0 @ T32 format 2 | |
124 | subs r0, r8 | |
125 | subs r0, #260 @ T32 format 1 | |
0110f2b8 PB |
126 | subs.w r1, r2, #4 |
127 | subs r5, r3, #0x10000 | |
128 | sub r1, sp, #4 | |
129 | sub r9, sp, #0 | |
130 | sub.w sp, sp, #4 | |
c19d1205 ZW |
131 | |
132 | arit3: | |
133 | .macro arit3 op ops opw opsw | |
134 | \ops r0, r0 | |
135 | \ops r5, r0 | |
136 | \ops r0, r5 | |
137 | \ops r0, r0, r5 | |
138 | \ops r0, r5, r0 | |
139 | \op r0, r5, r0 | |
140 | \op r0, r1, r2 | |
141 | \op r9, r0, r0 | |
142 | \op r0, r9, r0 | |
143 | \op r0, r0, r9 | |
144 | \opsw r0, r0, r0 | |
145 | \opw r0, r1, r2, asr #17 | |
146 | \opw r0, r1, #129 | |
147 | .endm | |
148 | ||
149 | arit3 adc adcs adc.w adcs.w | |
150 | arit3 and ands and.w ands.w | |
151 | arit3 bic bics bic.w bics.w | |
152 | arit3 eor eors eor.w eors.w | |
153 | arit3 orr orrs orr.w orrs.w | |
154 | arit3 rsb rsbs rsb.w rsbs.w | |
155 | arit3 sbc sbcs sbc.w sbcs.w | |
1c444d06 | 156 | arit3 orn orns orn orns |
c19d1205 ZW |
157 | |
158 | .purgem arit3 | |
159 | ||
160 | bfc_bfi_bfx: | |
161 | bfc r0, #0, #1 | |
162 | bfc r9, #0, #1 | |
163 | bfi r9, #0, #0, #1 | |
164 | bfc r0, #21, #1 | |
165 | bfc r0, #0, #18 | |
166 | ||
167 | bfi r0, r0, #0, #1 | |
168 | bfi r9, r0, #0, #1 | |
169 | bfi r0, r9, #0, #1 | |
170 | bfi r0, r0, #21, #1 | |
171 | bfi r0, r0, #0, #18 | |
172 | ||
173 | sbfx r0, r0, #0, #1 | |
174 | ubfx r9, r0, #0, #1 | |
175 | sbfx r0, r9, #0, #1 | |
176 | ubfx r0, r0, #21, #1 | |
177 | sbfx r0, r0, #0, #18 | |
178 | ||
179 | .globl branches | |
180 | branches: | |
181 | .macro bra op | |
182 | \op 1b | |
183 | \op 1f | |
184 | .endm | |
185 | 1: | |
186 | bra beq.n | |
187 | bra bne.n | |
188 | bra bcs.n | |
189 | bra bhs.n | |
190 | bra bcc.n | |
191 | bra bul.n | |
192 | bra blo.n | |
193 | bra bmi.n | |
194 | bra bpl.n | |
195 | bra bvs.n | |
196 | bra bvc.n | |
197 | bra bhi.n | |
198 | bra bls.n | |
199 | bra bvc.n | |
200 | bra bhi.n | |
201 | bra bls.n | |
202 | bra bge.n | |
203 | bra blt.n | |
204 | bra bgt.n | |
205 | bra ble.n | |
206 | bra bal.n | |
207 | bra b.n | |
208 | @ bl, blx have no short form. | |
209 | .balign 4 | |
210 | 1: | |
0110f2b8 PB |
211 | bra beq.w |
212 | bra bne.w | |
213 | bra bcs.w | |
214 | bra bhs.w | |
215 | bra bcc.w | |
216 | bra bul.w | |
217 | bra blo.w | |
218 | bra bmi.w | |
219 | bra bpl.w | |
220 | bra bvs.w | |
221 | bra bvc.w | |
222 | bra bhi.w | |
223 | bra bls.w | |
224 | bra bvc.w | |
225 | bra bhi.w | |
226 | bra bls.w | |
227 | bra bge.w | |
228 | bra blt.w | |
229 | bra bgt.w | |
230 | bra ble.w | |
231 | bra b.w | |
c19d1205 ZW |
232 | bra bl |
233 | bra blx | |
234 | .balign 4 | |
235 | 1: | |
236 | bx r9 | |
237 | blx r0 | |
238 | blx r9 | |
239 | bxj r0 | |
240 | bxj r9 | |
241 | .purgem bra | |
242 | ||
243 | clz: | |
244 | clz r0, r0 | |
245 | clz r9, r0 | |
246 | clz r0, r9 | |
247 | ||
248 | cps: | |
249 | cpsie f | |
250 | cpsid i | |
251 | cpsie a | |
252 | cpsid.w f | |
253 | cpsie.w i | |
254 | cpsid.w a | |
255 | cpsie i, #0 | |
256 | cpsid i, #17 | |
257 | cps #0 | |
258 | cps #17 | |
259 | ||
260 | cpy: | |
261 | cpy r0, r0 | |
262 | cpy r9, r0 | |
263 | cpy r0, r9 | |
264 | cpy.w r0, r0 | |
265 | cpy.w r9, r0 | |
266 | cpy.w r0, r9 | |
267 | ||
268 | czb: | |
269 | cbnz r0, 2f | |
270 | cbz r5, 1f | |
271 | ||
272 | nop_hint: | |
273 | nop | |
274 | 1: yield | |
275 | 2: wfe | |
276 | wfi | |
277 | sev | |
278 | ||
279 | nop.w | |
280 | yield.w | |
281 | wfe.w | |
282 | wfi.w | |
283 | sev.w | |
284 | ||
285 | nop {9} | |
286 | nop {129} | |
287 | ||
288 | it: | |
e27ec89e PB |
289 | .macro nop1 cond ncond a |
290 | .ifc \a,t | |
291 | nop\cond | |
292 | .else | |
293 | nop\ncond | |
294 | .endif | |
295 | .endm | |
296 | .macro it0 cond m= | |
297 | it\m \cond | |
298 | nop\cond | |
299 | .endm | |
300 | .macro it1 cond ncond a m= | |
301 | it0 \cond \a\m | |
302 | nop1 \cond \ncond \a | |
303 | .endm | |
304 | .macro it2 cond ncond a b m= | |
305 | it1 \cond \ncond \a \b\m | |
306 | nop1 \cond \ncond \b | |
307 | .endm | |
308 | .macro it3 cond ncond a b c | |
309 | it2 \cond \ncond \a \b \c | |
310 | nop1 \cond \ncond \c | |
c19d1205 ZW |
311 | .endm |
312 | ||
e27ec89e PB |
313 | it0 eq |
314 | it0 ne | |
315 | it0 cs | |
316 | it0 hs | |
317 | it0 cc | |
318 | it0 ul | |
319 | it0 lo | |
320 | it0 mi | |
321 | it0 pl | |
322 | it0 vs | |
323 | it0 vc | |
324 | it0 hi | |
325 | it0 ge | |
326 | it0 lt | |
327 | it0 gt | |
328 | it0 le | |
329 | it0 al | |
330 | it1 eq ne t | |
331 | it1 eq ne e | |
332 | it2 eq ne t t | |
333 | it2 eq ne e t | |
334 | it2 eq ne t e | |
335 | it2 eq ne e e | |
336 | it3 eq ne t t t | |
337 | it3 eq ne e t t | |
338 | it3 eq ne t e t | |
339 | it3 eq ne t t e | |
340 | it3 eq ne t e e | |
341 | it3 eq ne e t e | |
342 | it3 eq ne e e t | |
343 | it3 eq ne e e e | |
344 | ||
345 | it1 ne eq t | |
346 | it1 ne eq e | |
347 | it2 ne eq t t | |
348 | it2 ne eq e t | |
349 | it2 ne eq t e | |
350 | it2 ne eq e e | |
351 | it3 ne eq t t t | |
352 | it3 ne eq e t t | |
353 | it3 ne eq t e t | |
354 | it3 ne eq t t e | |
355 | it3 ne eq t e e | |
356 | it3 ne eq e t e | |
357 | it3 ne eq e e t | |
358 | it3 ne eq e e e | |
c19d1205 ZW |
359 | |
360 | ldst: | |
c19d1205 | 361 | 1: |
c19d1205 ZW |
362 | pld [r5] |
363 | pld [r5, #0x330] | |
364 | pld [r5, #-0x30] | |
365 | pld [r5], #0x30 | |
366 | pld [r5], #-0x30 | |
367 | pld [r5, #0x30]! | |
368 | pld [r5, #-0x30]! | |
369 | pld [r5, r4] | |
370 | pld [r9, ip] | |
371 | pld 1f | |
372 | pld 1b | |
373 | 1: | |
32a94698 NC |
374 | nop |
375 | here: | |
c19d1205 ZW |
376 | ldrd r2, r3, [r5] |
377 | ldrd r2, [r5, #0x30] | |
378 | ldrd r2, [r5, #-0x30] | |
32a94698 | 379 | ldrd r4, r5, here |
c19d1205 ZW |
380 | strd r2, r3, [r5] |
381 | strd r2, [r5, #0x30] | |
382 | strd r2, [r5, #-0x30] | |
32a94698 | 383 | |
c19d1205 ZW |
384 | ldrbt r1, [r5] |
385 | ldrbt r1, [r5, #0x30] | |
386 | ldrsbt r1, [r5] | |
387 | ldrsbt r1, [r5, #0x30] | |
388 | ldrht r1, [r5] | |
389 | ldrht r1, [r5, #0x30] | |
390 | ldrsht r1, [r5] | |
391 | ldrsht r1, [r5, #0x30] | |
392 | ldrt r1, [r5] | |
393 | ldrt r1, [r5, #0x30] | |
394 | ||
c19d1205 ZW |
395 | ldxstx: |
396 | ldrexb r1, [r4] | |
397 | ldrexh r1, [r4] | |
398 | ldrex r1, [r4] | |
399 | ldrexd r1, r2, [r4] | |
400 | ||
401 | strexb r1, r2, [r4] | |
402 | strexh r1, r2, [r4] | |
403 | strex r1, r2, [r4] | |
404 | strexd r1, r2, r3, [r4] | |
f8a8e9d6 | 405 | strexd r1, r3, r3, [r4] |
c19d1205 ZW |
406 | |
407 | ldrex r1, [r4,#516] | |
408 | strex r1, r2, [r4,#516] | |
409 | ||
410 | ldmstm: | |
411 | ldmia r0!, {r1,r2,r3} | |
412 | ldmia r2, {r0,r1,r2} | |
413 | ldmia.w r2, {r0,r1,r2} | |
414 | ldmia r9, {r0,r1,r2} | |
415 | ldmia r0, {r7,r8,r10} | |
416 | ldmia r0!, {r7,r8,r10} | |
417 | ||
418 | stmia r0!, {r1,r2,r3} | |
419 | stmia r2!, {r0,r1,r3} | |
420 | stmia.w r2!, {r0,r1,r3} | |
421 | stmia r9, {r0,r1,r2} | |
422 | stmia r0, {r7,r8,r10} | |
423 | stmia r0!, {r7,r8,r10} | |
424 | ||
425 | ldmdb r0, {r7,r8,r10} | |
426 | stmdb r0, {r7,r8,r10} | |
427 | ||
428 | mlas: | |
429 | mla r0, r0, r0, r0 | |
430 | mls r0, r0, r0, r0 | |
431 | mla r9, r0, r0, r0 | |
432 | mla r0, r9, r0, r0 | |
433 | mla r0, r0, r9, r0 | |
434 | mla r0, r0, r0, r9 | |
435 | ||
436 | tst_teq_cmp_cmn_mov_mvn: | |
437 | .macro mt op ops opw opsw | |
438 | \ops r0, r0 | |
439 | \op r0, r0 | |
440 | \ops r5, r0 | |
441 | \op r0, r5 | |
442 | \op r0, r5, asr #17 | |
443 | \opw r0, r0 | |
444 | \ops r9, r0 | |
445 | \opsw r0, r9 | |
0110f2b8 PB |
446 | \opw r0, #129 |
447 | \opw r5, #129 | |
c19d1205 ZW |
448 | .endm |
449 | ||
450 | mt tst tsts tst.w tsts.w | |
451 | mt teq teqs teq.w teqs.w | |
452 | mt cmp cmps cmp.w cmps.w | |
453 | mt cmn cmns cmn.w cmns.w | |
454 | mt mov movs mov.w movs.w | |
455 | mt mvn mvns mvn.w mvns.w | |
456 | .purgem mt | |
457 | ||
458 | mov16: | |
459 | movw r0, #0 | |
460 | movt r0, #0 | |
461 | movw r9, #0 | |
462 | movw r0, #0x9000 | |
463 | movw r0, #0x0800 | |
464 | movw r0, #0x0500 | |
465 | movw r0, #0x0081 | |
466 | movw r0, #0xffff | |
467 | ||
468 | mrs_msr: | |
469 | mrs r0, CPSR | |
470 | mrs r0, SPSR | |
471 | mrs r9, CPSR_all | |
472 | mrs r9, SPSR_all | |
473 | ||
474 | msr CPSR_c, r0 | |
475 | msr SPSR_c, r0 | |
476 | msr CPSR_c, r9 | |
477 | msr CPSR_x, r0 | |
478 | msr CPSR_s, r0 | |
479 | msr CPSR_f, r0 | |
480 | ||
481 | mul: | |
482 | mul r0, r0, r0 | |
483 | mul r0, r9, r0 | |
484 | mul r0, r0, r9 | |
485 | mul r0, r0 | |
486 | mul r9, r0 | |
487 | muls r5, r0 | |
488 | muls r5, r0, r5 | |
489 | muls r0, r5 | |
490 | ||
491 | mull: | |
492 | smull r0, r1, r0, r0 | |
493 | umull r0, r1, r0, r0 | |
494 | smlal r0, r1, r0, r0 | |
495 | umlal r0, r1, r0, r0 | |
496 | smull r9, r0, r0, r0 | |
497 | smull r0, r9, r0, r0 | |
498 | smull r0, r1, r9, r0 | |
499 | smull r0, r1, r0, r9 | |
500 | ||
501 | neg: | |
502 | negs r0, r0 | |
503 | negs r0, r5 | |
504 | negs r5, r0 | |
505 | negs.w r0, r0 | |
506 | negs.w r5, r0 | |
507 | negs.w r0, r5 | |
508 | ||
509 | neg r0, r9 | |
510 | neg r9, r0 | |
511 | negs r0, r9 | |
512 | negs r9, r0 | |
513 | ||
514 | pkh: | |
515 | pkhbt r0, r0, r0 | |
516 | pkhbt r9, r0, r0 | |
517 | pkhbt r0, r9, r0 | |
518 | pkhbt r0, r0, r9 | |
519 | pkhbt r0, r0, r0, lsl #0x14 | |
520 | pkhbt r0, r0, r0, lsl #3 | |
521 | pkhtb r1, r2, r3 | |
522 | pkhtb r1, r2, r3, asr #0x11 | |
523 | ||
524 | push_pop: | |
525 | push {r0} | |
526 | pop {r0} | |
527 | push {r1,lr} | |
528 | pop {r1,pc} | |
529 | push {r8,r9,r10,r11,r12} | |
530 | pop {r8,r9,r10,r11,r12} | |
531 | ||
532 | qadd: | |
087b80de | 533 | qadd r1, r2, r3 |
c19d1205 ZW |
534 | qadd16 r1, r2, r3 |
535 | qadd8 r1, r2, r3 | |
4f80ef3e | 536 | qasx r1, r2, r3 |
c19d1205 | 537 | qaddsubx r1, r2, r3 |
087b80de JM |
538 | qdadd r1, r2, r3 |
539 | qdsub r1, r2, r3 | |
540 | qsub r1, r2, r3 | |
c19d1205 ZW |
541 | qsub16 r1, r2, r3 |
542 | qsub8 r1, r2, r3 | |
4f80ef3e | 543 | qsax r1, r2, r3 |
c19d1205 ZW |
544 | qsubaddx r1, r2, r3 |
545 | sadd16 r1, r2, r3 | |
546 | sadd8 r1, r2, r3 | |
4f80ef3e | 547 | sasx r1, r2, r3 |
c19d1205 ZW |
548 | saddsubx r1, r2, r3 |
549 | ssub16 r1, r2, r3 | |
550 | ssub8 r1, r2, r3 | |
4f80ef3e | 551 | ssax r1, r2, r3 |
c19d1205 ZW |
552 | ssubaddx r1, r2, r3 |
553 | shadd16 r1, r2, r3 | |
554 | shadd8 r1, r2, r3 | |
4f80ef3e | 555 | shasx r1, r2, r3 |
c19d1205 ZW |
556 | shaddsubx r1, r2, r3 |
557 | shsub16 r1, r2, r3 | |
558 | shsub8 r1, r2, r3 | |
4f80ef3e | 559 | shsax r1, r2, r3 |
c19d1205 ZW |
560 | shsubaddx r1, r2, r3 |
561 | uadd16 r1, r2, r3 | |
562 | uadd8 r1, r2, r3 | |
4f80ef3e | 563 | uasx r1, r2, r3 |
c19d1205 ZW |
564 | uaddsubx r1, r2, r3 |
565 | usub16 r1, r2, r3 | |
566 | usub8 r1, r2, r3 | |
4f80ef3e | 567 | usax r1, r2, r3 |
c19d1205 ZW |
568 | usubaddx r1, r2, r3 |
569 | uhadd16 r1, r2, r3 | |
570 | uhadd8 r1, r2, r3 | |
4f80ef3e | 571 | uhasx r1, r2, r3 |
c19d1205 ZW |
572 | uhaddsubx r1, r2, r3 |
573 | uhsub16 r1, r2, r3 | |
574 | uhsub8 r1, r2, r3 | |
4f80ef3e | 575 | uhsax r1, r2, r3 |
c19d1205 ZW |
576 | uhsubaddx r1, r2, r3 |
577 | uqadd16 r1, r2, r3 | |
578 | uqadd8 r1, r2, r3 | |
4f80ef3e | 579 | uqasx r1, r2, r3 |
c19d1205 ZW |
580 | uqaddsubx r1, r2, r3 |
581 | uqsub16 r1, r2, r3 | |
582 | uqsub8 r1, r2, r3 | |
4f80ef3e | 583 | uqsax r1, r2, r3 |
c19d1205 ZW |
584 | uqsubaddx r1, r2, r3 |
585 | sel r1, r2, r3 | |
586 | ||
587 | rbit_rev: | |
588 | .macro rx op opw | |
589 | \op r0, r0 | |
590 | \opw r0, r0 | |
591 | \op r0, r5 | |
592 | \op r5, r0 | |
593 | \op r0, r9 | |
594 | \op r9, r0 | |
595 | .endm | |
596 | ||
597 | rx rev rev.w | |
598 | rx rev16 rev16.w | |
599 | rx revsh revsh.w | |
600 | rx rbit rbit.w | |
601 | ||
602 | .purgem rx | |
603 | ||
604 | shift: | |
605 | .macro sh op ops opw opsw | |
606 | \ops r0, #17 @ 16-bit format 1 | |
607 | \ops r0, r0, #14 | |
608 | \ops r5, r0, #17 | |
609 | \ops r0, r5, #14 | |
610 | \ops r0, r0 @ 16-bit format 2 | |
611 | \ops r0, r5 | |
612 | \ops r0, r0, r5 | |
613 | \op r9, #17 @ 32-bit format 1 | |
614 | \op r9, r9, #14 | |
615 | \ops r0, r9, #17 | |
616 | \op r9, r0, #14 | |
617 | \opw r0, r0, r0 @ 32-bit format 2 | |
618 | \op r9, r9 | |
619 | \ops r9, r0 | |
620 | \op r0, r9 | |
621 | \op r0, r5 | |
622 | \ops r0, r1, r2 | |
623 | .endm | |
624 | ||
625 | sh lsl lsls lsl.w lsls.w | |
626 | sh lsr lsrs lsr.w lsrs.w | |
627 | sh asr asrs asr.w asrs.w | |
628 | sh ror rors ror.w rors.w | |
629 | ||
630 | .purgem sh | |
631 | ||
1c444d06 JM |
632 | rrx: |
633 | rrx r1, r2 | |
634 | rrxs r3, r4 | |
635 | ||
f4c65163 MGD |
636 | .arch armv7-a |
637 | .arch_extension sec | |
3eb17e6b PB |
638 | smc: |
639 | smc #0 | |
640 | smc #0xabcd | |
c19d1205 ZW |
641 | |
642 | smla: | |
643 | smlabb r0, r0, r0, r0 | |
644 | smlabb r9, r0, r0, r0 | |
645 | smlabb r0, r9, r0, r0 | |
646 | smlabb r0, r0, r9, r0 | |
647 | smlabb r0, r0, r0, r9 | |
648 | ||
649 | smlatb r0, r0, r0, r0 | |
650 | smlabt r0, r0, r0, r0 | |
651 | smlatt r0, r0, r0, r0 | |
652 | smlawb r0, r0, r0, r0 | |
653 | smlawt r0, r0, r0, r0 | |
654 | smlad r0, r0, r0, r0 | |
655 | smladx r0, r0, r0, r0 | |
656 | smlsd r0, r0, r0, r0 | |
657 | smlsdx r0, r0, r0, r0 | |
658 | smmla r0, r0, r0, r0 | |
659 | smmlar r0, r0, r0, r0 | |
660 | smmls r0, r0, r0, r0 | |
661 | smmlsr r0, r0, r0, r0 | |
662 | usada8 r0, r0, r0, r0 | |
663 | ||
664 | smlal: | |
665 | smlalbb r0, r0, r0, r0 | |
666 | smlalbb r9, r0, r0, r0 | |
667 | smlalbb r0, r9, r0, r0 | |
668 | smlalbb r0, r0, r9, r0 | |
669 | smlalbb r0, r0, r0, r9 | |
670 | ||
671 | smlaltb r0, r0, r0, r0 | |
672 | smlalbt r0, r0, r0, r0 | |
673 | smlaltt r0, r0, r0, r0 | |
674 | smlald r0, r0, r0, r0 | |
675 | smlaldx r0, r0, r0, r0 | |
676 | smlsld r0, r0, r0, r0 | |
677 | smlsldx r0, r0, r0, r0 | |
678 | umaal r0, r0, r0, r0 | |
679 | ||
680 | smul: | |
681 | smulbb r0, r0, r0 | |
682 | smulbb r9, r0, r0 | |
683 | smulbb r0, r9, r0 | |
684 | smulbb r0, r0, r9 | |
685 | ||
686 | smultb r0, r0, r0 | |
687 | smulbt r0, r0, r0 | |
688 | smultt r0, r0, r0 | |
689 | smulwb r0, r0, r0 | |
690 | smulwt r0, r0, r0 | |
691 | smmul r0, r0, r0 | |
692 | smmulr r0, r0, r0 | |
693 | smuad r0, r0, r0 | |
694 | smuadx r0, r0, r0 | |
695 | smusd r0, r0, r0 | |
696 | smusdx r0, r0, r0 | |
697 | usad8 r0, r0, r0 | |
698 | ||
699 | sat: | |
700 | ssat r0, #1, r0 | |
701 | ssat r0, #1, r0, lsl #0 | |
702 | ssat r0, #1, r0, asr #0 | |
703 | ssat r9, #1, r0 | |
704 | ssat r0, #18, r0 | |
705 | ssat r0, #1, r9 | |
706 | ssat r0, #1, r0, lsl #0x1c | |
707 | ssat r0, #1, r0, asr #0x03 | |
708 | ||
709 | ssat16 r0, #1, r0 | |
710 | ssat16 r9, #1, r0 | |
711 | ssat16 r0, #10, r0 | |
712 | ssat16 r0, #1, r9 | |
713 | ||
714 | usat r0, #0, r0 | |
715 | usat r0, #0, r0, lsl #0 | |
716 | usat r0, #0, r0, asr #0 | |
717 | usat r9, #0, r0 | |
718 | usat r0, #17, r0 | |
719 | usat r0, #0, r9 | |
720 | usat r0, #0, r0, lsl #0x1c | |
721 | usat r0, #0, r0, asr #0x03 | |
722 | ||
723 | usat16 r0, #0, r0 | |
724 | usat16 r9, #0, r0 | |
725 | usat16 r0, #9, r0 | |
726 | usat16 r0, #0, r9 | |
727 | ||
728 | xt: | |
729 | sxtb r0, r0 | |
730 | sxtb r0, r0, ror #0 | |
731 | sxtb r5, r0 | |
732 | sxtb r0, r5 | |
733 | sxtb.w r1, r2 | |
734 | sxtb r1, r2, ror #8 | |
735 | sxtb r1, r2, ror #16 | |
736 | sxtb r1, r2, ror #24 | |
737 | ||
738 | sxtb16 r1, r2 | |
739 | sxtb16 r8, r9 | |
740 | sxth r1, r2 | |
741 | sxth r8, r9 | |
742 | uxtb r1, r2 | |
743 | uxtb r8, r9 | |
744 | uxtb16 r1, r2 | |
745 | uxtb16 r8, r9 | |
746 | uxth r1, r2 | |
747 | uxth r8, r9 | |
748 | ||
749 | xta: | |
750 | sxtab r0, r0, r0 | |
751 | sxtab r0, r0, r0, ror #0 | |
752 | sxtab r9, r0, r0, ror #8 | |
753 | sxtab r0, r9, r0, ror #16 | |
754 | sxtab r0, r0, r9, ror #24 | |
755 | ||
756 | sxtab16 r1, r2, r3 | |
757 | sxtah r1, r2, r3 | |
758 | uxtab r1, r2, r3 | |
759 | uxtab16 r1, r2, r3 | |
760 | uxtah r1, r2, r3 | |
c160f130 PB |
761 | |
762 | .macro ldpcimm op | |
763 | \op r1, [pc, #0x2aa] | |
764 | \op r1, [pc, #0x155] | |
765 | \op r1, [pc, #-0x2aa] | |
766 | \op r1, [pc, #-0x155] | |
767 | .endm | |
768 | ldpcimm ldrb | |
769 | ldpcimm ldrsb | |
770 | ldpcimm ldrh | |
771 | ldpcimm ldrsh | |
772 | ldpcimm ldr | |
92e90b6e PB |
773 | addw r9, r0, #0 |
774 | addw r6, pc, #0xfff | |
775 | subw r6, r9, #0xa85 | |
776 | subw r6, r9, #0x57a | |
777 | tbb [pc, r6] | |
778 | tbb [r0, r9] | |
779 | tbh [pc, r7, lsl #1] | |
780 | tbh [r0, r8, lsl #1] | |
e9f89963 PB |
781 | |
782 | push {r8} | |
783 | pop {r8} | |
9c3c69f2 PB |
784 | |
785 | ldmdb r0!, {r7,r8,r10} | |
786 | stmdb r0!, {r7,r8,r10} | |
f5208ef2 PB |
787 | |
788 | ldm r0!, {r1, r2} | |
789 | stm r0!, {r1, r2} | |
790 | ldm r0, {r8, r9} | |
791 | stm r0, {r8, r9} | |
792 | itttt eq | |
793 | ldmeq r0!, {r1, r2} | |
794 | stmeq r0!, {r1, r2} | |
795 | ldmeq r0, {r8, r9} | |
796 | stmeq r0, {r8, r9} | |
797 | nop | |
b6702015 PB |
798 | |
799 | srs: | |
800 | srsia sp, #16 | |
801 | srsdb sp, #16 | |
802 | srsia sp!, #21 | |
803 | srsia sp!, #10 | |
efd81785 PB |
804 | |
805 | movs pc, lr | |
806 | subs pc, lr, #0 | |
807 | subs pc, lr, #4 | |
808 | subs pc, lr, #255 | |
79d49516 PB |
809 | |
810 | ldrd r2, r4, [r9, #48]! | |
811 | ldrd r2, r4, [r9, #-48]! | |
812 | strd r2, r4, [r9, #48]! | |
813 | strd r2, r4, [r9, #-48]! | |
814 | ldrd r2, r4, [r9], #48 | |
815 | ldrd r2, r4, [r9], #-48 | |
816 | strd r2, r4, [r9], #48 | |
817 | strd r2, r4, [r9], #-48 | |
818 | ||
819 | .macro ldaddr op | |
820 | ldr\op r1, [r5, #0x301] | |
821 | ldr\op r1, [r5, #0x30]! | |
822 | ldr\op r1, [r5, #-0x30]! | |
823 | ldr\op r1, [r5], #0x30 | |
824 | ldr\op r1, [r5], #-0x30 | |
825 | ldr\op r1, [r5, r9] | |
826 | .endm | |
827 | ldaddr | |
828 | ldaddr b | |
829 | ldaddr sb | |
830 | ldaddr h | |
831 | ldaddr sh | |
728ca7c9 PB |
832 | .macro movshift op s="s" |
833 | movs r1, r4, \op #2 | |
834 | movs r3, r9, \op #2 | |
835 | movs r1, r2, \op r3 | |
836 | movs r1, r1, \op r3 | |
837 | movs r1, r1, \op r9 | |
838 | mov r1, r2, \op r3 | |
839 | mov r1, r1, \op r3 | |
840 | .endm | |
841 | movshift lsl | |
842 | movshift lsr | |
843 | movshift asr | |
844 | movshift ror | |
845 | nop |