grub-devel
[Top][All Lists]
Advanced

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

Re: clang .code16 with -Os producing larger code that it needs to


From: Vladimir 'φ-coder/phcoder' Serbinenko
Subject: Re: clang .code16 with -Os producing larger code that it needs to
Date: Fri, 20 Feb 2015 16:26:07 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Icedove/31.4.0

On 20.02.2015 15:58, Vladimir 'φ-coder/phcoder' Serbinenko wrote:
> When experimenting with compiling GRUB2 with clang using integrated as,
> I found out that it generates a 16-bit code bigger than gas counterpart
> and result gets too big for size constraints of bootsector. This was
> traced mainly to 2 problems.
> 32-bit access to 16-bit addresses.
> source:
>       movl    LOCAL(kernel_sector), %ebx
>       movl    %ebx, 8(%si)
> clang:
>     7cbc:     67 66 8b 1d 5c 7c 00    addr32 mov 0x7c5c,%ebx
>     7cc3:     00
>     7cc4:     66 89 5c 08             mov    %ebx,0x8(%si)
> 
> gas:
>     7cbc:     66 8b 1e 5c 7c          mov    0x7c5c,%ebx
>     7cc1:     66 89 5c 08             mov    %ebx,0x8(%si)
> 32-bit jump.
> source:
>       jnb     LOCAL(floppy_probe)
> clang:
> +    7cb5:    66 0f 83 07 01 00 00    jae    7dc3 <L_floppy_probe>
> gas:
> -    7cb5:    0f 83 0a 01             jae    7dc3 <L_floppy_probe>
Minimal example would be:
        .code16
        jmp 1f
        .space 256
1:      nop
clang:
   0:   66 e9 00 01 00 00       jmpl   0x106
        ...
 106:   90                      nop
gcc:
   0:   e9 00 01                jmp    0x103
        ...
 103:   90                      nop

> The last one is particularly problematic as it never makes sense to
> issue 32-bit jump if %ip is only 16 bits and it eats 3 extra bytes per
> jump. Is it possible to force clang to generate 16-bit jumps?
> On bright side if I remove error strings the code is functional.
> 


Attachment: signature.asc
Description: OpenPGP digital signature


reply via email to

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