i386.h (LIBGCC2_LONG_DOUBLE_TYPE_SIZE): Set to 128bit for x86_64 (BOOL_TYPE_SIZE...
authorJan Hubicka <jh@suse.cz>
Fri, 9 Mar 2001 18:45:59 +0000 (19:45 +0100)
committerJan Hubicka <hubicka@gcc.gnu.org>
Fri, 9 Mar 2001 18:45:59 +0000 (18:45 +0000)
* i386.h (LIBGCC2_LONG_DOUBLE_TYPE_SIZE): Set to 128bit for x86_64
(BOOL_TYPE_SIZE, SHORT_TYPE_SIZE, INT_TYPE_SIZE,
 FLOAT_TYPE_SIZE, LONG_TYPE_SIZE, MAX_LONG_TYPE_SIZE,
 DOUBLE_TYPE_SIZE, LONG_LONG_TYPE_SIZE): New constants.
(BITS_PER_WORD, UNITS_PER_WORD, POINTER_SIZE, PARM_BOUNDARY,
 STACK_BOUNDARY): Set properly for 64bits.
(MAX_BITS_PER_WORD, MIN_UNITS_PER_WORD): New constants.
(EMPTY_FIELD_BOUNDARY): Define using BITS_PER_WORD.
(BIGGEST_FIELD_ALIGNMENT): Set to 128 for 64bits.
(MOVE_MAX): Set to 16.
(MOVE_MAX_PIECES): 8 for 64bit.
(Pmode): Set to SImode.

From-SVN: r40347

gcc/ChangeLog
gcc/config/i386/i386.h

index 8c5463b56b0fc8185c1194e96e50407f8f7eaa27..87be137f5dcb7844a264042c8340d758074f5acc 100644 (file)
@@ -1,3 +1,18 @@
+Fri Mar  9 19:37:46 CET 2001  Jan Hubicka  <jh@suse.cz>
+
+       * i386.h (LIBGCC2_LONG_DOUBLE_TYPE_SIZE): Set to 128bit for x86_64
+       (BOOL_TYPE_SIZE, SHORT_TYPE_SIZE, INT_TYPE_SIZE,
+        FLOAT_TYPE_SIZE, LONG_TYPE_SIZE, MAX_LONG_TYPE_SIZE,
+        DOUBLE_TYPE_SIZE, LONG_LONG_TYPE_SIZE): New constants.
+       (BITS_PER_WORD, UNITS_PER_WORD, POINTER_SIZE, PARM_BOUNDARY,
+        STACK_BOUNDARY): Set properly for 64bits.
+       (MAX_BITS_PER_WORD, MIN_UNITS_PER_WORD): New constants.
+       (EMPTY_FIELD_BOUNDARY): Define using BITS_PER_WORD.
+       (BIGGEST_FIELD_ALIGNMENT): Set to 128 for 64bits.
+       (MOVE_MAX): Set to 16.
+       (MOVE_MAX_PIECES): 8 for 64bit.
+       (Pmode): Set to SImode.
+
 Fri Mar  9 09:00:36 2001  Mike Stump  <mrs@wrs.com>
 
        * cselib.c (hash_rtx): Ensure that hash isn't zero upon return.
index 9da78c72b2748a385e4610ffd830a4fba52f7e99..92c7518432b53f319041f6886e62a2b018b4734c 100644 (file)
@@ -511,11 +511,24 @@ extern int ix86_arch;
  */
 #define LONG_DOUBLE_TYPE_SIZE (TARGET_128BIT_LONG_DOUBLE ? 128 : 96)
 #define MAX_LONG_DOUBLE_TYPE_SIZE 128
+#ifdef __x86_64__
+#define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 128
+#else
+#define LIBGCC2_LONG_DOUBLE_TYPE_SIZE 96
+#endif
 /* Tell real.c that this is the 80-bit Intel extended float format
    packaged in a 128-bit or 96bit entity.  */
 #define INTEL_EXTENDED_IEEE_FORMAT
 
 
+#define SHORT_TYPE_SIZE 16
+#define INT_TYPE_SIZE 32
+#define FLOAT_TYPE_SIZE 32
+#define LONG_TYPE_SIZE BITS_PER_WORD
+#define MAX_LONG_TYPE_SIZE 64
+#define DOUBLE_TYPE_SIZE 64
+#define LONG_LONG_TYPE_SIZE 64
+
 /* Define if you don't want extended real, but do want to use the
    software floating point emulator for REAL_ARITHMETIC and
    decimal <-> binary conversion. */
@@ -542,20 +555,22 @@ extern int ix86_arch;
    Note that this is not necessarily the width of data type `int';
    if using 16-bit ints on a 80386, this would still be 32.
    But on a machine with 16-bit registers, this would be 16.  */
-#define BITS_PER_WORD 32
+#define BITS_PER_WORD (TARGET_64BIT ? 64 : 32)
+#define MAX_BITS_PER_WORD 64
 
 /* Width of a word, in units (bytes).  */
-#define UNITS_PER_WORD 4
+#define UNITS_PER_WORD (TARGET_64BIT ? 8 : 4)
+#define MIN_UNITS_PER_WORD 4
 
 /* Width in bits of a pointer.
    See also the macro `Pmode' defined below.  */
-#define POINTER_SIZE 32
+#define POINTER_SIZE BITS_PER_WORD
 
 /* Allocation boundary (in *bits*) for storing arguments in argument list.  */
-#define PARM_BOUNDARY 32
+#define PARM_BOUNDARY BITS_PER_WORD
 
 /* Boundary (in *bits*) on which stack pointer should be aligned.  */
-#define STACK_BOUNDARY 32
+#define STACK_BOUNDARY BITS_PER_WORD
 
 /* Boundary (in *bits*) on which the stack pointer preferrs to be
    aligned; the compiler cannot rely on having this alignment.  */
@@ -567,7 +582,7 @@ extern int ix86_arch;
 
 /* Alignment of field after `int : 0' in a structure. */
 
-#define EMPTY_FIELD_BOUNDARY 32
+#define EMPTY_FIELD_BOUNDARY BITS_PER_WORD
 
 /* Minimum size in bits of the largest boundary to which any
    and all fundamental data types supported by the hardware
@@ -590,7 +605,7 @@ extern int ix86_arch;
 /* BIGGEST_FIELD_ALIGNMENT is also used in libobjc, where it must be
    constant.  Use the smaller value in that context.  */
 #ifndef IN_TARGET_LIBS
-#define BIGGEST_FIELD_ALIGNMENT (TARGET_ALIGN_DOUBLE ? 64 : 32)
+#define BIGGEST_FIELD_ALIGNMENT (TARGET_64BIT ? 128 : (TARGET_ALIGN_DOUBLE ? 64 : 32))
 #else
 #define BIGGEST_FIELD_ALIGNMENT 32
 #endif
@@ -2127,7 +2142,12 @@ while (0)
 
 /* Max number of bytes we can move from memory to memory
    in one reasonably fast instruction.  */
-#define MOVE_MAX 4
+#define MOVE_MAX 16
+
+/* MOVE_MAX_PIECES is the number of bytes at a time which we can
+   move efficiently, as opposed to  MOVE_MAX which is the maximum
+   number of bytes we can move with a single instruction. */
+#define MOVE_MAX_PIECES (TARGET_64BIT ? 8 : 4)
 
 /* If a memory-to-memory move would take MOVE_RATIO or more simple
    move-instruction pairs, we will do a movstr or libcall instead.
@@ -2175,7 +2195,7 @@ while (0)
 /* Specify the machine mode that pointers have.
    After generation of rtl, the compiler makes no further distinction
    between pointers and any other objects of this machine mode.  */
-#define Pmode SImode
+#define Pmode (TARGET_64BIT ? DImode : SImode)
 
 /* A function address in a call instruction
    is a byte address (for indexing purposes)