1*4bdc9457SAndroid Build Coastguard Worker// Copyright 2019 Google LLC 2*4bdc9457SAndroid Build Coastguard Worker// 3*4bdc9457SAndroid Build Coastguard Worker// This source code is licensed under the BSD-style license found in the 4*4bdc9457SAndroid Build Coastguard Worker// LICENSE file in the root directory of this source tree. 5*4bdc9457SAndroid Build Coastguard Worker 6*4bdc9457SAndroid Build Coastguard Worker#include <xnnpack/assembly.h> 7*4bdc9457SAndroid Build Coastguard Worker 8*4bdc9457SAndroid Build Coastguard Worker.syntax unified 9*4bdc9457SAndroid Build Coastguard Worker 10*4bdc9457SAndroid Build Coastguard Worker# LINT.IfChange 11*4bdc9457SAndroid Build Coastguard Worker// void xnn_f32_igemm_minmax_ukernel_4x8__aarch32_neon${"_prfm" if PREFETCH else ""}_ld64( 12*4bdc9457SAndroid Build Coastguard Worker// size_t mr, r0 13*4bdc9457SAndroid Build Coastguard Worker// size_t nc, r1 14*4bdc9457SAndroid Build Coastguard Worker// size_t kc, r2 -> r5 -> sp + 68 15*4bdc9457SAndroid Build Coastguard Worker// size_t ks, r3 -> sp + 72 -> r14 16*4bdc9457SAndroid Build Coastguard Worker// const float**restrict a, sp + 112 -> r2 17*4bdc9457SAndroid Build Coastguard Worker// const void*restrict w, sp + 116 -> r9 18*4bdc9457SAndroid Build Coastguard Worker// uint8_t*restrict c, sp + 120 -> r11 19*4bdc9457SAndroid Build Coastguard Worker// size_t cm_stride, sp + 124 -> (r6) 20*4bdc9457SAndroid Build Coastguard Worker// size_t cn_stride, sp + 128 -> (r7) 21*4bdc9457SAndroid Build Coastguard Worker// size_t a_offset, sp + 132 -> (r5) 22*4bdc9457SAndroid Build Coastguard Worker// const float* zero, sp + 136 -> (r7) 23*4bdc9457SAndroid Build Coastguard Worker// minmax_params*params, sp + 140 -> (r5) 24*4bdc9457SAndroid Build Coastguard Worker 25*4bdc9457SAndroid Build Coastguard Worker// d8-d15, r4-r11,r14(lr) need to be preserved if used. r13(sp),r15(pc) are reserved. 26*4bdc9457SAndroid Build Coastguard Worker 27*4bdc9457SAndroid Build Coastguard Worker// Register usage 28*4bdc9457SAndroid Build Coastguard Worker// A0 r3 d0 29*4bdc9457SAndroid Build Coastguard Worker// A1 r12 d1 30*4bdc9457SAndroid Build Coastguard Worker// A2 r10 d2 31*4bdc9457SAndroid Build Coastguard Worker// A3 r0 d3 32*4bdc9457SAndroid Build Coastguard Worker 33*4bdc9457SAndroid Build Coastguard Worker// B r9 d8, d9, d10, d11 34*4bdc9457SAndroid Build Coastguard Worker// B d12, d13, d14, d15 35*4bdc9457SAndroid Build Coastguard Worker 36*4bdc9457SAndroid Build Coastguard Worker// C0 r11 d16-d17 q8 d18-d19 q9 37*4bdc9457SAndroid Build Coastguard Worker// C1 r4 d20-d21 q10 d22-d23 q11 38*4bdc9457SAndroid Build Coastguard Worker// C2 r8 d24-d25 q12 d26-d27 q13 39*4bdc9457SAndroid Build Coastguard Worker// C3 r6 d28-d29 q14 d30-d31 q15 40*4bdc9457SAndroid Build Coastguard Worker 41*4bdc9457SAndroid Build Coastguard Worker// Clamp (r5) d4 d5 d6 d7 42*4bdc9457SAndroid Build Coastguard Worker 43*4bdc9457SAndroid Build Coastguard WorkerBEGIN_FUNCTION xnn_f32_igemm_minmax_ukernel_4x8__aarch32_neon${"_prfm" if PREFETCH else ""}_ld64 44*4bdc9457SAndroid Build Coastguard Worker .arm 45*4bdc9457SAndroid Build Coastguard Worker#ifndef __APPLE__ 46*4bdc9457SAndroid Build Coastguard Worker .arch armv7-a 47*4bdc9457SAndroid Build Coastguard Worker .fpu neon 48*4bdc9457SAndroid Build Coastguard Worker#endif 49*4bdc9457SAndroid Build Coastguard Worker # Push 112 bytes 50*4bdc9457SAndroid Build Coastguard Worker # r2 will be reloaded in outer loop. r3 is ks 51*4bdc9457SAndroid Build Coastguard Worker PUSH {r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, lr} // +44 52*4bdc9457SAndroid Build Coastguard Worker SUB sp, sp, 4 // 4 53*4bdc9457SAndroid Build Coastguard Worker VPUSH {d8-d15} // +64 = 112 54*4bdc9457SAndroid Build Coastguard Worker 55*4bdc9457SAndroid Build Coastguard Worker LDR r11, [sp, 120] // c 56*4bdc9457SAndroid Build Coastguard Worker LDR r6, [sp, 124] // cm_stride 57*4bdc9457SAndroid Build Coastguard Worker LDR r2, [sp, 112] // a 58*4bdc9457SAndroid Build Coastguard Worker LDR r9, [sp, 116] // w 59*4bdc9457SAndroid Build Coastguard Worker LDR r5, [sp, 140] // params 60*4bdc9457SAndroid Build Coastguard Worker MOV r14, r3 // p = ks 61*4bdc9457SAndroid Build Coastguard Worker 62*4bdc9457SAndroid Build Coastguard Worker # Clamp C pointers 63*4bdc9457SAndroid Build Coastguard Worker CMP r0, 2 // if mr >= 2 64*4bdc9457SAndroid Build Coastguard Worker ADD r4, r11, r6 // c1 = c0 + cm_stride 65*4bdc9457SAndroid Build Coastguard Worker MOVLO r4, r11 // c1 66*4bdc9457SAndroid Build Coastguard Worker // if mr > 2 67*4bdc9457SAndroid Build Coastguard Worker ADD r8, r4, r6 // c2 = c1 + cm_stride 68*4bdc9457SAndroid Build Coastguard Worker MOVLS r8, r4 // c2 69*4bdc9457SAndroid Build Coastguard Worker CMP r0, 4 // if mr >=4 70*4bdc9457SAndroid Build Coastguard Worker ADD r6, r8, r6 // c3 = c2 + cm_stride 71*4bdc9457SAndroid Build Coastguard Worker MOVLO r6, r8 // c3 72*4bdc9457SAndroid Build Coastguard Worker 73*4bdc9457SAndroid Build Coastguard Worker # Load min/max values 74*4bdc9457SAndroid Build Coastguard Worker VLD1.32 {d4[], d5[]}, [r5]! 75*4bdc9457SAndroid Build Coastguard Worker VLD1.32 {d6[], d7[]}, [r5] 76*4bdc9457SAndroid Build Coastguard Worker 77*4bdc9457SAndroid Build Coastguard Worker0: 78*4bdc9457SAndroid Build Coastguard Worker # Load initial bias from w into accumulators 79*4bdc9457SAndroid Build Coastguard Worker VLDM r9!, {d16-d19} // Bias 80*4bdc9457SAndroid Build Coastguard Worker VMOV q10, q8 81*4bdc9457SAndroid Build Coastguard Worker VMOV q11, q9 82*4bdc9457SAndroid Build Coastguard Worker VMOV q12, q8 83*4bdc9457SAndroid Build Coastguard Worker VMOV q13, q9 84*4bdc9457SAndroid Build Coastguard Worker VMOV q14, q8 85*4bdc9457SAndroid Build Coastguard Worker VMOV q15, q9 86*4bdc9457SAndroid Build Coastguard Worker 87*4bdc9457SAndroid Build Coastguard Worker $if PREFETCH: 88*4bdc9457SAndroid Build Coastguard Worker PLD [r9, 0] // Prefetch B 89*4bdc9457SAndroid Build Coastguard Worker PLD [r9, 64] 90*4bdc9457SAndroid Build Coastguard Worker PLD [r9, 128] 91*4bdc9457SAndroid Build Coastguard Worker PLD [r9, 192] 92*4bdc9457SAndroid Build Coastguard Worker PLD [r9, 256] 93*4bdc9457SAndroid Build Coastguard Worker PLD [r9, 320] 94*4bdc9457SAndroid Build Coastguard Worker PLD [r9, 384] 95*4bdc9457SAndroid Build Coastguard Worker PLD [r9, 448] 96*4bdc9457SAndroid Build Coastguard Worker1: 97*4bdc9457SAndroid Build Coastguard Worker # Load next 4 A pointers 98*4bdc9457SAndroid Build Coastguard Worker LDR r3, [r2, 0] 99*4bdc9457SAndroid Build Coastguard Worker LDR r12, [r2, 4] 100*4bdc9457SAndroid Build Coastguard Worker LDR r10, [r2, 8] 101*4bdc9457SAndroid Build Coastguard Worker LDR r0, [r2, 12] 102*4bdc9457SAndroid Build Coastguard Worker ADD r2, r2, 16 103*4bdc9457SAndroid Build Coastguard Worker 104*4bdc9457SAndroid Build Coastguard Worker # Add a_offset 105*4bdc9457SAndroid Build Coastguard Worker LDR r5, [sp, 132] // a_offset 106*4bdc9457SAndroid Build Coastguard Worker LDR r7, [sp, 136] // zero 107*4bdc9457SAndroid Build Coastguard Worker CMP r3, r7 // if a0 == zero 108*4bdc9457SAndroid Build Coastguard Worker ADD r3, r3, r5 // a0 += a_offset 109*4bdc9457SAndroid Build Coastguard Worker MOVEQ r3, r7 // a0 = zero, else += a0 + a_offset 110*4bdc9457SAndroid Build Coastguard Worker CMP r12, r7 // if a1 == zero 111*4bdc9457SAndroid Build Coastguard Worker ADD r12, r12, r5 // a1 += a_offset 112*4bdc9457SAndroid Build Coastguard Worker MOVEQ r12, r7 // a1 = zero, else += a1 + a_offset 113*4bdc9457SAndroid Build Coastguard Worker CMP r10, r7 // if a2 == zero 114*4bdc9457SAndroid Build Coastguard Worker ADD r10, r10, r5 // a2 += a_offset 115*4bdc9457SAndroid Build Coastguard Worker MOVEQ r10, r7 // a2 = zero, else += a2 + a_offset 116*4bdc9457SAndroid Build Coastguard Worker CMP r0, r7 // if a3 == zero 117*4bdc9457SAndroid Build Coastguard Worker ADD r0, r0, r5 // a3 += a_offset 118*4bdc9457SAndroid Build Coastguard Worker LDR r5, [sp, 68] // kc 119*4bdc9457SAndroid Build Coastguard Worker MOVEQ r0, r7 // a3 = zero, else += a3 + a_offset 120*4bdc9457SAndroid Build Coastguard Worker 121*4bdc9457SAndroid Build Coastguard Worker $if PREFETCH: 122*4bdc9457SAndroid Build Coastguard Worker PLD [r3, 0] // Prefetch A 123*4bdc9457SAndroid Build Coastguard Worker PLD [r3, 64] 124*4bdc9457SAndroid Build Coastguard Worker PLD [r12, 0] 125*4bdc9457SAndroid Build Coastguard Worker PLD [r12, 64] 126*4bdc9457SAndroid Build Coastguard Worker PLD [r10, 0] 127*4bdc9457SAndroid Build Coastguard Worker PLD [r10, 64] 128*4bdc9457SAndroid Build Coastguard Worker PLD [r0, 0] 129*4bdc9457SAndroid Build Coastguard Worker PLD [r0, 64] 130*4bdc9457SAndroid Build Coastguard Worker 131*4bdc9457SAndroid Build Coastguard Worker SUBS r5, r5, 8 // kc - 8 132*4bdc9457SAndroid Build Coastguard Worker BLO 4f // less than 2 channels? 133*4bdc9457SAndroid Build Coastguard Worker 134*4bdc9457SAndroid Build Coastguard Worker # Main loop - 2 floats of A (8 bytes) 135*4bdc9457SAndroid Build Coastguard Worker2: 136*4bdc9457SAndroid Build Coastguard Worker VLD1.32 {d0}, [r3]! // A0 137*4bdc9457SAndroid Build Coastguard Worker VLDM r9!, {d8-d11} // B0 138*4bdc9457SAndroid Build Coastguard Worker VLD1.32 {d1}, [r12]! // A1 139*4bdc9457SAndroid Build Coastguard Worker VLD1.32 {d2}, [r10]! // A2 140*4bdc9457SAndroid Build Coastguard Worker VLD1.32 {d3}, [ r0]! // A3 141*4bdc9457SAndroid Build Coastguard Worker VLDM r9!, {d12-d15} // B1 142*4bdc9457SAndroid Build Coastguard Worker 143*4bdc9457SAndroid Build Coastguard Worker VMLA.F32 q8, q4, d0[0] 144*4bdc9457SAndroid Build Coastguard Worker VMLA.F32 q9, q5, d0[0] 145*4bdc9457SAndroid Build Coastguard Worker $if PREFETCH: 146*4bdc9457SAndroid Build Coastguard Worker PLD [r3, 128] // Prefetch A0 147*4bdc9457SAndroid Build Coastguard Worker VMLA.F32 q10, q4, d1[0] 148*4bdc9457SAndroid Build Coastguard Worker VMLA.F32 q11, q5, d1[0] 149*4bdc9457SAndroid Build Coastguard Worker $if PREFETCH: 150*4bdc9457SAndroid Build Coastguard Worker PLD [r12, 128] // Prefetch A1 151*4bdc9457SAndroid Build Coastguard Worker VMLA.F32 q12, q4, d2[0] 152*4bdc9457SAndroid Build Coastguard Worker VMLA.F32 q13, q5, d2[0] 153*4bdc9457SAndroid Build Coastguard Worker $if PREFETCH: 154*4bdc9457SAndroid Build Coastguard Worker PLD [r10, 128] // Prefetch A2 155*4bdc9457SAndroid Build Coastguard Worker VMLA.F32 q14, q4, d3[0] 156*4bdc9457SAndroid Build Coastguard Worker VMLA.F32 q15, q5, d3[0] 157*4bdc9457SAndroid Build Coastguard Worker $if PREFETCH: 158*4bdc9457SAndroid Build Coastguard Worker PLD [r0, 128] // Prefetch A3 159*4bdc9457SAndroid Build Coastguard Worker VMLA.F32 q8, q6, d0[1] 160*4bdc9457SAndroid Build Coastguard Worker VMLA.F32 q9, q7, d0[1] 161*4bdc9457SAndroid Build Coastguard Worker $if PREFETCH: 162*4bdc9457SAndroid Build Coastguard Worker PLD [r9, 448] // Prefetch B 163*4bdc9457SAndroid Build Coastguard Worker VMLA.F32 q10, q6, d1[1] 164*4bdc9457SAndroid Build Coastguard Worker VMLA.F32 q11, q7, d1[1] 165*4bdc9457SAndroid Build Coastguard Worker SUBS r5, r5, 8 166*4bdc9457SAndroid Build Coastguard Worker VMLA.F32 q12, q6, d2[1] 167*4bdc9457SAndroid Build Coastguard Worker VMLA.F32 q13, q7, d2[1] 168*4bdc9457SAndroid Build Coastguard Worker VMLA.F32 q14, q6, d3[1] 169*4bdc9457SAndroid Build Coastguard Worker VMLA.F32 q15, q7, d3[1] 170*4bdc9457SAndroid Build Coastguard Worker BHS 2b 171*4bdc9457SAndroid Build Coastguard Worker 172*4bdc9457SAndroid Build Coastguard Worker # Is there a remainder?- 1 float of A (4 bytes) 173*4bdc9457SAndroid Build Coastguard Worker TST r5, 4 174*4bdc9457SAndroid Build Coastguard Worker BNE 4f 175*4bdc9457SAndroid Build Coastguard Worker 176*4bdc9457SAndroid Build Coastguard Worker3: 177*4bdc9457SAndroid Build Coastguard Worker # ks loop 178*4bdc9457SAndroid Build Coastguard Worker SUBS r14, r14, 16 // ks -= MR * sizeof(void*) 179*4bdc9457SAndroid Build Coastguard Worker BHI 1b 180*4bdc9457SAndroid Build Coastguard Worker 181*4bdc9457SAndroid Build Coastguard Worker LDR r7, [sp, 128] // cn_stride 182*4bdc9457SAndroid Build Coastguard Worker LDR r14, [sp, 72] // p = ks 183*4bdc9457SAndroid Build Coastguard Worker 184*4bdc9457SAndroid Build Coastguard Worker # Clamp 185*4bdc9457SAndroid Build Coastguard Worker VMAX.F32 q8, q8, q2 186*4bdc9457SAndroid Build Coastguard Worker SUBS r1, r1, 8 187*4bdc9457SAndroid Build Coastguard Worker VMAX.F32 q9, q9, q2 188*4bdc9457SAndroid Build Coastguard Worker VMAX.F32 q10, q10, q2 189*4bdc9457SAndroid Build Coastguard Worker VMAX.F32 q11, q11, q2 190*4bdc9457SAndroid Build Coastguard Worker VMAX.F32 q12, q12, q2 191*4bdc9457SAndroid Build Coastguard Worker VMAX.F32 q13, q13, q2 192*4bdc9457SAndroid Build Coastguard Worker VMAX.F32 q14, q14, q2 193*4bdc9457SAndroid Build Coastguard Worker VMAX.F32 q15, q15, q2 194*4bdc9457SAndroid Build Coastguard Worker VMIN.F32 q8, q8, q3 195*4bdc9457SAndroid Build Coastguard Worker VMIN.F32 q9, q9, q3 196*4bdc9457SAndroid Build Coastguard Worker VMIN.F32 q10, q10, q3 197*4bdc9457SAndroid Build Coastguard Worker VMIN.F32 q11, q11, q3 198*4bdc9457SAndroid Build Coastguard Worker VMIN.F32 q12, q12, q3 199*4bdc9457SAndroid Build Coastguard Worker VMIN.F32 q13, q13, q3 200*4bdc9457SAndroid Build Coastguard Worker VMIN.F32 q14, q14, q3 201*4bdc9457SAndroid Build Coastguard Worker VMIN.F32 q15, q15, q3 202*4bdc9457SAndroid Build Coastguard Worker 203*4bdc9457SAndroid Build Coastguard Worker # Store full 4 x 8 204*4bdc9457SAndroid Build Coastguard Worker BLO 5f 205*4bdc9457SAndroid Build Coastguard Worker VST1.32 {d28-d31}, [r6], r7 206*4bdc9457SAndroid Build Coastguard Worker VST1.32 {d24-d27}, [r8], r7 207*4bdc9457SAndroid Build Coastguard Worker VST1.32 {d20-d23}, [r4], r7 208*4bdc9457SAndroid Build Coastguard Worker VST1.32 {d16-d19}, [r11], r7 209*4bdc9457SAndroid Build Coastguard Worker SUB r2, r2, r14 // a -= ks 210*4bdc9457SAndroid Build Coastguard Worker BHI 0b 211*4bdc9457SAndroid Build Coastguard Worker 212*4bdc9457SAndroid Build Coastguard Worker VPOP {d8-d15} 213*4bdc9457SAndroid Build Coastguard Worker ADD sp, sp, 12 // skip pad, r2, r3 214*4bdc9457SAndroid Build Coastguard Worker POP {r4, r5, r6, r7, r8, r9, r10, r11, pc} 215*4bdc9457SAndroid Build Coastguard Worker 216*4bdc9457SAndroid Build Coastguard Worker4: 217*4bdc9457SAndroid Build Coastguard Worker # Remainder- 1 float of A (4 bytes) 218*4bdc9457SAndroid Build Coastguard Worker VLDM r3!, {s0} // A0 219*4bdc9457SAndroid Build Coastguard Worker VLDM r9!, {d8-d11} // B0 220*4bdc9457SAndroid Build Coastguard Worker VLDM r12!, {s2} // A1 221*4bdc9457SAndroid Build Coastguard Worker VLDM r10!, {s4} // A2 222*4bdc9457SAndroid Build Coastguard Worker VLDM r0!, {s6} // A3 223*4bdc9457SAndroid Build Coastguard Worker VMLA.F32 q8, q4, d0[0] 224*4bdc9457SAndroid Build Coastguard Worker VMLA.F32 q9, q5, d0[0] 225*4bdc9457SAndroid Build Coastguard Worker VMLA.F32 q10, q4, d1[0] 226*4bdc9457SAndroid Build Coastguard Worker VMLA.F32 q11, q5, d1[0] 227*4bdc9457SAndroid Build Coastguard Worker VMLA.F32 q12, q4, d2[0] 228*4bdc9457SAndroid Build Coastguard Worker VMLA.F32 q13, q5, d2[0] 229*4bdc9457SAndroid Build Coastguard Worker VMLA.F32 q14, q4, d3[0] 230*4bdc9457SAndroid Build Coastguard Worker VMLA.F32 q15, q5, d3[0] 231*4bdc9457SAndroid Build Coastguard Worker B 3b 232*4bdc9457SAndroid Build Coastguard Worker 233*4bdc9457SAndroid Build Coastguard Worker # Store odd width 234*4bdc9457SAndroid Build Coastguard Worker5: 235*4bdc9457SAndroid Build Coastguard Worker TST r1, 4 236*4bdc9457SAndroid Build Coastguard Worker BEQ 6f 237*4bdc9457SAndroid Build Coastguard Worker VST1.32 {d28-d29}, [r6]! 238*4bdc9457SAndroid Build Coastguard Worker VST1.32 {d24-d25}, [r8]! 239*4bdc9457SAndroid Build Coastguard Worker VMOV q14, q15 240*4bdc9457SAndroid Build Coastguard Worker VMOV q12, q13 241*4bdc9457SAndroid Build Coastguard Worker VST1.32 {d20-d21}, [r4]! 242*4bdc9457SAndroid Build Coastguard Worker VST1.32 {d16-d17}, [r11]! 243*4bdc9457SAndroid Build Coastguard Worker VMOV q10, q11 244*4bdc9457SAndroid Build Coastguard Worker VMOV q8, q9 245*4bdc9457SAndroid Build Coastguard Worker 246*4bdc9457SAndroid Build Coastguard Worker6: 247*4bdc9457SAndroid Build Coastguard Worker TST r1, 2 248*4bdc9457SAndroid Build Coastguard Worker BEQ 7f 249*4bdc9457SAndroid Build Coastguard Worker VST1.32 {d28}, [r6]! 250*4bdc9457SAndroid Build Coastguard Worker VST1.32 {d24}, [r8]! 251*4bdc9457SAndroid Build Coastguard Worker VMOV d28, d29 252*4bdc9457SAndroid Build Coastguard Worker VMOV d24, d25 253*4bdc9457SAndroid Build Coastguard Worker VST1.32 {d20}, [r4]! 254*4bdc9457SAndroid Build Coastguard Worker VST1.32 {d16}, [r11]! 255*4bdc9457SAndroid Build Coastguard Worker VMOV d20, d21 256*4bdc9457SAndroid Build Coastguard Worker VMOV d16, d17 257*4bdc9457SAndroid Build Coastguard Worker 258*4bdc9457SAndroid Build Coastguard Worker7: 259*4bdc9457SAndroid Build Coastguard Worker TST r1, 1 260*4bdc9457SAndroid Build Coastguard Worker BEQ 8f 261*4bdc9457SAndroid Build Coastguard Worker VST1.32 {d28[0]}, [r6]! 262*4bdc9457SAndroid Build Coastguard Worker VST1.32 {d24[0]}, [r8]! 263*4bdc9457SAndroid Build Coastguard Worker VST1.32 {d20[0]}, [r4]! 264*4bdc9457SAndroid Build Coastguard Worker VST1.32 {d16[0]}, [r11]! 265*4bdc9457SAndroid Build Coastguard Worker 266*4bdc9457SAndroid Build Coastguard Worker8: 267*4bdc9457SAndroid Build Coastguard Worker VPOP {d8-d15} 268*4bdc9457SAndroid Build Coastguard Worker ADD sp, sp, 12 // skip pad, r2, r3 269*4bdc9457SAndroid Build Coastguard Worker POP {r4, r5, r6, r7, r8, r9, r10, r11, pc} 270*4bdc9457SAndroid Build Coastguard Worker 271*4bdc9457SAndroid Build Coastguard WorkerEND_FUNCTION xnn_f32_igemm_minmax_ukernel_4x8__aarch32_neon${"_prfm" if PREFETCH else ""}_ld64 272*4bdc9457SAndroid Build Coastguard Worker# LINT.ThenChange(4x8-aarch32-neon-ld64.cc) 273*4bdc9457SAndroid Build Coastguard Worker 274*4bdc9457SAndroid Build Coastguard Worker#ifdef __ELF__ 275*4bdc9457SAndroid Build Coastguard Worker.section ".note.GNU-stack","",%progbits 276*4bdc9457SAndroid Build Coastguard Worker#endif 277