[Vm-dev] VM Maker: VMMaker.oscog-eem.2743.mcz

commits at source.squeak.org commits at source.squeak.org
Thu Apr 23 19:52:26 UTC 2020


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])!



More information about the Vm-dev mailing list