[Vm-dev] VM Maker: VMMaker.oscog-nice.1731.mcz
commits at source.squeak.org
commits at source.squeak.org
Thu Mar 17 21:36:21 UTC 2016
Nicolas Cellier uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-nice.1731.mcz
==================== Summary ====================
Name: VMMaker.oscog-nice.1731
Author: nice
Time: 17 March 2016, 10:33:40.804 pm
UUID: 5a57b844-0803-41bd-b772-73cf6c7dfb0a
Ancestors: VMMaker.oscog-dtl.1730
Fix a shift in BitBltSimulation. The shift must be signed but the simulator incorrectly makes it unsigned leading to memory exhaustion error.
Let FilePlugin>>primitiveDirectoryDelete primitiveFail rather than raising a mustBeBoolean error.
Fix 64bits simulation of long64At:put: that would fail for negative put value.
Provide a SpurMemoryManager stSizeOf: for simulation purpose (the message is used by some plugins).
Restore a more intention revealing literal in reverseDisplayFrom:to:
=============== Diff against VMMaker.oscog-dtl.1730 ===============
Item was changed:
----- Method: BitBltSimulation>>rgbMapPixel:flags: (in category 'color mapping') -----
rgbMapPixel: sourcePixel flags: mapperFlags
"Perform the RGBA conversion for the given source pixel"
| val |
<inline: true>
+ val := ((sourcePixel bitAnd: (cmMaskTable at: 0)) bitShift: (cmShiftTable at: 0) signedIntFromLong).
+ val := val bitOr: ((sourcePixel bitAnd: (cmMaskTable at: 1)) bitShift: (cmShiftTable at: 1) signedIntFromLong).
+ val := val bitOr: ((sourcePixel bitAnd: (cmMaskTable at: 2)) bitShift: (cmShiftTable at: 2) signedIntFromLong).
+ ^val bitOr: ((sourcePixel bitAnd: (cmMaskTable at: 3)) bitShift: (cmShiftTable at: 3) signedIntFromLong).
- val := ((sourcePixel bitAnd: (cmMaskTable at: 0)) bitShift: (cmShiftTable at: 0)).
- val := val bitOr: ((sourcePixel bitAnd: (cmMaskTable at: 1)) bitShift: (cmShiftTable at: 1)).
- val := val bitOr: ((sourcePixel bitAnd: (cmMaskTable at: 2)) bitShift: (cmShiftTable at: 2)).
- ^val bitOr: ((sourcePixel bitAnd: (cmMaskTable at: 3)) bitShift: (cmShiftTable at: 3)).
!
Item was changed:
----- Method: FilePlugin>>primitiveDirectoryDelete (in category 'directory primitives') -----
primitiveDirectoryDelete
| dirName dirNameIndex dirNameSize okToDelete |
<var: #dirNameIndex type: 'char *'>
<export: true>
dirName := interpreterProxy stackValue: 0.
(interpreterProxy isBytes: dirName)
ifFalse: [^interpreterProxy primitiveFail].
dirNameIndex := interpreterProxy firstIndexableField: dirName.
dirNameSize := interpreterProxy byteSizeOf: dirName.
"If the security plugin can be loaded, use it to check for permission.
If not, assume it's ok"
sCDPfn ~= 0
+ ifTrue: [okToDelete := self cCode: ' ((sqInt (*)(char *, sqInt))sCDPfn)(dirNameIndex, dirNameSize)' inSmalltalk: [false].
- ifTrue: [okToDelete := self cCode: ' ((sqInt (*)(char *, sqInt))sCDPfn)(dirNameIndex, dirNameSize)'.
okToDelete
ifFalse: [^interpreterProxy primitiveFail]].
(self
cCode: 'dir_Delete(dirNameIndex, dirNameSize)'
inSmalltalk: [false])
ifFalse: [^interpreterProxy primitiveFail].
interpreterProxy pop: 1!
Item was changed:
----- Method: Spur64BitMMLESimulator>>long64At:put: (in category 'memory access') -----
long64At: byteAddress put: a64BitValue
byteAddress \\ 8 ~= 0 ifTrue: [self unalignedAccessError].
self
long32At: byteAddress put: (a64BitValue bitAnd: 16rffffffff);
+ long32At: byteAddress + 4 put: (a64BitValue >> 32 bitAnd: 16rffffffff).
- long32At: byteAddress + 4 put: a64BitValue >> 32.
^a64BitValue!
Item was added:
+ ----- Method: SpurMemoryManager>>stSizeOf: (in category 'object access') -----
+ stSizeOf: oop
+ "Return the number of indexable fields in the receiver"
+ ^oop basicSize!
Item was changed:
----- Method: StackInterpreter>>reverseDisplayFrom:to: (in category 'I/O primitive support') -----
reverseDisplayFrom: startIndex to: endIndex
"Reverse the given range of Display words (at different bit
depths, this will reverse different numbers of pixels). Used to
give feedback during VM activities such as garbage
collection when debugging. It is assumed that the given
word range falls entirely within the first line of the Display."
| displayObj displayBits w wordStartIndex wordEndIndex primFailCodeValue |
displayObj := objectMemory splObj: TheDisplay.
((objectMemory isPointers: displayObj) and: [(objectMemory lengthOf: displayObj) >= 4]) ifFalse: [^ nil].
w := objectMemory fetchPointer: 1 ofObject: displayObj.
displayBits := objectMemory fetchPointer: 0 ofObject: displayObj.
((objectMemory isImmediate: displayBits)
or: [(objectMemory isNonIntegerObject: w)
or: [objectMemory isPointersNonImm: displayBits]]) ifTrue: [^ nil].
wordStartIndex := startIndex * 4.
wordEndIndex := endIndex * 4 min: (objectMemory sizeBitsOf: displayBits).
displayBits := displayBits + objectMemory baseHeaderSize.
displayBits + wordStartIndex to: displayBits + wordEndIndex by: 4 do:
[:ptr | | reversed |
+ reversed := (objectMemory long32At: ptr) bitXor: 16rFFFFFFFF.
- reversed := (objectMemory long32At: ptr) bitXor: 4294967295.
objectMemory long32At: ptr put: reversed].
primFailCodeValue := primFailCode.
self initPrimCall.
self displayBitsOf: displayObj Left: 0 Top: 0 Right: (objectMemory integerValueOf: w) Bottom: 1.
self ioForceDisplayUpdate.
primFailCode := primFailCodeValue!
More information about the Vm-dev
mailing list