Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.3288.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.3288 Author: eem Time: 12 January 2023, 10:36:05.690572 am UUID: f51f1ed0-2a67-4403-a874-8b1ba1700ff5 Ancestors: VMMaker.oscog-eem.3287
Merge VMMaker.oscog.seperateMarking-WoC.3298 & VMMaker.oscog.seperateMarking-WoC.3299.
=============== Diff against VMMaker.oscog-eem.3287 ===============
Item was added: + ----- Method: StackInterpreter>>checkForRequiredInlinability (in category 'stack bytecodes') ----- + checkForRequiredInlinability + "This is used in methods answering inlinability. + Always answer false. But if the receiver is marked as something that must be inlined (inline == #always) raise an error." + (inline == #always and: [complete]) ifTrue: + [self error: 'cannot inline method ', selector, ' marked as <inline: #always>']. + ^false!!TMethod methodsFor: #testing stamp: 'WoC 1/12/2023 12:48'!
Item was added: + ----- Method: StackInterpreter>>checkForRequiredInlinabilityIn: (in category 'stack bytecodes') ----- + checkForRequiredInlinabilityIn: aMethod + "This is used in methods answering inlinability. + Always answer false. But if the receiver is marked as something that must be inlined (inline == #always) raise an error." + (inline == #always and: [complete]) ifTrue: + [self error: 'cannot inline method ', selector, ' marked as <inline: #always> into: ', aMethod asString]. + ^false!!TMethod methodsFor: #inlining stamp: 'WoC 1/12/2023 12:47'!
Item was changed: ----- Method: StackInterpreter>>extPushFullClosureBytecode (in category 'stack bytecodes') ----- extPushFullClosureBytecode "255 11111111 xxxxxxxx siyyyyyy push Closure Compiled block literal index xxxxxxxx (+ Extend A * 256) numCopied yyyyyy receiverOnStack: s = 1 ignoreOuterContext: i = 1 The compiler has pushed the values to be copied, if any. The receiver has been pushed on stack before if specified. Create a Closure with space for the copiedValues and pop numCopied values off the stack into the closure. Sets outerContext, compiledBlock, numArgs and receiver as specified.." | compiledBlockLiteralIndex compiledBlock byte numArgs numCopied receiverIsOnStack ignoreContext | compiledBlockLiteralIndex := self fetchByte + (extA << 8). extA := 0. + compiledBlock := objectMemory followMaybeForwarded: (self literal: compiledBlockLiteralIndex). - compiledBlock := self literal: compiledBlockLiteralIndex. self assert: (objectMemory isOopCompiledMethod: compiledBlock). numArgs := self argumentCountOf: compiledBlock. byte := self fetchByte. numCopied := byte bitAnd: 1<< 6 - 1. receiverIsOnStack := byte anyMask: 1 << 7. ignoreContext := byte anyMask: 1 << 6. + self pushFullClosureNumArgs: numArgs copiedValues: numCopied compiledBlock: compiledBlock receiverIsOnStack: receiverIsOnStack ignoreContext: ignoreContext!!TMethod methodsFor: #testing stamp: 'eem 12/15/2016 09:32'! - self pushFullClosureNumArgs: numArgs copiedValues: numCopied compiledBlock: compiledBlock receiverIsOnStack: receiverIsOnStack ignoreContext: ignoreContext!
Item was added: + ----- Method: StackInterpreter>>inlineableFunctionCall:in: (in category 'stack bytecodes') ----- + inlineableFunctionCall: aNode in: aCodeGen + "Answer if the given send node is a call to a 'functional' method--a method whose body is a single return statement of some expression and whose actual parameters can all be directly substituted." + + aCodeGen maybeBreakForTestToInline: aNode in: self. + aNode isSend ifFalse: + [^false]. + ((aCodeGen shouldGenerateAsInterpreterProxySend: aNode) + or: [aCodeGen isStructSend: aNode]) ifTrue: + [^false]. + ^(aCodeGen methodNamed: aNode selector) + ifNil: + [aNode asTransformedConstantPerform + ifNil: [self isInlineableConditional: aNode in: aCodeGen] + ifNotNil: [:n| self inlineableFunctionCall: n in: aCodeGen]] + ifNotNil: + [:m| + (m ~~ self + and: [((m isFunctionalIn: aCodeGen) or: [m mustBeInlined and: [m isComplete]]) + and: [m mayBeInlined + and: [(aCodeGen mayInline: m selector) + and: [aNode args allSatisfy: [:a| self isSubstitutableNode: a intoMethod: m in: aCodeGen]]]]]) + or: [m checkForRequiredInlinabilityIn: self]]!!TMethod methodsFor: #inlining stamp: 'WoC 1/12/2023 12:48'!
Item was added: + ----- Method: StackInterpreter>>inlineableSend:in: (in category 'stack bytecodes') ----- + inlineableSend: aNode in: aCodeGen + "Answer if the given send node is a call to a method that can be inlined." + + | m | + aCodeGen maybeBreakForTestToInline: aNode in: self. + aNode isSend ifFalse: [^false]. + m := aCodeGen methodNamed: aNode selector. "nil if builtin or external function" + + ^m ~= nil + and: [m ~~ self + and: [m unmodifiedSelector ~= self unmodifiedSelector + and: [m mayBeInlined + and: [(m isComplete and: [aCodeGen mayInline: m selector]) + or: [m checkForRequiredInlinabilityIn: self]]]]]!
vm-dev@lists.squeakfoundation.org