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!
vm-dev@lists.squeakfoundation.org