This is the mail archive of the libc-hacker@sourceware.cygnus.com mailing list for the glibc project.

Note that libc-hacker is a closed list. You may look at the archives of this list, but subscription and posting are not open.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

PATCH: symbolic regnames for sysdeps/powerpc/stpcpy.S


stpcpy.S escaped this treatment when I did the other str* and mem*
functions for PowerPC.  Here's what I wrote for that patch, and the
same applies for this one:

------------------------------------------------------------------------------
These changes are purely cosmetic, as verified by diff'ing the
preprocessed files before & after, and for paranoia's sake, diff'ing
the disassembled object files before & after.

Here's what I did:

* defined & used symbolic register names
* converted block comments about register usage
  to comments attached to the regname #defines.
* converted '#' comments to C comments.
* aligned operands column with tabs.

These changes pave the way for re-shuffling the register assignments
necessitated for bounded-pointers in a way that has minimal impact on
the assembler code.  Most BP changes will only involve the
register-name #defines.
------------------------------------------------------------------------------

2000-06-30  Greg McGary  <greg@mcgary.org>

	* sysdeps/powerpc/stpcpy.S: Define & use symbolic register names.
	Line up operands column with tabs.

Index: sysdeps/powerpc/stpcpy.S
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/powerpc/stpcpy.S,v
retrieving revision 1.3
diff -u -p -r1.3 stpcpy.S
--- stpcpy.S	2000/02/28 22:23:30	1.3
+++ stpcpy.S	2000/06/30 18:04:00
@@ -21,80 +21,80 @@
 
 /* See strlen.s for comments on how the end-of-string testing works.  */
 
-EALIGN(__stpcpy,4,0)
 /* char * [r3] stpcpy (char *dest [r3], const char *src [r4])  */
 
-/* General register assignments:
-   r0:	temporary
-   r3:	pointer to previous word in dest
-   r4:	pointer to previous word in src
-   r6:	current word from src
-   r7:	0xfefefeff
-   r8:	0x7f7f7f7f
-   r9:	~(word in src | 0x7f7f7f7f)
-   r10:	alternate word from src.  */
-
-	or    r0,r4,r3
-	clrlwi. r0,r0,30
-	addi  r3,r3,-4
-	bne   L(unaligned)
-
-	lis   r7,0xfeff
-	lis   r8,0x7f7f
-	lwz   r6,0(r4)
-	addi  r7,r7,-0x101
-	addi  r8,r8,0x7f7f
-	b     L(g2)
-
-L(g0):	lwzu  r10,4(r4)
-	stwu  r6,4(r3)
-	add   r0,r7,r10
-	nor   r9,r8,r10
-	and.  r0,r0,r9
-	bne-  L(g1)
-	lwzu  r6,4(r4)
-	stwu  r10,4(r3)
-L(g2):	add   r0,r7,r6
-	nor   r9,r8,r6
-	and.  r0,r0,r9
-	beq+  L(g0)
+EALIGN (__stpcpy, 4, 0)
 
-	mr    r10,r6
+#define rTMP	r0
+#define rDEST	r3		/* pointer to previous word in dest */
+#define rSRC	r4		/* pointer to previous word in src */
+#define rWORD	r6		/* current word from src */
+#define rFEFE	r7		/* 0xfefefeff */
+#define r7F7F	r8		/* 0x7f7f7f7f */
+#define rNEG	r9		/* ~(word in src | 0x7f7f7f7f) */
+#define rALT	r10		/* alternate word from src */
+
+	or	rTMP, rSRC, rDEST
+	clrlwi.	rTMP, rTMP, 30
+	addi	rDEST, rDEST, -4
+	bne	L(unaligned)
+
+	lis	rFEFE, -0x101
+	lis	r7F7F, 0x7f7f
+	lwz	rWORD, 0(rSRC)
+	addi	rFEFE, rFEFE, -0x101
+	addi	r7F7F, r7F7F, 0x7f7f
+	b	L(g2)
+
+L(g0):	lwzu	rALT, 4(rSRC)
+	stwu	rWORD, 4(rDEST)
+	add	rTMP, rFEFE, rALT
+	nor	rNEG, r7F7F, rALT
+	and.	rTMP, rTMP, rNEG
+	bne-	L(g1)
+	lwzu	rWORD, 4(rSRC)
+	stwu	rALT, 4(rDEST)
+L(g2):	add	rTMP, rFEFE, rWORD
+	nor	rNEG, r7F7F, rWORD
+	and.	rTMP, rTMP, rNEG
+	beq+	L(g0)
+
+	mr	rALT, rWORD
 /* We've hit the end of the string.  Do the rest byte-by-byte.  */
-L(g1):	rlwinm. r0,r10,8,24,31
-	stbu  r0,4(r3)
+L(g1):	rlwinm.	rTMP, rALT, 8, 24, 31
+	stbu	rTMP, 4(rDEST)
 	beqlr-
-	rlwinm. r0,r10,16,24,31
-	stbu  r0,1(r3)
+	rlwinm.	rTMP, rALT, 16, 24, 31
+	stbu	rTMP, 1(rDEST)
 	beqlr-
-	rlwinm. r0,r10,24,24,31
-	stbu  r0,1(r3)
+	rlwinm.	rTMP, rALT, 24, 24, 31
+	stbu	rTMP, 1(rDEST)
 	beqlr-
-	stbu  r10,1(r3)
+	stbu	rALT, 1(rDEST)
 	blr
 
 /* Oh well.  In this case, we just do a byte-by-byte copy.  */
 	.align 4
 	nop
 L(unaligned):
-	lbz   r6,0(r4)
-	addi  r3,r3,3
-	cmpwi r6,0
-	beq-  L(u2)
-
-L(u0):	lbzu  r10,1(r4)
-	stbu  r6,1(r3)
-	cmpwi r10,0
-	beq-  L(u1)
+	lbz	rWORD, 0(rSRC)
+	addi	rDEST, rDEST, 3
+	cmpwi	rWORD, 0
+	beq-	L(u2)
+
+L(u0):	lbzu	rALT, 1(rSRC)
+	stbu	rWORD, 1(rDEST)
+	cmpwi	rALT, 0
+	beq-	L(u1)
 	nop		/* Let 601 load start of loop.  */
-	lbzu  r6,1(r4)
-	stbu  r10,1(r3)
-	cmpwi r6,0
-	bne+  L(u0)
-L(u2):	stbu  r6,1(r3)
+	lbzu	rWORD, 1(rSRC)
+	stbu	rALT, 1(rDEST)
+	cmpwi	rWORD, 0
+	bne+	L(u0)
+L(u2):	stbu	rWORD, 1(rDEST)
 	blr
-L(u1):	stbu  r10,1(r3)
+L(u1):	stbu	rALT, 1(rDEST)
 	blr
-END(__stpcpy)
+END (__stpcpy)
 
 weak_alias (__stpcpy, stpcpy)

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]