[Vm-dev] VM Maker: VMMaker.oscog-nice.1840.mcz

Nicolas Cellier nicolas.cellier.aka.nice at gmail.com
Sun Apr 24 20:36:46 UTC 2016


If things are not going better this evening, I'll retract some of these
changes.

2016-04-24 22:31 GMT+02:00 <commits at source.squeak.org>:

>
> Nicolas Cellier uploaded a new version of VMMaker to project VM Maker:
> http://source.squeak.org/VMMaker/VMMaker.oscog-nice.1840.mcz
>
> ==================== Summary ====================
>
> Name: VMMaker.oscog-nice.1840
> Author: nice
> Time: 24 April 2016, 10:30:31.797 pm
> UUID: 218875e3-8515-4804-a608-9e3228ffb843
> Ancestors: VMMaker.oscog-nice.1839
>
> Oops, correct the inversion of type inference for left/right shift.
> Protect the type of most used integerValueOf:/isIntegerObject:
>
> This restore good health for CogSpur32 tests, but not yet for CogSpur64
> which has a problem with SmallFloat, and definitely not for CogV3 which now
> fails to start.
>
> =============== Diff against VMMaker.oscog-nice.1839 ===============
>
> Item was changed:
>   ----- Method: CCodeGenerator>>returnTypeForSend:in: (in category 'type
> inference') -----
>   returnTypeForSend: sendNode in: aTMethod
>         "Answer the return type for a send.  Absent sends default to
> #sqInt.
>          The inferred type should match as closely as possible the C type
> of
>          generated expessions so that inlining would not change the
> expression."
>         | sel methodOrNil |
>         methodOrNil := self anyMethodNamed: (sel := sendNode selector).
>         (methodOrNil notNil and: [methodOrNil returnType notNil]) ifTrue:
>                 [^self baseTypeForType: methodOrNil returnType].
>         ^kernelReturnTypes
>                 at: sel
>                 ifAbsent:
>                         [sel
>                                 caseOf: {
> +                               [#integerValueOf:]              ->
> [#sqInt].
> +                               [#isIntegerObject:]             ->
> [#int].
>                                 [#negated]
> ->      [self promoteArithmeticTypes: (self typeFor: sendNode receiver in:
> aTMethod) and: #int].
>                                 [#+]
> ->      [self typeForArithmetic: sendNode in: aTMethod].
>                                 [#-]
>       ->      [self typeForArithmetic: sendNode in: aTMethod].
>                                 [#*]
> ->      [self typeForArithmetic: sendNode in: aTMethod].
>                                 [#/]
>       ->      [self typeForArithmetic: sendNode in: aTMethod].
>                                 [#//]
>  ->      [self typeForArithmetic: sendNode in: aTMethod].
>                                 [#\\]
>  ->      [self typeForArithmetic: sendNode in: aTMethod].
> +                               [#>>]
>  ->      [self
> -                               [#>>]
>  ->      [self typeForArithmetic: sendNode in: aTMethod].
> -                               [#<<]
>  ->      [self
>
>                       promoteArithmeticTypes: (self
> unsignedTypeForIntegralType: (self typeFor: sendNode receiver in: aTMethod))
>
>                       and: (self typeFor: sendNode args first in:
> aTMethod)].
> +                               [#<<]
>  ->      [self typeForArithmetic: sendNode in: aTMethod].
>                                 [#rem:]
>  ->      [self typeForArithmetic: sendNode in: aTMethod].
>                                 [#quo:]
>  ->      [self typeForArithmetic: sendNode in: aTMethod].
>                                 [#addressOf:]                   ->
> [(self typeFor: sendNode receiver in: aTMethod)
>
>                       ifNil: [#sqInt]
>
>                       ifNotNil: [:type| type, (type last isLetter ifTrue:
> [' *'] ifFalse: ['*'])]].
>                                 [#at:]
> ->      [self typeForDereference: sendNode in: aTMethod].
>                                 [#bitAnd:]
> ->      [self typeForArithmetic: sendNode in: aTMethod].
>                                 [#bitOr:]
>  ->      [self typeForArithmetic: sendNode in: aTMethod].
>                                 [#bitXor:]
> ->      [self typeForArithmetic: sendNode in: aTMethod].
>                                 [#bitClear:]
> ->      [self typeForArithmetic: sendNode in: aTMethod].
>                                 [#bitInvert32]                  ->
> [#'unsigned int'].
>                                 [#bitInvert64]                  ->
> [self promoteArithmeticTypes: (self typeFor: sendNode receiver in:
> aTMethod) and: #int].
>                                 [#byteSwap32]                   ->
> [#'unsigned int'].
>                                 [#byteSwap64]                   ->
> [#'unsigned long long'].
>                                 [#byteSwapped32IfBigEndian:]    ->
> [#'unsigned int'].
>                                 [#byteSwapped64IfBigEndian:]    ->
> [#'unsigned long long'].
>                                 [#=]
> ->      [#int].
>                                 [#~=]
>  ->      [#int].
>                                 [#==]
>  ->      [#int].
>                                 [#~~]
>  ->      [#int].
>                                 [#<]
> ->      [#int].
>                                 [#<=]
>  ->      [#int].
>                                 [#>]
> ->      [#int].
>                                 [#>=]
>  ->      [#int].
>                                 [#between:and:]         ->      [#int].
>                                 [#anyMask:]
>  ->      [#int].
>                                 [#allMask:]
>  ->      [#int].
>                                 [#noMask:]
> ->      [#int].
>                                 [#isNil]
>       ->      [#int].
>                                 [#notNil]
>  ->      [#int].
>                                 [#&]
> ->      [#int].
>                                 [#|]
>       ->      [#int].
>                                 [#not]
> ->      [#int].
>                                 [#asFloat]
> ->      [#double].
>                                 [#atan]
>  ->      [#double].
>                                 [#exp]
> ->      [#double].
>                                 [#log]
> ->      [#double].
>                                 [#sin]
> ->      [#double].
>                                 [#sqrt]
>  ->      [#double].
>                                 [#asLong]
>  ->      [#long].
>                                 [#asInteger]                    ->
> [#sqInt].
>                                 [#asUnsignedInteger]    ->      [#usqInt].
>                                 [#asUnsignedLong]               ->
> [#'unsigned long'].
>                                 [#asVoidPointer]                ->
> [#'void *'].
>                                 [#signedIntToLong]              ->
> [#usqInt]. "c.f. generateSignedIntToLong:on:indent:"
>                                 [#signedIntToShort]     ->      [#usqInt].
> "c.f. generateSignedIntToShort:on:indent:"
>                                 [#cCoerce:to:]                  ->
> [sendNode args last value].
>                                 [#cCoerceSimple:to:]    ->      [sendNode
> args last value].
>                                 [#sizeof:]
> ->      [#'unsigned long']. "Technically it's a size_t but it matches
> unsigned long on target architectures so far..."
>                                 [#ifTrue:ifFalse:]              ->
> [self typeForConditional: sendNode in: aTMethod].
>                                 [#ifFalse:ifTrue:]              ->
> [self typeForConditional: sendNode in: aTMethod].
>                                 [#ifTrue:]
> ->      [self typeForConditional: sendNode in: aTMethod].
>                                 [#ifFalse:]
>  ->      [self typeForConditional: sendNode in: aTMethod] }
>                                 otherwise: "If there /is/ a method for sel
> but its retrn type is as yet unknown we /mustn't/ default it.
>                                                         We can only
> default unbound selectors."
>                                         [methodOrNil ifNotNil: [nil]
> ifNil: [#sqInt]]]!
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20160424/bcc9c74e/attachment-0001.htm


More information about the Vm-dev mailing list