Commit 65d9c0ab by Jan Hubicka Committed by Jan Hubicka

i386.h (LIBGCC2_LONG_DOUBLE_TYPE_SIZE): Set to 128bit for x86_64 (BOOL_TYPE_SIZE...

	* 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
parent dc647e99
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> Fri Mar 9 09:00:36 2001 Mike Stump <mrs@wrs.com>
* cselib.c (hash_rtx): Ensure that hash isn't zero upon return. * cselib.c (hash_rtx): Ensure that hash isn't zero upon return.
......
...@@ -511,11 +511,24 @@ extern int ix86_arch; ...@@ -511,11 +511,24 @@ extern int ix86_arch;
*/ */
#define LONG_DOUBLE_TYPE_SIZE (TARGET_128BIT_LONG_DOUBLE ? 128 : 96) #define LONG_DOUBLE_TYPE_SIZE (TARGET_128BIT_LONG_DOUBLE ? 128 : 96)
#define MAX_LONG_DOUBLE_TYPE_SIZE 128 #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 /* Tell real.c that this is the 80-bit Intel extended float format
packaged in a 128-bit or 96bit entity. */ packaged in a 128-bit or 96bit entity. */
#define INTEL_EXTENDED_IEEE_FORMAT #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 /* Define if you don't want extended real, but do want to use the
software floating point emulator for REAL_ARITHMETIC and software floating point emulator for REAL_ARITHMETIC and
decimal <-> binary conversion. */ decimal <-> binary conversion. */
...@@ -542,20 +555,22 @@ extern int ix86_arch; ...@@ -542,20 +555,22 @@ extern int ix86_arch;
Note that this is not necessarily the width of data type `int'; 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. 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. */ 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). */ /* 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. /* Width in bits of a pointer.
See also the macro `Pmode' defined below. */ 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. */ /* 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. */ /* 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 /* Boundary (in *bits*) on which the stack pointer preferrs to be
aligned; the compiler cannot rely on having this alignment. */ aligned; the compiler cannot rely on having this alignment. */
...@@ -567,7 +582,7 @@ extern int ix86_arch; ...@@ -567,7 +582,7 @@ extern int ix86_arch;
/* Alignment of field after `int : 0' in a structure. */ /* 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 /* Minimum size in bits of the largest boundary to which any
and all fundamental data types supported by the hardware and all fundamental data types supported by the hardware
...@@ -590,7 +605,7 @@ extern int ix86_arch; ...@@ -590,7 +605,7 @@ extern int ix86_arch;
/* BIGGEST_FIELD_ALIGNMENT is also used in libobjc, where it must be /* BIGGEST_FIELD_ALIGNMENT is also used in libobjc, where it must be
constant. Use the smaller value in that context. */ constant. Use the smaller value in that context. */
#ifndef IN_TARGET_LIBS #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 #else
#define BIGGEST_FIELD_ALIGNMENT 32 #define BIGGEST_FIELD_ALIGNMENT 32
#endif #endif
...@@ -2127,7 +2142,12 @@ while (0) ...@@ -2127,7 +2142,12 @@ while (0)
/* Max number of bytes we can move from memory to memory /* Max number of bytes we can move from memory to memory
in one reasonably fast instruction. */ 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 /* If a memory-to-memory move would take MOVE_RATIO or more simple
move-instruction pairs, we will do a movstr or libcall instead. move-instruction pairs, we will do a movstr or libcall instead.
...@@ -2175,7 +2195,7 @@ while (0) ...@@ -2175,7 +2195,7 @@ while (0)
/* Specify the machine mode that pointers have. /* Specify the machine mode that pointers have.
After generation of rtl, the compiler makes no further distinction After generation of rtl, the compiler makes no further distinction
between pointers and any other objects of this machine mode. */ 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 /* A function address in a call instruction
is a byte address (for indexing purposes) is a byte address (for indexing purposes)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment