VM Maker: VMMaker.oscog-eem.2743.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-eem.2743.mcz

commits-2
 
Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2743.mcz

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

Name: VMMaker.oscog-eem.2743
Author: eem
Time: 23 April 2020, 12:52:09.598599 pm
UUID: 6fa490eb-27b9-471e-9e46-6aa4ce54e382
Ancestors: VMMaker.oscog-eem.2742

BIT_IDENTICAL_FLOATING_POINT: Add a feature flag to vmParameterAt: 65 to show that the Vm was compiled with BIT_IDENTICAL_FLOATING_POINT.

Revert the exclusion of the machine code square root funcitons if BIT_IDENTICAL_FLOATING_POINT is defined.  sqrt is rounded consistently across platforms.

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

Item was changed:
  ----- Method: CogObjectRepresentation>>genPrimitiveFloatSquareRoot (in category 'primitive generators') -----
  genPrimitiveFloatSquareRoot
- <notOption: #BIT_IDENTICAL_FLOATING_POINT>
  <option: #DPFPReg0>
  | jumpFailAlloc |
  <var: #jumpFailAlloc type: #'AbstractInstruction *'>
  cogit processorHasDoublePrecisionFloatingPointSupport ifFalse:
  [^UnimplementedPrimitive].
  self genGetDoubleValueOf: ReceiverResultReg into: DPFPReg0.
  cogit SqrtRd: DPFPReg0.
  jumpFailAlloc := self
  genAllocFloatValue: DPFPReg0
  into: SendNumArgsReg
  scratchReg: ClassReg
  scratchReg: TempReg.
  cogit MoveR: SendNumArgsReg R: ReceiverResultReg.
  cogit genPrimReturn.
  jumpFailAlloc jmpTarget: cogit Label.
  ^0!

Item was changed:
  ----- Method: CogObjectRepresentation>>genPrimitiveSmallFloatSquareRoot (in category 'primitive generators') -----
  genPrimitiveSmallFloatSquareRoot
- <notOption: #BIT_IDENTICAL_FLOATING_POINT>
  <option: #Spur64BitMemoryManager>
  <option: #DPFPReg0>
  | jumpFailAlloc jumpNegative |
  <var: #jumpFailAlloc type: #'AbstractInstruction *'>
  <var: #jumpNegative type: #'AbstractInstruction *'>
  self genGetSmallFloatValueOf: ReceiverResultReg scratch: SendNumArgsReg into: DPFPReg0.
  cogit
  XorRd: DPFPReg1 Rd: DPFPReg1; "+0.0 is all zeros"
  CmpRd: DPFPReg0 Rd: DPFPReg1.
  jumpNegative := cogit JumpFPGreater: 0.
  cogit SqrtRd: DPFPReg0.
  jumpFailAlloc := self
  genAllocFloatValue: DPFPReg0
  into: SendNumArgsReg
  scratchReg: ClassReg
  scratchReg: TempReg.
  cogit MoveR: SendNumArgsReg R: ReceiverResultReg.
  cogit genPrimReturn.
  jumpNegative jmpTarget: (jumpFailAlloc jmpTarget: cogit Label).
  ^0!

Item was changed:
  ----- Method: StackInterpreter>>getCogVMFeatureFlags (in category 'internal interpreter access') -----
  getCogVMFeatureFlags
  "Answer an array of flags indicating various optional features of the Cog VM.
  Bit 0: supports two bytecode sets (MULTIPLEBYTECODESETS)
  Bit 1: supports immutablity (IMMUTABILITY)
+ Bit 2: suffers from a UNIX setitimer signal-based heartbeat
+ Bit 3: the VM provides cross-platform bit-identical floating point"
- Bit 2: suffers from a UNIX setitimer signal-based heartbeat"
  ^objectMemory integerObjectOf: (MULTIPLEBYTECODESETS ifTrue: [1] ifFalse: [0])
  + (IMMUTABILITY ifTrue: [2] ifFalse: [0])
+ + (self cppIf: #'ITIMER_HEARTBEAT' ifTrue: [4] ifFalse: [0])
+ + (self cppIf: #'BIT_IDENTICAL_FLOATING_POINT' ifTrue: [8] ifFalse: [0])!
- + (self cppIf: #'ITIMER_HEARTBEAT' ifTrue: [4] ifFalse: [0])!