[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