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