This is interp.c in view mode; [Download] [Up]
/* Automatically generated from Squeak on (25 May 1998 3:21:38 pm ) */ #include "sq.h" #include "sqMachDep.h" /* needed only by the JIT virtual machine */ /* memory access macros */ #define byteAt(i) (*((unsigned char *) (i))) #define byteAtput(i, val) (*((unsigned char *) (i)) = val) #define longAt(i) (*((int *) (i))) #define longAtput(i, val) (*((int *) (i)) = val) int printCallStack(void); void error(char *s); void error(char *s) { /* Print an error message and exit. */ static int printingStack = false; printf("\n%s\n\n", s); if (!printingStack) { /* flag prevents recursive error when trying to print a broken stack */ printingStack = true; printCallStack(); } exit(-1); } /*** Variables ***/ int activeContext; int affectedB; int affectedL; int affectedR; int affectedT; int allocationCount; int allocationsBetweenGCs; int argumentCount; int bbH; int bbW; int bitBltOop; int bitCount; int checkAssertions; int child; int clipHeight; int clipWidth; int clipX; int clipY; int cmBitsPerColor; int colorMap; int combinationRule; int compEnd; int compStart; int deferDisplayUpdates; int destBits; int destDelta; int destForm; int destIndex; int destPixSize; int destRaster; int destX; int destY; int displayBits; int dx; int dy; int endOfMemory; int falseObj; int field; int freeBlock; int freeLargeContexts; int freeSmallContexts; int fullScreenFlag; int fwdTableLast; int fwdTableNext; int hDir; int halftoneBase; int halftoneForm; int halftoneHeight; int height; int instructionPointer; int interpreterProxy; int interruptCheckCounter; int interruptKeycode; int interruptPending; int lastHash; int lastTick; int lowSpaceThreshold; int mask1; int mask2; int mcProbe; unsigned char *memory; int memoryLimit; int messageSelector; int method; int methodCache[2049]; int nWords; int newMethod; int nextPollTick; int nextWakeupTick; int nilObj; int noHalftone; int noSource; int opTable[33]; int parentField; int pixPerWord; int preload; int primitiveIndex; int receiver; int reclaimableContextCount; int remapBuffer[26]; int remapBufferCount; int rootTable[1001]; int rootTableCount; int savedWindowSize; int scanDisplayFlag; int scanRightX; int scanStart; int scanStop; int scanStopArray; int scanString; int scanXTable; int semaphoresToSignal[26]; int semaphoresToSignalCount; int signalLowSpace; int skew; int sourceBits; int sourceDelta; int sourceForm; int sourceIndex; int sourcePixSize; int sourceRaster; int sourceX; int sourceY; int specialObjectsOop; int srcBitIndex; int srcHeight; int srcWidth; int stackPointer; int statFullGCMSecs; int statFullGCs; int statIncrGCMSecs; int statIncrGCs; int statRootTableOverflows; int statTenures; int stopCode; int successFlag; int sx; int sy; int tenuringThreshold; int theHomeContext; int trueObj; int vDir; int width; int youngStart; /*** Function Prototypes ***/ int aComment(void); int accessibleObjectAfter(int oop); int activateNewMethod(void); int addLastLinktoList(int proc, int aList); int addToMethodCacheSelclassmethodprimIndex(int selector, int class, int meth, int primIndex); int addWordwith(int sourceWord, int destinationWord); int adjustAllOopsBy(int bytesToShift); int adjustFieldsAndClassOfby(int oop, int offsetBytes); int affectedBottom(void); int affectedLeft(void); int affectedRight(void); int affectedTop(void); int allAccessibleObjectsOkay(void); int allYoungand(int array1, int array2); int allocateheaderSizeh1h2h3fill(int byteSize, int hdrSize, int baseHeader, int classOop, int extendedSize, int fillWord); int allocateChunk(int byteSize); int allocateOrRecycleContext(int smallContextWanted); int alphaBlendwith(int sourceWord, int destinationWord); int areIntegersand(int oop1, int oop2); int argCount(void); int argumentCountOf(int methodPointer); int argumentCountOfBlock(int blockPointer); void * arrayValueOf(int arrayOop); int asciiDirectoryDelimiter(void); int asciiOfCharacter(int characterObj); int assertClassOfis(int oop, int classOop); int assertFloatand(int oop1, int oop2); int baseHeader(int oop); int beRootIfOld(int oop); int beRootWhileForwarding(int oop); int becomewith(int array1, int array2); int bitAndwith(int sourceWord, int destinationWord); int bitAndInvertwith(int sourceWord, int destinationWord); int bitInvertAndwith(int sourceWord, int destinationWord); int bitInvertAndInvertwith(int sourceWord, int destinationWord); int bitInvertDestinationwith(int sourceWord, int destinationWord); int bitInvertOrwith(int sourceWord, int destinationWord); int bitInvertOrInvertwith(int sourceWord, int destinationWord); int bitInvertSourcewith(int sourceWord, int destinationWord); int bitInvertXorwith(int sourceWord, int destinationWord); int bitOrwith(int sourceWord, int destinationWord); int bitOrInvertwith(int sourceWord, int destinationWord); int bitXorwith(int sourceWord, int destinationWord); int booleanValueOf(int obj); int byteLengthOf(int oop); int byteSwapByteObjects(void); int byteSwapped(int w); int caller(void); int characterForAscii(int integerObj); int checkAddress(int byteAddress); int checkBooleanResultfrom(int result, int primIndex); int checkForInterrupts(void); int checkImageVersionFrom(sqImageFile f); int checkIntegerResultfrom(int integerResult, int primIndex); int checkSourceOverlap(void); int checkedByteAt(int byteAddress); int checkedByteAtput(int byteAddress, int byte); int checkedIntegerValueOf(int intOop); int checkedLongAt(int byteAddress); int checkedLongAtput(int byteAddress, int a32BitInteger); int chunkFromOop(int oop); int classHeader(int oop); int clearRootsTable(void); int clearWordwith(int source, int destination); int clipRange(void); int clone(int oop); int commonAt(int stringy); int commonAtPut(int stringy); int compare31or32Bitsequal(int obj1, int obj2); int containOnlyOopsand(int array1, int array2); int copyBits(void); int copyLoop(void); int copyLoopNoSource(void); int copyLoopPixMap(void); int cr(void); int createActualMessage(void); int deltaFromtonSteps(int x1, int x2, int n); int destMaskAndPointerInit(void); int destinationWordwith(int sourceWord, int destinationWord); int drawLoopXY(int xDelta, int yDelta); int exchangeHashBitswith(int oop1, int oop2); int executeNewMethod(void); int extraHeaderBytes(int oopOrChunk); int failSpecialPrim(int primIndex); int failed(void); void * fetchArrayofObject(int fieldIndex, int objectPointer); int fetchByteofObject(int byteIndex, int oop); int fetchClassOf(int oop); int fetchContextRegisters(int activeCntx); double fetchFloatofObject(int fieldIndex, int objectPointer); int fetchIntegerofObject(int fieldIndex, int objectPointer); int fetchIntegerOrTruncFloatofObject(int fieldIndex, int objectPointer); int fetchPointerofObject(int fieldIndex, int oop); int fetchWordofObject(int fieldIndex, int oop); int fetchWordLengthOf(int objectPointer); int fileRecordSize(void); SQFile * fileValueOf(int objectPointer); int findClassOfMethodforReceiver(int meth, int rcvr); int findNewMethodInClass(int class); int findSelectorOfMethodforReceiver(int meth, int rcvr); int firstAccessibleObject(void); int firstObject(void); int fixedFieldsOfformatlength(int oop, int fmt, int wordLength); double floatValueOf(int oop); int flushMethodCache(void); int formatOf(int oop); int formatOfClass(int classPointer); int fullCompaction(void); int fullDisplayUpdate(void); int fullGC(void); int fwdBlockGet(void); int fwdBlockValidate(int addr); int fwdTableInit(void); int getCurrentBytecode(void); int getLongFromFileswap(sqImageFile f, int swapFlag); int hashBitsOf(int oop); int headerOf(int methodPointer); int headerType(int oop); int ignoreSourceOrHalftone(int formPointer); int imageFormatVersion(void); int incCompBody(void); int incCompMakeFwd(void); int incCompMove(int bytesFreed); int incrementalCompaction(void); int incrementalGC(void); int initBBOpTable(void); int initForwardBlockmappingto(int fwdBlock, int oop, int newOop); int initialInstanceOf(int classPointer); int initializeInterpreter(int bytesToShift); int initializeMemoryFirstFree(int firstFree); int initializeObjectMemory(int bytesToShift); int instanceAfter(int objectPointer); int instantiateClassindexableSize(int classPointer, int size); int instantiateSmallClasssizeInBytesfill(int classPointer, int sizeInBytes, int fillValue); int intToNetAddress(int addr); int integerObjectOf(int value); int integerValueOf(int objectPointer); int interpret(void); int isBytes(int oop); int isEmptyList(int aLinkedList); int isFreeObject(int oop); int isIntegerObject(int objectPointer); int isIntegerValue(int intValue); int isObjectForwarded(int oop); int isPointers(int oop); int isWords(int oop); int isWordsOrBytes(int oop); int lastPointerOf(int objectPointer); int lastPointerWhileForwarding(int oop); int lengthOf(int oop); int lengthOfbaseHeaderformat(int oop, int hdr, int fmt); int literal(int offset); int literalofMethod(int offset, int methodPointer); int literalCountOf(int methodPointer); int literalCountOfHeader(int headerPointer); int loadBitBltFrom(int bbObj); int loadInitialContext(void); int loadScannerFromstartstopstringrightXstopArraydisplayFlag(int bbObj, int start, int stop, int string, int rightX, int stopArray, int displayFlag); int lookupInMethodCacheSelclass(int selector, int class); int lookupMethodInClass(int class); int lookupMethodInDictionary(int dictionary); int lowestFreeAfter(int chunk); int makeDirEntryNamesizecreateDatemodDateisDirfileSize(char *entryName, int entryNameSize, int createDate, int modifiedDate, int dirFlag, int fileSize); int makePointwithxValueyValue(int xValue, int yValue); int mapInterpreterOops(void); int mapPointersInObjectsFromto(int memStart, int memEnd); int markAndTrace(int oop); int markAndTraceInterpreterOops(void); int markPhase(void); int mergewith(int sourceWord, int destinationWord); int methodClassOf(int methodPointer); int netAddressToInt(int oop); int newActiveContext(int aContext); int newObjectHash(void); int nilObject(void); int objectAfter(int oop); int objectAfterWhileForwarding(int oop); int okArrayClass(int cl); int okStreamArrayClass(int cl); int okayActiveProcessStack(void); int okayFields(int oop); int okayInterpreterObjects(void); int okayOop(int oop); int oopFromChunk(int chunk); int oopHasOkayClass(int oop); int partitionedANDtonBitsnPartitions(int word1, int word2, int nBits, int nParts); int partitionedAddtonBitsnPartitions(int word1, int word2, int nBits, int nParts); int partitionedMaxwithnBitsnPartitions(int word1, int word2, int nBits, int nParts); int partitionedMinwithnBitsnPartitions(int word1, int word2, int nBits, int nParts); int partitionedSubfromnBitsnPartitions(int word1, int word2, int nBits, int nParts); int pickSourcePixelsnullMapsrcMaskdestMask(int nPix, int nullMap, int sourcePixMask, int destPixMask); int pickSourcePixelssrcMaskdestMask(int nPix, int sourcePixMask, int destPixMask); int pickSourcePixelsNullMapsrcMaskdestMask(int nPix, int sourcePixMask, int destPixMask); int pickSourcePixelsRGBnullMapsrcMaskdestMask(int nPix, int nullMap, int sourcePixMask, int destPixMask); int pixMaskwith(int sourceWord, int destinationWord); int pixPaintwith(int sourceWord, int destinationWord); int pop(int nItems); int popthenPush(int nItems, int oop); double popFloat(void); int popInteger(void); int popPos32BitInteger(void); int popRemappableOop(void); int popStack(void); int positive32BitIntegerFor(int integerValue); int positive32BitValueOf(int oop); int possibleRootStoreIntovalue(int oop, int valueObj); int postGCAction(void); int preGCAction(int fullGCFlag); int prepareForwardingTableForBecomingwith(int array1, int array2); int primIndex(void); int primitiveAdd(void); int primitiveArctan(void); int primitiveArrayBecome(void); int primitiveAsFloat(void); int primitiveAsOop(void); int primitiveAt(void); int primitiveAtEnd(void); int primitiveAtPut(void); int primitiveBeCursor(void); int primitiveBeDisplay(void); int primitiveBeep(void); int primitiveBitAnd(void); int primitiveBitOr(void); int primitiveBitShift(void); int primitiveBitXor(void); int primitiveBlockCopy(void); int primitiveBytesLeft(void); int primitiveClass(void); int primitiveClipboardText(void); int primitiveClone(void); int primitiveConstantFill(void); int primitiveCopyBits(void); int primitiveDeferDisplayUpdates(void); int primitiveDirectoryCreate(void); int primitiveDirectoryDelimitor(void); int primitiveDirectoryLookup(void); int primitiveDirectorySetMacTypeAndCreator(void); int primitiveDiv(void); int primitiveDivide(void); int primitiveDoPrimitiveWithArgs(void); int primitiveDrawLoop(void); int primitiveEqual(void); int primitiveEquivalent(void); int primitiveExitToDebugger(void); int primitiveExp(void); int primitiveExponent(void); int primitiveFail(void); int primitiveFileAtEnd(void); int primitiveFileClose(void); int primitiveFileDelete(void); int primitiveFileGetPosition(void); int primitiveFileOpen(void); int primitiveFileRead(void); int primitiveFileRename(void); int primitiveFileSetPosition(void); int primitiveFileSize(void); int primitiveFileWrite(void); int primitiveFloatAdd(void); int primitiveFloatDivide(void); int primitiveFloatEqual(void); int primitiveFloatGreaterOrEqual(void); int primitiveFloatGreaterThan(void); int primitiveFloatLessOrEqual(void); int primitiveFloatLessThan(void); int primitiveFloatMultiply(void); int primitiveFloatNotEqual(void); int primitiveFloatSubtract(void); int primitiveFlushCache(void); int primitiveFlushCacheSelective(void); int primitiveForceDisplayUpdate(void); int primitiveFormPrint(void); int primitiveFractionalPart(void); int primitiveFullGC(void); int primitiveGetAttribute(void); int primitiveGreaterOrEqual(void); int primitiveGreaterThan(void); int primitiveImageName(void); int primitiveIncrementalGC(void); int primitiveIndexOf(int methodPointer); int primitiveInitializeNetwork(void); int primitiveInputSemaphore(void); int primitiveInputWord(void); int primitiveInstVarAt(void); int primitiveInstVarAtPut(void); int primitiveInterruptSemaphore(void); int primitiveKbdNext(void); int primitiveKbdPeek(void); int primitiveLessOrEqual(void); int primitiveLessThan(void); int primitiveLoadInstVar(void); int primitiveLogN(void); int primitiveLowSpaceSemaphore(void); int primitiveMIDIClosePort(void); int primitiveMIDIGetClock(void); int primitiveMIDIGetPortCount(void); int primitiveMIDIGetPortDirectionality(void); int primitiveMIDIGetPortName(void); int primitiveMIDIOpenPort(void); int primitiveMIDIParameterGetOrSet(void); int primitiveMIDIRead(void); int primitiveMIDIWrite(void); int primitiveMakePoint(void); int primitiveMillisecondClock(void); int primitiveMod(void); int primitiveMouseButtons(void); int primitiveMousePoint(void); int primitiveMultiply(void); int primitiveNew(void); int primitiveNewMethod(void); int primitiveNewWithArg(void); int primitiveNext(void); int primitiveNextInstance(void); int primitiveNextObject(void); int primitiveNextPut(void); int primitiveNoop(void); int primitiveNotEqual(void); int primitiveObjectAt(void); int primitiveObjectAtPut(void); int primitiveObjectPointsTo(void); int primitivePerform(void); int primitivePerformWithArgs(void); int primitivePointX(void); int primitivePointY(void); int primitivePushFalse(void); int primitivePushMinusOne(void); int primitivePushNil(void); int primitivePushOne(void); int primitivePushSelf(void); int primitivePushTrue(void); int primitivePushTwo(void); int primitivePushZero(void); int primitiveQuit(void); int primitiveQuo(void); int primitiveReadJoystick(void); int primitiveRelinquishProcessor(void); int primitiveResolverAbortLookup(void); int primitiveResolverAddressLookupResult(void); int primitiveResolverError(void); int primitiveResolverLocalAddress(void); int primitiveResolverNameLookupResult(void); int primitiveResolverStartAddressLookup(void); int primitiveResolverStartNameLookup(void); int primitiveResolverStatus(void); int primitiveResponse(void); int primitiveResume(void); int primitiveScanCharacters(void); int primitiveScreenSize(void); int primitiveSecondsClock(void); int primitiveSerialPortClose(void); int primitiveSerialPortOpen(void); int primitiveSerialPortRead(void); int primitiveSerialPortWrite(void); int primitiveSetFullScreen(void); int primitiveSetInterruptKey(void); int primitiveShortAt(void); int primitiveShortAtPut(void); int primitiveShowDisplayRect(void); int primitiveSignal(void); int primitiveSignalAtBytesLeft(void); int primitiveSignalAtMilliseconds(void); int primitiveSine(void); int primitiveSize(void); int primitiveSnapshot(void); int primitiveSocketAbortConnection(void); int primitiveSocketCloseConnection(void); int primitiveSocketConnectToPort(void); int primitiveSocketConnectionStatus(void); int primitiveSocketCreate(void); int primitiveSocketDestroy(void); int primitiveSocketError(void); int primitiveSocketListenOnPort(void); int primitiveSocketLocalAddress(void); int primitiveSocketLocalPort(void); int primitiveSocketReceiveDataAvailable(void); int primitiveSocketReceiveDataBufCount(void); int primitiveSocketRemoteAddress(void); int primitiveSocketRemotePort(void); int primitiveSocketSendDataBufCount(void); int primitiveSocketSendDone(void); int primitiveSomeInstance(void); int primitiveSomeObject(void); int primitiveSoundAvailableSpace(void); int primitiveSoundGetRecordingSampleRate(void); int primitiveSoundInsertSamples(void); int primitiveSoundPlaySamples(void); int primitiveSoundPlaySilence(void); int primitiveSoundRecordSamples(void); int primitiveSoundSetRecordLevel(void); int primitiveSoundStart(void); int primitiveSoundStartRecording(void); int primitiveSoundStartWithSemaphore(void); int primitiveSoundStop(void); int primitiveSoundStopRecording(void); int primitiveSpecialObjectsOop(void); int primitiveSquareRoot(void); int primitiveStringAt(void); int primitiveStringAtPut(void); int primitiveStringReplace(void); int primitiveSubtract(void); int primitiveSuspend(void); int primitiveTimesTwoPower(void); int primitiveTruncated(void); int primitiveVMParameter(void); int primitiveVMPath(void); int primitiveValue(void); int primitiveValueWithArgs(void); int primitiveWait(void); int primitiveWarpBits(void); int print(char *s); int printCallStack(void); int printChar(int aByte); int printNameOfClasscount(int classOop, int cnt); int printNum(int n); int printStringOf(int oop); int push(int object); int pushBool(int trueOrFalse); int pushFloat(double f); int pushInteger(int integerValue); int pushRemappableOop(int oop); int putLongtoFile(int n, sqImageFile f); int putToSleep(int aProcess); int quickCheckForInterrupts(void); int quickFetchIntegerofObject(int fieldIndex, int objectPointer); int readImageFromFileHeapSize(sqImageFile f, int desiredHeapSize); int recycleContextIfPossiblemethodContextClass(int cntxOop, int methodCntxClass); int remap(int oop); int remapClassOf(int oop); int remapFieldsAndClassOf(int oop); int removeFirstLinkOfList(int aList); int reportContexts(void); int restoreHeaderOf(int oop); int restoreHeadersAfterBecomingwith(int list1, int list2); int resume(int aProcess); int returnAtlastIndexlefttop(int stopIndex, int lastIndex, int left, int top); int reverseBytesFromto(int startAddr, int stopAddr); int reverseBytesInImage(void); int rgbAddwith(int sourceWord, int destinationWord); int rgbDiffwith(int sourceWord, int destinationWord); int rgbMapfromto(int sourcePixel, int nBitsIn, int nBitsOut); int rgbMaxwith(int sourceWord, int destinationWord); int rgbMinwith(int sourceWord, int destinationWord); int rgbMinInvertwith(int wordToInvert, int destinationWord); int rgbSubwith(int sourceWord, int destinationWord); int rightType(int headerWord); int scanCharacters(void); int schedulerPointer(void); int sendSelectorToClass(int classPointer); int sender(void); int setInterpreter(int anInterpreter); int setSizeOfFreeto(int chunk, int byteSize); int showDisplayBits(void); int signExtend16(int int16); int signalSemaphoreWithIndex(int index); int sizeBitsOf(int oop); int sizeBitsOfSafe(int oop); int sizeHeader(int oop); int sizeOfFree(int oop); int sizeOfSTArrayFromCPrimitive(void *cPtr); int smoothPixatXfyfdxhdyhdxvdyvpixPerWordpixelMasksourceMap(int n, int xf, int yf, int dxh, int dyh, int dxv, int dyv, int srcPixPerWord, int sourcePixMask, int sourceMap); int socketRecordSize(void); SQSocket * socketValueOf(int socketOop); int sourcePixAtXypixPerWord(int x, int y, int srcPixPerWord); int sourceSkewAndPointerInit(void); int sourceWordwith(int sourceWord, int destinationWord); int specialSelector(int index); int splObj(int index); int stObjectat(int array, int index); int stObjectatput(int array, int index, int value); int stSizeOf(int oop); int stackIntegerValue(int offset); int stackPointerIndex(void); int stackTop(void); int stackValue(int offset); int startField(void); int startObj(void); int startOfMemory(void); int stopReason(void); int storeByteofObjectwithValue(int byteIndex, int oop, int valueByte); int storeContextRegisters(int activeCntx); int storeInstructionPointerValueinContext(int value, int contextPointer); int storeIntegerofObjectwithValue(int fieldIndex, int objectPointer, int integerValue); int storePointerofObjectwithValue(int fieldIndex, int oop, int valuePointer); int storePointerUncheckedofObjectwithValue(int fieldIndex, int oop, int valuePointer); int storeStackPointerValueinContext(int value, int contextPointer); int storeWordofObjectwithValue(int fieldIndex, int oop, int valueWord); int subWordwith(int sourceWord, int destinationWord); int subscriptwithformat(int array, int index, int fmt); int subscriptwithstoringformat(int array, int index, int oopToStore, int fmt); int success(int successValue); int sufficientSpaceAfterGC(int minFree); int sufficientSpaceToAllocate(int bytes); int sufficientSpaceToInstantiateindexableSize(int classOop, int size); int superclassOf(int classPointer); int sweepPhase(void); int synchronousSignal(int aSemaphore); int tallyIntoMapwith(int sourceWord, int destinationWord); int targetForm(void); int temporary(int offset); int transferfromIndexofObjecttoIndexofObject(int count, int firstFrom, int fromOop, int firstTo, int toOop); int transferTo(int newProc); int unPop(int nItems); int unknownBytecode(void); int upward(void); int wakeHighestPriority(void); int warpBits(void); int warpLoop(void); int warpSourcePixelsxDeltahyDeltahxDeltavyDeltavsmoothingsourceMap(int nPix, int xDeltah, int yDeltah, int xDeltav, int yDeltav, int n, int sourceMapOop); int writeImageFile(int imageBytes); int aComment(void) { } int accessibleObjectAfter(int oop) { int obj; int sz; int header; int extra; int type; int extra1; int sz1; int header1; int extra2; int type1; int extra11; /* begin objectAfter: */ if (checkAssertions) { if (oop >= endOfMemory) { error("no objects after the end of memory"); } } if (((longAt(oop)) & 3) == 2) { sz1 = (longAt(oop)) & 536870908; } else { /* begin sizeBitsOf: */ header1 = longAt(oop); if ((header1 & 3) == 0) { sz1 = (longAt(oop - 8)) & 4294967292U; goto l2; } else { sz1 = header1 & 252; goto l2; } l2: /* end sizeBitsOf: */; } /* begin oopFromChunk: */ /* begin extraHeaderBytes: */ type1 = (longAt(oop + sz1)) & 3; if (type1 > 1) { extra11 = 0; } else { if (type1 == 1) { extra11 = 4; } else { extra11 = 8; } } extra2 = extra11; obj = (oop + sz1) + extra2; while (obj < endOfMemory) { if (!(((longAt(obj)) & 3) == 2)) { return obj; } /* begin objectAfter: */ if (checkAssertions) { if (obj >= endOfMemory) { error("no objects after the end of memory"); } } if (((longAt(obj)) & 3) == 2) { sz = (longAt(obj)) & 536870908; } else { /* begin sizeBitsOf: */ header = longAt(obj); if ((header & 3) == 0) { sz = (longAt(obj - 8)) & 4294967292U; goto l1; } else { sz = header & 252; goto l1; } l1: /* end sizeBitsOf: */; } /* begin oopFromChunk: */ /* begin extraHeaderBytes: */ type = (longAt(obj + sz)) & 3; if (type > 1) { extra1 = 0; } else { if (type == 1) { extra1 = 4; } else { extra1 = 8; } } extra = extra1; obj = (obj + sz) + extra; } return null; } int activateNewMethod(void) { int methodHeader; int smallContext; char * toIndex; int nilOop; int tempCount; int newContext; int initialIP; char * fromIndex; char * lastIndex; int cntxt; int tmp; methodHeader = longAt(((((char *) newMethod)) + 4) + (0 << 2)); smallContext = ((((unsigned) methodHeader) >> 18) & 1) == 0; /* begin allocateOrRecycleContext: */ if (smallContext) { if (freeSmallContexts != 1) { cntxt = freeSmallContexts; freeSmallContexts = longAt(((((char *) cntxt)) + 4) + (0 << 2)); } else { cntxt = instantiateSmallClasssizeInBytesfill(longAt(((((char *) specialObjectsOop)) + 4) + (10 << 2)), 76, nilObj); } } else { if (freeLargeContexts != 1) { cntxt = freeLargeContexts; freeLargeContexts = longAt(((((char *) cntxt)) + 4) + (0 << 2)); } else { cntxt = instantiateSmallClasssizeInBytesfill(longAt(((((char *) specialObjectsOop)) + 4) + (10 << 2)), 156, nilObj); } } newContext = cntxt; initialIP = ((1 + ((((unsigned) methodHeader) >> 10) & 255)) * 4) + 1; tempCount = (((unsigned) methodHeader) >> 19) & 63; longAtput(((((char *) newContext)) + 4) + (0 << 2), activeContext); longAtput(((((char *) newContext)) + 4) + (1 << 2), ((initialIP << 1) | 1)); longAtput(((((char *) newContext)) + 4) + (2 << 2), ((tempCount << 1) | 1)); longAtput(((((char *) newContext)) + 4) + (3 << 2), newMethod); fromIndex = (((char *) activeContext)) + (((((unsigned) ((stackPointer - activeContext) - 4)) >> 2) - argumentCount) * 4); toIndex = (((char *) newContext)) + (5 * 4); lastIndex = fromIndex + ((argumentCount + 1) * 4); while (fromIndex < lastIndex) { fromIndex += 4; toIndex += 4; longAtput(toIndex, longAt(fromIndex)); } nilOop = nilObj; if (smallContext) { lastIndex = ((((char *) newContext)) + 76) - 4; } else { lastIndex = ((((char *) newContext)) + 156) - 4; } while (toIndex < lastIndex) { toIndex += 4; longAtput(toIndex, nilOop); } /* begin pop: */ stackPointer -= (argumentCount + 1) * 4; reclaimableContextCount += 1; /* begin newActiveContext: */ /* begin storeContextRegisters: */ longAtput(((((char *) activeContext)) + 4) + (1 << 2), ((((instructionPointer - method) - (4 - 2)) << 1) | 1)); longAtput(((((char *) activeContext)) + 4) + (2 << 2), (((((((unsigned) ((stackPointer - activeContext) - 4)) >> 2) - 6) + 1) << 1) | 1)); if (newContext < youngStart) { beRootIfOld(newContext); } activeContext = newContext; /* begin fetchContextRegisters: */ tmp = longAt(((((char *) newContext)) + 4) + (3 << 2)); if ((tmp & 1)) { tmp = longAt(((((char *) newContext)) + 4) + (5 << 2)); if (tmp < youngStart) { beRootIfOld(tmp); } } else { tmp = newContext; } theHomeContext = tmp; receiver = longAt(((((char *) tmp)) + 4) + (5 << 2)); method = longAt(((((char *) tmp)) + 4) + (3 << 2)); tmp = ((longAt(((((char *) newContext)) + 4) + (1 << 2))) >> 1); instructionPointer = ((method + tmp) + 4) - 2; tmp = ((longAt(((((char *) newContext)) + 4) + (2 << 2))) >> 1); stackPointer = (newContext + 4) + (((6 + tmp) - 1) * 4); } int addLastLinktoList(int proc, int aList) { int lastLink; if ((longAt(((((char *) aList)) + 4) + (0 << 2))) == nilObj) { /* begin storePointer:ofObject:withValue: */ if (aList < youngStart) { possibleRootStoreIntovalue(aList, proc); } longAtput(((((char *) aList)) + 4) + (0 << 2), proc); } else { lastLink = longAt(((((char *) aList)) + 4) + (1 << 2)); /* begin storePointer:ofObject:withValue: */ if (lastLink < youngStart) { possibleRootStoreIntovalue(lastLink, proc); } longAtput(((((char *) lastLink)) + 4) + (0 << 2), proc); } /* begin storePointer:ofObject:withValue: */ if (aList < youngStart) { possibleRootStoreIntovalue(aList, proc); } longAtput(((((char *) aList)) + 4) + (1 << 2), proc); /* begin storePointer:ofObject:withValue: */ if (proc < youngStart) { possibleRootStoreIntovalue(proc, aList); } longAtput(((((char *) proc)) + 4) + (3 << 2), aList); } int addToMethodCacheSelclassmethodprimIndex(int selector, int class, int meth, int primIndex) { int probe; mcProbe = (mcProbe + 1) % 3; probe = ((((unsigned) (selector ^ class)) >> (mcProbe + 2)) & 511) + 1; methodCache[probe] = selector; methodCache[probe + 512] = class; methodCache[probe + (512 * 2)] = meth; methodCache[probe + (512 * 3)] = primIndex; } int addWordwith(int sourceWord, int destinationWord) { return sourceWord + destinationWord; } int adjustAllOopsBy(int bytesToShift) { int oop; int last; int newClassOop; int fieldAddr; int fieldOop; int classHeader; int chunk; int extra; int type; int extra1; int sz; int header; int extra2; int type1; int extra11; if (bytesToShift == 0) { return null; } /* begin oopFromChunk: */ chunk = startOfMemory(); /* begin extraHeaderBytes: */ type = (longAt(chunk)) & 3; if (type > 1) { extra1 = 0; } else { if (type == 1) { extra1 = 4; } else { extra1 = 8; } } extra = extra1; oop = chunk + extra; while (oop < endOfMemory) { if (!(((longAt(oop)) & 3) == 2)) { /* begin adjustFieldsAndClassOf:by: */ fieldAddr = oop + (lastPointerOf(oop)); while (fieldAddr > oop) { fieldOop = longAt(fieldAddr); if (!((fieldOop & 1))) { longAtput(fieldAddr, fieldOop + bytesToShift); } fieldAddr -= 4; } if (((longAt(oop)) & 3) != 3) { classHeader = longAt(oop - 4); newClassOop = (classHeader & 4294967292U) + bytesToShift; longAtput(oop - 4, newClassOop | (classHeader & 3)); } } last = oop; /* begin objectAfter: */ if (checkAssertions) { if (oop >= endOfMemory) { error("no objects after the end of memory"); } } if (((longAt(oop)) & 3) == 2) { sz = (longAt(oop)) & 536870908; } else { /* begin sizeBitsOf: */ header = longAt(oop); if ((header & 3) == 0) { sz = (longAt(oop - 8)) & 4294967292U; goto l1; } else { sz = header & 252; goto l1; } l1: /* end sizeBitsOf: */; } /* begin oopFromChunk: */ /* begin extraHeaderBytes: */ type1 = (longAt(oop + sz)) & 3; if (type1 > 1) { extra11 = 0; } else { if (type1 == 1) { extra11 = 4; } else { extra11 = 8; } } extra2 = extra11; oop = (oop + sz) + extra2; } } int adjustFieldsAndClassOfby(int oop, int offsetBytes) { int newClassOop; int fieldAddr; int fieldOop; int classHeader; fieldAddr = oop + (lastPointerOf(oop)); while (fieldAddr > oop) { fieldOop = longAt(fieldAddr); if (!((fieldOop & 1))) { longAtput(fieldAddr, fieldOop + offsetBytes); } fieldAddr -= 4; } if (((longAt(oop)) & 3) != 3) { classHeader = longAt(oop - 4); newClassOop = (classHeader & 4294967292U) + offsetBytes; longAtput(oop - 4, newClassOop | (classHeader & 3)); } } int affectedBottom(void) { return affectedB; } int affectedLeft(void) { return affectedL; } int affectedRight(void) { return affectedR; } int affectedTop(void) { return affectedT; } int allAccessibleObjectsOkay(void) { int oop; int obj; int chunk; int extra; int type; int extra1; int sz; int header; int extra2; int type1; int extra11; /* begin firstAccessibleObject */ /* begin oopFromChunk: */ chunk = startOfMemory(); /* begin extraHeaderBytes: */ type = (longAt(chunk)) & 3; if (type > 1) { extra1 = 0; } else { if (type == 1) { extra1 = 4; } else { extra1 = 8; } } extra = extra1; obj = chunk + extra; while (obj < endOfMemory) { if (!(((longAt(obj)) & 3) == 2)) { oop = obj; goto l2; } /* begin objectAfter: */ if (checkAssertions) { if (obj >= endOfMemory) { error("no objects after the end of memory"); } } if (((longAt(obj)) & 3) == 2) { sz = (longAt(obj)) & 536870908; } else { /* begin sizeBitsOf: */ header = longAt(obj); if ((header & 3) == 0) { sz = (longAt(obj - 8)) & 4294967292U; goto l1; } else { sz = header & 252; goto l1; } l1: /* end sizeBitsOf: */; } /* begin oopFromChunk: */ /* begin extraHeaderBytes: */ type1 = (longAt(obj + sz)) & 3; if (type1 > 1) { extra11 = 0; } else { if (type1 == 1) { extra11 = 4; } else { extra11 = 8; } } extra2 = extra11; obj = (obj + sz) + extra2; } error("heap is empty"); l2: /* end firstAccessibleObject */; while (!(oop == null)) { okayFields(oop); oop = accessibleObjectAfter(oop); } } int allYoungand(int array1, int array2) { int fieldOffset; int methodHeader; int sz; int fmt; int header; int type; if (array1 < youngStart) { return false; } if (array2 < youngStart) { return false; } /* begin lastPointerOf: */ fmt = (((unsigned) (longAt(array1))) >> 8) & 15; if (fmt < 4) { /* begin sizeBitsOfSafe: */ header = longAt(array1); /* begin rightType: */ if ((header & 252) == 0) { type = 0; goto l2; } else { if ((header & 126976) == 0) { type = 1; goto l2; } else { type = 3; goto l2; } } l2: /* end rightType: */; if (type == 0) { sz = (longAt(array1 - 8)) & 4294967292U; goto l3; } else { sz = header & 252; goto l3; } l3: /* end sizeBitsOfSafe: */; fieldOffset = sz - 4; goto l1; } if (fmt < 12) { fieldOffset = 0; goto l1; } methodHeader = longAt(array1 + 4); fieldOffset = (((((unsigned) methodHeader) >> 10) & 255) * 4) + 4; l1: /* end lastPointerOf: */; while (fieldOffset >= 4) { if ((longAt(array1 + fieldOffset)) < youngStart) { return false; } if ((longAt(array2 + fieldOffset)) < youngStart) { return false; } fieldOffset -= 4; } return true; } int allocateheaderSizeh1h2h3fill(int byteSize, int hdrSize, int baseHeader, int classOop, int extendedSize, int fillWord) { int i; int newObj; int remappedClassOop; int end; int oop; int newFreeSize; int enoughSpace; int newChunk; int minFree; if (hdrSize > 1) { /* begin pushRemappableOop: */ remapBuffer[remapBufferCount += 1] = classOop; } /* begin allocateChunk: */ if (allocationCount >= allocationsBetweenGCs) { incrementalGC(); } /* begin sufficientSpaceToAllocate: */ minFree = (lowSpaceThreshold + (byteSize + ((hdrSize - 1) * 4))) + 4; if (((longAt(freeBlock)) & 536870908) >= minFree) { enoughSpace = true; goto l1; } else { enoughSpace = sufficientSpaceAfterGC(minFree); goto l1; } l1: /* end sufficientSpaceToAllocate: */; if (!(enoughSpace)) { signalLowSpace = true; lowSpaceThreshold = 0; interruptCheckCounter = 0; } if (((longAt(freeBlock)) & 536870908) < ((byteSize + ((hdrSize - 1) * 4)) + 4)) { error("out of memory"); } newFreeSize = ((longAt(freeBlock)) & 536870908) - (byteSize + ((hdrSize - 1) * 4)); newChunk = freeBlock; freeBlock += byteSize + ((hdrSize - 1) * 4); /* begin setSizeOfFree:to: */ longAtput(freeBlock, (newFreeSize & 536870908) | 2); allocationCount += 1; newObj = newChunk; if (hdrSize > 1) { /* begin popRemappableOop */ oop = remapBuffer[remapBufferCount]; remapBufferCount -= 1; remappedClassOop = oop; } if (hdrSize == 3) { longAtput(newObj, extendedSize | 0); longAtput(newObj + 4, remappedClassOop | 0); longAtput(newObj + 8, baseHeader | 0); newObj += 8; } if (hdrSize == 2) { longAtput(newObj, remappedClassOop | 1); longAtput(newObj + 4, baseHeader | 1); newObj += 4; } if (hdrSize == 1) { longAtput(newObj, baseHeader | 3); } end = newObj + byteSize; i = newObj + 4; while (i < end) { longAtput(i, fillWord); i += 4; } if (checkAssertions) { okayOop(newObj); oopHasOkayClass(newObj); if (!((objectAfter(newObj)) == freeBlock)) { error("allocate bug: did not set header of new oop correctly"); } if (!((objectAfter(freeBlock)) == endOfMemory)) { error("allocate bug: did not set header of freeBlock correctly"); } } return newObj; } int allocateChunk(int byteSize) { int newFreeSize; int enoughSpace; int newChunk; int minFree; if (allocationCount >= allocationsBetweenGCs) { incrementalGC(); } /* begin sufficientSpaceToAllocate: */ minFree = (lowSpaceThreshold + byteSize) + 4; if (((longAt(freeBlock)) & 536870908) >= minFree) { enoughSpace = true; goto l1; } else { enoughSpace = sufficientSpaceAfterGC(minFree); goto l1; } l1: /* end sufficientSpaceToAllocate: */; if (!(enoughSpace)) { signalLowSpace = true; lowSpaceThreshold = 0; interruptCheckCounter = 0; } if (((longAt(freeBlock)) & 536870908) < (byteSize + 4)) { error("out of memory"); } newFreeSize = ((longAt(freeBlock)) & 536870908) - byteSize; newChunk = freeBlock; freeBlock += byteSize; /* begin setSizeOfFree:to: */ longAtput(freeBlock, (newFreeSize & 536870908) | 2); allocationCount += 1; return newChunk; } int allocateOrRecycleContext(int smallContextWanted) { int cntxt; if (smallContextWanted) { if (freeSmallContexts != 1) { cntxt = freeSmallContexts; freeSmallContexts = longAt(((((char *) cntxt)) + 4) + (0 << 2)); } else { cntxt = instantiateSmallClasssizeInBytesfill(longAt(((((char *) specialObjectsOop)) + 4) + (10 << 2)), 76, nilObj); } } else { if (freeLargeContexts != 1) { cntxt = freeLargeContexts; freeLargeContexts = longAt(((((char *) cntxt)) + 4) + (0 << 2)); } else { cntxt = instantiateSmallClasssizeInBytesfill(longAt(((((char *) specialObjectsOop)) + 4) + (10 << 2)), 156, nilObj); } } return cntxt; } int alphaBlendwith(int sourceWord, int destinationWord) { int shift; int alpha; int i; int blend; int unAlpha; int result; int colorMask; alpha = ((unsigned) sourceWord) >> 24; unAlpha = 255 - alpha; colorMask = 255; result = 0; for (i = 1; i <= 3; i += 1) { shift = (i - 1) * 8; blend = ((((((((unsigned) sourceWord) >> shift) & colorMask) * alpha) + (((((unsigned) destinationWord) >> shift) & colorMask) * unAlpha)) + 254) / 255) & colorMask; result = result | (blend << shift); } return result; } int areIntegersand(int oop1, int oop2) { return ((oop1 & oop2) & 1) != 0; } int argCount(void) { return argumentCount; } int argumentCountOf(int methodPointer) { return (((unsigned) (longAt(((((char *) methodPointer)) + 4) + (0 << 2)))) >> 25) & 31; } int argumentCountOfBlock(int blockPointer) { int argCount; argCount = longAt(((((char *) blockPointer)) + 4) + (3 << 2)); if ((argCount & 1)) { return (argCount >> 1); } else { primitiveFail(); return 0; } } void * arrayValueOf(int arrayOop) { if ((!((arrayOop & 1))) && (isWordsOrBytes(arrayOop))) { return (void *) (arrayOop + 4); } primitiveFail(); } int asciiDirectoryDelimiter(void) { return dir_Delimitor(); } int asciiOfCharacter(int characterObj) { int ccIndex; int cl; /* begin assertClassOf:is: */ if ((characterObj & 1)) { successFlag = false; goto l1; } ccIndex = (((unsigned) (longAt(characterObj))) >> 12) & 31; if (ccIndex == 0) { cl = (longAt(characterObj - 4)) & 4294967292U; } else { cl = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + ((ccIndex - 1) << 2)); } /* begin success: */ successFlag = (cl == (longAt(((((char *) specialObjectsOop)) + 4) + (19 << 2)))) && successFlag; l1: /* end assertClassOf:is: */; if (successFlag) { return longAt(((((char *) characterObj)) + 4) + (0 << 2)); } else { return 1; } } int assertClassOfis(int oop, int classOop) { int ccIndex; int cl; if ((oop & 1)) { successFlag = false; return null; } ccIndex = (((unsigned) (longAt(oop))) >> 12) & 31; if (ccIndex == 0) { cl = (longAt(oop - 4)) & 4294967292U; } else { cl = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + ((ccIndex - 1) << 2)); } /* begin success: */ successFlag = (cl == classOop) && successFlag; } int assertFloatand(int oop1, int oop2) { int floatClass; int ccIndex; int cl; int ccIndex1; int cl1; if (((oop1 | oop2) & 1) != 0) { successFlag = false; } else { floatClass = longAt(((((char *) specialObjectsOop)) + 4) + (9 << 2)); /* begin assertClassOf:is: */ if ((oop1 & 1)) { successFlag = false; goto l1; } ccIndex = (((unsigned) (longAt(oop1))) >> 12) & 31; if (ccIndex == 0) { cl = (longAt(oop1 - 4)) & 4294967292U; } else { cl = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + ((ccIndex - 1) << 2)); } /* begin success: */ successFlag = (cl == floatClass) && successFlag; l1: /* end assertClassOf:is: */; /* begin assertClassOf:is: */ if ((oop2 & 1)) { successFlag = false; goto l2; } ccIndex1 = (((unsigned) (longAt(oop2))) >> 12) & 31; if (ccIndex1 == 0) { cl1 = (longAt(oop2 - 4)) & 4294967292U; } else { cl1 = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + ((ccIndex1 - 1) << 2)); } /* begin success: */ successFlag = (cl1 == floatClass) && successFlag; l2: /* end assertClassOf:is: */; } } int baseHeader(int oop) { return longAt(oop); } int beRootIfOld(int oop) { int header; if ((oop < youngStart) && (!((oop & 1)))) { header = longAt(oop); if ((header & 1073741824) == 0) { if (rootTableCount < 1000) { rootTableCount += 1; rootTable[rootTableCount] = oop; longAtput(oop, header | 1073741824); } } } } int beRootWhileForwarding(int oop) { int fwdBlock; int forwarding; int header; int newHeader; header = longAt(oop); if ((header & 2147483648U) != 0) { forwarding = true; fwdBlock = header & 2147483644; if (checkAssertions) { /* begin fwdBlockValidate: */ if (!((fwdBlock > endOfMemory) && ((fwdBlock <= fwdTableNext) && ((fwdBlock & 3) == 0)))) { error("invalid fwd table entry"); } } header = longAt(fwdBlock + 4); } else { forwarding = false; } if ((header & 1073741824) == 0) { if (rootTableCount < 1000) { rootTableCount += 1; rootTable[rootTableCount] = oop; newHeader = header | 1073741824; if (forwarding) { longAtput(fwdBlock + 4, newHeader); } else { longAtput(oop, newHeader); } } } } int becomewith(int array1, int array2) { int fieldOffset; int oop1; int oop2; int hdr1; int hdr2; int fwdBlock; int fwdHeader; int fwdBlock1; int fwdHeader1; int methodHeader; int sz; int fmt; int header; int type; if (!((fetchClassOf(array1)) == (longAt(((((char *) specialObjectsOop)) + 4) + (7 << 2))))) { return false; } if (!((fetchClassOf(array2)) == (longAt(((((char *) specialObjectsOop)) + 4) + (7 << 2))))) { return false; } if (!((lastPointerOf(array1)) == (lastPointerOf(array2)))) { return false; } if (!(containOnlyOopsand(array1, array2))) { return false; } if (!(prepareForwardingTableForBecomingwith(array1, array2))) { return false; } if (allYoungand(array1, array2)) { mapPointersInObjectsFromto(youngStart, endOfMemory); } else { mapPointersInObjectsFromto(startOfMemory(), endOfMemory); } /* begin restoreHeadersAfterBecoming:with: */ /* begin lastPointerOf: */ fmt = (((unsigned) (longAt(array1))) >> 8) & 15; if (fmt < 4) { /* begin sizeBitsOfSafe: */ header = longAt(array1); /* begin rightType: */ if ((header & 252) == 0) { type = 0; goto l2; } else { if ((header & 126976) == 0) { type = 1; goto l2; } else { type = 3; goto l2; } } l2: /* end rightType: */; if (type == 0) { sz = (longAt(array1 - 8)) & 4294967292U; goto l3; } else { sz = header & 252; goto l3; } l3: /* end sizeBitsOfSafe: */; fieldOffset = sz - 4; goto l1; } if (fmt < 12) { fieldOffset = 0; goto l1; } methodHeader = longAt(array1 + 4); fieldOffset = (((((unsigned) methodHeader) >> 10) & 255) * 4) + 4; l1: /* end lastPointerOf: */; while (fieldOffset >= 4) { oop1 = longAt(array1 + fieldOffset); oop2 = longAt(array2 + fieldOffset); /* begin restoreHeaderOf: */ fwdHeader = longAt(oop1); fwdBlock = fwdHeader & 2147483644; if (checkAssertions) { if ((fwdHeader & 2147483648U) == 0) { error("attempting to restore the header of an object that has no forwarding block"); } /* begin fwdBlockValidate: */ if (!((fwdBlock > endOfMemory) && ((fwdBlock <= fwdTableNext) && ((fwdBlock & 3) == 0)))) { error("invalid fwd table entry"); } } longAtput(oop1, longAt(fwdBlock + 4)); /* begin restoreHeaderOf: */ fwdHeader1 = longAt(oop2); fwdBlock1 = fwdHeader1 & 2147483644; if (checkAssertions) { if ((fwdHeader1 & 2147483648U) == 0) { error("attempting to restore the header of an object that has no forwarding block"); } /* begin fwdBlockValidate: */ if (!((fwdBlock1 > endOfMemory) && ((fwdBlock1 <= fwdTableNext) && ((fwdBlock1 & 3) == 0)))) { error("invalid fwd table entry"); } } longAtput(oop2, longAt(fwdBlock1 + 4)); /* begin exchangeHashBits:with: */ hdr1 = longAt(oop1); hdr2 = longAt(oop2); longAtput(oop1, (hdr1 & 3758227455U) | (hdr2 & 536739840)); longAtput(oop2, (hdr2 & 3758227455U) | (hdr1 & 536739840)); fieldOffset -= 4; } initializeMemoryFirstFree(freeBlock); return true; } int bitAndwith(int sourceWord, int destinationWord) { return sourceWord & destinationWord; } int bitAndInvertwith(int sourceWord, int destinationWord) { return sourceWord & (~destinationWord); } int bitInvertAndwith(int sourceWord, int destinationWord) { return (~sourceWord) & destinationWord; } int bitInvertAndInvertwith(int sourceWord, int destinationWord) { return (~sourceWord) & (~destinationWord); } int bitInvertDestinationwith(int sourceWord, int destinationWord) { return ~destinationWord; } int bitInvertOrwith(int sourceWord, int destinationWord) { return (~sourceWord) | destinationWord; } int bitInvertOrInvertwith(int sourceWord, int destinationWord) { return (~sourceWord) | (~destinationWord); } int bitInvertSourcewith(int sourceWord, int destinationWord) { return ~sourceWord; } int bitInvertXorwith(int sourceWord, int destinationWord) { return (~sourceWord) ^ destinationWord; } int bitOrwith(int sourceWord, int destinationWord) { return sourceWord | destinationWord; } int bitOrInvertwith(int sourceWord, int destinationWord) { return sourceWord | (~destinationWord); } int bitXorwith(int sourceWord, int destinationWord) { return sourceWord ^ destinationWord; } int booleanValueOf(int obj) { if (obj == trueObj) { return true; } if (obj == falseObj) { return false; } successFlag = false; return null; } int byteLengthOf(int oop) { int sz; int header; int fmt; header = longAt(oop); if ((header & 3) == 0) { sz = (longAt(oop - 8)) & 4294967292U; } else { sz = header & 252; } fmt = (((unsigned) header) >> 8) & 15; if (fmt < 8) { return sz - 4; } else { return (sz - 4) - (fmt & 3); } } int byteSwapByteObjects(void) { int methodHeader; int wordAddr; int oop; int fmt; int stopAddr; int addr; int chunk; int extra; int type; int extra1; int sz; int header; int extra2; int type1; int extra11; /* begin oopFromChunk: */ chunk = startOfMemory(); /* begin extraHeaderBytes: */ type = (longAt(chunk)) & 3; if (type > 1) { extra1 = 0; } else { if (type == 1) { extra1 = 4; } else { extra1 = 8; } } extra = extra1; oop = chunk + extra; while (oop < endOfMemory) { if (!(((longAt(oop)) & 3) == 2)) { fmt = (((unsigned) (longAt(oop))) >> 8) & 15; if (fmt >= 8) { wordAddr = oop + 4; if (fmt >= 12) { methodHeader = longAt(oop + 4); wordAddr = (wordAddr + 4) + (((((unsigned) methodHeader) >> 10) & 255) * 4); } /* begin reverseBytesFrom:to: */ stopAddr = oop + (sizeBitsOf(oop)); addr = wordAddr; while (addr < stopAddr) { longAtput(addr, ((((((unsigned) (longAt(addr)) >> 24)) & 255) + ((((unsigned) (longAt(addr)) >> 8)) & 65280)) + ((((unsigned) (longAt(addr)) << 8)) & 16711680)) + ((((unsigned) (longAt(addr)) << 24)) & 4278190080U)); addr += 4; } } } /* begin objectAfter: */ if (checkAssertions) { if (oop >= endOfMemory) { error("no objects after the end of memory"); } } if (((longAt(oop)) & 3) == 2) { sz = (longAt(oop)) & 536870908; } else { /* begin sizeBitsOf: */ header = longAt(oop); if ((header & 3) == 0) { sz = (longAt(oop - 8)) & 4294967292U; goto l1; } else { sz = header & 252; goto l1; } l1: /* end sizeBitsOf: */; } /* begin oopFromChunk: */ /* begin extraHeaderBytes: */ type1 = (longAt(oop + sz)) & 3; if (type1 > 1) { extra11 = 0; } else { if (type1 == 1) { extra11 = 4; } else { extra11 = 8; } } extra2 = extra11; oop = (oop + sz) + extra2; } } int byteSwapped(int w) { return ((((((unsigned) w >> 24)) & 255) + ((((unsigned) w >> 8)) & 65280)) + ((((unsigned) w << 8)) & 16711680)) + ((((unsigned) w << 24)) & 4278190080U); } int caller(void) { return longAt(((((char *) activeContext)) + 4) + (0 << 2)); } int characterForAscii(int integerObj) { return longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (24 << 2))))) + 4) + (((integerObj >> 1)) << 2)); } int checkAddress(int byteAddress) { if (byteAddress < (startOfMemory())) { error("bad address: negative"); } if (byteAddress >= memoryLimit) { error("bad address: past end of heap"); } } int checkBooleanResultfrom(int result, int primIndex) { int sp; int sp1; if (successFlag) { /* begin pushBool: */ if (result) { /* begin push: */ longAtput(sp = stackPointer + 4, trueObj); stackPointer = sp; } else { /* begin push: */ longAtput(sp1 = stackPointer + 4, falseObj); stackPointer = sp1; } } else { /* begin unPop: */ stackPointer += 2 * 4; failSpecialPrim(primIndex); } } int checkForInterrupts(void) { int sema; int semaClass; int i; int now; int externalObjects; int index; now = (ioMSecs()) & 536870911; if (now < lastTick) { nextPollTick = now + (nextPollTick - lastTick); if (nextWakeupTick != 0) { nextWakeupTick = now + (nextWakeupTick - lastTick); } } lastTick = now; if (signalLowSpace) { signalLowSpace = false; sema = longAt(((((char *) specialObjectsOop)) + 4) + (17 << 2)); if (!(sema == nilObj)) { return synchronousSignal(sema); } } if (now >= nextPollTick) { ioProcessEvents(); nextPollTick = now + 500; } if (interruptPending) { interruptPending = false; sema = longAt(((((char *) specialObjectsOop)) + 4) + (30 << 2)); if (!(sema == nilObj)) { return synchronousSignal(sema); } } if ((nextWakeupTick != 0) && (now >= nextWakeupTick)) { nextWakeupTick = 0; sema = longAt(((((char *) specialObjectsOop)) + 4) + (29 << 2)); if (!(sema == nilObj)) { return synchronousSignal(sema); } } if (semaphoresToSignalCount > 0) { externalObjects = longAt(((((char *) specialObjectsOop)) + 4) + (38 << 2)); semaClass = longAt(((((char *) specialObjectsOop)) + 4) + (18 << 2)); for (i = 1; i <= semaphoresToSignalCount; i += 1) { index = semaphoresToSignal[i]; sema = longAt(((((char *) externalObjects)) + 4) + ((index - 1) << 2)); if ((fetchClassOf(sema)) == semaClass) { synchronousSignal(sema); } } semaphoresToSignalCount = 0; } } int checkImageVersionFrom(sqImageFile f) { int version; int expectedVersion; int firstVersion; expectedVersion = 6502; sqImageFileSeek(f, 0); version = firstVersion = getLongFromFileswap(f, false); if (version == expectedVersion) { return false; } sqImageFileSeek(f, 0); version = getLongFromFileswap(f, true); if (version == expectedVersion) { return true; } sqImageFileSeek(f, 512); version = getLongFromFileswap(f, false); if (version == expectedVersion) { return false; } sqImageFileSeek(f, 512); version = getLongFromFileswap(f, true); if (version == expectedVersion) { return true; } print("This interpreter (vers. "); printNum(expectedVersion); print(" cannot read image file (vers. "); printNum(firstVersion); /* begin cr */ printf("\n"); ioExit(); } int checkIntegerResultfrom(int integerResult, int primIndex) { int sp; if (successFlag && ((integerResult ^ (integerResult << 1)) >= 0)) { /* begin pushInteger: */ /* begin push: */ longAtput(sp = stackPointer + 4, ((integerResult << 1) | 1)); stackPointer = sp; } else { /* begin unPop: */ stackPointer += 2 * 4; failSpecialPrim(primIndex); } } int checkSourceOverlap(void) { int t; if ((sourceForm == destForm) && (dy >= sy)) { if (dy > sy) { vDir = -1; sy = (sy + bbH) - 1; dy = (dy + bbH) - 1; } else { if (dx > sx) { hDir = -1; sx = (sx + bbW) - 1; dx = (dx + bbW) - 1; if (nWords > 1) { t = mask1; mask1 = mask2; mask2 = t; } } } destIndex = (destBits + 4) + (((dy * destRaster) + (dx / pixPerWord)) * 4); destDelta = 4 * ((destRaster * vDir) - (nWords * hDir)); } } int checkedByteAt(int byteAddress) { /* begin checkAddress: */ if (byteAddress < (startOfMemory())) { error("bad address: negative"); } if (byteAddress >= memoryLimit) { error("bad address: past end of heap"); } return byteAt(byteAddress); } int checkedByteAtput(int byteAddress, int byte) { /* begin checkAddress: */ if (byteAddress < (startOfMemory())) { error("bad address: negative"); } if (byteAddress >= memoryLimit) { error("bad address: past end of heap"); } byteAtput(byteAddress, byte); } int checkedIntegerValueOf(int intOop) { if ((intOop & 1)) { return (intOop >> 1); } else { primitiveFail(); return 0; } } int checkedLongAt(int byteAddress) { /* begin checkAddress: */ if (byteAddress < (startOfMemory())) { error("bad address: negative"); } if (byteAddress >= memoryLimit) { error("bad address: past end of heap"); } /* begin checkAddress: */ if ((byteAddress + 3) < (startOfMemory())) { error("bad address: negative"); } if ((byteAddress + 3) >= memoryLimit) { error("bad address: past end of heap"); } return longAt(byteAddress); } int checkedLongAtput(int byteAddress, int a32BitInteger) { /* begin checkAddress: */ if (byteAddress < (startOfMemory())) { error("bad address: negative"); } if (byteAddress >= memoryLimit) { error("bad address: past end of heap"); } /* begin checkAddress: */ if ((byteAddress + 3) < (startOfMemory())) { error("bad address: negative"); } if ((byteAddress + 3) >= memoryLimit) { error("bad address: past end of heap"); } longAtput(byteAddress, a32BitInteger); } int chunkFromOop(int oop) { int extra; int type; int extra1; /* begin extraHeaderBytes: */ type = (longAt(oop)) & 3; if (type > 1) { extra1 = 0; } else { if (type == 1) { extra1 = 4; } else { extra1 = 8; } } extra = extra1; return oop - extra; } int classHeader(int oop) { return longAt(oop - 4); } int clearRootsTable(void) { int oop; int i; for (i = 1; i <= rootTableCount; i += 1) { oop = rootTable[i]; longAtput(oop, (longAt(oop)) & 3221225471U); rootTable[i] = 0; } rootTableCount = 0; } int clearWordwith(int source, int destination) { return 0; } int clipRange(void) { if (destX >= clipX) { sx = sourceX; dx = destX; bbW = width; } else { sx = sourceX + (clipX - destX); bbW = width - (clipX - destX); dx = clipX; } if ((dx + bbW) > (clipX + clipWidth)) { bbW -= (dx + bbW) - (clipX + clipWidth); } if (destY >= clipY) { sy = sourceY; dy = destY; bbH = height; } else { sy = (sourceY + clipY) - destY; bbH = height - (clipY - destY); dy = clipY; } if ((dy + bbH) > (clipY + clipHeight)) { bbH -= (dy + bbH) - (clipY + clipHeight); } if (noSource) { return null; } if (sx < 0) { dx -= sx; bbW += sx; sx = 0; } if ((sx + bbW) > srcWidth) { bbW -= (sx + bbW) - srcWidth; } if (sy < 0) { dy -= sy; bbH += sy; sy = 0; } if ((sy + bbH) > srcHeight) { bbH -= (sy + bbH) - srcHeight; } } int clone(int oop) { int newOop; int header; int hash; int fromIndex; int lastFrom; int extraHdrBytes; int bytes; int remappedOop; int newChunk; int toIndex; int oop1; int type; int extra; int header1; int newFreeSize; int enoughSpace; int newChunk1; int minFree; /* begin extraHeaderBytes: */ type = (longAt(oop)) & 3; if (type > 1) { extra = 0; } else { if (type == 1) { extra = 4; } else { extra = 8; } } extraHdrBytes = extra; /* begin sizeBitsOf: */ header1 = longAt(oop); if ((header1 & 3) == 0) { bytes = (longAt(oop - 8)) & 4294967292U; goto l1; } else { bytes = header1 & 252; goto l1; } l1: /* end sizeBitsOf: */; bytes += extraHdrBytes; /* begin pushRemappableOop: */ remapBuffer[remapBufferCount += 1] = oop; /* begin allocateChunk: */ if (allocationCount >= allocationsBetweenGCs) { incrementalGC(); } /* begin sufficientSpaceToAllocate: */ minFree = (lowSpaceThreshold + bytes) + 4; if (((longAt(freeBlock)) & 536870908) >= minFree) { enoughSpace = true; goto l2; } else { enoughSpace = sufficientSpaceAfterGC(minFree); goto l2; } l2: /* end sufficientSpaceToAllocate: */; if (!(enoughSpace)) { signalLowSpace = true; lowSpaceThreshold = 0; interruptCheckCounter = 0; } if (((longAt(freeBlock)) & 536870908) < (bytes + 4)) { error("out of memory"); } newFreeSize = ((longAt(freeBlock)) & 536870908) - bytes; newChunk1 = freeBlock; freeBlock += bytes; /* begin setSizeOfFree:to: */ longAtput(freeBlock, (newFreeSize & 536870908) | 2); allocationCount += 1; newChunk = newChunk1; /* begin popRemappableOop */ oop1 = remapBuffer[remapBufferCount]; remapBufferCount -= 1; remappedOop = oop1; toIndex = newChunk - 4; fromIndex = (remappedOop - extraHdrBytes) - 4; lastFrom = fromIndex + bytes; while (fromIndex < lastFrom) { longAtput(toIndex += 4, longAt(fromIndex += 4)); } newOop = newChunk + extraHdrBytes; /* begin newObjectHash */ lastHash = (13849 + (27181 * lastHash)) & 65535; hash = lastHash; header = (longAt(newOop)) & 131071; header = header | ((hash << 17) & 536739840); longAtput(newOop, header); return newOop; } int commonAt(int stringy) { int index; int result; int rcvr; int sp; index = longAt(stackPointer); rcvr = longAt(stackPointer - (1 * 4)); if (((index & 1)) && (!((rcvr & 1)))) { index = (index >> 1); result = stObjectat(rcvr, index); if (stringy && (successFlag)) { result = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (24 << 2))))) + 4) + (((result >> 1)) << 2)); } } else { successFlag = false; } if (successFlag) { /* begin pop:thenPush: */ longAtput(sp = stackPointer - ((2 - 1) * 4), result); stackPointer = sp; } else { if (stringy) { failSpecialPrim(63); } else { failSpecialPrim(60); } } } int commonAtPut(int stringy) { int value; int valToStore; int index; int rcvr; int sp; value = valToStore = longAt(stackPointer); index = longAt(stackPointer - (1 * 4)); rcvr = longAt(stackPointer - (2 * 4)); if (((index & 1)) && (!((rcvr & 1)))) { index = (index >> 1); if (stringy) { valToStore = asciiOfCharacter(value); } stObjectatput(rcvr, index, valToStore); } else { successFlag = false; } if (successFlag) { /* begin pop:thenPush: */ longAtput(sp = stackPointer - ((3 - 1) * 4), value); stackPointer = sp; } else { if (stringy) { failSpecialPrim(64); } else { failSpecialPrim(61); } } } int compare31or32Bitsequal(int obj1, int obj2) { if (((obj1 & 1)) && ((obj2 & 1))) { return obj1 == obj2; } return (positive32BitValueOf(obj1)) == (positive32BitValueOf(obj2)); } int containOnlyOopsand(int array1, int array2) { int fieldOffset; int methodHeader; int sz; int fmt; int header; int type; /* begin lastPointerOf: */ fmt = (((unsigned) (longAt(array1))) >> 8) & 15; if (fmt < 4) { /* begin sizeBitsOfSafe: */ header = longAt(array1); /* begin rightType: */ if ((header & 252) == 0) { type = 0; goto l2; } else { if ((header & 126976) == 0) { type = 1; goto l2; } else { type = 3; goto l2; } } l2: /* end rightType: */; if (type == 0) { sz = (longAt(array1 - 8)) & 4294967292U; goto l3; } else { sz = header & 252; goto l3; } l3: /* end sizeBitsOfSafe: */; fieldOffset = sz - 4; goto l1; } if (fmt < 12) { fieldOffset = 0; goto l1; } methodHeader = longAt(array1 + 4); fieldOffset = (((((unsigned) methodHeader) >> 10) & 255) * 4) + 4; l1: /* end lastPointerOf: */; while (fieldOffset >= 4) { if (((longAt(array1 + fieldOffset)) & 1)) { return false; } if (((longAt(array2 + fieldOffset)) & 1)) { return false; } fieldOffset -= 4; } return true; } int copyBits(void) { int dWid; int sxLowBits; int dxLowBits; int pixPerM1; int t; int sp; clipRange(); if ((bbW <= 0) || (bbH <= 0)) { affectedL = affectedR = affectedT = affectedB = 0; return null; } destMaskAndPointerInit(); bitCount = 0; if (noSource) { copyLoopNoSource(); } else { /* begin checkSourceOverlap */ if ((sourceForm == destForm) && (dy >= sy)) { if (dy > sy) { vDir = -1; sy = (sy + bbH) - 1; dy = (dy + bbH) - 1; } else { if (dx > sx) { hDir = -1; sx = (sx + bbW) - 1; dx = (dx + bbW) - 1; if (nWords > 1) { t = mask1; mask1 = mask2; mask2 = t; } } } destIndex = (destBits + 4) + (((dy * destRaster) + (dx / pixPerWord)) * 4); destDelta = 4 * ((destRaster * vDir) - (nWords * hDir)); } if ((sourcePixSize != destPixSize) || (colorMap != nilObj)) { copyLoopPixMap(); } else { /* begin sourceSkewAndPointerInit */ pixPerM1 = pixPerWord - 1; sxLowBits = sx & pixPerM1; dxLowBits = dx & pixPerM1; if (hDir > 0) { dWid = ((bbW < (pixPerWord - dxLowBits)) ? bbW : (pixPerWord - dxLowBits)); preload = (sxLowBits + dWid) > pixPerM1; } else { dWid = ((bbW < (dxLowBits + 1)) ? bbW : (dxLowBits + 1)); preload = ((sxLowBits - dWid) + 1) < 0; } skew = (sxLowBits - dxLowBits) * destPixSize; if (preload) { if (skew < 0) { skew += 32; } else { skew -= 32; } } sourceIndex = (sourceBits + 4) + (((sy * sourceRaster) + (sx / (32 / sourcePixSize))) * 4); sourceDelta = 4 * ((sourceRaster * vDir) - (nWords * hDir)); if (preload) { sourceDelta -= 4 * hDir; } copyLoop(); } } if (combinationRule == 22) { affectedL = affectedR = affectedT = affectedB = 0; /* begin pop: */ stackPointer -= 1 * 4; /* begin pushInteger: */ /* begin push: */ longAtput(sp = stackPointer + 4, ((bitCount << 1) | 1)); stackPointer = sp; return null; } if (hDir > 0) { affectedL = dx; affectedR = dx + bbW; } else { affectedL = (dx - bbW) + 1; affectedR = dx + 1; } if (vDir > 0) { affectedT = dy; affectedB = dy + bbH; } else { affectedT = (dy - bbH) + 1; affectedB = dy + 1; } } int copyLoop(void) { int y; int prevWord; int skewWord; int mergeWord; int skewMask; int (*mergeFnwith)(int, int); int i; int hInc; int thisWord; int word; int halftoneWord; int notSkewMask; int unskew; mergeFnwith = ((int (*)(int, int)) (opTable[combinationRule + 1])); mergeFnwith; hInc = hDir * 4; if (skew == -32) { skew = unskew = skewMask = 0; } else { if (skew < 0) { unskew = skew + 32; skewMask = 4294967295U << (0 - skew); } else { if (skew == 0) { unskew = 0; skewMask = 4294967295U; } else { unskew = skew - 32; skewMask = ((unsigned) 4294967295U) >> skew; } } } notSkewMask = ~skewMask; if (noHalftone) { halftoneWord = 4294967295U; halftoneHeight = 0; } else { halftoneWord = longAt(halftoneBase); } y = dy; for (i = 1; i <= bbH; i += 1) { if (halftoneHeight > 1) { halftoneWord = longAt(halftoneBase + ((y % halftoneHeight) * 4)); y += vDir; } if (preload) { prevWord = longAt(sourceIndex); sourceIndex += hInc; } else { prevWord = 0; } thisWord = longAt(sourceIndex); skewWord = (((unskew < 0) ? ((unsigned) (prevWord & notSkewMask) >> -unskew) : ((unsigned) (prevWord & notSkewMask) << unskew))) | (((skew < 0) ? ((unsigned) (thisWord & skewMask) >> -skew) : ((unsigned) (thisWord & skewMask) << skew))); prevWord = thisWord; sourceIndex += hInc; mergeWord = mergeFnwith(skewWord & halftoneWord, longAt(destIndex)); longAtput(destIndex, (mask1 & mergeWord) | ((~mask1) & (longAt(destIndex)))); destIndex += hInc; if (combinationRule == 3) { for (word = 2; word <= (nWords - 1); word += 1) { thisWord = longAt(sourceIndex); skewWord = (((unskew < 0) ? ((unsigned) (prevWord & notSkewMask) >> -unskew) : ((unsigned) (prevWord & notSkewMask) << unskew))) | (((skew < 0) ? ((unsigned) (thisWord & skewMask) >> -skew) : ((unsigned) (thisWord & skewMask) << skew))); prevWord = thisWord; sourceIndex += hInc; longAtput(destIndex, skewWord & halftoneWord); destIndex += hInc; } } else { for (word = 2; word <= (nWords - 1); word += 1) { thisWord = longAt(sourceIndex); skewWord = (((unskew < 0) ? ((unsigned) (prevWord & notSkewMask) >> -unskew) : ((unsigned) (prevWord & notSkewMask) << unskew))) | (((skew < 0) ? ((unsigned) (thisWord & skewMask) >> -skew) : ((unsigned) (thisWord & skewMask) << skew))); prevWord = thisWord; sourceIndex += hInc; mergeWord = mergeFnwith(skewWord & halftoneWord, longAt(destIndex)); longAtput(destIndex, mergeWord); destIndex += hInc; } } if (nWords > 1) { thisWord = longAt(sourceIndex); skewWord = (((unskew < 0) ? ((unsigned) (prevWord & notSkewMask) >> -unskew) : ((unsigned) (prevWord & notSkewMask) << unskew))) | (((skew < 0) ? ((unsigned) (thisWord & skewMask) >> -skew) : ((unsigned) (thisWord & skewMask) << skew))); prevWord = thisWord; sourceIndex += hInc; mergeWord = mergeFnwith(skewWord & halftoneWord, longAt(destIndex)); longAtput(destIndex, (mask2 & mergeWord) | ((~mask2) & (longAt(destIndex)))); destIndex += hInc; } sourceIndex += sourceDelta; destIndex += destDelta; } } int copyLoopNoSource(void) { int mergeWord; int (*mergeFnwith)(int, int); int i; int word; int halftoneWord; mergeFnwith = ((int (*)(int, int)) (opTable[combinationRule + 1])); mergeFnwith; for (i = 1; i <= bbH; i += 1) { if (noHalftone) { halftoneWord = 4294967295U; } else { halftoneWord = longAt(halftoneBase + ((((dy + i) - 1) % halftoneHeight) * 4)); } mergeWord = mergeFnwith(halftoneWord, longAt(destIndex)); longAtput(destIndex, (mask1 & mergeWord) | ((~mask1) & (longAt(destIndex)))); destIndex += 4; if (combinationRule == 3) { for (word = 2; word <= (nWords - 1); word += 1) { longAtput(destIndex, halftoneWord); destIndex += 4; } } else { for (word = 2; word <= (nWords - 1); word += 1) { mergeWord = mergeFnwith(halftoneWord, longAt(destIndex)); longAtput(destIndex, mergeWord); destIndex += 4; } } if (nWords > 1) { mergeWord = mergeFnwith(halftoneWord, longAt(destIndex)); longAtput(destIndex, (mask2 & mergeWord) | ((~mask2) & (longAt(destIndex)))); destIndex += 4; } destIndex += destDelta; } } int copyLoopPixMap(void) { int skewWord; int mergeWord; int destMask; int srcPixPerWord; int scrStartBits; int nSourceIncs; int startBits; int sourcePixMask; int destPixMask; int nullMap; int (*mergeFnwith)(int, int); int endBits; int i; int halftoneWord; int word; int nPix; int nPix1; mergeFnwith = ((int (*)(int, int)) (opTable[combinationRule + 1])); mergeFnwith; srcPixPerWord = 32 / sourcePixSize; if (sourcePixSize == 32) { sourcePixMask = -1; } else { sourcePixMask = (1 << sourcePixSize) - 1; } if (destPixSize == 32) { destPixMask = -1; } else { destPixMask = (1 << destPixSize) - 1; } nullMap = colorMap == nilObj; sourceIndex = (sourceBits + 4) + (((sy * sourceRaster) + (sx / srcPixPerWord)) * 4); scrStartBits = srcPixPerWord - (sx & (srcPixPerWord - 1)); if (bbW < scrStartBits) { nSourceIncs = 0; } else { nSourceIncs = ((bbW - scrStartBits) / srcPixPerWord) + 1; } sourceDelta = (sourceRaster - nSourceIncs) * 4; startBits = pixPerWord - (dx & (pixPerWord - 1)); endBits = (((dx + bbW) - 1) & (pixPerWord - 1)) + 1; for (i = 1; i <= bbH; i += 1) { if (noHalftone) { halftoneWord = 4294967295U; } else { halftoneWord = longAt(halftoneBase + ((((dy + i) - 1) % halftoneHeight) * 4)); } srcBitIndex = (sx & (srcPixPerWord - 1)) * sourcePixSize; destMask = mask1; if (bbW < startBits) { /* begin pickSourcePixels:nullMap:srcMask:destMask: */ nPix = bbW; if (sourcePixSize >= 16) { skewWord = pickSourcePixelsRGBnullMapsrcMaskdestMask(nPix, nullMap, sourcePixMask, destPixMask); goto l1; } if (nullMap) { skewWord = pickSourcePixelsNullMapsrcMaskdestMask(nPix, sourcePixMask, destPixMask); goto l1; } skewWord = pickSourcePixelssrcMaskdestMask(nPix, sourcePixMask, destPixMask); l1: /* end pickSourcePixels:nullMap:srcMask:destMask: */; skewWord = ((((startBits - bbW) * destPixSize) < 0) ? ((unsigned) skewWord >> -((startBits - bbW) * destPixSize)) : ((unsigned) skewWord << ((startBits - bbW) * destPixSize))); } else { /* begin pickSourcePixels:nullMap:srcMask:destMask: */ if (sourcePixSize >= 16) { skewWord = pickSourcePixelsRGBnullMapsrcMaskdestMask(startBits, nullMap, sourcePixMask, destPixMask); goto l2; } if (nullMap) { skewWord = pickSourcePixelsNullMapsrcMaskdestMask(startBits, sourcePixMask, destPixMask); goto l2; } skewWord = pickSourcePixelssrcMaskdestMask(startBits, sourcePixMask, destPixMask); l2: /* end pickSourcePixels:nullMap:srcMask:destMask: */; } for (word = 1; word <= nWords; word += 1) { mergeWord = mergeFnwith(skewWord & halftoneWord, (longAt(destIndex)) & destMask); longAtput(destIndex, (destMask & mergeWord) | ((~destMask) & (longAt(destIndex)))); destIndex += 4; if (word >= (nWords - 1)) { if (!(word == nWords)) { destMask = mask2; /* begin pickSourcePixels:nullMap:srcMask:destMask: */ if (sourcePixSize >= 16) { skewWord = pickSourcePixelsRGBnullMapsrcMaskdestMask(endBits, nullMap, sourcePixMask, destPixMask); goto l3; } if (nullMap) { skewWord = pickSourcePixelsNullMapsrcMaskdestMask(endBits, sourcePixMask, destPixMask); goto l3; } skewWord = pickSourcePixelssrcMaskdestMask(endBits, sourcePixMask, destPixMask); l3: /* end pickSourcePixels:nullMap:srcMask:destMask: */; skewWord = ((((pixPerWord - endBits) * destPixSize) < 0) ? ((unsigned) skewWord >> -((pixPerWord - endBits) * destPixSize)) : ((unsigned) skewWord << ((pixPerWord - endBits) * destPixSize))); } } else { destMask = 4294967295U; /* begin pickSourcePixels:nullMap:srcMask:destMask: */ nPix1 = pixPerWord; if (sourcePixSize >= 16) { skewWord = pickSourcePixelsRGBnullMapsrcMaskdestMask(nPix1, nullMap, sourcePixMask, destPixMask); goto l4; } if (nullMap) { skewWord = pickSourcePixelsNullMapsrcMaskdestMask(nPix1, sourcePixMask, destPixMask); goto l4; } skewWord = pickSourcePixelssrcMaskdestMask(nPix1, sourcePixMask, destPixMask); l4: /* end pickSourcePixels:nullMap:srcMask:destMask: */; } } sourceIndex += sourceDelta; destIndex += destDelta; } } int cr(void) { printf("\n"); } int createActualMessage(void) { int argumentArray; int message; int oop; int valuePointer; int toIndex; int fromIndex; int lastFrom; int sp; argumentArray = instantiateClassindexableSize(longAt(((((char *) specialObjectsOop)) + 4) + (7 << 2)), argumentCount); /* begin pushRemappableOop: */ remapBuffer[remapBufferCount += 1] = argumentArray; message = instantiateClassindexableSize(longAt(((((char *) specialObjectsOop)) + 4) + (15 << 2)), 0); /* begin popRemappableOop */ oop = remapBuffer[remapBufferCount]; remapBufferCount -= 1; argumentArray = oop; if (argumentArray < youngStart) { beRootIfOld(argumentArray); } /* begin storePointer:ofObject:withValue: */ valuePointer = messageSelector; if (message < youngStart) { possibleRootStoreIntovalue(message, valuePointer); } longAtput(((((char *) message)) + 4) + (0 << 2), valuePointer); /* begin storePointer:ofObject:withValue: */ if (message < youngStart) { possibleRootStoreIntovalue(message, argumentArray); } longAtput(((((char *) message)) + 4) + (1 << 2), argumentArray); /* begin transfer:fromIndex:ofObject:toIndex:ofObject: */ fromIndex = activeContext + (((((unsigned) ((stackPointer - activeContext) - 4)) >> 2) - (argumentCount - 1)) * 4); toIndex = argumentArray + (0 * 4); lastFrom = fromIndex + (argumentCount * 4); while (fromIndex < lastFrom) { fromIndex += 4; toIndex += 4; longAtput(toIndex, longAt(fromIndex)); } /* begin pop: */ stackPointer -= argumentCount * 4; /* begin push: */ longAtput(sp = stackPointer + 4, message); stackPointer = sp; argumentCount = 1; } int deltaFromtonSteps(int x1, int x2, int n) { if (x2 > x1) { return (((x2 - x1) + 16384) / (n + 1)) + 1; } else { if (x2 == x1) { return 0; } return 0 - ((((x1 - x2) + 16384) / (n + 1)) + 1); } } int destMaskAndPointerInit(void) { int startBits; int endBits; int pixPerM1; pixPerM1 = pixPerWord - 1; startBits = pixPerWord - (dx & pixPerM1); mask1 = ((unsigned) 4294967295U) >> (32 - (startBits * destPixSize)); endBits = (((dx + bbW) - 1) & pixPerM1) + 1; mask2 = 4294967295U << (32 - (endBits * destPixSize)); if (bbW < startBits) { mask1 = mask1 & mask2; mask2 = 0; nWords = 1; } else { nWords = (((bbW - startBits) + pixPerM1) / pixPerWord) + 1; } hDir = vDir = 1; destIndex = (destBits + 4) + (((dy * destRaster) + (dx / pixPerWord)) * 4); destDelta = 4 * ((destRaster * vDir) - (nWords * hDir)); } int destinationWordwith(int sourceWord, int destinationWord) { return destinationWord; } int drawLoopXY(int xDelta, int yDelta) { int affL; int dx1; int dy1; int px; int py; int affR; int affT; int affB; int i; int P; int objectPointer; int integerValue; int objectPointer1; int integerValue1; if (xDelta > 0) { dx1 = 1; } else { if (xDelta == 0) { dx1 = 0; } else { dx1 = -1; } } if (yDelta > 0) { dy1 = 1; } else { if (yDelta == 0) { dy1 = 0; } else { dy1 = -1; } } px = abs(yDelta); py = abs(xDelta); affL = affT = 9999; affR = affB = -9999; if (py > px) { P = py / 2; for (i = 1; i <= py; i += 1) { destX += dx1; if ((P -= px) < 0) { destY += dy1; P += py; } if (i < py) { copyBits(); if ((affectedL < affectedR) && (affectedT < affectedB)) { affL = ((affL < affectedL) ? affL : affectedL); affR = ((affR < affectedR) ? affectedR : affR); affT = ((affT < affectedT) ? affT : affectedT); affB = ((affB < affectedB) ? affectedB : affB); if (((affR - affL) * (affB - affT)) > 4000) { affectedL = affL; affectedR = affR; affectedT = affT; affectedB = affB; showDisplayBits(); affL = affT = 9999; affR = affB = -9999; } } } } } else { P = px / 2; for (i = 1; i <= px; i += 1) { destY += dy1; if ((P -= py) < 0) { destX += dx1; P += px; } if (i < px) { copyBits(); if ((affectedL < affectedR) && (affectedT < affectedB)) { affL = ((affL < affectedL) ? affL : affectedL); affR = ((affR < affectedR) ? affectedR : affR); affT = ((affT < affectedT) ? affT : affectedT); affB = ((affB < affectedB) ? affectedB : affB); if (((affR - affL) * (affB - affT)) > 4000) { affectedL = affL; affectedR = affR; affectedT = affT; affectedB = affB; showDisplayBits(); affL = affT = 9999; affR = affB = -9999; } } } } } affectedL = affL; affectedR = affR; affectedT = affT; affectedB = affB; /* begin storeInteger:ofObject:withValue: */ objectPointer = bitBltOop; integerValue = destX; if ((integerValue ^ (integerValue << 1)) >= 0) { longAtput(((((char *) objectPointer)) + 4) + (4 << 2), ((integerValue << 1) | 1)); } else { primitiveFail(); } /* begin storeInteger:ofObject:withValue: */ objectPointer1 = bitBltOop; integerValue1 = destY; if ((integerValue1 ^ (integerValue1 << 1)) >= 0) { longAtput(((((char *) objectPointer1)) + 4) + (5 << 2), ((integerValue1 << 1) | 1)); } else { primitiveFail(); } } int exchangeHashBitswith(int oop1, int oop2) { int hdr1; int hdr2; hdr1 = longAt(oop1); hdr2 = longAt(oop2); longAtput(oop1, (hdr1 & 3758227455U) | (hdr2 & 536739840)); longAtput(oop2, (hdr2 & 3758227455U) | (hdr1 & 536739840)); } int executeNewMethod(void) { if ((primitiveIndex == 0) || (!(primitiveResponse()))) { activateNewMethod(); /* begin quickCheckForInterrupts */ if ((interruptCheckCounter -= 1) <= 0) { interruptCheckCounter = 1000; checkForInterrupts(); } } } int extraHeaderBytes(int oopOrChunk) { int type; int extra; type = (longAt(oopOrChunk)) & 3; if (type > 1) { extra = 0; } else { if (type == 1) { extra = 4; } else { extra = 8; } } return extra; } int failSpecialPrim(int primIndex) { int selectorIndex; int bytecode; int newReceiver; int rcvrClass; int ccIndex; int ok; int probe; int p; int hash; int primBits; bytecode = byteAt(instructionPointer); if ((bytecode < 176) || (bytecode > 207)) { return primitiveFail(); } selectorIndex = (bytecode - 176) * 2; messageSelector = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (23 << 2))))) + 4) + (selectorIndex << 2)); argumentCount = ((longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (23 << 2))))) + 4) + ((selectorIndex + 1) << 2))) >> 1); newReceiver = longAt(stackPointer - (argumentCount * 4)); /* begin fetchClassOf: */ if ((newReceiver & 1)) { rcvrClass = longAt(((((char *) specialObjectsOop)) + 4) + (5 << 2)); goto l1; } ccIndex = ((((unsigned) (longAt(newReceiver))) >> 12) & 31) - 1; if (ccIndex < 0) { rcvrClass = (longAt(newReceiver - 4)) & 4294967292U; goto l1; } else { rcvrClass = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + (ccIndex << 2)); goto l1; } l1: /* end fetchClassOf: */; /* begin findNewMethodInClass: */ /* begin lookupInMethodCacheSel:class: */ hash = ((unsigned) (messageSelector ^ rcvrClass)) >> 2; probe = (hash & 511) + 1; for (p = 1; p <= 3; p += 1) { if (((methodCache[probe]) == messageSelector) && ((methodCache[probe + 512]) == rcvrClass)) { newMethod = methodCache[probe + (512 * 2)]; primitiveIndex = methodCache[probe + (512 * 3)]; ok = true; goto l3; } probe = ((((unsigned) hash) >> p) & 511) + 1; } ok = false; l3: /* end lookupInMethodCacheSel:class: */; if (!(ok)) { lookupMethodInClass(rcvrClass); /* begin primitiveIndexOf: */ primBits = (((unsigned) (longAt(((((char *) newMethod)) + 4) + (0 << 2)))) >> 1) & 805306879; if (primBits > 511) { primitiveIndex = (primBits & 511) + (((unsigned) primBits) >> 19); goto l2; } else { primitiveIndex = primBits; goto l2; } l2: /* end primitiveIndexOf: */; addToMethodCacheSelclassmethodprimIndex(messageSelector, rcvrClass, newMethod, primitiveIndex); } if ((primitiveIndex > 37) && (primitiveIndex != primIndex)) { /* begin executeNewMethod */ if ((primitiveIndex == 0) || (!(primitiveResponse()))) { activateNewMethod(); /* begin quickCheckForInterrupts */ if ((interruptCheckCounter -= 1) <= 0) { interruptCheckCounter = 1000; checkForInterrupts(); } } } else { activateNewMethod(); } } int failed(void) { return !successFlag; } void * fetchArrayofObject(int fieldIndex, int objectPointer) { int arrayOop; arrayOop = longAt(((((char *) objectPointer)) + 4) + (fieldIndex << 2)); return arrayValueOf(arrayOop); } int fetchByteofObject(int byteIndex, int oop) { return byteAt(((((char *) oop)) + 4) + byteIndex); } int fetchClassOf(int oop) { int ccIndex; if ((oop & 1)) { return longAt(((((char *) specialObjectsOop)) + 4) + (5 << 2)); } ccIndex = ((((unsigned) (longAt(oop))) >> 12) & 31) - 1; if (ccIndex < 0) { return (longAt(oop - 4)) & 4294967292U; } else { return longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + (ccIndex << 2)); } } int fetchContextRegisters(int activeCntx) { int tmp; tmp = longAt(((((char *) activeCntx)) + 4) + (3 << 2)); if ((tmp & 1)) { tmp = longAt(((((char *) activeCntx)) + 4) + (5 << 2)); if (tmp < youngStart) { beRootIfOld(tmp); } } else { tmp = activeCntx; } theHomeContext = tmp; receiver = longAt(((((char *) tmp)) + 4) + (5 << 2)); method = longAt(((((char *) tmp)) + 4) + (3 << 2)); tmp = ((longAt(((((char *) activeCntx)) + 4) + (1 << 2))) >> 1); instructionPointer = ((method + tmp) + 4) - 2; tmp = ((longAt(((((char *) activeCntx)) + 4) + (2 << 2))) >> 1); stackPointer = (activeCntx + 4) + (((6 + tmp) - 1) * 4); } double fetchFloatofObject(int fieldIndex, int objectPointer) { int floatOop; floatOop = longAt(((((char *) objectPointer)) + 4) + (fieldIndex << 2)); return floatValueOf(floatOop); } int fetchIntegerofObject(int fieldIndex, int objectPointer) { int intOop; intOop = longAt(((((char *) objectPointer)) + 4) + (fieldIndex << 2)); if ((intOop & 1)) { return (intOop >> 1); } else { primitiveFail(); return 0; } } int fetchIntegerOrTruncFloatofObject(int fieldIndex, int objectPointer) { double trunc; double frac; double floatVal; int intOrFloat; int ccIndex; int cl; intOrFloat = longAt(((((char *) objectPointer)) + 4) + (fieldIndex << 2)); if ((intOrFloat & 1)) { return (intOrFloat >> 1); } /* begin assertClassOf:is: */ if ((intOrFloat & 1)) { successFlag = false; goto l1; } ccIndex = (((unsigned) (longAt(intOrFloat))) >> 12) & 31; if (ccIndex == 0) { cl = (longAt(intOrFloat - 4)) & 4294967292U; } else { cl = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + ((ccIndex - 1) << 2)); } /* begin success: */ successFlag = (cl == (longAt(((((char *) specialObjectsOop)) + 4) + (9 << 2)))) && successFlag; l1: /* end assertClassOf:is: */; if (successFlag) { fetchFloatAtinto(intOrFloat + 4, floatVal); frac = modf(floatVal, &trunc); success((-2147483648.0 <= trunc) && (trunc <= 2147483647.0)); } if (successFlag) { return ((int) trunc); } else { return 0; } } int fetchPointerofObject(int fieldIndex, int oop) { return longAt(((((char *) oop)) + 4) + (fieldIndex << 2)); } int fetchWordofObject(int fieldIndex, int oop) { return longAt(((((char *) oop)) + 4) + (fieldIndex << 2)); } int fetchWordLengthOf(int objectPointer) { int sz; int header; /* begin sizeBitsOf: */ header = longAt(objectPointer); if ((header & 3) == 0) { sz = (longAt(objectPointer - 8)) & 4294967292U; goto l1; } else { sz = header & 252; goto l1; } l1: /* end sizeBitsOf: */; return ((unsigned) (sz - 4)) >> 2; } int fileRecordSize(void) { return sizeof(SQFile); } SQFile * fileValueOf(int objectPointer) { int fileIndex; int successValue; /* begin success: */ successValue = (((((unsigned) (longAt(objectPointer))) >> 8) & 15) >= 8) && ((lengthOf(objectPointer)) == (fileRecordSize())); successFlag = successValue && successFlag; if (successFlag) { fileIndex = objectPointer + 4; return (SQFile *) fileIndex; } else { return null; } } int findClassOfMethodforReceiver(int meth, int rcvr) { int methodArray; int done; int i; int classDict; int currClass; int classDictSize; int sz; int header; int ccIndex; int ccIndex1; /* begin fetchClassOf: */ if ((rcvr & 1)) { currClass = longAt(((((char *) specialObjectsOop)) + 4) + (5 << 2)); goto l2; } ccIndex = ((((unsigned) (longAt(rcvr))) >> 12) & 31) - 1; if (ccIndex < 0) { currClass = (longAt(rcvr - 4)) & 4294967292U; goto l2; } else { currClass = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + (ccIndex << 2)); goto l2; } l2: /* end fetchClassOf: */; done = false; while (!(done)) { classDict = longAt(((((char *) currClass)) + 4) + (1 << 2)); /* begin fetchWordLengthOf: */ /* begin sizeBitsOf: */ header = longAt(classDict); if ((header & 3) == 0) { sz = (longAt(classDict - 8)) & 4294967292U; goto l1; } else { sz = header & 252; goto l1; } l1: /* end sizeBitsOf: */; classDictSize = ((unsigned) (sz - 4)) >> 2; methodArray = longAt(((((char *) classDict)) + 4) + (1 << 2)); i = 0; while (i < (classDictSize - 2)) { if (meth == (longAt(((((char *) methodArray)) + 4) + (i << 2)))) { return currClass; } i += 1; } currClass = longAt(((((char *) currClass)) + 4) + (0 << 2)); done = currClass == nilObj; } /* begin fetchClassOf: */ if ((rcvr & 1)) { return longAt(((((char *) specialObjectsOop)) + 4) + (5 << 2)); } ccIndex1 = ((((unsigned) (longAt(rcvr))) >> 12) & 31) - 1; if (ccIndex1 < 0) { return (longAt(rcvr - 4)) & 4294967292U; } else { return longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + (ccIndex1 << 2)); } return null; } int findNewMethodInClass(int class) { int ok; int probe; int p; int hash; int primBits; /* begin lookupInMethodCacheSel:class: */ hash = ((unsigned) (messageSelector ^ class)) >> 2; probe = (hash & 511) + 1; for (p = 1; p <= 3; p += 1) { if (((methodCache[probe]) == messageSelector) && ((methodCache[probe + 512]) == class)) { newMethod = methodCache[probe + (512 * 2)]; primitiveIndex = methodCache[probe + (512 * 3)]; ok = true; goto l1; } probe = ((((unsigned) hash) >> p) & 511) + 1; } ok = false; l1: /* end lookupInMethodCacheSel:class: */; if (!(ok)) { lookupMethodInClass(class); /* begin primitiveIndexOf: */ primBits = (((unsigned) (longAt(((((char *) newMethod)) + 4) + (0 << 2)))) >> 1) & 805306879; if (primBits > 511) { primitiveIndex = (primBits & 511) + (((unsigned) primBits) >> 19); goto l2; } else { primitiveIndex = primBits; goto l2; } l2: /* end primitiveIndexOf: */; addToMethodCacheSelclassmethodprimIndex(messageSelector, class, newMethod, primitiveIndex); } } int findSelectorOfMethodforReceiver(int meth, int rcvr) { int methodArray; int done; int i; int classDict; int currClass; int classDictSize; int sz; int header; int ccIndex; /* begin fetchClassOf: */ if ((rcvr & 1)) { currClass = longAt(((((char *) specialObjectsOop)) + 4) + (5 << 2)); goto l2; } ccIndex = ((((unsigned) (longAt(rcvr))) >> 12) & 31) - 1; if (ccIndex < 0) { currClass = (longAt(rcvr - 4)) & 4294967292U; goto l2; } else { currClass = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + (ccIndex << 2)); goto l2; } l2: /* end fetchClassOf: */; done = false; while (!(done)) { classDict = longAt(((((char *) currClass)) + 4) + (1 << 2)); /* begin fetchWordLengthOf: */ /* begin sizeBitsOf: */ header = longAt(classDict); if ((header & 3) == 0) { sz = (longAt(classDict - 8)) & 4294967292U; goto l1; } else { sz = header & 252; goto l1; } l1: /* end sizeBitsOf: */; classDictSize = ((unsigned) (sz - 4)) >> 2; methodArray = longAt(((((char *) classDict)) + 4) + (1 << 2)); i = 0; while (i <= (classDictSize - 2)) { if (meth == (longAt(((((char *) methodArray)) + 4) + (i << 2)))) { return longAt(((((char *) classDict)) + 4) + ((i + 2) << 2)); } i += 1; } currClass = longAt(((((char *) currClass)) + 4) + (0 << 2)); done = currClass == nilObj; } return longAt(((((char *) specialObjectsOop)) + 4) + (20 << 2)); } int firstAccessibleObject(void) { int obj; int chunk; int extra; int type; int extra1; int sz; int header; int extra2; int type1; int extra11; /* begin oopFromChunk: */ chunk = startOfMemory(); /* begin extraHeaderBytes: */ type = (longAt(chunk)) & 3; if (type > 1) { extra1 = 0; } else { if (type == 1) { extra1 = 4; } else { extra1 = 8; } } extra = extra1; obj = chunk + extra; while (obj < endOfMemory) { if (!(((longAt(obj)) & 3) == 2)) { return obj; } /* begin objectAfter: */ if (checkAssertions) { if (obj >= endOfMemory) { error("no objects after the end of memory"); } } if (((longAt(obj)) & 3) == 2) { sz = (longAt(obj)) & 536870908; } else { /* begin sizeBitsOf: */ header = longAt(obj); if ((header & 3) == 0) { sz = (longAt(obj - 8)) & 4294967292U; goto l1; } else { sz = header & 252; goto l1; } l1: /* end sizeBitsOf: */; } /* begin oopFromChunk: */ /* begin extraHeaderBytes: */ type1 = (longAt(obj + sz)) & 3; if (type1 > 1) { extra11 = 0; } else { if (type1 == 1) { extra11 = 4; } else { extra11 = 8; } } extra2 = extra11; obj = (obj + sz) + extra2; } error("heap is empty"); } int firstObject(void) { int chunk; int extra; int type; int extra1; /* begin oopFromChunk: */ chunk = startOfMemory(); /* begin extraHeaderBytes: */ type = (longAt(chunk)) & 3; if (type > 1) { extra1 = 0; } else { if (type == 1) { extra1 = 4; } else { extra1 = 8; } } extra = extra1; return chunk + extra; } int fixedFieldsOfformatlength(int oop, int fmt, int wordLength) { int classFormat; int class; int ccIndex; if ((fmt > 3) || (fmt == 2)) { return 0; } if (fmt < 2) { return wordLength; } /* begin fetchClassOf: */ if ((oop & 1)) { class = longAt(((((char *) specialObjectsOop)) + 4) + (5 << 2)); goto l1; } ccIndex = ((((unsigned) (longAt(oop))) >> 12) & 31) - 1; if (ccIndex < 0) { class = (longAt(oop - 4)) & 4294967292U; goto l1; } else { class = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + (ccIndex << 2)); goto l1; } l1: /* end fetchClassOf: */; classFormat = (longAt(((((char *) class)) + 4) + (2 << 2))) - 1; return (((((unsigned) classFormat) >> 11) & 192) + ((((unsigned) classFormat) >> 2) & 63)) - 1; } double floatValueOf(int oop) { double result; int ccIndex; int cl; /* begin assertClassOf:is: */ if ((oop & 1)) { successFlag = false; goto l1; } ccIndex = (((unsigned) (longAt(oop))) >> 12) & 31; if (ccIndex == 0) { cl = (longAt(oop - 4)) & 4294967292U; } else { cl = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + ((ccIndex - 1) << 2)); } /* begin success: */ successFlag = (cl == (longAt(((((char *) specialObjectsOop)) + 4) + (9 << 2)))) && successFlag; l1: /* end assertClassOf:is: */; if (successFlag) { fetchFloatAtinto(oop + 4, result); } else { result = 0.0; } return result; } int flushMethodCache(void) { int i; for (i = 1; i <= 2048; i += 1) { methodCache[i] = 0; } mcProbe = 0; } int formatOf(int oop) { return (((unsigned) (longAt(oop))) >> 8) & 15; } int formatOfClass(int classPointer) { return (longAt(((((char *) classPointer)) + 4) + (2 << 2))) - 1; } int fullCompaction(void) { compStart = lowestFreeAfter(startOfMemory()); if (compStart == freeBlock) { return initializeMemoryFirstFree(freeBlock); } while (compStart < freeBlock) { compStart = incCompBody(); } } int fullDisplayUpdate(void) { int displayObj; int dispBits; int dispBitsIndex; int h; int w; int d; displayObj = longAt(((((char *) specialObjectsOop)) + 4) + (14 << 2)); if ((((((unsigned) (longAt(displayObj))) >> 8) & 15) <= 4) && ((lengthOf(displayObj)) >= 4)) { dispBits = longAt(((((char *) displayObj)) + 4) + (0 << 2)); w = fetchIntegerofObject(1, displayObj); h = fetchIntegerofObject(2, displayObj); d = fetchIntegerofObject(3, displayObj); dispBitsIndex = dispBits + 4; ioShowDisplay(dispBitsIndex, w, h, d, 0, w, 0, h); } } int fullGC(void) { int startTime; int oop; int i; /* begin preGCAction: */ startTime = ioMicroMSecs(); /* begin clearRootsTable */ for (i = 1; i <= rootTableCount; i += 1) { oop = rootTable[i]; longAtput(oop, (longAt(oop)) & 3221225471U); rootTable[i] = 0; } rootTableCount = 0; youngStart = startOfMemory(); markPhase(); sweepPhase(); /* begin fullCompaction */ compStart = lowestFreeAfter(startOfMemory()); if (compStart == freeBlock) { initializeMemoryFirstFree(freeBlock); goto l1; } while (compStart < freeBlock) { compStart = incCompBody(); } l1: /* end fullCompaction */; allocationCount = 0; statFullGCs += 1; statFullGCMSecs += (ioMicroMSecs()) - startTime; youngStart = freeBlock; /* begin postGCAction */ if (activeContext < youngStart) { beRootIfOld(activeContext); } if (theHomeContext < youngStart) { beRootIfOld(theHomeContext); } } int fwdBlockGet(void) { fwdTableNext += 8; if (fwdTableNext <= fwdTableLast) { return fwdTableNext; } else { return null; } } int fwdBlockValidate(int addr) { if (!((addr > endOfMemory) && ((addr <= fwdTableNext) && ((addr & 3) == 0)))) { error("invalid fwd table entry"); } } int fwdTableInit(void) { /* begin setSizeOfFree:to: */ longAtput(freeBlock, (4 & 536870908) | 2); endOfMemory = freeBlock + 4; /* begin setSizeOfFree:to: */ longAtput(endOfMemory, (4 & 536870908) | 2); fwdTableNext = endOfMemory + 4; fwdTableLast = memoryLimit - 8; if (checkAssertions && ((fwdTableLast & 2147483648U) != 0)) { error("fwd table must be in low half of the 32-bit address space"); } return (fwdTableLast - fwdTableNext) / 8; } int getCurrentBytecode(void) { return byteAt(instructionPointer); } int getLongFromFileswap(sqImageFile f, int swapFlag) { int w; sqImageFileRead(&w, sizeof(char), 4, f); if (swapFlag) { return ((((((unsigned) w >> 24)) & 255) + ((((unsigned) w >> 8)) & 65280)) + ((((unsigned) w << 8)) & 16711680)) + ((((unsigned) w << 24)) & 4278190080U); } else { return w; } } int hashBitsOf(int oop) { return (((unsigned) (longAt(oop))) >> 17) & 4095; } int headerOf(int methodPointer) { return longAt(((((char *) methodPointer)) + 4) + (0 << 2)); } int headerType(int oop) { return (longAt(oop)) & 3; } int ignoreSourceOrHalftone(int formPointer) { if (formPointer == nilObj) { return true; } if (combinationRule == 0) { return true; } if (combinationRule == 5) { return true; } if (combinationRule == 10) { return true; } if (combinationRule == 15) { return true; } return false; } int imageFormatVersion(void) { return 6502; } int incCompBody(void) { int bytesFreed; int fwdBlock; int oop; int bytesFreed1; int newOop; int extra; int type; int extra1; int originalHeader; int originalHeaderType; int extra2; int type1; int extra11; int sz; int header; int newOop1; int newFreeChunk; int next; int bytesToMove; int w; int fwdBlock1; int oop1; int firstWord; int lastWord; int header1; int extra3; int type2; int extra12; int extra21; int type11; int extra111; int sz2; int fwdBlock2; int realHeader; int header2; int extra4; int type3; int extra13; int sz1; int header11; int extra22; int type12; int extra112; int sz3; int fwdBlock3; int realHeader1; int header3; int extra5; int type4; int extra14; int sz11; int header12; int extra23; int type13; int extra113; fwdTableInit(); /* begin incCompMakeFwd */ bytesFreed1 = 0; /* begin oopFromChunk: */ /* begin extraHeaderBytes: */ type1 = (longAt(compStart)) & 3; if (type1 > 1) { extra11 = 0; } else { if (type1 == 1) { extra11 = 4; } else { extra11 = 8; } } extra2 = extra11; oop = compStart + extra2; while (oop < endOfMemory) { if (((longAt(oop)) & 3) == 2) { bytesFreed1 += (longAt(oop)) & 536870908; } else { /* begin fwdBlockGet */ fwdTableNext += 8; if (fwdTableNext <= fwdTableLast) { fwdBlock = fwdTableNext; goto l1; } else { fwdBlock = null; goto l1; } l1: /* end fwdBlockGet */; if (fwdBlock == null) { /* begin chunkFromOop: */ /* begin extraHeaderBytes: */ type = (longAt(oop)) & 3; if (type > 1) { extra1 = 0; } else { if (type == 1) { extra1 = 4; } else { extra1 = 8; } } extra = extra1; compEnd = oop - extra; bytesFreed = bytesFreed1; goto l2; } newOop = oop - bytesFreed1; /* begin initForwardBlock:mapping:to: */ originalHeader = longAt(oop); if (checkAssertions) { if (fwdBlock == null) { error("ran out of forwarding blocks in become"); } if ((originalHeader & 2147483648U) != 0) { error("object already has a forwarding table entry"); } } originalHeaderType = originalHeader & 3; longAtput(fwdBlock, newOop); longAtput(fwdBlock + 4, originalHeader); longAtput(oop, fwdBlock | (2147483648U | originalHeaderType)); } /* begin objectAfterWhileForwarding: */ header2 = longAt(oop); if ((header2 & 2147483648U) == 0) { /* begin objectAfter: */ if (checkAssertions) { if (oop >= endOfMemory) { error("no objects after the end of memory"); } } if (((longAt(oop)) & 3) == 2) { sz1 = (longAt(oop)) & 536870908; } else { /* begin sizeBitsOf: */ header11 = longAt(oop); if ((header11 & 3) == 0) { sz1 = (longAt(oop - 8)) & 4294967292U; goto l4; } else { sz1 = header11 & 252; goto l4; } l4: /* end sizeBitsOf: */; } /* begin oopFromChunk: */ /* begin extraHeaderBytes: */ type12 = (longAt(oop + sz1)) & 3; if (type12 > 1) { extra112 = 0; } else { if (type12 == 1) { extra112 = 4; } else { extra112 = 8; } } extra22 = extra112; oop = (oop + sz1) + extra22; goto l5; } fwdBlock2 = header2 & 2147483644; if (checkAssertions) { /* begin fwdBlockValidate: */ if (!((fwdBlock2 > endOfMemory) && ((fwdBlock2 <= fwdTableNext) && ((fwdBlock2 & 3) == 0)))) { error("invalid fwd table entry"); } } realHeader = longAt(fwdBlock2 + 4); if ((realHeader & 3) == 0) { sz2 = (longAt(oop - 8)) & 268435452; } else { sz2 = realHeader & 252; } /* begin oopFromChunk: */ /* begin extraHeaderBytes: */ type3 = (longAt(oop + sz2)) & 3; if (type3 > 1) { extra13 = 0; } else { if (type3 == 1) { extra13 = 4; } else { extra13 = 8; } } extra4 = extra13; oop = (oop + sz2) + extra4; l5: /* end objectAfterWhileForwarding: */; } compEnd = endOfMemory; bytesFreed = bytesFreed1; l2: /* end incCompMakeFwd */; mapPointersInObjectsFromto(youngStart, endOfMemory); /* begin incCompMove: */ newOop1 = null; /* begin oopFromChunk: */ /* begin extraHeaderBytes: */ type11 = (longAt(compStart)) & 3; if (type11 > 1) { extra111 = 0; } else { if (type11 == 1) { extra111 = 4; } else { extra111 = 8; } } extra21 = extra111; oop1 = compStart + extra21; while (oop1 < compEnd) { /* begin objectAfterWhileForwarding: */ header3 = longAt(oop1); if ((header3 & 2147483648U) == 0) { /* begin objectAfter: */ if (checkAssertions) { if (oop1 >= endOfMemory) { error("no objects after the end of memory"); } } if (((longAt(oop1)) & 3) == 2) { sz11 = (longAt(oop1)) & 536870908; } else { /* begin sizeBitsOf: */ header12 = longAt(oop1); if ((header12 & 3) == 0) { sz11 = (longAt(oop1 - 8)) & 4294967292U; goto l6; } else { sz11 = header12 & 252; goto l6; } l6: /* end sizeBitsOf: */; } /* begin oopFromChunk: */ /* begin extraHeaderBytes: */ type13 = (longAt(oop1 + sz11)) & 3; if (type13 > 1) { extra113 = 0; } else { if (type13 == 1) { extra113 = 4; } else { extra113 = 8; } } extra23 = extra113; next = (oop1 + sz11) + extra23; goto l7; } fwdBlock3 = header3 & 2147483644; if (checkAssertions) { /* begin fwdBlockValidate: */ if (!((fwdBlock3 > endOfMemory) && ((fwdBlock3 <= fwdTableNext) && ((fwdBlock3 & 3) == 0)))) { error("invalid fwd table entry"); } } realHeader1 = longAt(fwdBlock3 + 4); if ((realHeader1 & 3) == 0) { sz3 = (longAt(oop1 - 8)) & 268435452; } else { sz3 = realHeader1 & 252; } /* begin oopFromChunk: */ /* begin extraHeaderBytes: */ type4 = (longAt(oop1 + sz3)) & 3; if (type4 > 1) { extra14 = 0; } else { if (type4 == 1) { extra14 = 4; } else { extra14 = 8; } } extra5 = extra14; next = (oop1 + sz3) + extra5; l7: /* end objectAfterWhileForwarding: */; if (!(((longAt(oop1)) & 3) == 2)) { fwdBlock1 = (longAt(oop1)) & 2147483644; if (checkAssertions) { /* begin fwdBlockValidate: */ if (!((fwdBlock1 > endOfMemory) && ((fwdBlock1 <= fwdTableNext) && ((fwdBlock1 & 3) == 0)))) { error("invalid fwd table entry"); } } newOop1 = longAt(fwdBlock1); header = longAt(fwdBlock1 + 4); longAtput(oop1, header); bytesToMove = oop1 - newOop1; /* begin sizeBitsOf: */ header1 = longAt(oop1); if ((header1 & 3) == 0) { sz = (longAt(oop1 - 8)) & 4294967292U; goto l3; } else { sz = header1 & 252; goto l3; } l3: /* end sizeBitsOf: */; firstWord = oop1 - (extraHeaderBytes(oop1)); lastWord = (oop1 + sz) - 4; for (w = firstWord; w <= lastWord; w += 4) { longAtput(w - bytesToMove, longAt(w)); } } oop1 = next; } if (newOop1 == null) { /* begin oopFromChunk: */ /* begin extraHeaderBytes: */ type2 = (longAt(compStart)) & 3; if (type2 > 1) { extra12 = 0; } else { if (type2 == 1) { extra12 = 4; } else { extra12 = 8; } } extra3 = extra12; oop1 = compStart + extra3; if ((((longAt(oop1)) & 3) == 2) && ((objectAfter(oop1)) == (oopFromChunk(compEnd)))) { newFreeChunk = oop1; } else { newFreeChunk = freeBlock; } } else { newFreeChunk = newOop1 + (sizeBitsOf(newOop1)); /* begin setSizeOfFree:to: */ longAtput(newFreeChunk, (bytesFreed & 536870908) | 2); } if (checkAssertions) { if (!((objectAfter(newFreeChunk)) == (oopFromChunk(compEnd)))) { error("problem creating free chunk after compaction"); } } if ((objectAfter(newFreeChunk)) == endOfMemory) { initializeMemoryFirstFree(newFreeChunk); } else { initializeMemoryFirstFree(freeBlock); } return newFreeChunk; } int incCompMakeFwd(void) { int fwdBlock; int oop; int bytesFreed; int newOop; int extra; int type; int extra1; int originalHeader; int originalHeaderType; int extra2; int type1; int extra11; int sz; int fwdBlock1; int realHeader; int header; int extra3; int type2; int extra12; int sz1; int header1; int extra21; int type11; int extra111; bytesFreed = 0; /* begin oopFromChunk: */ /* begin extraHeaderBytes: */ type1 = (longAt(compStart)) & 3; if (type1 > 1) { extra11 = 0; } else { if (type1 == 1) { extra11 = 4; } else { extra11 = 8; } } extra2 = extra11; oop = compStart + extra2; while (oop < endOfMemory) { if (((longAt(oop)) & 3) == 2) { bytesFreed += (longAt(oop)) & 536870908; } else { /* begin fwdBlockGet */ fwdTableNext += 8; if (fwdTableNext <= fwdTableLast) { fwdBlock = fwdTableNext; goto l1; } else { fwdBlock = null; goto l1; } l1: /* end fwdBlockGet */; if (fwdBlock == null) { /* begin chunkFromOop: */ /* begin extraHeaderBytes: */ type = (longAt(oop)) & 3; if (type > 1) { extra1 = 0; } else { if (type == 1) { extra1 = 4; } else { extra1 = 8; } } extra = extra1; compEnd = oop - extra; return bytesFreed; } newOop = oop - bytesFreed; /* begin initForwardBlock:mapping:to: */ originalHeader = longAt(oop); if (checkAssertions) { if (fwdBlock == null) { error("ran out of forwarding blocks in become"); } if ((originalHeader & 2147483648U) != 0) { error("object already has a forwarding table entry"); } } originalHeaderType = originalHeader & 3; longAtput(fwdBlock, newOop); longAtput(fwdBlock + 4, originalHeader); longAtput(oop, fwdBlock | (2147483648U | originalHeaderType)); } /* begin objectAfterWhileForwarding: */ header = longAt(oop); if ((header & 2147483648U) == 0) { /* begin objectAfter: */ if (checkAssertions) { if (oop >= endOfMemory) { error("no objects after the end of memory"); } } if (((longAt(oop)) & 3) == 2) { sz1 = (longAt(oop)) & 536870908; } else { /* begin sizeBitsOf: */ header1 = longAt(oop); if ((header1 & 3) == 0) { sz1 = (longAt(oop - 8)) & 4294967292U; goto l2; } else { sz1 = header1 & 252; goto l2; } l2: /* end sizeBitsOf: */; } /* begin oopFromChunk: */ /* begin extraHeaderBytes: */ type11 = (longAt(oop + sz1)) & 3; if (type11 > 1) { extra111 = 0; } else { if (type11 == 1) { extra111 = 4; } else { extra111 = 8; } } extra21 = extra111; oop = (oop + sz1) + extra21; goto l3; } fwdBlock1 = header & 2147483644; if (checkAssertions) { /* begin fwdBlockValidate: */ if (!((fwdBlock1 > endOfMemory) && ((fwdBlock1 <= fwdTableNext) && ((fwdBlock1 & 3) == 0)))) { error("invalid fwd table entry"); } } realHeader = longAt(fwdBlock1 + 4); if ((realHeader & 3) == 0) { sz = (longAt(oop - 8)) & 268435452; } else { sz = realHeader & 252; } /* begin oopFromChunk: */ /* begin extraHeaderBytes: */ type2 = (longAt(oop + sz)) & 3; if (type2 > 1) { extra12 = 0; } else { if (type2 == 1) { extra12 = 4; } else { extra12 = 8; } } extra3 = extra12; oop = (oop + sz) + extra3; l3: /* end objectAfterWhileForwarding: */; } compEnd = endOfMemory; return bytesFreed; } int incCompMove(int bytesFreed) { int sz; int header; int newOop; int newFreeChunk; int next; int bytesToMove; int w; int fwdBlock; int oop; int firstWord; int lastWord; int header1; int extra; int type; int extra1; int extra2; int type1; int extra11; int sz2; int fwdBlock1; int realHeader; int header2; int extra3; int type2; int extra12; int sz1; int header11; int extra21; int type11; int extra111; newOop = null; /* begin oopFromChunk: */ /* begin extraHeaderBytes: */ type1 = (longAt(compStart)) & 3; if (type1 > 1) { extra11 = 0; } else { if (type1 == 1) { extra11 = 4; } else { extra11 = 8; } } extra2 = extra11; oop = compStart + extra2; while (oop < compEnd) { /* begin objectAfterWhileForwarding: */ header2 = longAt(oop); if ((header2 & 2147483648U) == 0) { /* begin objectAfter: */ if (checkAssertions) { if (oop >= endOfMemory) { error("no objects after the end of memory"); } } if (((longAt(oop)) & 3) == 2) { sz1 = (longAt(oop)) & 536870908; } else { /* begin sizeBitsOf: */ header11 = longAt(oop); if ((header11 & 3) == 0) { sz1 = (longAt(oop - 8)) & 4294967292U; goto l2; } else { sz1 = header11 & 252; goto l2; } l2: /* end sizeBitsOf: */; } /* begin oopFromChunk: */ /* begin extraHeaderBytes: */ type11 = (longAt(oop + sz1)) & 3; if (type11 > 1) { extra111 = 0; } else { if (type11 == 1) { extra111 = 4; } else { extra111 = 8; } } extra21 = extra111; next = (oop + sz1) + extra21; goto l3; } fwdBlock1 = header2 & 2147483644; if (checkAssertions) { /* begin fwdBlockValidate: */ if (!((fwdBlock1 > endOfMemory) && ((fwdBlock1 <= fwdTableNext) && ((fwdBlock1 & 3) == 0)))) { error("invalid fwd table entry"); } } realHeader = longAt(fwdBlock1 + 4); if ((realHeader & 3) == 0) { sz2 = (longAt(oop - 8)) & 268435452; } else { sz2 = realHeader & 252; } /* begin oopFromChunk: */ /* begin extraHeaderBytes: */ type2 = (longAt(oop + sz2)) & 3; if (type2 > 1) { extra12 = 0; } else { if (type2 == 1) { extra12 = 4; } else { extra12 = 8; } } extra3 = extra12; next = (oop + sz2) + extra3; l3: /* end objectAfterWhileForwarding: */; if (!(((longAt(oop)) & 3) == 2)) { fwdBlock = (longAt(oop)) & 2147483644; if (checkAssertions) { /* begin fwdBlockValidate: */ if (!((fwdBlock > endOfMemory) && ((fwdBlock <= fwdTableNext) && ((fwdBlock & 3) == 0)))) { error("invalid fwd table entry"); } } newOop = longAt(fwdBlock); header = longAt(fwdBlock + 4); longAtput(oop, header); bytesToMove = oop - newOop; /* begin sizeBitsOf: */ header1 = longAt(oop); if ((header1 & 3) == 0) { sz = (longAt(oop - 8)) & 4294967292U; goto l1; } else { sz = header1 & 252; goto l1; } l1: /* end sizeBitsOf: */; firstWord = oop - (extraHeaderBytes(oop)); lastWord = (oop + sz) - 4; for (w = firstWord; w <= lastWord; w += 4) { longAtput(w - bytesToMove, longAt(w)); } } oop = next; } if (newOop == null) { /* begin oopFromChunk: */ /* begin extraHeaderBytes: */ type = (longAt(compStart)) & 3; if (type > 1) { extra1 = 0; } else { if (type == 1) { extra1 = 4; } else { extra1 = 8; } } extra = extra1; oop = compStart + extra; if ((((longAt(oop)) & 3) == 2) && ((objectAfter(oop)) == (oopFromChunk(compEnd)))) { newFreeChunk = oop; } else { newFreeChunk = freeBlock; } } else { newFreeChunk = newOop + (sizeBitsOf(newOop)); /* begin setSizeOfFree:to: */ longAtput(newFreeChunk, (bytesFreed & 536870908) | 2); } if (checkAssertions) { if (!((objectAfter(newFreeChunk)) == (oopFromChunk(compEnd)))) { error("problem creating free chunk after compaction"); } } if ((objectAfter(newFreeChunk)) == endOfMemory) { initializeMemoryFirstFree(newFreeChunk); } else { initializeMemoryFirstFree(freeBlock); } return newFreeChunk; } int incrementalCompaction(void) { if (compStart == freeBlock) { initializeMemoryFirstFree(freeBlock); } else { incCompBody(); } } int incrementalGC(void) { int startTime; int survivorCount; int oop; int i; if (rootTableCount >= 1000) { statRootTableOverflows += 1; return fullGC(); } /* begin preGCAction: */ startTime = ioMicroMSecs(); markPhase(); survivorCount = sweepPhase(); /* begin incrementalCompaction */ if (compStart == freeBlock) { initializeMemoryFirstFree(freeBlock); } else { incCompBody(); } allocationCount = 0; statIncrGCs += 1; statIncrGCMSecs += (ioMicroMSecs()) - startTime; if (survivorCount > tenuringThreshold) { statTenures += 1; /* begin clearRootsTable */ for (i = 1; i <= rootTableCount; i += 1) { oop = rootTable[i]; longAtput(oop, (longAt(oop)) & 3221225471U); rootTable[i] = 0; } rootTableCount = 0; youngStart = freeBlock; } /* begin postGCAction */ if (activeContext < youngStart) { beRootIfOld(activeContext); } if (theHomeContext < youngStart) { beRootIfOld(theHomeContext); } } int initBBOpTable(void) { opTable[0+1] = (int)clearWordwith; opTable[1+1] = (int)bitAndwith; opTable[2+1] = (int)bitAndInvertwith; opTable[3+1] = (int)sourceWordwith; opTable[4+1] = (int)bitInvertAndwith; opTable[5+1] = (int)destinationWordwith; opTable[6+1] = (int)bitXorwith; opTable[7+1] = (int)bitOrwith; opTable[8+1] = (int)bitInvertAndInvertwith; opTable[9+1] = (int)bitInvertXorwith; opTable[10+1] = (int)bitInvertDestinationwith; opTable[11+1] = (int)bitOrInvertwith; opTable[12+1] = (int)bitInvertSourcewith; opTable[13+1] = (int)bitInvertOrwith; opTable[14+1] = (int)bitInvertOrInvertwith; opTable[15+1] = (int)destinationWordwith; opTable[16+1] = (int)destinationWordwith; opTable[17+1] = (int)destinationWordwith; opTable[18+1] = (int)addWordwith; opTable[19+1] = (int)subWordwith; opTable[20+1] = (int)rgbAddwith; opTable[21+1] = (int)rgbSubwith; opTable[22+1] = (int)rgbDiffwith; opTable[23+1] = (int)tallyIntoMapwith; opTable[24+1] = (int)alphaBlendwith; opTable[25+1] = (int)pixPaintwith; opTable[26+1] = (int)pixMaskwith; opTable[27+1] = (int)rgbMaxwith; opTable[28+1] = (int)rgbMinwith; opTable[29+1] = (int)rgbMinInvertwith; opTable[30+1] = (int)destinationWordwith; opTable[31+1] = (int)destinationWordwith; } int initForwardBlockmappingto(int fwdBlock, int oop, int newOop) { int originalHeader; int originalHeaderType; originalHeader = longAt(oop); if (checkAssertions) { if (fwdBlock == null) { error("ran out of forwarding blocks in become"); } if ((originalHeader & 2147483648U) != 0) { error("object already has a forwarding table entry"); } } originalHeaderType = originalHeader & 3; longAtput(fwdBlock, newOop); longAtput(fwdBlock + 4, originalHeader); longAtput(oop, fwdBlock | (2147483648U | originalHeaderType)); } int initialInstanceOf(int classPointer) { int thisClass; int thisObj; int ccIndex; int obj; int chunk; int extra; int type; int extra1; int sz; int header; int extra2; int type1; int extra11; /* begin firstAccessibleObject */ /* begin oopFromChunk: */ chunk = startOfMemory(); /* begin extraHeaderBytes: */ type = (longAt(chunk)) & 3; if (type > 1) { extra1 = 0; } else { if (type == 1) { extra1 = 4; } else { extra1 = 8; } } extra = extra1; obj = chunk + extra; while (obj < endOfMemory) { if (!(((longAt(obj)) & 3) == 2)) { thisObj = obj; goto l3; } /* begin objectAfter: */ if (checkAssertions) { if (obj >= endOfMemory) { error("no objects after the end of memory"); } } if (((longAt(obj)) & 3) == 2) { sz = (longAt(obj)) & 536870908; } else { /* begin sizeBitsOf: */ header = longAt(obj); if ((header & 3) == 0) { sz = (longAt(obj - 8)) & 4294967292U; goto l2; } else { sz = header & 252; goto l2; } l2: /* end sizeBitsOf: */; } /* begin oopFromChunk: */ /* begin extraHeaderBytes: */ type1 = (longAt(obj + sz)) & 3; if (type1 > 1) { extra11 = 0; } else { if (type1 == 1) { extra11 = 4; } else { extra11 = 8; } } extra2 = extra11; obj = (obj + sz) + extra2; } error("heap is empty"); l3: /* end firstAccessibleObject */; while (!(thisObj == null)) { /* begin fetchClassOf: */ if ((thisObj & 1)) { thisClass = longAt(((((char *) specialObjectsOop)) + 4) + (5 << 2)); goto l1; } ccIndex = ((((unsigned) (longAt(thisObj))) >> 12) & 31) - 1; if (ccIndex < 0) { thisClass = (longAt(thisObj - 4)) & 4294967292U; goto l1; } else { thisClass = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + (ccIndex << 2)); goto l1; } l1: /* end fetchClassOf: */; if (thisClass == classPointer) { return thisObj; } thisObj = accessibleObjectAfter(thisObj); } return nilObj; } int initializeInterpreter(int bytesToShift) { int i; int sched; int proc; int activeCntx; int tmp; initializeObjectMemory(bytesToShift); initBBOpTable(); activeContext = nilObj; theHomeContext = nilObj; method = nilObj; receiver = nilObj; messageSelector = nilObj; newMethod = nilObj; /* begin flushMethodCache */ for (i = 1; i <= 2048; i += 1) { methodCache[i] = 0; } mcProbe = 0; /* begin loadInitialContext */ sched = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (3 << 2))))) + 4) + (1 << 2)); proc = longAt(((((char *) sched)) + 4) + (1 << 2)); activeContext = longAt(((((char *) proc)) + 4) + (1 << 2)); if (activeContext < youngStart) { beRootIfOld(activeContext); } /* begin fetchContextRegisters: */ activeCntx = activeContext; tmp = longAt(((((char *) activeCntx)) + 4) + (3 << 2)); if ((tmp & 1)) { tmp = longAt(((((char *) activeCntx)) + 4) + (5 << 2)); if (tmp < youngStart) { beRootIfOld(tmp); } } else { tmp = activeCntx; } theHomeContext = tmp; receiver = longAt(((((char *) tmp)) + 4) + (5 << 2)); method = longAt(((((char *) tmp)) + 4) + (3 << 2)); tmp = ((longAt(((((char *) activeCntx)) + 4) + (1 << 2))) >> 1); instructionPointer = ((method + tmp) + 4) - 2; tmp = ((longAt(((((char *) activeCntx)) + 4) + (2 << 2))) >> 1); stackPointer = (activeCntx + 4) + (((6 + tmp) - 1) * 4); reclaimableContextCount = 0; interruptCheckCounter = 0; nextPollTick = 0; nextWakeupTick = 0; lastTick = 0; interruptKeycode = 2094; interruptPending = false; semaphoresToSignalCount = 0; deferDisplayUpdates = false; } int initializeMemoryFirstFree(int firstFree) { int fwdBlockBytes; fwdBlockBytes = 16000; if (!((memoryLimit - fwdBlockBytes) >= (firstFree + 4))) { fwdBlockBytes = memoryLimit - (firstFree + 4); } endOfMemory = memoryLimit - fwdBlockBytes; freeBlock = firstFree; /* begin setSizeOfFree:to: */ longAtput(freeBlock, ((endOfMemory - firstFree) & 536870908) | 2); /* begin setSizeOfFree:to: */ longAtput(endOfMemory, (4 & 536870908) | 2); if (checkAssertions) { if (!((freeBlock < endOfMemory) && (endOfMemory < memoryLimit))) { error("error in free space computation"); } if (!((oopFromChunk(endOfMemory)) == endOfMemory)) { error("header format must have changed"); } if (!((objectAfter(freeBlock)) == endOfMemory)) { error("free block not properly initialized"); } } } int initializeObjectMemory(int bytesToShift) { int oop; int last; int newClassOop; int fieldAddr; int fieldOop; int classHeader; int chunk; int extra; int type; int extra1; int sz; int header; int extra2; int type1; int extra11; checkAssertions = false; youngStart = endOfMemory; initializeMemoryFirstFree(endOfMemory); /* begin adjustAllOopsBy: */ if (bytesToShift == 0) { goto l2; } /* begin oopFromChunk: */ chunk = startOfMemory(); /* begin extraHeaderBytes: */ type = (longAt(chunk)) & 3; if (type > 1) { extra1 = 0; } else { if (type == 1) { extra1 = 4; } else { extra1 = 8; } } extra = extra1; oop = chunk + extra; while (oop < endOfMemory) { if (!(((longAt(oop)) & 3) == 2)) { /* begin adjustFieldsAndClassOf:by: */ fieldAddr = oop + (lastPointerOf(oop)); while (fieldAddr > oop) { fieldOop = longAt(fieldAddr); if (!((fieldOop & 1))) { longAtput(fieldAddr, fieldOop + bytesToShift); } fieldAddr -= 4; } if (((longAt(oop)) & 3) != 3) { classHeader = longAt(oop - 4); newClassOop = (classHeader & 4294967292U) + bytesToShift; longAtput(oop - 4, newClassOop | (classHeader & 3)); } } last = oop; /* begin objectAfter: */ if (checkAssertions) { if (oop >= endOfMemory) { error("no objects after the end of memory"); } } if (((longAt(oop)) & 3) == 2) { sz = (longAt(oop)) & 536870908; } else { /* begin sizeBitsOf: */ header = longAt(oop); if ((header & 3) == 0) { sz = (longAt(oop - 8)) & 4294967292U; goto l1; } else { sz = header & 252; goto l1; } l1: /* end sizeBitsOf: */; } /* begin oopFromChunk: */ /* begin extraHeaderBytes: */ type1 = (longAt(oop + sz)) & 3; if (type1 > 1) { extra11 = 0; } else { if (type1 == 1) { extra11 = 4; } else { extra11 = 8; } } extra2 = extra11; oop = (oop + sz) + extra2; } l2: /* end adjustAllOopsBy: */; specialObjectsOop += bytesToShift; nilObj = longAt(((((char *) specialObjectsOop)) + 4) + (0 << 2)); falseObj = longAt(((((char *) specialObjectsOop)) + 4) + (1 << 2)); trueObj = longAt(((((char *) specialObjectsOop)) + 4) + (2 << 2)); rootTableCount = 0; child = 0; field = 0; parentField = 0; freeLargeContexts = 1; freeSmallContexts = 1; allocationCount = 0; lowSpaceThreshold = 0; signalLowSpace = false; compStart = 0; compEnd = 0; fwdTableNext = 0; fwdTableLast = 0; remapBufferCount = 0; allocationsBetweenGCs = 4000; tenuringThreshold = 2000; statFullGCs = 0; statFullGCMSecs = 0; statIncrGCs = 0; statIncrGCMSecs = 0; statTenures = 0; statRootTableOverflows = 0; displayBits = 0; } int instanceAfter(int objectPointer) { int thisClass; int classPointer; int thisObj; int ccIndex; int ccIndex1; /* begin fetchClassOf: */ if ((objectPointer & 1)) { classPointer = longAt(((((char *) specialObjectsOop)) + 4) + (5 << 2)); goto l2; } ccIndex1 = ((((unsigned) (longAt(objectPointer))) >> 12) & 31) - 1; if (ccIndex1 < 0) { classPointer = (longAt(objectPointer - 4)) & 4294967292U; goto l2; } else { classPointer = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + (ccIndex1 << 2)); goto l2; } l2: /* end fetchClassOf: */; thisObj = accessibleObjectAfter(objectPointer); while (!(thisObj == null)) { /* begin fetchClassOf: */ if ((thisObj & 1)) { thisClass = longAt(((((char *) specialObjectsOop)) + 4) + (5 << 2)); goto l1; } ccIndex = ((((unsigned) (longAt(thisObj))) >> 12) & 31) - 1; if (ccIndex < 0) { thisClass = (longAt(thisObj - 4)) & 4294967292U; goto l1; } else { thisClass = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + (ccIndex << 2)); goto l1; } l1: /* end fetchClassOf: */; if (thisClass == classPointer) { return thisObj; } thisObj = accessibleObjectAfter(thisObj); } return nilObj; } int instantiateClassindexableSize(int classPointer, int size) { int sizeHiBits; int newObj; int binc; int hash; int header1; int header2; int header3; int hdrSize; int byteSize; int format; int inc; int cClass; int fillWord; int i; int newObj1; int remappedClassOop; int end; int oop; int newFreeSize; int enoughSpace; int newChunk; int minFree; if (checkAssertions) { if (size < 0) { error("cannot have a negative indexable field count"); } } /* begin newObjectHash */ lastHash = (13849 + (27181 * lastHash)) & 65535; hash = lastHash; header1 = (longAt(((((char *) classPointer)) + 4) + (2 << 2))) - 1; sizeHiBits = ((unsigned) (header1 & 393216)) >> 9; header1 = (header1 & 131071) | ((hash << 17) & 536739840); header2 = classPointer; header3 = 0; cClass = header1 & 126976; byteSize = (header1 & 252) + sizeHiBits; format = (((unsigned) header1) >> 8) & 15; if (format < 8) { inc = size * 4; } else { inc = (size + 3) & 536870908; binc = 3 - ((size + 3) & 3); header1 = header1 | (binc << 8); } if ((byteSize + inc) > 255) { header3 = byteSize + inc; header1 -= byteSize & 255; } else { header1 += inc; } byteSize += inc; if (header3 > 0) { hdrSize = 3; } else { if (cClass == 0) { hdrSize = 2; } else { hdrSize = 1; } } if (format < 4) { fillWord = nilObj; } else { fillWord = 0; } /* begin allocate:headerSize:h1:h2:h3:fill: */ if (hdrSize > 1) { /* begin pushRemappableOop: */ remapBuffer[remapBufferCount += 1] = header2; } /* begin allocateChunk: */ if (allocationCount >= allocationsBetweenGCs) { incrementalGC(); } /* begin sufficientSpaceToAllocate: */ minFree = (lowSpaceThreshold + (byteSize + ((hdrSize - 1) * 4))) + 4; if (((longAt(freeBlock)) & 536870908) >= minFree) { enoughSpace = true; goto l1; } else { enoughSpace = sufficientSpaceAfterGC(minFree); goto l1; } l1: /* end sufficientSpaceToAllocate: */; if (!(enoughSpace)) { signalLowSpace = true; lowSpaceThreshold = 0; interruptCheckCounter = 0; } if (((longAt(freeBlock)) & 536870908) < ((byteSize + ((hdrSize - 1) * 4)) + 4)) { error("out of memory"); } newFreeSize = ((longAt(freeBlock)) & 536870908) - (byteSize + ((hdrSize - 1) * 4)); newChunk = freeBlock; freeBlock += byteSize + ((hdrSize - 1) * 4); /* begin setSizeOfFree:to: */ longAtput(freeBlock, (newFreeSize & 536870908) | 2); allocationCount += 1; newObj1 = newChunk; if (hdrSize > 1) { /* begin popRemappableOop */ oop = remapBuffer[remapBufferCount]; remapBufferCount -= 1; remappedClassOop = oop; } if (hdrSize == 3) { longAtput(newObj1, header3 | 0); longAtput(newObj1 + 4, remappedClassOop | 0); longAtput(newObj1 + 8, header1 | 0); newObj1 += 8; } if (hdrSize == 2) { longAtput(newObj1, remappedClassOop | 1); longAtput(newObj1 + 4, header1 | 1); newObj1 += 4; } if (hdrSize == 1) { longAtput(newObj1, header1 | 3); } end = newObj1 + byteSize; i = newObj1 + 4; while (i < end) { longAtput(i, fillWord); i += 4; } if (checkAssertions) { okayOop(newObj1); oopHasOkayClass(newObj1); if (!((objectAfter(newObj1)) == freeBlock)) { error("allocate bug: did not set header of new oop correctly"); } if (!((objectAfter(freeBlock)) == endOfMemory)) { error("allocate bug: did not set header of freeBlock correctly"); } } newObj = newObj1; return newObj; } int instantiateSmallClasssizeInBytesfill(int classPointer, int sizeInBytes, int fillValue) { int header1; int header2; int hdrSize; int hash; int i; int newObj; int remappedClassOop; int end; int oop; int newFreeSize; int enoughSpace; int newChunk; int minFree; /* begin newObjectHash */ lastHash = (13849 + (27181 * lastHash)) & 65535; hash = lastHash; header1 = ((hash << 17) & 536739840) | ((longAt(((((char *) classPointer)) + 4) + (2 << 2))) - 1); header1 += sizeInBytes - (header1 & 252); header2 = classPointer; if ((header1 & 126976) == 0) { hdrSize = 2; } else { hdrSize = 1; } /* begin allocate:headerSize:h1:h2:h3:fill: */ if (hdrSize > 1) { /* begin pushRemappableOop: */ remapBuffer[remapBufferCount += 1] = header2; } /* begin allocateChunk: */ if (allocationCount >= allocationsBetweenGCs) { incrementalGC(); } /* begin sufficientSpaceToAllocate: */ minFree = (lowSpaceThreshold + (sizeInBytes + ((hdrSize - 1) * 4))) + 4; if (((longAt(freeBlock)) & 536870908) >= minFree) { enoughSpace = true; goto l1; } else { enoughSpace = sufficientSpaceAfterGC(minFree); goto l1; } l1: /* end sufficientSpaceToAllocate: */; if (!(enoughSpace)) { signalLowSpace = true; lowSpaceThreshold = 0; interruptCheckCounter = 0; } if (((longAt(freeBlock)) & 536870908) < ((sizeInBytes + ((hdrSize - 1) * 4)) + 4)) { error("out of memory"); } newFreeSize = ((longAt(freeBlock)) & 536870908) - (sizeInBytes + ((hdrSize - 1) * 4)); newChunk = freeBlock; freeBlock += sizeInBytes + ((hdrSize - 1) * 4); /* begin setSizeOfFree:to: */ longAtput(freeBlock, (newFreeSize & 536870908) | 2); allocationCount += 1; newObj = newChunk; if (hdrSize > 1) { /* begin popRemappableOop */ oop = remapBuffer[remapBufferCount]; remapBufferCount -= 1; remappedClassOop = oop; } if (hdrSize == 3) { longAtput(newObj, 0 | 0); longAtput(newObj + 4, remappedClassOop | 0); longAtput(newObj + 8, header1 | 0); newObj += 8; } if (hdrSize == 2) { longAtput(newObj, remappedClassOop | 1); longAtput(newObj + 4, header1 | 1); newObj += 4; } if (hdrSize == 1) { longAtput(newObj, header1 | 3); } end = newObj + sizeInBytes; i = newObj + 4; while (i < end) { longAtput(i, fillValue); i += 4; } if (checkAssertions) { okayOop(newObj); oopHasOkayClass(newObj); if (!((objectAfter(newObj)) == freeBlock)) { error("allocate bug: did not set header of new oop correctly"); } if (!((objectAfter(freeBlock)) == endOfMemory)) { error("allocate bug: did not set header of freeBlock correctly"); } } return newObj; } int intToNetAddress(int addr) { int netAddressOop; netAddressOop = instantiateSmallClasssizeInBytesfill(longAt(((((char *) specialObjectsOop)) + 4) + (26 << 2)), 8, 0); byteAtput(((((char *) netAddressOop)) + 4) + 0, (((unsigned) addr) >> 24) & 255); byteAtput(((((char *) netAddressOop)) + 4) + 1, (((unsigned) addr) >> 16) & 255); byteAtput(((((char *) netAddressOop)) + 4) + 2, (((unsigned) addr) >> 8) & 255); byteAtput(((((char *) netAddressOop)) + 4) + 3, addr & 255); return netAddressOop; } int integerObjectOf(int value) { if (value < 0) { return ((2147483648U + value) << 1) + 1; } else { return (value << 1) + 1; } } int integerValueOf(int objectPointer) { if ((objectPointer & 2147483648U) != 0) { return ((((unsigned) (objectPointer & 2147483647U)) >> 1) - 1073741823) - 1; } else { return ((unsigned) objectPointer) >> 1; } } int interpret(void) { int localTP; int localCP; char * localSP; char * localIP; int currentBytecode; int t1; int t2; int t3; int t4; int t5; int t6; int t7; int t8; int t9; int t10; int t11; int t12; int t13; int t14; int t15; int t16; int t17; int t18; int t19; int t20; int t21; /* begin internalizeIPandSP */ localIP = ((char *) instructionPointer); localSP = ((char *) stackPointer); while (true) { currentBytecode = byteAt(++localIP); switch (currentBytecode) { case 0: /* pushReceiverVariableBytecode */ /* begin pushReceiverVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) receiver)) + 4) + ((0 & 15) << 2))); break; case 1: /* pushReceiverVariableBytecode */ /* begin pushReceiverVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) receiver)) + 4) + ((1 & 15) << 2))); break; case 2: /* pushReceiverVariableBytecode */ /* begin pushReceiverVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) receiver)) + 4) + ((2 & 15) << 2))); break; case 3: /* pushReceiverVariableBytecode */ /* begin pushReceiverVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) receiver)) + 4) + ((3 & 15) << 2))); break; case 4: /* pushReceiverVariableBytecode */ /* begin pushReceiverVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) receiver)) + 4) + ((4 & 15) << 2))); break; case 5: /* pushReceiverVariableBytecode */ /* begin pushReceiverVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) receiver)) + 4) + ((5 & 15) << 2))); break; case 6: /* pushReceiverVariableBytecode */ /* begin pushReceiverVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) receiver)) + 4) + ((6 & 15) << 2))); break; case 7: /* pushReceiverVariableBytecode */ /* begin pushReceiverVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) receiver)) + 4) + ((7 & 15) << 2))); break; case 8: /* pushReceiverVariableBytecode */ /* begin pushReceiverVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) receiver)) + 4) + ((8 & 15) << 2))); break; case 9: /* pushReceiverVariableBytecode */ /* begin pushReceiverVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) receiver)) + 4) + ((9 & 15) << 2))); break; case 10: /* pushReceiverVariableBytecode */ /* begin pushReceiverVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) receiver)) + 4) + ((10 & 15) << 2))); break; case 11: /* pushReceiverVariableBytecode */ /* begin pushReceiverVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) receiver)) + 4) + ((11 & 15) << 2))); break; case 12: /* pushReceiverVariableBytecode */ /* begin pushReceiverVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) receiver)) + 4) + ((12 & 15) << 2))); break; case 13: /* pushReceiverVariableBytecode */ /* begin pushReceiverVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) receiver)) + 4) + ((13 & 15) << 2))); break; case 14: /* pushReceiverVariableBytecode */ /* begin pushReceiverVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) receiver)) + 4) + ((14 & 15) << 2))); break; case 15: /* pushReceiverVariableBytecode */ /* begin pushReceiverVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) receiver)) + 4) + ((15 & 15) << 2))); break; case 16: /* pushTemporaryVariableBytecode */ /* begin pushTemporaryVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) theHomeContext)) + 4) + (((16 & 15) + 6) << 2))); break; case 17: /* pushTemporaryVariableBytecode */ /* begin pushTemporaryVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) theHomeContext)) + 4) + (((17 & 15) + 6) << 2))); break; case 18: /* pushTemporaryVariableBytecode */ /* begin pushTemporaryVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) theHomeContext)) + 4) + (((18 & 15) + 6) << 2))); break; case 19: /* pushTemporaryVariableBytecode */ /* begin pushTemporaryVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) theHomeContext)) + 4) + (((19 & 15) + 6) << 2))); break; case 20: /* pushTemporaryVariableBytecode */ /* begin pushTemporaryVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) theHomeContext)) + 4) + (((20 & 15) + 6) << 2))); break; case 21: /* pushTemporaryVariableBytecode */ /* begin pushTemporaryVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) theHomeContext)) + 4) + (((21 & 15) + 6) << 2))); break; case 22: /* pushTemporaryVariableBytecode */ /* begin pushTemporaryVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) theHomeContext)) + 4) + (((22 & 15) + 6) << 2))); break; case 23: /* pushTemporaryVariableBytecode */ /* begin pushTemporaryVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) theHomeContext)) + 4) + (((23 & 15) + 6) << 2))); break; case 24: /* pushTemporaryVariableBytecode */ /* begin pushTemporaryVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) theHomeContext)) + 4) + (((24 & 15) + 6) << 2))); break; case 25: /* pushTemporaryVariableBytecode */ /* begin pushTemporaryVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) theHomeContext)) + 4) + (((25 & 15) + 6) << 2))); break; case 26: /* pushTemporaryVariableBytecode */ /* begin pushTemporaryVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) theHomeContext)) + 4) + (((26 & 15) + 6) << 2))); break; case 27: /* pushTemporaryVariableBytecode */ /* begin pushTemporaryVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) theHomeContext)) + 4) + (((27 & 15) + 6) << 2))); break; case 28: /* pushTemporaryVariableBytecode */ /* begin pushTemporaryVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) theHomeContext)) + 4) + (((28 & 15) + 6) << 2))); break; case 29: /* pushTemporaryVariableBytecode */ /* begin pushTemporaryVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) theHomeContext)) + 4) + (((29 & 15) + 6) << 2))); break; case 30: /* pushTemporaryVariableBytecode */ /* begin pushTemporaryVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) theHomeContext)) + 4) + (((30 & 15) + 6) << 2))); break; case 31: /* pushTemporaryVariableBytecode */ /* begin pushTemporaryVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) theHomeContext)) + 4) + (((31 & 15) + 6) << 2))); break; case 32: /* pushLiteralConstantBytecode */ /* begin pushLiteralConstant: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) method)) + 4) + (((32 & 31) + 1) << 2))); break; case 33: /* pushLiteralConstantBytecode */ /* begin pushLiteralConstant: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) method)) + 4) + (((33 & 31) + 1) << 2))); break; case 34: /* pushLiteralConstantBytecode */ /* begin pushLiteralConstant: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) method)) + 4) + (((34 & 31) + 1) << 2))); break; case 35: /* pushLiteralConstantBytecode */ /* begin pushLiteralConstant: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) method)) + 4) + (((35 & 31) + 1) << 2))); break; case 36: /* pushLiteralConstantBytecode */ /* begin pushLiteralConstant: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) method)) + 4) + (((36 & 31) + 1) << 2))); break; case 37: /* pushLiteralConstantBytecode */ /* begin pushLiteralConstant: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) method)) + 4) + (((37 & 31) + 1) << 2))); break; case 38: /* pushLiteralConstantBytecode */ /* begin pushLiteralConstant: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) method)) + 4) + (((38 & 31) + 1) << 2))); break; case 39: /* pushLiteralConstantBytecode */ /* begin pushLiteralConstant: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) method)) + 4) + (((39 & 31) + 1) << 2))); break; case 40: /* pushLiteralConstantBytecode */ /* begin pushLiteralConstant: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) method)) + 4) + (((40 & 31) + 1) << 2))); break; case 41: /* pushLiteralConstantBytecode */ /* begin pushLiteralConstant: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) method)) + 4) + (((41 & 31) + 1) << 2))); break; case 42: /* pushLiteralConstantBytecode */ /* begin pushLiteralConstant: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) method)) + 4) + (((42 & 31) + 1) << 2))); break; case 43: /* pushLiteralConstantBytecode */ /* begin pushLiteralConstant: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) method)) + 4) + (((43 & 31) + 1) << 2))); break; case 44: /* pushLiteralConstantBytecode */ /* begin pushLiteralConstant: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) method)) + 4) + (((44 & 31) + 1) << 2))); break; case 45: /* pushLiteralConstantBytecode */ /* begin pushLiteralConstant: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) method)) + 4) + (((45 & 31) + 1) << 2))); break; case 46: /* pushLiteralConstantBytecode */ /* begin pushLiteralConstant: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) method)) + 4) + (((46 & 31) + 1) << 2))); break; case 47: /* pushLiteralConstantBytecode */ /* begin pushLiteralConstant: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) method)) + 4) + (((47 & 31) + 1) << 2))); break; case 48: /* pushLiteralConstantBytecode */ /* begin pushLiteralConstant: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) method)) + 4) + (((48 & 31) + 1) << 2))); break; case 49: /* pushLiteralConstantBytecode */ /* begin pushLiteralConstant: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) method)) + 4) + (((49 & 31) + 1) << 2))); break; case 50: /* pushLiteralConstantBytecode */ /* begin pushLiteralConstant: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) method)) + 4) + (((50 & 31) + 1) << 2))); break; case 51: /* pushLiteralConstantBytecode */ /* begin pushLiteralConstant: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) method)) + 4) + (((51 & 31) + 1) << 2))); break; case 52: /* pushLiteralConstantBytecode */ /* begin pushLiteralConstant: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) method)) + 4) + (((52 & 31) + 1) << 2))); break; case 53: /* pushLiteralConstantBytecode */ /* begin pushLiteralConstant: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) method)) + 4) + (((53 & 31) + 1) << 2))); break; case 54: /* pushLiteralConstantBytecode */ /* begin pushLiteralConstant: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) method)) + 4) + (((54 & 31) + 1) << 2))); break; case 55: /* pushLiteralConstantBytecode */ /* begin pushLiteralConstant: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) method)) + 4) + (((55 & 31) + 1) << 2))); break; case 56: /* pushLiteralConstantBytecode */ /* begin pushLiteralConstant: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) method)) + 4) + (((56 & 31) + 1) << 2))); break; case 57: /* pushLiteralConstantBytecode */ /* begin pushLiteralConstant: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) method)) + 4) + (((57 & 31) + 1) << 2))); break; case 58: /* pushLiteralConstantBytecode */ /* begin pushLiteralConstant: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) method)) + 4) + (((58 & 31) + 1) << 2))); break; case 59: /* pushLiteralConstantBytecode */ /* begin pushLiteralConstant: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) method)) + 4) + (((59 & 31) + 1) << 2))); break; case 60: /* pushLiteralConstantBytecode */ /* begin pushLiteralConstant: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) method)) + 4) + (((60 & 31) + 1) << 2))); break; case 61: /* pushLiteralConstantBytecode */ /* begin pushLiteralConstant: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) method)) + 4) + (((61 & 31) + 1) << 2))); break; case 62: /* pushLiteralConstantBytecode */ /* begin pushLiteralConstant: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) method)) + 4) + (((62 & 31) + 1) << 2))); break; case 63: /* pushLiteralConstantBytecode */ /* begin pushLiteralConstant: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) method)) + 4) + (((63 & 31) + 1) << 2))); break; case 64: /* pushLiteralVariableBytecode */ /* begin pushLiteralVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) (longAt(((((char *) method)) + 4) + (((64 & 31) + 1) << 2))))) + 4) + (1 << 2))); break; case 65: /* pushLiteralVariableBytecode */ /* begin pushLiteralVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) (longAt(((((char *) method)) + 4) + (((65 & 31) + 1) << 2))))) + 4) + (1 << 2))); break; case 66: /* pushLiteralVariableBytecode */ /* begin pushLiteralVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) (longAt(((((char *) method)) + 4) + (((66 & 31) + 1) << 2))))) + 4) + (1 << 2))); break; case 67: /* pushLiteralVariableBytecode */ /* begin pushLiteralVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) (longAt(((((char *) method)) + 4) + (((67 & 31) + 1) << 2))))) + 4) + (1 << 2))); break; case 68: /* pushLiteralVariableBytecode */ /* begin pushLiteralVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) (longAt(((((char *) method)) + 4) + (((68 & 31) + 1) << 2))))) + 4) + (1 << 2))); break; case 69: /* pushLiteralVariableBytecode */ /* begin pushLiteralVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) (longAt(((((char *) method)) + 4) + (((69 & 31) + 1) << 2))))) + 4) + (1 << 2))); break; case 70: /* pushLiteralVariableBytecode */ /* begin pushLiteralVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) (longAt(((((char *) method)) + 4) + (((70 & 31) + 1) << 2))))) + 4) + (1 << 2))); break; case 71: /* pushLiteralVariableBytecode */ /* begin pushLiteralVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) (longAt(((((char *) method)) + 4) + (((71 & 31) + 1) << 2))))) + 4) + (1 << 2))); break; case 72: /* pushLiteralVariableBytecode */ /* begin pushLiteralVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) (longAt(((((char *) method)) + 4) + (((72 & 31) + 1) << 2))))) + 4) + (1 << 2))); break; case 73: /* pushLiteralVariableBytecode */ /* begin pushLiteralVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) (longAt(((((char *) method)) + 4) + (((73 & 31) + 1) << 2))))) + 4) + (1 << 2))); break; case 74: /* pushLiteralVariableBytecode */ /* begin pushLiteralVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) (longAt(((((char *) method)) + 4) + (((74 & 31) + 1) << 2))))) + 4) + (1 << 2))); break; case 75: /* pushLiteralVariableBytecode */ /* begin pushLiteralVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) (longAt(((((char *) method)) + 4) + (((75 & 31) + 1) << 2))))) + 4) + (1 << 2))); break; case 76: /* pushLiteralVariableBytecode */ /* begin pushLiteralVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) (longAt(((((char *) method)) + 4) + (((76 & 31) + 1) << 2))))) + 4) + (1 << 2))); break; case 77: /* pushLiteralVariableBytecode */ /* begin pushLiteralVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) (longAt(((((char *) method)) + 4) + (((77 & 31) + 1) << 2))))) + 4) + (1 << 2))); break; case 78: /* pushLiteralVariableBytecode */ /* begin pushLiteralVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) (longAt(((((char *) method)) + 4) + (((78 & 31) + 1) << 2))))) + 4) + (1 << 2))); break; case 79: /* pushLiteralVariableBytecode */ /* begin pushLiteralVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) (longAt(((((char *) method)) + 4) + (((79 & 31) + 1) << 2))))) + 4) + (1 << 2))); break; case 80: /* pushLiteralVariableBytecode */ /* begin pushLiteralVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) (longAt(((((char *) method)) + 4) + (((80 & 31) + 1) << 2))))) + 4) + (1 << 2))); break; case 81: /* pushLiteralVariableBytecode */ /* begin pushLiteralVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) (longAt(((((char *) method)) + 4) + (((81 & 31) + 1) << 2))))) + 4) + (1 << 2))); break; case 82: /* pushLiteralVariableBytecode */ /* begin pushLiteralVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) (longAt(((((char *) method)) + 4) + (((82 & 31) + 1) << 2))))) + 4) + (1 << 2))); break; case 83: /* pushLiteralVariableBytecode */ /* begin pushLiteralVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) (longAt(((((char *) method)) + 4) + (((83 & 31) + 1) << 2))))) + 4) + (1 << 2))); break; case 84: /* pushLiteralVariableBytecode */ /* begin pushLiteralVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) (longAt(((((char *) method)) + 4) + (((84 & 31) + 1) << 2))))) + 4) + (1 << 2))); break; case 85: /* pushLiteralVariableBytecode */ /* begin pushLiteralVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) (longAt(((((char *) method)) + 4) + (((85 & 31) + 1) << 2))))) + 4) + (1 << 2))); break; case 86: /* pushLiteralVariableBytecode */ /* begin pushLiteralVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) (longAt(((((char *) method)) + 4) + (((86 & 31) + 1) << 2))))) + 4) + (1 << 2))); break; case 87: /* pushLiteralVariableBytecode */ /* begin pushLiteralVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) (longAt(((((char *) method)) + 4) + (((87 & 31) + 1) << 2))))) + 4) + (1 << 2))); break; case 88: /* pushLiteralVariableBytecode */ /* begin pushLiteralVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) (longAt(((((char *) method)) + 4) + (((88 & 31) + 1) << 2))))) + 4) + (1 << 2))); break; case 89: /* pushLiteralVariableBytecode */ /* begin pushLiteralVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) (longAt(((((char *) method)) + 4) + (((89 & 31) + 1) << 2))))) + 4) + (1 << 2))); break; case 90: /* pushLiteralVariableBytecode */ /* begin pushLiteralVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) (longAt(((((char *) method)) + 4) + (((90 & 31) + 1) << 2))))) + 4) + (1 << 2))); break; case 91: /* pushLiteralVariableBytecode */ /* begin pushLiteralVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) (longAt(((((char *) method)) + 4) + (((91 & 31) + 1) << 2))))) + 4) + (1 << 2))); break; case 92: /* pushLiteralVariableBytecode */ /* begin pushLiteralVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) (longAt(((((char *) method)) + 4) + (((92 & 31) + 1) << 2))))) + 4) + (1 << 2))); break; case 93: /* pushLiteralVariableBytecode */ /* begin pushLiteralVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) (longAt(((((char *) method)) + 4) + (((93 & 31) + 1) << 2))))) + 4) + (1 << 2))); break; case 94: /* pushLiteralVariableBytecode */ /* begin pushLiteralVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) (longAt(((((char *) method)) + 4) + (((94 & 31) + 1) << 2))))) + 4) + (1 << 2))); break; case 95: /* pushLiteralVariableBytecode */ /* begin pushLiteralVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) (longAt(((((char *) method)) + 4) + (((95 & 31) + 1) << 2))))) + 4) + (1 << 2))); break; case 96: /* storeAndPopReceiverVariableBytecode */ t2 = receiver; t1 = longAt(localSP); if (t2 < youngStart) { possibleRootStoreIntovalue(t2, t1); } longAtput(((((char *) t2)) + 4) + ((96 & 7) << 2), t1); /* begin internalPop: */ localSP -= 1 * 4; break; case 97: /* storeAndPopReceiverVariableBytecode */ t2 = receiver; t1 = longAt(localSP); if (t2 < youngStart) { possibleRootStoreIntovalue(t2, t1); } longAtput(((((char *) t2)) + 4) + ((97 & 7) << 2), t1); /* begin internalPop: */ localSP -= 1 * 4; break; case 98: /* storeAndPopReceiverVariableBytecode */ t2 = receiver; t1 = longAt(localSP); if (t2 < youngStart) { possibleRootStoreIntovalue(t2, t1); } longAtput(((((char *) t2)) + 4) + ((98 & 7) << 2), t1); /* begin internalPop: */ localSP -= 1 * 4; break; case 99: /* storeAndPopReceiverVariableBytecode */ t2 = receiver; t1 = longAt(localSP); if (t2 < youngStart) { possibleRootStoreIntovalue(t2, t1); } longAtput(((((char *) t2)) + 4) + ((99 & 7) << 2), t1); /* begin internalPop: */ localSP -= 1 * 4; break; case 100: /* storeAndPopReceiverVariableBytecode */ t2 = receiver; t1 = longAt(localSP); if (t2 < youngStart) { possibleRootStoreIntovalue(t2, t1); } longAtput(((((char *) t2)) + 4) + ((100 & 7) << 2), t1); /* begin internalPop: */ localSP -= 1 * 4; break; case 101: /* storeAndPopReceiverVariableBytecode */ t2 = receiver; t1 = longAt(localSP); if (t2 < youngStart) { possibleRootStoreIntovalue(t2, t1); } longAtput(((((char *) t2)) + 4) + ((101 & 7) << 2), t1); /* begin internalPop: */ localSP -= 1 * 4; break; case 102: /* storeAndPopReceiverVariableBytecode */ t2 = receiver; t1 = longAt(localSP); if (t2 < youngStart) { possibleRootStoreIntovalue(t2, t1); } longAtput(((((char *) t2)) + 4) + ((102 & 7) << 2), t1); /* begin internalPop: */ localSP -= 1 * 4; break; case 103: /* storeAndPopReceiverVariableBytecode */ t2 = receiver; t1 = longAt(localSP); if (t2 < youngStart) { possibleRootStoreIntovalue(t2, t1); } longAtput(((((char *) t2)) + 4) + ((103 & 7) << 2), t1); /* begin internalPop: */ localSP -= 1 * 4; break; case 104: /* storeAndPopTemporaryVariableBytecode */ longAtput(((((char *) theHomeContext)) + 4) + (((104 & 7) + 6) << 2), longAt(localSP)); /* begin internalPop: */ localSP -= 1 * 4; break; case 105: /* storeAndPopTemporaryVariableBytecode */ longAtput(((((char *) theHomeContext)) + 4) + (((105 & 7) + 6) << 2), longAt(localSP)); /* begin internalPop: */ localSP -= 1 * 4; break; case 106: /* storeAndPopTemporaryVariableBytecode */ longAtput(((((char *) theHomeContext)) + 4) + (((106 & 7) + 6) << 2), longAt(localSP)); /* begin internalPop: */ localSP -= 1 * 4; break; case 107: /* storeAndPopTemporaryVariableBytecode */ longAtput(((((char *) theHomeContext)) + 4) + (((107 & 7) + 6) << 2), longAt(localSP)); /* begin internalPop: */ localSP -= 1 * 4; break; case 108: /* storeAndPopTemporaryVariableBytecode */ longAtput(((((char *) theHomeContext)) + 4) + (((108 & 7) + 6) << 2), longAt(localSP)); /* begin internalPop: */ localSP -= 1 * 4; break; case 109: /* storeAndPopTemporaryVariableBytecode */ longAtput(((((char *) theHomeContext)) + 4) + (((109 & 7) + 6) << 2), longAt(localSP)); /* begin internalPop: */ localSP -= 1 * 4; break; case 110: /* storeAndPopTemporaryVariableBytecode */ longAtput(((((char *) theHomeContext)) + 4) + (((110 & 7) + 6) << 2), longAt(localSP)); /* begin internalPop: */ localSP -= 1 * 4; break; case 111: /* storeAndPopTemporaryVariableBytecode */ longAtput(((((char *) theHomeContext)) + 4) + (((111 & 7) + 6) << 2), longAt(localSP)); /* begin internalPop: */ localSP -= 1 * 4; break; case 112: /* pushReceiverBytecode */ /* begin internalPush: */ longAtput(localSP += 4, receiver); break; case 113: /* pushConstantTrueBytecode */ /* begin internalPush: */ longAtput(localSP += 4, trueObj); break; case 114: /* pushConstantFalseBytecode */ /* begin internalPush: */ longAtput(localSP += 4, falseObj); break; case 115: /* pushConstantNilBytecode */ /* begin internalPush: */ longAtput(localSP += 4, nilObj); break; case 116: /* pushConstantMinusOneBytecode */ /* begin internalPush: */ longAtput(localSP += 4, 4294967295U); break; case 117: /* pushConstantZeroBytecode */ /* begin internalPush: */ longAtput(localSP += 4, 1); break; case 118: /* pushConstantOneBytecode */ /* begin internalPush: */ longAtput(localSP += 4, 3); break; case 119: /* pushConstantTwoBytecode */ /* begin internalPush: */ longAtput(localSP += 4, 5); break; case 120: /* returnReceiver */ t2 = longAt(((((char *) theHomeContext)) + 4) + (0 << 2)); t1 = receiver; /* begin returnValue:to: */ commonReturn: /* */; t4 = nilObj; t5 = activeContext; t3 = longAt(((((char *) specialObjectsOop)) + 4) + (10 << 2)); if ((t2 == t4) || ((longAt(((((char *) t2)) + 4) + (1 << 2))) == t4)) { /* begin internalPush: */ longAtput(localSP += 4, activeContext); /* begin internalPush: */ longAtput(localSP += 4, t1); messageSelector = longAt(((((char *) specialObjectsOop)) + 4) + (21 << 2)); argumentCount = 1; /* begin normalSend */ goto commonSend; l3: /* end fetchClassOf: */; l1: /* end lookupInMethodCacheSel:class: */; } while (!(t5 == t2)) { t6 = longAt(((((char *) t5)) + 4) + (0 << 2)); longAtput(((((char *) t5)) + 4) + (0 << 2), t4); longAtput(((((char *) t5)) + 4) + (1 << 2), t4); if (reclaimableContextCount > 0) { reclaimableContextCount -= 1; /* begin recycleContextIfPossible:methodContextClass: */ if (t5 >= youngStart) { t7 = longAt(t5); t8 = t7 & 126976; if (t8 == 0) { t9 = ((longAt(t5 - 4)) & 4294967292U) == t3; } else { t9 = t8 == (((longAt(((((char *) t3)) + 4) + (2 << 2))) - 1) & 126976); } if (t9) { if ((t7 & 252) == 76) { longAtput(((((char *) t5)) + 4) + (0 << 2), freeSmallContexts); freeSmallContexts = t5; } else { longAtput(((((char *) t5)) + 4) + (0 << 2), freeLargeContexts); freeLargeContexts = t5; } } } } t5 = t6; } activeContext = t5; if (t5 < youngStart) { beRootIfOld(t5); } /* begin internalFetchContextRegisters: */ t10 = longAt(((((char *) t5)) + 4) + (3 << 2)); if ((t10 & 1)) { t10 = longAt(((((char *) t5)) + 4) + (5 << 2)); if (t10 < youngStart) { beRootIfOld(t10); } } else { t10 = t5; } theHomeContext = t10; receiver = longAt(((((char *) t10)) + 4) + (5 << 2)); method = longAt(((((char *) t10)) + 4) + (3 << 2)); t10 = ((longAt(((((char *) t5)) + 4) + (1 << 2))) >> 1); localIP = ((char *) (((method + t10) + 4) - 2)); t10 = ((longAt(((((char *) t5)) + 4) + (2 << 2))) >> 1); localSP = ((char *) ((t5 + 4) + (((6 + t10) - 1) * 4))); /* begin internalPush: */ longAtput(localSP += 4, t1); /* begin internalQuickCheckForInterrupts */ if ((interruptCheckCounter -= 1) <= 0) { interruptCheckCounter = 1000; /* begin externalizeIPandSP */ instructionPointer = ((int) localIP); stackPointer = ((int) localSP); checkForInterrupts(); /* begin internalizeIPandSP */ localIP = ((char *) instructionPointer); localSP = ((char *) stackPointer); } l4: /* end returnValue:to: */; break; case 121: /* returnTrue */ t2 = longAt(((((char *) theHomeContext)) + 4) + (0 << 2)); t1 = trueObj; /* begin returnValue:to: */ goto commonReturn; l8: /* end returnValue:to: */; break; case 122: /* returnFalse */ t2 = longAt(((((char *) theHomeContext)) + 4) + (0 << 2)); t1 = falseObj; /* begin returnValue:to: */ goto commonReturn; l12: /* end returnValue:to: */; break; case 123: /* returnNil */ t2 = longAt(((((char *) theHomeContext)) + 4) + (0 << 2)); t1 = nilObj; /* begin returnValue:to: */ goto commonReturn; l16: /* end returnValue:to: */; break; case 124: /* returnTopFromMethod */ t2 = longAt(((((char *) theHomeContext)) + 4) + (0 << 2)); t1 = longAt(localSP); /* begin returnValue:to: */ goto commonReturn; l20: /* end returnValue:to: */; break; case 125: /* returnTopFromBlock */ t2 = longAt(((((char *) activeContext)) + 4) + (0 << 2)); t1 = longAt(localSP); /* begin returnValue:to: */ goto commonReturn; l24: /* end returnValue:to: */; break; case 126: case 127: /* unknownBytecode */ error("Unknown bytecode"); break; case 128: /* extendedPushBytecode */ t1 = byteAt(++localIP); t2 = (((unsigned) t1) >> 6) & 3; t3 = t1 & 63; if (t2 == 0) { /* begin pushReceiverVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) receiver)) + 4) + (t3 << 2))); goto l25; } if (t2 == 1) { /* begin pushTemporaryVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) theHomeContext)) + 4) + ((t3 + 6) << 2))); goto l25; } if (t2 == 2) { /* begin pushLiteralConstant: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) method)) + 4) + ((t3 + 1) << 2))); goto l25; } if (t2 == 3) { /* begin pushLiteralVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) (longAt(((((char *) method)) + 4) + ((t3 + 1) << 2))))) + 4) + (1 << 2))); goto l25; } l25: /* end case */; break; case 129: /* extendedStoreBytecode */ t1 = byteAt(++localIP); t2 = (((unsigned) t1) >> 6) & 3; t3 = t1 & 63; if (t2 == 0) { /* begin storePointer:ofObject:withValue: */ t5 = receiver; t6 = longAt(localSP); if (t5 < youngStart) { possibleRootStoreIntovalue(t5, t6); } longAtput(((((char *) t5)) + 4) + (t3 << 2), t6); goto l26; } if (t2 == 1) { longAtput(((((char *) theHomeContext)) + 4) + ((t3 + 6) << 2), longAt(localSP)); goto l26; } if (t2 == 2) { error("illegal store"); } if (t2 == 3) { t4 = longAt(((((char *) method)) + 4) + ((t3 + 1) << 2)); /* begin storePointer:ofObject:withValue: */ t7 = longAt(localSP); if (t4 < youngStart) { possibleRootStoreIntovalue(t4, t7); } longAtput(((((char *) t4)) + 4) + (1 << 2), t7); goto l26; } l26: /* end case */; break; case 130: /* extendedStoreAndPopBytecode */ /* begin extendedStoreBytecode */ t1 = byteAt(++localIP); t2 = (((unsigned) t1) >> 6) & 3; t3 = t1 & 63; if (t2 == 0) { /* begin storePointer:ofObject:withValue: */ t5 = receiver; t6 = longAt(localSP); if (t5 < youngStart) { possibleRootStoreIntovalue(t5, t6); } longAtput(((((char *) t5)) + 4) + (t3 << 2), t6); goto l27; } if (t2 == 1) { longAtput(((((char *) theHomeContext)) + 4) + ((t3 + 6) << 2), longAt(localSP)); goto l27; } if (t2 == 2) { error("illegal store"); } if (t2 == 3) { t4 = longAt(((((char *) method)) + 4) + ((t3 + 1) << 2)); /* begin storePointer:ofObject:withValue: */ t7 = longAt(localSP); if (t4 < youngStart) { possibleRootStoreIntovalue(t4, t7); } longAtput(((((char *) t4)) + 4) + (1 << 2), t7); goto l27; } l27: /* end extendedStoreBytecode */; /* begin popStackBytecode */ /* begin internalPop: */ localSP -= 1 * 4; break; case 131: /* singleExtendedSendBytecode */ t1 = byteAt(++localIP); messageSelector = longAt(((((char *) method)) + 4) + (((t1 & 31) + 1) << 2)); argumentCount = ((unsigned) t1) >> 5; /* begin normalSend */ commonSend: /* */; /* begin fetchClassOf: */ if (((longAt(localSP - (argumentCount * 4))) & 1)) { t2 = longAt(((((char *) specialObjectsOop)) + 4) + (5 << 2)); goto l30; } t8 = ((((unsigned) (longAt(longAt(localSP - (argumentCount * 4))))) >> 12) & 31) - 1; if (t8 < 0) { t2 = (longAt((longAt(localSP - (argumentCount * 4))) - 4)) & 4294967292U; goto l30; } else { t2 = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + (t8 << 2)); goto l30; } l30: /* end fetchClassOf: */; /* begin externalizeIPandSP */ instructionPointer = ((int) localIP); stackPointer = ((int) localSP); /* begin sendSelectorToClass: */ /* begin findNewMethodInClass: */ /* begin lookupInMethodCacheSel:class: */ t6 = ((unsigned) (messageSelector ^ t2)) >> 2; t4 = (t6 & 511) + 1; for (t5 = 1; t5 <= 3; t5 += 1) { if (((methodCache[t4]) == messageSelector) && ((methodCache[t4 + 512]) == t2)) { newMethod = methodCache[t4 + (512 * 2)]; primitiveIndex = methodCache[t4 + (512 * 3)]; t3 = true; goto l28; } t4 = ((((unsigned) t6) >> t5) & 511) + 1; } t3 = false; l28: /* end lookupInMethodCacheSel:class: */; if (!(t3)) { lookupMethodInClass(t2); /* begin primitiveIndexOf: */ t7 = (((unsigned) (longAt(((((char *) newMethod)) + 4) + (0 << 2)))) >> 1) & 805306879; if (t7 > 511) { primitiveIndex = (t7 & 511) + (((unsigned) t7) >> 19); goto l29; } else { primitiveIndex = t7; goto l29; } l29: /* end primitiveIndexOf: */; addToMethodCacheSelclassmethodprimIndex(messageSelector, t2, newMethod, primitiveIndex); } /* begin executeNewMethod */ if ((primitiveIndex == 0) || (!(primitiveResponse()))) { activateNewMethod(); /* begin quickCheckForInterrupts */ if ((interruptCheckCounter -= 1) <= 0) { interruptCheckCounter = 1000; checkForInterrupts(); } } /* begin internalizeIPandSP */ localIP = ((char *) instructionPointer); localSP = ((char *) stackPointer); break; case 132: /* doubleExtendedDoAnythingBytecode */ t1 = byteAt(++localIP); t2 = byteAt(++localIP); t4 = ((unsigned) t1) >> 5; if (t4 == 0) { messageSelector = longAt(((((char *) method)) + 4) + ((t2 + 1) << 2)); argumentCount = t1 & 31; /* begin normalSend */ goto commonSend; l34: /* end fetchClassOf: */; l32: /* end lookupInMethodCacheSel:class: */; } if (t4 == 1) { messageSelector = longAt(((((char *) method)) + 4) + ((t2 + 1) << 2)); argumentCount = t1 & 31; /* begin superclassSend */ goto commonSupersend; l35: /* end lookupInMethodCacheSel:class: */; } if (t4 == 2) { /* begin pushReceiverVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) receiver)) + 4) + (t2 << 2))); goto l31; } if (t4 == 3) { /* begin pushLiteralConstant: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) method)) + 4) + ((t2 + 1) << 2))); goto l31; } if (t4 == 4) { /* begin pushLiteralVariable: */ /* begin internalPush: */ longAtput(localSP += 4, longAt(((((char *) (longAt(((((char *) method)) + 4) + ((t2 + 1) << 2))))) + 4) + (1 << 2))); goto l31; } if (t4 == 5) { t3 = longAt(localSP); /* begin storePointer:ofObject:withValue: */ t5 = receiver; if (t5 < youngStart) { possibleRootStoreIntovalue(t5, t3); } longAtput(((((char *) t5)) + 4) + (t2 << 2), t3); goto l31; } if (t4 == 6) { t3 = longAt(localSP); /* begin internalPop: */ localSP -= 1 * 4; /* begin storePointer:ofObject:withValue: */ t6 = receiver; if (t6 < youngStart) { possibleRootStoreIntovalue(t6, t3); } longAtput(((((char *) t6)) + 4) + (t2 << 2), t3); goto l31; } if (t4 == 7) { t3 = longAt(localSP); /* begin storePointer:ofObject:withValue: */ t7 = longAt(((((char *) method)) + 4) + ((t2 + 1) << 2)); if (t7 < youngStart) { possibleRootStoreIntovalue(t7, t3); } longAtput(((((char *) t7)) + 4) + (1 << 2), t3); goto l31; } l31: /* end case */; break; case 133: /* singleExtendedSuperBytecode */ t1 = byteAt(++localIP); messageSelector = longAt(((((char *) method)) + 4) + (((t1 & 31) + 1) << 2)); argumentCount = ((unsigned) t1) >> 5; /* begin superclassSend */ commonSupersend: /* */; /* begin superclassOf: */ t3 = longAt(((((char *) (longAt(((((char *) method)) + 4) + (((((((unsigned) (longAt(((((char *) method)) + 4) + (0 << 2)))) >> 10) & 255) - 1) + 1) << 2))))) + 4) + (1 << 2)); t2 = longAt(((((char *) t3)) + 4) + (0 << 2)); /* begin externalizeIPandSP */ instructionPointer = ((int) localIP); stackPointer = ((int) localSP); /* begin sendSelectorToClass: */ /* begin findNewMethodInClass: */ /* begin lookupInMethodCacheSel:class: */ t7 = ((unsigned) (messageSelector ^ t2)) >> 2; t5 = (t7 & 511) + 1; for (t6 = 1; t6 <= 3; t6 += 1) { if (((methodCache[t5]) == messageSelector) && ((methodCache[t5 + 512]) == t2)) { newMethod = methodCache[t5 + (512 * 2)]; primitiveIndex = methodCache[t5 + (512 * 3)]; t4 = true; goto l37; } t5 = ((((unsigned) t7) >> t6) & 511) + 1; } t4 = false; l37: /* end lookupInMethodCacheSel:class: */; if (!(t4)) { lookupMethodInClass(t2); /* begin primitiveIndexOf: */ t8 = (((unsigned) (longAt(((((char *) newMethod)) + 4) + (0 << 2)))) >> 1) & 805306879; if (t8 > 511) { primitiveIndex = (t8 & 511) + (((unsigned) t8) >> 19); goto l38; } else { primitiveIndex = t8; goto l38; } l38: /* end primitiveIndexOf: */; addToMethodCacheSelclassmethodprimIndex(messageSelector, t2, newMethod, primitiveIndex); } /* begin executeNewMethod */ if ((primitiveIndex == 0) || (!(primitiveResponse()))) { activateNewMethod(); /* begin quickCheckForInterrupts */ if ((interruptCheckCounter -= 1) <= 0) { interruptCheckCounter = 1000; checkForInterrupts(); } } /* begin internalizeIPandSP */ localIP = ((char *) instructionPointer); localSP = ((char *) stackPointer); break; case 134: /* secondExtendedSendBytecode */ t1 = byteAt(++localIP); messageSelector = longAt(((((char *) method)) + 4) + (((t1 & 63) + 1) << 2)); argumentCount = ((unsigned) t1) >> 6; /* begin normalSend */ goto commonSend; l41: /* end fetchClassOf: */; l39: /* end lookupInMethodCacheSel:class: */; break; case 135: /* popStackBytecode */ /* begin internalPop: */ localSP -= 1 * 4; break; case 136: /* duplicateTopBytecode */ /* begin internalPush: */ t1 = longAt(localSP); longAtput(localSP += 4, t1); break; case 137: /* pushActiveContextBytecode */ reclaimableContextCount = 0; /* begin internalPush: */ longAtput(localSP += 4, activeContext); break; case 138: case 139: case 140: case 141: case 142: case 143: /* experimentalBytecode */ t2 = longAt(((((char *) theHomeContext)) + 4) + (((currentBytecode - 138) + 6) << 2)); t4 = byteAt(localIP + 1); t5 = byteAt(localIP + 2); t6 = byteAt(localIP + 3); if ((t2 & 1)) { t1 = (t2 >> 1); } else { /* begin internalPush: */ longAtput(localSP += 4, t2); goto l42; } if (t4 < 32) { t3 = longAt(((((char *) theHomeContext)) + 4) + (((t4 & 15) + 6) << 2)); if ((t3 & 1)) { t3 = (t3 >> 1); } else { /* begin internalPush: */ longAtput(localSP += 4, t2); goto l42; } } else { if (t4 > 64) { t3 = 1; } else { t3 = longAt(((((char *) method)) + 4) + (((t4 & 31) + 1) << 2)); if ((t3 & 1)) { t3 = (t3 >> 1); } else { /* begin internalPush: */ longAtput(localSP += 4, t2); goto l42; } } } if (t5 < 178) { t8 = t1 + t3; if ((t8 ^ (t8 << 1)) >= 0) { if ((t6 > 103) && (t6 < 112)) { localIP += 3; longAtput(((((char *) theHomeContext)) + 4) + (((t6 & 7) + 6) << 2), ((t8 << 1) | 1)); } else { localIP += 2; /* begin internalPush: */ longAtput(localSP += 4, ((t8 << 1) | 1)); } } else { /* begin internalPush: */ longAtput(localSP += 4, t2); goto l42; } } else { t7 = byteAt(localIP + 4); if (t1 <= t3) { localIP = (localIP + 3) + 1; } else { localIP = ((localIP + 3) + 1) + t7; } } l42: /* end case */; break; case 144: /* shortUnconditionalJump */ /* begin jump: */ localIP += (144 & 7) + 1; break; case 145: /* shortUnconditionalJump */ /* begin jump: */ localIP += (145 & 7) + 1; break; case 146: /* shortUnconditionalJump */ /* begin jump: */ localIP += (146 & 7) + 1; break; case 147: /* shortUnconditionalJump */ /* begin jump: */ localIP += (147 & 7) + 1; break; case 148: /* shortUnconditionalJump */ /* begin jump: */ localIP += (148 & 7) + 1; break; case 149: /* shortUnconditionalJump */ /* begin jump: */ localIP += (149 & 7) + 1; break; case 150: /* shortUnconditionalJump */ /* begin jump: */ localIP += (150 & 7) + 1; break; case 151: /* shortUnconditionalJump */ /* begin jump: */ localIP += (151 & 7) + 1; break; case 152: case 153: case 154: case 155: case 156: case 157: case 158: case 159: /* shortConditionalJump */ /* begin jumplfFalseBy: */ t1 = (currentBytecode & 7) + 1; t2 = longAt(localSP); if (t2 == falseObj) { /* begin jump: */ localIP += t1; } else { if (!(t2 == trueObj)) { messageSelector = longAt(((((char *) specialObjectsOop)) + 4) + (25 << 2)); argumentCount = 0; /* begin normalSend */ goto commonSend; l46: /* end fetchClassOf: */; l44: /* end lookupInMethodCacheSel:class: */; } } /* begin internalPop: */ localSP -= 1 * 4; l43: /* end jumplfFalseBy: */; break; case 160: case 161: case 162: case 163: case 164: case 165: case 166: case 167: /* longUnconditionalJump */ t1 = (((currentBytecode & 7) - 4) * 256) + (byteAt(++localIP)); localIP += t1; if (t1 < 0) { /* begin internalQuickCheckForInterrupts */ if ((interruptCheckCounter -= 1) <= 0) { interruptCheckCounter = 1000; /* begin externalizeIPandSP */ instructionPointer = ((int) localIP); stackPointer = ((int) localSP); checkForInterrupts(); /* begin internalizeIPandSP */ localIP = ((char *) instructionPointer); localSP = ((char *) stackPointer); } } break; case 168: case 169: case 170: case 171: /* longJumpIfTrue */ /* begin jumplfTrueBy: */ t1 = ((currentBytecode & 3) * 256) + (byteAt(++localIP)); t2 = longAt(localSP); if (t2 == trueObj) { /* begin jump: */ localIP += t1; } else { if (!(t2 == falseObj)) { messageSelector = longAt(((((char *) specialObjectsOop)) + 4) + (25 << 2)); argumentCount = 0; /* begin normalSend */ goto commonSend; l50: /* end fetchClassOf: */; l48: /* end lookupInMethodCacheSel:class: */; } } /* begin internalPop: */ localSP -= 1 * 4; l47: /* end jumplfTrueBy: */; break; case 172: case 173: case 174: case 175: /* longJumpIfFalse */ /* begin jumplfFalseBy: */ t1 = ((currentBytecode & 3) * 256) + (byteAt(++localIP)); t2 = longAt(localSP); if (t2 == falseObj) { /* begin jump: */ localIP += t1; } else { if (!(t2 == trueObj)) { messageSelector = longAt(((((char *) specialObjectsOop)) + 4) + (25 << 2)); argumentCount = 0; /* begin normalSend */ goto commonSend; l54: /* end fetchClassOf: */; l52: /* end lookupInMethodCacheSel:class: */; } } /* begin internalPop: */ localSP -= 1 * 4; l51: /* end jumplfFalseBy: */; break; case 176: /* bytecodePrimAdd */ t3 = longAt(localSP - (1 * 4)); t1 = longAt(localSP - (0 * 4)); if (((t3 & t1) & 1) != 0) { t2 = ((t3 >> 1)) + ((t1 >> 1)); if ((t2 ^ (t2 << 1)) >= 0) { longAtput(localSP -= 4, ((t2 << 1) | 1)); goto l55; } } /* begin externalizeIPandSP */ instructionPointer = ((int) localIP); stackPointer = ((int) localSP); successFlag = true; primitiveFloatAdd(); if (!(successFlag)) { successFlag = true; primitiveAdd(); } /* begin internalizeIPandSP */ localIP = ((char *) instructionPointer); localSP = ((char *) stackPointer); l55: /* end case */; break; case 177: /* bytecodePrimSubtract */ t3 = longAt(localSP - (1 * 4)); t1 = longAt(localSP - (0 * 4)); if (((t3 & t1) & 1) != 0) { t2 = ((t3 >> 1)) - ((t1 >> 1)); if ((t2 ^ (t2 << 1)) >= 0) { longAtput(localSP -= 4, ((t2 << 1) | 1)); goto l56; } } /* begin externalizeIPandSP */ instructionPointer = ((int) localIP); stackPointer = ((int) localSP); successFlag = true; primitiveFloatSubtract(); if (!(successFlag)) { successFlag = true; primitiveSubtract(); } /* begin internalizeIPandSP */ localIP = ((char *) instructionPointer); localSP = ((char *) stackPointer); l56: /* end case */; break; case 178: /* bytecodePrimLessThan */ t2 = longAt(localSP - (1 * 4)); t1 = longAt(localSP - (0 * 4)); if (((t2 & t1) & 1) != 0) { /* begin booleanCheat: */ t3 = byteAt(++localIP); /* begin internalPop: */ localSP -= 2 * 4; if ((t3 < 160) && (t3 > 151)) { if (t2 < t1) { goto l57; } else { /* begin jump: */ localIP += t3 - 151; goto l57; } } if (t3 == 172) { t4 = byteAt(++localIP); if (t2 < t1) { goto l57; } else { /* begin jump: */ localIP += t4; goto l57; } } localIP -= 1; if (t2 < t1) { /* begin internalPush: */ longAtput(localSP += 4, trueObj); } else { /* begin internalPush: */ longAtput(localSP += 4, falseObj); } goto l57; } /* begin externalizeIPandSP */ instructionPointer = ((int) localIP); stackPointer = ((int) localSP); successFlag = true; primitiveFloatLessThan(); if (!(successFlag)) { successFlag = true; primitiveLessThan(); } /* begin internalizeIPandSP */ localIP = ((char *) instructionPointer); localSP = ((char *) stackPointer); l57: /* end case */; break; case 179: /* bytecodePrimGreaterThan */ t2 = longAt(localSP - (1 * 4)); t1 = longAt(localSP - (0 * 4)); if (((t2 & t1) & 1) != 0) { /* begin booleanCheat: */ t3 = byteAt(++localIP); /* begin internalPop: */ localSP -= 2 * 4; if ((t3 < 160) && (t3 > 151)) { if (t2 > t1) { goto l58; } else { /* begin jump: */ localIP += t3 - 151; goto l58; } } if (t3 == 172) { t4 = byteAt(++localIP); if (t2 > t1) { goto l58; } else { /* begin jump: */ localIP += t4; goto l58; } } localIP -= 1; if (t2 > t1) { /* begin internalPush: */ longAtput(localSP += 4, trueObj); } else { /* begin internalPush: */ longAtput(localSP += 4, falseObj); } goto l58; } /* begin externalizeIPandSP */ instructionPointer = ((int) localIP); stackPointer = ((int) localSP); successFlag = true; primitiveFloatGreaterThan(); if (!(successFlag)) { successFlag = true; primitiveGreaterThan(); } /* begin internalizeIPandSP */ localIP = ((char *) instructionPointer); localSP = ((char *) stackPointer); l58: /* end case */; break; case 180: /* bytecodePrimLessOrEqual */ t2 = longAt(localSP - (1 * 4)); t1 = longAt(localSP - (0 * 4)); if (((t2 & t1) & 1) != 0) { /* begin booleanCheat: */ t3 = byteAt(++localIP); /* begin internalPop: */ localSP -= 2 * 4; if ((t3 < 160) && (t3 > 151)) { if (t2 <= t1) { goto l59; } else { /* begin jump: */ localIP += t3 - 151; goto l59; } } if (t3 == 172) { t4 = byteAt(++localIP); if (t2 <= t1) { goto l59; } else { /* begin jump: */ localIP += t4; goto l59; } } localIP -= 1; if (t2 <= t1) { /* begin internalPush: */ longAtput(localSP += 4, trueObj); } else { /* begin internalPush: */ longAtput(localSP += 4, falseObj); } goto l59; } /* begin externalizeIPandSP */ instructionPointer = ((int) localIP); stackPointer = ((int) localSP); successFlag = true; primitiveFloatLessOrEqual(); if (!(successFlag)) { successFlag = true; primitiveLessOrEqual(); } /* begin internalizeIPandSP */ localIP = ((char *) instructionPointer); localSP = ((char *) stackPointer); l59: /* end case */; break; case 181: /* bytecodePrimGreaterOrEqual */ t2 = longAt(localSP - (1 * 4)); t1 = longAt(localSP - (0 * 4)); if (((t2 & t1) & 1) != 0) { /* begin booleanCheat: */ t3 = byteAt(++localIP); /* begin internalPop: */ localSP -= 2 * 4; if ((t3 < 160) && (t3 > 151)) { if (t2 >= t1) { goto l60; } else { /* begin jump: */ localIP += t3 - 151; goto l60; } } if (t3 == 172) { t4 = byteAt(++localIP); if (t2 >= t1) { goto l60; } else { /* begin jump: */ localIP += t4; goto l60; } } localIP -= 1; if (t2 >= t1) { /* begin internalPush: */ longAtput(localSP += 4, trueObj); } else { /* begin internalPush: */ longAtput(localSP += 4, falseObj); } goto l60; } /* begin externalizeIPandSP */ instructionPointer = ((int) localIP); stackPointer = ((int) localSP); successFlag = true; primitiveFloatGreaterOrEqual(); if (!(successFlag)) { successFlag = true; primitiveGreaterOrEqual(); } /* begin internalizeIPandSP */ localIP = ((char *) instructionPointer); localSP = ((char *) stackPointer); l60: /* end case */; break; case 182: /* bytecodePrimEqual */ t2 = longAt(localSP - (1 * 4)); t1 = longAt(localSP - (0 * 4)); if (((t2 & t1) & 1) != 0) { /* begin booleanCheat: */ t3 = byteAt(++localIP); /* begin internalPop: */ localSP -= 2 * 4; if ((t3 < 160) && (t3 > 151)) { if (t2 == t1) { goto l61; } else { /* begin jump: */ localIP += t3 - 151; goto l61; } } if (t3 == 172) { t4 = byteAt(++localIP); if (t2 == t1) { goto l61; } else { /* begin jump: */ localIP += t4; goto l61; } } localIP -= 1; if (t2 == t1) { /* begin internalPush: */ longAtput(localSP += 4, trueObj); } else { /* begin internalPush: */ longAtput(localSP += 4, falseObj); } goto l61; } /* begin externalizeIPandSP */ instructionPointer = ((int) localIP); stackPointer = ((int) localSP); successFlag = true; primitiveFloatEqual(); if (!(successFlag)) { successFlag = true; primitiveEqual(); } /* begin internalizeIPandSP */ localIP = ((char *) instructionPointer); localSP = ((char *) stackPointer); l61: /* end case */; break; case 183: /* bytecodePrimNotEqual */ t2 = longAt(localSP - (1 * 4)); t1 = longAt(localSP - (0 * 4)); if (((t2 & t1) & 1) != 0) { /* begin booleanCheat: */ t3 = byteAt(++localIP); /* begin internalPop: */ localSP -= 2 * 4; if ((t3 < 160) && (t3 > 151)) { if (t2 != t1) { goto l62; } else { /* begin jump: */ localIP += t3 - 151; goto l62; } } if (t3 == 172) { t4 = byteAt(++localIP); if (t2 != t1) { goto l62; } else { /* begin jump: */ localIP += t4; goto l62; } } localIP -= 1; if (t2 != t1) { /* begin internalPush: */ longAtput(localSP += 4, trueObj); } else { /* begin internalPush: */ longAtput(localSP += 4, falseObj); } goto l62; } /* begin externalizeIPandSP */ instructionPointer = ((int) localIP); stackPointer = ((int) localSP); successFlag = true; primitiveFloatNotEqual(); if (!(successFlag)) { successFlag = true; primitiveNotEqual(); } /* begin internalizeIPandSP */ localIP = ((char *) instructionPointer); localSP = ((char *) stackPointer); l62: /* end case */; break; case 184: /* bytecodePrimMultiply */ t3 = longAt(localSP - (1 * 4)); t1 = longAt(localSP - (0 * 4)); if (((t3 & t1) & 1) != 0) { t3 = (t3 >> 1); t1 = (t1 >> 1); t2 = t3 * t1; if (((t1 == 0) || ((t2 / t1) == t3)) && ((t2 ^ (t2 << 1)) >= 0)) { longAtput(localSP -= 4, ((t2 << 1) | 1)); goto l63; } } /* begin externalizeIPandSP */ instructionPointer = ((int) localIP); stackPointer = ((int) localSP); successFlag = true; primitiveFloatMultiply(); if (!(successFlag)) { successFlag = true; primitiveMultiply(); } /* begin internalizeIPandSP */ localIP = ((char *) instructionPointer); localSP = ((char *) stackPointer); l63: /* end case */; break; case 185: /* bytecodePrimDivide */ t3 = longAt(localSP - (1 * 4)); t1 = longAt(localSP - (0 * 4)); if (((t3 & t1) & 1) != 0) { t3 = (t3 >> 1); t1 = (t1 >> 1); if ((t1 != 0) && ((t3 % t1) == 0)) { t2 = t3 / t1; if ((t2 ^ (t2 << 1)) >= 0) { longAtput(localSP -= 4, ((t2 << 1) | 1)); goto l64; } } } /* begin externalizeIPandSP */ instructionPointer = ((int) localIP); stackPointer = ((int) localSP); successFlag = true; primitiveFloatDivide(); if (!(successFlag)) { successFlag = true; primitiveDivide(); } /* begin internalizeIPandSP */ localIP = ((char *) instructionPointer); localSP = ((char *) stackPointer); l64: /* end case */; break; case 186: /* bytecodePrimMod */ /* begin externalizeIPandSP */ instructionPointer = ((int) localIP); stackPointer = ((int) localSP); primitiveMod(); /* begin internalizeIPandSP */ localIP = ((char *) instructionPointer); localSP = ((char *) stackPointer); break; case 187: /* bytecodePrimMakePoint */ /* begin externalizeIPandSP */ instructionPointer = ((int) localIP); stackPointer = ((int) localSP); primitiveMakePoint(); /* begin internalizeIPandSP */ localIP = ((char *) instructionPointer); localSP = ((char *) stackPointer); break; case 188: /* bytecodePrimBitShift */ /* begin externalizeIPandSP */ instructionPointer = ((int) localIP); stackPointer = ((int) localSP); primitiveBitShift(); /* begin internalizeIPandSP */ localIP = ((char *) instructionPointer); localSP = ((char *) stackPointer); break; case 189: /* bytecodePrimDiv */ /* begin externalizeIPandSP */ instructionPointer = ((int) localIP); stackPointer = ((int) localSP); primitiveDiv(); /* begin internalizeIPandSP */ localIP = ((char *) instructionPointer); localSP = ((char *) stackPointer); break; case 190: /* bytecodePrimBitAnd */ /* begin externalizeIPandSP */ instructionPointer = ((int) localIP); stackPointer = ((int) localSP); primitiveBitAnd(); /* begin internalizeIPandSP */ localIP = ((char *) instructionPointer); localSP = ((char *) stackPointer); break; case 191: /* bytecodePrimBitOr */ /* begin externalizeIPandSP */ instructionPointer = ((int) localIP); stackPointer = ((int) localSP); primitiveBitOr(); /* begin internalizeIPandSP */ localIP = ((char *) instructionPointer); localSP = ((char *) stackPointer); break; case 192: /* bytecodePrimAt */ t2 = longAt(localSP); t4 = longAt(localSP - (1 * 4)); successFlag = (t2 & 1); if (successFlag) { /* begin fetchClassOf: */ if ((t4 & 1)) { t5 = longAt(((((char *) specialObjectsOop)) + 4) + (5 << 2)); goto l65; } t6 = ((((unsigned) (longAt(t4))) >> 12) & 31) - 1; if (t6 < 0) { t5 = (longAt(t4 - 4)) & 4294967292U; goto l65; } else { t5 = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + (t6 << 2)); goto l65; } l65: /* end fetchClassOf: */; t1 = t5 == (longAt(((((char *) specialObjectsOop)) + 4) + (6 << 2))); if (!(t1 || ((t5 == (longAt(((((char *) specialObjectsOop)) + 4) + (7 << 2)))) || ((t5 == (longAt(((((char *) specialObjectsOop)) + 4) + (4 << 2)))) || (t5 == (longAt(((((char *) specialObjectsOop)) + 4) + (26 << 2)))))))) { successFlag = false; } } if (successFlag) { t2 = (t2 >> 1); /* begin externalizeIPandSP */ instructionPointer = ((int) localIP); stackPointer = ((int) localSP); t3 = stObjectat(t4, t2); /* begin internalizeIPandSP */ localIP = ((char *) instructionPointer); localSP = ((char *) stackPointer); if (t1 && (successFlag)) { t3 = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (24 << 2))))) + 4) + (((t3 >> 1)) << 2)); } } if (successFlag) { /* begin internalPop:thenPush: */ longAtput(localSP -= (2 - 1) * 4, t3); } else { messageSelector = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (23 << 2))))) + 4) + ((16 * 2) << 2)); argumentCount = 1; /* begin normalSend */ goto commonSend; l68: /* end fetchClassOf: */; l66: /* end lookupInMethodCacheSel:class: */; } break; case 193: /* bytecodePrimAtPut */ t2 = t3 = longAt(localSP); t4 = longAt(localSP - (1 * 4)); t5 = longAt(localSP - (2 * 4)); successFlag = (t4 & 1); if (successFlag) { /* begin fetchClassOf: */ if ((t5 & 1)) { t6 = longAt(((((char *) specialObjectsOop)) + 4) + (5 << 2)); goto l69; } t7 = ((((unsigned) (longAt(t5))) >> 12) & 31) - 1; if (t7 < 0) { t6 = (longAt(t5 - 4)) & 4294967292U; goto l69; } else { t6 = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + (t7 << 2)); goto l69; } l69: /* end fetchClassOf: */; t1 = t6 == (longAt(((((char *) specialObjectsOop)) + 4) + (6 << 2))); if (!(t1 || ((t6 == (longAt(((((char *) specialObjectsOop)) + 4) + (7 << 2)))) || ((t6 == (longAt(((((char *) specialObjectsOop)) + 4) + (4 << 2)))) || (t6 == (longAt(((((char *) specialObjectsOop)) + 4) + (26 << 2)))))))) { successFlag = false; } } if (successFlag) { t4 = (t4 >> 1); if (t1) { t3 = asciiOfCharacter(t2); } stObjectatput(t5, t4, t3); } if (successFlag) { /* begin internalPop:thenPush: */ longAtput(localSP -= (3 - 1) * 4, t2); } else { messageSelector = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (23 << 2))))) + 4) + ((17 * 2) << 2)); argumentCount = 2; /* begin normalSend */ goto commonSend; l72: /* end fetchClassOf: */; l70: /* end lookupInMethodCacheSel:class: */; } break; case 194: /* bytecodePrimSize */ /* begin externalizeIPandSP */ instructionPointer = ((int) localIP); stackPointer = ((int) localSP); successFlag = true; /* begin fetchClassOf: */ if (((longAt(stackPointer - (0 * 4))) & 1)) { t1 = longAt(((((char *) specialObjectsOop)) + 4) + (5 << 2)); goto l73; } t2 = ((((unsigned) (longAt(longAt(stackPointer - (0 * 4))))) >> 12) & 31) - 1; if (t2 < 0) { t1 = (longAt((longAt(stackPointer - (0 * 4))) - 4)) & 4294967292U; goto l73; } else { t1 = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + (t2 << 2)); goto l73; } l73: /* end fetchClassOf: */; if ((t1 == (longAt(((((char *) specialObjectsOop)) + 4) + (6 << 2)))) || ((t1 == (longAt(((((char *) specialObjectsOop)) + 4) + (7 << 2)))) || ((t1 == (longAt(((((char *) specialObjectsOop)) + 4) + (26 << 2)))) || (t1 == (longAt(((((char *) specialObjectsOop)) + 4) + (4 << 2))))))) { primitiveSize(); } else { failSpecialPrim(0); } /* begin internalizeIPandSP */ localIP = ((char *) instructionPointer); localSP = ((char *) stackPointer); break; case 195: /* bytecodePrimNext */ messageSelector = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (23 << 2))))) + 4) + ((19 * 2) << 2)); argumentCount = 0; /* begin normalSend */ goto commonSend; l76: /* end fetchClassOf: */; l74: /* end lookupInMethodCacheSel:class: */; break; case 196: /* bytecodePrimNextPut */ messageSelector = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (23 << 2))))) + 4) + ((20 * 2) << 2)); argumentCount = 1; /* begin normalSend */ goto commonSend; l79: /* end fetchClassOf: */; l77: /* end lookupInMethodCacheSel:class: */; break; case 197: /* bytecodePrimAtEnd */ messageSelector = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (23 << 2))))) + 4) + ((21 * 2) << 2)); argumentCount = 0; /* begin normalSend */ goto commonSend; l82: /* end fetchClassOf: */; l80: /* end lookupInMethodCacheSel:class: */; break; case 198: /* bytecodePrimEquivalent */ t2 = longAt(localSP - (1 * 4)); t1 = longAt(localSP - (0 * 4)); /* begin booleanCheat: */ t3 = byteAt(++localIP); /* begin internalPop: */ localSP -= 2 * 4; if ((t3 < 160) && (t3 > 151)) { if (t2 == t1) { goto l83; } else { /* begin jump: */ localIP += t3 - 151; goto l83; } } if (t3 == 172) { t4 = byteAt(++localIP); if (t2 == t1) { goto l83; } else { /* begin jump: */ localIP += t4; goto l83; } } localIP -= 1; if (t2 == t1) { /* begin internalPush: */ longAtput(localSP += 4, trueObj); } else { /* begin internalPush: */ longAtput(localSP += 4, falseObj); } l83: /* end booleanCheat: */; break; case 199: /* bytecodePrimClass */ /* begin externalizeIPandSP */ instructionPointer = ((int) localIP); stackPointer = ((int) localSP); primitiveClass(); /* begin internalizeIPandSP */ localIP = ((char *) instructionPointer); localSP = ((char *) stackPointer); break; case 200: /* bytecodePrimBlockCopy */ /* begin fetchClassOf: */ if (((longAt(localSP - (1 * 4))) & 1)) { t1 = longAt(((((char *) specialObjectsOop)) + 4) + (5 << 2)); goto l85; } t2 = ((((unsigned) (longAt(longAt(localSP - (1 * 4))))) >> 12) & 31) - 1; if (t2 < 0) { t1 = (longAt((longAt(localSP - (1 * 4))) - 4)) & 4294967292U; goto l85; } else { t1 = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + (t2 << 2)); goto l85; } l85: /* end fetchClassOf: */; successFlag = true; /* begin success: */ t3 = (t1 == (longAt(((((char *) specialObjectsOop)) + 4) + (11 << 2)))) || (t1 == (longAt(((((char *) specialObjectsOop)) + 4) + (10 << 2)))); successFlag = t3 && successFlag; if (successFlag) { /* begin externalizeIPandSP */ instructionPointer = ((int) localIP); stackPointer = ((int) localSP); /* begin primitiveBlockCopy */ t7 = longAt(stackPointer - (1 * 4)); if (((longAt(((((char *) t7)) + 4) + (3 << 2))) & 1)) { t4 = longAt(((((char *) t7)) + 4) + (5 << 2)); } else { t4 = t7; } /* begin sizeBitsOf: */ t9 = longAt(t4); if ((t9 & 3) == 0) { t8 = (longAt(t4 - 8)) & 4294967292U; goto l86; } else { t8 = t9 & 252; goto l86; } l86: /* end sizeBitsOf: */; t7 = null; /* begin pushRemappableOop: */ remapBuffer[remapBufferCount += 1] = t4; t5 = instantiateSmallClasssizeInBytesfill(longAt(((((char *) specialObjectsOop)) + 4) + (11 << 2)), t8, nilObj); /* begin popRemappableOop */ t10 = remapBuffer[remapBufferCount]; remapBufferCount -= 1; t4 = t10; t6 = (((instructionPointer - method) << 1) | 1); longAtput(((((char *) t5)) + 4) + (4 << 2), t6); longAtput(((((char *) t5)) + 4) + (1 << 2), t6); /* begin storeStackPointerValue:inContext: */ longAtput(((((char *) t5)) + 4) + (2 << 2), ((0 << 1) | 1)); longAtput(((((char *) t5)) + 4) + (3 << 2), longAt(stackPointer - (0 * 4))); longAtput(((((char *) t5)) + 4) + (5 << 2), t4); /* begin pop: */ stackPointer -= 2 * 4; /* begin push: */ longAtput(t11 = stackPointer + 4, t5); stackPointer = t11; /* begin internalizeIPandSP */ localIP = ((char *) instructionPointer); localSP = ((char *) stackPointer); } if (!(successFlag)) { messageSelector = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (23 << 2))))) + 4) + ((24 * 2) << 2)); argumentCount = 1; /* begin normalSend */ goto commonSend; l89: /* end fetchClassOf: */; l87: /* end lookupInMethodCacheSel:class: */; } l84: /* end case */; break; case 201: /* bytecodePrimValue */ t1 = longAt(localSP); successFlag = true; argumentCount = 0; /* begin assertClassOf:is: */ if ((t1 & 1)) { successFlag = false; goto l91; } t2 = (((unsigned) (longAt(t1))) >> 12) & 31; if (t2 == 0) { t3 = (longAt(t1 - 4)) & 4294967292U; } else { t3 = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + ((t2 - 1) << 2)); } /* begin success: */ successFlag = (t3 == (longAt(((((char *) specialObjectsOop)) + 4) + (11 << 2)))) && successFlag; l91: /* end assertClassOf:is: */; if (successFlag) { /* begin externalizeIPandSP */ instructionPointer = ((int) localIP); stackPointer = ((int) localSP); primitiveValue(); /* begin internalizeIPandSP */ localIP = ((char *) instructionPointer); localSP = ((char *) stackPointer); } if (!(successFlag)) { messageSelector = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (23 << 2))))) + 4) + ((25 * 2) << 2)); argumentCount = 0; /* begin normalSend */ goto commonSend; l94: /* end fetchClassOf: */; l92: /* end lookupInMethodCacheSel:class: */; } l90: /* end case */; break; case 202: /* bytecodePrimValueWithArg */ t1 = longAt(localSP - (1 * 4)); successFlag = true; argumentCount = 1; /* begin assertClassOf:is: */ if ((t1 & 1)) { successFlag = false; goto l96; } t2 = (((unsigned) (longAt(t1))) >> 12) & 31; if (t2 == 0) { t3 = (longAt(t1 - 4)) & 4294967292U; } else { t3 = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + ((t2 - 1) << 2)); } /* begin success: */ successFlag = (t3 == (longAt(((((char *) specialObjectsOop)) + 4) + (11 << 2)))) && successFlag; l96: /* end assertClassOf:is: */; if (successFlag) { /* begin externalizeIPandSP */ instructionPointer = ((int) localIP); stackPointer = ((int) localSP); primitiveValue(); /* begin internalizeIPandSP */ localIP = ((char *) instructionPointer); localSP = ((char *) stackPointer); } if (!(successFlag)) { messageSelector = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (23 << 2))))) + 4) + ((26 * 2) << 2)); argumentCount = 1; /* begin normalSend */ goto commonSend; l99: /* end fetchClassOf: */; l97: /* end lookupInMethodCacheSel:class: */; } l95: /* end case */; break; case 203: /* bytecodePrimDo */ messageSelector = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (23 << 2))))) + 4) + ((27 * 2) << 2)); argumentCount = 1; /* begin normalSend */ goto commonSend; l102: /* end fetchClassOf: */; l100: /* end lookupInMethodCacheSel:class: */; break; case 204: /* bytecodePrimNew */ messageSelector = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (23 << 2))))) + 4) + ((28 * 2) << 2)); argumentCount = 0; /* begin normalSend */ goto commonSend; l105: /* end fetchClassOf: */; l103: /* end lookupInMethodCacheSel:class: */; break; case 205: /* bytecodePrimNewWithArg */ messageSelector = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (23 << 2))))) + 4) + ((29 * 2) << 2)); argumentCount = 1; /* begin normalSend */ goto commonSend; l108: /* end fetchClassOf: */; l106: /* end lookupInMethodCacheSel:class: */; break; case 206: /* bytecodePrimPointX */ /* begin externalizeIPandSP */ instructionPointer = ((int) localIP); stackPointer = ((int) localSP); /* begin primitivePointX */ successFlag = true; /* begin popStack */ t3 = longAt(stackPointer); stackPointer -= 4; t1 = t3; /* begin assertClassOf:is: */ if ((t1 & 1)) { successFlag = false; goto l109; } t4 = (((unsigned) (longAt(t1))) >> 12) & 31; if (t4 == 0) { t5 = (longAt(t1 - 4)) & 4294967292U; } else { t5 = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + ((t4 - 1) << 2)); } /* begin success: */ successFlag = (t5 == (longAt(((((char *) specialObjectsOop)) + 4) + (12 << 2)))) && successFlag; l109: /* end assertClassOf:is: */; if (successFlag) { /* begin push: */ longAtput(t2 = stackPointer + 4, longAt(((((char *) t1)) + 4) + (0 << 2))); stackPointer = t2; } else { /* begin unPop: */ stackPointer += 1 * 4; failSpecialPrim(0); } /* begin internalizeIPandSP */ localIP = ((char *) instructionPointer); localSP = ((char *) stackPointer); break; case 207: /* bytecodePrimPointY */ /* begin externalizeIPandSP */ instructionPointer = ((int) localIP); stackPointer = ((int) localSP); /* begin primitivePointY */ successFlag = true; /* begin popStack */ t3 = longAt(stackPointer); stackPointer -= 4; t1 = t3; /* begin assertClassOf:is: */ if ((t1 & 1)) { successFlag = false; goto l110; } t4 = (((unsigned) (longAt(t1))) >> 12) & 31; if (t4 == 0) { t5 = (longAt(t1 - 4)) & 4294967292U; } else { t5 = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + ((t4 - 1) << 2)); } /* begin success: */ successFlag = (t5 == (longAt(((((char *) specialObjectsOop)) + 4) + (12 << 2)))) && successFlag; l110: /* end assertClassOf:is: */; if (successFlag) { /* begin push: */ longAtput(t2 = stackPointer + 4, longAt(((((char *) t1)) + 4) + (1 << 2))); stackPointer = t2; } else { /* begin unPop: */ stackPointer += 1 * 4; failSpecialPrim(0); } /* begin internalizeIPandSP */ localIP = ((char *) instructionPointer); localSP = ((char *) stackPointer); break; case 208: case 209: case 210: case 211: case 212: case 213: case 214: case 215: case 216: case 217: case 218: case 219: case 220: case 221: case 222: case 223: case 224: case 225: case 226: case 227: case 228: case 229: case 230: case 231: case 232: case 233: case 234: case 235: case 236: case 237: case 238: case 239: case 240: case 241: case 242: case 243: case 244: case 245: case 246: case 247: case 248: case 249: case 250: case 251: case 252: case 253: case 254: case 255: /* sendLiteralSelectorBytecode */ /* begin literal: */ t1 = currentBytecode & 15; messageSelector = longAt(((((char *) method)) + 4) + ((t1 + 1) << 2)); argumentCount = ((((unsigned) currentBytecode) >> 4) & 3) - 1; /* begin normalSend */ goto commonSend; l113: /* end fetchClassOf: */; l111: /* end lookupInMethodCacheSel:class: */; break; } } /* begin externalizeIPandSP */ instructionPointer = ((int) localIP); stackPointer = ((int) localSP); } int isBytes(int oop) { return ((((unsigned) (longAt(oop))) >> 8) & 15) >= 8; } int isEmptyList(int aLinkedList) { return (longAt(((((char *) aLinkedList)) + 4) + (0 << 2))) == nilObj; } int isFreeObject(int oop) { return ((longAt(oop)) & 3) == 2; } int isIntegerObject(int objectPointer) { return (objectPointer & 1) > 0; } int isIntegerValue(int intValue) { return (intValue ^ (intValue << 1)) >= 0; } int isObjectForwarded(int oop) { return ((oop & 1) == 0) && (((longAt(oop)) & 2147483648U) != 0); } int isPointers(int oop) { return ((((unsigned) (longAt(oop))) >> 8) & 15) <= 4; } int isWords(int oop) { return ((((unsigned) (longAt(oop))) >> 8) & 15) == 6; } int isWordsOrBytes(int oop) { int fmt; fmt = (((unsigned) (longAt(oop))) >> 8) & 15; return (fmt == 6) || ((fmt >= 8) && (fmt <= 11)); } int lastPointerOf(int objectPointer) { int methodHeader; int sz; int fmt; int header; int type; fmt = (((unsigned) (longAt(objectPointer))) >> 8) & 15; if (fmt < 4) { /* begin sizeBitsOfSafe: */ header = longAt(objectPointer); /* begin rightType: */ if ((header & 252) == 0) { type = 0; goto l1; } else { if ((header & 126976) == 0) { type = 1; goto l1; } else { type = 3; goto l1; } } l1: /* end rightType: */; if (type == 0) { sz = (longAt(objectPointer - 8)) & 4294967292U; goto l2; } else { sz = header & 252; goto l2; } l2: /* end sizeBitsOfSafe: */; return sz - 4; } if (fmt < 12) { return 0; } methodHeader = longAt(objectPointer + 4); return (((((unsigned) methodHeader) >> 10) & 255) * 4) + 4; } int lastPointerWhileForwarding(int oop) { int methodHeader; int size; int fwdBlock; int fmt; int header; header = longAt(oop); if ((header & 2147483648U) != 0) { fwdBlock = header & 2147483644; if (checkAssertions) { /* begin fwdBlockValidate: */ if (!((fwdBlock > endOfMemory) && ((fwdBlock <= fwdTableNext) && ((fwdBlock & 3) == 0)))) { error("invalid fwd table entry"); } } header = longAt(fwdBlock + 4); } fmt = (((unsigned) header) >> 8) & 15; if (fmt < 4) { if ((header & 3) == 0) { size = (longAt(oop - 8)) & 268435452; } else { size = header & 252; } return size - 4; } if (fmt < 12) { return 0; } methodHeader = longAt(oop + 4); return (((((unsigned) methodHeader) >> 10) & 255) * 4) + 4; } int lengthOf(int oop) { int sz; int header; int fmt; header = longAt(oop); if ((header & 3) == 0) { sz = (longAt(oop - 8)) & 4294967292U; } else { sz = header & 252; } fmt = (((unsigned) header) >> 8) & 15; if (fmt < 8) { return ((unsigned) (sz - 4)) >> 2; } else { return (sz - 4) - (fmt & 3); } } int lengthOfbaseHeaderformat(int oop, int hdr, int fmt) { int sz; if ((hdr & 3) == 0) { sz = (longAt(oop - 8)) & 4294967292U; } else { sz = hdr & 252; } if (fmt < 8) { return ((unsigned) (sz - 4)) >> 2; } else { return (sz - 4) - (fmt & 3); } } int literal(int offset) { return longAt(((((char *) method)) + 4) + ((offset + 1) << 2)); } int literalofMethod(int offset, int methodPointer) { return longAt(((((char *) methodPointer)) + 4) + ((offset + 1) << 2)); } int literalCountOf(int methodPointer) { return (((unsigned) (longAt(((((char *) methodPointer)) + 4) + (0 << 2)))) >> 10) & 255; } int literalCountOfHeader(int headerPointer) { return (((unsigned) headerPointer) >> 10) & 255; } int loadBitBltFrom(int bbObj) { int destBitsSize; int destWidth; int destHeight; int sourceBitsSize; int sourcePixPerWord; int halftoneBits; int cmSize; int sz; int header; int fmt; int sz1; int header1; int fmt1; bitBltOop = bbObj; combinationRule = fetchIntegerofObject(3, bitBltOop); if ((!successFlag) || ((combinationRule < 0) || (combinationRule > 29))) { return false; } if ((combinationRule >= 16) && (combinationRule <= 17)) { return false; } sourceForm = longAt(((((char *) bitBltOop)) + 4) + (1 << 2)); /* begin ignoreSourceOrHalftone: */ if (sourceForm == nilObj) { noSource = true; goto l3; } if (combinationRule == 0) { noSource = true; goto l3; } if (combinationRule == 5) { noSource = true; goto l3; } if (combinationRule == 10) { noSource = true; goto l3; } if (combinationRule == 15) { noSource = true; goto l3; } noSource = false; l3: /* end ignoreSourceOrHalftone: */; halftoneForm = longAt(((((char *) bitBltOop)) + 4) + (2 << 2)); /* begin ignoreSourceOrHalftone: */ if (halftoneForm == nilObj) { noHalftone = true; goto l4; } if (combinationRule == 0) { noHalftone = true; goto l4; } if (combinationRule == 5) { noHalftone = true; goto l4; } if (combinationRule == 10) { noHalftone = true; goto l4; } if (combinationRule == 15) { noHalftone = true; goto l4; } noHalftone = false; l4: /* end ignoreSourceOrHalftone: */; destForm = longAt(((((char *) bitBltOop)) + 4) + (0 << 2)); if (!((((((unsigned) (longAt(destForm))) >> 8) & 15) <= 4) && ((lengthOf(destForm)) >= 4))) { return false; } destBits = longAt(((((char *) destForm)) + 4) + (0 << 2)); destBitsSize = byteLengthOf(destBits); destWidth = fetchIntegerofObject(1, destForm); destHeight = fetchIntegerofObject(2, destForm); if (!((destWidth >= 0) && (destHeight >= 0))) { return false; } destPixSize = fetchIntegerofObject(3, destForm); pixPerWord = 32 / destPixSize; destRaster = (destWidth + (pixPerWord - 1)) / pixPerWord; if (!((isWordsOrBytes(destBits)) && (destBitsSize == ((destRaster * destHeight) * 4)))) { return false; } destX = fetchIntegerOrTruncFloatofObject(4, bitBltOop); destY = fetchIntegerOrTruncFloatofObject(5, bitBltOop); width = fetchIntegerOrTruncFloatofObject(6, bitBltOop); height = fetchIntegerOrTruncFloatofObject(7, bitBltOop); if (!successFlag) { return false; } if (noSource) { sourceX = sourceY = 0; } else { if (!((((((unsigned) (longAt(sourceForm))) >> 8) & 15) <= 4) && ((lengthOf(sourceForm)) >= 4))) { return false; } sourceBits = longAt(((((char *) sourceForm)) + 4) + (0 << 2)); sourceBitsSize = byteLengthOf(sourceBits); srcWidth = fetchIntegerOrTruncFloatofObject(1, sourceForm); srcHeight = fetchIntegerOrTruncFloatofObject(2, sourceForm); if (!((srcWidth >= 0) && (srcHeight >= 0))) { return false; } sourcePixSize = fetchIntegerofObject(3, sourceForm); sourcePixPerWord = 32 / sourcePixSize; sourceRaster = (srcWidth + (sourcePixPerWord - 1)) / sourcePixPerWord; if (!((isWordsOrBytes(sourceBits)) && (sourceBitsSize == ((sourceRaster * srcHeight) * 4)))) { return false; } colorMap = longAt(((((char *) bitBltOop)) + 4) + (14 << 2)); if (!(colorMap == nilObj)) { if (((((unsigned) (longAt(colorMap))) >> 8) & 15) == 6) { /* begin lengthOf: */ header = longAt(colorMap); if ((header & 3) == 0) { sz = (longAt(colorMap - 8)) & 4294967292U; } else { sz = header & 252; } fmt = (((unsigned) header) >> 8) & 15; if (fmt < 8) { cmSize = ((unsigned) (sz - 4)) >> 2; goto l1; } else { cmSize = (sz - 4) - (fmt & 3); goto l1; } l1: /* end lengthOf: */; cmBitsPerColor = 0; if (cmSize == 512) { cmBitsPerColor = 3; } if (cmSize == 4096) { cmBitsPerColor = 4; } if (cmSize == 32768) { cmBitsPerColor = 5; } if (primitiveIndex != 147) { if (sourcePixSize <= 8) { if (!(cmSize == (1 << sourcePixSize))) { return false; } } else { if (cmBitsPerColor == 0) { return false; } } } } else { return false; } } sourceX = fetchIntegerOrTruncFloatofObject(8, bitBltOop); sourceY = fetchIntegerOrTruncFloatofObject(9, bitBltOop); } if (!(noHalftone)) { if ((((((unsigned) (longAt(halftoneForm))) >> 8) & 15) <= 4) && ((lengthOf(halftoneForm)) >= 4)) { halftoneBits = longAt(((((char *) halftoneForm)) + 4) + (0 << 2)); halftoneHeight = fetchIntegerofObject(2, halftoneForm); if (!(((((unsigned) (longAt(halftoneBits))) >> 8) & 15) == 6)) { noHalftone = true; } } else { if (!((!(((((unsigned) (longAt(halftoneForm))) >> 8) & 15) <= 4)) && (((((unsigned) (longAt(halftoneForm))) >> 8) & 15) == 6))) { return false; } halftoneBits = halftoneForm; /* begin lengthOf: */ header1 = longAt(halftoneBits); if ((header1 & 3) == 0) { sz1 = (longAt(halftoneBits - 8)) & 4294967292U; } else { sz1 = header1 & 252; } fmt1 = (((unsigned) header1) >> 8) & 15; if (fmt1 < 8) { halftoneHeight = ((unsigned) (sz1 - 4)) >> 2; goto l2; } else { halftoneHeight = (sz1 - 4) - (fmt1 & 3); goto l2; } l2: /* end lengthOf: */; } halftoneBase = halftoneBits + 4; } clipX = fetchIntegerOrTruncFloatofObject(10, bitBltOop); clipY = fetchIntegerOrTruncFloatofObject(11, bitBltOop); clipWidth = fetchIntegerOrTruncFloatofObject(12, bitBltOop); clipHeight = fetchIntegerOrTruncFloatofObject(13, bitBltOop); if (!successFlag) { return false; } if (clipX < 0) { clipWidth += clipX; clipX = 0; } if (clipY < 0) { clipHeight += clipY; clipY = 0; } if ((clipX + clipWidth) > destWidth) { clipWidth = destWidth - clipX; } if ((clipY + clipHeight) > destHeight) { clipHeight = destHeight - clipY; } return true; } int loadInitialContext(void) { int sched; int proc; int activeCntx; int tmp; sched = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (3 << 2))))) + 4) + (1 << 2)); proc = longAt(((((char *) sched)) + 4) + (1 << 2)); activeContext = longAt(((((char *) proc)) + 4) + (1 << 2)); if (activeContext < youngStart) { beRootIfOld(activeContext); } /* begin fetchContextRegisters: */ activeCntx = activeContext; tmp = longAt(((((char *) activeCntx)) + 4) + (3 << 2)); if ((tmp & 1)) { tmp = longAt(((((char *) activeCntx)) + 4) + (5 << 2)); if (tmp < youngStart) { beRootIfOld(tmp); } } else { tmp = activeCntx; } theHomeContext = tmp; receiver = longAt(((((char *) tmp)) + 4) + (5 << 2)); method = longAt(((((char *) tmp)) + 4) + (3 << 2)); tmp = ((longAt(((((char *) activeCntx)) + 4) + (1 << 2))) >> 1); instructionPointer = ((method + tmp) + 4) - 2; tmp = ((longAt(((((char *) activeCntx)) + 4) + (2 << 2))) >> 1); stackPointer = (activeCntx + 4) + (((6 + tmp) - 1) * 4); reclaimableContextCount = 0; } int loadScannerFromstartstopstringrightXstopArraydisplayFlag(int bbObj, int start, int stop, int string, int rightX, int stopArray, int displayFlag) { int successValue; int successValue1; int successValue2; scanStart = start; scanStop = stop; scanString = string; scanRightX = rightX; scanStopArray = stopArray; scanDisplayFlag = displayFlag; /* begin success: */ successValue1 = (((((unsigned) (longAt(scanStopArray))) >> 8) & 15) <= 4) && ((lengthOf(scanStopArray)) >= 1); successFlag = successValue1 && successFlag; scanXTable = longAt(((((char *) bbObj)) + 4) + (16 << 2)); /* begin success: */ successValue2 = (((((unsigned) (longAt(scanXTable))) >> 8) & 15) <= 4) && ((lengthOf(scanXTable)) >= 1); successFlag = successValue2 && successFlag; /* begin storeInteger:ofObject:withValue: */ if ((0 ^ (0 << 1)) >= 0) { longAtput(((((char *) bbObj)) + 4) + (6 << 2), ((0 << 1) | 1)); } else { primitiveFail(); } /* begin storeInteger:ofObject:withValue: */ if ((0 ^ (0 << 1)) >= 0) { longAtput(((((char *) bbObj)) + 4) + (8 << 2), ((0 << 1) | 1)); } else { primitiveFail(); } if (scanDisplayFlag) { /* begin success: */ successValue = loadBitBltFrom(bbObj); successFlag = successValue && successFlag; } else { bitBltOop = bbObj; destX = fetchIntegerOrTruncFloatofObject(4, bbObj); } return !(!successFlag); } int lookupInMethodCacheSelclass(int selector, int class) { int probe; int p; int hash; hash = ((unsigned) (selector ^ class)) >> 2; probe = (hash & 511) + 1; for (p = 1; p <= 3; p += 1) { if (((methodCache[probe]) == selector) && ((methodCache[probe + 512]) == class)) { newMethod = methodCache[probe + (512 * 2)]; primitiveIndex = methodCache[probe + (512 * 3)]; return true; } probe = ((((unsigned) hash) >> p) & 511) + 1; } return false; } int lookupMethodInClass(int class) { int dictionary; int currentClass; int found; int rclass; int oop; int argumentArray; int message; int oop1; int valuePointer; int toIndex; int fromIndex; int lastFrom; int sp; int methodArray; int mask; int wrapAround; int nextSelector; int index; int length; int sz; int primBits; int header; currentClass = class; while (currentClass != nilObj) { dictionary = longAt(((((char *) currentClass)) + 4) + (1 << 2)); /* begin lookupMethodInDictionary: */ /* begin fetchWordLengthOf: */ /* begin sizeBitsOf: */ header = longAt(dictionary); if ((header & 3) == 0) { sz = (longAt(dictionary - 8)) & 4294967292U; goto l2; } else { sz = header & 252; goto l2; } l2: /* end sizeBitsOf: */; length = ((unsigned) (sz - 4)) >> 2; mask = (length - 2) - 1; if ((messageSelector & 1)) { index = (mask & ((messageSelector >> 1))) + 2; } else { index = (mask & ((((unsigned) (longAt(messageSelector))) >> 17) & 4095)) + 2; } wrapAround = false; while (true) { nextSelector = longAt(((((char *) dictionary)) + 4) + (index << 2)); if (nextSelector == nilObj) { found = false; goto l3; } if (nextSelector == messageSelector) { methodArray = longAt(((((char *) dictionary)) + 4) + (1 << 2)); newMethod = longAt(((((char *) methodArray)) + 4) + ((index - 2) << 2)); /* begin primitiveIndexOf: */ primBits = (((unsigned) (longAt(((((char *) newMethod)) + 4) + (0 << 2)))) >> 1) & 805306879; if (primBits > 511) { primitiveIndex = (primBits & 511) + (((unsigned) primBits) >> 19); goto l1; } else { primitiveIndex = primBits; goto l1; } l1: /* end primitiveIndexOf: */; found = true; goto l3; } index += 1; if (index == length) { if (wrapAround) { found = false; goto l3; } wrapAround = true; index = 2; } } l3: /* end lookupMethodInDictionary: */; if (found) { return currentClass; } currentClass = longAt(((((char *) currentClass)) + 4) + (0 << 2)); } if (messageSelector == (longAt(((((char *) specialObjectsOop)) + 4) + (20 << 2)))) { error("Recursive not understood error encountered"); } /* begin pushRemappableOop: */ remapBuffer[remapBufferCount += 1] = class; /* begin createActualMessage */ argumentArray = instantiateClassindexableSize(longAt(((((char *) specialObjectsOop)) + 4) + (7 << 2)), argumentCount); /* begin pushRemappableOop: */ remapBuffer[remapBufferCount += 1] = argumentArray; message = instantiateClassindexableSize(longAt(((((char *) specialObjectsOop)) + 4) + (15 << 2)), 0); /* begin popRemappableOop */ oop1 = remapBuffer[remapBufferCount]; remapBufferCount -= 1; argumentArray = oop1; if (argumentArray < youngStart) { beRootIfOld(argumentArray); } /* begin storePointer:ofObject:withValue: */ valuePointer = messageSelector; if (message < youngStart) { possibleRootStoreIntovalue(message, valuePointer); } longAtput(((((char *) message)) + 4) + (0 << 2), valuePointer); /* begin storePointer:ofObject:withValue: */ if (message < youngStart) { possibleRootStoreIntovalue(message, argumentArray); } longAtput(((((char *) message)) + 4) + (1 << 2), argumentArray); /* begin transfer:fromIndex:ofObject:toIndex:ofObject: */ fromIndex = activeContext + (((((unsigned) ((stackPointer - activeContext) - 4)) >> 2) - (argumentCount - 1)) * 4); toIndex = argumentArray + (0 * 4); lastFrom = fromIndex + (argumentCount * 4); while (fromIndex < lastFrom) { fromIndex += 4; toIndex += 4; longAtput(toIndex, longAt(fromIndex)); } /* begin pop: */ stackPointer -= argumentCount * 4; /* begin push: */ longAtput(sp = stackPointer + 4, message); stackPointer = sp; argumentCount = 1; /* begin popRemappableOop */ oop = remapBuffer[remapBufferCount]; remapBufferCount -= 1; rclass = oop; messageSelector = longAt(((((char *) specialObjectsOop)) + 4) + (20 << 2)); return lookupMethodInClass(rclass); } int lookupMethodInDictionary(int dictionary) { int methodArray; int mask; int wrapAround; int nextSelector; int index; int length; int sz; int primBits; int header; /* begin fetchWordLengthOf: */ /* begin sizeBitsOf: */ header = longAt(dictionary); if ((header & 3) == 0) { sz = (longAt(dictionary - 8)) & 4294967292U; goto l2; } else { sz = header & 252; goto l2; } l2: /* end sizeBitsOf: */; length = ((unsigned) (sz - 4)) >> 2; mask = (length - 2) - 1; if ((messageSelector & 1)) { index = (mask & ((messageSelector >> 1))) + 2; } else { index = (mask & ((((unsigned) (longAt(messageSelector))) >> 17) & 4095)) + 2; } wrapAround = false; while (true) { nextSelector = longAt(((((char *) dictionary)) + 4) + (index << 2)); if (nextSelector == nilObj) { return false; } if (nextSelector == messageSelector) { methodArray = longAt(((((char *) dictionary)) + 4) + (1 << 2)); newMethod = longAt(((((char *) methodArray)) + 4) + ((index - 2) << 2)); /* begin primitiveIndexOf: */ primBits = (((unsigned) (longAt(((((char *) newMethod)) + 4) + (0 << 2)))) >> 1) & 805306879; if (primBits > 511) { primitiveIndex = (primBits & 511) + (((unsigned) primBits) >> 19); goto l1; } else { primitiveIndex = primBits; goto l1; } l1: /* end primitiveIndexOf: */; return true; } index += 1; if (index == length) { if (wrapAround) { return false; } wrapAround = true; index = 2; } } } int lowestFreeAfter(int chunk) { int oopHeader; int oop; int oopHeaderType; int oopSize; int extra; int extra1; int type; int extra2; int type1; int extra3; /* begin oopFromChunk: */ /* begin extraHeaderBytes: */ type1 = (longAt(chunk)) & 3; if (type1 > 1) { extra3 = 0; } else { if (type1 == 1) { extra3 = 4; } else { extra3 = 8; } } extra1 = extra3; oop = chunk + extra1; while (oop < endOfMemory) { oopHeader = longAt(oop); oopHeaderType = oopHeader & 3; if (oopHeaderType == 2) { return oop; } else { if (oopHeaderType == 0) { oopSize = (longAt(oop - 8)) & 4294967292U; } else { oopSize = oopHeader & 252; } } /* begin oopFromChunk: */ /* begin extraHeaderBytes: */ type = (longAt(oop + oopSize)) & 3; if (type > 1) { extra2 = 0; } else { if (type == 1) { extra2 = 4; } else { extra2 = 8; } } extra = extra2; oop = (oop + oopSize) + extra; } error("expected to find at least one free object"); } int makeDirEntryNamesizecreateDatemodDateisDirfileSize(char *entryName, int entryNameSize, int createDate, int modifiedDate, int dirFlag, int fileSize) { int modDateOop; int i; int nameString; int createDateOop; int results; int valuePointer; int valuePointer1; int oop; int oop1; int oop2; int oop3; int oop4; int oop5; int oop6; int oop7; /* begin pushRemappableOop: */ oop = instantiateClassindexableSize(longAt(((((char *) specialObjectsOop)) + 4) + (7 << 2)), 5); remapBuffer[remapBufferCount += 1] = oop; /* begin pushRemappableOop: */ oop1 = instantiateClassindexableSize(longAt(((((char *) specialObjectsOop)) + 4) + (6 << 2)), entryNameSize); remapBuffer[remapBufferCount += 1] = oop1; /* begin pushRemappableOop: */ oop2 = positive32BitIntegerFor(createDate); remapBuffer[remapBufferCount += 1] = oop2; /* begin pushRemappableOop: */ oop3 = positive32BitIntegerFor(modifiedDate); remapBuffer[remapBufferCount += 1] = oop3; /* begin popRemappableOop */ oop4 = remapBuffer[remapBufferCount]; remapBufferCount -= 1; modDateOop = oop4; /* begin popRemappableOop */ oop5 = remapBuffer[remapBufferCount]; remapBufferCount -= 1; createDateOop = oop5; /* begin popRemappableOop */ oop6 = remapBuffer[remapBufferCount]; remapBufferCount -= 1; nameString = oop6; /* begin popRemappableOop */ oop7 = remapBuffer[remapBufferCount]; remapBufferCount -= 1; results = oop7; for (i = 0; i <= (entryNameSize - 1); i += 1) { byteAtput(((((char *) nameString)) + 4) + i, entryName[i]); } /* begin storePointer:ofObject:withValue: */ if (results < youngStart) { possibleRootStoreIntovalue(results, nameString); } longAtput(((((char *) results)) + 4) + (0 << 2), nameString); /* begin storePointer:ofObject:withValue: */ if (results < youngStart) { possibleRootStoreIntovalue(results, createDateOop); } longAtput(((((char *) results)) + 4) + (1 << 2), createDateOop); /* begin storePointer:ofObject:withValue: */ if (results < youngStart) { possibleRootStoreIntovalue(results, modDateOop); } longAtput(((((char *) results)) + 4) + (2 << 2), modDateOop); if (dirFlag) { /* begin storePointer:ofObject:withValue: */ valuePointer = trueObj; if (results < youngStart) { possibleRootStoreIntovalue(results, valuePointer); } longAtput(((((char *) results)) + 4) + (3 << 2), valuePointer); } else { /* begin storePointer:ofObject:withValue: */ valuePointer1 = falseObj; if (results < youngStart) { possibleRootStoreIntovalue(results, valuePointer1); } longAtput(((((char *) results)) + 4) + (3 << 2), valuePointer1); } /* begin storePointer:ofObject:withValue: */ if (results < youngStart) { possibleRootStoreIntovalue(results, ((fileSize << 1) | 1)); } longAtput(((((char *) results)) + 4) + (4 << 2), ((fileSize << 1) | 1)); return results; } int makePointwithxValueyValue(int xValue, int yValue) { int pointResult; pointResult = instantiateSmallClasssizeInBytesfill(longAt(((((char *) specialObjectsOop)) + 4) + (12 << 2)), 12, nilObj); /* begin storePointer:ofObject:withValue: */ if (pointResult < youngStart) { possibleRootStoreIntovalue(pointResult, ((xValue << 1) | 1)); } longAtput(((((char *) pointResult)) + 4) + (0 << 2), ((xValue << 1) | 1)); /* begin storePointer:ofObject:withValue: */ if (pointResult < youngStart) { possibleRootStoreIntovalue(pointResult, ((yValue << 1) | 1)); } longAtput(((((char *) pointResult)) + 4) + (1 << 2), ((yValue << 1) | 1)); return pointResult; } int mapInterpreterOops(void) { int i; int oop; int i1; nilObj = remap(nilObj); falseObj = remap(falseObj); trueObj = remap(trueObj); specialObjectsOop = remap(specialObjectsOop); stackPointer -= activeContext; activeContext = remap(activeContext); stackPointer += activeContext; theHomeContext = remap(theHomeContext); instructionPointer -= method; method = remap(method); instructionPointer += method; receiver = remap(receiver); messageSelector = remap(messageSelector); newMethod = remap(newMethod); for (i = 1; i <= remapBufferCount; i += 1) { oop = remapBuffer[i]; if (!((oop & 1))) { remapBuffer[i] = (remap(oop)); } } /* begin flushMethodCache */ for (i1 = 1; i1 <= 2048; i1 += 1) { methodCache[i1] = 0; } mcProbe = 0; } int mapPointersInObjectsFromto(int memStart, int memEnd) { int oop; int i; int fwdBlock; int fieldOffset; int fieldOop; int newOop; int fwdBlock1; int fieldOffset1; int fieldOop1; int newOop1; int i2; int oop1; int i1; int extra; int type; int extra1; int methodHeader; int size; int fwdBlock2; int fmt; int header; int newClassOop; int fwdBlock3; int classHeader; int classOop; int newClassHeader; int methodHeader1; int size1; int fwdBlock4; int fmt1; int header1; int newClassOop1; int fwdBlock5; int classHeader1; int classOop1; int newClassHeader1; int sz; int fwdBlock6; int realHeader; int header2; int extra3; int type2; int extra12; int sz1; int header11; int extra2; int type1; int extra11; /* begin mapInterpreterOops */ nilObj = remap(nilObj); falseObj = remap(falseObj); trueObj = remap(trueObj); specialObjectsOop = remap(specialObjectsOop); stackPointer -= activeContext; activeContext = remap(activeContext); stackPointer += activeContext; theHomeContext = remap(theHomeContext); instructionPointer -= method; method = remap(method); instructionPointer += method; receiver = remap(receiver); messageSelector = remap(messageSelector); newMethod = remap(newMethod); for (i2 = 1; i2 <= remapBufferCount; i2 += 1) { oop1 = remapBuffer[i2]; if (!((oop1 & 1))) { remapBuffer[i2] = (remap(oop1)); } } /* begin flushMethodCache */ for (i1 = 1; i1 <= 2048; i1 += 1) { methodCache[i1] = 0; } mcProbe = 0; for (i = 1; i <= rootTableCount; i += 1) { oop = rootTable[i]; if ((oop < memStart) || (oop >= memEnd)) { /* begin remapFieldsAndClassOf: */ /* begin lastPointerWhileForwarding: */ header = longAt(oop); if ((header & 2147483648U) != 0) { fwdBlock2 = header & 2147483644; if (checkAssertions) { /* begin fwdBlockValidate: */ if (!((fwdBlock2 > endOfMemory) && ((fwdBlock2 <= fwdTableNext) && ((fwdBlock2 & 3) == 0)))) { error("invalid fwd table entry"); } } header = longAt(fwdBlock2 + 4); } fmt = (((unsigned) header) >> 8) & 15; if (fmt < 4) { if ((header & 3) == 0) { size = (longAt(oop - 8)) & 268435452; } else { size = header & 252; } fieldOffset = size - 4; goto l1; } if (fmt < 12) { fieldOffset = 0; goto l1; } methodHeader = longAt(oop + 4); fieldOffset = (((((unsigned) methodHeader) >> 10) & 255) * 4) + 4; l1: /* end lastPointerWhileForwarding: */; while (fieldOffset >= 4) { fieldOop = longAt(oop + fieldOffset); if (((fieldOop & 1) == 0) && (((longAt(fieldOop)) & 2147483648U) != 0)) { fwdBlock = (longAt(fieldOop)) & 2147483644; if (checkAssertions) { /* begin fwdBlockValidate: */ if (!((fwdBlock > endOfMemory) && ((fwdBlock <= fwdTableNext) && ((fwdBlock & 3) == 0)))) { error("invalid fwd table entry"); } } newOop = longAt(fwdBlock); longAtput(oop + fieldOffset, newOop); if ((oop < youngStart) && (newOop >= youngStart)) { beRootWhileForwarding(oop); } } fieldOffset -= 4; } /* begin remapClassOf: */ if (((longAt(oop)) & 3) == 3) { goto l2; } classHeader = longAt(oop - 4); classOop = classHeader & 4294967292U; if (((classOop & 1) == 0) && (((longAt(classOop)) & 2147483648U) != 0)) { fwdBlock3 = (longAt(classOop)) & 2147483644; if (checkAssertions) { /* begin fwdBlockValidate: */ if (!((fwdBlock3 > endOfMemory) && ((fwdBlock3 <= fwdTableNext) && ((fwdBlock3 & 3) == 0)))) { error("invalid fwd table entry"); } } newClassOop = longAt(fwdBlock3); newClassHeader = newClassOop | (classHeader & 3); longAtput(oop - 4, newClassHeader); if ((oop < youngStart) && (newClassOop >= youngStart)) { beRootWhileForwarding(oop); } } l2: /* end remapClassOf: */; } } /* begin oopFromChunk: */ /* begin extraHeaderBytes: */ type = (longAt(memStart)) & 3; if (type > 1) { extra1 = 0; } else { if (type == 1) { extra1 = 4; } else { extra1 = 8; } } extra = extra1; oop = memStart + extra; while (oop < memEnd) { if (!(((longAt(oop)) & 3) == 2)) { /* begin remapFieldsAndClassOf: */ /* begin lastPointerWhileForwarding: */ header1 = longAt(oop); if ((header1 & 2147483648U) != 0) { fwdBlock4 = header1 & 2147483644; if (checkAssertions) { /* begin fwdBlockValidate: */ if (!((fwdBlock4 > endOfMemory) && ((fwdBlock4 <= fwdTableNext) && ((fwdBlock4 & 3) == 0)))) { error("invalid fwd table entry"); } } header1 = longAt(fwdBlock4 + 4); } fmt1 = (((unsigned) header1) >> 8) & 15; if (fmt1 < 4) { if ((header1 & 3) == 0) { size1 = (longAt(oop - 8)) & 268435452; } else { size1 = header1 & 252; } fieldOffset1 = size1 - 4; goto l3; } if (fmt1 < 12) { fieldOffset1 = 0; goto l3; } methodHeader1 = longAt(oop + 4); fieldOffset1 = (((((unsigned) methodHeader1) >> 10) & 255) * 4) + 4; l3: /* end lastPointerWhileForwarding: */; while (fieldOffset1 >= 4) { fieldOop1 = longAt(oop + fieldOffset1); if (((fieldOop1 & 1) == 0) && (((longAt(fieldOop1)) & 2147483648U) != 0)) { fwdBlock1 = (longAt(fieldOop1)) & 2147483644; if (checkAssertions) { /* begin fwdBlockValidate: */ if (!((fwdBlock1 > endOfMemory) && ((fwdBlock1 <= fwdTableNext) && ((fwdBlock1 & 3) == 0)))) { error("invalid fwd table entry"); } } newOop1 = longAt(fwdBlock1); longAtput(oop + fieldOffset1, newOop1); if ((oop < youngStart) && (newOop1 >= youngStart)) { beRootWhileForwarding(oop); } } fieldOffset1 -= 4; } /* begin remapClassOf: */ if (((longAt(oop)) & 3) == 3) { goto l4; } classHeader1 = longAt(oop - 4); classOop1 = classHeader1 & 4294967292U; if (((classOop1 & 1) == 0) && (((longAt(classOop1)) & 2147483648U) != 0)) { fwdBlock5 = (longAt(classOop1)) & 2147483644; if (checkAssertions) { /* begin fwdBlockValidate: */ if (!((fwdBlock5 > endOfMemory) && ((fwdBlock5 <= fwdTableNext) && ((fwdBlock5 & 3) == 0)))) { error("invalid fwd table entry"); } } newClassOop1 = longAt(fwdBlock5); newClassHeader1 = newClassOop1 | (classHeader1 & 3); longAtput(oop - 4, newClassHeader1); if ((oop < youngStart) && (newClassOop1 >= youngStart)) { beRootWhileForwarding(oop); } } l4: /* end remapClassOf: */; } /* begin objectAfterWhileForwarding: */ header2 = longAt(oop); if ((header2 & 2147483648U) == 0) { /* begin objectAfter: */ if (checkAssertions) { if (oop >= endOfMemory) { error("no objects after the end of memory"); } } if (((longAt(oop)) & 3) == 2) { sz1 = (longAt(oop)) & 536870908; } else { /* begin sizeBitsOf: */ header11 = longAt(oop); if ((header11 & 3) == 0) { sz1 = (longAt(oop - 8)) & 4294967292U; goto l5; } else { sz1 = header11 & 252; goto l5; } l5: /* end sizeBitsOf: */; } /* begin oopFromChunk: */ /* begin extraHeaderBytes: */ type1 = (longAt(oop + sz1)) & 3; if (type1 > 1) { extra11 = 0; } else { if (type1 == 1) { extra11 = 4; } else { extra11 = 8; } } extra2 = extra11; oop = (oop + sz1) + extra2; goto l6; } fwdBlock6 = header2 & 2147483644; if (checkAssertions) { /* begin fwdBlockValidate: */ if (!((fwdBlock6 > endOfMemory) && ((fwdBlock6 <= fwdTableNext) && ((fwdBlock6 & 3) == 0)))) { error("invalid fwd table entry"); } } realHeader = longAt(fwdBlock6 + 4); if ((realHeader & 3) == 0) { sz = (longAt(oop - 8)) & 268435452; } else { sz = realHeader & 252; } /* begin oopFromChunk: */ /* begin extraHeaderBytes: */ type2 = (longAt(oop + sz)) & 3; if (type2 > 1) { extra12 = 0; } else { if (type2 == 1) { extra12 = 4; } else { extra12 = 8; } } extra3 = extra12; oop = (oop + sz) + extra3; l6: /* end objectAfterWhileForwarding: */; } } int markAndTrace(int oop) { int action; int lastFieldOffset; int header; int header1; int type; int oop1; int lastFieldOffset1; int header2; int typeBits; int childType; int methodHeader; int sz; int fmt; int methodHeader1; int sz1; int fmt1; int header3; int type1; int header4; int type2; header = longAt(oop); header = (header & 4294967292U) | 2; if (oop >= youngStart) { header = header | 2147483648U; } longAtput(oop, header); parentField = 3; child = oop; /* begin lastPointerOf: */ fmt1 = (((unsigned) (longAt(oop))) >> 8) & 15; if (fmt1 < 4) { /* begin sizeBitsOfSafe: */ header3 = longAt(oop); /* begin rightType: */ if ((header3 & 252) == 0) { type1 = 0; goto l9; } else { if ((header3 & 126976) == 0) { type1 = 1; goto l9; } else { type1 = 3; goto l9; } } l9: /* end rightType: */; if (type1 == 0) { sz1 = (longAt(oop - 8)) & 4294967292U; goto l10; } else { sz1 = header3 & 252; goto l10; } l10: /* end sizeBitsOfSafe: */; lastFieldOffset = sz1 - 4; goto l8; } if (fmt1 < 12) { lastFieldOffset = 0; goto l8; } methodHeader1 = longAt(oop + 4); lastFieldOffset = (((((unsigned) methodHeader1) >> 10) & 255) * 4) + 4; l8: /* end lastPointerOf: */; field = oop + lastFieldOffset; action = 1; while (!(action == 4)) { if (action == 1) { /* begin startField */ child = longAt(field); typeBits = child & 3; if ((typeBits & 1) == 1) { field -= 4; action = 1; goto l6; } if (typeBits == 0) { longAtput(field, parentField); parentField = field; action = 2; goto l6; } if (typeBits == 2) { if ((child & 126976) != 0) { child = child & 4294967292U; /* begin rightType: */ if ((child & 252) == 0) { childType = 0; goto l5; } else { if ((child & 126976) == 0) { childType = 1; goto l5; } else { childType = 3; goto l5; } } l5: /* end rightType: */; longAtput(field, child | childType); action = 3; goto l6; } else { child = longAt(field - 4); child = child & 4294967292U; longAtput(field - 4, parentField); parentField = (field - 4) | 1; action = 2; goto l6; } } l6: /* end startField */; } if (action == 2) { /* begin startObj */ oop1 = child; if (oop1 < youngStart) { field = oop1; action = 3; goto l2; } header2 = longAt(oop1); if ((header2 & 2147483648U) == 0) { header2 = header2 & 4294967292U; header2 = (header2 | 2147483648U) | 2; longAtput(oop1, header2); /* begin lastPointerOf: */ fmt = (((unsigned) (longAt(oop1))) >> 8) & 15; if (fmt < 4) { /* begin sizeBitsOfSafe: */ header4 = longAt(oop1); /* begin rightType: */ if ((header4 & 252) == 0) { type2 = 0; goto l11; } else { if ((header4 & 126976) == 0) { type2 = 1; goto l11; } else { type2 = 3; goto l11; } } l11: /* end rightType: */; if (type2 == 0) { sz = (longAt(oop1 - 8)) & 4294967292U; goto l12; } else { sz = header4 & 252; goto l12; } l12: /* end sizeBitsOfSafe: */; lastFieldOffset1 = sz - 4; goto l7; } if (fmt < 12) { lastFieldOffset1 = 0; goto l7; } methodHeader = longAt(oop1 + 4); lastFieldOffset1 = (((((unsigned) methodHeader) >> 10) & 255) * 4) + 4; l7: /* end lastPointerOf: */; field = oop1 + lastFieldOffset1; action = 1; goto l2; } else { field = oop1; action = 3; goto l2; } l2: /* end startObj */; } if (action == 3) { /* begin upward */ if ((parentField & 1) == 1) { if (parentField == 3) { header1 = (longAt(field)) & 4294967292U; /* begin rightType: */ if ((header1 & 252) == 0) { type = 0; goto l3; } else { if ((header1 & 126976) == 0) { type = 1; goto l3; } else { type = 3; goto l3; } } l3: /* end rightType: */; longAtput(field, header1 + type); action = 4; goto l1; } else { child = field; field = parentField - 1; parentField = longAt(field); header1 = longAt(field + 4); /* begin rightType: */ if ((header1 & 252) == 0) { type = 0; goto l4; } else { if ((header1 & 126976) == 0) { type = 1; goto l4; } else { type = 3; goto l4; } } l4: /* end rightType: */; longAtput(field, child + type); field += 4; header1 = header1 & 4294967292U; longAtput(field, header1 + type); action = 3; goto l1; } } else { child = field; field = parentField; parentField = longAt(field); longAtput(field, child); field -= 4; action = 1; goto l1; } l1: /* end upward */; } } } int markAndTraceInterpreterOops(void) { int i; int oop; markAndTrace(specialObjectsOop); markAndTrace(activeContext); markAndTrace(messageSelector); markAndTrace(newMethod); for (i = 1; i <= remapBufferCount; i += 1) { oop = remapBuffer[i]; if (!((oop & 1))) { markAndTrace(oop); } } } int markPhase(void) { int oop; int i; int i1; int oop1; freeSmallContexts = 1; freeLargeContexts = 1; /* begin markAndTraceInterpreterOops */ markAndTrace(specialObjectsOop); markAndTrace(activeContext); markAndTrace(messageSelector); markAndTrace(newMethod); for (i1 = 1; i1 <= remapBufferCount; i1 += 1) { oop1 = remapBuffer[i1]; if (!((oop1 & 1))) { markAndTrace(oop1); } } for (i = 1; i <= rootTableCount; i += 1) { oop = rootTable[i]; if (!((oop & 1))) { markAndTrace(oop); } } } int mergewith(int sourceWord, int destinationWord) { int (*mergeFnwith)(int, int); mergeFnwith = ((int (*)(int, int)) (opTable[combinationRule + 1])); mergeFnwith; return mergeFnwith(sourceWord, destinationWord); } int methodClassOf(int methodPointer) { return longAt(((((char *) (longAt(((((char *) methodPointer)) + 4) + (((((((unsigned) (longAt(((((char *) methodPointer)) + 4) + (0 << 2)))) >> 10) & 255) - 1) + 1) << 2))))) + 4) + (1 << 2)); } int netAddressToInt(int oop) { int sz; int sz1; int header; int fmt; int ccIndex; int cl; /* begin assertClassOf:is: */ if ((oop & 1)) { successFlag = false; goto l2; } ccIndex = (((unsigned) (longAt(oop))) >> 12) & 31; if (ccIndex == 0) { cl = (longAt(oop - 4)) & 4294967292U; } else { cl = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + ((ccIndex - 1) << 2)); } /* begin success: */ successFlag = (cl == (longAt(((((char *) specialObjectsOop)) + 4) + (26 << 2)))) && successFlag; l2: /* end assertClassOf:is: */; if (successFlag) { /* begin lengthOf: */ header = longAt(oop); if ((header & 3) == 0) { sz1 = (longAt(oop - 8)) & 4294967292U; } else { sz1 = header & 252; } fmt = (((unsigned) header) >> 8) & 15; if (fmt < 8) { sz = ((unsigned) (sz1 - 4)) >> 2; goto l1; } else { sz = (sz1 - 4) - (fmt & 3); goto l1; } l1: /* end lengthOf: */; if (!(sz == 4)) { return primitiveFail(); } } if (successFlag) { return (((byteAt(((((char *) oop)) + 4) + 3)) + ((byteAt(((((char *) oop)) + 4) + 2)) << 8)) + ((byteAt(((((char *) oop)) + 4) + 1)) << 16)) + ((byteAt(((((char *) oop)) + 4) + 0)) << 24); } } int newActiveContext(int aContext) { int tmp; /* begin storeContextRegisters: */ longAtput(((((char *) activeContext)) + 4) + (1 << 2), ((((instructionPointer - method) - (4 - 2)) << 1) | 1)); longAtput(((((char *) activeContext)) + 4) + (2 << 2), (((((((unsigned) ((stackPointer - activeContext) - 4)) >> 2) - 6) + 1) << 1) | 1)); if (aContext < youngStart) { beRootIfOld(aContext); } activeContext = aContext; /* begin fetchContextRegisters: */ tmp = longAt(((((char *) aContext)) + 4) + (3 << 2)); if ((tmp & 1)) { tmp = longAt(((((char *) aContext)) + 4) + (5 << 2)); if (tmp < youngStart) { beRootIfOld(tmp); } } else { tmp = aContext; } theHomeContext = tmp; receiver = longAt(((((char *) tmp)) + 4) + (5 << 2)); method = longAt(((((char *) tmp)) + 4) + (3 << 2)); tmp = ((longAt(((((char *) aContext)) + 4) + (1 << 2))) >> 1); instructionPointer = ((method + tmp) + 4) - 2; tmp = ((longAt(((((char *) aContext)) + 4) + (2 << 2))) >> 1); stackPointer = (aContext + 4) + (((6 + tmp) - 1) * 4); } int newObjectHash(void) { lastHash = (13849 + (27181 * lastHash)) & 65535; return lastHash; } int nilObject(void) { return nilObj; } int objectAfter(int oop) { int sz; int header; int extra; int type; int extra1; if (checkAssertions) { if (oop >= endOfMemory) { error("no objects after the end of memory"); } } if (((longAt(oop)) & 3) == 2) { sz = (longAt(oop)) & 536870908; } else { /* begin sizeBitsOf: */ header = longAt(oop); if ((header & 3) == 0) { sz = (longAt(oop - 8)) & 4294967292U; goto l1; } else { sz = header & 252; goto l1; } l1: /* end sizeBitsOf: */; } /* begin oopFromChunk: */ /* begin extraHeaderBytes: */ type = (longAt(oop + sz)) & 3; if (type > 1) { extra1 = 0; } else { if (type == 1) { extra1 = 4; } else { extra1 = 8; } } extra = extra1; return (oop + sz) + extra; } int objectAfterWhileForwarding(int oop) { int sz; int fwdBlock; int realHeader; int header; int extra; int type; int extra1; int sz1; int header1; int extra2; int type1; int extra11; header = longAt(oop); if ((header & 2147483648U) == 0) { /* begin objectAfter: */ if (checkAssertions) { if (oop >= endOfMemory) { error("no objects after the end of memory"); } } if (((longAt(oop)) & 3) == 2) { sz1 = (longAt(oop)) & 536870908; } else { /* begin sizeBitsOf: */ header1 = longAt(oop); if ((header1 & 3) == 0) { sz1 = (longAt(oop - 8)) & 4294967292U; goto l1; } else { sz1 = header1 & 252; goto l1; } l1: /* end sizeBitsOf: */; } /* begin oopFromChunk: */ /* begin extraHeaderBytes: */ type1 = (longAt(oop + sz1)) & 3; if (type1 > 1) { extra11 = 0; } else { if (type1 == 1) { extra11 = 4; } else { extra11 = 8; } } extra2 = extra11; return (oop + sz1) + extra2; } fwdBlock = header & 2147483644; if (checkAssertions) { /* begin fwdBlockValidate: */ if (!((fwdBlock > endOfMemory) && ((fwdBlock <= fwdTableNext) && ((fwdBlock & 3) == 0)))) { error("invalid fwd table entry"); } } realHeader = longAt(fwdBlock + 4); if ((realHeader & 3) == 0) { sz = (longAt(oop - 8)) & 268435452; } else { sz = realHeader & 252; } /* begin oopFromChunk: */ /* begin extraHeaderBytes: */ type = (longAt(oop + sz)) & 3; if (type > 1) { extra1 = 0; } else { if (type == 1) { extra1 = 4; } else { extra1 = 8; } } extra = extra1; return (oop + sz) + extra; } int okArrayClass(int cl) { return (cl == (longAt(((((char *) specialObjectsOop)) + 4) + (7 << 2)))) || ((cl == (longAt(((((char *) specialObjectsOop)) + 4) + (4 << 2)))) || (cl == (longAt(((((char *) specialObjectsOop)) + 4) + (26 << 2))))); } int okStreamArrayClass(int cl) { return (cl == (longAt(((((char *) specialObjectsOop)) + 4) + (6 << 2)))) || ((cl == (longAt(((((char *) specialObjectsOop)) + 4) + (7 << 2)))) || ((cl == (longAt(((((char *) specialObjectsOop)) + 4) + (26 << 2)))) || (cl == (longAt(((((char *) specialObjectsOop)) + 4) + (4 << 2)))))); } int okayActiveProcessStack(void) { int cntxt; cntxt = activeContext; while (!(cntxt == nilObj)) { okayFields(cntxt); cntxt = longAt(((((char *) cntxt)) + 4) + (0 << 2)); } } int okayFields(int oop) { int i; int fieldOop; if ((oop == null) || (oop == 0)) { return true; } if ((oop & 1)) { return true; } okayOop(oop); oopHasOkayClass(oop); if (!(((((unsigned) (longAt(oop))) >> 8) & 15) <= 4)) { return true; } i = (lengthOf(oop)) - 1; while (i >= 0) { fieldOop = longAt(((((char *) oop)) + 4) + (i << 2)); if (!((fieldOop & 1))) { okayOop(fieldOop); oopHasOkayClass(fieldOop); } i -= 1; } } int okayInterpreterObjects(void) { int i; int oop; int oopOrZero; int cntxt; okayFields(nilObj); okayFields(falseObj); okayFields(trueObj); okayFields(specialObjectsOop); okayFields(activeContext); okayFields(method); okayFields(receiver); okayFields(theHomeContext); okayFields(messageSelector); okayFields(newMethod); for (i = 1; i <= 512; i += 1) { oopOrZero = methodCache[i]; if (!(oopOrZero == 0)) { okayFields(methodCache[i]); okayFields(methodCache[i + 512]); okayFields(methodCache[i + (2 * 512)]); } } for (i = 1; i <= remapBufferCount; i += 1) { oop = remapBuffer[i]; if (!((oop & 1))) { okayFields(oop); } } /* begin okayActiveProcessStack */ cntxt = activeContext; while (!(cntxt == nilObj)) { okayFields(cntxt); cntxt = longAt(((((char *) cntxt)) + 4) + (0 << 2)); } } int okayOop(int oop) { int sz; int type; int fmt; int header; if ((oop & 1)) { return true; } if (!((0 < oop) && (oop < endOfMemory))) { error("oop is not a valid address"); } if (!((oop % 4) == 0)) { error("oop is not a word-aligned address"); } /* begin sizeBitsOf: */ header = longAt(oop); if ((header & 3) == 0) { sz = (longAt(oop - 8)) & 4294967292U; goto l1; } else { sz = header & 252; goto l1; } l1: /* end sizeBitsOf: */; if (!((oop + sz) < endOfMemory)) { error("oop size would make it extend beyond the end of memory"); } type = (longAt(oop)) & 3; if (type == 2) { error("oop is a free chunk, not an object"); } if (type == 3) { if (((((unsigned) (longAt(oop))) >> 12) & 31) == 0) { error("cannot have zero compact class field in a short header"); } } if (type == 1) { if (!((oop >= 4) && (((longAt(oop - 4)) & 3) == type))) { error("class header word has wrong type"); } } if (type == 0) { if (!((oop >= 8) && ((((longAt(oop - 8)) & 3) == type) && (((longAt(oop - 4)) & 3) == type)))) { error("class header word has wrong type"); } } fmt = (((unsigned) (longAt(oop))) >> 8) & 15; if (((fmt == 4) || (fmt == 5)) || (fmt == 7)) { error("oop has an unknown format type"); } if (!(((longAt(oop)) & 536870912) == 0)) { error("unused header bit 30 is set; should be zero"); } if ((((longAt(oop)) & 1073741824) == 1) && (oop >= youngStart)) { error("root bit is set in a young object"); } return true; } int oopFromChunk(int chunk) { int extra; int type; int extra1; /* begin extraHeaderBytes: */ type = (longAt(chunk)) & 3; if (type > 1) { extra1 = 0; } else { if (type == 1) { extra1 = 4; } else { extra1 = 8; } } extra = extra1; return chunk + extra; } int oopHasOkayClass(int oop) { int behaviorFormatBits; int oopClass; int formatMask; int oopFormatBits; int ccIndex; okayOop(oop); /* begin fetchClassOf: */ if ((oop & 1)) { oopClass = longAt(((((char *) specialObjectsOop)) + 4) + (5 << 2)); goto l1; } ccIndex = ((((unsigned) (longAt(oop))) >> 12) & 31) - 1; if (ccIndex < 0) { oopClass = (longAt(oop - 4)) & 4294967292U; goto l1; } else { oopClass = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + (ccIndex << 2)); goto l1; } l1: /* end fetchClassOf: */; if ((oopClass & 1)) { error("a SmallInteger is not a valid class or behavior"); } okayOop(oopClass); if (!((((((unsigned) (longAt(oopClass))) >> 8) & 15) <= 4) && ((lengthOf(oopClass)) >= 3))) { error("a class (behavior) must be a pointers object of size >= 3"); } if (((((unsigned) (longAt(oop))) >> 8) & 15) >= 8) { formatMask = 3072; } else { formatMask = 3840; } behaviorFormatBits = ((longAt(((((char *) oopClass)) + 4) + (2 << 2))) - 1) & formatMask; oopFormatBits = (longAt(oop)) & formatMask; if (!(behaviorFormatBits == oopFormatBits)) { error("object and its class (behavior) formats differ"); } return true; } int partitionedANDtonBitsnPartitions(int word1, int word2, int nBits, int nParts) { int mask; int i; int result; mask = (1 << nBits) - 1; result = 0; for (i = 1; i <= nParts; i += 1) { if ((word1 & mask) == mask) { result = result | (word2 & mask); } mask = mask << nBits; } return result; } int partitionedAddtonBitsnPartitions(int word1, int word2, int nBits, int nParts) { int mask; int sum; int i; int result; mask = (1 << nBits) - 1; result = 0; for (i = 1; i <= nParts; i += 1) { sum = (word1 & mask) + (word2 & mask); if (sum <= mask) { result = result | sum; } else { result = result | mask; } mask = mask << nBits; } return result; } int partitionedMaxwithnBitsnPartitions(int word1, int word2, int nBits, int nParts) { int mask; int i; int result; mask = (1 << nBits) - 1; result = 0; for (i = 1; i <= nParts; i += 1) { result = result | ((((word2 & mask) < (word1 & mask)) ? (word1 & mask) : (word2 & mask))); mask = mask << nBits; } return result; } int partitionedMinwithnBitsnPartitions(int word1, int word2, int nBits, int nParts) { int mask; int i; int result; mask = (1 << nBits) - 1; result = 0; for (i = 1; i <= nParts; i += 1) { result = result | ((((word2 & mask) < (word1 & mask)) ? (word2 & mask) : (word1 & mask))); mask = mask << nBits; } return result; } int partitionedSubfromnBitsnPartitions(int word1, int word2, int nBits, int nParts) { int mask; int i; int p1; int p2; int result; mask = (1 << nBits) - 1; result = 0; for (i = 1; i <= nParts; i += 1) { p1 = word1 & mask; p2 = word2 & mask; if (p1 < p2) { result = result | (p2 - p1); } else { result = result | (p1 - p2); } mask = mask << nBits; } return result; } int pickSourcePixelsnullMapsrcMaskdestMask(int nPix, int nullMap, int sourcePixMask, int destPixMask) { if (sourcePixSize >= 16) { return pickSourcePixelsRGBnullMapsrcMaskdestMask(nPix, nullMap, sourcePixMask, destPixMask); } if (nullMap) { return pickSourcePixelsNullMapsrcMaskdestMask(nPix, sourcePixMask, destPixMask); } return pickSourcePixelssrcMaskdestMask(nPix, sourcePixMask, destPixMask); } int pickSourcePixelssrcMaskdestMask(int nPix, int sourcePixMask, int destPixMask) { int sourceWord; int destWord; int sourcePix; int destPix; int i; sourceWord = longAt(sourceIndex); destWord = 0; for (i = 1; i <= nPix; i += 1) { sourcePix = (((unsigned) sourceWord) >> ((32 - sourcePixSize) - srcBitIndex)) & sourcePixMask; destPix = (longAt(((((char *) colorMap)) + 4) + (sourcePix << 2))) & destPixMask; destWord = (destWord << destPixSize) | destPix; if ((srcBitIndex += sourcePixSize) > 31) { srcBitIndex -= 32; sourceIndex += 4; sourceWord = longAt(sourceIndex); } } return destWord; } int pickSourcePixelsNullMapsrcMaskdestMask(int nPix, int sourcePixMask, int destPixMask) { int sourceWord; int destWord; int sourcePix; int i; sourceWord = longAt(sourceIndex); destWord = 0; for (i = 1; i <= nPix; i += 1) { sourcePix = (((unsigned) sourceWord) >> ((32 - sourcePixSize) - srcBitIndex)) & sourcePixMask; destWord = (destWord << destPixSize) | (sourcePix & destPixMask); if ((srcBitIndex += sourcePixSize) > 31) { srcBitIndex -= 32; sourceIndex += 4; sourceWord = longAt(sourceIndex); } } return destWord; } int pickSourcePixelsRGBnullMapsrcMaskdestMask(int nPix, int nullMap, int sourcePixMask, int destPixMask) { int sourceWord; int destWord; int sourcePix; int destPix; int i; int mask; int srcPix; int destPix1; int d; int mask3; int srcPix1; int destPix2; int d1; int mask4; int srcPix2; int destPix3; int d2; int mask5; int srcPix3; int destPix4; int d3; sourceWord = longAt(sourceIndex); destWord = 0; for (i = 1; i <= nPix; i += 1) { sourcePix = (((unsigned) sourceWord) >> ((32 - sourcePixSize) - srcBitIndex)) & sourcePixMask; if (nullMap) { if (sourcePixSize == 16) { /* begin rgbMap:from:to: */ if ((d = 8 - 5) > 0) { mask = (1 << 5) - 1; srcPix = sourcePix << d; mask = mask << d; destPix1 = srcPix & mask; mask = mask << 8; srcPix = srcPix << d; destPix = (destPix1 + (srcPix & mask)) + ((srcPix << d) & (mask << 8)); goto l1; } else { if (d == 0) { destPix = sourcePix; goto l1; } if (sourcePix == 0) { destPix = sourcePix; goto l1; } d = 5 - 8; mask = (1 << 8) - 1; srcPix = ((unsigned) sourcePix) >> d; destPix1 = srcPix & mask; mask = mask << 8; srcPix = ((unsigned) srcPix) >> d; destPix1 = (destPix1 + (srcPix & mask)) + ((((unsigned) srcPix) >> d) & (mask << 8)); if (destPix1 == 0) { destPix = 1; goto l1; } destPix = destPix1; goto l1; } l1: /* end rgbMap:from:to: */; } else { /* begin rgbMap:from:to: */ if ((d1 = 5 - 8) > 0) { mask3 = (1 << 8) - 1; srcPix1 = sourcePix << d1; mask3 = mask3 << d1; destPix2 = srcPix1 & mask3; mask3 = mask3 << 5; srcPix1 = srcPix1 << d1; destPix = (destPix2 + (srcPix1 & mask3)) + ((srcPix1 << d1) & (mask3 << 5)); goto l2; } else { if (d1 == 0) { destPix = sourcePix; goto l2; } if (sourcePix == 0) { destPix = sourcePix; goto l2; } d1 = 8 - 5; mask3 = (1 << 5) - 1; srcPix1 = ((unsigned) sourcePix) >> d1; destPix2 = srcPix1 & mask3; mask3 = mask3 << 5; srcPix1 = ((unsigned) srcPix1) >> d1; destPix2 = (destPix2 + (srcPix1 & mask3)) + ((((unsigned) srcPix1) >> d1) & (mask3 << 5)); if (destPix2 == 0) { destPix = 1; goto l2; } destPix = destPix2; goto l2; } l2: /* end rgbMap:from:to: */; } } else { if (sourcePixSize == 16) { /* begin rgbMap:from:to: */ if ((d2 = cmBitsPerColor - 5) > 0) { mask4 = (1 << 5) - 1; srcPix2 = sourcePix << d2; mask4 = mask4 << d2; destPix3 = srcPix2 & mask4; mask4 = mask4 << cmBitsPerColor; srcPix2 = srcPix2 << d2; sourcePix = (destPix3 + (srcPix2 & mask4)) + ((srcPix2 << d2) & (mask4 << cmBitsPerColor)); goto l3; } else { if (d2 == 0) { sourcePix = sourcePix; goto l3; } if (sourcePix == 0) { sourcePix = sourcePix; goto l3; } d2 = 5 - cmBitsPerColor; mask4 = (1 << cmBitsPerColor) - 1; srcPix2 = ((unsigned) sourcePix) >> d2; destPix3 = srcPix2 & mask4; mask4 = mask4 << cmBitsPerColor; srcPix2 = ((unsigned) srcPix2) >> d2; destPix3 = (destPix3 + (srcPix2 & mask4)) + ((((unsigned) srcPix2) >> d2) & (mask4 << cmBitsPerColor)); if (destPix3 == 0) { sourcePix = 1; goto l3; } sourcePix = destPix3; goto l3; } l3: /* end rgbMap:from:to: */; } else { /* begin rgbMap:from:to: */ if ((d3 = cmBitsPerColor - 8) > 0) { mask5 = (1 << 8) - 1; srcPix3 = sourcePix << d3; mask5 = mask5 << d3; destPix4 = srcPix3 & mask5; mask5 = mask5 << cmBitsPerColor; srcPix3 = srcPix3 << d3; sourcePix = (destPix4 + (srcPix3 & mask5)) + ((srcPix3 << d3) & (mask5 << cmBitsPerColor)); goto l4; } else { if (d3 == 0) { sourcePix = sourcePix; goto l4; } if (sourcePix == 0) { sourcePix = sourcePix; goto l4; } d3 = 8 - cmBitsPerColor; mask5 = (1 << cmBitsPerColor) - 1; srcPix3 = ((unsigned) sourcePix) >> d3; destPix4 = srcPix3 & mask5; mask5 = mask5 << cmBitsPerColor; srcPix3 = ((unsigned) srcPix3) >> d3; destPix4 = (destPix4 + (srcPix3 & mask5)) + ((((unsigned) srcPix3) >> d3) & (mask5 << cmBitsPerColor)); if (destPix4 == 0) { sourcePix = 1; goto l4; } sourcePix = destPix4; goto l4; } l4: /* end rgbMap:from:to: */; } destPix = (longAt(((((char *) colorMap)) + 4) + (sourcePix << 2))) & destPixMask; } destWord = (destWord << destPixSize) | destPix; if ((srcBitIndex += sourcePixSize) > 31) { srcBitIndex -= 32; sourceIndex += 4; sourceWord = longAt(sourceIndex); } } return destWord; } int pixMaskwith(int sourceWord, int destinationWord) { int mask; int i; int result; /* begin partitionedAND:to:nBits:nPartitions: */ mask = (1 << destPixSize) - 1; result = 0; for (i = 1; i <= pixPerWord; i += 1) { if (((~sourceWord) & mask) == mask) { result = result | (destinationWord & mask); } mask = mask << destPixSize; } return result; } int pixPaintwith(int sourceWord, int destinationWord) { if (sourceWord == 0) { return destinationWord; } return sourceWord | (partitionedANDtonBitsnPartitions(~sourceWord, destinationWord, destPixSize, pixPerWord)); } int pop(int nItems) { stackPointer -= nItems * 4; } int popthenPush(int nItems, int oop) { int sp; longAtput(sp = stackPointer - ((nItems - 1) * 4), oop); stackPointer = sp; } double popFloat(void) { int top; double result; int top1; int ccIndex; int cl; /* begin popStack */ top1 = longAt(stackPointer); stackPointer -= 4; top = top1; /* begin assertClassOf:is: */ if ((top & 1)) { successFlag = false; goto l1; } ccIndex = (((unsigned) (longAt(top))) >> 12) & 31; if (ccIndex == 0) { cl = (longAt(top - 4)) & 4294967292U; } else { cl = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + ((ccIndex - 1) << 2)); } /* begin success: */ successFlag = (cl == (longAt(((((char *) specialObjectsOop)) + 4) + (9 << 2)))) && successFlag; l1: /* end assertClassOf:is: */; if (successFlag) { fetchFloatAtinto(top + 4, result); } return result; } int popInteger(void) { int integerPointer; int top; /* begin popStack */ top = longAt(stackPointer); stackPointer -= 4; integerPointer = top; if ((integerPointer & 1)) { return (integerPointer >> 1); } else { successFlag = false; return 1; } } int popPos32BitInteger(void) { int top; int top1; /* begin popStack */ top1 = longAt(stackPointer); stackPointer -= 4; top = top1; return positive32BitValueOf(top); } int popRemappableOop(void) { int oop; oop = remapBuffer[remapBufferCount]; remapBufferCount -= 1; return oop; } int popStack(void) { int top; top = longAt(stackPointer); stackPointer -= 4; return top; } int positive32BitIntegerFor(int integerValue) { int newLargeInteger; if ((integerValue >= 0) && ((integerValue ^ (integerValue << 1)) >= 0)) { return ((integerValue << 1) | 1); } newLargeInteger = instantiateSmallClasssizeInBytesfill(longAt(((((char *) specialObjectsOop)) + 4) + (13 << 2)), 8, 0); byteAtput(((((char *) newLargeInteger)) + 4) + 3, (((unsigned) integerValue) >> 24) & 255); byteAtput(((((char *) newLargeInteger)) + 4) + 2, (((unsigned) integerValue) >> 16) & 255); byteAtput(((((char *) newLargeInteger)) + 4) + 1, (((unsigned) integerValue) >> 8) & 255); byteAtput(((((char *) newLargeInteger)) + 4) + 0, integerValue & 255); return newLargeInteger; } int positive32BitValueOf(int oop) { int sz; int value; int sz1; int header; int fmt; int ccIndex; int cl; if ((oop & 1)) { value = (oop >> 1); if (value < 0) { return primitiveFail(); } return value; } /* begin assertClassOf:is: */ if ((oop & 1)) { successFlag = false; goto l2; } ccIndex = (((unsigned) (longAt(oop))) >> 12) & 31; if (ccIndex == 0) { cl = (longAt(oop - 4)) & 4294967292U; } else { cl = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + ((ccIndex - 1) << 2)); } /* begin success: */ successFlag = (cl == (longAt(((((char *) specialObjectsOop)) + 4) + (13 << 2)))) && successFlag; l2: /* end assertClassOf:is: */; if (successFlag) { /* begin lengthOf: */ header = longAt(oop); if ((header & 3) == 0) { sz1 = (longAt(oop - 8)) & 4294967292U; } else { sz1 = header & 252; } fmt = (((unsigned) header) >> 8) & 15; if (fmt < 8) { sz = ((unsigned) (sz1 - 4)) >> 2; goto l1; } else { sz = (sz1 - 4) - (fmt & 3); goto l1; } l1: /* end lengthOf: */; if (!(sz == 4)) { return primitiveFail(); } } if (successFlag) { return (((byteAt(((((char *) oop)) + 4) + 0)) + ((byteAt(((((char *) oop)) + 4) + 1)) << 8)) + ((byteAt(((((char *) oop)) + 4) + 2)) << 16)) + ((byteAt(((((char *) oop)) + 4) + 3)) << 24); } } int possibleRootStoreIntovalue(int oop, int valueObj) { int header; if ((valueObj >= youngStart) && (!((valueObj & 1)))) { header = longAt(oop); if ((header & 1073741824) == 0) { if (rootTableCount < 1000) { rootTableCount += 1; rootTable[rootTableCount] = oop; longAtput(oop, header | 1073741824); } } } } int postGCAction(void) { if (activeContext < youngStart) { beRootIfOld(activeContext); } if (theHomeContext < youngStart) { beRootIfOld(theHomeContext); } } int preGCAction(int fullGCFlag) { } int prepareForwardingTableForBecomingwith(int array1, int array2) { int entriesAvailable; int fwdBlock; int fieldOffset; int oop1; int oop2; int entriesNeeded; int originalHeader; int originalHeaderType; int originalHeader1; int originalHeaderType1; int methodHeader; int sz; int fmt; int header; int type; entriesNeeded = 2 * ((lastPointerOf(array1)) / 4); entriesAvailable = fwdTableInit(); if (entriesAvailable < entriesNeeded) { initializeMemoryFirstFree(freeBlock); return false; } /* begin lastPointerOf: */ fmt = (((unsigned) (longAt(array1))) >> 8) & 15; if (fmt < 4) { /* begin sizeBitsOfSafe: */ header = longAt(array1); /* begin rightType: */ if ((header & 252) == 0) { type = 0; goto l4; } else { if ((header & 126976) == 0) { type = 1; goto l4; } else { type = 3; goto l4; } } l4: /* end rightType: */; if (type == 0) { sz = (longAt(array1 - 8)) & 4294967292U; goto l5; } else { sz = header & 252; goto l5; } l5: /* end sizeBitsOfSafe: */; fieldOffset = sz - 4; goto l3; } if (fmt < 12) { fieldOffset = 0; goto l3; } methodHeader = longAt(array1 + 4); fieldOffset = (((((unsigned) methodHeader) >> 10) & 255) * 4) + 4; l3: /* end lastPointerOf: */; while (fieldOffset >= 4) { oop1 = longAt(array1 + fieldOffset); oop2 = longAt(array2 + fieldOffset); /* begin fwdBlockGet */ fwdTableNext += 8; if (fwdTableNext <= fwdTableLast) { fwdBlock = fwdTableNext; goto l1; } else { fwdBlock = null; goto l1; } l1: /* end fwdBlockGet */; /* begin initForwardBlock:mapping:to: */ originalHeader = longAt(oop1); if (checkAssertions) { if (fwdBlock == null) { error("ran out of forwarding blocks in become"); } if ((originalHeader & 2147483648U) != 0) { error("object already has a forwarding table entry"); } } originalHeaderType = originalHeader & 3; longAtput(fwdBlock, oop2); longAtput(fwdBlock + 4, originalHeader); longAtput(oop1, fwdBlock | (2147483648U | originalHeaderType)); /* begin fwdBlockGet */ fwdTableNext += 8; if (fwdTableNext <= fwdTableLast) { fwdBlock = fwdTableNext; goto l2; } else { fwdBlock = null; goto l2; } l2: /* end fwdBlockGet */; /* begin initForwardBlock:mapping:to: */ originalHeader1 = longAt(oop2); if (checkAssertions) { if (fwdBlock == null) { error("ran out of forwarding blocks in become"); } if ((originalHeader1 & 2147483648U) != 0) { error("object already has a forwarding table entry"); } } originalHeaderType1 = originalHeader1 & 3; longAtput(fwdBlock, oop1); longAtput(fwdBlock + 4, originalHeader1); longAtput(oop2, fwdBlock | (2147483648U | originalHeaderType1)); fieldOffset -= 4; } return true; } int primIndex(void) { return primitiveIndex; } int primitiveAdd(void) { int arg; int result; int rcvr; int sp; rcvr = longAt(stackPointer - (1 * 4)); arg = longAt(stackPointer - (0 * 4)); /* begin pop: */ stackPointer -= 2 * 4; /* begin success: */ successFlag = (((rcvr & arg) & 1) != 0) && successFlag; if (successFlag) { result = ((rcvr >> 1)) + ((arg >> 1)); } /* begin checkIntegerResult:from: */ if (successFlag && ((result ^ (result << 1)) >= 0)) { /* begin pushInteger: */ /* begin push: */ longAtput(sp = stackPointer + 4, ((result << 1) | 1)); stackPointer = sp; } else { /* begin unPop: */ stackPointer += 2 * 4; failSpecialPrim(1); } } int primitiveArctan(void) { double rcvr; rcvr = popFloat(); if (successFlag) { pushFloat(atan(rcvr)); } else { /* begin unPop: */ stackPointer += 1 * 4; } } int primitiveArrayBecome(void) { int arg; int rcvr; int top; int successValue; int i; int fieldOffset; int oop1; int oop2; int hdr1; int hdr2; int fwdBlock; int fwdHeader; int fwdBlock1; int fwdHeader1; int methodHeader; int sz; int fmt; int header; int type; /* begin popStack */ top = longAt(stackPointer); stackPointer -= 4; arg = top; rcvr = longAt(stackPointer); /* begin success: */ /* begin become:with: */ if (!((fetchClassOf(rcvr)) == (longAt(((((char *) specialObjectsOop)) + 4) + (7 << 2))))) { successValue = false; goto l4; } if (!((fetchClassOf(arg)) == (longAt(((((char *) specialObjectsOop)) + 4) + (7 << 2))))) { successValue = false; goto l4; } if (!((lastPointerOf(rcvr)) == (lastPointerOf(arg)))) { successValue = false; goto l4; } if (!(containOnlyOopsand(rcvr, arg))) { successValue = false; goto l4; } if (!(prepareForwardingTableForBecomingwith(rcvr, arg))) { successValue = false; goto l4; } if (allYoungand(rcvr, arg)) { mapPointersInObjectsFromto(youngStart, endOfMemory); } else { mapPointersInObjectsFromto(startOfMemory(), endOfMemory); } /* begin restoreHeadersAfterBecoming:with: */ /* begin lastPointerOf: */ fmt = (((unsigned) (longAt(rcvr))) >> 8) & 15; if (fmt < 4) { /* begin sizeBitsOfSafe: */ header = longAt(rcvr); /* begin rightType: */ if ((header & 252) == 0) { type = 0; goto l2; } else { if ((header & 126976) == 0) { type = 1; goto l2; } else { type = 3; goto l2; } } l2: /* end rightType: */; if (type == 0) { sz = (longAt(rcvr - 8)) & 4294967292U; goto l3; } else { sz = header & 252; goto l3; } l3: /* end sizeBitsOfSafe: */; fieldOffset = sz - 4; goto l1; } if (fmt < 12) { fieldOffset = 0; goto l1; } methodHeader = longAt(rcvr + 4); fieldOffset = (((((unsigned) methodHeader) >> 10) & 255) * 4) + 4; l1: /* end lastPointerOf: */; while (fieldOffset >= 4) { oop1 = longAt(rcvr + fieldOffset); oop2 = longAt(arg + fieldOffset); /* begin restoreHeaderOf: */ fwdHeader = longAt(oop1); fwdBlock = fwdHeader & 2147483644; if (checkAssertions) { if ((fwdHeader & 2147483648U) == 0) { error("attempting to restore the header of an object that has no forwarding block"); } /* begin fwdBlockValidate: */ if (!((fwdBlock > endOfMemory) && ((fwdBlock <= fwdTableNext) && ((fwdBlock & 3) == 0)))) { error("invalid fwd table entry"); } } longAtput(oop1, longAt(fwdBlock + 4)); /* begin restoreHeaderOf: */ fwdHeader1 = longAt(oop2); fwdBlock1 = fwdHeader1 & 2147483644; if (checkAssertions) { if ((fwdHeader1 & 2147483648U) == 0) { error("attempting to restore the header of an object that has no forwarding block"); } /* begin fwdBlockValidate: */ if (!((fwdBlock1 > endOfMemory) && ((fwdBlock1 <= fwdTableNext) && ((fwdBlock1 & 3) == 0)))) { error("invalid fwd table entry"); } } longAtput(oop2, longAt(fwdBlock1 + 4)); /* begin exchangeHashBits:with: */ hdr1 = longAt(oop1); hdr2 = longAt(oop2); longAtput(oop1, (hdr1 & 3758227455U) | (hdr2 & 536739840)); longAtput(oop2, (hdr2 & 3758227455U) | (hdr1 & 536739840)); fieldOffset -= 4; } initializeMemoryFirstFree(freeBlock); successValue = true; l4: /* end become:with: */; successFlag = successValue && successFlag; /* begin flushMethodCache */ for (i = 1; i <= 2048; i += 1) { methodCache[i] = 0; } mcProbe = 0; if (!(successFlag)) { /* begin unPop: */ stackPointer += 1 * 4; } } int primitiveAsFloat(void) { int arg; int integerPointer; int top; /* begin popInteger */ /* begin popStack */ top = longAt(stackPointer); stackPointer -= 4; integerPointer = top; if ((integerPointer & 1)) { arg = (integerPointer >> 1); goto l1; } else { successFlag = false; arg = 1; goto l1; } l1: /* end popInteger */; if (successFlag) { pushFloat(((double) arg)); } else { /* begin unPop: */ stackPointer += 1 * 4; } } int primitiveAsOop(void) { int thisReceiver; int top; int sp; /* begin popStack */ top = longAt(stackPointer); stackPointer -= 4; thisReceiver = top; /* begin success: */ successFlag = (!((thisReceiver & 1))) && successFlag; if (successFlag) { /* begin pushInteger: */ /* begin push: */ longAtput(sp = stackPointer + 4, ((((((unsigned) (longAt(thisReceiver))) >> 17) & 4095) << 1) | 1)); stackPointer = sp; } else { /* begin unPop: */ stackPointer += 1 * 4; } } int primitiveAt(void) { int index; int result; int rcvr; int sp; /* begin commonAt: */ index = longAt(stackPointer); rcvr = longAt(stackPointer - (1 * 4)); if (((index & 1)) && (!((rcvr & 1)))) { index = (index >> 1); result = stObjectat(rcvr, index); if (false && (successFlag)) { result = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (24 << 2))))) + 4) + (((result >> 1)) << 2)); } } else { successFlag = false; } if (successFlag) { /* begin pop:thenPush: */ longAtput(sp = stackPointer - ((2 - 1) * 4), result); stackPointer = sp; } else { if (false) { failSpecialPrim(63); } else { failSpecialPrim(60); } } } int primitiveAtEnd(void) { int array; int stream; int arrayClass; int size; int index; int limit; int successValue; int sp; int sp1; int top; int ccIndex; int hdr; int totalLength; int fmt; int fixedFields; int sz; int classFormat; int class; int ccIndex1; /* begin popStack */ top = longAt(stackPointer); stackPointer -= 4; stream = top; successFlag = (((((unsigned) (longAt(stream))) >> 8) & 15) <= 4) && ((lengthOf(stream)) >= (2 + 1)); if (successFlag) { array = longAt(((((char *) stream)) + 4) + (0 << 2)); index = fetchIntegerofObject(1, stream); limit = fetchIntegerofObject(2, stream); /* begin fetchClassOf: */ if ((array & 1)) { arrayClass = longAt(((((char *) specialObjectsOop)) + 4) + (5 << 2)); goto l1; } ccIndex = ((((unsigned) (longAt(array))) >> 12) & 31) - 1; if (ccIndex < 0) { arrayClass = (longAt(array - 4)) & 4294967292U; goto l1; } else { arrayClass = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + (ccIndex << 2)); goto l1; } l1: /* end fetchClassOf: */; /* begin success: */ successValue = (arrayClass == (longAt(((((char *) specialObjectsOop)) + 4) + (6 << 2)))) || ((arrayClass == (longAt(((((char *) specialObjectsOop)) + 4) + (7 << 2)))) || ((arrayClass == (longAt(((((char *) specialObjectsOop)) + 4) + (26 << 2)))) || (arrayClass == (longAt(((((char *) specialObjectsOop)) + 4) + (4 << 2)))))); successFlag = successValue && successFlag; /* begin stSizeOf: */ hdr = longAt(array); fmt = (((unsigned) hdr) >> 8) & 15; /* begin lengthOf:baseHeader:format: */ if ((hdr & 3) == 0) { sz = (longAt(array - 8)) & 4294967292U; } else { sz = hdr & 252; } if (fmt < 8) { totalLength = ((unsigned) (sz - 4)) >> 2; goto l4; } else { totalLength = (sz - 4) - (fmt & 3); goto l4; } l4: /* end lengthOf:baseHeader:format: */; /* begin fixedFieldsOf:format:length: */ if ((fmt > 3) || (fmt == 2)) { fixedFields = 0; goto l2; } if (fmt < 2) { fixedFields = totalLength; goto l2; } /* begin fetchClassOf: */ if ((array & 1)) { class = longAt(((((char *) specialObjectsOop)) + 4) + (5 << 2)); goto l3; } ccIndex1 = ((((unsigned) (longAt(array))) >> 12) & 31) - 1; if (ccIndex1 < 0) { class = (longAt(array - 4)) & 4294967292U; goto l3; } else { class = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + (ccIndex1 << 2)); goto l3; } l3: /* end fetchClassOf: */; classFormat = (longAt(((((char *) class)) + 4) + (2 << 2))) - 1; fixedFields = (((((unsigned) classFormat) >> 11) & 192) + ((((unsigned) classFormat) >> 2) & 63)) - 1; l2: /* end fixedFieldsOf:format:length: */; size = totalLength - fixedFields; } if (successFlag) { /* begin pushBool: */ if ((index >= limit) || (index >= size)) { /* begin push: */ longAtput(sp = stackPointer + 4, trueObj); stackPointer = sp; } else { /* begin push: */ longAtput(sp1 = stackPointer + 4, falseObj); stackPointer = sp1; } } else { /* begin unPop: */ stackPointer += 1 * 4; } } int primitiveAtPut(void) { int value; int valToStore; int index; int rcvr; int sp; /* begin commonAtPut: */ value = valToStore = longAt(stackPointer); index = longAt(stackPointer - (1 * 4)); rcvr = longAt(stackPointer - (2 * 4)); if (((index & 1)) && (!((rcvr & 1)))) { index = (index >> 1); if (false) { valToStore = asciiOfCharacter(value); } stObjectatput(rcvr, index, valToStore); } else { successFlag = false; } if (successFlag) { /* begin pop:thenPush: */ longAtput(sp = stackPointer - ((3 - 1) * 4), value); stackPointer = sp; } else { if (false) { failSpecialPrim(64); } else { failSpecialPrim(61); } } } int primitiveBeCursor(void) { int bitsObj; int extentX; int extentY; int cursorObj; int offsetObj; int offsetX; int offsetY; int cursorBitsIndex; int successValue; int successValue1; int successValue2; int successValue3; int successValue4; int successValue5; cursorObj = longAt(stackPointer); /* begin success: */ successValue5 = (((((unsigned) (longAt(cursorObj))) >> 8) & 15) <= 4) && ((lengthOf(cursorObj)) >= 5); successFlag = successValue5 && successFlag; if (successFlag) { bitsObj = longAt(((((char *) cursorObj)) + 4) + (0 << 2)); extentX = fetchIntegerofObject(1, cursorObj); extentY = fetchIntegerofObject(2, cursorObj); offsetObj = longAt(((((char *) cursorObj)) + 4) + (4 << 2)); /* begin success: */ successValue = (((((unsigned) (longAt(offsetObj))) >> 8) & 15) <= 4) && ((lengthOf(offsetObj)) >= 2); successFlag = successValue && successFlag; } if (successFlag) { offsetX = fetchIntegerofObject(0, offsetObj); offsetY = fetchIntegerofObject(1, offsetObj); /* begin success: */ successValue1 = (extentX == 16) && (extentY == 16); successFlag = successValue1 && successFlag; /* begin success: */ successValue2 = (offsetX >= -16) && (offsetX <= 0); successFlag = successValue2 && successFlag; /* begin success: */ successValue3 = (offsetY >= -16) && (offsetY <= 0); successFlag = successValue3 && successFlag; /* begin success: */ successValue4 = (((((unsigned) (longAt(bitsObj))) >> 8) & 15) == 6) && ((lengthOf(bitsObj)) == 16); successFlag = successValue4 && successFlag; cursorBitsIndex = bitsObj + 4; } if (successFlag) { ioSetCursor(cursorBitsIndex, offsetX, offsetY); } } int primitiveBeDisplay(void) { int rcvr; int oop; int successValue; rcvr = longAt(stackPointer); /* begin success: */ successValue = (((((unsigned) (longAt(rcvr))) >> 8) & 15) <= 4) && ((lengthOf(rcvr)) >= 4); successFlag = successValue && successFlag; if (successFlag) { /* begin storePointer:ofObject:withValue: */ oop = specialObjectsOop; if (oop < youngStart) { possibleRootStoreIntovalue(oop, rcvr); } longAtput(((((char *) oop)) + 4) + (14 << 2), rcvr); } } int primitiveBeep(void) { ioBeep(); } int primitiveBitAnd(void) { int integerReceiver; int integerArgument; int object; int sp; int top; int top1; int top2; int top11; successFlag = true; /* begin popPos32BitInteger */ /* begin popStack */ top1 = longAt(stackPointer); stackPointer -= 4; top = top1; integerArgument = positive32BitValueOf(top); /* begin popPos32BitInteger */ /* begin popStack */ top11 = longAt(stackPointer); stackPointer -= 4; top2 = top11; integerReceiver = positive32BitValueOf(top2); if (successFlag) { /* begin push: */ object = positive32BitIntegerFor(integerReceiver & integerArgument); longAtput(sp = stackPointer + 4, object); stackPointer = sp; } else { /* begin unPop: */ stackPointer += 2 * 4; failSpecialPrim(14); } } int primitiveBitOr(void) { int integerReceiver; int integerArgument; int object; int sp; int top; int top1; int top2; int top11; successFlag = true; /* begin popPos32BitInteger */ /* begin popStack */ top1 = longAt(stackPointer); stackPointer -= 4; top = top1; integerArgument = positive32BitValueOf(top); /* begin popPos32BitInteger */ /* begin popStack */ top11 = longAt(stackPointer); stackPointer -= 4; top2 = top11; integerReceiver = positive32BitValueOf(top2); if (successFlag) { /* begin push: */ object = positive32BitIntegerFor(integerReceiver | integerArgument); longAtput(sp = stackPointer + 4, object); stackPointer = sp; } else { /* begin unPop: */ stackPointer += 2 * 4; failSpecialPrim(15); } } int primitiveBitShift(void) { int shifted; int integerReceiver; int integerArgument; int object; int sp; int integerPointer; int top; int top2; int top1; successFlag = true; /* begin popInteger */ /* begin popStack */ top = longAt(stackPointer); stackPointer -= 4; integerPointer = top; if ((integerPointer & 1)) { integerArgument = (integerPointer >> 1); goto l1; } else { successFlag = false; integerArgument = 1; goto l1; } l1: /* end popInteger */; /* begin popPos32BitInteger */ /* begin popStack */ top1 = longAt(stackPointer); stackPointer -= 4; top2 = top1; integerReceiver = positive32BitValueOf(top2); if (successFlag) { if (integerArgument >= 0) { /* begin success: */ successFlag = (integerArgument <= 31) && successFlag; shifted = integerReceiver << integerArgument; /* begin success: */ successFlag = ((((unsigned) shifted) >> integerArgument) == integerReceiver) && successFlag; } else { /* begin success: */ successFlag = (integerArgument >= -31) && successFlag; shifted = ((integerArgument < 0) ? ((unsigned) integerReceiver >> -integerArgument) : ((unsigned) integerReceiver << integerArgument)); } } if (successFlag) { /* begin push: */ object = positive32BitIntegerFor(shifted); longAtput(sp = stackPointer + 4, object); stackPointer = sp; } else { /* begin unPop: */ stackPointer += 2 * 4; failSpecialPrim(17); } } int primitiveBitXor(void) { int integerReceiver; int integerArgument; int object; int sp; int top; int top1; int top2; int top11; /* begin popPos32BitInteger */ /* begin popStack */ top1 = longAt(stackPointer); stackPointer -= 4; top = top1; integerArgument = positive32BitValueOf(top); /* begin popPos32BitInteger */ /* begin popStack */ top11 = longAt(stackPointer); stackPointer -= 4; top2 = top11; integerReceiver = positive32BitValueOf(top2); if (successFlag) { /* begin push: */ object = positive32BitIntegerFor(integerReceiver ^ integerArgument); longAtput(sp = stackPointer + 4, object); stackPointer = sp; } else { /* begin unPop: */ stackPointer += 2 * 4; } } int primitiveBlockCopy(void) { int methodContext; int newContext; int initialIP; int context; int contextSize; int header; int oop; int sp; context = longAt(stackPointer - (1 * 4)); if (((longAt(((((char *) context)) + 4) + (3 << 2))) & 1)) { methodContext = longAt(((((char *) context)) + 4) + (5 << 2)); } else { methodContext = context; } /* begin sizeBitsOf: */ header = longAt(methodContext); if ((header & 3) == 0) { contextSize = (longAt(methodContext - 8)) & 4294967292U; goto l1; } else { contextSize = header & 252; goto l1; } l1: /* end sizeBitsOf: */; context = null; /* begin pushRemappableOop: */ remapBuffer[remapBufferCount += 1] = methodContext; newContext = instantiateSmallClasssizeInBytesfill(longAt(((((char *) specialObjectsOop)) + 4) + (11 << 2)), contextSize, nilObj); /* begin popRemappableOop */ oop = remapBuffer[remapBufferCount]; remapBufferCount -= 1; methodContext = oop; initialIP = (((instructionPointer - method) << 1) | 1); longAtput(((((char *) newContext)) + 4) + (4 << 2), initialIP); longAtput(((((char *) newContext)) + 4) + (1 << 2), initialIP); /* begin storeStackPointerValue:inContext: */ longAtput(((((char *) newContext)) + 4) + (2 << 2), ((0 << 1) | 1)); longAtput(((((char *) newContext)) + 4) + (3 << 2), longAt(stackPointer - (0 * 4))); longAtput(((((char *) newContext)) + 4) + (5 << 2), methodContext); /* begin pop: */ stackPointer -= 2 * 4; /* begin push: */ longAtput(sp = stackPointer + 4, newContext); stackPointer = sp; } int primitiveBytesLeft(void) { int sp; /* begin pop: */ stackPointer -= 1 * 4; /* begin pushInteger: */ /* begin push: */ longAtput(sp = stackPointer + 4, ((((longAt(freeBlock)) & 536870908) << 1) | 1)); stackPointer = sp; } int primitiveClass(void) { int instance; int top; int object; int sp; int ccIndex; /* begin popStack */ top = longAt(stackPointer); stackPointer -= 4; instance = top; /* begin push: */ /* begin fetchClassOf: */ if ((instance & 1)) { object = longAt(((((char *) specialObjectsOop)) + 4) + (5 << 2)); goto l1; } ccIndex = ((((unsigned) (longAt(instance))) >> 12) & 31) - 1; if (ccIndex < 0) { object = (longAt(instance - 4)) & 4294967292U; goto l1; } else { object = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + (ccIndex << 2)); goto l1; } l1: /* end fetchClassOf: */; longAtput(sp = stackPointer + 4, object); stackPointer = sp; } int primitiveClipboardText(void) { int sz; int s; int sp; int ccIndex; int cl; int hdr; int totalLength; int fmt; int fixedFields; int sz1; int classFormat; int class; int ccIndex1; if (argumentCount == 1) { s = longAt(stackPointer); /* begin assertClassOf:is: */ if ((s & 1)) { successFlag = false; goto l1; } ccIndex = (((unsigned) (longAt(s))) >> 12) & 31; if (ccIndex == 0) { cl = (longAt(s - 4)) & 4294967292U; } else { cl = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + ((ccIndex - 1) << 2)); } /* begin success: */ successFlag = (cl == (longAt(((((char *) specialObjectsOop)) + 4) + (6 << 2)))) && successFlag; l1: /* end assertClassOf:is: */; if (successFlag) { /* begin stSizeOf: */ hdr = longAt(s); fmt = (((unsigned) hdr) >> 8) & 15; /* begin lengthOf:baseHeader:format: */ if ((hdr & 3) == 0) { sz1 = (longAt(s - 8)) & 4294967292U; } else { sz1 = hdr & 252; } if (fmt < 8) { totalLength = ((unsigned) (sz1 - 4)) >> 2; goto l4; } else { totalLength = (sz1 - 4) - (fmt & 3); goto l4; } l4: /* end lengthOf:baseHeader:format: */; /* begin fixedFieldsOf:format:length: */ if ((fmt > 3) || (fmt == 2)) { fixedFields = 0; goto l2; } if (fmt < 2) { fixedFields = totalLength; goto l2; } /* begin fetchClassOf: */ if ((s & 1)) { class = longAt(((((char *) specialObjectsOop)) + 4) + (5 << 2)); goto l3; } ccIndex1 = ((((unsigned) (longAt(s))) >> 12) & 31) - 1; if (ccIndex1 < 0) { class = (longAt(s - 4)) & 4294967292U; goto l3; } else { class = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + (ccIndex1 << 2)); goto l3; } l3: /* end fetchClassOf: */; classFormat = (longAt(((((char *) class)) + 4) + (2 << 2))) - 1; fixedFields = (((((unsigned) classFormat) >> 11) & 192) + ((((unsigned) classFormat) >> 2) & 63)) - 1; l2: /* end fixedFieldsOf:format:length: */; sz = totalLength - fixedFields; clipboardWriteFromAt(sz, s + 4, 0); /* begin pop: */ stackPointer -= 1 * 4; } } else { sz = clipboardSize(); s = instantiateClassindexableSize(longAt(((((char *) specialObjectsOop)) + 4) + (6 << 2)), sz); clipboardReadIntoAt(sz, s + 4, 0); /* begin pop: */ stackPointer -= 1 * 4; /* begin push: */ longAtput(sp = stackPointer + 4, s); stackPointer = sp; } } int primitiveClone(void) { int newCopy; int sp; newCopy = clone(longAt(stackPointer)); /* begin pop:thenPush: */ longAtput(sp = stackPointer - ((1 - 1) * 4), newCopy); stackPointer = sp; } int primitiveConstantFill(void) { int i; int end; int rcvrIsBytes; int fillValue; int rcvr; int successValue; int successValue1; int fmt; fillValue = positive32BitValueOf(longAt(stackPointer)); rcvr = longAt(stackPointer - (1 * 4)); /* begin success: */ /* begin isWordsOrBytes: */ fmt = (((unsigned) (longAt(rcvr))) >> 8) & 15; successValue1 = (fmt == 6) || ((fmt >= 8) && (fmt <= 11)); successFlag = successValue1 && successFlag; rcvrIsBytes = ((((unsigned) (longAt(rcvr))) >> 8) & 15) >= 8; if (rcvrIsBytes) { /* begin success: */ successValue = (fillValue >= 0) && (fillValue <= 255); successFlag = successValue && successFlag; } if (successFlag) { end = rcvr + (sizeBitsOf(rcvr)); i = rcvr + 4; if (rcvrIsBytes) { while (i < end) { byteAtput(i, fillValue); i += 1; } } else { while (i < end) { longAtput(i, fillValue); i += 4; } } /* begin pop: */ stackPointer -= 1 * 4; } } int primitiveCopyBits(void) { int rcvr; int successValue; rcvr = longAt(stackPointer); /* begin success: */ successValue = loadBitBltFrom(rcvr); successFlag = successValue && successFlag; if (successFlag) { copyBits(); showDisplayBits(); } } int primitiveDeferDisplayUpdates(void) { int flag; flag = longAt(stackPointer); if (flag == trueObj) { deferDisplayUpdates = true; } else { if (flag == falseObj) { deferDisplayUpdates = false; } else { primitiveFail(); } } if (successFlag) { /* begin pop: */ stackPointer -= 1 * 4; } } int primitiveDirectoryCreate(void) { int dirName; int dirNameIndex; int dirNameSize; int sz; int header; int fmt; dirName = longAt(stackPointer); /* begin success: */ successFlag = (((((unsigned) (longAt(dirName))) >> 8) & 15) >= 8) && successFlag; if (successFlag) { dirNameIndex = dirName + 4; /* begin lengthOf: */ header = longAt(dirName); if ((header & 3) == 0) { sz = (longAt(dirName - 8)) & 4294967292U; } else { sz = header & 252; } fmt = (((unsigned) header) >> 8) & 15; if (fmt < 8) { dirNameSize = ((unsigned) (sz - 4)) >> 2; goto l1; } else { dirNameSize = (sz - 4) - (fmt & 3); goto l1; } l1: /* end lengthOf: */; } if (successFlag) { /* begin success: */ successFlag = (dir_Create((char *) dirNameIndex, dirNameSize)) && successFlag; } if (successFlag) { /* begin pop: */ stackPointer -= 1 * 4; } } int primitiveDirectoryDelimitor(void) { int ascii; int sp; int successValue; ascii = asciiDirectoryDelimiter(); /* begin success: */ successValue = (ascii >= 0) && (ascii <= 255); successFlag = successValue && successFlag; if (successFlag) { /* begin pop: */ stackPointer -= 1 * 4; /* begin push: */ longAtput(sp = stackPointer + 4, longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (24 << 2))))) + 4) + (ascii << 2))); stackPointer = sp; } } int primitiveDirectoryLookup(void) { int dirFlag; int pathName; int pathNameIndex; int pathNameSize; int status; int modifiedDate; char entryName[256]; int entryNameSize; int index; int createDate; int fileSize; int sz; int header; int fmt; int sp; int object; int sp1; int integerPointer; /* begin stackIntegerValue: */ integerPointer = longAt(stackPointer - (0 * 4)); if ((integerPointer & 1)) { index = (integerPointer >> 1); goto l2; } else { primitiveFail(); index = 0; goto l2; } l2: /* end stackIntegerValue: */; pathName = longAt(stackPointer - (1 * 4)); /* begin success: */ successFlag = (((((unsigned) (longAt(pathName))) >> 8) & 15) >= 8) && successFlag; if (successFlag) { pathNameIndex = pathName + 4; /* begin lengthOf: */ header = longAt(pathName); if ((header & 3) == 0) { sz = (longAt(pathName - 8)) & 4294967292U; } else { sz = header & 252; } fmt = (((unsigned) header) >> 8) & 15; if (fmt < 8) { pathNameSize = ((unsigned) (sz - 4)) >> 2; goto l1; } else { pathNameSize = (sz - 4) - (fmt & 3); goto l1; } l1: /* end lengthOf: */; } if (successFlag) { status = dir_Lookup( (char *) pathNameIndex, pathNameSize, index, entryName, &entryNameSize, &createDate, &modifiedDate, &dirFlag, &fileSize); if (status == 1) { /* begin pop: */ stackPointer -= 3 * 4; /* begin push: */ longAtput(sp = stackPointer + 4, nilObj); stackPointer = sp; return null; } if (status == 2) { return primitiveFail(); } } if (successFlag) { /* begin pop: */ stackPointer -= 3 * 4; /* begin push: */ object = makeDirEntryNamesizecreateDatemodDateisDirfileSize(entryName, entryNameSize, createDate, modifiedDate, dirFlag, fileSize); longAtput(sp1 = stackPointer + 4, object); stackPointer = sp1; } } int primitiveDirectorySetMacTypeAndCreator(void) { int typeStringIndex; int typeString; int fileName; int creatorString; int creatorStringIndex; int fileNameIndex; int fileNameSize; int sz; int header; int fmt; int successValue; int successValue1; creatorString = longAt(stackPointer); typeString = longAt(stackPointer - (1 * 4)); fileName = longAt(stackPointer - (2 * 4)); /* begin success: */ successValue = (((((unsigned) (longAt(creatorString))) >> 8) & 15) >= 8) && ((lengthOf(creatorString)) == 4); successFlag = successValue && successFlag; /* begin success: */ successValue1 = (((((unsigned) (longAt(typeString))) >> 8) & 15) >= 8) && ((lengthOf(typeString)) == 4); successFlag = successValue1 && successFlag; /* begin success: */ successFlag = (((((unsigned) (longAt(fileName))) >> 8) & 15) >= 8) && successFlag; if (successFlag) { creatorStringIndex = creatorString + 4; typeStringIndex = typeString + 4; fileNameIndex = fileName + 4; /* begin lengthOf: */ header = longAt(fileName); if ((header & 3) == 0) { sz = (longAt(fileName - 8)) & 4294967292U; } else { sz = header & 252; } fmt = (((unsigned) header) >> 8) & 15; if (fmt < 8) { fileNameSize = ((unsigned) (sz - 4)) >> 2; goto l1; } else { fileNameSize = (sz - 4) - (fmt & 3); goto l1; } l1: /* end lengthOf: */; } if (successFlag) { /* begin success: */ successFlag = (dir_SetMacFileTypeAndCreator( (char *) fileNameIndex, fileNameSize, (char *) typeStringIndex, (char *) creatorStringIndex)) && successFlag; } if (successFlag) { /* begin pop: */ stackPointer -= 3 * 4; } } int primitiveDiv(void) { int arg; int posArg; int posRcvr; int result; int rcvr; int integerPointer; int top; int integerPointer1; int top1; int sp; int sp1; successFlag = true; /* begin popInteger */ /* begin popStack */ top = longAt(stackPointer); stackPointer -= 4; integerPointer = top; if ((integerPointer & 1)) { arg = (integerPointer >> 1); goto l1; } else { successFlag = false; arg = 1; goto l1; } l1: /* end popInteger */; /* begin popInteger */ /* begin popStack */ top1 = longAt(stackPointer); stackPointer -= 4; integerPointer1 = top1; if ((integerPointer1 & 1)) { rcvr = (integerPointer1 >> 1); goto l2; } else { successFlag = false; rcvr = 1; goto l2; } l2: /* end popInteger */; /* begin success: */ successFlag = (arg != 0) && successFlag; if (successFlag) { if (rcvr > 0) { if (arg > 0) { result = rcvr / arg; } else { posArg = 0 - arg; result = 0 - ((rcvr + (posArg - 1)) / posArg); } } else { posRcvr = 0 - rcvr; if (arg > 0) { result = 0 - ((posRcvr + (arg - 1)) / arg); } else { posArg = 0 - arg; result = posRcvr / posArg; } } /* begin checkIntegerResult:from: */ if (successFlag && ((result ^ (result << 1)) >= 0)) { /* begin pushInteger: */ /* begin push: */ longAtput(sp = stackPointer + 4, ((result << 1) | 1)); stackPointer = sp; } else { /* begin unPop: */ stackPointer += 2 * 4; failSpecialPrim(12); } } else { /* begin checkIntegerResult:from: */ if (successFlag && ((0 ^ (0 << 1)) >= 0)) { /* begin pushInteger: */ /* begin push: */ longAtput(sp1 = stackPointer + 4, ((0 << 1) | 1)); stackPointer = sp1; } else { /* begin unPop: */ stackPointer += 2 * 4; failSpecialPrim(12); } } } int primitiveDivide(void) { int integerReceiver; int integerArgument; int integerPointer; int top; int integerPointer1; int top1; int sp; successFlag = true; /* begin popInteger */ /* begin popStack */ top = longAt(stackPointer); stackPointer -= 4; integerPointer = top; if ((integerPointer & 1)) { integerArgument = (integerPointer >> 1); goto l1; } else { successFlag = false; integerArgument = 1; goto l1; } l1: /* end popInteger */; /* begin popInteger */ /* begin popStack */ top1 = longAt(stackPointer); stackPointer -= 4; integerPointer1 = top1; if ((integerPointer1 & 1)) { integerReceiver = (integerPointer1 >> 1); goto l2; } else { successFlag = false; integerReceiver = 1; goto l2; } l2: /* end popInteger */; /* begin success: */ successFlag = (integerArgument != 0) && successFlag; if (!(successFlag)) { integerArgument = 1; } /* begin success: */ successFlag = ((integerReceiver % integerArgument) == 0) && successFlag; /* begin checkIntegerResult:from: */ if (successFlag && (((integerReceiver / integerArgument) ^ ((integerReceiver / integerArgument) << 1)) >= 0)) { /* begin pushInteger: */ /* begin push: */ longAtput(sp = stackPointer + 4, (((integerReceiver / integerArgument) << 1) | 1)); stackPointer = sp; } else { /* begin unPop: */ stackPointer += 2 * 4; failSpecialPrim(10); } } int primitiveDoPrimitiveWithArgs(void) { int primIdx; int argumentArray; int arraySize; int index; int cntxSize; int sp; int sp1; int sp2; int sz; int objectPointer; int sz1; int integerPointer; int oop; int header; int header1; int ccIndex; int cl; argumentArray = longAt(stackPointer); /* begin fetchWordLengthOf: */ /* begin sizeBitsOf: */ header = longAt(argumentArray); if ((header & 3) == 0) { sz = (longAt(argumentArray - 8)) & 4294967292U; goto l2; } else { sz = header & 252; goto l2; } l2: /* end sizeBitsOf: */; arraySize = ((unsigned) (sz - 4)) >> 2; /* begin fetchWordLengthOf: */ objectPointer = activeContext; /* begin sizeBitsOf: */ header1 = longAt(objectPointer); if ((header1 & 3) == 0) { sz1 = (longAt(objectPointer - 8)) & 4294967292U; goto l3; } else { sz1 = header1 & 252; goto l3; } l3: /* end sizeBitsOf: */; cntxSize = ((unsigned) (sz1 - 4)) >> 2; /* begin success: */ successFlag = (((((unsigned) ((stackPointer - activeContext) - 4)) >> 2) + arraySize) < cntxSize) && successFlag; /* begin assertClassOf:is: */ if ((argumentArray & 1)) { successFlag = false; goto l4; } ccIndex = (((unsigned) (longAt(argumentArray))) >> 12) & 31; if (ccIndex == 0) { cl = (longAt(argumentArray - 4)) & 4294967292U; } else { cl = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + ((ccIndex - 1) << 2)); } /* begin success: */ successFlag = (cl == (longAt(((((char *) specialObjectsOop)) + 4) + (7 << 2)))) && successFlag; l4: /* end assertClassOf:is: */; /* begin stackIntegerValue: */ integerPointer = longAt(stackPointer - (1 * 4)); if ((integerPointer & 1)) { primIdx = (integerPointer >> 1); goto l1; } else { primitiveFail(); primIdx = 0; goto l1; } l1: /* end stackIntegerValue: */; if (!(successFlag)) { return primitiveFail(); } /* begin pop: */ stackPointer -= 2 * 4; primitiveIndex = primIdx; argumentCount = arraySize; index = 1; while (index <= argumentCount) { /* begin push: */ longAtput(sp = stackPointer + 4, longAt(((((char *) argumentArray)) + 4) + ((index - 1) << 2))); stackPointer = sp; index += 1; } /* begin pushRemappableOop: */ remapBuffer[remapBufferCount += 1] = argumentArray; primitiveResponse(); /* begin popRemappableOop */ oop = remapBuffer[remapBufferCount]; remapBufferCount -= 1; argumentArray = oop; if (!(successFlag)) { /* begin pop: */ stackPointer -= arraySize * 4; /* begin pushInteger: */ /* begin push: */ longAtput(sp1 = stackPointer + 4, ((primIdx << 1) | 1)); stackPointer = sp1; /* begin push: */ longAtput(sp2 = stackPointer + 4, argumentArray); stackPointer = sp2; argumentCount = 2; } } int primitiveDrawLoop(void) { int yDelta; int rcvr; int xDelta; int affL; int dx1; int dy1; int px; int py; int affR; int affT; int affB; int i; int P; int integerPointer; int integerPointer1; int successValue; int objectPointer; int integerValue; int objectPointer1; int integerValue1; rcvr = longAt(stackPointer - (2 * 4)); /* begin stackIntegerValue: */ integerPointer = longAt(stackPointer - (1 * 4)); if ((integerPointer & 1)) { xDelta = (integerPointer >> 1); goto l1; } else { primitiveFail(); xDelta = 0; goto l1; } l1: /* end stackIntegerValue: */; /* begin stackIntegerValue: */ integerPointer1 = longAt(stackPointer - (0 * 4)); if ((integerPointer1 & 1)) { yDelta = (integerPointer1 >> 1); goto l2; } else { primitiveFail(); yDelta = 0; goto l2; } l2: /* end stackIntegerValue: */; /* begin success: */ successValue = loadBitBltFrom(rcvr); successFlag = successValue && successFlag; if (successFlag) { /* begin drawLoopX:Y: */ if (xDelta > 0) { dx1 = 1; } else { if (xDelta == 0) { dx1 = 0; } else { dx1 = -1; } } if (yDelta > 0) { dy1 = 1; } else { if (yDelta == 0) { dy1 = 0; } else { dy1 = -1; } } px = abs(yDelta); py = abs(xDelta); affL = affT = 9999; affR = affB = -9999; if (py > px) { P = py / 2; for (i = 1; i <= py; i += 1) { destX += dx1; if ((P -= px) < 0) { destY += dy1; P += py; } if (i < py) { copyBits(); if ((affectedL < affectedR) && (affectedT < affectedB)) { affL = ((affL < affectedL) ? affL : affectedL); affR = ((affR < affectedR) ? affectedR : affR); affT = ((affT < affectedT) ? affT : affectedT); affB = ((affB < affectedB) ? affectedB : affB); if (((affR - affL) * (affB - affT)) > 4000) { affectedL = affL; affectedR = affR; affectedT = affT; affectedB = affB; showDisplayBits(); affL = affT = 9999; affR = affB = -9999; } } } } } else { P = px / 2; for (i = 1; i <= px; i += 1) { destY += dy1; if ((P -= py) < 0) { destX += dx1; P += px; } if (i < px) { copyBits(); if ((affectedL < affectedR) && (affectedT < affectedB)) { affL = ((affL < affectedL) ? affL : affectedL); affR = ((affR < affectedR) ? affectedR : affR); affT = ((affT < affectedT) ? affT : affectedT); affB = ((affB < affectedB) ? affectedB : affB); if (((affR - affL) * (affB - affT)) > 4000) { affectedL = affL; affectedR = affR; affectedT = affT; affectedB = affB; showDisplayBits(); affL = affT = 9999; affR = affB = -9999; } } } } } affectedL = affL; affectedR = affR; affectedT = affT; affectedB = affB; /* begin storeInteger:ofObject:withValue: */ objectPointer = bitBltOop; integerValue = destX; if ((integerValue ^ (integerValue << 1)) >= 0) { longAtput(((((char *) objectPointer)) + 4) + (4 << 2), ((integerValue << 1) | 1)); } else { primitiveFail(); } /* begin storeInteger:ofObject:withValue: */ objectPointer1 = bitBltOop; integerValue1 = destY; if ((integerValue1 ^ (integerValue1 << 1)) >= 0) { longAtput(((((char *) objectPointer1)) + 4) + (5 << 2), ((integerValue1 << 1) | 1)); } else { primitiveFail(); } showDisplayBits(); /* begin pop: */ stackPointer -= 2 * 4; } } int primitiveEqual(void) { int integerReceiver; int integerArgument; int result; int top; int top1; int sp; int sp1; successFlag = true; /* begin popStack */ top = longAt(stackPointer); stackPointer -= 4; integerArgument = top; /* begin popStack */ top1 = longAt(stackPointer); stackPointer -= 4; integerReceiver = top1; /* begin compare31or32Bits:equal: */ if (((integerReceiver & 1)) && ((integerArgument & 1))) { result = integerReceiver == integerArgument; goto l1; } result = (positive32BitValueOf(integerReceiver)) == (positive32BitValueOf(integerArgument)); l1: /* end compare31or32Bits:equal: */; /* begin checkBooleanResult:from: */ if (successFlag) { /* begin pushBool: */ if (result) { /* begin push: */ longAtput(sp = stackPointer + 4, trueObj); stackPointer = sp; } else { /* begin push: */ longAtput(sp1 = stackPointer + 4, falseObj); stackPointer = sp1; } } else { /* begin unPop: */ stackPointer += 2 * 4; failSpecialPrim(7); } } int primitiveEquivalent(void) { int thisObject; int otherObject; int top; int top1; int sp; int sp1; /* begin popStack */ top = longAt(stackPointer); stackPointer -= 4; otherObject = top; /* begin popStack */ top1 = longAt(stackPointer); stackPointer -= 4; thisObject = top1; /* begin pushBool: */ if (thisObject == otherObject) { /* begin push: */ longAtput(sp = stackPointer + 4, trueObj); stackPointer = sp; } else { /* begin push: */ longAtput(sp1 = stackPointer + 4, falseObj); stackPointer = sp1; } } int primitiveExitToDebugger(void) { error("Exit to debugger at user request"); } int primitiveExp(void) { double rcvr; rcvr = popFloat(); if (successFlag) { pushFloat(exp(rcvr)); } else { /* begin unPop: */ stackPointer += 1 * 4; } } int primitiveExponent(void) { int pwr; double frac; double rcvr; int sp; rcvr = popFloat(); if (successFlag) { frac = frexp(rcvr, &pwr); /* begin pushInteger: */ /* begin push: */ longAtput(sp = stackPointer + 4, (((pwr - 1) << 1) | 1)); stackPointer = sp; } else { /* begin unPop: */ stackPointer += 1 * 4; } } int primitiveFail(void) { successFlag = false; } int primitiveFileAtEnd(void) { int atEnd; SQFile *file; int sp; int sp1; file = fileValueOf(longAt(stackPointer)); if (successFlag) { atEnd = sqFileAtEnd(file); } if (successFlag) { /* begin pop: */ stackPointer -= 2 * 4; /* begin pushBool: */ if (atEnd) { /* begin push: */ longAtput(sp = stackPointer + 4, trueObj); stackPointer = sp; } else { /* begin push: */ longAtput(sp1 = stackPointer + 4, falseObj); stackPointer = sp1; } } } int primitiveFileClose(void) { SQFile *file; file = fileValueOf(longAt(stackPointer)); if (successFlag) { sqFileClose(file); } if (successFlag) { /* begin pop: */ stackPointer -= 1 * 4; } } int primitiveFileDelete(void) { int nameIndex; int namePointer; int nameSize; int sz; int header; int fmt; namePointer = longAt(stackPointer); /* begin success: */ successFlag = (((((unsigned) (longAt(namePointer))) >> 8) & 15) >= 8) && successFlag; if (successFlag) { nameIndex = namePointer + 4; /* begin lengthOf: */ header = longAt(namePointer); if ((header & 3) == 0) { sz = (longAt(namePointer - 8)) & 4294967292U; } else { sz = header & 252; } fmt = (((unsigned) header) >> 8) & 15; if (fmt < 8) { nameSize = ((unsigned) (sz - 4)) >> 2; goto l1; } else { nameSize = (sz - 4) - (fmt & 3); goto l1; } l1: /* end lengthOf: */; } if (successFlag) { sqFileDeleteNameSize(nameIndex, nameSize); } if (successFlag) { /* begin pop: */ stackPointer -= 1 * 4; } } int primitiveFileGetPosition(void) { int position; SQFile *file; int sp; file = fileValueOf(longAt(stackPointer)); if (successFlag) { position = sqFileGetPosition(file); } if (successFlag) { /* begin pop: */ stackPointer -= 2 * 4; /* begin pushInteger: */ /* begin push: */ longAtput(sp = stackPointer + 4, ((position << 1) | 1)); stackPointer = sp; } } int primitiveFileOpen(void) { int writeFlag; int nameIndex; int namePointer; int nameSize; int filePointer; SQFile *file; int sz; int header; int fmt; int sp; /* begin booleanValueOf: */ if ((longAt(stackPointer)) == trueObj) { writeFlag = true; goto l2; } if ((longAt(stackPointer)) == falseObj) { writeFlag = false; goto l2; } successFlag = false; writeFlag = null; l2: /* end booleanValueOf: */; namePointer = longAt(stackPointer - (1 * 4)); /* begin success: */ successFlag = (((((unsigned) (longAt(namePointer))) >> 8) & 15) >= 8) && successFlag; if (successFlag) { filePointer = instantiateClassindexableSize(longAt(((((char *) specialObjectsOop)) + 4) + (26 << 2)), fileRecordSize()); file = fileValueOf(filePointer); nameIndex = namePointer + 4; /* begin lengthOf: */ header = longAt(namePointer); if ((header & 3) == 0) { sz = (longAt(namePointer - 8)) & 4294967292U; } else { sz = header & 252; } fmt = (((unsigned) header) >> 8) & 15; if (fmt < 8) { nameSize = ((unsigned) (sz - 4)) >> 2; goto l1; } else { nameSize = (sz - 4) - (fmt & 3); goto l1; } l1: /* end lengthOf: */; } if (successFlag) { sqFileOpen(file, nameIndex, nameSize, writeFlag); } if (successFlag) { /* begin pop: */ stackPointer -= 3 * 4; /* begin push: */ longAtput(sp = stackPointer + 4, filePointer); stackPointer = sp; } } int primitiveFileRead(void) { int array; int startIndex; int arrayIndex; int bytesRead; int byteSize; int count; SQFile *file; int sp; int integerPointer; int integerPointer1; int successValue; int successValue1; int fmt; /* begin stackIntegerValue: */ integerPointer = longAt(stackPointer - (0 * 4)); if ((integerPointer & 1)) { count = (integerPointer >> 1); goto l1; } else { primitiveFail(); count = 0; goto l1; } l1: /* end stackIntegerValue: */; /* begin stackIntegerValue: */ integerPointer1 = longAt(stackPointer - (1 * 4)); if ((integerPointer1 & 1)) { startIndex = (integerPointer1 >> 1); goto l2; } else { primitiveFail(); startIndex = 0; goto l2; } l2: /* end stackIntegerValue: */; array = longAt(stackPointer - (2 * 4)); file = fileValueOf(longAt(stackPointer - (3 * 4))); /* begin success: */ /* begin isWordsOrBytes: */ fmt = (((unsigned) (longAt(array))) >> 8) & 15; successValue = (fmt == 6) || ((fmt >= 8) && (fmt <= 11)); successFlag = successValue && successFlag; if (((((unsigned) (longAt(array))) >> 8) & 15) == 6) { byteSize = 4; } else { byteSize = 1; } /* begin success: */ successValue1 = (startIndex >= 1) && (((startIndex + count) - 1) <= (lengthOf(array))); successFlag = successValue1 && successFlag; if (successFlag) { arrayIndex = array + 4; bytesRead = sqFileReadIntoAt(file, count * byteSize, arrayIndex, (startIndex - 1) * byteSize); } if (successFlag) { /* begin pop: */ stackPointer -= 5 * 4; /* begin pushInteger: */ /* begin push: */ longAtput(sp = stackPointer + 4, (((bytesRead / byteSize) << 1) | 1)); stackPointer = sp; } } int primitiveFileRename(void) { int newNameIndex; int newNamePointer; int newNameSize; int oldNamePointer; int oldNameIndex; int oldNameSize; int sz; int header; int fmt; int sz1; int header1; int fmt1; newNamePointer = longAt(stackPointer); oldNamePointer = longAt(stackPointer - (1 * 4)); /* begin success: */ successFlag = (((((unsigned) (longAt(newNamePointer))) >> 8) & 15) >= 8) && successFlag; /* begin success: */ successFlag = (((((unsigned) (longAt(oldNamePointer))) >> 8) & 15) >= 8) && successFlag; if (successFlag) { newNameIndex = newNamePointer + 4; /* begin lengthOf: */ header = longAt(newNamePointer); if ((header & 3) == 0) { sz = (longAt(newNamePointer - 8)) & 4294967292U; } else { sz = header & 252; } fmt = (((unsigned) header) >> 8) & 15; if (fmt < 8) { newNameSize = ((unsigned) (sz - 4)) >> 2; goto l1; } else { newNameSize = (sz - 4) - (fmt & 3); goto l1; } l1: /* end lengthOf: */; oldNameIndex = oldNamePointer + 4; /* begin lengthOf: */ header1 = longAt(oldNamePointer); if ((header1 & 3) == 0) { sz1 = (longAt(oldNamePointer - 8)) & 4294967292U; } else { sz1 = header1 & 252; } fmt1 = (((unsigned) header1) >> 8) & 15; if (fmt1 < 8) { oldNameSize = ((unsigned) (sz1 - 4)) >> 2; goto l2; } else { oldNameSize = (sz1 - 4) - (fmt1 & 3); goto l2; } l2: /* end lengthOf: */; } if (successFlag) { sqFileRenameOldSizeNewSize(oldNameIndex, oldNameSize, newNameIndex, newNameSize); } if (successFlag) { /* begin pop: */ stackPointer -= 2 * 4; } } int primitiveFileSetPosition(void) { int newPosition; SQFile *file; int integerPointer; /* begin stackIntegerValue: */ integerPointer = longAt(stackPointer - (0 * 4)); if ((integerPointer & 1)) { newPosition = (integerPointer >> 1); goto l1; } else { primitiveFail(); newPosition = 0; goto l1; } l1: /* end stackIntegerValue: */; file = fileValueOf(longAt(stackPointer - (1 * 4))); if (successFlag) { sqFileSetPosition(file, newPosition); } if (successFlag) { /* begin pop: */ stackPointer -= 2 * 4; } } int primitiveFileSize(void) { int size; SQFile *file; int sp; file = fileValueOf(longAt(stackPointer)); if (successFlag) { size = sqFileSize(file); } if (successFlag) { /* begin pop: */ stackPointer -= 2 * 4; /* begin pushInteger: */ /* begin push: */ longAtput(sp = stackPointer + 4, ((size << 1) | 1)); stackPointer = sp; } } int primitiveFileWrite(void) { int array; int startIndex; int arrayIndex; int bytesWritten; int byteSize; int count; SQFile *file; int sp; int integerPointer; int integerPointer1; int successValue; int successValue1; int fmt; /* begin stackIntegerValue: */ integerPointer = longAt(stackPointer - (0 * 4)); if ((integerPointer & 1)) { count = (integerPointer >> 1); goto l1; } else { primitiveFail(); count = 0; goto l1; } l1: /* end stackIntegerValue: */; /* begin stackIntegerValue: */ integerPointer1 = longAt(stackPointer - (1 * 4)); if ((integerPointer1 & 1)) { startIndex = (integerPointer1 >> 1); goto l2; } else { primitiveFail(); startIndex = 0; goto l2; } l2: /* end stackIntegerValue: */; array = longAt(stackPointer - (2 * 4)); file = fileValueOf(longAt(stackPointer - (3 * 4))); /* begin success: */ /* begin isWordsOrBytes: */ fmt = (((unsigned) (longAt(array))) >> 8) & 15; successValue = (fmt == 6) || ((fmt >= 8) && (fmt <= 11)); successFlag = successValue && successFlag; if (((((unsigned) (longAt(array))) >> 8) & 15) == 6) { byteSize = 4; } else { byteSize = 1; } /* begin success: */ successValue1 = (startIndex >= 1) && (((startIndex + count) - 1) <= (lengthOf(array))); successFlag = successValue1 && successFlag; if (successFlag) { arrayIndex = array + 4; bytesWritten = sqFileWriteFromAt(file, count * byteSize, arrayIndex, (startIndex - 1) * byteSize); } if (successFlag) { /* begin pop: */ stackPointer -= 5 * 4; /* begin pushInteger: */ /* begin push: */ longAtput(sp = stackPointer + 4, (((bytesWritten / byteSize) << 1) | 1)); stackPointer = sp; } } int primitiveFloatAdd(void) { double arg; int argOop; int rcvrOop; double rcvr; double result; int resultOop; int sp; int floatClass; int ccIndex; int cl; int ccIndex1; int cl1; rcvrOop = longAt(stackPointer - (1 * 4)); argOop = longAt(stackPointer); /* begin assertFloat:and: */ if (((rcvrOop | argOop) & 1) != 0) { successFlag = false; } else { floatClass = longAt(((((char *) specialObjectsOop)) + 4) + (9 << 2)); /* begin assertClassOf:is: */ if ((rcvrOop & 1)) { successFlag = false; goto l1; } ccIndex = (((unsigned) (longAt(rcvrOop))) >> 12) & 31; if (ccIndex == 0) { cl = (longAt(rcvrOop - 4)) & 4294967292U; } else { cl = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + ((ccIndex - 1) << 2)); } /* begin success: */ successFlag = (cl == floatClass) && successFlag; l1: /* end assertClassOf:is: */; /* begin assertClassOf:is: */ if ((argOop & 1)) { successFlag = false; goto l2; } ccIndex1 = (((unsigned) (longAt(argOop))) >> 12) & 31; if (ccIndex1 == 0) { cl1 = (longAt(argOop - 4)) & 4294967292U; } else { cl1 = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + ((ccIndex1 - 1) << 2)); } /* begin success: */ successFlag = (cl1 == floatClass) && successFlag; l2: /* end assertClassOf:is: */; } if (successFlag) { fetchFloatAtinto(rcvrOop + 4, rcvr); fetchFloatAtinto(argOop + 4, arg); result = rcvr + arg; resultOop = clone(rcvrOop); storeFloatAtfrom(resultOop + 4, result); /* begin pop:thenPush: */ longAtput(sp = stackPointer - ((2 - 1) * 4), resultOop); stackPointer = sp; } } int primitiveFloatDivide(void) { double arg; int argOop; int rcvrOop; double rcvr; double result; int resultOop; int sp; int floatClass; int ccIndex; int cl; int ccIndex1; int cl1; rcvrOop = longAt(stackPointer - (1 * 4)); argOop = longAt(stackPointer); /* begin assertFloat:and: */ if (((rcvrOop | argOop) & 1) != 0) { successFlag = false; } else { floatClass = longAt(((((char *) specialObjectsOop)) + 4) + (9 << 2)); /* begin assertClassOf:is: */ if ((rcvrOop & 1)) { successFlag = false; goto l1; } ccIndex = (((unsigned) (longAt(rcvrOop))) >> 12) & 31; if (ccIndex == 0) { cl = (longAt(rcvrOop - 4)) & 4294967292U; } else { cl = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + ((ccIndex - 1) << 2)); } /* begin success: */ successFlag = (cl == floatClass) && successFlag; l1: /* end assertClassOf:is: */; /* begin assertClassOf:is: */ if ((argOop & 1)) { successFlag = false; goto l2; } ccIndex1 = (((unsigned) (longAt(argOop))) >> 12) & 31; if (ccIndex1 == 0) { cl1 = (longAt(argOop - 4)) & 4294967292U; } else { cl1 = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + ((ccIndex1 - 1) << 2)); } /* begin success: */ successFlag = (cl1 == floatClass) && successFlag; l2: /* end assertClassOf:is: */; } if (successFlag) { fetchFloatAtinto(rcvrOop + 4, rcvr); fetchFloatAtinto(argOop + 4, arg); /* begin success: */ successFlag = (arg != 0.0) && successFlag; if (successFlag) { result = rcvr / arg; resultOop = clone(rcvrOop); storeFloatAtfrom(resultOop + 4, result); /* begin pop:thenPush: */ longAtput(sp = stackPointer - ((2 - 1) * 4), resultOop); stackPointer = sp; } } } int primitiveFloatEqual(void) { double arg; int argOop; int rcvrOop; double rcvr; int sp; int sp1; int floatClass; int ccIndex; int cl; int ccIndex1; int cl1; rcvrOop = longAt(stackPointer - (1 * 4)); argOop = longAt(stackPointer); /* begin assertFloat:and: */ if (((rcvrOop | argOop) & 1) != 0) { successFlag = false; } else { floatClass = longAt(((((char *) specialObjectsOop)) + 4) + (9 << 2)); /* begin assertClassOf:is: */ if ((rcvrOop & 1)) { successFlag = false; goto l1; } ccIndex = (((unsigned) (longAt(rcvrOop))) >> 12) & 31; if (ccIndex == 0) { cl = (longAt(rcvrOop - 4)) & 4294967292U; } else { cl = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + ((ccIndex - 1) << 2)); } /* begin success: */ successFlag = (cl == floatClass) && successFlag; l1: /* end assertClassOf:is: */; /* begin assertClassOf:is: */ if ((argOop & 1)) { successFlag = false; goto l2; } ccIndex1 = (((unsigned) (longAt(argOop))) >> 12) & 31; if (ccIndex1 == 0) { cl1 = (longAt(argOop - 4)) & 4294967292U; } else { cl1 = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + ((ccIndex1 - 1) << 2)); } /* begin success: */ successFlag = (cl1 == floatClass) && successFlag; l2: /* end assertClassOf:is: */; } if (successFlag) { fetchFloatAtinto(rcvrOop + 4, rcvr); fetchFloatAtinto(argOop + 4, arg); /* begin pop: */ stackPointer -= 2 * 4; /* begin pushBool: */ if (rcvr == arg) { /* begin push: */ longAtput(sp = stackPointer + 4, trueObj); stackPointer = sp; } else { /* begin push: */ longAtput(sp1 = stackPointer + 4, falseObj); stackPointer = sp1; } } } int primitiveFloatGreaterOrEqual(void) { double arg; int argOop; int rcvrOop; double rcvr; int sp; int sp1; int floatClass; int ccIndex; int cl; int ccIndex1; int cl1; rcvrOop = longAt(stackPointer - (1 * 4)); argOop = longAt(stackPointer); /* begin assertFloat:and: */ if (((rcvrOop | argOop) & 1) != 0) { successFlag = false; } else { floatClass = longAt(((((char *) specialObjectsOop)) + 4) + (9 << 2)); /* begin assertClassOf:is: */ if ((rcvrOop & 1)) { successFlag = false; goto l1; } ccIndex = (((unsigned) (longAt(rcvrOop))) >> 12) & 31; if (ccIndex == 0) { cl = (longAt(rcvrOop - 4)) & 4294967292U; } else { cl = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + ((ccIndex - 1) << 2)); } /* begin success: */ successFlag = (cl == floatClass) && successFlag; l1: /* end assertClassOf:is: */; /* begin assertClassOf:is: */ if ((argOop & 1)) { successFlag = false; goto l2; } ccIndex1 = (((unsigned) (longAt(argOop))) >> 12) & 31; if (ccIndex1 == 0) { cl1 = (longAt(argOop - 4)) & 4294967292U; } else { cl1 = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + ((ccIndex1 - 1) << 2)); } /* begin success: */ successFlag = (cl1 == floatClass) && successFlag; l2: /* end assertClassOf:is: */; } if (successFlag) { fetchFloatAtinto(rcvrOop + 4, rcvr); fetchFloatAtinto(argOop + 4, arg); /* begin pop: */ stackPointer -= 2 * 4; /* begin pushBool: */ if (rcvr >= arg) { /* begin push: */ longAtput(sp = stackPointer + 4, trueObj); stackPointer = sp; } else { /* begin push: */ longAtput(sp1 = stackPointer + 4, falseObj); stackPointer = sp1; } } } int primitiveFloatGreaterThan(void) { double arg; int argOop; int rcvrOop; double rcvr; int sp; int sp1; int floatClass; int ccIndex; int cl; int ccIndex1; int cl1; rcvrOop = longAt(stackPointer - (1 * 4)); argOop = longAt(stackPointer); /* begin assertFloat:and: */ if (((rcvrOop | argOop) & 1) != 0) { successFlag = false; } else { floatClass = longAt(((((char *) specialObjectsOop)) + 4) + (9 << 2)); /* begin assertClassOf:is: */ if ((rcvrOop & 1)) { successFlag = false; goto l1; } ccIndex = (((unsigned) (longAt(rcvrOop))) >> 12) & 31; if (ccIndex == 0) { cl = (longAt(rcvrOop - 4)) & 4294967292U; } else { cl = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + ((ccIndex - 1) << 2)); } /* begin success: */ successFlag = (cl == floatClass) && successFlag; l1: /* end assertClassOf:is: */; /* begin assertClassOf:is: */ if ((argOop & 1)) { successFlag = false; goto l2; } ccIndex1 = (((unsigned) (longAt(argOop))) >> 12) & 31; if (ccIndex1 == 0) { cl1 = (longAt(argOop - 4)) & 4294967292U; } else { cl1 = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + ((ccIndex1 - 1) << 2)); } /* begin success: */ successFlag = (cl1 == floatClass) && successFlag; l2: /* end assertClassOf:is: */; } if (successFlag) { fetchFloatAtinto(rcvrOop + 4, rcvr); fetchFloatAtinto(argOop + 4, arg); /* begin pop: */ stackPointer -= 2 * 4; /* begin pushBool: */ if (rcvr > arg) { /* begin push: */ longAtput(sp = stackPointer + 4, trueObj); stackPointer = sp; } else { /* begin push: */ longAtput(sp1 = stackPointer + 4, falseObj); stackPointer = sp1; } } } int primitiveFloatLessOrEqual(void) { double arg; int argOop; int rcvrOop; double rcvr; int sp; int sp1; int floatClass; int ccIndex; int cl; int ccIndex1; int cl1; rcvrOop = longAt(stackPointer - (1 * 4)); argOop = longAt(stackPointer); /* begin assertFloat:and: */ if (((rcvrOop | argOop) & 1) != 0) { successFlag = false; } else { floatClass = longAt(((((char *) specialObjectsOop)) + 4) + (9 << 2)); /* begin assertClassOf:is: */ if ((rcvrOop & 1)) { successFlag = false; goto l1; } ccIndex = (((unsigned) (longAt(rcvrOop))) >> 12) & 31; if (ccIndex == 0) { cl = (longAt(rcvrOop - 4)) & 4294967292U; } else { cl = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + ((ccIndex - 1) << 2)); } /* begin success: */ successFlag = (cl == floatClass) && successFlag; l1: /* end assertClassOf:is: */; /* begin assertClassOf:is: */ if ((argOop & 1)) { successFlag = false; goto l2; } ccIndex1 = (((unsigned) (longAt(argOop))) >> 12) & 31; if (ccIndex1 == 0) { cl1 = (longAt(argOop - 4)) & 4294967292U; } else { cl1 = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + ((ccIndex1 - 1) << 2)); } /* begin success: */ successFlag = (cl1 == floatClass) && successFlag; l2: /* end assertClassOf:is: */; } if (successFlag) { fetchFloatAtinto(rcvrOop + 4, rcvr); fetchFloatAtinto(argOop + 4, arg); /* begin pop: */ stackPointer -= 2 * 4; /* begin pushBool: */ if (rcvr <= arg) { /* begin push: */ longAtput(sp = stackPointer + 4, trueObj); stackPointer = sp; } else { /* begin push: */ longAtput(sp1 = stackPointer + 4, falseObj); stackPointer = sp1; } } } int primitiveFloatLessThan(void) { double arg; int argOop; int rcvrOop; double rcvr; int sp; int sp1; int floatClass; int ccIndex; int cl; int ccIndex1; int cl1; rcvrOop = longAt(stackPointer - (1 * 4)); argOop = longAt(stackPointer); /* begin assertFloat:and: */ if (((rcvrOop | argOop) & 1) != 0) { successFlag = false; } else { floatClass = longAt(((((char *) specialObjectsOop)) + 4) + (9 << 2)); /* begin assertClassOf:is: */ if ((rcvrOop & 1)) { successFlag = false; goto l1; } ccIndex = (((unsigned) (longAt(rcvrOop))) >> 12) & 31; if (ccIndex == 0) { cl = (longAt(rcvrOop - 4)) & 4294967292U; } else { cl = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + ((ccIndex - 1) << 2)); } /* begin success: */ successFlag = (cl == floatClass) && successFlag; l1: /* end assertClassOf:is: */; /* begin assertClassOf:is: */ if ((argOop & 1)) { successFlag = false; goto l2; } ccIndex1 = (((unsigned) (longAt(argOop))) >> 12) & 31; if (ccIndex1 == 0) { cl1 = (longAt(argOop - 4)) & 4294967292U; } else { cl1 = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + ((ccIndex1 - 1) << 2)); } /* begin success: */ successFlag = (cl1 == floatClass) && successFlag; l2: /* end assertClassOf:is: */; } if (successFlag) { fetchFloatAtinto(rcvrOop + 4, rcvr); fetchFloatAtinto(argOop + 4, arg); /* begin pop: */ stackPointer -= 2 * 4; /* begin pushBool: */ if (rcvr < arg) { /* begin push: */ longAtput(sp = stackPointer + 4, trueObj); stackPointer = sp; } else { /* begin push: */ longAtput(sp1 = stackPointer + 4, falseObj); stackPointer = sp1; } } } int primitiveFloatMultiply(void) { double arg; int argOop; int rcvrOop; double rcvr; double result; int resultOop; int sp; int floatClass; int ccIndex; int cl; int ccIndex1; int cl1; rcvrOop = longAt(stackPointer - (1 * 4)); argOop = longAt(stackPointer); /* begin assertFloat:and: */ if (((rcvrOop | argOop) & 1) != 0) { successFlag = false; } else { floatClass = longAt(((((char *) specialObjectsOop)) + 4) + (9 << 2)); /* begin assertClassOf:is: */ if ((rcvrOop & 1)) { successFlag = false; goto l1; } ccIndex = (((unsigned) (longAt(rcvrOop))) >> 12) & 31; if (ccIndex == 0) { cl = (longAt(rcvrOop - 4)) & 4294967292U; } else { cl = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + ((ccIndex - 1) << 2)); } /* begin success: */ successFlag = (cl == floatClass) && successFlag; l1: /* end assertClassOf:is: */; /* begin assertClassOf:is: */ if ((argOop & 1)) { successFlag = false; goto l2; } ccIndex1 = (((unsigned) (longAt(argOop))) >> 12) & 31; if (ccIndex1 == 0) { cl1 = (longAt(argOop - 4)) & 4294967292U; } else { cl1 = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + ((ccIndex1 - 1) << 2)); } /* begin success: */ successFlag = (cl1 == floatClass) && successFlag; l2: /* end assertClassOf:is: */; } if (successFlag) { fetchFloatAtinto(rcvrOop + 4, rcvr); fetchFloatAtinto(argOop + 4, arg); result = rcvr * arg; resultOop = clone(rcvrOop); storeFloatAtfrom(resultOop + 4, result); /* begin pop:thenPush: */ longAtput(sp = stackPointer - ((2 - 1) * 4), resultOop); stackPointer = sp; } } int primitiveFloatNotEqual(void) { double arg; int argOop; int rcvrOop; double rcvr; int sp; int sp1; int floatClass; int ccIndex; int cl; int ccIndex1; int cl1; rcvrOop = longAt(stackPointer - (1 * 4)); argOop = longAt(stackPointer); /* begin assertFloat:and: */ if (((rcvrOop | argOop) & 1) != 0) { successFlag = false; } else { floatClass = longAt(((((char *) specialObjectsOop)) + 4) + (9 << 2)); /* begin assertClassOf:is: */ if ((rcvrOop & 1)) { successFlag = false; goto l1; } ccIndex = (((unsigned) (longAt(rcvrOop))) >> 12) & 31; if (ccIndex == 0) { cl = (longAt(rcvrOop - 4)) & 4294967292U; } else { cl = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + ((ccIndex - 1) << 2)); } /* begin success: */ successFlag = (cl == floatClass) && successFlag; l1: /* end assertClassOf:is: */; /* begin assertClassOf:is: */ if ((argOop & 1)) { successFlag = false; goto l2; } ccIndex1 = (((unsigned) (longAt(argOop))) >> 12) & 31; if (ccIndex1 == 0) { cl1 = (longAt(argOop - 4)) & 4294967292U; } else { cl1 = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + ((ccIndex1 - 1) << 2)); } /* begin success: */ successFlag = (cl1 == floatClass) && successFlag; l2: /* end assertClassOf:is: */; } if (successFlag) { fetchFloatAtinto(rcvrOop + 4, rcvr); fetchFloatAtinto(argOop + 4, arg); /* begin pop: */ stackPointer -= 2 * 4; /* begin pushBool: */ if (rcvr != arg) { /* begin push: */ longAtput(sp = stackPointer + 4, trueObj); stackPointer = sp; } else { /* begin push: */ longAtput(sp1 = stackPointer + 4, falseObj); stackPointer = sp1; } } } int primitiveFloatSubtract(void) { double arg; int argOop; int rcvrOop; double rcvr; double result; int resultOop; int sp; int floatClass; int ccIndex; int cl; int ccIndex1; int cl1; rcvrOop = longAt(stackPointer - (1 * 4)); argOop = longAt(stackPointer); /* begin assertFloat:and: */ if (((rcvrOop | argOop) & 1) != 0) { successFlag = false; } else { floatClass = longAt(((((char *) specialObjectsOop)) + 4) + (9 << 2)); /* begin assertClassOf:is: */ if ((rcvrOop & 1)) { successFlag = false; goto l1; } ccIndex = (((unsigned) (longAt(rcvrOop))) >> 12) & 31; if (ccIndex == 0) { cl = (longAt(rcvrOop - 4)) & 4294967292U; } else { cl = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + ((ccIndex - 1) << 2)); } /* begin success: */ successFlag = (cl == floatClass) && successFlag; l1: /* end assertClassOf:is: */; /* begin assertClassOf:is: */ if ((argOop & 1)) { successFlag = false; goto l2; } ccIndex1 = (((unsigned) (longAt(argOop))) >> 12) & 31; if (ccIndex1 == 0) { cl1 = (longAt(argOop - 4)) & 4294967292U; } else { cl1 = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + ((ccIndex1 - 1) << 2)); } /* begin success: */ successFlag = (cl1 == floatClass) && successFlag; l2: /* end assertClassOf:is: */; } if (successFlag) { fetchFloatAtinto(rcvrOop + 4, rcvr); fetchFloatAtinto(argOop + 4, arg); result = rcvr - arg; resultOop = clone(rcvrOop); storeFloatAtfrom(resultOop + 4, result); /* begin pop:thenPush: */ longAtput(sp = stackPointer - ((2 - 1) * 4), resultOop); stackPointer = sp; } } int primitiveFlushCache(void) { int i; /* begin flushMethodCache */ for (i = 1; i <= 2048; i += 1) { methodCache[i] = 0; } mcProbe = 0; } int primitiveFlushCacheSelective(void) { int selector; int i; int nCols; int col; selector = longAt(stackPointer); nCols = 2048 / 512; for (i = 1; i <= 512; i += 1) { if ((methodCache[i]) == selector) { for (col = 0; col <= (nCols - 1); col += 1) { methodCache[i + (512 * col)] = 0; } } } } int primitiveForceDisplayUpdate(void) { ioForceDisplayUpdate(); } int primitiveFormPrint(void) { double vScale; int depth; int pixelsPerWord; int bitsArray; double hScale; int wordsPerLine; int h; int w; int bitsArraySize; int landscapeFlag; int ok; int rcvr; /* begin booleanValueOf: */ if ((longAt(stackPointer)) == trueObj) { landscapeFlag = true; goto l1; } if ((longAt(stackPointer)) == falseObj) { landscapeFlag = false; goto l1; } successFlag = false; landscapeFlag = null; l1: /* end booleanValueOf: */; vScale = floatValueOf(longAt(stackPointer - (1 * 4))); hScale = floatValueOf(longAt(stackPointer - (2 * 4))); rcvr = longAt(stackPointer - (3 * 4)); if ((rcvr & 1)) { /* begin success: */ successFlag = false && successFlag; } if (successFlag) { if (!((((((unsigned) (longAt(rcvr))) >> 8) & 15) <= 4) && ((lengthOf(rcvr)) >= 4))) { /* begin success: */ successFlag = false && successFlag; } } if (successFlag) { bitsArray = longAt(((((char *) rcvr)) + 4) + (0 << 2)); w = fetchIntegerofObject(1, rcvr); h = fetchIntegerofObject(2, rcvr); depth = fetchIntegerofObject(3, rcvr); if (!((w > 0) && (h > 0))) { /* begin success: */ successFlag = false && successFlag; } pixelsPerWord = 32 / depth; wordsPerLine = (w + (pixelsPerWord - 1)) / pixelsPerWord; if ((!((rcvr & 1))) && (isWordsOrBytes(bitsArray))) { bitsArraySize = byteLengthOf(bitsArray); /* begin success: */ successFlag = (bitsArraySize == ((wordsPerLine * h) * 4)) && successFlag; } else { /* begin success: */ successFlag = false && successFlag; } } if (successFlag) { ok = ioFormPrint(bitsArray + 4, w, h, depth, hScale, vScale, landscapeFlag); /* begin success: */ successFlag = ok && successFlag; } if (successFlag) { /* begin pop: */ stackPointer -= 3 * 4; } } int primitiveFractionalPart(void) { double trunc; double frac; double rcvr; rcvr = popFloat(); if (successFlag) { frac = modf(rcvr, &trunc); pushFloat(frac); } else { /* begin unPop: */ stackPointer += 1 * 4; } } int primitiveFullGC(void) { int sp; /* begin pop: */ stackPointer -= 1 * 4; incrementalGC(); fullGC(); /* begin pushInteger: */ /* begin push: */ longAtput(sp = stackPointer + 4, ((((longAt(freeBlock)) & 536870908) << 1) | 1)); stackPointer = sp; } int primitiveGetAttribute(void) { int attr; int sz; int s; int sp; int integerPointer; /* begin stackIntegerValue: */ integerPointer = longAt(stackPointer - (0 * 4)); if ((integerPointer & 1)) { attr = (integerPointer >> 1); goto l1; } else { primitiveFail(); attr = 0; goto l1; } l1: /* end stackIntegerValue: */; if (successFlag) { sz = attributeSize(attr); } if (successFlag) { s = instantiateClassindexableSize(longAt(((((char *) specialObjectsOop)) + 4) + (6 << 2)), sz); getAttributeIntoLength(attr, s + 4, sz); /* begin pop: */ stackPointer -= 2 * 4; /* begin push: */ longAtput(sp = stackPointer + 4, s); stackPointer = sp; } } int primitiveGreaterOrEqual(void) { int integerReceiver; int integerArgument; int integerPointer; int top; int integerPointer1; int top1; int sp; int sp1; successFlag = true; /* begin popInteger */ /* begin popStack */ top = longAt(stackPointer); stackPointer -= 4; integerPointer = top; if ((integerPointer & 1)) { integerArgument = (integerPointer >> 1); goto l1; } else { successFlag = false; integerArgument = 1; goto l1; } l1: /* end popInteger */; /* begin popInteger */ /* begin popStack */ top1 = longAt(stackPointer); stackPointer -= 4; integerPointer1 = top1; if ((integerPointer1 & 1)) { integerReceiver = (integerPointer1 >> 1); goto l2; } else { successFlag = false; integerReceiver = 1; goto l2; } l2: /* end popInteger */; /* begin checkBooleanResult:from: */ if (successFlag) { /* begin pushBool: */ if (integerReceiver >= integerArgument) { /* begin push: */ longAtput(sp = stackPointer + 4, trueObj); stackPointer = sp; } else { /* begin push: */ longAtput(sp1 = stackPointer + 4, falseObj); stackPointer = sp1; } } else { /* begin unPop: */ stackPointer += 2 * 4; failSpecialPrim(6); } } int primitiveGreaterThan(void) { int integerReceiver; int integerArgument; int integerPointer; int top; int integerPointer1; int top1; int sp; int sp1; successFlag = true; /* begin popInteger */ /* begin popStack */ top = longAt(stackPointer); stackPointer -= 4; integerPointer = top; if ((integerPointer & 1)) { integerArgument = (integerPointer >> 1); goto l1; } else { successFlag = false; integerArgument = 1; goto l1; } l1: /* end popInteger */; /* begin popInteger */ /* begin popStack */ top1 = longAt(stackPointer); stackPointer -= 4; integerPointer1 = top1; if ((integerPointer1 & 1)) { integerReceiver = (integerPointer1 >> 1); goto l2; } else { successFlag = false; integerReceiver = 1; goto l2; } l2: /* end popInteger */; /* begin checkBooleanResult:from: */ if (successFlag) { /* begin pushBool: */ if (integerReceiver > integerArgument) { /* begin push: */ longAtput(sp = stackPointer + 4, trueObj); stackPointer = sp; } else { /* begin push: */ longAtput(sp1 = stackPointer + 4, falseObj); stackPointer = sp1; } } else { /* begin unPop: */ stackPointer += 2 * 4; failSpecialPrim(4); } } int primitiveImageName(void) { int sz; int s; int sp; int ccIndex; int cl; int hdr; int totalLength; int fmt; int fixedFields; int sz1; int classFormat; int class; int ccIndex1; if (argumentCount == 1) { s = longAt(stackPointer); /* begin assertClassOf:is: */ if ((s & 1)) { successFlag = false; goto l1; } ccIndex = (((unsigned) (longAt(s))) >> 12) & 31; if (ccIndex == 0) { cl = (longAt(s - 4)) & 4294967292U; } else { cl = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + ((ccIndex - 1) << 2)); } /* begin success: */ successFlag = (cl == (longAt(((((char *) specialObjectsOop)) + 4) + (6 << 2)))) && successFlag; l1: /* end assertClassOf:is: */; if (successFlag) { /* begin stSizeOf: */ hdr = longAt(s); fmt = (((unsigned) hdr) >> 8) & 15; /* begin lengthOf:baseHeader:format: */ if ((hdr & 3) == 0) { sz1 = (longAt(s - 8)) & 4294967292U; } else { sz1 = hdr & 252; } if (fmt < 8) { totalLength = ((unsigned) (sz1 - 4)) >> 2; goto l4; } else { totalLength = (sz1 - 4) - (fmt & 3); goto l4; } l4: /* end lengthOf:baseHeader:format: */; /* begin fixedFieldsOf:format:length: */ if ((fmt > 3) || (fmt == 2)) { fixedFields = 0; goto l2; } if (fmt < 2) { fixedFields = totalLength; goto l2; } /* begin fetchClassOf: */ if ((s & 1)) { class = longAt(((((char *) specialObjectsOop)) + 4) + (5 << 2)); goto l3; } ccIndex1 = ((((unsigned) (longAt(s))) >> 12) & 31) - 1; if (ccIndex1 < 0) { class = (longAt(s - 4)) & 4294967292U; goto l3; } else { class = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + (ccIndex1 << 2)); goto l3; } l3: /* end fetchClassOf: */; classFormat = (longAt(((((char *) class)) + 4) + (2 << 2))) - 1; fixedFields = (((((unsigned) classFormat) >> 11) & 192) + ((((unsigned) classFormat) >> 2) & 63)) - 1; l2: /* end fixedFieldsOf:format:length: */; sz = totalLength - fixedFields; imageNamePutLength(s + 4, sz); /* begin pop: */ stackPointer -= 1 * 4; } } else { sz = imageNameSize(); s = instantiateClassindexableSize(longAt(((((char *) specialObjectsOop)) + 4) + (6 << 2)), sz); imageNameGetLength(s + 4, sz); /* begin pop: */ stackPointer -= 1 * 4; /* begin push: */ longAtput(sp = stackPointer + 4, s); stackPointer = sp; } } int primitiveIncrementalGC(void) { int sp; /* begin pop: */ stackPointer -= 1 * 4; incrementalGC(); /* begin pushInteger: */ /* begin push: */ longAtput(sp = stackPointer + 4, ((((longAt(freeBlock)) & 536870908) << 1) | 1)); stackPointer = sp; } int primitiveIndexOf(int methodPointer) { int primBits; primBits = (((unsigned) (longAt(((((char *) methodPointer)) + 4) + (0 << 2)))) >> 1) & 805306879; if (primBits > 511) { return (primBits & 511) + (((unsigned) primBits) >> 19); } else { return primBits; } } int primitiveInitializeNetwork(void) { int err; int resolverSemaIndex; int integerPointer; /* begin stackIntegerValue: */ integerPointer = longAt(stackPointer - (0 * 4)); if ((integerPointer & 1)) { resolverSemaIndex = (integerPointer >> 1); goto l1; } else { primitiveFail(); resolverSemaIndex = 0; goto l1; } l1: /* end stackIntegerValue: */; if (successFlag) { err = sqNetworkInit(resolverSemaIndex); /* begin success: */ successFlag = (err == 0) && successFlag; } if (successFlag) { /* begin pop: */ stackPointer -= 1 * 4; } } int primitiveInputSemaphore(void) { int arg; int oop; int oop1; int valuePointer; int top; /* begin popStack */ top = longAt(stackPointer); stackPointer -= 4; arg = top; if ((fetchClassOf(arg)) == (longAt(((((char *) specialObjectsOop)) + 4) + (18 << 2)))) { /* begin storePointer:ofObject:withValue: */ oop = specialObjectsOop; if (oop < youngStart) { possibleRootStoreIntovalue(oop, arg); } longAtput(((((char *) oop)) + 4) + (22 << 2), arg); } else { /* begin storePointer:ofObject:withValue: */ oop1 = specialObjectsOop; valuePointer = nilObj; if (oop1 < youngStart) { possibleRootStoreIntovalue(oop1, valuePointer); } longAtput(((((char *) oop1)) + 4) + (22 << 2), valuePointer); } } int primitiveInputWord(void) { int sp; /* begin pop: */ stackPointer -= 1 * 4; /* begin pushInteger: */ /* begin push: */ longAtput(sp = stackPointer + 4, ((0 << 1) | 1)); stackPointer = sp; } int primitiveInstVarAt(void) { int value; int hdr; int totalLength; int index; int fmt; int rcvr; int fixedFields; int sz; int sp; int integerPointer; int top; int top1; int classFormat; int class; int ccIndex; /* begin popInteger */ /* begin popStack */ top = longAt(stackPointer); stackPointer -= 4; integerPointer = top; if ((integerPointer & 1)) { index = (integerPointer >> 1); goto l3; } else { successFlag = false; index = 1; goto l3; } l3: /* end popInteger */; /* begin popStack */ top1 = longAt(stackPointer); stackPointer -= 4; rcvr = top1; if (successFlag) { hdr = longAt(rcvr); fmt = (((unsigned) hdr) >> 8) & 15; /* begin lengthOf:baseHeader:format: */ if ((hdr & 3) == 0) { sz = (longAt(rcvr - 8)) & 4294967292U; } else { sz = hdr & 252; } if (fmt < 8) { totalLength = ((unsigned) (sz - 4)) >> 2; goto l1; } else { totalLength = (sz - 4) - (fmt & 3); goto l1; } l1: /* end lengthOf:baseHeader:format: */; /* begin fixedFieldsOf:format:length: */ if ((fmt > 3) || (fmt == 2)) { fixedFields = 0; goto l4; } if (fmt < 2) { fixedFields = totalLength; goto l4; } /* begin fetchClassOf: */ if ((rcvr & 1)) { class = longAt(((((char *) specialObjectsOop)) + 4) + (5 << 2)); goto l5; } ccIndex = ((((unsigned) (longAt(rcvr))) >> 12) & 31) - 1; if (ccIndex < 0) { class = (longAt(rcvr - 4)) & 4294967292U; goto l5; } else { class = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + (ccIndex << 2)); goto l5; } l5: /* end fetchClassOf: */; classFormat = (longAt(((((char *) class)) + 4) + (2 << 2))) - 1; fixedFields = (((((unsigned) classFormat) >> 11) & 192) + ((((unsigned) classFormat) >> 2) & 63)) - 1; l4: /* end fixedFieldsOf:format:length: */; if (!((index >= 1) && (index <= fixedFields))) { successFlag = false; } } if (successFlag) { /* begin subscript:with:format: */ if (fmt < 4) { value = longAt(((((char *) rcvr)) + 4) + ((index - 1) << 2)); goto l2; } if (fmt < 8) { value = positive32BitIntegerFor(longAt(((((char *) rcvr)) + 4) + ((index - 1) << 2))); goto l2; } else { value = (((byteAt(((((char *) rcvr)) + 4) + (index - 1))) << 1) | 1); goto l2; } l2: /* end subscript:with:format: */; } if (successFlag) { /* begin push: */ longAtput(sp = stackPointer + 4, value); stackPointer = sp; } else { /* begin unPop: */ stackPointer += 2 * 4; } } int primitiveInstVarAtPut(void) { int hdr; int newValue; int totalLength; int index; int fmt; int rcvr; int fixedFields; int sp; int top; int top1; int sz; int valueToStore; int integerPointer; int top2; int classFormat; int class; int ccIndex; /* begin popStack */ top = longAt(stackPointer); stackPointer -= 4; newValue = top; /* begin popInteger */ /* begin popStack */ top2 = longAt(stackPointer); stackPointer -= 4; integerPointer = top2; if ((integerPointer & 1)) { index = (integerPointer >> 1); goto l2; } else { successFlag = false; index = 1; goto l2; } l2: /* end popInteger */; /* begin popStack */ top1 = longAt(stackPointer); stackPointer -= 4; rcvr = top1; if (successFlag) { hdr = longAt(rcvr); fmt = (((unsigned) hdr) >> 8) & 15; /* begin lengthOf:baseHeader:format: */ if ((hdr & 3) == 0) { sz = (longAt(rcvr - 8)) & 4294967292U; } else { sz = hdr & 252; } if (fmt < 8) { totalLength = ((unsigned) (sz - 4)) >> 2; goto l1; } else { totalLength = (sz - 4) - (fmt & 3); goto l1; } l1: /* end lengthOf:baseHeader:format: */; /* begin fixedFieldsOf:format:length: */ if ((fmt > 3) || (fmt == 2)) { fixedFields = 0; goto l3; } if (fmt < 2) { fixedFields = totalLength; goto l3; } /* begin fetchClassOf: */ if ((rcvr & 1)) { class = longAt(((((char *) specialObjectsOop)) + 4) + (5 << 2)); goto l4; } ccIndex = ((((unsigned) (longAt(rcvr))) >> 12) & 31) - 1; if (ccIndex < 0) { class = (longAt(rcvr - 4)) & 4294967292U; goto l4; } else { class = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + (ccIndex << 2)); goto l4; } l4: /* end fetchClassOf: */; classFormat = (longAt(((((char *) class)) + 4) + (2 << 2))) - 1; fixedFields = (((((unsigned) classFormat) >> 11) & 192) + ((((unsigned) classFormat) >> 2) & 63)) - 1; l3: /* end fixedFieldsOf:format:length: */; if (!((index >= 1) && (index <= fixedFields))) { successFlag = false; } } if (successFlag) { /* begin subscript:with:storing:format: */ if (fmt < 4) { /* begin storePointer:ofObject:withValue: */ if (rcvr < youngStart) { possibleRootStoreIntovalue(rcvr, newValue); } longAtput(((((char *) rcvr)) + 4) + ((index - 1) << 2), newValue); } else { if (fmt < 8) { valueToStore = positive32BitValueOf(newValue); if (successFlag) { longAtput(((((char *) rcvr)) + 4) + ((index - 1) << 2), valueToStore); } } else { if (!((newValue & 1))) { successFlag = false; } valueToStore = (newValue >> 1); if (!((valueToStore >= 0) && (valueToStore <= 255))) { successFlag = false; } if (successFlag) { byteAtput(((((char *) rcvr)) + 4) + (index - 1), valueToStore); } } } } if (successFlag) { /* begin push: */ longAtput(sp = stackPointer + 4, newValue); stackPointer = sp; } else { /* begin unPop: */ stackPointer += 3 * 4; } } int primitiveInterruptSemaphore(void) { int arg; int oop; int oop1; int valuePointer; int top; /* begin popStack */ top = longAt(stackPointer); stackPointer -= 4; arg = top; if ((fetchClassOf(arg)) == (longAt(((((char *) specialObjectsOop)) + 4) + (18 << 2)))) { /* begin storePointer:ofObject:withValue: */ oop = specialObjectsOop; if (oop < youngStart) { possibleRootStoreIntovalue(oop, arg); } longAtput(((((char *) oop)) + 4) + (30 << 2), arg); } else { /* begin storePointer:ofObject:withValue: */ oop1 = specialObjectsOop; valuePointer = nilObj; if (oop1 < youngStart) { possibleRootStoreIntovalue(oop1, valuePointer); } longAtput(((((char *) oop1)) + 4) + (30 << 2), valuePointer); } } int primitiveKbdNext(void) { int keystrokeWord; int sp; int sp1; /* begin pop: */ stackPointer -= 1 * 4; keystrokeWord = ioGetKeystroke(); if (keystrokeWord >= 0) { /* begin pushInteger: */ /* begin push: */ longAtput(sp1 = stackPointer + 4, ((keystrokeWord << 1) | 1)); stackPointer = sp1; } else { /* begin push: */ longAtput(sp = stackPointer + 4, nilObj); stackPointer = sp; } } int primitiveKbdPeek(void) { int keystrokeWord; int sp; int sp1; /* begin pop: */ stackPointer -= 1 * 4; keystrokeWord = ioPeekKeystroke(); if (keystrokeWord >= 0) { /* begin pushInteger: */ /* begin push: */ longAtput(sp1 = stackPointer + 4, ((keystrokeWord << 1) | 1)); stackPointer = sp1; } else { /* begin push: */ longAtput(sp = stackPointer + 4, nilObj); stackPointer = sp; } } int primitiveLessOrEqual(void) { int integerReceiver; int integerArgument; int integerPointer; int top; int integerPointer1; int top1; int sp; int sp1; successFlag = true; /* begin popInteger */ /* begin popStack */ top = longAt(stackPointer); stackPointer -= 4; integerPointer = top; if ((integerPointer & 1)) { integerArgument = (integerPointer >> 1); goto l1; } else { successFlag = false; integerArgument = 1; goto l1; } l1: /* end popInteger */; /* begin popInteger */ /* begin popStack */ top1 = longAt(stackPointer); stackPointer -= 4; integerPointer1 = top1; if ((integerPointer1 & 1)) { integerReceiver = (integerPointer1 >> 1); goto l2; } else { successFlag = false; integerReceiver = 1; goto l2; } l2: /* end popInteger */; /* begin checkBooleanResult:from: */ if (successFlag) { /* begin pushBool: */ if (integerReceiver <= integerArgument) { /* begin push: */ longAtput(sp = stackPointer + 4, trueObj); stackPointer = sp; } else { /* begin push: */ longAtput(sp1 = stackPointer + 4, falseObj); stackPointer = sp1; } } else { /* begin unPop: */ stackPointer += 2 * 4; failSpecialPrim(5); } } int primitiveLessThan(void) { int integerReceiver; int integerArgument; int integerPointer; int top; int integerPointer1; int top1; int sp; int sp1; successFlag = true; /* begin popInteger */ /* begin popStack */ top = longAt(stackPointer); stackPointer -= 4; integerPointer = top; if ((integerPointer & 1)) { integerArgument = (integerPointer >> 1); goto l1; } else { successFlag = false; integerArgument = 1; goto l1; } l1: /* end popInteger */; /* begin popInteger */ /* begin popStack */ top1 = longAt(stackPointer); stackPointer -= 4; integerPointer1 = top1; if ((integerPointer1 & 1)) { integerReceiver = (integerPointer1 >> 1); goto l2; } else { successFlag = false; integerReceiver = 1; goto l2; } l2: /* end popInteger */; /* begin checkBooleanResult:from: */ if (successFlag) { /* begin pushBool: */ if (integerReceiver < integerArgument) { /* begin push: */ longAtput(sp = stackPointer + 4, trueObj); stackPointer = sp; } else { /* begin push: */ longAtput(sp1 = stackPointer + 4, falseObj); stackPointer = sp1; } } else { /* begin unPop: */ stackPointer += 2 * 4; failSpecialPrim(3); } } int primitiveLoadInstVar(void) { int thisReceiver; int top; int sp; /* begin popStack */ top = longAt(stackPointer); stackPointer -= 4; thisReceiver = top; /* begin push: */ longAtput(sp = stackPointer + 4, longAt(((((char *) thisReceiver)) + 4) + ((primitiveIndex - 264) << 2))); stackPointer = sp; } int primitiveLogN(void) { double rcvr; rcvr = popFloat(); if (successFlag) { pushFloat(log(rcvr)); } else { /* begin unPop: */ stackPointer += 1 * 4; } } int primitiveLowSpaceSemaphore(void) { int arg; int oop; int oop1; int valuePointer; int top; /* begin popStack */ top = longAt(stackPointer); stackPointer -= 4; arg = top; if ((fetchClassOf(arg)) == (longAt(((((char *) specialObjectsOop)) + 4) + (18 << 2)))) { /* begin storePointer:ofObject:withValue: */ oop = specialObjectsOop; if (oop < youngStart) { possibleRootStoreIntovalue(oop, arg); } longAtput(((((char *) oop)) + 4) + (17 << 2), arg); } else { /* begin storePointer:ofObject:withValue: */ oop1 = specialObjectsOop; valuePointer = nilObj; if (oop1 < youngStart) { possibleRootStoreIntovalue(oop1, valuePointer); } longAtput(((((char *) oop1)) + 4) + (17 << 2), valuePointer); } } int primitiveMIDIClosePort(void) { int portNum; int integerPointer; /* begin stackIntegerValue: */ integerPointer = longAt(stackPointer - (0 * 4)); if ((integerPointer & 1)) { portNum = (integerPointer >> 1); goto l1; } else { primitiveFail(); portNum = 0; goto l1; } l1: /* end stackIntegerValue: */; if (successFlag) { sqMIDIClosePort(portNum); } if (successFlag) { /* begin pop: */ stackPointer -= 1 * 4; } } int primitiveMIDIGetClock(void) { int clockValue; int sp; clockValue = (sqMIDIGetClock()) & 536870911; if (successFlag) { /* begin pop: */ stackPointer -= 1 * 4; /* begin pushInteger: */ /* begin push: */ longAtput(sp = stackPointer + 4, ((clockValue << 1) | 1)); stackPointer = sp; } } int primitiveMIDIGetPortCount(void) { int n; int sp; n = sqMIDIGetPortCount(); if (successFlag) { /* begin pop: */ stackPointer -= 1 * 4; /* begin pushInteger: */ /* begin push: */ longAtput(sp = stackPointer + 4, ((n << 1) | 1)); stackPointer = sp; } } int primitiveMIDIGetPortDirectionality(void) { int dir; int portNum; int integerPointer; int sp; /* begin stackIntegerValue: */ integerPointer = longAt(stackPointer - (0 * 4)); if ((integerPointer & 1)) { portNum = (integerPointer >> 1); goto l1; } else { primitiveFail(); portNum = 0; goto l1; } l1: /* end stackIntegerValue: */; if (successFlag) { dir = sqMIDIGetPortDirectionality(portNum); } if (successFlag) { /* begin pop: */ stackPointer -= 2 * 4; /* begin pushInteger: */ /* begin push: */ longAtput(sp = stackPointer + 4, ((dir << 1) | 1)); stackPointer = sp; } } int primitiveMIDIGetPortName(void) { char portName[256]; int portNum; int sz; int nameObj; int namePtr; int sp; int integerPointer; /* begin stackIntegerValue: */ integerPointer = longAt(stackPointer - (0 * 4)); if ((integerPointer & 1)) { portNum = (integerPointer >> 1); goto l1; } else { primitiveFail(); portNum = 0; goto l1; } l1: /* end stackIntegerValue: */; if (successFlag) { sz = sqMIDIGetPortName(portNum, (int) &portName, 255); } if (successFlag) { nameObj = instantiateClassindexableSize(longAt(((((char *) specialObjectsOop)) + 4) + (6 << 2)), sz); namePtr = nameObj + 4; memcpy((char *) namePtr, portName, sz); } if (successFlag) { /* begin pop: */ stackPointer -= 2 * 4; /* begin push: */ longAtput(sp = stackPointer + 4, nameObj); stackPointer = sp; } } int primitiveMIDIOpenPort(void) { int semaIndex; int portNum; int clockRate; int integerPointer; int integerPointer1; int integerPointer2; /* begin stackIntegerValue: */ integerPointer = longAt(stackPointer - (0 * 4)); if ((integerPointer & 1)) { clockRate = (integerPointer >> 1); goto l1; } else { primitiveFail(); clockRate = 0; goto l1; } l1: /* end stackIntegerValue: */; /* begin stackIntegerValue: */ integerPointer1 = longAt(stackPointer - (1 * 4)); if ((integerPointer1 & 1)) { semaIndex = (integerPointer1 >> 1); goto l2; } else { primitiveFail(); semaIndex = 0; goto l2; } l2: /* end stackIntegerValue: */; /* begin stackIntegerValue: */ integerPointer2 = longAt(stackPointer - (2 * 4)); if ((integerPointer2 & 1)) { portNum = (integerPointer2 >> 1); goto l3; } else { primitiveFail(); portNum = 0; goto l3; } l3: /* end stackIntegerValue: */; if (successFlag) { sqMIDIOpenPort(portNum, semaIndex, clockRate); } if (successFlag) { /* begin pop: */ stackPointer -= 3 * 4; } } int primitiveMIDIParameterGetOrSet(void) { int whichParameter; int newValue; int currentValue; int sp; int integerPointer; int integerPointer1; int integerPointer2; if (argumentCount == 1) { /* begin stackIntegerValue: */ integerPointer = longAt(stackPointer - (0 * 4)); if ((integerPointer & 1)) { whichParameter = (integerPointer >> 1); goto l1; } else { primitiveFail(); whichParameter = 0; goto l1; } l1: /* end stackIntegerValue: */; if (!(successFlag)) { return null; } currentValue = sqMIDIParameter(whichParameter, false, 0); if (successFlag) { /* begin pop: */ stackPointer -= 2 * 4; /* begin pushInteger: */ /* begin push: */ longAtput(sp = stackPointer + 4, ((currentValue << 1) | 1)); stackPointer = sp; } return null; } if (argumentCount == 2) { /* begin stackIntegerValue: */ integerPointer1 = longAt(stackPointer - (0 * 4)); if ((integerPointer1 & 1)) { newValue = (integerPointer1 >> 1); goto l2; } else { primitiveFail(); newValue = 0; goto l2; } l2: /* end stackIntegerValue: */; /* begin stackIntegerValue: */ integerPointer2 = longAt(stackPointer - (1 * 4)); if ((integerPointer2 & 1)) { whichParameter = (integerPointer2 >> 1); goto l3; } else { primitiveFail(); whichParameter = 0; goto l3; } l3: /* end stackIntegerValue: */; if (!(successFlag)) { return null; } sqMIDIParameter(whichParameter, true, newValue); if (successFlag) { /* begin pop: */ stackPointer -= 2 * 4; } return null; } primitiveFail(); } int primitiveMIDIRead(void) { int array; int portNum; int arrayLength; int bytesRead; int fmt; int sz; int header; int fmt1; int sp; int integerPointer; int successValue; array = longAt(stackPointer - (0 * 4)); /* begin stackIntegerValue: */ integerPointer = longAt(stackPointer - (1 * 4)); if ((integerPointer & 1)) { portNum = (integerPointer >> 1); goto l2; } else { primitiveFail(); portNum = 0; goto l2; } l2: /* end stackIntegerValue: */; fmt = (((unsigned) (longAt(array))) >> 8) & 15; /* begin success: */ successValue = (fmt >= 8) && (fmt <= 11); successFlag = successValue && successFlag; if (successFlag) { /* begin lengthOf: */ header = longAt(array); if ((header & 3) == 0) { sz = (longAt(array - 8)) & 4294967292U; } else { sz = header & 252; } fmt1 = (((unsigned) header) >> 8) & 15; if (fmt1 < 8) { arrayLength = ((unsigned) (sz - 4)) >> 2; goto l1; } else { arrayLength = (sz - 4) - (fmt1 & 3); goto l1; } l1: /* end lengthOf: */; bytesRead = sqMIDIPortReadInto(portNum, arrayLength, array + 4); } if (successFlag) { /* begin pop: */ stackPointer -= 3 * 4; /* begin pushInteger: */ /* begin push: */ longAtput(sp = stackPointer + 4, ((bytesRead << 1) | 1)); stackPointer = sp; } } int primitiveMIDIWrite(void) { int array; int portNum; int arrayLength; int time; int bytesWritten; int fmt; int sz; int header; int fmt1; int sp; int integerPointer; int integerPointer1; int successValue; /* begin stackIntegerValue: */ integerPointer = longAt(stackPointer - (0 * 4)); if ((integerPointer & 1)) { time = (integerPointer >> 1); goto l2; } else { primitiveFail(); time = 0; goto l2; } l2: /* end stackIntegerValue: */; array = longAt(stackPointer - (1 * 4)); /* begin stackIntegerValue: */ integerPointer1 = longAt(stackPointer - (2 * 4)); if ((integerPointer1 & 1)) { portNum = (integerPointer1 >> 1); goto l3; } else { primitiveFail(); portNum = 0; goto l3; } l3: /* end stackIntegerValue: */; fmt = (((unsigned) (longAt(array))) >> 8) & 15; /* begin success: */ successValue = (fmt >= 8) && (fmt <= 11); successFlag = successValue && successFlag; if (successFlag) { /* begin lengthOf: */ header = longAt(array); if ((header & 3) == 0) { sz = (longAt(array - 8)) & 4294967292U; } else { sz = header & 252; } fmt1 = (((unsigned) header) >> 8) & 15; if (fmt1 < 8) { arrayLength = ((unsigned) (sz - 4)) >> 2; goto l1; } else { arrayLength = (sz - 4) - (fmt1 & 3); goto l1; } l1: /* end lengthOf: */; bytesWritten = sqMIDIPortWriteFromAt(portNum, arrayLength, array + 4, time); } if (successFlag) { /* begin pop: */ stackPointer -= 4 * 4; /* begin pushInteger: */ /* begin push: */ longAtput(sp = stackPointer + 4, ((bytesWritten << 1) | 1)); stackPointer = sp; } } int primitiveMakePoint(void) { int integerReceiver; int integerArgument; int object; int sp; int integerPointer; int top; int integerPointer1; int top1; int pointResult; int sp1; successFlag = true; /* begin popInteger */ /* begin popStack */ top = longAt(stackPointer); stackPointer -= 4; integerPointer = top; if ((integerPointer & 1)) { integerArgument = (integerPointer >> 1); goto l1; } else { successFlag = false; integerArgument = 1; goto l1; } l1: /* end popInteger */; /* begin popInteger */ /* begin popStack */ top1 = longAt(stackPointer); stackPointer -= 4; integerPointer1 = top1; if ((integerPointer1 & 1)) { integerReceiver = (integerPointer1 >> 1); goto l2; } else { successFlag = false; integerReceiver = 1; goto l2; } l2: /* end popInteger */; if (successFlag) { /* begin push: */ /* begin makePointwithxValue:yValue: */ pointResult = instantiateSmallClasssizeInBytesfill(longAt(((((char *) specialObjectsOop)) + 4) + (12 << 2)), 12, nilObj); /* begin storePointer:ofObject:withValue: */ if (pointResult < youngStart) { possibleRootStoreIntovalue(pointResult, ((integerReceiver << 1) | 1)); } longAtput(((((char *) pointResult)) + 4) + (0 << 2), ((integerReceiver << 1) | 1)); /* begin storePointer:ofObject:withValue: */ if (pointResult < youngStart) { possibleRootStoreIntovalue(pointResult, ((integerArgument << 1) | 1)); } longAtput(((((char *) pointResult)) + 4) + (1 << 2), ((integerArgument << 1) | 1)); object = pointResult; longAtput(sp = stackPointer + 4, object); stackPointer = sp; } else { /* begin checkIntegerResult:from: */ if (successFlag && ((0 ^ (0 << 1)) >= 0)) { /* begin pushInteger: */ /* begin push: */ longAtput(sp1 = stackPointer + 4, ((0 << 1) | 1)); stackPointer = sp1; } else { /* begin unPop: */ stackPointer += 2 * 4; failSpecialPrim(18); } } } int primitiveMillisecondClock(void) { int object; int sp; /* begin pop: */ stackPointer -= 1 * 4; /* begin push: */ object = ((((ioMSecs()) & 536870911) << 1) | 1); longAtput(sp = stackPointer + 4, object); stackPointer = sp; } int primitiveMod(void) { int integerReceiver; int integerArgument; int integerResult; int integerPointer; int top; int integerPointer1; int top1; int sp; successFlag = true; /* begin popInteger */ /* begin popStack */ top = longAt(stackPointer); stackPointer -= 4; integerPointer = top; if ((integerPointer & 1)) { integerArgument = (integerPointer >> 1); goto l1; } else { successFlag = false; integerArgument = 1; goto l1; } l1: /* end popInteger */; /* begin popInteger */ /* begin popStack */ top1 = longAt(stackPointer); stackPointer -= 4; integerPointer1 = top1; if ((integerPointer1 & 1)) { integerReceiver = (integerPointer1 >> 1); goto l2; } else { successFlag = false; integerReceiver = 1; goto l2; } l2: /* end popInteger */; /* begin success: */ successFlag = (integerArgument != 0) && successFlag; if (!(successFlag)) { integerArgument = 1; } integerResult = integerReceiver % integerArgument; if (integerArgument < 0) { if (integerResult > 0) { integerResult += integerArgument; } } else { if (integerResult < 0) { integerResult += integerArgument; } } /* begin checkIntegerResult:from: */ if (successFlag && ((integerResult ^ (integerResult << 1)) >= 0)) { /* begin pushInteger: */ /* begin push: */ longAtput(sp = stackPointer + 4, ((integerResult << 1) | 1)); stackPointer = sp; } else { /* begin unPop: */ stackPointer += 2 * 4; failSpecialPrim(11); } } int primitiveMouseButtons(void) { int buttonWord; int sp; /* begin pop: */ stackPointer -= 1 * 4; buttonWord = ioGetButtonState(); /* begin pushInteger: */ /* begin push: */ longAtput(sp = stackPointer + 4, ((buttonWord << 1) | 1)); stackPointer = sp; } int primitiveMousePoint(void) { int y; int pointWord; int x; int object; int sp; int pointResult; /* begin pop: */ stackPointer -= 1 * 4; pointWord = ioMousePoint(); /* begin signExtend16: */ if ((((((unsigned) pointWord) >> 16) & 65535) & 32768) == 0) { x = (((unsigned) pointWord) >> 16) & 65535; goto l1; } else { x = ((((unsigned) pointWord) >> 16) & 65535) - 65536; goto l1; } l1: /* end signExtend16: */; /* begin signExtend16: */ if (((pointWord & 65535) & 32768) == 0) { y = pointWord & 65535; goto l2; } else { y = (pointWord & 65535) - 65536; goto l2; } l2: /* end signExtend16: */; /* begin push: */ /* begin makePointwithxValue:yValue: */ pointResult = instantiateSmallClasssizeInBytesfill(longAt(((((char *) specialObjectsOop)) + 4) + (12 << 2)), 12, nilObj); /* begin storePointer:ofObject:withValue: */ if (pointResult < youngStart) { possibleRootStoreIntovalue(pointResult, ((x << 1) | 1)); } longAtput(((((char *) pointResult)) + 4) + (0 << 2), ((x << 1) | 1)); /* begin storePointer:ofObject:withValue: */ if (pointResult < youngStart) { possibleRootStoreIntovalue(pointResult, ((y << 1) | 1)); } longAtput(((((char *) pointResult)) + 4) + (1 << 2), ((y << 1) | 1)); object = pointResult; longAtput(sp = stackPointer + 4, object); stackPointer = sp; } int primitiveMultiply(void) { int arg; int result; int rcvr; int successValue; int sp; rcvr = longAt(stackPointer - (1 * 4)); arg = longAt(stackPointer - (0 * 4)); /* begin pop: */ stackPointer -= 2 * 4; /* begin success: */ successFlag = (((rcvr & arg) & 1) != 0) && successFlag; if (successFlag) { rcvr = (rcvr >> 1); arg = (arg >> 1); result = rcvr * arg; /* begin success: */ successValue = (arg == 0) || ((result / arg) == rcvr); successFlag = successValue && successFlag; } /* begin checkIntegerResult:from: */ if (successFlag && ((result ^ (result << 1)) >= 0)) { /* begin pushInteger: */ /* begin push: */ longAtput(sp = stackPointer + 4, ((result << 1) | 1)); stackPointer = sp; } else { /* begin unPop: */ stackPointer += 2 * 4; failSpecialPrim(9); } } int primitiveNew(void) { int spaceOkay; int class; int object; int sp; int top; int okay; int format; int minFree; int minFree1; /* begin popStack */ top = longAt(stackPointer); stackPointer -= 4; class = top; /* begin sufficientSpaceToInstantiate:indexableSize: */ format = (((unsigned) ((longAt(((((char *) class)) + 4) + (2 << 2))) - 1)) >> 8) & 15; if ((0 > 0) && (format < 2)) { spaceOkay = false; goto l3; } if (format < 8) { /* begin sufficientSpaceToAllocate: */ minFree = (lowSpaceThreshold + (2500 + (0 * 4))) + 4; if (((longAt(freeBlock)) & 536870908) >= minFree) { okay = true; goto l1; } else { okay = sufficientSpaceAfterGC(minFree); goto l1; } l1: /* end sufficientSpaceToAllocate: */; } else { /* begin sufficientSpaceToAllocate: */ minFree1 = (lowSpaceThreshold + (2500 + 0)) + 4; if (((longAt(freeBlock)) & 536870908) >= minFree1) { okay = true; goto l2; } else { okay = sufficientSpaceAfterGC(minFree1); goto l2; } l2: /* end sufficientSpaceToAllocate: */; } spaceOkay = okay; l3: /* end sufficientSpaceToInstantiate:indexableSize: */; /* begin success: */ successFlag = spaceOkay && successFlag; if (successFlag) { /* begin push: */ object = instantiateClassindexableSize(class, 0); longAtput(sp = stackPointer + 4, object); stackPointer = sp; } else { /* begin unPop: */ stackPointer += 1 * 4; } } int primitiveNewMethod(void) { int size; int i; int header; int theMethod; int bytecodeCount; int class; int literalCount; int valuePointer; int top; int top1; int sp; int integerPointer; int top2; /* begin popStack */ top = longAt(stackPointer); stackPointer -= 4; header = top; /* begin popInteger */ /* begin popStack */ top2 = longAt(stackPointer); stackPointer -= 4; integerPointer = top2; if ((integerPointer & 1)) { bytecodeCount = (integerPointer >> 1); goto l1; } else { successFlag = false; bytecodeCount = 1; goto l1; } l1: /* end popInteger */; /* begin success: */ successFlag = ((header & 1)) && successFlag; if (!(successFlag)) { /* begin unPop: */ stackPointer += 2 * 4; } /* begin popStack */ top1 = longAt(stackPointer); stackPointer -= 4; class = top1; size = ((((((unsigned) header) >> 10) & 255) + 1) * 4) + bytecodeCount; theMethod = instantiateClassindexableSize(class, size); /* begin storePointer:ofObject:withValue: */ if (theMethod < youngStart) { possibleRootStoreIntovalue(theMethod, header); } longAtput(((((char *) theMethod)) + 4) + (0 << 2), header); literalCount = (((unsigned) header) >> 10) & 255; for (i = 1; i <= literalCount; i += 1) { /* begin storePointer:ofObject:withValue: */ valuePointer = nilObj; if (theMethod < youngStart) { possibleRootStoreIntovalue(theMethod, valuePointer); } longAtput(((((char *) theMethod)) + 4) + (i << 2), valuePointer); } /* begin push: */ longAtput(sp = stackPointer + 4, theMethod); stackPointer = sp; } int primitiveNewWithArg(void) { int spaceOkay; int size; int class; int top; int object; int sp; int integerPointer; int top1; int okay; int format; int minFree; int minFree1; /* begin popInteger */ /* begin popStack */ top1 = longAt(stackPointer); stackPointer -= 4; integerPointer = top1; if ((integerPointer & 1)) { size = (integerPointer >> 1); goto l1; } else { successFlag = false; size = 1; goto l1; } l1: /* end popInteger */; /* begin popStack */ top = longAt(stackPointer); stackPointer -= 4; class = top; /* begin success: */ successFlag = (size >= 0) && successFlag; if (successFlag) { /* begin sufficientSpaceToInstantiate:indexableSize: */ format = (((unsigned) ((longAt(((((char *) class)) + 4) + (2 << 2))) - 1)) >> 8) & 15; if ((size > 0) && (format < 2)) { spaceOkay = false; goto l4; } if (format < 8) { /* begin sufficientSpaceToAllocate: */ minFree = (lowSpaceThreshold + (2500 + (size * 4))) + 4; if (((longAt(freeBlock)) & 536870908) >= minFree) { okay = true; goto l3; } else { okay = sufficientSpaceAfterGC(minFree); goto l3; } l3: /* end sufficientSpaceToAllocate: */; } else { /* begin sufficientSpaceToAllocate: */ minFree1 = (lowSpaceThreshold + (2500 + size)) + 4; if (((longAt(freeBlock)) & 536870908) >= minFree1) { okay = true; goto l2; } else { okay = sufficientSpaceAfterGC(minFree1); goto l2; } l2: /* end sufficientSpaceToAllocate: */; } spaceOkay = okay; l4: /* end sufficientSpaceToInstantiate:indexableSize: */; /* begin success: */ successFlag = spaceOkay && successFlag; } if (successFlag) { /* begin push: */ object = instantiateClassindexableSize(class, size); longAtput(sp = stackPointer + 4, object); stackPointer = sp; } else { /* begin unPop: */ stackPointer += 2 * 4; } } int primitiveNext(void) { int array; int stream; int stringy; int arrayClass; int index; int limit; int result; int successValue; int ccIndex; int oop; int sp; int sp1; int top; /* begin popStack */ top = longAt(stackPointer); stackPointer -= 4; stream = top; successFlag = (((((unsigned) (longAt(stream))) >> 8) & 15) <= 4) && ((lengthOf(stream)) >= (2 + 1)); if (successFlag) { array = longAt(((((char *) stream)) + 4) + (0 << 2)); index = fetchIntegerofObject(1, stream); limit = fetchIntegerofObject(2, stream); /* begin fetchClassOf: */ if ((array & 1)) { arrayClass = longAt(((((char *) specialObjectsOop)) + 4) + (5 << 2)); goto l1; } ccIndex = ((((unsigned) (longAt(array))) >> 12) & 31) - 1; if (ccIndex < 0) { arrayClass = (longAt(array - 4)) & 4294967292U; goto l1; } else { arrayClass = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + (ccIndex << 2)); goto l1; } l1: /* end fetchClassOf: */; stringy = arrayClass == (longAt(((((char *) specialObjectsOop)) + 4) + (6 << 2))); if (!(stringy)) { /* begin success: */ successValue = (arrayClass == (longAt(((((char *) specialObjectsOop)) + 4) + (6 << 2)))) || ((arrayClass == (longAt(((((char *) specialObjectsOop)) + 4) + (7 << 2)))) || ((arrayClass == (longAt(((((char *) specialObjectsOop)) + 4) + (26 << 2)))) || (arrayClass == (longAt(((((char *) specialObjectsOop)) + 4) + (4 << 2)))))); successFlag = successValue && successFlag; } /* begin success: */ successFlag = (index < limit) && successFlag; } if (successFlag) { index += 1; /* begin pushRemappableOop: */ remapBuffer[remapBufferCount += 1] = stream; result = stObjectat(array, index); /* begin popRemappableOop */ oop = remapBuffer[remapBufferCount]; remapBufferCount -= 1; stream = oop; } if (successFlag) { /* begin storeInteger:ofObject:withValue: */ if ((index ^ (index << 1)) >= 0) { longAtput(((((char *) stream)) + 4) + (1 << 2), ((index << 1) | 1)); } else { primitiveFail(); } } if (successFlag) { if (stringy) { /* begin push: */ longAtput(sp = stackPointer + 4, longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (24 << 2))))) + 4) + (((result >> 1)) << 2))); stackPointer = sp; } else { /* begin push: */ longAtput(sp1 = stackPointer + 4, result); stackPointer = sp1; } } else { /* begin unPop: */ stackPointer += 1 * 4; } } int primitiveNextInstance(void) { int object; int instance; int sp; int top; int thisClass; int classPointer; int thisObj; int ccIndex; int ccIndex1; /* begin popStack */ top = longAt(stackPointer); stackPointer -= 4; object = top; /* begin instanceAfter: */ /* begin fetchClassOf: */ if ((object & 1)) { classPointer = longAt(((((char *) specialObjectsOop)) + 4) + (5 << 2)); goto l3; } ccIndex1 = ((((unsigned) (longAt(object))) >> 12) & 31) - 1; if (ccIndex1 < 0) { classPointer = (longAt(object - 4)) & 4294967292U; goto l3; } else { classPointer = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + (ccIndex1 << 2)); goto l3; } l3: /* end fetchClassOf: */; thisObj = accessibleObjectAfter(object); while (!(thisObj == null)) { /* begin fetchClassOf: */ if ((thisObj & 1)) { thisClass = longAt(((((char *) specialObjectsOop)) + 4) + (5 << 2)); goto l2; } ccIndex = ((((unsigned) (longAt(thisObj))) >> 12) & 31) - 1; if (ccIndex < 0) { thisClass = (longAt(thisObj - 4)) & 4294967292U; goto l2; } else { thisClass = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + (ccIndex << 2)); goto l2; } l2: /* end fetchClassOf: */; if (thisClass == classPointer) { instance = thisObj; goto l1; } thisObj = accessibleObjectAfter(thisObj); } instance = nilObj; l1: /* end instanceAfter: */; if (instance == nilObj) { /* begin unPop: */ stackPointer += 1 * 4; primitiveFail(); } else { /* begin push: */ longAtput(sp = stackPointer + 4, instance); stackPointer = sp; } } int primitiveNextObject(void) { int object; int instance; int sp; int top; int sp1; /* begin popStack */ top = longAt(stackPointer); stackPointer -= 4; object = top; instance = accessibleObjectAfter(object); if (instance == null) { /* begin pushInteger: */ /* begin push: */ longAtput(sp1 = stackPointer + 4, ((0 << 1) | 1)); stackPointer = sp1; } else { /* begin push: */ longAtput(sp = stackPointer + 4, instance); stackPointer = sp; } } int primitiveNextPut(void) { int array; int stream; int storeVal; int value; int arrayClass; int index; int limit; int successValue; int sp; int top; int top1; int ccIndex; /* begin popStack */ top = longAt(stackPointer); stackPointer -= 4; value = top; /* begin popStack */ top1 = longAt(stackPointer); stackPointer -= 4; stream = top1; successFlag = (((((unsigned) (longAt(stream))) >> 8) & 15) <= 4) && ((lengthOf(stream)) >= (3 + 1)); if (successFlag) { array = longAt(((((char *) stream)) + 4) + (0 << 2)); index = fetchIntegerofObject(1, stream); limit = fetchIntegerofObject(3, stream); /* begin fetchClassOf: */ if ((array & 1)) { arrayClass = longAt(((((char *) specialObjectsOop)) + 4) + (5 << 2)); goto l1; } ccIndex = ((((unsigned) (longAt(array))) >> 12) & 31) - 1; if (ccIndex < 0) { arrayClass = (longAt(array - 4)) & 4294967292U; goto l1; } else { arrayClass = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + (ccIndex << 2)); goto l1; } l1: /* end fetchClassOf: */; /* begin success: */ successValue = (arrayClass == (longAt(((((char *) specialObjectsOop)) + 4) + (6 << 2)))) || ((arrayClass == (longAt(((((char *) specialObjectsOop)) + 4) + (7 << 2)))) || ((arrayClass == (longAt(((((char *) specialObjectsOop)) + 4) + (26 << 2)))) || (arrayClass == (longAt(((((char *) specialObjectsOop)) + 4) + (4 << 2)))))); successFlag = successValue && successFlag; /* begin success: */ successFlag = (index < limit) && successFlag; } if (successFlag) { index += 1; if (arrayClass == (longAt(((((char *) specialObjectsOop)) + 4) + (6 << 2)))) { storeVal = asciiOfCharacter(value); } else { storeVal = value; } stObjectatput(array, index, storeVal); } if (successFlag) { /* begin storeInteger:ofObject:withValue: */ if ((index ^ (index << 1)) >= 0) { longAtput(((((char *) stream)) + 4) + (1 << 2), ((index << 1) | 1)); } else { primitiveFail(); } } if (successFlag) { /* begin push: */ longAtput(sp = stackPointer + 4, value); stackPointer = sp; } else { /* begin unPop: */ stackPointer += 2 * 4; } } int primitiveNoop(void) { /* begin pop: */ stackPointer -= argumentCount * 4; } int primitiveNotEqual(void) { int integerReceiver; int integerArgument; int result; int top; int top1; int sp; int sp1; successFlag = true; /* begin popStack */ top = longAt(stackPointer); stackPointer -= 4; integerArgument = top; /* begin popStack */ top1 = longAt(stackPointer); stackPointer -= 4; integerReceiver = top1; result = !(compare31or32Bitsequal(integerReceiver, integerArgument)); /* begin checkBooleanResult:from: */ if (successFlag) { /* begin pushBool: */ if (result) { /* begin push: */ longAtput(sp = stackPointer + 4, trueObj); stackPointer = sp; } else { /* begin push: */ longAtput(sp1 = stackPointer + 4, falseObj); stackPointer = sp1; } } else { /* begin unPop: */ stackPointer += 2 * 4; failSpecialPrim(8); } } int primitiveObjectAt(void) { int thisReceiver; int index; int sp; int integerPointer; int top; int top1; /* begin popInteger */ /* begin popStack */ top = longAt(stackPointer); stackPointer -= 4; integerPointer = top; if ((integerPointer & 1)) { index = (integerPointer >> 1); goto l1; } else { successFlag = false; index = 1; goto l1; } l1: /* end popInteger */; /* begin popStack */ top1 = longAt(stackPointer); stackPointer -= 4; thisReceiver = top1; /* begin success: */ successFlag = (index > 0) && successFlag; /* begin success: */ successFlag = (index <= (((((unsigned) (longAt(((((char *) thisReceiver)) + 4) + (0 << 2)))) >> 10) & 255) + 1)) && successFlag; if (successFlag) { /* begin push: */ longAtput(sp = stackPointer + 4, longAt(((((char *) thisReceiver)) + 4) + ((index - 1) << 2))); stackPointer = sp; } else { /* begin unPop: */ stackPointer += 2 * 4; } } int primitiveObjectAtPut(void) { int thisReceiver; int newValue; int index; int sp; int top; int integerPointer; int top1; int top2; /* begin popStack */ top = longAt(stackPointer); stackPointer -= 4; newValue = top; /* begin popInteger */ /* begin popStack */ top1 = longAt(stackPointer); stackPointer -= 4; integerPointer = top1; if ((integerPointer & 1)) { index = (integerPointer >> 1); goto l1; } else { successFlag = false; index = 1; goto l1; } l1: /* end popInteger */; /* begin popStack */ top2 = longAt(stackPointer); stackPointer -= 4; thisReceiver = top2; /* begin success: */ successFlag = (index > 0) && successFlag; /* begin success: */ successFlag = (index <= (((((unsigned) (longAt(((((char *) thisReceiver)) + 4) + (0 << 2)))) >> 10) & 255) + 1)) && successFlag; if (successFlag) { /* begin storePointer:ofObject:withValue: */ if (thisReceiver < youngStart) { possibleRootStoreIntovalue(thisReceiver, newValue); } longAtput(((((char *) thisReceiver)) + 4) + ((index - 1) << 2), newValue); /* begin push: */ longAtput(sp = stackPointer + 4, newValue); stackPointer = sp; } else { /* begin unPop: */ stackPointer += 3 * 4; } } int primitiveObjectPointsTo(void) { int i; int thang; int lastField; int rcvr; int top; int top1; int sp; int sp1; int sp2; int sp3; int sp4; int sp5; int methodHeader; int sz; int fmt; int header; int type; /* begin popStack */ top = longAt(stackPointer); stackPointer -= 4; thang = top; /* begin popStack */ top1 = longAt(stackPointer); stackPointer -= 4; rcvr = top1; if ((rcvr & 1)) { /* begin pushBool: */ if (false) { /* begin push: */ longAtput(sp = stackPointer + 4, trueObj); stackPointer = sp; } else { /* begin push: */ longAtput(sp1 = stackPointer + 4, falseObj); stackPointer = sp1; } return null; } /* begin lastPointerOf: */ fmt = (((unsigned) (longAt(rcvr))) >> 8) & 15; if (fmt < 4) { /* begin sizeBitsOfSafe: */ header = longAt(rcvr); /* begin rightType: */ if ((header & 252) == 0) { type = 0; goto l2; } else { if ((header & 126976) == 0) { type = 1; goto l2; } else { type = 3; goto l2; } } l2: /* end rightType: */; if (type == 0) { sz = (longAt(rcvr - 8)) & 4294967292U; goto l3; } else { sz = header & 252; goto l3; } l3: /* end sizeBitsOfSafe: */; lastField = sz - 4; goto l1; } if (fmt < 12) { lastField = 0; goto l1; } methodHeader = longAt(rcvr + 4); lastField = (((((unsigned) methodHeader) >> 10) & 255) * 4) + 4; l1: /* end lastPointerOf: */; for (i = 4; i <= lastField; i += 4) { if ((longAt(rcvr + i)) == thang) { /* begin pushBool: */ if (true) { /* begin push: */ longAtput(sp2 = stackPointer + 4, trueObj); stackPointer = sp2; } else { /* begin push: */ longAtput(sp3 = stackPointer + 4, falseObj); stackPointer = sp3; } return null; } } /* begin pushBool: */ if (false) { /* begin push: */ longAtput(sp4 = stackPointer + 4, trueObj); stackPointer = sp4; } else { /* begin push: */ longAtput(sp5 = stackPointer + 4, falseObj); stackPointer = sp5; } } int primitivePerform(void) { int performSelector; int selectorIndex; int newReceiver; int toIndex; int fromIndex; int lastFrom; performSelector = messageSelector; messageSelector = longAt(stackPointer - ((argumentCount - 1) * 4)); newReceiver = longAt(stackPointer - (argumentCount * 4)); argumentCount -= 1; lookupMethodInClass(fetchClassOf(newReceiver)); /* begin success: */ successFlag = (((((unsigned) (longAt(((((char *) newMethod)) + 4) + (0 << 2)))) >> 25) & 31) == argumentCount) && successFlag; if (successFlag) { selectorIndex = (((unsigned) ((stackPointer - activeContext) - 4)) >> 2) - argumentCount; /* begin transfer:fromIndex:ofObject:toIndex:ofObject: */ fromIndex = activeContext + ((selectorIndex + 1) * 4); toIndex = activeContext + (selectorIndex * 4); lastFrom = fromIndex + (argumentCount * 4); while (fromIndex < lastFrom) { fromIndex += 4; toIndex += 4; longAtput(toIndex, longAt(fromIndex)); } /* begin pop: */ stackPointer -= 1 * 4; /* begin executeNewMethod */ if ((primitiveIndex == 0) || (!(primitiveResponse()))) { activateNewMethod(); /* begin quickCheckForInterrupts */ if ((interruptCheckCounter -= 1) <= 0) { interruptCheckCounter = 1000; checkForInterrupts(); } } successFlag = true; } else { argumentCount += 1; messageSelector = performSelector; } } int primitivePerformWithArgs(void) { int argumentArray; int performSelector; int arraySize; int thisReceiver; int index; int cntxSize; int sp; int sp1; int sp2; int top; int top1; int sz; int objectPointer; int sz1; int header; int header1; int ccIndex; int cl; /* begin popStack */ top1 = longAt(stackPointer); stackPointer -= 4; argumentArray = top1; /* begin fetchWordLengthOf: */ /* begin sizeBitsOf: */ header = longAt(argumentArray); if ((header & 3) == 0) { sz = (longAt(argumentArray - 8)) & 4294967292U; goto l1; } else { sz = header & 252; goto l1; } l1: /* end sizeBitsOf: */; arraySize = ((unsigned) (sz - 4)) >> 2; /* begin fetchWordLengthOf: */ objectPointer = activeContext; /* begin sizeBitsOf: */ header1 = longAt(objectPointer); if ((header1 & 3) == 0) { sz1 = (longAt(objectPointer - 8)) & 4294967292U; goto l2; } else { sz1 = header1 & 252; goto l2; } l2: /* end sizeBitsOf: */; cntxSize = ((unsigned) (sz1 - 4)) >> 2; /* begin success: */ successFlag = (((((unsigned) ((stackPointer - activeContext) - 4)) >> 2) + arraySize) < cntxSize) && successFlag; /* begin assertClassOf:is: */ if ((argumentArray & 1)) { successFlag = false; goto l3; } ccIndex = (((unsigned) (longAt(argumentArray))) >> 12) & 31; if (ccIndex == 0) { cl = (longAt(argumentArray - 4)) & 4294967292U; } else { cl = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + ((ccIndex - 1) << 2)); } /* begin success: */ successFlag = (cl == (longAt(((((char *) specialObjectsOop)) + 4) + (7 << 2)))) && successFlag; l3: /* end assertClassOf:is: */; if (successFlag) { performSelector = messageSelector; /* begin popStack */ top = longAt(stackPointer); stackPointer -= 4; messageSelector = top; thisReceiver = longAt(stackPointer); argumentCount = arraySize; index = 1; while (index <= argumentCount) { /* begin push: */ longAtput(sp = stackPointer + 4, longAt(((((char *) argumentArray)) + 4) + ((index - 1) << 2))); stackPointer = sp; index += 1; } lookupMethodInClass(fetchClassOf(thisReceiver)); /* begin success: */ successFlag = (((((unsigned) (longAt(((((char *) newMethod)) + 4) + (0 << 2)))) >> 25) & 31) == argumentCount) && successFlag; if (successFlag) { /* begin executeNewMethod */ if ((primitiveIndex == 0) || (!(primitiveResponse()))) { activateNewMethod(); /* begin quickCheckForInterrupts */ if ((interruptCheckCounter -= 1) <= 0) { interruptCheckCounter = 1000; checkForInterrupts(); } } successFlag = true; } else { /* begin pop: */ stackPointer -= argumentCount * 4; /* begin push: */ longAtput(sp1 = stackPointer + 4, messageSelector); stackPointer = sp1; /* begin push: */ longAtput(sp2 = stackPointer + 4, argumentArray); stackPointer = sp2; argumentCount = 2; messageSelector = performSelector; } } else { /* begin unPop: */ stackPointer += 1 * 4; } } int primitivePointX(void) { int rcvr; int sp; int top; int ccIndex; int cl; successFlag = true; /* begin popStack */ top = longAt(stackPointer); stackPointer -= 4; rcvr = top; /* begin assertClassOf:is: */ if ((rcvr & 1)) { successFlag = false; goto l1; } ccIndex = (((unsigned) (longAt(rcvr))) >> 12) & 31; if (ccIndex == 0) { cl = (longAt(rcvr - 4)) & 4294967292U; } else { cl = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + ((ccIndex - 1) << 2)); } /* begin success: */ successFlag = (cl == (longAt(((((char *) specialObjectsOop)) + 4) + (12 << 2)))) && successFlag; l1: /* end assertClassOf:is: */; if (successFlag) { /* begin push: */ longAtput(sp = stackPointer + 4, longAt(((((char *) rcvr)) + 4) + (0 << 2))); stackPointer = sp; } else { /* begin unPop: */ stackPointer += 1 * 4; failSpecialPrim(0); } } int primitivePointY(void) { int rcvr; int sp; int top; int ccIndex; int cl; successFlag = true; /* begin popStack */ top = longAt(stackPointer); stackPointer -= 4; rcvr = top; /* begin assertClassOf:is: */ if ((rcvr & 1)) { successFlag = false; goto l1; } ccIndex = (((unsigned) (longAt(rcvr))) >> 12) & 31; if (ccIndex == 0) { cl = (longAt(rcvr - 4)) & 4294967292U; } else { cl = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + ((ccIndex - 1) << 2)); } /* begin success: */ successFlag = (cl == (longAt(((((char *) specialObjectsOop)) + 4) + (12 << 2)))) && successFlag; l1: /* end assertClassOf:is: */; if (successFlag) { /* begin push: */ longAtput(sp = stackPointer + 4, longAt(((((char *) rcvr)) + 4) + (1 << 2))); stackPointer = sp; } else { /* begin unPop: */ stackPointer += 1 * 4; failSpecialPrim(0); } } int primitivePushFalse(void) { int top; int sp; /* begin popStack */ top = longAt(stackPointer); stackPointer -= 4; /* begin push: */ longAtput(sp = stackPointer + 4, falseObj); stackPointer = sp; } int primitivePushMinusOne(void) { int top; int sp; /* begin popStack */ top = longAt(stackPointer); stackPointer -= 4; /* begin push: */ longAtput(sp = stackPointer + 4, 4294967295U); stackPointer = sp; } int primitivePushNil(void) { int top; int sp; /* begin popStack */ top = longAt(stackPointer); stackPointer -= 4; /* begin push: */ longAtput(sp = stackPointer + 4, nilObj); stackPointer = sp; } int primitivePushOne(void) { int top; int sp; /* begin popStack */ top = longAt(stackPointer); stackPointer -= 4; /* begin push: */ longAtput(sp = stackPointer + 4, 3); stackPointer = sp; } int primitivePushSelf(void) { } int primitivePushTrue(void) { int top; int sp; /* begin popStack */ top = longAt(stackPointer); stackPointer -= 4; /* begin push: */ longAtput(sp = stackPointer + 4, trueObj); stackPointer = sp; } int primitivePushTwo(void) { int top; int sp; /* begin popStack */ top = longAt(stackPointer); stackPointer -= 4; /* begin push: */ longAtput(sp = stackPointer + 4, 5); stackPointer = sp; } int primitivePushZero(void) { int top; int sp; /* begin popStack */ top = longAt(stackPointer); stackPointer -= 4; /* begin push: */ longAtput(sp = stackPointer + 4, 1); stackPointer = sp; } int primitiveQuit(void) { ioExit(); } int primitiveQuo(void) { int arg; int result; int rcvr; int sp; int integerPointer; int top; int integerPointer1; int top1; /* begin popInteger */ /* begin popStack */ top = longAt(stackPointer); stackPointer -= 4; integerPointer = top; if ((integerPointer & 1)) { arg = (integerPointer >> 1); goto l1; } else { successFlag = false; arg = 1; goto l1; } l1: /* end popInteger */; /* begin popInteger */ /* begin popStack */ top1 = longAt(stackPointer); stackPointer -= 4; integerPointer1 = top1; if ((integerPointer1 & 1)) { rcvr = (integerPointer1 >> 1); goto l2; } else { successFlag = false; rcvr = 1; goto l2; } l2: /* end popInteger */; /* begin success: */ successFlag = (arg != 0) && successFlag; if (successFlag) { if (rcvr > 0) { if (arg > 0) { result = rcvr / arg; } else { result = 0 - (rcvr / (0 - arg)); } } else { if (arg > 0) { result = 0 - ((0 - rcvr) / arg); } else { result = (0 - rcvr) / (0 - arg); } } /* begin success: */ successFlag = ((result ^ (result << 1)) >= 0) && successFlag; } if (successFlag) { /* begin pushInteger: */ /* begin push: */ longAtput(sp = stackPointer + 4, ((result << 1) | 1)); stackPointer = sp; } else { /* begin unPop: */ stackPointer += 2 * 4; } } int primitiveReadJoystick(void) { int index; int object; int sp; int integerPointer; /* begin stackIntegerValue: */ integerPointer = longAt(stackPointer - (0 * 4)); if ((integerPointer & 1)) { index = (integerPointer >> 1); goto l1; } else { primitiveFail(); index = 0; goto l1; } l1: /* end stackIntegerValue: */; if (successFlag) { /* begin pop: */ stackPointer -= 2 * 4; /* begin push: */ object = positive32BitIntegerFor(joystickRead(index)); longAtput(sp = stackPointer + 4, object); stackPointer = sp; } } int primitiveRelinquishProcessor(void) { int microSecs; int integerPointer; /* begin stackIntegerValue: */ integerPointer = longAt(stackPointer - (0 * 4)); if ((integerPointer & 1)) { microSecs = (integerPointer >> 1); goto l1; } else { primitiveFail(); microSecs = 0; goto l1; } l1: /* end stackIntegerValue: */; if (successFlag) { ioRelinquishProcessorForMicroseconds(microSecs); /* begin pop: */ stackPointer -= 1 * 4; } } int primitiveResolverAbortLookup(void) { sqResolverAbort(); } int primitiveResolverAddressLookupResult(void) { int sz; int s; int sp; sz = sqResolverAddrLookupResultSize(); if (successFlag) { s = instantiateClassindexableSize(longAt(((((char *) specialObjectsOop)) + 4) + (6 << 2)), sz); sqResolverAddrLookupResult(((char *) (s + 4)), sz); } if (successFlag) { /* begin pop:thenPush: */ longAtput(sp = stackPointer - ((1 - 1) * 4), s); stackPointer = sp; } } int primitiveResolverError(void) { int err; int sp; err = sqResolverError(); if (successFlag) { /* begin pop:thenPush: */ longAtput(sp = stackPointer - ((1 - 1) * 4), ((err << 1) | 1)); stackPointer = sp; } } int primitiveResolverLocalAddress(void) { int addr; int oop; int sp; addr = sqResolverLocalAddress(); if (successFlag) { /* begin pop:thenPush: */ oop = intToNetAddress(addr); longAtput(sp = stackPointer - ((1 - 1) * 4), oop); stackPointer = sp; } } int primitiveResolverNameLookupResult(void) { int addr; int oop; int sp; addr = sqResolverNameLookupResult(); if (successFlag) { /* begin pop:thenPush: */ oop = intToNetAddress(addr); longAtput(sp = stackPointer - ((1 - 1) * 4), oop); stackPointer = sp; } } int primitiveResolverStartAddressLookup(void) { int addr; addr = netAddressToInt(longAt(stackPointer)); if (successFlag) { sqResolverStartAddrLookup(addr); } if (successFlag) { /* begin pop: */ stackPointer -= 1 * 4; } } int primitiveResolverStartNameLookup(void) { int sz; int name; int sz1; int header; int fmt; int ccIndex; int cl; name = longAt(stackPointer); /* begin assertClassOf:is: */ if ((name & 1)) { successFlag = false; goto l2; } ccIndex = (((unsigned) (longAt(name))) >> 12) & 31; if (ccIndex == 0) { cl = (longAt(name - 4)) & 4294967292U; } else { cl = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + ((ccIndex - 1) << 2)); } /* begin success: */ successFlag = (cl == (longAt(((((char *) specialObjectsOop)) + 4) + (6 << 2)))) && successFlag; l2: /* end assertClassOf:is: */; if (successFlag) { /* begin lengthOf: */ header = longAt(name); if ((header & 3) == 0) { sz1 = (longAt(name - 8)) & 4294967292U; } else { sz1 = header & 252; } fmt = (((unsigned) header) >> 8) & 15; if (fmt < 8) { sz = ((unsigned) (sz1 - 4)) >> 2; goto l1; } else { sz = (sz1 - 4) - (fmt & 3); goto l1; } l1: /* end lengthOf: */; sqResolverStartNameLookup(((char *) (name + 4)), sz); } if (successFlag) { /* begin pop: */ stackPointer -= 1 * 4; } } int primitiveResolverStatus(void) { int status; int sp; status = sqResolverStatus(); if (successFlag) { /* begin pop:thenPush: */ longAtput(sp = stackPointer - ((1 - 1) * 4), ((status << 1) | 1)); stackPointer = sp; } } int primitiveResponse(void) { if (primitiveIndex > 700) { return false; } successFlag = true; switch (primitiveIndex) { case 0: primitiveFail(); break; case 1: primitiveAdd(); break; case 2: primitiveSubtract(); break; case 3: primitiveLessThan(); break; case 4: primitiveGreaterThan(); break; case 5: primitiveLessOrEqual(); break; case 6: primitiveGreaterOrEqual(); break; case 7: primitiveEqual(); break; case 8: primitiveNotEqual(); break; case 9: primitiveMultiply(); break; case 10: primitiveDivide(); break; case 11: primitiveMod(); break; case 12: primitiveDiv(); break; case 13: primitiveQuo(); break; case 14: primitiveBitAnd(); break; case 15: primitiveBitOr(); break; case 16: primitiveBitXor(); break; case 17: primitiveBitShift(); break; case 18: primitiveMakePoint(); break; case 19: case 20: case 21: case 22: case 23: case 24: case 25: case 26: case 27: case 28: case 29: case 30: case 31: case 32: case 33: case 34: case 35: case 36: case 37: case 38: case 39: primitiveFail(); break; case 40: primitiveAsFloat(); break; case 41: primitiveFloatAdd(); break; case 42: primitiveFloatSubtract(); break; case 43: primitiveFloatLessThan(); break; case 44: primitiveFloatGreaterThan(); break; case 45: primitiveFloatLessOrEqual(); break; case 46: primitiveFloatGreaterOrEqual(); break; case 47: primitiveFloatEqual(); break; case 48: primitiveFloatNotEqual(); break; case 49: primitiveFloatMultiply(); break; case 50: primitiveFloatDivide(); break; case 51: primitiveTruncated(); break; case 52: primitiveFractionalPart(); break; case 53: primitiveExponent(); break; case 54: primitiveTimesTwoPower(); break; case 55: primitiveSquareRoot(); break; case 56: primitiveSine(); break; case 57: primitiveArctan(); break; case 58: primitiveLogN(); break; case 59: primitiveExp(); break; case 60: primitiveAt(); break; case 61: primitiveAtPut(); break; case 62: primitiveSize(); break; case 63: primitiveStringAt(); break; case 64: primitiveStringAtPut(); break; case 65: primitiveNext(); break; case 66: primitiveNextPut(); break; case 67: primitiveAtEnd(); break; case 68: primitiveObjectAt(); break; case 69: primitiveObjectAtPut(); break; case 70: primitiveNew(); break; case 71: primitiveNewWithArg(); break; case 72: primitiveFail(); break; case 73: primitiveInstVarAt(); break; case 74: primitiveInstVarAtPut(); break; case 75: primitiveAsOop(); break; case 76: primitiveFail(); break; case 77: primitiveSomeInstance(); break; case 78: primitiveNextInstance(); break; case 79: primitiveNewMethod(); break; case 80: primitiveFail(); break; case 81: primitiveValue(); break; case 82: primitiveValueWithArgs(); break; case 83: primitivePerform(); break; case 84: primitivePerformWithArgs(); break; case 85: primitiveSignal(); break; case 86: primitiveWait(); break; case 87: primitiveResume(); break; case 88: primitiveSuspend(); break; case 89: primitiveFlushCache(); break; case 90: primitiveMousePoint(); break; case 91: case 92: primitiveFail(); break; case 93: primitiveInputSemaphore(); break; case 94: primitiveFail(); break; case 95: primitiveInputWord(); break; case 96: primitiveCopyBits(); break; case 97: primitiveSnapshot(); break; case 98: case 99: case 100: primitiveFail(); break; case 101: primitiveBeCursor(); break; case 102: primitiveBeDisplay(); break; case 103: primitiveScanCharacters(); break; case 104: primitiveDrawLoop(); break; case 105: primitiveStringReplace(); break; case 106: primitiveScreenSize(); break; case 107: primitiveMouseButtons(); break; case 108: primitiveKbdNext(); break; case 109: primitiveKbdPeek(); break; case 110: primitiveEquivalent(); break; case 111: primitiveClass(); break; case 112: primitiveBytesLeft(); break; case 113: primitiveQuit(); break; case 114: primitiveExitToDebugger(); break; case 115: case 116: case 117: primitiveFail(); break; case 118: primitiveDoPrimitiveWithArgs(); break; case 119: primitiveFlushCacheSelective(); break; case 120: primitiveFail(); break; case 121: primitiveImageName(); break; case 122: primitiveNoop(); break; case 123: primitiveFail(); break; case 124: primitiveLowSpaceSemaphore(); break; case 125: primitiveSignalAtBytesLeft(); break; case 126: primitiveDeferDisplayUpdates(); break; case 127: primitiveShowDisplayRect(); break; case 128: primitiveArrayBecome(); break; case 129: primitiveSpecialObjectsOop(); break; case 130: primitiveFullGC(); break; case 131: primitiveIncrementalGC(); break; case 132: primitiveObjectPointsTo(); break; case 133: primitiveSetInterruptKey(); break; case 134: primitiveInterruptSemaphore(); break; case 135: primitiveMillisecondClock(); break; case 136: primitiveSignalAtMilliseconds(); break; case 137: primitiveSecondsClock(); break; case 138: primitiveSomeObject(); break; case 139: primitiveNextObject(); break; case 140: primitiveBeep(); break; case 141: primitiveClipboardText(); break; case 142: primitiveVMPath(); break; case 143: primitiveShortAt(); break; case 144: primitiveShortAtPut(); break; case 145: primitiveConstantFill(); break; case 146: primitiveReadJoystick(); break; case 147: primitiveWarpBits(); break; case 148: primitiveClone(); break; case 149: primitiveGetAttribute(); break; case 150: primitiveFileAtEnd(); break; case 151: primitiveFileClose(); break; case 152: primitiveFileGetPosition(); break; case 153: primitiveFileOpen(); break; case 154: primitiveFileRead(); break; case 155: primitiveFileSetPosition(); break; case 156: primitiveFileDelete(); break; case 157: primitiveFileSize(); break; case 158: primitiveFileWrite(); break; case 159: primitiveFileRename(); break; case 160: primitiveDirectoryCreate(); break; case 161: primitiveDirectoryDelimitor(); break; case 162: primitiveDirectoryLookup(); break; case 163: case 164: case 165: case 166: case 167: case 168: primitiveFail(); break; case 169: primitiveDirectorySetMacTypeAndCreator(); break; case 170: primitiveSoundStart(); break; case 171: primitiveSoundStartWithSemaphore(); break; case 172: primitiveSoundStop(); break; case 173: primitiveSoundAvailableSpace(); break; case 174: primitiveSoundPlaySamples(); break; case 175: primitiveSoundPlaySilence(); break; case 176: primWaveTableSoundmixSampleCountintostartingAtpan(); break; case 177: primFMSoundmixSampleCountintostartingAtpan(); break; case 178: primPluckedSoundmixSampleCountintostartingAtpan(); break; case 179: primSampledSoundmixSampleCountintostartingAtpan(); break; case 180: primFMSoundmixSampleCountintostartingAtleftVolrightVol(); break; case 181: primPluckedSoundmixSampleCountintostartingAtleftVolrightVol(); break; case 182: primSampledSoundmixSampleCountintostartingAtleftVolrightVol(); break; case 183: primReverbSoundapplyReverbTostartingAtcount(); break; case 184: case 185: case 186: case 187: case 188: primitiveFail(); break; case 189: primitiveSoundInsertSamples(); break; case 190: primitiveSoundStartRecording(); break; case 191: primitiveSoundStopRecording(); break; case 192: primitiveSoundGetRecordingSampleRate(); break; case 193: primitiveSoundRecordSamples(); break; case 194: primitiveSoundSetRecordLevel(); break; case 195: case 196: case 197: case 198: case 199: primitiveFail(); break; case 200: primitiveInitializeNetwork(); break; case 201: primitiveResolverStartNameLookup(); break; case 202: primitiveResolverNameLookupResult(); break; case 203: primitiveResolverStartAddressLookup(); break; case 204: primitiveResolverAddressLookupResult(); break; case 205: primitiveResolverAbortLookup(); break; case 206: primitiveResolverLocalAddress(); break; case 207: primitiveResolverStatus(); break; case 208: primitiveResolverError(); break; case 209: primitiveSocketCreate(); break; case 210: primitiveSocketDestroy(); break; case 211: primitiveSocketConnectionStatus(); break; case 212: primitiveSocketError(); break; case 213: primitiveSocketLocalAddress(); break; case 214: primitiveSocketLocalPort(); break; case 215: primitiveSocketRemoteAddress(); break; case 216: primitiveSocketRemotePort(); break; case 217: primitiveSocketConnectToPort(); break; case 218: primitiveSocketListenOnPort(); break; case 219: primitiveSocketCloseConnection(); break; case 220: primitiveSocketAbortConnection(); break; case 221: primitiveSocketReceiveDataBufCount(); break; case 222: primitiveSocketReceiveDataAvailable(); break; case 223: primitiveSocketSendDataBufCount(); break; case 224: primitiveSocketSendDone(); break; case 225: case 226: case 227: case 228: case 229: primitiveFail(); break; case 230: primitiveRelinquishProcessor(); break; case 231: primitiveForceDisplayUpdate(); break; case 232: primitiveFormPrint(); break; case 233: primitiveSetFullScreen(); break; case 234: primBitmapdecompressfromByteArrayat(); break; case 235: primStringcomparewithcollated(); break; case 236: primSampledSoundconvert8bitSignedFromto16Bit(); break; case 237: primBitmapcompresstoByteArray(); break; case 238: primitiveSerialPortOpen(); break; case 239: primitiveSerialPortClose(); break; case 240: primitiveSerialPortWrite(); break; case 241: primitiveSerialPortRead(); break; case 242: case 243: case 244: case 245: case 246: case 247: case 248: case 249: primitiveFail(); break; case 250: clearProfile(); break; case 251: dumpProfile(); break; case 252: startProfiling(); break; case 253: stopProfiling(); break; case 254: primitiveVMParameter(); break; case 255: primitiveFail(); break; case 256: primitivePushSelf(); break; case 257: primitivePushTrue(); break; case 258: primitivePushFalse(); break; case 259: primitivePushNil(); break; case 260: primitivePushMinusOne(); break; case 261: primitivePushZero(); break; case 262: primitivePushOne(); break; case 263: primitivePushTwo(); break; case 264: case 265: case 266: case 267: case 268: case 269: case 270: case 271: case 272: case 273: case 274: case 275: case 276: case 277: case 278: case 279: case 280: case 281: case 282: case 283: case 284: case 285: case 286: case 287: case 288: case 289: case 290: case 291: case 292: case 293: case 294: case 295: case 296: case 297: case 298: case 299: case 300: case 301: case 302: case 303: case 304: case 305: case 306: case 307: case 308: case 309: case 310: case 311: case 312: case 313: case 314: case 315: case 316: case 317: case 318: case 319: case 320: case 321: case 322: case 323: case 324: case 325: case 326: case 327: case 328: case 329: case 330: case 331: case 332: case 333: case 334: case 335: case 336: case 337: case 338: case 339: case 340: case 341: case 342: case 343: case 344: case 345: case 346: case 347: case 348: case 349: case 350: case 351: case 352: case 353: case 354: case 355: case 356: case 357: case 358: case 359: case 360: case 361: case 362: case 363: case 364: case 365: case 366: case 367: case 368: case 369: case 370: case 371: case 372: case 373: case 374: case 375: case 376: case 377: case 378: case 379: case 380: case 381: case 382: case 383: case 384: case 385: case 386: case 387: case 388: case 389: case 390: case 391: case 392: case 393: case 394: case 395: case 396: case 397: case 398: case 399: case 400: case 401: case 402: case 403: case 404: case 405: case 406: case 407: case 408: case 409: case 410: case 411: case 412: case 413: case 414: case 415: case 416: case 417: case 418: case 419: case 420: case 421: case 422: case 423: case 424: case 425: case 426: case 427: case 428: case 429: case 430: case 431: case 432: case 433: case 434: case 435: case 436: case 437: case 438: case 439: case 440: case 441: case 442: case 443: case 444: case 445: case 446: case 447: case 448: case 449: case 450: case 451: case 452: case 453: case 454: case 455: case 456: case 457: case 458: case 459: case 460: case 461: case 462: case 463: case 464: case 465: case 466: case 467: case 468: case 469: case 470: case 471: case 472: case 473: case 474: case 475: case 476: case 477: case 478: case 479: case 480: case 481: case 482: case 483: case 484: case 485: case 486: case 487: case 488: case 489: case 490: case 491: case 492: case 493: case 494: case 495: case 496: case 497: case 498: case 499: case 500: case 501: case 502: case 503: case 504: case 505: case 506: case 507: case 508: case 509: case 510: case 511: case 512: case 513: case 514: case 515: case 516: case 517: case 518: case 519: primitiveLoadInstVar(); break; case 520: primitiveFail(); break; case 521: primitiveMIDIClosePort(); break; case 522: primitiveMIDIGetClock(); break; case 523: primitiveMIDIGetPortCount(); break; case 524: primitiveMIDIGetPortDirectionality(); break; case 525: primitiveMIDIGetPortName(); break; case 526: primitiveMIDIOpenPort(); break; case 527: primitiveMIDIParameterGetOrSet(); break; case 528: primitiveMIDIRead(); break; case 529: primitiveMIDIWrite(); break; case 530: case 531: case 532: case 533: case 534: case 535: case 536: case 537: case 538: case 539: case 540: case 541: case 542: case 543: case 544: case 545: case 546: case 547: case 548: case 549: case 550: case 551: case 552: case 553: case 554: case 555: case 556: case 557: case 558: case 559: case 560: case 561: case 562: case 563: case 564: case 565: case 566: case 567: case 568: case 569: case 570: case 571: case 572: case 573: case 574: case 575: case 576: case 577: case 578: case 579: case 580: case 581: case 582: case 583: case 584: case 585: case 586: case 587: case 588: case 589: case 590: case 591: case 592: case 593: case 594: case 595: case 596: case 597: case 598: case 599: case 600: case 601: case 602: case 603: case 604: case 605: case 606: case 607: case 608: case 609: case 610: case 611: case 612: case 613: case 614: case 615: case 616: case 617: case 618: case 619: case 620: case 621: case 622: case 623: case 624: case 625: case 626: case 627: case 628: case 629: case 630: case 631: case 632: case 633: case 634: case 635: case 636: case 637: case 638: case 639: case 640: case 641: case 642: case 643: case 644: case 645: case 646: case 647: case 648: case 649: case 650: case 651: case 652: case 653: case 654: case 655: case 656: case 657: case 658: case 659: case 660: case 661: case 662: case 663: case 664: case 665: case 666: case 667: case 668: case 669: case 670: case 671: case 672: case 673: case 674: case 675: case 676: case 677: case 678: case 679: case 680: case 681: case 682: case 683: case 684: case 685: case 686: case 687: case 688: case 689: case 690: case 691: case 692: case 693: case 694: case 695: case 696: case 697: case 698: case 699: case 700: primitiveFail(); break; } if (successFlag && ((nextWakeupTick != 0) && (((ioMSecs()) & 536870911) >= nextWakeupTick))) { interruptCheckCounter = 1000; checkForInterrupts(); } return successFlag; } int primitiveResume(void) { int proc; proc = longAt(stackPointer); if (successFlag) { resume(proc); } } int primitiveScanCharacters(void) { int stopArray; int displayFlag; int start; int stop; int string; int rcvr; int rightX; int sp; int integerPointer; int integerPointer1; int integerPointer2; int successValue; int sourceX2; int ascii; int top; int nextDestX; int charVal; int left; int lastIndex; int objectPointer; int integerValue; int lastIndex1; int objectPointer1; int objectPointer2; int objectPointer3; rcvr = longAt(stackPointer - (6 * 4)); /* begin stackIntegerValue: */ integerPointer = longAt(stackPointer - (5 * 4)); if ((integerPointer & 1)) { start = (integerPointer >> 1); goto l1; } else { primitiveFail(); start = 0; goto l1; } l1: /* end stackIntegerValue: */; /* begin stackIntegerValue: */ integerPointer1 = longAt(stackPointer - (4 * 4)); if ((integerPointer1 & 1)) { stop = (integerPointer1 >> 1); goto l2; } else { primitiveFail(); stop = 0; goto l2; } l2: /* end stackIntegerValue: */; string = longAt(stackPointer - (3 * 4)); /* begin stackIntegerValue: */ integerPointer2 = longAt(stackPointer - (2 * 4)); if ((integerPointer2 & 1)) { rightX = (integerPointer2 >> 1); goto l3; } else { primitiveFail(); rightX = 0; goto l3; } l3: /* end stackIntegerValue: */; stopArray = longAt(stackPointer - (1 * 4)); /* begin booleanValueOf: */ if ((longAt(stackPointer - (0 * 4))) == trueObj) { displayFlag = true; goto l4; } if ((longAt(stackPointer - (0 * 4))) == falseObj) { displayFlag = false; goto l4; } successFlag = false; displayFlag = null; l4: /* end booleanValueOf: */; if (!(successFlag)) { return null; } /* begin success: */ successValue = loadScannerFromstartstopstringrightXstopArraydisplayFlag(rcvr, start, stop, string, rightX, stopArray, displayFlag); successFlag = successValue && successFlag; if (successFlag) { /* begin scanCharacters */ if (scanDisplayFlag) { clipRange(); left = dx; top = dy; } lastIndex = scanStart; while (lastIndex <= scanStop) { charVal = stObjectat(scanString, lastIndex); ascii = (charVal >> 1); if (!successFlag) { goto l6; } stopCode = stObjectat(scanStopArray, ascii + 1); if (!successFlag) { goto l6; } if (!(stopCode == nilObj)) { /* begin returnAt:lastIndex:left:top: */ stopCode = stObjectat(scanStopArray, ascii + 1); if (!successFlag) { goto l6; } /* begin storeInteger:ofObject:withValue: */ objectPointer1 = bitBltOop; if ((lastIndex ^ (lastIndex << 1)) >= 0) { longAtput(((((char *) objectPointer1)) + 4) + (15 << 2), ((lastIndex << 1) | 1)); } else { primitiveFail(); } if (scanDisplayFlag) { affectedL = left; affectedR = bbW + dx; affectedT = top; affectedB = bbH + dy; } goto l6; } sourceX = stObjectat(scanXTable, ascii + 1); sourceX2 = stObjectat(scanXTable, ascii + 2); if (!successFlag) { goto l6; } if (((sourceX & 1)) && ((sourceX2 & 1))) { sourceX = (sourceX >> 1); sourceX2 = (sourceX2 >> 1); } else { primitiveFail(); goto l6; } nextDestX = destX + (width = sourceX2 - sourceX); if (nextDestX > scanRightX) { /* begin returnAt:lastIndex:left:top: */ stopCode = stObjectat(scanStopArray, 258); if (!successFlag) { goto l6; } /* begin storeInteger:ofObject:withValue: */ objectPointer2 = bitBltOop; if ((lastIndex ^ (lastIndex << 1)) >= 0) { longAtput(((((char *) objectPointer2)) + 4) + (15 << 2), ((lastIndex << 1) | 1)); } else { primitiveFail(); } if (scanDisplayFlag) { affectedL = left; affectedR = bbW + dx; affectedT = top; affectedB = bbH + dy; } goto l6; } if (scanDisplayFlag) { copyBits(); } destX = nextDestX; /* begin storeInteger:ofObject:withValue: */ objectPointer = bitBltOop; integerValue = destX; if ((integerValue ^ (integerValue << 1)) >= 0) { longAtput(((((char *) objectPointer)) + 4) + (4 << 2), ((integerValue << 1) | 1)); } else { primitiveFail(); } lastIndex += 1; } /* begin returnAt:lastIndex:left:top: */ lastIndex1 = scanStop; stopCode = stObjectat(scanStopArray, 257); if (!successFlag) { goto l5; } /* begin storeInteger:ofObject:withValue: */ objectPointer3 = bitBltOop; if ((lastIndex1 ^ (lastIndex1 << 1)) >= 0) { longAtput(((((char *) objectPointer3)) + 4) + (15 << 2), ((lastIndex1 << 1) | 1)); } else { primitiveFail(); } if (scanDisplayFlag) { affectedL = left; affectedR = bbW + dx; affectedT = top; affectedB = bbH + dy; } l5: /* end returnAt:lastIndex:left:top: */; l6: /* end scanCharacters */; } if (successFlag) { if (displayFlag) { showDisplayBits(); } /* begin pop: */ stackPointer -= 7 * 4; /* begin push: */ longAtput(sp = stackPointer + 4, stopCode); stackPointer = sp; } } int primitiveScreenSize(void) { int pointWord; int object; int sp; int pointResult; /* begin pop: */ stackPointer -= 1 * 4; pointWord = ioScreenSize(); /* begin push: */ /* begin makePointwithxValue:yValue: */ pointResult = instantiateSmallClasssizeInBytesfill(longAt(((((char *) specialObjectsOop)) + 4) + (12 << 2)), 12, nilObj); /* begin storePointer:ofObject:withValue: */ if (pointResult < youngStart) { possibleRootStoreIntovalue(pointResult, ((((((unsigned) pointWord) >> 16) & 65535) << 1) | 1)); } longAtput(((((char *) pointResult)) + 4) + (0 << 2), ((((((unsigned) pointWord) >> 16) & 65535) << 1) | 1)); /* begin storePointer:ofObject:withValue: */ if (pointResult < youngStart) { possibleRootStoreIntovalue(pointResult, (((pointWord & 65535) << 1) | 1)); } longAtput(((((char *) pointResult)) + 4) + (1 << 2), (((pointWord & 65535) << 1) | 1)); object = pointResult; longAtput(sp = stackPointer + 4, object); stackPointer = sp; } int primitiveSecondsClock(void) { int object; int sp; /* begin pop: */ stackPointer -= 1 * 4; /* begin push: */ object = positive32BitIntegerFor(ioSeconds()); longAtput(sp = stackPointer + 4, object); stackPointer = sp; } int primitiveSerialPortClose(void) { int portNum; int integerPointer; /* begin stackIntegerValue: */ integerPointer = longAt(stackPointer - (0 * 4)); if ((integerPointer & 1)) { portNum = (integerPointer >> 1); goto l1; } else { primitiveFail(); portNum = 0; goto l1; } l1: /* end stackIntegerValue: */; if (successFlag) { serialPortClose(portNum); } if (successFlag) { /* begin pop: */ stackPointer -= 1 * 4; } } int primitiveSerialPortOpen(void) { int dataBits; int parityType; int stopBitsType; int portNum; int baudRate; int xOnChar; int xOffChar; int inFlowControl; int outFlowControl; int integerPointer; int integerPointer1; int integerPointer2; int integerPointer3; int integerPointer4; int integerPointer5; int integerPointer6; int integerPointer7; int integerPointer8; /* begin stackIntegerValue: */ integerPointer = longAt(stackPointer - (0 * 4)); if ((integerPointer & 1)) { xOffChar = (integerPointer >> 1); goto l1; } else { primitiveFail(); xOffChar = 0; goto l1; } l1: /* end stackIntegerValue: */; /* begin stackIntegerValue: */ integerPointer1 = longAt(stackPointer - (1 * 4)); if ((integerPointer1 & 1)) { xOnChar = (integerPointer1 >> 1); goto l2; } else { primitiveFail(); xOnChar = 0; goto l2; } l2: /* end stackIntegerValue: */; /* begin stackIntegerValue: */ integerPointer2 = longAt(stackPointer - (2 * 4)); if ((integerPointer2 & 1)) { outFlowControl = (integerPointer2 >> 1); goto l3; } else { primitiveFail(); outFlowControl = 0; goto l3; } l3: /* end stackIntegerValue: */; /* begin stackIntegerValue: */ integerPointer3 = longAt(stackPointer - (3 * 4)); if ((integerPointer3 & 1)) { inFlowControl = (integerPointer3 >> 1); goto l4; } else { primitiveFail(); inFlowControl = 0; goto l4; } l4: /* end stackIntegerValue: */; /* begin stackIntegerValue: */ integerPointer4 = longAt(stackPointer - (4 * 4)); if ((integerPointer4 & 1)) { dataBits = (integerPointer4 >> 1); goto l5; } else { primitiveFail(); dataBits = 0; goto l5; } l5: /* end stackIntegerValue: */; /* begin stackIntegerValue: */ integerPointer5 = longAt(stackPointer - (5 * 4)); if ((integerPointer5 & 1)) { parityType = (integerPointer5 >> 1); goto l6; } else { primitiveFail(); parityType = 0; goto l6; } l6: /* end stackIntegerValue: */; /* begin stackIntegerValue: */ integerPointer6 = longAt(stackPointer - (6 * 4)); if ((integerPointer6 & 1)) { stopBitsType = (integerPointer6 >> 1); goto l7; } else { primitiveFail(); stopBitsType = 0; goto l7; } l7: /* end stackIntegerValue: */; /* begin stackIntegerValue: */ integerPointer7 = longAt(stackPointer - (7 * 4)); if ((integerPointer7 & 1)) { baudRate = (integerPointer7 >> 1); goto l8; } else { primitiveFail(); baudRate = 0; goto l8; } l8: /* end stackIntegerValue: */; /* begin stackIntegerValue: */ integerPointer8 = longAt(stackPointer - (8 * 4)); if ((integerPointer8 & 1)) { portNum = (integerPointer8 >> 1); goto l9; } else { primitiveFail(); portNum = 0; goto l9; } l9: /* end stackIntegerValue: */; if (successFlag) { serialPortOpen( portNum, baudRate, stopBitsType, parityType, dataBits, inFlowControl, outFlowControl, xOnChar, xOffChar); } if (successFlag) { /* begin pop: */ stackPointer -= 9 * 4; } } int primitiveSerialPortRead(void) { int array; int startIndex; int portNum; int bytesRead; int count; int fmt; int sp; int integerPointer; int integerPointer1; int integerPointer2; int successValue; int successValue1; /* begin stackIntegerValue: */ integerPointer = longAt(stackPointer - (0 * 4)); if ((integerPointer & 1)) { count = (integerPointer >> 1); goto l1; } else { primitiveFail(); count = 0; goto l1; } l1: /* end stackIntegerValue: */; /* begin stackIntegerValue: */ integerPointer1 = longAt(stackPointer - (1 * 4)); if ((integerPointer1 & 1)) { startIndex = (integerPointer1 >> 1); goto l2; } else { primitiveFail(); startIndex = 0; goto l2; } l2: /* end stackIntegerValue: */; array = longAt(stackPointer - (2 * 4)); /* begin stackIntegerValue: */ integerPointer2 = longAt(stackPointer - (3 * 4)); if ((integerPointer2 & 1)) { portNum = (integerPointer2 >> 1); goto l3; } else { primitiveFail(); portNum = 0; goto l3; } l3: /* end stackIntegerValue: */; fmt = (((unsigned) (longAt(array))) >> 8) & 15; /* begin success: */ successValue = (fmt >= 8) && (fmt <= 11); successFlag = successValue && successFlag; /* begin success: */ successValue1 = (startIndex >= 1) && (((startIndex + count) - 1) <= (lengthOf(array))); successFlag = successValue1 && successFlag; if (successFlag) { bytesRead = serialPortReadInto(portNum, count, ((array + 4) + startIndex) - 1); } if (successFlag) { /* begin pop: */ stackPointer -= 5 * 4; /* begin pushInteger: */ /* begin push: */ longAtput(sp = stackPointer + 4, ((bytesRead << 1) | 1)); stackPointer = sp; } } int primitiveSerialPortWrite(void) { int array; int startIndex; int portNum; int bytesWritten; int count; int fmt; int integerPointer; int integerPointer1; int integerPointer2; int successValue; int successValue1; int sp; /* begin stackIntegerValue: */ integerPointer = longAt(stackPointer - (0 * 4)); if ((integerPointer & 1)) { count = (integerPointer >> 1); goto l1; } else { primitiveFail(); count = 0; goto l1; } l1: /* end stackIntegerValue: */; /* begin stackIntegerValue: */ integerPointer1 = longAt(stackPointer - (1 * 4)); if ((integerPointer1 & 1)) { startIndex = (integerPointer1 >> 1); goto l2; } else { primitiveFail(); startIndex = 0; goto l2; } l2: /* end stackIntegerValue: */; array = longAt(stackPointer - (2 * 4)); /* begin stackIntegerValue: */ integerPointer2 = longAt(stackPointer - (3 * 4)); if ((integerPointer2 & 1)) { portNum = (integerPointer2 >> 1); goto l3; } else { primitiveFail(); portNum = 0; goto l3; } l3: /* end stackIntegerValue: */; fmt = (((unsigned) (longAt(array))) >> 8) & 15; /* begin success: */ successValue = (fmt >= 8) && (fmt <= 11); successFlag = successValue && successFlag; /* begin success: */ successValue1 = (startIndex >= 1) && (((startIndex + count) - 1) <= (lengthOf(array))); successFlag = successValue1 && successFlag; if (successFlag) { bytesWritten = serialPortWriteFrom(portNum, count, ((array + 4) + startIndex) - 1); } if (successFlag) { /* begin pop: */ stackPointer -= 5 * 4; /* begin pushInteger: */ /* begin push: */ longAtput(sp = stackPointer + 4, ((bytesWritten << 1) | 1)); stackPointer = sp; } } int primitiveSetFullScreen(void) { int argOop; argOop = longAt(stackPointer); if (argOop == trueObj) { ioSetFullScreen(true); } else { if (argOop == falseObj) { ioSetFullScreen(false); } else { primitiveFail(); } } if (successFlag) { /* begin pop: */ stackPointer -= 1 * 4; } } int primitiveSetInterruptKey(void) { int keycode; int integerPointer; int top; /* begin popInteger */ /* begin popStack */ top = longAt(stackPointer); stackPointer -= 4; integerPointer = top; if ((integerPointer & 1)) { keycode = (integerPointer >> 1); goto l1; } else { successFlag = false; keycode = 1; goto l1; } l1: /* end popInteger */; if (successFlag) { interruptKeycode = keycode; } else { /* begin unPop: */ stackPointer += 1 * 4; } } int primitiveShortAt(void) { int addr; int sz; int value; int index; int rcvr; int integerPointer; int successValue; int successValue1; int sp; /* begin stackIntegerValue: */ integerPointer = longAt(stackPointer - (0 * 4)); if ((integerPointer & 1)) { index = (integerPointer >> 1); goto l1; } else { primitiveFail(); index = 0; goto l1; } l1: /* end stackIntegerValue: */; rcvr = longAt(stackPointer - (1 * 4)); /* begin success: */ successValue = (!((rcvr & 1))) && (isWordsOrBytes(rcvr)); successFlag = successValue && successFlag; if (!(successFlag)) { return null; } sz = ((sizeBitsOf(rcvr)) - 4) / 2; /* begin success: */ successValue1 = (index >= 1) && (index <= sz); successFlag = successValue1 && successFlag; if (successFlag) { addr = (rcvr + 4) + (2 * (index - 1)); value = *((short int *) addr); /* begin pop: */ stackPointer -= 2 * 4; /* begin pushInteger: */ /* begin push: */ longAtput(sp = stackPointer + 4, ((value << 1) | 1)); stackPointer = sp; } } int primitiveShortAtPut(void) { int addr; int sz; int value; int index; int rcvr; int integerPointer; int integerPointer1; int successValue; int successValue1; int successValue2; /* begin stackIntegerValue: */ integerPointer = longAt(stackPointer - (0 * 4)); if ((integerPointer & 1)) { value = (integerPointer >> 1); goto l1; } else { primitiveFail(); value = 0; goto l1; } l1: /* end stackIntegerValue: */; /* begin stackIntegerValue: */ integerPointer1 = longAt(stackPointer - (1 * 4)); if ((integerPointer1 & 1)) { index = (integerPointer1 >> 1); goto l2; } else { primitiveFail(); index = 0; goto l2; } l2: /* end stackIntegerValue: */; rcvr = longAt(stackPointer - (2 * 4)); /* begin success: */ successValue = (!((rcvr & 1))) && (isWordsOrBytes(rcvr)); successFlag = successValue && successFlag; if (!(successFlag)) { return null; } sz = ((sizeBitsOf(rcvr)) - 4) / 2; /* begin success: */ successValue1 = (index >= 1) && (index <= sz); successFlag = successValue1 && successFlag; /* begin success: */ successValue2 = (value >= -32768) && (value <= 32767); successFlag = successValue2 && successFlag; if (successFlag) { addr = (rcvr + 4) + (2 * (index - 1)); *((short int *) addr) = value; /* begin pop: */ stackPointer -= 2 * 4; } } int primitiveShowDisplayRect(void) { int displayObj; int dispBits; int dispBitsPtr; int top; int bottom; int h; int w; int d; int right; int left; int integerPointer; int integerPointer1; int integerPointer2; int integerPointer3; int successValue; int successValue1; /* begin stackIntegerValue: */ integerPointer = longAt(stackPointer - (0 * 4)); if ((integerPointer & 1)) { bottom = (integerPointer >> 1); goto l1; } else { primitiveFail(); bottom = 0; goto l1; } l1: /* end stackIntegerValue: */; /* begin stackIntegerValue: */ integerPointer1 = longAt(stackPointer - (1 * 4)); if ((integerPointer1 & 1)) { top = (integerPointer1 >> 1); goto l2; } else { primitiveFail(); top = 0; goto l2; } l2: /* end stackIntegerValue: */; /* begin stackIntegerValue: */ integerPointer2 = longAt(stackPointer - (2 * 4)); if ((integerPointer2 & 1)) { right = (integerPointer2 >> 1); goto l3; } else { primitiveFail(); right = 0; goto l3; } l3: /* end stackIntegerValue: */; /* begin stackIntegerValue: */ integerPointer3 = longAt(stackPointer - (3 * 4)); if ((integerPointer3 & 1)) { left = (integerPointer3 >> 1); goto l4; } else { primitiveFail(); left = 0; goto l4; } l4: /* end stackIntegerValue: */; displayObj = longAt(((((char *) specialObjectsOop)) + 4) + (14 << 2)); /* begin success: */ successValue = (((((unsigned) (longAt(displayObj))) >> 8) & 15) <= 4) && ((lengthOf(displayObj)) >= 4); successFlag = successValue && successFlag; if (successFlag) { dispBits = longAt(((((char *) displayObj)) + 4) + (0 << 2)); w = fetchIntegerofObject(1, displayObj); h = fetchIntegerofObject(2, displayObj); d = fetchIntegerofObject(3, displayObj); } if (left < 0) { left = 0; } if (right > w) { right = w; } if (top < 0) { top = 0; } if (bottom > h) { bottom = h; } /* begin success: */ successValue1 = (left <= right) && (top <= bottom); successFlag = successValue1 && successFlag; if (successFlag) { dispBitsPtr = dispBits + 4; ioShowDisplay(dispBitsPtr, w, h, d, left, right, top, bottom); } if (successFlag) { /* begin pop: */ stackPointer -= 4 * 4; } } int primitiveSignal(void) { int sema; int ccIndex; int cl; sema = longAt(stackPointer); /* begin assertClassOf:is: */ if ((sema & 1)) { successFlag = false; goto l1; } ccIndex = (((unsigned) (longAt(sema))) >> 12) & 31; if (ccIndex == 0) { cl = (longAt(sema - 4)) & 4294967292U; } else { cl = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + ((ccIndex - 1) << 2)); } /* begin success: */ successFlag = (cl == (longAt(((((char *) specialObjectsOop)) + 4) + (18 << 2)))) && successFlag; l1: /* end assertClassOf:is: */; if (successFlag) { synchronousSignal(sema); } } int primitiveSignalAtBytesLeft(void) { int bytes; int integerPointer; int top; /* begin popInteger */ /* begin popStack */ top = longAt(stackPointer); stackPointer -= 4; integerPointer = top; if ((integerPointer & 1)) { bytes = (integerPointer >> 1); goto l1; } else { successFlag = false; bytes = 1; goto l1; } l1: /* end popInteger */; if (successFlag) { lowSpaceThreshold = bytes; } else { lowSpaceThreshold = 0; /* begin unPop: */ stackPointer += 1 * 4; } } int primitiveSignalAtMilliseconds(void) { int sema; int tick; int oop; int oop1; int valuePointer; int integerPointer; int top; int top1; /* begin popInteger */ /* begin popStack */ top = longAt(stackPointer); stackPointer -= 4; integerPointer = top; if ((integerPointer & 1)) { tick = (integerPointer >> 1); goto l1; } else { successFlag = false; tick = 1; goto l1; } l1: /* end popInteger */; /* begin popStack */ top1 = longAt(stackPointer); stackPointer -= 4; sema = top1; if (successFlag) { if ((fetchClassOf(sema)) == (longAt(((((char *) specialObjectsOop)) + 4) + (18 << 2)))) { /* begin storePointer:ofObject:withValue: */ oop = specialObjectsOop; if (oop < youngStart) { possibleRootStoreIntovalue(oop, sema); } longAtput(((((char *) oop)) + 4) + (29 << 2), sema); nextWakeupTick = tick; } else { /* begin storePointer:ofObject:withValue: */ oop1 = specialObjectsOop; valuePointer = nilObj; if (oop1 < youngStart) { possibleRootStoreIntovalue(oop1, valuePointer); } longAtput(((((char *) oop1)) + 4) + (29 << 2), valuePointer); nextWakeupTick = 0; } } else { /* begin unPop: */ stackPointer += 2 * 4; } } int primitiveSine(void) { double rcvr; rcvr = popFloat(); if (successFlag) { pushFloat(sin(rcvr)); } else { /* begin unPop: */ stackPointer += 1 * 4; } } int primitiveSize(void) { int sz; int rcvr; int sp; int hdr; int totalLength; int fmt; int fixedFields; int sz1; int classFormat; int class; int ccIndex; rcvr = longAt(stackPointer); if ((rcvr & 1)) { sz = 0; } else { /* begin stSizeOf: */ hdr = longAt(rcvr); fmt = (((unsigned) hdr) >> 8) & 15; /* begin lengthOf:baseHeader:format: */ if ((hdr & 3) == 0) { sz1 = (longAt(rcvr - 8)) & 4294967292U; } else { sz1 = hdr & 252; } if (fmt < 8) { totalLength = ((unsigned) (sz1 - 4)) >> 2; goto l1; } else { totalLength = (sz1 - 4) - (fmt & 3); goto l1; } l1: /* end lengthOf:baseHeader:format: */; /* begin fixedFieldsOf:format:length: */ if ((fmt > 3) || (fmt == 2)) { fixedFields = 0; goto l2; } if (fmt < 2) { fixedFields = totalLength; goto l2; } /* begin fetchClassOf: */ if ((rcvr & 1)) { class = longAt(((((char *) specialObjectsOop)) + 4) + (5 << 2)); goto l3; } ccIndex = ((((unsigned) (longAt(rcvr))) >> 12) & 31) - 1; if (ccIndex < 0) { class = (longAt(rcvr - 4)) & 4294967292U; goto l3; } else { class = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + (ccIndex << 2)); goto l3; } l3: /* end fetchClassOf: */; classFormat = (longAt(((((char *) class)) + 4) + (2 << 2))) - 1; fixedFields = (((((unsigned) classFormat) >> 11) & 192) + ((((unsigned) classFormat) >> 2) & 63)) - 1; l2: /* end fixedFieldsOf:format:length: */; sz = totalLength - fixedFields; } if (successFlag) { /* begin pop: */ stackPointer -= 1 * 4; /* begin pushInteger: */ /* begin push: */ longAtput(sp = stackPointer + 4, ((sz << 1) | 1)); stackPointer = sp; } else { failSpecialPrim(62); } } int primitiveSnapshot(void) { int activeProc; int dataSize; int rcvr; int top; int sp; int sp1; int sp2; int valuePointer; /* begin storeContextRegisters: */ longAtput(((((char *) activeContext)) + 4) + (1 << 2), ((((instructionPointer - method) - (4 - 2)) << 1) | 1)); longAtput(((((char *) activeContext)) + 4) + (2 << 2), (((((((unsigned) ((stackPointer - activeContext) - 4)) >> 2) - 6) + 1) << 1) | 1)); activeProc = longAt(((((char *) (longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (3 << 2))))) + 4) + (1 << 2))))) + 4) + (1 << 2)); /* begin storePointer:ofObject:withValue: */ valuePointer = activeContext; if (activeProc < youngStart) { possibleRootStoreIntovalue(activeProc, valuePointer); } longAtput(((((char *) activeProc)) + 4) + (1 << 2), valuePointer); incrementalGC(); fullGC(); dataSize = freeBlock - (startOfMemory()); if (successFlag) { /* begin popStack */ top = longAt(stackPointer); stackPointer -= 4; rcvr = top; /* begin push: */ longAtput(sp = stackPointer + 4, trueObj); stackPointer = sp; writeImageFile(dataSize); /* begin pop: */ stackPointer -= 1 * 4; } if (successFlag) { /* begin push: */ longAtput(sp1 = stackPointer + 4, falseObj); stackPointer = sp1; } else { /* begin push: */ longAtput(sp2 = stackPointer + 4, rcvr); stackPointer = sp2; } } int primitiveSocketAbortConnection(void) { SocketPtr s; s = socketValueOf(longAt(stackPointer)); if (successFlag) { sqSocketAbortConnection(s); } if (successFlag) { /* begin pop: */ stackPointer -= 1 * 4; } } int primitiveSocketCloseConnection(void) { SocketPtr s; s = socketValueOf(longAt(stackPointer)); if (successFlag) { sqSocketCloseConnection(s); } if (successFlag) { /* begin pop: */ stackPointer -= 1 * 4; } } int primitiveSocketConnectToPort(void) { int addr; int port; SocketPtr s; int integerPointer; /* begin stackIntegerValue: */ integerPointer = longAt(stackPointer - (0 * 4)); if ((integerPointer & 1)) { port = (integerPointer >> 1); goto l1; } else { primitiveFail(); port = 0; goto l1; } l1: /* end stackIntegerValue: */; addr = netAddressToInt(longAt(stackPointer - (1 * 4))); s = socketValueOf(longAt(stackPointer - (2 * 4))); if (successFlag) { sqSocketConnectToPort(s, addr, port); } if (successFlag) { /* begin pop: */ stackPointer -= 3 * 4; } } int primitiveSocketConnectionStatus(void) { int status; SocketPtr s; int sp; s = socketValueOf(longAt(stackPointer)); if (successFlag) { status = sqSocketConnectionStatus(s); } if (successFlag) { /* begin pop:thenPush: */ longAtput(sp = stackPointer - ((2 - 1) * 4), ((status << 1) | 1)); stackPointer = sp; } } int primitiveSocketCreate(void) { int semaIndex; int socketType; int sendBufSize; int socketOop; int netType; SocketPtr s; int recvBufSize; int sp; int integerPointer; int integerPointer1; int integerPointer2; int integerPointer3; int integerPointer4; /* begin stackIntegerValue: */ integerPointer = longAt(stackPointer - (0 * 4)); if ((integerPointer & 1)) { semaIndex = (integerPointer >> 1); goto l1; } else { primitiveFail(); semaIndex = 0; goto l1; } l1: /* end stackIntegerValue: */; /* begin stackIntegerValue: */ integerPointer1 = longAt(stackPointer - (1 * 4)); if ((integerPointer1 & 1)) { sendBufSize = (integerPointer1 >> 1); goto l2; } else { primitiveFail(); sendBufSize = 0; goto l2; } l2: /* end stackIntegerValue: */; /* begin stackIntegerValue: */ integerPointer2 = longAt(stackPointer - (2 * 4)); if ((integerPointer2 & 1)) { recvBufSize = (integerPointer2 >> 1); goto l3; } else { primitiveFail(); recvBufSize = 0; goto l3; } l3: /* end stackIntegerValue: */; /* begin stackIntegerValue: */ integerPointer3 = longAt(stackPointer - (3 * 4)); if ((integerPointer3 & 1)) { socketType = (integerPointer3 >> 1); goto l4; } else { primitiveFail(); socketType = 0; goto l4; } l4: /* end stackIntegerValue: */; /* begin stackIntegerValue: */ integerPointer4 = longAt(stackPointer - (4 * 4)); if ((integerPointer4 & 1)) { netType = (integerPointer4 >> 1); goto l5; } else { primitiveFail(); netType = 0; goto l5; } l5: /* end stackIntegerValue: */; if (successFlag) { socketOop = instantiateClassindexableSize(longAt(((((char *) specialObjectsOop)) + 4) + (26 << 2)), socketRecordSize()); s = socketValueOf(socketOop); sqSocketCreateNetTypeSocketTypeRecvBytesSendBytesSemaID(s, netType, socketType, recvBufSize, sendBufSize, semaIndex); if (successFlag) { /* begin pop:thenPush: */ longAtput(sp = stackPointer - ((6 - 1) * 4), socketOop); stackPointer = sp; } } } int primitiveSocketDestroy(void) { SocketPtr s; s = socketValueOf(longAt(stackPointer)); if (successFlag) { sqSocketDestroy(s); } if (successFlag) { /* begin pop: */ stackPointer -= 1 * 4; } } int primitiveSocketError(void) { int err; SocketPtr s; int sp; s = socketValueOf(longAt(stackPointer)); if (successFlag) { err = sqSocketError(s); } if (successFlag) { /* begin pop:thenPush: */ longAtput(sp = stackPointer - ((2 - 1) * 4), ((err << 1) | 1)); stackPointer = sp; } } int primitiveSocketListenOnPort(void) { int port; SocketPtr s; int integerPointer; /* begin stackIntegerValue: */ integerPointer = longAt(stackPointer - (0 * 4)); if ((integerPointer & 1)) { port = (integerPointer >> 1); goto l1; } else { primitiveFail(); port = 0; goto l1; } l1: /* end stackIntegerValue: */; s = socketValueOf(longAt(stackPointer - (1 * 4))); if (successFlag) { sqSocketListenOnPort(s, port); } if (successFlag) { /* begin pop: */ stackPointer -= 2 * 4; } } int primitiveSocketLocalAddress(void) { int addr; SocketPtr s; int oop; int sp; s = socketValueOf(longAt(stackPointer)); if (successFlag) { addr = sqSocketLocalAddress(s); } if (successFlag) { /* begin pop:thenPush: */ oop = intToNetAddress(addr); longAtput(sp = stackPointer - ((2 - 1) * 4), oop); stackPointer = sp; } } int primitiveSocketLocalPort(void) { int port; SocketPtr s; int sp; s = socketValueOf(longAt(stackPointer)); if (successFlag) { port = sqSocketLocalPort(s); } if (successFlag) { /* begin pop:thenPush: */ longAtput(sp = stackPointer - ((2 - 1) * 4), ((port << 1) | 1)); stackPointer = sp; } } int primitiveSocketReceiveDataAvailable(void) { int dataIsAvailable; SocketPtr s; int sp; int sp1; s = socketValueOf(longAt(stackPointer)); if (successFlag) { dataIsAvailable = sqSocketReceiveDataAvailable(s); } if (successFlag) { /* begin pop: */ stackPointer -= 2 * 4; /* begin pushBool: */ if (dataIsAvailable) { /* begin push: */ longAtput(sp = stackPointer + 4, trueObj); stackPointer = sp; } else { /* begin push: */ longAtput(sp1 = stackPointer + 4, falseObj); stackPointer = sp1; } } } int primitiveSocketReceiveDataBufCount(void) { int array; int startIndex; int arrayBase; int bytesReceived; int bufStart; int byteSize; SocketPtr s; int count; int sp; int integerPointer; int integerPointer1; int successValue; int successValue1; int fmt; /* begin stackIntegerValue: */ integerPointer = longAt(stackPointer - (0 * 4)); if ((integerPointer & 1)) { count = (integerPointer >> 1); goto l1; } else { primitiveFail(); count = 0; goto l1; } l1: /* end stackIntegerValue: */; /* begin stackIntegerValue: */ integerPointer1 = longAt(stackPointer - (1 * 4)); if ((integerPointer1 & 1)) { startIndex = (integerPointer1 >> 1); goto l2; } else { primitiveFail(); startIndex = 0; goto l2; } l2: /* end stackIntegerValue: */; array = longAt(stackPointer - (2 * 4)); s = socketValueOf(longAt(stackPointer - (3 * 4))); /* begin success: */ /* begin isWordsOrBytes: */ fmt = (((unsigned) (longAt(array))) >> 8) & 15; successValue = (fmt == 6) || ((fmt >= 8) && (fmt <= 11)); successFlag = successValue && successFlag; if (((((unsigned) (longAt(array))) >> 8) & 15) == 6) { byteSize = 4; } else { byteSize = 1; } /* begin success: */ successValue1 = (startIndex >= 1) && ((count >= 0) && (((startIndex + count) - 1) <= (lengthOf(array)))); successFlag = successValue1 && successFlag; if (successFlag) { arrayBase = array + 4; bufStart = arrayBase + ((startIndex - 1) * byteSize); bytesReceived = sqSocketReceiveDataBufCount(s, bufStart, count * byteSize); } if (successFlag) { /* begin pop: */ stackPointer -= 5 * 4; /* begin pushInteger: */ /* begin push: */ longAtput(sp = stackPointer + 4, (((bytesReceived / byteSize) << 1) | 1)); stackPointer = sp; } } int primitiveSocketRemoteAddress(void) { int addr; SocketPtr s; int oop; int sp; s = socketValueOf(longAt(stackPointer)); if (successFlag) { addr = sqSocketRemoteAddress(s); } if (successFlag) { /* begin pop:thenPush: */ oop = intToNetAddress(addr); longAtput(sp = stackPointer - ((2 - 1) * 4), oop); stackPointer = sp; } } int primitiveSocketRemotePort(void) { int port; SocketPtr s; int sp; s = socketValueOf(longAt(stackPointer)); if (successFlag) { port = sqSocketRemotePort(s); } if (successFlag) { /* begin pop:thenPush: */ longAtput(sp = stackPointer - ((2 - 1) * 4), ((port << 1) | 1)); stackPointer = sp; } } int primitiveSocketSendDataBufCount(void) { int array; int startIndex; int arrayBase; int bytesSent; int bufStart; int byteSize; SocketPtr s; int count; int sp; int integerPointer; int integerPointer1; int successValue; int successValue1; int fmt; /* begin stackIntegerValue: */ integerPointer = longAt(stackPointer - (0 * 4)); if ((integerPointer & 1)) { count = (integerPointer >> 1); goto l1; } else { primitiveFail(); count = 0; goto l1; } l1: /* end stackIntegerValue: */; /* begin stackIntegerValue: */ integerPointer1 = longAt(stackPointer - (1 * 4)); if ((integerPointer1 & 1)) { startIndex = (integerPointer1 >> 1); goto l2; } else { primitiveFail(); startIndex = 0; goto l2; } l2: /* end stackIntegerValue: */; array = longAt(stackPointer - (2 * 4)); s = socketValueOf(longAt(stackPointer - (3 * 4))); /* begin success: */ /* begin isWordsOrBytes: */ fmt = (((unsigned) (longAt(array))) >> 8) & 15; successValue = (fmt == 6) || ((fmt >= 8) && (fmt <= 11)); successFlag = successValue && successFlag; if (((((unsigned) (longAt(array))) >> 8) & 15) == 6) { byteSize = 4; } else { byteSize = 1; } /* begin success: */ successValue1 = (startIndex >= 1) && ((count >= 0) && (((startIndex + count) - 1) <= (lengthOf(array)))); successFlag = successValue1 && successFlag; if (successFlag) { arrayBase = array + 4; bufStart = arrayBase + ((startIndex - 1) * byteSize); bytesSent = sqSocketSendDataBufCount(s, bufStart, count * byteSize); } if (successFlag) { /* begin pop: */ stackPointer -= 5 * 4; /* begin pushInteger: */ /* begin push: */ longAtput(sp = stackPointer + 4, (((bytesSent / byteSize) << 1) | 1)); stackPointer = sp; } } int primitiveSocketSendDone(void) { int done; SocketPtr s; int sp; int sp1; s = socketValueOf(longAt(stackPointer)); if (successFlag) { done = sqSocketSendDone(s); } if (successFlag) { /* begin pop: */ stackPointer -= 2 * 4; /* begin pushBool: */ if (done) { /* begin push: */ longAtput(sp = stackPointer + 4, trueObj); stackPointer = sp; } else { /* begin push: */ longAtput(sp1 = stackPointer + 4, falseObj); stackPointer = sp1; } } } int primitiveSomeInstance(void) { int instance; int class; int sp; int top; int thisClass; int thisObj; int ccIndex; int obj; int chunk; int extra; int type; int extra1; int sz; int header; int extra2; int type1; int extra11; /* begin popStack */ top = longAt(stackPointer); stackPointer -= 4; class = top; /* begin initialInstanceOf: */ /* begin firstAccessibleObject */ /* begin oopFromChunk: */ chunk = startOfMemory(); /* begin extraHeaderBytes: */ type = (longAt(chunk)) & 3; if (type > 1) { extra1 = 0; } else { if (type == 1) { extra1 = 4; } else { extra1 = 8; } } extra = extra1; obj = chunk + extra; while (obj < endOfMemory) { if (!(((longAt(obj)) & 3) == 2)) { thisObj = obj; goto l4; } /* begin objectAfter: */ if (checkAssertions) { if (obj >= endOfMemory) { error("no objects after the end of memory"); } } if (((longAt(obj)) & 3) == 2) { sz = (longAt(obj)) & 536870908; } else { /* begin sizeBitsOf: */ header = longAt(obj); if ((header & 3) == 0) { sz = (longAt(obj - 8)) & 4294967292U; goto l3; } else { sz = header & 252; goto l3; } l3: /* end sizeBitsOf: */; } /* begin oopFromChunk: */ /* begin extraHeaderBytes: */ type1 = (longAt(obj + sz)) & 3; if (type1 > 1) { extra11 = 0; } else { if (type1 == 1) { extra11 = 4; } else { extra11 = 8; } } extra2 = extra11; obj = (obj + sz) + extra2; } error("heap is empty"); l4: /* end firstAccessibleObject */; while (!(thisObj == null)) { /* begin fetchClassOf: */ if ((thisObj & 1)) { thisClass = longAt(((((char *) specialObjectsOop)) + 4) + (5 << 2)); goto l2; } ccIndex = ((((unsigned) (longAt(thisObj))) >> 12) & 31) - 1; if (ccIndex < 0) { thisClass = (longAt(thisObj - 4)) & 4294967292U; goto l2; } else { thisClass = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + (ccIndex << 2)); goto l2; } l2: /* end fetchClassOf: */; if (thisClass == class) { instance = thisObj; goto l1; } thisObj = accessibleObjectAfter(thisObj); } instance = nilObj; l1: /* end initialInstanceOf: */; if (instance == nilObj) { /* begin unPop: */ stackPointer += 1 * 4; primitiveFail(); } else { /* begin push: */ longAtput(sp = stackPointer + 4, instance); stackPointer = sp; } } int primitiveSomeObject(void) { int object; int sp; int obj; int chunk; int extra; int type; int extra1; int sz; int header; int extra2; int type1; int extra11; /* begin pop: */ stackPointer -= 1 * 4; /* begin push: */ /* begin firstAccessibleObject */ /* begin oopFromChunk: */ chunk = startOfMemory(); /* begin extraHeaderBytes: */ type = (longAt(chunk)) & 3; if (type > 1) { extra1 = 0; } else { if (type == 1) { extra1 = 4; } else { extra1 = 8; } } extra = extra1; obj = chunk + extra; while (obj < endOfMemory) { if (!(((longAt(obj)) & 3) == 2)) { object = obj; goto l2; } /* begin objectAfter: */ if (checkAssertions) { if (obj >= endOfMemory) { error("no objects after the end of memory"); } } if (((longAt(obj)) & 3) == 2) { sz = (longAt(obj)) & 536870908; } else { /* begin sizeBitsOf: */ header = longAt(obj); if ((header & 3) == 0) { sz = (longAt(obj - 8)) & 4294967292U; goto l1; } else { sz = header & 252; goto l1; } l1: /* end sizeBitsOf: */; } /* begin oopFromChunk: */ /* begin extraHeaderBytes: */ type1 = (longAt(obj + sz)) & 3; if (type1 > 1) { extra11 = 0; } else { if (type1 == 1) { extra11 = 4; } else { extra11 = 8; } } extra2 = extra11; obj = (obj + sz) + extra2; } error("heap is empty"); l2: /* end firstAccessibleObject */; longAtput(sp = stackPointer + 4, object); stackPointer = sp; } int primitiveSoundAvailableSpace(void) { int frames; int object; int sp; frames = snd_AvailableSpace(); /* begin success: */ successFlag = (frames >= 0) && successFlag; if (successFlag) { /* begin pop: */ stackPointer -= 1 * 4; /* begin push: */ object = positive32BitIntegerFor(frames); longAtput(sp = stackPointer + 4, object); stackPointer = sp; } } int primitiveSoundGetRecordingSampleRate(void) { double rate; rate = snd_GetRecordingSampleRate(); if (successFlag) { /* begin pop: */ stackPointer -= 1 * 4; pushFloat(rate); } } int primitiveSoundInsertSamples(void) { int buf; int leadTime; int frameCount; int framesPlayed; int object; int sp; int integerPointer; int integerPointer1; int successValue; /* begin stackIntegerValue: */ integerPointer = longAt(stackPointer - (0 * 4)); if ((integerPointer & 1)) { leadTime = (integerPointer >> 1); goto l1; } else { primitiveFail(); leadTime = 0; goto l1; } l1: /* end stackIntegerValue: */; buf = longAt(stackPointer - (1 * 4)); /* begin stackIntegerValue: */ integerPointer1 = longAt(stackPointer - (2 * 4)); if ((integerPointer1 & 1)) { frameCount = (integerPointer1 >> 1); goto l2; } else { primitiveFail(); frameCount = 0; goto l2; } l2: /* end stackIntegerValue: */; /* begin success: */ successFlag = (((((unsigned) (longAt(buf))) >> 8) & 15) == 6) && successFlag; /* begin success: */ successValue = frameCount <= (lengthOf(buf)); successFlag = successValue && successFlag; if (successFlag) { framesPlayed = snd_InsertSamplesFromLeadTime(frameCount, buf + 4, leadTime); /* begin success: */ successFlag = (framesPlayed >= 0) && successFlag; } if (successFlag) { /* begin pop: */ stackPointer -= 4 * 4; /* begin push: */ object = positive32BitIntegerFor(framesPlayed); longAtput(sp = stackPointer + 4, object); stackPointer = sp; } } int primitiveSoundPlaySamples(void) { int startIndex; int buf; int frameCount; int framesPlayed; int object; int sp; int integerPointer; int integerPointer1; int successValue; /* begin stackIntegerValue: */ integerPointer = longAt(stackPointer - (0 * 4)); if ((integerPointer & 1)) { startIndex = (integerPointer >> 1); goto l1; } else { primitiveFail(); startIndex = 0; goto l1; } l1: /* end stackIntegerValue: */; buf = longAt(stackPointer - (1 * 4)); /* begin stackIntegerValue: */ integerPointer1 = longAt(stackPointer - (2 * 4)); if ((integerPointer1 & 1)) { frameCount = (integerPointer1 >> 1); goto l2; } else { primitiveFail(); frameCount = 0; goto l2; } l2: /* end stackIntegerValue: */; /* begin success: */ successFlag = (((((unsigned) (longAt(buf))) >> 8) & 15) == 6) && successFlag; /* begin success: */ successValue = (startIndex >= 1) && (((startIndex + frameCount) - 1) <= (lengthOf(buf))); successFlag = successValue && successFlag; if (successFlag) { framesPlayed = snd_PlaySamplesFromAtLength(frameCount, buf + 4, startIndex - 1); /* begin success: */ successFlag = (framesPlayed >= 0) && successFlag; } if (successFlag) { /* begin pop: */ stackPointer -= 4 * 4; /* begin push: */ object = positive32BitIntegerFor(framesPlayed); longAtput(sp = stackPointer + 4, object); stackPointer = sp; } } int primitiveSoundPlaySilence(void) { int framesPlayed; int object; int sp; framesPlayed = snd_PlaySilence(); /* begin success: */ successFlag = (framesPlayed >= 0) && successFlag; if (successFlag) { /* begin pop: */ stackPointer -= 1 * 4; /* begin push: */ object = positive32BitIntegerFor(framesPlayed); longAtput(sp = stackPointer + 4, object); stackPointer = sp; } } int primitiveSoundRecordSamples(void) { int startWordIndex; int samplesRecorded; int bufSizeInBytes; int buf; int successValue; int sp; int integerPointer; /* begin stackIntegerValue: */ integerPointer = longAt(stackPointer - (0 * 4)); if ((integerPointer & 1)) { startWordIndex = (integerPointer >> 1); goto l1; } else { primitiveFail(); startWordIndex = 0; goto l1; } l1: /* end stackIntegerValue: */; buf = longAt(stackPointer - (1 * 4)); /* begin success: */ successFlag = (((((unsigned) (longAt(buf))) >> 8) & 15) == 6) && successFlag; if (successFlag) { bufSizeInBytes = (lengthOf(buf)) * 4; /* begin success: */ successValue = (startWordIndex >= 1) && (((startWordIndex - 1) * 2) < bufSizeInBytes); successFlag = successValue && successFlag; } if (successFlag) { samplesRecorded = snd_RecordSamplesIntoAtLength(buf + 4, startWordIndex - 1, bufSizeInBytes); } if (successFlag) { /* begin pop: */ stackPointer -= 3 * 4; /* begin push: */ longAtput(sp = stackPointer + 4, ((samplesRecorded << 1) | 1)); stackPointer = sp; } } int primitiveSoundSetRecordLevel(void) { int level; int integerPointer; /* begin stackIntegerValue: */ integerPointer = longAt(stackPointer - (0 * 4)); if ((integerPointer & 1)) { level = (integerPointer >> 1); goto l1; } else { primitiveFail(); level = 0; goto l1; } l1: /* end stackIntegerValue: */; if (successFlag) { snd_SetRecordLevel(level); } if (successFlag) { /* begin pop: */ stackPointer -= 1 * 4; } } int primitiveSoundStart(void) { int stereoFlag; int samplesPerSec; int bufFrames; int integerPointer; int integerPointer1; /* begin booleanValueOf: */ if ((longAt(stackPointer - (0 * 4))) == trueObj) { stereoFlag = true; goto l1; } if ((longAt(stackPointer - (0 * 4))) == falseObj) { stereoFlag = false; goto l1; } successFlag = false; stereoFlag = null; l1: /* end booleanValueOf: */; /* begin stackIntegerValue: */ integerPointer = longAt(stackPointer - (1 * 4)); if ((integerPointer & 1)) { samplesPerSec = (integerPointer >> 1); goto l2; } else { primitiveFail(); samplesPerSec = 0; goto l2; } l2: /* end stackIntegerValue: */; /* begin stackIntegerValue: */ integerPointer1 = longAt(stackPointer - (2 * 4)); if ((integerPointer1 & 1)) { bufFrames = (integerPointer1 >> 1); goto l3; } else { primitiveFail(); bufFrames = 0; goto l3; } l3: /* end stackIntegerValue: */; if (successFlag) { /* begin success: */ successFlag = (snd_Start(bufFrames, samplesPerSec, stereoFlag, 0)) && successFlag; } if (successFlag) { /* begin pop: */ stackPointer -= 3 * 4; } } int primitiveSoundStartRecording(void) { int stereoFlag; int semaIndex; int desiredSamplesPerSec; int integerPointer; int integerPointer1; /* begin stackIntegerValue: */ integerPointer = longAt(stackPointer - (0 * 4)); if ((integerPointer & 1)) { semaIndex = (integerPointer >> 1); goto l1; } else { primitiveFail(); semaIndex = 0; goto l1; } l1: /* end stackIntegerValue: */; /* begin booleanValueOf: */ if ((longAt(stackPointer - (1 * 4))) == trueObj) { stereoFlag = true; goto l2; } if ((longAt(stackPointer - (1 * 4))) == falseObj) { stereoFlag = false; goto l2; } successFlag = false; stereoFlag = null; l2: /* end booleanValueOf: */; /* begin stackIntegerValue: */ integerPointer1 = longAt(stackPointer - (2 * 4)); if ((integerPointer1 & 1)) { desiredSamplesPerSec = (integerPointer1 >> 1); goto l3; } else { primitiveFail(); desiredSamplesPerSec = 0; goto l3; } l3: /* end stackIntegerValue: */; if (successFlag) { snd_StartRecording(desiredSamplesPerSec, stereoFlag, semaIndex); } if (successFlag) { /* begin pop: */ stackPointer -= 3 * 4; } } int primitiveSoundStartWithSemaphore(void) { int stereoFlag; int semaIndex; int samplesPerSec; int bufFrames; int integerPointer; int integerPointer1; int integerPointer2; /* begin stackIntegerValue: */ integerPointer = longAt(stackPointer - (0 * 4)); if ((integerPointer & 1)) { semaIndex = (integerPointer >> 1); goto l1; } else { primitiveFail(); semaIndex = 0; goto l1; } l1: /* end stackIntegerValue: */; /* begin booleanValueOf: */ if ((longAt(stackPointer - (1 * 4))) == trueObj) { stereoFlag = true; goto l2; } if ((longAt(stackPointer - (1 * 4))) == falseObj) { stereoFlag = false; goto l2; } successFlag = false; stereoFlag = null; l2: /* end booleanValueOf: */; /* begin stackIntegerValue: */ integerPointer1 = longAt(stackPointer - (2 * 4)); if ((integerPointer1 & 1)) { samplesPerSec = (integerPointer1 >> 1); goto l3; } else { primitiveFail(); samplesPerSec = 0; goto l3; } l3: /* end stackIntegerValue: */; /* begin stackIntegerValue: */ integerPointer2 = longAt(stackPointer - (3 * 4)); if ((integerPointer2 & 1)) { bufFrames = (integerPointer2 >> 1); goto l4; } else { primitiveFail(); bufFrames = 0; goto l4; } l4: /* end stackIntegerValue: */; if (successFlag) { /* begin success: */ successFlag = (snd_Start(bufFrames, samplesPerSec, stereoFlag, semaIndex)) && successFlag; } if (successFlag) { /* begin pop: */ stackPointer -= 4 * 4; } } int primitiveSoundStop(void) { snd_Stop(); } int primitiveSoundStopRecording(void) { snd_StopRecording(); } int primitiveSpecialObjectsOop(void) { int sp; /* begin pop: */ stackPointer -= 1 * 4; /* begin push: */ longAtput(sp = stackPointer + 4, specialObjectsOop); stackPointer = sp; } int primitiveSquareRoot(void) { double rcvr; rcvr = popFloat(); /* begin success: */ successFlag = (rcvr >= 0.0) && successFlag; if (successFlag) { pushFloat(sqrt(rcvr)); } else { /* begin unPop: */ stackPointer += 1 * 4; } } int primitiveStringAt(void) { int index; int result; int rcvr; int sp; /* begin commonAt: */ index = longAt(stackPointer); rcvr = longAt(stackPointer - (1 * 4)); if (((index & 1)) && (!((rcvr & 1)))) { index = (index >> 1); result = stObjectat(rcvr, index); if (true && (successFlag)) { result = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (24 << 2))))) + 4) + (((result >> 1)) << 2)); } } else { successFlag = false; } if (successFlag) { /* begin pop:thenPush: */ longAtput(sp = stackPointer - ((2 - 1) * 4), result); stackPointer = sp; } else { if (true) { failSpecialPrim(63); } else { failSpecialPrim(60); } } } int primitiveStringAtPut(void) { int value; int valToStore; int index; int rcvr; int sp; /* begin commonAtPut: */ value = valToStore = longAt(stackPointer); index = longAt(stackPointer - (1 * 4)); rcvr = longAt(stackPointer - (2 * 4)); if (((index & 1)) && (!((rcvr & 1)))) { index = (index >> 1); if (true) { valToStore = asciiOfCharacter(value); } stObjectatput(rcvr, index, valToStore); } else { successFlag = false; } if (successFlag) { /* begin pop:thenPush: */ longAtput(sp = stackPointer - ((3 - 1) * 4), value); stackPointer = sp; } else { if (true) { failSpecialPrim(64); } else { failSpecialPrim(61); } } } int primitiveStringReplace(void) { int array; int srcIndex; int start; int stop; int arrayFmt; int arrayInstSize; int i; int hdr; int totalLength; int repl; int replStart; int replFmt; int replInstSize; int integerPointer; int integerPointer1; int integerPointer2; int sz; int classFormat; int class; int sz1; int classFormat1; int class1; int ccIndex; int ccIndex1; array = longAt(stackPointer - (4 * 4)); /* begin stackIntegerValue: */ integerPointer = longAt(stackPointer - (3 * 4)); if ((integerPointer & 1)) { start = (integerPointer >> 1); goto l1; } else { primitiveFail(); start = 0; goto l1; } l1: /* end stackIntegerValue: */; /* begin stackIntegerValue: */ integerPointer1 = longAt(stackPointer - (2 * 4)); if ((integerPointer1 & 1)) { stop = (integerPointer1 >> 1); goto l2; } else { primitiveFail(); stop = 0; goto l2; } l2: /* end stackIntegerValue: */; repl = longAt(stackPointer - (1 * 4)); /* begin stackIntegerValue: */ integerPointer2 = longAt(stackPointer - (0 * 4)); if ((integerPointer2 & 1)) { replStart = (integerPointer2 >> 1); goto l3; } else { primitiveFail(); replStart = 0; goto l3; } l3: /* end stackIntegerValue: */; if (!(successFlag)) { return primitiveFail(); } if ((repl & 1)) { return primitiveFail(); } hdr = longAt(array); arrayFmt = (((unsigned) hdr) >> 8) & 15; /* begin lengthOf:baseHeader:format: */ if ((hdr & 3) == 0) { sz = (longAt(array - 8)) & 4294967292U; } else { sz = hdr & 252; } if (arrayFmt < 8) { totalLength = ((unsigned) (sz - 4)) >> 2; goto l4; } else { totalLength = (sz - 4) - (arrayFmt & 3); goto l4; } l4: /* end lengthOf:baseHeader:format: */; /* begin fixedFieldsOf:format:length: */ if ((arrayFmt > 3) || (arrayFmt == 2)) { arrayInstSize = 0; goto l5; } if (arrayFmt < 2) { arrayInstSize = totalLength; goto l5; } /* begin fetchClassOf: */ if ((array & 1)) { class = longAt(((((char *) specialObjectsOop)) + 4) + (5 << 2)); goto l8; } ccIndex = ((((unsigned) (longAt(array))) >> 12) & 31) - 1; if (ccIndex < 0) { class = (longAt(array - 4)) & 4294967292U; goto l8; } else { class = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + (ccIndex << 2)); goto l8; } l8: /* end fetchClassOf: */; classFormat = (longAt(((((char *) class)) + 4) + (2 << 2))) - 1; arrayInstSize = (((((unsigned) classFormat) >> 11) & 192) + ((((unsigned) classFormat) >> 2) & 63)) - 1; l5: /* end fixedFieldsOf:format:length: */; if (!((start >= 1) && ((start <= stop) && ((stop + arrayInstSize) <= totalLength)))) { return primitiveFail(); } hdr = longAt(repl); replFmt = (((unsigned) hdr) >> 8) & 15; /* begin lengthOf:baseHeader:format: */ if ((hdr & 3) == 0) { sz1 = (longAt(repl - 8)) & 4294967292U; } else { sz1 = hdr & 252; } if (replFmt < 8) { totalLength = ((unsigned) (sz1 - 4)) >> 2; goto l6; } else { totalLength = (sz1 - 4) - (replFmt & 3); goto l6; } l6: /* end lengthOf:baseHeader:format: */; /* begin fixedFieldsOf:format:length: */ if ((replFmt > 3) || (replFmt == 2)) { replInstSize = 0; goto l7; } if (replFmt < 2) { replInstSize = totalLength; goto l7; } /* begin fetchClassOf: */ if ((repl & 1)) { class1 = longAt(((((char *) specialObjectsOop)) + 4) + (5 << 2)); goto l9; } ccIndex1 = ((((unsigned) (longAt(repl))) >> 12) & 31) - 1; if (ccIndex1 < 0) { class1 = (longAt(repl - 4)) & 4294967292U; goto l9; } else { class1 = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + (ccIndex1 << 2)); goto l9; } l9: /* end fetchClassOf: */; classFormat1 = (longAt(((((char *) class1)) + 4) + (2 << 2))) - 1; replInstSize = (((((unsigned) classFormat1) >> 11) & 192) + ((((unsigned) classFormat1) >> 2) & 63)) - 1; l7: /* end fixedFieldsOf:format:length: */; if (!((replStart >= 1) && ((((stop - start) + replStart) + replInstSize) <= totalLength))) { return primitiveFail(); } if (arrayFmt < 8) { if (!(arrayFmt == replFmt)) { return primitiveFail(); } } else { if (!((arrayFmt & 12) == (replFmt & 12))) { return primitiveFail(); } } srcIndex = (replStart + replInstSize) - 1; for (i = ((start + arrayInstSize) - 1); i <= ((stop + arrayInstSize) - 1); i += 1) { if (arrayFmt < 4) { /* begin storePointer:ofObject:withValue: */ if (array < youngStart) { possibleRootStoreIntovalue(array, longAt(((((char *) repl)) + 4) + (srcIndex << 2))); } longAtput(((((char *) array)) + 4) + (i << 2), longAt(((((char *) repl)) + 4) + (srcIndex << 2))); } else { if (arrayFmt < 8) { longAtput(((((char *) array)) + 4) + (i << 2), longAt(((((char *) repl)) + 4) + (srcIndex << 2))); } else { byteAtput(((((char *) array)) + 4) + i, byteAt(((((char *) repl)) + 4) + srcIndex)); } } srcIndex += 1; } /* begin pop: */ stackPointer -= 4 * 4; } int primitiveSubtract(void) { int integerReceiver; int integerArgument; int integerPointer; int top; int integerPointer1; int top1; int sp; successFlag = true; /* begin popInteger */ /* begin popStack */ top = longAt(stackPointer); stackPointer -= 4; integerPointer = top; if ((integerPointer & 1)) { integerArgument = (integerPointer >> 1); goto l1; } else { successFlag = false; integerArgument = 1; goto l1; } l1: /* end popInteger */; /* begin popInteger */ /* begin popStack */ top1 = longAt(stackPointer); stackPointer -= 4; integerPointer1 = top1; if ((integerPointer1 & 1)) { integerReceiver = (integerPointer1 >> 1); goto l2; } else { successFlag = false; integerReceiver = 1; goto l2; } l2: /* end popInteger */; /* begin checkIntegerResult:from: */ if (successFlag && (((integerReceiver - integerArgument) ^ ((integerReceiver - integerArgument) << 1)) >= 0)) { /* begin pushInteger: */ /* begin push: */ longAtput(sp = stackPointer + 4, (((integerReceiver - integerArgument) << 1) | 1)); stackPointer = sp; } else { /* begin unPop: */ stackPointer += 2 * 4; failSpecialPrim(2); } } int primitiveSuspend(void) { int activeProc; int sp; int newProc; int sched; int oldProc; int valuePointer; int tmp; activeProc = longAt(((((char *) (longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (3 << 2))))) + 4) + (1 << 2))))) + 4) + (1 << 2)); /* begin success: */ successFlag = ((longAt(stackPointer)) == activeProc) && successFlag; if (successFlag) { /* begin pop: */ stackPointer -= 1 * 4; /* begin push: */ longAtput(sp = stackPointer + 4, nilObj); stackPointer = sp; /* begin transferTo: */ newProc = wakeHighestPriority(); sched = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (3 << 2))))) + 4) + (1 << 2)); oldProc = longAt(((((char *) sched)) + 4) + (1 << 2)); /* begin storePointer:ofObject:withValue: */ valuePointer = activeContext; if (oldProc < youngStart) { possibleRootStoreIntovalue(oldProc, valuePointer); } longAtput(((((char *) oldProc)) + 4) + (1 << 2), valuePointer); /* begin storePointer:ofObject:withValue: */ if (sched < youngStart) { possibleRootStoreIntovalue(sched, newProc); } longAtput(((((char *) sched)) + 4) + (1 << 2), newProc); /* begin newActiveContext: */ /* begin storeContextRegisters: */ longAtput(((((char *) activeContext)) + 4) + (1 << 2), ((((instructionPointer - method) - (4 - 2)) << 1) | 1)); longAtput(((((char *) activeContext)) + 4) + (2 << 2), (((((((unsigned) ((stackPointer - activeContext) - 4)) >> 2) - 6) + 1) << 1) | 1)); if ((longAt(((((char *) newProc)) + 4) + (1 << 2))) < youngStart) { beRootIfOld(longAt(((((char *) newProc)) + 4) + (1 << 2))); } activeContext = longAt(((((char *) newProc)) + 4) + (1 << 2)); /* begin fetchContextRegisters: */ tmp = longAt(((((char *) (longAt(((((char *) newProc)) + 4) + (1 << 2))))) + 4) + (3 << 2)); if ((tmp & 1)) { tmp = longAt(((((char *) (longAt(((((char *) newProc)) + 4) + (1 << 2))))) + 4) + (5 << 2)); if (tmp < youngStart) { beRootIfOld(tmp); } } else { tmp = longAt(((((char *) newProc)) + 4) + (1 << 2)); } theHomeContext = tmp; receiver = longAt(((((char *) tmp)) + 4) + (5 << 2)); method = longAt(((((char *) tmp)) + 4) + (3 << 2)); tmp = ((longAt(((((char *) (longAt(((((char *) newProc)) + 4) + (1 << 2))))) + 4) + (1 << 2))) >> 1); instructionPointer = ((method + tmp) + 4) - 2; tmp = ((longAt(((((char *) (longAt(((((char *) newProc)) + 4) + (1 << 2))))) + 4) + (2 << 2))) >> 1); stackPointer = ((longAt(((((char *) newProc)) + 4) + (1 << 2))) + 4) + (((6 + tmp) - 1) * 4); reclaimableContextCount = 0; } } int primitiveTimesTwoPower(void) { int arg; double rcvr; int integerPointer; int top; /* begin popInteger */ /* begin popStack */ top = longAt(stackPointer); stackPointer -= 4; integerPointer = top; if ((integerPointer & 1)) { arg = (integerPointer >> 1); goto l1; } else { successFlag = false; arg = 1; goto l1; } l1: /* end popInteger */; rcvr = popFloat(); if (successFlag) { pushFloat(ldexp(rcvr, arg)); } else { /* begin unPop: */ stackPointer += 2 * 4; } } int primitiveTruncated(void) { double trunc; double frac; double rcvr; rcvr = popFloat(); if (successFlag) { frac = modf(rcvr, &trunc); success((-1073741824.0 <= trunc) && (trunc <= 1073741823.0)); } if (successFlag) { pushInteger((int) trunc); } else { /* begin unPop: */ stackPointer += 1 * 4; } } int primitiveVMParameter(void) { int mem; int arg; int paramsArraySize; int i; int index; int result; int sp; int sp1; int sp2; mem = ((int) memory); if (argumentCount == 0) { paramsArraySize = 22; result = instantiateClassindexableSize(longAt(((((char *) specialObjectsOop)) + 4) + (7 << 2)), paramsArraySize); for (i = 0; i <= (paramsArraySize - 1); i += 1) { longAtput(((((char *) result)) + 4) + (i << 2), ((0 << 1) | 1)); } longAtput(((((char *) result)) + 4) + (0 << 2), (((youngStart - mem) << 1) | 1)); longAtput(((((char *) result)) + 4) + (1 << 2), (((freeBlock - mem) << 1) | 1)); longAtput(((((char *) result)) + 4) + (2 << 2), (((endOfMemory - mem) << 1) | 1)); longAtput(((((char *) result)) + 4) + (3 << 2), ((allocationCount << 1) | 1)); longAtput(((((char *) result)) + 4) + (4 << 2), ((allocationsBetweenGCs << 1) | 1)); longAtput(((((char *) result)) + 4) + (5 << 2), ((tenuringThreshold << 1) | 1)); longAtput(((((char *) result)) + 4) + (6 << 2), ((statFullGCs << 1) | 1)); longAtput(((((char *) result)) + 4) + (7 << 2), ((statFullGCMSecs << 1) | 1)); longAtput(((((char *) result)) + 4) + (8 << 2), ((statIncrGCs << 1) | 1)); longAtput(((((char *) result)) + 4) + (9 << 2), ((statIncrGCMSecs << 1) | 1)); longAtput(((((char *) result)) + 4) + (10 << 2), ((statTenures << 1) | 1)); longAtput(((((char *) result)) + 4) + (20 << 2), ((rootTableCount << 1) | 1)); longAtput(((((char *) result)) + 4) + (21 << 2), ((statRootTableOverflows << 1) | 1)); /* begin pop:thenPush: */ longAtput(sp = stackPointer - ((1 - 1) * 4), result); stackPointer = sp; return null; } arg = longAt(stackPointer); if (!((arg & 1))) { return primitiveFail(); } arg = (arg >> 1); if (argumentCount == 1) { if ((arg < 1) || (arg > 22)) { return primitiveFail(); } if (arg == 1) { result = youngStart - mem; } if (arg == 2) { result = freeBlock - mem; } if (arg == 3) { result = endOfMemory - mem; } if (arg == 4) { result = allocationCount; } if (arg == 5) { result = allocationsBetweenGCs; } if (arg == 6) { result = tenuringThreshold; } if (arg == 7) { result = statFullGCs; } if (arg == 8) { result = statFullGCMSecs; } if (arg == 9) { result = statIncrGCs; } if (arg == 10) { result = statIncrGCMSecs; } if (arg == 11) { result = statTenures; } if ((arg >= 12) && (arg <= 20)) { result = 0; } if (arg == 21) { result = rootTableCount; } if (arg == 22) { result = statRootTableOverflows; } /* begin pop:thenPush: */ longAtput(sp1 = stackPointer - ((2 - 1) * 4), ((result << 1) | 1)); stackPointer = sp1; return null; } if (!(argumentCount == 2)) { return primitiveFail(); } index = longAt(stackPointer - (1 * 4)); if (!((index & 1))) { return primitiveFail(); } index = (index >> 1); if (index <= 0) { return primitiveFail(); } successFlag = false; if (index == 5) { result = allocationsBetweenGCs; allocationsBetweenGCs = arg; successFlag = true; } if (index == 6) { result = tenuringThreshold; tenuringThreshold = arg; successFlag = true; } if (successFlag) { /* begin pop:thenPush: */ longAtput(sp2 = stackPointer - ((3 - 1) * 4), ((result << 1) | 1)); stackPointer = sp2; return null; } primitiveFail(); } int primitiveVMPath(void) { int sz; int s; int sp; sz = vmPathSize(); s = instantiateClassindexableSize(longAt(((((char *) specialObjectsOop)) + 4) + (6 << 2)), sz); vmPathGetLength(s + 4, sz); /* begin pop: */ stackPointer -= 1 * 4; /* begin push: */ longAtput(sp = stackPointer + 4, s); stackPointer = sp; } int primitiveValue(void) { int blockArgumentCount; int initialIP; int blockContext; int toIndex; int fromIndex; int lastFrom; int successValue; int tmp; int argCount; blockContext = longAt(stackPointer - (argumentCount * 4)); /* begin argumentCountOfBlock: */ argCount = longAt(((((char *) blockContext)) + 4) + (3 << 2)); if ((argCount & 1)) { blockArgumentCount = (argCount >> 1); goto l1; } else { primitiveFail(); blockArgumentCount = 0; goto l1; } l1: /* end argumentCountOfBlock: */; /* begin success: */ successValue = (argumentCount == blockArgumentCount) && ((longAt(((((char *) blockContext)) + 4) + (0 << 2))) == nilObj); successFlag = successValue && successFlag; if (successFlag) { /* begin transfer:fromIndex:ofObject:toIndex:ofObject: */ fromIndex = activeContext + ((((((unsigned) ((stackPointer - activeContext) - 4)) >> 2) - argumentCount) + 1) * 4); toIndex = blockContext + (6 * 4); lastFrom = fromIndex + (argumentCount * 4); while (fromIndex < lastFrom) { fromIndex += 4; toIndex += 4; longAtput(toIndex, longAt(fromIndex)); } /* begin pop: */ stackPointer -= (argumentCount + 1) * 4; initialIP = longAt(((((char *) blockContext)) + 4) + (4 << 2)); longAtput(((((char *) blockContext)) + 4) + (1 << 2), initialIP); /* begin storeStackPointerValue:inContext: */ longAtput(((((char *) blockContext)) + 4) + (2 << 2), ((argumentCount << 1) | 1)); longAtput(((((char *) blockContext)) + 4) + (0 << 2), activeContext); /* begin newActiveContext: */ /* begin storeContextRegisters: */ longAtput(((((char *) activeContext)) + 4) + (1 << 2), ((((instructionPointer - method) - (4 - 2)) << 1) | 1)); longAtput(((((char *) activeContext)) + 4) + (2 << 2), (((((((unsigned) ((stackPointer - activeContext) - 4)) >> 2) - 6) + 1) << 1) | 1)); if (blockContext < youngStart) { beRootIfOld(blockContext); } activeContext = blockContext; /* begin fetchContextRegisters: */ tmp = longAt(((((char *) blockContext)) + 4) + (3 << 2)); if ((tmp & 1)) { tmp = longAt(((((char *) blockContext)) + 4) + (5 << 2)); if (tmp < youngStart) { beRootIfOld(tmp); } } else { tmp = blockContext; } theHomeContext = tmp; receiver = longAt(((((char *) tmp)) + 4) + (5 << 2)); method = longAt(((((char *) tmp)) + 4) + (3 << 2)); tmp = ((longAt(((((char *) blockContext)) + 4) + (1 << 2))) >> 1); instructionPointer = ((method + tmp) + 4) - 2; tmp = ((longAt(((((char *) blockContext)) + 4) + (2 << 2))) >> 1); stackPointer = (blockContext + 4) + (((6 + tmp) - 1) * 4); } } int primitiveValueWithArgs(void) { int argumentArray; int arrayArgumentCount; int blockArgumentCount; int initialIP; int blockContext; int sz; int successValue; int toIndex; int fromIndex; int lastFrom; int top; int top1; int header; int tmp; int argCount; int ccIndex; int cl; /* begin popStack */ top = longAt(stackPointer); stackPointer -= 4; argumentArray = top; /* begin popStack */ top1 = longAt(stackPointer); stackPointer -= 4; blockContext = top1; /* begin argumentCountOfBlock: */ argCount = longAt(((((char *) blockContext)) + 4) + (3 << 2)); if ((argCount & 1)) { blockArgumentCount = (argCount >> 1); goto l2; } else { primitiveFail(); blockArgumentCount = 0; goto l2; } l2: /* end argumentCountOfBlock: */; /* begin assertClassOf:is: */ if ((argumentArray & 1)) { successFlag = false; goto l3; } ccIndex = (((unsigned) (longAt(argumentArray))) >> 12) & 31; if (ccIndex == 0) { cl = (longAt(argumentArray - 4)) & 4294967292U; } else { cl = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + ((ccIndex - 1) << 2)); } /* begin success: */ successFlag = (cl == (longAt(((((char *) specialObjectsOop)) + 4) + (7 << 2)))) && successFlag; l3: /* end assertClassOf:is: */; if (successFlag) { /* begin fetchWordLengthOf: */ /* begin sizeBitsOf: */ header = longAt(argumentArray); if ((header & 3) == 0) { sz = (longAt(argumentArray - 8)) & 4294967292U; goto l1; } else { sz = header & 252; goto l1; } l1: /* end sizeBitsOf: */; arrayArgumentCount = ((unsigned) (sz - 4)) >> 2; /* begin success: */ successValue = (arrayArgumentCount == blockArgumentCount) && ((longAt(((((char *) blockContext)) + 4) + (0 << 2))) == nilObj); successFlag = successValue && successFlag; } if (successFlag) { /* begin transfer:fromIndex:ofObject:toIndex:ofObject: */ fromIndex = argumentArray + (0 * 4); toIndex = blockContext + (6 * 4); lastFrom = fromIndex + (arrayArgumentCount * 4); while (fromIndex < lastFrom) { fromIndex += 4; toIndex += 4; longAtput(toIndex, longAt(fromIndex)); } initialIP = longAt(((((char *) blockContext)) + 4) + (4 << 2)); longAtput(((((char *) blockContext)) + 4) + (1 << 2), initialIP); /* begin storeStackPointerValue:inContext: */ longAtput(((((char *) blockContext)) + 4) + (2 << 2), ((arrayArgumentCount << 1) | 1)); longAtput(((((char *) blockContext)) + 4) + (0 << 2), activeContext); /* begin newActiveContext: */ /* begin storeContextRegisters: */ longAtput(((((char *) activeContext)) + 4) + (1 << 2), ((((instructionPointer - method) - (4 - 2)) << 1) | 1)); longAtput(((((char *) activeContext)) + 4) + (2 << 2), (((((((unsigned) ((stackPointer - activeContext) - 4)) >> 2) - 6) + 1) << 1) | 1)); if (blockContext < youngStart) { beRootIfOld(blockContext); } activeContext = blockContext; /* begin fetchContextRegisters: */ tmp = longAt(((((char *) blockContext)) + 4) + (3 << 2)); if ((tmp & 1)) { tmp = longAt(((((char *) blockContext)) + 4) + (5 << 2)); if (tmp < youngStart) { beRootIfOld(tmp); } } else { tmp = blockContext; } theHomeContext = tmp; receiver = longAt(((((char *) tmp)) + 4) + (5 << 2)); method = longAt(((((char *) tmp)) + 4) + (3 << 2)); tmp = ((longAt(((((char *) blockContext)) + 4) + (1 << 2))) >> 1); instructionPointer = ((method + tmp) + 4) - 2; tmp = ((longAt(((((char *) blockContext)) + 4) + (2 << 2))) >> 1); stackPointer = (blockContext + 4) + (((6 + tmp) - 1) * 4); } else { /* begin unPop: */ stackPointer += 2 * 4; } } int primitiveWait(void) { int sema; int activeProc; int excessSignals; int lastLink; int newProc; int sched; int oldProc; int valuePointer; int tmp; int ccIndex; int cl; sema = longAt(stackPointer); /* begin assertClassOf:is: */ if ((sema & 1)) { successFlag = false; goto l1; } ccIndex = (((unsigned) (longAt(sema))) >> 12) & 31; if (ccIndex == 0) { cl = (longAt(sema - 4)) & 4294967292U; } else { cl = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + ((ccIndex - 1) << 2)); } /* begin success: */ successFlag = (cl == (longAt(((((char *) specialObjectsOop)) + 4) + (18 << 2)))) && successFlag; l1: /* end assertClassOf:is: */; if (successFlag) { excessSignals = fetchIntegerofObject(2, sema); if (excessSignals > 0) { /* begin storeInteger:ofObject:withValue: */ if (((excessSignals - 1) ^ ((excessSignals - 1) << 1)) >= 0) { longAtput(((((char *) sema)) + 4) + (2 << 2), (((excessSignals - 1) << 1) | 1)); } else { primitiveFail(); } } else { activeProc = longAt(((((char *) (longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (3 << 2))))) + 4) + (1 << 2))))) + 4) + (1 << 2)); /* begin addLastLink:toList: */ if ((longAt(((((char *) sema)) + 4) + (0 << 2))) == nilObj) { /* begin storePointer:ofObject:withValue: */ if (sema < youngStart) { possibleRootStoreIntovalue(sema, activeProc); } longAtput(((((char *) sema)) + 4) + (0 << 2), activeProc); } else { lastLink = longAt(((((char *) sema)) + 4) + (1 << 2)); /* begin storePointer:ofObject:withValue: */ if (lastLink < youngStart) { possibleRootStoreIntovalue(lastLink, activeProc); } longAtput(((((char *) lastLink)) + 4) + (0 << 2), activeProc); } /* begin storePointer:ofObject:withValue: */ if (sema < youngStart) { possibleRootStoreIntovalue(sema, activeProc); } longAtput(((((char *) sema)) + 4) + (1 << 2), activeProc); /* begin storePointer:ofObject:withValue: */ if (activeProc < youngStart) { possibleRootStoreIntovalue(activeProc, sema); } longAtput(((((char *) activeProc)) + 4) + (3 << 2), sema); /* begin transferTo: */ newProc = wakeHighestPriority(); sched = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (3 << 2))))) + 4) + (1 << 2)); oldProc = longAt(((((char *) sched)) + 4) + (1 << 2)); /* begin storePointer:ofObject:withValue: */ valuePointer = activeContext; if (oldProc < youngStart) { possibleRootStoreIntovalue(oldProc, valuePointer); } longAtput(((((char *) oldProc)) + 4) + (1 << 2), valuePointer); /* begin storePointer:ofObject:withValue: */ if (sched < youngStart) { possibleRootStoreIntovalue(sched, newProc); } longAtput(((((char *) sched)) + 4) + (1 << 2), newProc); /* begin newActiveContext: */ /* begin storeContextRegisters: */ longAtput(((((char *) activeContext)) + 4) + (1 << 2), ((((instructionPointer - method) - (4 - 2)) << 1) | 1)); longAtput(((((char *) activeContext)) + 4) + (2 << 2), (((((((unsigned) ((stackPointer - activeContext) - 4)) >> 2) - 6) + 1) << 1) | 1)); if ((longAt(((((char *) newProc)) + 4) + (1 << 2))) < youngStart) { beRootIfOld(longAt(((((char *) newProc)) + 4) + (1 << 2))); } activeContext = longAt(((((char *) newProc)) + 4) + (1 << 2)); /* begin fetchContextRegisters: */ tmp = longAt(((((char *) (longAt(((((char *) newProc)) + 4) + (1 << 2))))) + 4) + (3 << 2)); if ((tmp & 1)) { tmp = longAt(((((char *) (longAt(((((char *) newProc)) + 4) + (1 << 2))))) + 4) + (5 << 2)); if (tmp < youngStart) { beRootIfOld(tmp); } } else { tmp = longAt(((((char *) newProc)) + 4) + (1 << 2)); } theHomeContext = tmp; receiver = longAt(((((char *) tmp)) + 4) + (5 << 2)); method = longAt(((((char *) tmp)) + 4) + (3 << 2)); tmp = ((longAt(((((char *) (longAt(((((char *) newProc)) + 4) + (1 << 2))))) + 4) + (1 << 2))) >> 1); instructionPointer = ((method + tmp) + 4) - 2; tmp = ((longAt(((((char *) (longAt(((((char *) newProc)) + 4) + (1 << 2))))) + 4) + (2 << 2))) >> 1); stackPointer = ((longAt(((((char *) newProc)) + 4) + (1 << 2))) + 4) + (((6 + tmp) - 1) * 4); reclaimableContextCount = 0; } } } int primitiveWarpBits(void) { int rcvr; int ns; int successValue; int skewWord; int mergeWord; int destMask; int startBits; int yDelta; int smoothingCount; int sourceMapOop; int t; int i; int nSteps; int word; int halftoneWord; int deltaP12x; int deltaP12y; int deltaP43x; int deltaP43y; int pAx; int pAy; int pBx; int xDelta; int pBy; int integerPointer; rcvr = longAt(stackPointer - (argumentCount * 4)); /* begin success: */ successValue = loadBitBltFrom(rcvr); successFlag = successValue && successFlag; if (successFlag) { /* begin warpBits */ ns = noSource; noSource = true; clipRange(); noSource = ns; if (noSource || ((bbW <= 0) || (bbH <= 0))) { affectedL = affectedR = affectedT = affectedB = 0; goto l1; } destMaskAndPointerInit(); /* begin warpLoop */ if (!((fetchWordLengthOf(bitBltOop)) >= (15 + 12))) { primitiveFail(); goto l3; } nSteps = height - 1; if (nSteps <= 0) { nSteps = 1; } pAx = fetchIntegerOrTruncFloatofObject(15, bitBltOop); t = fetchIntegerOrTruncFloatofObject(15 + 3, bitBltOop); deltaP12x = deltaFromtonSteps(pAx, t, nSteps); if (deltaP12x < 0) { pAx = t - (nSteps * deltaP12x); } pAy = fetchIntegerOrTruncFloatofObject(15 + 1, bitBltOop); t = fetchIntegerOrTruncFloatofObject(15 + 4, bitBltOop); deltaP12y = deltaFromtonSteps(pAy, t, nSteps); if (deltaP12y < 0) { pAy = t - (nSteps * deltaP12y); } pBx = fetchIntegerOrTruncFloatofObject(15 + 9, bitBltOop); t = fetchIntegerOrTruncFloatofObject(15 + 6, bitBltOop); deltaP43x = deltaFromtonSteps(pBx, t, nSteps); if (deltaP43x < 0) { pBx = t - (nSteps * deltaP43x); } pBy = fetchIntegerOrTruncFloatofObject(15 + 10, bitBltOop); t = fetchIntegerOrTruncFloatofObject(15 + 7, bitBltOop); deltaP43y = deltaFromtonSteps(pBy, t, nSteps); if (deltaP43y < 0) { pBy = t - (nSteps * deltaP43y); } if (!successFlag) { goto l3; } if (argumentCount == 2) { /* begin stackIntegerValue: */ integerPointer = longAt(stackPointer - (1 * 4)); if ((integerPointer & 1)) { smoothingCount = (integerPointer >> 1); goto l2; } else { primitiveFail(); smoothingCount = 0; goto l2; } l2: /* end stackIntegerValue: */; sourceMapOop = longAt(stackPointer - (0 * 4)); if (sourceMapOop == nilObj) { if (sourcePixSize < 16) { primitiveFail(); goto l3; } } else { if ((fetchWordLengthOf(sourceMapOop)) < (1 << sourcePixSize)) { primitiveFail(); goto l3; } } } else { smoothingCount = 1; sourceMapOop = nilObj; } startBits = pixPerWord - (dx & (pixPerWord - 1)); nSteps = width - 1; if (nSteps <= 0) { nSteps = 1; } for (i = destY; i <= (clipY - 1); i += 1) { pAx += deltaP12x; pAy += deltaP12y; pBx += deltaP43x; pBy += deltaP43y; } for (i = 1; i <= bbH; i += 1) { xDelta = deltaFromtonSteps(pAx, pBx, nSteps); if (xDelta >= 0) { sx = pAx; } else { sx = pBx - (nSteps * xDelta); } yDelta = deltaFromtonSteps(pAy, pBy, nSteps); if (yDelta >= 0) { sy = pAy; } else { sy = pBy - (nSteps * yDelta); } for (word = destX; word <= (clipX - 1); word += 1) { sx += xDelta; sy += yDelta; } if (noHalftone) { halftoneWord = 4294967295U; } else { halftoneWord = longAt(halftoneBase + ((((dy + i) - 1) % halftoneHeight) * 4)); } destMask = mask1; if (bbW < startBits) { skewWord = warpSourcePixelsxDeltahyDeltahxDeltavyDeltavsmoothingsourceMap(bbW, xDelta, yDelta, deltaP12x, deltaP12y, smoothingCount, sourceMapOop); skewWord = ((((startBits - bbW) * destPixSize) < 0) ? ((unsigned) skewWord >> -((startBits - bbW) * destPixSize)) : ((unsigned) skewWord << ((startBits - bbW) * destPixSize))); } else { skewWord = warpSourcePixelsxDeltahyDeltahxDeltavyDeltavsmoothingsourceMap(startBits, xDelta, yDelta, deltaP12x, deltaP12y, smoothingCount, sourceMapOop); } for (word = 1; word <= nWords; word += 1) { mergeWord = mergewith(skewWord & halftoneWord, (longAt(destIndex)) & destMask); longAtput(destIndex, (destMask & mergeWord) | ((~destMask) & (longAt(destIndex)))); destIndex += 4; if (word >= (nWords - 1)) { if (!(word == nWords)) { destMask = mask2; skewWord = warpSourcePixelsxDeltahyDeltahxDeltavyDeltavsmoothingsourceMap(pixPerWord, xDelta, yDelta, deltaP12x, deltaP12y, smoothingCount, sourceMapOop); } } else { destMask = 4294967295U; skewWord = warpSourcePixelsxDeltahyDeltahxDeltavyDeltavsmoothingsourceMap(pixPerWord, xDelta, yDelta, deltaP12x, deltaP12y, smoothingCount, sourceMapOop); } } pAx += deltaP12x; pAy += deltaP12y; pBx += deltaP43x; pBy += deltaP43y; destIndex += destDelta; } l3: /* end warpLoop */; if (hDir > 0) { affectedL = dx; affectedR = dx + bbW; } else { affectedL = (dx - bbW) + 1; affectedR = dx + 1; } if (vDir > 0) { affectedT = dy; affectedB = dy + bbH; } else { affectedT = (dy - bbH) + 1; affectedB = dy + 1; } l1: /* end warpBits */; showDisplayBits(); } } int print(char *s) { printf("%s", s); } int printCallStack(void) { int methodSel; int methodClass; int home; int ctxt; int methodArray; int done; int i; int classDict; int currClass; int classDictSize; int sz; int header; int ccIndex; int methodArray1; int done1; int i1; int classDict1; int currClass1; int classDictSize1; int sz1; int header1; int ccIndex2; int ccIndex1; ctxt = activeContext; while (!(ctxt == nilObj)) { if ((fetchClassOf(ctxt)) == (longAt(((((char *) specialObjectsOop)) + 4) + (11 << 2)))) { home = longAt(((((char *) ctxt)) + 4) + (5 << 2)); } else { home = ctxt; } /* begin findClassOfMethod:forReceiver: */ /* begin fetchClassOf: */ if (((longAt(((((char *) home)) + 4) + (5 << 2))) & 1)) { currClass1 = longAt(((((char *) specialObjectsOop)) + 4) + (5 << 2)); goto l5; } ccIndex2 = ((((unsigned) (longAt(longAt(((((char *) home)) + 4) + (5 << 2))))) >> 12) & 31) - 1; if (ccIndex2 < 0) { currClass1 = (longAt((longAt(((((char *) home)) + 4) + (5 << 2))) - 4)) & 4294967292U; goto l5; } else { currClass1 = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + (ccIndex2 << 2)); goto l5; } l5: /* end fetchClassOf: */; done1 = false; while (!(done1)) { classDict1 = longAt(((((char *) currClass1)) + 4) + (1 << 2)); /* begin fetchWordLengthOf: */ /* begin sizeBitsOf: */ header1 = longAt(classDict1); if ((header1 & 3) == 0) { sz1 = (longAt(classDict1 - 8)) & 4294967292U; goto l4; } else { sz1 = header1 & 252; goto l4; } l4: /* end sizeBitsOf: */; classDictSize1 = ((unsigned) (sz1 - 4)) >> 2; methodArray1 = longAt(((((char *) classDict1)) + 4) + (1 << 2)); i1 = 0; while (i1 < (classDictSize1 - 2)) { if ((longAt(((((char *) home)) + 4) + (3 << 2))) == (longAt(((((char *) methodArray1)) + 4) + (i1 << 2)))) { methodClass = currClass1; goto l6; } i1 += 1; } currClass1 = longAt(((((char *) currClass1)) + 4) + (0 << 2)); done1 = currClass1 == nilObj; } /* begin fetchClassOf: */ if (((longAt(((((char *) home)) + 4) + (5 << 2))) & 1)) { methodClass = longAt(((((char *) specialObjectsOop)) + 4) + (5 << 2)); goto l6; } ccIndex1 = ((((unsigned) (longAt(longAt(((((char *) home)) + 4) + (5 << 2))))) >> 12) & 31) - 1; if (ccIndex1 < 0) { methodClass = (longAt((longAt(((((char *) home)) + 4) + (5 << 2))) - 4)) & 4294967292U; goto l6; } else { methodClass = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + (ccIndex1 << 2)); goto l6; } methodClass = null; l6: /* end findClassOfMethod:forReceiver: */; /* begin findSelectorOfMethod:forReceiver: */ /* begin fetchClassOf: */ if (((longAt(((((char *) home)) + 4) + (5 << 2))) & 1)) { currClass = longAt(((((char *) specialObjectsOop)) + 4) + (5 << 2)); goto l2; } ccIndex = ((((unsigned) (longAt(longAt(((((char *) home)) + 4) + (5 << 2))))) >> 12) & 31) - 1; if (ccIndex < 0) { currClass = (longAt((longAt(((((char *) home)) + 4) + (5 << 2))) - 4)) & 4294967292U; goto l2; } else { currClass = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + (ccIndex << 2)); goto l2; } l2: /* end fetchClassOf: */; done = false; while (!(done)) { classDict = longAt(((((char *) currClass)) + 4) + (1 << 2)); /* begin fetchWordLengthOf: */ /* begin sizeBitsOf: */ header = longAt(classDict); if ((header & 3) == 0) { sz = (longAt(classDict - 8)) & 4294967292U; goto l1; } else { sz = header & 252; goto l1; } l1: /* end sizeBitsOf: */; classDictSize = ((unsigned) (sz - 4)) >> 2; methodArray = longAt(((((char *) classDict)) + 4) + (1 << 2)); i = 0; while (i <= (classDictSize - 2)) { if ((longAt(((((char *) home)) + 4) + (3 << 2))) == (longAt(((((char *) methodArray)) + 4) + (i << 2)))) { methodSel = longAt(((((char *) classDict)) + 4) + ((i + 2) << 2)); goto l3; } i += 1; } currClass = longAt(((((char *) currClass)) + 4) + (0 << 2)); done = currClass == nilObj; } methodSel = longAt(((((char *) specialObjectsOop)) + 4) + (20 << 2)); l3: /* end findSelectorOfMethod:forReceiver: */; printNum(ctxt); print(" "); if (!(ctxt == home)) { print("[] in "); } printNameOfClasscount(methodClass, 5); print(">"); printStringOf(methodSel); /* begin cr */ printf("\n"); ctxt = longAt(((((char *) ctxt)) + 4) + (0 << 2)); } } int printChar(int aByte) { putchar(aByte); } int printNameOfClasscount(int classOop, int cnt) { if (cnt <= 0) { return print("bad class"); } if ((sizeBitsOf(classOop)) == 32) { printNameOfClasscount(longAt(((((char *) classOop)) + 4) + (6 << 2)), cnt - 1); print(" class"); } else { printStringOf(longAt(((((char *) classOop)) + 4) + (6 << 2))); } } int printNum(int n) { printf("%ld", (long) n); } int printStringOf(int oop) { int i; int fmt; int cnt; fmt = (((unsigned) (longAt(oop))) >> 8) & 15; if (fmt < 8) { return null; } cnt = ((100 < (lengthOf(oop))) ? 100 : (lengthOf(oop))); i = 0; while (i < cnt) { /* begin printChar: */ putchar(byteAt(((((char *) oop)) + 4) + i)); i += 1; } } int push(int object) { int sp; longAtput(sp = stackPointer + 4, object); stackPointer = sp; } int pushBool(int trueOrFalse) { int sp; int sp1; if (trueOrFalse) { /* begin push: */ longAtput(sp = stackPointer + 4, trueObj); stackPointer = sp; } else { /* begin push: */ longAtput(sp1 = stackPointer + 4, falseObj); stackPointer = sp1; } } int pushFloat(double f) { int newFloatObj; int sp; newFloatObj = instantiateSmallClasssizeInBytesfill(longAt(((((char *) specialObjectsOop)) + 4) + (9 << 2)), 12, 0); storeFloatAtfrom(newFloatObj + 4, f); /* begin push: */ longAtput(sp = stackPointer + 4, newFloatObj); stackPointer = sp; } int pushInteger(int integerValue) { int sp; /* begin push: */ longAtput(sp = stackPointer + 4, ((integerValue << 1) | 1)); stackPointer = sp; } int pushRemappableOop(int oop) { remapBuffer[remapBufferCount += 1] = oop; } int putLongtoFile(int n, sqImageFile f) { int wordsWritten; wordsWritten = sqImageFileWrite(&n, sizeof(int), 1, f); /* begin success: */ successFlag = (wordsWritten == 1) && successFlag; } int putToSleep(int aProcess) { int priority; int processLists; int processList; int lastLink; priority = ((longAt(((((char *) aProcess)) + 4) + (2 << 2))) >> 1); processLists = longAt(((((char *) (longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (3 << 2))))) + 4) + (1 << 2))))) + 4) + (0 << 2)); processList = longAt(((((char *) processLists)) + 4) + ((priority - 1) << 2)); /* begin addLastLink:toList: */ if ((longAt(((((char *) processList)) + 4) + (0 << 2))) == nilObj) { /* begin storePointer:ofObject:withValue: */ if (processList < youngStart) { possibleRootStoreIntovalue(processList, aProcess); } longAtput(((((char *) processList)) + 4) + (0 << 2), aProcess); } else { lastLink = longAt(((((char *) processList)) + 4) + (1 << 2)); /* begin storePointer:ofObject:withValue: */ if (lastLink < youngStart) { possibleRootStoreIntovalue(lastLink, aProcess); } longAtput(((((char *) lastLink)) + 4) + (0 << 2), aProcess); } /* begin storePointer:ofObject:withValue: */ if (processList < youngStart) { possibleRootStoreIntovalue(processList, aProcess); } longAtput(((((char *) processList)) + 4) + (1 << 2), aProcess); /* begin storePointer:ofObject:withValue: */ if (aProcess < youngStart) { possibleRootStoreIntovalue(aProcess, processList); } longAtput(((((char *) aProcess)) + 4) + (3 << 2), processList); } int quickCheckForInterrupts(void) { if ((interruptCheckCounter -= 1) <= 0) { interruptCheckCounter = 1000; checkForInterrupts(); } } int quickFetchIntegerofObject(int fieldIndex, int objectPointer) { return ((longAt(((((char *) objectPointer)) + 4) + (fieldIndex << 2))) >> 1); } int readImageFromFileHeapSize(sqImageFile f, int desiredHeapSize) { int swapBytes; int dataSize; int minimumMemory; int memStart; int bytesRead; int bytesToShift; int headerStart; int headerSize; int oldBaseAddr; int startAddr; int addr; int i; int sched; int proc; int activeCntx; int tmp; int methodHeader; int wordAddr; int oop; int fmt; int stopAddr; int addr1; int chunk; int extra; int type; int extra1; int sz; int header; int extra2; int type1; int extra11; swapBytes = checkImageVersionFrom(f); headerStart = (sqImageFilePosition(f)) - 4; headerSize = getLongFromFileswap(f, swapBytes); dataSize = getLongFromFileswap(f, swapBytes); oldBaseAddr = getLongFromFileswap(f, swapBytes); specialObjectsOop = getLongFromFileswap(f, swapBytes); lastHash = getLongFromFileswap(f, swapBytes); savedWindowSize = getLongFromFileswap(f, swapBytes); fullScreenFlag = getLongFromFileswap(f, swapBytes); if (lastHash == 0) { lastHash = 999; } minimumMemory = dataSize + 80000; if (desiredHeapSize < minimumMemory) { error("Insufficient memory for this image"); } memory = (unsigned char *) sqAllocateMemory(minimumMemory, desiredHeapSize); if (memory == null) { error("Failed to allocate memory for the heap"); } memStart = startOfMemory(); memoryLimit = (memStart + desiredHeapSize) - 24; endOfMemory = memStart + dataSize; sqImageFileSeek(f, headerStart + headerSize); bytesRead = sqImageFileRead(memory, sizeof(unsigned char), dataSize, f); if (bytesRead != dataSize) { error("Read failed or premature end of image file"); } if (swapBytes) { /* begin reverseBytesInImage */ /* begin reverseBytesFrom:to: */ startAddr = startOfMemory(); addr = startAddr; while (addr < endOfMemory) { longAtput(addr, ((((((unsigned) (longAt(addr)) >> 24)) & 255) + ((((unsigned) (longAt(addr)) >> 8)) & 65280)) + ((((unsigned) (longAt(addr)) << 8)) & 16711680)) + ((((unsigned) (longAt(addr)) << 24)) & 4278190080U)); addr += 4; } /* begin byteSwapByteObjects */ /* begin oopFromChunk: */ chunk = startOfMemory(); /* begin extraHeaderBytes: */ type = (longAt(chunk)) & 3; if (type > 1) { extra1 = 0; } else { if (type == 1) { extra1 = 4; } else { extra1 = 8; } } extra = extra1; oop = chunk + extra; while (oop < endOfMemory) { if (!(((longAt(oop)) & 3) == 2)) { fmt = (((unsigned) (longAt(oop))) >> 8) & 15; if (fmt >= 8) { wordAddr = oop + 4; if (fmt >= 12) { methodHeader = longAt(oop + 4); wordAddr = (wordAddr + 4) + (((((unsigned) methodHeader) >> 10) & 255) * 4); } /* begin reverseBytesFrom:to: */ stopAddr = oop + (sizeBitsOf(oop)); addr1 = wordAddr; while (addr1 < stopAddr) { longAtput(addr1, ((((((unsigned) (longAt(addr1)) >> 24)) & 255) + ((((unsigned) (longAt(addr1)) >> 8)) & 65280)) + ((((unsigned) (longAt(addr1)) << 8)) & 16711680)) + ((((unsigned) (longAt(addr1)) << 24)) & 4278190080U)); addr1 += 4; } } } /* begin objectAfter: */ if (checkAssertions) { if (oop >= endOfMemory) { error("no objects after the end of memory"); } } if (((longAt(oop)) & 3) == 2) { sz = (longAt(oop)) & 536870908; } else { /* begin sizeBitsOf: */ header = longAt(oop); if ((header & 3) == 0) { sz = (longAt(oop - 8)) & 4294967292U; goto l1; } else { sz = header & 252; goto l1; } l1: /* end sizeBitsOf: */; } /* begin oopFromChunk: */ /* begin extraHeaderBytes: */ type1 = (longAt(oop + sz)) & 3; if (type1 > 1) { extra11 = 0; } else { if (type1 == 1) { extra11 = 4; } else { extra11 = 8; } } extra2 = extra11; oop = (oop + sz) + extra2; } } bytesToShift = memStart - oldBaseAddr; /* begin initializeInterpreter: */ initializeObjectMemory(bytesToShift); initBBOpTable(); activeContext = nilObj; theHomeContext = nilObj; method = nilObj; receiver = nilObj; messageSelector = nilObj; newMethod = nilObj; /* begin flushMethodCache */ for (i = 1; i <= 2048; i += 1) { methodCache[i] = 0; } mcProbe = 0; /* begin loadInitialContext */ sched = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (3 << 2))))) + 4) + (1 << 2)); proc = longAt(((((char *) sched)) + 4) + (1 << 2)); activeContext = longAt(((((char *) proc)) + 4) + (1 << 2)); if (activeContext < youngStart) { beRootIfOld(activeContext); } /* begin fetchContextRegisters: */ activeCntx = activeContext; tmp = longAt(((((char *) activeCntx)) + 4) + (3 << 2)); if ((tmp & 1)) { tmp = longAt(((((char *) activeCntx)) + 4) + (5 << 2)); if (tmp < youngStart) { beRootIfOld(tmp); } } else { tmp = activeCntx; } theHomeContext = tmp; receiver = longAt(((((char *) tmp)) + 4) + (5 << 2)); method = longAt(((((char *) tmp)) + 4) + (3 << 2)); tmp = ((longAt(((((char *) activeCntx)) + 4) + (1 << 2))) >> 1); instructionPointer = ((method + tmp) + 4) - 2; tmp = ((longAt(((((char *) activeCntx)) + 4) + (2 << 2))) >> 1); stackPointer = (activeCntx + 4) + (((6 + tmp) - 1) * 4); reclaimableContextCount = 0; interruptCheckCounter = 0; nextPollTick = 0; nextWakeupTick = 0; lastTick = 0; interruptKeycode = 2094; interruptPending = false; semaphoresToSignalCount = 0; deferDisplayUpdates = false; return dataSize; } int recycleContextIfPossiblemethodContextClass(int cntxOop, int methodCntxClass) { int cntxHeader; int ccField; int isMethodCntx; if (cntxOop >= youngStart) { cntxHeader = longAt(cntxOop); ccField = cntxHeader & 126976; if (ccField == 0) { isMethodCntx = ((longAt(cntxOop - 4)) & 4294967292U) == methodCntxClass; } else { isMethodCntx = ccField == (((longAt(((((char *) methodCntxClass)) + 4) + (2 << 2))) - 1) & 126976); } if (isMethodCntx) { if ((cntxHeader & 252) == 76) { longAtput(((((char *) cntxOop)) + 4) + (0 << 2), freeSmallContexts); freeSmallContexts = cntxOop; } else { longAtput(((((char *) cntxOop)) + 4) + (0 << 2), freeLargeContexts); freeLargeContexts = cntxOop; } } } } int remap(int oop) { int fwdBlock; if (((oop & 1) == 0) && (((longAt(oop)) & 2147483648U) != 0)) { fwdBlock = (longAt(oop)) & 2147483644; if (checkAssertions) { /* begin fwdBlockValidate: */ if (!((fwdBlock > endOfMemory) && ((fwdBlock <= fwdTableNext) && ((fwdBlock & 3) == 0)))) { error("invalid fwd table entry"); } } return longAt(fwdBlock); } return oop; } int remapClassOf(int oop) { int newClassOop; int fwdBlock; int classHeader; int classOop; int newClassHeader; if (((longAt(oop)) & 3) == 3) { return null; } classHeader = longAt(oop - 4); classOop = classHeader & 4294967292U; if (((classOop & 1) == 0) && (((longAt(classOop)) & 2147483648U) != 0)) { fwdBlock = (longAt(classOop)) & 2147483644; if (checkAssertions) { /* begin fwdBlockValidate: */ if (!((fwdBlock > endOfMemory) && ((fwdBlock <= fwdTableNext) && ((fwdBlock & 3) == 0)))) { error("invalid fwd table entry"); } } newClassOop = longAt(fwdBlock); newClassHeader = newClassOop | (classHeader & 3); longAtput(oop - 4, newClassHeader); if ((oop < youngStart) && (newClassOop >= youngStart)) { beRootWhileForwarding(oop); } } } int remapFieldsAndClassOf(int oop) { int fwdBlock; int fieldOffset; int fieldOop; int newOop; int methodHeader; int size; int fwdBlock1; int fmt; int header; int newClassOop; int fwdBlock2; int classHeader; int classOop; int newClassHeader; /* begin lastPointerWhileForwarding: */ header = longAt(oop); if ((header & 2147483648U) != 0) { fwdBlock1 = header & 2147483644; if (checkAssertions) { /* begin fwdBlockValidate: */ if (!((fwdBlock1 > endOfMemory) && ((fwdBlock1 <= fwdTableNext) && ((fwdBlock1 & 3) == 0)))) { error("invalid fwd table entry"); } } header = longAt(fwdBlock1 + 4); } fmt = (((unsigned) header) >> 8) & 15; if (fmt < 4) { if ((header & 3) == 0) { size = (longAt(oop - 8)) & 268435452; } else { size = header & 252; } fieldOffset = size - 4; goto l1; } if (fmt < 12) { fieldOffset = 0; goto l1; } methodHeader = longAt(oop + 4); fieldOffset = (((((unsigned) methodHeader) >> 10) & 255) * 4) + 4; l1: /* end lastPointerWhileForwarding: */; while (fieldOffset >= 4) { fieldOop = longAt(oop + fieldOffset); if (((fieldOop & 1) == 0) && (((longAt(fieldOop)) & 2147483648U) != 0)) { fwdBlock = (longAt(fieldOop)) & 2147483644; if (checkAssertions) { /* begin fwdBlockValidate: */ if (!((fwdBlock > endOfMemory) && ((fwdBlock <= fwdTableNext) && ((fwdBlock & 3) == 0)))) { error("invalid fwd table entry"); } } newOop = longAt(fwdBlock); longAtput(oop + fieldOffset, newOop); if ((oop < youngStart) && (newOop >= youngStart)) { beRootWhileForwarding(oop); } } fieldOffset -= 4; } /* begin remapClassOf: */ if (((longAt(oop)) & 3) == 3) { goto l2; } classHeader = longAt(oop - 4); classOop = classHeader & 4294967292U; if (((classOop & 1) == 0) && (((longAt(classOop)) & 2147483648U) != 0)) { fwdBlock2 = (longAt(classOop)) & 2147483644; if (checkAssertions) { /* begin fwdBlockValidate: */ if (!((fwdBlock2 > endOfMemory) && ((fwdBlock2 <= fwdTableNext) && ((fwdBlock2 & 3) == 0)))) { error("invalid fwd table entry"); } } newClassOop = longAt(fwdBlock2); newClassHeader = newClassOop | (classHeader & 3); longAtput(oop - 4, newClassHeader); if ((oop < youngStart) && (newClassOop >= youngStart)) { beRootWhileForwarding(oop); } } l2: /* end remapClassOf: */; } int removeFirstLinkOfList(int aList) { int next; int first; int last; int valuePointer; int valuePointer1; int valuePointer2; first = longAt(((((char *) aList)) + 4) + (0 << 2)); last = longAt(((((char *) aList)) + 4) + (1 << 2)); if (first == last) { /* begin storePointer:ofObject:withValue: */ valuePointer = nilObj; if (aList < youngStart) { possibleRootStoreIntovalue(aList, valuePointer); } longAtput(((((char *) aList)) + 4) + (0 << 2), valuePointer); /* begin storePointer:ofObject:withValue: */ valuePointer1 = nilObj; if (aList < youngStart) { possibleRootStoreIntovalue(aList, valuePointer1); } longAtput(((((char *) aList)) + 4) + (1 << 2), valuePointer1); } else { next = longAt(((((char *) first)) + 4) + (0 << 2)); /* begin storePointer:ofObject:withValue: */ if (aList < youngStart) { possibleRootStoreIntovalue(aList, next); } longAtput(((((char *) aList)) + 4) + (0 << 2), next); } /* begin storePointer:ofObject:withValue: */ valuePointer2 = nilObj; if (first < youngStart) { possibleRootStoreIntovalue(first, valuePointer2); } longAtput(((((char *) first)) + 4) + (0 << 2), valuePointer2); return first; } int reportContexts(void) { int small; int big; int cntxt; big = 0; cntxt = freeLargeContexts; while (!(cntxt == 1)) { big += 1; cntxt = longAt(((((char *) cntxt)) + 4) + (0 << 2)); } small = 0; cntxt = freeSmallContexts; while (!(cntxt == 1)) { small += 1; cntxt = longAt(((((char *) cntxt)) + 4) + (0 << 2)); } print("Recycled contexts: "); printNum(small); print(" small, "); printNum(big); print(" large ("); printNum((big * 156) + (small * 76)); print(" bytes)"); /* begin cr */ printf("\n"); } int restoreHeaderOf(int oop) { int fwdBlock; int fwdHeader; fwdHeader = longAt(oop); fwdBlock = fwdHeader & 2147483644; if (checkAssertions) { if ((fwdHeader & 2147483648U) == 0) { error("attempting to restore the header of an object that has no forwarding block"); } /* begin fwdBlockValidate: */ if (!((fwdBlock > endOfMemory) && ((fwdBlock <= fwdTableNext) && ((fwdBlock & 3) == 0)))) { error("invalid fwd table entry"); } } longAtput(oop, longAt(fwdBlock + 4)); } int restoreHeadersAfterBecomingwith(int list1, int list2) { int fieldOffset; int oop1; int oop2; int hdr1; int hdr2; int fwdBlock; int fwdHeader; int fwdBlock1; int fwdHeader1; int methodHeader; int sz; int fmt; int header; int type; /* begin lastPointerOf: */ fmt = (((unsigned) (longAt(list1))) >> 8) & 15; if (fmt < 4) { /* begin sizeBitsOfSafe: */ header = longAt(list1); /* begin rightType: */ if ((header & 252) == 0) { type = 0; goto l2; } else { if ((header & 126976) == 0) { type = 1; goto l2; } else { type = 3; goto l2; } } l2: /* end rightType: */; if (type == 0) { sz = (longAt(list1 - 8)) & 4294967292U; goto l3; } else { sz = header & 252; goto l3; } l3: /* end sizeBitsOfSafe: */; fieldOffset = sz - 4; goto l1; } if (fmt < 12) { fieldOffset = 0; goto l1; } methodHeader = longAt(list1 + 4); fieldOffset = (((((unsigned) methodHeader) >> 10) & 255) * 4) + 4; l1: /* end lastPointerOf: */; while (fieldOffset >= 4) { oop1 = longAt(list1 + fieldOffset); oop2 = longAt(list2 + fieldOffset); /* begin restoreHeaderOf: */ fwdHeader = longAt(oop1); fwdBlock = fwdHeader & 2147483644; if (checkAssertions) { if ((fwdHeader & 2147483648U) == 0) { error("attempting to restore the header of an object that has no forwarding block"); } /* begin fwdBlockValidate: */ if (!((fwdBlock > endOfMemory) && ((fwdBlock <= fwdTableNext) && ((fwdBlock & 3) == 0)))) { error("invalid fwd table entry"); } } longAtput(oop1, longAt(fwdBlock + 4)); /* begin restoreHeaderOf: */ fwdHeader1 = longAt(oop2); fwdBlock1 = fwdHeader1 & 2147483644; if (checkAssertions) { if ((fwdHeader1 & 2147483648U) == 0) { error("attempting to restore the header of an object that has no forwarding block"); } /* begin fwdBlockValidate: */ if (!((fwdBlock1 > endOfMemory) && ((fwdBlock1 <= fwdTableNext) && ((fwdBlock1 & 3) == 0)))) { error("invalid fwd table entry"); } } longAtput(oop2, longAt(fwdBlock1 + 4)); /* begin exchangeHashBits:with: */ hdr1 = longAt(oop1); hdr2 = longAt(oop2); longAtput(oop1, (hdr1 & 3758227455U) | (hdr2 & 536739840)); longAtput(oop2, (hdr2 & 3758227455U) | (hdr1 & 536739840)); fieldOffset -= 4; } } int resume(int aProcess) { int activeProc; int activePriority; int newPriority; int sched; int oldProc; int valuePointer; int tmp; int priority; int processLists; int processList; int lastLink; int priority1; int processLists1; int processList1; int lastLink1; activeProc = longAt(((((char *) (longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (3 << 2))))) + 4) + (1 << 2))))) + 4) + (1 << 2)); activePriority = ((longAt(((((char *) activeProc)) + 4) + (2 << 2))) >> 1); newPriority = ((longAt(((((char *) aProcess)) + 4) + (2 << 2))) >> 1); if (newPriority > activePriority) { /* begin putToSleep: */ priority = ((longAt(((((char *) activeProc)) + 4) + (2 << 2))) >> 1); processLists = longAt(((((char *) (longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (3 << 2))))) + 4) + (1 << 2))))) + 4) + (0 << 2)); processList = longAt(((((char *) processLists)) + 4) + ((priority - 1) << 2)); /* begin addLastLink:toList: */ if ((longAt(((((char *) processList)) + 4) + (0 << 2))) == nilObj) { /* begin storePointer:ofObject:withValue: */ if (processList < youngStart) { possibleRootStoreIntovalue(processList, activeProc); } longAtput(((((char *) processList)) + 4) + (0 << 2), activeProc); } else { lastLink = longAt(((((char *) processList)) + 4) + (1 << 2)); /* begin storePointer:ofObject:withValue: */ if (lastLink < youngStart) { possibleRootStoreIntovalue(lastLink, activeProc); } longAtput(((((char *) lastLink)) + 4) + (0 << 2), activeProc); } /* begin storePointer:ofObject:withValue: */ if (processList < youngStart) { possibleRootStoreIntovalue(processList, activeProc); } longAtput(((((char *) processList)) + 4) + (1 << 2), activeProc); /* begin storePointer:ofObject:withValue: */ if (activeProc < youngStart) { possibleRootStoreIntovalue(activeProc, processList); } longAtput(((((char *) activeProc)) + 4) + (3 << 2), processList); /* begin transferTo: */ sched = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (3 << 2))))) + 4) + (1 << 2)); oldProc = longAt(((((char *) sched)) + 4) + (1 << 2)); /* begin storePointer:ofObject:withValue: */ valuePointer = activeContext; if (oldProc < youngStart) { possibleRootStoreIntovalue(oldProc, valuePointer); } longAtput(((((char *) oldProc)) + 4) + (1 << 2), valuePointer); /* begin storePointer:ofObject:withValue: */ if (sched < youngStart) { possibleRootStoreIntovalue(sched, aProcess); } longAtput(((((char *) sched)) + 4) + (1 << 2), aProcess); /* begin newActiveContext: */ /* begin storeContextRegisters: */ longAtput(((((char *) activeContext)) + 4) + (1 << 2), ((((instructionPointer - method) - (4 - 2)) << 1) | 1)); longAtput(((((char *) activeContext)) + 4) + (2 << 2), (((((((unsigned) ((stackPointer - activeContext) - 4)) >> 2) - 6) + 1) << 1) | 1)); if ((longAt(((((char *) aProcess)) + 4) + (1 << 2))) < youngStart) { beRootIfOld(longAt(((((char *) aProcess)) + 4) + (1 << 2))); } activeContext = longAt(((((char *) aProcess)) + 4) + (1 << 2)); /* begin fetchContextRegisters: */ tmp = longAt(((((char *) (longAt(((((char *) aProcess)) + 4) + (1 << 2))))) + 4) + (3 << 2)); if ((tmp & 1)) { tmp = longAt(((((char *) (longAt(((((char *) aProcess)) + 4) + (1 << 2))))) + 4) + (5 << 2)); if (tmp < youngStart) { beRootIfOld(tmp); } } else { tmp = longAt(((((char *) aProcess)) + 4) + (1 << 2)); } theHomeContext = tmp; receiver = longAt(((((char *) tmp)) + 4) + (5 << 2)); method = longAt(((((char *) tmp)) + 4) + (3 << 2)); tmp = ((longAt(((((char *) (longAt(((((char *) aProcess)) + 4) + (1 << 2))))) + 4) + (1 << 2))) >> 1); instructionPointer = ((method + tmp) + 4) - 2; tmp = ((longAt(((((char *) (longAt(((((char *) aProcess)) + 4) + (1 << 2))))) + 4) + (2 << 2))) >> 1); stackPointer = ((longAt(((((char *) aProcess)) + 4) + (1 << 2))) + 4) + (((6 + tmp) - 1) * 4); reclaimableContextCount = 0; } else { /* begin putToSleep: */ priority1 = ((longAt(((((char *) aProcess)) + 4) + (2 << 2))) >> 1); processLists1 = longAt(((((char *) (longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (3 << 2))))) + 4) + (1 << 2))))) + 4) + (0 << 2)); processList1 = longAt(((((char *) processLists1)) + 4) + ((priority1 - 1) << 2)); /* begin addLastLink:toList: */ if ((longAt(((((char *) processList1)) + 4) + (0 << 2))) == nilObj) { /* begin storePointer:ofObject:withValue: */ if (processList1 < youngStart) { possibleRootStoreIntovalue(processList1, aProcess); } longAtput(((((char *) processList1)) + 4) + (0 << 2), aProcess); } else { lastLink1 = longAt(((((char *) processList1)) + 4) + (1 << 2)); /* begin storePointer:ofObject:withValue: */ if (lastLink1 < youngStart) { possibleRootStoreIntovalue(lastLink1, aProcess); } longAtput(((((char *) lastLink1)) + 4) + (0 << 2), aProcess); } /* begin storePointer:ofObject:withValue: */ if (processList1 < youngStart) { possibleRootStoreIntovalue(processList1, aProcess); } longAtput(((((char *) processList1)) + 4) + (1 << 2), aProcess); /* begin storePointer:ofObject:withValue: */ if (aProcess < youngStart) { possibleRootStoreIntovalue(aProcess, processList1); } longAtput(((((char *) aProcess)) + 4) + (3 << 2), processList1); } } int returnAtlastIndexlefttop(int stopIndex, int lastIndex, int left, int top) { int objectPointer; stopCode = stObjectat(scanStopArray, stopIndex); if (!successFlag) { return null; } /* begin storeInteger:ofObject:withValue: */ objectPointer = bitBltOop; if ((lastIndex ^ (lastIndex << 1)) >= 0) { longAtput(((((char *) objectPointer)) + 4) + (15 << 2), ((lastIndex << 1) | 1)); } else { primitiveFail(); } if (scanDisplayFlag) { affectedL = left; affectedR = bbW + dx; affectedT = top; affectedB = bbH + dy; } } int reverseBytesFromto(int startAddr, int stopAddr) { int addr; addr = startAddr; while (addr < stopAddr) { longAtput(addr, ((((((unsigned) (longAt(addr)) >> 24)) & 255) + ((((unsigned) (longAt(addr)) >> 8)) & 65280)) + ((((unsigned) (longAt(addr)) << 8)) & 16711680)) + ((((unsigned) (longAt(addr)) << 24)) & 4278190080U)); addr += 4; } } int reverseBytesInImage(void) { int startAddr; int addr; int methodHeader; int wordAddr; int oop; int fmt; int stopAddr; int addr1; int chunk; int extra; int type; int extra1; int sz; int header; int extra2; int type1; int extra11; /* begin reverseBytesFrom:to: */ startAddr = startOfMemory(); addr = startAddr; while (addr < endOfMemory) { longAtput(addr, ((((((unsigned) (longAt(addr)) >> 24)) & 255) + ((((unsigned) (longAt(addr)) >> 8)) & 65280)) + ((((unsigned) (longAt(addr)) << 8)) & 16711680)) + ((((unsigned) (longAt(addr)) << 24)) & 4278190080U)); addr += 4; } /* begin byteSwapByteObjects */ /* begin oopFromChunk: */ chunk = startOfMemory(); /* begin extraHeaderBytes: */ type = (longAt(chunk)) & 3; if (type > 1) { extra1 = 0; } else { if (type == 1) { extra1 = 4; } else { extra1 = 8; } } extra = extra1; oop = chunk + extra; while (oop < endOfMemory) { if (!(((longAt(oop)) & 3) == 2)) { fmt = (((unsigned) (longAt(oop))) >> 8) & 15; if (fmt >= 8) { wordAddr = oop + 4; if (fmt >= 12) { methodHeader = longAt(oop + 4); wordAddr = (wordAddr + 4) + (((((unsigned) methodHeader) >> 10) & 255) * 4); } /* begin reverseBytesFrom:to: */ stopAddr = oop + (sizeBitsOf(oop)); addr1 = wordAddr; while (addr1 < stopAddr) { longAtput(addr1, ((((((unsigned) (longAt(addr1)) >> 24)) & 255) + ((((unsigned) (longAt(addr1)) >> 8)) & 65280)) + ((((unsigned) (longAt(addr1)) << 8)) & 16711680)) + ((((unsigned) (longAt(addr1)) << 24)) & 4278190080U)); addr1 += 4; } } } /* begin objectAfter: */ if (checkAssertions) { if (oop >= endOfMemory) { error("no objects after the end of memory"); } } if (((longAt(oop)) & 3) == 2) { sz = (longAt(oop)) & 536870908; } else { /* begin sizeBitsOf: */ header = longAt(oop); if ((header & 3) == 0) { sz = (longAt(oop - 8)) & 4294967292U; goto l1; } else { sz = header & 252; goto l1; } l1: /* end sizeBitsOf: */; } /* begin oopFromChunk: */ /* begin extraHeaderBytes: */ type1 = (longAt(oop + sz)) & 3; if (type1 > 1) { extra11 = 0; } else { if (type1 == 1) { extra11 = 4; } else { extra11 = 8; } } extra2 = extra11; oop = (oop + sz) + extra2; } } int rgbAddwith(int sourceWord, int destinationWord) { if (destPixSize < 16) { return partitionedAddtonBitsnPartitions(sourceWord, destinationWord, destPixSize, pixPerWord); } if (destPixSize == 16) { return (partitionedAddtonBitsnPartitions(sourceWord, destinationWord, 5, 3)) + ((partitionedAddtonBitsnPartitions(((unsigned) sourceWord) >> 16, ((unsigned) destinationWord) >> 16, 5, 3)) << 16); } else { return partitionedAddtonBitsnPartitions(sourceWord, destinationWord, 8, 3); } } int rgbDiffwith(int sourceWord, int destinationWord) { int diff; int pixMask; if (destPixSize < 16) { diff = sourceWord ^ destinationWord; pixMask = (((destPixSize < 0) ? ((unsigned) 1 >> -destPixSize) : ((unsigned) 1 << destPixSize))) - 1; while (!(diff == 0)) { if ((diff & pixMask) != 0) { bitCount += 1; } diff = ((unsigned) diff) >> destPixSize; } return destinationWord; } if (destPixSize == 16) { diff = partitionedSubfromnBitsnPartitions(sourceWord, destinationWord, 5, 3); bitCount = ((bitCount + (diff & 31)) + ((((unsigned) diff) >> 5) & 31)) + ((((unsigned) diff) >> 10) & 31); diff = partitionedSubfromnBitsnPartitions(((unsigned) sourceWord) >> 16, ((unsigned) destinationWord) >> 16, 5, 3); bitCount = ((bitCount + (diff & 31)) + ((((unsigned) diff) >> 5) & 31)) + ((((unsigned) diff) >> 10) & 31); } else { diff = partitionedSubfromnBitsnPartitions(sourceWord, destinationWord, 8, 3); bitCount = ((bitCount + (diff & 255)) + ((((unsigned) diff) >> 8) & 255)) + ((((unsigned) diff) >> 16) & 255); } return destinationWord; } int rgbMapfromto(int sourcePixel, int nBitsIn, int nBitsOut) { int mask; int srcPix; int destPix; int d; if ((d = nBitsOut - nBitsIn) > 0) { mask = (1 << nBitsIn) - 1; srcPix = sourcePixel << d; mask = mask << d; destPix = srcPix & mask; mask = mask << nBitsOut; srcPix = srcPix << d; return (destPix + (srcPix & mask)) + ((srcPix << d) & (mask << nBitsOut)); } else { if (d == 0) { return sourcePixel; } if (sourcePixel == 0) { return sourcePixel; } d = nBitsIn - nBitsOut; mask = (1 << nBitsOut) - 1; srcPix = ((unsigned) sourcePixel) >> d; destPix = srcPix & mask; mask = mask << nBitsOut; srcPix = ((unsigned) srcPix) >> d; destPix = (destPix + (srcPix & mask)) + ((((unsigned) srcPix) >> d) & (mask << nBitsOut)); if (destPix == 0) { return 1; } return destPix; } } int rgbMaxwith(int sourceWord, int destinationWord) { int mask; int i; int result; int mask3; int i1; int result1; if (destPixSize < 16) { /* begin partitionedMax:with:nBits:nPartitions: */ mask = (1 << destPixSize) - 1; result = 0; for (i = 1; i <= pixPerWord; i += 1) { result = result | ((((destinationWord & mask) < (sourceWord & mask)) ? (sourceWord & mask) : (destinationWord & mask))); mask = mask << destPixSize; } return result; } if (destPixSize == 16) { return (partitionedMaxwithnBitsnPartitions(sourceWord, destinationWord, 5, 3)) + ((partitionedMaxwithnBitsnPartitions(((unsigned) sourceWord) >> 16, ((unsigned) destinationWord) >> 16, 5, 3)) << 16); } else { /* begin partitionedMax:with:nBits:nPartitions: */ mask3 = (1 << 8) - 1; result1 = 0; for (i1 = 1; i1 <= 3; i1 += 1) { result1 = result1 | ((((destinationWord & mask3) < (sourceWord & mask3)) ? (sourceWord & mask3) : (destinationWord & mask3))); mask3 = mask3 << 8; } return result1; } } int rgbMinwith(int sourceWord, int destinationWord) { int mask; int i; int result; int mask3; int i1; int result1; if (destPixSize < 16) { /* begin partitionedMin:with:nBits:nPartitions: */ mask = (1 << destPixSize) - 1; result = 0; for (i = 1; i <= pixPerWord; i += 1) { result = result | ((((destinationWord & mask) < (sourceWord & mask)) ? (destinationWord & mask) : (sourceWord & mask))); mask = mask << destPixSize; } return result; } if (destPixSize == 16) { return (partitionedMinwithnBitsnPartitions(sourceWord, destinationWord, 5, 3)) + ((partitionedMinwithnBitsnPartitions(((unsigned) sourceWord) >> 16, ((unsigned) destinationWord) >> 16, 5, 3)) << 16); } else { /* begin partitionedMin:with:nBits:nPartitions: */ mask3 = (1 << 8) - 1; result1 = 0; for (i1 = 1; i1 <= 3; i1 += 1) { result1 = result1 | ((((destinationWord & mask3) < (sourceWord & mask3)) ? (destinationWord & mask3) : (sourceWord & mask3))); mask3 = mask3 << 8; } return result1; } } int rgbMinInvertwith(int wordToInvert, int destinationWord) { int sourceWord; int mask; int i; int result; int mask3; int i1; int result1; sourceWord = ~wordToInvert; if (destPixSize < 16) { /* begin partitionedMin:with:nBits:nPartitions: */ mask = (1 << destPixSize) - 1; result = 0; for (i = 1; i <= pixPerWord; i += 1) { result = result | ((((destinationWord & mask) < (sourceWord & mask)) ? (destinationWord & mask) : (sourceWord & mask))); mask = mask << destPixSize; } return result; } if (destPixSize == 16) { return (partitionedMinwithnBitsnPartitions(sourceWord, destinationWord, 5, 3)) + ((partitionedMinwithnBitsnPartitions(((unsigned) sourceWord) >> 16, ((unsigned) destinationWord) >> 16, 5, 3)) << 16); } else { /* begin partitionedMin:with:nBits:nPartitions: */ mask3 = (1 << 8) - 1; result1 = 0; for (i1 = 1; i1 <= 3; i1 += 1) { result1 = result1 | ((((destinationWord & mask3) < (sourceWord & mask3)) ? (destinationWord & mask3) : (sourceWord & mask3))); mask3 = mask3 << 8; } return result1; } } int rgbSubwith(int sourceWord, int destinationWord) { if (destPixSize < 16) { return partitionedSubfromnBitsnPartitions(sourceWord, destinationWord, destPixSize, pixPerWord); } if (destPixSize == 16) { return (partitionedSubfromnBitsnPartitions(sourceWord, destinationWord, 5, 3)) + ((partitionedSubfromnBitsnPartitions(((unsigned) sourceWord) >> 16, ((unsigned) destinationWord) >> 16, 5, 3)) << 16); } else { return partitionedSubfromnBitsnPartitions(sourceWord, destinationWord, 8, 3); } } int rightType(int headerWord) { if ((headerWord & 252) == 0) { return 0; } else { if ((headerWord & 126976) == 0) { return 1; } else { return 3; } } } int scanCharacters(void) { int sourceX2; int ascii; int top; int nextDestX; int charVal; int left; int lastIndex; int objectPointer; int integerValue; int lastIndex1; int objectPointer1; int objectPointer2; int objectPointer3; if (scanDisplayFlag) { clipRange(); left = dx; top = dy; } lastIndex = scanStart; while (lastIndex <= scanStop) { charVal = stObjectat(scanString, lastIndex); ascii = (charVal >> 1); if (!successFlag) { return null; } stopCode = stObjectat(scanStopArray, ascii + 1); if (!successFlag) { return null; } if (!(stopCode == nilObj)) { /* begin returnAt:lastIndex:left:top: */ stopCode = stObjectat(scanStopArray, ascii + 1); if (!successFlag) { return null; } /* begin storeInteger:ofObject:withValue: */ objectPointer1 = bitBltOop; if ((lastIndex ^ (lastIndex << 1)) >= 0) { longAtput(((((char *) objectPointer1)) + 4) + (15 << 2), ((lastIndex << 1) | 1)); } else { primitiveFail(); } if (scanDisplayFlag) { affectedL = left; affectedR = bbW + dx; affectedT = top; affectedB = bbH + dy; } return null; } sourceX = stObjectat(scanXTable, ascii + 1); sourceX2 = stObjectat(scanXTable, ascii + 2); if (!successFlag) { return null; } if (((sourceX & 1)) && ((sourceX2 & 1))) { sourceX = (sourceX >> 1); sourceX2 = (sourceX2 >> 1); } else { primitiveFail(); return null; } nextDestX = destX + (width = sourceX2 - sourceX); if (nextDestX > scanRightX) { /* begin returnAt:lastIndex:left:top: */ stopCode = stObjectat(scanStopArray, 258); if (!successFlag) { return null; } /* begin storeInteger:ofObject:withValue: */ objectPointer2 = bitBltOop; if ((lastIndex ^ (lastIndex << 1)) >= 0) { longAtput(((((char *) objectPointer2)) + 4) + (15 << 2), ((lastIndex << 1) | 1)); } else { primitiveFail(); } if (scanDisplayFlag) { affectedL = left; affectedR = bbW + dx; affectedT = top; affectedB = bbH + dy; } return null; } if (scanDisplayFlag) { copyBits(); } destX = nextDestX; /* begin storeInteger:ofObject:withValue: */ objectPointer = bitBltOop; integerValue = destX; if ((integerValue ^ (integerValue << 1)) >= 0) { longAtput(((((char *) objectPointer)) + 4) + (4 << 2), ((integerValue << 1) | 1)); } else { primitiveFail(); } lastIndex += 1; } /* begin returnAt:lastIndex:left:top: */ lastIndex1 = scanStop; stopCode = stObjectat(scanStopArray, 257); if (!successFlag) { goto l1; } /* begin storeInteger:ofObject:withValue: */ objectPointer3 = bitBltOop; if ((lastIndex1 ^ (lastIndex1 << 1)) >= 0) { longAtput(((((char *) objectPointer3)) + 4) + (15 << 2), ((lastIndex1 << 1) | 1)); } else { primitiveFail(); } if (scanDisplayFlag) { affectedL = left; affectedR = bbW + dx; affectedT = top; affectedB = bbH + dy; } l1: /* end returnAt:lastIndex:left:top: */; } int schedulerPointer(void) { return longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (3 << 2))))) + 4) + (1 << 2)); } int sendSelectorToClass(int classPointer) { int ok; int probe; int p; int hash; int primBits; /* begin findNewMethodInClass: */ /* begin lookupInMethodCacheSel:class: */ hash = ((unsigned) (messageSelector ^ classPointer)) >> 2; probe = (hash & 511) + 1; for (p = 1; p <= 3; p += 1) { if (((methodCache[probe]) == messageSelector) && ((methodCache[probe + 512]) == classPointer)) { newMethod = methodCache[probe + (512 * 2)]; primitiveIndex = methodCache[probe + (512 * 3)]; ok = true; goto l1; } probe = ((((unsigned) hash) >> p) & 511) + 1; } ok = false; l1: /* end lookupInMethodCacheSel:class: */; if (!(ok)) { lookupMethodInClass(classPointer); /* begin primitiveIndexOf: */ primBits = (((unsigned) (longAt(((((char *) newMethod)) + 4) + (0 << 2)))) >> 1) & 805306879; if (primBits > 511) { primitiveIndex = (primBits & 511) + (((unsigned) primBits) >> 19); goto l2; } else { primitiveIndex = primBits; goto l2; } l2: /* end primitiveIndexOf: */; addToMethodCacheSelclassmethodprimIndex(messageSelector, classPointer, newMethod, primitiveIndex); } /* begin executeNewMethod */ if ((primitiveIndex == 0) || (!(primitiveResponse()))) { activateNewMethod(); /* begin quickCheckForInterrupts */ if ((interruptCheckCounter -= 1) <= 0) { interruptCheckCounter = 1000; checkForInterrupts(); } } } int sender(void) { return longAt(((((char *) theHomeContext)) + 4) + (0 << 2)); } int setInterpreter(int anInterpreter) { interpreterProxy = anInterpreter; } int setSizeOfFreeto(int chunk, int byteSize) { longAtput(chunk, (byteSize & 536870908) | 2); } int showDisplayBits(void) { int displayObj; int dispBits; int affectedRectL; int affectedRectR; int affectedRectT; int affectedRectB; int dispBitsIndex; int h; int w; int d; int successValue; if (deferDisplayUpdates) { return null; } displayObj = longAt(((((char *) specialObjectsOop)) + 4) + (14 << 2)); if (!(destForm == displayObj)) { return null; } /* begin success: */ successValue = (((((unsigned) (longAt(displayObj))) >> 8) & 15) <= 4) && ((lengthOf(displayObj)) >= 4); successFlag = successValue && successFlag; if (successFlag) { dispBits = longAt(((((char *) displayObj)) + 4) + (0 << 2)); w = fetchIntegerofObject(1, displayObj); h = fetchIntegerofObject(2, displayObj); d = fetchIntegerofObject(3, displayObj); } if (successFlag) { affectedRectL = affectedL; affectedRectR = affectedR; affectedRectT = affectedT; affectedRectB = affectedB; dispBitsIndex = dispBits + 4; ioShowDisplay(dispBitsIndex, w, h, d, affectedRectL, affectedRectR, affectedRectT, affectedRectB); } } int signExtend16(int int16) { if ((int16 & 32768) == 0) { return int16; } else { return int16 - 65536; } } int signalSemaphoreWithIndex(int index) { int i; if (index <= 0) { return null; } interruptCheckCounter = 0; for (i = 1; i <= semaphoresToSignalCount; i += 1) { if ((semaphoresToSignal[i]) == index) { return null; } } if (semaphoresToSignalCount < 25) { semaphoresToSignalCount += 1; semaphoresToSignal[semaphoresToSignalCount] = index; } } int sizeBitsOf(int oop) { int header; header = longAt(oop); if ((header & 3) == 0) { return (longAt(oop - 8)) & 4294967292U; } else { return header & 252; } } int sizeBitsOfSafe(int oop) { int header; int type; header = longAt(oop); /* begin rightType: */ if ((header & 252) == 0) { type = 0; goto l1; } else { if ((header & 126976) == 0) { type = 1; goto l1; } else { type = 3; goto l1; } } l1: /* end rightType: */; if (type == 0) { return (longAt(oop - 8)) & 4294967292U; } else { return header & 252; } } int sizeHeader(int oop) { return longAt(oop - 8); } int sizeOfFree(int oop) { return (longAt(oop)) & 536870908; } int sizeOfSTArrayFromCPrimitive(void *cPtr) { int oop; int sz; int header; int fmt; oop = ((int) cPtr) - 4; if (!(isWordsOrBytes(oop))) { primitiveFail(); return 0; } /* begin lengthOf: */ header = longAt(oop); if ((header & 3) == 0) { sz = (longAt(oop - 8)) & 4294967292U; } else { sz = header & 252; } fmt = (((unsigned) header) >> 8) & 15; if (fmt < 8) { return ((unsigned) (sz - 4)) >> 2; } else { return (sz - 4) - (fmt & 3); } return null; } int smoothPixatXfyfdxhdyhdxvdyvpixPerWordpixelMasksourceMap(int n, int xf, int yf, int dxh, int dyh, int dxv, int dyv, int srcPixPerWord, int sourcePixMask, int sourceMap) { int j; int sourcePix; int b; int x; int y; int bitsPerColor; int nPix; int maxPix; int i; int d; int rgb; int g; int r; int mask; int srcPix; int destPix; int d1; r = g = b = 0; maxPix = n * n; x = xf; y = yf; nPix = 0; for (i = 0; i <= (n - 1); i += 1) { for (j = 0; j <= (n - 1); j += 1) { sourcePix = (sourcePixAtXypixPerWord(((unsigned) ((x + (dxh * i)) + (dxv * j))) >> 14, ((unsigned) ((y + (dyh * i)) + (dyv * j))) >> 14, srcPixPerWord)) & sourcePixMask; if (!((combinationRule == 25) && (sourcePix == 0))) { nPix += 1; if (sourcePixSize < 16) { rgb = (longAt(((((char *) sourceMap)) + 4) + (sourcePix << 2))) & 16777215; } else { if (sourcePixSize == 32) { rgb = sourcePix & 16777215; } else { /* begin rgbMap:from:to: */ if ((d1 = 8 - 5) > 0) { mask = (1 << 5) - 1; srcPix = sourcePix << d1; mask = mask << d1; destPix = srcPix & mask; mask = mask << 8; srcPix = srcPix << d1; rgb = (destPix + (srcPix & mask)) + ((srcPix << d1) & (mask << 8)); goto l1; } else { if (d1 == 0) { rgb = sourcePix; goto l1; } if (sourcePix == 0) { rgb = sourcePix; goto l1; } d1 = 5 - 8; mask = (1 << 8) - 1; srcPix = ((unsigned) sourcePix) >> d1; destPix = srcPix & mask; mask = mask << 8; srcPix = ((unsigned) srcPix) >> d1; destPix = (destPix + (srcPix & mask)) + ((((unsigned) srcPix) >> d1) & (mask << 8)); if (destPix == 0) { rgb = 1; goto l1; } rgb = destPix; goto l1; } l1: /* end rgbMap:from:to: */; } } r += (((unsigned) rgb) >> 16) & 255; g += (((unsigned) rgb) >> 8) & 255; b += rgb & 255; } } } if ((nPix == 0) || ((combinationRule == 25) && (nPix < (maxPix / 2)))) { return 0; } if (colorMap != nilObj) { bitsPerColor = cmBitsPerColor; } else { if (destPixSize == 16) { bitsPerColor = 5; } if (destPixSize == 32) { bitsPerColor = 8; } } d = 8 - bitsPerColor; rgb = (((((unsigned) (r / nPix)) >> d) << (bitsPerColor * 2)) + ((((unsigned) (g / nPix)) >> d) << bitsPerColor)) + (((unsigned) (b / nPix)) >> d); if (rgb == 0) { if (((r + g) + b) > 0) { rgb = 1; } } if (colorMap != nilObj) { return longAt(((((char *) colorMap)) + 4) + (rgb << 2)); } else { return rgb; } } int socketRecordSize(void) { return sizeof(SQSocket); } SQSocket * socketValueOf(int socketOop) { int socketIndex; int successValue; /* begin success: */ successValue = (((((unsigned) (longAt(socketOop))) >> 8) & 15) >= 8) && ((lengthOf(socketOop)) == (socketRecordSize())); successFlag = successValue && successFlag; if (successFlag) { socketIndex = socketOop + 4; return (SQSocket *) socketIndex; } else { return null; } } int sourcePixAtXypixPerWord(int x, int y, int srcPixPerWord) { int sourceWord; int index; if ((x < 0) || (x >= srcWidth)) { return 0; } if ((y < 0) || (y >= srcHeight)) { return 0; } index = ((y * sourceRaster) + (x / srcPixPerWord)) * 4; sourceWord = longAt((sourceBits + 4) + index); return ((unsigned) sourceWord) >> ((32 - sourcePixSize) - ((x % srcPixPerWord) * sourcePixSize)); } int sourceSkewAndPointerInit(void) { int dWid; int sxLowBits; int dxLowBits; int pixPerM1; pixPerM1 = pixPerWord - 1; sxLowBits = sx & pixPerM1; dxLowBits = dx & pixPerM1; if (hDir > 0) { dWid = ((bbW < (pixPerWord - dxLowBits)) ? bbW : (pixPerWord - dxLowBits)); preload = (sxLowBits + dWid) > pixPerM1; } else { dWid = ((bbW < (dxLowBits + 1)) ? bbW : (dxLowBits + 1)); preload = ((sxLowBits - dWid) + 1) < 0; } skew = (sxLowBits - dxLowBits) * destPixSize; if (preload) { if (skew < 0) { skew += 32; } else { skew -= 32; } } sourceIndex = (sourceBits + 4) + (((sy * sourceRaster) + (sx / (32 / sourcePixSize))) * 4); sourceDelta = 4 * ((sourceRaster * vDir) - (nWords * hDir)); if (preload) { sourceDelta -= 4 * hDir; } } int sourceWordwith(int sourceWord, int destinationWord) { return sourceWord; } int specialSelector(int index) { return longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (23 << 2))))) + 4) + ((index * 2) << 2)); } int splObj(int index) { return longAt(((((char *) specialObjectsOop)) + 4) + (index << 2)); } int stObjectat(int array, int index) { int hdr; int totalLength; int fmt; int fixedFields; int sz; int classFormat; int class; int ccIndex; hdr = longAt(array); fmt = (((unsigned) hdr) >> 8) & 15; /* begin lengthOf:baseHeader:format: */ if ((hdr & 3) == 0) { sz = (longAt(array - 8)) & 4294967292U; } else { sz = hdr & 252; } if (fmt < 8) { totalLength = ((unsigned) (sz - 4)) >> 2; goto l1; } else { totalLength = (sz - 4) - (fmt & 3); goto l1; } l1: /* end lengthOf:baseHeader:format: */; /* begin fixedFieldsOf:format:length: */ if ((fmt > 3) || (fmt == 2)) { fixedFields = 0; goto l2; } if (fmt < 2) { fixedFields = totalLength; goto l2; } /* begin fetchClassOf: */ if ((array & 1)) { class = longAt(((((char *) specialObjectsOop)) + 4) + (5 << 2)); goto l3; } ccIndex = ((((unsigned) (longAt(array))) >> 12) & 31) - 1; if (ccIndex < 0) { class = (longAt(array - 4)) & 4294967292U; goto l3; } else { class = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + (ccIndex << 2)); goto l3; } l3: /* end fetchClassOf: */; classFormat = (longAt(((((char *) class)) + 4) + (2 << 2))) - 1; fixedFields = (((((unsigned) classFormat) >> 11) & 192) + ((((unsigned) classFormat) >> 2) & 63)) - 1; l2: /* end fixedFieldsOf:format:length: */; if (!((index >= 1) && (index <= (totalLength - fixedFields)))) { successFlag = false; } if (successFlag) { /* begin subscript:with:format: */ if (fmt < 4) { return longAt(((((char *) array)) + 4) + (((index + fixedFields) - 1) << 2)); } if (fmt < 8) { return positive32BitIntegerFor(longAt(((((char *) array)) + 4) + (((index + fixedFields) - 1) << 2))); } else { return (((byteAt(((((char *) array)) + 4) + ((index + fixedFields) - 1))) << 1) | 1); } return null; } else { return 0; } } int stObjectatput(int array, int index, int value) { int hdr; int totalLength; int fmt; int fixedFields; int valueToStore; int sz; int classFormat; int class; int ccIndex; hdr = longAt(array); fmt = (((unsigned) hdr) >> 8) & 15; /* begin lengthOf:baseHeader:format: */ if ((hdr & 3) == 0) { sz = (longAt(array - 8)) & 4294967292U; } else { sz = hdr & 252; } if (fmt < 8) { totalLength = ((unsigned) (sz - 4)) >> 2; goto l1; } else { totalLength = (sz - 4) - (fmt & 3); goto l1; } l1: /* end lengthOf:baseHeader:format: */; /* begin fixedFieldsOf:format:length: */ if ((fmt > 3) || (fmt == 2)) { fixedFields = 0; goto l2; } if (fmt < 2) { fixedFields = totalLength; goto l2; } /* begin fetchClassOf: */ if ((array & 1)) { class = longAt(((((char *) specialObjectsOop)) + 4) + (5 << 2)); goto l3; } ccIndex = ((((unsigned) (longAt(array))) >> 12) & 31) - 1; if (ccIndex < 0) { class = (longAt(array - 4)) & 4294967292U; goto l3; } else { class = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + (ccIndex << 2)); goto l3; } l3: /* end fetchClassOf: */; classFormat = (longAt(((((char *) class)) + 4) + (2 << 2))) - 1; fixedFields = (((((unsigned) classFormat) >> 11) & 192) + ((((unsigned) classFormat) >> 2) & 63)) - 1; l2: /* end fixedFieldsOf:format:length: */; if (!((index >= 1) && (index <= (totalLength - fixedFields)))) { successFlag = false; } if (successFlag) { /* begin subscript:with:storing:format: */ if (fmt < 4) { /* begin storePointer:ofObject:withValue: */ if (array < youngStart) { possibleRootStoreIntovalue(array, value); } longAtput(((((char *) array)) + 4) + (((index + fixedFields) - 1) << 2), value); } else { if (fmt < 8) { valueToStore = positive32BitValueOf(value); if (successFlag) { longAtput(((((char *) array)) + 4) + (((index + fixedFields) - 1) << 2), valueToStore); } } else { if (!((value & 1))) { successFlag = false; } valueToStore = (value >> 1); if (!((valueToStore >= 0) && (valueToStore <= 255))) { successFlag = false; } if (successFlag) { byteAtput(((((char *) array)) + 4) + ((index + fixedFields) - 1), valueToStore); } } } } } int stSizeOf(int oop) { int hdr; int totalLength; int fmt; int fixedFields; int sz; int classFormat; int class; int ccIndex; hdr = longAt(oop); fmt = (((unsigned) hdr) >> 8) & 15; /* begin lengthOf:baseHeader:format: */ if ((hdr & 3) == 0) { sz = (longAt(oop - 8)) & 4294967292U; } else { sz = hdr & 252; } if (fmt < 8) { totalLength = ((unsigned) (sz - 4)) >> 2; goto l1; } else { totalLength = (sz - 4) - (fmt & 3); goto l1; } l1: /* end lengthOf:baseHeader:format: */; /* begin fixedFieldsOf:format:length: */ if ((fmt > 3) || (fmt == 2)) { fixedFields = 0; goto l2; } if (fmt < 2) { fixedFields = totalLength; goto l2; } /* begin fetchClassOf: */ if ((oop & 1)) { class = longAt(((((char *) specialObjectsOop)) + 4) + (5 << 2)); goto l3; } ccIndex = ((((unsigned) (longAt(oop))) >> 12) & 31) - 1; if (ccIndex < 0) { class = (longAt(oop - 4)) & 4294967292U; goto l3; } else { class = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (28 << 2))))) + 4) + (ccIndex << 2)); goto l3; } l3: /* end fetchClassOf: */; classFormat = (longAt(((((char *) class)) + 4) + (2 << 2))) - 1; fixedFields = (((((unsigned) classFormat) >> 11) & 192) + ((((unsigned) classFormat) >> 2) & 63)) - 1; l2: /* end fixedFieldsOf:format:length: */; return totalLength - fixedFields; } int stackIntegerValue(int offset) { int integerPointer; integerPointer = longAt(stackPointer - (offset * 4)); if ((integerPointer & 1)) { return (integerPointer >> 1); } else { primitiveFail(); return 0; } } int stackPointerIndex(void) { return ((unsigned) ((stackPointer - activeContext) - 4)) >> 2; } int stackTop(void) { return longAt(stackPointer); } int stackValue(int offset) { return longAt(stackPointer - (offset * 4)); } int startField(void) { int typeBits; int childType; child = longAt(field); typeBits = child & 3; if ((typeBits & 1) == 1) { field -= 4; return 1; } if (typeBits == 0) { longAtput(field, parentField); parentField = field; return 2; } if (typeBits == 2) { if ((child & 126976) != 0) { child = child & 4294967292U; /* begin rightType: */ if ((child & 252) == 0) { childType = 0; goto l1; } else { if ((child & 126976) == 0) { childType = 1; goto l1; } else { childType = 3; goto l1; } } l1: /* end rightType: */; longAtput(field, child | childType); return 3; } else { child = longAt(field - 4); child = child & 4294967292U; longAtput(field - 4, parentField); parentField = (field - 4) | 1; return 2; } } } int startObj(void) { int oop; int lastFieldOffset; int header; int methodHeader; int sz; int fmt; int header1; int type; oop = child; if (oop < youngStart) { field = oop; return 3; } header = longAt(oop); if ((header & 2147483648U) == 0) { header = header & 4294967292U; header = (header | 2147483648U) | 2; longAtput(oop, header); /* begin lastPointerOf: */ fmt = (((unsigned) (longAt(oop))) >> 8) & 15; if (fmt < 4) { /* begin sizeBitsOfSafe: */ header1 = longAt(oop); /* begin rightType: */ if ((header1 & 252) == 0) { type = 0; goto l2; } else { if ((header1 & 126976) == 0) { type = 1; goto l2; } else { type = 3; goto l2; } } l2: /* end rightType: */; if (type == 0) { sz = (longAt(oop - 8)) & 4294967292U; goto l3; } else { sz = header1 & 252; goto l3; } l3: /* end sizeBitsOfSafe: */; lastFieldOffset = sz - 4; goto l1; } if (fmt < 12) { lastFieldOffset = 0; goto l1; } methodHeader = longAt(oop + 4); lastFieldOffset = (((((unsigned) methodHeader) >> 10) & 255) * 4) + 4; l1: /* end lastPointerOf: */; field = oop + lastFieldOffset; return 1; } else { field = oop; return 3; } } int startOfMemory(void) { return (int) memory; } int stopReason(void) { return stopCode; } int storeByteofObjectwithValue(int byteIndex, int oop, int valueByte) { return byteAtput(((((char *) oop)) + 4) + byteIndex, valueByte); } int storeContextRegisters(int activeCntx) { longAtput(((((char *) activeCntx)) + 4) + (1 << 2), ((((instructionPointer - method) - (4 - 2)) << 1) | 1)); longAtput(((((char *) activeCntx)) + 4) + (2 << 2), (((((((unsigned) ((stackPointer - activeContext) - 4)) >> 2) - 6) + 1) << 1) | 1)); } int storeInstructionPointerValueinContext(int value, int contextPointer) { longAtput(((((char *) contextPointer)) + 4) + (1 << 2), ((value << 1) | 1)); } int storeIntegerofObjectwithValue(int fieldIndex, int objectPointer, int integerValue) { if ((integerValue ^ (integerValue << 1)) >= 0) { longAtput(((((char *) objectPointer)) + 4) + (fieldIndex << 2), ((integerValue << 1) | 1)); } else { primitiveFail(); } } int storePointerofObjectwithValue(int fieldIndex, int oop, int valuePointer) { if (oop < youngStart) { possibleRootStoreIntovalue(oop, valuePointer); } return longAtput(((((char *) oop)) + 4) + (fieldIndex << 2), valuePointer); } int storePointerUncheckedofObjectwithValue(int fieldIndex, int oop, int valuePointer) { return longAtput(((((char *) oop)) + 4) + (fieldIndex << 2), valuePointer); } int storeStackPointerValueinContext(int value, int contextPointer) { longAtput(((((char *) contextPointer)) + 4) + (2 << 2), ((value << 1) | 1)); } int storeWordofObjectwithValue(int fieldIndex, int oop, int valueWord) { return longAtput(((((char *) oop)) + 4) + (fieldIndex << 2), valueWord); } int subWordwith(int sourceWord, int destinationWord) { return sourceWord - destinationWord; } int subscriptwithformat(int array, int index, int fmt) { if (fmt < 4) { return longAt(((((char *) array)) + 4) + ((index - 1) << 2)); } if (fmt < 8) { return positive32BitIntegerFor(longAt(((((char *) array)) + 4) + ((index - 1) << 2))); } else { return (((byteAt(((((char *) array)) + 4) + (index - 1))) << 1) | 1); } } int subscriptwithstoringformat(int array, int index, int oopToStore, int fmt) { int valueToStore; if (fmt < 4) { /* begin storePointer:ofObject:withValue: */ if (array < youngStart) { possibleRootStoreIntovalue(array, oopToStore); } longAtput(((((char *) array)) + 4) + ((index - 1) << 2), oopToStore); } else { if (fmt < 8) { valueToStore = positive32BitValueOf(oopToStore); if (successFlag) { longAtput(((((char *) array)) + 4) + ((index - 1) << 2), valueToStore); } } else { if (!((oopToStore & 1))) { successFlag = false; } valueToStore = (oopToStore >> 1); if (!((valueToStore >= 0) && (valueToStore <= 255))) { successFlag = false; } if (successFlag) { byteAtput(((((char *) array)) + 4) + (index - 1), valueToStore); } } } } int success(int successValue) { successFlag = successValue && successFlag; } int sufficientSpaceAfterGC(int minFree) { incrementalGC(); if (((longAt(freeBlock)) & 536870908) < minFree) { if (signalLowSpace) { return false; } fullGC(); if (((longAt(freeBlock)) & 536870908) < (minFree + 15000)) { return false; } } return true; } int sufficientSpaceToAllocate(int bytes) { int minFree; minFree = (lowSpaceThreshold + bytes) + 4; if (((longAt(freeBlock)) & 536870908) >= minFree) { return true; } else { return sufficientSpaceAfterGC(minFree); } } int sufficientSpaceToInstantiateindexableSize(int classOop, int size) { int okay; int format; int minFree; int minFree1; format = (((unsigned) ((longAt(((((char *) classOop)) + 4) + (2 << 2))) - 1)) >> 8) & 15; if ((size > 0) && (format < 2)) { return false; } if (format < 8) { /* begin sufficientSpaceToAllocate: */ minFree = (lowSpaceThreshold + (2500 + (size * 4))) + 4; if (((longAt(freeBlock)) & 536870908) >= minFree) { okay = true; goto l1; } else { okay = sufficientSpaceAfterGC(minFree); goto l1; } l1: /* end sufficientSpaceToAllocate: */; } else { /* begin sufficientSpaceToAllocate: */ minFree1 = (lowSpaceThreshold + (2500 + size)) + 4; if (((longAt(freeBlock)) & 536870908) >= minFree1) { okay = true; goto l2; } else { okay = sufficientSpaceAfterGC(minFree1); goto l2; } l2: /* end sufficientSpaceToAllocate: */; } return okay; } int superclassOf(int classPointer) { return longAt(((((char *) classPointer)) + 4) + (0 << 2)); } int sweepPhase(void) { int entriesAvailable; int survivors; int firstFree; int oopHeader; int oop; int freeChunk; int oopHeaderType; int hdrBytes; int oopSize; int freeChunkSize; int extra; int chunk; int extra1; int type; int extra2; int type1; int extra3; entriesAvailable = fwdTableInit(); survivors = 0; freeChunk = null; firstFree = null; /* begin oopFromChunk: */ chunk = youngStart; /* begin extraHeaderBytes: */ type1 = (longAt(chunk)) & 3; if (type1 > 1) { extra3 = 0; } else { if (type1 == 1) { extra3 = 4; } else { extra3 = 8; } } extra1 = extra3; oop = chunk + extra1; while (oop < endOfMemory) { oopHeader = longAt(oop); oopHeaderType = oopHeader & 3; if (oopHeaderType == 3) { oopSize = oopHeader & 252; hdrBytes = 0; } else { if (oopHeaderType == 1) { oopSize = oopHeader & 252; hdrBytes = 4; } else { if (oopHeaderType == 0) { oopSize = (longAt(oop - 8)) & 4294967292U; hdrBytes = 8; } else { oopSize = oopHeader & 536870908; hdrBytes = 0; } } } if ((oopHeader & 2147483648U) == 0) { if (freeChunk != null) { freeChunkSize = (freeChunkSize + oopSize) + hdrBytes; } else { freeChunk = oop - hdrBytes; freeChunkSize = oopSize + (oop - freeChunk); if (firstFree == null) { firstFree = freeChunk; } } } else { longAtput(oop, oopHeader & 2147483647U); if (entriesAvailable > 0) { entriesAvailable -= 1; } else { firstFree = freeChunk; } if (freeChunk != null) { longAtput(freeChunk, (freeChunkSize & 536870908) | 2); } freeChunk = null; survivors += 1; } /* begin oopFromChunk: */ /* begin extraHeaderBytes: */ type = (longAt(oop + oopSize)) & 3; if (type > 1) { extra2 = 0; } else { if (type == 1) { extra2 = 4; } else { extra2 = 8; } } extra = extra2; oop = (oop + oopSize) + extra; } if (freeChunk != null) { longAtput(freeChunk, (freeChunkSize & 536870908) | 2); } if (!(oop == endOfMemory)) { error("sweep failed to find exact end of memory"); } if (firstFree == null) { error("expected to find at least one free object"); } else { compStart = firstFree; } if (!(displayBits == 0)) { oopHeader = longAt(displayBits); longAtput(displayBits, oopHeader & 2147483647U); } return survivors; } int synchronousSignal(int aSemaphore) { int excessSignals; if ((longAt(((((char *) aSemaphore)) + 4) + (0 << 2))) == nilObj) { excessSignals = fetchIntegerofObject(2, aSemaphore); /* begin storeInteger:ofObject:withValue: */ if (((excessSignals + 1) ^ ((excessSignals + 1) << 1)) >= 0) { longAtput(((((char *) aSemaphore)) + 4) + (2 << 2), (((excessSignals + 1) << 1) | 1)); } else { primitiveFail(); } } else { resume(removeFirstLinkOfList(aSemaphore)); } } int tallyIntoMapwith(int sourceWord, int destinationWord) { int mapIndex; int pixMask; int shiftWord; int i; int mask; int srcPix; int destPix; int d; int mask3; int srcPix1; int destPix1; int d1; int mask4; int srcPix2; int destPix2; int d2; if (colorMap == nilObj) { return destinationWord; } if (destPixSize < 16) { pixMask = (1 << destPixSize) - 1; shiftWord = destinationWord; for (i = 1; i <= pixPerWord; i += 1) { mapIndex = shiftWord & pixMask; longAtput(((((char *) colorMap)) + 4) + (mapIndex << 2), (longAt(((((char *) colorMap)) + 4) + (mapIndex << 2))) + 1); shiftWord = ((unsigned) shiftWord) >> destPixSize; } return destinationWord; } if (destPixSize == 16) { /* begin rgbMap:from:to: */ if ((d = cmBitsPerColor - 5) > 0) { mask = (1 << 5) - 1; srcPix = (destinationWord & 65535) << d; mask = mask << d; destPix = srcPix & mask; mask = mask << cmBitsPerColor; srcPix = srcPix << d; mapIndex = (destPix + (srcPix & mask)) + ((srcPix << d) & (mask << cmBitsPerColor)); goto l1; } else { if (d == 0) { mapIndex = destinationWord & 65535; goto l1; } if ((destinationWord & 65535) == 0) { mapIndex = destinationWord & 65535; goto l1; } d = 5 - cmBitsPerColor; mask = (1 << cmBitsPerColor) - 1; srcPix = ((unsigned) (destinationWord & 65535)) >> d; destPix = srcPix & mask; mask = mask << cmBitsPerColor; srcPix = ((unsigned) srcPix) >> d; destPix = (destPix + (srcPix & mask)) + ((((unsigned) srcPix) >> d) & (mask << cmBitsPerColor)); if (destPix == 0) { mapIndex = 1; goto l1; } mapIndex = destPix; goto l1; } l1: /* end rgbMap:from:to: */; longAtput(((((char *) colorMap)) + 4) + (mapIndex << 2), (longAt(((((char *) colorMap)) + 4) + (mapIndex << 2))) + 1); /* begin rgbMap:from:to: */ if ((d1 = cmBitsPerColor - 5) > 0) { mask3 = (1 << 5) - 1; srcPix1 = (((unsigned) destinationWord) >> 16) << d1; mask3 = mask3 << d1; destPix1 = srcPix1 & mask3; mask3 = mask3 << cmBitsPerColor; srcPix1 = srcPix1 << d1; mapIndex = (destPix1 + (srcPix1 & mask3)) + ((srcPix1 << d1) & (mask3 << cmBitsPerColor)); goto l2; } else { if (d1 == 0) { mapIndex = ((unsigned) destinationWord) >> 16; goto l2; } if ((((unsigned) destinationWord) >> 16) == 0) { mapIndex = ((unsigned) destinationWord) >> 16; goto l2; } d1 = 5 - cmBitsPerColor; mask3 = (1 << cmBitsPerColor) - 1; srcPix1 = ((unsigned) (((unsigned) destinationWord) >> 16)) >> d1; destPix1 = srcPix1 & mask3; mask3 = mask3 << cmBitsPerColor; srcPix1 = ((unsigned) srcPix1) >> d1; destPix1 = (destPix1 + (srcPix1 & mask3)) + ((((unsigned) srcPix1) >> d1) & (mask3 << cmBitsPerColor)); if (destPix1 == 0) { mapIndex = 1; goto l2; } mapIndex = destPix1; goto l2; } l2: /* end rgbMap:from:to: */; longAtput(((((char *) colorMap)) + 4) + (mapIndex << 2), (longAt(((((char *) colorMap)) + 4) + (mapIndex << 2))) + 1); } else { /* begin rgbMap:from:to: */ if ((d2 = cmBitsPerColor - 8) > 0) { mask4 = (1 << 8) - 1; srcPix2 = destinationWord << d2; mask4 = mask4 << d2; destPix2 = srcPix2 & mask4; mask4 = mask4 << cmBitsPerColor; srcPix2 = srcPix2 << d2; mapIndex = (destPix2 + (srcPix2 & mask4)) + ((srcPix2 << d2) & (mask4 << cmBitsPerColor)); goto l3; } else { if (d2 == 0) { mapIndex = destinationWord; goto l3; } if (destinationWord == 0) { mapIndex = destinationWord; goto l3; } d2 = 8 - cmBitsPerColor; mask4 = (1 << cmBitsPerColor) - 1; srcPix2 = ((unsigned) destinationWord) >> d2; destPix2 = srcPix2 & mask4; mask4 = mask4 << cmBitsPerColor; srcPix2 = ((unsigned) srcPix2) >> d2; destPix2 = (destPix2 + (srcPix2 & mask4)) + ((((unsigned) srcPix2) >> d2) & (mask4 << cmBitsPerColor)); if (destPix2 == 0) { mapIndex = 1; goto l3; } mapIndex = destPix2; goto l3; } l3: /* end rgbMap:from:to: */; longAtput(((((char *) colorMap)) + 4) + (mapIndex << 2), (longAt(((((char *) colorMap)) + 4) + (mapIndex << 2))) + 1); } return destinationWord; } int targetForm(void) { return destForm; } int temporary(int offset) { return longAt(((((char *) theHomeContext)) + 4) + ((offset + 6) << 2)); } int transferfromIndexofObjecttoIndexofObject(int count, int firstFrom, int fromOop, int firstTo, int toOop) { int toIndex; int fromIndex; int lastFrom; fromIndex = fromOop + (firstFrom * 4); toIndex = toOop + (firstTo * 4); lastFrom = fromIndex + (count * 4); while (fromIndex < lastFrom) { fromIndex += 4; toIndex += 4; longAtput(toIndex, longAt(fromIndex)); } } int transferTo(int newProc) { int sched; int oldProc; int valuePointer; int tmp; sched = longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (3 << 2))))) + 4) + (1 << 2)); oldProc = longAt(((((char *) sched)) + 4) + (1 << 2)); /* begin storePointer:ofObject:withValue: */ valuePointer = activeContext; if (oldProc < youngStart) { possibleRootStoreIntovalue(oldProc, valuePointer); } longAtput(((((char *) oldProc)) + 4) + (1 << 2), valuePointer); /* begin storePointer:ofObject:withValue: */ if (sched < youngStart) { possibleRootStoreIntovalue(sched, newProc); } longAtput(((((char *) sched)) + 4) + (1 << 2), newProc); /* begin newActiveContext: */ /* begin storeContextRegisters: */ longAtput(((((char *) activeContext)) + 4) + (1 << 2), ((((instructionPointer - method) - (4 - 2)) << 1) | 1)); longAtput(((((char *) activeContext)) + 4) + (2 << 2), (((((((unsigned) ((stackPointer - activeContext) - 4)) >> 2) - 6) + 1) << 1) | 1)); if ((longAt(((((char *) newProc)) + 4) + (1 << 2))) < youngStart) { beRootIfOld(longAt(((((char *) newProc)) + 4) + (1 << 2))); } activeContext = longAt(((((char *) newProc)) + 4) + (1 << 2)); /* begin fetchContextRegisters: */ tmp = longAt(((((char *) (longAt(((((char *) newProc)) + 4) + (1 << 2))))) + 4) + (3 << 2)); if ((tmp & 1)) { tmp = longAt(((((char *) (longAt(((((char *) newProc)) + 4) + (1 << 2))))) + 4) + (5 << 2)); if (tmp < youngStart) { beRootIfOld(tmp); } } else { tmp = longAt(((((char *) newProc)) + 4) + (1 << 2)); } theHomeContext = tmp; receiver = longAt(((((char *) tmp)) + 4) + (5 << 2)); method = longAt(((((char *) tmp)) + 4) + (3 << 2)); tmp = ((longAt(((((char *) (longAt(((((char *) newProc)) + 4) + (1 << 2))))) + 4) + (1 << 2))) >> 1); instructionPointer = ((method + tmp) + 4) - 2; tmp = ((longAt(((((char *) (longAt(((((char *) newProc)) + 4) + (1 << 2))))) + 4) + (2 << 2))) >> 1); stackPointer = ((longAt(((((char *) newProc)) + 4) + (1 << 2))) + 4) + (((6 + tmp) - 1) * 4); reclaimableContextCount = 0; } int unPop(int nItems) { stackPointer += nItems * 4; } int unknownBytecode(void) { error("Unknown bytecode"); } int upward(void) { int header; int type; if ((parentField & 1) == 1) { if (parentField == 3) { header = (longAt(field)) & 4294967292U; /* begin rightType: */ if ((header & 252) == 0) { type = 0; goto l1; } else { if ((header & 126976) == 0) { type = 1; goto l1; } else { type = 3; goto l1; } } l1: /* end rightType: */; longAtput(field, header + type); return 4; } else { child = field; field = parentField - 1; parentField = longAt(field); header = longAt(field + 4); /* begin rightType: */ if ((header & 252) == 0) { type = 0; goto l2; } else { if ((header & 126976) == 0) { type = 1; goto l2; } else { type = 3; goto l2; } } l2: /* end rightType: */; longAtput(field, child + type); field += 4; header = header & 4294967292U; longAtput(field, header + type); return 3; } } else { child = field; field = parentField; parentField = longAt(field); longAtput(field, child); field -= 4; return 1; } } int wakeHighestPriority(void) { int schedLists; int processList; int p; int sz; int header; schedLists = longAt(((((char *) (longAt(((((char *) (longAt(((((char *) specialObjectsOop)) + 4) + (3 << 2))))) + 4) + (1 << 2))))) + 4) + (0 << 2)); /* begin fetchWordLengthOf: */ /* begin sizeBitsOf: */ header = longAt(schedLists); if ((header & 3) == 0) { sz = (longAt(schedLists - 8)) & 4294967292U; goto l1; } else { sz = header & 252; goto l1; } l1: /* end sizeBitsOf: */; p = ((unsigned) (sz - 4)) >> 2; p -= 1; processList = longAt(((((char *) schedLists)) + 4) + (p << 2)); while ((longAt(((((char *) processList)) + 4) + (0 << 2))) == nilObj) { p -= 1; if (p < 0) { error("scheduler could not find a runnable process"); } processList = longAt(((((char *) schedLists)) + 4) + (p << 2)); } return removeFirstLinkOfList(processList); } int warpBits(void) { int ns; int skewWord; int mergeWord; int destMask; int startBits; int yDelta; int smoothingCount; int sourceMapOop; int t; int i; int nSteps; int word; int halftoneWord; int deltaP12x; int deltaP12y; int deltaP43x; int deltaP43y; int pAx; int pAy; int pBx; int xDelta; int pBy; int integerPointer; ns = noSource; noSource = true; clipRange(); noSource = ns; if (noSource || ((bbW <= 0) || (bbH <= 0))) { affectedL = affectedR = affectedT = affectedB = 0; return null; } destMaskAndPointerInit(); /* begin warpLoop */ if (!((fetchWordLengthOf(bitBltOop)) >= (15 + 12))) { primitiveFail(); goto l2; } nSteps = height - 1; if (nSteps <= 0) { nSteps = 1; } pAx = fetchIntegerOrTruncFloatofObject(15, bitBltOop); t = fetchIntegerOrTruncFloatofObject(15 + 3, bitBltOop); deltaP12x = deltaFromtonSteps(pAx, t, nSteps); if (deltaP12x < 0) { pAx = t - (nSteps * deltaP12x); } pAy = fetchIntegerOrTruncFloatofObject(15 + 1, bitBltOop); t = fetchIntegerOrTruncFloatofObject(15 + 4, bitBltOop); deltaP12y = deltaFromtonSteps(pAy, t, nSteps); if (deltaP12y < 0) { pAy = t - (nSteps * deltaP12y); } pBx = fetchIntegerOrTruncFloatofObject(15 + 9, bitBltOop); t = fetchIntegerOrTruncFloatofObject(15 + 6, bitBltOop); deltaP43x = deltaFromtonSteps(pBx, t, nSteps); if (deltaP43x < 0) { pBx = t - (nSteps * deltaP43x); } pBy = fetchIntegerOrTruncFloatofObject(15 + 10, bitBltOop); t = fetchIntegerOrTruncFloatofObject(15 + 7, bitBltOop); deltaP43y = deltaFromtonSteps(pBy, t, nSteps); if (deltaP43y < 0) { pBy = t - (nSteps * deltaP43y); } if (!successFlag) { goto l2; } if (argumentCount == 2) { /* begin stackIntegerValue: */ integerPointer = longAt(stackPointer - (1 * 4)); if ((integerPointer & 1)) { smoothingCount = (integerPointer >> 1); goto l1; } else { primitiveFail(); smoothingCount = 0; goto l1; } l1: /* end stackIntegerValue: */; sourceMapOop = longAt(stackPointer - (0 * 4)); if (sourceMapOop == nilObj) { if (sourcePixSize < 16) { primitiveFail(); goto l2; } } else { if ((fetchWordLengthOf(sourceMapOop)) < (1 << sourcePixSize)) { primitiveFail(); goto l2; } } } else { smoothingCount = 1; sourceMapOop = nilObj; } startBits = pixPerWord - (dx & (pixPerWord - 1)); nSteps = width - 1; if (nSteps <= 0) { nSteps = 1; } for (i = destY; i <= (clipY - 1); i += 1) { pAx += deltaP12x; pAy += deltaP12y; pBx += deltaP43x; pBy += deltaP43y; } for (i = 1; i <= bbH; i += 1) { xDelta = deltaFromtonSteps(pAx, pBx, nSteps); if (xDelta >= 0) { sx = pAx; } else { sx = pBx - (nSteps * xDelta); } yDelta = deltaFromtonSteps(pAy, pBy, nSteps); if (yDelta >= 0) { sy = pAy; } else { sy = pBy - (nSteps * yDelta); } for (word = destX; word <= (clipX - 1); word += 1) { sx += xDelta; sy += yDelta; } if (noHalftone) { halftoneWord = 4294967295U; } else { halftoneWord = longAt(halftoneBase + ((((dy + i) - 1) % halftoneHeight) * 4)); } destMask = mask1; if (bbW < startBits) { skewWord = warpSourcePixelsxDeltahyDeltahxDeltavyDeltavsmoothingsourceMap(bbW, xDelta, yDelta, deltaP12x, deltaP12y, smoothingCount, sourceMapOop); skewWord = ((((startBits - bbW) * destPixSize) < 0) ? ((unsigned) skewWord >> -((startBits - bbW) * destPixSize)) : ((unsigned) skewWord << ((startBits - bbW) * destPixSize))); } else { skewWord = warpSourcePixelsxDeltahyDeltahxDeltavyDeltavsmoothingsourceMap(startBits, xDelta, yDelta, deltaP12x, deltaP12y, smoothingCount, sourceMapOop); } for (word = 1; word <= nWords; word += 1) { mergeWord = mergewith(skewWord & halftoneWord, (longAt(destIndex)) & destMask); longAtput(destIndex, (destMask & mergeWord) | ((~destMask) & (longAt(destIndex)))); destIndex += 4; if (word >= (nWords - 1)) { if (!(word == nWords)) { destMask = mask2; skewWord = warpSourcePixelsxDeltahyDeltahxDeltavyDeltavsmoothingsourceMap(pixPerWord, xDelta, yDelta, deltaP12x, deltaP12y, smoothingCount, sourceMapOop); } } else { destMask = 4294967295U; skewWord = warpSourcePixelsxDeltahyDeltahxDeltavyDeltavsmoothingsourceMap(pixPerWord, xDelta, yDelta, deltaP12x, deltaP12y, smoothingCount, sourceMapOop); } } pAx += deltaP12x; pAy += deltaP12y; pBx += deltaP43x; pBy += deltaP43y; destIndex += destDelta; } l2: /* end warpLoop */; if (hDir > 0) { affectedL = dx; affectedR = dx + bbW; } else { affectedL = (dx - bbW) + 1; affectedR = dx + 1; } if (vDir > 0) { affectedT = dy; affectedB = dy + bbH; } else { affectedT = (dy - bbH) + 1; affectedB = dy + 1; } } int warpLoop(void) { int skewWord; int mergeWord; int destMask; int startBits; int yDelta; int smoothingCount; int sourceMapOop; int t; int i; int nSteps; int word; int halftoneWord; int deltaP12x; int deltaP12y; int deltaP43x; int deltaP43y; int pAx; int pAy; int pBx; int xDelta; int pBy; int integerPointer; if (!((fetchWordLengthOf(bitBltOop)) >= (15 + 12))) { return primitiveFail(); } nSteps = height - 1; if (nSteps <= 0) { nSteps = 1; } pAx = fetchIntegerOrTruncFloatofObject(15, bitBltOop); t = fetchIntegerOrTruncFloatofObject(15 + 3, bitBltOop); deltaP12x = deltaFromtonSteps(pAx, t, nSteps); if (deltaP12x < 0) { pAx = t - (nSteps * deltaP12x); } pAy = fetchIntegerOrTruncFloatofObject(15 + 1, bitBltOop); t = fetchIntegerOrTruncFloatofObject(15 + 4, bitBltOop); deltaP12y = deltaFromtonSteps(pAy, t, nSteps); if (deltaP12y < 0) { pAy = t - (nSteps * deltaP12y); } pBx = fetchIntegerOrTruncFloatofObject(15 + 9, bitBltOop); t = fetchIntegerOrTruncFloatofObject(15 + 6, bitBltOop); deltaP43x = deltaFromtonSteps(pBx, t, nSteps); if (deltaP43x < 0) { pBx = t - (nSteps * deltaP43x); } pBy = fetchIntegerOrTruncFloatofObject(15 + 10, bitBltOop); t = fetchIntegerOrTruncFloatofObject(15 + 7, bitBltOop); deltaP43y = deltaFromtonSteps(pBy, t, nSteps); if (deltaP43y < 0) { pBy = t - (nSteps * deltaP43y); } if (!successFlag) { return false; } if (argumentCount == 2) { /* begin stackIntegerValue: */ integerPointer = longAt(stackPointer - (1 * 4)); if ((integerPointer & 1)) { smoothingCount = (integerPointer >> 1); goto l1; } else { primitiveFail(); smoothingCount = 0; goto l1; } l1: /* end stackIntegerValue: */; sourceMapOop = longAt(stackPointer - (0 * 4)); if (sourceMapOop == nilObj) { if (sourcePixSize < 16) { return primitiveFail(); } } else { if ((fetchWordLengthOf(sourceMapOop)) < (1 << sourcePixSize)) { return primitiveFail(); } } } else { smoothingCount = 1; sourceMapOop = nilObj; } startBits = pixPerWord - (dx & (pixPerWord - 1)); nSteps = width - 1; if (nSteps <= 0) { nSteps = 1; } for (i = destY; i <= (clipY - 1); i += 1) { pAx += deltaP12x; pAy += deltaP12y; pBx += deltaP43x; pBy += deltaP43y; } for (i = 1; i <= bbH; i += 1) { xDelta = deltaFromtonSteps(pAx, pBx, nSteps); if (xDelta >= 0) { sx = pAx; } else { sx = pBx - (nSteps * xDelta); } yDelta = deltaFromtonSteps(pAy, pBy, nSteps); if (yDelta >= 0) { sy = pAy; } else { sy = pBy - (nSteps * yDelta); } for (word = destX; word <= (clipX - 1); word += 1) { sx += xDelta; sy += yDelta; } if (noHalftone) { halftoneWord = 4294967295U; } else { halftoneWord = longAt(halftoneBase + ((((dy + i) - 1) % halftoneHeight) * 4)); } destMask = mask1; if (bbW < startBits) { skewWord = warpSourcePixelsxDeltahyDeltahxDeltavyDeltavsmoothingsourceMap(bbW, xDelta, yDelta, deltaP12x, deltaP12y, smoothingCount, sourceMapOop); skewWord = ((((startBits - bbW) * destPixSize) < 0) ? ((unsigned) skewWord >> -((startBits - bbW) * destPixSize)) : ((unsigned) skewWord << ((startBits - bbW) * destPixSize))); } else { skewWord = warpSourcePixelsxDeltahyDeltahxDeltavyDeltavsmoothingsourceMap(startBits, xDelta, yDelta, deltaP12x, deltaP12y, smoothingCount, sourceMapOop); } for (word = 1; word <= nWords; word += 1) { mergeWord = mergewith(skewWord & halftoneWord, (longAt(destIndex)) & destMask); longAtput(destIndex, (destMask & mergeWord) | ((~destMask) & (longAt(destIndex)))); destIndex += 4; if (word >= (nWords - 1)) { if (!(word == nWords)) { destMask = mask2; skewWord = warpSourcePixelsxDeltahyDeltahxDeltavyDeltavsmoothingsourceMap(pixPerWord, xDelta, yDelta, deltaP12x, deltaP12y, smoothingCount, sourceMapOop); } } else { destMask = 4294967295U; skewWord = warpSourcePixelsxDeltahyDeltahxDeltavyDeltavsmoothingsourceMap(pixPerWord, xDelta, yDelta, deltaP12x, deltaP12y, smoothingCount, sourceMapOop); } } pAx += deltaP12x; pAy += deltaP12y; pBx += deltaP43x; pBy += deltaP43y; destIndex += destDelta; } } int warpSourcePixelsxDeltahyDeltahxDeltavyDeltavsmoothingsourceMap(int nPix, int xDeltah, int yDeltah, int xDeltav, int yDeltav, int n, int sourceMapOop) { int destWord; int sourcePix; int sourcePixMask; int destPixMask; int srcPixPerWord; int destPix; int i; int mask; int srcPix; int destPix1; int d; int mask3; int srcPix1; int destPix2; int d1; int mask4; int srcPix2; int destPix3; int d2; int mask5; int srcPix3; int destPix4; int d3; if (sourcePixSize == 32) { sourcePixMask = -1; } else { sourcePixMask = (1 << sourcePixSize) - 1; } if (destPixSize == 32) { destPixMask = -1; } else { destPixMask = (1 << destPixSize) - 1; } srcPixPerWord = 32 / sourcePixSize; destWord = 0; for (i = 1; i <= nPix; i += 1) { if (n > 1) { destPix = (smoothPixatXfyfdxhdyhdxvdyvpixPerWordpixelMasksourceMap(n, sx, sy, xDeltah / n, yDeltah / n, xDeltav / n, yDeltav / n, srcPixPerWord, sourcePixMask, sourceMapOop)) & destPixMask; } else { sourcePix = (sourcePixAtXypixPerWord(((unsigned) sx) >> 14, ((unsigned) sy) >> 14, srcPixPerWord)) & sourcePixMask; if (colorMap == nilObj) { if (destPixSize == sourcePixSize) { destPix = sourcePix; } else { if (sourcePixSize >= 16) { if (sourcePixSize == 16) { /* begin rgbMap:from:to: */ if ((d = 8 - 5) > 0) { mask = (1 << 5) - 1; srcPix = sourcePix << d; mask = mask << d; destPix1 = srcPix & mask; mask = mask << 8; srcPix = srcPix << d; destPix = (destPix1 + (srcPix & mask)) + ((srcPix << d) & (mask << 8)); goto l1; } else { if (d == 0) { destPix = sourcePix; goto l1; } if (sourcePix == 0) { destPix = sourcePix; goto l1; } d = 5 - 8; mask = (1 << 8) - 1; srcPix = ((unsigned) sourcePix) >> d; destPix1 = srcPix & mask; mask = mask << 8; srcPix = ((unsigned) srcPix) >> d; destPix1 = (destPix1 + (srcPix & mask)) + ((((unsigned) srcPix) >> d) & (mask << 8)); if (destPix1 == 0) { destPix = 1; goto l1; } destPix = destPix1; goto l1; } l1: /* end rgbMap:from:to: */; } else { /* begin rgbMap:from:to: */ if ((d1 = 5 - 8) > 0) { mask3 = (1 << 8) - 1; srcPix1 = sourcePix << d1; mask3 = mask3 << d1; destPix2 = srcPix1 & mask3; mask3 = mask3 << 5; srcPix1 = srcPix1 << d1; destPix = (destPix2 + (srcPix1 & mask3)) + ((srcPix1 << d1) & (mask3 << 5)); goto l2; } else { if (d1 == 0) { destPix = sourcePix; goto l2; } if (sourcePix == 0) { destPix = sourcePix; goto l2; } d1 = 8 - 5; mask3 = (1 << 5) - 1; srcPix1 = ((unsigned) sourcePix) >> d1; destPix2 = srcPix1 & mask3; mask3 = mask3 << 5; srcPix1 = ((unsigned) srcPix1) >> d1; destPix2 = (destPix2 + (srcPix1 & mask3)) + ((((unsigned) srcPix1) >> d1) & (mask3 << 5)); if (destPix2 == 0) { destPix = 1; goto l2; } destPix = destPix2; goto l2; } l2: /* end rgbMap:from:to: */; } } else { destPix = sourcePix & destPixMask; } } } else { if (sourcePixSize >= 16) { if (sourcePixSize == 16) { /* begin rgbMap:from:to: */ if ((d2 = cmBitsPerColor - 5) > 0) { mask4 = (1 << 5) - 1; srcPix2 = sourcePix << d2; mask4 = mask4 << d2; destPix3 = srcPix2 & mask4; mask4 = mask4 << cmBitsPerColor; srcPix2 = srcPix2 << d2; sourcePix = (destPix3 + (srcPix2 & mask4)) + ((srcPix2 << d2) & (mask4 << cmBitsPerColor)); goto l3; } else { if (d2 == 0) { sourcePix = sourcePix; goto l3; } if (sourcePix == 0) { sourcePix = sourcePix; goto l3; } d2 = 5 - cmBitsPerColor; mask4 = (1 << cmBitsPerColor) - 1; srcPix2 = ((unsigned) sourcePix) >> d2; destPix3 = srcPix2 & mask4; mask4 = mask4 << cmBitsPerColor; srcPix2 = ((unsigned) srcPix2) >> d2; destPix3 = (destPix3 + (srcPix2 & mask4)) + ((((unsigned) srcPix2) >> d2) & (mask4 << cmBitsPerColor)); if (destPix3 == 0) { sourcePix = 1; goto l3; } sourcePix = destPix3; goto l3; } l3: /* end rgbMap:from:to: */; } else { /* begin rgbMap:from:to: */ if ((d3 = cmBitsPerColor - 8) > 0) { mask5 = (1 << 8) - 1; srcPix3 = sourcePix << d3; mask5 = mask5 << d3; destPix4 = srcPix3 & mask5; mask5 = mask5 << cmBitsPerColor; srcPix3 = srcPix3 << d3; sourcePix = (destPix4 + (srcPix3 & mask5)) + ((srcPix3 << d3) & (mask5 << cmBitsPerColor)); goto l4; } else { if (d3 == 0) { sourcePix = sourcePix; goto l4; } if (sourcePix == 0) { sourcePix = sourcePix; goto l4; } d3 = 8 - cmBitsPerColor; mask5 = (1 << cmBitsPerColor) - 1; srcPix3 = ((unsigned) sourcePix) >> d3; destPix4 = srcPix3 & mask5; mask5 = mask5 << cmBitsPerColor; srcPix3 = ((unsigned) srcPix3) >> d3; destPix4 = (destPix4 + (srcPix3 & mask5)) + ((((unsigned) srcPix3) >> d3) & (mask5 << cmBitsPerColor)); if (destPix4 == 0) { sourcePix = 1; goto l4; } sourcePix = destPix4; goto l4; } l4: /* end rgbMap:from:to: */; } } destPix = (longAt(((((char *) colorMap)) + 4) + (sourcePix << 2))) & destPixMask; } } destWord = (destWord << destPixSize) | destPix; sx += xDeltah; sy += yDeltah; } return destWord; } int writeImageFile(int imageBytes) { sqImageFile f; int i; int bytesWritten; int headerStart; int headerSize; headerStart = 0; headerSize = 64; f = sqImageFileOpen(imageName, "wb"); if (f == null) { /* begin success: */ successFlag = false && successFlag; return null; } /* Note: on Unix systems one could put an exec command here, padded to 512 bytes */; sqImageFileSeek(f, headerStart); putLongtoFile(6502, f); putLongtoFile(headerSize, f); putLongtoFile(imageBytes, f); putLongtoFile(startOfMemory(), f); putLongtoFile(specialObjectsOop, f); putLongtoFile(lastHash, f); putLongtoFile(ioScreenSize(), f); putLongtoFile(fullScreenFlag, f); for (i = 1; i <= 8; i += 1) { putLongtoFile(0, f); } if (!(successFlag)) { sqImageFileClose(f); return null; } sqImageFileSeek(f, headerStart + headerSize); bytesWritten = sqImageFileWrite(memory, sizeof(unsigned char), imageBytes, f); /* begin success: */ successFlag = (bytesWritten == imageBytes) && successFlag; sqImageFileClose(f); dir_SetMacFileTypeAndCreator(imageName, strlen(imageName), "STim", "FAST"); }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.