Skip to content

Commit e8ebab4

Browse files
Get rid of additional memcpy calls
1 parent 0682209 commit e8ebab4

File tree

2 files changed

+6
-24
lines changed

2 files changed

+6
-24
lines changed

ggml/src/ggml.c

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -51,24 +51,15 @@
5151
#define convert_from_le64(x)
5252
#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
5353
static inline void convert_from_le16(void * value) {
54-
uint16_t temp;
55-
memcpy(&temp, value, sizeof(uint16_t));
56-
temp = le16toh(temp);
57-
memcpy(value, &temp, sizeof(uint16_t));
54+
*((uint16_t*)value) = le16toh(*((uint16_t*)value));
5855
}
5956

6057
static inline void convert_from_le32(void * value) {
61-
uint32_t temp;
62-
memcpy(&temp, value, sizeof(uint32_t));
63-
temp = le32toh(temp);
64-
memcpy(value, &temp, sizeof(uint32_t));
58+
*((uint32_t*)value) = le32toh(*((uint32_t*)value));
6559
}
6660

6761
static inline void convert_from_le64(void * value) {
68-
uint64_t temp;
69-
memcpy(&temp, value, sizeof(uint64_t));
70-
temp = le64toh(temp);
71-
memcpy(value, &temp, sizeof(uint64_t));
62+
*((uint64_t*)value) = le64toh(*((uint64_t*)value));
7263
}
7364
#else
7465
#error Unexpected or undefined __BYTE_ORDER__

ggml/src/gguf.cpp

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -36,26 +36,17 @@ static inline void convert_from_le(T * /*value*/)
3636

3737
template <typename T, std::enable_if_t<sizeof(T) == 2, int> = 0>
3838
static inline void convert_from_le(T * value) {
39-
uint16_t temp;
40-
memcpy(&temp, value, sizeof(uint16_t));
41-
temp = le16toh(temp);
42-
memcpy(value, &temp, sizeof(uint16_t));
39+
*((uint16_t*)value) = le16toh(*((uint16_t*)value));
4340
}
4441

4542
template <typename T, std::enable_if_t<sizeof(T) == 4, int> = 0>
4643
static inline void convert_from_le(T * value) {
47-
uint32_t temp;
48-
memcpy(&temp, value, sizeof(uint32_t));
49-
temp = le32toh(temp);
50-
memcpy(value, &temp, sizeof(uint32_t));
44+
*((uint32_t*)value) = le32toh(*((uint32_t*)value));
5145
}
5246

5347
template <typename T, std::enable_if_t<sizeof(T) == 8, int> = 0>
5448
static inline void convert_from_le(T * value) {
55-
uint64_t temp;
56-
memcpy(&temp, value, sizeof(uint64_t));
57-
temp = le64toh(temp);
58-
memcpy(value, &temp, sizeof(uint64_t));
49+
*((uint64_t*)value) = le64toh(*((uint64_t*)value));
5950
}
6051
#else
6152
#error Unexpected or undefined __BYTE_ORDER__

0 commit comments

Comments
 (0)