This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH] mips/o32: fix internal_syscall5/6/7
On 2017-08-17 17:17, Maciej W. Rozycki wrote:
> The drawback is it adds a bit to code generated, e.g. `__libc_pwrite'
> (from nptl/pwrite.o and nptl/pwrite.os) grows by 4 and 6 instructions
> respectively for non-PIC and PIC code respectively, and the whole
> libraries:
>
> text data bss dec hex filename
> 1483315 21129 11560 1516004 1721e4 libc.so
> 105482 960 8448 114890 1c0ca nptl/libpthread.so
>
> vs:
>
> text data bss dec hex filename
> 1484295 21133 11560 1516988 1725bc libc.so
> 105974 960 8448 115382 1c2b6 nptl/libpthread.so
>
> due to the insertion of the VLA size calculation (although GCC is smart
> enough to reuse a value of 0 already available, e.g.:
>
> 38: 7c03e83b rdhwr v1,$29
> 3c: 8c638b70 lw v1,-29840(v1)
> 40: 14600018 bnez v1,a4 <__libc_pwrite+0xa4>
> 44: 000787c3 sra s0,a3,0x1f
> 48: 000318c0 sll v1,v1,0x3
> 4c: 03a08825 move s1,sp
> 50: 03a3e823 subu sp,sp,v1
>
> and save an isntruction) and the use of an extra register to preserve the
> value of $sp across the block containing the VLA (as also seen with $s1 in
> the disassembly above) even though it could use $fp that holds the same
> value instead (e.g. continuing from the above:
>
> 74: 0220e825 move sp,s1
> 78: 03c0e825 move sp,s8
>
> ). It would be good to know how this compares to Adhemerval's proposal.
I have been trying to improve Adhemerval's patches a bit by returning
the error value in v1, in addition to the return code in v0. Here are
the corresponding numbers:
w/o patch:
text data bss dec hex filename
1489767 21085 11560 1522412 173aec libc.so
107908 956 8448 117312 1ca40 nptl/libpthread.so
with patch:
text data bss dec hex filename
1488135 21089 11560 1520784 173490 libc.so
107244 960 8448 116652 1c7ac nptl/libpthread.so
When looking at a given function like `__libc_pwrite' it gets reduced
by 13 instructions in both PIC and non-PIC cases. However we need to
add the 16 instructions of __libc_do_syscall.
Aurelien
--
Aurelien Jarno GPG: 4096R/1DDD8C9B
aurelien@aurel32.net http://www.aurel32.net