- Investigating clang's handling of memory builtins and bulk memory code generation in test/bulkmem
- Using bulk memory (via builtins) for memset/memcpy/memcmp - Change build script to build wasm3 with optimizations on
This commit is contained in:
parent
d0ad92f0b8
commit
abb37537e9
2
build.sh
2
build.sh
|
@ -31,7 +31,7 @@ elif [ $target = wasm3 ] ; then
|
||||||
for file in ./ext/wasm3/source/*.c ; do
|
for file in ./ext/wasm3/source/*.c ; do
|
||||||
name=$(basename $file)
|
name=$(basename $file)
|
||||||
name=${name/.c/.o}
|
name=${name/.c/.o}
|
||||||
clang -c -g -foptimize-sibling-calls -Wno-extern-initializer -Dd_m3VerboseErrorMessages -o ./bin/obj/$name -I./ext/wasm3/source $file
|
clang -c -g -O2 -foptimize-sibling-calls -Wno-extern-initializer -Dd_m3VerboseErrorMessages -o ./bin/obj/$name -I./ext/wasm3/source $file
|
||||||
done
|
done
|
||||||
ar -rcs ./bin/libwasm3.a ./bin/obj/*.o
|
ar -rcs ./bin/libwasm3.a ./bin/obj/*.o
|
||||||
rm -rf ./bin/obj
|
rm -rf ./bin/obj
|
||||||
|
|
|
@ -18,6 +18,7 @@ wasmFlags="--target=wasm32 \
|
||||||
-Wl,--export-dynamic \
|
-Wl,--export-dynamic \
|
||||||
-g \
|
-g \
|
||||||
-O2 \
|
-O2 \
|
||||||
|
-mbulk-memory \
|
||||||
-D__ORCA__ \
|
-D__ORCA__ \
|
||||||
-isystem ../../cstdlib/include -I ../../sdk -I../../milepost/ext -I ../../milepost -I ../../milepost/src -I ../../milepost/src/util -I ../../milepost/src/platform -I../.."
|
-isystem ../../cstdlib/include -I ../../sdk -I../../milepost/ext -I ../../milepost -I ../../milepost/src -I ../../milepost/src/util -I ../../milepost/src/platform -I../.."
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
if [[ -x /usr/local/opt/llvm/bin/clang ]]; then
|
||||||
|
CLANG=/usr/local/opt/llvm/bin/clang
|
||||||
|
elif [[ -x /opt/homebrew/opt/llvm/bin/clang ]]; then
|
||||||
|
CLANG=/opt/homebrew/opt/llvm/bin/clang
|
||||||
|
else
|
||||||
|
echo "Could not find Homebrew clang; this script will probably not work."
|
||||||
|
CLANG=clang
|
||||||
|
fi
|
||||||
|
|
||||||
|
wasmFlags="--target=wasm32 \
|
||||||
|
--no-standard-libraries \
|
||||||
|
-Wl,--no-entry \
|
||||||
|
-Wl,--export-all \
|
||||||
|
-Wl,--allow-undefined \
|
||||||
|
-g \
|
||||||
|
-mbulk-memory"
|
||||||
|
|
||||||
|
$CLANG $wasmFlags -o ./module.wasm main.c
|
||||||
|
wasm2wat module.wasm > module.wat
|
|
@ -0,0 +1,38 @@
|
||||||
|
/************************************************************//**
|
||||||
|
*
|
||||||
|
* @file: main.c
|
||||||
|
* @author: Martin Fouilleul
|
||||||
|
* @date: 25/06/2023
|
||||||
|
*
|
||||||
|
*****************************************************************/
|
||||||
|
|
||||||
|
#include<stddef.h>
|
||||||
|
#include<stdint.h>
|
||||||
|
|
||||||
|
void* memset(void* b, int c, size_t n)
|
||||||
|
{
|
||||||
|
return(__builtin_memset(b, c, n));
|
||||||
|
}
|
||||||
|
|
||||||
|
void* memcpy(void* dst, const void* src, size_t n)
|
||||||
|
{
|
||||||
|
return(__builtin_memcpy(dst, src, n));
|
||||||
|
}
|
||||||
|
|
||||||
|
int _start()
|
||||||
|
{
|
||||||
|
uint8_t buffer[1024];
|
||||||
|
uint8_t dst[1024];
|
||||||
|
memset(buffer, 0xff, 1024);
|
||||||
|
if(buffer[32] != 0xff)
|
||||||
|
{
|
||||||
|
__builtin_unreachable();
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(dst, buffer, 1024);
|
||||||
|
if(dst[32] != 0xff)
|
||||||
|
{
|
||||||
|
__builtin_unreachable();
|
||||||
|
}
|
||||||
|
return(0);
|
||||||
|
}
|
Loading…
Reference in New Issue