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

commits at source.squeak.org commits at source.squeak.org
Thu May 26 19:24:25 UTC 2016


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

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

Name: VMMaker.oscog-eem.1871
Author: eem
Time: 26 May 2016, 12:22:31.837215 pm
UUID: 94d585d5-c18f-4880-9d8e-c4fdb1e7427c
Ancestors: VMMaker.oscog-eem.1870

Take a slightly more minimal approach to Esteban's FLoatArray changes in VMMaker.oscog-EstebanLorenzano.1869

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

Item was changed:
  ----- Method: FloatArrayPlugin>>primitiveLength (in category 'arithmetic primitives') -----
  primitiveLength
- 
  	"Primitive. Compute the length of the argument (sqrt of sum of component squares)."
- 
- 	| rcvr rcvrPtr length result |
  	<export: true>
+ 	| rcvr rcvrPtr length len |
+ 	<var: #rcvrPtr type: #'float *'>
+ 	<var: #len type: #double>
+ 	rcvr := interpreterProxy stackValue: 0.
+ 	(interpreterProxy isWords: rcvr) ifFalse:
+ 		[interpreterProxy primitiveFailFor: PrimErrBadReceiver].
- 	<var: #rcvrPtr type:'float *'>
- 	<var: #result type:'double '>
- 	rcvr := interpreterProxy stackObjectValue: 0.
- 	interpreterProxy failed ifTrue:[^nil].
- 	interpreterProxy success: (interpreterProxy isWords: rcvr).
- 	interpreterProxy failed ifTrue:[^nil].
  	length := interpreterProxy stSizeOf: rcvr.
- 	interpreterProxy success: true.
  	rcvrPtr := self cCoerce: (interpreterProxy firstIndexableField: rcvr) to: 'float *'.
+ 	len := 0.0.
- 	result := 0.0.
  	0 to: length-1 do:[:i|
+ 		len := len + ((self cCoerce: (rcvrPtr at: i) to: #double) * (self cCoerce: (rcvrPtr at: i) to: #double)).
- 		result := result + ((self cCoerce: (rcvrPtr at: i) to: 'double') * (self cCoerce: (rcvrPtr at: i) to: 'double')).
  	].
+ 	len > 0.0 ifFalse:
+ 		[interpreterProxy primitiveFailFor: PrimErrBadReceiver].
+ 	interpreterProxy pop: 1 thenPush: (interpreterProxy floatObjectOf: (self sqrt: len))!
- 	result := self cCode: 'sqrt(result)' inSmalltalk: [result sqrt].
- 	interpreterProxy pop: 1 thenPush: (interpreterProxy floatObjectOf: result)!

Item was changed:
  ----- Method: FloatArrayPlugin>>primitiveNormalize (in category 'arithmetic primitives') -----
  primitiveNormalize
- 
  	"Primitive. Normalize the argument (A FloatArray) in place."
- 
- 	| rcvr rcvrPtr length len |
  	<export: true>
+ 	| rcvr rcvrPtr length len |
+ 	<var: #rcvrPtr type: #'float *'>
+ 	<var: #len type: #double>
+ 	rcvr := interpreterProxy stackValue: 0.
+ 	(interpreterProxy isWords: rcvr) ifFalse:
+ 		[interpreterProxy primitiveFailFor: PrimErrBadReceiver].
- 	<var: #rcvrPtr type:'float *'>
- 	<var: #len type:'double '>
- 	rcvr := interpreterProxy stackObjectValue: 0.
- 	interpreterProxy failed ifTrue:[^nil].
- 	interpreterProxy success: (interpreterProxy isWords: rcvr).
- 	interpreterProxy failed ifTrue:[^nil].
  	length := interpreterProxy stSizeOf: rcvr.
- 	interpreterProxy success: true.
  	rcvrPtr := self cCoerce: (interpreterProxy firstIndexableField: rcvr) to: 'float *'.
  	len := 0.0.
  	0 to: length-1 do:[:i|
+ 		len := len + ((self cCoerce: (rcvrPtr at: i) to: #double) * (self cCoerce: (rcvrPtr at: i) to: #double)).
- 		len := len + ((self cCoerce: (rcvrPtr at: i) to: 'double') * (self cCoerce: (rcvrPtr at: i) to: 'double')).
  	].
+ 	len > 0.0 ifFalse:
+ 		[interpreterProxy primitiveFailFor: PrimErrBadReceiver].
- 	interpreterProxy success: (len > 0.0).
- 	interpreterProxy failed ifTrue:[^nil].
  
+ 	len := self sqrt: len.
- 	len := self cCode: 'sqrt(len)' inSmalltalk: [len sqrt].
  	0 to: length-1 do:[:i|
+ 		rcvrPtr at: i put: ((self cCoerce: (rcvrPtr at: i) to: #double) / len).
- 		rcvrPtr at: i put: ((self cCoerce: (rcvrPtr at: i) to: 'double') / len).
  	].
  
  	"Leave receiver on the stack."!

Item was added:
+ ----- Method: FloatArrayPlugin>>sqrt: (in category 'simulation') -----
+ sqrt: aFloat
+ 	^aFloat sqrt!



More information about the Vm-dev mailing list