diff --git a/smalltalksrc/VMMaker/CoInterpreter.class.st b/smalltalksrc/VMMaker/CoInterpreter.class.st index 0e6a6584ae..9034780e1d 100644 --- a/smalltalksrc/VMMaker/CoInterpreter.class.st +++ b/smalltalksrc/VMMaker/CoInterpreter.class.st @@ -1564,8 +1564,11 @@ CoInterpreter >> ceSend: selector super: superNormalBar to: rcvr numArgs: numArg methodOperand: (self mnuMethodOrNilFor: rcvr) numArgs: argumentCount) asUnsignedInteger > cogit minCogMethodAddress]) ifTrue: - [cogit - linkSendAt: (stackPages longAt: stackPointer) + [ + |outerReturn| + outerReturn := self stackTop. + cogit + linkSendAt: outerReturn in: (self mframeHomeMethod: framePointer) to: cogMethod offset: (superNormalBar = 0 @@ -1588,8 +1591,11 @@ CoInterpreter >> ceSend: selector super: superNormalBar to: rcvr numArgs: numArg [:newCogMethod| cogMethod := newCogMethod]]]. cogMethod selector = selector ifTrue: - [cogit - linkSendAt: (stackPages longAt: stackPointer) + [ + |outerReturn| + outerReturn := self stackTop. + cogit + linkSendAt: outerReturn in: (self mframeHomeMethod: framePointer) to: cogMethod offset: (superNormalBar = 0 diff --git a/smalltalksrc/VMMaker/CogInLineLiteralsARMCompiler.class.st b/smalltalksrc/VMMaker/CogInLineLiteralsARMCompiler.class.st index 66a5b708e5..de6912ff3d 100644 --- a/smalltalksrc/VMMaker/CogInLineLiteralsARMCompiler.class.st +++ b/smalltalksrc/VMMaker/CogInLineLiteralsARMCompiler.class.st @@ -170,10 +170,10 @@ CogInLineLiteralsARMCompiler >> rewriteInlineCacheAt: callSiteReturnAddress tag: | call callDistance | - false - ifTrue: [self assert: callTargetAddress >= cogit minCallAddress] - ifFalse: [callTargetAddress >= cogit minCallAddress ifFalse: - [self error: 'linking callsite to invalid address']]. + + callTargetAddress >= cogit minCallAddress ifFalse: + [self error: 'linking callsite to invalid address']. + callDistance := (callTargetAddress - (callSiteReturnAddress + 8 "pc offset"- 4 "return offset")) signedIntToLong. self assert: (self isInImmediateJumpRange: callDistance). "we don't support long call updates here" call := self bl: callDistance.