.globl tensor_kernel_m2xn2xk1_bfp16_bfp16_fp32 .p2align 4 .type tensor_kernel_m2xn2xk1_bfp16_bfp16_fp32,@function tensor_kernel_m2xn2xk1_bfp16_bfp16_fp32: .p2align 4 // m1, m2 n2 n1 m0 n0 += m2 k1 m1 m0 k0, n2 k1 n1 n0 k0 // += : read==write f32 accumulator; m1, => |m1| buffers (p2,p3) // // Parameters // p0 = in0 // p1 = in1 // p2 = out[m1==0] // p3 = out[m1==1] // r0 = |m2| // r1 = |n2| (|m2| * |n2| >= 2) // r2 = |k1| (|k1|%4 == 0 and |k1| >= 8) // |m1| = |n1| = 2 // |m0| = |n0| = |k0| = 8 // Variables // r3 = m2n2_i % r1 // r4 = jumpback in IN0 (|k1| * r19) // r5 = jumpback in IN1 (|n2| * r4) // r6 = r4 or 0 (current jump in IN0) // r7 = r5 or 0 (current jump in IN1) // r16 = k1_i // r17 = m2n2_i // r19 = -1 * 72(bfp16_block_byte_size) * 2(|m1| or |n1|) // r20 = 780 (vmac.f config) // r21 = 1 (for xor) // m0 = r6 // m1 = r7 // Functional Units: // Vector Unit (V) ; Load Unit A (A) ; Load Unit B (B) ; Store Unit (S) ; Scalar Unit (X) ; Move Unit (M) // ; or Scalar + Move Unit (XM) nopv ; vlda bmll0, [p2, #0 ] ; vldb x8, [p3, #0 ] ; movs p4, p2 ; movx r24, #0 ; mov r25, #0 nopv ; vlda bmlh0, [p2, #64 ] ; vldb x9, [p3, #64 ] ; movs p5, p3 ; nopx ; mov r23, p7 nopv ; vlda bmhl0, [p2, #128] ; vldb x10, [p3, #128] ; padds [p4], #256 ; movxm p7, #.l_mn_loop_start nopv ; vlda bmhh0, [p2, #192] ; vldb x11, [p3, #192] ; padds [p5], #256 ; movxm r19, #-72 * 2 // 4 nopv ; vlda.fill.512 [p0, lf0, r24] ; vldb.fill.512 [p1, lf1, r25] ; nops ; mul r17, r0, r1 ; nopm nopv ; vlda.pop.576 ex0, [p0, lf0, r24] ; vldb.pop.576 ex1, [p1, lf1, r25] ; nops ; mul r4, r19, r2 ; nopm nopv ; vlda.pop.576 ex2, [p0, lf0, r24] ; vldb.pop.576 ex3, [p1, lf1, r25] ; nops ; add r17, r17, #-2 ; nopm nopv ; nopa ; nopb ; nops ; movx r21, #1 ; nopm // 8 nopv ; vlda bmll2, [p4], #64 ; vldb x8, [p5], #64 ; nops ; nopx ; nopm nopv ; vlda bmlh2, [p4], #64 ; vldb x9, [p5], #64 ; nops ; nopx ; vmov bmll1, x8 nopv ; vlda bmhl2, [p4], #64 ; vldb x10, [p5], #64 ; nops ; nopx ; vmov bmlh1, x9 nopv ; vlda bmhh2, [p4], #64 ; vldb x11, [p5], #64 ; nops ; nopx ; vmov bmhl1, x10 nopv ; vlda.pop.576 ex4, [p0, lf0, r24] ; vldb.pop.576 ex5, [p1, lf1, r25] ; nops ; nopx ; vmov bmhh1, x11 nopv ; vlda.pop.576 ex6, [p0, lf0, r24] ; vldb.pop.576 ex7, [p1, lf1, r25] ; nops ; movx r3, #0 ; nopm nopv ; vlda.pop.576 ex8, [p0, lf0, r24] ; vldb.pop.576 ex9, [p1, lf1, r25] ; nops ; mul r5, r4, r1 ; nopm nopv ; vlda.pop.576 ex10, [p0, lf0, r24] ; vldb.pop.576 ex11, [p1, lf1, r25] ; nops ; movx r20, #780 ; nopm // 16 vmac.f dm0, dm0, ex0, ex1, r20 ; vlda.pop.576 ex0, [p0, lf0, r24] ; vldb.pop.576 ex1, [p1, lf1, r25] ; nops ; add r3, r3, #1 ; nopm vmac.f dm1, dm1, ex2, ex1, r20 ; vlda.pop.576 ex2, [p0, lf0, r24] ; vldb.pop.576 ex3, [p1, lf1, r25] ; nops ; ltu r6, r3, r1 ; vmov bmll3, x8 vmac.f dm0, dm2, ex0, ex3, r20 ; vlda bmll2, [p4], #64 ; nopb ; nops ; mul r3, r3, r6 ; vmov bmlh3, x9 vmac.f dm1, dm3, ex2, ex3, r20 ; vlda bmlh2, [p4], #64 ; vldb x4, [p5], #64 ; nops ; xor r7, r6, r21 ; vmov bmhl3, x10 vmac.f dm0, dm0, ex4, ex5, r20 ; vlda bmhl2, [p4], #64 ; vldb x5, [p5], #64 ; nops ; mul r6, r6, r4 ; vmov bmhh3, x11 vmac.f dm1, dm1, ex6, ex5, r20 ; vlda bmhh2, [p4], #64 ; vldb x6, [p5], #64 ; nops ; mul r7, r7, r5 ; nopm vmac.f dm0, dm0, ex4, ex7, r20 ; nopa ; vldb x7, [p5], #64 ; nops ; nopx ; mov m0, r6 vmac.f dm1, dm1, ex6, ex7, r20 ; vlda.fill.512 [p0, lf0, r24] ; vldb.fill.512 [p1, lf1, r25] ; nops ; nopx ; mov m1, r7 vmac.f dm0, dm0, ex8, ex9, r20 ; vlda.pop.576 ex0, [p0, lf0, r24] ; vldb.pop.576 ex1, [p1, lf1, r25] ; nops ; nopxm vmac.f dm1, dm1, ex10, ex9, r20 ; vlda.pop.576 ex2, [p0, lf0, r24] ; vldb.pop.576 ex3, [p1, lf1, r25] ; nops ; add r16, r2, #-8 ; nopm vmac.f dm0, dm0, ex8, ex11, r20 ; vlda.pop.576 ex4, [p0, lf0, r24] ; vldb.pop.576 ex5, [p1, lf1, r25] ; nops ; jz r16, #.l_k1_end_warm_up vmac.f dm1, dm1, ex10, ex11, r20 ; vlda.pop.576 ex6, [p0, lf0, r24] ; vldb.pop.576 ex7, [p1, lf1, r25] ; nops ; nopxm // Delay Slot 5 vmac.f dm0, dm0, ex0, ex1, r20 ; vlda.pop.576 ex8, [p0, lf0, r24] ; vldb.pop.576 ex9, [p1, lf1, r25] ; nops ; nopx ; vmov bmll3, x4 // Delay Slot 4 vmac.f dm1, dm1, ex2, ex1, r20 ; vlda.pop.576 ex10, [p0, lf0, r24] ; vldb.pop.576 ex11, [p1, lf1, r25] ; nops ; nopx ; vmov bmlh3, x5 // Delay Slot 3 vmac.f dm0, dm0, ex0, ex3, r20 ; vlda.pop.576 ex0, [p0, lf0, r24] ; vldb.pop.576 ex1, [p1, lf1, r25] ; nops ; nopx ; vmov bmhl3, x6 // Delay Slot 2 vmac.f dm1, dm1, ex2, ex3, r20 ; vlda.pop.576 ex2, [p0, lf0, r24] ; vldb.pop.576 ex3, [p1, lf1, r25] ; nops ; nopx ; vmov bmhh3, x7 // Delay Slot 1 .p2align 4 .l_k1_start_warm_up: vmac.f dm0, dm0, ex0, ex1, r20 ; nopa ; nopb ; nops ; nopxm vmac.f dm1, dm1, ex2, ex1, r20 ; nopa ; nopb ; nops ; nopxm vmac.f dm0, dm0, ex0, ex3, r20 ; nopa ; nopb ; nops ; nopxm vmac.f dm1, dm1, ex2, ex3, r20 ; nopa ; nopb ; nops ; nopxm vmac.f dm0, dm0, ex4, ex5, r20 ; nopa ; nopb ; nops ; nopxm vmac.f dm1, dm1, ex6, ex5, r20 ; nopa ; nopb ; nops ; nopxm vmac.f dm0, dm0, ex4, ex7, r20 ; nopa ; nopb ; nops ; nopxm vmac.f dm1, dm1, ex6, ex7, r20 ; vlda.fill.512 [p0, lf0, r24] ; vldb.fill.512 [p1, lf1, r25] ; nops ; nopxm vmac.f dm0, dm0, ex8, ex9, r20 ; vlda.pop.576 ex0, [p0, lf0, r24] ; vldb.pop.576 ex1, [p1, lf1, r25] ; nops ; nopxm vmac.f dm1, dm1, ex10, ex9, r20 ; vlda.pop.576 ex2, [p0, lf0, r24] ; vldb.pop.576 ex3, [p1, lf1, r25] ; nops ; add r16, r16, #-4 ; nopm vmac.f dm0, dm0, ex8, ex11, r20 ; vlda.pop.576 ex4, [p0, lf0, r24] ; vldb.pop.576 ex5, [p1, lf1, r25] ; nops ; jnz r16, #.l_k1_start_warm_up vmac.f dm1, dm1, ex10, ex11, r20 ; vlda.pop.576 ex6, [p0, lf0, r24] ; vldb.pop.576 ex7, [p1, lf1, r25] ; nops ; nopxm // Delay Slot 5 vmac.f dm0, dm0, ex0, ex1, r20 ; vlda.pop.576 ex8, [p0, lf0, r24] ; vldb.pop.576 ex9, [p1, lf1, r25] ; nops ; nopxm // Delay Slot 4 vmac.f dm1, dm1, ex2, ex1, r20 ; vlda.pop.576 ex10, [p0, lf0, r24] ; vldb.pop.576 ex11, [p1, lf1, r25] ; nops ; nopxm // Delay Slot 3 vmac.f dm0, dm0, ex0, ex3, r20 ; vlda.pop.576 ex0, [p0, lf0, r24] ; vldb.pop.576 ex1, [p1, lf1, r25] ; nops ; nopxm // Delay Slot 2 vmac.f dm1, dm1, ex2, ex3, r20 ; vlda.pop.576 ex2, [p0, lf0, r24] ; vldb.pop.576 ex3, [p1, lf1, r25] ; nops ; nopxm // Delay Slot 1 .p2align 4 .l_k1_end_warm_up: vmac.f dm0, dm0, ex0, ex1, r20 ; nopa ; paddb [p1], m1 ; nops ; nopxm vmac.f dm1, dm1, ex2, ex1, r20 ; nopa ; vldb.fill.512 [p1, lf1, r25] ; nops ; nopxm vmac.f dm0, dm0, ex0, ex3, r20 ; vlda bmll4, [p4], #64 ; nopb ; nops ; nopxm vmac.f dm1, dm1, ex2, ex3, r20 ; vlda bmlh4, [p4], #64 ; nopb ; nops ; nopxm vmac.f dm0, dm0, ex4, ex5, r20 ; padda [p0], m0 ; nopb ; nops ; nopxm vmac.f dm1, dm1, ex6, ex5, r20 ; vlda.fill.512 [p0, lf0, r24] ; nopb ; nops ; nopxm vmac.f dm0, dm0, ex4, ex7, r20 ; vlda.pop.576 ex4, [p0, lf0, r24] ; vldb.pop.576 ex5, [p1, lf1, r25] ; nops ; nopxm vmac.f dm1, dm1, ex6, ex7, r20 ; vlda.pop.576 ex6, [p0, lf0, r24] ; vldb.pop.576 ex7, [p1, lf1, r25] ; nops ; nopxm vmac.f dm0, dm0, ex8, ex9, r20 ; vlda.pop.576 ex8, [p0, lf0, r24] ; vldb.pop.576 ex9, [p1, lf1, r25] ; nops ; nopxm vmac.f dm1, dm1, ex10, ex9, r20 ; vlda.pop.576 ex10, [p0, lf0, r24] ; vldb.pop.576 ex11, [p1, lf1, r25] ; nops ; nopxm vmac.f dm0, dm0, ex8, ex11, r20 ; vlda bmhl4, [p4], #64 ; nopb ; nops ; jz r17, #.l_mn_loop_end vmac.f dm1, dm1, ex10, ex11, r20 ; vlda bmhh4, [p4], #64 ; nopb ; nops ; add r17, r17, #-1 ; nopm // Delay Slot 5 // k=k1-1_0 vmac.f dm2, dm0, ex0, ex1, r20 ; vlda bmll2, [p5], #64 ; nopb ; nops ; nopxm // Delay Slot 4 vmac.f dm3, dm1, ex2, ex1, r20 ; vlda bmlh2, [p5], #64 ; nopb ; nops ; nopxm // Delay Slot 3 // k=k1_0 // k=0_0 vmac.f dm0, dm2, ex4, ex5, r20 ; vlda bmhl2, [p5], #64 ; nopb ; nops ; nopxm // Delay Slot 2 vmac.f dm1, dm3, ex6, ex5, r20 ; vlda bmhh2, [p5], #64 ; nopb ; nops ; nopxm // Delay Slot 1 // k=1_0 // k=k1-1_1 .p2align 4 .l_mn_loop_start: vmac.f dm4, dm0, ex0, ex3, r20 ; vlda.pop.576 ex0, [p0, lf0, r24] ; vldb.pop.576 ex1, [p1, lf1, r25] ; nops ; add r3, r3, #1 ; nopm vmac.f dm2, dm1, ex2, ex3, r20 ; vlda.pop.576 ex2, [p0, lf0, r24] ; vldb.pop.576 ex3, [p1, lf1, r25] ; nops ; ltu r6, r3, r1 ; nopm // k=k1_1 // k=0_1 vmac.f dm0, dm4, ex4, ex7, r20 ; vlda.pop.576 ex4, [p0, lf0, r24] ; vldb.pop.576 ex5, [p1, lf1, r25] ; vst bmll2, [p2], #64 ; mul r3, r3, r6 ; nopm vmac.f dm1, dm2, ex6, ex7, r20 ; vlda.pop.576 ex6, [p0, lf0, r24] ; vldb.pop.576 ex7, [p1, lf1, r25] ; vst bmlh2, [p2], #64 ; xor r7, r6, r21 ; nopm // k=1_1 vmac.f dm0, dm0, ex8, ex9, r20 ; nopa ; nopb ; vst bmhl2, [p2], #64 ; mul r6, r6, r4 ; nopm vmac.f dm1, dm1, ex10, ex9, r20 ; vlda bmll2, [p4], #64 ; nopb ; vst bmll3, [p3], #64 ; mul r7, r7, r5 ; vmov x9, bmhh2 vmac.f dm0, dm0, ex8, ex11, r20 ; vlda bmlh2, [p4], #64 ; nopb ; vst bmlh3, [p3], #64 ; nopx ; mov m0, r6 vmac.f dm1, dm1, ex10, ex11, r20 ; vlda.fill.512 [p0, lf0, r24] ; vldb.fill.512 [p1, lf1, r25] ; vst x9, [p2], #64 ; nopx ; mov m1, r7 vmac.f dm0, dm0, ex0, ex1, r20 ; vlda.pop.576 ex0, [p0, lf0, r24] ; vldb.pop.576 ex1, [p1, lf1, r25] ; vst bmhl3, [p3], #64 ; nopxm vmac.f dm1, dm1, ex2, ex1, r20 ; vlda.pop.576 ex2, [p0, lf0, r24] ; vldb.pop.576 ex3, [p1, lf1, r25] ; vst bmhh3, [p3], #64 ; add r16, r2, #-8 ; nopm vmac.f dm0, dm0, ex0, ex3, r20 ; vlda.pop.576 ex4, [p0, lf0, r24] ; vldb.pop.576 ex5, [p1, lf1, r25] ; vst bmll2, [p3], #64 ; jz r16, #.l_k1_end_loop vmac.f dm1, dm1, ex2, ex3, r20 ; vlda.pop.576 ex6, [p0, lf0, r24] ; vldb.pop.576 ex7, [p1, lf1, r25] ; vst bmlh2, [p3], #64 ; nopxm // Delay Slot 5 vmac.f dm0, dm0, ex4, ex5, r20 ; vlda.pop.576 ex8, [p0, lf0, r24] ; vldb.pop.576 ex9, [p1, lf1, r25] ; vst bmhl2, [p3], #64 ; nopxm // Delay Slot 4 vmac.f dm1, dm1, ex6, ex5, r20 ; vlda.pop.576 ex10, [p0, lf0, r24] ; vldb.pop.576 ex11, [p1, lf1, r25] ; vst bmhh2, [p3], #64 ; nopxm // Delay Slot 3 vmac.f dm0, dm0, ex4, ex7, r20 ; vlda.pop.576 ex0, [p0, lf0, r24] ; vldb.pop.576 ex1, [p1, lf1, r25] ; nops ; nopxm // Delay Slot 2 vmac.f dm1, dm1, ex6, ex7, r20 ; vlda.pop.576 ex2, [p0, lf0, r24] ; vldb.pop.576 ex3, [p1, lf1, r25] ; nops ; nopxm // Delay Slot 1 .p2align 4 .l_k1_start_loop: vmac.f dm0, dm0, ex0, ex1, r20 ; nopa ; nopb ; nops ; nopxm vmac.f dm1, dm1, ex2, ex1, r20 ; nopa ; nopb ; nops ; nopxm vmac.f dm0, dm0, ex0, ex3, r20 ; nopa ; nopb ; nops ; nopxm vmac.f dm1, dm1, ex2, ex3, r20 ; nopa ; nopb ; nops ; nopxm vmac.f dm0, dm0, ex4, ex5, r20 ; nopa ; nopb ; nops ; nopxm vmac.f dm1, dm1, ex6, ex5, r20 ; nopa ; nopb ; nops ; nopxm vmac.f dm0, dm0, ex4, ex7, r20 ; nopa ; nopb ; nops ; nopxm vmac.f dm1, dm1, ex6, ex7, r20 ; vlda.fill.512 [p0, lf0, r24] ; vldb.fill.512 [p1, lf1, r25] ; nops ; nopxm vmac.f dm0, dm0, ex8, ex9, r20 ; vlda.pop.576 ex0, [p0, lf0, r24] ; vldb.pop.576 ex1, [p1, lf1, r25] ; nops ; nopxm vmac.f dm1, dm1, ex10, ex9, r20 ; vlda.pop.576 ex2, [p0, lf0, r24] ; vldb.pop.576 ex3, [p1, lf1, r25] ; nops ; add r16, r16, #-4 ; nopm vmac.f dm0, dm0, ex8, ex11, r20 ; vlda.pop.576 ex4, [p0, lf0, r24] ; vldb.pop.576 ex5, [p1, lf1, r25] ; nops ; jnz r16, #.l_k1_start_loop vmac.f dm1, dm1, ex10, ex11, r20 ; vlda.pop.576 ex6, [p0, lf0, r24] ; vldb.pop.576 ex7, [p1, lf1, r25] ; nops ; nopxm // Delay Slot 5 vmac.f dm0, dm0, ex0, ex1, r20 ; vlda.pop.576 ex8, [p0, lf0, r24] ; vldb.pop.576 ex9, [p1, lf1, r25] ; nops ; nopxm // Delay Slot 4 vmac.f dm1, dm1, ex2, ex1, r20 ; vlda.pop.576 ex10, [p0, lf0, r24] ; vldb.pop.576 ex11, [p1, lf1, r25] ; nops ; nopxm // Delay Slot 3 vmac.f dm0, dm0, ex0, ex3, r20 ; vlda.pop.576 ex0, [p0, lf0, r24] ; vldb.pop.576 ex1, [p1, lf1, r25] ; nops ; nopxm // Delay Slot 2 vmac.f dm1, dm1, ex2, ex3, r20 ; vlda.pop.576 ex2, [p0, lf0, r24] ; vldb.pop.576 ex3, [p1, lf1, r25] ; nops ; nopxm // Delay Slot 1 .p2align 4 .l_k1_end_loop: vmac.f dm0, dm0, ex0, ex1, r20 ; vlda bmhl2, [p4], #64 ; paddb [p1], m1 ; nops ; nopxm vmac.f dm1, dm1, ex2, ex1, r20 ; vlda bmhh2, [p4], #64 ; vldb x5, [p5], #64 ; nops ; nopxm vmac.f dm0, dm0, ex0, ex3, r20 ; vlda bmll4, [p4], #64 ; vldb x4, [p5], #64 ; nops ; nopxm vmac.f dm1, dm1, ex2, ex3, r20 ; vlda bmlh4, [p4], #64 ; vldb x7, [p5], #64 ; nops ; nopxm vmac.f dm0, dm0, ex4, ex5, r20 ; padda [p0], m0 ; vldb x6, [p5], #64 ; vst bmll4, [p2], #64 ; nopxm vmac.f dm1, dm1, ex6, ex5, r20 ; vlda.fill.512 [p0, lf0, r24] ; vldb.fill.512 [p1, lf1, r25] ; vst bmlh4, [p2], #64 ; nopxm vmac.f dm0, dm0, ex4, ex7, r20 ; vlda.pop.576 ex4, [p0, lf0, r24] ; vldb.pop.576 ex5, [p1, lf1, r25] ; vst bmhl4, [p2], #64 ; nopxm vmac.f dm1, dm1, ex6, ex7, r20 ; vlda.pop.576 ex6, [p0, lf0, r24] ; vldb.pop.576 ex7, [p1, lf1, r25] ; vst bmhh4, [p2], #64 ; nopxm vmac.f dm0, dm0, ex8, ex9, r20 ; vlda.pop.576 ex8, [p0, lf0, r24] ; vldb.pop.576 ex9, [p1, lf1, r25] ; nops ; nopxm vmac.f dm1, dm1, ex10, ex9, r20 ; vlda.pop.576 ex10, [p0, lf0, r24] ; vldb.pop.576 ex11, [p1, lf1, r25] ; nops ; nopx ; vmov bmll3, x5 vmac.f dm0, dm0, ex8, ex11, r20 ; vlda bmhl4, [p4], #64 ; nopb ; nops ; jnzd r17, r17, p7 ; vmov bmlh3, x4 vmac.f dm1, dm1, ex10, ex11, r20 ; vlda bmhh4, [p4], #64 ; nopb ; nops ; nopx ; vmov bmhl3, x7 // Delay Slot 5 // k=k1-1_0 vmac.f dm2, dm0, ex0, ex1, r20 ; vlda bmll2, [p5], #64 ; nopb ; nops ; nopx ; vmov bmhh3, x6 // Delay Slot 4 vmac.f dm3, dm1, ex2, ex1, r20 ; vlda bmlh2, [p5], #64 ; nopb ; nops ; nopxm // Delay Slot 3 // k=k1_0 // k=0_0 vmac.f dm0, dm2, ex4, ex5, r20 ; vlda bmhl2, [p5], #64 ; nopb ; nops ; nopxm // Delay Slot 2 vmac.f dm1, dm3, ex6, ex5, r20 ; vlda bmhh2, [p5], #64 ; nopb ; nops ; nopxm // Delay Slot 1 // k=1_0 .p2align 4 .l_mn_loop_end: // k=k1-1_1 vmac.f dm4, dm0, ex0, ex3, r20 ; vlda.pop.576 ex0, [p0, lf0, r24] ; vldb.pop.576 ex1, [p1, lf1, r25] ; nops ; nopxm vmac.f dm2, dm1, ex2, ex3, r20 ; vlda.pop.576 ex2, [p0, lf0, r24] ; vldb.pop.576 ex3, [p1, lf1, r25] ; nops ; nopxm // k=k1_1 // k=0_1 vmac.f dm0, dm4, ex4, ex7, r20 ; vlda.pop.576 ex4, [p0, lf0, r24] ; vldb.pop.576 ex5, [p1, lf1, r25] ; vst bmll2, [p2], #64 ; add r16, r2, #-8 ; nopm vmac.f dm1, dm2, ex6, ex7, r20 ; vlda.pop.576 ex6, [p0, lf0, r24] ; vldb.pop.576 ex7, [p1, lf1, r25] ; vst bmlh2, [p2], #64 ; jz r16, #.l_k1_end_cool_down // k=1_1 vmac.f dm0, dm0, ex8, ex9, r20 ; vlda.fill.512 [p0, lf0, r24] ; vldb.fill.512 [p1, lf1, r25] ; vst bmhl2, [p2], #64 ; nopx ; nopm // Delay Slot 5 vmac.f dm1, dm1, ex10, ex9, r20 ; vlda.pop.576 ex8, [p0, lf0, r24] ; vldb.pop.576 ex9, [p1, lf1, r25] ; vst bmhh2, [p2], #64 ; nopxm // Delay Slot 4 vmac.f dm0, dm0, ex8, ex11, r20 ; vlda.pop.576 ex10, [p0, lf0, r24] ; vldb.pop.576 ex11, [p1, lf1, r25] ; vst bmll3, [p3], #64 ; nopxm // Delay Slot 3 vmac.f dm1, dm1, ex10, ex11, r20 ; vlda.pop.576 ex0, [p0, lf0, r24] ; vldb.pop.576 ex1, [p1, lf1, r25] ; vst bmlh3, [p3], #64 ; nopxm // Delay Slot 2 vmac.f dm0, dm0, ex0, ex1, r20 ; vlda.pop.576 ex2, [p0, lf0, r24] ; vldb.pop.576 ex3, [p1, lf1, r25] ; vst bmhl3, [p3], #64 ; nopxm // Delay Slot 1 .p2align 4 .l_k1_start_cool_down: vmac.f dm1, dm1, ex2, ex1, r20 ; nopa ; nopb ; nops ; nopxm vmac.f dm0, dm0, ex0, ex3, r20 ; nopa ; nopb ; nops ; nopxm vmac.f dm1, dm1, ex2, ex3, r20 ; nopa ; nopb ; nops ; nopxm vmac.f dm0, dm0, ex4, ex5, r20 ; nopa ; nopb ; nops ; nopxm vmac.f dm1, dm1, ex6, ex5, r20 ; nopa ; nopb ; nops ; nopxm vmac.f dm0, dm0, ex4, ex7, r20 ; nopa ; nopb ; nops ; nopxm vmac.f dm1, dm1, ex6, ex7, r20 ; nopa ; nopb ; nops ; nopxm vmac.f dm0, dm0, ex8, ex9, r20 ; vlda.pop.576 ex0, [p0, lf0, r24] ; vldb.pop.576 ex1, [p1, lf1, r25] ; nops ; nopxm vmac.f dm1, dm1, ex10, ex9, r20 ; vlda.pop.576 ex2, [p0, lf0, r24] ; vldb.pop.576 ex3, [p1, lf1, r25] ; nops ; nopxm vmac.f dm0, dm0, ex8, ex11, r20 ; vlda.pop.576 ex4, [p0, lf0, r24] ; vldb.pop.576 ex5, [p1, lf1, r25] ; nops ; add r16, r16, #-4 ; nopm vmac.f dm1, dm1, ex10, ex11, r20 ; vlda.pop.576 ex6, [p0, lf0, r24] ; vldb.pop.576 ex7, [p1, lf1, r25] ; nops ; jnz r16, #.l_k1_start_cool_down vmac.f dm0, dm0, ex0, ex1, r20 ; vlda.fill.512 [p0, lf0, r24] ; vldb.fill.512 [p1, lf1, r25] ; nops ; nopxm // Delay Slot 5 vmac.f dm1, dm1, ex2, ex1, r20 ; vlda.pop.576 ex8, [p0, lf0, r24] ; vldb.pop.576 ex9, [p1, lf1, r25] ; nops ; nopxm // Delay Slot 4 vmac.f dm0, dm0, ex0, ex3, r20 ; vlda.pop.576 ex10, [p0, lf0, r24] ; vldb.pop.576 ex11, [p1, lf1, r25] ; nops ; nopxm // Delay Slot 3 vmac.f dm1, dm1, ex2, ex3, r20 ; vlda.pop.576 ex0, [p0, lf0, r24] ; vldb.pop.576 ex1, [p1, lf1, r25] ; nops ; nopxm // Delay Slot 2 vmac.f dm0, dm0, ex0, ex1, r20 ; vlda.pop.576 ex2, [p0, lf0, r24] ; vldb.pop.576 ex3, [p1, lf1, r25] ; nops ; nopxm // Delay Slot 1 .p2align 4 .l_k1_end_cool_down: vmac.f dm1, dm1, ex2, ex1, r20 ; vlda.pop.576 ex4, [p0, lf0, r24] ; vldb.pop.576 ex5, [p1, lf1, r25] ; vst bmhh3, [p3], #64 ; nopxm vmac.f dm2, dm0, ex0, ex3, r20 ; vlda.pop.576 ex6, [p0, lf0, r24] ; vldb.pop.576 ex7, [p1, lf1, r25] ; vst bmll2, [p3], #64 ; nopxm vmac.f dm3, dm1, ex2, ex3, r20 ; nopa ; nopb ; vst bmlh2, [p3], #64 ; nopxm vmac.f dm0, dm0, ex4, ex5, r20 ; vlda.pop.576 ex8, [p0, lf0, r24] ; vldb.pop.576 ex9, [p1, lf1, r25] ; vst bmhl2, [p3], #64 ; nopxm vmac.f dm1, dm1, ex6, ex5, r20 ; vlda.pop.576 ex10, [p0, lf0, r24] ; vldb.pop.576 ex11, [p1, lf1, r25] ; vst bmhh2, [p3], #64 ; nopxm vmac.f dm2, dm2, ex4, ex7, r20 ; nopa ; nopb ; vst bmll4, [p2], #64 ; nopxm vmac.f dm0, dm0, ex8, ex9, r20 ; nopa ; nopb ; vst bmlh4, [p2], #64 ; nopxm vmac.f dm3, dm3, ex6, ex7, r20 ; nopa ; nopb ; vst bmhl4, [p2], #64 ; nopxm vmac.f dm1, dm1, ex10, ex9, r20 ; nopa ; nopb ; vst bmhh4, [p2], #64 ; nopxm vmac.f dm0, dm0, ex0, ex1, r20 ; nopa ; nopb ; nops ; nopxm vmac.f dm2, dm2, ex8, ex11, r20 ; nopa ; nopb ; nops ; nopxm vmac.f dm3, dm3, ex10, ex11, r20 ; nopa ; nopb ; nops ; nopxm vmac.f dm0, dm0, ex4, ex5, r20 ; nopa ; nopb ; nops ; nopxm vmac.f dm1, dm1, ex2, ex1, r20 ; nopa ; nopb ; nops ; nopxm vmac.f dm2, dm2, ex0, ex3, r20 ; nopa ; nopb ; nops ; nopxm vmac.f dm0, dm0, ex8, ex9, r20 ; nopa ; nopb ; nops ; nopxm vmac.f dm1, dm1, ex6, ex5, r20 ; nopa ; nopb ; nops ; nopxm vmac.f dm3, dm3, ex2, ex3, r20 ; nopa ; nopb ; nops ; nopxm vmac.f dm2, dm2, ex4, ex7, r20 ; nopa ; nopb ; nops ; nopxm vmac.f dm1, dm1, ex10, ex9, r20 ; nopa ; nopb ; nops ; nopxm vmac.f dm3, dm3, ex6, ex7, r20 ; nopa ; nopb ; nops ; nopxm vmac.f dm2, dm2, ex8, ex11, r20 ; nopa ; nopb ; vst bmll0, [p2], #64 ; nopxm nopv ; nopa ; nopb ; vst bmlh0, [p2], #64 ; nopxm vmac.f dm3, dm3, ex10, ex11, r20 ; nopa ; nopb ; vst bmhl0, [p2], #64 ; nopxm nopv ; nopa ; nopb ; vst bmhh0, [p2], #64 ; nopxm nopv ; nopa ; nopb ; vst bmll1, [p3], #64 ; nopxm nopv ; nopa ; nopb ; vst bmlh1, [p3], #64 ; nopxm nopv ; nopa ; nopb ; vst bmhl1, [p3], #64 ; nopxm nopv ; nopa ; nopb ; vst bmhh1, [p3], #64 ; nopxm nopv ; nopa ; nopb ; vst bmll2, [p2], #64 ; nopxm nopv ; nopa ; nopb ; vst bmlh2, [p2], #64 ; nopxm nopv ; nopa ; nopb ; vst bmhl2, [p2], #64 ; nopx ; mov p7, r23 nopv ; nopa ; nopb ; vst bmhh2, [p2], #64 ; ret lr nopv ; nopa ; nopb ; vst bmll3, [p3], #64 ; nopxm // Delay Slot 5 nopv ; nopa ; nopb ; vst bmlh3, [p3], #64 ; nopxm // Delay Slot 4 nopv ; nopa ; nopb ; vst bmhl3, [p3], #64 ; nopxm // Delay Slot 3 nopv ; nopa ; nopb ; vst bmhh3, [p3], #64 ; nopxm // Delay Slot 2 nopv ; nopa ; nopb ; nops ; nopxm // Delay Slot 1 .Lfunc_end2: .size tensor_kernel_m2xn2xk1_bfp16_bfp16_fp32, .Lfunc_end2-tensor_kernel_m2xn2xk1_bfp16_bfp16_fp32