[Vm-dev] Suggested change for SpurMemoryManager>>#classAtIndex:

Hernan Wilkinson hernan.wilkinson at 10pines.com
Tue Oct 9 23:40:10 UTC 2018


Hi,
 I got compile errors when setting <inline: true> in a method I created.
 The errors where a label redefinition such as:
../../spurstack64src/vm/gcc3x-interp.c:4790:2: error: redefinition of label
'l35'
        l35:    /* end classAtIndex: */;
        ^
../../spurstack64src/vm/gcc3x-interp.c:4634:2: note: previous definition is
here
        l35:    /* end classAtIndex: */;
        ^

 After some research I concluded that the problem was
at SpurMemoryManager>>#classAtIndex: due to how it returns:
...
classTablePage = nilObj ifTrue:
[^nil].
^self
fetchPointer: (classIndex bitAnd: self classTableMinorIndexMask)
ofObject: classTablePage

 I think the source code generator does not support correctly returning at
different points when inlining the same method more than once.
 So I changed that implementation to:
...
^classTablePage = nilObj
ifTrue: [nil]
ifFalse: [ self
fetchPointer: (classIndex bitAnd: self classTableMinorIndexMask)
ofObject: classTablePage ]

 Doing so the compile errors were gone and the VM keeps working correctly.
 Is this fix correct or does it have some performance hit I do not know?
 Should I inform about this change with a PR? (Sorry about this question
but I'm new to this vm stuff :-) )

 Here is the complete code of the method:
classAtIndex: classIndex
<api>
<inline: true>
| classTablePage |
self assert: (classIndex >= 0 and: [classIndex <= self tagMask or:
[classIndex >= self arrayClassIndexPun and: [classIndex <= self
classIndexMask]]]).
classTablePage := self fetchPointer: classIndex >> self
classTableMajorIndexShift
ofObject: hiddenRootsObj.
^classTablePage = nilObj
ifTrue: [nil]
ifFalse: [ self
fetchPointer: (classIndex bitAnd: self classTableMinorIndexMask)
ofObject: classTablePage ]

 Cheers!
 Hernan.
-- 

*HernĂ¡n WilkinsonAgile Software Development, Teaching & Coaching*
*Phone: +54-011*-4893-2057
*Twitter: @HernanWilkinson*
*site: http://www.10Pines.com <http://www.10pines.com/>*
Address: Alem 896, Floor 6, Buenos Aires, Argentina
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20181009/22914f58/attachment-0001.html>


More information about the Vm-dev mailing list