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

Nicolas Cellier nicolas.cellier.aka.nice at gmail.com
Tue Oct 20 21:38:12 UTC 2015


2015-10-20 23:28 GMT+02:00 Eliot Miranda <eliot.miranda at gmail.com>:

>
>
>
> On Tue, Oct 20, 2015 at 1:35 PM, Esteban Lorenzano <estebanlm at gmail.com>
> wrote:
>
>>
>> well… I solve the problem.
>> Everything is about the first issue report (comparison is always true).
>> I changed first from “unsigned long” to “sqLong” but then I realised
>> sqLong is defined as “long long” so this expression:
>>
>> intValue bitXor: (intValue << 1)) >= 0
>>
>> since number fitted in "long long”, was also always true. Then of course
>> it was converting into a SmallInteger a number that should be a
>> LongPositiveInteger.
>>
>> my fix: just to change #maybeInlinePositive32BitIntegerFor: and around to
>> ensure parameter is “sqInt”.
>> That works.
>>
>
> No, you can't cast within  maybeInlinePositive32BitIntegerFor:.  That will
> break its use on long long values.
>

Hi Eliot,
but when would you pass unsigned long long > 16rFFFFFFFFUL ?
In most case that would be positiveMachineIntegerFor: as you said...


>
>
>> Now, I have this doubts:
>>
>> - how is possible this was working before? maybe this is a change in
>> clang 7 (apple)?
>>
>
> Unless we look in the debugger we won't know.
>
>
>> - now I have a lot of complains of “comparison of unsigned expression is
>> always true” all around the image. Should we take care about them?
>>
>
> Looks like it.
>
>
>>
>> I will do some tests and commit to VMMaker tomorrow.
>>
>
> Don't just blindly commit a fix that makes clang 7 work.  It could easily
> break everything elsewhere.  Instead, we need to understand the issues
> first.
>
>
>>
>> cheers,
>> Esteban
>>
>>
>> On 19 Oct 2015, at 18:31, 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
>>
>>
>>
>>
>
>
> --
> _,,,^..^,,,_
> best, Eliot
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20151020/2b5a565f/attachment.htm


More information about the Vm-dev mailing list