[Vm-dev] Alien on Spur and "el capitan"?

John McIntosh johnmci at smalltalkconsulting.com
Tue Oct 20 21:48:09 UTC 2015


Sure but I see the follow use cases, which are best confusing, and just
curious if they work as you think they should?
Does clang optimize out the  (value >= 0) if value is a unsigned type?

/* begin maybeInlinePositive32BitIntegerFor: */

assert(!((hasSixtyFourBitImmediates())));

if ((stackPtr >= 0)

&& ((stackPtr ^ (stackPtr << 1)) >= 0)) {

((stackPtr << 1) | 1);

goto l2;

}
where stackPtr is
sendInvokeCallbackStackRegistersJmpbuf(sqInt thunkPtr, sqInt stackPtr,
sqInt regsPtr, sqInt jmpBufPtr)

 or  where integerValue is saint  btw  so casting to usqInt then back to
saint is 'magic handwaving?'

integerValue = ((usqInt)usecs);

/* begin maybeInlinePositive32BitIntegerFor: */

assert(!((hasSixtyFourBitImmediates())));

if ((integerValue >= 0)

&& ((integerValue ^ (integerValue << 1)) >= 0)) {

v1 = ((integerValue << 1) | 1);

goto l1;

}


or this where value is declared as 'unsigned long' versus a squeak data
type


value = ((usqInt)((vmCallbackContext->thunkp)));

/* begin positive32BitIntegerFor: */

/* begin maybeInlinePositive32BitIntegerFor: */

assert(!((hasSixtyFourBitImmediates())));

if ((value >= 0)

&& ((value ^ (value << 1)) >= 0)) {

((value << 1) | 1);

goto l2;

}

On Tue, Oct 20, 2015 at 2:34 PM, Eliot Miranda <eliot.miranda at gmail.com>
wrote:

>
> Hi John,
>
> On Tue, Oct 20, 2015 at 1:59 PM, John McIntosh <
> johnmci at smalltalkconsulting.com> wrote:
>
>>
>> Ok, you know you are using maybeInlinePositive32BitIntegerFor for BOTH
>> unsigned and signed integers? That to me rings alarm bells, so do you
>> need maybeInlinePositive32BitIntegerForSignedInteger
>> or maybeInlinePositive32BitIntegerForUnSignedInteger  or always cast the
>> incoming value to an unsigned integer, or is it signed? If so are you sure
>> you understand the math involved and the possible input values?
>>
>
> No, we don't need this.  Looking at the code, it is OK for
> positive32BitIntegerFor: to truncate to 32-bits.  But if one wants to pass
> in a 32-bit value form a long one should write
>
>     ^self positive32BitIntegerFor: (value bitAnd: 16rFFFFFFFF)
>
> If one wants a value which is as big as a pointer one should use
>
>  ^self positiveMachineIntegerFor: (value bitAnd: 16rFFFFFFFF)
>
> Only use the 32Bit conversion routines when you want a 32-bit result.
> There are now 32-bit, 64-bit and machine versions of the conversion
> routines.  The machine versions answer 32 or 64 bit results as appropriate.
>
>
>>
>>
>>
>> On Mon, Oct 19, 2015 at 9:31 AM, Esteban Lorenzano <estebanlm at gmail.com>
>> wrote:
>>
>>>
>>> Hi,
>>>
>>> Does anyone tested Alien on Spur and "El capitan"? specifically
>>> callbacks?
>>> For me, a completely broken :(
>>>
>>> 1) this structure (in maybeInlinePositive32BitIntegerFor: and others):
>>>
>>> (integerValue >= 0
>>> and: [objectMemory isIntegerValue: integerValue]) ifTrue:
>>> [^objectMemory integerObjectOf: integerValue].
>>>
>>> Does not works if “integer value” is an unsigned long, because compiler
>>> assumes it will always be true, then remove the if, then answers a wrong
>>> value.
>>>
>>> 2) assertCStackWellAligned always fail. No idea why because if does not
>>> says anything, just jmp back to the regular flow.
>>>
>>> 3) finally, ceCaptureCStackPointers also fails… this can be because (2)
>>> or because other reasons (it also jmps back so no clue) (method
>>> generateCaptureCStackPointers: clarifies is a hack, so I suppose it stopped
>>> to work).
>>>
>>> I guess solution of (1) is easy: argument number just has to be a sqLong
>>> instead an unsigned long.
>>>
>>> But for 2 and 3 I have no idea where to start.
>>>
>>> Does anyone has an idea?
>>>
>>> Esteban
>>>
>>>
>>>
>>
>>
>> --
>>
>> ===========================================================================
>> John M. McIntosh. Corporate Smalltalk Consulting Ltd
>> https://www.linkedin.com/in/smalltalk
>>
>> ===========================================================================
>>
>>
>
>
> --
> _,,,^..^,,,_
> best, Eliot
>
>


-- 
===========================================================================
John M. McIntosh. Corporate Smalltalk Consulting Ltd
https://www.linkedin.com/in/smalltalk
===========================================================================
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20151020/3a1be3ba/attachment.htm


More information about the Vm-dev mailing list