[Vm-dev] VM Maker: VMMaker.oscog-eem.246.mcz
commits at source.squeak.org
commits at source.squeak.org
Thu Jan 3 01:57:04 UTC 2013
Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.246.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.246
Author: eem
Time: 2 January 2013, 5:53:50.542 pm
UUID: 1e176c89-522a-4632-ba15-e12f800d1022
Ancestors: VMMaker.oscog-eem.245
Integrate changes from VMMaker-dtl.293 which use >> & << shifts
in place of slower bitShift: code in plugins.
=============== Diff against VMMaker.oscog-eem.245 ===============
Item was changed:
----- Method: DeflatePlugin>>nextZipBits:put: (in category 'encoding') -----
nextZipBits: nBits put: value
"Require:
zipCollection, zipCollectionSize, zipPosition,
zipBitBuf, zipBitPos.
"
<inline: true>
(value >= 0 and:[(1 << nBits) > value])
ifFalse:[^interpreterProxy primitiveFail].
+ zipBitBuf := zipBitBuf bitOr: value << zipBitPos.
- zipBitBuf := zipBitBuf bitOr: (value bitShift: zipBitPos).
zipBitPos := zipBitPos + nBits.
[zipBitPos >= 8 and:[zipPosition < zipCollectionSize]] whileTrue:[
zipCollection at: zipPosition put: (zipBitBuf bitAnd: 255).
zipPosition := zipPosition + 1.
zipBitBuf := zipBitBuf >> 8.
zipBitPos := zipBitPos - 8].
!
Item was changed:
----- Method: DeflatePlugin>>updateHash: (in category 'deflating') -----
updateHash: nextValue
"Update the running hash value based on the next input byte.
Return the new updated hash value."
+ ^((zipHashValue << DeflateHashShift) bitXor: nextValue) bitAnd: DeflateHashMask.!
- ^((zipHashValue bitShift: DeflateHashShift) bitXor: nextValue) bitAnd: DeflateHashMask.!
Item was changed:
----- Method: FFTPlugin>>transformForward: (in category 'transforming') -----
transformForward: forward
| lev lev1 ip theta realU imagU realT imagT i fftSize2 fftSize4 fftScale ii |
<var: #realU type:'float '>
<var: #realT type:'float '>
<var: #imagU type:'float '>
<var: #imagT type:'float '>
fftSize2 := fftSize // 2.
fftSize4 := fftSize // 4.
1 to: nu do:
[:level |
+ lev := 1 << level.
- lev := 1 bitShift: level.
lev1 := lev // 2.
fftScale := fftSize // lev.
1 to: lev1 do:
[:j |
theta := j-1 * fftScale. "pi * (j-1) / lev1 mapped onto 0..n/2"
theta < fftSize4 "Compute U, the complex multiplier for each level"
ifTrue:
[realU := sinTable at: sinTableSize - theta - 1.
imagU := sinTable at: theta]
ifFalse:
[realU := 0.0 - (sinTable at: theta - fftSize4).
imagU := sinTable at: fftSize2 - theta].
forward ifFalse: [imagU := 0.0 - imagU].
"
Here is the inner loop...
j to: n by: lev do:
[:i | hand-transformed to whileTrue...
"
i := j.
[i <= fftSize] whileTrue:
[ip := i + lev1 - 1.
ii := i-1.
realT := ((realData at: ip) * realU) - ((imagData at: ip) * imagU).
imagT := ((realData at: ip) * imagU) + ((imagData at: ip) * realU).
realData at: ip put: (realData at: ii) - realT.
imagData at: ip put: (imagData at: ii) - imagT.
realData at: ii put: (realData at: ii) + realT.
imagData at: ii put: (imagData at: ii) + imagT.
i := i + lev]]].!
Item was changed:
----- Method: JPEGReaderPlugin>>getBits: (in category 'stream support') -----
getBits: requestedBits
| value |
requestedBits > jsBitCount ifTrue:[
self fillBuffer.
requestedBits > jsBitCount ifTrue:[^-1]].
- value := jsBitBuffer bitShift: (requestedBits - jsBitCount).
- jsBitBuffer := jsBitBuffer bitAnd: (1 bitShift: (jsBitCount - requestedBits)) -1.
jsBitCount := jsBitCount - requestedBits.
+ value := jsBitBuffer >> jsBitCount.
+ jsBitBuffer := jsBitBuffer bitAnd: (1 << jsBitCount) -1.
^ value!
Item was changed:
----- Method: JPEGReaderPlugin>>idctBlockInt:qt: (in category 'decoding') -----
idctBlockInt: anArray qt: qt
| ws anACTerm dcval z2 z3 z1 t2 t3 t0 t1 t10 t13 t11 t12 z4 z5 v |
<var: #anArray type: 'int *'>
<var: #qt type: 'int *'>
<var: #ws declareC: 'int ws[64]'>
self cCode:'' inSmalltalk:[ws := CArrayAccessor on: (IntegerArray new: 64)].
"Pass 1: process columns from anArray, store into work array"
0 to: DCTSize-1 do:[:i |
anACTerm := -1.
1 to: DCTSize-1 do:[:row|
anACTerm = -1 ifTrue:[
(anArray at: row * DCTSize + i) = 0 ifFalse:[anACTerm := row]]].
anACTerm = -1 ifTrue:[
+ dcval := (anArray at: i) * (qt at: 0) << Pass1Bits.
- dcval := (anArray at: i) * (qt at: 0) bitShift: Pass1Bits.
0 to: DCTSize-1 do: [:j | ws at: (j * DCTSize + i) put: dcval]
] ifFalse:[
z2 := (anArray at: (DCTSize * 2 + i)) * (qt at: (DCTSize * 2 + i)).
z3 := (anArray at: (DCTSize * 6 + i)) * (qt at: (DCTSize * 6 + i)).
z1 := (z2 + z3) * FIXn0n541196100.
t2 := z1 + (z3 * (0 - FIXn1n847759065)).
t3 := z1 + (z2 * FIXn0n765366865).
z2 := (anArray at: i) * (qt at: i).
z3 := (anArray at: (DCTSize * 4 + i)) * (qt at: (DCTSize * 4 + i)).
+ t0 := (z2 + z3) << ConstBits.
+ t1 := (z2 - z3) << ConstBits.
- t0 := (z2 + z3) bitShift: ConstBits.
- t1 := (z2 - z3) bitShift: ConstBits.
t10 := t0 + t3.
t13 := t0 - t3.
t11 := t1 + t2.
t12 := t1 - t2.
t0 := (anArray at: (DCTSize * 7 + i)) * (qt at: (DCTSize * 7 + i)).
t1 := (anArray at: (DCTSize * 5 + i)) * (qt at: (DCTSize * 5 + i)).
t2 := (anArray at: (DCTSize * 3 + i)) * (qt at: (DCTSize * 3 + i)).
t3 := (anArray at: (DCTSize + i)) * (qt at: (DCTSize + i)).
z1 := t0 + t3.
z2 := t1 + t2.
z3 := t0 + t2.
z4 := t1 + t3.
z5 := (z3 + z4) * FIXn1n175875602.
t0 := t0 * FIXn0n298631336.
t1 := t1 * FIXn2n053119869.
t2 := t2 * FIXn3n072711026.
t3 := t3 * FIXn1n501321110.
z1 := z1 * (0 - FIXn0n899976223).
z2 := z2 * (0 - FIXn2n562915447).
z3 := z3 * (0 - FIXn1n961570560).
z4 := z4 * (0 - FIXn0n390180644).
z3 := z3 + z5.
z4 := z4 + z5.
t0 := t0 + z1 + z3.
t1 := t1 +z2 +z4.
t2 := t2 + z2 + z3.
t3 := t3 + z1 + z4.
ws at: i put: (t10 + t3) // Pass1Div.
ws at: (DCTSize * 7 + i) put: (t10 - t3) // Pass1Div.
ws at: (DCTSize * 1 + i) put: (t11 + t2) // Pass1Div.
ws at: (DCTSize * 6 + i) put: (t11 - t2) // Pass1Div.
ws at: (DCTSize * 2 + i) put: (t12 + t1) // Pass1Div.
ws at: (DCTSize * 5 + i) put: (t12 - t1) // Pass1Div.
ws at: (DCTSize * 3 + i) put: (t13 + t0) // Pass1Div.
ws at: (DCTSize * 4 + i) put: (t13 - t0) // Pass1Div]].
"Pass 2: process rows from work array, store back into anArray"
0 to: DCTSize2-DCTSize by: DCTSize do:[:i |
z2 := ws at: i + 2.
z3 := ws at: i + 6.
z1 := (z2 + z3) * FIXn0n541196100.
t2 := z1 + (z3 * (0-FIXn1n847759065)).
t3 := z1 + (z2 * FIXn0n765366865).
+ t0 := (ws at: i) + (ws at: (i + 4)) << ConstBits.
+ t1 := (ws at: i) - (ws at: (i + 4)) << ConstBits.
- t0 := (ws at: i) + (ws at: (i + 4)) bitShift: ConstBits.
- t1 := (ws at: i) - (ws at: (i + 4)) bitShift: ConstBits.
t10 := t0 + t3.
t13 := t0 - t3.
t11 := t1 + t2.
t12 := t1 -t2.
t0 := ws at: (i + 7).
t1 := ws at: (i + 5).
t2 := ws at: (i + 3).
t3 := ws at: (i + 1).
z1 := t0 + t3.
z2 := t1 + t2.
z3 := t0 + t2.
z4 := t1 + t3.
z5 := (z3 + z4) * FIXn1n175875602.
t0 := t0 * FIXn0n298631336.
t1 := t1 * FIXn2n053119869.
t2 := t2 * FIXn3n072711026.
t3 := t3 * FIXn1n501321110.
z1 := z1 * (0-FIXn0n899976223).
z2 := z2 * (0-FIXn2n562915447).
z3 := z3 * (0-FIXn1n961570560).
z4 := z4 * (0-FIXn0n390180644).
z3 := z3 + z5.
z4 := z4 + z5.
t0 := t0 + z1 + z3.
t1 := t1 + z2 + z4.
t2 := t2 + z2 + z3.
t3 := t3 + z1 + z4.
v := (t10 + t3) // Pass2Div + SampleOffset.
v := v min: MaxSample. v := v max: 0.
anArray at: i put: v.
v := (t10 - t3) // Pass2Div + SampleOffset.
v := v min: MaxSample. v := v max: 0.
anArray at: (i + 7) put: v.
v := (t11 + t2) // Pass2Div + SampleOffset.
v := v min: MaxSample. v := v max: 0.
anArray at: (i + 1) put: v.
v := (t11 - t2) // Pass2Div + SampleOffset.
v := v min: MaxSample. v := v max: 0.
anArray at: (i + 6) put: v.
v := (t12 + t1) // Pass2Div + SampleOffset.
v := v min: MaxSample. v := v max: 0.
anArray at: (i + 2) put: v.
v := (t12 - t1) // Pass2Div + SampleOffset.
v := v min: MaxSample. v := v max: 0.
anArray at: (i + 5) put: v.
v := (t13 + t0) // Pass2Div + SampleOffset.
v := v min: MaxSample. v := v max: 0.
anArray at: (i + 3) put: v.
v := (t13 - t0) // Pass2Div + SampleOffset.
v := v min: MaxSample. v := v max: 0.
anArray at: (i + 4) put: v].!
Item was changed:
----- Method: JPEGReaderPlugin>>scaleAndSignExtend:inFieldWidth: (in category 'decoding') -----
scaleAndSignExtend: aNumber inFieldWidth: w
<inline: true>
+ aNumber < (1 << (w - 1))
+ ifTrue: [^aNumber - (1 << w) + 1]
- aNumber < (1 bitShift: (w - 1))
- ifTrue: [^aNumber - (1 bitShift: w) + 1]
ifFalse: [^aNumber]!
Item was changed:
----- Method: LargeIntegersPlugin>>anyBitOfBytes:from:to: (in category 'util') -----
anyBitOfBytes: aBytesOop from: start to: stopArg
"Argument has to be aBytesOop!!"
"Tests for any magnitude bits in the interval from start to stopArg."
| magnitude rightShift leftShift stop firstByteIx lastByteIx |
self
debugCode: [self msg: 'anyBitOfBytes: aBytesOop from: start to: stopArg'].
start < 1 | (stopArg < 1)
ifTrue: [^ interpreterProxy primitiveFail].
magnitude := aBytesOop.
stop := stopArg
min: (self highBitOfBytes: magnitude).
start > stop
ifTrue: [^ false].
firstByteIx := start - 1 // 8 + 1.
lastByteIx := stop - 1 // 8 + 1.
+ rightShift := (start - 1 \\ 8).
- rightShift := 0 - (start - 1 \\ 8).
leftShift := 7 - (stop - 1 \\ 8).
firstByteIx = lastByteIx
ifTrue: [| digit mask |
+ mask := (255 << rightShift) bitAnd: (255 >> leftShift).
- mask := (255 bitShift: 0 - rightShift)
- bitAnd: (255 bitShift: 0 - leftShift).
digit := self digitOfBytes: magnitude at: firstByteIx.
^ (digit bitAnd: mask)
~= 0].
((self digitOfBytes: magnitude at: firstByteIx)
+ >> rightShift)
- bitShift: rightShift)
~= 0
ifTrue: [^ true].
firstByteIx + 1
to: lastByteIx - 1
do: [:ix | (self digitOfBytes: magnitude at: ix)
~= 0
ifTrue: [^ true]].
(((self digitOfBytes: magnitude at: lastByteIx)
+ << leftShift)
- bitShift: leftShift)
bitAnd: 255)
~= 0
ifTrue: [^ true].
^ false!
Item was changed:
----- Method: LargeIntegersPlugin>>cDigitOfCSI:at: (in category 'C core util') -----
cDigitOfCSI: csi at: ix
"Answer the value of an indexable field in the receiver.
LargePositiveInteger uses bytes of base two number, and each is a
'digit' base 256."
"ST indexed!!"
+ ix < 1 ifTrue: [interpreterProxy primitiveFail].
- ix < 0 ifTrue: [interpreterProxy primitiveFail].
ix > 4 ifTrue: [^ 0].
csi < 0
ifTrue:
[self cCode: ''
inSmalltalk: [csi = -1073741824 ifTrue: ["SmallInteger minVal"
"Can't negate minVal -- treat specially"
^ #(0 0 0 64 ) at: ix]].
+ ^ (0 - csi) >> (ix - 1 * 8)
- ^ (0 - csi bitShift: 1 - ix * 8)
bitAnd: 255]
+ ifFalse: [^ csi >> (ix - 1 * 8)
- ifFalse: [^ (csi bitShift: 1 - ix * 8)
bitAnd: 255]!
More information about the Vm-dev
mailing list