summaryrefslogtreecommitdiff
path: root/floor1ARM.s
diff options
context:
space:
mode:
Diffstat (limited to 'floor1ARM.s')
-rw-r--r--floor1ARM.s36
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