Commit 3f8f5a3f by Timothy Moore

*** empty log message ***

From-SVN: r1460
parent 17d71a73
...@@ -76,15 +76,13 @@ enum cmp_type /* comparison type */ ...@@ -76,15 +76,13 @@ enum cmp_type /* comparison type */
/* Print subsidiary information on the compiler version in use. */ /* Print subsidiary information on the compiler version in use. */
#define TARGET_VERSION fprintf (stderr, " (hp9000s800)"); #define TARGET_VERSION fprintf (stderr, " (hppa)");
/* Run-time compilation parameters selecting different hardware subsets. /* Run-time compilation parameters selecting different hardware subsets. */
On the the hp9k800, we don't yet need any. But ... */
extern int target_flags; extern int target_flags;
/* compile code for PA-RISC 1.1 ("Snake") */ /* compile code for HP-PA 1.1 ("Snake") */
#define TARGET_SNAKE (target_flags & 1) #define TARGET_SNAKE (target_flags & 1)
...@@ -112,7 +110,7 @@ extern int target_flags; ...@@ -112,7 +110,7 @@ extern int target_flags;
/* Define this if most significant word of a multiword number is lowest /* Define this if most significant word of a multiword number is lowest
numbered. */ numbered. */
/* For the hp9k800 we can decide arbitrarily /* For the HP-PA we can decide arbitrarily
since there are no machine instructions for them. */ since there are no machine instructions for them. */
#define WORDS_BIG_ENDIAN 1 #define WORDS_BIG_ENDIAN 1
...@@ -183,13 +181,13 @@ extern int target_flags; ...@@ -183,13 +181,13 @@ extern int target_flags;
All registers that the compiler knows about must be given numbers, All registers that the compiler knows about must be given numbers,
even those that are not normally considered general registers. even those that are not normally considered general registers.
The hp9k800 has 32 fullword registers and 16 floating point HP-PA 1.0 has 32 fullword registers and 16 floating point
registers. The floating point registers hold either word or double registers. The floating point registers hold either word or double
word values. word values.
16 additional registers are reserved. 16 additional registers are reserved.
PA-RISC 1.1 has 32 fullword registers and 32 floating point HP-PA 1.1 has 32 fullword registers and 32 floating point
registers. However, the floating point registers behave registers. However, the floating point registers behave
differently: the left and right halves of registers are addressable differently: the left and right halves of registers are addressable
as 32 bit registers. So, we will set things up like the 68k which as 32 bit registers. So, we will set things up like the 68k which
...@@ -202,7 +200,7 @@ extern int target_flags; ...@@ -202,7 +200,7 @@ extern int target_flags;
/* 1 for registers that have pervasive standard uses /* 1 for registers that have pervasive standard uses
and are not available for the register allocator. and are not available for the register allocator.
On the hp9k800, these are: On the HP-PA, these are:
Reg 0 = 0 (hardware). However, 0 is used for condition code, Reg 0 = 0 (hardware). However, 0 is used for condition code,
so is not fixed. so is not fixed.
Reg 1 = ADDIL target/Temporary (hardware). Reg 1 = ADDIL target/Temporary (hardware).
...@@ -343,7 +341,7 @@ extern int target_flags; ...@@ -343,7 +341,7 @@ extern int target_flags;
This is ordinarily the length in words of a value of mode MODE This is ordinarily the length in words of a value of mode MODE
but can be less for certain modes in special long registers. but can be less for certain modes in special long registers.
On the hp9k800, ordinary registers hold 32 bits worth; On the HP-PA, ordinary registers hold 32 bits worth;
The floating point registers are 64 bits wide. Snake fp regs are 32 The floating point registers are 64 bits wide. Snake fp regs are 32
bits wide */ bits wide */
#define HARD_REGNO_NREGS(REGNO, MODE) \ #define HARD_REGNO_NREGS(REGNO, MODE) \
...@@ -351,7 +349,7 @@ extern int target_flags; ...@@ -351,7 +349,7 @@ extern int target_flags;
? ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD) : 1) ? ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD) : 1)
/* Value is 1 if hard register REGNO can hold a value of machine-mode MODE. /* Value is 1 if hard register REGNO can hold a value of machine-mode MODE.
On the hp9k800, the cpu registers can hold any mode. We On the HP-PA, the cpu registers can hold any mode. We
force this to be an even register is it cannot hold the full mode. */ force this to be an even register is it cannot hold the full mode. */
#define HARD_REGNO_MODE_OK(REGNO, MODE) \ #define HARD_REGNO_MODE_OK(REGNO, MODE) \
((REGNO) == 0 ? (MODE) == CCmode || (MODE) == CCFPmode \ ((REGNO) == 0 ? (MODE) == CCmode || (MODE) == CCFPmode \
...@@ -370,7 +368,7 @@ extern int target_flags; ...@@ -370,7 +368,7 @@ extern int target_flags;
/* Specify the registers used for certain standard purposes. /* Specify the registers used for certain standard purposes.
The values of these macros are register numbers. */ The values of these macros are register numbers. */
/* the hp9k800 pc isn't overloaded on a register that the compiler knows about. */ /* The HP-PA pc isn't overloaded on a register that the compiler knows about. */
/* #define PC_REGNUM */ /* #define PC_REGNUM */
/* Register to use for pushing function arguments. */ /* Register to use for pushing function arguments. */
...@@ -437,7 +435,7 @@ extern int leaf_function; ...@@ -437,7 +435,7 @@ extern int leaf_function;
For any two classes, it is very desirable that there be another For any two classes, it is very desirable that there be another
class that represents their union. */ class that represents their union. */
/* The hp9k800 has four kinds of registers: general regs, 1.0 fp regs, /* The HP-PA has four kinds of registers: general regs, 1.0 fp regs,
1.1 fp regs, and the high 1.1 fp regs, to which the operands of 1.1 fp regs, and the high 1.1 fp regs, to which the operands of
fmpyadd and fmpysub are restricted. */ fmpyadd and fmpysub are restricted. */
...@@ -505,7 +503,7 @@ enum reg_class { NO_REGS, R1_REGS, GENERAL_REGS, FP_REGS, GENERAL_OR_FP_REGS, ...@@ -505,7 +503,7 @@ enum reg_class { NO_REGS, R1_REGS, GENERAL_REGS, FP_REGS, GENERAL_OR_FP_REGS,
C is the letter, and VALUE is a constant value. C is the letter, and VALUE is a constant value.
Return 1 if VALUE is in the range specified by C. Return 1 if VALUE is in the range specified by C.
HP9000/800 immediate field sizes: HP-PA immediate field sizes:
5 bits: scalar/floating short loads + stores; deposit; conditional branch 5 bits: scalar/floating short loads + stores; deposit; conditional branch
11 bits: arithmetic immediate, compare immediate 11 bits: arithmetic immediate, compare immediate
14 bits: loads and stores; load offset 14 bits: loads and stores; load offset
...@@ -573,7 +571,7 @@ HP9000/800 immediate field sizes: ...@@ -573,7 +571,7 @@ HP9000/800 immediate field sizes:
/* If we generate an insn to push BYTES bytes, /* If we generate an insn to push BYTES bytes,
this says how many the stack pointer really advances by. this says how many the stack pointer really advances by.
On the hp9k800, don't define this because there are no push insns. */ On the HP-PA, don't define this because there are no push insns. */
/* #define PUSH_ROUNDING(BYTES) */ /* #define PUSH_ROUNDING(BYTES) */
/* Offset of first parameter from the argument pointer register value. /* Offset of first parameter from the argument pointer register value.
...@@ -630,7 +628,7 @@ HP9000/800 immediate field sizes: ...@@ -630,7 +628,7 @@ HP9000/800 immediate field sizes:
If the precise function being called is known, FUNC is its FUNCTION_DECL; If the precise function being called is known, FUNC is its FUNCTION_DECL;
otherwise, FUNC is 0. */ otherwise, FUNC is 0. */
/* On the hp9k800 the value is found in register(s) 28(-29), unless /* On the HP-PA the value is found in register(s) 28(-29), unless
the mode is SF or DF. Then the value is returned in fr4 (36, ) */ the mode is SF or DF. Then the value is returned in fr4 (36, ) */
...@@ -666,7 +664,7 @@ HP9000/800 immediate field sizes: ...@@ -666,7 +664,7 @@ HP9000/800 immediate field sizes:
and about the args processed so far, enough to enable macros and about the args processed so far, enough to enable macros
such as FUNCTION_ARG to determine where the next arg should go. such as FUNCTION_ARG to determine where the next arg should go.
On the hp9k800, this is a single integer, which is a number of words On the HP-PA, this is a single integer, which is a number of words
of arguments scanned so far (including the invisible argument, of arguments scanned so far (including the invisible argument,
if any, which holds the structure-value-address). if any, which holds the structure-value-address).
Thus 4 or more means all following args should go on the stack. */ Thus 4 or more means all following args should go on the stack. */
...@@ -706,7 +704,7 @@ HP9000/800 immediate field sizes: ...@@ -706,7 +704,7 @@ HP9000/800 immediate field sizes:
NAMED is nonzero if this argument is a named parameter NAMED is nonzero if this argument is a named parameter
(otherwise it is an extra parameter matching an ellipsis). */ (otherwise it is an extra parameter matching an ellipsis). */
/* On the hp9k800 the first four words of args are normally in registers /* On the HP-PA the first four words of args are normally in registers
and the rest are pushed. But any arg that won't entirely fit in regs and the rest are pushed. But any arg that won't entirely fit in regs
is pushed. */ is pushed. */
...@@ -783,10 +781,15 @@ extern enum cmp_type hppa_branch_type; ...@@ -783,10 +781,15 @@ extern enum cmp_type hppa_branch_type;
fprintf (FILE, ",ARGW%d=FR", i++); \ fprintf (FILE, ",ARGW%d=FR", i++); \
else if (TYPE_MODE (DECL_ARG_TYPE (parm)) == DFmode) \ else if (TYPE_MODE (DECL_ARG_TYPE (parm)) == DFmode) \
{ \ { \
if (i <= 2) \
{ \
if (i == 1) i++; \ if (i == 1) i++; \
ASM_DOUBLE_ARG_DESCRIPTORS (FILE, i++, i++); \ ASM_DOUBLE_ARG_DESCRIPTORS (FILE, i++, i++); \
} \ } \
else \ else \
break; \
} \
else \
{ \ { \
int arg_size = \ int arg_size = \
FUNCTION_ARG_SIZE (TYPE_MODE (DECL_ARG_TYPE (parm)),\ FUNCTION_ARG_SIZE (TYPE_MODE (DECL_ARG_TYPE (parm)),\
...@@ -957,7 +960,7 @@ extern union tree_node *current_function_decl; ...@@ -957,7 +960,7 @@ extern union tree_node *current_function_decl;
/* Now macros that check whether X is a register and also, /* Now macros that check whether X is a register and also,
strictly, whether it is in a specified class. strictly, whether it is in a specified class.
These macros are specific to the the hp9k800, and may be used only These macros are specific to the the HP-PA, and may be used only
in code for printing assembler insns and in conditions for in code for printing assembler insns and in conditions for
define_optimization. */ define_optimization. */
...@@ -1060,7 +1063,7 @@ extern union tree_node *current_function_decl; ...@@ -1060,7 +1063,7 @@ extern union tree_node *current_function_decl;
The MODE argument is the machine mode for the MEM expression The MODE argument is the machine mode for the MEM expression
that wants to use this address. that wants to use this address.
On the hp9k800, the actual legitimate addresses must be On the HP-PA, the actual legitimate addresses must be
REG+REG, REG+(REG*SCALE) or REG+SMALLINT. REG+REG, REG+(REG*SCALE) or REG+SMALLINT.
But we can treat a SYMBOL_REF as legitimate if it is part of this But we can treat a SYMBOL_REF as legitimate if it is part of this
function's constant-pool, because such addresses can actually function's constant-pool, because such addresses can actually
...@@ -1149,7 +1152,7 @@ extern union tree_node *current_function_decl; ...@@ -1149,7 +1152,7 @@ extern union tree_node *current_function_decl;
It is always safe for this macro to do nothing. It exists to recognize It is always safe for this macro to do nothing. It exists to recognize
opportunities to optimize the output. */ opportunities to optimize the output. */
/* On the hp9k800, change REG+N into REG+REG, and REG+(X*Y) into REG+REG. */ /* On the HP-PA, change REG+N into REG+REG, and REG+(X*Y) into REG+REG. */
#define LEGITIMIZE_ADDRESS(X,OLDX,MODE,WIN) \ #define LEGITIMIZE_ADDRESS(X,OLDX,MODE,WIN) \
{ if (GET_CODE (X) == PLUS && CONSTANT_ADDRESS_P (XEXP (X, 1))) \ { if (GET_CODE (X) == PLUS && CONSTANT_ADDRESS_P (XEXP (X, 1))) \
...@@ -1206,7 +1209,7 @@ extern union tree_node *current_function_decl; ...@@ -1206,7 +1209,7 @@ extern union tree_node *current_function_decl;
name string in the `symbol_ref' (if one bit is not enough name string in the `symbol_ref' (if one bit is not enough
information). information).
On the PA-RISC we use this to indicate if a symbol is in text or On the HP-PA we use this to indicate if a symbol is in text or
data space. */ data space. */
#define ENCODE_SECTION_INFO(DECL)\ #define ENCODE_SECTION_INFO(DECL)\
...@@ -1378,7 +1381,7 @@ do { fprintf (FILE, "\t.SPACE $PRIVATE$\n\ ...@@ -1378,7 +1381,7 @@ do { fprintf (FILE, "\t.SPACE $PRIVATE$\n\
#define ASM_APP_OFF "" #define ASM_APP_OFF ""
/* We don't yet know how to identify GCC to HP series 800. */ /* We don't yet know how to identify GCC to HP-PA machines. */
#define ASM_IDENTIFY_GCC(FILE) fprintf (FILE, "; gcc_compiled.:\n") #define ASM_IDENTIFY_GCC(FILE) fprintf (FILE, "; gcc_compiled.:\n")
/* Output before code. */ /* Output before code. */
...@@ -1541,7 +1544,7 @@ do { fprintf (FILE, "\t.SPACE $PRIVATE$\n\ ...@@ -1541,7 +1544,7 @@ do { fprintf (FILE, "\t.SPACE $PRIVATE$\n\
fprintf (FILE, "\tb L$%04d\n\tnop\n", VALUE) fprintf (FILE, "\tb L$%04d\n\tnop\n", VALUE)
/* This is how to output an element of a case-vector that is relative. /* This is how to output an element of a case-vector that is relative.
(the hp9k800 does not use such vectors, (The HP-PA does not use such vectors,
but we must define this macro anyway.) */ but we must define this macro anyway.) */
#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, VALUE, REL) \ #define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, VALUE, REL) \
...@@ -1605,7 +1608,7 @@ do { fprintf (FILE, "\t.SPACE $PRIVATE$\n\ ...@@ -1605,7 +1608,7 @@ do { fprintf (FILE, "\t.SPACE $PRIVATE$\n\
CODE is a letter or dot (`z' in `%z0') or 0 if no letter was specified. CODE is a letter or dot (`z' in `%z0') or 0 if no letter was specified.
For `%' followed by punctuation, CODE is the punctuation and X is null. For `%' followed by punctuation, CODE is the punctuation and X is null.
On the hp9k800, the CODE can be `r', meaning this is a register-only operand On the HP-PA, the CODE can be `r', meaning this is a register-only operand
and an immediate zero should be represented as `r0'. and an immediate zero should be represented as `r0'.
Several % codes are defined: Several % codes are defined:
......
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