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: | |
e27ec89e PB |
278 | .macro nop1 cond ncond a |
279 | .ifc \a,t | |
280 | nop\cond | |
281 | .else | |
282 | nop\ncond | |
283 | .endif | |
284 | .endm | |
285 | .macro it0 cond m= | |
286 | it\m \cond | |
287 | nop\cond | |
288 | .endm | |
289 | .macro it1 cond ncond a m= | |
290 | it0 \cond \a\m | |
291 | nop1 \cond \ncond \a | |
292 | .endm | |
293 | .macro it2 cond ncond a b m= | |
294 | it1 \cond \ncond \a \b\m | |
295 | nop1 \cond \ncond \b | |
296 | .endm | |
297 | .macro it3 cond ncond a b c | |
298 | it2 \cond \ncond \a \b \c | |
299 | nop1 \cond \ncond \c | |
c19d1205 ZW |
300 | .endm |
301 | ||
e27ec89e PB |
302 | it0 eq |
303 | it0 ne | |
304 | it0 cs | |
305 | it0 hs | |
306 | it0 cc | |
307 | it0 ul | |
308 | it0 lo | |
309 | it0 mi | |
310 | it0 pl | |
311 | it0 vs | |
312 | it0 vc | |
313 | it0 hi | |
314 | it0 ge | |
315 | it0 lt | |
316 | it0 gt | |
317 | it0 le | |
318 | it0 al | |
319 | it1 eq ne t | |
320 | it1 eq ne e | |
321 | it2 eq ne t t | |
322 | it2 eq ne e t | |
323 | it2 eq ne t e | |
324 | it2 eq ne e e | |
325 | it3 eq ne t t t | |
326 | it3 eq ne e t t | |
327 | it3 eq ne t e t | |
328 | it3 eq ne t t e | |
329 | it3 eq ne t e e | |
330 | it3 eq ne e t e | |
331 | it3 eq ne e e t | |
332 | it3 eq ne e e e | |
333 | ||
334 | it1 ne eq t | |
335 | it1 ne eq e | |
336 | it2 ne eq t t | |
337 | it2 ne eq e t | |
338 | it2 ne eq t e | |
339 | it2 ne eq e e | |
340 | it3 ne eq t t t | |
341 | it3 ne eq e t t | |
342 | it3 ne eq t e t | |
343 | it3 ne eq t t e | |
344 | it3 ne eq t e e | |
345 | it3 ne eq e t e | |
346 | it3 ne eq e e t | |
347 | it3 ne eq e e e | |
c19d1205 ZW |
348 | |
349 | ldst: | |
350 | .macro ls op | |
351 | \op r1, [r5] | |
352 | \op r1, [r5, #0x330] | |
353 | \op r1, [r5, #-0x30] | |
354 | \op r1, [r5], #0x30 | |
355 | \op r1, [r5], #-0x30 | |
356 | \op r1, [r5, #0x30]! | |
357 | \op r1, [r5, #-0x30]! | |
358 | \op r1, [r5, r4] | |
359 | \op r1, [r9, ip] | |
360 | \op r1, 1f | |
361 | \op r1, 1b | |
362 | .endm | |
363 | 1: | |
364 | ls ldrb | |
365 | ls ldrsb | |
366 | ls ldrh | |
367 | ls ldrsh | |
368 | ls ldr | |
369 | 1: | |
370 | ls strb | |
371 | ls strh | |
372 | ls str | |
373 | ||
374 | pld [r5] | |
375 | pld [r5, #0x330] | |
376 | pld [r5, #-0x30] | |
377 | pld [r5], #0x30 | |
378 | pld [r5], #-0x30 | |
379 | pld [r5, #0x30]! | |
380 | pld [r5, #-0x30]! | |
381 | pld [r5, r4] | |
382 | pld [r9, ip] | |
383 | pld 1f | |
384 | pld 1b | |
385 | 1: | |
386 | ||
387 | ldrd r2, r3, [r5] | |
388 | ldrd r2, [r5, #0x30] | |
389 | ldrd r2, [r5, #-0x30] | |
390 | strd r2, r3, [r5] | |
391 | strd r2, [r5, #0x30] | |
392 | strd r2, [r5, #-0x30] | |
393 | ||
394 | ldrbt r1, [r5] | |
395 | ldrbt r1, [r5, #0x30] | |
396 | ldrsbt r1, [r5] | |
397 | ldrsbt r1, [r5, #0x30] | |
398 | ldrht r1, [r5] | |
399 | ldrht r1, [r5, #0x30] | |
400 | ldrsht r1, [r5] | |
401 | ldrsht r1, [r5, #0x30] | |
402 | ldrt r1, [r5] | |
403 | ldrt r1, [r5, #0x30] | |
404 | ||
405 | .purgem ls | |
406 | ||
407 | ldxstx: | |
408 | ldrexb r1, [r4] | |
409 | ldrexh r1, [r4] | |
410 | ldrex r1, [r4] | |
411 | ldrexd r1, r2, [r4] | |
412 | ||
413 | strexb r1, r2, [r4] | |
414 | strexh r1, r2, [r4] | |
415 | strex r1, r2, [r4] | |
416 | strexd r1, r2, r3, [r4] | |
417 | ||
418 | ldrex r1, [r4,#516] | |
419 | strex r1, r2, [r4,#516] | |
420 | ||
421 | ldmstm: | |
422 | ldmia r0!, {r1,r2,r3} | |
423 | ldmia r2, {r0,r1,r2} | |
424 | ldmia.w r2, {r0,r1,r2} | |
425 | ldmia r9, {r0,r1,r2} | |
426 | ldmia r0, {r7,r8,r10} | |
427 | ldmia r0!, {r7,r8,r10} | |
428 | ||
429 | stmia r0!, {r1,r2,r3} | |
430 | stmia r2!, {r0,r1,r3} | |
431 | stmia.w r2!, {r0,r1,r3} | |
432 | stmia r9, {r0,r1,r2} | |
433 | stmia r0, {r7,r8,r10} | |
434 | stmia r0!, {r7,r8,r10} | |
435 | ||
436 | ldmdb r0, {r7,r8,r10} | |
437 | stmdb r0, {r7,r8,r10} | |
438 | ||
439 | mlas: | |
440 | mla r0, r0, r0, r0 | |
441 | mls r0, r0, r0, r0 | |
442 | mla r9, r0, r0, r0 | |
443 | mla r0, r9, r0, r0 | |
444 | mla r0, r0, r9, r0 | |
445 | mla r0, r0, r0, r9 | |
446 | ||
447 | tst_teq_cmp_cmn_mov_mvn: | |
448 | .macro mt op ops opw opsw | |
449 | \ops r0, r0 | |
450 | \op r0, r0 | |
451 | \ops r5, r0 | |
452 | \op r0, r5 | |
453 | \op r0, r5, asr #17 | |
454 | \opw r0, r0 | |
455 | \ops r9, r0 | |
456 | \opsw r0, r9 | |
457 | \op r0, #129 | |
458 | \op r5, #129 | |
459 | .endm | |
460 | ||
461 | mt tst tsts tst.w tsts.w | |
462 | mt teq teqs teq.w teqs.w | |
463 | mt cmp cmps cmp.w cmps.w | |
464 | mt cmn cmns cmn.w cmns.w | |
465 | mt mov movs mov.w movs.w | |
466 | mt mvn mvns mvn.w mvns.w | |
467 | .purgem mt | |
468 | ||
469 | mov16: | |
470 | movw r0, #0 | |
471 | movt r0, #0 | |
472 | movw r9, #0 | |
473 | movw r0, #0x9000 | |
474 | movw r0, #0x0800 | |
475 | movw r0, #0x0500 | |
476 | movw r0, #0x0081 | |
477 | movw r0, #0xffff | |
478 | ||
479 | mrs_msr: | |
480 | mrs r0, CPSR | |
481 | mrs r0, SPSR | |
482 | mrs r9, CPSR_all | |
483 | mrs r9, SPSR_all | |
484 | ||
485 | msr CPSR_c, r0 | |
486 | msr SPSR_c, r0 | |
487 | msr CPSR_c, r9 | |
488 | msr CPSR_x, r0 | |
489 | msr CPSR_s, r0 | |
490 | msr CPSR_f, r0 | |
491 | ||
492 | mul: | |
493 | mul r0, r0, r0 | |
494 | mul r0, r9, r0 | |
495 | mul r0, r0, r9 | |
496 | mul r0, r0 | |
497 | mul r9, r0 | |
498 | muls r5, r0 | |
499 | muls r5, r0, r5 | |
500 | muls r0, r5 | |
501 | ||
502 | mull: | |
503 | smull r0, r1, r0, r0 | |
504 | umull r0, r1, r0, r0 | |
505 | smlal r0, r1, r0, r0 | |
506 | umlal r0, r1, r0, r0 | |
507 | smull r9, r0, r0, r0 | |
508 | smull r0, r9, r0, r0 | |
509 | smull r0, r1, r9, r0 | |
510 | smull r0, r1, r0, r9 | |
511 | ||
512 | neg: | |
513 | negs r0, r0 | |
514 | negs r0, r5 | |
515 | negs r5, r0 | |
516 | negs.w r0, r0 | |
517 | negs.w r5, r0 | |
518 | negs.w r0, r5 | |
519 | ||
520 | neg r0, r9 | |
521 | neg r9, r0 | |
522 | negs r0, r9 | |
523 | negs r9, r0 | |
524 | ||
525 | pkh: | |
526 | pkhbt r0, r0, r0 | |
527 | pkhbt r9, r0, r0 | |
528 | pkhbt r0, r9, r0 | |
529 | pkhbt r0, r0, r9 | |
530 | pkhbt r0, r0, r0, lsl #0x14 | |
531 | pkhbt r0, r0, r0, lsl #3 | |
532 | pkhtb r1, r2, r3 | |
533 | pkhtb r1, r2, r3, asr #0x11 | |
534 | ||
535 | push_pop: | |
536 | push {r0} | |
537 | pop {r0} | |
538 | push {r1,lr} | |
539 | pop {r1,pc} | |
540 | push {r8,r9,r10,r11,r12} | |
541 | pop {r8,r9,r10,r11,r12} | |
542 | ||
543 | qadd: | |
544 | qadd16 r1, r2, r3 | |
545 | qadd8 r1, r2, r3 | |
546 | qaddsubx r1, r2, r3 | |
547 | qsub16 r1, r2, r3 | |
548 | qsub8 r1, r2, r3 | |
549 | qsubaddx r1, r2, r3 | |
550 | sadd16 r1, r2, r3 | |
551 | sadd8 r1, r2, r3 | |
552 | saddsubx r1, r2, r3 | |
553 | ssub16 r1, r2, r3 | |
554 | ssub8 r1, r2, r3 | |
555 | ssubaddx r1, r2, r3 | |
556 | shadd16 r1, r2, r3 | |
557 | shadd8 r1, r2, r3 | |
558 | shaddsubx r1, r2, r3 | |
559 | shsub16 r1, r2, r3 | |
560 | shsub8 r1, r2, r3 | |
561 | shsubaddx r1, r2, r3 | |
562 | uadd16 r1, r2, r3 | |
563 | uadd8 r1, r2, r3 | |
564 | uaddsubx r1, r2, r3 | |
565 | usub16 r1, r2, r3 | |
566 | usub8 r1, r2, r3 | |
567 | usubaddx r1, r2, r3 | |
568 | uhadd16 r1, r2, r3 | |
569 | uhadd8 r1, r2, r3 | |
570 | uhaddsubx r1, r2, r3 | |
571 | uhsub16 r1, r2, r3 | |
572 | uhsub8 r1, r2, r3 | |
573 | uhsubaddx r1, r2, r3 | |
574 | uqadd16 r1, r2, r3 | |
575 | uqadd8 r1, r2, r3 | |
576 | uqaddsubx r1, r2, r3 | |
577 | uqsub16 r1, r2, r3 | |
578 | uqsub8 r1, r2, r3 | |
579 | uqsubaddx r1, r2, r3 | |
580 | sel r1, r2, r3 | |
581 | ||
582 | rbit_rev: | |
583 | .macro rx op opw | |
584 | \op r0, r0 | |
585 | \opw r0, r0 | |
586 | \op r0, r5 | |
587 | \op r5, r0 | |
588 | \op r0, r9 | |
589 | \op r9, r0 | |
590 | .endm | |
591 | ||
592 | rx rev rev.w | |
593 | rx rev16 rev16.w | |
594 | rx revsh revsh.w | |
595 | rx rbit rbit.w | |
596 | ||
597 | .purgem rx | |
598 | ||
599 | shift: | |
600 | .macro sh op ops opw opsw | |
601 | \ops r0, #17 @ 16-bit format 1 | |
602 | \ops r0, r0, #14 | |
603 | \ops r5, r0, #17 | |
604 | \ops r0, r5, #14 | |
605 | \ops r0, r0 @ 16-bit format 2 | |
606 | \ops r0, r5 | |
607 | \ops r0, r0, r5 | |
608 | \op r9, #17 @ 32-bit format 1 | |
609 | \op r9, r9, #14 | |
610 | \ops r0, r9, #17 | |
611 | \op r9, r0, #14 | |
612 | \opw r0, r0, r0 @ 32-bit format 2 | |
613 | \op r9, r9 | |
614 | \ops r9, r0 | |
615 | \op r0, r9 | |
616 | \op r0, r5 | |
617 | \ops r0, r1, r2 | |
618 | .endm | |
619 | ||
620 | sh lsl lsls lsl.w lsls.w | |
621 | sh lsr lsrs lsr.w lsrs.w | |
622 | sh asr asrs asr.w asrs.w | |
623 | sh ror rors ror.w rors.w | |
624 | ||
625 | .purgem sh | |
626 | ||
627 | smi: | |
628 | smi #0 | |
629 | smi #0xabcd | |
630 | ||
631 | smla: | |
632 | smlabb r0, r0, r0, r0 | |
633 | smlabb r9, r0, r0, r0 | |
634 | smlabb r0, r9, r0, r0 | |
635 | smlabb r0, r0, r9, r0 | |
636 | smlabb r0, r0, r0, r9 | |
637 | ||
638 | smlatb r0, r0, r0, r0 | |
639 | smlabt r0, r0, r0, r0 | |
640 | smlatt r0, r0, r0, r0 | |
641 | smlawb r0, r0, r0, r0 | |
642 | smlawt r0, r0, r0, r0 | |
643 | smlad r0, r0, r0, r0 | |
644 | smladx r0, r0, r0, r0 | |
645 | smlsd r0, r0, r0, r0 | |
646 | smlsdx r0, r0, r0, r0 | |
647 | smmla r0, r0, r0, r0 | |
648 | smmlar r0, r0, r0, r0 | |
649 | smmls r0, r0, r0, r0 | |
650 | smmlsr r0, r0, r0, r0 | |
651 | usada8 r0, r0, r0, r0 | |
652 | ||
653 | smlal: | |
654 | smlalbb r0, r0, r0, r0 | |
655 | smlalbb r9, r0, r0, r0 | |
656 | smlalbb r0, r9, r0, r0 | |
657 | smlalbb r0, r0, r9, r0 | |
658 | smlalbb r0, r0, r0, r9 | |
659 | ||
660 | smlaltb r0, r0, r0, r0 | |
661 | smlalbt r0, r0, r0, r0 | |
662 | smlaltt r0, r0, r0, r0 | |
663 | smlald r0, r0, r0, r0 | |
664 | smlaldx r0, r0, r0, r0 | |
665 | smlsld r0, r0, r0, r0 | |
666 | smlsldx r0, r0, r0, r0 | |
667 | umaal r0, r0, r0, r0 | |
668 | ||
669 | smul: | |
670 | smulbb r0, r0, r0 | |
671 | smulbb r9, r0, r0 | |
672 | smulbb r0, r9, r0 | |
673 | smulbb r0, r0, r9 | |
674 | ||
675 | smultb r0, r0, r0 | |
676 | smulbt r0, r0, r0 | |
677 | smultt r0, r0, r0 | |
678 | smulwb r0, r0, r0 | |
679 | smulwt r0, r0, r0 | |
680 | smmul r0, r0, r0 | |
681 | smmulr r0, r0, r0 | |
682 | smuad r0, r0, r0 | |
683 | smuadx r0, r0, r0 | |
684 | smusd r0, r0, r0 | |
685 | smusdx r0, r0, r0 | |
686 | usad8 r0, r0, r0 | |
687 | ||
688 | sat: | |
689 | ssat r0, #1, r0 | |
690 | ssat r0, #1, r0, lsl #0 | |
691 | ssat r0, #1, r0, asr #0 | |
692 | ssat r9, #1, r0 | |
693 | ssat r0, #18, r0 | |
694 | ssat r0, #1, r9 | |
695 | ssat r0, #1, r0, lsl #0x1c | |
696 | ssat r0, #1, r0, asr #0x03 | |
697 | ||
698 | ssat16 r0, #1, r0 | |
699 | ssat16 r9, #1, r0 | |
700 | ssat16 r0, #10, r0 | |
701 | ssat16 r0, #1, r9 | |
702 | ||
703 | usat r0, #0, r0 | |
704 | usat r0, #0, r0, lsl #0 | |
705 | usat r0, #0, r0, asr #0 | |
706 | usat r9, #0, r0 | |
707 | usat r0, #17, r0 | |
708 | usat r0, #0, r9 | |
709 | usat r0, #0, r0, lsl #0x1c | |
710 | usat r0, #0, r0, asr #0x03 | |
711 | ||
712 | usat16 r0, #0, r0 | |
713 | usat16 r9, #0, r0 | |
714 | usat16 r0, #9, r0 | |
715 | usat16 r0, #0, r9 | |
716 | ||
717 | xt: | |
718 | sxtb r0, r0 | |
719 | sxtb r0, r0, ror #0 | |
720 | sxtb r5, r0 | |
721 | sxtb r0, r5 | |
722 | sxtb.w r1, r2 | |
723 | sxtb r1, r2, ror #8 | |
724 | sxtb r1, r2, ror #16 | |
725 | sxtb r1, r2, ror #24 | |
726 | ||
727 | sxtb16 r1, r2 | |
728 | sxtb16 r8, r9 | |
729 | sxth r1, r2 | |
730 | sxth r8, r9 | |
731 | uxtb r1, r2 | |
732 | uxtb r8, r9 | |
733 | uxtb16 r1, r2 | |
734 | uxtb16 r8, r9 | |
735 | uxth r1, r2 | |
736 | uxth r8, r9 | |
737 | ||
738 | xta: | |
739 | sxtab r0, r0, r0 | |
740 | sxtab r0, r0, r0, ror #0 | |
741 | sxtab r9, r0, r0, ror #8 | |
742 | sxtab r0, r9, r0, ror #16 | |
743 | sxtab r0, r0, r9, ror #24 | |
744 | ||
745 | sxtab16 r1, r2, r3 | |
746 | sxtah r1, r2, r3 | |
747 | uxtab r1, r2, r3 | |
748 | uxtab16 r1, r2, r3 | |
749 | uxtah r1, r2, r3 | |
c160f130 PB |
750 | |
751 | .macro ldpcimm op | |
752 | \op r1, [pc, #0x2aa] | |
753 | \op r1, [pc, #0x155] | |
754 | \op r1, [pc, #-0x2aa] | |
755 | \op r1, [pc, #-0x155] | |
756 | .endm | |
757 | ldpcimm ldrb | |
758 | ldpcimm ldrsb | |
759 | ldpcimm ldrh | |
760 | ldpcimm ldrsh | |
761 | ldpcimm ldr | |
92e90b6e PB |
762 | addw r9, r0, #0 |
763 | addw r6, pc, #0xfff | |
764 | subw r6, r9, #0xa85 | |
765 | subw r6, r9, #0x57a | |
766 | tbb [pc, r6] | |
767 | tbb [r0, r9] | |
768 | tbh [pc, r7, lsl #1] | |
769 | tbh [r0, r8, lsl #1] | |
e9f89963 PB |
770 | |
771 | push {r8} | |
772 | pop {r8} | |
9c3c69f2 PB |
773 | |
774 | ldmdb r0!, {r7,r8,r10} | |
775 | stmdb r0!, {r7,r8,r10} |