[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