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
13a07c71
Commit
13a07c71
authored
Mar 22, 1992
by
Torbjorn Granlund
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
*** empty log message ***
From-SVN: r570
parent
45848a8c
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
22 additions
and
33 deletions
+22
-33
gcc/config/pyr/pyr.h
+22
-33
No files found.
gcc/config/pyr/pyr.h
View file @
13a07c71
...
...
@@ -52,13 +52,8 @@ extern int target_flags;
/* Nonzero if compiling code that Unix assembler can assemble. */
#define TARGET_UNIX_ASM (target_flags & 1)
/* Use the indexed addressing modes (were once not known to work).
Leaving this in means we can disable them and so find out what
they win us. */
#define TARGET_INDEX (target_flags & 2)
/* Implement stdarg in the same fashion used on all other machines. */
#define TARGET_GNU_STDARG (target_flags &
4
)
#define TARGET_GNU_STDARG (target_flags &
2
)
/* Compile using RETD to pop off the args.
This will not work unless you use prototypes at least
...
...
@@ -66,7 +61,7 @@ extern int target_flags;
This contravenes the Pyramid calling convention, so we don't
do it yet. */
#define TARGET_RETD (target_flags &
8
)
#define TARGET_RETD (target_flags &
4
)
/* Macros used in the machine description to test the flags. */
...
...
@@ -76,19 +71,15 @@ extern int target_flags;
where VALUE is the bits to set or minus the bits to clear.
An empty string NAME is used to identify the default VALUE.
-mgnu will be useful if we ever have GAS on a pyramid.
-mindex was used to enable indexing when I didn't understand
how pyramid's indexing modes worked. */
-mgnu will be useful if we ever have GAS on a pyramid. */
#define TARGET_SWITCHES \
{ {"unix", 1}, \
{"gnu", -1}, \
{"index", 2}, \
{"noindex", -2}, \
{"gnu-stdarg", 4}, \
{"nognu-stdarg", -4}, \
{"retd", 8}, \
{"no-retd", -8}, \
{"gnu-stdarg", 2}, \
{"nognu-stdarg", -2}, \
{"retd", 4}, \
{"no-retd", -4}, \
{ "", TARGET_DEFAULT}}
/* Default target_flags if no switches specified.
...
...
@@ -96,7 +87,7 @@ extern int target_flags;
(equivalent to "-munix -mindex -mgnu-stdarg") */
#ifndef TARGET_DEFAULT
#define TARGET_DEFAULT (1 + 2
+ 4
)
#define TARGET_DEFAULT (1 + 2)
#endif
/* Never allow $ in identifiers */
...
...
@@ -105,16 +96,17 @@ extern int target_flags;
/*** Target machine storage layout ***/
/* Define this
if most significant bit is lowest numbered
in instructions that operate on numbered bit-fields.
/* Define this
to non-zero if most significant bit is lowest
numbered
in instructions that operate on numbered bit-fields.
This is not true on the pyramid. */
#define BITS_BIG_ENDIAN 0
/* Define this if most significant byte of a word is the lowest numbered. */
/* Define this to non-zero if most significant byte of a word is
the lowest numbered. */
#define BYTES_BIG_ENDIAN 1
/* Define this
if most significant word of a multiword number is the lowest
numbered. */
/* Define this
to non-zero if most significant word of a multiword
number
is the lowest number
ed. */
#define WORDS_BIG_ENDIAN 1
/* Number of bits in an addressable storage unit */
...
...
@@ -146,7 +138,6 @@ extern int target_flags;
#define EMPTY_FIELD_BOUNDARY 32
/* Every structure's size must be a multiple of this. */
/* ??? This is a guess. */
#define STRUCTURE_SIZE_BOUNDARY 32
/* No data type wants to be aligned rounder than this. */
...
...
@@ -161,7 +152,6 @@ extern int target_flags;
on the size of a cache line, which is 32 bytes.
Newer pyrs have single insns that do strcmp() and strcpy(), so this
may not actually win anything. */
#define CONSTANT_ALIGNMENT(EXP, ALIGN) \
(TREE_CODE (EXP) == STRING_CST \
&& (ALIGN) < BITS_PER_WORD ? BITS_PER_WORD : (ALIGN))
...
...
@@ -256,8 +246,7 @@ frame n | | | |
/* 1 for registers that have pervasive standard uses
and are not available for the register allocator.
On the pyramid, these are LOGPSW, CFP, SP, PC, and all the other
global regs. */
On the pyramid, these are LOGPSW, SP, and PC. */
#define FIXED_REGISTERS \
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
...
...
@@ -314,7 +303,7 @@ frame n | | | |
/* Base register for access to local variables of the function.
Pyramid uses CFP (GR13) as both frame pointer and argument pointer. */
#define FRAME_POINTER_REGNUM
13
/* PYR_GREG(13) */
#define FRAME_POINTER_REGNUM
PYR_GREG(13)
/* Value should be nonzero if functions must have frame pointers.
Zero means the frame pointer need not be set up (and parms
...
...
@@ -799,10 +788,11 @@ extern int current_function_calls_alloca;
/* All registers except gr0 OK as index or base registers. */
#define REGNO_OK_FOR_BASE_P(regno) \
((
0 < (regno) && (regno) < FIRST_PSEUDO_REGISTER) || reg_renumber[regno] > 0
)
((
regno) < FIRST_PSEUDO_REGISTER || reg_renumber[regno] < FIRST_PSEUDO_REGISTER
)
#define REGNO_OK_FOR_INDEX_P(regno) \
((0 < (regno) && (regno) < FIRST_PSEUDO_REGISTER) || reg_renumber[regno] > 0)
((unsigned) (regno) - 1 < FIRST_PSEUDO_REGISTER - 1 \
|| (unsigned) reg_renumber[regno] - 1 < FIRST_PSEUDO_REGISTER - 1)
/* Maximum number of registers that can appear in a valid memory address. */
...
...
@@ -834,7 +824,7 @@ extern int current_function_calls_alloca;
/* Nonzero if X is a hard reg that can be used as an index
or if it is a pseudo reg. */
#define REG_OK_FOR_INDEX_P(X)
1
#define REG_OK_FOR_INDEX_P(X)
(REGNO (X) > 0)
/* Nonzero if X is a hard reg that can be used as a base reg
or if it is a pseudo reg. */
#define REG_OK_FOR_BASE_P(X) 1
...
...
@@ -857,8 +847,7 @@ extern int current_function_calls_alloca;
except for CONSTANT_ADDRESS_P which is actually machine-independent. */
/* Go to ADDR if X is indexable -- ie, neither indexed nor offset.
Note that X is indexable iff x is offset. */
/* Go to ADDR if X is indexable -- i.e., neither indexed nor offset. */
#define GO_IF_INDEXABLE_ADDRESS(X, ADDR) \
{ register rtx xfoob = (X); \
if ((CONSTANT_ADDRESS_P (xfoob)) \
...
...
@@ -923,7 +912,7 @@ extern int current_function_calls_alloca;
#define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \
{ register rtx xone, xtwo, xfoo0, xfoo1; \
GO_IF_NONINDEXED_ADDRESS (X, ADDR); \
if (
TARGET_INDEX && GET_CODE (X) == PLUS)
\
if (
GET_CODE (X) == PLUS)
\
{ \
/* Handle <address>[index] represented with index-sum outermost */
\
xone = XEXP (X, 0); \
...
...
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