[Vm-dev] how to add a new bytecode primitive?
Mariano Martinez Peck
marianopeck at gmail.com
Wed Jan 26 10:37:14 UTC 2011
Hi. I would like to add a new shortcut bytecode to do a little experiment to
see if I can improve the speed of a serializer we are doing. In the
serializer we call #basicNew for each object. I know that #new is in a
bytecodePrim, and I wanted to see if doing the same with #basicNew give us
some speed improvement. Just as an experiment.
Now, adding a new bytecode primitive seems complicated and I am not sure how
to do it. Can someone help me? I seems I need
1) to add the selector in
Smalltalk specialSelectors
or in
Smalltalk specialObjectsArray at: 24
2) Modify VariableNode >>#initialize
the part of:
encoder
fillDict: StdSelectors
with: SelectorNode
mapping: ((1 to: Smalltalk specialSelectorSize) collect:
[:i | Smalltalk specialSelectorAt: i])
to: (SendPlus to: SendPlus + 31).
to:
encoder
fillDict: StdSelectors
with: SelectorNode
mapping: ((1 to: Smalltalk specialSelectorSize) collect:
[:i | Smalltalk specialSelectorAt: i])
to: (SendPlus to: SendPlus + 32).
3) Change ParserNode >>#initialize
from :
Send := 208.
to:
Send := 209.
4) Interpreter >>#
I need to change from:
.....
(205 bytecodePrimNewWithArg)
(206 bytecodePrimPointX)
(207 bytecodePrimPointY)
(208 255 sendLiteralSelectorBytecode)
to
.....
(205 bytecodePrimNewWithArg)
(206 bytecodePrimPointX)
(207 bytecodePrimPointY)
(208 bytecodePrimBasicNew)
(209 255 sendLiteralSelectorBytecode)
What I am not sure here is if I am sure that the compiler will to still be
poiting normal messages to bytecode 208 instead of starting in 209.
6) Evaluate:
ParserNode initialize.
VariableNode initialize.
Am I missing something?
Finally, is there a bytecode primitive that it is not really used? because
maybe it is easier to change for a moment an already existing one. The
problem is that I want to see if we improve performance. So removing another
bytecode primitive may have negatives effects too.
Thanks a lot in advance,
Mariano
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20110126/6f113f81/attachment.htm
More information about the Vm-dev
mailing list