VM Maker: VMMaker.oscog-rsf.2095.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

VM Maker: VMMaker.oscog-rsf.2095.mcz

commits-2
 
Ronie Salgado Faila uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-rsf.2095.mcz

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

Name: VMMaker.oscog-rsf.2095
Author: rsf
Time: 17 January 2017, 5:04:54.019809 am
UUID: 0c6b970d-5840-4b69-8c09-986a7941b6f4
Ancestors: VMMaker.oscog-eem.2094

I keep working on the 64 bits version of Lowcode. Now I started writing the actual ABI compiler and I got most of the tests for the UFFI passing (except for a time to time crash on the qsort test), with both the Cogit and the StackInterpreter. I still have to implement and test the splitting of small structures into registers, but it should be easy to do.


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

Item was changed:
  ----- Method: CogObjectRepresentationFor64BitSpur>>genLcInt32ToOop: (in category 'inline primitive support') -----
  genLcInt32ToOop: value
  <option: #LowcodeVM>
- self genConvertIntegerToSmallIntegerInReg: value.
  cogit SignExtend32R: value R: value.
+ self genConvertIntegerToSmallIntegerInReg: value.
  cogit ssPushRegister: value.
  ^ 0!

Item was changed:
  ----- Method: CogObjectRepresentationFor64BitSpur>>genLcOopToInt32: (in category 'inline primitive support') -----
  genLcOopToInt32: value
  <option: #LowcodeVM>
  self genConvertSmallIntegerToIntegerInReg: value.
+ cogit ssPushNativeRegister: value.
- cogit ssPushRegister: value.
  ^ 0!

Item was changed:
  ----- Method: CogObjectRepresentationFor64BitSpur>>genLcOopToUInt32: (in category 'inline primitive support') -----
  genLcOopToUInt32: value
  <option: #LowcodeVM>
  self genConvertSmallIntegerToIntegerInReg: value.
+ cogit ssPushNativeRegister: value.
- cogit ssPushRegister: value.
  ^ 0!

Item was changed:
  ----- Method: CogObjectRepresentationFor64BitSpur>>genLcUInt32ToOop: (in category 'inline primitive support') -----
  genLcUInt32ToOop: value
  <option: #LowcodeVM>
- self genConvertIntegerToSmallIntegerInReg: value.
  cogit ZeroExtend32R: value R: value.
+ self genConvertIntegerToSmallIntegerInReg: value.
  cogit ssPushRegister: value.
  ^ 0!

Item was changed:
  ----- Method: CogSimStackNativeEntry>>registerSecondOrNil (in category 'accessing') -----
  registerSecondOrNil
+ ^ type = SSRegisterPair ifTrue: [registerSecond]!
- ^ type SSRegisterPair ifTrue: [registerSecond]!

Item was changed:
  ----- Method: CogX64Compiler>>computeMaximumSize (in category 'generate machine code') -----
(excessive size, no diff calculated)

Item was changed:
  ----- Method: CogX64Compiler>>concretizeCallR (in category 'generate machine code') -----
  concretizeCallR
  "Will get inlined into concretizeAt: switch."
  <inline: true>
+ | reg skip |
- | reg |
  reg := operands at: 0.
+ (reg <= 7)
+ ifTrue: [skip := 0]
+ ifFalse: [skip := 1. machineCode at: 0 put: (self rexw: false r: 0 x: 0 b: reg). (skip := 1)].
+
  machineCode
+ at: skip + 0 put: 16rFF;
+ at: skip + 1 put: (self mod: ModReg RM: reg RO: 2).
+ ^machineCodeSize := 2!
- at: 1 put: (self rexR: 0 x: 0 b: reg);
- at: 1 put: 16rFF;
- at: 2 put: (self mod: ModReg RM: reg RO: 2).
- ^machineCodeSize := 3!

Item was changed:
  ----- Method: CogX64Compiler>>concretizeMoveM32rR (in category 'generate machine code') -----
  concretizeMoveM32rR
  "Will get inlined into concretizeAt: switch."
  <inline: true>
  | offset srcReg destReg skip |
  offset := operands at: 0.
  srcReg := operands at: 1.
  destReg := operands at: 2.
  (srcReg <= 7 and: [destReg <= 7])
  ifTrue: [skip := 0]
+ ifFalse: [skip := 1. machineCode at: 0 put: (self rexw: false r: destReg x: 0 b: srcReg)].
- ifFalse: [machineCode at: (skip := 1) put: (self rexw: false r: destReg x: 0 b: srcReg)].
  machineCode
  at: skip + 0 put: 16r8b.
  offset = 0 ifTrue:
  [(srcReg bitAnd: 6) ~= RSP ifTrue:
  [machineCode at: skip + 1 put: (self mod: ModRegInd RM: srcReg RO: destReg).
  ^machineCodeSize := skip + 2].
  (srcReg bitAnd: 7) = RSP ifTrue: "RBP & R13 fall through"
  [machineCode
  at: skip + 1 put: (self mod: ModRegInd RM: srcReg RO: destReg);
  at: skip + 2 put: (self s: SIB1 i: 4 b: srcReg).
  ^machineCodeSize := skip + 3]].
  (self isQuick: offset) ifTrue:
  [(srcReg bitAnd: 7) ~= RSP ifTrue:
  [machineCode
  at: skip + 1 put: (self mod: ModRegRegDisp8 RM: srcReg RO: destReg);
  at: skip + 2 put: (offset bitAnd: 16rFF).
  ^machineCodeSize := skip + 3].
  machineCode
  at: skip + 1 put: (self mod: ModRegRegDisp8 RM: srcReg RO: destReg);
  at: skip + 2 put: (self s: SIB1 i: 4 b: srcReg);
  at: skip + 3 put: (offset bitAnd: 16rFF).
  ^machineCodeSize := skip + 4].
  machineCode at: skip + 1 put: (self mod: ModRegRegDisp32 RM: srcReg RO: destReg).
  (srcReg bitAnd: 7) = RSP ifTrue:
  [machineCode at: skip + 2 put: (self s: SIB1 i: 4 b: srcReg).
  skip := skip + 1].
  machineCode
  at: skip + 2 put: (offset bitAnd: 16rFF);
  at: skip + 3 put: (offset >> 8 bitAnd: 16rFF);
  at: skip + 4 put: (offset >> 16 bitAnd: 16rFF);
  at: skip + 5 put: (offset >> 24 bitAnd: 16rFF).
  ^machineCodeSize := skip + 6!

Item was changed:
  ----- Method: CogX64Compiler>>concretizeMoveRM32r (in category 'generate machine code') -----
  concretizeMoveRM32r
  "Will get inlined into concretizeAt: switch."
  <inline: true>
  | offset srcReg destReg skip |
+ srcReg := operands at: 0.
+ offset := operands at: 1.
- offset := operands at: 0.
- srcReg := operands at: 1.
  destReg := operands at: 2.
  (srcReg <= 7 and: [destReg <= 7])
  ifTrue: [skip := 0]
+ ifFalse: [skip := 1. machineCode at: 0 put: (self rexw: false r: srcReg x: 0 b: destReg)].
- ifFalse: [machineCode at: (skip := 1) put: (self rexw: false r: srcReg x: 0 b: destReg)].
  machineCode
  at: skip + 0 put: 16r89.
  offset = 0 ifTrue:
  [(destReg bitAnd: 6) ~= RSP ifTrue:
  [machineCode at: skip + 1 put: (self mod: ModRegInd RM: destReg RO: srcReg).
  ^machineCodeSize := skip + 2].
  (destReg bitAnd: 7) = RSP ifTrue: "RBP & R13 fall through"
  [machineCode
  at: skip + 1 put: (self mod: ModRegInd RM: destReg RO: srcReg);
  at: skip + 2 put: (self s: SIB1 i: 4 b: destReg).
  ^machineCodeSize := skip + 3]].
  (self isQuick: offset) ifTrue:
  [(destReg bitAnd: 7) ~= RSP ifTrue:
  [machineCode
  at: skip + 1 put: (self mod: ModRegRegDisp8 RM: destReg RO: srcReg);
  at: skip + 2 put: (offset bitAnd: 16rFF).
  ^machineCodeSize := skip + 3].
  machineCode
  at: skip + 1 put: (self mod: ModRegRegDisp8 RM: destReg RO: srcReg);
  at: skip + 2 put: (self s: SIB1 i: 4 b: destReg);
  at: skip + 3 put: (offset bitAnd: 16rFF).
  ^machineCodeSize := skip + 4].
  machineCode at: skip + 1 put: (self mod: ModRegRegDisp32  RM: destReg RO: srcReg).
  (destReg bitAnd: 7) = RSP ifTrue:
  [machineCode at: skip + 2 put: (self s: SIB1 i: 4 b: destReg).
  skip := skip + 1].
  machineCode
  at: skip + 2 put: (offset bitAnd: 16rFF);
  at: skip + 3 put: (offset >> 8 bitAnd: 16rFF);
  at: skip + 4 put: (offset >> 16 bitAnd: 16rFF);
  at: skip + 5 put: (offset >> 24 bitAnd: 16rFF).
  ^machineCodeSize := skip + 6!

Item was changed:
  ----- Method: CogX64Compiler>>concretizeZeroExtend32RR (in category 'generate machine code') -----
  concretizeZeroExtend32RR
  "Will get inlined into concretizeAt: switch."
  "movzxbq"
  <inline: true>
  | srcReg destReg skip |
  srcReg := operands at: 0.
  destReg := operands at: 1.
  (srcReg <= 7 and: [destReg <= 7])
  ifTrue: [skip := 0]
+ ifFalse: [skip := 1. machineCode at: 0 put: (self rexw: false r: destReg x: 0 b: srcReg)].
- ifFalse: [machineCode at: (skip := 1) put: (self rexw: false r: destReg x: 0 b: srcReg)].
 
  machineCode
  at: skip + 0 put: 16r8b;
  at: skip + 1 put: (self mod: ModReg RM: srcReg RO: destReg).
  ^ machineCodeSize := skip + 2!

Item was changed:
  ----- Method: CogX64Compiler>>dispatchConcretize (in category 'generate machine code') -----
  dispatchConcretize
  "Attempt to generate concrete machine code for the instruction at address.
  This is the inner dispatch of concretizeAt: actualAddress which exists only
  to get around the branch size limits in the SqueakV3 (blue book derived)
  bytecode set."
  <returnTypeC: #void>
  opcode caseOf: {
  "Noops & Pseudo Ops"
  [Label] -> [^self concretizeLabel].
  [AlignmentNops] -> [^self concretizeAlignmentNops].
  [Fill32] -> [^self concretizeFill32].
  [Nop] -> [^self concretizeNop].
  "Specific Control/Data Movement"
  [CDQ] -> [^self concretizeCDQ].
  [IDIVR] -> [^self concretizeIDIVR].
  [IMULRR] -> [^self concretizeMulRR].
  "[CPUID] -> [^self concretizeCPUID]."
  "[CMPXCHGAwR] -> [^self concretizeCMPXCHGAwR]."
  "[CMPXCHGMwrR] -> [^self concretizeCMPXCHGMwrR]."
  "[LFENCE] -> [^self concretizeFENCE: 5]."
  "[MFENCE] -> [^self concretizeFENCE: 6].
  [SFENCE] -> [^self concretizeFENCE: 7]."
  "[LOCK] -> [^self concretizeLOCK]."
  "[XCHGAwR] -> [^self concretizeXCHGAwR]."
  "[XCHGMwrR] -> [^self concretizeXCHGMwrR]."
  [XCHGRR] -> [^self concretizeXCHGRR].
  [REP] -> [^self concretizeREP].
  [CLD] -> [^self concretizeCLD].
  [MOVSB] -> [^self concretizeMOVSB].
  [MOVSQ] -> [^self concretizeMOVSQ].
  "Control"
  [Call] -> [^self concretizeCall].
  [CallR] -> [^self concretizeCallR].
  [CallFull] -> [^self concretizeCallFull].
  [JumpR] -> [^self concretizeJumpR].
  [JumpFull] -> [^self concretizeJumpFull].
  [JumpLong] -> [^self concretizeJumpLong].
  [JumpLongZero] -> [^self concretizeConditionalJump: 16r4].
  [JumpLongNonZero] -> [^self concretizeConditionalJump: 16r5].
  [Jump] -> [^self concretizeJump].
  "Table B-1 Intel¬Æ 64 and IA-32 Architectures Software Developer's Manual Volume 1: Basic Architecture"
  [JumpZero] -> [^self concretizeConditionalJump: 16r4].
  [JumpNonZero] -> [^self concretizeConditionalJump: 16r5].
  [JumpNegative] -> [^self concretizeConditionalJump: 16r8].
  [JumpNonNegative] -> [^self concretizeConditionalJump: 16r9].
  [JumpOverflow] -> [^self concretizeConditionalJump: 16r0].
  [JumpNoOverflow] -> [^self concretizeConditionalJump: 16r1].
  [JumpCarry] -> [^self concretizeConditionalJump: 16r2].
  [JumpNoCarry] -> [^self concretizeConditionalJump: 16r3].
  [JumpLess] -> [^self concretizeConditionalJump: 16rC].
  [JumpGreaterOrEqual] -> [^self concretizeConditionalJump: 16rD].
  [JumpGreater] -> [^self concretizeConditionalJump: 16rF].
  [JumpLessOrEqual] -> [^self concretizeConditionalJump: 16rE].
  [JumpBelow] -> [^self concretizeConditionalJump: 16r2].
  [JumpAboveOrEqual] -> [^self concretizeConditionalJump: 16r3].
  [JumpAbove] -> [^self concretizeConditionalJump: 16r7].
  [JumpBelowOrEqual] -> [^self concretizeConditionalJump: 16r6].
  [JumpFPEqual] -> [^self concretizeConditionalJump: 16r4].
  [JumpFPNotEqual] -> [^self concretizeConditionalJump: 16r5].
  [JumpFPLess] -> [^self concretizeConditionalJump: 16r2].
  [JumpFPGreaterOrEqual] -> [^self concretizeConditionalJump: 16r3].
  [JumpFPGreater] -> [^self concretizeConditionalJump: 16r7].
  [JumpFPLessOrEqual] -> [^self concretizeConditionalJump: 16r6].
  [JumpFPOrdered] -> [^self concretizeConditionalJump: 16rB].
  [JumpFPUnordered] -> [^self concretizeConditionalJump: 16rA].
  [RetN] -> [^self concretizeRetN].
  [Stop] -> [^self concretizeStop].
  "Arithmetic"
  [AddCqR] -> [^self concretizeArithCqRWithRO: 0 raxOpcode: 15r05].
  [AddCwR] -> [^self concretizeArithCwR: 16r03].
  [AddRR] -> [^self concretizeOpRR: 16r03].
  [AddRsRs] -> [^self concretizeSEEOpRsRs: 16r58].
  [AddRdRd] -> [^self concretizeSEE2OpRdRd: 16r58].
  [AndCqR] -> [^self concretizeArithCqRWithRO: 4 raxOpcode: 16r25].
  [AndCwR] -> [^self concretizeArithCwR: 16r23].
  [AndRR] -> [^self concretizeOpRR: 16r23].
  [TstCqR] -> [^self concretizeTstCqR].
  [CmpCqR] -> [^self concretizeArithCqRWithRO: 7 raxOpcode: 16r3D].
  [CmpCwR] -> [^self concretizeArithCwR: 16r39].
  [CmpC32R] -> [^self concretizeCmpC32R].
  [CmpRR] -> [^self concretizeReverseOpRR: 16r39].
  [CmpRdRd] -> [^self concretizeCmpRdRd].
  [CmpRsRs] -> [^self concretizeCmpRsRs].
  [DivRdRd] -> [^self concretizeSEE2OpRdRd: 16r5E].
  [DivRsRs] -> [^self concretizeSEEOpRsRs: 16r5E].
  [MulRdRd] -> [^self concretizeSEE2OpRdRd: 16r59].
  [MulRsRs] -> [^self concretizeSEEOpRsRs: 16r59].
  [OrCqR] -> [^self concretizeArithCqRWithRO: 1 raxOpcode: 16r0D].
  [OrCwR] -> [^self concretizeArithCwR: 16r0B].
  [OrRR] -> [^self concretizeOpRR: 16r0B].
  [SubCqR] -> [^self concretizeArithCqRWithRO: 5 raxOpcode: 16r2D].
  [SubCwR] -> [^self concretizeArithCwR: 16r2B].
  [SubRR] -> [^self concretizeOpRR: 16r2B].
  [SubRdRd] -> [^self concretizeSEE2OpRdRd: 16r5C].
  [SubRsRs] -> [^self concretizeSEEOpRsRs: 16r5C].
  [SqrtRd] -> [^self concretizeSqrtRd].
  [SqrtRs] -> [^self concretizeSqrtRs].
  [XorCwR] -> [^self concretizeArithCwR: 16r33].
  [XorRR] -> [^self concretizeOpRR: 16r33].
  [XorRdRd] -> [^self concretizeXorRdRd].
  [XorRsRs] -> [^self concretizeXorRsRs].
  [NegateR] -> [^self concretizeNegateR].
  [LoadEffectiveAddressMwrR] -> [^self concretizeLoadEffectiveAddressMwrR].
  [RotateLeftCqR] -> [^self concretizeShiftCqRegOpcode: 0].
  [RotateRightCqR] -> [^self concretizeShiftCqRegOpcode: 1].
  [ArithmeticShiftRightCqR] -> [^self concretizeShiftCqRegOpcode: 7].
  [LogicalShiftRightCqR] -> [^self concretizeShiftCqRegOpcode: 5].
  [LogicalShiftLeftCqR] -> [^self concretizeShiftCqRegOpcode: 4].
  [ArithmeticShiftRightRR] -> [^self concretizeShiftRegRegOpcode: 7].
  [LogicalShiftLeftRR] -> [^self concretizeShiftRegRegOpcode: 4].
  "Data Movement"
  [MoveCqR] -> [^self concretizeMoveCqR].
  [MoveCwR] -> [^self concretizeMoveCwR].
  [MoveC32R] -> [^self concretizeMoveC32R].
  [MoveRR] -> [^self concretizeReverseOpRR: 16r89].
  [MoveAwR] -> [^self concretizeMoveAwR].
  [MoveA32R] -> [^self concretizeMoveA32R].
  [MoveRAw] -> [^self concretizeMoveRAw].
  [MoveRA32] -> [^self concretizeMoveRA32].
  [MoveAbR] -> [^self concretizeMoveAbR].
  [MoveRAb] -> [^self concretizeMoveRAb].
  [MoveMbrR] -> [^self concretizeMoveMbrR].
  [MoveRMbr] -> [^self concretizeMoveRMbr].
+ [MoveM8rR] -> [^self concretizeMoveMbrR].
+ [MoveRM8r] -> [^self concretizeMoveRMbr].
  [MoveM16rR] -> [^self concretizeMoveM16rR].
  [MoveRM16r] -> [^self concretizeMoveRM16r].
  [MoveM32rR] -> [^self concretizeMoveM32rR].
  [MoveM32rRs] -> [^self concretizeMoveM32rRs].
  [MoveM64rRd] -> [^self concretizeMoveM64rRd].
  [MoveMwrR] -> [^self concretizeMoveMwrR].
  [MoveXbrRR] -> [^self concretizeMoveXbrRR].
  [MoveRXbrR] -> [^self concretizeMoveRXbrR].
  [MoveXwrRR] -> [^self concretizeMoveXwrRR].
  [MoveRXwrR] -> [^self concretizeMoveRXwrR].
  [MoveX32rRR] -> [^self concretizeMoveX32rRR].
  [MoveRX32rR] -> [^self concretizeMoveRX32rR].
  [MoveRMwr] -> [^self concretizeMoveRMwr].
  [MoveRM32r] -> [^self concretizeMoveRM32r].
  [MoveRsM32r] -> [^self concretizeMoveRsM32r].
  [MoveRdM64r] -> [^self concretizeMoveRdM64r].
  [MoveRdR] -> [^self concretizeMoveRdR].
  [MoveRRd] -> [^self concretizeMoveRRd].
  [MoveRdRd] -> [^self concretizeMoveRdRd].
  [MoveRsRs] -> [^self concretizeMoveRsRs].
  [PopR] -> [^self concretizePopR].
  [PushR] -> [^self concretizePushR].
  [PushCq] -> [^self concretizePushCq].
  [PushCw] -> [^self concretizePushCw].
  [PrefetchAw] -> [^self concretizePrefetchAw].
  "Conversion"
  [ConvertRRd] -> [^self concretizeConvertRRd].
  [ConvertRdR] -> [^self concretizeConvertRdR].
  [ConvertRRs] -> [^self concretizeConvertRRs].
  [ConvertRsR] -> [^self concretizeConvertRsR].
  [ConvertRsRd] -> [^self concretizeConvertRsRd].
  [ConvertRdRs] -> [^self concretizeConvertRdRs].
 
  [SignExtend8RR] -> [^self concretizeSignExtend8RR].
  [SignExtend16RR] -> [^self concretizeSignExtend16RR].
  [SignExtend32RR] -> [^self concretizeSignExtend32RR].
 
  [ZeroExtend8RR] -> [^self concretizeZeroExtend8RR].
  [ZeroExtend16RR] -> [^self concretizeZeroExtend16RR].
  [ZeroExtend32RR] -> [^self concretizeZeroExtend32RR].
  }!

Item was changed:
  ----- Method: StackInterpreter>>lowcodePrimitiveLockRegisters (in category 'inline primitive generated code') -----
  lowcodePrimitiveLockRegisters
  <option: #LowcodeVM> "Lowcode instruction generator"
 
+ "Nop in the interpreter"
- self abort.
 
 
  !

Item was changed:
  ----- Method: StackInterpreter>>lowcodePrimitiveUnlockRegisters (in category 'inline primitive generated code') -----
  lowcodePrimitiveUnlockRegisters
  <option: #LowcodeVM> "Lowcode instruction generator"
 
+ "Nop in the interpreter"
- self abort.
 
 
  !

Item was changed:
  ----- Method: StackToRegisterMappingCogit>>callSwitchToSmalltalkStack (in category 'inline ffi') -----
  callSwitchToSmalltalkStack
  <option: #LowcodeVM>
  "Restore the link register"
+ backEnd hasVarBaseRegister ifTrue:
+ [self MoveCq: self varBaseAddress R: VarBaseReg].
  backEnd hasLinkRegister ifTrue: [
  self MoveAw: coInterpreter instructionPointerAddress R: LinkReg
  ].
  backEnd genLoadStackPointers.!

Item was changed:
  ----- Method: StackToRegisterMappingCogit>>eventualTargetOf: (in category 'peephole optimizations') -----
  eventualTargetOf: targetBytecodePC
  "Attempt to follow a branch to a pc.  Handle branches to unconditional jumps
  and branches to push: aBoolean; conditional branch pairs.  If the branch cannot
  be followed answer targetBytecodePC."
 
  | currentTarget nextPC nExts descriptor span cond |
  <var: #descriptor type: #'BytecodeDescriptor *'>
  nextPC := currentTarget := targetBytecodePC.
  [[nExts := 0.
   descriptor := self generatorAt: bytecodeSetOffset
  + (objectMemory fetchByte: nextPC ofObject: methodObj).
   descriptor isReturn ifTrue: [^currentTarget]. "avoid stepping off the end of methods"
   descriptor isExtension]
  whileTrue:
  [nExts := nExts + 1.
  nextPC := nextPC + descriptor numBytes].
  descriptor isUnconditionalBranch
  ifTrue:
  [span := self spanFor: descriptor at: nextPC exts: nExts in: methodObj.
  span < 0 ifTrue: "Do *not* follow backward branches; these are interrupt points and should not be elided."
  [^currentTarget].
  nextPC := nextPC + descriptor numBytes + span]
  ifFalse:
+ [descriptor generator == #genPushConstantTrueBytecode ifTrue: [ cond := true ]
+ ifFalse: [ descriptor generator == #genPushConstantFalseBytecode ifTrue: [ cond := false ] ifFalse: [ ^currentTarget ] ].
- [descriptor generator
- caseOf: {
- [#genPushConstantTrueBytecode] -> [cond := true].
- [#genPushConstantFalseBytecode] -> [cond := false] }
- otherwise: [^currentTarget].
  "Don't step into loops across a pushTrue; jump:if: boundary, so as not to confuse stack depth fixup."
  (fixups at: nextPC - initialPC) isBackwardBranchFixup ifTrue:
  [^currentTarget].
  nextPC := self eventualTargetOf: nextPC + descriptor numBytes.
  nExts := 0.
  [descriptor := self generatorAt: bytecodeSetOffset
  + (objectMemory fetchByte: nextPC ofObject: methodObj).
   descriptor isReturn ifTrue: [^currentTarget]. "avoid stepping off the end of methods"
   descriptor isExtension]
  whileTrue:
  [nExts := nExts + 1.
  nextPC := nextPC + descriptor numBytes].
  descriptor isBranch ifFalse:
  [^currentTarget].
  descriptor isUnconditionalBranch ifTrue:
  [^currentTarget].
  nextPC := cond == descriptor isBranchTrue
  ifTrue: [nextPC
  + descriptor numBytes
  + (self spanFor: descriptor at: nextPC exts: nExts in: methodObj)]
  ifFalse: [nextPC + descriptor numBytes]].
  currentTarget := nextPC]
  repeat!

Item was changed:
  ----- Method: StackToRegisterMappingCogit>>genLowcodeMoveFloat32ToPhysical (in category 'inline primitive generators generated code') -----
  genLowcodeMoveFloat32ToPhysical
  <option: #LowcodeVM> "Lowcode instruction generator"
- | registerID value |
- registerID := extA.
 
+ self ssNativeTop nativeStackPopToReg: extA.
- (value := backEnd availableFloatRegisterOrNoneFor: self liveFloatRegisters) = NoReg ifTrue:
- [self ssAllocateRequiredFloatReg: (value := DPFPReg0)].
- self ssNativeTop nativePopToReg: value.
  self ssNativePop: 1.
+ currentCallCleanUpSize := currentCallCleanUpSize + BytesPerWord.
-
- self abort.
-
  extA := 0.
+
  ^ 0
 
  !

Item was changed:
  ----- Method: StackToRegisterMappingCogit>>genLowcodeMoveFloat64ToPhysical (in category 'inline primitive generators generated code') -----
  genLowcodeMoveFloat64ToPhysical
  <option: #LowcodeVM> "Lowcode instruction generator"
- | registerID value |
- registerID := extA.
 
+ self ssNativeTop nativeStackPopToReg: extA.
- (value := backEnd availableFloatRegisterOrNoneFor: self liveFloatRegisters) = NoReg ifTrue:
- [self ssAllocateRequiredFloatReg: (value := DPFPReg0)].
- self ssNativeTop nativePopToReg: value.
  self ssNativePop: 1.
+ currentCallCleanUpSize := currentCallCleanUpSize + 8.
-
- self abort.
-
  extA := 0.
+
  ^ 0
 
  !

Item was changed:
  ----- Method: StackToRegisterMappingCogit>>genLowcodeMoveInt32ToPhysical (in category 'inline primitive generators generated code') -----
  genLowcodeMoveInt32ToPhysical
  <option: #LowcodeVM> "Lowcode instruction generator"
- | registerID value |
- registerID := extA.
 
+ self ssNativeTop nativeStackPopToReg: extA.
- (value := backEnd availableRegisterOrNoneFor: self liveRegisters) = NoReg ifTrue:
- [self ssAllocateRequiredReg:
- (value := optStatus isReceiverResultRegLive
- ifTrue: [Arg0Reg]
- ifFalse: [ReceiverResultReg])].
- value = ReceiverResultReg ifTrue:
- [ optStatus isReceiverResultRegLive: false ].
- self ssNativeTop nativePopToReg: value.
  self ssNativePop: 1.
+ currentCallCleanUpSize := currentCallCleanUpSize + BytesPerWord.
-
- self abort.
-
  extA := 0.
+
  ^ 0
 
  !

Item was changed:
  ----- Method: StackToRegisterMappingCogit>>genLowcodeMoveInt64ToPhysical (in category 'inline primitive generators generated code') -----
  genLowcodeMoveInt64ToPhysical
  <option: #LowcodeVM> "Lowcode instruction generator"
- | registerID valueHigh value valueLow |
- registerID := extA.
 
+ self ssNativeTop nativeStackPopToReg: extA.
- (value := backEnd availableRegisterOrNoneFor: self liveRegisters) = NoReg ifTrue:
- [self ssAllocateRequiredReg:
- (value := optStatus isReceiverResultRegLive
- ifTrue: [Arg0Reg]
- ifFalse: [ReceiverResultReg])].
- value = ReceiverResultReg ifTrue:
- [ optStatus isReceiverResultRegLive: false ].
- self ssNativeTop nativePopToReg: value.
  self ssNativePop: 1.
+ currentCallCleanUpSize := currentCallCleanUpSize + 8.
-
- self abort.
-
  extA := 0.
+
  ^ 0
 
  !

Item was changed:
  ----- Method: StackToRegisterMappingCogit>>genLowcodeMovePointerToPhysical (in category 'inline primitive generators generated code') -----
  genLowcodeMovePointerToPhysical
  <option: #LowcodeVM> "Lowcode instruction generator"
- | registerID pointerValue |
- registerID := extA.
 
+ self ssNativeTop nativeStackPopToReg: extA.
- (pointerValue := backEnd availableRegisterOrNoneFor: self liveRegisters) = NoReg ifTrue:
- [self ssAllocateRequiredReg:
- (pointerValue := optStatus isReceiverResultRegLive
- ifTrue: [Arg0Reg]
- ifFalse: [ReceiverResultReg])].
- pointerValue = ReceiverResultReg ifTrue:
- [ optStatus isReceiverResultRegLive: false ].
- self ssNativeTop nativePopToReg: pointerValue.
  self ssNativePop: 1.
+ currentCallCleanUpSize := currentCallCleanUpSize + BytesPerWord.
-
- self abort.
-
  extA := 0.
+
  ^ 0
 
  !