dotgnu-libjit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Re: [Dotgnu-libjit] 64bit integers operations on x86


From: Kirill Kononenko
Subject: Re: Re: [Dotgnu-libjit] 64bit integers operations on x86
Date: Thu, 12 Feb 2009 20:02:01 +0300

As I see the content of register EAX allocated for variable i4 is
saved to -4(%EBP), copied to register ESI and then destroyed. Later
ESI is not used for it correctly, or EAX need to be restored. I hope (
I am actually sure) people who understand the local register allocator
can fix this.


Thanks,
Kirill

2009/2/12  <address@hidden>:
> Thanks for your swift response ;)
> It may not be easy to reproduce the bug. For example it does not occur
> if I don't include iostream.h in the example program. I have now added
> jit_dump_function before and after jit_function_compile:
>
>   ...
>   jit_insn_default_return( function );
>   printf( "Before:\n" );
>   jit_dump_function(stdout, function, 0);
>   jit_function_compile( function );
>   printf( "After:\n" );
>   jit_dump_function(stdout, function, 0);
>   jit_context_build_end( context );
>   ...
>
> Here's the output:
>
> Before:
> function 0x0804B120(i1 : ptr) : void
>        incoming_frame_posn(i1, 8)
>        i4 = i1 + 0
>        l6 = load_relative_long(i4, 0)
>        l7 = load_relative_long(i4, 0)
>        store_relative_long(i4, l7, 0)
>        store_relative_long(i4, l6, 0)
>        return
>        ends_in_dead
> end
>
> After:
> function 0x0804B120(ptr) : void
>
> /tmp/libjit-dump.o:     file format elf32-i386
>
> Disassembly of section .text:
>
> b7f69018 <.text>:
> b7f69018:       55                      push   %ebp
> b7f69019:       8b ec                   mov    %esp,%ebp
> b7f6901b:       83 ec 0c                sub    $0xc,%esp
> b7f6901e:       53                      push   %ebx
> b7f6901f:       56                      push   %esi
> b7f69020:       8b 45 08                mov    0x8(%ebp),%eax
> b7f69023:       05 00 00 00 00          add    $0x0,%eax
> b7f69028:       8b 08                   mov    (%eax),%ecx
> b7f6902a:       8b 58 04                mov    0x4(%eax),%ebx
> b7f6902d:       89 45 fc                mov    %eax,-0x4(%ebp)
> b7f69030:       8b f0                   mov    %eax,%esi
> b7f69032:       8b 06                   mov    (%esi),%eax
> b7f69034:       8b 56 04                mov    0x4(%esi),%edx
> b7f69037:       89 00                   mov    %eax,(%eax)
> b7f69039:       89 40 04                mov    %eax,0x4(%eax)
> b7f6903c:       89 08                   mov    %ecx,(%eax)
> b7f6903e:       89 58 04                mov    %ebx,0x4(%eax)
> b7f69041:       89 45 f4                mov    %eax,-0xc(%ebp)
> b7f69044:       89 55 f8                mov    %edx,-0x8(%ebp)
> b7f69047:       5e                      pop    %esi
> b7f69048:       5b                      pop    %ebx
> b7f69049:       8b e5                   mov    %ebp,%esp
> b7f6904b:       5d                      pop    %ebp
> b7f6904c:       c3                      ret
>
> end
>
> Segmentation fault
>
>> Try insert jit_dump_function(stdout, function, 0); before
>> jit_function_compile and after. This should print intermediate form
>> and assembly code. Please send to this maillist the dump/pastbin in
>> case it crashes.
>>
>>
>> Thanks,
>> Kirill
>>
>
>
> /-----------------------( Jan Wedekind )------------------------\
> |address   : .... Flat 7, 228-232 Langsett Rd, Sheffield S6 2UE |
> |office    : ..... City Campus, Howard Street, Sheffield S1 1WB |
> |o.-phone  : ............................... +44 (0)114 2253277 |
> |email/www : ......... address@hidden / http://www.wedesoft.de |
> |gnupg     : ECC3 3E3D AD98 4F0D 3B5B  B251 9B91 F1E7 96F1 E973 |
> \---------------------------------------------------------------/
>
>
>
> _______________________________________________
> Dotgnu-libjit mailing list
> address@hidden
> http://lists.gnu.org/mailman/listinfo/dotgnu-libjit
>




reply via email to

[Prev in Thread] Current Thread [Next in Thread]