61a4e653 | 25-Feb-2022 |
Michal Simek <michal.simek@xilinx.com> |
microblaze: Use simple memmove/memcpy implementation from lib/string.c
This is based on previous commit ("microblaze: Use simple memset implementation from lib/string.c") where generic memset implem
microblaze: Use simple memmove/memcpy implementation from lib/string.c
This is based on previous commit ("microblaze: Use simple memset implementation from lib/string.c") where generic memset implementation is used when OPT_LIB_FUNCTION is not defined. The same change can be done for memset/memcpy implementation where doesn't make sense to have generic implementation in architecture code.
Signed-off-by: Michal Simek <michal.simek@xilinx.com> Link: https://lore.kernel.org/r/1f5cfc026a8a458f3e3134ab80f65bd4ac7e3e8e.1645797329.git.michal.simek@xilinx.com
show more ...
|
95fee37b | 25-Feb-2022 |
Michal Simek <michal.simek@xilinx.com> |
microblaze: Do loop unrolling for optimized memset implementation
Align implementation with memcpy and memmove where also remaining bytes are copied via final switch case instead of using simple imp
microblaze: Do loop unrolling for optimized memset implementation
Align implementation with memcpy and memmove where also remaining bytes are copied via final switch case instead of using simple implementations which loop. But this alignment has much stronger reason and definitely aligning implementation is not the key point here. It is just good to have in mind that the same technique is used already there.
In GCC 10, now -ftree-loop-distribute-patterns optimization is on at O2. This optimization causes GCC to convert the while loop in memset.c into a call to memset. So this optimization is transforming a loop in a memset/memcpy into a call to the function itself. This makes the memset implementation as recursive. "-freestanding" option will disable the built-in library function but it has been added in generic library implementation.
In default microblaze kernel defconfig we have CONFIG_OPT_LIB_FUNCTION enabled so it will always pick optimized version of memset which is target specific so we are replacing the while() loop with switch case to avoid recursive memset call.
Issue with freestanding was already discussed in connection to commit 33d0f96ffd73 ("lib/string.c: Use freestanding environment") and also this is topic in glibc and gcc. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56888 http://patchwork.ozlabs.org/project/glibc/patch/20191121021040.14554-1-sandra@codesourcery.com/
Signed-off-by: Michal Simek <michal.simek@xilinx.com> Signed-off-by: Mahesh Bodapati <mbodapat@xilinx.com> Link: https://lore.kernel.org/r/10a432e269a6d3349cf458e4f5792522779cba0d.1645797329.git.michal.simek@xilinx.com
show more ...
|
47de4477 | 20-Apr-2021 |
Randy Dunlap <rdunlap@infradead.org> |
microblaze: add 'fallthrough' to memcpy/memset/memmove
Fix "fallthrough" warnings in microblaze memcpy/memset/memmove library functions.
CC arch/microblaze/lib/memcpy.o ../arch/microblaze/li
microblaze: add 'fallthrough' to memcpy/memset/memmove
Fix "fallthrough" warnings in microblaze memcpy/memset/memmove library functions.
CC arch/microblaze/lib/memcpy.o ../arch/microblaze/lib/memcpy.c: In function 'memcpy': ../arch/microblaze/lib/memcpy.c:70:4: warning: this statement may fall through [-Wimplicit-fallthrough=] 70 | --c; ../arch/microblaze/lib/memcpy.c:71:3: note: here 71 | case 2: ../arch/microblaze/lib/memcpy.c:73:4: warning: this statement may fall through [-Wimplicit-fallthrough=] 73 | --c; ../arch/microblaze/lib/memcpy.c:74:3: note: here 74 | case 3: ../arch/microblaze/lib/memcpy.c:178:10: warning: this statement may fall through [-Wimplicit-fallthrough=] 178 | *dst++ = *src++; ../arch/microblaze/lib/memcpy.c:179:2: note: here 179 | case 2: ../arch/microblaze/lib/memcpy.c:180:10: warning: this statement may fall through [-Wimplicit-fallthrough=] 180 | *dst++ = *src++; ../arch/microblaze/lib/memcpy.c:181:2: note: here 181 | case 1: CC arch/microblaze/lib/memset.o ../arch/microblaze/lib/memset.c: In function 'memset': ../arch/microblaze/lib/memset.c:71:4: warning: this statement may fall through [-Wimplicit-fallthrough=] 71 | --n; ../arch/microblaze/lib/memset.c:72:3: note: here 72 | case 2: ../arch/microblaze/lib/memset.c:74:4: warning: this statement may fall through [-Wimplicit-fallthrough=] 74 | --n; ../arch/microblaze/lib/memset.c:75:3: note: here 75 | case 3: CC arch/microblaze/lib/memmove.o ../arch/microblaze/lib/memmove.c: In function 'memmove': ../arch/microblaze/lib/memmove.c:92:4: warning: this statement may fall through [-Wimplicit-fallthrough=] 92 | --c; ../arch/microblaze/lib/memmove.c:93:3: note: here 93 | case 2: ../arch/microblaze/lib/memmove.c:95:4: warning: this statement may fall through [-Wimplicit-fallthrough=] 95 | --c; ../arch/microblaze/lib/memmove.c:96:3: note: here 96 | case 1: ../arch/microblaze/lib/memmove.c:203:10: warning: this statement may fall through [-Wimplicit-fallthrough=] 203 | *--dst = *--src; ../arch/microblaze/lib/memmove.c:204:2: note: here 204 | case 3: ../arch/microblaze/lib/memmove.c:205:10: warning: this statement may fall through [-Wimplicit-fallthrough=] 205 | *--dst = *--src; ../arch/microblaze/lib/memmove.c:206:2: note: here 206 | case 2: ../arch/microblaze/lib/memmove.c:207:10: warning: this statement may fall through [-Wimplicit-fallthrough=] 207 | *--dst = *--src; ../arch/microblaze/lib/memmove.c:208:2: note: here 208 | case 1:
Signed-off-by: Randy Dunlap <rdunlap@infradead.org> Cc: Michal Simek <monstr@monstr.eu> Link: https://lore.kernel.org/r/20210421022041.10689-1-rdunlap@infradead.org Signed-off-by: Michal Simek <michal.simek@xilinx.com>
show more ...
|
9f2a45bd | 13-Dec-2012 |
Michal Simek <michal.simek@xilinx.com> |
microblaze: lib: Add lib function declarations
Function declarations fix these sparse warnings: arch/microblaze/lib/ashldi3.c:5:11: warning: symbol '__ashldi3' was not declared. Should it be static
microblaze: lib: Add lib function declarations
Function declarations fix these sparse warnings: arch/microblaze/lib/ashldi3.c:5:11: warning: symbol '__ashldi3' was not declared. Should it be static? arch/microblaze/lib/muldi3.c:50:8: warning: symbol '__muldi3' was not declared. Should it be static? arch/microblaze/lib/cmpdi2.c:5:11: warning: symbol '__cmpdi2' was not declared. Should it be static? arch/microblaze/lib/lshrdi3.c:5:11: warning: symbol '__lshrdi3' was not declared. Should it be static? arch/microblaze/lib/ashrdi3.c:5:11: warning: symbol '__ashrdi3' was not declared. Should it be static? arch/microblaze/lib/ucmpdi2.c:5:11: warning: symbol '__ucmpdi2' was not declared. Should it be static?
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
show more ...
|