[Vm-dev] VM Maker: Fix VMMaker.oscog-eem.787.mcz

Eliot Miranda eliot.miranda at gmail.com
Sun Jun 29 02:59:42 UTC 2014


Hi David,

    can you please delete this for me?  ANother example of inadvertently
nudging the mouse and changing keyboard focus.  Got to update my image to
pull in Karl's fix pronto :-)


On Sat, Jun 28, 2014 at 7:20 PM, <commits at source.squeak.org> wrote:

>
> Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
> http://source.squeak.org/VMMaker/Fix VMMaker.oscog-eem.787.mcz
>
> ==================== Summary ====================
>
> Name: Fix VMMaker.oscog-eem.787
> Author: eem
> Time: 28 June 2014, 7:19:54.984 pm
> UUID: a9fe951c-7914-49b0-a008-20c39417cae0
> Ancestors: VMMaker.oscog-eem.786
>
> Fix return types for positive[64/32]BitValueOf: in InterpreterProxy
> (& hence in sqVirtualMachine.[ch] soon).
>
> Use positiveMachineIntegerValueOf: to decode arg in
> primitiveNewWithArg and ensure positiveMachineIntegerValueOf:
> is inlined there-in.
>
> =============== Diff against VMMaker.oscog-eem.786 ===============
>
> Item was changed:
>   ----- Method: InterpreterPrimitives>>positiveMachineIntegerValueOf: (in
> category 'primitive support') -----
>   positiveMachineIntegerValueOf: oop
>         "Answer a value of an integer in address range, i.e up to the size
> of a machine word.
>         The object may be either a positive SmallInteger or a
> LargePositiveInteger of size <= word size."
>         <returnTypeC: #'unsigned long'>
> +       <inline: true> "only two callers & one is primitiveNewWithArg"
>         | value bs ok |
>         (objectMemory isIntegerObject: oop) ifTrue:
>                 [value := objectMemory integerValueOf: oop.
>                  value < 0 ifTrue: [^self primitiveFail].
>                 ^value].
>
>         ok := objectMemory
>                         isClassOfNonImm: oop
>                         equalTo: (objectMemory splObj:
> ClassLargePositiveInteger)
>                         compactClassIndex:
> ClassLargePositiveIntegerCompactIndex.
>         (ok and: [(bs := objectMemory lengthOf: oop) <= (self sizeof:
> #'unsigned long')]) ifFalse:
>                 [^self primitiveFail].
>
>         ((self sizeof: #'unsigned long') = 8
>         and: [bs > 4]) ifTrue:
>                 [^  (objectMemory fetchByte: 0 ofObject: oop)
>                  + ((objectMemory fetchByte: 1 ofObject: oop) <<  8)
>                  + ((objectMemory fetchByte: 2 ofObject: oop) << 16)
>                  + ((objectMemory fetchByte: 3 ofObject: oop) << 24)
>                  + ((objectMemory fetchByte: 4 ofObject: oop) << 32)
>                  + ((objectMemory fetchByte: 5 ofObject: oop) << 40)
>                  + ((objectMemory fetchByte: 6 ofObject: oop) << 48)
>                  + ((objectMemory fetchByte: 7 ofObject: oop) << 56)].
>
>         ^  (objectMemory fetchByte: 0 ofObject: oop)
>         + ((objectMemory fetchByte: 1 ofObject: oop) <<  8)
>         + ((objectMemory fetchByte: 2 ofObject: oop) << 16)
>         + ((objectMemory fetchByte: 3 ofObject: oop) << 24)!
>
> Item was changed:
>   ----- Method: InterpreterPrimitives>>primitiveNewWithArg (in category
> 'object access primitives') -----
>   primitiveNewWithArg
>         "Allocate a new indexable instance. Fail if the allocation would
> leave less than lowSpaceThreshold bytes free. May cause a GC."
>         | size spaceOkay |
> +       size := self positiveMachineIntegerValueOf: self stackTop.
> -       size := self positive32BitValueOf: self stackTop.
>         self cppIf: NewspeakVM
>                 ifTrue: "For the mirror prims check that the class obj is
> actually a valid class."
>                         [(argumentCount < 2
>                           or: [self addressCouldBeClassObj: (self
> stackValue: 1)]) ifFalse:
>                                 [self primitiveFailFor:
> PrimErrBadArgument]].
> +       self successful "positiveMachineIntegerValueOf: succeeds only for
> non-negative integers."
> -       self successful "positive32BitValueOf: succeds only for
> non-negative integers < 2^32"
>                 ifTrue:
>                         [objectMemory hasSpurMemoryManagerAPI
>                                 ifTrue:
>                                         [(objectMemory instantiateClass:
> (self stackValue: 1) indexableSize: size)
>                                                 ifNotNil: [:obj| self pop:
> argumentCount + 1 thenPush: obj]
>                                                 ifNil: [self
> primitiveFailFor: PrimErrNoMemory]]
>                                 ifFalse:
>                                         [spaceOkay := objectMemory
> sufficientSpaceToInstantiate: (self stackValue: 1) indexableSize: size.
>                                          spaceOkay
>                                                 ifTrue:
>                                                         [self
>                                                                 pop:
> argumentCount + 1
>                                                                 thenPush:
> (objectMemory instantiateClass: (self stackValue: 1) indexableSize: size)]
>                                                 ifFalse:
>                                                         [self
> primitiveFailFor: PrimErrNoMemory]]]
>                 ifFalse:
>                         [self primitiveFailFor: PrimErrBadArgument]!
>
> Item was changed:
>   ----- Method: InterpreterProxy>>positive32BitValueOf: (in category
> 'converting') -----
>   positive32BitValueOf: oop
> +       <returnTypeC: #usqInt>
>         oop isInteger ifFalse:[self error:'Not an integer object'].
>         oop < 0
>                 ifTrue:[self primitiveFail. ^0]
>                 ifFalse:[^oop]!
>
> Item was changed:
>   ----- Method: InterpreterProxy>>positive64BitValueOf: (in category
> 'converting') -----
>   positive64BitValueOf: oop
> +       <returnTypeC: #usqLong>
> -       <returnTypeC: #sqLong>
>         oop isInteger ifFalse:[self error:'Not an integer object'].
>         oop < 0
>                 ifTrue:[self primitiveFail. ^0]
>                 ifFalse:[^oop]!
>
>


-- 
best,
Eliot
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20140628/b71f5a81/attachment.htm


More information about the Vm-dev mailing list