@@ -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 q16, q17 , [%[b]] , #0x20" ) // v16 = b
162+ __ASM_EMIT (" ldp q2, q3 , [%[a]] , #0x20 " )
163+ __ASM_EMIT (" ldp q18, q19 , [%[b]] , #0x20 " )
164+ __ASM_EMIT (" ldp q4, q5 , [%[a]] , #0x20 " )
165+ __ASM_EMIT (" ldp q20, q21 , [%[b]] , #0x20" )
166+ __ASM_EMIT (" ldp q6, q7 , [%[a]] , #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" )
@@ -201,23 +181,20 @@ namespace lsp
201181 __ASM_EMIT (" fmla v5.4s, v21.4s, v24.4s" )
202182 __ASM_EMIT (" fmla v6.4s, v22.4s, v24.4s" )
203183 __ASM_EMIT (" fmla v7.4s, v23.4s, v24.4s" )
204- __ASM_EMIT (" stp q0, q1, [%[dst], #0x00]" )
205- __ASM_EMIT (" stp q2, q3, [%[dst], #0x20]" )
206- __ASM_EMIT (" stp q4, q5, [%[dst], #0x40]" )
207- __ASM_EMIT (" stp q6, q7, [%[dst], #0x60]" )
208184 __ASM_EMIT (" subs %[count], %[count], #32" )
209- __ASM_EMIT (" add %[a], %[a], #0x80" )
210- __ASM_EMIT (" add %[b], %[b], #0x80" )
211- __ASM_EMIT (" add %[dst], %[dst], #0x80" )
185+ __ASM_EMIT (" stp q0, q1, [%[dst]], #0x20" )
186+ __ASM_EMIT (" stp q2, q3, [%[dst]], #0x20" )
187+ __ASM_EMIT (" stp q4, q5, [%[dst]], #0x20" )
188+ __ASM_EMIT (" stp q6, q7, [%[dst]], #0x20" )
212189 __ASM_EMIT (" b.hs 1b" )
213190 // x16 block
214191 __ASM_EMIT (" 2:" )
215192 __ASM_EMIT (" adds %[count], %[count], #16" )
216193 __ASM_EMIT (" b.lt 4f" )
217- __ASM_EMIT (" ldp q0, q1, [%[a], #0x00] " ) // v0 = a
218- __ASM_EMIT (" ldp q2, q3 , [%[a] , #0x20] " )
219- __ASM_EMIT (" ldp q16, q17 , [%[b] , #0x00] " ) // v16 = b
220- __ASM_EMIT (" ldp q18, q19, [%[b], #0x20] " )
194+ __ASM_EMIT (" ldp q0, q1, [%[a]] , #0x20 " ) // v0 = a
195+ __ASM_EMIT (" ldp q16, q17 , [%[b]] , #0x20" ) // v16 = b
196+ __ASM_EMIT (" ldp q2, q3 , [%[a]] , #0x20 " )
197+ __ASM_EMIT (" ldp q18, q19, [%[b]] , #0x20" )
221198 __ASM_EMIT (" fsub v16.4s, v16.4s, v0.4s" ) // v16 = b-a
222199 __ASM_EMIT (" fsub v17.4s, v17.4s, v1.4s" )
223200 __ASM_EMIT (" fsub v18.4s, v18.4s, v2.4s" )
@@ -226,54 +203,42 @@ namespace lsp
226203 __ASM_EMIT (" fmla v1.4s, v17.4s, v24.4s" )
227204 __ASM_EMIT (" fmla v2.4s, v18.4s, v24.4s" )
228205 __ASM_EMIT (" fmla v3.4s, v19.4s, v24.4s" )
229- __ASM_EMIT (" stp q0, q1, [%[dst], #0x00]" )
230- __ASM_EMIT (" stp q2, q3, [%[dst], #0x20]" )
231206 __ASM_EMIT (" sub %[count], %[count], #16" )
232- __ASM_EMIT (" add %[a], %[a], #0x40" )
233- __ASM_EMIT (" add %[b], %[b], #0x40" )
234- __ASM_EMIT (" add %[dst], %[dst], #0x40" )
207+ __ASM_EMIT (" stp q0, q1, [%[dst]], #0x20" )
208+ __ASM_EMIT (" stp q2, q3, [%[dst]], #0x20" )
235209 // x8 block
236210 __ASM_EMIT (" 4:" )
237211 __ASM_EMIT (" adds %[count], %[count], #8" )
238212 __ASM_EMIT (" b.lt 6f" )
239- __ASM_EMIT (" ldp q0, q1, [%[a], #0x00] " ) // v0 = a
240- __ASM_EMIT (" ldp q16, q17, [%[b], #0x00] " ) // v16 = b
213+ __ASM_EMIT (" ldp q0, q1, [%[a]] , #0x20 " ) // v0 = a
214+ __ASM_EMIT (" ldp q16, q17, [%[b]] , #0x20 " ) // v16 = b
241215 __ASM_EMIT (" fsub v16.4s, v16.4s, v0.4s" ) // v16 = b-a
242216 __ASM_EMIT (" fsub v17.4s, v17.4s, v1.4s" )
243217 __ASM_EMIT (" fmla v0.4s, v16.4s, v24.4s" ) // v0 = a + (b-a)*k
244218 __ASM_EMIT (" fmla v1.4s, v17.4s, v24.4s" )
245- __ASM_EMIT (" stp q0, q1, [%[dst], #0x00]" )
246219 __ASM_EMIT (" sub %[count], %[count], #8" )
247- __ASM_EMIT (" add %[a], %[a], #0x20" )
248- __ASM_EMIT (" add %[b], %[b], #0x20" )
249- __ASM_EMIT (" add %[dst], %[dst], #0x20" )
220+ __ASM_EMIT (" stp q0, q1, [%[dst]], #0x20" )
250221 // x4 blocks
251222 __ASM_EMIT (" 6:" )
252223 __ASM_EMIT (" adds %[count], %[count], #4" )
253224 __ASM_EMIT (" b.lt 8f" )
254- __ASM_EMIT (" ldr q0, [%[a], #0x00] " ) // v0 = a
255- __ASM_EMIT (" ldr q16, [%[b], #0x00] " ) // v16 = b
225+ __ASM_EMIT (" ldr q0, [%[a]] , #0x10 " ) // v0 = a
226+ __ASM_EMIT (" ldr q16, [%[b]] , #0x10 " ) // v16 = b
256227 __ASM_EMIT (" fsub v16.4s, v16.4s, v0.4s" ) // v16 = b-a
257228 __ASM_EMIT (" fmla v0.4s, v16.4s, v24.4s" ) // v0 = a + (b-a)*k
258- __ASM_EMIT (" str q0, [%[dst], #0x00]" )
259229 __ASM_EMIT (" sub %[count], %[count], #4" )
260- __ASM_EMIT (" add %[a], %[a], #0x10" )
261- __ASM_EMIT (" add %[b], %[b], #0x10" )
262- __ASM_EMIT (" add %[dst], %[dst], #0x10" )
230+ __ASM_EMIT (" str q0, [%[dst]], #0x10" )
263231 // x1 blocks
264232 __ASM_EMIT (" 8:" )
265233 __ASM_EMIT (" adds %[count], %[count], #3" )
266234 __ASM_EMIT (" b.lt 10f" )
267235 __ASM_EMIT (" 9:" )
268- __ASM_EMIT (" ld1r {v0.4s}, [%[a]]" ) // v0 = a
269- __ASM_EMIT (" ld1r {v16.4s}, [%[b]]" ) // v16 = b
236+ __ASM_EMIT (" ld1r {v0.4s}, [%[a]], #0x04 " ) // v0 = a
237+ __ASM_EMIT (" ld1r {v16.4s}, [%[b]], #0x04 " ) // v16 = b
270238 __ASM_EMIT (" fsub v16.4s, v16.4s, v0.4s" ) // v16 = b-a
271239 __ASM_EMIT (" fmla v0.4s, v16.4s, v24.4s" ) // v0 = a + (b-a)*k
272- __ASM_EMIT (" st1 {v0.s}[0], [%[dst]]" )
273240 __ASM_EMIT (" subs %[count], %[count], #1" )
274- __ASM_EMIT (" add %[a], %[a], #0x04" )
275- __ASM_EMIT (" add %[b], %[b], #0x04" )
276- __ASM_EMIT (" add %[dst], %[dst], #0x04" )
241+ __ASM_EMIT (" st1 {v0.s}[0], [%[dst]], #0x04" )
277242 __ASM_EMIT (" b.ge 9b" )
278243 // end
279244 __ASM_EMIT (" 10:" )
0 commit comments