[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