Skip to content

Commit 0739b1a

Browse files
committed
up
1 parent 4d2c4e1 commit 0739b1a

1 file changed

Lines changed: 63 additions & 98 deletions

File tree

  • include/private/dsp/arch/aarch64/asimd/pmath

include/private/dsp/arch/aarch64/asimd/pmath/lerp.h

Lines changed: 63 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)