[PATCH] Improve and consolidate sparc PIC assembler.
Torbjorn Granlund
tg at gmplib.org
Mon Apr 15 15:02:51 CEST 2013
David Miller <davem at davemloft.net> writes:
Sure, let's revert v9/sqr_diagonal.asm and sparc64/gcd_1.asm back to
their previous state for now, and try to work from that. Here's a
patch.
Removing those two made us achieve the primary goal, i.e., to make GMP
behave correctly on Solaris again.
I took another look, this time at sparc32/v8/addmul_1.asm the code it
produces.
It used to be
` mov %o7,%g4 C Save return address register
0: call 1f
add %o7,L(1)-0b,%g3
1: mov %g4,%o7 C Restore return address register
jmp %g3+%g1
nop
while now it is
sethi %hi(_GLOBAL_OFFSET_TABLE_-4), %g4
mov %o7, %g3
call __sparc_get_pc_thunk.g4
or %g4, %lo(_GLOBAL_OFFSET_TABLE_+4), %g4
mov %g3, %o7
sethi %hi(.L1), %g3
or %g3, %lo(.L1), %g3
ld [%g4 + %g3], %g3
jmp %g3+%g1
nop
plus the two insn of the thunk code
jmp %o7+8
add %o7, %g4, %g4
Can you please explain why we should make such a change?
The old code has worked for a long time on many platforms. A call
without a return is non-standard these days, but the hardware where this
runs were said to either have no return prediction stack, or to
recognize call .+8 as a special case. We could surely add thunk if we
think we ought to pair calls and returns, without all the other stuff.
--
Torbjörn
More information about the gmp-devel
mailing list