[Vm-dev] VM Maker: VMMaker.oscog-nice.1731.mcz
Eliot Miranda
eliot.miranda at gmail.com
Fri Mar 18 20:54:09 UTC 2016
Hi Nicolas,
the right form for that stSizeOf: implementation is
stSizeOf: integerValue
"hack around the CoInterpreter/ObjectMemory split refactoring"
<doNotGenerate>
^coInterpreter stSizeOf: integerValue
On Thu, Mar 17, 2016 at 2:35 PM, <commits at source.squeak.org> wrote:
>
> 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!
>
>
--
_,,,^..^,,,_
best, Eliot
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20160318/5a55f563/attachment.htm
More information about the Vm-dev
mailing list