libcを使用しないベアメタルのツールチェーンを使用しているcortex-m3ボードで作業しています。GCCの組み込み関数を腕で使用する
データをバイト単位でコピーするmemcpyを実装しましたが、遅すぎます。 GCCのマニュアルでは、__builtin_memcpyを提供していると私はそれを使用することに決めました。そこで、__builtin_memcpyを使った実装があります。
#include <stddef.h>
void *memcpy(void *dest, const void *src, size_t n)
{
return __builtin_memcpy(dest,src,n);
}
このコードをコンパイルすると、決して終了しない再帰関数になります。
$ arm-none-eabi-gcc -march=armv7-m -mcpu=cortex-m3 -mtune=cortex-m3 \
-O2 -ffreestanding -c memcpy.c -o memcpy.o
$ arm-none-eabi-objdump -d memcpy.o
memcpy.o: file format elf32-littlearm
Disassembly of section .text:
00000000 <memcpy>:
0: f7ff bffe b.w 0 <memcpy>
私は間違っていますか?コンパイラが生成したmemcpyのバージョンを使用するにはどうすればよいですか?
この質問は2年前に尋ねられ、既に回答があります。これらのタイプの質問を返さないようにしてください。 – Mic1780