Commit 36ee3caf7 for llama.cpp

commit 36ee3caf7aa2dcb0210bedab1b61ee9f269765d3
Author: Georgi Gerganov <ggerganov@gmail.com>
Date:   Tue Nov 3 10:41:24 2026 +0200

    metal : fix cpy kernel for dst non-contiguous in dim 0 (#31581)

    kernel_cpy_t_t indexed the dst innermost dim with an implicit element-size
    stride instead of args.nb0, so cpy into a permuted view (nb0 != type size)
    wrote the wrong addresses. caught by the new test-backend-ops cpy case with
    permute_dst = {1, 0, 2, 3} from #31446. addressing is unchanged when dst is
    contiguous in dim 0.

    Assisted-by: dsh:llama.cpp/ggml-org/GLM-5.3-Flash-GGUF (Mac Studio, M5 Ultra, 256GB)

diff --git a/ggml/src/ggml-metal/kernels/quantize.metal b/ggml/src/ggml-metal/kernels/quantize.metal
index 73679b9ab..663e47d5f 100644
--- a/ggml/src/ggml-metal/kernels/quantize.metal
+++ b/ggml/src/ggml-metal/kernels/quantize.metal
@@ -26,11 +26,11 @@ kernel void kernel_cpy_t_t(
     const int32_t i1 = (n - i3*args.ne2*args.ne1*args.ne0 - i2*args.ne1*args.ne0)/args.ne0;
     const int32_t i0 = (n - i3*args.ne2*args.ne1*args.ne0 - i2*args.ne1*args.ne0 - i1*args.ne0);

-    device T1 * dst_data = (device T1 *) (dst + i3*args.nb3 + i2*args.nb2 + i1*args.nb1 + i0*args.nb0);
+    device char * dst_data = dst + i3*args.nb3 + i2*args.nb2 + i1*args.nb1 + i0*args.nb0;

     for (int32_t i00 = iw0*ntg[0] + tpitg.x; i00 < args.ne00;) {
         device const T0 * src = (device T0 *)(src0 + i03*args.nb03 + i02*args.nb02 + i01*args.nb01 + i00*args.nb00);
-        dst_data[i00] = (T1) src[0];
+        *(device T1 *)(dst_data + i00*args.nb0) = (T1) src[0];
         break;
     }
 }