From 3e97c57db44a37399a2d22d41cde2e560c8ad402 Mon Sep 17 00:00:00 2001 From: fouziray Date: Fri, 19 Sep 2025 16:47:18 +0200 Subject: [PATCH] clean up dead code and and refactor callerReturnAdress for better understanding --- smalltalksrc/VMMaker/CoInterpreter.class.st | 8 ++++++-- smalltalksrc/VMMaker/CogIA32Compiler.class.st | 8 ++------ .../VMMaker/CogInLineLiteralsARMCompiler.class.st | 6 ++---- .../VMMaker/CogOutOfLineLiteralsARMCompiler.class.st | 4 ++-- .../VMMaker/CogOutOfLineLiteralsARMv8Compiler.class.st | 4 ++-- smalltalksrc/VMMaker/CogX64Compiler.class.st | 8 ++------ smalltalksrc/VMMaker/Cogit.class.st | 10 +++++----- 7 files changed, 21 insertions(+), 27 deletions(-) diff --git a/smalltalksrc/VMMaker/CoInterpreter.class.st b/smalltalksrc/VMMaker/CoInterpreter.class.st index 0557825351..2f0c72c970 100644 --- a/smalltalksrc/VMMaker/CoInterpreter.class.st +++ b/smalltalksrc/VMMaker/CoInterpreter.class.st @@ -2978,8 +2978,10 @@ CoInterpreter >> handleUnlinkedSendFor: maybeForwardedSelector to: receiver isSu methodOperand: (self mnuMethodOrNilFor: receiver) numArgs: argumentCount). mnuPIC asUnsignedIntegerPtr > cogit minCogMethodAddress ifTrue: [ + | callerReturnAddress | + callerReturnAddress := self stackTop. cogit - linkSendAt: (stackPages longAt: stackPointer) + linkSendAt: callerReturnAddress in: (self mframeHomeMethod: framePointer) to: mnuPIC offset: (isSuper = 0 @@ -3009,8 +3011,10 @@ CoInterpreter >> handleUnlinkedSendFor: maybeForwardedSelector to: receiver isSu cogMethod selector = selector ifTrue: [ + | callerReturnAddress | + callerReturnAddress := self stackTop. cogit - linkSendAt: (stackPages longAt: stackPointer) + linkSendAt: callerReturnAddress in: (self mframeHomeMethod: framePointer) to: cogMethod offset: (isSuper = 0 diff --git a/smalltalksrc/VMMaker/CogIA32Compiler.class.st b/smalltalksrc/VMMaker/CogIA32Compiler.class.st index 143a5bcd0d..0f9e9d5cfe 100644 --- a/smalltalksrc/VMMaker/CogIA32Compiler.class.st +++ b/smalltalksrc/VMMaker/CogIA32Compiler.class.st @@ -3943,12 +3943,8 @@ CogIA32Compiler >> rewriteInlineCacheAt: callSiteReturnAddress tag: cacheTag tar | callDistance | - "self cCode: '' - inSmalltalk: [cogit disassembleFrom: callSiteReturnAddress - 10 to: callSiteReturnAddress - 1]." - 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) signedIntToLong. objectMemory byteAt: callSiteReturnAddress - 1 put: (callDistance >> 24 bitAnd: 16rFF); diff --git a/smalltalksrc/VMMaker/CogInLineLiteralsARMCompiler.class.st b/smalltalksrc/VMMaker/CogInLineLiteralsARMCompiler.class.st index 8fc552e1d3..9bf2a18544 100644 --- a/smalltalksrc/VMMaker/CogInLineLiteralsARMCompiler.class.st +++ b/smalltalksrc/VMMaker/CogInLineLiteralsARMCompiler.class.st @@ -170,10 +170,8 @@ 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. diff --git a/smalltalksrc/VMMaker/CogOutOfLineLiteralsARMCompiler.class.st b/smalltalksrc/VMMaker/CogOutOfLineLiteralsARMCompiler.class.st index 3ffa4cd073..0fc4ba5d3b 100644 --- a/smalltalksrc/VMMaker/CogOutOfLineLiteralsARMCompiler.class.st +++ b/smalltalksrc/VMMaker/CogOutOfLineLiteralsARMCompiler.class.st @@ -203,8 +203,8 @@ CogOutOfLineLiteralsARMCompiler >> rewriteInlineCacheAt: callSiteReturnAddress t | call callDistance | - 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. diff --git a/smalltalksrc/VMMaker/CogOutOfLineLiteralsARMv8Compiler.class.st b/smalltalksrc/VMMaker/CogOutOfLineLiteralsARMv8Compiler.class.st index 64244ddf7c..b0a0003e3f 100644 --- a/smalltalksrc/VMMaker/CogOutOfLineLiteralsARMv8Compiler.class.st +++ b/smalltalksrc/VMMaker/CogOutOfLineLiteralsARMv8Compiler.class.st @@ -371,8 +371,8 @@ CogOutOfLineLiteralsARMv8Compiler >> rewriteInlineCacheAt: callSiteReturnAddress | call callDistance | - 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 - 4 "return offset")). self assert: (self isInImmediateJumpRange: callDistance). "we don't support long call updates here" call := self bl: callDistance. diff --git a/smalltalksrc/VMMaker/CogX64Compiler.class.st b/smalltalksrc/VMMaker/CogX64Compiler.class.st index 24c964b20f..8ecf893733 100644 --- a/smalltalksrc/VMMaker/CogX64Compiler.class.st +++ b/smalltalksrc/VMMaker/CogX64Compiler.class.st @@ -4605,12 +4605,8 @@ CogX64Compiler >> rewriteInlineCacheAt: callSiteReturnAddress tag: cacheTag targ | callDistance | - "self cCode: '' - inSmalltalk: [cogit disassembleFrom: callSiteReturnAddress - 12 to: callSiteReturnAddress - 1]." - 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) signedIntToLong. objectMemory byteAt: callSiteReturnAddress - 1 put: (callDistance >> 24 bitAnd: 16rFF); diff --git a/smalltalksrc/VMMaker/Cogit.class.st b/smalltalksrc/VMMaker/Cogit.class.st index 7f0e74b5fd..d75585c06f 100644 --- a/smalltalksrc/VMMaker/Cogit.class.st +++ b/smalltalksrc/VMMaker/Cogit.class.st @@ -10091,9 +10091,9 @@ Cogit >> patchToMegamorphicICFor: selector numArgs: numArgs receiver: receiver [ sp=> sender return address" - | oPIC outerReturn extent | + | oPIC callerReturnAddress extent | - outerReturn := coInterpreter stackTop. + callerReturnAddress := coInterpreter stackTop. oPIC := methodZone openPICWithSelector: selector. @@ -10117,14 +10117,14 @@ Cogit >> patchToMegamorphicICFor: selector numArgs: numArgs receiver: receiver [ "Relink the send site to the pic. Reset the cache tag to the selector, for the benefit of the cacheTag assert check in checkIfValidOopRef:pc:cogMethod: et al." extent := backEnd - rewriteInlineCacheAt: outerReturn + rewriteInlineCacheAt: callerReturnAddress tag: (self inlineCacheValueForSelector: selector in: coInterpreter mframeHomeMethodExport - at: outerReturn) + at: callerReturnAddress) target: oPIC asInteger + cmEntryOffset] flushingCacheWith: [ self - flushICacheFrom: outerReturn asUnsignedInteger - extent to: outerReturn asUnsignedInteger ]. + flushICacheFrom: callerReturnAddress asUnsignedInteger - extent to: callerReturnAddress asUnsignedInteger ]. "Jump into the oPIC at its entry" coInterpreter executeCogMethod: oPIC fromLinkedSendWithReceiver: receiver.