|
11 | 11 |
|
12 | 12 | #include "src/__support/CPP/cstddef.h"
|
13 | 13 | #include "src/__support/macros/config.h"
|
14 |
| -#include "src/string/memory_utils/inline_memcpy.h" |
15 |
| -#include "src/string/memory_utils/inline_memmove.h" |
16 | 14 |
|
17 | 15 | #include <stdint.h>
|
18 | 16 |
|
@@ -48,26 +46,23 @@ class ArrayGenericSize {
|
48 | 46 | using block_t = uint32_t;
|
49 | 47 | constexpr size_t BLOCK_SIZE = sizeof(block_t);
|
50 | 48 |
|
| 49 | + alignas(block_t) cpp::byte tmp_block[BLOCK_SIZE]; |
| 50 | + |
51 | 51 | cpp::byte *elem_i = get_internal(i);
|
52 | 52 | cpp::byte *elem_j = get_internal(j);
|
53 | 53 |
|
54 | 54 | const size_t elem_size_rem = elem_size % BLOCK_SIZE;
|
55 |
| - const block_t *elem_i_block_end = |
56 |
| - reinterpret_cast<block_t *>(elem_i + (elem_size - elem_size_rem)); |
57 |
| - |
58 |
| - block_t *elem_i_block = reinterpret_cast<block_t *>(elem_i); |
59 |
| - block_t *elem_j_block = reinterpret_cast<block_t *>(elem_j); |
60 |
| - |
61 |
| - while (elem_i_block != elem_i_block_end) { |
62 |
| - block_t tmp = *elem_i_block; |
63 |
| - *elem_i_block = *elem_j_block; |
64 |
| - *elem_j_block = tmp; |
65 |
| - elem_i_block += 1; |
66 |
| - elem_j_block += 1; |
| 55 | + const cpp::byte *elem_i_block_end = elem_i + (elem_size - elem_size_rem); |
| 56 | + |
| 57 | + while (elem_i != elem_i_block_end) { |
| 58 | + __builtin_memcpy(tmp_block, elem_i, BLOCK_SIZE); |
| 59 | + __builtin_memcpy(elem_i, elem_j, BLOCK_SIZE); |
| 60 | + __builtin_memcpy(elem_j, tmp_block, BLOCK_SIZE); |
| 61 | + |
| 62 | + elem_i += BLOCK_SIZE; |
| 63 | + elem_j += BLOCK_SIZE; |
67 | 64 | }
|
68 | 65 |
|
69 |
| - elem_i = reinterpret_cast<cpp::byte *>(elem_i_block); |
70 |
| - elem_j = reinterpret_cast<cpp::byte *>(elem_j_block); |
71 | 66 | for (size_t n = 0; n < elem_size_rem; ++n) {
|
72 | 67 | cpp::byte tmp = elem_i[n];
|
73 | 68 | elem_i[n] = elem_j[n];
|
@@ -118,9 +113,9 @@ template <size_t ELEM_SIZE> class ArrayFixedSize {
|
118 | 113 | cpp::byte *elem_i = get_internal(i);
|
119 | 114 | cpp::byte *elem_j = get_internal(j);
|
120 | 115 |
|
121 |
| - inline_memcpy(tmp, elem_i, ELEM_SIZE); |
122 |
| - inline_memmove(elem_i, elem_j, ELEM_SIZE); |
123 |
| - inline_memcpy(elem_j, tmp, ELEM_SIZE); |
| 116 | + __builtin_memcpy(tmp, elem_i, ELEM_SIZE); |
| 117 | + __builtin_memmove(elem_i, elem_j, ELEM_SIZE); |
| 118 | + __builtin_memcpy(elem_j, tmp, ELEM_SIZE); |
124 | 119 | }
|
125 | 120 |
|
126 | 121 | LIBC_INLINE size_t len() const { return array_len; }
|
|
0 commit comments