# /* * 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, .