Branch: refs/heads/SpurPlanningCompactor
Home: https://github.com/OpenSmalltalk/opensmalltalk-vm
Commit: 210748bbc1afdc39b1b395269b53b86f40727980
https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/210748bbc1afdc39b1…
Author: Eliot Miranda <eliot.miranda(a)gmail.com>
Date: 2017-02-17 (Fri, 17 Feb 2017)
Changed paths:
M nsspur64src/vm/cogit.h
M nsspur64src/vm/cogitX64.c
M nsspur64src/vm/cogmethod.h
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/cogmethod.h
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 spur64src/vm/cogit.h
M spur64src/vm/cogitX64.c
M spur64src/vm/cointerp.c
M spur64src/vm/cointerp.h
M spur64src/vm/gcc3x-cointerp.c
M spursista64src/vm/cogit.h
M spursista64src/vm/cogitX64.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/gcc3x-cointerp.c
M spurstack64src/vm/gcc3x-interp.c
M spurstack64src/vm/interp.c
M spurstacksrc/vm/gcc3x-interp.c
M spurstacksrc/vm/interp.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
M stacksrc/vm/gcc3x-interp.c
M stacksrc/vm/interp.c
Log Message:
-----------
CogVM source as per VMMaker.oscogSPC-eem.2134
StackInterpreter:
Fix serious and ancient bug with stack checking and event checking. The event
check piggy backs off the stack check, but the old code would not handle a stack
overflow if there was an overflow and an event check at one and the same time,
allowing frames to grow down the stack page in cases where there are lots of
events (such as profiling).
SpurPlanningCompactor:
Fix bad slip in unmarkObjectsFromFirstFreeObject; it forgot to free the last
object in the sequence.
Cogit:
Fix checking the lists of cog methods (openPICList and unpairedMethodList) when
compacting the method zone.
Fix a bug with freeing a method that might have either a nextMethod or an IRC;
Must not free CogMethods.
Fix a couple of C compilation warnings.
With these changes the Cadence Glue External Tests run to completion without
assert fails on 64-bit linux.
Branch: refs/heads/SpurPlanningCompactor
Home: https://github.com/OpenSmalltalk/opensmalltalk-vm
Commit: 00336ba196e0ef183f3fc034117d46d7e2c1e5f6
https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/00336ba196e0ef183f…
Author: Eliot Miranda <eliot.miranda(a)gmail.com>
Date: 2017-02-17 (Fri, 17 Feb 2017)
Changed paths:
M nsspur64src/vm/cogit.h
M nsspur64src/vm/cogitX64.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 spur64src/vm/cogit.h
M spur64src/vm/cogitX64.c
M spur64src/vm/cointerp.c
M spur64src/vm/cointerp.h
M spur64src/vm/gcc3x-cointerp.c
M spursista64src/vm/cogit.h
M spursista64src/vm/cogitX64.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/gcc3x-cointerp.c
M spurstack64src/vm/gcc3x-interp.c
M spurstack64src/vm/interp.c
M spurstacksrc/vm/gcc3x-interp.c
M spurstacksrc/vm/interp.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
M stacksrc/vm/gcc3x-interp.c
M stacksrc/vm/interp.c
Log Message:
-----------
CogVM source as per VMMaker.oscogSPC-eem.2132
Temporary branch for the SpurPlanningCompactor.
SpurPlanningCompactor:
Fix the single-pass unmarking pass. It needs to begin at firstFreeObject, not
lastMobileObject!!
Spur:
Provide isUnmarked: for debugging with printOopsSuchThat:.
Remember the first unmarked object found by allObjectsUnmarked in the bogon
variable, and keep hold on to it via printBogons so it is not deleted by the
C optimizer.
Fix assert fails in Spur due to failing perform primitives not restoring the
function pointer and argumentCount correctly.
Cogit:
Have printCogMethods print totals of the number of methods & PICs in the code
zone. Fix a slip in printCogMethodsWithPrimitive:.
Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscogSPC-eem.2131.mcz
==================== Summary ====================
Name: VMMaker.oscogSPC-eem.2131
Author: eem
Time: 17 February 2017, 9:44:55.365762 am
UUID: 8f61c300-0034-45a8-85d9-7b0bd4ee199d
Ancestors: VMMaker.oscogSPC-eem.2130
Fix assert fails in Spur due to failing perform primitives not restoring the function pointer and argumentCount correctly.
=============== Diff against VMMaker.oscogSPC-eem.2130 ===============
Item was changed:
----- Method: StackInterpreter>>primitiveObject:perform:withArguments:lookedUpIn: (in category 'control primitives') -----
primitiveObject: actualReceiver perform: selector withArguments: argumentArray lookedUpIn: lookupClassOrNil
"Common routine used by perform:withArgs:, perform:withArgs:inSuperclass:,
object:perform:withArgs:inClass: et al. Answer nil on success.
NOTE: The case of doesNotUnderstand: is not a failure to perform.
The only failures are arg types and consistency of argumentCount.
Since we're in the stack VM we can assume there is space to push the arguments
provided they are within limits (max argument count is 15). We can therefore deal
with the arbitrary amount of state to remove from the stack (lookup class, selector,
mirror receiver) and arbitrary argument orders by deferring popping anything until
we know whether the send has succeeded. So on failure we merely have to remove
the actual receiver and arguments pushed, and on success we have to slide the actual
receiver and arguments down to replace the original ones."
<inline: true>
| arraySize performArgCount delta |
(objectMemory isArray: argumentArray) ifFalse:
[^self primitiveFailFor: PrimErrBadArgument].
"Check if number of arguments is reasonable; MaxNumArgs isn't available
so just use LargeContextSize"
arraySize := objectMemory numSlotsOf: argumentArray.
arraySize > (LargeContextSlots - CtxtTempFrameStart) ifTrue:
[^self primitiveFailFor: PrimErrBadNumArgs].
performArgCount := argumentCount.
"Push newMethod to save it in case of failure,
then push the actual receiver and the args in the array."
self push: newMethod.
self push: actualReceiver.
"Copy the arguments to the stack, in case of MNU, and lookup"
1 to: arraySize do:
[:index| self push: (objectMemory fetchPointer: index - 1 ofObject: argumentArray)].
argumentCount := arraySize.
messageSelector := selector.
self sendBreakpoint: messageSelector receiver: actualReceiver.
self printSends ifTrue:
[self printActivationNameForSelector: messageSelector
startClass: (lookupClassOrNil isNil
ifTrue: [objectMemory fetchClassOf: actualReceiver]
ifFalse: [lookupClassOrNil]);
cr].
self findNewMethodInClassTag: (lookupClassOrNil isNil
ifTrue: [objectMemory fetchClassTagOf: actualReceiver]
ifFalse: [objectMemory classTagForClass: lookupClassOrNil]).
"Only test CompiledMethods for argument count - any other objects playacting as CMs will have to take their chances"
((objectMemory isOopCompiledMethod: newMethod)
and: [(self argumentCountOf: newMethod) ~= argumentCount]) ifTrue:
["Restore the state by popping the array entries, the actual receiver and the saved
newMethod, leaving the selector and array, and fail. N.B. If an MNU has happened
then argumentCount will match newMethod, so this code will not be reached."
"These asserts check that an MNU has not occurred if the argumentCount doesn't match the newMethod."
self assert: (self stackTop = (arraySize = 0
ifTrue: [actualReceiver]
ifFalse: [(objectMemory fetchPointer: arraySize - 1 ofObject: argumentArray)])).
self assert: argumentCount = arraySize.
self pop: arraySize + 1.
newMethod := self popStack.
+ "Must reset primitiveFunctionPointer for checkForAndFollowForwardedPrimitiveState"
+ objectMemory hasSpurMemoryManagerAPI ifTrue:
+ [argumentCount := performArgCount.
+ primitiveFunctionPointer := lookupClassOrNil
+ ifNil: [#primitivePerformWithArgs]
+ ifNotNil: [#primitivePerformInSuperclass]].
^self primitiveFailFor: PrimErrBadNumArgs].
"Cannot fail this primitive from here-on. Slide the actual receiver and arguments down
to replace the perform arguments and saved newMethod and then execute the new
method. Use argumentCount not arraySize because an MNU may have changed it."
delta := objectMemory wordSize * (performArgCount + 2). "+2 = receiver + saved newMethod"
argumentCount * objectMemory wordSize to: 0 by: objectMemory wordSize negated do:
[:offset|
stackPages
longAt: stackPointer + offset + delta
put: (stackPages longAt: stackPointer + offset)].
self pop: performArgCount + 2.
self executeNewMethod.
self initPrimCall. "Recursive xeq affects primErrorCode"
^nil!
Item was changed:
----- Method: StackInterpreterPrimitives>>primitivePerform (in category 'control primitives') -----
primitivePerform
<returnTypeC: #void>
| newReceiver lookupClassTag performMethod |
performMethod := newMethod.
messageSelector := self stackValue: argumentCount - 1.
newReceiver := self stackValue: argumentCount.
"NOTE: the following lookup may fail and be converted to #doesNotUnderstand:,
so we must adjust argumentCount and slide args now, so that will work."
"Slide arguments down over selector"
argumentCount := argumentCount - 1.
argumentCount to: 1 by: -1 do:
[:i|
stackPages
longAt: stackPointer + (i * objectMemory wordSize)
put: (stackPages longAt: stackPointer + ((i - 1) * objectMemory wordSize))].
self pop: 1.
lookupClassTag := objectMemory fetchClassTagOf: newReceiver.
self sendBreakpoint: messageSelector receiver: newReceiver.
self printSends ifTrue:
[self printActivationNameForSelector: messageSelector
startClass: (objectMemory classForClassTag: lookupClassTag); cr].
self findNewMethodInClassTag: lookupClassTag.
"Only test CompiledMethods for argument count - other objects will have to take their chances"
((objectMemory isOopCompiledMethod: newMethod)
and: [(self argumentCountOf: newMethod) = argumentCount]) ifFalse:
["Slide the args back up (sigh) and re-insert the selector."
self unPop: 1.
1 to: argumentCount by: 1 do:
[:i |
stackPages longAt: stackPointer + ((i - 1) * objectMemory wordSize)
put: (stackPages longAt: stackPointer + (i * objectMemory wordSize))].
stackPages longAt: stackPointer + (argumentCount * objectMemory wordSize) put: messageSelector.
argumentCount := argumentCount + 1.
newMethod := performMethod.
+ "Must reset primitiveFunctionPointer for checkForAndFollowForwardedPrimitiveState"
+ objectMemory hasSpurMemoryManagerAPI ifTrue:
+ [primitiveFunctionPointer := #primitivePerform].
+ ^self primitiveFailFor: PrimErrBadNumArgs].
- ^self primitiveFail].
self executeNewMethod.
"Recursive xeq affects primErrorCode"
self initPrimCall!
Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2129.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.2129
Author: eem
Time: 14 February 2017, 3:23:53.789991 pm
UUID: f39cb56a-835d-4d70-b824-3d86c8bd25d2
Ancestors: VMMaker.oscogSPC-eem.2129, VMMaker.oscog-rsf.2128
Merge with VMMaker.oscogSPC-eem.2129
=============== Diff against VMMaker.oscogSPC-eem.2129 ===============
Item was changed:
----- Method: SpurMemoryManager class>>compactorClass (in category 'accessing class hierarchy') -----
compactorClass
"Answer the compaction algorithm to use."
+ ^Smalltalk classNamed: (initializationOptions at: #compactorClass ifAbsent: [#SpurPigCompactor])!
- ^Smalltalk classNamed: (initializationOptions at: #compactorClass ifAbsent: [#SpurPlanningCompactor])!
Branch: refs/heads/Cog
Home: https://github.com/OpenSmalltalk/opensmalltalk-vm
Commit: 1675e3586bbef2ff198e683ea7839ac1b41fa491
https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/1675e3586bbef2ff19…
Author: Eliot Miranda <eliot.miranda(a)gmail.com>
Date: 2017-02-09 (Thu, 09 Feb 2017)
Changed paths:
M nsspur64src/vm/cogit.h
M nsspur64src/vm/cogitX64.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 spur64src/vm/cogit.h
M spur64src/vm/cogitX64.c
M spur64src/vm/cointerp.c
M spur64src/vm/cointerp.h
M spur64src/vm/gcc3x-cointerp.c
M spursista64src/vm/cogit.h
M spursista64src/vm/cogitX64.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/gcc3x-cointerp.c
M spurstack64src/vm/gcc3x-interp.c
M spurstack64src/vm/interp.c
M spurstacksrc/vm/gcc3x-interp.c
M spurstacksrc/vm/interp.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
M stacksrc/vm/gcc3x-interp.c
M stacksrc/vm/interp.c
Log Message:
-----------
CogVM source as per VMMaker.oscog-eem.2126
StackInterpreter:
Fixed a bug where the CogVMFeatureFlags were converted twice to SmallInteger (in
getCogVMFeatureFlags and in primitiveVMParameter), shifting 1 time too many the
flags. Hence MULTIPLEBYTECODESETS flag was always true in the image while
SUPPORTSWRITEBARRIER was true only if the VM supported multiple bytecode set.
SpurMemoryManager:
add a VM parameter to collect the time spent in compaction (a subset of the time
spent in fullGC).
Make printOopsFrom:to: skip free space instead of printing an empty object
every 16 bytes.
Add printOopsSuchThat: for debugging.
Have printEntity: print header flags for puns also.
Cogit:
Refactor fixupAt: & initializeFixupAt: to take bytecode PCs not indexes. Add
fixupAtIndex: as the method that takes an index.
Refactor sends of ensure[NonMerge]FixupAt:, moving the ever-present
"- initialPC" into ensure[NonMerge]FixupAt:.
Fixed a bug in read-only object where the attemptToAssign:withIndex: call-back
would be called with a 1-based index by the interpreter and 0-based index by
the JIT. Everybody now calls it with 1-based index.
Rename offsetCacheTagAndCouldBeObjectAt:annotation:into: to the more accurate
entryCacheTagAndCouldBeObjectAt:annotation:into: and extract
entryPointTagIsSelector: for use below.
Fix the check for valid selectors for 64-bits (unlinked cacheTags are
literal/specialSelector indices) in checkIfValidOopRefAndTarget:pc:cogMethod:.
Add leak checking of CogMethod counters and implicit reveiver caches.
SistaCogit:
Fix coging optimized methods with lots of literals.
Decode a method header when doing longPrintOop:.
Fix the ssFlushTo: call in genExtJumpIfNotInstanceOfBehaviorsBytecode
Use Spur's single-bit tests for immediates in the
CogObjectRepresetationFor??BitSpur's branchIf:has[Not]ImmediateTag:target:
Fix conditional branches following inline primitive comparisons given the branch
following logic. The unconditional branch following can only be elided if
jumping to the bytecode following the conditional branch, which may no longer be
the case with branch following. To this end refactor
nextDescriptorAndExtensionsInto: into nextDescriptorExtensionsAndNextPCInto:.
Changed the machine code compilation of BranchIfInstanceOf if there is one
Behavior and the behavior is UndefinedObject, True or False to compile to a
direct comparison to the unique instances instead of class index check. I am not
sure it makes sense to add these cases when there are multiple behaviors.
Added a new trampoline to create new hashes. Unfortunately I did not succeed in
using the trampoline in the existing primitives, so I made the trampoline Sista
only and it's used in the inlined primitive.
Newspeak/Slang:
Fix printDecodeMethodHeaderOop: for the Newspeak VM. Add type inferrence for
TBraceNode, including casting the default value to a pointer type in
var := expr caseOf: { ... }.
Slang:
Don't localize globals that are used in only one funciton if they are only
written to. Such variables are typically for debugging (observation).
Commit: 92e1340dae91e40aebc0e03b017b7c4702019729
https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/92e1340dae91e40aeb…
Author: Eliot Miranda <eliot.miranda(a)gmail.com>
Date: 2017-02-14 (Tue, 14 Feb 2017)
Changed paths:
M nsspur64src/vm/cogit.h
M nsspur64src/vm/cogitX64.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 spur64src/vm/cogit.h
M spur64src/vm/cogitX64.c
M spur64src/vm/cointerp.c
M spur64src/vm/cointerp.h
M spur64src/vm/gcc3x-cointerp.c
M spursista64src/vm/cogit.h
M spursista64src/vm/cogitX64.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/gcc3x-cointerp.c
M spurstack64src/vm/gcc3x-interp.c
M spurstack64src/vm/interp.c
M spurstacksrc/vm/gcc3x-interp.c
M spurstacksrc/vm/interp.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
M stacksrc/vm/gcc3x-interp.c
M stacksrc/vm/interp.c
Log Message:
-----------
CogVM source as per VMMaker.oscog-eem.2129
InterpreterPrimitives:
Fix slip in primitiveSmallFloatSquareRoot
Simplify the boxed and immediate unary float primitives to do less stack
manipulations and/or primFailCode testing.
64-bit Cogit:
Fix a regression in CogX64Compiler>>concretizeConvertRRd and a bug in
CogX64Compiler>>concretizeConvertRdR.
Fix a bug in genPrimitiveSmallFloatSquareRoot. The primitive must fail for
negative arguments.
Cogit:
Fix some C compilation warnings due to mismatched pointer types.
(Slang) Get methods that return AbstractInstructions to be inlinable.
StackToRegisterMappingCogit:
Simplify genForwardersInlinedIdenticalOrNotIf: to avoid an extra call of
genEnsureOopInRegNotForwarded:...
Generate slightly better code in genSpecialSelectorComparison
Squash jump L1; nop; L1 to nop; nop (again as part of jump following).
Don't bother to inline genEnsureOopInRegNotForwarded:scratchReg:ifForwarder:
ifNotForwarder:, but do inline genEnsureOopInRegNotForwarded:scratchReg:
jumpBackTo: which is simply a call of the other.
Commit: 7037091c011bbb601c7f718ce111332af5c86f6c
https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/7037091c011bbb601c…
Author: Eliot Miranda <eliot.miranda(a)gmail.com>
Date: 2017-02-14 (Tue, 14 Feb 2017)
Changed paths:
M .travis.yml
A build.linux32x86/pharo.cog.spur.lowcode/build.assert.itimerheartbeat/mvm
A build.linux32x86/pharo.cog.spur.lowcode/build.assert/mvm
A build.linux32x86/pharo.cog.spur.lowcode/build.debug.itimerheartbeat/mvm
A build.linux32x86/pharo.cog.spur.lowcode/build.debug/mvm
A build.linux32x86/pharo.cog.spur.lowcode/build.itimerheartbeat/mvm
A build.linux32x86/pharo.cog.spur.lowcode/build/mvm
A build.linux32x86/pharo.cog.spur.lowcode/makeallclean
A build.linux32x86/pharo.cog.spur.lowcode/makealldirty
A build.linux32x86/pharo.cog.spur.lowcode/plugins.ext
A build.linux32x86/pharo.cog.spur.lowcode/plugins.int
A build.linux32x86/pharo.stack.spur.lowcode/build.assert.itimerheartbeat/mvm
A build.linux32x86/pharo.stack.spur.lowcode/build.assert/mvm
A build.linux32x86/pharo.stack.spur.lowcode/build.debug.itimerheartbeat/mvm
A build.linux32x86/pharo.stack.spur.lowcode/build.debug/mvm
A build.linux32x86/pharo.stack.spur.lowcode/build.itimerheartbeat/mvm
A build.linux32x86/pharo.stack.spur.lowcode/build/mvm
A build.linux32x86/pharo.stack.spur.lowcode/makeallclean
A build.linux32x86/pharo.stack.spur.lowcode/makealldirty
A build.linux32x86/pharo.stack.spur.lowcode/plugins.ext
A build.linux32x86/pharo.stack.spur.lowcode/plugins.int
A build.macos32x86/pharo.cog.spur.lowcode/Makefile
A build.macos32x86/pharo.cog.spur.lowcode/mvm
A build.macos32x86/pharo.cog.spur.lowcode/plugins.ext
A build.macos32x86/pharo.cog.spur.lowcode/plugins.int
A build.macos32x86/pharo.stack.spur.lowcode/Makefile
A build.macos32x86/pharo.stack.spur.lowcode/mvm
A build.macos32x86/pharo.stack.spur.lowcode/plugins.ext
A build.macos32x86/pharo.stack.spur.lowcode/plugins.int
M build.macos32x86/pharo.stack.spur/Makefile
A build.macos64x64/pharo.cog.spur.lowcode/Makefile
A build.macos64x64/pharo.cog.spur.lowcode/mvm
A build.macos64x64/pharo.cog.spur.lowcode/plugins.ext
A build.macos64x64/pharo.cog.spur.lowcode/plugins.int
A build.macos64x64/pharo.stack.spur.lowcode/Makefile
A build.macos64x64/pharo.stack.spur.lowcode/mvm
A build.macos64x64/pharo.stack.spur.lowcode/plugins.ext
A build.macos64x64/pharo.stack.spur.lowcode/plugins.int
A build.macos64x64/pharo.stack.spur/Makefile
A build.macos64x64/pharo.stack.spur/mvm
A build.macos64x64/pharo.stack.spur/plugins.ext
A build.macos64x64/pharo.stack.spur/plugins.int
A build.win32x86/pharo.cog.spur.lowcode/Makefile
A build.win32x86/pharo.cog.spur.lowcode/Pharo.def.in
A build.win32x86/pharo.cog.spur.lowcode/Pharo.exe.manifest
A build.win32x86/pharo.cog.spur.lowcode/Pharo.ico
A build.win32x86/pharo.cog.spur.lowcode/Pharo.rc
A build.win32x86/pharo.cog.spur.lowcode/mvm
A build.win32x86/pharo.cog.spur.lowcode/plugins.ext
A build.win32x86/pharo.cog.spur.lowcode/plugins.int
A build.win32x86/squeak.cog.spur.lowcode/Croquet.def.in
A build.win32x86/squeak.cog.spur.lowcode/Croquet.exe.manifest
A build.win32x86/squeak.cog.spur.lowcode/Croquet.ico
A build.win32x86/squeak.cog.spur.lowcode/Croquet.rc
A build.win32x86/squeak.cog.spur.lowcode/GreenCogSqueak.ico
A build.win32x86/squeak.cog.spur.lowcode/Makefile
A build.win32x86/squeak.cog.spur.lowcode/Squeak.def.in
A build.win32x86/squeak.cog.spur.lowcode/Squeak.exe.manifest
A build.win32x86/squeak.cog.spur.lowcode/Squeak.rc
A build.win32x86/squeak.cog.spur.lowcode/mvm
A build.win32x86/squeak.cog.spur.lowcode/plugins.ext
A build.win32x86/squeak.cog.spur.lowcode/plugins.int
A build.win32x86/squeak.cog.spur.lowcode/squeak.ico
M platforms/Cross/plugins/IA32ABI/x64ia32abicc.c
M platforms/Cross/vm/sqLowcodeFFI-i386.h
M platforms/Cross/vm/sqLowcodeFFI-x86_64.h
M platforms/Cross/vm/sqMemoryAccess.h
M platforms/iOS/vm/Common/Classes/sqSqueakMainApplication+attributes.m
M platforms/unix/vm/sqConfig.h
M specs/lowcode.xml
A spurlowcode64src/examplePlugins.ext
A spurlowcode64src/examplePlugins.int
A spurlowcode64src/vm/cogit.c
A spurlowcode64src/vm/cogit.h
A spurlowcode64src/vm/cogitX64.c
A spurlowcode64src/vm/cogmethod.h
A spurlowcode64src/vm/cointerp.c
A spurlowcode64src/vm/cointerp.h
A spurlowcode64src/vm/exampleSqNamedPrims.h
A spurlowcode64src/vm/gcc3x-cointerp.c
A spurlowcode64src/vm/interp.h
A spurlowcode64src/vm/vmCallback.h
A spurlowcodesrc/examplePlugins.ext
A spurlowcodesrc/examplePlugins.int
A spurlowcodesrc/vm/cogit.c
A spurlowcodesrc/vm/cogit.h
A spurlowcodesrc/vm/cogitARMv5.c
A spurlowcodesrc/vm/cogitIA32.c
A spurlowcodesrc/vm/cogitMIPSEL.c
A spurlowcodesrc/vm/cogmethod.h
A spurlowcodesrc/vm/cointerp.c
A spurlowcodesrc/vm/cointerp.h
A spurlowcodesrc/vm/exampleSqNamedPrims.h
A spurlowcodesrc/vm/gcc3x-cointerp.c
A spurlowcodesrc/vm/interp.h
A spurlowcodesrc/vm/vmCallback.h
A spurlowcodestack64src/examplePlugins.ext
A spurlowcodestack64src/examplePlugins.int
A spurlowcodestack64src/vm/exampleSqNamedPrims.h
A spurlowcodestack64src/vm/gcc3x-interp.c
A spurlowcodestack64src/vm/interp.c
A spurlowcodestack64src/vm/interp.h
A spurlowcodestack64src/vm/vmCallback.h
A spurlowcodestacksrc/examplePlugins.ext
A spurlowcodestacksrc/examplePlugins.int
A spurlowcodestacksrc/vm/exampleSqNamedPrims.h
A spurlowcodestacksrc/vm/gcc3x-interp.c
A spurlowcodestacksrc/vm/interp.c
A spurlowcodestacksrc/vm/interp.h
A spurlowcodestacksrc/vm/vmCallback.h
Log Message:
-----------
Merge branch 'Cog' of http://www.github.com/opensmalltalk/vm into Cog
Compare: https://github.com/OpenSmalltalk/opensmalltalk-vm/compare/e7268a6b24e6...70…
Branch: refs/heads/SpurPlanningCompactor
Home: https://github.com/OpenSmalltalk/opensmalltalk-vm
Commit: b0faf3e68f179bcdc115ac74b82a799c957e6e33
https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/b0faf3e68f179bcdc1…
Author: Eliot Miranda <eliot.miranda(a)gmail.com>
Date: 2017-02-14 (Tue, 14 Feb 2017)
Changed paths:
M nsspur64src/vm/cogit.h
M nsspur64src/vm/cogitX64.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 spur64src/vm/cogit.h
M spur64src/vm/cogitX64.c
M spur64src/vm/cointerp.c
M spur64src/vm/cointerp.h
M spur64src/vm/gcc3x-cointerp.c
M spursista64src/vm/cogit.h
M spursista64src/vm/cogitX64.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/gcc3x-cointerp.c
M spurstack64src/vm/gcc3x-interp.c
M spurstack64src/vm/interp.c
M spurstacksrc/vm/gcc3x-interp.c
M spurstacksrc/vm/interp.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
M stacksrc/vm/gcc3x-interp.c
M stacksrc/vm/interp.c
Log Message:
-----------
CogVM source as per VMMaker.oscogSPC-eem.2129.
InterpreterPrimitives:
Simplify the boxed and immediate unary float primitives to do less stack
manipulations and/or primFailCode testing.
primitiveSmallFloatSquareRoot must fail for negative arguments.
64-bit Cogit:
Fix a regression in CogX64Compiler>>concretizeConvertRRd and a bug in
CogX64Compiler>>concretizeConvertRdR.
Fix a bug in genPrimitiveSmallFloatSquareRoot. The primitive must fail for
negative arguments.
Cogit:
Fix some C compilation warnings due to mismatched pointer types.
(Slang) Get methods that return AbstractInstrucitons to be inlinable.
SimpleStackBasedCogit:
Avoid assuming bytecode sizes in closure creation.
StackToRegisterMappingCogit:
Simplify genForwardersInlinedIdenticalOrNotIf: to avoid an extra call of
genEnsureOopInRegNotForwarded:...
Generate slightly better code in genSpecialSelectorComparison
Squash jump L1; nop; L1 to nop; nop (again as part of jump following).
Don't bother to inline genEnsureOopInRegNotForwarded:scratchReg:ifForwarder:
ifNotForwarder:, but do inline genEnsureOopInRegNotForwarded:scratchReg:
jumpBackTo: which is simply a call of the other.
Cogit:
Refactor fixupAt: & initializeFixupAt: to take bytecode PCs not indexes. Add
fixupAtIndex: as the method that takes an index.
Refactor sends of ensure[NonMerge]FixupAt:, moving the ever-present
"- initialPC" into ensure[NonMerge]FixupAt:.