summaryrefslogtreecommitdiff
path: root/sci-ml/ggml/files/ggml-0.24.0-const-fp16-loads.patch
blob: 051d179aeb0ce433a283841b99fcef0e3e7858bb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
Fix x86 FP16 fallback loads when F16C is disabled.

These helpers only read their inputs, including const quantized block data.
Accept const pointers in both AVX and AVX512 fallback implementations.
Give the repack-local eight-value loader a distinct name to avoid colliding
with the const overload already defined by simd-mappings.h for AVX.

--- a/src/ggml-cpu/arch/x86/repack.cpp
+++ b/src/ggml-cpu/arch/x86/repack.cpp
@@ -36,7 +36,7 @@
 #define GGML_F32Cx8_REARRANGE_LOAD(x, arrangeMask)     _mm256_cvtph_ps(_mm_shuffle_epi8(_mm_loadu_si128((const __m128i *) x), arrangeMask))
 #else
 #if defined(__AVX512F__)
-static inline __m512 __avx512_f32cx8x2_load(ggml_fp16_t *x, ggml_fp16_t *y) {
+static inline __m512 __avx512_f32cx8x2_load(const ggml_fp16_t *x, const ggml_fp16_t *y) {
     float tmp[16];
 
     for (int i = 0; i < 8; i++) {
@@ -64,7 +64,7 @@
     return _mm512_loadu_ps(tmp);
 }
 #endif
-static inline __m256 __avx_f32cx8_load(ggml_fp16_t *x) {
+static inline __m256 __avx_repack_f32cx8_load(const ggml_fp16_t *x) {
     float tmp[8];
 
     for (int i = 0; i < 8; i++) {
@@ -73,7 +73,7 @@
 
     return _mm256_loadu_ps(tmp);
 }
-static inline __m256 __avx_repeat_f32cx8_load(ggml_fp16_t *x) {
+static inline __m256 __avx_repeat_f32cx8_load(const ggml_fp16_t *x) {
     float tmp[8];
 
     for (int i = 0; i < 4; i++) {
@@ -83,7 +83,7 @@
 
     return _mm256_loadu_ps(tmp);
 }
-static inline __m256 __avx_rearranged_f32cx8_load(ggml_fp16_t *x, __m128i arrangeMask) {
+static inline __m256 __avx_rearranged_f32cx8_load(const ggml_fp16_t *x, __m128i arrangeMask) {
     uint16_t tmphalf[8];
     float tmp[8];
 
@@ -95,7 +95,7 @@
     return _mm256_loadu_ps(tmp);
 }
 
-#define GGML_F32Cx8_LOAD(x)     __avx_f32cx8_load(x)
+#define GGML_F32Cx8_LOAD(x)     __avx_repack_f32cx8_load(x)
 #define GGML_F32Cx8_REPEAT_LOAD(x, loadMask)     __avx_repeat_f32cx8_load(x)
 #define GGML_F32Cx8_REARRANGE_LOAD(x, arrangeMask)     __avx_rearranged_f32cx8_load(x, arrangeMask)
 #if defined(__AVX512F__)