[PATCH] Improve and consolidate sparc PIC assembler.
David Miller
davem at davemloft.net
Sun Apr 14 21:13:11 CEST 2013
From: Torbjorn Granlund <tg at gmplib.org>
Date: Sun, 14 Apr 2013 17:55:31 +0200
> I think we need to consider backing out some of the changes, to restore
> GMP's function on sparc to non-GNU/Linux systems (and perhaps to
> obsolete GNU/Linux systems). We need to keep in mind the symbol
> reference code was tried and tested, and worked on a broad range of
> system.
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.
2013-04-14 David S. Miller <davem at davemloft.net>
* mpn/sparc32/v9/sqr_diagonal.asm: Revert LEA and INT32 changes.
* mpn/sparc64/gcd_1.asm: Likewise.
diff -r 37082d27ed59 mpn/sparc32/v9/sqr_diagonal.asm
--- a/mpn/sparc32/v9/sqr_diagonal.asm Sat Apr 13 23:40:21 2013 +0200
+++ b/mpn/sparc32/v9/sqr_diagonal.asm Sun Apr 14 12:11:28 2013 -0700
@@ -73,14 +73,20 @@
define(`fanop',`fitod %f12,%f10') dnl A quasi nop running in the FA pipe
ASM_START()
- LEA_THUNK(l7)
+
TEXT
- INT32(noll, 0)
+ ALIGN(4)
+.Lnoll:
+ .word 0
+
PROLOGUE(mpn_sqr_diagonal)
save %sp,-256,%sp
- LEA(L(noll),l0,l7)
- ld [%l0], %f8
+ifdef(`PIC',
+`.Lpc: rd %pc,%o7
+ ld [%o7+.Lnoll-.Lpc],%f8',
+` sethi %hi(.Lnoll),%g1
+ ld [%g1+%lo(.Lnoll)],%f8')
sethi %hi(0xffff0000),%g5
add %i1,-8,%i1
diff -r 37082d27ed59 mpn/sparc64/gcd_1.asm
--- a/mpn/sparc64/gcd_1.asm Sat Apr 13 23:40:21 2013 +0200
+++ b/mpn/sparc64/gcd_1.asm Sun Apr 14 12:11:28 2013 -0700
@@ -58,8 +58,6 @@
ASM_START()
REGISTER(%g2,#scratch)
REGISTER(%g3,#scratch)
- LEA_THUNK(l7)
- TEXT
PROLOGUE(mpn_gcd_1)
save %sp, -192, %sp
ldx [up+0], %g1 C U low limb
@@ -95,7 +93,22 @@
mov 0, %o3
L(noreduce):
- LEA(ctz_table,i5,l7)
+
+ifdef(`PIC',`
+ sethi %hi(_GLOBAL_OFFSET_TABLE_-4), %l7
+ call L(LGETPC0)
+ add %l7, %lo(_GLOBAL_OFFSET_TABLE_+4), %l7
+ sethi %hi(ctz_table), %g1
+ or %g1, %lo(ctz_table), %g1
+ ldx [%l7+%g1], %i5
+',`
+ sethi %hh(ctz_table), %l7
+ or %l7, %hm(ctz_table), %l7
+ sllx %l7, 32, %l7
+ sethi %lm(ctz_table), %g1
+ add %l7, %g1, %l7
+ or %l7, %lo(ctz_table), %i5
+')
cmp %o0, 0
bnz %xcc, L(mid)
@@ -122,4 +135,10 @@
L(shift_alot):
b L(mid)
and %o0, MASK, %g3 C
+
+ifdef(`PIC',`
+L(LGETPC0):
+ retl
+ add %o7, %l7, %l7
+')
EPILOGUE()
More information about the gmp-devel
mailing list