diff -r 436cd430841a -r be658f466bca AbstractNumberVector.st --- a/AbstractNumberVector.st Mon Jun 06 10:37:21 2016 +0100 +++ b/AbstractNumberVector.st Mon Jun 06 10:56:12 2016 +0100 @@ -1,3 +1,5 @@ +"{ Encoding: utf8 }" + " COPYRIGHT (c) 2011 by Claus Gittinger All Rights Reserved @@ -215,9 +217,13 @@ !AbstractNumberVector methodsFor:'destructive arithmetic support'! primAbs - "low performance fall back: destructive replace each element by its absolute value" + "low performance fall back: destructive replace each element by its absolute value. + May be redefined in subclasses to use vector instructions" - 1 to: self size do:[:i| self at: i put: (self at: i) abs]. + |sz "{ Class: SmallInteger }"| + + sz := self size. + 1 to: sz do:[:i| self at:i put: (self at:i) abs]. " |f| @@ -232,11 +238,15 @@ " ! -primAddArray: floatArray +primAddArray:anArray "low performance fallback: destructively add the vector argument into the receiver. - The argument must be another vector" + The argument must be another vector. + May be redefined in subclasses to use vector instructions" - 1 to: self size do:[:i| self at: i put: (self at: i) + (floatArray at: i)]. + |sz "{ Class: SmallInteger }"| + + sz := self size. + 1 to:sz do:[:i| self at:i put: (self at:i) + (anArray at:i)]. " |f1 f2| @@ -249,16 +259,24 @@ ! primAddScalar: aScalar - "low performance fallback: destructively add the scalar argument into the receiver." + "low performance fallback: destructively add the scalar argument into the receiver. + May be redefined in subclasses to use vector instructions" - 1 to: self size do:[:i| self at: i put: (self at: i) + aScalar]. + |sz "{ Class: SmallInteger }"| + + sz := self size. + 1 to:sz do:[:i| self at:i put:(self at:i) + aScalar]. ! primDivArray: floatArray "low performance fallback: destructively divide the vector argument into the receiver. - The argument must be another vector" + The argument must be another vector. + May be redefined in subclasses to use vector instructions" - 1 to: self size do:[:i| self at: i put: (self at: i) / (floatArray at: i)]. + |sz "{ Class: SmallInteger }"| + + sz := self size. + 1 to: sz do:[:i| self at: i put: (self at: i) / (floatArray at: i)]. " |f1 f2| @@ -271,16 +289,25 @@ ! primDivScalar: aScalar - "low performace fallback: destructively divide each element of the receiver by the scalar argument." + "low performace fallback: destructively divide each element of the receiver + by the scalar argument. + May be redefined in subclasses to use vector instructions" - 1 to: self size do:[:i| self at: i put: (self at: i) / aScalar ]. + |sz "{ Class: SmallInteger }"| + + sz := self size. + 1 to: sz do:[:i| self at: i put: (self at: i) / aScalar ]. ! primMulArray: floatArray "low performance fallback: destructively multiply the vector argument into the receiver. - The argument must be another vector" + The argument must be another vector. + May be redefined in subclasses to use vector instructions" - 1 to: self size do:[:i| self at: i put: (self at: i) * (floatArray at: i)]. + |sz "{ Class: SmallInteger }"| + + sz := self size. + 1 to: sz do:[:i| self at: i put: (self at: i) * (floatArray at: i)]. " |f1 f2| @@ -293,15 +320,24 @@ ! primMulScalar: aScalar - "low performace fallback: destructively multiply each element of the receiver by the scalar argument." + "low performace fallback: destructively multiply each element of the receiver + by the scalar argument. + May be redefined in subclasses to use vector instructions" - 1 to: self size do:[:i| self at: i put: (self at: i) * aScalar ]. + |sz "{ Class: SmallInteger }"| + + sz := self size. + 1 to: sz do:[:i| self at: i put: (self at: i) * aScalar ]. ! primNegated - "low performance fallback: destructively negative value of each element" + "low performance fallback: destructively negative value of each element. + May be redefined in subclasses to use vector instructions" - 1 to: self size do:[:i| self at: i put: (self at: i) negated]. + |sz "{ Class: SmallInteger }"| + + sz := self size. + 1 to: sz do:[:i| self at: i put: (self at: i) negated]. " |f| @@ -314,9 +350,13 @@ primSubtractArray: floatArray "low performance fallback: destructively subtract the vector argument into the receiver. - The argument must be another vector" + The argument must be another vector. + May be redefined in subclasses to use vector instructions" - 1 to: self size do:[:i| self at: i put: (self at: i) - (floatArray at: i)]. + |sz "{ Class: SmallInteger }"| + + sz := self size. + 1 to: sz do:[:i| self at: i put: (self at: i) - (floatArray at: i)]. " |f1 f2| @@ -329,9 +369,14 @@ ! primSubtractScalar: aScalar - "low performace fallback: destructively subtract the scalar argument from each element of the receiver." + "low performace fallback: destructively subtract the scalar argument + from each element of the receiver. + May be redefined in subclasses to use vector instructions" - 1 to: self size do:[:i| self at: i put: (self at: i) - aScalar ]. + |sz "{ Class: SmallInteger }"| + + sz := self size. + 1 to: sz do:[:i| self at: i put: (self at: i) - aScalar ]. ! ! !AbstractNumberVector methodsFor:'queries'!