Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2865.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.2865
Author: eem
Time: 30 October 2020, 7:58:58.320942 am
UUID: f9e6957e-d20a-47ba-b579-29e37af6cef3
Ancestors: VMMaker.oscog-eem.2864
Get the CoInterpreterMT to simulate. Refactor _setjmp:/_longjmp:_: for the added use for reentering the thread scheduling loop.
=============== Diff against VMMaker.oscog-eem.2864 ===============
Item was changed:
----- Method: CoInterpreter>>_longjmp:_: (in category 'cog jit support') -----
_longjmp: aJumpBuf _: returnValue
"Hack simulation of _setjmp/_longjmp, intended to invoke the most minimal setjmp/longjmp
pair available on the platform; no saving/restoring signal masks, no stack unwinding, etc.
Signal the exception that simulates a longjmp back to the interpreter."
<doNotGenerate>
+ self halt: 'This should not be encountered now we use ceInvokeInterpreter!!!!'!
- self halt: 'This should not be encountered now we use ceInvokeInterpreter!!!!'.
- (aJumpBuf == reenterInterpreter
- and: [returnValue ~= 2 "2 == returnToThreadSchedulingLoopVia:"]) ifTrue:
- [self assert: (self isOnRumpCStack: cogit processor sp).
- self assertValidExecutionPointe: instructionPointer r: framePointer s: stackPointer imbar: true line: nil].
- aJumpBuf returnValue: returnValue; signal!
Item was changed:
CoInterpreterPrimitives subclass: #CoInterpreterMT
+ instanceVariableNames: 'cogThreadManager checkThreadActivation maxWaitingPriority foreignCallbackPriority deferThreadSwitch disowningVMThread disownCount foreignCallbackProcessSlot willNotThreadWarnCount activeProcessAffined relinquishing processHasThreadId noThreadingOfGUIThread reenterThreadSchedulingLoop'
- instanceVariableNames: 'cogThreadManager checkThreadActivation maxWaitingPriority foreignCallbackPriority deferThreadSwitch disowningVMThread disownCount foreignCallbackProcessSlot willNotThreadWarnCount activeProcessAffined relinquishing processHasThreadId noThreadingOfGUIThread'
classVariableNames: 'DisownFlagsShift DisownVMForProcessorRelinquish LockGUIThreadFlag LockGUIThreadShift OwnVMForeignThreadFlag ProcessUnaffinedOnDisown ReturnToThreadSchedulingLoop VMAlreadyOwnedHenceDoNotDisown'
poolDictionaries: 'VMThreadingConstants'
category: 'VMMaker-Multithreading'!
Item was added:
+ ----- Method: CoInterpreterMT>>_longjmp:_: (in category 'cog jit support') -----
+ _longjmp: aJumpBuf _: returnValue
+ "Hack simulation of _setjmp/_longjmp, intended to invoke the most minimal setjmp/longjmp
+ pair available on the platform; no saving/restoring signal masks, no stack unwinding, etc.
+ Signal the exception that simulates a longjmp back to the interpreter."
+ <doNotGenerate>
+ self assert: aJumpBuf == reenterThreadSchedulingLoop.
+ aJumpBuf returnValue: returnValue; signal!
Item was changed:
----- Method: CoInterpreterMT>>initializeInterpreter: (in category 'initialization') -----
initializeInterpreter: bytesToShift
super initializeInterpreter: bytesToShift.
foreignCallbackProcessSlot := (objectMemory lengthOf: objectMemory specialObjectsOop) > ForeignCallbackProcess
ifTrue: [ForeignCallbackProcess]
+ ifFalse: [NilObject].
+ self cCode: '' inSmalltalk:
+ [reenterThreadSchedulingLoop := ReenterThreadSchedulingLoop new].
+ !
- ifFalse: [NilObject]!
Item was added:
+ ----- Method: CoInterpreterMT>>initializeProcessorStackForSimulation: (in category 'initialization') -----
+ initializeProcessorStackForSimulation: vmThread
+ <inline: #always>
+ self cCode: [] inSmalltalk:
+ [| range |
+ range := self cStackRangeForThreadIndex: vmThread index.
+ cogit processor
+ setFramePointer: range last
+ stackPointer: range last - 32]!
Item was changed:
----- Method: CoInterpreterMT>>mapInterpreterOops (in category 'object memory support') -----
mapInterpreterOops
"Map all oops in the interpreter's state to their new values
during garbage collection or a become: operation."
"Assume: All traced variables contain valid oops."
<var: #vmThread type: #'CogVMThread *'>
super mapInterpreterOops.
"Per-thread state; trace each thread's own newMethod and stack of awol processes."
1 to: cogThreadManager getNumThreads do:
[:i| | vmThread |
vmThread := cogThreadManager vmThreadAt: i.
vmThread state ifNotNil:
[(vmThread newMethodOrNull notNil
and: [objectMemory shouldRemapOop: vmThread newMethodOrNull]) ifTrue:
[vmThread newMethodOrNull: (objectMemory remapObj: vmThread newMethodOrNull)].
0 to: vmThread awolProcIndex - 1 do:
[:j|
(objectMemory shouldRemapOop: (vmThread awolProcesses at: j)) ifTrue:
+ [vmThread awolProcesses at: j put: (objectMemory remapObj: (vmThread awolProcesses at: j))]]]]!
- [vmThread awolProcesses at: j put: (objectMemory remap: (vmThread awolProcesses at: j))]]]]!
Item was changed:
----- Method: CoInterpreterMT>>returnToSchedulingLoopAndReleaseVMOrWakeThread:source: (in category 'process primitive support') -----
returnToSchedulingLoopAndReleaseVMOrWakeThread: vmThread source: source
<var: #vmThread type: #'CogVMThread *'>
<inline: false>
self cCode:
[self flag: 'this is just for debugging. Note the current C stack pointers'.
cogThreadManager currentVMThread
cStackPointer: CStackPointer;
cFramePointer: CFramePointer]
inSmalltalk:
[| range |
range := self cStackRangeForThreadIndex: cogThreadManager getVMOwner.
self assert: (range includes: CStackPointer).
self assert: (range includes: CFramePointer)].
self recordThreadSwitchTo: (vmThread ifNotNil: [vmThread index] ifNil: [0]) source: source.
vmThread
ifNotNil: [cogThreadManager wakeVMThreadFor: vmThread index]
ifNil: [cogThreadManager releaseVM].
+ "I am not frightened of flying.
+ Any value will do. I don't mind.
+ Why should I be frightened of flying?
+ There's no reason for it."
+ self _longjmp: reenterThreadSchedulingLoop _: 1 !
- "2 implies returning to the threadSchedulingLoop."
- self shouldBeImplemented.
- "was: self _longjmp: savedReenterInterpreter _: ReturnToThreadSchedulingLoop.
- But now we have ceInvokeInterpret, not reenterInterpreter, so we have to fugure out a new way in..."!
Item was changed:
----- Method: CoInterpreterMT>>threadSchedulingLoop: (in category 'vm scheduling') -----
threadSchedulingLoop: vmThread
"Enter a loop attempting to run the VM with the highest priority process and
blocking on the thread's OS semaphore when unable to run that process.
+ This version is for simulation only, simulating the longjmp back to the real
+ threadSchedulingLoopImplementation: through exception handling."
+
+ <cmacro: '(vmThread) threadSchedulingLoopImplementation(vmThread)'>
+ self initializeProcessorStackForSimulation: vmThread.
+ [([self threadSchedulingLoopImplementation: vmThread]
+ on: ReenterThreadSchedulingLoop
+ do: [:ex| ex return: ex returnValue]) = ReenterThreadSchedulingLoop] whileTrue!
- We will return to this via threadSwitchIfNecessary:from: which is called in the
- middle of transferTo:from: once the active process has been stored in the scheduler."
- <var: #vmThread type: #'CogVMThread *'>
- | attemptToRun |
- <inline: false>
- [self assert: vmThread state = CTMAssignableOrInVM.
- attemptToRun := false.
- (cogThreadManager getVMOwner = vmThread index)
- ifTrue: [attemptToRun := true]
- ifFalse:
- [(cogit tryLockVMToIndex: vmThread index) ifTrue:
- ["If relinquishing is true, then primitiveRelinquishProcessor has disowned the
- VM and only a returning call or callback should take ownership in that case."
- relinquishing
- ifTrue: [cogThreadManager releaseVM]
- ifFalse: [attemptToRun := true]]].
- attemptToRun ifTrue:
- [self tryToExecuteSmalltalk: vmThread].
- (cogThreadManager testVMOwnerIs: vmThread index) ifFalse:
- [cogThreadManager waitForWork: vmThread].
- true] whileTrue!
Item was added:
+ ----- Method: CoInterpreterMT>>threadSchedulingLoopImplementation: (in category 'vm scheduling') -----
+ threadSchedulingLoopImplementation: vmThread
+ "Enter a loop attempting to run the VM with the highest priority process and
+ blocking on the thread's OS semaphore when unable to run that process.
+ We will return to this via threadSwitchIfNecessary:from: which is called in the
+ middle of transferTo:from: once the active process has been stored in the scheduler."
+ <var: #vmThread type: #'CogVMThread *'>
+ | attemptToRun |
+ <inline: false>
+ self _setjmp: reenterThreadSchedulingLoop.
+ [self assert: vmThread state = CTMAssignableOrInVM.
+ attemptToRun := false.
+ (cogThreadManager getVMOwner = vmThread index)
+ ifTrue: [attemptToRun := true]
+ ifFalse:
+ [(cogit tryLockVMToIndex: vmThread index) ifTrue:
+ ["If relinquishing is true, then primitiveRelinquishProcessor has disowned the
+ VM and only a returning call or callback should take ownership in that case."
+ relinquishing
+ ifTrue: [cogThreadManager releaseVM]
+ ifFalse: [attemptToRun := true]]].
+ attemptToRun ifTrue:
+ [self tryToExecuteSmalltalk: vmThread].
+ (cogThreadManager testVMOwnerIs: vmThread index) ifFalse:
+ [cogThreadManager waitForWork: vmThread].
+ true] whileTrue!
Item was added:
+ ----- Method: CogVMSimulator>>_longjmp:_: (in category 'multi-threading simulation switch') -----
+ _longjmp: aJumpBuf _: returnValue
+ "This method includes or excludes CoInterpreterMT methods as required.
+ Auto-generated by CogVMSimulator>>ensureMultiThreadingOverridesAreUpToDate"
+
+ ^self perform: #'_longjmp:_:'
+ withArguments: {aJumpBuf. returnValue}
+ inSuperclass: (cogThreadManager ifNil: [CoInterpreterPrimitives] ifNotNil: [CoInterpreterMT])!
Item was added:
+ Notification subclass: #ReenterThreadSchedulingLoop
+ instanceVariableNames: 'returnValue'
+ classVariableNames: ''
+ poolDictionaries: ''
+ category: 'VMMaker-JITSimulation'!
Item was changed:
----- Method: StackInterpreter>>_setjmp: (in category 'primitive support') -----
_setjmp: aJumpBuf
"Hack simulation of _setjmp/_longjmp, intended to invoke the most minimal setjmp/longjmp
+ pair available on the platform; no saving/restoring signal masks, no stack unwinding, etc."
- pair available on the platform; no saving/restoring signal masks, no stack unwinding, etc.
- Assign to reenterInterpreter the exception that when raised simulates a _longjmp back to the interpreter."
<doNotGenerate>
+ self assert: (#(ReenterInterpreter ReenterThreadSchedulingLoop) includes: aJumpBuf class name).
- reenterInterpreter := ReenterInterpreter new returnValue: 0; yourself.
^0!
Item was changed:
----- Method: StackInterpreter>>initializeInterpreter: (in category 'initialization') -----
initializeInterpreter: bytesToShift
"Initialize Interpreter state before starting execution of a new image."
interpreterProxy := self sqGetInterpreterProxy.
self dummyReferToProxy.
objectMemory initializeObjectMemory: bytesToShift.
self checkAssumedCompactClasses.
self initializeExtraClassInstVarIndices.
method := newMethod := objectMemory nilObject.
self cCode: '' inSmalltalk:
[breakSelectorLength ifNil:
[breakSelectorLength := objectMemory minSmallInteger].
+ breakLookupClassTag ifNil: [breakLookupClassTag := -1].
+ reenterInterpreter := ReenterInterpreter new].
- breakLookupClassTag ifNil: [breakLookupClassTag := -1]].
methodDictLinearSearchLimit := 8.
self initialCleanup.
LowcodeVM ifTrue: [ self setupNativeStack ].
profileSemaphore := profileProcess := profileMethod := objectMemory nilObject.
interruptKeycode := 2094. "cmd-. as used for Mac but no other OS"
[globalSessionID = 0] whileTrue:
[globalSessionID := self
cCode: [(self time: #NULL) + self ioMSecs]
inSmalltalk: [(Random new next * (SmallInteger maxVal min: 16rFFFFFFFF)) asInteger]].
metaAccessorDepth := -2.
super initializeInterpreter: bytesToShift!
Branch: refs/heads/Cog
Home: https://github.com/OpenSmalltalk/opensmalltalk-vm
Commit: 61a3e3df190e0b30437dc50966b130f397638c08
https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/61a3e3df190e0b3043…
Author: Eliot Miranda <eliot.miranda(a)gmail.com>
Date: 2020-10-30 (Fri, 30 Oct 2020)
Changed paths:
M nsspur64src/vm/cogit.h
M nsspur64src/vm/cogitARMv8.c
M nsspur64src/vm/cogitX64SysV.c
M nsspur64src/vm/cogitX64WIN64.c
M nsspur64src/vm/cointerp.c
M nsspur64src/vm/cointerp.h
M nsspur64src/vm/gcc3x-cointerp.c
M nsspursrc/vm/cogit.h
M nsspursrc/vm/cogitARMv5.c
M nsspursrc/vm/cogitIA32.c
M nsspursrc/vm/cogitMIPSEL.c
M nsspursrc/vm/cointerp.c
M nsspursrc/vm/cointerp.h
M nsspursrc/vm/gcc3x-cointerp.c
M nsspurstack64src/vm/gcc3x-interp.c
M nsspurstack64src/vm/interp.c
M nsspurstacksrc/vm/gcc3x-interp.c
M nsspurstacksrc/vm/interp.c
M processors/IA32/bochs/explorationx64/printcpu.c
M spur64src/vm/cogit.h
M spur64src/vm/cogitARMv8.c
M spur64src/vm/cogitX64SysV.c
M spur64src/vm/cogitX64WIN64.c
M spur64src/vm/cointerp.c
M spur64src/vm/cointerp.h
M spur64src/vm/cointerpmt.c
M spur64src/vm/cointerpmt.h
M spur64src/vm/gcc3x-cointerp.c
M spur64src/vm/gcc3x-cointerpmt.c
M spurlowcode64src/vm/cogit.h
M spurlowcode64src/vm/cogitARMv8.c
M spurlowcode64src/vm/cogitX64SysV.c
M spurlowcode64src/vm/cogitX64WIN64.c
M spurlowcode64src/vm/cointerp.c
M spurlowcode64src/vm/cointerp.h
M spurlowcode64src/vm/gcc3x-cointerp.c
M spurlowcodesrc/vm/cogit.h
M spurlowcodesrc/vm/cogitARMv5.c
M spurlowcodesrc/vm/cogitIA32.c
M spurlowcodesrc/vm/cogitMIPSEL.c
M spurlowcodesrc/vm/cointerp.c
M spurlowcodesrc/vm/cointerp.h
M spurlowcodesrc/vm/gcc3x-cointerp.c
M spurlowcodestack64src/vm/gcc3x-interp.c
M spurlowcodestack64src/vm/interp.c
M spurlowcodestacksrc/vm/gcc3x-interp.c
M spurlowcodestacksrc/vm/interp.c
M spursista64src/vm/cogit.h
M spursista64src/vm/cogitARMv8.c
M spursista64src/vm/cogitX64SysV.c
M spursista64src/vm/cogitX64WIN64.c
M spursista64src/vm/cointerp.c
M spursista64src/vm/cointerp.h
M spursista64src/vm/gcc3x-cointerp.c
M spursistasrc/vm/cogit.h
M spursistasrc/vm/cogitARMv5.c
M spursistasrc/vm/cogitIA32.c
M spursistasrc/vm/cogitMIPSEL.c
M spursistasrc/vm/cointerp.c
M spursistasrc/vm/cointerp.h
M spursistasrc/vm/gcc3x-cointerp.c
M spursrc/vm/cogit.h
M spursrc/vm/cogitARMv5.c
M spursrc/vm/cogitIA32.c
M spursrc/vm/cogitMIPSEL.c
M spursrc/vm/cointerp.c
M spursrc/vm/cointerp.h
M spursrc/vm/cointerpmt.c
M spursrc/vm/cointerpmt.h
M spursrc/vm/gcc3x-cointerp.c
M spursrc/vm/gcc3x-cointerpmt.c
M spurstack64src/vm/gcc3x-interp.c
M spurstack64src/vm/interp.c
M spurstack64src/vm/validImage.c
M spurstacksrc/vm/gcc3x-interp.c
M spurstacksrc/vm/interp.c
M spurstacksrc/vm/validImage.c
M src/vm/cogit.h
M src/vm/cogitARMv5.c
M src/vm/cogitIA32.c
M src/vm/cogitMIPSEL.c
M src/vm/cointerp.c
M src/vm/cointerp.h
M src/vm/cointerpmt.c
M src/vm/cointerpmt.h
M src/vm/gcc3x-cointerp.c
M src/vm/gcc3x-cointerpmt.c
Log Message:
-----------
CogVM source as per VMMaker.oscog-eem.2864
Sionara ceCheckFeatures. Cache cpuid result(s) in variable(s).
Do throw-away compilation(s) to get at the CPUID result(s) needed.
Eliot Miranda uploaded a new version of Cog to project VM Maker:
http://source.squeak.org/VMMaker/Cog-eem.423.mcz
==================== Summary ====================
Name: Cog-eem.423
Author: eem
Time: 30 October 2020, 6:02:36.95265 am
UUID: 38d317fe-abfe-4ce6-97a1-972d0fe2ac25
Ancestors: Cog-eem.422
Refactor abiMarshalArg0:... to accomodate IA32. Raise a trap for stop opcodes.
=============== Diff against Cog-eem.422 ===============
Item was changed:
----- Method: BochsIA32Alien class>>initialize (in category 'class initialization') -----
initialize
"BochsIA32Alien initialize"
| it |
it := self basicNew.
PostBuildStackDelta := 0.
OpcodeExceptionMap := Array new: 256 withAll: #handleExecutionPrimitiveFailureAt:in:.
OpcodeExceptionMap
at: 1 + it callOpcode put: #handleCallFailureAt:in:;
at: 1 + it jmpOpcode put: #handleJmpFailureAt:in:;
at: 1 + it retOpcode put: #handleRetFailureAt:in:;
at: 1 + it movALObOpcode put: #handleMovALObFailureAt:in:;
at: 1 + it movAXOvOpcode put: #handleMovAXOvFailureAt:in:;
at: 1 + it movObALOpcode put: #handleMovObALFailureAt:in:;
at: 1 + it movOvAXOpcode put: #handleMovOvAXFailureAt:in:;
at: 1 + it movGvEvOpcode put: #handleMovGvEvFailureAt:in:;
at: 1 + it movEvGvOpcode put: #handleMovEvGvFailureAt:in:;
at: 1 + it movGbEbOpcode put: #handleMovGbEbFailureAt:in:;
+ at: 1 + it movEbGbOpcode put: #handleMovEbGbFailureAt:in:;
+ at: 1 + it stopOpcode put: #handleStopFailureAt:in:.
- at: 1 + it movEbGbOpcode put: #handleMovEbGbFailureAt:in:.
ExtendedOpcodeExceptionMap := Array new: 256 withAll: #handleExecutionPrimitiveFailureAt:in:.
ExtendedOpcodeExceptionMap
at: 1 + it movGvEbOpcode put: #handleMovGvEbFailureAt:in:!
Item was added:
+ ----- Method: BochsIA32Alien>>abiMarshalArg0:arg1:in: (in category 'accessing-abstract') -----
+ abiMarshalArg0: arg0 arg1: arg1 in: memory
+ "Marshal two integral arguments according to the ABI.
+ Currently used only on processors that do ceFlushICache in machine code.
+ CogICacheFlushingIA32Compiler does just this."
+ self push: arg1.
+ self push: arg0!
Item was added:
+ ----- Method: BochsIA32Alien>>abiMarshalArg0:in: (in category 'accessing-abstract') -----
+ abiMarshalArg0: arg0 in: memory
+ "Marshal one integral argument according to the ABI.
+ Currently used in the COGMTVM to tryLockVMOwner:"
+ self pushWord: arg0 in: memory!
Item was removed:
- ----- Method: BochsIA32Alien>>abiMarshallArg0: (in category 'accessing-abstract') -----
- abiMarshallArg0: arg0
- "Marshall one integral argument according to the ABI.
- Currently used in the COGMTVM to tryLockVMOwner:"
- self push: arg0!
Item was removed:
- ----- Method: BochsIA32Alien>>abiMarshallArg0:arg1: (in category 'accessing-abstract') -----
- abiMarshallArg0: arg0 arg1: arg1
- "Marshall two integral arguments according to the ABI.
- Currently used only on processors that do ceFlushICache in machine code.
- CogICacheFlushingIA32Compiler does just this."
- self push: arg1.
- self push: arg0!
Item was added:
+ ----- Method: BochsIA32Alien>>handleStopFailureAt:in: (in category 'error handling') -----
+ handleStopFailureAt: pc "<Integer>" in: memoryArray "<Bitmap|ByteArray>"
+ ^(ProcessorSimulationTrap
+ pc: pc
+ nextpc: pc + 1
+ address: pc
+ type: #stop
+ accessor: nil)
+ signal!
Item was added:
+ ----- Method: BochsIA32Alien>>stopOpcode (in category 'opcodes') -----
+ stopOpcode
+ ^16rCC!
Item was added:
+ ----- Method: BochsX64Alien>>abiMarshalArg0:in: (in category 'accessing-abstract') -----
+ abiMarshalArg0: arg0 in: memory
+ "Marshal one integral argument according to the ABI.
+ Currently used in the COGMTVM to tryLockVMOwner:"
+ (CogX64Compiler classPool at: #CArg0Reg) = 1
+ ifTrue: [self rcx: arg0] "Hack; Win64"
+ ifFalse: [self rdi: arg0] "Hack; SysV"!
Item was removed:
- ----- Method: BochsX64Alien>>abiMarshallArg0: (in category 'accessing-abstract') -----
- abiMarshallArg0: arg0
- "Marshall one integral argument according to the ABI.
- Currently used in the COGMTVM to tryLockVMOwner:"
- (CogX64Compiler classPool at: #CArg0Reg) = 1
- ifTrue: [self rcx: arg0] "Hack; Win64"
- ifFalse: [self rdi: arg0] "Hack; SysV"!
Item was added:
+ ----- Method: CogProcessorAlien>>abiMarshalArg0:arg1:in: (in category 'accessing-abstract') -----
+ abiMarshalArg0: arg0 arg1: arg1 in: memory
+ "Marshal two integral arguments according to the ABI.
+ Currently used only on processors that do ceFlushICache in machine code."
+ self subclassResponsibility!
Item was removed:
- ----- Method: CogProcessorAlien>>abiMarshallArg0:arg1: (in category 'accessing-abstract') -----
- abiMarshallArg0: arg0 arg1: arg1
- "Marshall two integral arguments according to the ABI.
- Currently used only on processors that do ceFlushICache in machine code."
- self subclassResponsibility!
Build Update for OpenSmalltalk/opensmalltalk-vm
-------------------------------------
Build: #2289
Status: Failed
Duration: 5 hrs, 22 mins, and 37 secs
Commit: c14b717 (Cog)
Author: Eliot Miranda
Message: CogVM source as per Name: VMMaker.oscog-eem.2862
Cogit: Revise deriving the varBaseAddress after finding on MacOS that the linker
may not "follow orders". So take the minimum of several likely addresses,
secretly hoping the minimum is something like stackLimit, which likely has the
highest dynamic frequency (well done clang).
Eliminate ceEnterInterpreterOnReturnFromCogCode and have the
ceReturnToInterpreterTrampoline invoke interpret directly, using the same code
as ceInvokeInterpret. Do this by moving the setMethod: send into interpret
from senders; setMethod: is key because it sets the bytecodeSetSelector to
enable multiple bytecode set support, but machine code is (and should remain)
ignorant of the details of bytecode set selection in compiled method headers.
cogitARMv8.c Add __ARM_ARCH >= 8 to cogit.c's ARMv8 identifying macros.
CoInterpreterMT: Get rid of vmOwnerLock; what a bogus idea. Just use CAS on
vmOwner as God (DS) intended. Fix a bug in CoInterpreterMT>>wakeHighestPriority.
Refactor ABI callout marshalling on X64 to use the same CArg0Reg thru CArg3Reg
pattern as on ARMv8. Make CPUID the first processor specific opcode on Intel.
Eliminate use of reenterInterpreter, this is StackInterpreter only now.
FilePlugin:
Add FilePlugin>>primitiveFileReadPinningAndDisowning, for file read in COGMTVM.
Use methodReturnInteger: rather than methodReturnValue: ... integerObjectOf::
Slang: generate neater code for pointer indirection. Instead of indexing with
zero, dereference with *. Eliminate a space in function type printing.
View the changeset: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/17625fc20fa1...c1…
View the full build log and details: https://travis-ci.org/github/OpenSmalltalk/opensmalltalk-vm/builds/74004369…
--
You can unsubscribe from build emails from the OpenSmalltalk/opensmalltalk-vm repository going to https://travis-ci.org/account/preferences/unsubscribe?repository=8795279&ut….
Or unsubscribe from *all* email updating your settings at https://travis-ci.org/account/preferences/unsubscribe?utm_medium=notificati….
Or configure specific recipients for build notifications in your .travis.yml file. See https://docs.travis-ci.com/user/notifications.