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