diff --git a/ggml-phi-knc-dot_q5_K_q8_K.c b/ggml-phi-knc-dot_q5_K_q8_K.c index adbb55b4b..ab64198c0 100644 --- a/ggml-phi-knc-dot_q5_K_q8_K.c +++ b/ggml-phi-knc-dot_q5_K_q8_K.c @@ -70,12 +70,12 @@ inline static void GGML_I16x8_S_FMA_I32x8 (int16x8_t *src, int32_t scale, int32x "vbroadcastI32x4\t%[Z]%{uint8%},\t%%zmm1\n\t" // use an upscaling operator to clear our value. "vbroadcastI32x4\t%[Z]%{uint8%},\t%%zmm2\n\t" // use an upscaling operator to clear our value. "kmov\t%[M],\t%%k1\n\t" // we will only be working with 8 values at a time. le sigh. - "vmovaps\t\t%[SRC]%{int16%},\t%%zmm0%{%%k1%}\n\t" // load the item we will be summing from. upscale it from int16. + "vmovdqa32\t\t%[SRC]%{sint16%},\t%%zmm0%{%%k1%}\n\t" // load the item we will be summing from. upscale it from int16. "vbroadcastI32x4\t%[SCALE],\t%%zmm1\n\t" // load the item we will be multiplying by. - "vmovaps\t\t%[RES],\t%%zmm2%{%%k1%}\n\t" // load the item we will be summing onto. + "vmovdqa32\t\t%[RES],\t%%zmm2%{%%k1%}\n\t" // load the item we will be summing onto. "vpmadd231d\t%%zmm0,\t%%zmm1,\t%%zmm2%{%%k1%}\n\t" // perform our multiply-add. - "vmovaps\t\t%%zmm2,\t%[RES]%{%%k1}\n\t" // save the result. - : [RES] "+m" (*target) + "vmovdqa32\t\t%%zmm2,\t%[RES]%{%%k1}\n\t" // save the result. + : [RES] "+m" (*dest) : [Z] "m" (zero), [M] "r" (mask), [SRC] "m" (src), @@ -149,8 +149,7 @@ void ggml_vec_dot_q5_K_q8_K(int n, float * restrict s, size_t bs, const void * r for (int l = 0; l < 8; ++l) ((int32_t *)&aux32)[l] += scale * ((int16_t *)&aux16)[l]; q8 += 8; a += 8; for (int l = 0; l < 8; ++l) ((int16_t *)&aux16)[l] = q8[l] * a[l]; - GGML_I16x8_S_FMA_I32x8 (aux16, scale, aux32); - // for (int l = 0; l < 8; ++l) ((int32_t *)&aux32)[l] += scale * ((int16_t *)&aux16)[l]; + GGML_I16x8_S_FMA_I32x8 (&aux16, scale, &aux32); q8 += 8; a += 8; } const float d = GGML_FP16_TO_FP32(x[i].d) * y[i].d;