Skip to content

Commit cb33130

Browse files
committed
skip optimized memcpy/memset for small builds
This saves 100 bytes on trinket_m0 at the price of making many memset & memcpy calls slower.
1 parent 016242a commit cb33130

File tree

1 file changed

+10
-2
lines changed

1 file changed

+10
-2
lines changed

shared/libc/string0.c

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,16 @@
2828
#include <stddef.h>
2929
#include <string.h>
3030

31+
#include "py/mpconfig.h"
32+
3133
#ifndef likely
3234
#define likely(x) __builtin_expect((x), 1)
3335
#endif
3436

3537
#pragma GCC diagnostic push
3638
#pragma GCC diagnostic ignored "-Wcast-align"
3739
void *memcpy(void *dst, const void *src, size_t n) {
40+
#if CIRCUITPY_FULL_BUILD
3841
if (likely(!(((uintptr_t)dst) & 3) && !(((uintptr_t)src) & 3))) {
3942
// pointers aligned
4043
uint32_t *d = dst;
@@ -56,7 +59,9 @@ void *memcpy(void *dst, const void *src, size_t n) {
5659
// copy byte
5760
*((uint8_t*)d) = *((const uint8_t*)s);
5861
}
59-
} else {
62+
} else
63+
#endif
64+
{
6065
// unaligned access, copy bytes
6166
uint8_t *d = dst;
6267
const uint8_t *s = src;
@@ -93,6 +98,7 @@ void *memmove(void *dest, const void *src, size_t n) {
9398
}
9499

95100
void *memset(void *s, int c, size_t n) {
101+
#if CIRCUITPY_FULL_BUILD
96102
if (c == 0 && ((uintptr_t)s & 3) == 0) {
97103
// aligned store of 0
98104
uint32_t *s32 = s;
@@ -106,7 +112,9 @@ void *memset(void *s, int c, size_t n) {
106112
if (n & 1) {
107113
*((uint8_t*)s32) = 0;
108114
}
109-
} else {
115+
} else
116+
#endif
117+
{
110118
uint8_t *s2 = s;
111119
for (; n > 0; n--) {
112120
*s2++ = c;

0 commit comments

Comments
 (0)