Revision: 3154
Author: eliot
Date: 2014-11-27 16:08:50 -0800 (Thu, 27 Nov 2014)
Log Message:
-----------
CogVM source as per VMMaker.oscog-eem.957
Fix regression in magnitude64BitIntegerFor:neg:
Move dispdbg.h above cointerp.h & cogit.h in cogit.c
otherwise NoDbgRegParms gets screwed up.
Use asInteger instead of asUnsignedInteger
in followForwardingPointersInStackZone: so
simulation of Stack VM doesn't trigger the assert in asUnsignedInteger.
Spur:
Make instantiateClass:indexableSize: check for Float instantiation, failing for
other than 2 words. Rewrite 32-bit coalesce:and: to use the raw slot accessors.
Implement 64-bit coalesce:and:.
Make printStackCallStackOf: accept contexts.
Fix compilation warnings in SqueakFFIPrims.
Nuke obsolete AddSmallFloat.st
Modified Paths:
--------------
branches/Cog/image/buildspurtrunkimage.sh
branches/Cog/nscogsrc/vm/cogit.c
branches/Cog/nscogsrc/vm/cogit.h
branches/Cog/nscogsrc/vm/cointerp.c
branches/Cog/nscogsrc/vm/cointerp.h
branches/Cog/nscogsrc/vm/gcc3x-cointerp.c
branches/Cog/nsspursrc/vm/cogit.c
branches/Cog/nsspursrc/vm/cogit.h
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/cogit.c
branches/Cog/sistasrc/vm/cogit.h
branches/Cog/sistasrc/vm/cointerp.c
branches/Cog/sistasrc/vm/cointerp.h
branches/Cog/sistasrc/vm/gcc3x-cointerp.c
branches/Cog/spursistasrc/vm/cogit.c
branches/Cog/spursistasrc/vm/cogit.h
branches/Cog/spursistasrc/vm/cointerp.c
branches/Cog/spursistasrc/vm/cointerp.h
branches/Cog/spursistasrc/vm/gcc3x-cointerp.c
branches/Cog/spursrc/vm/cogit.c
branches/Cog/spursrc/vm/cogit.h
branches/Cog/spursrc/vm/cointerp.c
branches/Cog/spursrc/vm/cointerp.h
branches/Cog/spursrc/vm/gcc3x-cointerp.c
branches/Cog/spurstacksrc/vm/gcc3x-interp.c
branches/Cog/spurstacksrc/vm/interp.c
branches/Cog/src/plugins/SqueakFFIPrims/ARM32FFIPlugin.c
branches/Cog/src/plugins/SqueakFFIPrims/IA32FFIPlugin.c
branches/Cog/src/vm/cogit.c
branches/Cog/src/vm/cogit.h
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
Removed Paths:
-------------
branches/Cog/image/AddSmallFloat.st
Property Changed:
----------------
branches/Cog/platforms/Cross/vm/sqSCCSVersion.h
Deleted: branches/Cog/image/AddSmallFloat.st
===================================================================
--- branches/Cog/image/AddSmallFloat.st 2014-11-26 22:45:03 UTC (rev 3153)
+++ branches/Cog/image/AddSmallFloat.st 2014-11-28 00:08:50 UTC (rev 3154)
@@ -1,55 +0,0 @@
-Number subclass: #LimitedPrecisionReal
- instanceVariableNames: ''
- classVariableNames: ''
- poolDictionaries: ''
- category: 'Kernel-Numbers'.
-
-LimitedPrecisionReal immediateSubclass: #SmallFloat
- instanceVariableNames: ''
- classVariableNames: ''
- poolDictionaries: ''
- category: 'Kernel-Numbers'.
-
-Float superclass: LimitedPrecisionReal.
-Float class superclass: LimitedPrecisionReal class.
-Number removeSubclass: Float.
-Number class removeSubclass: Float class.
-LimitedPrecisionReal addSubclass: Float.
-LimitedPrecisionReal class addSubclass: Float class.
-
-LimitedPrecisionReal ensureClassPool.
-Float classPool keys do:
- [:key|
- LimitedPrecisionReal classPool declare: key from: Float classPool].
-
-Float selectors do:
- [:s| | m |
- m := Float >> s.
- (((#(0 38 39) includes: m primitive) or: [m isQuick])
- and: [m protocol ~~ #copying]) ifTrue:
- [LimitedPrecisionReal methodDict at: s put: m.
- Float methodDict removeKey: s.
- m methodClassAssociation: LimitedPrecisionReal binding]].
-
-SystemChangeNotifier uniqueInstance doSilently:
- [LimitedPrecisionReal organization changeFromString: Float organization printString.
- LimitedPrecisionReal selectors do:
- [:s|
- LimitedPrecisionReal organization classify: s under: (Float organization categoryOfElement: s).
- Float organization removeElement: s].
- LimitedPrecisionReal organization removeEmptyCategories.
- Float organization removeEmptyCategories].
-
-Float selectors do:
- [:s| | m src |
- m := Float >> s.
- m primitive > 0 ifTrue:
- [src := (Float sourceCodeAt: s) asString.
- src := src copyReplaceAll: '<primitive: ' with: '<primitive: 5'.
- SmallFloat compile: src classified: m protocol]].
-
-(SmallInteger organization listAtCategoryNamed: #copying) do:
- [:s|
- SmallFloat compile: (SmallInteger sourceCodeAt: s) asString classified: #copying].
-
-Smalltalk snapshot: true andQuit: true
Modified: branches/Cog/image/buildspurtrunkimage.sh
===================================================================
--- branches/Cog/image/buildspurtrunkimage.sh 2014-11-26 22:45:03 UTC (rev 3153)
+++ branches/Cog/image/buildspurtrunkimage.sh 2014-11-28 00:08:50 UTC (rev 3154)
@@ -21,7 +21,7 @@
IMAGE=""
GOTIMAGE=""
while true; do
- for f in *VMMaker*spur.image; do
+ for f in *VMMaker*spur.image SpurVMMaker.image; do
if test -f "$f"; then
IMAGE="$f"
. ./getGoodSpurVM.sh
Modified: branches/Cog/nscogsrc/vm/cogit.c
===================================================================
--- branches/Cog/nscogsrc/vm/cogit.c 2014-11-26 22:45:03 UTC (rev 3153)
+++ branches/Cog/nscogsrc/vm/cogit.c 2014-11-28 00:08:50 UTC (rev 3154)
@@ -1,9 +1,9 @@
/* Automatically generated by
- CCodeGenerator VMMaker.oscog-eem.933 uuid: 5a37067c-b76b-4ada-9399-1de11632acd8
+ CCodeGenerator VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a
from
- StackToRegisterMappingCogit VMMaker.oscog-eem.933 uuid: 5a37067c-b76b-4ada-9399-1de11632acd8
+ StackToRegisterMappingCogit VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a
*/
-static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.933 uuid: 5a37067c-b76b-4ada-9399-1de11632acd8 " __DATE__ ;
+static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a " __DATE__ ;
char *__cogitBuildInfo = __buildInfo;
@@ -11,6 +11,7 @@
#include <stddef.h>
#include "sq.h"
#include "sqCogStackAlignment.h"
+#include "dispdbg.h"
#include "cogmethod.h"
#if COGMTVM
#include "cointerpmt.h"
@@ -18,7 +19,6 @@
#include "cointerp.h"
#endif
#include "cogit.h"
-#include "dispdbg.h"
typedef struct _AbstractInstruction {
char opcode;
Modified: branches/Cog/nscogsrc/vm/cogit.h
===================================================================
--- branches/Cog/nscogsrc/vm/cogit.h 2014-11-26 22:45:03 UTC (rev 3153)
+++ branches/Cog/nscogsrc/vm/cogit.h 2014-11-28 00:08:50 UTC (rev 3154)
@@ -1,5 +1,5 @@
/* Automatically generated by
- CCodeGenerator VMMaker.oscog-eem.933 uuid: 5a37067c-b76b-4ada-9399-1de11632acd8
+ CCodeGenerator VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a
*/
Modified: branches/Cog/nscogsrc/vm/cointerp.c
===================================================================
--- branches/Cog/nscogsrc/vm/cointerp.c 2014-11-26 22:45:03 UTC (rev 3153)
+++ branches/Cog/nscogsrc/vm/cointerp.c 2014-11-28 00:08:50 UTC (rev 3154)
@@ -1,9 +1,9 @@
/* Automatically generated by
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.956 uuid: c2eb8c1e-ed43-4316-80b4-781c57cf3f1e
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a
from
- CoInterpreter VMMaker.oscog-eem.956 uuid: c2eb8c1e-ed43-4316-80b4-781c57cf3f1e
+ CoInterpreter VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a
*/
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.956 uuid: c2eb8c1e-ed43-4316-80b4-781c57cf3f1e " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a " __DATE__ ;
char *__interpBuildInfo = __buildInfo;
@@ -1205,7 +1205,7 @@
void printOop(sqInt oop);
void printProcessStack(sqInt aProcess);
sqInt printProcsOnList(sqInt procList);
-sqInt printStackCallStackOf(char *aFramePointer);
+sqInt printStackCallStackOf(sqInt frameOrContext);
void printStackPageList(void);
void printStackPageListInUse(void);
void printStackPages(void);
@@ -2093,7 +2093,7 @@
/* 574 */ (void (*)(void))0,
/* 575 */ (void (*)(void))0,
0 };
-const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.956";
+const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.957";
sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 40 */;
volatile int sendTrace;
@@ -19149,13 +19149,13 @@
sqInt classArrayClass;
sqInt classArrayObj;
size_t dataSize;
- long firstSegSize;
+ sqInt firstSegSize;
sqInt hdrCogCodeSize;
sqInt hdrEdenBytes;
sqInt hdrMaxExtSemTabSize;
sqInt hdrNumStackPages;
sqInt header;
- long headerFlags;
+ sqInt headerFlags;
sqInt headerSize;
squeakFileOffsetType headerStart;
usqInt heapSize;
@@ -19172,7 +19172,7 @@
sqInt memEnd;
sqInt memLimit;
usqInt minimumMemory;
- long oldBaseAddr;
+ sqInt oldBaseAddr;
sqInt oop;
sqInt swapBytes;
sqInt sz;
@@ -19212,9 +19212,9 @@
/* begin getLongFromFile:swap: */
w1 = 0;
sqImageFileRead((&w1), sizeof(long), 1, f);
- dataSize = ((long) ((swapBytes
- ? byteSwapped(w1)
- : w1)));
+ dataSize = (swapBytes
+ ? byteSwapped(w1)
+ : w1);
/* begin getLongFromFile:swap: */
w2 = 0;
sqImageFileRead((&w2), sizeof(long), 1, f);
@@ -19225,24 +19225,24 @@
/* begin getLongFromFile:swap: */
w11 = 0;
sqImageFileRead((&w11), sizeof(long), 1, f);
- anObject = ((long) ((swapBytes
- ? byteSwapped(w11)
- : w11)));
+ anObject = (swapBytes
+ ? byteSwapped(w11)
+ : w11);
GIV(specialObjectsOop) = anObject;
/* begin lastHash: */
/* begin getLongFromFile:swap: */
w12 = 0;
sqImageFileRead((&w12), sizeof(long), 1, f);
- aValue = ((long) ((swapBytes
- ? byteSwapped(w12)
- : w12)));
+ aValue = (swapBytes
+ ? byteSwapped(w12)
+ : w12);
lastHash = aValue;
/* begin getLongFromFile:swap: */
w3 = 0;
sqImageFileRead((&w3), sizeof(long), 1, f);
- GIV(savedWindowSize) = ((long) ((swapBytes
- ? byteSwapped(w3)
- : w3)));
+ GIV(savedWindowSize) = (swapBytes
+ ? byteSwapped(w3)
+ : w3);
/* begin getLongFromFile:swap: */
w4 = 0;
sqImageFileRead((&w4), sizeof(long), 1, f);
@@ -23012,8 +23012,8 @@
sqInt sz;
isSmall = (isNegative
- ? magnitude < (MaxSmallInteger)
- : magnitude < ((MaxSmallInteger) + 1));
+ ? magnitude <= ((MaxSmallInteger) + 1)
+ : magnitude <= (MaxSmallInteger));
if (isSmall) {
smallVal = ((sqInt) magnitude);
if (isNegative) {
@@ -50249,12 +50249,23 @@
}
sqInt
-printStackCallStackOf(char *aFramePointer)
-{
+printStackCallStackOf(sqInt frameOrContext)
+{ DECL_MAYBE_SQ_GLOBAL_STRUCT
sqInt context;
char *theFP;
- theFP = aFramePointer;
+ if (((frameOrContext & 3) == 0)
+ && (((((usqInt)frameOrContext)) >= (startOfMemory()))
+ && (((((usqInt)frameOrContext)) < GIV(freeStart))
+ && (((longAt(frameOrContext)) & TypeMask) != HeaderTypeGC)))) {
+ if ((((frameOrContext & 1) == 0)
+ && (((((usqInt) (longAt(frameOrContext))) >> (compactClassFieldLSB())) & 0x1F) == ClassMethodContextCompactIndex))
+ && (checkIsStillMarriedContextcurrentFP(frameOrContext, null))) {
+ return printStackCallStackOf(frameOfMarriedContext(frameOrContext));
+ }
+ return null;
+ }
+ theFP = ((void *)frameOrContext);
while(1) {
context = shortReversePrintFrameAndCallers(theFP);
if (!((((longAt((context + BaseHeaderSize) + (SenderIndex << (shiftForWord())))) & 1))
Modified: branches/Cog/nscogsrc/vm/cointerp.h
===================================================================
--- branches/Cog/nscogsrc/vm/cointerp.h 2014-11-26 22:45:03 UTC (rev 3153)
+++ branches/Cog/nscogsrc/vm/cointerp.h 2014-11-28 00:08:50 UTC (rev 3154)
@@ -1,5 +1,5 @@
/* Automatically generated by
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.956 uuid: c2eb8c1e-ed43-4316-80b4-781c57cf3f1e
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a
*/
@@ -251,7 +251,7 @@
void printMethodDictionary(sqInt dictionary);
void printProcessStack(sqInt aProcess);
sqInt printProcsOnList(sqInt procList);
-sqInt printStackCallStackOf(char *aFramePointer);
+sqInt printStackCallStackOf(sqInt frameOrContext);
void print(char *s);
void setBreakSelector(char *aString);
void setNextWakeupUsecs(usqLong value);
Modified: branches/Cog/nscogsrc/vm/gcc3x-cointerp.c
===================================================================
--- branches/Cog/nscogsrc/vm/gcc3x-cointerp.c 2014-11-26 22:45:03 UTC (rev 3153)
+++ branches/Cog/nscogsrc/vm/gcc3x-cointerp.c 2014-11-28 00:08:50 UTC (rev 3154)
@@ -2,11 +2,11 @@
/* Automatically generated by
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.956 uuid: c2eb8c1e-ed43-4316-80b4-781c57cf3f1e
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a
from
- CoInterpreter VMMaker.oscog-eem.956 uuid: c2eb8c1e-ed43-4316-80b4-781c57cf3f1e
+ CoInterpreter VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a
*/
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.956 uuid: c2eb8c1e-ed43-4316-80b4-781c57cf3f1e " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a " __DATE__ ;
char *__interpBuildInfo = __buildInfo;
@@ -1208,7 +1208,7 @@
void printOop(sqInt oop);
void printProcessStack(sqInt aProcess);
sqInt printProcsOnList(sqInt procList);
-sqInt printStackCallStackOf(char *aFramePointer);
+sqInt printStackCallStackOf(sqInt frameOrContext);
void printStackPageList(void);
void printStackPageListInUse(void);
void printStackPages(void);
@@ -2096,7 +2096,7 @@
/* 574 */ (void (*)(void))0,
/* 575 */ (void (*)(void))0,
0 };
-const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.956";
+const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.957";
sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 40 */;
volatile int sendTrace;
@@ -19158,13 +19158,13 @@
sqInt classArrayClass;
sqInt classArrayObj;
size_t dataSize;
- long firstSegSize;
+ sqInt firstSegSize;
sqInt hdrCogCodeSize;
sqInt hdrEdenBytes;
sqInt hdrMaxExtSemTabSize;
sqInt hdrNumStackPages;
sqInt header;
- long headerFlags;
+ sqInt headerFlags;
sqInt headerSize;
squeakFileOffsetType headerStart;
usqInt heapSize;
@@ -19181,7 +19181,7 @@
sqInt memEnd;
sqInt memLimit;
usqInt minimumMemory;
- long oldBaseAddr;
+ sqInt oldBaseAddr;
sqInt oop;
sqInt swapBytes;
sqInt sz;
@@ -19221,9 +19221,9 @@
/* begin getLongFromFile:swap: */
w1 = 0;
sqImageFileRead((&w1), sizeof(long), 1, f);
- dataSize = ((long) ((swapBytes
- ? byteSwapped(w1)
- : w1)));
+ dataSize = (swapBytes
+ ? byteSwapped(w1)
+ : w1);
/* begin getLongFromFile:swap: */
w2 = 0;
sqImageFileRead((&w2), sizeof(long), 1, f);
@@ -19234,24 +19234,24 @@
/* begin getLongFromFile:swap: */
w11 = 0;
sqImageFileRead((&w11), sizeof(long), 1, f);
- anObject = ((long) ((swapBytes
- ? byteSwapped(w11)
- : w11)));
+ anObject = (swapBytes
+ ? byteSwapped(w11)
+ : w11);
GIV(specialObjectsOop) = anObject;
/* begin lastHash: */
/* begin getLongFromFile:swap: */
w12 = 0;
sqImageFileRead((&w12), sizeof(long), 1, f);
- aValue = ((long) ((swapBytes
- ? byteSwapped(w12)
- : w12)));
+ aValue = (swapBytes
+ ? byteSwapped(w12)
+ : w12);
lastHash = aValue;
/* begin getLongFromFile:swap: */
w3 = 0;
sqImageFileRead((&w3), sizeof(long), 1, f);
- GIV(savedWindowSize) = ((long) ((swapBytes
- ? byteSwapped(w3)
- : w3)));
+ GIV(savedWindowSize) = (swapBytes
+ ? byteSwapped(w3)
+ : w3);
/* begin getLongFromFile:swap: */
w4 = 0;
sqImageFileRead((&w4), sizeof(long), 1, f);
@@ -23021,8 +23021,8 @@
sqInt sz;
isSmall = (isNegative
- ? magnitude < (MaxSmallInteger)
- : magnitude < ((MaxSmallInteger) + 1));
+ ? magnitude <= ((MaxSmallInteger) + 1)
+ : magnitude <= (MaxSmallInteger));
if (isSmall) {
smallVal = ((sqInt) magnitude);
if (isNegative) {
@@ -50258,12 +50258,23 @@
}
sqInt
-printStackCallStackOf(char *aFramePointer)
-{
+printStackCallStackOf(sqInt frameOrContext)
+{ DECL_MAYBE_SQ_GLOBAL_STRUCT
sqInt context;
char *theFP;
- theFP = aFramePointer;
+ if (((frameOrContext & 3) == 0)
+ && (((((usqInt)frameOrContext)) >= (startOfMemory()))
+ && (((((usqInt)frameOrContext)) < GIV(freeStart))
+ && (((longAt(frameOrContext)) & TypeMask) != HeaderTypeGC)))) {
+ if ((((frameOrContext & 1) == 0)
+ && (((((usqInt) (longAt(frameOrContext))) >> (compactClassFieldLSB())) & 0x1F) == ClassMethodContextCompactIndex))
+ && (checkIsStillMarriedContextcurrentFP(frameOrContext, null))) {
+ return printStackCallStackOf(frameOfMarriedContext(frameOrContext));
+ }
+ return null;
+ }
+ theFP = ((void *)frameOrContext);
while(1) {
context = shortReversePrintFrameAndCallers(theFP);
if (!((((longAt((context + BaseHeaderSize) + (SenderIndex << (shiftForWord())))) & 1))
Modified: branches/Cog/nsspursrc/vm/cogit.c
===================================================================
--- branches/Cog/nsspursrc/vm/cogit.c 2014-11-26 22:45:03 UTC (rev 3153)
+++ branches/Cog/nsspursrc/vm/cogit.c 2014-11-28 00:08:50 UTC (rev 3154)
@@ -1,9 +1,9 @@
/* Automatically generated by
- CCodeGenerator VMMaker.oscog-eem.935 uuid: e1096b9f-e01b-4709-b369-18563b884832
+ CCodeGenerator VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a
from
- StackToRegisterMappingCogit VMMaker.oscog-eem.935 uuid: e1096b9f-e01b-4709-b369-18563b884832
+ StackToRegisterMappingCogit VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a
*/
-static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.935 uuid: e1096b9f-e01b-4709-b369-18563b884832 " __DATE__ ;
+static char __buildInfo[] = "StackToRegisterMappingCogit VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a " __DATE__ ;
char *__cogitBuildInfo = __buildInfo;
@@ -11,6 +11,7 @@
#include <stddef.h>
#include "sq.h"
#include "sqCogStackAlignment.h"
+#include "dispdbg.h"
#include "cogmethod.h"
#if COGMTVM
#include "cointerpmt.h"
@@ -18,7 +19,6 @@
#include "cointerp.h"
#endif
#include "cogit.h"
-#include "dispdbg.h"
typedef struct _AbstractInstruction {
char opcode;
Modified: branches/Cog/nsspursrc/vm/cogit.h
===================================================================
--- branches/Cog/nsspursrc/vm/cogit.h 2014-11-26 22:45:03 UTC (rev 3153)
+++ branches/Cog/nsspursrc/vm/cogit.h 2014-11-28 00:08:50 UTC (rev 3154)
@@ -1,5 +1,5 @@
/* Automatically generated by
- CCodeGenerator VMMaker.oscog-eem.935 uuid: e1096b9f-e01b-4709-b369-18563b884832
+ CCodeGenerator VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a
*/
Modified: branches/Cog/nsspursrc/vm/cointerp.c
===================================================================
--- branches/Cog/nsspursrc/vm/cointerp.c 2014-11-26 22:45:03 UTC (rev 3153)
+++ branches/Cog/nsspursrc/vm/cointerp.c 2014-11-28 00:08:50 UTC (rev 3154)
@@ -1,9 +1,9 @@
/* Automatically generated by
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.956 uuid: c2eb8c1e-ed43-4316-80b4-781c57cf3f1e
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a
from
- CoInterpreter VMMaker.oscog-eem.956 uuid: c2eb8c1e-ed43-4316-80b4-781c57cf3f1e
+ CoInterpreter VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a
*/
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.956 uuid: c2eb8c1e-ed43-4316-80b4-781c57cf3f1e " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a " __DATE__ ;
char *__interpBuildInfo = __buildInfo;
@@ -139,7 +139,6 @@
#define BecameActiveClassFlag 8
#define BecameCompiledMethodFlag 2
#define BecamePointerObjectFlag 1
-#define BitsPerByte 8
#define Byte0Mask 0xFF
#define Byte1Mask 0xFF00
#define Byte1Shift 8
@@ -1393,7 +1392,7 @@
void printOop(sqInt oop);
void printProcessStack(sqInt aProcess);
sqInt printProcsOnList(sqInt procList);
-sqInt printStackCallStackOf(char *aFramePointer);
+sqInt printStackCallStackOf(sqInt frameOrContext);
void printStackPageList(void);
void printStackPageListInUse(void);
void printStackPages(void);
@@ -2343,7 +2342,7 @@
/*540*/ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
/*560*/ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 0, 0, 0,-1,-1
};
-const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.956";
+const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.957";
sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 40 */;
volatile int sendTrace;
@@ -23476,12 +23475,12 @@
sqInt classTablePage;
size_t dataSize;
sqInt edenBytes;
- long firstSegSize;
+ sqInt firstSegSize;
sqInt hdrCogCodeSize;
sqInt hdrEdenBytes;
sqInt hdrMaxExtSemTabSize;
sqInt hdrNumStackPages;
- long headerFlags;
+ sqInt headerFlags;
sqInt headerSize;
squeakFileOffsetType headerStart;
usqInt heapSize;
@@ -23500,7 +23499,7 @@
usqInt minimumMemory;
usqInt numSlots;
sqInt objOop;
- long oldBaseAddr;
+ sqInt oldBaseAddr;
sqInt oldStart;
sqInt oop;
sqInt p;
@@ -23543,9 +23542,9 @@
/* begin getLongFromFile:swap: */
w1 = 0;
sqImageFileRead((&w1), sizeof(long), 1, f);
- dataSize = ((long) ((swapBytes
- ? ((((((usqInt) w1 >> 24)) & Byte0Mask) + ((((usqInt) w1 >> 8)) & Byte1Mask)) + ((((usqInt) w1 << 8)) & Byte2Mask)) + ((((usqInt) w1 << 24)) & Byte3Mask)
- : w1)));
+ dataSize = (swapBytes
+ ? ((((((usqInt) w1 >> 24)) & Byte0Mask) + ((((usqInt) w1 >> 8)) & Byte1Mask)) + ((((usqInt) w1 << 8)) & Byte2Mask)) + ((((usqInt) w1 << 24)) & Byte3Mask)
+ : w1);
/* begin getLongFromFile:swap: */
w2 = 0;
sqImageFileRead((&w2), sizeof(long), 1, f);
@@ -23556,24 +23555,24 @@
/* begin getLongFromFile:swap: */
w3 = 0;
sqImageFileRead((&w3), sizeof(long), 1, f);
- anObject = ((long) ((swapBytes
- ? ((((((usqInt) w3 >> 24)) & Byte0Mask) + ((((usqInt) w3 >> 8)) & Byte1Mask)) + ((((usqInt) w3 << 8)) & Byte2Mask)) + ((((usqInt) w3 << 24)) & Byte3Mask)
- : w3)));
+ anObject = (swapBytes
+ ? ((((((usqInt) w3 >> 24)) & Byte0Mask) + ((((usqInt) w3 >> 8)) & Byte1Mask)) + ((((usqInt) w3 << 8)) & Byte2Mask)) + ((((usqInt) w3 << 24)) & Byte3Mask)
+ : w3);
GIV(specialObjectsOop) = anObject;
/* begin lastHash: */
/* begin getLongFromFile:swap: */
w4 = 0;
sqImageFileRead((&w4), sizeof(long), 1, f);
- seed = ((long) ((swapBytes
- ? ((((((usqInt) w4 >> 24)) & Byte0Mask) + ((((usqInt) w4 >> 8)) & Byte1Mask)) + ((((usqInt) w4 << 8)) & Byte2Mask)) + ((((usqInt) w4 << 24)) & Byte3Mask)
- : w4)));
+ seed = (swapBytes
+ ? ((((((usqInt) w4 >> 24)) & Byte0Mask) + ((((usqInt) w4 >> 8)) & Byte1Mask)) + ((((usqInt) w4 << 8)) & Byte2Mask)) + ((((usqInt) w4 << 24)) & Byte3Mask)
+ : w4);
GIV(lastHash) = seed;
/* begin getLongFromFile:swap: */
w5 = 0;
sqImageFileRead((&w5), sizeof(long), 1, f);
- GIV(savedWindowSize) = ((long) ((swapBytes
- ? ((((((usqInt) w5 >> 24)) & Byte0Mask) + ((((usqInt) w5 >> 8)) & Byte1Mask)) + ((((usqInt) w5 << 8)) & Byte2Mask)) + ((((usqInt) w5 << 24)) & Byte3Mask)
- : w5)));
+ GIV(savedWindowSize) = (swapBytes
+ ? ((((((usqInt) w5 >> 24)) & Byte0Mask) + ((((usqInt) w5 >> 8)) & Byte1Mask)) + ((((usqInt) w5 << 8)) & Byte2Mask)) + ((((usqInt) w5 << 24)) & Byte3Mask)
+ : w5);
/* begin getLongFromFile:swap: */
w6 = 0;
sqImageFileRead((&w6), sizeof(long), 1, f);
@@ -27804,8 +27803,8 @@
sqInt sz;
isSmall = (isNegative
- ? magnitude < (MaxSmallInteger)
- : magnitude < ((MaxSmallInteger) + 1));
+ ? magnitude <= ((MaxSmallInteger) + 1)
+ : magnitude <= (MaxSmallInteger));
if (isSmall) {
smallVal = ((sqInt) magnitude);
if (isNegative) {
@@ -40817,48 +40816,40 @@
classFormat = ((longAt((classObj + BaseHeaderSize) + (InstanceSpecificationIndex << (shiftForWord())))) >> 1);
instSpec = (((usqInt) classFormat) >> 16) & 0x1F;
+ classIndex = (long32At(classObj + 4)) & 0x3FFFFF;
fillValue = 0;
switch (instSpec) {
case 2:
- if (nElements > (((512 * 1024) * 1024) - 1)) {
- return null;
- }
numSlots = nElements;
fillValue = GIV(nilObj);
break;
case 3:
case 4:
- if (nElements > ((((512 * 1024) * 1024) - 1) - (classFormat & ((1 << 16) - 1)))) {
- return null;
- }
numSlots = (classFormat & ((1 << 16) - 1)) + nElements;
fillValue = GIV(nilObj);
break;
case 9:
if (nElements > ((((512 * 1024) * 1024) - 1) / 2)) {
+ GIV(primFailCode) = PrimErrUnsupported;
return null;
}
numSlots = nElements * 2;
break;
case 10:
- if (nElements > (((512 * 1024) * 1024) - 1)) {
+ if ((classIndex == ClassFloatCompactIndex)
+ && (nElements != 2)) {
+ GIV(primFailCode) = PrimErrBadReceiver;
return null;
}
numSlots = nElements;
break;
case 12:
numSlots = (nElements + 1) / 2;
- if (numSlots > (((512 * 1024) * 1024) - 1)) {
- return null;
- }
instSpec += nElements & 1;
break;
case 16:
numSlots = (nElements + 3) / 4;
- if (numSlots > (((512 * 1024) * 1024) - 1)) {
- return null;
- }
instSpec += (4 - nElements) & 3;
break;
default:
@@ -40874,23 +40865,29 @@
numSlots = classFormat & ((1 << 16) - 1);
}
- /* begin ensureBehaviorHash: */
- assert(addressCouldBeClassObj(classObj));
- if (((newHash = (long32At(classObj + 4)) & 0x3FFFFF)) == 0) {
- if (((err = enterIntoClassTable(classObj))) != 0) {
- classIndex = -err;
- goto l2;
+ if (classIndex == 0) {
+ /* begin ensureBehaviorHash: */
+ assert(addressCouldBeClassObj(classObj));
+ if (((newHash = (long32At(classObj + 4)) & 0x3FFFFF)) == 0) {
+ if (((err = enterIntoClassTable(classObj))) != 0) {
+ classIndex = -err;
+ goto l1;
+ }
+ newHash = (long32At(classObj + 4)) & 0x3FFFFF;
+ assert((classAtIndex(newHash)) == classObj);
}
- newHash = (long32At(classObj + 4)) & 0x3FFFFF;
- assert((classAtIndex(newHash)) == classObj);
+ classIndex = newHash;
+ l1: /* end ensureBehaviorHash: */;
+ if (classIndex < 0) {
+ GIV(primFailCode) = -classIndex;
+ return null;
+ }
}
- classIndex = newHash;
-l2: /* end ensureBehaviorHash: */;
- if (classIndex < 0) {
- GIV(primFailCode) = -classIndex;
- return null;
- }
if (numSlots > ((1 << 16) - 1)) {
+ if (numSlots > (((512 * 1024) * 1024) - 1)) {
+ GIV(primFailCode) = PrimErrUnsupported;
+ return null;
+ }
newObj = allocateSlotsInOldSpacebytesformatclassIndex(numSlots, ((numSlots == 0
? 8
: (numSlots + (numSlots & 1)) << (shiftForWord()))) + ((numSlots >= 0xFF
@@ -40916,7 +40913,7 @@
forceInterruptCheck();
}
newObj = allocateSlotsInOldSpacebytesformatclassIndex(numSlots, numBytes, instSpec, classIndex);
- goto l1;
+ goto l2;
}
if (numSlots >= 0xFF) {
@@ -40934,7 +40931,7 @@
assert((newObj1 % (allocationUnit())) == 0);
GIV(freeStart) += numBytes;
newObj = newObj1;
- l1: /* end allocateSlots:format:classIndex: */;
+ l2: /* end allocateSlots:format:classIndex: */;
}
if (!(newObj == null)) {
/* begin fillObj:numSlots:with: */
@@ -48486,7 +48483,7 @@
newNumSlots = obj2slots + header1NumSlots;
if (newNumSlots < 0xFF) {
- byteAtput(here1 + (56 / BitsPerByte), newNumSlots);
+ byteAtput(here1 + 7, newNumSlots);
here1 = here1;
goto l2;
}
@@ -70596,12 +70593,20 @@
}
sqInt
-printStackCallStackOf(char *aFramePointer)
+printStackCallStackOf(sqInt frameOrContext)
{
sqInt context;
char *theFP;
- theFP = aFramePointer;
+ if (addressCouldBeObj(frameOrContext)) {
+ if ((((frameOrContext & 3) == 0)
+ && (((longAt(frameOrContext)) & 0x3FFFFF) == ClassMethodContextCompactIndex))
+ && (checkIsStillMarriedContextcurrentFP(frameOrContext, null))) {
+ return printStackCallStackOf(frameOfMarriedContext(frameOrContext));
+ }
+ return null;
+ }
+ theFP = ((void *)frameOrContext);
while(1) {
context = shortReversePrintFrameAndCallers(theFP);
if (!((((longAt((context + BaseHeaderSize) + (SenderIndex << (shiftForWord())))) & 1))
Modified: branches/Cog/nsspursrc/vm/cointerp.h
===================================================================
--- branches/Cog/nsspursrc/vm/cointerp.h 2014-11-26 22:45:03 UTC (rev 3153)
+++ branches/Cog/nsspursrc/vm/cointerp.h 2014-11-28 00:08:50 UTC (rev 3154)
@@ -1,5 +1,5 @@
/* Automatically generated by
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.956 uuid: c2eb8c1e-ed43-4316-80b4-781c57cf3f1e
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a
*/
@@ -299,7 +299,7 @@
void printMethodDictionary(sqInt dictionary);
void printProcessStack(sqInt aProcess);
sqInt printProcsOnList(sqInt procList);
-sqInt printStackCallStackOf(char *aFramePointer);
+sqInt printStackCallStackOf(sqInt frameOrContext);
void print(char *s);
void setBreakSelector(char *aString);
void setNextWakeupUsecs(usqLong value);
Modified: branches/Cog/nsspursrc/vm/gcc3x-cointerp.c
===================================================================
--- branches/Cog/nsspursrc/vm/gcc3x-cointerp.c 2014-11-26 22:45:03 UTC (rev 3153)
+++ branches/Cog/nsspursrc/vm/gcc3x-cointerp.c 2014-11-28 00:08:50 UTC (rev 3154)
@@ -2,11 +2,11 @@
/* Automatically generated by
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.956 uuid: c2eb8c1e-ed43-4316-80b4-781c57cf3f1e
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a
from
- CoInterpreter VMMaker.oscog-eem.956 uuid: c2eb8c1e-ed43-4316-80b4-781c57cf3f1e
+ CoInterpreter VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a
*/
-static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.956 uuid: c2eb8c1e-ed43-4316-80b4-781c57cf3f1e " __DATE__ ;
+static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a " __DATE__ ;
char *__interpBuildInfo = __buildInfo;
@@ -142,7 +142,6 @@
#define BecameActiveClassFlag 8
#define BecameCompiledMethodFlag 2
#define BecamePointerObjectFlag 1
-#define BitsPerByte 8
#define Byte0Mask 0xFF
#define Byte1Mask 0xFF00
#define Byte1Shift 8
@@ -1396,7 +1395,7 @@
void printOop(sqInt oop);
void printProcessStack(sqInt aProcess);
sqInt printProcsOnList(sqInt procList);
-sqInt printStackCallStackOf(char *aFramePointer);
+sqInt printStackCallStackOf(sqInt frameOrContext);
void printStackPageList(void);
void printStackPageListInUse(void);
void printStackPages(void);
@@ -2346,7 +2345,7 @@
/*540*/ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,
/*560*/ -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 0, 0, 0,-1,-1
};
-const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.956";
+const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreterPrimitives_VMMaker.oscog-eem.957";
sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 40 */;
volatile int sendTrace;
@@ -23485,12 +23484,12 @@
sqInt classTablePage;
size_t dataSize;
sqInt edenBytes;
- long firstSegSize;
+ sqInt firstSegSize;
sqInt hdrCogCodeSize;
sqInt hdrEdenBytes;
sqInt hdrMaxExtSemTabSize;
sqInt hdrNumStackPages;
- long headerFlags;
+ sqInt headerFlags;
sqInt headerSize;
squeakFileOffsetType headerStart;
usqInt heapSize;
@@ -23509,7 +23508,7 @@
usqInt minimumMemory;
usqInt numSlots;
sqInt objOop;
- long oldBaseAddr;
+ sqInt oldBaseAddr;
sqInt oldStart;
sqInt oop;
sqInt p;
@@ -23552,9 +23551,9 @@
/* begin getLongFromFile:swap: */
w1 = 0;
sqImageFileRead((&w1), sizeof(long), 1, f);
- dataSize = ((long) ((swapBytes
- ? ((((((usqInt) w1 >> 24)) & Byte0Mask) + ((((usqInt) w1 >> 8)) & Byte1Mask)) + ((((usqInt) w1 << 8)) & Byte2Mask)) + ((((usqInt) w1 << 24)) & Byte3Mask)
- : w1)));
+ dataSize = (swapBytes
+ ? ((((((usqInt) w1 >> 24)) & Byte0Mask) + ((((usqInt) w1 >> 8)) & Byte1Mask)) + ((((usqInt) w1 << 8)) & Byte2Mask)) + ((((usqInt) w1 << 24)) & Byte3Mask)
+ : w1);
/* begin getLongFromFile:swap: */
w2 = 0;
sqImageFileRead((&w2), sizeof(long), 1, f);
@@ -23565,24 +23564,24 @@
/* begin getLongFromFile:swap: */
w3 = 0;
sqImageFileRead((&w3), sizeof(long), 1, f);
- anObject = ((long) ((swapBytes
- ? ((((((usqInt) w3 >> 24)) & Byte0Mask) + ((((usqInt) w3 >> 8)) & Byte1Mask)) + ((((usqInt) w3 << 8)) & Byte2Mask)) + ((((usqInt) w3 << 24)) & Byte3Mask)
- : w3)));
+ anObject = (swapBytes
+ ? ((((((usqInt) w3 >> 24)) & Byte0Mask) + ((((usqInt) w3 >> 8)) & Byte1Mask)) + ((((usqInt) w3 << 8)) & Byte2Mask)) + ((((usqInt) w3 << 24)) & Byte3Mask)
+ : w3);
GIV(specialObjectsOop) = anObject;
/* begin lastHash: */
/* begin getLongFromFile:swap: */
w4 = 0;
sqImageFileRead((&w4), sizeof(long), 1, f);
- seed = ((long) ((swapBytes
- ? ((((((usqInt) w4 >> 24)) & Byte0Mask) + ((((usqInt) w4 >> 8)) & Byte1Mask)) + ((((usqInt) w4 << 8)) & Byte2Mask)) + ((((usqInt) w4 << 24)) & Byte3Mask)
- : w4)));
+ seed = (swapBytes
+ ? ((((((usqInt) w4 >> 24)) & Byte0Mask) + ((((usqInt) w4 >> 8)) & Byte1Mask)) + ((((usqInt) w4 << 8)) & Byte2Mask)) + ((((usqInt) w4 << 24)) & Byte3Mask)
+ : w4);
GIV(lastHash) = seed;
/* begin getLongFromFile:swap: */
w5 = 0;
sqImageFileRead((&w5), sizeof(long), 1, f);
- GIV(savedWindowSize) = ((long) ((swapBytes
- ? ((((((usqInt) w5 >> 24)) & Byte0Mask) + ((((usqInt) w5 >> 8)) & Byte1Mask)) + ((((usqInt) w5 << 8)) & Byte2Mask)) + ((((usqInt) w5 << 24)) & Byte3Mask)
- : w5)));
+ GIV(savedWindowSize) = (swapBytes
+ ? ((((((usqInt) w5 >> 24)) & Byte0Mask) + ((((usqInt) w5 >> 8)) & Byte1Mask)) + ((((usqInt) w5 << 8)) & Byte2Mask)) + ((((usqInt) w5 << 24)) & Byte3Mask)
+ : w5);
/* begin getLongFromFile:swap: */
w6 = 0;
sqImageFileRead((&w6), sizeof(long), 1, f);
@@ -27813,8 +27812,8 @@
sqInt sz;
isSmall = (isNegative
- ? magnitude < (MaxSmallInteger)
- : magnitude < ((MaxSmallInteger) + 1));
+ ? magnitude <= ((MaxSmallInteger) + 1)
+ : magnitude <= (MaxSmallInteger));
if (isSmall) {
smallVal = ((sqInt) magnitude);
if (isNegative) {
@@ -40826,48 +40825,40 @@
classFormat = ((longAt((classObj + BaseHeaderSize) + (InstanceSpecificationIndex << (shiftForWord())))) >> 1);
instSpec = (((usqInt) classFormat) >> 16) & 0x1F;
+ classIndex = (long32At(classObj + 4)) & 0x3FFFFF;
fillValue = 0;
switch (instSpec) {
case 2:
- if (nElements > (((512 * 1024) * 1024) - 1)) {
- return null;
- }
numSlots = nElements;
fillValue = GIV(nilObj);
break;
case 3:
case 4:
- if (nElements > ((((512 * 1024) * 1024) - 1) - (classFormat & ((1 << 16) - 1)))) {
- return null;
- }
numSlots = (classFormat & ((1 << 16) - 1)) + nElements;
fillValue = GIV(nilObj);
break;
case 9:
if (nElements > ((((512 * 1024) * 1024) - 1) / 2)) {
+ GIV(primFailCode) = PrimErrUnsupported;
return null;
}
numSlots = nElements * 2;
break;
case 10:
- if (nElements > (((512 * 1024) * 1024) - 1)) {
+ if ((classIndex == ClassFloatCompactIndex)
+ && (nElements != 2)) {
+ GIV(primFailCode) = PrimErrBadReceiver;
return null;
}
numSlots = nElements;
break;
case 12:
numSlots = (nElements + 1) / 2;
- if (numSlots > (((512 * 1024) * 1024) - 1)) {
- return null;
- }
instSpec += nElements & 1;
break;
case 16:
numSlots = (nElements + 3) / 4;
- if (numSlots > (((512 * 1024) * 1024) - 1)) {
- return null;
- }
instSpec += (4 - nElements) & 3;
break;
default:
@@ -40883,23 +40874,29 @@
numSlots = classFormat & ((1 << 16) - 1);
}
- /* begin ensureBehaviorHash: */
- assert(addressCouldBeClassObj(classObj));
- if (((newHash = (long32At(classObj + 4)) & 0x3FFFFF)) == 0) {
- if (((err = enterIntoClassTable(classObj))) != 0) {
- classIndex = -err;
- goto l2;
+ if (classIndex == 0) {
+ /* begin ensureBehaviorHash: */
+ assert(addressCouldBeClassObj(classObj));
+ if (((newHash = (long32At(classObj + 4)) & 0x3FFFFF)) == 0) {
+ if (((err = enterIntoClassTable(classObj))) != 0) {
+ classIndex = -err;
+ goto l1;
+ }
+ newHash = (long32At(classObj + 4)) & 0x3FFFFF;
+ assert((classAtIndex(newHash)) == classObj);
}
- newHash = (long32At(classObj + 4)) & 0x3FFFFF;
- assert((classAtIndex(newHash)) == classObj);
+ classIndex = newHash;
+ l1: /* end ensureBehaviorHash: */;
+ if (classIndex < 0) {
+ GIV(primFailCode) = -classIndex;
+ return null;
+ }
}
- classIndex = newHash;
-l2: /* end ensureBehaviorHash: */;
- if (classIndex < 0) {
- GIV(primFailCode) = -classIndex;
- return null;
- }
if (numSlots > ((1 << 16) - 1)) {
+ if (numSlots > (((512 * 1024) * 1024) - 1)) {
+ GIV(primFailCode) = PrimErrUnsupported;
+ return null;
+ }
newObj = allocateSlotsInOldSpacebytesformatclassIndex(numSlots, ((numSlots == 0
? 8
: (numSlots + (numSlots & 1)) << (shiftForWord()))) + ((numSlots >= 0xFF
@@ -40925,7 +40922,7 @@
forceInterruptCheck();
}
newObj = allocateSlotsInOldSpacebytesformatclassIndex(numSlots, numBytes, instSpec, classIndex);
- goto l1;
+ goto l2;
}
if (numSlots >= 0xFF) {
@@ -40943,7 +40940,7 @@
assert((newObj1 % (allocationUnit())) == 0);
GIV(freeStart) += numBytes;
newObj = newObj1;
- l1: /* end allocateSlots:format:classIndex: */;
+ l2: /* end allocateSlots:format:classIndex: */;
}
if (!(newObj == null)) {
/* begin fillObj:numSlots:with: */
@@ -48495,7 +48492,7 @@
newNumSlots = obj2slots + header1NumSlots;
if (newNumSlots < 0xFF) {
- byteAtput(here1 + (56 / BitsPerByte), newNumSlots);
+ byteAtput(here1 + 7, newNumSlots);
here1 = here1;
goto l2;
}
@@ -70605,12 +70602,20 @@
}
sqInt
-printStackCallStackOf(char *aFramePointer)
+printStackCallStackOf(sqInt frameOrContext)
{
sqInt context;
char *theFP;
- theFP = aFramePointer;
+ if (addressCouldBeObj(frameOrContext)) {
+ if ((((frameOrContext & 3) == 0)
+ && (((longAt(frameOrContext)) & 0x3FFFFF) == ClassMethodContextCompactIndex))
+ && (checkIsStillMarriedContextcurrentFP(frameOrContext, null))) {
+ return printStackCallStackOf(frameOfMarriedContext(frameOrContext));
+ }
+ return null;
+ }
+ theFP = ((void *)frameOrContext);
while(1) {
context = shortReversePrintFrameAndCallers(theFP);
if (!((((longAt((context + BaseHeaderSize) + (SenderIndex << (shiftForWord())))) & 1))
Modified: branches/Cog/nsspurstacksrc/vm/gcc3x-interp.c
===================================================================
--- branches/Cog/nsspurstacksrc/vm/gcc3x-interp.c 2014-11-26 22:45:03 UTC (rev 3153)
+++ branches/Cog/nsspurstacksrc/vm/gcc3x-interp.c 2014-11-28 00:08:50 UTC (rev 3154)
@@ -2,11 +2,11 @@
/* Automatically generated by
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.956 uuid: c2eb8c1e-ed43-4316-80b4-781c57cf3f1e
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a
from
- StackInterpreter VMMaker.oscog-eem.956 uuid: c2eb8c1e-ed43-4316-80b4-781c57cf3f1e
+ StackInterpreter VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a
*/
-static char __buildInfo[] = "StackInterpreter VMMaker.oscog-eem.956 uuid: c2eb8c1e-ed43-4316-80b4-781c57cf3f1e " __DATE__ ;
+static char __buildInfo[] = "StackInterpreter VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a " __DATE__ ;
char *__interpBuildInfo = __buildInfo;
@@ -138,7 +138,6 @@
#define BecameActiveClassFlag 8
#define BecameCompiledMethodFlag 2
#define BecamePointerObjectFlag 1
-#define BitsPerByte 8
#define Byte0Mask 0xFF
#define Byte1Mask 0xFF00
#define Byte1Shift 8
@@ -1170,7 +1169,7 @@
void printOop(sqInt oop);
void printProcessStack(sqInt aProcess);
sqInt printProcsOnList(sqInt procList);
-sqInt printStackCallStackOf(char *aFramePointer);
+sqInt printStackCallStackOf(sqInt frameOrContext);
void printStackPageList(void);
void printStackPageListInUse(void);
void printStackPages(void);
@@ -2093,7 +2092,7 @@
0 };
char * breakSelector;
sqInt breakSelectorLength = -1;
-const char *interpreterVersion = "Newspeak Virtual Machine StackInterpreterPrimitives_VMMaker.oscog-eem.956";
+const char *interpreterVersion = "Newspeak Virtual Machine StackInterpreterPrimitives_VMMaker.oscog-eem.957";
volatile int sendTrace;
sqInt suppressHeartbeatFlag;
@@ -13625,8 +13624,8 @@
sqInt sz;
isSmall = (isNegative
- ? magnitude < (MaxSmallInteger)
- : magnitude < ((MaxSmallInteger) + 1));
+ ? magnitude <= ((MaxSmallInteger) + 1)
+ : magnitude <= (MaxSmallInteger));
if (isSmall) {
smallVal = ((sqInt) magnitude);
if (isNegative) {
@@ -26868,48 +26867,40 @@
classFormat = ((longAt((classObj + BaseHeaderSize) + (InstanceSpecificationIndex << (shiftForWord())))) >> 1);
instSpec = (((usqInt) classFormat) >> 16) & 0x1F;
+ classIndex = (long32At(classObj + 4)) & 0x3FFFFF;
fillValue = 0;
switch (instSpec) {
case 2:
- if (nElements > (((512 * 1024) * 1024) - 1)) {
- return null;
- }
numSlots = nElements;
fillValue = GIV(nilObj);
break;
case 3:
case 4:
- if (nElements > ((((512 * 1024) * 1024) - 1) - (classFormat & ((1 << 16) - 1)))) {
- return null;
- }
numSlots = (classFormat & ((1 << 16) - 1)) + nElements;
fillValue = GIV(nilObj);
break;
case 9:
if (nElements > ((((512 * 1024) * 1024) - 1) / 2)) {
+ GIV(primFailCode) = PrimErrUnsupported;
return null;
}
numSlots = nElements * 2;
break;
case 10:
- if (nElements > (((512 * 1024) * 1024) - 1)) {
+ if ((classIndex == ClassFloatCompactIndex)
+ && (nElements != 2)) {
+ GIV(primFailCode) = PrimErrBadReceiver;
return null;
}
numSlots = nElements;
break;
case 12:
numSlots = (nElements + 1) / 2;
- if (numSlots > (((512 * 1024) * 1024) - 1)) {
- return null;
- }
instSpec += nElements & 1;
break;
case 16:
numSlots = (nElements + 3) / 4;
- if (numSlots > (((512 * 1024) * 1024) - 1)) {
- return null;
- }
instSpec += (4 - nElements) & 3;
break;
default:
@@ -26925,23 +26916,29 @@
numSlots = classFormat & ((1 << 16) - 1);
}
- /* begin ensureBehaviorHash: */
- assert(addressCouldBeClassObj(classObj));
- if (((newHash = (long32At(classObj + 4)) & 0x3FFFFF)) == 0) {
- if (((err = enterIntoClassTable(classObj))) != 0) {
- classIndex = -err;
- goto l2;
+ if (classIndex == 0) {
+ /* begin ensureBehaviorHash: */
+ assert(addressCouldBeClassObj(classObj));
+ if (((newHash = (long32At(classObj + 4)) & 0x3FFFFF)) == 0) {
+ if (((err = enterIntoClassTable(classObj))) != 0) {
+ classIndex = -err;
+ goto l1;
+ }
+ newHash = (long32At(classObj + 4)) & 0x3FFFFF;
+ assert((classAtIndex(newHash)) == classObj);
}
- newHash = (long32At(classObj + 4)) & 0x3FFFFF;
- assert((classAtIndex(newHash)) == classObj);
+ classIndex = newHash;
+ l1: /* end ensureBehaviorHash: */;
+ if (classIndex < 0) {
+ GIV(primFailCode) = -classIndex;
+ return null;
+ }
}
- classIndex = newHash;
-l2: /* end ensureBehaviorHash: */;
- if (classIndex < 0) {
- GIV(primFailCode) = -classIndex;
- return null;
- }
if (numSlots > ((1 << 16) - 1)) {
+ if (numSlots > (((512 * 1024) * 1024) - 1)) {
+ GIV(primFailCode) = PrimErrUnsupported;
+ return null;
+ }
newObj = allocateSlotsInOldSpacebytesformatclassIndex(numSlots, ((numSlots == 0
? 8
: (numSlots + (numSlots & 1)) << (shiftForWord()))) + ((numSlots >= 0xFF
@@ -26967,7 +26964,7 @@
forceInterruptCheck();
}
newObj = allocateSlotsInOldSpacebytesformatclassIndex(numSlots, numBytes, instSpec, classIndex);
- goto l1;
+ goto l2;
}
if (numSlots >= 0xFF) {
@@ -26985,7 +26982,7 @@
assert((newObj1 % (allocationUnit())) == 0);
GIV(freeStart) += numBytes;
newObj = newObj1;
- l1: /* end allocateSlots:format:classIndex: */;
+ l2: /* end allocateSlots:format:classIndex: */;
}
if (!(newObj == null)) {
/* begin fillObj:numSlots:with: */
@@ -34554,7 +34551,7 @@
newNumSlots = obj2slots + header1NumSlots;
if (newNumSlots < 0xFF) {
- byteAtput(here1 + (56 / BitsPerByte), newNumSlots);
+ byteAtput(here1 + 7, newNumSlots);
here1 = here1;
goto l2;
}
@@ -51716,7 +51713,7 @@
sqInt referent1;
sqInt referent2;
char *theFP;
- usqInt theIP;
+ sqInt theIP;
usqInt theIPPtr;
StackPage *thePage;
char *theSP;
@@ -51774,7 +51771,7 @@
/* reuse theIP; its just an offset here */
- theIP = ((usqInt)(theFP + ((FoxCallerSavedIP + BytesPerWord) + ((byteAt((theFP + FoxFrameFlags) + 1)) << (shiftForWord())))));
+ theIP = ((sqInt)(theFP + ((FoxCallerSavedIP + BytesPerWord) + ((byteAt((theFP + FoxFrameFlags) + 1)) << (shiftForWord())))));
oop = longAt(theIP);
if (((oop & 3) == 0)
&& (((longAt(oop)) & 0x3FFFFF) == 8)) {
@@ -51802,7 +51799,7 @@
longAtput(theFP + FoxMethod, (oop = newOop));
}
if (!(((callerFP = frameCallerFP(theFP))) != 0)) break;
- theIPPtr = ((usqInt)(theFP + FoxCallerSavedIP));
+ theIPPtr = ((sqInt)(theFP + FoxCallerSavedIP));
theFP = callerFP;
}
}
@@ -59199,12 +59196,20 @@
}
sqInt
-printStackCallStackOf(char *aFramePointer)
+printStackCallStackOf(sqInt frameOrContext)
{
sqInt context;
char *theFP;
- theFP = aFramePointer;
+ if (addressCouldBeObj(frameOrContext)) {
+ if ((((frameOrContext & 3) == 0)
+ && (((longAt(frameOrContext)) & 0x3FFFFF) == ClassMethodContextCompactIndex))
+ && (checkIsStillMarriedContextcurrentFP(frameOrContext, null))) {
+ return printStackCallStackOf(frameOfMarriedContext(frameOrContext));
+ }
+ return null;
+ }
+ theFP = ((void *)frameOrContext);
while(1) {
context = shortReversePrintFrameAndCallers(theFP);
if (!((((longAt((context + BaseHeaderSize) + (SenderIndex << (shiftForWord())))) & 1))
Modified: branches/Cog/nsspurstacksrc/vm/interp.c
===================================================================
--- branches/Cog/nsspurstacksrc/vm/interp.c 2014-11-26 22:45:03 UTC (rev 3153)
+++ branches/Cog/nsspurstacksrc/vm/interp.c 2014-11-28 00:08:50 UTC (rev 3154)
@@ -1,9 +1,9 @@
/* Automatically generated by
- CCodeGeneratorGlobalStructure VMMaker.oscog-eem.956 uuid: c2eb8c1e-ed43-4316-80b4-781c57cf3f1e
+ CCodeGeneratorGlobalStructure VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a
from
- StackInterpreter VMMaker.oscog-eem.956 uuid: c2eb8c1e-ed43-4316-80b4-781c57cf3f1e
+ StackInterpreter VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a
*/
-static char __buildInfo[] = "StackInterpreter VMMaker.oscog-eem.956 uuid: c2eb8c1e-ed43-4316-80b4-781c57cf3f1e " __DATE__ ;
+static char __buildInfo[] = "StackInterpreter VMMaker.oscog-eem.957 uuid: ac5f8308-02e5-4277-b28c-595b7a4cf34a " __DATE__ ;
char *__interpBuildInfo = __buildInfo;
@@ -135,7 +135,6 @@
#define BecameActiveClassFlag 8
#define BecameCompiledMethodFlag 2
#define BecamePointerObjectFlag 1
-#define BitsPerByte 8
#define Byte0Mask 0xFF
#define Byte1Mask 0xFF00
#define Byte1Shift 8
@@ -1167,7 +1166,7 @@
void printOop(sqInt oop);
void printProcessStack(sqInt aProcess);
sqInt printProcsOnList(sqInt procList);
-sqInt printStackCallStackOf(char *aFramePointer);
+sqInt printStackCallStackOf(sqInt frameOrContext);
void printStackPageList(void);
void printStackPageListInUse(void);
void printStackPages(void);
@@ -2090,7 +2089,7 @@
0 };
char * breakSelector;
sqInt breakSelectorLength = -1;
-const char *interpreterVersion = "Newspeak Virtual Machine StackInterpreterPrimitives_VMMaker.oscog-eem.956";
+const char *interpreterVersion = "Newspeak Virtual Machine StackInterpreterPrimitives_VMMaker.oscog-eem.957";
volatile int sendTrace;
sqInt suppressHeartbeatFlag;
@@ -13616,8 +13615,8 @@
sqInt sz;
isSmall = (isNegative
- ? magnitude < (MaxSmallInteger)
- : magnitude < ((MaxSmallInteger) + 1));
+ ? magnitude <= ((MaxSmallInteger) + 1)
+ : magnitude <= (MaxSmallInteger));
if (isSmall) {
smallVal = ((sqInt) magnitude);
if (isNegative) {
@@ -26859,48 +26858,40 @@
classFormat = ((longAt((classObj + BaseHeaderSize) + (InstanceSpecificationIndex << (shiftForWord())))) >> 1);
instSpec = (((usqInt) classFormat) >> 16) & 0x1F;
+ classIndex = (long32At(classObj + 4)) & 0x3FFFFF;
fillValue = 0;
switch (instSpec) {
case 2:
- if (nElements > (((512 * 1024) * 1024) - 1)) {
- return null;
- }
numSlots = nElements;
fillValue = GIV(nilObj);
break;
case 3:
case 4:
- if (nElements > ((((512 * 1024) * 1024) - 1) - (classFormat & ((1 << 16) - 1)))) {
- return null;
- }
numSlots = (classFormat & ((1 << 16) - 1)) + nElements;
fillValue = GIV(nilObj);
break;
case 9:
if (nElements > ((((512 * 1024) * 1024) - 1) / 2)) {
+ GIV(primFailCode) = PrimErrUnsupported;
return null;
}
numSlots = nElements * 2;
break;
case 10:
- if (nElements > (((512 * 1024) * 1024) - 1)) {
+ if ((classIndex == ClassFloatCompactIndex)
+ && (nElements != 2)) {
+ GIV(primFailCode) = PrimErrBadReceiver;
return null;
}
numSlots = nElements;
break;
case 12:
numSlots = (nElements + 1) / 2;
- if (numSlots > (((512 * 1024) * 1024) - 1)) {
- return null;
- }
instSpec += nElements & 1;
break;
case 16:
numSlots = (nElements + 3) / 4;
- if (numSlots > (((512 * 1024) * 1024) - 1)) {
- return null;
- }
instSpec += (4 - nElements) & 3;
break;
default:
@@ -26916,23 +26907,29 @@
numSlots = classFormat & ((1 << 16) - 1);
}
- /* begin ensureBehaviorHash: */
- assert(addressCouldBeClassObj(classObj));
- if (((newHash = (long32At(classObj + 4)) & 0x3FFFFF)) == 0) {
- if (((err = enterIntoClassTable(classObj))) != 0) {
- classIndex = -err;
- goto l2;
+ if (classIndex == 0) {
+ /* begin ensureBehaviorHash: */
+ assert(addressCouldBeClassObj(classObj));
+ if (((newHash = (long32At(classObj + 4)) & 0x3FFFFF)) == 0) {
+ if (((err = enterIntoClassTable(classObj))) != 0) {
+ classIndex = -err;
+ goto l1;
+ }
+ newHash = (long32At(classObj + 4)) & 0x3FFFFF;
+ assert((classAtIndex(newHash)) == classObj);
}
- newHash = (long32At(classObj + 4)) & 0x3FFFFF;
- assert((classAtIndex(newHash)) == classObj);
+ classIndex = newHash;
+ l1: /* end ensureBehaviorHash: */;
+ if (classIndex < 0) {
+ GIV(primFailCode) = -classIndex;
+ return null;
+ }
}
- classIndex = newHash;
-l2: /* end ensureBehaviorHash: */;
- if (classIndex < 0) {
- GIV(primFailCode) = -classIndex;
- return null;
- }
if (numSlots > ((1 << 16) - 1)) {
+ if (numSlots > (((512 * 1024) * 1024) - 1)) {
+ GIV(primFailCode) = PrimErrUnsupported;
+ return null;
+ }
newObj = allocateSlotsInOldSpacebytesformatclassIndex(numSlots, ((numSlots == 0
? 8
: (numSlots + (numSlots & 1)) << (shiftForWord()))) + ((numSlots >= 0xFF
@@ -26958,7 +26955,7 @@
forceInterruptCheck();
}
newObj = allocateSlotsInOldSpacebytesformatclassIndex(numSlots, numBytes, instSpec, classIndex);
- goto l1;
+ goto l2;
}
if (numSlots >= 0xFF) {
@@ -26976,7 +26973,7 @@
assert((newObj1 % (allocationUnit())) == 0);
GIV(freeStart) += numBytes;
newObj = newObj1;
- l1: /* end allocateSlots:format:classIndex: */;
+ l2: /* end allocateSlots:format:classIndex: */;
}
if (!(newObj == null)) {
/* begin fillObj:numSlots:with: */
@@ -34545,7 +34542,7 @@
newNumSlots = obj2slots + header1NumSlots;
if (newNumSlots < 0xFF) {
- byteAtput(here1 + (56 / BitsPerByte), newNumSlots);
+ byteAtput(here1 + 7, newNumSlots);
here1 = here1;
goto l2;
}
@@ -51707,7 +51704,7 @@
sqInt referent1;
sqInt referent2;
char *theFP;
- usqInt theIP;
+ sqInt theIP;
usqInt theIPPtr;
StackPage *thePage;
char *theSP;
@@ -51765,7 +51762,7 @@
/* reuse theIP; its just an offset here */
- theIP = ((usqInt)(theFP + ((FoxCallerSavedIP + BytesPerWord) + ((byteAt((theFP + FoxFrameFlags) + 1)) << (shiftForWord())))));
+ theIP = ((sqInt)(theFP + ((FoxCallerSavedIP + BytesPerWord) + ((byteAt((theFP + FoxFrameFlags) + 1)) << (shiftForWord())))));
oop = longAt(theIP);
if (((oop & 3) == 0)
&& (((longAt(oop)) & 0x3FFFFF) == 8)) {
@@ -51793,7 +51790,7 @@
longAtput(theFP + FoxMethod, (oop = newOop));
}
if (!(((callerFP = frameCallerFP(theFP))) != 0)) break;
- theIPPtr = ((usqInt)(theFP + FoxCallerSavedIP));
+ theIPPtr = ((sqInt)(theFP + FoxCallerSavedIP));
theFP = callerFP;
}
}
@@ -59190,12 +59187,20 @@
}
sqInt
-printStackCallStackOf(char *aFramePointer)
+printStackCallStackOf(sqInt frameOrContext)
{
sqInt context;
char *theFP;
- theFP = aFramePointer;
+ if (addressCouldBeObj(frameOrContext)) {
+ if ((((frameOrContext & 3) == 0)
+ && (((longAt(frameOrContext)) & 0x3FFFFF) == ClassMethodContextCompactIndex))
+ && (checkIsStillMarriedContextcurrentFP(frameOrContext, null))) {
+ return printStackCallStackOf(frameOfMarriedContext(frameOrContext));
+ }
+ return null;
+ }
+ theFP = ((void *)frameOrContext);
while(1) {
context = shortReversePrintFrameAndCallers(theFP);
if (!((((longAt((context + BaseHeaderSize) + (SenderIndex << (shiftForWord())))) & 1))
Property changes on: branches/Cog/platforms/Cross/vm/sqSCCSVersion.h
___________________________________________________________________
Modified: checkindate
- Mon Nov 24 12:21:21 PST 2014
+ Thu Nov 27 16:06:45 PST 2014
Modified: branches/Cog/sistasrc/vm/cogit.c
@@ Diff output truncated at 50000 characters. @@