Revision: 3660 Author: eliot Date: 2016-03-28 14:36:20 -0700 (Mon, 28 Mar 2016) Log Message: ----------- Fix a bug in sqAtomicOps.h where the assumption that the intrinsic atomic add operation will apply to 16-bit variables is false on clang. So on x86 and x64 use inline assembly with gcc and clang since this is known to work. Improve the doSignalSemaphores code in sqExternalSemaphores.c so that the tide variables are initialized at the right point and so there's only one copy of the signalling code. Change the order of a debug printf in sqUnixSocket.c so that debug logging is more comprehensible. Update all the mac & win mvm scripts to allow e.g. ./mvm -- -f Makefile.foo
Modified Paths: -------------- branches/Cog/build.macos32x86/glue.cog.spur/mvm branches/Cog/build.macos32x86/glue.stack.spur/mvm branches/Cog/build.macos32x86/newspeak.cog.spur/mvm branches/Cog/build.macos32x86/newspeak.stack.spur/mvm branches/Cog/build.macos32x86/pharo.cog.spur/mvm branches/Cog/build.macos32x86/squeak+immutability.cog.spur/mvm branches/Cog/build.macos32x86/squeak.cog.spur/mvm branches/Cog/build.macos32x86/squeak.cog.spur.immutability/mvm branches/Cog/build.macos32x86/squeak.cog.v3/mvm branches/Cog/build.macos32x86/squeak.sista.spur/mvm branches/Cog/build.macos32x86/squeak.stack.spur/mvm branches/Cog/build.macos32x86/squeak.stack.v3/mvm branches/Cog/build.macos64x64/newspeak.cog.spur/mvm branches/Cog/build.macos64x64/newspeak.stack.spur/mvm branches/Cog/build.macos64x64/pharo.cog.spur/mvm branches/Cog/build.macos64x64/squeak.cog.spur/mvm branches/Cog/build.macos64x64/squeak.cog.spur.immutability/mvm branches/Cog/build.macos64x64/squeak.sista.spur/mvm branches/Cog/build.macos64x64/squeak.stack.spur/mvm branches/Cog/build.win32x86/newspeak.cog.spur/mvm branches/Cog/build.win32x86/newspeak.stack.spur/mvm branches/Cog/build.win32x86/squeak.cog.spur/mvm branches/Cog/build.win32x86/squeak.cog.v3/mvm branches/Cog/build.win32x86/squeak.stack.spur/mvm branches/Cog/build.win32x86/squeak.stack.v3/mvm branches/Cog/platforms/Cross/vm/sqAtomicOps.h branches/Cog/platforms/Cross/vm/sqExternalSemaphores.c branches/Cog/platforms/unix/plugins/SocketPlugin/sqUnixSocket.c branches/Cog/spursrc/vm/gcc3x-cointerp.c
Property Changed: ---------------- branches/Cog/platforms/Cross/vm/sqSCCSVersion.h
Modified: branches/Cog/build.macos32x86/glue.cog.spur/mvm =================================================================== --- branches/Cog/build.macos32x86/glue.cog.spur/mvm 2016-03-28 21:23:28 UTC (rev 3659) +++ branches/Cog/build.macos32x86/glue.cog.spur/mvm 2016-03-28 21:36:20 UTC (rev 3660) @@ -12,13 +12,19 @@ *) echo usage $0 [-A] [-a\ [-d] [-f]; exit 0;; esac done + if [ "$1" = -- ]; then + if [ "$A$D$F" = "" ]; then + A=1;D=1;F=1 + fi + fi + shift `expr $OPTIND - 1` fi if [ -n "$D" ]; then - make debug 2>&1 | tee LOGD + make $@ debug 2>&1 | tee LOGD fi if [ -n "$A" ]; then - make assert 2>&1 | tee LOGA + make $@ assert 2>&1 | tee LOGA fi if [ -n "$F" ]; then - make 2>&1 | tee LOGF + make $@ 2>&1 | tee LOGF fi
Modified: branches/Cog/build.macos32x86/glue.stack.spur/mvm =================================================================== --- branches/Cog/build.macos32x86/glue.stack.spur/mvm 2016-03-28 21:23:28 UTC (rev 3659) +++ branches/Cog/build.macos32x86/glue.stack.spur/mvm 2016-03-28 21:36:20 UTC (rev 3660) @@ -12,13 +12,19 @@ *) echo usage $0 [-A] [-a\ [-d] [-f]; exit 0;; esac done + if [ "$1" = -- ]; then + if [ "$A$D$F" = "" ]; then + A=1;D=1;F=1 + fi + fi + shift `expr $OPTIND - 1` fi if [ -n "$D" ]; then - make debug 2>&1 | tee LOGD + make $@ debug 2>&1 | tee LOGD fi if [ -n "$A" ]; then - make assert 2>&1 | tee LOGA + make $@ assert 2>&1 | tee LOGA fi if [ -n "$F" ]; then - make 2>&1 | tee LOGF + make $@ 2>&1 | tee LOGF fi
Modified: branches/Cog/build.macos32x86/newspeak.cog.spur/mvm =================================================================== --- branches/Cog/build.macos32x86/newspeak.cog.spur/mvm 2016-03-28 21:23:28 UTC (rev 3659) +++ branches/Cog/build.macos32x86/newspeak.cog.spur/mvm 2016-03-28 21:36:20 UTC (rev 3660) @@ -12,13 +12,19 @@ *) echo usage $0 [-A] [-a\ [-d] [-f]; exit 0;; esac done + if [ "$1" = -- ]; then + if [ "$A$D$F" = "" ]; then + A=1;D=1;F=1 + fi + fi + shift `expr $OPTIND - 1` fi if [ -n "$D" ]; then - make debug 2>&1 | tee LOGD + make $@ debug 2>&1 | tee LOGD fi if [ -n "$A" ]; then - make assert 2>&1 | tee LOGA + make $@ assert 2>&1 | tee LOGA fi if [ -n "$F" ]; then - make 2>&1 | tee LOGF + make $@ 2>&1 | tee LOGF fi
Modified: branches/Cog/build.macos32x86/newspeak.stack.spur/mvm =================================================================== --- branches/Cog/build.macos32x86/newspeak.stack.spur/mvm 2016-03-28 21:23:28 UTC (rev 3659) +++ branches/Cog/build.macos32x86/newspeak.stack.spur/mvm 2016-03-28 21:36:20 UTC (rev 3660) @@ -12,13 +12,19 @@ *) echo usage $0 [-A] [-a\ [-d] [-f]; exit 0;; esac done + if [ "$1" = -- ]; then + if [ "$A$D$F" = "" ]; then + A=1;D=1;F=1 + fi + fi + shift `expr $OPTIND - 1` fi if [ -n "$D" ]; then - make debug 2>&1 | tee LOGD + make $@ debug 2>&1 | tee LOGD fi if [ -n "$A" ]; then - make assert 2>&1 | tee LOGA + make $@ assert 2>&1 | tee LOGA fi if [ -n "$F" ]; then - make 2>&1 | tee LOGF + make $@ 2>&1 | tee LOGF fi
Modified: branches/Cog/build.macos32x86/pharo.cog.spur/mvm =================================================================== --- branches/Cog/build.macos32x86/pharo.cog.spur/mvm 2016-03-28 21:23:28 UTC (rev 3659) +++ branches/Cog/build.macos32x86/pharo.cog.spur/mvm 2016-03-28 21:36:20 UTC (rev 3660) @@ -12,13 +12,19 @@ *) echo usage $0 [-A] [-a\ [-d] [-f]; exit 0;; esac done + if [ "$1" = -- ]; then + if [ "$A$D$F" = "" ]; then + A=1;D=1;F=1 + fi + fi + shift `expr $OPTIND - 1` fi if [ -n "$D" ]; then - make debug 2>&1 | tee LOGD + make $@ debug 2>&1 | tee LOGD fi if [ -n "$A" ]; then - make assert 2>&1 | tee LOGA + make $@ assert 2>&1 | tee LOGA fi if [ -n "$F" ]; then - make 2>&1 | tee LOGF + make $@ 2>&1 | tee LOGF fi
Modified: branches/Cog/build.macos32x86/squeak+immutability.cog.spur/mvm =================================================================== --- branches/Cog/build.macos32x86/squeak+immutability.cog.spur/mvm 2016-03-28 21:23:28 UTC (rev 3659) +++ branches/Cog/build.macos32x86/squeak+immutability.cog.spur/mvm 2016-03-28 21:36:20 UTC (rev 3660) @@ -12,13 +12,19 @@ *) echo usage $0 [-A] [-a\ [-d] [-f]; exit 0;; esac done + if [ "$1" = -- ]; then + if [ "$A$D$F" = "" ]; then + A=1;D=1;F=1 + fi + fi + shift `expr $OPTIND - 1` fi if [ -n "$D" ]; then - make debug 2>&1 | tee LOGD + make $@ debug 2>&1 | tee LOGD fi if [ -n "$A" ]; then - make assert 2>&1 | tee LOGA + make $@ assert 2>&1 | tee LOGA fi if [ -n "$F" ]; then - make 2>&1 | tee LOGF + make $@ 2>&1 | tee LOGF fi
Modified: branches/Cog/build.macos32x86/squeak.cog.spur/mvm =================================================================== --- branches/Cog/build.macos32x86/squeak.cog.spur/mvm 2016-03-28 21:23:28 UTC (rev 3659) +++ branches/Cog/build.macos32x86/squeak.cog.spur/mvm 2016-03-28 21:36:20 UTC (rev 3660) @@ -12,13 +12,19 @@ *) echo usage $0 [-A] [-a\ [-d] [-f]; exit 0;; esac done + if [ "$1" = -- ]; then + if [ "$A$D$F" = "" ]; then + A=1;D=1;F=1 + fi + fi + shift `expr $OPTIND - 1` fi if [ -n "$D" ]; then - make debug 2>&1 | tee LOGD + make $@ debug 2>&1 | tee LOGD fi if [ -n "$A" ]; then - make assert 2>&1 | tee LOGA + make $@ assert 2>&1 | tee LOGA fi if [ -n "$F" ]; then - make 2>&1 | tee LOGF + make $@ 2>&1 | tee LOGF fi
Modified: branches/Cog/build.macos32x86/squeak.cog.spur.immutability/mvm =================================================================== --- branches/Cog/build.macos32x86/squeak.cog.spur.immutability/mvm 2016-03-28 21:23:28 UTC (rev 3659) +++ branches/Cog/build.macos32x86/squeak.cog.spur.immutability/mvm 2016-03-28 21:36:20 UTC (rev 3660) @@ -12,13 +12,19 @@ *) echo usage $0 [-A] [-a\ [-d] [-f]; exit 0;; esac done + if [ "$1" = -- ]; then + if [ "$A$D$F" = "" ]; then + A=1;D=1;F=1 + fi + fi + shift `expr $OPTIND - 1` fi if [ -n "$D" ]; then - make debug 2>&1 | tee LOGD + make $@ debug 2>&1 | tee LOGD fi if [ -n "$A" ]; then - make assert 2>&1 | tee LOGA + make $@ assert 2>&1 | tee LOGA fi if [ -n "$F" ]; then - make 2>&1 | tee LOGF + make $@ 2>&1 | tee LOGF fi
Modified: branches/Cog/build.macos32x86/squeak.cog.v3/mvm =================================================================== --- branches/Cog/build.macos32x86/squeak.cog.v3/mvm 2016-03-28 21:23:28 UTC (rev 3659) +++ branches/Cog/build.macos32x86/squeak.cog.v3/mvm 2016-03-28 21:36:20 UTC (rev 3660) @@ -12,13 +12,19 @@ *) echo usage $0 [-A] [-a\ [-d] [-f]; exit 0;; esac done + if [ "$1" = -- ]; then + if [ "$A$D$F" = "" ]; then + A=1;D=1;F=1 + fi + fi + shift `expr $OPTIND - 1` fi if [ -n "$D" ]; then - make debug 2>&1 | tee LOGD + make $@ debug 2>&1 | tee LOGD fi if [ -n "$A" ]; then - make assert 2>&1 | tee LOGA + make $@ assert 2>&1 | tee LOGA fi if [ -n "$F" ]; then - make 2>&1 | tee LOGF + make $@ 2>&1 | tee LOGF fi
Modified: branches/Cog/build.macos32x86/squeak.sista.spur/mvm =================================================================== --- branches/Cog/build.macos32x86/squeak.sista.spur/mvm 2016-03-28 21:23:28 UTC (rev 3659) +++ branches/Cog/build.macos32x86/squeak.sista.spur/mvm 2016-03-28 21:36:20 UTC (rev 3660) @@ -12,13 +12,19 @@ *) echo usage $0 [-A] [-a\ [-d] [-f]; exit 0;; esac done + if [ "$1" = -- ]; then + if [ "$A$D$F" = "" ]; then + A=1;D=1;F=1 + fi + fi + shift `expr $OPTIND - 1` fi if [ -n "$D" ]; then - make debug 2>&1 | tee LOGD + make $@ debug 2>&1 | tee LOGD fi if [ -n "$A" ]; then - make assert 2>&1 | tee LOGA + make $@ assert 2>&1 | tee LOGA fi if [ -n "$F" ]; then - make 2>&1 | tee LOGF + make $@ 2>&1 | tee LOGF fi
Modified: branches/Cog/build.macos32x86/squeak.stack.spur/mvm =================================================================== --- branches/Cog/build.macos32x86/squeak.stack.spur/mvm 2016-03-28 21:23:28 UTC (rev 3659) +++ branches/Cog/build.macos32x86/squeak.stack.spur/mvm 2016-03-28 21:36:20 UTC (rev 3660) @@ -12,13 +12,19 @@ *) echo usage $0 [-A] [-a\ [-d] [-f]; exit 0;; esac done + if [ "$1" = -- ]; then + if [ "$A$D$F" = "" ]; then + A=1;D=1;F=1 + fi + fi + shift `expr $OPTIND - 1` fi if [ -n "$D" ]; then - make debug 2>&1 | tee LOGD + make $@ debug 2>&1 | tee LOGD fi if [ -n "$A" ]; then - make assert 2>&1 | tee LOGA + make $@ assert 2>&1 | tee LOGA fi if [ -n "$F" ]; then - make 2>&1 | tee LOGF + make $@ 2>&1 | tee LOGF fi
Modified: branches/Cog/build.macos32x86/squeak.stack.v3/mvm =================================================================== --- branches/Cog/build.macos32x86/squeak.stack.v3/mvm 2016-03-28 21:23:28 UTC (rev 3659) +++ branches/Cog/build.macos32x86/squeak.stack.v3/mvm 2016-03-28 21:36:20 UTC (rev 3660) @@ -12,13 +12,19 @@ *) echo usage $0 [-A] [-a\ [-d] [-f]; exit 0;; esac done + if [ "$1" = -- ]; then + if [ "$A$D$F" = "" ]; then + A=1;D=1;F=1 + fi + fi + shift `expr $OPTIND - 1` fi if [ -n "$D" ]; then - make debug 2>&1 | tee LOGD + make $@ debug 2>&1 | tee LOGD fi if [ -n "$A" ]; then - make assert 2>&1 | tee LOGA + make $@ assert 2>&1 | tee LOGA fi if [ -n "$F" ]; then - make 2>&1 | tee LOGF + make $@ 2>&1 | tee LOGF fi
Modified: branches/Cog/build.macos64x64/newspeak.cog.spur/mvm =================================================================== --- branches/Cog/build.macos64x64/newspeak.cog.spur/mvm 2016-03-28 21:23:28 UTC (rev 3659) +++ branches/Cog/build.macos64x64/newspeak.cog.spur/mvm 2016-03-28 21:36:20 UTC (rev 3660) @@ -12,13 +12,19 @@ *) echo usage $0 [-A] [-a\ [-d] [-f]; exit 0;; esac done + if [ "$1" = -- ]; then + if [ "$A$D$F" = "" ]; then + A=1;D=1;F=1 + fi + fi + shift `expr $OPTIND - 1` fi if [ -n "$D" ]; then - make debug 2>&1 | tee LOGD + make $@ debug 2>&1 | tee LOGD fi if [ -n "$A" ]; then - make assert 2>&1 | tee LOGA + make $@ assert 2>&1 | tee LOGA fi if [ -n "$F" ]; then - make 2>&1 | tee LOGF + make $@ 2>&1 | tee LOGF fi
Modified: branches/Cog/build.macos64x64/newspeak.stack.spur/mvm =================================================================== --- branches/Cog/build.macos64x64/newspeak.stack.spur/mvm 2016-03-28 21:23:28 UTC (rev 3659) +++ branches/Cog/build.macos64x64/newspeak.stack.spur/mvm 2016-03-28 21:36:20 UTC (rev 3660) @@ -12,13 +12,19 @@ *) echo usage $0 [-A] [-a\ [-d] [-f]; exit 0;; esac done + if [ "$1" = -- ]; then + if [ "$A$D$F" = "" ]; then + A=1;D=1;F=1 + fi + fi + shift `expr $OPTIND - 1` fi if [ -n "$D" ]; then - make debug 2>&1 | tee LOGD + make $@ debug 2>&1 | tee LOGD fi if [ -n "$A" ]; then - make assert 2>&1 | tee LOGA + make $@ assert 2>&1 | tee LOGA fi if [ -n "$F" ]; then - make 2>&1 | tee LOGF + make $@ 2>&1 | tee LOGF fi
Modified: branches/Cog/build.macos64x64/pharo.cog.spur/mvm =================================================================== --- branches/Cog/build.macos64x64/pharo.cog.spur/mvm 2016-03-28 21:23:28 UTC (rev 3659) +++ branches/Cog/build.macos64x64/pharo.cog.spur/mvm 2016-03-28 21:36:20 UTC (rev 3660) @@ -12,13 +12,19 @@ *) echo usage $0 [-A] [-a\ [-d] [-f]; exit 0;; esac done + if [ "$1" = -- ]; then + if [ "$A$D$F" = "" ]; then + A=1;D=1;F=1 + fi + fi + shift `expr $OPTIND - 1` fi if [ -n "$D" ]; then - make debug 2>&1 | tee LOGD + make $@ debug 2>&1 | tee LOGD fi if [ -n "$A" ]; then - make assert 2>&1 | tee LOGA + make $@ assert 2>&1 | tee LOGA fi if [ -n "$F" ]; then - make 2>&1 | tee LOGF + make $@ 2>&1 | tee LOGF fi
Modified: branches/Cog/build.macos64x64/squeak.cog.spur/mvm =================================================================== --- branches/Cog/build.macos64x64/squeak.cog.spur/mvm 2016-03-28 21:23:28 UTC (rev 3659) +++ branches/Cog/build.macos64x64/squeak.cog.spur/mvm 2016-03-28 21:36:20 UTC (rev 3660) @@ -12,13 +12,19 @@ *) echo usage $0 [-A] [-a\ [-d] [-f]; exit 0;; esac done + if [ "$1" = -- ]; then + if [ "$A$D$F" = "" ]; then + A=1;D=1;F=1 + fi + fi + shift `expr $OPTIND - 1` fi if [ -n "$D" ]; then - make debug 2>&1 | tee LOGD + make $@ debug 2>&1 | tee LOGD fi if [ -n "$A" ]; then - make assert 2>&1 | tee LOGA + make $@ assert 2>&1 | tee LOGA fi if [ -n "$F" ]; then - make 2>&1 | tee LOGF + make $@ 2>&1 | tee LOGF fi
Modified: branches/Cog/build.macos64x64/squeak.cog.spur.immutability/mvm =================================================================== --- branches/Cog/build.macos64x64/squeak.cog.spur.immutability/mvm 2016-03-28 21:23:28 UTC (rev 3659) +++ branches/Cog/build.macos64x64/squeak.cog.spur.immutability/mvm 2016-03-28 21:36:20 UTC (rev 3660) @@ -12,13 +12,19 @@ *) echo usage $0 [-A] [-a\ [-d] [-f]; exit 0;; esac done + if [ "$1" = -- ]; then + if [ "$A$D$F" = "" ]; then + A=1;D=1;F=1 + fi + fi + shift `expr $OPTIND - 1` fi if [ -n "$D" ]; then - make debug 2>&1 | tee LOGD + make $@ debug 2>&1 | tee LOGD fi if [ -n "$A" ]; then - make assert 2>&1 | tee LOGA + make $@ assert 2>&1 | tee LOGA fi if [ -n "$F" ]; then - make 2>&1 | tee LOGF + make $@ 2>&1 | tee LOGF fi
Modified: branches/Cog/build.macos64x64/squeak.sista.spur/mvm =================================================================== --- branches/Cog/build.macos64x64/squeak.sista.spur/mvm 2016-03-28 21:23:28 UTC (rev 3659) +++ branches/Cog/build.macos64x64/squeak.sista.spur/mvm 2016-03-28 21:36:20 UTC (rev 3660) @@ -12,13 +12,19 @@ *) echo usage $0 [-A] [-a\ [-d] [-f]; exit 0;; esac done + if [ "$1" = -- ]; then + if [ "$A$D$F" = "" ]; then + A=1;D=1;F=1 + fi + fi + shift `expr $OPTIND - 1` fi if [ -n "$D" ]; then - make debug 2>&1 | tee LOGD + make $@ debug 2>&1 | tee LOGD fi if [ -n "$A" ]; then - make assert 2>&1 | tee LOGA + make $@ assert 2>&1 | tee LOGA fi if [ -n "$F" ]; then - make 2>&1 | tee LOGF + make $@ 2>&1 | tee LOGF fi
Modified: branches/Cog/build.macos64x64/squeak.stack.spur/mvm =================================================================== --- branches/Cog/build.macos64x64/squeak.stack.spur/mvm 2016-03-28 21:23:28 UTC (rev 3659) +++ branches/Cog/build.macos64x64/squeak.stack.spur/mvm 2016-03-28 21:36:20 UTC (rev 3660) @@ -12,13 +12,19 @@ *) echo usage $0 [-A] [-a\ [-d] [-f]; exit 0;; esac done + if [ "$1" = -- ]; then + if [ "$A$D$F" = "" ]; then + A=1;D=1;F=1 + fi + fi + shift `expr $OPTIND - 1` fi if [ -n "$D" ]; then - make debug 2>&1 | tee LOGD + make $@ debug 2>&1 | tee LOGD fi if [ -n "$A" ]; then - make assert 2>&1 | tee LOGA + make $@ assert 2>&1 | tee LOGA fi if [ -n "$F" ]; then - make 2>&1 | tee LOGF + make $@ 2>&1 | tee LOGF fi
Modified: branches/Cog/build.win32x86/newspeak.cog.spur/mvm =================================================================== --- branches/Cog/build.win32x86/newspeak.cog.spur/mvm 2016-03-28 21:23:28 UTC (rev 3659) +++ branches/Cog/build.win32x86/newspeak.cog.spur/mvm 2016-03-28 21:36:20 UTC (rev 3660) @@ -12,16 +12,22 @@ *) echo usage $0 [-A] [-a\ [-d] [-f]; exit 0;; esac done + if [ "$1" = -- ]; then + if [ "$A$D$F" = "" ]; then + A=1;D=1;F=1 + fi + fi + shift `expr $OPTIND - 1` fi if [ -n "$D" ]; then - rm -rf builddbg/vm/nsvm*.exe + rm -rf builddbg/vm/*.exe make debug 2>&1 | tee LOGD fi if [ -n "$A" ]; then - rm -rf buildast/vm/nsvm*.exe + rm -rf buildast/vm/*.exe make assert 2>&1 | tee LOGA fi if [ -n "$F" ]; then - rm -rf build/vm/nsvm*.exe + rm -rf build/vm/*.exe make 2>&1 | tee LOGF fi
Modified: branches/Cog/build.win32x86/newspeak.stack.spur/mvm =================================================================== --- branches/Cog/build.win32x86/newspeak.stack.spur/mvm 2016-03-28 21:23:28 UTC (rev 3659) +++ branches/Cog/build.win32x86/newspeak.stack.spur/mvm 2016-03-28 21:36:20 UTC (rev 3660) @@ -12,16 +12,22 @@ *) echo usage $0 [-A] [-a\ [-d] [-f]; exit 0;; esac done + if [ "$1" = -- ]; then + if [ "$A$D$F" = "" ]; then + A=1;D=1;F=1 + fi + fi + shift `expr $OPTIND - 1` fi if [ -n "$D" ]; then - rm -rf builddbg/vm/nsvm*.exe + rm -rf builddbg/vm/*.exe make debug 2>&1 | tee LOGD fi if [ -n "$A" ]; then - rm -rf buildast/vm/nsvm*.exe + rm -rf buildast/vm/*.exe make assert 2>&1 | tee LOGA fi if [ -n "$F" ]; then - rm -rf build/vm/nsvm*.exe + rm -rf build/vm/*.exe make 2>&1 | tee LOGF fi
Modified: branches/Cog/build.win32x86/squeak.cog.spur/mvm =================================================================== --- branches/Cog/build.win32x86/squeak.cog.spur/mvm 2016-03-28 21:23:28 UTC (rev 3659) +++ branches/Cog/build.win32x86/squeak.cog.spur/mvm 2016-03-28 21:36:20 UTC (rev 3660) @@ -12,16 +12,22 @@ *) echo usage $0 [-A] [-a\ [-d] [-f]; exit 0;; esac done + if [ "$1" = -- ]; then + if [ "$A$D$F" = "" ]; then + A=1;D=1;F=1 + fi + fi + shift `expr $OPTIND - 1` fi if [ -n "$D" ]; then - rm -rf builddbg/vm/Squeak*.exe + rm -rf builddbg/vm/*.exe make debug 2>&1 | tee LOGD fi if [ -n "$A" ]; then - rm -rf buildast/vm/Squeak*.exe + rm -rf buildast/vm/*.exe make assert 2>&1 | tee LOGA fi if [ -n "$F" ]; then - rm -rf build/vm/Squeak*.exe + rm -rf build/vm/*.exe make 2>&1 | tee LOGF fi
Modified: branches/Cog/build.win32x86/squeak.cog.v3/mvm =================================================================== --- branches/Cog/build.win32x86/squeak.cog.v3/mvm 2016-03-28 21:23:28 UTC (rev 3659) +++ branches/Cog/build.win32x86/squeak.cog.v3/mvm 2016-03-28 21:36:20 UTC (rev 3660) @@ -12,16 +12,22 @@ *) echo usage $0 [-A] [-a\ [-d] [-f]; exit 0;; esac done + if [ "$1" = -- ]; then + if [ "$A$D$F" = "" ]; then + A=1;D=1;F=1 + fi + fi + shift `expr $OPTIND - 1` fi if [ -n "$D" ]; then - rm -rf builddbg/vm/Squeak*.exe + rm -rf builddbg/vm/*.exe make debug 2>&1 | tee LOGD fi if [ -n "$A" ]; then - rm -rf buildast/vm/Squeak*.exe + rm -rf buildast/vm/*.exe make assert 2>&1 | tee LOGA fi if [ -n "$F" ]; then - rm -rf build/vm/Squeak*.exe + rm -rf build/vm/*.exe make 2>&1 | tee LOGF fi
Modified: branches/Cog/build.win32x86/squeak.stack.spur/mvm =================================================================== --- branches/Cog/build.win32x86/squeak.stack.spur/mvm 2016-03-28 21:23:28 UTC (rev 3659) +++ branches/Cog/build.win32x86/squeak.stack.spur/mvm 2016-03-28 21:36:20 UTC (rev 3660) @@ -12,16 +12,22 @@ *) echo usage $0 [-A] [-a\ [-d] [-f]; exit 0;; esac done + if [ "$1" = -- ]; then + if [ "$A$D$F" = "" ]; then + A=1;D=1;F=1 + fi + fi + shift `expr $OPTIND - 1` fi if [ -n "$D" ]; then - rm -rf builddbg/vm/Squeak*.exe + rm -rf builddbg/vm/*.exe make debug 2>&1 | tee LOGD fi if [ -n "$A" ]; then - rm -rf buildast/vm/Squeak*.exe + rm -rf buildast/vm/*.exe make assert 2>&1 | tee LOGA fi if [ -n "$F" ]; then - rm -rf build/vm/Squeak*.exe + rm -rf build/vm/*.exe make 2>&1 | tee LOGF fi
Modified: branches/Cog/build.win32x86/squeak.stack.v3/mvm =================================================================== --- branches/Cog/build.win32x86/squeak.stack.v3/mvm 2016-03-28 21:23:28 UTC (rev 3659) +++ branches/Cog/build.win32x86/squeak.stack.v3/mvm 2016-03-28 21:36:20 UTC (rev 3660) @@ -12,16 +12,22 @@ *) echo usage $0 [-A] [-a\ [-d] [-f]; exit 0;; esac done + if [ "$1" = -- ]; then + if [ "$A$D$F" = "" ]; then + A=1;D=1;F=1 + fi + fi + shift `expr $OPTIND - 1` fi if [ -n "$D" ]; then - rm -rf builddbg/vm/Squeak*.exe + rm -rf builddbg/vm/*.exe make debug 2>&1 | tee LOGD fi if [ -n "$A" ]; then - rm -rf buildast/vm/Squeak*.exe + rm -rf buildast/vm/*.exe make assert 2>&1 | tee LOGA fi if [ -n "$F" ]; then - rm -rf build/vm/Squeak*.exe + rm -rf build/vm/*.exe make 2>&1 | tee LOGF fi
Modified: branches/Cog/platforms/Cross/vm/sqAtomicOps.h =================================================================== --- branches/Cog/platforms/Cross/vm/sqAtomicOps.h 2016-03-28 21:23:28 UTC (rev 3659) +++ branches/Cog/platforms/Cross/vm/sqAtomicOps.h 2016-03-28 21:36:20 UTC (rev 3660) @@ -157,7 +157,6 @@ # error shurly shome mishtake; too drunk to shpot the programming muddle. hic. #endif
- #if defined(__GNUC__) # define GCC_HAS_BUILTIN_SYNC \ (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1)) @@ -176,11 +175,15 @@ # define sqAtomicAddConst(var,n) (assert(sizeof(var) == 4), OSAtomicAdd32(n,&(var))
#elif defined(__GNUC__) || defined(__clang__) -# if GCC_HAS_BUILTIN_SYNC || defined(__clang__) -# define sqAtomicAddConst(var,n) __sync_fetch_and_add((sqInt *)&(var), n) - -# elif defined(i386) || defined(__i386) || defined(__i386__) || defined(_X86_) - /* support for gcc 3.x; 8-, 16- & 32-bit only */ +/* N.B. I know you want to use the intrinsics; they're pretty; they're official; + * they're portable. But they only apply to int, long and long long sizes. + * Since we want to use 16-bit variables for signal requests and responses in + * sqExternalSemaphores.c we use the assembler constructs. Please /don't/ + * change this unless you understand the use of ATOMICADD16 and you test that + * the replacement works. + */ +# if defined(i386) || defined(__i386) || defined(__i386__) || defined(_X86_) +# define ATOMICADD16 1 # define sqAtomicAddConst(var,n) do {\ if (sizeof(var) == sizeof(char)) \ asm volatile ("lock addb %1, %0" : "=m" (var) : "i" (n), "m" (var)); \ @@ -189,19 +192,28 @@ else \ asm volatile ("lock addl %1, %0" : "=m" (var) : "i" (n), "m" (var)); \ } while (0) -# endif - -/* On x86/x86_64 the intrinsics apply to any integral size */ -# if defined(i386) || defined(__i386) || defined(__i386__) || defined(_X86_) \ - || defined(x86_64) || defined(__x86_64) || defined(__x86_64__) +# elif defined(x86_64) || defined(__x86_64) || defined(__x86_64__) # define ATOMICADD16 1 +# define sqAtomicAddConst(var,n) do {\ + if (sizeof(var) == sizeof(char)) \ + asm volatile ("lock addb %1, %0" : "=m" (var) : "i" (n), "m" (var)); \ + else if (sizeof(var) == sizeof(short)) \ + asm volatile ("lock addw %1, %0" : "=m" (var) : "i" (n), "m" (var)); \ + else if (sizeof(var) == sizeof(int)) \ + asm volatile ("lock addl %1, %0" : "=m" (var) : "i" (n), "m" (var)); \ + else \ + asm volatile ("lock addq %1, %0" : "=m" (var) : "i" (n), "m" (var)); \ + } while (0) +# elif GCC_HAS_BUILTIN_SYNC || defined(__clang__) +# define sqAtomicAddConst(var,n) __sync_fetch_and_add((sqInt *)&(var), n) # endif +#endif
-#else +#if !defined(sqAtomicAddConst) /* Dear implementor, you have choices. Google atomic increment and you will * find a number of alternative implementations. */ -# error atomic increment of variables not yet defined for this platfom +# error atomic increment of variables not yet defined for this platform #endif
/* Atomic compare and swap of sqInt variables allows a lock-free implementation
Modified: branches/Cog/platforms/Cross/vm/sqExternalSemaphores.c =================================================================== --- branches/Cog/platforms/Cross/vm/sqExternalSemaphores.c 2016-03-28 21:23:28 UTC (rev 3659) +++ branches/Cog/platforms/Cross/vm/sqExternalSemaphores.c 2016-03-28 21:36:20 UTC (rev 3660) @@ -79,7 +79,6 @@ * VM needs to scan. With potentially thousands of indices to scan this can * save significant lengths of time. */ -static volatile int tideLock = 0; static volatile int useTideA = 1; static volatile sqInt lowTideA = (usqInt)-1 >> 1, highTideA = -1; static volatile sqInt lowTideB = (usqInt)-1 >> 1, highTideB = -1; @@ -132,6 +131,7 @@ { int i = index - 1; int v; + SignalRequest b4;
/* An index of zero should be and is silently ignored. */ assert(index >= 0 && index <= numSignalRequests); @@ -141,7 +141,14 @@ return 0;
sqLowLevelMFence(); + b4 = signalRequests[i]; sqAtomicAddConst(signalRequests[i].requests,1); + /* There's a possibility that the second arm will fail in normal operation, + * but that chance is small; much better to deal with the false positive + * than not notice that the atomic add intrinsic is overwriting responses. + */ + assert(b4.requests != signalRequests[i].requests + && b4.responses == signalRequests[i].responses); if (useTideA) { /* atomic if (lowTideA > i) lowTideA = i; */ while ((v = lowTideA) > i) { @@ -153,6 +160,7 @@ sqLowLevelMFence(); sqCompareAndSwap(highTideA, v, i); } + assert(i >= lowTideA && i <= highTideA); } else { /* atomic if (lowTideB > i) lowTideB = i; */ @@ -165,6 +173,7 @@ sqLowLevelMFence(); sqCompareAndSwap(highTideB, v, i); } + assert(i >= lowTideB && i <= highTideB); }
checkSignalRequests = 1; @@ -184,7 +193,8 @@ sqInt doSignalExternalSemaphores(sqInt externalSemaphoreTableSize) { - int i, switched; + long i, lowTide, highTide; + char switched, signalled = 0;
sqLowLevelMFence(); if (!checkSignalRequests) @@ -192,40 +202,44 @@
switched = 0; checkSignalRequests = 0; + sqLowLevelMFence(); - - LogEventChain((dbgEvtChF,"dSES(%d).",externalSemaphoreTableSize)); if (useTideA) { + lowTideB = (unsigned long)-1 >> 1; + highTideB = -1; useTideA = 0; sqLowLevelMFence(); - /* doing this here saves a bounds check in doSignalSemaphoreWithIndex */ - if (highTideA >= externalSemaphoreTableSize) - highTideA = externalSemaphoreTableSize - 1; - for (i = lowTideA; i <= highTideA; i++) - while (signalRequests[i].responses != signalRequests[i].requests) { - if (doSignalSemaphoreWithIndex(i+1)) - switched = 1; - LogEventChain((dbgEvtChF,"dSSI(%d):%c.",i+1,switched?'!':'_')); - ++signalRequests[i].responses; - } - lowTideA = (unsigned long)-1 >> 1, highTideA = -1; + lowTide = lowTideA; + highTide = highTideA; } else { + lowTideA = (unsigned long)-1 >> 1; + highTideA = -1; useTideA = 1; sqLowLevelMFence(); - /* doing this here saves a bounds check in doSignalSemaphoreWithIndex */ - if (highTideB >= externalSemaphoreTableSize) - highTideB = externalSemaphoreTableSize - 1; - for (i = lowTideB; i <= highTideB; i++) - while (signalRequests[i].responses != signalRequests[i].requests) { - if (doSignalSemaphoreWithIndex(i+1)) - switched = 1; - LogEventChain((dbgEvtChF,"dSSI(%d):%c.",i+1,switched?'!':'_')); - ++signalRequests[i].responses; - } - lowTideB = (unsigned long)-1 >> 1, highTideB = -1; + lowTide = lowTideB; + highTide = highTideB; } + sqLowLevelMFence();
+ LogEventChain((dbgEvtChF,"dSES(%d,%d,%ld,%ld).", + externalSemaphoreTableSize, useTideA ? 0 : 1, lowTide, highTide)); + + /* doing this here saves a bounds check in doSignalSemaphoreWithIndex */ + if (highTide >= externalSemaphoreTableSize) + highTide = externalSemaphoreTableSize - 1; + for (i = lowTide; i <= highTide; i++) + while (signalRequests[i].responses != signalRequests[i].requests) { + if (doSignalSemaphoreWithIndex(i+1)) + switched = 1; + LogEventChain((dbgEvtChF,"dSSI(%ld,%d):%c.",i+1,(int)signalRequests[i].responses,switched?'!':'_')); + ++signalRequests[i].responses; + signalled = 1; + } + + if (signalled) + LogEventChain((dbgEvtChF,"\n")); + /* If a signal came in while processing, check for signals again soon. */ sqLowLevelMFence();
Property changes on: branches/Cog/platforms/Cross/vm/sqSCCSVersion.h ___________________________________________________________________ Modified: checkindate - Wed Mar 23 18:29:03 PDT 2016 + Mon Mar 28 14:31:53 PDT 2016
Modified: branches/Cog/platforms/unix/plugins/SocketPlugin/sqUnixSocket.c =================================================================== --- branches/Cog/platforms/unix/plugins/SocketPlugin/sqUnixSocket.c 2016-03-28 21:23:28 UTC (rev 3659) +++ branches/Cog/platforms/unix/plugins/SocketPlugin/sqUnixSocket.c 2016-03-28 21:36:20 UTC (rev 3660) @@ -171,8 +171,8 @@
#define PING(S,EVT) \ { \ + FPRINTF((stderr, "notify %d %s\n", (S)->s, #EVT)); \ interpreterProxy->signalSemaphoreWithIndex((S)->EVT##Sema); \ - FPRINTF((stderr, "notify %d %s\n", (S)->s, #EVT)); \ }
#define notify(SOCK,MASK) \
Modified: branches/Cog/spursrc/vm/gcc3x-cointerp.c =================================================================== --- branches/Cog/spursrc/vm/gcc3x-cointerp.c 2016-03-28 21:23:28 UTC (rev 3659) +++ branches/Cog/spursrc/vm/gcc3x-cointerp.c 2016-03-28 21:36:20 UTC (rev 3660) @@ -1577,7 +1577,6 @@ _iss sqInt * freeLists; _iss sqInt traceLogIndex; _iss sqInt rememberedSetSize; -_iss char * stackLimit; _iss sqInt classTableFirstPage; _iss sqInt tempOop; _iss sqInt * rememberedSet; @@ -1759,6 +1758,7 @@ char * breakSelector; usqInt heapBase; sqInt inIOProcessEvents; +volatile char * stackLimit; void * showSurfaceFn; sqInt deferDisplayUpdates; struct VirtualMachine* interpreterProxy;
vm-dev@lists.squeakfoundation.org