.macro dotprod_iter_d_n op, d, n .irp m, 0, 8, 15 \op d\d, d\n, d\m \op d\d, d\n, d\m[0] .endr .endm .macro dotprod_iter_d op, d .irp n, 2, 15, 30 dotprod_iter_d_n \op, \d, \n .endr .endm .macro dotprod_iter op .irp d, 0, 7, 16, 31 dotprod_iter_d \op, \d .endr .endm .macro dotprod_q_iter_d_n op, d, n .irp m, 0, 7, 15 \op q\d, q\n, q\m \op q\d, q\n, d\m[1] .endr .endm .macro dotprod_q_iter_d op, d .irp n, 2, 3, 14 dotprod_q_iter_d_n \op, \d, \n .endr .endm .macro dotprod_q_iter op .irp d, 0, 1, 6, 13 dotprod_q_iter_d \op, \d .endr .endm .text func: dotprod_iter vudot.u8 dotprod_iter vsdot.s8 dotprod_q_iter vudot.u8 dotprod_q_iter vsdot.s8