Fix codegen issues for 32-bit targets #477

Merged
sb10q merged 1 commits from fix/32bit-codegen-issues into master 2024-08-17 17:37:21 +08:00
2 changed files with 33 additions and 12 deletions
Showing only changes of commit 8c5ba37d09 - Show all commits

View File

@ -14,12 +14,21 @@ while [ $# -gt 1 ]; do
done done
demo="$1" demo="$1"
echo -n "Checking $demo... " echo "### Checking $demo..."
./interpret_demo.py "$demo" > interpreted.log
./run_demo.sh --out run.log "${nac3args[@]}" "$demo"
./run_demo.sh --lli --out run_lli.log "${nac3args[@]}" "$demo"
diff -Nau interpreted.log run.log
diff -Nau interpreted.log run_lli.log
echo "ok"
rm -f interpreted.log run.log run_lli.log # Get reference output
echo ">>>>>> Running $demo with the Python interpreter"
./interpret_demo.py "$demo" > interpreted.log
echo "...... Trying NAC3's 32-bit code generator output"
./run_demo.sh -m32 --out run_32.log "${nac3args[@]}" "$demo"
Outdated
Review

Won't this break the automatic tests? They don't have the 686 packages unless the flake is updated.

Won't this break the automatic tests? They don't have the 686 packages unless the flake is updated.

nix build -L .#packages.x86_64-linux.nac3artiq works with only (pkgs.wrapClangMulti llvmPackages_14.clang) changed. I don't actually know why though.

`nix build -L .#packages.x86_64-linux.nac3artiq` works with only `(pkgs.wrapClangMulti llvmPackages_14.clang)` changed. I don't actually know why though.
diff -Nau interpreted.log run_32.log
echo "...... Trying NAC3's 64-bit code generator output"
./run_demo.sh --out run_64.log "${nac3args[@]}" "$demo"
diff -Nau interpreted.log run_64.log
echo "...... OK"
rm -f interpreted.log \
run_32.log run_64.log

View File

@ -11,7 +11,7 @@ declare -a nac3args
while [ $# -ge 1 ]; do while [ $# -ge 1 ]; do
case "$1" in case "$1" in
--help) --help)
echo "Usage: run_demo.sh [--help] [--out OUTFILE] [--debug] -- [NAC3ARGS...]" echo "Usage: run_demo.sh [--help] [--out OUTFILE] [--debug] [-m32] -- [NAC3ARGS...]"
Review

call it -i386
-m32 is generic, this one is not.

call it ``-i386`` ``-m32`` is generic, this one is not.
exit exit
;; ;;
--out) --out)
@ -21,6 +21,9 @@ while [ $# -ge 1 ]; do
--debug) --debug)
debug=1 debug=1
;; ;;
-m32)
m32=1
;;
--) --)
shift shift
break break
@ -48,10 +51,19 @@ fi
rm -f ./*.o ./*.bc demo rm -f ./*.o ./*.bc demo
if [ -z "$m32" ]; then
$nac3standalone "${nac3args[@]}" $nac3standalone "${nac3args[@]}"
clang -c -std=gnu11 -Wall -Wextra -O3 -o demo.o demo.c clang -c -std=gnu11 -Wall -Wextra -O3 -o demo.o demo.c
clang -lm -o demo module.o demo.o clang -lm -Wl,--no-warn-search-mismatch -o demo module.o demo.o
else
# Enable SSE2 to avoid rounding errors with X87's 80-bit fp precision computations
$nac3standalone --triple i386-pc-linux-gnu --target-features +sse2 "${nac3args[@]}"
clang -m32 -c -std=gnu11 -Wall -Wextra -O3 -msse2 -o demo.o demo.c
clang -m32 -lm -Wl,--no-warn-search-mismatch -o demo module.o demo.o
fi
if [ -z "$outfile" ]; then if [ -z "$outfile" ]; then
./demo ./demo