[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