362 lines
		
	
	
	
		
			5.1 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			362 lines
		
	
	
	
		
			5.1 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
#
 | 
						|
/*
 | 
						|
 * VideoCore IV assembler test file
 | 
						|
 * © 2013 David Given
 | 
						|
 * This file is redistributable under the terms of the 3-clause BSD license.
 | 
						|
 * See the file 'Copying' in the root of the distribution for the full text.
 | 
						|
 */
 | 
						|
 | 
						|
.sect .text
 | 
						|
.sect .rom
 | 
						|
.sect .data
 | 
						|
.sect .bss
 | 
						|
.sect .text
 | 
						|
 | 
						|
main:
 | 
						|
	nop
 | 
						|
	rti
 | 
						|
 | 
						|
	b r0
 | 
						|
	b r31
 | 
						|
	bl r0
 | 
						|
	bl r31
 | 
						|
	tbb r0
 | 
						|
	tbb r15
 | 
						|
	tbs r0
 | 
						|
	tbs r15
 | 
						|
 | 
						|
	nop
 | 
						|
 | 
						|
	mov r0, r1
 | 
						|
    cmn r0, r1
 | 
						|
    add r0, r1
 | 
						|
	bic r0, r1
 | 
						|
	mul r0, r1
 | 
						|
	eor r0, r1
 | 
						|
	sub r0, r1
 | 
						|
	and r0, r1
 | 
						|
	mvn r0, r1
 | 
						|
	ror r0, r1
 | 
						|
	cmp r0, r1
 | 
						|
	rsb r0, r1
 | 
						|
	btst r0, r1
 | 
						|
	or r0, r1
 | 
						|
	extu r0, r1
 | 
						|
	max r0, r1
 | 
						|
	bset r0, r1
 | 
						|
	min r0, r1
 | 
						|
	bclr r0, r1
 | 
						|
	adds2 r0, r1
 | 
						|
	bchg r0, r1
 | 
						|
	adds4 r0, r1
 | 
						|
	adds8 r0, r1
 | 
						|
	adds16 r0, r1
 | 
						|
	exts r0, r1
 | 
						|
	neg r0, r1
 | 
						|
	lsr r0, r1
 | 
						|
	clz r0, r1
 | 
						|
	lsl r0, r1
 | 
						|
	brev r0, r1
 | 
						|
	asr r0, r1
 | 
						|
	abs r0, r1
 | 
						|
 | 
						|
	nop
 | 
						|
 | 
						|
	mov.f r0, r1
 | 
						|
    cmn.f r0, r1
 | 
						|
    add.f r0, r1
 | 
						|
	bic.f r0, r1
 | 
						|
	mul.f r0, r1
 | 
						|
	eor.f r0, r1
 | 
						|
	sub.f r0, r1
 | 
						|
	and.f r0, r1
 | 
						|
	mvn.f r0, r1
 | 
						|
	ror.f r0, r1
 | 
						|
	cmp.f r0, r1
 | 
						|
	rsb.f r0, r1
 | 
						|
	btst.f r0, r1
 | 
						|
	or.f r0, r1
 | 
						|
	extu.f r0, r1
 | 
						|
	max.f r0, r1
 | 
						|
	bset.f r0, r1
 | 
						|
	min.f r0, r1
 | 
						|
	bclr.f r0, r1
 | 
						|
	adds2.f r0, r1
 | 
						|
	bchg.f r0, r1
 | 
						|
	adds4.f r0, r1
 | 
						|
	adds8.f r0, r1
 | 
						|
	adds16.f r0, r1
 | 
						|
	exts.f r0, r1
 | 
						|
	neg.f r0, r1
 | 
						|
	lsr.f r0, r1
 | 
						|
	clz.f r0, r1
 | 
						|
	lsl.f r0, r1
 | 
						|
	brev.f r0, r1
 | 
						|
	asr.f r0, r1
 | 
						|
	abs.f r0, r1
 | 
						|
 | 
						|
	nop
 | 
						|
 | 
						|
	mov r0, r1, r2
 | 
						|
    cmn r0, r1, r2
 | 
						|
    add r0, r1, r2
 | 
						|
	bic r0, r1, r2
 | 
						|
	mul r0, r1, r2
 | 
						|
	eor r0, r1, r2
 | 
						|
	sub r0, r1, r2
 | 
						|
	and r0, r1, r2
 | 
						|
	mvn r0, r1, r2
 | 
						|
	ror r0, r1, r2
 | 
						|
	cmp r0, r1, r2
 | 
						|
	rsb r0, r1, r2
 | 
						|
	btst r0, r1, r2
 | 
						|
	or r0, r1, r2
 | 
						|
	extu r0, r1, r2
 | 
						|
	max r0, r1, r2
 | 
						|
	bset r0, r1, r2
 | 
						|
	min r0, r1, r2
 | 
						|
	bclr r0, r1, r2
 | 
						|
	adds2 r0, r1, r2
 | 
						|
	bchg r0, r1, r2
 | 
						|
	adds4 r0, r1, r2
 | 
						|
	adds8 r0, r1, r2
 | 
						|
	adds16 r0, r1, r2
 | 
						|
	exts r0, r1, r2
 | 
						|
	neg r0, r1, r2
 | 
						|
	lsr r0, r1, r2
 | 
						|
	clz r0, r1, r2
 | 
						|
	lsl r0, r1, r2
 | 
						|
	brev r0, r1, r2
 | 
						|
	asr r0, r1, r2
 | 
						|
	abs r0, r1, r2
 | 
						|
 | 
						|
	nop
 | 
						|
 | 
						|
	mov r0, #0x1f
 | 
						|
    cmn r0, #0x1f
 | 
						|
    add r0, #0x1f
 | 
						|
	bic r0, #0x1f
 | 
						|
	mul r0, #0x1f
 | 
						|
	eor r0, #0x1f
 | 
						|
	sub r0, #0x1f
 | 
						|
	and r0, #0x1f
 | 
						|
	mvn r0, #0x1f
 | 
						|
	ror r0, #0x1f
 | 
						|
	cmp r0, #0x1f
 | 
						|
	rsb r0, #0x1f
 | 
						|
	btst r0, #0x1f
 | 
						|
	or r0, #0x1f
 | 
						|
	extu r0, #0x1f
 | 
						|
	max r0, #0x1f
 | 
						|
	bset r0, #0x1f
 | 
						|
	min r0, #0x1f
 | 
						|
	bclr r0, #0x1f
 | 
						|
	adds2 r0, #0x1f
 | 
						|
	bchg r0, #0x1f
 | 
						|
	adds4 r0, #0x1f
 | 
						|
	adds8 r0, #0x1f
 | 
						|
	adds16 r0, #0x1f
 | 
						|
	exts r0, #0x1f
 | 
						|
	neg r0, #0x1f
 | 
						|
	lsr r0, #0x1f
 | 
						|
	clz r0, #0x1f
 | 
						|
	lsl r0, #0x1f
 | 
						|
	brev r0, #0x1f
 | 
						|
	asr r0, #0x1f
 | 
						|
	abs r0, #0x1f
 | 
						|
 | 
						|
	nop
 | 
						|
 | 
						|
	mov.f r0, #0x1f
 | 
						|
    cmn.f r0, #0x1f
 | 
						|
    add.f r0, #0x1f
 | 
						|
	bic.f r0, #0x1f
 | 
						|
	mul.f r0, #0x1f
 | 
						|
	eor.f r0, #0x1f
 | 
						|
	sub.f r0, #0x1f
 | 
						|
	and.f r0, #0x1f
 | 
						|
	mvn.f r0, #0x1f
 | 
						|
	ror.f r0, #0x1f
 | 
						|
	cmp.f r0, #0x1f
 | 
						|
	rsb.f r0, #0x1f
 | 
						|
	btst.f r0, #0x1f
 | 
						|
	or.f r0, #0x1f
 | 
						|
	extu.f r0, #0x1f
 | 
						|
	max.f r0, #0x1f
 | 
						|
	bset.f r0, #0x1f
 | 
						|
	min.f r0, #0x1f
 | 
						|
	bclr.f r0, #0x1f
 | 
						|
	adds2.f r0, #0x1f
 | 
						|
	bchg.f r0, #0x1f
 | 
						|
	adds4.f r0, #0x1f
 | 
						|
	adds8.f r0, #0x1f
 | 
						|
	adds16.f r0, #0x1f
 | 
						|
	exts.f r0, #0x1f
 | 
						|
	neg.f r0, #0x1f
 | 
						|
	lsr.f r0, #0x1f
 | 
						|
	clz.f r0, #0x1f
 | 
						|
	lsl.f r0, #0x1f
 | 
						|
	brev.f r0, #0x1f
 | 
						|
	asr.f r0, #0x1f
 | 
						|
	abs.f r0, #0x1f
 | 
						|
 | 
						|
	add r0, #0x12345678
 | 
						|
	add r0, r1, #0x12345678
 | 
						|
	sub r0, #0x12345678
 | 
						|
 | 
						|
	nop
 | 
						|
 | 
						|
	fadd r0, r1, r2
 | 
						|
	fsub r0, r1, r2
 | 
						|
	fmul r0, r1, r2
 | 
						|
	fdiv r0, r1, r2
 | 
						|
	fcmp r0, r1, r2
 | 
						|
	fabs r0, r1, r2
 | 
						|
	frsb r0, r1, r2
 | 
						|
	fmax r0, r1, r2
 | 
						|
	frcp r0, r1, r2
 | 
						|
	frsqrt r0, r1, r2
 | 
						|
	fnmul r0, r1, r2
 | 
						|
	fmin r0, r1, r2
 | 
						|
	fld1 r0, r1, r2
 | 
						|
	fld0 r0, r1, r2
 | 
						|
	log2 r0, r1, r2
 | 
						|
	exp2 r0, r1, r2
 | 
						|
	divs r0, r1, r2
 | 
						|
	divu r0, r1, r2
 | 
						|
	divs r0, r1, #31
 | 
						|
	divu r0, r1, #31
 | 
						|
	adds256 r0, r1, r2
 | 
						|
 | 
						|
	nop
 | 
						|
 | 
						|
	fadd.f r0, r1, r2
 | 
						|
	fsub.f r0, r1, r2
 | 
						|
	fmul.f r0, r1, r2
 | 
						|
	fdiv.f r0, r1, r2
 | 
						|
	fcmp.f r0, r1, r2
 | 
						|
	fabs.f r0, r1, r2
 | 
						|
	frsb.f r0, r1, r2
 | 
						|
	fmax.f r0, r1, r2
 | 
						|
	frcp.f r0, r1, r2
 | 
						|
	frsqrt.f r0, r1, r2
 | 
						|
	fnmul.f r0, r1, r2
 | 
						|
	fmin.f r0, r1, r2
 | 
						|
	fld1.f r0, r1, r2
 | 
						|
	fld0.f r0, r1, r2
 | 
						|
	log2.f r0, r1, r2
 | 
						|
	exp2.f r0, r1, r2
 | 
						|
	divs.f r0, r1, r2
 | 
						|
	divu.f r0, r1, r2
 | 
						|
	divs.f r0, r1, #31
 | 
						|
	divu.f r0, r1, #31
 | 
						|
	adds256.f r0, r1, r2
 | 
						|
 | 
						|
label:
 | 
						|
	b label
 | 
						|
	b forward
 | 
						|
	b label
 | 
						|
	b main
 | 
						|
	b.f label
 | 
						|
	b.f forward
 | 
						|
	b.f main
 | 
						|
	bl label
 | 
						|
	bl forward
 | 
						|
	bl main
 | 
						|
forward:
 | 
						|
 | 
						|
	push r0
 | 
						|
	push r0, lr
 | 
						|
	push r0-r5
 | 
						|
	push r0-r5, lr
 | 
						|
	push r6
 | 
						|
	push r16
 | 
						|
	push r24
 | 
						|
	push lr
 | 
						|
 | 
						|
	pop r0
 | 
						|
	pop r0, pc
 | 
						|
	pop r0-r5
 | 
						|
	pop r0-r5, pc
 | 
						|
	pop r6
 | 
						|
	pop r16
 | 
						|
	pop r24
 | 
						|
	pop pc
 | 
						|
 | 
						|
	nop
 | 
						|
 | 
						|
    ld r0, (sp)
 | 
						|
    st r0, (sp)
 | 
						|
    ld r0, 4(sp)
 | 
						|
    st r0, 4(sp)
 | 
						|
    ld r0, -4(sp)
 | 
						|
    st r0, -4(sp)
 | 
						|
    ld r0, 5(sp)
 | 
						|
    st r0, 5(sp)
 | 
						|
    ld r0, -5(sp)
 | 
						|
    st r0, -5(sp)
 | 
						|
 | 
						|
    ld r0, (r1)
 | 
						|
    st r0, (r1)
 | 
						|
    ld r16, (r1)
 | 
						|
    st r16, (r1)
 | 
						|
    ldh r0, (r1)
 | 
						|
    sth r0, (r1)
 | 
						|
    ldb r0, (r1)
 | 
						|
    stb r0, (r1)
 | 
						|
    ldhs r0, (r1)
 | 
						|
    sths r0, (r1)
 | 
						|
    ldh r16, (r1)
 | 
						|
    sth r16, (r1)
 | 
						|
    ldb r16, (r1)
 | 
						|
    stb r16, (r1)
 | 
						|
    ldhs r16, (r1)
 | 
						|
    sths r16, (r1)
 | 
						|
    ld r0, 0x3c (r1)
 | 
						|
    st r0, 0x3c (r1)
 | 
						|
    ld r0, 0xfff (r1)
 | 
						|
    st r0, 0xfff (r1)
 | 
						|
    ld r1, 0xffff (r0)
 | 
						|
    st r1, 0xffff (r0)
 | 
						|
    ld r0, -1 (r1)
 | 
						|
    st r0, -1 (r1)
 | 
						|
    ld r16, 0x3c (r1)
 | 
						|
    st r16, 0x3c (r1)
 | 
						|
    ld r16, 0xfff (r1)
 | 
						|
    st r16, 0xfff (r1)
 | 
						|
    ld r16, 0xffff (r0)
 | 
						|
    st r16, 0xffff (r0)
 | 
						|
    ld r16, -1 (r1)
 | 
						|
    st r16, -1 (r1)
 | 
						|
 | 
						|
	ld.f r0, (r1)
 | 
						|
	st.f r0, (r1)
 | 
						|
	ld.f r0, 8 (r1)
 | 
						|
	st.f r0, 8 (r1)
 | 
						|
 | 
						|
	ld r0, (r1, r2)
 | 
						|
	st r0, (r1, r2)
 | 
						|
	ld.f r0, (pc, pc)
 | 
						|
	st.f r0, (pc, pc)
 | 
						|
 | 
						|
near:
 | 
						|
	ld r0, (r1)++
 | 
						|
	st r0, (r1)++
 | 
						|
	ld.f pc, (pc)++
 | 
						|
	st.f pc, (pc)++
 | 
						|
 | 
						|
	ld r0, near
 | 
						|
	ld r0, main
 | 
						|
	st r0, near
 | 
						|
	st r0, main
 | 
						|
	ldb r0, near
 | 
						|
	ldb r0, main
 | 
						|
	stb r0, near
 | 
						|
	stb r0, main
 | 
						|
 | 
						|
	b.eq r0, r1, near
 | 
						|
	b r0, r1, near
 | 
						|
	addcmpb r0, r1, r2, .
 | 
						|
	addcmpb r0, #1, r2, .
 | 
						|
	addcmpb r0, r1, #1, .
 | 
						|
	addcmpb r0, #1, #2, .
 |