Home | History | Annotate | Download | only in arm
      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 	@ Should be format 1, Some have equivalent format 2 encodings
     46 	adds	r0, r0, #0
     47 	adds	r5, r0, #0
     48 	adds	r0, r5, #0
     49 	adds	r0, r2, #5
     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
     87 	adds	r5, r3, #0x10000
     88 	add	r0, sp, #1
     89 	add	r9, sp, #0
     90 	add.w	sp, sp, #4
     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
    110 	subs	r0, r2, #5
    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
    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
    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 	arit3	orn orns orn orns
    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:
    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
    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:
    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
    311 	.endm
    312 
    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
    359 
    360 ldst:
    361 1:
    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:
    374 	nop
    375 here:
    376 	ldrd	r2, r3, [r5]
    377 	ldrd	r2, [r5, #0x30]
    378 	ldrd	r2, [r5, #-0x30]
    379 	ldrd	r4, r5, here
    380 	strd	r2, r3, [r5]
    381 	strd	r2, [r5, #0x30]
    382 	strd	r2, [r5, #-0x30]
    383 
    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 
    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]
    405 	strexd	r1, r3, r3, [r4]
    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
    446 	\opw	r0, #129
    447 	\opw	r5, #129
    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:
    533 	qadd		r1, r2, r3
    534 	qadd16		r1, r2, r3
    535 	qadd8		r1, r2, r3
    536 	qasx		r1, r2, r3
    537 	qaddsubx	r1, r2, r3
    538 	qdadd		r1, r2, r3
    539 	qdsub		r1, r2, r3
    540 	qsub		r1, r2, r3
    541 	qsub16		r1, r2, r3
    542 	qsub8		r1, r2, r3
    543 	qsax		r1, r2, r3
    544 	qsubaddx	r1, r2, r3
    545 	sadd16		r1, r2, r3
    546 	sadd8		r1, r2, r3
    547 	sasx		r1, r2, r3
    548 	saddsubx	r1, r2, r3
    549 	ssub16		r1, r2, r3
    550 	ssub8		r1, r2, r3
    551 	ssax		r1, r2, r3
    552 	ssubaddx	r1, r2, r3
    553 	shadd16		r1, r2, r3
    554 	shadd8		r1, r2, r3
    555 	shasx		r1, r2, r3
    556 	shaddsubx	r1, r2, r3
    557 	shsub16		r1, r2, r3
    558 	shsub8		r1, r2, r3
    559 	shsax		r1, r2, r3
    560 	shsubaddx	r1, r2, r3
    561 	uadd16		r1, r2, r3
    562 	uadd8		r1, r2, r3
    563 	uasx		r1, r2, r3
    564 	uaddsubx	r1, r2, r3
    565 	usub16		r1, r2, r3
    566 	usub8		r1, r2, r3
    567 	usax		r1, r2, r3
    568 	usubaddx	r1, r2, r3
    569 	uhadd16		r1, r2, r3
    570 	uhadd8		r1, r2, r3
    571 	uhasx		r1, r2, r3
    572 	uhaddsubx	r1, r2, r3
    573 	uhsub16		r1, r2, r3
    574 	uhsub8		r1, r2, r3
    575 	uhsax		r1, r2, r3
    576 	uhsubaddx	r1, r2, r3
    577 	uqadd16		r1, r2, r3
    578 	uqadd8		r1, r2, r3
    579 	uqasx		r1, r2, r3
    580 	uqaddsubx	r1, r2, r3
    581 	uqsub16		r1, r2, r3
    582 	uqsub8		r1, r2, r3
    583 	uqsax		r1, r2, r3
    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 
    632 rrx:
    633 	rrx	r1, r2
    634 	rrxs	r3, r4
    635 
    636 	.arch armv7-a
    637 	.arch_extension sec
    638 smc:
    639 	smc	#0
    640 	smc	#0xabcd
    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
    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
    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]
    781 
    782 	push	{r8}
    783 	pop	{r8}
    784 
    785 	ldmdb	r0!, {r7,r8,r10}
    786 	stmdb	r0!, {r7,r8,r10}
    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
    798 
    799 srs:
    800 	srsia sp, #16
    801 	srsdb sp, #16
    802 	srsia sp!, #21
    803 	srsia sp!, #10
    804 
    805 	movs pc, lr
    806 	subs pc, lr, #0
    807 	subs pc, lr, #4
    808 	subs pc, lr, #255
    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
    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
    846