1*4bdc9457SAndroid Build Coastguard Worker// Auto-generated file. Do not edit! 2*4bdc9457SAndroid Build Coastguard Worker// Template: src/f16-gemm/8x8-aarch64-neonfp16arith-ld64.S.in 3*4bdc9457SAndroid Build Coastguard Worker// Generator: tools/xngen 4*4bdc9457SAndroid Build Coastguard Worker// 5*4bdc9457SAndroid Build Coastguard Worker// Copyright 2020 Google LLC 6*4bdc9457SAndroid Build Coastguard Worker// 7*4bdc9457SAndroid Build Coastguard Worker// This source code is licensed under the BSD-style license found in the 8*4bdc9457SAndroid Build Coastguard Worker// LICENSE file in the root directory of this source tree. 9*4bdc9457SAndroid Build Coastguard Worker 10*4bdc9457SAndroid Build Coastguard Worker#include <xnnpack/assembly.h> 11*4bdc9457SAndroid Build Coastguard Worker 12*4bdc9457SAndroid Build Coastguard Worker# void xnn_f16_gemm_minmax_ukernel_8x8__aarch64_neonfp16arith_ld64( 13*4bdc9457SAndroid Build Coastguard Worker# size_t mr, x0 14*4bdc9457SAndroid Build Coastguard Worker# size_t nc, x1 15*4bdc9457SAndroid Build Coastguard Worker# size_t kc, x2 / x0 16*4bdc9457SAndroid Build Coastguard Worker# const void*restrict a, x3 17*4bdc9457SAndroid Build Coastguard Worker# size_t a_stride, x4 18*4bdc9457SAndroid Build Coastguard Worker# const void*restrict w, x5 19*4bdc9457SAndroid Build Coastguard Worker# void*restrict c, x6 20*4bdc9457SAndroid Build Coastguard Worker# size_t cm_stride, x7 21*4bdc9457SAndroid Build Coastguard Worker# size_t cn_stride, [sp] -> (x8) 22*4bdc9457SAndroid Build Coastguard Worker 23*4bdc9457SAndroid Build Coastguard Worker# const union xnn_f16_minmax_params params[restrict XNN_MIN_ELEMENTS(1)]) [sp + 8] -> (x8) 24*4bdc9457SAndroid Build Coastguard Worker 25*4bdc9457SAndroid Build Coastguard Worker# d8-d15, x19-x30 need to be preserved if used. x18 is reserved by the OS. 26*4bdc9457SAndroid Build Coastguard Worker 27*4bdc9457SAndroid Build Coastguard Worker# A pointers 28*4bdc9457SAndroid Build Coastguard Worker# x3 a0 29*4bdc9457SAndroid Build Coastguard Worker# x9 a1 30*4bdc9457SAndroid Build Coastguard Worker# x10 a2 31*4bdc9457SAndroid Build Coastguard Worker# x11 a3 32*4bdc9457SAndroid Build Coastguard Worker# x12 a4 33*4bdc9457SAndroid Build Coastguard Worker# x19 a5 34*4bdc9457SAndroid Build Coastguard Worker# x20 a6 35*4bdc9457SAndroid Build Coastguard Worker# x4 a7 36*4bdc9457SAndroid Build Coastguard Worker 37*4bdc9457SAndroid Build Coastguard Worker# C pointers 38*4bdc9457SAndroid Build Coastguard Worker# x6 c0 39*4bdc9457SAndroid Build Coastguard Worker# x16 c1 40*4bdc9457SAndroid Build Coastguard Worker# x17 c2 41*4bdc9457SAndroid Build Coastguard Worker# x14 c3 42*4bdc9457SAndroid Build Coastguard Worker# x13 c4 43*4bdc9457SAndroid Build Coastguard Worker# x21 c5 44*4bdc9457SAndroid Build Coastguard Worker# x22 c6 45*4bdc9457SAndroid Build Coastguard Worker# x7 c7 46*4bdc9457SAndroid Build Coastguard Worker 47*4bdc9457SAndroid Build Coastguard Worker# Vector register usage 48*4bdc9457SAndroid Build Coastguard Worker# A0 v0 49*4bdc9457SAndroid Build Coastguard Worker# A1 v1 50*4bdc9457SAndroid Build Coastguard Worker# A2 v2 51*4bdc9457SAndroid Build Coastguard Worker# A3 v3 52*4bdc9457SAndroid Build Coastguard Worker# A4 v4 53*4bdc9457SAndroid Build Coastguard Worker# A5 v5 54*4bdc9457SAndroid Build Coastguard Worker# A6 v6 55*4bdc9457SAndroid Build Coastguard Worker# A7 v7 56*4bdc9457SAndroid Build Coastguard Worker# B v16 v17 v18 v19 57*4bdc9457SAndroid Build Coastguard Worker# C v24 58*4bdc9457SAndroid Build Coastguard Worker# C v25 59*4bdc9457SAndroid Build Coastguard Worker# C v26 60*4bdc9457SAndroid Build Coastguard Worker# C v27 61*4bdc9457SAndroid Build Coastguard Worker# C v28 62*4bdc9457SAndroid Build Coastguard Worker# C v29 63*4bdc9457SAndroid Build Coastguard Worker# C v30 64*4bdc9457SAndroid Build Coastguard Worker# C v31 65*4bdc9457SAndroid Build Coastguard Worker 66*4bdc9457SAndroid Build Coastguard Worker# Clamp v20 v21 67*4bdc9457SAndroid Build Coastguard Worker# unused A v8 v9 v10 v11 68*4bdc9457SAndroid Build Coastguard Worker# unused B v12 v13 v14 v15 69*4bdc9457SAndroid Build Coastguard Worker 70*4bdc9457SAndroid Build Coastguard WorkerBEGIN_FUNCTION xnn_f16_gemm_minmax_ukernel_8x8__aarch64_neonfp16arith_ld64 71*4bdc9457SAndroid Build Coastguard Worker 72*4bdc9457SAndroid Build Coastguard Worker # Load params pointer 73*4bdc9457SAndroid Build Coastguard Worker LDR x8, [sp, 8] 74*4bdc9457SAndroid Build Coastguard Worker 75*4bdc9457SAndroid Build Coastguard Worker # Save x19,x20,x21,x22 on stack 76*4bdc9457SAndroid Build Coastguard Worker STP x19, x20, [sp, -32]! 77*4bdc9457SAndroid Build Coastguard Worker STP x21, x22, [sp, 16] 78*4bdc9457SAndroid Build Coastguard Worker 79*4bdc9457SAndroid Build Coastguard Worker # Clamp A and C pointers 80*4bdc9457SAndroid Build Coastguard Worker CMP x0, 2 // if mr < 2 81*4bdc9457SAndroid Build Coastguard Worker ADD x9, x3, x4 // a1 = a0 + a_stride 82*4bdc9457SAndroid Build Coastguard Worker ADD x16, x6, x7 // c1 = c0 + cm_stride 83*4bdc9457SAndroid Build Coastguard Worker CSEL x9, x3, x9, LO // a1 = a0 84*4bdc9457SAndroid Build Coastguard Worker CSEL x16, x6, x16, LO // c1 = c0 85*4bdc9457SAndroid Build Coastguard Worker 86*4bdc9457SAndroid Build Coastguard Worker # Load params 87*4bdc9457SAndroid Build Coastguard Worker LD2R {v20.8h, v21.8h}, [x8] 88*4bdc9457SAndroid Build Coastguard Worker 89*4bdc9457SAndroid Build Coastguard Worker ADD x10, x9, x4 // a2 = a1 + a_stride 90*4bdc9457SAndroid Build Coastguard Worker ADD x17, x16, x7 // c2 = c1 + cm_stride 91*4bdc9457SAndroid Build Coastguard Worker // if mr <= 2 92*4bdc9457SAndroid Build Coastguard Worker CSEL x10, x9, x10, LS // a2 = a1 93*4bdc9457SAndroid Build Coastguard Worker CSEL x17, x16, x17, LS // c2 = c1 94*4bdc9457SAndroid Build Coastguard Worker 95*4bdc9457SAndroid Build Coastguard Worker CMP x0, 4 // if mr < 4 96*4bdc9457SAndroid Build Coastguard Worker ADD x11, x10, x4 // a3 = a2 + a_stride 97*4bdc9457SAndroid Build Coastguard Worker ADD x14, x17, x7 // c3 = c2 + cm_stride 98*4bdc9457SAndroid Build Coastguard Worker CSEL x11, x10, x11, LO // a3 = a2 99*4bdc9457SAndroid Build Coastguard Worker CSEL x14, x17, x14, LO // c3 = c2 100*4bdc9457SAndroid Build Coastguard Worker 101*4bdc9457SAndroid Build Coastguard Worker ADD x12, x11, x4 // a4 = a3 + a_stride 102*4bdc9457SAndroid Build Coastguard Worker ADD x13, x14, x7 // c4 = c3 + cm_stride 103*4bdc9457SAndroid Build Coastguard Worker // if mr <= 4 104*4bdc9457SAndroid Build Coastguard Worker CSEL x12, x11, x12, LS // a4 = a3 105*4bdc9457SAndroid Build Coastguard Worker CSEL x13, x14, x13, LS // c4 = c3 106*4bdc9457SAndroid Build Coastguard Worker 107*4bdc9457SAndroid Build Coastguard Worker CMP x0, 6 // if mr < 6 108*4bdc9457SAndroid Build Coastguard Worker ADD x19, x12, x4 // a5 = a4 + a_stride 109*4bdc9457SAndroid Build Coastguard Worker ADD x21, x13, x7 // c5 = c4 + cm_stride 110*4bdc9457SAndroid Build Coastguard Worker CSEL x19, x12, x19, LO // a5 = a4 111*4bdc9457SAndroid Build Coastguard Worker CSEL x21, x13, x21, LO // c5 = c4 112*4bdc9457SAndroid Build Coastguard Worker 113*4bdc9457SAndroid Build Coastguard Worker ADD x20, x19, x4 // a6 = a5 + a_stride 114*4bdc9457SAndroid Build Coastguard Worker ADD x22, x21, x7 // c6 = c5 + cm_stride 115*4bdc9457SAndroid Build Coastguard Worker // if mr <= 6 116*4bdc9457SAndroid Build Coastguard Worker CSEL x20, x19, x20, LS // a6 = a5 117*4bdc9457SAndroid Build Coastguard Worker CSEL x22, x21, x22, LS // c6 = c5 118*4bdc9457SAndroid Build Coastguard Worker 119*4bdc9457SAndroid Build Coastguard Worker CMP x0, 8 // if mr < 8 120*4bdc9457SAndroid Build Coastguard Worker ADD x4, x20, x4 // a7 = a5 + a_stride 121*4bdc9457SAndroid Build Coastguard Worker ADD x7, x22, x7 // c7 = c5 + cm_stride 122*4bdc9457SAndroid Build Coastguard Worker CSEL x4, x20, x4, LO // a7 = a5 123*4bdc9457SAndroid Build Coastguard Worker CSEL x7, x22, x7, LO // c7 = c5 124*4bdc9457SAndroid Build Coastguard Worker 125*4bdc9457SAndroid Build Coastguard Worker LDR x8, [sp, 32] // load cn_stride 126*4bdc9457SAndroid Build Coastguard Worker 127*4bdc9457SAndroid Build Coastguard Worker0: 128*4bdc9457SAndroid Build Coastguard Worker # Load initial bias from w into accumulators 129*4bdc9457SAndroid Build Coastguard Worker LDR q24, [x5], 16 130*4bdc9457SAndroid Build Coastguard Worker MOV v25.16b, v24.16b 131*4bdc9457SAndroid Build Coastguard Worker MOV v26.16b, v24.16b 132*4bdc9457SAndroid Build Coastguard Worker MOV v27.16b, v24.16b 133*4bdc9457SAndroid Build Coastguard Worker MOV v28.16b, v24.16b 134*4bdc9457SAndroid Build Coastguard Worker MOV v29.16b, v24.16b 135*4bdc9457SAndroid Build Coastguard Worker MOV v30.16b, v24.16b 136*4bdc9457SAndroid Build Coastguard Worker MOV v31.16b, v24.16b 137*4bdc9457SAndroid Build Coastguard Worker 138*4bdc9457SAndroid Build Coastguard Worker # Is there at least 4 halffloats (8 bytes)? 139*4bdc9457SAndroid Build Coastguard Worker SUBS x0, x2, 8 // k = kc - 8 140*4bdc9457SAndroid Build Coastguard Worker B.LO 3f 141*4bdc9457SAndroid Build Coastguard Worker 142*4bdc9457SAndroid Build Coastguard Worker # Main loop - 4 halffloats of A (8 bytes) 143*4bdc9457SAndroid Build Coastguard Worker # 32 FMA + 8 ld64 A + 4 LDR B 144*4bdc9457SAndroid Build Coastguard Worker1: 145*4bdc9457SAndroid Build Coastguard Worker LDR d0, [x3], 8 146*4bdc9457SAndroid Build Coastguard Worker LDR q16, [x5], 16 147*4bdc9457SAndroid Build Coastguard Worker LDR q17, [x5], 16 148*4bdc9457SAndroid Build Coastguard Worker LDR d1, [x9], 8 149*4bdc9457SAndroid Build Coastguard Worker LDR d2, [x10], 8 150*4bdc9457SAndroid Build Coastguard Worker LDR d3, [x11], 8 151*4bdc9457SAndroid Build Coastguard Worker LDR d4, [x12], 8 152*4bdc9457SAndroid Build Coastguard Worker LDR d5, [x19], 8 153*4bdc9457SAndroid Build Coastguard Worker LDR d6, [x20], 8 154*4bdc9457SAndroid Build Coastguard Worker LDR d7, [x4], 8 155*4bdc9457SAndroid Build Coastguard Worker LDR q18, [x5], 16 156*4bdc9457SAndroid Build Coastguard Worker LDR q19, [x5], 16 157*4bdc9457SAndroid Build Coastguard Worker SUBS x0, x0, 8 158*4bdc9457SAndroid Build Coastguard Worker FMLA v24.8h, v16.8h, v0.h[0] 159*4bdc9457SAndroid Build Coastguard Worker FMLA v25.8h, v16.8h, v1.h[0] 160*4bdc9457SAndroid Build Coastguard Worker FMLA v26.8h, v16.8h, v2.h[0] 161*4bdc9457SAndroid Build Coastguard Worker FMLA v27.8h, v16.8h, v3.h[0] 162*4bdc9457SAndroid Build Coastguard Worker FMLA v28.8h, v16.8h, v4.h[0] 163*4bdc9457SAndroid Build Coastguard Worker FMLA v29.8h, v16.8h, v5.h[0] 164*4bdc9457SAndroid Build Coastguard Worker FMLA v30.8h, v16.8h, v6.h[0] 165*4bdc9457SAndroid Build Coastguard Worker FMLA v31.8h, v16.8h, v7.h[0] 166*4bdc9457SAndroid Build Coastguard Worker 167*4bdc9457SAndroid Build Coastguard Worker FMLA v24.8h, v17.8h, v0.h[1] 168*4bdc9457SAndroid Build Coastguard Worker FMLA v25.8h, v17.8h, v1.h[1] 169*4bdc9457SAndroid Build Coastguard Worker FMLA v26.8h, v17.8h, v2.h[1] 170*4bdc9457SAndroid Build Coastguard Worker FMLA v27.8h, v17.8h, v3.h[1] 171*4bdc9457SAndroid Build Coastguard Worker FMLA v28.8h, v17.8h, v4.h[1] 172*4bdc9457SAndroid Build Coastguard Worker FMLA v29.8h, v17.8h, v5.h[1] 173*4bdc9457SAndroid Build Coastguard Worker FMLA v30.8h, v17.8h, v6.h[1] 174*4bdc9457SAndroid Build Coastguard Worker FMLA v31.8h, v17.8h, v7.h[1] 175*4bdc9457SAndroid Build Coastguard Worker 176*4bdc9457SAndroid Build Coastguard Worker FMLA v24.8h, v18.8h, v0.h[2] 177*4bdc9457SAndroid Build Coastguard Worker FMLA v25.8h, v18.8h, v1.h[2] 178*4bdc9457SAndroid Build Coastguard Worker FMLA v26.8h, v18.8h, v2.h[2] 179*4bdc9457SAndroid Build Coastguard Worker FMLA v27.8h, v18.8h, v3.h[2] 180*4bdc9457SAndroid Build Coastguard Worker FMLA v28.8h, v18.8h, v4.h[2] 181*4bdc9457SAndroid Build Coastguard Worker FMLA v29.8h, v18.8h, v5.h[2] 182*4bdc9457SAndroid Build Coastguard Worker FMLA v30.8h, v18.8h, v6.h[2] 183*4bdc9457SAndroid Build Coastguard Worker FMLA v31.8h, v18.8h, v7.h[2] 184*4bdc9457SAndroid Build Coastguard Worker 185*4bdc9457SAndroid Build Coastguard Worker FMLA v24.8h, v19.8h, v0.h[3] 186*4bdc9457SAndroid Build Coastguard Worker FMLA v25.8h, v19.8h, v1.h[3] 187*4bdc9457SAndroid Build Coastguard Worker FMLA v26.8h, v19.8h, v2.h[3] 188*4bdc9457SAndroid Build Coastguard Worker FMLA v27.8h, v19.8h, v3.h[3] 189*4bdc9457SAndroid Build Coastguard Worker FMLA v28.8h, v19.8h, v4.h[3] 190*4bdc9457SAndroid Build Coastguard Worker FMLA v29.8h, v19.8h, v5.h[3] 191*4bdc9457SAndroid Build Coastguard Worker FMLA v30.8h, v19.8h, v6.h[3] 192*4bdc9457SAndroid Build Coastguard Worker FMLA v31.8h, v19.8h, v7.h[3] 193*4bdc9457SAndroid Build Coastguard Worker B.HS 1b 194*4bdc9457SAndroid Build Coastguard Worker 195*4bdc9457SAndroid Build Coastguard Worker # Is there a remainder?- 2 halffloats of A (4 bytes) 196*4bdc9457SAndroid Build Coastguard Worker TBNZ x0, 2, 4f 197*4bdc9457SAndroid Build Coastguard Worker # Is there a remainder?- 1 halffloat of A (2 bytes) 198*4bdc9457SAndroid Build Coastguard Worker TBNZ x0, 1, 5f 199*4bdc9457SAndroid Build Coastguard Worker2: 200*4bdc9457SAndroid Build Coastguard Worker # Clamp 201*4bdc9457SAndroid Build Coastguard Worker FMAX v24.8h, v24.8h, v20.8h 202*4bdc9457SAndroid Build Coastguard Worker FMAX v25.8h, v25.8h, v20.8h 203*4bdc9457SAndroid Build Coastguard Worker FMAX v26.8h, v26.8h, v20.8h 204*4bdc9457SAndroid Build Coastguard Worker FMAX v27.8h, v27.8h, v20.8h 205*4bdc9457SAndroid Build Coastguard Worker FMAX v28.8h, v28.8h, v20.8h 206*4bdc9457SAndroid Build Coastguard Worker FMAX v29.8h, v29.8h, v20.8h 207*4bdc9457SAndroid Build Coastguard Worker FMAX v30.8h, v30.8h, v20.8h 208*4bdc9457SAndroid Build Coastguard Worker FMAX v31.8h, v31.8h, v20.8h 209*4bdc9457SAndroid Build Coastguard Worker SUBS x1, x1, 8 210*4bdc9457SAndroid Build Coastguard Worker FMIN v24.8h, v24.8h, v21.8h 211*4bdc9457SAndroid Build Coastguard Worker FMIN v25.8h, v25.8h, v21.8h 212*4bdc9457SAndroid Build Coastguard Worker FMIN v26.8h, v26.8h, v21.8h 213*4bdc9457SAndroid Build Coastguard Worker FMIN v27.8h, v27.8h, v21.8h 214*4bdc9457SAndroid Build Coastguard Worker FMIN v28.8h, v28.8h, v21.8h 215*4bdc9457SAndroid Build Coastguard Worker FMIN v29.8h, v29.8h, v21.8h 216*4bdc9457SAndroid Build Coastguard Worker FMIN v30.8h, v30.8h, v21.8h 217*4bdc9457SAndroid Build Coastguard Worker FMIN v31.8h, v31.8h, v21.8h 218*4bdc9457SAndroid Build Coastguard Worker 219*4bdc9457SAndroid Build Coastguard Worker # Store full 8 x 8 220*4bdc9457SAndroid Build Coastguard Worker B.LO 6f 221*4bdc9457SAndroid Build Coastguard Worker 222*4bdc9457SAndroid Build Coastguard Worker ST1 {v24.16b}, [x6], x8 223*4bdc9457SAndroid Build Coastguard Worker SUB x3, x3, x2 // a0 -= kc 224*4bdc9457SAndroid Build Coastguard Worker ST1 {v25.16b}, [x16], x8 225*4bdc9457SAndroid Build Coastguard Worker SUB x9, x9, x2 // a1 -= kc 226*4bdc9457SAndroid Build Coastguard Worker ST1 {v26.16b}, [x17], x8 227*4bdc9457SAndroid Build Coastguard Worker SUB x10, x10, x2 // a2 -= kc 228*4bdc9457SAndroid Build Coastguard Worker ST1 {v27.16b}, [x14], x8 229*4bdc9457SAndroid Build Coastguard Worker SUB x11, x11, x2 // a3 -= kc 230*4bdc9457SAndroid Build Coastguard Worker ST1 {v28.16b}, [x13], x8 231*4bdc9457SAndroid Build Coastguard Worker SUB x12, x12, x2 // a4 -= kc 232*4bdc9457SAndroid Build Coastguard Worker ST1 {v29.16b}, [x21], x8 233*4bdc9457SAndroid Build Coastguard Worker SUB x19, x19, x2 // a6 -= kc 234*4bdc9457SAndroid Build Coastguard Worker ST1 {v30.16b}, [x22], x8 235*4bdc9457SAndroid Build Coastguard Worker SUB x20, x20, x2 // a6 -= kc 236*4bdc9457SAndroid Build Coastguard Worker ST1 {v31.16b}, [x7], x8 237*4bdc9457SAndroid Build Coastguard Worker SUB x4, x4, x2 // a7 -= kc 238*4bdc9457SAndroid Build Coastguard Worker 239*4bdc9457SAndroid Build Coastguard Worker B.HI 0b 240*4bdc9457SAndroid Build Coastguard Worker 241*4bdc9457SAndroid Build Coastguard Worker # Restore x19,x20,x21,x22 from stack 242*4bdc9457SAndroid Build Coastguard Worker LDP x21, x22, [sp, 16] 243*4bdc9457SAndroid Build Coastguard Worker LDP x19, x20, [sp], 32 244*4bdc9457SAndroid Build Coastguard Worker RET 245*4bdc9457SAndroid Build Coastguard Worker 246*4bdc9457SAndroid Build Coastguard Worker3: 247*4bdc9457SAndroid Build Coastguard Worker TBZ x0, 2, 5f 248*4bdc9457SAndroid Build Coastguard Worker4: 249*4bdc9457SAndroid Build Coastguard Worker # Remainder- 2 halffloats of A (4 bytes) 250*4bdc9457SAndroid Build Coastguard Worker LDR s0, [x3], 4 251*4bdc9457SAndroid Build Coastguard Worker LDR q16, [x5], 16 252*4bdc9457SAndroid Build Coastguard Worker LDR q17, [x5], 16 253*4bdc9457SAndroid Build Coastguard Worker LDR s1, [x9], 4 254*4bdc9457SAndroid Build Coastguard Worker LDR s2, [x10], 4 255*4bdc9457SAndroid Build Coastguard Worker LDR s3, [x11], 4 256*4bdc9457SAndroid Build Coastguard Worker LDR s4, [x12], 4 257*4bdc9457SAndroid Build Coastguard Worker LDR s5, [x19], 4 258*4bdc9457SAndroid Build Coastguard Worker LDR s6, [x20], 4 259*4bdc9457SAndroid Build Coastguard Worker LDR s7, [x4], 4 260*4bdc9457SAndroid Build Coastguard Worker 261*4bdc9457SAndroid Build Coastguard Worker FMLA v24.8h, v16.8h, v0.h[0] 262*4bdc9457SAndroid Build Coastguard Worker FMLA v25.8h, v16.8h, v1.h[0] 263*4bdc9457SAndroid Build Coastguard Worker FMLA v26.8h, v16.8h, v2.h[0] 264*4bdc9457SAndroid Build Coastguard Worker FMLA v27.8h, v16.8h, v3.h[0] 265*4bdc9457SAndroid Build Coastguard Worker FMLA v28.8h, v16.8h, v4.h[0] 266*4bdc9457SAndroid Build Coastguard Worker FMLA v29.8h, v16.8h, v5.h[0] 267*4bdc9457SAndroid Build Coastguard Worker FMLA v30.8h, v16.8h, v6.h[0] 268*4bdc9457SAndroid Build Coastguard Worker FMLA v31.8h, v16.8h, v7.h[0] 269*4bdc9457SAndroid Build Coastguard Worker 270*4bdc9457SAndroid Build Coastguard Worker FMLA v24.8h, v17.8h, v0.h[1] 271*4bdc9457SAndroid Build Coastguard Worker FMLA v25.8h, v17.8h, v1.h[1] 272*4bdc9457SAndroid Build Coastguard Worker FMLA v26.8h, v17.8h, v2.h[1] 273*4bdc9457SAndroid Build Coastguard Worker FMLA v27.8h, v17.8h, v3.h[1] 274*4bdc9457SAndroid Build Coastguard Worker FMLA v28.8h, v17.8h, v4.h[1] 275*4bdc9457SAndroid Build Coastguard Worker FMLA v29.8h, v17.8h, v5.h[1] 276*4bdc9457SAndroid Build Coastguard Worker FMLA v30.8h, v17.8h, v6.h[1] 277*4bdc9457SAndroid Build Coastguard Worker FMLA v31.8h, v17.8h, v7.h[1] 278*4bdc9457SAndroid Build Coastguard Worker TBZ x0, 1, 2b 279*4bdc9457SAndroid Build Coastguard Worker 280*4bdc9457SAndroid Build Coastguard Worker5: 281*4bdc9457SAndroid Build Coastguard Worker # Remainder- 1 halffloat of A (2 bytes) 282*4bdc9457SAndroid Build Coastguard Worker LDR h0, [x3], 2 283*4bdc9457SAndroid Build Coastguard Worker LDR q16, [x5], 16 284*4bdc9457SAndroid Build Coastguard Worker LDR h1, [x9], 2 285*4bdc9457SAndroid Build Coastguard Worker LDR h2, [x10], 2 286*4bdc9457SAndroid Build Coastguard Worker LDR h3, [x11], 2 287*4bdc9457SAndroid Build Coastguard Worker LDR h4, [x12], 2 288*4bdc9457SAndroid Build Coastguard Worker LDR h5, [x19], 2 289*4bdc9457SAndroid Build Coastguard Worker LDR h6, [x20], 2 290*4bdc9457SAndroid Build Coastguard Worker LDR h7, [x4], 2 291*4bdc9457SAndroid Build Coastguard Worker 292*4bdc9457SAndroid Build Coastguard Worker FMLA v24.8h, v16.8h, v0.h[0] 293*4bdc9457SAndroid Build Coastguard Worker FMLA v25.8h, v16.8h, v1.h[0] 294*4bdc9457SAndroid Build Coastguard Worker FMLA v26.8h, v16.8h, v2.h[0] 295*4bdc9457SAndroid Build Coastguard Worker FMLA v27.8h, v16.8h, v3.h[0] 296*4bdc9457SAndroid Build Coastguard Worker FMLA v28.8h, v16.8h, v4.h[0] 297*4bdc9457SAndroid Build Coastguard Worker FMLA v29.8h, v16.8h, v5.h[0] 298*4bdc9457SAndroid Build Coastguard Worker FMLA v30.8h, v16.8h, v6.h[0] 299*4bdc9457SAndroid Build Coastguard Worker FMLA v31.8h, v16.8h, v7.h[0] 300*4bdc9457SAndroid Build Coastguard Worker B 2b 301*4bdc9457SAndroid Build Coastguard Worker 302*4bdc9457SAndroid Build Coastguard Worker # Store odd width 303*4bdc9457SAndroid Build Coastguard Worker6: 304*4bdc9457SAndroid Build Coastguard Worker TBZ x1, 2, 7f 305*4bdc9457SAndroid Build Coastguard Worker STR d24, [x6], 8 306*4bdc9457SAndroid Build Coastguard Worker STR d25, [x16], 8 307*4bdc9457SAndroid Build Coastguard Worker DUP d24, v24.d[1] 308*4bdc9457SAndroid Build Coastguard Worker DUP d25, v25.d[1] 309*4bdc9457SAndroid Build Coastguard Worker STR d26, [x17], 8 310*4bdc9457SAndroid Build Coastguard Worker STR d27, [x14], 8 311*4bdc9457SAndroid Build Coastguard Worker DUP d26, v26.d[1] 312*4bdc9457SAndroid Build Coastguard Worker DUP d27, v27.d[1] 313*4bdc9457SAndroid Build Coastguard Worker STR d28, [x13], 8 314*4bdc9457SAndroid Build Coastguard Worker STR d29, [x21], 8 315*4bdc9457SAndroid Build Coastguard Worker DUP d28, v28.d[1] 316*4bdc9457SAndroid Build Coastguard Worker DUP d29, v29.d[1] 317*4bdc9457SAndroid Build Coastguard Worker STR d30, [x22], 8 318*4bdc9457SAndroid Build Coastguard Worker STR d31, [x7], 8 319*4bdc9457SAndroid Build Coastguard Worker DUP d30, v30.d[1] 320*4bdc9457SAndroid Build Coastguard Worker DUP d31, v31.d[1] 321*4bdc9457SAndroid Build Coastguard Worker7: 322*4bdc9457SAndroid Build Coastguard Worker TBZ x1, 1, 8f 323*4bdc9457SAndroid Build Coastguard Worker STR s24, [x6], 4 324*4bdc9457SAndroid Build Coastguard Worker STR s25, [x16], 4 325*4bdc9457SAndroid Build Coastguard Worker DUP s24, v24.s[1] 326*4bdc9457SAndroid Build Coastguard Worker DUP s25, v25.s[1] 327*4bdc9457SAndroid Build Coastguard Worker STR s26, [x17], 4 328*4bdc9457SAndroid Build Coastguard Worker STR s27, [x14], 4 329*4bdc9457SAndroid Build Coastguard Worker DUP s26, v26.s[1] 330*4bdc9457SAndroid Build Coastguard Worker DUP s27, v27.s[1] 331*4bdc9457SAndroid Build Coastguard Worker STR s28, [x13], 4 332*4bdc9457SAndroid Build Coastguard Worker STR s29, [x21], 4 333*4bdc9457SAndroid Build Coastguard Worker DUP s28, v28.s[1] 334*4bdc9457SAndroid Build Coastguard Worker DUP s29, v29.s[1] 335*4bdc9457SAndroid Build Coastguard Worker STR s30, [x22], 4 336*4bdc9457SAndroid Build Coastguard Worker STR s31, [x7], 4 337*4bdc9457SAndroid Build Coastguard Worker DUP s30, v30.s[1] 338*4bdc9457SAndroid Build Coastguard Worker DUP s31, v31.s[1] 339*4bdc9457SAndroid Build Coastguard Worker 340*4bdc9457SAndroid Build Coastguard Worker8: 341*4bdc9457SAndroid Build Coastguard Worker TBZ x1, 0, 9f 342*4bdc9457SAndroid Build Coastguard Worker STR h24, [x6] 343*4bdc9457SAndroid Build Coastguard Worker STR h25, [x16] 344*4bdc9457SAndroid Build Coastguard Worker STR h26, [x17] 345*4bdc9457SAndroid Build Coastguard Worker STR h27, [x14] 346*4bdc9457SAndroid Build Coastguard Worker STR h28, [x13] 347*4bdc9457SAndroid Build Coastguard Worker STR h29, [x21] 348*4bdc9457SAndroid Build Coastguard Worker STR h30, [x22] 349*4bdc9457SAndroid Build Coastguard Worker STR h31, [x7] 350*4bdc9457SAndroid Build Coastguard Worker9: 351*4bdc9457SAndroid Build Coastguard Worker # Restore x19,x20,x21,x22 from stack 352*4bdc9457SAndroid Build Coastguard Worker LDP x21, x22, [sp, 16] 353*4bdc9457SAndroid Build Coastguard Worker LDP x19, x20, [sp], 32 354*4bdc9457SAndroid Build Coastguard Worker RET 355*4bdc9457SAndroid Build Coastguard Worker 356*4bdc9457SAndroid Build Coastguard WorkerEND_FUNCTION xnn_f16_gemm_minmax_ukernel_8x8__aarch64_neonfp16arith_ld64 357*4bdc9457SAndroid Build Coastguard Worker 358*4bdc9457SAndroid Build Coastguard Worker#ifdef __ELF__ 359*4bdc9457SAndroid Build Coastguard Worker.section ".note.GNU-stack","",%progbits 360*4bdc9457SAndroid Build Coastguard Worker#endif 361