[arm] Fix built-in data types

Paul Brook paul@codesourcery.com
Fri May 7 13:44:00 GMT 2004


Patch below corrects the types used for size_t and wchar_t under the AAPCS 
ABI.

Tested with cross to arm-none-elf.
Ok?

Paul

2004-05-06  Paul Brook  <paul@codesourcery.com>

	* config/arm/arm.c (arm_promote_prototypes): Use TARGET_AAPCS_BASED.
	* config/arm/arm.h (TARGET_AAPCS_BASED): Define.
	(TARGET_DOUBLEWORD_ALIGN): Use it.
	(WCHAR_TYPE): Define.
	(WCHAR_SIZE_TYPE): Define.
	(SIZE_TYPE): Define.

Index: config/arm/arm.c
===================================================================
RCS file: /var/cvsroot/gcc-cvs/gcc/gcc/config/arm/arm.c,v
retrieving revision 1.357
diff -u -p -r1.357 arm.c
--- a/config/arm/arm.c	5 May 2004 23:11:53 -0000	1.357
+++ b/config/arm/arm.c	6 May 2004 16:49:42 -0000
@@ -14550,6 +14550,6 @@ arm_no_early_mul_dep (rtx producer, rtx 
 static bool
 arm_promote_prototypes (tree t ATTRIBUTE_UNUSED)
 {
-    return arm_abi == ARM_ABI_APCS || arm_abi == ARM_ABI_ATPCS;
+    return !TARGET_AAPCS_BASED;
 }
 
Index: config/arm/arm.h
===================================================================
RCS file: /var/cvsroot/gcc-cvs/gcc/gcc/config/arm/arm.h,v
retrieving revision 1.232
diff -u -p -r1.232 arm.h
--- a/config/arm/arm.h	5 May 2004 23:11:53 -0000	1.232
+++ b/config/arm/arm.h	6 May 2004 16:48:22 -0000
@@ -307,6 +307,8 @@ extern GTY(()) rtx aof_pic_label;
 				         : (target_flags & THUMB_FLAG_BACKTRACE))
 #define TARGET_CIRRUS_FIX_INVALID_INSNS	(target_flags & 
CIRRUS_FIX_INVALID_INSNS)
 #define TARGET_LDRD			(arm_arch5e && ARM_DOUBLEWORD_ALIGN)
+#define TARGET_AAPCS_BASED \
+    (arm_abi != ARM_ABI_APCS && arm_abi != ARM_ABI_ATPCS)
 
 /* SUBTARGET_SWITCHES is used to add flags on a per-config basis.  */
 #ifndef SUBTARGET_SWITCHES
@@ -655,8 +657,8 @@ extern int arm_is_6_or_7;
 #define UNITS_PER_WORD	4
 
 /* True if natural alignment is used for doubleword types.  */
-#define ARM_DOUBLEWORD_ALIGN \
-    (arm_abi == ARM_ABI_AAPCS || arm_abi == ARM_ABI_IWMMXT)
+#define ARM_DOUBLEWORD_ALIGN	TARGET_AAPCS_BASED
+
 #define DOUBLEWORD_ALIGNMENT 64
 
 #define PARM_BOUNDARY  	32
@@ -716,6 +718,17 @@ extern const char * structure_size_strin
 /* Nonzero if move instructions will actually fail to work
    when given unaligned data.  */
 #define STRICT_ALIGNMENT 1
+
+/* wchar_t is unsigned under the AAPCS.  */
+#ifndef WCHAR_TYPE
+#define WCHAR_TYPE (TARGET_AAPCS_BASED ? "unsigned int" : "int")
+
+#define WCHAR_TYPE_SIZE BITS_PER_WORD
+#endif
+
+#ifndef SIZE_TYPE
+#define SIZE_TYPE (TARGET_AAPCS_BASED ? "unsigned int" : "long unsigned int")
+#endif
 
 /* Standard register usage.  */
 



More information about the Gcc-patches mailing list