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