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
9e21be9d
Commit
9e21be9d
authored
Apr 17, 1992
by
Richard Kenner
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
*** empty log message ***
From-SVN: r768
parent
c8470713
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
53 additions
and
8 deletions
+53
-8
gcc/recog.c
+53
-8
No files found.
gcc/recog.c
View file @
9e21be9d
...
...
@@ -1599,6 +1599,9 @@ constrain_operands (insn_code_num, strict)
int
strict
;
{
char
*
constraints
[
MAX_RECOG_OPERANDS
];
int
matching_operands
[
MAX_RECOG_OPERANDS
];
enum
op_type
{
OP_IN
,
OP_OUT
,
OP_INOUT
}
op_types
[
MAX_RECOG_OPERANDS
];
int
earlyclobber
[
MAX_RECOG_OPERANDS
];
register
int
c
;
int
noperands
=
insn_n_operands
[
insn_code_num
];
...
...
@@ -1610,7 +1613,11 @@ constrain_operands (insn_code_num, strict)
return
1
;
for
(
c
=
0
;
c
<
noperands
;
c
++
)
constraints
[
c
]
=
insn_operand_constraint
[
insn_code_num
][
c
];
{
constraints
[
c
]
=
insn_operand_constraint
[
insn_code_num
][
c
];
matching_operands
[
c
]
=
-
1
;
op_types
[
c
]
=
OP_IN
;
}
which_alternative
=
0
;
...
...
@@ -1629,6 +1636,8 @@ constrain_operands (insn_code_num, strict)
int
win
=
0
;
int
val
;
earlyclobber
[
opno
]
=
0
;
if
(
GET_CODE
(
op
)
==
SUBREG
)
{
if
(
GET_CODE
(
SUBREG_REG
(
op
))
==
REG
...
...
@@ -1645,16 +1654,25 @@ constrain_operands (insn_code_num, strict)
while
(
*
p
&&
(
c
=
*
p
++
)
!=
','
)
switch
(
c
)
{
case
'='
:
case
'+'
:
case
'?'
:
case
'#'
:
case
'&'
:
case
'!'
:
case
'*'
:
case
'%'
:
break
;
case
'='
:
op_types
[
opno
]
=
OP_OUT
;
break
;
case
'+'
:
op_types
[
opno
]
=
OP_INOUT
;
break
;
case
'&'
:
earlyclobber
[
opno
]
=
1
;
break
;
case
'0'
:
case
'1'
:
case
'2'
:
...
...
@@ -1674,6 +1692,9 @@ constrain_operands (insn_code_num, strict)
val
=
operands_match_p
(
recog_operand
[
c
-
'0'
],
recog_operand
[
opno
]);
matching_operands
[
opno
]
=
c
-
'0'
;
matching_operands
[
c
-
'0'
]
=
opno
;
if
(
val
!=
0
)
win
=
1
;
/* If output is *x and input is *--x,
...
...
@@ -1850,12 +1871,36 @@ constrain_operands (insn_code_num, strict)
Change whichever operands this alternative says to change. */
if
(
!
lose
)
{
while
(
--
funny_match_index
>=
0
)
int
opno
,
eopno
;
/* See if any earlyclobber operand conflicts with some other
operand. */
if
(
strict
>
0
)
for
(
eopno
=
0
;
eopno
<
noperands
;
eopno
++
)
if
(
earlyclobber
[
eopno
])
for
(
opno
=
0
;
opno
<
noperands
;
opno
++
)
if
((
GET_CODE
(
recog_operand
[
opno
])
==
MEM
||
op_types
[
opno
]
!=
OP_OUT
)
&&
opno
!=
eopno
&&
constraints
[
opno
]
!=
0
&&
!
(
matching_operands
[
opno
]
==
eopno
&&
rtx_equal_p
(
recog_operand
[
opno
],
recog_operand
[
eopno
]))
&&
!
safe_from_earlyclobber
(
recog_operand
[
opno
],
recog_operand
[
eopno
]))
lose
=
1
;
if
(
!
lose
)
{
recog_operand
[
funny_match
[
funny_match_index
].
other
]
=
recog_operand
[
funny_match
[
funny_match_index
].
this
];
while
(
--
funny_match_index
>=
0
)
{
recog_operand
[
funny_match
[
funny_match_index
].
other
]
=
recog_operand
[
funny_match
[
funny_match_index
].
this
];
}
return
1
;
}
return
1
;
}
which_alternative
++
;
...
...
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