[Vm-dev] [commit][3660] Fix a bug in sqAtomicOps. h where the assumption that the intrinsic atomic add

commits at squeakvm.org commits at squeakvm.org
Mon Mar 28 21:36:20 UTC 2016


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;



More information about the Vm-dev mailing list