xref: /aosp_15_r20/external/libxaac/decoder/armv8/ixheaacd_postradixcompute4.s (revision 15dc779a375ca8b5125643b829a8aa4b70d7f451)
1*15dc779aSAndroid Build Coastguard Worker//.include "ihevc_neon_macros.s"
2*15dc779aSAndroid Build Coastguard Worker.macro push_v_regs
3*15dc779aSAndroid Build Coastguard Worker    stp             x8, x9, [sp, #-16]!
4*15dc779aSAndroid Build Coastguard Worker    stp             x10, X11, [sp, #-16]!
5*15dc779aSAndroid Build Coastguard Worker    stp             X12, X13, [sp, #-16]!
6*15dc779aSAndroid Build Coastguard Worker    stp             X14, X15, [sp, #-16]!
7*15dc779aSAndroid Build Coastguard Worker    stp             X29, X30, [sp, #-16]!
8*15dc779aSAndroid Build Coastguard Worker.endm
9*15dc779aSAndroid Build Coastguard Worker.macro pop_v_regs
10*15dc779aSAndroid Build Coastguard Worker    ldp             X29, X30, [sp], #16
11*15dc779aSAndroid Build Coastguard Worker    ldp             X14, X15, [sp], #16
12*15dc779aSAndroid Build Coastguard Worker    ldp             X12, X13, [sp], #16
13*15dc779aSAndroid Build Coastguard Worker    ldp             X10, X11, [sp], #16
14*15dc779aSAndroid Build Coastguard Worker    ldp             X8, X9, [sp], #16
15*15dc779aSAndroid Build Coastguard Worker.endm
16*15dc779aSAndroid Build Coastguard Worker
17*15dc779aSAndroid Build Coastguard Worker.text
18*15dc779aSAndroid Build Coastguard Worker.p2align 2
19*15dc779aSAndroid Build Coastguard Worker        .global ixheaacd_postradixcompute4
20*15dc779aSAndroid Build Coastguard Worker
21*15dc779aSAndroid Build Coastguard Worker
22*15dc779aSAndroid Build Coastguard Workerixheaacd_postradixcompute4:
23*15dc779aSAndroid Build Coastguard Worker
24*15dc779aSAndroid Build Coastguard Worker    // STMFD sp!, {x4-x12, x14}
25*15dc779aSAndroid Build Coastguard Worker    push_v_regs
26*15dc779aSAndroid Build Coastguard Worker    //SUB         sp, sp, #16
27*15dc779aSAndroid Build Coastguard Worker
28*15dc779aSAndroid Build Coastguard Worker    //HARD CODED for FFT Length of 16
29*15dc779aSAndroid Build Coastguard Worker    // x3 is always 16
30*15dc779aSAndroid Build Coastguard Worker
31*15dc779aSAndroid Build Coastguard Worker
32*15dc779aSAndroid Build Coastguard Worker    //SUB         x4, x3, #2              ; y to y offset calculated
33*15dc779aSAndroid Build Coastguard Worker    //MOV         x4, #14
34*15dc779aSAndroid Build Coastguard Worker    //STR         x4, [sp, #8]            ; (npoints / 2)*4bytes - 4bytes
35*15dc779aSAndroid Build Coastguard Worker
36*15dc779aSAndroid Build Coastguard Worker    //STR         x0, [sp, #12]           ; (3*(npoints/2))*4bytes - 4bytes
37*15dc779aSAndroid Build Coastguard Worker                                        // x0 to x2 offset (npoints / 2)*4bytes
38*15dc779aSAndroid Build Coastguard Worker    ADD             x4, x1, x3, lsl #1  // x1 -> x0, x4 -> x2
39*15dc779aSAndroid Build Coastguard Worker    MOV             x3, #2
40*15dc779aSAndroid Build Coastguard Worker
41*15dc779aSAndroid Build Coastguard Worker
42*15dc779aSAndroid Build Coastguard WorkerPOSTRADIX4_START:
43*15dc779aSAndroid Build Coastguard Worker
44*15dc779aSAndroid Build Coastguard Worker//    LDMIA       x1!, {x5-x12}               // x_0 :x_7
45*15dc779aSAndroid Build Coastguard Worker
46*15dc779aSAndroid Build Coastguard Worker    LDP             w5, w6, [x1], #8    // x_0 :x_1
47*15dc779aSAndroid Build Coastguard Worker    LDP             w7, w8, [x1], #8    // x_2 :x_3
48*15dc779aSAndroid Build Coastguard Worker    LDP             w9, w10, [x1], #8   // x_4 :x_5
49*15dc779aSAndroid Build Coastguard Worker    LDP             w11, w12, [x1], #8  // x_6 :x_7
50*15dc779aSAndroid Build Coastguard Worker
51*15dc779aSAndroid Build Coastguard Worker    ADD             w14, w5, w9         // xh0_0 = x_0 + x_4
52*15dc779aSAndroid Build Coastguard Worker    SUB             w5, w5, w9          // xl0_0 = x_0 - x_4
53*15dc779aSAndroid Build Coastguard Worker
54*15dc779aSAndroid Build Coastguard Worker    ADD             w9, w6, w10         // xh1_0 = x_1 + x_5
55*15dc779aSAndroid Build Coastguard Worker    SUB             w6, w6, w10         // xl1_0 = x_1 - x_5
56*15dc779aSAndroid Build Coastguard Worker
57*15dc779aSAndroid Build Coastguard Worker    ADD             w10, w7, w11        // xh0_1 = x_2 + x_6
58*15dc779aSAndroid Build Coastguard Worker    SUB             w7, w7, w11         // xl0_1 = x_2 - x_6
59*15dc779aSAndroid Build Coastguard Worker
60*15dc779aSAndroid Build Coastguard Worker    ADD             w11, w8, w12        // xh1_1 = x_3 + x_7
61*15dc779aSAndroid Build Coastguard Worker    SUB             w8, w8, w12         // xl1_1 = x_3 - x_7
62*15dc779aSAndroid Build Coastguard Worker
63*15dc779aSAndroid Build Coastguard Worker    ADD             w12, w14, w10       // n00 = xh0_0 + xh0_1
64*15dc779aSAndroid Build Coastguard Worker    SUB             w14, w14, w10       // n20 = xh0_0 - xh0_1
65*15dc779aSAndroid Build Coastguard Worker
66*15dc779aSAndroid Build Coastguard Worker    ADD             w10, w9, w11        // n01 = xh1_0 + xh1_1
67*15dc779aSAndroid Build Coastguard Worker    SUB             w9, w9, w11         // n21 = xh1_0 - xh1_1
68*15dc779aSAndroid Build Coastguard Worker
69*15dc779aSAndroid Build Coastguard Worker    ADD             w11, w5, w8         // n10 = xl0_0 + xl1_1
70*15dc779aSAndroid Build Coastguard Worker    SUB             w5, w5, w8          // n30 = xl0_0 - xl1_1
71*15dc779aSAndroid Build Coastguard Worker
72*15dc779aSAndroid Build Coastguard Worker    ADD             w8, w6, w7          // n31 = xl1_0 + xl0_1
73*15dc779aSAndroid Build Coastguard Worker    SUB             w6, w6, w7          // n11 = xl1_0 - xl0_1
74*15dc779aSAndroid Build Coastguard Worker
75*15dc779aSAndroid Build Coastguard Worker
76*15dc779aSAndroid Build Coastguard Worker    STR             w12, [x0], #4       // y0[h2] = n00, x7 -> y0[h2 + 1]
77*15dc779aSAndroid Build Coastguard Worker
78*15dc779aSAndroid Build Coastguard Worker    STR             w10, [x0], #14<<1   // y0[h2 + 1] = n01, x7 -> y1[h2]
79*15dc779aSAndroid Build Coastguard Worker
80*15dc779aSAndroid Build Coastguard Worker    STR             w11, [x0], #4       // y1[h2] = n10, x7 -> y1[h2 + 1]
81*15dc779aSAndroid Build Coastguard Worker    STR             w6 , [x0], #14<<1   // y1[h2 + 1] = n11, x7 -> y2[h2]
82*15dc779aSAndroid Build Coastguard Worker
83*15dc779aSAndroid Build Coastguard Worker    STR             w14, [x0], #4       // y2[h2] = n20, x7 -> y2[h2 + 1]
84*15dc779aSAndroid Build Coastguard Worker    STR             w9 , [x0], #14<<1   // y2[h2 + 1] = n21, x7 -> y3[h2]
85*15dc779aSAndroid Build Coastguard Worker
86*15dc779aSAndroid Build Coastguard Worker    STR             w5, [x0], #4        // y3[h2] = n30, x7 -> y3[h2 + 1]
87*15dc779aSAndroid Build Coastguard Worker    STR             w8, [x0], #0        // y3[h2 + 1] = n31, x7 -> y0[h2+2]
88*15dc779aSAndroid Build Coastguard Worker
89*15dc779aSAndroid Build Coastguard Worker//    LDMIA       x4!, {x5-x12}               // x_0 :x_7
90*15dc779aSAndroid Build Coastguard Worker
91*15dc779aSAndroid Build Coastguard Worker    LDP             w5, w6, [x4], #8    // x_8 :x_8
92*15dc779aSAndroid Build Coastguard Worker    LDP             w7, w8, [x4], #8    // x_a :x_b
93*15dc779aSAndroid Build Coastguard Worker    LDP             w9, w10, [x4], #8   // x_c :x_d
94*15dc779aSAndroid Build Coastguard Worker    LDP             w11, w12, [x4], #8  // x_e :x_f
95*15dc779aSAndroid Build Coastguard Worker
96*15dc779aSAndroid Build Coastguard Worker    SUB             x0, x0, #92         // #4*3 + #14<<1 * 3 - 8
97*15dc779aSAndroid Build Coastguard Worker
98*15dc779aSAndroid Build Coastguard Worker
99*15dc779aSAndroid Build Coastguard Worker    ADD             w14, w5, w9
100*15dc779aSAndroid Build Coastguard Worker    SUB             w5, w5, w9
101*15dc779aSAndroid Build Coastguard Worker
102*15dc779aSAndroid Build Coastguard Worker    ADD             w9, w6, w10
103*15dc779aSAndroid Build Coastguard Worker    SUB             w6, w6, w10
104*15dc779aSAndroid Build Coastguard Worker
105*15dc779aSAndroid Build Coastguard Worker    ADD             w10, w7, w11
106*15dc779aSAndroid Build Coastguard Worker    SUB             w7, w7, w11
107*15dc779aSAndroid Build Coastguard Worker
108*15dc779aSAndroid Build Coastguard Worker    ADD             w11, w8, w12
109*15dc779aSAndroid Build Coastguard Worker    SUB             w8, w8, w12
110*15dc779aSAndroid Build Coastguard Worker
111*15dc779aSAndroid Build Coastguard Worker    ADD             w12, w14, w10
112*15dc779aSAndroid Build Coastguard Worker    SUB             w14, w14, w10
113*15dc779aSAndroid Build Coastguard Worker
114*15dc779aSAndroid Build Coastguard Worker    ADD             w10, w9, w11
115*15dc779aSAndroid Build Coastguard Worker    SUB             w9, w9, w11
116*15dc779aSAndroid Build Coastguard Worker
117*15dc779aSAndroid Build Coastguard Worker    ADD             w11, w5, w8
118*15dc779aSAndroid Build Coastguard Worker    SUB             w5, w5, w8
119*15dc779aSAndroid Build Coastguard Worker
120*15dc779aSAndroid Build Coastguard Worker    ADD             w8, w6, w7
121*15dc779aSAndroid Build Coastguard Worker    SUB             w6, w6, w7
122*15dc779aSAndroid Build Coastguard Worker
123*15dc779aSAndroid Build Coastguard Worker    STR             w12, [x0], #4
124*15dc779aSAndroid Build Coastguard Worker    STR             w10, [x0], #14<<1
125*15dc779aSAndroid Build Coastguard Worker
126*15dc779aSAndroid Build Coastguard Worker    STR             w11, [x0], #4
127*15dc779aSAndroid Build Coastguard Worker    STR             w6, [x0], #14<<1
128*15dc779aSAndroid Build Coastguard Worker
129*15dc779aSAndroid Build Coastguard Worker    STR             w14, [x0], #4
130*15dc779aSAndroid Build Coastguard Worker    STR             w9, [x0], #14<<1
131*15dc779aSAndroid Build Coastguard Worker
132*15dc779aSAndroid Build Coastguard Worker
133*15dc779aSAndroid Build Coastguard Worker    STR             w5, [x0], #4
134*15dc779aSAndroid Build Coastguard Worker    STR             w8, [x0], #0
135*15dc779aSAndroid Build Coastguard Worker
136*15dc779aSAndroid Build Coastguard Worker    ADD             x1, x1, #1 << 5     // x0 += (Word32) npoints >> 1
137*15dc779aSAndroid Build Coastguard Worker    ADD             x4, x4, #1 << 5     // x2 += (Word32) npoints >> 1
138*15dc779aSAndroid Build Coastguard Worker    SUB             x0, x0, #100-8
139*15dc779aSAndroid Build Coastguard Worker
140*15dc779aSAndroid Build Coastguard Worker    SUBS            w3, w3, #1
141*15dc779aSAndroid Build Coastguard Worker
142*15dc779aSAndroid Build Coastguard Worker    BGT             POSTRADIX4_START
143*15dc779aSAndroid Build Coastguard Worker
144*15dc779aSAndroid Build Coastguard Worker    // LDMFD sp!, {x4-x12, x15}
145*15dc779aSAndroid Build Coastguard Worker    pop_v_regs
146*15dc779aSAndroid Build Coastguard Worker    ret
147*15dc779aSAndroid Build Coastguard Worker
148*15dc779aSAndroid Build Coastguard Worker
149