Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
R
riscv-gcc-1
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lvzhengyang
riscv-gcc-1
Commits
3f8f5a3f
Commit
3f8f5a3f
authored
Jul 06, 1992
by
Timothy Moore
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
*** empty log message ***
From-SVN: r1460
parent
17d71a73
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
28 additions
and
25 deletions
+28
-25
gcc/config/pa/pa.h
+28
-25
No files found.
gcc/config/pa/pa.h
View file @
3f8f5a3f
...
@@ -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, " (hp
9000s800
)");
#define TARGET_VERSION fprintf (stderr, " (hp
pa
)");
/* 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 hp9k80
0 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.
HP
9000/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:
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment