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
4c0d89b5
Commit
4c0d89b5
authored
Feb 14, 1992
by
Richard Stallman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
*** empty log message ***
From-SVN: r322
parent
2d20b9df
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
29 additions
and
6 deletions
+29
-6
gcc/config/i386/i386.c
+29
-6
No files found.
gcc/config/i386/i386.c
View file @
4c0d89b5
...
@@ -43,6 +43,22 @@ static char *hi_reg_name[] = HI_REGISTER_NAMES;
...
@@ -43,6 +43,22 @@ static char *hi_reg_name[] = HI_REGISTER_NAMES;
static
char
*
qi_reg_name
[]
=
QI_REGISTER_NAMES
;
static
char
*
qi_reg_name
[]
=
QI_REGISTER_NAMES
;
static
char
*
qi_high_reg_name
[]
=
QI_HIGH_REGISTER_NAMES
;
static
char
*
qi_high_reg_name
[]
=
QI_HIGH_REGISTER_NAMES
;
/* Array of the smallest class containing reg number REGNO, indexed by
REGNO. Used by REGNO_REG_CLASS in i386.h. */
enum
reg_class
regclass_map
[
FIRST_PSEUDO_REGISTER
]
=
{
/* ax, dx, cx, bx */
AREG
,
DREG
,
CREG
,
Q_REGS
,
/* si, di, bp, sp */
SIREG
,
DIREG
,
INDEX_REGS
,
GENERAL_REGS
,
/* FP registers */
FP_TOP_REG
,
FP_SECOND_REG
,
FLOAT_REGS
,
FLOAT_REGS
,
FLOAT_REGS
,
FLOAT_REGS
,
FLOAT_REGS
,
FLOAT_REGS
,
/* arg pointer */
INDEX_REGS
};
/* Output an insn whose source is a 386 integer register. SRC is the
/* Output an insn whose source is a 386 integer register. SRC is the
rtx for the register, and TEMPLATE is the op-code template. SRC may
rtx for the register, and TEMPLATE is the op-code template. SRC may
be either SImode or DImode.
be either SImode or DImode.
...
@@ -1227,11 +1243,14 @@ print_operand_address (file, addr)
...
@@ -1227,11 +1243,14 @@ print_operand_address (file, addr)
On the 80386, we assume that only test and compare insns, as well
On the 80386, we assume that only test and compare insns, as well
as SI, HI, & DI mode ADD, SUB, NEG, AND, IOR, XOR, ASHIFT, LSHIFT,
as SI, HI, & DI mode ADD, SUB, NEG, AND, IOR, XOR, ASHIFT, LSHIFT,
ASHIFTRT, and LSHIFTRT instructions set the condition codes usefully.
ASHIFTRT, and LSHIFTRT instructions set the condition codes usefully.
Also, we assume that jumps and moves don't affect the condition codes.
Also, we assume that jumps, moves and sCOND don't affect the condition
All else, clobbers the condition codes, by assumption.
codes. All else clobbers the condition codes, by assumption.
We assume that ALL integer add, minus, etc. instructions effect the
condition codes. This MUST be consistent with i386.md.
We
assume that ALL add, minus, etc. instructions effect the condition
We
don't record any float test or compare - the redundant test &
co
des. This MUST be consistent with i386.md.
*/
co
mpare check in final.c does not handle stack-like regs correctly.
*/
void
void
notice_update_cc
(
exp
)
notice_update_cc
(
exp
)
...
@@ -1247,7 +1266,8 @@ notice_update_cc (exp)
...
@@ -1247,7 +1266,8 @@ notice_update_cc (exp)
the RTX's which we remember the cc's came from.
the RTX's which we remember the cc's came from.
(Note that moving a constant 0 or 1 MAY set the cc's). */
(Note that moving a constant 0 or 1 MAY set the cc's). */
if
(
REG_P
(
SET_DEST
(
exp
))
if
(
REG_P
(
SET_DEST
(
exp
))
&&
(
REG_P
(
SET_SRC
(
exp
))
||
GET_CODE
(
SET_SRC
(
exp
))
==
MEM
))
&&
(
REG_P
(
SET_SRC
(
exp
))
||
GET_CODE
(
SET_SRC
(
exp
))
==
MEM
||
GET_RTX_CLASS
(
GET_CODE
(
SET_SRC
(
exp
)))
==
'<'
))
{
{
if
(
cc_status
.
value1
if
(
cc_status
.
value1
&&
reg_overlap_mentioned_p
(
SET_DEST
(
exp
),
cc_status
.
value1
))
&&
reg_overlap_mentioned_p
(
SET_DEST
(
exp
),
cc_status
.
value1
))
...
@@ -1259,7 +1279,9 @@ notice_update_cc (exp)
...
@@ -1259,7 +1279,9 @@ notice_update_cc (exp)
}
}
/* Moving register into memory doesn't alter the cc's.
/* Moving register into memory doesn't alter the cc's.
It may invalidate the RTX's which we remember the cc's came from. */
It may invalidate the RTX's which we remember the cc's came from. */
if
(
GET_CODE
(
SET_DEST
(
exp
))
==
MEM
&&
REG_P
(
SET_SRC
(
exp
)))
if
(
GET_CODE
(
SET_DEST
(
exp
))
==
MEM
&&
(
REG_P
(
SET_SRC
(
exp
))
||
GET_RTX_CLASS
(
GET_CODE
(
SET_SRC
(
exp
)))
==
'<'
))
{
{
if
(
cc_status
.
value1
&&
GET_CODE
(
cc_status
.
value1
)
==
MEM
)
if
(
cc_status
.
value1
&&
GET_CODE
(
cc_status
.
value1
)
==
MEM
)
cc_status
.
value1
=
0
;
cc_status
.
value1
=
0
;
...
@@ -1321,6 +1343,7 @@ notice_update_cc (exp)
...
@@ -1321,6 +1343,7 @@ notice_update_cc (exp)
if
(
SET_DEST
(
XVECEXP
(
exp
,
0
,
0
))
==
cc0_rtx
)
if
(
SET_DEST
(
XVECEXP
(
exp
,
0
,
0
))
==
cc0_rtx
)
{
{
CC_STATUS_INIT
;
CC_STATUS_INIT
;
if
(
!
stack_regs_mentioned_p
(
SET_SRC
(
XVECEXP
(
exp
,
0
,
0
))))
cc_status
.
value1
=
SET_SRC
(
XVECEXP
(
exp
,
0
,
0
));
cc_status
.
value1
=
SET_SRC
(
XVECEXP
(
exp
,
0
,
0
));
return
;
return
;
}
}
...
...
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