Skip to content

Commit 13c4bb7

Browse files
committed
Merge branch 'master' of jsoftware.com:jsource
Try to sidestep integer overflow
2 parents 1d62ae5 + 317218b commit 13c4bb7

27 files changed

Lines changed: 411 additions & 283 deletions

jsrc/io.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -924,6 +924,8 @@ JS _Initializer(void* hDLL){
924924
#else
925925
getsopath(sopath);
926926
#endif
927+
// extern int getsize_xdic_DIC(void);
928+
// fprintf(stderr,"sizeof(DIC) "FMTI" \n",(I)getsize_xdic_DIC());
927929
JS jt=jvmreservea(sizeof(JST),__builtin_ctz(JTALIGNBDY));
928930
if(!jt)R 0;
929931
I sz=offsetof(JST,threaddata[1]); // #relevant bytes: just JS and the first JT. This makes MDTHREAD() valid

jsrc/j.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,8 +173,10 @@ I4 charfill=0x20; // SP, used for filling LIT/C2T/C4T
173173
#define hw "avx512"
174174
#elif C_AVX2
175175
#define hw "avx2"
176-
#elif __arm64__ || __aarch64__
176+
#elif __arm64__ || __aarch64__ || __arm__
177177
#define hw "arm"
178+
#elif defined(__wasm__)
179+
#define hw "wasm"
178180
#else
179181
#define hw ""
180182
#endif

jsrc/xdic.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,8 +149,14 @@ typedef struct ADic {
149149
#if 7==NORMAH
150150
_Static_assert(sizeof(DIC)==32*SZI,"DIC not 32 Is");
151151
#else
152+
#if SY_64
152153
_Static_assert(sizeof(DIC)==33*SZI,"DIC not 33 Is");
154+
#else
155+
_Static_assert(sizeof(DIC)==34*SZI,"DIC not 34 Is");
156+
#endif
153157
#endif
158+
int getsize_xdic_DIC(void){return (int)sizeof(DIC);} // temp for debugging
159+
154160
#define ST UI4 // type of hash slot
155161
#define STX UI8 // type of index to hash slot, which is + for found, 1s-comp for not found
156162
#define STN 4 // width of hash slot

make2/build_jamalgam.sh

Lines changed: 49 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@ set -e
44
cd "$(dirname "$0")"
55
echo "entering $(pwd)"
66

7-
jplatform64=$(./jplatform64.sh)
7+
unameop=$(uname -o || uname -s)
8+
eval "$(./jplatform64.sh)"
9+
jplatform64="$jplatform"/"$j64x"
810

911
if [ "" = "$CFLAGS" ]; then
1012
# OPTLEVEL will be merged back into CFLAGS, further down
@@ -88,16 +90,22 @@ case "$jplatform64" in
8890
macmin="-arch x86_64 -mmacosx-version-min=10.6"
8991
fi
9092
;;
91-
openbsd/*) make=gmake ;;
93+
openbsd/*)
94+
NO_SHA_ASM=1
95+
make=gmake
96+
;;
9297
freebsd/*) make=gmake ;;
9398
wasm*)
9499
USE_OPENMP=0
95100
LDTHREAD=" -pthread "
96101
NO_SHA_ASM=1
97-
USE_OPENMP=0
98102
USE_PYXES=0
99103
;;
100104
esac
105+
case "$j64x" in
106+
j32*) USE_PYXES="${USE_PYXES:=0}" ;;
107+
*) USE_PYXES="${USE_PYXES:=1}" ;;
108+
esac
101109
make="${make:=make}"
102110

103111
CC=${CC-"$(which cc clang gcc 2> /dev/null | head -n1 | xargs basename)"}
@@ -243,31 +251,34 @@ if [ $USE_BOXEDSPARSE -eq 1 ]; then
243251
common="$common -DBOXEDSPARSE"
244252
fi
245253

246-
USE_PYXES="${USE_PYXES:=1}"
247254
if [ $USE_PYXES -eq 1 ]; then
248-
case "$jplatform64" in
249-
windows/j32*)
250-
common="$common -DPYXES=1 -I../../../../pthreads4w/include"
251-
LDTHREAD=" ../../../../pthreads4w/lib/pthreadVC3-w32.lib "
252-
;;
253-
windows/j64arm)
254-
common="$common -DPYXES=1 -I../../../../pthreads4w/include"
255-
LDTHREAD=" ../../../../pthreads4w/lib/pthreadVC3-arm64.lib "
256-
;;
257-
windows/*)
258-
common="$common -DPYXES=1 -I../../../../pthreads4w/include"
259-
LDTHREAD=" ../../../../pthreads4w/lib/pthreadVC3.lib "
260-
;;
261-
*)
262-
common="$common -DPYXES=1"
263-
LDTHREAD=" -pthread "
264-
;;
255+
case "$jplatform64" in
256+
windows/j32*)
257+
common="$common -DPYXES=1 -I../../../../pthreads4w/include"
258+
LDTHREAD=" ../../../../pthreads4w/lib/pthreadVC3-w32.lib "
259+
;;
260+
windows/j64arm)
261+
common="$common -DPYXES=1 -I../../../../pthreads4w/include"
262+
LDTHREAD=" ../../../../pthreads4w/lib/pthreadVC3-arm64.lib "
263+
;;
264+
windows/*)
265+
common="$common -DPYXES=1 -I../../../../pthreads4w/include"
266+
LDTHREAD=" ../../../../pthreads4w/lib/pthreadVC3.lib "
267+
;;
268+
*)
269+
common="$common -DPYXES=1"
270+
LDTHREAD=" -pthread "
271+
;;
272+
esac
273+
case "$j64x" in
274+
j32*) USE_NORMAH8=1 ;;
275+
*) USE_NORMAH8="${USE_NORMAH8:=0}" ;;
265276
esac
266277
else
267278
common="$common -DPYXES=0"
279+
USE_NORMAH8="${USE_NORMAH8:=0}"
268280
fi
269281

270-
USE_NORMAH8="${USE_NORMAH8:=0}"
271282
if [ $USE_NORMAH8 -eq 1 ]; then
272283
common="$common -DNORMAH8=1"
273284
else
@@ -759,7 +770,7 @@ case $jplatform64 in
759770
TARGET=jamalgam
760771
# faster, but sse2 not available for 32-bit amd cpu
761772
# sse does not support mfpmath=sse in 32-bit gcc
762-
CFLAGS="$common -Wno-psabi -Wno-incompatible-pointer-types $DOLECOM -m32 -msse2 -mfpmath=sse -D_FILE_OFFSET_BITS=64 -D_WIN32 "
773+
CFLAGS="$common -Wno-psabi -Wno-incompatible-pointer-types -m32 -msse2 -mfpmath=sse -fno-finite-math-only $DOLECOM -D_FILE_OFFSET_BITS=64 -D_WIN32 "
763774
# slower, use 387 fpu and truncate extra precision
764775
# CFLAGS="$common -m32 -ffloat-store "
765776
CPPFLAGS="-fPIC $OPTLEVEL -falign-functions=4 -fvisibility=hidden -Wno-psabi $DOLECOM -m32 -msse2 -mfpmath=sse -D_FILE_OFFSET_BITS=64 -D_JDLL -D_WIN32 "
@@ -786,7 +797,7 @@ case $jplatform64 in
786797
fi
787798
WINDRES="${WINDRES:=windres}"
788799
TARGET=j.dll
789-
CFLAGS="$common -march=armv8-a+crc -Wno-incompatible-pointer-types -DNO_SHA_ASM $DOLECOM -D_FILE_OFFSET_BITS=64 -D_JDLL -D_WIN32 -D_WIN64 "
800+
CFLAGS="$common -march=armv8-a+crc -Wno-incompatible-pointer-types -fno-finite-math-only -DNO_SHA_ASM $DOLECOM -D_FILE_OFFSET_BITS=64 -D_JDLL -D_WIN32 -D_WIN64 "
790801
CPPFLAGS="-fPIC $OPTLEVEL -falign-functions=4 -fvisibility=hidden $DOLECOM -D_FILE_OFFSET_BITS=64 -D_JDLL -D_WIN32 -D_WIN64 "
791802
LDFLAGS=" -shared -Wl,--enable-stdcall-fixup -lm -static-libgcc -static-libstdc++ -lole32 -ladvapi32 -loleaut32 -lsynchronization -luuid $LDTHREAD $LDOPENMP "
792803
if [ $jolecom -eq 1 ]; then
@@ -811,7 +822,7 @@ case $jplatform64 in
811822
fi
812823
WINDRES="${WINDRES:=windres}"
813824
TARGET=jamalgam
814-
CFLAGS="$common -Wno-incompatible-pointer-types $DOLECOM -DC_AVX2=1 -DC_AVX512=1 -D_FILE_OFFSET_BITS=64 -D_WIN32 -D_WIN64 "
825+
CFLAGS="$common -Wno-incompatible-pointer-types -fno-finite-math-only $DOLECOM -DC_AVX2=1 -DC_AVX512=1 -D_FILE_OFFSET_BITS=64 -D_WIN32 -D_WIN64 "
815826
CPPFLAGS="-fPIC $OPTLEVEL -falign-functions=4 -fvisibility=hidden $DOLECOM -DC_AVX2=1 -DC_AVX512=1 -D_FILE_OFFSET_BITS=64 -D_JDLL -D_WIN32 -D_WIN64 "
816827
LDFLAGS=" -Wl,--enable-stdcall-fixup -lm -static-libgcc -static-libstdc++ -lole32 -ladvapi32 -loleaut32 -lsynchronization -luuid $LDTHREAD $LDOPENMP "
817828
CFLAGS_SIMD=" -march=skylake-avx512 -mtune=skylake-avx512 -msse4.1 -msse4.2 -mavx2 -mfma -mbmi -mbmi2 -mlzcnt -mmovbe -mpopcnt -mno-vzeroupper "
@@ -838,7 +849,7 @@ case $jplatform64 in
838849
fi
839850
WINDRES="${WINDRES:=windres}"
840851
TARGET=jamalgam
841-
CFLAGS="$common -Wno-incompatible-pointer-types $DOLECOM -DC_AVX2=1 -D_FILE_OFFSET_BITS=64 -D_WIN32 -D_WIN64 "
852+
CFLAGS="$common -Wno-incompatible-pointer-types -fno-finite-math-only $DOLECOM -DC_AVX2=1 -D_FILE_OFFSET_BITS=64 -D_WIN32 -D_WIN64 "
842853
CPPFLAGS="-fPIC $OPTLEVEL -falign-functions=4 -fvisibility=hidden $DOLECOM -DC_AVX2=1 -D_FILE_OFFSET_BITS=64 -D_JDLL -D_WIN32 -D_WIN64 "
843854
LDFLAGS=" -Wl,--enable-stdcall-fixup -lm -static-libgcc -static-libstdc++ -lole32 -ladvapi32 -loleaut32 -lsynchronization -luuid $LDTHREAD $LDOPENMP "
844855
CFLAGS_SIMD=" -march=skylake -mtune=skylake -msse4.1 -msse4.2 -mavx2 -mfma -mbmi -mbmi2 -mlzcnt -mmovbe -mpopcnt -mno-vzeroupper "
@@ -865,7 +876,7 @@ case $jplatform64 in
865876
fi
866877
WINDRES="${WINDRES:=windres}"
867878
TARGET=jamalgam
868-
CFLAGS="$common -Wno-incompatible-pointer-types -msse3 $DOLECOM -D_FILE_OFFSET_BITS=64 -D_WIN32 -D_WIN64 "
879+
CFLAGS="$common -Wno-incompatible-pointer-types -msse3 -fno-finite-math-only $DOLECOM -D_FILE_OFFSET_BITS=64 -D_WIN32 -D_WIN64 "
869880
CPPFLAGS="-fPIC $OPTLEVEL -falign-functions=4 -fvisibility=hidden $DOLECOM -D_FILE_OFFSET_BITS=64 -D_JDLL -D_WIN32 -D_WIN64 "
870881
LDFLAGS=" -Wl,--enable-stdcall-fixup -lm -static-libgcc -static-libstdc++ -lole32 -ladvapi32 -loleaut32 -lsynchronization -luuid $LDTHREAD $LDOPENMP "
871882
if [ $jolecom -eq 1 ]; then
@@ -918,14 +929,20 @@ fi
918929
mkdir -p ../bin/$jplatform64
919930
mkdir -p obj/$jplatform64/
920931
cp makefile-jamalgam obj/$jplatform64/.
921-
export BACKTRACE_OBJS CFLAGS CPPFLAGS LDFLAGS TARGET CFLAGS_SIMD GASM_FLAGS NASM_FLAGS FLAGS_BASE64 DLLOBJS LIBJDEF LIBJRES OBJS_BASE64 OBJS_FMA OBJS_AESNI OBJS_AESARM OBJS_ASM SRC_ASM OBJSLN jplatform64 WINDRES
932+
export BACKTRACE_OBJS CFLAGS CPPFLAGS LDFLAGS TARGET CFLAGS_SIMD GASM_FLAGS NASM_FLAGS FLAGS_BASE64 DLLOBJS LIBJDEF LIBJRES OBJS_BASE64 OBJS_FMA OBJS_AESNI OBJS_AESARM OBJS_ASM SRC_ASM OBJSLN jplatform j64x jplatform64 WINDRES
922933
cd obj/$jplatform64/
923934
if [ "x$MAKEFLAGS" = x'' ]; then
924-
if [ $(uname) = Linux ]; then par=$(nproc); else par=$(sysctl -n hw.ncpu); fi
925-
$make -j$par -f makefile-jamalgam
926-
else
927-
$make -f makefile-jamalgam
935+
if ([ "$unameop" = "Linux" ] || [ "$unameop" = "GNU/Linux" ]); then
936+
par=$(nproc)
937+
elif [ "$unameop" = "Darwin" ] || [ "$unameop" = "OpenBSD" ] || [ "$unameop" = "FreeBSD" ]; then
938+
par=$(sysctl -n hw.ncpu)
939+
else
940+
par=2
941+
fi
942+
export MAKEFLAGS=-j$par
928943
fi
944+
echo "MAKEFLAGS=$MAKEFLAGS"
945+
$make -f makefile-jamalgam
929946
retval=$?
930947
cd -
931948
exit $retval

make2/build_jconsole.sh

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@ set -e
44
cd "$(dirname "$0")"
55
echo "entering $(pwd)"
66

7-
jplatform64=$(./jplatform64.sh)
7+
unameop=$(uname -o || uname -s)
8+
eval "$(./jplatform64.sh)"
9+
jplatform64="$jplatform"/"$j64x"
810

911
if [ "" = "$CFLAGS" ]; then
1012
# OPTLEVEL will be merged back into CFLAGS, further down
@@ -90,6 +92,11 @@ case "$jplatform64" in
9092
;;
9193
openbsd/*) make=gmake ;;
9294
freebsd/*) make=gmake ;;
95+
wasm*) USE_PYXES=0 ;;
96+
esac
97+
case "$j64x" in
98+
j32*) USE_PYXES="${USE_PYXES:=0}" ;;
99+
*) USE_PYXES="${USE_PYXES:=1}" ;;
93100
esac
94101
make="${make:=make}"
95102

@@ -167,11 +174,22 @@ else
167174
common="$common -DEMU_AVX2=0"
168175
fi
169176

170-
USE_PYXES="${USE_PYXES:=1}"
171177
if [ $USE_PYXES -eq 1 ]; then
172178
common="$common -DPYXES=1"
179+
case "$j64x" in
180+
j32*) USE_NORMAH8=1 ;;
181+
*) USE_NORMAH8="${USE_NORMAH8:=0}" ;;
182+
esac
173183
else
174184
common="$common -DPYXES=0"
185+
USE_NORMAH8="${USE_NORMAH8:=0}"
186+
fi
187+
188+
USE_NORMAH8="${USE_NORMAH8:=0}"
189+
if [ $USE_NORMAH8 -eq 1 ]; then
190+
common="$common -DNORMAH8=1"
191+
else
192+
common="$common -DNORMAH8=0"
175193
fi
176194

177195
if [ "${USE_GMP_H:=1}" -eq 1 ]; then
@@ -322,14 +340,20 @@ fi
322340
mkdir -p ../bin/$jplatform64
323341
mkdir -p obj/$jplatform64
324342
cp makefile-jconsole obj/$jplatform64/.
325-
export AR BACKTRACE_OBJS CC CFLAGS LDFLAGS TARGET OBJSLN jplatform64
343+
export AR BACKTRACE_OBJS CC CFLAGS LDFLAGS TARGET OBJSLN jplatform j64x jplatform64
326344
cd obj/$jplatform64/
327345
if [ "x$MAKEFLAGS" = x'' ]; then
328-
if [ $(uname) = Linux ]; then par=$(nproc); else par=$(sysctl -n hw.ncpu); fi
329-
$make -j$par -f makefile-jconsole all
330-
else
331-
$make -f makefile-jconsole all
346+
if ([ "$unameop" = "Linux" ] || [ "$unameop" = "GNU/Linux" ]); then
347+
par=$(nproc)
348+
elif [ "$unameop" = "Darwin" ] || [ "$unameop" = "OpenBSD" ] || [ "$unameop" = "FreeBSD" ]; then
349+
par=$(sysctl -n hw.ncpu)
350+
else
351+
par=2
352+
fi
353+
export MAKEFLAGS=-j$par
332354
fi
355+
echo "MAKEFLAGS=$MAKEFLAGS"
356+
$make -f makefile-jconsole all
333357
retval=$?
334358
cd -
335359
exit $retval

make2/build_jnative.sh

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@ set -e
44
cd "$(dirname "$0")"
55
echo "entering $(pwd)"
66

7-
jplatform64=$(./jplatform64.sh)
7+
unameop=$(uname -o || uname -s)
8+
eval "$(./jplatform64.sh)"
9+
jplatform64="$jplatform"/"$j64x"
810

911
if [ "" = "$CFLAGS" ]; then
1012
# OPTLEVEL will be merged back into CFLAGS, further down
@@ -260,14 +262,20 @@ echo "CFLAGS=$CFLAGS"
260262
mkdir -p ../bin/$jplatform64
261263
mkdir -p obj/$jplatform64/
262264
cp makefile-jnative obj/$jplatform64/.
263-
export CC AR CFLAGS LDFLAGS LDFLAGS_a LDFLAGS_b TARGET TARGET_a jplatform64
265+
export CC AR CFLAGS LDFLAGS LDFLAGS_a LDFLAGS_b TARGET TARGET_a jplatform j64x jplatform64
264266
cd obj/$jplatform64/
265267
if [ "x$MAKEFLAGS" = x'' ]; then
266-
if [ $(uname) = Linux ]; then par=$(nproc); else par=$(sysctl -n hw.ncpu); fi
267-
$make -j$par -f makefile-jnative all
268-
else
269-
$make -f makefile-jnative
268+
if ([ "$unameop" = "Linux" ] || [ "$unameop" = "GNU/Linux" ]); then
269+
par=$(nproc)
270+
elif [ "$unameop" = "Darwin" ] || [ "$unameop" = "OpenBSD" ] || [ "$unameop" = "FreeBSD" ]; then
271+
par=$(sysctl -n hw.ncpu)
272+
else
273+
par=2
274+
fi
275+
export MAKEFLAGS=-j$par
270276
fi
277+
echo "MAKEFLAGS=$MAKEFLAGS"
278+
$make -f makefile-jnative
271279
retval=$?
272280
cd -
273281
exit $retval

0 commit comments

Comments
 (0)