[Vm-dev] [commit][3253] CogVM source as per VMMaker.oscog-eem.1055
commits at squeakvm.org
commits at squeakvm.org
Wed Feb 11 22:20:27 UTC 2015
Revision: 3253
Author: eliot
Date: 2015-02-11 14:20:23 -0800 (Wed, 11 Feb 2015)
Log Message:
-----------
CogVM source as per VMMaker.oscog-eem.1055
Broaden primitiveBitXor, primitiveBitAnd and primitiveBitOr for Spur 64-bits.
Make the bytecodes handle the common SmallInteger op SmallInteger case.
Now there are no uses of popPos32BitInteger in Cog :-)
Fix C code for Spur64BitMemoryManager>>fetchLong32:ofFloatObject:
Modified Paths:
--------------
branches/Cog/nscogsrc/vm/cointerp.c
branches/Cog/nscogsrc/vm/cointerp.h
branches/Cog/nscogsrc/vm/gcc3x-cointerp.c
branches/Cog/nsspursrc/vm/cointerp.c
branches/Cog/nsspursrc/vm/cointerp.h
branches/Cog/nsspursrc/vm/gcc3x-cointerp.c
branches/Cog/nsspurstacksrc/vm/gcc3x-interp.c
branches/Cog/nsspurstacksrc/vm/interp.c
branches/Cog/sistasrc/vm/cointerp.c
branches/Cog/sistasrc/vm/cointerp.h
branches/Cog/sistasrc/vm/gcc3x-cointerp.c
branches/Cog/spursistasrc/vm/cointerp.c
branches/Cog/spursistasrc/vm/cointerp.h
branches/Cog/spursistasrc/vm/gcc3x-cointerp.c
branches/Cog/spursrc/vm/cointerp.c
branches/Cog/spursrc/vm/cointerp.h
branches/Cog/spursrc/vm/gcc3x-cointerp.c
branches/Cog/spurstack64src/vm/gcc3x-interp.c
branches/Cog/spurstack64src/vm/interp.c
branches/Cog/spurstacksrc/vm/gcc3x-interp.c
branches/Cog/spurstacksrc/vm/interp.c
branches/Cog/src/vm/cointerp.c
branches/Cog/src/vm/cointerp.h
branches/Cog/src/vm/cointerpmt.c
branches/Cog/src/vm/cointerpmt.h
branches/Cog/src/vm/gcc3x-cointerp.c
branches/Cog/src/vm/gcc3x-cointerpmt.c
branches/Cog/stacksrc/vm/gcc3x-interp.c
branches/Cog/stacksrc/vm/interp.c
Property Changed:
----------------
branches/Cog/platforms/Cross/vm/sqSCCSVersion.h
Modified: branches/Cog/nscogsrc/vm/cointerp.c
===================================================================
--- branches/Cog/nscogsrc/vm/cointerp.c 2015-02-11 19:21:48 UTC (rev 3252)
+++ branches/Cog/nscogsrc/vm/cointerp.c 2015-02-11 22:20:23 UTC (rev 3253)
@@ -1,9 +1,9 @@
/* Automatically generated by
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.1050 uuid: ad3a825c-97ba-4d01-a0e7-637af8cbf52b
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.1055 uuid: dd8f0ae4-8ad8-470c-a35b-29cf787f83c8
from
- CoInterpreter VMMaker.oscog-eem.1050 uuid: ad3a825c-97ba-4d01-a0e7-637af8cbf52b
+ CoInterpreter VMMaker.oscog-eem.1055 uuid: dd8f0ae4-8ad8-470c-a35b-29cf787f83c8
*/
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.1050 uuid: ad3a825c-97ba-4d01-a0e7-637af8cbf52b " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.1055 uuid: dd8f0ae4-8ad8-470c-a35b-29cf787f83c8 " __DATE__ ;
char *__interpBuildInfo = __buildInfo;
@@ -2097,7 +2097,7 @@
/* 575 */ (void (*)(void))0,
0 };
char expensiveAsserts = 0;
-const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.1050";
+const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.1055";
sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 40 */;
volatile int sendTrace;
@@ -8081,16 +8081,21 @@
case 190:
/* bytecodePrimBitAnd */
{
- usqInt integerArgument;
- usqInt integerReceiver;
- sqInt object;
- char *sp;
- sqInt top;
- sqInt top1;
- sqInt top2;
- sqInt top3;
+ sqInt arg;
+ sqInt rcvr;
VM_LABEL(bytecodePrimBitAnd);
+ arg = longAtPointer(localSP);
+ rcvr = longAtPointer(localSP + (1 * BytesPerOop));
+ if (((arg & 1))
+ && ((rcvr & 1))) {
+ /* begin internalPop:thenPush: */
+ longAtPointerput((localSP += (2 - 1) * BytesPerOop), arg & rcvr);
+ /* begin fetchNextBytecode */
+ currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
+
+ goto l110;
+ }
/* begin initPrimCall */
GIV(primFailCode) = 0;
/* begin externalizeIPandSP */
@@ -8098,29 +8103,7 @@
GIV(instructionPointer) = oopForPointer(localIP);
GIV(stackPointer) = localSP;
GIV(framePointer) = localFP;
- /* begin primitiveBitAnd */
- /* begin popPos32BitInteger */
- /* begin popStack */
- top2 = longAt(GIV(stackPointer));
- GIV(stackPointer) += BytesPerWord;
- top = top2;
- integerArgument = positive32BitValueOf(top);
- /* begin popPos32BitInteger */
- /* begin popStack */
- top3 = longAt(GIV(stackPointer));
- GIV(stackPointer) += BytesPerWord;
- top1 = top3;
- integerReceiver = positive32BitValueOf(top1);
- if (!GIV(primFailCode)) {
- /* begin push: */
- object = positive32BitIntegerFor(integerReceiver & integerArgument);
- longAtput((sp = GIV(stackPointer) - BytesPerWord), object);
- GIV(stackPointer) = sp;
- }
- else {
- /* begin unPop: */
- GIV(stackPointer) -= 2 * BytesPerWord;
- }
+ primitiveBitAnd();
/* begin internalizeIPandSP */
assert(GIV(instructionPointer) != (ceReturnToInterpreterPC()));
localIP = pointerForOop(GIV(instructionPointer));
@@ -8142,16 +8125,21 @@
case 191:
/* bytecodePrimBitOr */
{
- usqInt integerArgument;
- usqInt integerReceiver;
- sqInt object;
- char *sp;
- sqInt top;
- sqInt top1;
- sqInt top2;
- sqInt top3;
+ sqInt arg;
+ sqInt rcvr;
VM_LABEL(bytecodePrimBitOr);
+ arg = longAtPointer(localSP);
+ rcvr = longAtPointer(localSP + (1 * BytesPerOop));
+ if (((arg & 1))
+ && ((rcvr & 1))) {
+ /* begin internalPop:thenPush: */
+ longAtPointerput((localSP += (2 - 1) * BytesPerOop), arg | rcvr);
+ /* begin fetchNextBytecode */
+ currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
+
+ goto l111;
+ }
/* begin initPrimCall */
GIV(primFailCode) = 0;
/* begin externalizeIPandSP */
@@ -8159,29 +8147,7 @@
GIV(instructionPointer) = oopForPointer(localIP);
GIV(stackPointer) = localSP;
GIV(framePointer) = localFP;
- /* begin primitiveBitOr */
- /* begin popPos32BitInteger */
- /* begin popStack */
- top2 = longAt(GIV(stackPointer));
- GIV(stackPointer) += BytesPerWord;
- top = top2;
- integerArgument = positive32BitValueOf(top);
- /* begin popPos32BitInteger */
- /* begin popStack */
- top3 = longAt(GIV(stackPointer));
- GIV(stackPointer) += BytesPerWord;
- top1 = top3;
- integerReceiver = positive32BitValueOf(top1);
- if (!GIV(primFailCode)) {
- /* begin push: */
- object = positive32BitIntegerFor(integerReceiver | integerArgument);
- longAtput((sp = GIV(stackPointer) - BytesPerWord), object);
- GIV(stackPointer) = sp;
- }
- else {
- /* begin unPop: */
- GIV(stackPointer) -= 2 * BytesPerWord;
- }
+ primitiveBitOr();
/* begin internalizeIPandSP */
assert(GIV(instructionPointer) != (ceReturnToInterpreterPC()));
localIP = pointerForOop(GIV(instructionPointer));
@@ -11035,16 +11001,21 @@
case 350: /*94*/
/* bytecodePrimBitAnd */
{
- usqInt integerArgument;
- usqInt integerReceiver;
- sqInt object;
- char *sp;
- sqInt top;
- sqInt top1;
- sqInt top2;
- sqInt top3;
+ sqInt arg;
+ sqInt rcvr;
VM_LABEL(bytecodePrimBitAnd1);
+ arg = longAtPointer(localSP);
+ rcvr = longAtPointer(localSP + (1 * BytesPerOop));
+ if (((arg & 1))
+ && ((rcvr & 1))) {
+ /* begin internalPop:thenPush: */
+ longAtPointerput((localSP += (2 - 1) * BytesPerOop), arg & rcvr);
+ /* begin fetchNextBytecode */
+ currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
+
+ goto l245;
+ }
/* begin initPrimCall */
GIV(primFailCode) = 0;
/* begin externalizeIPandSP */
@@ -11052,29 +11023,7 @@
GIV(instructionPointer) = oopForPointer(localIP);
GIV(stackPointer) = localSP;
GIV(framePointer) = localFP;
- /* begin primitiveBitAnd */
- /* begin popPos32BitInteger */
- /* begin popStack */
- top2 = longAt(GIV(stackPointer));
- GIV(stackPointer) += BytesPerWord;
- top = top2;
- integerArgument = positive32BitValueOf(top);
- /* begin popPos32BitInteger */
- /* begin popStack */
- top3 = longAt(GIV(stackPointer));
- GIV(stackPointer) += BytesPerWord;
- top1 = top3;
- integerReceiver = positive32BitValueOf(top1);
- if (!GIV(primFailCode)) {
- /* begin push: */
- object = positive32BitIntegerFor(integerReceiver & integerArgument);
- longAtput((sp = GIV(stackPointer) - BytesPerWord), object);
- GIV(stackPointer) = sp;
- }
- else {
- /* begin unPop: */
- GIV(stackPointer) -= 2 * BytesPerWord;
- }
+ primitiveBitAnd();
/* begin internalizeIPandSP */
assert(GIV(instructionPointer) != (ceReturnToInterpreterPC()));
localIP = pointerForOop(GIV(instructionPointer));
@@ -11096,16 +11045,21 @@
case 351: /*95*/
/* bytecodePrimBitOr */
{
- usqInt integerArgument;
- usqInt integerReceiver;
- sqInt object;
- char *sp;
- sqInt top;
- sqInt top1;
- sqInt top2;
- sqInt top3;
+ sqInt arg;
+ sqInt rcvr;
VM_LABEL(bytecodePrimBitOr1);
+ arg = longAtPointer(localSP);
+ rcvr = longAtPointer(localSP + (1 * BytesPerOop));
+ if (((arg & 1))
+ && ((rcvr & 1))) {
+ /* begin internalPop:thenPush: */
+ longAtPointerput((localSP += (2 - 1) * BytesPerOop), arg | rcvr);
+ /* begin fetchNextBytecode */
+ currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
+
+ goto l246;
+ }
/* begin initPrimCall */
GIV(primFailCode) = 0;
/* begin externalizeIPandSP */
@@ -11113,29 +11067,7 @@
GIV(instructionPointer) = oopForPointer(localIP);
GIV(stackPointer) = localSP;
GIV(framePointer) = localFP;
- /* begin primitiveBitOr */
- /* begin popPos32BitInteger */
- /* begin popStack */
- top2 = longAt(GIV(stackPointer));
- GIV(stackPointer) += BytesPerWord;
- top = top2;
- integerArgument = positive32BitValueOf(top);
- /* begin popPos32BitInteger */
- /* begin popStack */
- top3 = longAt(GIV(stackPointer));
- GIV(stackPointer) += BytesPerWord;
- top1 = top3;
- integerReceiver = positive32BitValueOf(top1);
- if (!GIV(primFailCode)) {
- /* begin push: */
- object = positive32BitIntegerFor(integerReceiver | integerArgument);
- longAtput((sp = GIV(stackPointer) - BytesPerWord), object);
- GIV(stackPointer) = sp;
- }
- else {
- /* begin unPop: */
- GIV(stackPointer) -= 2 * BytesPerWord;
- }
+ primitiveBitOr();
/* begin internalizeIPandSP */
assert(GIV(instructionPointer) != (ceReturnToInterpreterPC()));
localIP = pointerForOop(GIV(instructionPointer));
@@ -24136,35 +24068,30 @@
{ DECL_MAYBE_SQ_GLOBAL_STRUCT
usqInt integerArgument;
usqInt integerReceiver;
- sqInt object;
+ sqInt oop;
+ sqInt oop1;
char *sp;
- sqInt top;
- sqInt top1;
- sqInt top2;
- sqInt top3;
+ char *sp1;
- /* begin popPos32BitInteger */
- /* begin popStack */
- top2 = longAt(GIV(stackPointer));
- GIV(stackPointer) += BytesPerWord;
- top = top2;
- integerArgument = positive32BitValueOf(top);
- /* begin popPos32BitInteger */
- /* begin popStack */
- top3 = longAt(GIV(stackPointer));
- GIV(stackPointer) += BytesPerWord;
- top1 = top3;
- integerReceiver = positive32BitValueOf(top1);
+ integerArgument = longAt(GIV(stackPointer));
+
+ /* Comment out the short-cut. Either the inline interpreter bytecode or the JIT primitive will handle this case.
+ ((objectMemory isIntegerObject: integerArgument)
+ and: [objectMemory isIntegerObject: integerReceiver])
+ ifTrue: [self pop: 2 thenPush: (integerArgument bitAnd: integerReceiver)]
+ ifFalse:
+ [ */
+
+ integerReceiver = longAt(GIV(stackPointer) + (1 * BytesPerWord));
+ integerArgument = positive32BitValueOf(integerArgument);
+ integerReceiver = positive32BitValueOf(integerReceiver);
if (!GIV(primFailCode)) {
- /* begin push: */
- object = positive32BitIntegerFor(integerReceiver & integerArgument);
- longAtput((sp = GIV(stackPointer) - BytesPerWord), object);
- GIV(stackPointer) = sp;
+ /* begin pop:thenPush: */
+ oop1 = positive32BitIntegerFor(integerArgument & integerReceiver);
+ longAtput((sp1 = GIV(stackPointer) + ((2 - 1) * BytesPerWord)), oop1);
+ GIV(stackPointer) = sp1;
}
- else {
- /* begin unPop: */
- GIV(stackPointer) -= 2 * BytesPerWord;
- }
+
}
@@ -24196,35 +24123,30 @@
{ DECL_MAYBE_SQ_GLOBAL_STRUCT
usqInt integerArgument;
usqInt integerReceiver;
- sqInt object;
+ sqInt oop;
+ sqInt oop1;
char *sp;
- sqInt top;
- sqInt top1;
- sqInt top2;
- sqInt top3;
+ char *sp1;
- /* begin popPos32BitInteger */
- /* begin popStack */
- top2 = longAt(GIV(stackPointer));
- GIV(stackPointer) += BytesPerWord;
- top = top2;
- integerArgument = positive32BitValueOf(top);
- /* begin popPos32BitInteger */
- /* begin popStack */
- top3 = longAt(GIV(stackPointer));
- GIV(stackPointer) += BytesPerWord;
- top1 = top3;
- integerReceiver = positive32BitValueOf(top1);
+ integerArgument = longAt(GIV(stackPointer));
+
+ /* Comment out the short-cut. Either the inline interpreter bytecode or the JIT primitive will handle this case.
+ ((objectMemory isIntegerObject: integerArgument)
+ and: [objectMemory isIntegerObject: integerReceiver])
+ ifTrue: [self pop: 2 thenPush: (integerArgument bitOr: integerReceiver)]
+ ifFalse:
+ [ */
+
+ integerReceiver = longAt(GIV(stackPointer) + (1 * BytesPerWord));
+ integerArgument = positive32BitValueOf(integerArgument);
+ integerReceiver = positive32BitValueOf(integerReceiver);
if (!GIV(primFailCode)) {
- /* begin push: */
- object = positive32BitIntegerFor(integerReceiver | integerArgument);
- longAtput((sp = GIV(stackPointer) - BytesPerWord), object);
- GIV(stackPointer) = sp;
+ /* begin pop:thenPush: */
+ oop1 = positive32BitIntegerFor(integerArgument | integerReceiver);
+ longAtput((sp1 = GIV(stackPointer) + ((2 - 1) * BytesPerWord)), oop1);
+ GIV(stackPointer) = sp1;
}
- else {
- /* begin unPop: */
- GIV(stackPointer) -= 2 * BytesPerWord;
- }
+
}
@@ -24392,34 +24314,33 @@
{ DECL_MAYBE_SQ_GLOBAL_STRUCT
usqInt integerArgument;
usqInt integerReceiver;
- sqInt object;
+ sqInt oop;
+ sqInt oop1;
char *sp;
- sqInt top;
- sqInt top1;
- sqInt top2;
- sqInt top3;
+ char *sp1;
+ char *sp2;
- /* begin popPos32BitInteger */
- /* begin popStack */
- top2 = longAt(GIV(stackPointer));
- GIV(stackPointer) += BytesPerWord;
- top = top2;
- integerArgument = positive32BitValueOf(top);
- /* begin popPos32BitInteger */
- /* begin popStack */
- top3 = longAt(GIV(stackPointer));
- GIV(stackPointer) += BytesPerWord;
- top1 = top3;
- integerReceiver = positive32BitValueOf(top1);
- if (!GIV(primFailCode)) {
- /* begin push: */
- object = positive32BitIntegerFor(integerReceiver ^ integerArgument);
- longAtput((sp = GIV(stackPointer) - BytesPerWord), object);
+ integerArgument = longAt(GIV(stackPointer));
+ integerReceiver = longAt(GIV(stackPointer) + (1 * BytesPerWord));
+ if (((integerArgument & 1))
+ && ((integerReceiver & 1))) {
+
+ /* xoring will leave the tag bits zero, whether the tag is 1 or zero, so add it back in. */
+
+ /* begin pop:thenPush: */
+ longAtput((sp = GIV(stackPointer) + ((2 - 1) * BytesPerWord)), (integerArgument ^ integerReceiver) + 1);
GIV(stackPointer) = sp;
}
else {
- /* begin unPop: */
- GIV(stackPointer) -= 2 * BytesPerWord;
+ integerArgument = positive32BitValueOf(integerArgument);
+ integerReceiver = positive32BitValueOf(integerReceiver);
+ if (!GIV(primFailCode)) {
+ /* begin pop:thenPush: */
+ oop1 = positive32BitIntegerFor(integerArgument ^ integerReceiver);
+ longAtput((sp2 = GIV(stackPointer) + ((2 - 1) * BytesPerWord)), oop1);
+ GIV(stackPointer) = sp2;
+ }
+
}
}
Modified: branches/Cog/nscogsrc/vm/cointerp.h
===================================================================
--- branches/Cog/nscogsrc/vm/cointerp.h 2015-02-11 19:21:48 UTC (rev 3252)
+++ branches/Cog/nscogsrc/vm/cointerp.h 2015-02-11 22:20:23 UTC (rev 3253)
@@ -1,5 +1,5 @@
/* Automatically generated by
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.1050 uuid: ad3a825c-97ba-4d01-a0e7-637af8cbf52b
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.1055 uuid: dd8f0ae4-8ad8-470c-a35b-29cf787f83c8
*/
Modified: branches/Cog/nscogsrc/vm/gcc3x-cointerp.c
===================================================================
--- branches/Cog/nscogsrc/vm/gcc3x-cointerp.c 2015-02-11 19:21:48 UTC (rev 3252)
+++ branches/Cog/nscogsrc/vm/gcc3x-cointerp.c 2015-02-11 22:20:23 UTC (rev 3253)
@@ -2,11 +2,11 @@
/* Automatically generated by
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.1050 uuid: ad3a825c-97ba-4d01-a0e7-637af8cbf52b
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.1055 uuid: dd8f0ae4-8ad8-470c-a35b-29cf787f83c8
from
- CoInterpreter VMMaker.oscog-eem.1050 uuid: ad3a825c-97ba-4d01-a0e7-637af8cbf52b
+ CoInterpreter VMMaker.oscog-eem.1055 uuid: dd8f0ae4-8ad8-470c-a35b-29cf787f83c8
*/
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.1050 uuid: ad3a825c-97ba-4d01-a0e7-637af8cbf52b " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.1055 uuid: dd8f0ae4-8ad8-470c-a35b-29cf787f83c8 " __DATE__ ;
char *__interpBuildInfo = __buildInfo;
@@ -2100,7 +2100,7 @@
/* 575 */ (void (*)(void))0,
0 };
char expensiveAsserts = 0;
-const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.1050";
+const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.1055";
sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 40 */;
volatile int sendTrace;
@@ -8090,16 +8090,21 @@
CASE(190)
/* bytecodePrimBitAnd */
{
- usqInt integerArgument;
- usqInt integerReceiver;
- sqInt object;
- char *sp;
- sqInt top;
- sqInt top1;
- sqInt top2;
- sqInt top3;
+ sqInt arg;
+ sqInt rcvr;
VM_LABEL(bytecodePrimBitAnd);
+ arg = longAtPointer(localSP);
+ rcvr = longAtPointer(localSP + (1 * BytesPerOop));
+ if (((arg & 1))
+ && ((rcvr & 1))) {
+ /* begin internalPop:thenPush: */
+ longAtPointerput((localSP += (2 - 1) * BytesPerOop), arg & rcvr);
+ /* begin fetchNextBytecode */
+ currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
+
+ goto l110;
+ }
/* begin initPrimCall */
GIV(primFailCode) = 0;
/* begin externalizeIPandSP */
@@ -8107,29 +8112,7 @@
GIV(instructionPointer) = oopForPointer(localIP);
GIV(stackPointer) = localSP;
GIV(framePointer) = localFP;
- /* begin primitiveBitAnd */
- /* begin popPos32BitInteger */
- /* begin popStack */
- top2 = longAt(GIV(stackPointer));
- GIV(stackPointer) += BytesPerWord;
- top = top2;
- integerArgument = positive32BitValueOf(top);
- /* begin popPos32BitInteger */
- /* begin popStack */
- top3 = longAt(GIV(stackPointer));
- GIV(stackPointer) += BytesPerWord;
- top1 = top3;
- integerReceiver = positive32BitValueOf(top1);
- if (!GIV(primFailCode)) {
- /* begin push: */
- object = positive32BitIntegerFor(integerReceiver & integerArgument);
- longAtput((sp = GIV(stackPointer) - BytesPerWord), object);
- GIV(stackPointer) = sp;
- }
- else {
- /* begin unPop: */
- GIV(stackPointer) -= 2 * BytesPerWord;
- }
+ primitiveBitAnd();
/* begin internalizeIPandSP */
assert(GIV(instructionPointer) != (ceReturnToInterpreterPC()));
localIP = pointerForOop(GIV(instructionPointer));
@@ -8151,16 +8134,21 @@
CASE(191)
/* bytecodePrimBitOr */
{
- usqInt integerArgument;
- usqInt integerReceiver;
- sqInt object;
- char *sp;
- sqInt top;
- sqInt top1;
- sqInt top2;
- sqInt top3;
+ sqInt arg;
+ sqInt rcvr;
VM_LABEL(bytecodePrimBitOr);
+ arg = longAtPointer(localSP);
+ rcvr = longAtPointer(localSP + (1 * BytesPerOop));
+ if (((arg & 1))
+ && ((rcvr & 1))) {
+ /* begin internalPop:thenPush: */
+ longAtPointerput((localSP += (2 - 1) * BytesPerOop), arg | rcvr);
+ /* begin fetchNextBytecode */
+ currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
+
+ goto l111;
+ }
/* begin initPrimCall */
GIV(primFailCode) = 0;
/* begin externalizeIPandSP */
@@ -8168,29 +8156,7 @@
GIV(instructionPointer) = oopForPointer(localIP);
GIV(stackPointer) = localSP;
GIV(framePointer) = localFP;
- /* begin primitiveBitOr */
- /* begin popPos32BitInteger */
- /* begin popStack */
- top2 = longAt(GIV(stackPointer));
- GIV(stackPointer) += BytesPerWord;
- top = top2;
- integerArgument = positive32BitValueOf(top);
- /* begin popPos32BitInteger */
- /* begin popStack */
- top3 = longAt(GIV(stackPointer));
- GIV(stackPointer) += BytesPerWord;
- top1 = top3;
- integerReceiver = positive32BitValueOf(top1);
- if (!GIV(primFailCode)) {
- /* begin push: */
- object = positive32BitIntegerFor(integerReceiver | integerArgument);
- longAtput((sp = GIV(stackPointer) - BytesPerWord), object);
- GIV(stackPointer) = sp;
- }
- else {
- /* begin unPop: */
- GIV(stackPointer) -= 2 * BytesPerWord;
- }
+ primitiveBitOr();
/* begin internalizeIPandSP */
assert(GIV(instructionPointer) != (ceReturnToInterpreterPC()));
localIP = pointerForOop(GIV(instructionPointer));
@@ -11044,16 +11010,21 @@
CASE(350) /*94*/
/* bytecodePrimBitAnd */
{
- usqInt integerArgument;
- usqInt integerReceiver;
- sqInt object;
- char *sp;
- sqInt top;
- sqInt top1;
- sqInt top2;
- sqInt top3;
+ sqInt arg;
+ sqInt rcvr;
VM_LABEL(bytecodePrimBitAnd1);
+ arg = longAtPointer(localSP);
+ rcvr = longAtPointer(localSP + (1 * BytesPerOop));
+ if (((arg & 1))
+ && ((rcvr & 1))) {
+ /* begin internalPop:thenPush: */
+ longAtPointerput((localSP += (2 - 1) * BytesPerOop), arg & rcvr);
+ /* begin fetchNextBytecode */
+ currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
+
+ goto l245;
+ }
/* begin initPrimCall */
GIV(primFailCode) = 0;
/* begin externalizeIPandSP */
@@ -11061,29 +11032,7 @@
GIV(instructionPointer) = oopForPointer(localIP);
GIV(stackPointer) = localSP;
GIV(framePointer) = localFP;
- /* begin primitiveBitAnd */
- /* begin popPos32BitInteger */
- /* begin popStack */
- top2 = longAt(GIV(stackPointer));
- GIV(stackPointer) += BytesPerWord;
- top = top2;
- integerArgument = positive32BitValueOf(top);
- /* begin popPos32BitInteger */
- /* begin popStack */
- top3 = longAt(GIV(stackPointer));
- GIV(stackPointer) += BytesPerWord;
- top1 = top3;
- integerReceiver = positive32BitValueOf(top1);
- if (!GIV(primFailCode)) {
- /* begin push: */
- object = positive32BitIntegerFor(integerReceiver & integerArgument);
- longAtput((sp = GIV(stackPointer) - BytesPerWord), object);
- GIV(stackPointer) = sp;
- }
- else {
- /* begin unPop: */
- GIV(stackPointer) -= 2 * BytesPerWord;
- }
+ primitiveBitAnd();
/* begin internalizeIPandSP */
assert(GIV(instructionPointer) != (ceReturnToInterpreterPC()));
localIP = pointerForOop(GIV(instructionPointer));
@@ -11105,16 +11054,21 @@
CASE(351) /*95*/
/* bytecodePrimBitOr */
{
- usqInt integerArgument;
- usqInt integerReceiver;
- sqInt object;
- char *sp;
- sqInt top;
- sqInt top1;
- sqInt top2;
- sqInt top3;
+ sqInt arg;
+ sqInt rcvr;
VM_LABEL(bytecodePrimBitOr1);
+ arg = longAtPointer(localSP);
+ rcvr = longAtPointer(localSP + (1 * BytesPerOop));
+ if (((arg & 1))
+ && ((rcvr & 1))) {
+ /* begin internalPop:thenPush: */
+ longAtPointerput((localSP += (2 - 1) * BytesPerOop), arg | rcvr);
+ /* begin fetchNextBytecode */
+ currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
+
+ goto l246;
+ }
/* begin initPrimCall */
GIV(primFailCode) = 0;
/* begin externalizeIPandSP */
@@ -11122,29 +11076,7 @@
GIV(instructionPointer) = oopForPointer(localIP);
GIV(stackPointer) = localSP;
GIV(framePointer) = localFP;
- /* begin primitiveBitOr */
- /* begin popPos32BitInteger */
- /* begin popStack */
- top2 = longAt(GIV(stackPointer));
- GIV(stackPointer) += BytesPerWord;
- top = top2;
- integerArgument = positive32BitValueOf(top);
- /* begin popPos32BitInteger */
- /* begin popStack */
- top3 = longAt(GIV(stackPointer));
- GIV(stackPointer) += BytesPerWord;
- top1 = top3;
- integerReceiver = positive32BitValueOf(top1);
- if (!GIV(primFailCode)) {
- /* begin push: */
- object = positive32BitIntegerFor(integerReceiver | integerArgument);
- longAtput((sp = GIV(stackPointer) - BytesPerWord), object);
- GIV(stackPointer) = sp;
- }
- else {
- /* begin unPop: */
- GIV(stackPointer) -= 2 * BytesPerWord;
- }
+ primitiveBitOr();
/* begin internalizeIPandSP */
assert(GIV(instructionPointer) != (ceReturnToInterpreterPC()));
localIP = pointerForOop(GIV(instructionPointer));
@@ -24145,35 +24077,30 @@
{ DECL_MAYBE_SQ_GLOBAL_STRUCT
usqInt integerArgument;
usqInt integerReceiver;
- sqInt object;
+ sqInt oop;
+ sqInt oop1;
char *sp;
- sqInt top;
- sqInt top1;
- sqInt top2;
- sqInt top3;
+ char *sp1;
- /* begin popPos32BitInteger */
- /* begin popStack */
- top2 = longAt(GIV(stackPointer));
- GIV(stackPointer) += BytesPerWord;
- top = top2;
- integerArgument = positive32BitValueOf(top);
- /* begin popPos32BitInteger */
- /* begin popStack */
- top3 = longAt(GIV(stackPointer));
- GIV(stackPointer) += BytesPerWord;
- top1 = top3;
- integerReceiver = positive32BitValueOf(top1);
+ integerArgument = longAt(GIV(stackPointer));
+
+ /* Comment out the short-cut. Either the inline interpreter bytecode or the JIT primitive will handle this case.
+ ((objectMemory isIntegerObject: integerArgument)
+ and: [objectMemory isIntegerObject: integerReceiver])
+ ifTrue: [self pop: 2 thenPush: (integerArgument bitAnd: integerReceiver)]
+ ifFalse:
+ [ */
+
+ integerReceiver = longAt(GIV(stackPointer) + (1 * BytesPerWord));
+ integerArgument = positive32BitValueOf(integerArgument);
+ integerReceiver = positive32BitValueOf(integerReceiver);
if (!GIV(primFailCode)) {
- /* begin push: */
- object = positive32BitIntegerFor(integerReceiver & integerArgument);
- longAtput((sp = GIV(stackPointer) - BytesPerWord), object);
- GIV(stackPointer) = sp;
+ /* begin pop:thenPush: */
+ oop1 = positive32BitIntegerFor(integerArgument & integerReceiver);
+ longAtput((sp1 = GIV(stackPointer) + ((2 - 1) * BytesPerWord)), oop1);
+ GIV(stackPointer) = sp1;
}
- else {
- /* begin unPop: */
- GIV(stackPointer) -= 2 * BytesPerWord;
- }
+
}
@@ -24205,35 +24132,30 @@
{ DECL_MAYBE_SQ_GLOBAL_STRUCT
usqInt integerArgument;
usqInt integerReceiver;
- sqInt object;
+ sqInt oop;
+ sqInt oop1;
char *sp;
- sqInt top;
- sqInt top1;
- sqInt top2;
- sqInt top3;
+ char *sp1;
- /* begin popPos32BitInteger */
- /* begin popStack */
- top2 = longAt(GIV(stackPointer));
- GIV(stackPointer) += BytesPerWord;
- top = top2;
- integerArgument = positive32BitValueOf(top);
- /* begin popPos32BitInteger */
- /* begin popStack */
- top3 = longAt(GIV(stackPointer));
- GIV(stackPointer) += BytesPerWord;
- top1 = top3;
- integerReceiver = positive32BitValueOf(top1);
+ integerArgument = longAt(GIV(stackPointer));
+
+ /* Comment out the short-cut. Either the inline interpreter bytecode or the JIT primitive will handle this case.
+ ((objectMemory isIntegerObject: integerArgument)
+ and: [objectMemory isIntegerObject: integerReceiver])
+ ifTrue: [self pop: 2 thenPush: (integerArgument bitOr: integerReceiver)]
+ ifFalse:
+ [ */
+
+ integerReceiver = longAt(GIV(stackPointer) + (1 * BytesPerWord));
+ integerArgument = positive32BitValueOf(integerArgument);
+ integerReceiver = positive32BitValueOf(integerReceiver);
if (!GIV(primFailCode)) {
- /* begin push: */
- object = positive32BitIntegerFor(integerReceiver | integerArgument);
- longAtput((sp = GIV(stackPointer) - BytesPerWord), object);
- GIV(stackPointer) = sp;
+ /* begin pop:thenPush: */
+ oop1 = positive32BitIntegerFor(integerArgument | integerReceiver);
+ longAtput((sp1 = GIV(stackPointer) + ((2 - 1) * BytesPerWord)), oop1);
+ GIV(stackPointer) = sp1;
}
- else {
- /* begin unPop: */
- GIV(stackPointer) -= 2 * BytesPerWord;
- }
+
}
@@ -24401,34 +24323,33 @@
{ DECL_MAYBE_SQ_GLOBAL_STRUCT
usqInt integerArgument;
usqInt integerReceiver;
- sqInt object;
+ sqInt oop;
+ sqInt oop1;
char *sp;
- sqInt top;
- sqInt top1;
- sqInt top2;
- sqInt top3;
+ char *sp1;
+ char *sp2;
- /* begin popPos32BitInteger */
- /* begin popStack */
- top2 = longAt(GIV(stackPointer));
- GIV(stackPointer) += BytesPerWord;
- top = top2;
- integerArgument = positive32BitValueOf(top);
- /* begin popPos32BitInteger */
- /* begin popStack */
- top3 = longAt(GIV(stackPointer));
- GIV(stackPointer) += BytesPerWord;
- top1 = top3;
- integerReceiver = positive32BitValueOf(top1);
- if (!GIV(primFailCode)) {
- /* begin push: */
- object = positive32BitIntegerFor(integerReceiver ^ integerArgument);
- longAtput((sp = GIV(stackPointer) - BytesPerWord), object);
+ integerArgument = longAt(GIV(stackPointer));
+ integerReceiver = longAt(GIV(stackPointer) + (1 * BytesPerWord));
+ if (((integerArgument & 1))
+ && ((integerReceiver & 1))) {
+
+ /* xoring will leave the tag bits zero, whether the tag is 1 or zero, so add it back in. */
+
+ /* begin pop:thenPush: */
+ longAtput((sp = GIV(stackPointer) + ((2 - 1) * BytesPerWord)), (integerArgument ^ integerReceiver) + 1);
GIV(stackPointer) = sp;
}
else {
- /* begin unPop: */
- GIV(stackPointer) -= 2 * BytesPerWord;
+ integerArgument = positive32BitValueOf(integerArgument);
+ integerReceiver = positive32BitValueOf(integerReceiver);
+ if (!GIV(primFailCode)) {
+ /* begin pop:thenPush: */
+ oop1 = positive32BitIntegerFor(integerArgument ^ integerReceiver);
+ longAtput((sp2 = GIV(stackPointer) + ((2 - 1) * BytesPerWord)), oop1);
+ GIV(stackPointer) = sp2;
+ }
+
}
}
Modified: branches/Cog/nsspursrc/vm/cointerp.c
===================================================================
--- branches/Cog/nsspursrc/vm/cointerp.c 2015-02-11 19:21:48 UTC (rev 3252)
+++ branches/Cog/nsspursrc/vm/cointerp.c 2015-02-11 22:20:23 UTC (rev 3253)
@@ -1,9 +1,9 @@
/* Automatically generated by
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.1053 uuid: 86f23972-c4fa-430d-93b9-865bb86a098d
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.1055 uuid: dd8f0ae4-8ad8-470c-a35b-29cf787f83c8
from
- CoInterpreter VMMaker.oscog-eem.1053 uuid: 86f23972-c4fa-430d-93b9-865bb86a098d
+ CoInterpreter VMMaker.oscog-eem.1055 uuid: dd8f0ae4-8ad8-470c-a35b-29cf787f83c8
*/
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.1053 uuid: 86f23972-c4fa-430d-93b9-865bb86a098d " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.1055 uuid: dd8f0ae4-8ad8-470c-a35b-29cf787f83c8 " __DATE__ ;
char *__interpBuildInfo = __buildInfo;
@@ -2325,7 +2325,7 @@
/* 575 */ (void (*)(void))0,
0 };
static signed char primitiveAccessorDepthTable[MaxPrimitiveIndex + 2 /* 577 */] = {
-/*0*/ -1,-1,-1,-1,-1,-1,-1,-1,-1, 0, 0,-1,-1, 0,-1,-1,-1, 0, 0,-1,
+/*0*/ -1,-1,-1,-1,-1,-1,-1,-1,-1, 0, 0,-1,-1, 0, 0, 0, 0, 0, 0,-1,
/*20*/ 0, 0, 0,-1,-1,-1,-1,-1,-1, 0, 0, 0, 0, 0,-1,-1,-1, 0, 0, 0,
/*40*/ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
/*60*/ 0, 0, 1,-1,-1,-1,-1,-1, 0, 0,-1,-1, 0, 1, 1, 0, 0, 0, 0, 0,
@@ -2356,7 +2356,7 @@
/*560*/ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 0, 0, 0,-1,-1
};
char expensiveAsserts = 0;
-const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.1053";
+const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.1055";
sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 40 */;
volatile int sendTrace;
@@ -8952,16 +8952,21 @@
case 190:
/* bytecodePrimBitAnd */
{
- usqInt integerArgument;
- usqInt integerReceiver;
- sqInt object;
- char *sp;
- sqInt top;
- sqInt top1;
- sqInt top2;
- sqInt top3;
+ sqInt arg;
+ sqInt rcvr;
VM_LABEL(bytecodePrimBitAnd);
+ arg = longAtPointer(localSP);
+ rcvr = longAtPointer(localSP + (1 * BytesPerOop));
+ if (((arg & 1))
+ && ((rcvr & 1))) {
+ /* begin internalPop:thenPush: */
+ longAtPointerput((localSP += (2 - 1) * BytesPerOop), arg & rcvr);
+ /* begin fetchNextBytecode */
+ currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
+
+ goto l77;
+ }
/* begin initPrimCall */
GIV(primFailCode) = 0;
/* begin externalizeIPandSP */
@@ -8969,29 +8974,7 @@
GIV(instructionPointer) = oopForPointer(localIP);
GIV(stackPointer) = localSP;
GIV(framePointer) = localFP;
- /* begin primitiveBitAnd */
- /* begin popPos32BitInteger */
- /* begin popStack */
- top2 = longAt(GIV(stackPointer));
- GIV(stackPointer) += BytesPerWord;
- top = top2;
- integerArgument = positive32BitValueOf(top);
- /* begin popPos32BitInteger */
- /* begin popStack */
- top3 = longAt(GIV(stackPointer));
- GIV(stackPointer) += BytesPerWord;
- top1 = top3;
- integerReceiver = positive32BitValueOf(top1);
- if (!GIV(primFailCode)) {
- /* begin push: */
- object = positive32BitIntegerFor(integerReceiver & integerArgument);
- longAtput((sp = GIV(stackPointer) - BytesPerWord), object);
- GIV(stackPointer) = sp;
- }
- else {
- /* begin unPop: */
- GIV(stackPointer) -= 2 * BytesPerWord;
- }
+ primitiveBitAnd();
/* begin internalizeIPandSP */
assert(GIV(instructionPointer) != (ceReturnToInterpreterPC()));
localIP = pointerForOop(GIV(instructionPointer));
@@ -9013,16 +8996,21 @@
case 191:
/* bytecodePrimBitOr */
{
- usqInt integerArgument;
- usqInt integerReceiver;
- sqInt object;
- char *sp;
- sqInt top;
- sqInt top1;
- sqInt top2;
- sqInt top3;
+ sqInt arg;
+ sqInt rcvr;
VM_LABEL(bytecodePrimBitOr);
+ arg = longAtPointer(localSP);
+ rcvr = longAtPointer(localSP + (1 * BytesPerOop));
+ if (((arg & 1))
+ && ((rcvr & 1))) {
+ /* begin internalPop:thenPush: */
+ longAtPointerput((localSP += (2 - 1) * BytesPerOop), arg | rcvr);
+ /* begin fetchNextBytecode */
+ currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
+
+ goto l78;
+ }
/* begin initPrimCall */
GIV(primFailCode) = 0;
/* begin externalizeIPandSP */
@@ -9030,29 +9018,7 @@
GIV(instructionPointer) = oopForPointer(localIP);
GIV(stackPointer) = localSP;
GIV(framePointer) = localFP;
- /* begin primitiveBitOr */
- /* begin popPos32BitInteger */
- /* begin popStack */
- top2 = longAt(GIV(stackPointer));
- GIV(stackPointer) += BytesPerWord;
- top = top2;
- integerArgument = positive32BitValueOf(top);
- /* begin popPos32BitInteger */
- /* begin popStack */
- top3 = longAt(GIV(stackPointer));
- GIV(stackPointer) += BytesPerWord;
- top1 = top3;
- integerReceiver = positive32BitValueOf(top1);
- if (!GIV(primFailCode)) {
- /* begin push: */
- object = positive32BitIntegerFor(integerReceiver | integerArgument);
- longAtput((sp = GIV(stackPointer) - BytesPerWord), object);
- GIV(stackPointer) = sp;
- }
- else {
- /* begin unPop: */
- GIV(stackPointer) -= 2 * BytesPerWord;
- }
+ primitiveBitOr();
/* begin internalizeIPandSP */
assert(GIV(instructionPointer) != (ceReturnToInterpreterPC()));
localIP = pointerForOop(GIV(instructionPointer));
@@ -11701,16 +11667,21 @@
case 350: /*94*/
/* bytecodePrimBitAnd */
{
- usqInt integerArgument;
- usqInt integerReceiver;
- sqInt object;
- char *sp;
- sqInt top;
- sqInt top1;
- sqInt top2;
- sqInt top3;
+ sqInt arg;
+ sqInt rcvr;
VM_LABEL(bytecodePrimBitAnd1);
+ arg = longAtPointer(localSP);
+ rcvr = longAtPointer(localSP + (1 * BytesPerOop));
+ if (((arg & 1))
+ && ((rcvr & 1))) {
+ /* begin internalPop:thenPush: */
+ longAtPointerput((localSP += (2 - 1) * BytesPerOop), arg & rcvr);
+ /* begin fetchNextBytecode */
+ currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
+
+ goto l171;
+ }
/* begin initPrimCall */
GIV(primFailCode) = 0;
/* begin externalizeIPandSP */
@@ -11718,29 +11689,7 @@
GIV(instructionPointer) = oopForPointer(localIP);
GIV(stackPointer) = localSP;
GIV(framePointer) = localFP;
- /* begin primitiveBitAnd */
- /* begin popPos32BitInteger */
- /* begin popStack */
- top2 = longAt(GIV(stackPointer));
- GIV(stackPointer) += BytesPerWord;
- top = top2;
- integerArgument = positive32BitValueOf(top);
- /* begin popPos32BitInteger */
- /* begin popStack */
- top3 = longAt(GIV(stackPointer));
- GIV(stackPointer) += BytesPerWord;
- top1 = top3;
- integerReceiver = positive32BitValueOf(top1);
- if (!GIV(primFailCode)) {
- /* begin push: */
- object = positive32BitIntegerFor(integerReceiver & integerArgument);
- longAtput((sp = GIV(stackPointer) - BytesPerWord), object);
- GIV(stackPointer) = sp;
- }
- else {
- /* begin unPop: */
- GIV(stackPointer) -= 2 * BytesPerWord;
- }
+ primitiveBitAnd();
/* begin internalizeIPandSP */
assert(GIV(instructionPointer) != (ceReturnToInterpreterPC()));
localIP = pointerForOop(GIV(instructionPointer));
@@ -11762,16 +11711,21 @@
case 351: /*95*/
/* bytecodePrimBitOr */
{
- usqInt integerArgument;
- usqInt integerReceiver;
- sqInt object;
- char *sp;
- sqInt top;
- sqInt top1;
- sqInt top2;
- sqInt top3;
+ sqInt arg;
+ sqInt rcvr;
VM_LABEL(bytecodePrimBitOr1);
+ arg = longAtPointer(localSP);
+ rcvr = longAtPointer(localSP + (1 * BytesPerOop));
+ if (((arg & 1))
+ && ((rcvr & 1))) {
+ /* begin internalPop:thenPush: */
+ longAtPointerput((localSP += (2 - 1) * BytesPerOop), arg | rcvr);
+ /* begin fetchNextBytecode */
+ currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
+
+ goto l172;
+ }
/* begin initPrimCall */
GIV(primFailCode) = 0;
/* begin externalizeIPandSP */
@@ -11779,29 +11733,7 @@
GIV(instructionPointer) = oopForPointer(localIP);
GIV(stackPointer) = localSP;
GIV(framePointer) = localFP;
- /* begin primitiveBitOr */
- /* begin popPos32BitInteger */
- /* begin popStack */
- top2 = longAt(GIV(stackPointer));
- GIV(stackPointer) += BytesPerWord;
- top = top2;
- integerArgument = positive32BitValueOf(top);
- /* begin popPos32BitInteger */
- /* begin popStack */
- top3 = longAt(GIV(stackPointer));
- GIV(stackPointer) += BytesPerWord;
- top1 = top3;
- integerReceiver = positive32BitValueOf(top1);
- if (!GIV(primFailCode)) {
- /* begin push: */
- object = positive32BitIntegerFor(integerReceiver | integerArgument);
- longAtput((sp = GIV(stackPointer) - BytesPerWord), object);
- GIV(stackPointer) = sp;
- }
- else {
- /* begin unPop: */
- GIV(stackPointer) -= 2 * BytesPerWord;
- }
+ primitiveBitOr();
/* begin internalizeIPandSP */
assert(GIV(instructionPointer) != (ceReturnToInterpreterPC()));
localIP = pointerForOop(GIV(instructionPointer));
@@ -28360,37 +28292,32 @@
static void
primitiveBitAnd(void)
{ DECL_MAYBE_SQ_GLOBAL_STRUCT
- usqInt integerArgument;
- usqInt integerReceiver;
- sqInt object;
+ usqLong integerArgument;
+ usqLong integerReceiver;
+ sqInt oop;
+ sqInt oop1;
char *sp;
- sqInt top;
- sqInt top1;
- sqInt top2;
- sqInt top3;
+ char *sp1;
- /* begin popPos32BitInteger */
- /* begin popStack */
- top2 = longAt(GIV(stackPointer));
- GIV(stackPointer) += BytesPerWord;
- top = top2;
- integerArgument = positive32BitValueOf(top);
- /* begin popPos32BitInteger */
- /* begin popStack */
- top3 = longAt(GIV(stackPointer));
- GIV(stackPointer) += BytesPerWord;
- top1 = top3;
- integerReceiver = positive32BitValueOf(top1);
+ integerArgument = longAt(GIV(stackPointer));
+
+ /* Comment out the short-cut. Either the inline interpreter bytecode or the JIT primitive will handle this case.
+ ((objectMemory isIntegerObject: integerArgument)
+ and: [objectMemory isIntegerObject: integerReceiver])
+ ifTrue: [self pop: 2 thenPush: (integerArgument bitAnd: integerReceiver)]
+ ifFalse:
+ [ */
+
+ integerReceiver = longAt(GIV(stackPointer) + (1 * BytesPerWord));
+ integerArgument = positive32BitValueOf(integerArgument);
+ integerReceiver = positive32BitValueOf(integerReceiver);
if (!GIV(primFailCode)) {
- /* begin push: */
- object = positive32BitIntegerFor(integerReceiver & integerArgument);
- longAtput((sp = GIV(stackPointer) - BytesPerWord), object);
- GIV(stackPointer) = sp;
+ /* begin pop:thenPush: */
+ oop1 = positive32BitIntegerFor(integerArgument & integerReceiver);
+ longAtput((sp1 = GIV(stackPointer) + ((2 - 1) * BytesPerWord)), oop1);
+ GIV(stackPointer) = sp1;
}
- else {
- /* begin unPop: */
- GIV(stackPointer) -= 2 * BytesPerWord;
- }
+
}
@@ -28420,37 +28347,32 @@
static void
primitiveBitOr(void)
{ DECL_MAYBE_SQ_GLOBAL_STRUCT
- usqInt integerArgument;
- usqInt integerReceiver;
- sqInt object;
+ usqLong integerArgument;
+ usqLong integerReceiver;
+ sqInt oop;
+ sqInt oop1;
char *sp;
- sqInt top;
- sqInt top1;
- sqInt top2;
- sqInt top3;
+ char *sp1;
- /* begin popPos32BitInteger */
- /* begin popStack */
- top2 = longAt(GIV(stackPointer));
- GIV(stackPointer) += BytesPerWord;
- top = top2;
- integerArgument = positive32BitValueOf(top);
- /* begin popPos32BitInteger */
- /* begin popStack */
- top3 = longAt(GIV(stackPointer));
- GIV(stackPointer) += BytesPerWord;
- top1 = top3;
- integerReceiver = positive32BitValueOf(top1);
+ integerArgument = longAt(GIV(stackPointer));
+
+ /* Comment out the short-cut. Either the inline interpreter bytecode or the JIT primitive will handle this case.
+ ((objectMemory isIntegerObject: integerArgument)
+ and: [objectMemory isIntegerObject: integerReceiver])
+ ifTrue: [self pop: 2 thenPush: (integerArgument bitOr: integerReceiver)]
+ ifFalse:
+ [ */
+
+ integerReceiver = longAt(GIV(stackPointer) + (1 * BytesPerWord));
+ integerArgument = positive32BitValueOf(integerArgument);
+ integerReceiver = positive32BitValueOf(integerReceiver);
if (!GIV(primFailCode)) {
- /* begin push: */
- object = positive32BitIntegerFor(integerReceiver | integerArgument);
- longAtput((sp = GIV(stackPointer) - BytesPerWord), object);
- GIV(stackPointer) = sp;
+ /* begin pop:thenPush: */
+ oop1 = positive32BitIntegerFor(integerArgument | integerReceiver);
+ longAtput((sp1 = GIV(stackPointer) + ((2 - 1) * BytesPerWord)), oop1);
+ GIV(stackPointer) = sp1;
}
- else {
- /* begin unPop: */
- GIV(stackPointer) -= 2 * BytesPerWord;
- }
+
}
@@ -28616,36 +28538,35 @@
static void
primitiveBitXor(void)
{ DECL_MAYBE_SQ_GLOBAL_STRUCT
- usqInt integerArgument;
- usqInt integerReceiver;
- sqInt object;
+ usqLong integerArgument;
+ usqLong integerReceiver;
+ sqInt oop;
+ sqInt oop1;
char *sp;
- sqInt top;
- sqInt top1;
- sqInt top2;
- sqInt top3;
+ char *sp1;
+ char *sp2;
- /* begin popPos32BitInteger */
- /* begin popStack */
- top2 = longAt(GIV(stackPointer));
- GIV(stackPointer) += BytesPerWord;
- top = top2;
- integerArgument = positive32BitValueOf(top);
- /* begin popPos32BitInteger */
- /* begin popStack */
- top3 = longAt(GIV(stackPointer));
- GIV(stackPointer) += BytesPerWord;
- top1 = top3;
- integerReceiver = positive32BitValueOf(top1);
- if (!GIV(primFailCode)) {
- /* begin push: */
- object = positive32BitIntegerFor(integerReceiver ^ integerArgument);
- longAtput((sp = GIV(stackPointer) - BytesPerWord), object);
+ integerArgument = longAt(GIV(stackPointer));
+ integerReceiver = longAt(GIV(stackPointer) + (1 * BytesPerWord));
+ if (((integerArgument & 1))
+ && ((integerReceiver & 1))) {
+
+ /* xoring will leave the tag bits zero, whether the tag is 1 or zero, so add it back in. */
+
+ /* begin pop:thenPush: */
+ longAtput((sp = GIV(stackPointer) + ((2 - 1) * BytesPerWord)), (integerArgument ^ integerReceiver) + 1);
GIV(stackPointer) = sp;
}
else {
- /* begin unPop: */
- GIV(stackPointer) -= 2 * BytesPerWord;
+ integerArgument = positive32BitValueOf(integerArgument);
+ integerReceiver = positive32BitValueOf(integerReceiver);
+ if (!GIV(primFailCode)) {
+ /* begin pop:thenPush: */
+ oop1 = positive32BitIntegerFor(integerArgument ^ integerReceiver);
+ longAtput((sp2 = GIV(stackPointer) + ((2 - 1) * BytesPerWord)), oop1);
+ GIV(stackPointer) = sp2;
+ }
+
}
}
Modified: branches/Cog/nsspursrc/vm/cointerp.h
===================================================================
--- branches/Cog/nsspursrc/vm/cointerp.h 2015-02-11 19:21:48 UTC (rev 3252)
+++ branches/Cog/nsspursrc/vm/cointerp.h 2015-02-11 22:20:23 UTC (rev 3253)
@@ -1,5 +1,5 @@
/* Automatically generated by
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.1053 uuid: 86f23972-c4fa-430d-93b9-865bb86a098d
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.1055 uuid: dd8f0ae4-8ad8-470c-a35b-29cf787f83c8
*/
Modified: branches/Cog/nsspursrc/vm/gcc3x-cointerp.c
===================================================================
--- branches/Cog/nsspursrc/vm/gcc3x-cointerp.c 2015-02-11 19:21:48 UTC (rev 3252)
+++ branches/Cog/nsspursrc/vm/gcc3x-cointerp.c 2015-02-11 22:20:23 UTC (rev 3253)
@@ -2,11 +2,11 @@
/* Automatically generated by
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.1053 uuid: 86f23972-c4fa-430d-93b9-865bb86a098d
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.1055 uuid: dd8f0ae4-8ad8-470c-a35b-29cf787f83c8
from
- CoInterpreter VMMaker.oscog-eem.1053 uuid: 86f23972-c4fa-430d-93b9-865bb86a098d
+ CoInterpreter VMMaker.oscog-eem.1055 uuid: dd8f0ae4-8ad8-470c-a35b-29cf787f83c8
*/
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.1053 uuid: 86f23972-c4fa-430d-93b9-865bb86a098d " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.1055 uuid: dd8f0ae4-8ad8-470c-a35b-29cf787f83c8 " __DATE__ ;
char *__interpBuildInfo = __buildInfo;
@@ -2328,7 +2328,7 @@
/* 575 */ (void (*)(void))0,
0 };
static signed char primitiveAccessorDepthTable[MaxPrimitiveIndex + 2 /* 577 */] = {
-/*0*/ -1,-1,-1,-1,-1,-1,-1,-1,-1, 0, 0,-1,-1, 0,-1,-1,-1, 0, 0,-1,
+/*0*/ -1,-1,-1,-1,-1,-1,-1,-1,-1, 0, 0,-1,-1, 0, 0, 0, 0, 0, 0,-1,
/*20*/ 0, 0, 0,-1,-1,-1,-1,-1,-1, 0, 0, 0, 0, 0,-1,-1,-1, 0, 0, 0,
/*40*/ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
/*60*/ 0, 0, 1,-1,-1,-1,-1,-1, 0, 0,-1,-1, 0, 1, 1, 0, 0, 0, 0, 0,
@@ -2359,7 +2359,7 @@
/*560*/ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 0, 0, 0,-1,-1
};
char expensiveAsserts = 0;
-const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.1053";
+const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.1055";
sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 40 */;
volatile int sendTrace;
@@ -8961,16 +8961,21 @@
CASE(190)
/* bytecodePrimBitAnd */
{
- usqInt integerArgument;
- usqInt integerReceiver;
- sqInt object;
- char *sp;
- sqInt top;
- sqInt top1;
- sqInt top2;
- sqInt top3;
+ sqInt arg;
+ sqInt rcvr;
VM_LABEL(bytecodePrimBitAnd);
+ arg = longAtPointer(localSP);
+ rcvr = longAtPointer(localSP + (1 * BytesPerOop));
+ if (((arg & 1))
+ && ((rcvr & 1))) {
+ /* begin internalPop:thenPush: */
+ longAtPointerput((localSP += (2 - 1) * BytesPerOop), arg & rcvr);
+ /* begin fetchNextBytecode */
+ currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
+
+ goto l77;
+ }
/* begin initPrimCall */
GIV(primFailCode) = 0;
/* begin externalizeIPandSP */
@@ -8978,29 +8983,7 @@
GIV(instructionPointer) = oopForPointer(localIP);
GIV(stackPointer) = localSP;
GIV(framePointer) = localFP;
- /* begin primitiveBitAnd */
- /* begin popPos32BitInteger */
- /* begin popStack */
- top2 = longAt(GIV(stackPointer));
- GIV(stackPointer) += BytesPerWord;
- top = top2;
- integerArgument = positive32BitValueOf(top);
- /* begin popPos32BitInteger */
- /* begin popStack */
- top3 = longAt(GIV(stackPointer));
- GIV(stackPointer) += BytesPerWord;
- top1 = top3;
- integerReceiver = positive32BitValueOf(top1);
- if (!GIV(primFailCode)) {
- /* begin push: */
- object = positive32BitIntegerFor(integerReceiver & integerArgument);
- longAtput((sp = GIV(stackPointer) - BytesPerWord), object);
- GIV(stackPointer) = sp;
- }
- else {
- /* begin unPop: */
- GIV(stackPointer) -= 2 * BytesPerWord;
- }
+ primitiveBitAnd();
/* begin internalizeIPandSP */
assert(GIV(instructionPointer) != (ceReturnToInterpreterPC()));
localIP = pointerForOop(GIV(instructionPointer));
@@ -9022,16 +9005,21 @@
CASE(191)
/* bytecodePrimBitOr */
{
- usqInt integerArgument;
- usqInt integerReceiver;
- sqInt object;
- char *sp;
- sqInt top;
- sqInt top1;
- sqInt top2;
- sqInt top3;
+ sqInt arg;
+ sqInt rcvr;
VM_LABEL(bytecodePrimBitOr);
+ arg = longAtPointer(localSP);
+ rcvr = longAtPointer(localSP + (1 * BytesPerOop));
+ if (((arg & 1))
+ && ((rcvr & 1))) {
+ /* begin internalPop:thenPush: */
+ longAtPointerput((localSP += (2 - 1) * BytesPerOop), arg | rcvr);
+ /* begin fetchNextBytecode */
+ currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
+
+ goto l78;
+ }
/* begin initPrimCall */
GIV(primFailCode) = 0;
/* begin externalizeIPandSP */
@@ -9039,29 +9027,7 @@
GIV(instructionPointer) = oopForPointer(localIP);
GIV(stackPointer) = localSP;
GIV(framePointer) = localFP;
- /* begin primitiveBitOr */
- /* begin popPos32BitInteger */
- /* begin popStack */
- top2 = longAt(GIV(stackPointer));
- GIV(stackPointer) += BytesPerWord;
- top = top2;
- integerArgument = positive32BitValueOf(top);
- /* begin popPos32BitInteger */
- /* begin popStack */
- top3 = longAt(GIV(stackPointer));
- GIV(stackPointer) += BytesPerWord;
- top1 = top3;
- integerReceiver = positive32BitValueOf(top1);
- if (!GIV(primFailCode)) {
- /* begin push: */
- object = positive32BitIntegerFor(integerReceiver | integerArgument);
- longAtput((sp = GIV(stackPointer) - BytesPerWord), object);
- GIV(stackPointer) = sp;
- }
- else {
- /* begin unPop: */
- GIV(stackPointer) -= 2 * BytesPerWord;
- }
+ primitiveBitOr();
/* begin internalizeIPandSP */
assert(GIV(instructionPointer) != (ceReturnToInterpreterPC()));
localIP = pointerForOop(GIV(instructionPointer));
@@ -11710,16 +11676,21 @@
CASE(350) /*94*/
/* bytecodePrimBitAnd */
{
- usqInt integerArgument;
- usqInt integerReceiver;
- sqInt object;
- char *sp;
- sqInt top;
- sqInt top1;
- sqInt top2;
- sqInt top3;
+ sqInt arg;
+ sqInt rcvr;
VM_LABEL(bytecodePrimBitAnd1);
+ arg = longAtPointer(localSP);
+ rcvr = longAtPointer(localSP + (1 * BytesPerOop));
+ if (((arg & 1))
+ && ((rcvr & 1))) {
+ /* begin internalPop:thenPush: */
+ longAtPointerput((localSP += (2 - 1) * BytesPerOop), arg & rcvr);
+ /* begin fetchNextBytecode */
+ currentBytecode = (byteAtPointer(++localIP)) + GIV(bytecodeSetSelector);
+
+ goto l171;
+ }
/* begin initPrimCall */
GIV(primFailCode) = 0;
/* begin externalizeIPandSP */
@@ -11727,29 +11698,7 @@
GIV(instructionPointer) = oopForPointer(localIP);
GIV(stackPointer) = localSP;
GIV(framePointer) = localFP;
- /* begin primitiveBitAnd */
- /* begin popPos32BitInteger */
- /* begin popStack */
- top2 = longAt(GIV(stackPointer));
- GIV(stackPointer) += BytesPerWord;
- top = top2;
- integerArgument = positive32BitValueOf(top);
- /* begin popPos32BitInteger */
- /* begin popStack */
- top3 = longAt(GIV(stackPointer));
- GIV(stackPointer) += BytesPerWord;
- top1 = top3;
- integerReceiver = positive32BitValueOf(top1);
- if (!GIV(primFailCode)) {
- /* begin push: */
- object = positive32BitIntegerFor(integerReceiver & integerArgument);
- longAtput((sp = GIV(stackPointer) - BytesPerWord), object);
@@ Diff output truncated at 50000 characters. @@
More information about the Vm-dev
mailing list