[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.
>
signature.asc
Description: OpenPGP digital signature
- clang .code16 with -Os producing larger code that it needs to, Vladimir 'φ-coder/phcoder' Serbinenko, 2015/02/20
- Re: clang .code16 with -Os producing larger code that it needs to,
Vladimir 'φ-coder/phcoder' Serbinenko <=
- Re: clang .code16 with -Os producing larger code that it needs to, David Woodhouse, 2015/02/20
- Re: clang .code16 with -Os producing larger code that it needs to, Vladimir 'φ-coder/phcoder' Serbinenko, 2015/02/20
- Re: clang .code16 with -Os producing larger code that it needs to, David Woodhouse, 2015/02/20
- Re: clang .code16 with -Os producing larger code that it needs to, David Woodhouse, 2015/02/20
- Re: [LLVMdev] clang .code16 with -Os producing larger code that it needs to, Rafael Espíndola, 2015/02/20
- Re: [LLVMdev] clang .code16 with -Os producing larger code that it needs to, David Woodhouse, 2015/02/23
- Re: [LLVMdev] clang .code16 with -Os producing larger code that it needs to, Craig Topper, 2015/02/24
- Re: [LLVMdev] clang .code16 with -Os producing larger code that it needs to, David Woodhouse, 2015/02/24