This is the mail archive of the newlib@sourceware.org mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Patch for mips header files


I would like to update the MIPS memcpy in newlib to use the asm version that
I have already checked in to glibc.  To do this I need newer versions of
the machine/regdef.h and machine/asm.h include files that the new memcpy
routine uses.  This patch is to add asm.h and update regdef.h in newlib and
I will follow it up with the actual memcpy change after this patch is approved
and checked in.

Tested by building newlib and running the GCC testsuite using the mips-mti-elf
target.

OK for checkin?

Steve Ellcey
sellcey@mips.com


2012-11-02  Steve Ellcey  <sellcey@mips.com>

	* libc/machine/mips/machine/asm.h: New.
	* libc/machine/mips/machine/regdef.h: Update register definitions
	for different ABI's.


diff --git a/newlib/libc/machine/mips/machine/asm.h b/newlib/libc/machine/mips/machine/asm.h
new file mode 100644
index 0000000..dcd290e
--- /dev/null
+++ b/newlib/libc/machine/mips/machine/asm.h
@@ -0,0 +1,361 @@
+/*
+ * Copyright (c) 1996-2007 MIPS Technologies, Inc.
+ * Copyright (C) 2009 CodeSourcery, LLC.
+ * 
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 
+ *      * Redistributions of source code must retain the above copyright
+ *        notice, this list of conditions and the following disclaimer.
+ *      * Redistributions in binary form must reproduce the above
+ *      copyright
+ *        notice, this list of conditions and the following disclaimer
+ *        in the documentation and/or other materials provided with
+ *        the distribution.
+ *      * Neither the name of MIPS Technologies Inc. nor the names of its
+ *        contributors may be used to endorse or promote products derived
+ *        from this software without specific prior written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * asm.h: various macros to help assembly language writers
+ */
+
+#ifndef _MIPS_ASM_H_
+#define _MIPS_ASM_H_
+
+/* ABI specific stack frame layout and manipulation. */
+#if _MIPS_SIM==_ABIO32 && ! __mips64
+/* Standard O32 */
+#define SZREG		4	/* saved register size */
+#define	REG_S		sw	/* store saved register */
+#define	REG_L		lw	/* load saved register */
+#define SZARG		4	/* argument register size */
+#define	NARGSAVE	4	/* arg register space on caller stack */
+#define ALSZ		7	/* stack alignment - 1 */
+#define ALMASK		(~7)	/* stack alignment mask */
+#define LOG2_STACK_ALGN	3	/* log2(8) */
+#define SZPTR		4	/* pointer size */
+#define LOG2_SZPTR	2	/* log2(4) */
+#define PTR_S		sw	/* store pointer */
+#define PTR_L		lw	/* load pointer */
+#define PTR_SUBU	subu	/* decrement pointer */
+#define PTR_ADDU	addu	/* increment pointer */
+#define PTR		.word	/* pointer type pseudo */                  
+#elif _MIPS_SIM==_ABIO32 && __mips64
+/* Algorithmics O32+64-bit */
+#define SZREG		8	/* saved register size */		   
+#define	REG_S		sd	/* store saved register */		   
+#define	REG_L		ld	/* load saved register */		   
+#define SZARG		4	/* argument register size */		   
+#define	NARGSAVE	4	/* arg register space on caller stack */   
+#define ALSZ		7	/* stack alignment - 1 */		   
+#define ALMASK		(~7)	/* stack alignment mask */		   
+#define LOG2_STACK_ALGN	3	/* log2(8) */
+#define SZPTR		4	/* pointer size */			   
+#define LOG2_SZPTR	2	/* log2(4) */
+#define PTR_S		sw	/* store pointer */			   
+#define PTR_L		lw	/* load pointer */			   
+#define PTR_SUBU	subu	/* decrement pointer */			   
+#define PTR_ADDU	addu	/* increment pointer */			   
+#define PTR		.word	/* pointer type pseudo */                  
+#elif _MIPS_SIM==_ABIO64
+/* Cygnus O64 */
+#define SZREG		8	/* saved register size */		   
+#define	REG_S		sd	/* store saved register */		   
+#define	REG_L		ld	/* load saved register */		   
+#define SZARG		8	/* argument register size */		   
+#define	NARGSAVE	4	/* arg register space on caller stack */   
+#define ALSZ		7	/* stack alignment - 1 */		   
+#define ALMASK		(~7)	/* stack alignment mask */		   
+#define LOG2_STACK_ALGN	3	/* log2(8) */
+#define SZPTR		4	/* pointer size */			   
+#define LOG2_SZPTR	2	/* log2(4) */
+#define PTR_S		sw	/* store pointer */			   
+#define PTR_L		lw	/* load pointer */			   
+#define PTR_SUBU	subu	/* decrement pointer */			   
+#define PTR_ADDU	addu	/* increment pointer */			   
+#define PTR		.word	/* pointer type pseudo */                  
+#elif _MIPS_SIM==_ABIN32
+/* Standard N32 */
+#define SZREG		8	/* saved register size */		   
+#define	REG_S		sd	/* store saved register */		   
+#define	REG_L		ld	/* load saved register */		   
+#define SZARG		8	/* argument register size */		   
+#define	NARGSAVE	0	/* arg register space on caller stack */   
+#define ALSZ		15	/* stack alignment - 1 */		   
+#define ALMASK		(~15)	/* stack alignment mask */		   
+#define LOG2_STACK_ALGN	4	/* log2(16) */
+#define SZPTR		4	/* pointer size */			   
+#define LOG2_SZPTR	2	/* log2(4) */
+#define PTR_S		sw	/* store pointer */			   
+#define PTR_L		lw	/* load pointer */			   
+#define PTR_SUBU	subu	/* decrement pointer (SGI uses sub) */
+#define PTR_ADDU	addu	/* increment pointer (SGI uses add) */
+#define PTR		.word	/* pointer type pseudo */                  
+#elif _MIPS_SIM==_ABI64
+/* Standard N64 */
+#define SZREG		8	/* saved register size */		   
+#define	REG_S		sd	/* store saved register */		   
+#define	REG_L		ld	/* load saved register */		   
+#define SZARG		8	/* argument register size */		   
+#define	NARGSAVE	0	/* arg register space on caller stack */   
+#define ALSZ		15	/* stack alignment - 1 */		   
+#define ALMASK		(~15)	/* stack alignment mask */		   
+#define LOG2_STACK_ALGN	4	/* log2(16) */
+#define SZPTR		8	/* pointer size */			   
+#define LOG2_SZPTR	3	/* log2(8) */
+#define PTR_S		sd	/* store pointer */			   
+#define PTR_L		ld	/* load pointer */			   
+#define PTR_SUBU	dsubu	/* decrement pointer */			   
+#define PTR_ADDU	daddu	/* increment pointer */			   
+#define PTR		.dword	/* pointer type pseudo */                  
+#else
+#error Unknown ABI
+#endif
+
+/* Concatenate two names. */
+#ifdef __STDC__
+# define _ASMCONCAT(A, B) A ## B
+#else
+# define _ASMCONCAT(A, B) A/**/B
+#endif
+
+/* Name of reset code section. */
+#ifndef _RESET_SECTION
+# define _RESET_SECTION .section .reset, "ax", @progbits
+#endif
+
+#ifndef _RESET_SECTION_NAMED
+/* No function section support for now, since binutils fails to cope with
+   external branches. */
+# define _RESET_SECTION_NAMED(name) .pushsection .reset, "ax", @progbits
+#endif
+
+/* Name of boot code section. */
+#ifndef _BOOT_SECTION
+# define _BOOT_SECTION .section .boot, "ax", @progbits
+#endif
+
+#ifndef _BOOT_SECTION_NAMED
+/* No function section support for now, since binutils fails to cope with
+   external branches. */
+# define _BOOT_SECTION_NAMED(name) .pushsection .boot, "ax", @progbits
+#endif
+
+/* Name of standard code section. */
+#ifndef _NORMAL_SECTION_UNNAMED
+# define _NORMAL_SECTION_UNNAMED .section .text, "ax", @progbits
+#endif
+
+#ifndef _NORMAL_SECTION_NAMED
+# ifdef _FUNCTION_SECTIONS_
+#  define _NORMAL_SECTION_NAMED(name) .pushsection .text ##.name, "ax", @progbits
+# else
+#  define _NORMAL_SECTION_NAMED(name) .pushsection .text, "ax", @progbits
+# endif
+#endif
+
+/* Default code section. */
+#ifndef _TEXT_SECTION_NAMED
+# if defined(_RESETCODE)
+#  define _TEXT_SECTION_NAMED _RESET_SECTION_NAMED
+# elif defined(_BOOTCODE)
+#  define _TEXT_SECTION_NAMED _BOOT_SECTION_NAMED
+# else
+#  define _TEXT_SECTION_NAMED _NORMAL_SECTION_NAMED
+# endif
+#endif
+
+#ifndef _TEXT_SECTION
+# if defined(_RESETCODE)
+#  define _TEXT_SECTION _RESET_SECTION
+# elif defined(_BOOTCODE)
+#  define _TEXT_SECTION _BOOT_SECTION
+# else
+#  define _TEXT_SECTION _NORMAL_SECTION_UNNAMED
+# endif
+	_TEXT_SECTION
+#endif
+
+/*
+ * Leaf functions declarations.
+ */
+
+/* Global leaf function. */
+#define LEAF(name) 			\
+  	_TEXT_SECTION_NAMED(name);	\
+  	.globl	name; 			\
+	.balign	4;			\
+  	.ent	name; 			\
+name:
+
+/* Static/Local leaf function. */
+#define SLEAF(name) 			\
+  	_TEXT_SECTION_NAMED(name);	\
+	.balign	4;			\
+  	.ent	name; 			\
+name:
+
+/* Weak leaf function. */
+#define WLEAF(name) 			\
+  	_TEXT_SECTION_NAMED(name);	\
+  	.weakext name; 			\
+	.balign	4;			\
+  	.ent	name; 			\
+name:
+
+/* Weak alias leaf function. */
+#define ALEAF(name,alias) 		\
+  	_TEXT_SECTION_NAMED(name);	\
+  	.weakext alias,name; 		\
+	.balign	4;			\
+  	.ent	name; 			\
+name:
+
+/*
+ * Alternative function entrypoints.
+ */
+
+/* Global alternative entrypoint. */
+#define AENT(name) 			\
+  	.globl	name; 			\
+	.balign	4;			\
+  	.aent	name; 			\
+name:
+#define XLEAF(name)	AENT(name)
+
+/* Local/static alternative entrypoint. */
+#define SAENT(name) 			\
+	.balign	4;			\
+  	.aent	name; 			\
+name:
+#define SXLEAF(name)	SAENT(name)
+
+
+/*
+ * Leaf functions declarations.
+ */
+
+/* Global nested function. */
+#define NESTED(name, framesz, rareg)	\
+  	_TEXT_SECTION_NAMED(name);	\
+  	.globl	name; 			\
+	.balign	4;			\
+  	.ent	name; 			\
+	.frame	sp, framesz, rareg;	\
+name:
+
+/* Static/Local nested function. */
+#define SNESTED(name, framesz, rareg)	\
+  	_TEXT_SECTION_NAMED(name);	\
+	.balign	4;			\
+  	.ent	name; 			\
+	.frame	sp, framesz, rareg;	\
+name:
+
+/* Weak nested function. */
+#define WNESTED(name, framesz, rareg)	\
+  	_TEXT_SECTION_NAMED(name);	\
+  	.weakext name; 			\
+	.balign	4;			\
+  	.ent	name; 			\
+	.frame	sp, framesz, rareg;	\
+name:
+
+/* Weak alias nested function. */
+#define ANESTED(name, alias, framesz, rareg) \
+  	_TEXT_SECTION_NAMED(name);	\
+    	.weakext alias, name;		\
+	.balign	4;			\
+  	.ent	name; 			\
+	.frame	sp, framesz, rareg;	\
+name:
+
+/*
+ * Function termination
+ */
+#define END(name) 			\
+  	.size name,.-name; 		\
+  	.end	name;			\
+	.popsection
+
+#define SEND(name)	END(name)
+#define WEND(name)	END(name)
+#define AEND(name,alias) END(name)
+
+/*
+ * Global data declaration.
+ */
+#define EXPORT(name) \
+  	.globl name; \
+  	.type name,@object; \
+name:
+
+/*
+ * Global data declaration with size.
+ */
+#define EXPORTS(name,sz) 		\
+  	.globl name; 			\
+  	.type name,@object; 		\
+  	.size name,sz; 			\
+name:
+
+/*
+ * Weak data declaration with size.
+ */
+#define WEXPORT(name,sz) 		\
+  	.weakext name; 			\
+  	.type name,@object; 		\
+  	.size name,sz; 			\
+name:
+
+/*
+ * Global data reference with size.
+ */
+#define	IMPORT(name, size) 		\
+	.extern	name,size
+
+/*
+ * Global zeroed data.
+ */
+#define BSS(name,size) 			\
+  	.type name,@object; 		\
+	.comm	name,size
+
+/*
+ * Local zeroed data.
+ */
+#define LBSS(name,size) 		\
+  	.lcomm	name,size
+
+/*
+ * Insert call to _mcount if profiling.
+ */
+#ifdef __PROFILING__
+#define _MCOUNT 			\
+	.set push; 			\
+	.set noat; 			\
+	move	$1,$31; 		\
+	jal	_mcount; 		\
+  	.set pop
+#else
+#define _MCOUNT
+#endif
+
+#endif
diff --git a/newlib/libc/machine/mips/machine/regdef.h b/newlib/libc/machine/mips/machine/regdef.h
index 3906de6..0164164 100644
--- a/newlib/libc/machine/mips/machine/regdef.h
+++ b/newlib/libc/machine/mips/machine/regdef.h
@@ -1,14 +1,70 @@
-/* regdef.h -- define MIPS register names.  */
+/*
+ * Copyright (c) 1996-2007 MIPS Technologies, Inc.
+ * Copyright (C) 2009 CodeSourcery, LLC.
+ * 
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 
+ *      * Redistributions of source code must retain the above copyright
+ *        notice, this list of conditions and the following disclaimer.
+ *      * Redistributions in binary form must reproduce the above
+ *      copyright
+ *        notice, this list of conditions and the following disclaimer
+ *        in the documentation and/or other materials provided with
+ *        the distribution.
+ *      * Neither the name of MIPS Technologies Inc. nor the names of its
+ *        contributors may be used to endorse or promote products derived
+ *        from this software without specific prior written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
 
-#ifndef mips_regdef_h
+/*
+ * regdef.h : MIPS Rx000 symbolic register names for assembler
+ */
+
+#ifndef _MIPS_REGDEF_H_
+#define _MIPS_REGDEF_H_
 
 #define zero	$0
-#define v0	$2
+
+#define AT	$1
+
+#define v0 	$2
 #define v1	$3
+
 #define a0	$4
 #define a1	$5
 #define a2	$6
-#define a3	$7
+#define	a3	$7
+
+#if _MIPS_SIM==_ABIN32 || _MIPS_SIM==_ABI64 || _MIPS_SIM==_ABIEABI
+#define a4	$8
+#define a5	$9
+#define a6	$10
+#define	a7	$11
+#define t0	$12
+#define t1	$13
+#define t2	$14
+#define t3	$15
+#define ta0	$8	/* alias for $a4 */
+#define ta1	$9	/* alias for $a5 */
+#define ta2	$10	/* alias for $a6 */
+#define ta3	$11	/* alias for $a7 */
+#else
 #define t0	$8
 #define t1	$9
 #define t2	$10
@@ -17,6 +73,12 @@
 #define t5	$13
 #define t6	$14
 #define t7	$15
+#define ta0	$12	/* alias for $t4 */
+#define ta1	$13	/* alias for $t5 */
+#define ta2	$14	/* alias for $t6 */
+#define ta3	$15	/* alias for $t7 */
+#endif
+
 #define s0	$16
 #define s1	$17
 #define s2	$18
@@ -25,14 +87,17 @@
 #define s5	$21
 #define s6	$22
 #define s7	$23
+#define s8	$30		/* == fp */
+
 #define t8	$24
 #define t9	$25
 #define k0	$26
 #define k1	$27
-#define gp	$gp
-#define sp	$sp
-#define s8	$30
+
+#define gp	$28
+
+#define sp	$29
+#define fp	$30
 #define ra	$31
-#define pc	$pc
 
-#endif /* mips_regdef_h */
+#endif


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