[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