[squeak-dev] x86 sarl curiosity...
Igor Stasenko
siguctua at gmail.com
Thu Jan 22 22:35:44 UTC 2009
2009/1/22 Eliot Miranda <eliot.miranda at gmail.com>:
>
>
> On Thu, Jan 22, 2009 at 12:53 PM, David Farber <dfarber at numenor.com> wrote:
>>
>> Eliot - I know you've already moved past this problem, but in the future,
>> gcc -S foo.c will create foo.s with the assembly generated by gcc.
>
> Um, I know :) Trouble is gcc also optimizes so it may not always generate
> the code you expect. For example,
> issignedshift(v) { return (v >> 1) < 0 ? 1 : 0; }
> will, with -O4, generate
> movl 4(%esp), %eax
> sarl $31,%eax
> ret
> because it works out this is the quickest way to generate a 1 if v is
> negative and doesn't generate a compare at all.
> BTW, I've been abusing gcc's -S output for a long time. Back in the 80's I
> used to generate direct-threaded-code VMs using gcc where I would edit the
> -S output with sed to produce the opcodes for the threaded code machine
> stripped of the prolog and epilog gcc would produce. I've also produced
> JIT-compiled BitBlt by similar means with a number of different compilers.
> -S has been my friend for many years.
i'm dreaming to have
listing := Object compile: 'yourself ^self' options: '-S'
:)
> Cheers!
> Eliot
>
>>
>> David
>> On Jan 21, 2009, at 2:08 PM, Eliot Miranda wrote:
>>
>> Hi Martin, can you send me the assembly? Or show me the opcodes? When I
>> try this it doesn't work. So I must be doing something differently.
>> and Hi! Robert Hirschfeld mentioned you when he and I met last week.
>> On Wed, Jan 21, 2009 at 11:06 AM, Martin Beck
>> <martin.beck at hpi.uni-potsdam.de> wrote:
>>>
>>> Hi Eliot,
>>>
>>> Eliot Miranda wrote:
>>> > Hi All,
>>> > anyone know the x86/IA32 really well? If so, read on. Otherwise
>>> > save
>>> > yourself the yawn.
>>> >
>>> [...]
>>> > (my emphasis added). But neither the Bochs simulator nor my Intel Core
>>> > Duo
>>> > set the flags when doing sarl $1, %eax when %eax contains -1. Have I
>>> > misread, or is the manual wrong?
>>> >
>>> I cannot confirm this. Using this simple C-Program:
>>>
>>> int calc(int i) {
>>> return i >> 1;
>>> }
>>>
>>> int main() {
>>> printf("%i\n", calc(-1));
>>> }
>>>
>>> my GCC 4.3.2 generates a sarl %eax instruction as the assembler output
>>> shows. Debugging it with Kdbg shows a change of the flags after the
>>> instruction. In fact, CF and SF are set as (more or less) expected. I
>>> also have a Intel Core 2 Duo.
>>>
>>> Regards,
>>> Martin
>>>
>>
>>
>>
>>
>>
>>
>
>
>
>
>
--
Best regards,
Igor Stasenko AKA sig.
More information about the Squeak-dev
mailing list
|