[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