@@ -40,18 +40,18 @@ namespace lsp
4040 __ASM_EMIT (" subs %[count], %[count], #32" )
4141 __ASM_EMIT (" b.lo 2f" )
4242 __ASM_EMIT (" 1:" )
43- __ASM_EMIT (" ldp q0, q1, [%[a], #0x00] " ) // v0 = a
44- __ASM_EMIT (" ldp q2, q3 , [%[a] , #0x20] " )
45- __ASM_EMIT (" ldp q4, q5 , [%[a] , #0x40] " )
46- __ASM_EMIT (" ldp q6, q7 , [%[a], #0x60] " )
47- __ASM_EMIT (" ldp q16, q17 , [%[b], #0x00] " ) // v16 = b
48- __ASM_EMIT (" ldp q18, q19 , [%[b] , #0x20] " )
49- __ASM_EMIT (" ldp q20, q21 , [%[b] , #0x40] " )
50- __ASM_EMIT (" ldp q22, q23 , [%[b], #0x60] " )
51- __ASM_EMIT (" ldp q24, q25 , [%[k], #0x00] " ) // v24 = k
52- __ASM_EMIT (" ldp q26, q27 , [%[k] , #0x20] " )
53- __ASM_EMIT (" ldp q28, q29 , [%[k] , #0x40] " )
54- __ASM_EMIT (" ldp q30, q31, [%[k], #0x60] " )
43+ __ASM_EMIT (" ldp q0, q1, [%[a]] , #0x20 " ) // v0 = a
44+ __ASM_EMIT (" ldp q16, q17 , [%[b]] , #0x20" ) // v16 = b
45+ __ASM_EMIT (" ldp q24, q25 , [%[k]] , #0x20 " ) // v24 = k
46+ __ASM_EMIT (" ldp q2, q3 , [%[a]] , #0x20 " )
47+ __ASM_EMIT (" ldp q18, q19 , [%[b]] , #0x20 " )
48+ __ASM_EMIT (" ldp q26, q27 , [%[k]] , #0x20" )
49+ __ASM_EMIT (" ldp q4, q5 , [%[a]] , #0x20 " )
50+ __ASM_EMIT (" ldp q20, q21 , [%[b]] , #0x20 " )
51+ __ASM_EMIT (" ldp q28, q29 , [%[k]] , #0x20 " )
52+ __ASM_EMIT (" ldp q6, q7 , [%[a]] , #0x20" )
53+ __ASM_EMIT (" ldp q22, q23 , [%[b]] , #0x20 " )
54+ __ASM_EMIT (" ldp q30, q31, [%[k]] , #0x20 " )
5555 __ASM_EMIT (" fsub v16.4s, v16.4s, v0.4s" ) // v16 = b-a
5656 __ASM_EMIT (" fsub v17.4s, v17.4s, v1.4s" )
5757 __ASM_EMIT (" fsub v18.4s, v18.4s, v2.4s" )
@@ -68,26 +68,22 @@ namespace lsp
6868 __ASM_EMIT (" fmla v5.4s, v21.4s, v29.4s" )
6969 __ASM_EMIT (" fmla v6.4s, v22.4s, v30.4s" )
7070 __ASM_EMIT (" fmla v7.4s, v23.4s, v31.4s" )
71- __ASM_EMIT (" stp q0, q1, [%[dst], #0x00]" )
72- __ASM_EMIT (" stp q2, q3, [%[dst], #0x20]" )
73- __ASM_EMIT (" stp q4, q5, [%[dst], #0x40]" )
74- __ASM_EMIT (" stp q6, q7, [%[dst], #0x60]" )
7571 __ASM_EMIT (" subs %[count], %[count], #32" )
76- __ASM_EMIT (" add %[a], %[a] , #0x80 " )
77- __ASM_EMIT (" add %[b], %[b] , #0x80 " )
78- __ASM_EMIT (" add %[k], %[k] , #0x80 " )
79- __ASM_EMIT (" add %[dst], %[dst], #0x80 " )
72+ __ASM_EMIT (" stp q0, q1, [%[dst]] , #0x20 " )
73+ __ASM_EMIT (" stp q2, q3, [%[dst]] , #0x20 " )
74+ __ASM_EMIT (" stp q4, q5, [%[dst]] , #0x20 " )
75+ __ASM_EMIT (" stp q6, q7, [ %[dst]] , #0x20 " )
8076 __ASM_EMIT (" b.hs 1b" )
8177 // x16 block
8278 __ASM_EMIT (" 2:" )
8379 __ASM_EMIT (" adds %[count], %[count], #16" )
8480 __ASM_EMIT (" b.lt 4f" )
85- __ASM_EMIT (" ldp q0, q1, [%[a], #0x00] " ) // v0 = a
86- __ASM_EMIT (" ldp q2, q3 , [%[a] , #0x20] " )
87- __ASM_EMIT (" ldp q16, q17 , [%[b] , #0x00] " ) // v16 = b
88- __ASM_EMIT (" ldp q18, q19 , [%[b] , #0x20] " )
89- __ASM_EMIT (" ldp q24, q25 , [%[k] , #0x00] " ) // v24 = k
90- __ASM_EMIT (" ldp q26, q27, [%[k], #0x20] " )
81+ __ASM_EMIT (" ldp q0, q1, [%[a]] , #0x20 " ) // v0 = a
82+ __ASM_EMIT (" ldp q16, q17 , [%[b]] , #0x20" ) // v16 = b
83+ __ASM_EMIT (" ldp q24, q25 , [%[k]] , #0x20 " ) // v24 = k
84+ __ASM_EMIT (" ldp q2, q3 , [%[a]] , #0x20" )
85+ __ASM_EMIT (" ldp q18, q19 , [%[b]] , #0x20 " )
86+ __ASM_EMIT (" ldp q26, q27, [%[k]] , #0x20" )
9187 __ASM_EMIT (" fsub v16.4s, v16.4s, v0.4s" ) // v16 = b-a
9288 __ASM_EMIT (" fsub v17.4s, v17.4s, v1.4s" )
9389 __ASM_EMIT (" fsub v18.4s, v18.4s, v2.4s" )
@@ -96,61 +92,45 @@ namespace lsp
9692 __ASM_EMIT (" fmla v1.4s, v17.4s, v25.4s" )
9793 __ASM_EMIT (" fmla v2.4s, v18.4s, v26.4s" )
9894 __ASM_EMIT (" fmla v3.4s, v19.4s, v27.4s" )
99- __ASM_EMIT (" stp q0, q1, [%[dst], #0x00]" )
100- __ASM_EMIT (" stp q2, q3, [%[dst], #0x20]" )
10195 __ASM_EMIT (" sub %[count], %[count], #16" )
102- __ASM_EMIT (" add %[a], %[a], #0x40" )
103- __ASM_EMIT (" add %[b], %[b], #0x40" )
104- __ASM_EMIT (" add %[k], %[k], #0x40" )
105- __ASM_EMIT (" add %[dst], %[dst], #0x40" )
96+ __ASM_EMIT (" stp q0, q1, [%[dst]], #0x20" )
97+ __ASM_EMIT (" stp q2, q3, [%[dst]], #0x20" )
10698 // x8 block
10799 __ASM_EMIT (" 4:" )
108100 __ASM_EMIT (" adds %[count], %[count], #8" )
109101 __ASM_EMIT (" b.lt 6f" )
110- __ASM_EMIT (" ldp q0, q1, [%[a], #0x00] " ) // v0 = a
111- __ASM_EMIT (" ldp q16, q17, [%[b], #0x00] " ) // v16 = b
112- __ASM_EMIT (" ldp q24, q25, [%[k], #0x00] " ) // v24 = k
102+ __ASM_EMIT (" ldp q0, q1, [%[a]] , #0x20 " ) // v0 = a
103+ __ASM_EMIT (" ldp q16, q17, [%[b]] , #0x20 " ) // v16 = b
104+ __ASM_EMIT (" ldp q24, q25, [%[k]] , #0x20 " ) // v24 = k
113105 __ASM_EMIT (" fsub v16.4s, v16.4s, v0.4s" ) // v16 = b-a
114106 __ASM_EMIT (" fsub v17.4s, v17.4s, v1.4s" )
115107 __ASM_EMIT (" fmla v0.4s, v16.4s, v24.4s" ) // v0 = a + (b-a)*k
116108 __ASM_EMIT (" fmla v1.4s, v17.4s, v25.4s" )
117- __ASM_EMIT (" stp q0, q1, [%[dst], #0x00]" )
118109 __ASM_EMIT (" sub %[count], %[count], #8" )
119- __ASM_EMIT (" add %[a], %[a], #0x20" )
120- __ASM_EMIT (" add %[b], %[b], #0x20" )
121- __ASM_EMIT (" add %[k], %[k], #0x20" )
122- __ASM_EMIT (" add %[dst], %[dst], #0x20" )
110+ __ASM_EMIT (" stp q0, q1, [%[dst]], #0x20" )
123111 // x4 blocks
124112 __ASM_EMIT (" 6:" )
125113 __ASM_EMIT (" adds %[count], %[count], #4" )
126114 __ASM_EMIT (" b.lt 8f" )
127- __ASM_EMIT (" ldr q0, [%[a], #0x00] " ) // v0 = a
128- __ASM_EMIT (" ldr q16, [%[b], #0x00] " ) // v16 = b
129- __ASM_EMIT (" ldr q24, [%[k], #0x00] " ) // v24 = k
115+ __ASM_EMIT (" ldr q0, [%[a]] , #0x10 " ) // v0 = a
116+ __ASM_EMIT (" ldr q16, [%[b]] , #0x10 " ) // v16 = b
117+ __ASM_EMIT (" ldr q24, [%[k]] , #0x10 " ) // v24 = k
130118 __ASM_EMIT (" fsub v16.4s, v16.4s, v0.4s" ) // v16 = b-a
131119 __ASM_EMIT (" fmla v0.4s, v16.4s, v24.4s" ) // v0 = a + (b-a)*k
132- __ASM_EMIT (" str q0, [%[dst], #0x00] " )
120+ __ASM_EMIT (" str q0, [%[dst]] , #0x10 " )
133121 __ASM_EMIT (" sub %[count], %[count], #4" )
134- __ASM_EMIT (" add %[a], %[a], #0x10" )
135- __ASM_EMIT (" add %[b], %[b], #0x10" )
136- __ASM_EMIT (" add %[k], %[k], #0x10" )
137- __ASM_EMIT (" add %[dst], %[dst], #0x10" )
138122 // x1 blocks
139123 __ASM_EMIT (" 8:" )
140124 __ASM_EMIT (" adds %[count], %[count], #3" )
141125 __ASM_EMIT (" b.lt 10f" )
142126 __ASM_EMIT (" 9:" )
143- __ASM_EMIT (" ld1r {v0.4s}, [%[a]]" ) // v0 = a
144- __ASM_EMIT (" ld1r {v16.4s}, [%[b]]" ) // v16 = b
145- __ASM_EMIT (" ld1r {v24.4s}, [%[k]]" ) // v24 = k
127+ __ASM_EMIT (" ld1r {v0.4s}, [%[a]], #0x04 " ) // v0 = a
128+ __ASM_EMIT (" ld1r {v16.4s}, [%[b]], #0x04 " ) // v16 = b
129+ __ASM_EMIT (" ld1r {v24.4s}, [%[k]], #0x04 " ) // v24 = k
146130 __ASM_EMIT (" fsub v16.4s, v16.4s, v0.4s" ) // v16 = b-a
147131 __ASM_EMIT (" fmla v0.4s, v16.4s, v24.4s" ) // v0 = a + (b-a)*k
148- __ASM_EMIT (" st1 {v0.s}[0], [%[dst]]" )
132+ __ASM_EMIT (" st1 {v0.s}[0], [%[dst]], #0x04 " )
149133 __ASM_EMIT (" subs %[count], %[count], #1" )
150- __ASM_EMIT (" add %[a], %[a], #0x04" )
151- __ASM_EMIT (" add %[b], %[b], #0x04" )
152- __ASM_EMIT (" add %[k], %[k], #0x04" )
153- __ASM_EMIT (" add %[dst], %[dst], #0x04" )
154134 __ASM_EMIT (" b.ge 9b" )
155135 // end
156136 __ASM_EMIT (" 10:" )
@@ -177,14 +157,14 @@ namespace lsp
177157 __ASM_EMIT (" ld1r {v24.4s}, [%[k]]" )
178158 __ASM_EMIT (" b.lo 2f" )
179159 __ASM_EMIT (" 1:" )
180- __ASM_EMIT (" ldp q0, q1, [%[a], #0x00] " ) // v0 = a
181- __ASM_EMIT (" ldp q2, q3, [%[a], #0x20] " )
182- __ASM_EMIT (" ldp q4, q5, [%[a], #0x40] " )
183- __ASM_EMIT (" ldp q6, q7, [%[a], #0x60] " )
184- __ASM_EMIT (" ldp q16, q17, [%[b], #0x00] " ) // v16 = b
185- __ASM_EMIT (" ldp q18, q19, [%[b], #0x20] " )
186- __ASM_EMIT (" ldp q20, q21, [%[b], #0x40] " )
187- __ASM_EMIT (" ldp q22, q23, [%[b], #0x60] " )
160+ __ASM_EMIT (" ldp q0, q1, [%[a]] , #0x20 " ) // v0 = a
161+ __ASM_EMIT (" ldp q2, q3, [%[a]] , #0x20" )
162+ __ASM_EMIT (" ldp q4, q5, [%[a]] , #0x20 " )
163+ __ASM_EMIT (" ldp q6, q7, [%[a]] , #0x20 " )
164+ __ASM_EMIT (" ldp q16, q17, [%[b]] , #0x20 " ) // v16 = b
165+ __ASM_EMIT (" ldp q18, q19, [%[b]] , #0x20" )
166+ __ASM_EMIT (" ldp q20, q21, [%[b]] , #0x20 " )
167+ __ASM_EMIT (" ldp q22, q23, [%[b]] , #0x20 " )
188168 __ASM_EMIT (" fsub v16.4s, v16.4s, v0.4s" ) // v16 = b-a
189169 __ASM_EMIT (" fsub v17.4s, v17.4s, v1.4s" )
190170 __ASM_EMIT (" fsub v18.4s, v18.4s, v2.4s" )
0 commit comments