[Vm-dev] VM Maker Inbox: VMMaker.oscog-nice.3174.mcz

Marcel Taeumel marcel.taeumel at hpi.de
Wed Mar 9 12:16:28 UTC 2022

Hi Nicolas --

Thanks for finding this workaround!

Given some later point in time, how bad could it bite us back considering extA vs extB? Would one notice this very quickly? What does "careful recompilation of CompiledMethod at image side" mean here? What can go wrong?

Am 09.03.2022 13:05:56 schrieb commits at source.squeak.org <commits at source.squeak.org>:

Nicolas Cellier uploaded a new version of VMMaker to project VM Maker Inbox:

==================== Summary ====================

Name: VMMaker.oscog-nice.3174
Author: nice
Time: 9 March 2022, 1:04:51.911686 pm
UUID: af4f8704-18fa-564c-ac59-27c6f6364c59
Ancestors: VMMaker.oscog-eem.3173

Workaround : literal characters should have unsigned values

Currently in SistaV1, characters in range 16r100 16rFFFF are encoded as push literal character (bytecode 233) with signed extended B.

This lead to negative character values in the range 16r8000 to 16rFFFF.

The workaround consist in bit-oring extB with 16rFF so as to re-interpret it as unsigned char. BEWARE: this assumes that a single extB will be used rather than multiple consecutive extB. It works by now, because it's currently the case that image side only use 1 extB for encoding literal character - see EncoderForSistaV1>>#genPushCharacter: - above 16rFFFF, a literal index is consumed.

An alternative would be to use extA rather than extB. But it would require a careful recompilation of CompiledMethod at image side.

Similar fix is required at image side in InstructionStream>>#interpretNext2ByteSistaV1Instruction:for:extA:extB:startPC:

=============== Diff against VMMaker.oscog-eem.3173 ===============

Item was changed:
----- Method: SimpleStackBasedCogit>>genExtPushCharacterBytecode (in category 'bytecode generators') -----
"SistaV1: 233 11101001 iiiiiiii Push Character #iiiiiiii (+ Extend B * 256)"
| value |
+ value := byte1 + ((extB bitAnd: 16rFF)
- value := byte1 + (extB
extB := 0.
numExtB := 0.
^self genPushLiteral: (objectMemory characterObjectOf: value)!

Item was changed:
----- Method: StackInterpreter>>extPushCharacterBytecode (in category 'stack bytecodes') -----
"SistaV1: * 233 11101001 iiiiiiii Push Character #iiiiiiii (+ Extend B * 256)"
| value |
+ value := self fetchByte + ((extB bitAnd: 16rFF)
- value := self fetchByte + (extB
self fetchNextBytecode.
self internalPush: (objectMemory characterObjectOf: value).
numExtB := extB := 0!

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20220309/ac497aff/attachment.html>

More information about the Vm-dev mailing list