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
15052bd1
Commit
15052bd1
authored
Nov 12, 1999
by
Bernd Schmidt
Committed by
Nick Clifton
Nov 12, 1999
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Treat QImode addresses the same way GO_IF_LEGITIMATE_INDEX does.
From-SVN: r30500
parent
e428d738
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
51 additions
and
46 deletions
+51
-46
gcc/ChangeLog
+5
-0
gcc/config/arm/arm.h
+46
-46
No files found.
gcc/ChangeLog
View file @
15052bd1
Fri
Nov
12
13
:
31
:
54
1999
Bernd
Schmidt
<
bernds
@cygnus
.
co
.
uk
>
*
config
/
arm
/
arm
.
h
(
LEGITIMIZE_RELOAD_ADDRESS
)
:
Treat
QImode
addresses
the
same
way
GO_IF_LEGITIMATE_INDEX
does
.
Fri
Nov
12
12
:
36
:
04
1999
Bernd
Schmidt
<
bernds
@cygnus
.
co
.
uk
>
Fri
Nov
12
12
:
36
:
04
1999
Bernd
Schmidt
<
bernds
@cygnus
.
co
.
uk
>
*
cse
.
c
(
hash_arg_in_struct
)
:
Delete
.
*
cse
.
c
(
hash_arg_in_struct
)
:
Delete
.
...
...
gcc/config/arm/arm.h
View file @
15052bd1
...
@@ -1015,52 +1015,52 @@ enum reg_class
...
@@ -1015,52 +1015,52 @@ enum reg_class
For the ARM, we wish to handle large displacements off a base
For the ARM, we wish to handle large displacements off a base
register by splitting the addend across a MOV and the mem insn.
register by splitting the addend across a MOV and the mem insn.
This can cut the number of reloads needed. */
This can cut the number of reloads needed. */
#define LEGITIMIZE_RELOAD_ADDRESS(X, MODE, OPNUM, TYPE, IND_LEVELS, WIN)
\
#define LEGITIMIZE_RELOAD_ADDRESS(X, MODE, OPNUM, TYPE, IND_LEVELS, WIN) \
do
\
do \
{
\
{ \
if (GET_CODE (X) == PLUS
\
if (GET_CODE (X) == PLUS \
&& GET_CODE (XEXP (X, 0)) == REG
\
&& GET_CODE (XEXP (X, 0)) == REG \
&& REGNO (XEXP (X, 0)) < FIRST_PSEUDO_REGISTER
\
&& REGNO (XEXP (X, 0)) < FIRST_PSEUDO_REGISTER \
&& REG_MODE_OK_FOR_BASE_P (XEXP (X, 0), MODE)
\
&& REG_MODE_OK_FOR_BASE_P (XEXP (X, 0), MODE) \
&& GET_CODE (XEXP (X, 1)) == CONST_INT)
\
&& GET_CODE (XEXP (X, 1)) == CONST_INT) \
{
\
{ \
HOST_WIDE_INT val = INTVAL (XEXP (X, 1));
\
HOST_WIDE_INT val = INTVAL (XEXP (X, 1)); \
HOST_WIDE_INT low, high;
\
HOST_WIDE_INT low, high; \
\
\
if (MODE == DImode || (TARGET_SOFT_FLOAT && MODE == DFmode))
\
if (MODE == DImode || (TARGET_SOFT_FLOAT && MODE == DFmode)) \
low = ((val & 0xf) ^ 0x8) - 0x8;
\
low = ((val & 0xf) ^ 0x8) - 0x8; \
else if (MODE == SImode
|| MODE == QImode
\
else if (MODE == SImode
\
|| (MODE == SFmode && TARGET_SOFT_FLOAT)
\
|| (MODE == SFmode && TARGET_SOFT_FLOAT) \
|| (
MODE == HImode && ! arm_arch4))
\
|| (
(MODE == HImode || MODE == QImode) && ! arm_arch4))
\
/* Need to be careful, -4096 is not a valid offset */
\
/* Need to be careful, -4096 is not a valid offset */
\
low = val >= 0 ? (val & 0xfff) : -((-val) & 0xfff);
\
low = val >= 0 ? (val & 0xfff) : -((-val) & 0xfff); \
else if (
MODE == HImode && arm_arch4)
\
else if (
(MODE == HImode || MODE == QImode) && arm_arch4)
\
/* Need to be careful, -256 is not a valid offset */
\
/* Need to be careful, -256 is not a valid offset */
\
low = val >= 0 ? (val & 0xff) : -((-val) & 0xff);
\
low = val >= 0 ? (val & 0xff) : -((-val) & 0xff); \
else if (GET_MODE_CLASS (MODE) == MODE_FLOAT
\
else if (GET_MODE_CLASS (MODE) == MODE_FLOAT \
&& TARGET_HARD_FLOAT)
\
&& TARGET_HARD_FLOAT) \
/* Need to be careful, -1024 is not a valid offset */
\
/* Need to be careful, -1024 is not a valid offset */
\
low = val >= 0 ? (val & 0x3ff) : -((-val) & 0x3ff);
\
low = val >= 0 ? (val & 0x3ff) : -((-val) & 0x3ff); \
else
\
else \
break;
\
break; \
\
\
high = ((((val - low) & 0xffffffff) ^ 0x80000000) - 0x80000000);
\
high = ((((val - low) & 0xffffffff) ^ 0x80000000) - 0x80000000); \
/* Check for overflow or zero */
\
/* Check for overflow or zero */
\
if (low == 0 || high == 0 || (high + low != val))
\
if (low == 0 || high == 0 || (high + low != val)) \
break;
\
break; \
\
\
/* Reload the high part into a base reg; leave the low part
\
/* Reload the high part into a base reg; leave the low part \
in the mem. */
\
in the mem. */
\
X = gen_rtx_PLUS (GET_MODE (X),
\
X = gen_rtx_PLUS (GET_MODE (X), \
gen_rtx_PLUS (GET_MODE (X), XEXP (X, 0),
\
gen_rtx_PLUS (GET_MODE (X), XEXP (X, 0), \
GEN_INT (high)),
\
GEN_INT (high)), \
GEN_INT (low));
\
GEN_INT (low)); \
push_reload (XEXP (X, 0), NULL_RTX, &XEXP (X, 0), NULL_PTR,
\
push_reload (XEXP (X, 0), NULL_RTX, &XEXP (X, 0), NULL_PTR, \
BASE_REG_CLASS, GET_MODE (X), VOIDmode, 0, 0,
\
BASE_REG_CLASS, GET_MODE (X), VOIDmode, 0, 0, \
OPNUM, TYPE);
\
OPNUM, TYPE); \
goto WIN;
\
goto WIN; \
}
\
} \
}
\
} \
while (0)
while (0)
/* Return the maximum number of consecutive registers
/* Return the maximum number of consecutive registers
...
...
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