xref: /aosp_15_r20/external/libdav1d/src/arm/64/refmvs.S (revision c09093415860a1c2373dacd84c4fde00c507cdfd)
1*c0909341SAndroid Build Coastguard Worker/*
2*c0909341SAndroid Build Coastguard Worker * Copyright © 2021, VideoLAN and dav1d authors
3*c0909341SAndroid Build Coastguard Worker * Copyright © 2021, Martin Storsjo
4*c0909341SAndroid Build Coastguard Worker * All rights reserved.
5*c0909341SAndroid Build Coastguard Worker *
6*c0909341SAndroid Build Coastguard Worker * Redistribution and use in source and binary forms, with or without
7*c0909341SAndroid Build Coastguard Worker * modification, are permitted provided that the following conditions are met:
8*c0909341SAndroid Build Coastguard Worker *
9*c0909341SAndroid Build Coastguard Worker * 1. Redistributions of source code must retain the above copyright notice, this
10*c0909341SAndroid Build Coastguard Worker *    list of conditions and the following disclaimer.
11*c0909341SAndroid Build Coastguard Worker *
12*c0909341SAndroid Build Coastguard Worker * 2. Redistributions in binary form must reproduce the above copyright notice,
13*c0909341SAndroid Build Coastguard Worker *    this list of conditions and the following disclaimer in the documentation
14*c0909341SAndroid Build Coastguard Worker *    and/or other materials provided with the distribution.
15*c0909341SAndroid Build Coastguard Worker *
16*c0909341SAndroid Build Coastguard Worker * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
17*c0909341SAndroid Build Coastguard Worker * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18*c0909341SAndroid Build Coastguard Worker * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19*c0909341SAndroid Build Coastguard Worker * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
20*c0909341SAndroid Build Coastguard Worker * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21*c0909341SAndroid Build Coastguard Worker * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22*c0909341SAndroid Build Coastguard Worker * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23*c0909341SAndroid Build Coastguard Worker * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24*c0909341SAndroid Build Coastguard Worker * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25*c0909341SAndroid Build Coastguard Worker * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26*c0909341SAndroid Build Coastguard Worker */
27*c0909341SAndroid Build Coastguard Worker
28*c0909341SAndroid Build Coastguard Worker#include "src/arm/asm.S"
29*c0909341SAndroid Build Coastguard Worker#include "util.S"
30*c0909341SAndroid Build Coastguard Worker
31*c0909341SAndroid Build Coastguard Worker// void dav1d_splat_mv_neon(refmvs_block **rr, const refmvs_block *rmv,
32*c0909341SAndroid Build Coastguard Worker//                          int bx4, int bw4, int bh4)
33*c0909341SAndroid Build Coastguard Worker
34*c0909341SAndroid Build Coastguard Workerfunction splat_mv_neon, export=1
35*c0909341SAndroid Build Coastguard Worker        ld1             {v3.16b},  [x1]
36*c0909341SAndroid Build Coastguard Worker        clz             w3,  w3
37*c0909341SAndroid Build Coastguard Worker        movrel          x5,  splat_tbl
38*c0909341SAndroid Build Coastguard Worker        sub             w3,  w3,  #26
39*c0909341SAndroid Build Coastguard Worker        ext             v2.16b,  v3.16b,  v3.16b,  #12
40*c0909341SAndroid Build Coastguard Worker        ldrsw           x3,  [x5, w3, uxtw #2]
41*c0909341SAndroid Build Coastguard Worker        add             w2,  w2,  w2,  lsl #1
42*c0909341SAndroid Build Coastguard Worker        ext             v0.16b,  v2.16b,  v3.16b,  #4
43*c0909341SAndroid Build Coastguard Worker        add             x3,  x5,  x3
44*c0909341SAndroid Build Coastguard Worker        ext             v1.16b,  v2.16b,  v3.16b,  #8
45*c0909341SAndroid Build Coastguard Worker        lsl             w2,  w2,  #2
46*c0909341SAndroid Build Coastguard Worker        ext             v2.16b,  v2.16b,  v3.16b,  #12
47*c0909341SAndroid Build Coastguard Worker1:
48*c0909341SAndroid Build Coastguard Worker        ldr             x1,  [x0],  #8
49*c0909341SAndroid Build Coastguard Worker        subs            w4,  w4,  #1
50*c0909341SAndroid Build Coastguard Worker        add             x1,  x1,  x2
51*c0909341SAndroid Build Coastguard Worker        br              x3
52*c0909341SAndroid Build Coastguard Worker
53*c0909341SAndroid Build Coastguard Worker10:
54*c0909341SAndroid Build Coastguard Worker        AARCH64_VALID_JUMP_TARGET
55*c0909341SAndroid Build Coastguard Worker        st1             {v0.8b}, [x1]
56*c0909341SAndroid Build Coastguard Worker        str             s2,  [x1, #8]
57*c0909341SAndroid Build Coastguard Worker        b.gt            1b
58*c0909341SAndroid Build Coastguard Worker        ret
59*c0909341SAndroid Build Coastguard Worker20:
60*c0909341SAndroid Build Coastguard Worker        AARCH64_VALID_JUMP_TARGET
61*c0909341SAndroid Build Coastguard Worker        st1             {v0.16b}, [x1]
62*c0909341SAndroid Build Coastguard Worker        str             d1,  [x1, #16]
63*c0909341SAndroid Build Coastguard Worker        b.gt            1b
64*c0909341SAndroid Build Coastguard Worker        ret
65*c0909341SAndroid Build Coastguard Worker320:
66*c0909341SAndroid Build Coastguard Worker        AARCH64_VALID_JUMP_TARGET
67*c0909341SAndroid Build Coastguard Worker        st1             {v0.16b, v1.16b, v2.16b}, [x1], #48
68*c0909341SAndroid Build Coastguard Worker        st1             {v0.16b, v1.16b, v2.16b}, [x1], #48
69*c0909341SAndroid Build Coastguard Worker        st1             {v0.16b, v1.16b, v2.16b}, [x1], #48
70*c0909341SAndroid Build Coastguard Worker        st1             {v0.16b, v1.16b, v2.16b}, [x1], #48
71*c0909341SAndroid Build Coastguard Worker160:
72*c0909341SAndroid Build Coastguard Worker        AARCH64_VALID_JUMP_TARGET
73*c0909341SAndroid Build Coastguard Worker        st1             {v0.16b, v1.16b, v2.16b}, [x1], #48
74*c0909341SAndroid Build Coastguard Worker        st1             {v0.16b, v1.16b, v2.16b}, [x1], #48
75*c0909341SAndroid Build Coastguard Worker80:
76*c0909341SAndroid Build Coastguard Worker        AARCH64_VALID_JUMP_TARGET
77*c0909341SAndroid Build Coastguard Worker        st1             {v0.16b, v1.16b, v2.16b}, [x1], #48
78*c0909341SAndroid Build Coastguard Worker40:
79*c0909341SAndroid Build Coastguard Worker        AARCH64_VALID_JUMP_TARGET
80*c0909341SAndroid Build Coastguard Worker        st1             {v0.16b, v1.16b, v2.16b}, [x1]
81*c0909341SAndroid Build Coastguard Worker        b.gt            1b
82*c0909341SAndroid Build Coastguard Worker        ret
83*c0909341SAndroid Build Coastguard Workerendfunc
84*c0909341SAndroid Build Coastguard Worker
85*c0909341SAndroid Build Coastguard Workerjumptable splat_tbl
86*c0909341SAndroid Build Coastguard Worker        .word 320b  - splat_tbl
87*c0909341SAndroid Build Coastguard Worker        .word 160b  - splat_tbl
88*c0909341SAndroid Build Coastguard Worker        .word 80b   - splat_tbl
89*c0909341SAndroid Build Coastguard Worker        .word 40b   - splat_tbl
90*c0909341SAndroid Build Coastguard Worker        .word 20b   - splat_tbl
91*c0909341SAndroid Build Coastguard Worker        .word 10b   - splat_tbl
92*c0909341SAndroid Build Coastguard Workerendjumptable
93*c0909341SAndroid Build Coastguard Worker
94*c0909341SAndroid Build Coastguard Workerconst mv_tbls, align=4
95*c0909341SAndroid Build Coastguard Worker        .byte           255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255
96*c0909341SAndroid Build Coastguard Worker        .byte           0, 1, 2, 3, 8, 0, 1, 2, 3, 8, 0, 1, 2, 3, 8, 0
97*c0909341SAndroid Build Coastguard Worker        .byte           4, 5, 6, 7, 9, 4, 5, 6, 7, 9, 4, 5, 6, 7, 9, 4
98*c0909341SAndroid Build Coastguard Worker        .byte           4, 5, 6, 7, 9, 4, 5, 6, 7, 9, 4, 5, 6, 7, 9, 4
99*c0909341SAndroid Build Coastguard Workerendconst
100*c0909341SAndroid Build Coastguard Worker
101*c0909341SAndroid Build Coastguard Workerconst mask_mult, align=4
102*c0909341SAndroid Build Coastguard Worker        .byte           1, 2, 1, 2, 0, 0, 0, 0
103*c0909341SAndroid Build Coastguard Workerendconst
104*c0909341SAndroid Build Coastguard Worker
105*c0909341SAndroid Build Coastguard Worker// void dav1d_save_tmvs_neon(refmvs_temporal_block *rp, ptrdiff_t stride,
106*c0909341SAndroid Build Coastguard Worker//                           refmvs_block **rr, const uint8_t *ref_sign,
107*c0909341SAndroid Build Coastguard Worker//                           int col_end8, int row_end8,
108*c0909341SAndroid Build Coastguard Worker//                           int col_start8, int row_start8)
109*c0909341SAndroid Build Coastguard Workerfunction save_tmvs_neon, export=1
110*c0909341SAndroid Build Coastguard Worker        AARCH64_SIGN_LINK_REGISTER
111*c0909341SAndroid Build Coastguard Worker        stp             x29, x30, [sp, #-16]!
112*c0909341SAndroid Build Coastguard Worker        mov             x29, sp
113*c0909341SAndroid Build Coastguard Worker
114*c0909341SAndroid Build Coastguard Worker        movi            v30.8b,  #0
115*c0909341SAndroid Build Coastguard Worker        ld1             {v31.8b}, [x3]
116*c0909341SAndroid Build Coastguard Worker        movrel          x8,  save_tmvs_tbl
117*c0909341SAndroid Build Coastguard Worker        movrel          x16, mask_mult
118*c0909341SAndroid Build Coastguard Worker        movrel          x13, mv_tbls
119*c0909341SAndroid Build Coastguard Worker        ld1             {v29.8b}, [x16]
120*c0909341SAndroid Build Coastguard Worker        ext             v31.8b,  v30.8b,  v31.8b,  #7 // [0, ref_sign]
121*c0909341SAndroid Build Coastguard Worker        mov             w15, #5
122*c0909341SAndroid Build Coastguard Worker        mov             w14, #12*2
123*c0909341SAndroid Build Coastguard Worker        sxtw            x4,  w4
124*c0909341SAndroid Build Coastguard Worker        sxtw            x6,  w6
125*c0909341SAndroid Build Coastguard Worker        mul             w1,  w1,  w15             // stride *= 5
126*c0909341SAndroid Build Coastguard Worker        sub             w5,  w5,  w7              // h = row_end8 - row_start8
127*c0909341SAndroid Build Coastguard Worker        lsl             w7,  w7,  #1              // row_start8 <<= 1
128*c0909341SAndroid Build Coastguard Worker1:
129*c0909341SAndroid Build Coastguard Worker        mov             w15, #5
130*c0909341SAndroid Build Coastguard Worker        and             w9,  w7,  #30             // (y & 15) * 2
131*c0909341SAndroid Build Coastguard Worker        ldr             x9,  [x2, w9, uxtw #3]    // b = rr[(y & 15) * 2]
132*c0909341SAndroid Build Coastguard Worker        add             x9,  x9,  #12             // &b[... + 1]
133*c0909341SAndroid Build Coastguard Worker        madd            x10, x4,  x14,  x9        // end_cand_b = &b[col_end8*2 + 1]
134*c0909341SAndroid Build Coastguard Worker        madd            x9,  x6,  x14,  x9        // cand_b = &b[x*2 + 1]
135*c0909341SAndroid Build Coastguard Worker
136*c0909341SAndroid Build Coastguard Worker        madd            x3,  x6,  x15,  x0        // &rp[x]
137*c0909341SAndroid Build Coastguard Worker
138*c0909341SAndroid Build Coastguard Worker2:
139*c0909341SAndroid Build Coastguard Worker        ldrb            w11, [x9, #10]            // cand_b->bs
140*c0909341SAndroid Build Coastguard Worker        ld1             {v0.16b}, [x9]            // cand_b->mv
141*c0909341SAndroid Build Coastguard Worker        add             x11, x8,  w11, uxtw #3
142*c0909341SAndroid Build Coastguard Worker        ldr             h1,  [x9, #8]             // cand_b->ref
143*c0909341SAndroid Build Coastguard Worker        ldr             w12, [x11]                // bw8
144*c0909341SAndroid Build Coastguard Worker        mov             x15, x8
145*c0909341SAndroid Build Coastguard Worker        add             x9,  x9,  w12, uxtw #1    // cand_b += bw8*2
146*c0909341SAndroid Build Coastguard Worker        cmp             x9,  x10
147*c0909341SAndroid Build Coastguard Worker        mov             v2.8b,   v0.8b
148*c0909341SAndroid Build Coastguard Worker        b.ge            3f
149*c0909341SAndroid Build Coastguard Worker
150*c0909341SAndroid Build Coastguard Worker        ldrb            w15, [x9, #10]            // cand_b->bs
151*c0909341SAndroid Build Coastguard Worker        add             x16, x9,  #8
152*c0909341SAndroid Build Coastguard Worker        ld1             {v4.16b}, [x9]            // cand_b->mv
153*c0909341SAndroid Build Coastguard Worker        add             x15, x8,  w15, uxtw #3
154*c0909341SAndroid Build Coastguard Worker        ld1             {v1.h}[1], [x16]          // cand_b->ref
155*c0909341SAndroid Build Coastguard Worker        ldr             w12, [x15]                // bw8
156*c0909341SAndroid Build Coastguard Worker        add             x9,  x9,  w12, uxtw #1    // cand_b += bw8*2
157*c0909341SAndroid Build Coastguard Worker        trn1            v2.2d,   v0.2d,   v4.2d
158*c0909341SAndroid Build Coastguard Worker
159*c0909341SAndroid Build Coastguard Worker3:
160*c0909341SAndroid Build Coastguard Worker        abs             v2.8h,   v2.8h            // abs(mv[].xy)
161*c0909341SAndroid Build Coastguard Worker        tbl             v1.8b, {v31.16b}, v1.8b   // ref_sign[ref]
162*c0909341SAndroid Build Coastguard Worker        ushr            v2.8h,   v2.8h,   #12     // abs(mv[].xy) >> 12
163*c0909341SAndroid Build Coastguard Worker        umull           v1.8h,   v1.8b,   v29.8b  // ref_sign[ref] * {1, 2}
164*c0909341SAndroid Build Coastguard Worker        cmeq            v2.4s,   v2.4s,   #0      // abs(mv[].xy) <= 4096
165*c0909341SAndroid Build Coastguard Worker        xtn             v2.4h,   v2.4s            // abs() condition to 16 bit
166*c0909341SAndroid Build Coastguard Worker        and             v1.8b,   v1.8b,   v2.8b   // h[0-3] contains conditions for mv[0-1]
167*c0909341SAndroid Build Coastguard Worker        addp            v1.4h,   v1.4h,   v1.4h   // Combine condition for [1] and [0]
168*c0909341SAndroid Build Coastguard Worker        umov            w16, v1.h[0]              // Extract case for first block
169*c0909341SAndroid Build Coastguard Worker        umov            w17, v1.h[1]
170*c0909341SAndroid Build Coastguard Worker        ldrsw           x11, [x11, #4]            // Fetch jump table entry
171*c0909341SAndroid Build Coastguard Worker        ldrsw           x15, [x15, #4]
172*c0909341SAndroid Build Coastguard Worker        ldr             q1, [x13, w16, uxtw #4]   // Load permutation table base on case
173*c0909341SAndroid Build Coastguard Worker        ldr             q5, [x13, w17, uxtw #4]
174*c0909341SAndroid Build Coastguard Worker        add             x11, x8,  x11             // Find jump table target
175*c0909341SAndroid Build Coastguard Worker        add             x15, x8,  x15
176*c0909341SAndroid Build Coastguard Worker        tbl             v0.16b, {v0.16b}, v1.16b  // Permute cand_b to output refmvs_temporal_block
177*c0909341SAndroid Build Coastguard Worker        tbl             v4.16b, {v4.16b}, v5.16b
178*c0909341SAndroid Build Coastguard Worker
179*c0909341SAndroid Build Coastguard Worker        // v1 follows on v0, with another 3 full repetitions of the pattern.
180*c0909341SAndroid Build Coastguard Worker        ext             v1.16b,  v0.16b,  v0.16b,  #1
181*c0909341SAndroid Build Coastguard Worker        ext             v5.16b,  v4.16b,  v4.16b,  #1
182*c0909341SAndroid Build Coastguard Worker        // v2 ends with 3 complete repetitions of the pattern.
183*c0909341SAndroid Build Coastguard Worker        ext             v2.16b,  v0.16b,  v1.16b,  #4
184*c0909341SAndroid Build Coastguard Worker        ext             v6.16b,  v4.16b,  v5.16b,  #4
185*c0909341SAndroid Build Coastguard Worker
186*c0909341SAndroid Build Coastguard Worker        blr             x11
187*c0909341SAndroid Build Coastguard Worker        b.ge            4f  // if (cand_b >= end)
188*c0909341SAndroid Build Coastguard Worker        mov             v0.16b,  v4.16b
189*c0909341SAndroid Build Coastguard Worker        mov             v1.16b,  v5.16b
190*c0909341SAndroid Build Coastguard Worker        mov             v2.16b,  v6.16b
191*c0909341SAndroid Build Coastguard Worker        cmp             x9,  x10
192*c0909341SAndroid Build Coastguard Worker        blr             x15
193*c0909341SAndroid Build Coastguard Worker        b.lt            2b  // if (cand_b < end)
194*c0909341SAndroid Build Coastguard Worker
195*c0909341SAndroid Build Coastguard Worker4:
196*c0909341SAndroid Build Coastguard Worker        subs            w5,  w5,  #1              // h--
197*c0909341SAndroid Build Coastguard Worker        add             w7,  w7,  #2              // y += 2
198*c0909341SAndroid Build Coastguard Worker        add             x0,  x0,  x1              // rp += stride
199*c0909341SAndroid Build Coastguard Worker        b.gt            1b
200*c0909341SAndroid Build Coastguard Worker
201*c0909341SAndroid Build Coastguard Worker        ldp             x29, x30, [sp], #16
202*c0909341SAndroid Build Coastguard Worker        AARCH64_VALIDATE_LINK_REGISTER
203*c0909341SAndroid Build Coastguard Worker        ret
204*c0909341SAndroid Build Coastguard Worker
205*c0909341SAndroid Build Coastguard Worker10:
206*c0909341SAndroid Build Coastguard Worker        AARCH64_VALID_CALL_TARGET
207*c0909341SAndroid Build Coastguard Worker        add             x16, x3,  #4
208*c0909341SAndroid Build Coastguard Worker        st1             {v0.s}[0], [x3]
209*c0909341SAndroid Build Coastguard Worker        st1             {v0.b}[4], [x16]
210*c0909341SAndroid Build Coastguard Worker        add             x3,  x3,  #5
211*c0909341SAndroid Build Coastguard Worker        ret
212*c0909341SAndroid Build Coastguard Worker20:
213*c0909341SAndroid Build Coastguard Worker        AARCH64_VALID_CALL_TARGET
214*c0909341SAndroid Build Coastguard Worker        add             x16, x3,  #8
215*c0909341SAndroid Build Coastguard Worker        st1             {v0.d}[0], [x3]
216*c0909341SAndroid Build Coastguard Worker        st1             {v0.h}[4], [x16]
217*c0909341SAndroid Build Coastguard Worker        add             x3,  x3,  #2*5
218*c0909341SAndroid Build Coastguard Worker        ret
219*c0909341SAndroid Build Coastguard Worker40:
220*c0909341SAndroid Build Coastguard Worker        AARCH64_VALID_CALL_TARGET
221*c0909341SAndroid Build Coastguard Worker        st1             {v0.16b}, [x3]
222*c0909341SAndroid Build Coastguard Worker        str             s1, [x3, #16]
223*c0909341SAndroid Build Coastguard Worker        add             x3,  x3,  #4*5
224*c0909341SAndroid Build Coastguard Worker        ret
225*c0909341SAndroid Build Coastguard Worker80:
226*c0909341SAndroid Build Coastguard Worker        AARCH64_VALID_CALL_TARGET
227*c0909341SAndroid Build Coastguard Worker        // This writes 6 full entries plus 2 extra bytes
228*c0909341SAndroid Build Coastguard Worker        st1             {v0.16b, v1.16b}, [x3]
229*c0909341SAndroid Build Coastguard Worker        // Write the last few, overlapping with the first write.
230*c0909341SAndroid Build Coastguard Worker        stur            q2, [x3, #(8*5-16)]
231*c0909341SAndroid Build Coastguard Worker        add             x3,  x3,  #8*5
232*c0909341SAndroid Build Coastguard Worker        ret
233*c0909341SAndroid Build Coastguard Worker160:
234*c0909341SAndroid Build Coastguard Worker        AARCH64_VALID_CALL_TARGET
235*c0909341SAndroid Build Coastguard Worker        add             x16, x3,  #6*5
236*c0909341SAndroid Build Coastguard Worker        add             x17, x3,  #12*5
237*c0909341SAndroid Build Coastguard Worker        // This writes 6 full entries plus 2 extra bytes
238*c0909341SAndroid Build Coastguard Worker        st1             {v0.16b, v1.16b}, [x3]
239*c0909341SAndroid Build Coastguard Worker        // Write another 6 full entries, slightly overlapping with the first set
240*c0909341SAndroid Build Coastguard Worker        st1             {v0.16b, v1.16b}, [x16]
241*c0909341SAndroid Build Coastguard Worker        // Write 8 bytes (one full entry) after the first 12
242*c0909341SAndroid Build Coastguard Worker        st1             {v0.8b}, [x17]
243*c0909341SAndroid Build Coastguard Worker        // Write the last 3 entries
244*c0909341SAndroid Build Coastguard Worker        str             q2, [x3, #(16*5-16)]
245*c0909341SAndroid Build Coastguard Worker        add             x3,  x3,  #16*5
246*c0909341SAndroid Build Coastguard Worker        ret
247*c0909341SAndroid Build Coastguard Workerendfunc
248*c0909341SAndroid Build Coastguard Worker
249*c0909341SAndroid Build Coastguard Workerjumptable save_tmvs_tbl
250*c0909341SAndroid Build Coastguard Worker        .word 16 * 12
251*c0909341SAndroid Build Coastguard Worker        .word 160b - save_tmvs_tbl
252*c0909341SAndroid Build Coastguard Worker        .word 16 * 12
253*c0909341SAndroid Build Coastguard Worker        .word 160b - save_tmvs_tbl
254*c0909341SAndroid Build Coastguard Worker        .word 8 * 12
255*c0909341SAndroid Build Coastguard Worker        .word 80b  - save_tmvs_tbl
256*c0909341SAndroid Build Coastguard Worker        .word 8 * 12
257*c0909341SAndroid Build Coastguard Worker        .word 80b  - save_tmvs_tbl
258*c0909341SAndroid Build Coastguard Worker        .word 8 * 12
259*c0909341SAndroid Build Coastguard Worker        .word 80b  - save_tmvs_tbl
260*c0909341SAndroid Build Coastguard Worker        .word 8 * 12
261*c0909341SAndroid Build Coastguard Worker        .word 80b  - save_tmvs_tbl
262*c0909341SAndroid Build Coastguard Worker        .word 4 * 12
263*c0909341SAndroid Build Coastguard Worker        .word 40b  - save_tmvs_tbl
264*c0909341SAndroid Build Coastguard Worker        .word 4 * 12
265*c0909341SAndroid Build Coastguard Worker        .word 40b  - save_tmvs_tbl
266*c0909341SAndroid Build Coastguard Worker        .word 4 * 12
267*c0909341SAndroid Build Coastguard Worker        .word 40b  - save_tmvs_tbl
268*c0909341SAndroid Build Coastguard Worker        .word 4 * 12
269*c0909341SAndroid Build Coastguard Worker        .word 40b  - save_tmvs_tbl
270*c0909341SAndroid Build Coastguard Worker        .word 2 * 12
271*c0909341SAndroid Build Coastguard Worker        .word 20b  - save_tmvs_tbl
272*c0909341SAndroid Build Coastguard Worker        .word 2 * 12
273*c0909341SAndroid Build Coastguard Worker        .word 20b  - save_tmvs_tbl
274*c0909341SAndroid Build Coastguard Worker        .word 2 * 12
275*c0909341SAndroid Build Coastguard Worker        .word 20b  - save_tmvs_tbl
276*c0909341SAndroid Build Coastguard Worker        .word 2 * 12
277*c0909341SAndroid Build Coastguard Worker        .word 20b  - save_tmvs_tbl
278*c0909341SAndroid Build Coastguard Worker        .word 2 * 12
279*c0909341SAndroid Build Coastguard Worker        .word 20b  - save_tmvs_tbl
280*c0909341SAndroid Build Coastguard Worker        .word 1 * 12
281*c0909341SAndroid Build Coastguard Worker        .word 10b  - save_tmvs_tbl
282*c0909341SAndroid Build Coastguard Worker        .word 1 * 12
283*c0909341SAndroid Build Coastguard Worker        .word 10b  - save_tmvs_tbl
284*c0909341SAndroid Build Coastguard Worker        .word 1 * 12
285*c0909341SAndroid Build Coastguard Worker        .word 10b  - save_tmvs_tbl
286*c0909341SAndroid Build Coastguard Worker        .word 1 * 12
287*c0909341SAndroid Build Coastguard Worker        .word 10b  - save_tmvs_tbl
288*c0909341SAndroid Build Coastguard Worker        .word 1 * 12
289*c0909341SAndroid Build Coastguard Worker        .word 10b  - save_tmvs_tbl
290*c0909341SAndroid Build Coastguard Worker        .word 1 * 12
291*c0909341SAndroid Build Coastguard Worker        .word 10b  - save_tmvs_tbl
292*c0909341SAndroid Build Coastguard Worker        .word 1 * 12
293*c0909341SAndroid Build Coastguard Worker        .word 10b  - save_tmvs_tbl
294*c0909341SAndroid Build Coastguard Workerendjumptable
295