diff options
Diffstat (limited to 'floor1ARM.s')
-rw-r--r-- | floor1ARM.s | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/floor1ARM.s b/floor1ARM.s new file mode 100644 index 0000000..689b5c5 --- /dev/null +++ b/floor1ARM.s @@ -0,0 +1,36 @@ +; Tremolo library +; Copyright (C) 2009 Robin Watts for Pinknoise Productions Ltd + + AREA |.text|, CODE, READONLY + + EXPORT render_line_arm + +render_line_arm + ; r0 = n + ; r1 = d + ; r2 = floor + ; r3 = base + ; <> = err + ; <> = adx + ; <> = ady + MOV r12,r13 + STMFD r13!,{r4-r6,r11,r14} + LDMFD r12,{r11,r12,r14} ; r11 = err + ; r12 = adx + ; r14 = ady +rl_loop + LDR r4,[r1] ; r4 = *d + LDR r5,[r2],r3,LSL #2 ; r5 = *floor r2 = floor+base + SUBS r11,r11,r14 ; err -= ady + ADDLT r11,r11,r12 ; if (err < 0) err+=adx + SMULL r6, r5, r4, r5 ; (r6,r5) = *d * *floor + ADDLT r2, r2, #4 ; floor+=1 + MOVS r6, r6, LSR #15 + ADC r5, r6, r5, LSL #17 ; r5 = MULT31_SHIFT15 + STR r5,[r1],#4 + SUBS r0, r0, #1 + BGT rl_loop + + LDMFD r13!,{r4-r6,r11,PC} + + END |