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
f5d927c0
Commit
f5d927c0
authored
Sep 11, 2000
by
Kazu Hirata
Committed by
Jeff Law
Sep 11, 2000
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
* final.c: Fix formatting.
From-SVN: r36338
parent
4843bda9
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
111 additions
and
95 deletions
+111
-95
gcc/ChangeLog
+2
-0
gcc/final.c
+109
-95
No files found.
gcc/ChangeLog
View file @
f5d927c0
...
@@ -128,6 +128,8 @@ Mon Sep 11 10:48:41 2000 Ulrich Drepper <drepper@redhat.com>
...
@@ -128,6 +128,8 @@ Mon Sep 11 10:48:41 2000 Ulrich Drepper <drepper@redhat.com>
2000-09-11 Kazu Hirata <kazu@hxi.com>
2000-09-11 Kazu Hirata <kazu@hxi.com>
* final.c: Fix formatting.
* integrate.c: Fix formatting.
* integrate.c: Fix formatting.
2000-09-11 Geoff Keating <geoffk@cygnus.com>
2000-09-11 Geoff Keating <geoffk@cygnus.com>
...
...
gcc/final.c
View file @
f5d927c0
...
@@ -19,7 +19,6 @@ along with GNU CC; see the file COPYING. If not, write to
...
@@ -19,7 +19,6 @@ along with GNU CC; see the file COPYING. If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330,
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
Boston, MA 02111-1307, USA. */
/* This is the final pass of the compiler.
/* This is the final pass of the compiler.
It looks at the rtl code for a function and outputs assembler code.
It looks at the rtl code for a function and outputs assembler code.
...
@@ -241,7 +240,8 @@ rtx current_insn_predicate;
...
@@ -241,7 +240,8 @@ rtx current_insn_predicate;
/* Linked list to hold line numbers for each basic block. */
/* Linked list to hold line numbers for each basic block. */
struct
bb_list
{
struct
bb_list
{
struct
bb_list
*
next
;
/* pointer to next basic block */
struct
bb_list
*
next
;
/* pointer to next basic block */
int
line_num
;
/* line number */
int
line_num
;
/* line number */
int
file_label_num
;
/* LPBC<n> label # for stored filename */
int
file_label_num
;
/* LPBC<n> label # for stored filename */
...
@@ -255,7 +255,8 @@ static int bb_func_label_num = -1; /* Current label # for func */
...
@@ -255,7 +255,8 @@ static int bb_func_label_num = -1; /* Current label # for func */
/* Linked list to hold the strings for each file and function name output. */
/* Linked list to hold the strings for each file and function name output. */
struct
bb_str
{
struct
bb_str
{
struct
bb_str
*
next
;
/* pointer to next string */
struct
bb_str
*
next
;
/* pointer to next string */
const
char
*
string
;
/* string */
const
char
*
string
;
/* string */
int
label_num
;
/* label number */
int
label_num
;
/* label number */
...
@@ -309,7 +310,7 @@ init_final (filename)
...
@@ -309,7 +310,7 @@ init_final (filename)
void
void
end_final
(
filename
)
end_final
(
filename
)
const
char
*
filename
;
const
char
*
filename
;
{
{
int
i
;
int
i
;
...
@@ -453,8 +454,8 @@ end_final (filename)
...
@@ -453,8 +454,8 @@ end_final (filename)
else
else
#endif
#endif
#ifdef ASM_OUTPUT_ALIGNED_DECL_LOCAL
#ifdef ASM_OUTPUT_ALIGNED_DECL_LOCAL
ASM_OUTPUT_ALIGNED_DECL_LOCAL
(
asm_out_file
,
NULL_TREE
,
name
,
size
,
ASM_OUTPUT_ALIGNED_DECL_LOCAL
(
asm_out_file
,
NULL_TREE
,
name
,
BIGGEST_ALIGNMENT
);
size
,
BIGGEST_ALIGNMENT
);
#else
#else
#ifdef ASM_OUTPUT_ALIGNED_LOCAL
#ifdef ASM_OUTPUT_ALIGNED_LOCAL
ASM_OUTPUT_ALIGNED_LOCAL
(
asm_out_file
,
name
,
size
,
ASM_OUTPUT_ALIGNED_LOCAL
(
asm_out_file
,
name
,
size
,
...
@@ -512,7 +513,7 @@ end_final (filename)
...
@@ -512,7 +513,7 @@ end_final (filename)
assemble_integer
(
const0_rtx
,
pointer_bytes
,
1
);
assemble_integer
(
const0_rtx
,
pointer_bytes
,
1
);
}
}
for
(
;
i
<
count_basic_blocks
;
i
++
)
for
(;
i
<
count_basic_blocks
;
i
++
)
assemble_integer
(
const0_rtx
,
pointer_bytes
,
1
);
assemble_integer
(
const0_rtx
,
pointer_bytes
,
1
);
}
}
...
@@ -523,7 +524,7 @@ end_final (filename)
...
@@ -523,7 +524,7 @@ end_final (filename)
for
((
ptr
=
bb_head
),
(
i
=
0
);
ptr
!=
0
;
(
ptr
=
ptr
->
next
),
i
++
)
for
((
ptr
=
bb_head
),
(
i
=
0
);
ptr
!=
0
;
(
ptr
=
ptr
->
next
),
i
++
)
assemble_integer
(
GEN_INT
(
ptr
->
line_num
),
long_bytes
,
1
);
assemble_integer
(
GEN_INT
(
ptr
->
line_num
),
long_bytes
,
1
);
for
(
;
i
<
count_basic_blocks
;
i
++
)
for
(;
i
<
count_basic_blocks
;
i
++
)
assemble_integer
(
const0_rtx
,
long_bytes
,
1
);
assemble_integer
(
const0_rtx
,
long_bytes
,
1
);
/* Output the table of file names. */
/* Output the table of file names. */
...
@@ -541,7 +542,7 @@ end_final (filename)
...
@@ -541,7 +542,7 @@ end_final (filename)
assemble_integer
(
const0_rtx
,
pointer_bytes
,
1
);
assemble_integer
(
const0_rtx
,
pointer_bytes
,
1
);
}
}
for
(
;
i
<
count_basic_blocks
;
i
++
)
for
(;
i
<
count_basic_blocks
;
i
++
)
assemble_integer
(
const0_rtx
,
pointer_bytes
,
1
);
assemble_integer
(
const0_rtx
,
pointer_bytes
,
1
);
}
}
...
@@ -582,7 +583,7 @@ app_disable ()
...
@@ -582,7 +583,7 @@ app_disable ()
}
}
}
}
/* Return the number of slots filled in the current
/* Return the number of slots filled in the current
delayed branch sequence (we don't count the insn needing the
delayed branch sequence (we don't count the insn needing the
delay slot). Zero if not in a delayed branch sequence. */
delay slot). Zero if not in a delayed branch sequence. */
...
@@ -630,7 +631,8 @@ int insn_current_align;
...
@@ -630,7 +631,8 @@ int insn_current_align;
for each insn we'll call the alignment chain of this insn in the following
for each insn we'll call the alignment chain of this insn in the following
comments. */
comments. */
struct
label_alignment
{
struct
label_alignment
{
short
alignment
;
short
alignment
;
short
max_skip
;
short
max_skip
;
};
};
...
@@ -741,34 +743,34 @@ get_attr_length (insn)
...
@@ -741,34 +743,34 @@ get_attr_length (insn)
Call a sequence of instructions beginning with alignment point X
Call a sequence of instructions beginning with alignment point X
and continuing until the next alignment point `block X'. When `X'
and continuing until the next alignment point `block X'. When `X'
is used in an expression, it means the alignment value of the
is used in an expression, it means the alignment value of the
alignment point.
alignment point.
Call the distance between the start of the first insn of block X, and
Call the distance between the start of the first insn of block X, and
the end of the last insn of block X `IX', for the `inner size of X'.
the end of the last insn of block X `IX', for the `inner size of X'.
This is clearly the sum of the instruction lengths.
This is clearly the sum of the instruction lengths.
Likewise with the next alignment-delimited block following X, which we
Likewise with the next alignment-delimited block following X, which we
shall call block Y.
shall call block Y.
Call the distance between the start of the first insn of block X, and
Call the distance between the start of the first insn of block X, and
the start of the first insn of block Y `OX', for the `outer size of X'.
the start of the first insn of block Y `OX', for the `outer size of X'.
The estimated padding is then OX - IX.
The estimated padding is then OX - IX.
OX can be safely estimated as
OX can be safely estimated as
if (X >= Y)
if (X >= Y)
OX = round_up(IX, Y)
OX = round_up(IX, Y)
else
else
OX = round_up(IX, X) + Y - X
OX = round_up(IX, X) + Y - X
Clearly est(IX) >= real(IX), because that only depends on the
Clearly est(IX) >= real(IX), because that only depends on the
instruction lengths, and those being overestimated is a given.
instruction lengths, and those being overestimated is a given.
Clearly round_up(foo, Z) >= round_up(bar, Z) if foo >= bar, so
Clearly round_up(foo, Z) >= round_up(bar, Z) if foo >= bar, so
we needn't worry about that when thinking about OX.
we needn't worry about that when thinking about OX.
When X >= Y, the alignment provided by Y adds no uncertainty factor
When X >= Y, the alignment provided by Y adds no uncertainty factor
for branch ranges starting before X, so we can just round what we have.
for branch ranges starting before X, so we can just round what we have.
But when X < Y, we don't know anything about the, so to speak,
But when X < Y, we don't know anything about the, so to speak,
...
@@ -811,6 +813,7 @@ final_addr_vec_align (addr_vec)
...
@@ -811,6 +813,7 @@ final_addr_vec_align (addr_vec)
return
align
;
return
align
;
}
}
#define ADDR_VEC_ALIGN(ADDR_VEC) final_addr_vec_align (ADDR_VEC)
#define ADDR_VEC_ALIGN(ADDR_VEC) final_addr_vec_align (ADDR_VEC)
#endif
#endif
...
@@ -829,6 +832,7 @@ static int min_labelno, max_labelno;
...
@@ -829,6 +832,7 @@ static int min_labelno, max_labelno;
(label_align[CODE_LABEL_NUMBER (LABEL) - min_labelno].max_skip)
(label_align[CODE_LABEL_NUMBER (LABEL) - min_labelno].max_skip)
/* For the benefit of port specific code do this also as a function. */
/* For the benefit of port specific code do this also as a function. */
int
int
label_to_alignment
(
label
)
label_to_alignment
(
label
)
rtx
label
;
rtx
label
;
...
@@ -857,7 +861,6 @@ label_to_alignment (label)
...
@@ -857,7 +861,6 @@ label_to_alignment (label)
For this purpose, align_fuzz with a growth argument of 0 comuptes the
For this purpose, align_fuzz with a growth argument of 0 comuptes the
appropriate adjustment. */
appropriate adjustment. */
/* Compute the maximum delta by which the difference of the addresses of
/* Compute the maximum delta by which the difference of the addresses of
START and END might grow / shrink due to a different address for start
START and END might grow / shrink due to a different address for start
which changes the size of alignment insns between START and END.
which changes the size of alignment insns between START and END.
...
@@ -865,6 +868,7 @@ label_to_alignment (label)
...
@@ -865,6 +868,7 @@ label_to_alignment (label)
GROWTH should be ~0 if the objective is to compute potential code size
GROWTH should be ~0 if the objective is to compute potential code size
increase, and 0 if the objective is to compute potential shrink.
increase, and 0 if the objective is to compute potential shrink.
The return value is undefined for any other value of GROWTH. */
The return value is undefined for any other value of GROWTH. */
static
int
static
int
align_fuzz
(
start
,
end
,
known_align_log
,
growth
)
align_fuzz
(
start
,
end
,
known_align_log
,
growth
)
rtx
start
,
end
;
rtx
start
,
end
;
...
@@ -906,6 +910,7 @@ align_fuzz (start, end, known_align_log, growth)
...
@@ -906,6 +910,7 @@ align_fuzz (start, end, known_align_log, growth)
to account for possible size increase due to alignment.
to account for possible size increase due to alignment.
NB.: Therefore, the maximum offset allowed for backward branches needs
NB.: Therefore, the maximum offset allowed for backward branches needs
to exclude the branch size. */
to exclude the branch size. */
int
int
insn_current_reference_address
(
branch
)
insn_current_reference_address
(
branch
)
rtx
branch
;
rtx
branch
;
...
@@ -930,13 +935,13 @@ insn_current_reference_address (branch)
...
@@ -930,13 +935,13 @@ insn_current_reference_address (branch)
/* BRANCH has no proper alignment chain set, so use SEQ. */
/* BRANCH has no proper alignment chain set, so use SEQ. */
if
(
INSN_SHUID
(
branch
)
<
INSN_SHUID
(
dest
))
if
(
INSN_SHUID
(
branch
)
<
INSN_SHUID
(
dest
))
{
{
/* Forward branch. */
/* Forward branch.
*/
return
(
insn_last_address
+
insn_lengths
[
seq_uid
]
return
(
insn_last_address
+
insn_lengths
[
seq_uid
]
-
align_fuzz
(
seq
,
dest
,
length_unit_log
,
~
0
));
-
align_fuzz
(
seq
,
dest
,
length_unit_log
,
~
0
));
}
}
else
else
{
{
/* Backward branch. */
/* Backward branch.
*/
return
(
insn_current_address
return
(
insn_current_address
+
align_fuzz
(
dest
,
seq
,
length_unit_log
,
~
0
));
+
align_fuzz
(
dest
,
seq
,
length_unit_log
,
~
0
));
}
}
...
@@ -992,11 +997,11 @@ shorten_branches (first)
...
@@ -992,11 +997,11 @@ shorten_branches (first)
with only the 'deleted' bit set. Transform it into a note
with only the 'deleted' bit set. Transform it into a note
to avoid confusion of subsequent processing. */
to avoid confusion of subsequent processing. */
if
(
INSN_DELETED_P
(
old
))
if
(
INSN_DELETED_P
(
old
))
{
{
PUT_CODE
(
old
,
NOTE
);
PUT_CODE
(
old
,
NOTE
);
NOTE_LINE_NUMBER
(
old
)
=
NOTE_INSN_DELETED
;
NOTE_LINE_NUMBER
(
old
)
=
NOTE_INSN_DELETED
;
NOTE_SOURCE_FILE
(
old
)
=
0
;
NOTE_SOURCE_FILE
(
old
)
=
0
;
}
}
}
}
#endif
#endif
...
@@ -1020,7 +1025,7 @@ shorten_branches (first)
...
@@ -1020,7 +1025,7 @@ shorten_branches (first)
/* We use max_log here to keep track of the maximum alignment we want to
/* We use max_log here to keep track of the maximum alignment we want to
impose on the next CODE_LABEL (or the current one if we are processing
impose on the next CODE_LABEL (or the current one if we are processing
the CODE_LABEL itself). */
the CODE_LABEL itself). */
max_log
=
0
;
max_log
=
0
;
max_skip
=
0
;
max_skip
=
0
;
...
@@ -1145,7 +1150,7 @@ shorten_branches (first)
...
@@ -1145,7 +1150,7 @@ shorten_branches (first)
alignment of n. */
alignment of n. */
uid_align
=
(
rtx
*
)
xcalloc
(
max_uid
,
sizeof
*
uid_align
);
uid_align
=
(
rtx
*
)
xcalloc
(
max_uid
,
sizeof
*
uid_align
);
for
(
i
=
MAX_CODE_ALIGN
;
--
i
>=
0
;
)
for
(
i
=
MAX_CODE_ALIGN
;
--
i
>=
0
;)
align_tab
[
i
]
=
NULL_RTX
;
align_tab
[
i
]
=
NULL_RTX
;
seq
=
get_last_insn
();
seq
=
get_last_insn
();
for
(;
seq
;
seq
=
PREV_INSN
(
seq
))
for
(;
seq
;
seq
=
PREV_INSN
(
seq
))
...
@@ -1219,7 +1224,6 @@ shorten_branches (first)
...
@@ -1219,7 +1224,6 @@ shorten_branches (first)
}
}
#endif
/* CASE_VECTOR_SHORTEN_MODE */
#endif
/* CASE_VECTOR_SHORTEN_MODE */
/* Compute initial lengths, addresses, and varying flags for each insn. */
/* Compute initial lengths, addresses, and varying flags for each insn. */
for
(
insn_current_address
=
FIRST_INSN_ADDRESS
,
insn
=
first
;
for
(
insn_current_address
=
FIRST_INSN_ADDRESS
,
insn
=
first
;
insn
!=
0
;
insn
!=
0
;
...
@@ -1242,7 +1246,7 @@ shorten_branches (first)
...
@@ -1242,7 +1246,7 @@ shorten_branches (first)
}
}
INSN_ADDRESSES
(
uid
)
=
insn_current_address
;
INSN_ADDRESSES
(
uid
)
=
insn_current_address
;
if
(
GET_CODE
(
insn
)
==
NOTE
||
GET_CODE
(
insn
)
==
BARRIER
if
(
GET_CODE
(
insn
)
==
NOTE
||
GET_CODE
(
insn
)
==
BARRIER
||
GET_CODE
(
insn
)
==
CODE_LABEL
)
||
GET_CODE
(
insn
)
==
CODE_LABEL
)
continue
;
continue
;
...
@@ -1290,7 +1294,7 @@ shorten_branches (first)
...
@@ -1290,7 +1294,7 @@ shorten_branches (first)
*
insn_default_length
(
inner_insn
));
*
insn_default_length
(
inner_insn
));
else
else
inner_length
=
insn_default_length
(
inner_insn
);
inner_length
=
insn_default_length
(
inner_insn
);
insn_lengths
[
inner_uid
]
=
inner_length
;
insn_lengths
[
inner_uid
]
=
inner_length
;
if
(
const_delay_slots
)
if
(
const_delay_slots
)
{
{
...
@@ -1481,7 +1485,7 @@ shorten_branches (first)
...
@@ -1481,7 +1485,7 @@ shorten_branches (first)
if
(
GET_CODE
(
insn
)
==
INSN
&&
GET_CODE
(
PATTERN
(
insn
))
==
SEQUENCE
)
if
(
GET_CODE
(
insn
)
==
INSN
&&
GET_CODE
(
PATTERN
(
insn
))
==
SEQUENCE
)
{
{
int
i
;
int
i
;
body
=
PATTERN
(
insn
);
body
=
PATTERN
(
insn
);
new_length
=
0
;
new_length
=
0
;
for
(
i
=
0
;
i
<
XVECLEN
(
body
,
0
);
i
++
)
for
(
i
=
0
;
i
<
XVECLEN
(
body
,
0
);
i
++
)
...
@@ -1555,8 +1559,8 @@ asm_insn_count (body)
...
@@ -1555,8 +1559,8 @@ asm_insn_count (body)
template
=
decode_asm_operands
(
body
,
NULL_PTR
,
NULL_PTR
,
template
=
decode_asm_operands
(
body
,
NULL_PTR
,
NULL_PTR
,
NULL_PTR
,
NULL_PTR
);
NULL_PTR
,
NULL_PTR
);
for
(
;
*
template
;
template
++
)
for
(;
*
template
;
template
++
)
if
(
IS_ASM_LOGICAL_LINE_SEPARATOR
(
*
template
)
||
*
template
==
'\n'
)
if
(
IS_ASM_LOGICAL_LINE_SEPARATOR
(
*
template
)
||
*
template
==
'\n'
)
count
++
;
count
++
;
return
count
;
return
count
;
...
@@ -1595,7 +1599,7 @@ final_start_function (first, file, optimize)
...
@@ -1595,7 +1599,7 @@ final_start_function (first, file, optimize)
regs_ever_live
[
i
]
=
1
;
regs_ever_live
[
i
]
=
1
;
}
}
#endif
#endif
/* Initial line number is supposed to be output
/* Initial line number is supposed to be output
before the function's prologue and label
before the function's prologue and label
so that the function's address will not appear to be
so that the function's address will not appear to be
...
@@ -1625,7 +1629,7 @@ final_start_function (first, file, optimize)
...
@@ -1625,7 +1629,7 @@ final_start_function (first, file, optimize)
if
(
write_symbols
==
XCOFF_DEBUG
)
if
(
write_symbols
==
XCOFF_DEBUG
)
xcoffout_begin_function
(
file
,
last_linenum
);
xcoffout_begin_function
(
file
,
last_linenum
);
else
else
#endif
#endif
/* But only output line number for other debug info types if -g2
/* But only output line number for other debug info types if -g2
or better. */
or better. */
if
(
NOTE_LINE_NUMBER
(
first
)
!=
NOTE_INSN_DELETED
)
if
(
NOTE_LINE_NUMBER
(
first
)
!=
NOTE_INSN_DELETED
)
...
@@ -1678,8 +1682,9 @@ final_start_function (first, file, optimize)
...
@@ -1678,8 +1682,9 @@ final_start_function (first, file, optimize)
of the function name. */
of the function name. */
if
(
profile_block_flag
)
if
(
profile_block_flag
)
{
{
bb_func_label_num
bb_func_label_num
=
=
add_bb_string
((
*
decl_printable_name
)
(
current_function_decl
,
2
),
FALSE
);
add_bb_string
((
*
decl_printable_name
)
(
current_function_decl
,
2
),
FALSE
);
}
}
}
}
...
@@ -1847,7 +1852,8 @@ static void
...
@@ -1847,7 +1852,8 @@ static void
add_bb
(
file
)
add_bb
(
file
)
FILE
*
file
;
FILE
*
file
;
{
{
struct
bb_list
*
ptr
=
(
struct
bb_list
*
)
permalloc
(
sizeof
(
struct
bb_list
));
struct
bb_list
*
ptr
=
(
struct
bb_list
*
)
permalloc
(
sizeof
(
struct
bb_list
));
/* Add basic block to linked list. */
/* Add basic block to linked list. */
ptr
->
next
=
0
;
ptr
->
next
=
0
;
...
@@ -1920,7 +1926,6 @@ add_bb_string (string, perm_p)
...
@@ -1920,7 +1926,6 @@ add_bb_string (string, perm_p)
return
ptr
->
label_num
;
return
ptr
->
label_num
;
}
}
/* Output assembler code for some insns: all or part of a function.
/* Output assembler code for some insns: all or part of a function.
For description of args, see `final_start_function', above.
For description of args, see `final_start_function', above.
...
@@ -1988,9 +1993,9 @@ final (first, file, optimize, prescan)
...
@@ -1988,9 +1993,9 @@ final (first, file, optimize, prescan)
for
(
insn
=
first
;
insn
;
insn
=
NEXT_INSN
(
insn
))
for
(
insn
=
first
;
insn
;
insn
=
NEXT_INSN
(
insn
))
{
{
if
(
INSN_UID
(
insn
)
>
max_uid
)
/* find largest UID */
if
(
INSN_UID
(
insn
)
>
max_uid
)
/* find largest UID */
max_uid
=
INSN_UID
(
insn
);
max_uid
=
INSN_UID
(
insn
);
if
(
GET_CODE
(
insn
)
==
NOTE
&&
NOTE_LINE_NUMBER
(
insn
)
>
0
)
if
(
GET_CODE
(
insn
)
==
NOTE
&&
NOTE_LINE_NUMBER
(
insn
)
>
0
)
line_note_exists
[
NOTE_LINE_NUMBER
(
insn
)]
=
1
;
line_note_exists
[
NOTE_LINE_NUMBER
(
insn
)]
=
1
;
#ifdef HAVE_cc0
#ifdef HAVE_cc0
/* If CC tracking across branches is enabled, record the insn which
/* If CC tracking across branches is enabled, record the insn which
jumps to each branch only reached from one place. */
jumps to each branch only reached from one place. */
...
@@ -2005,8 +2010,8 @@ final (first, file, optimize, prescan)
...
@@ -2005,8 +2010,8 @@ final (first, file, optimize, prescan)
#endif
#endif
}
}
/* Initialize insn_eh_region table if eh is being used. */
/* Initialize insn_eh_region table if eh is being used.
*/
init_insn_eh_region
(
first
,
max_uid
);
init_insn_eh_region
(
first
,
max_uid
);
init_recog
();
init_recog
();
...
@@ -2058,16 +2063,17 @@ get_insn_template (code, insn)
...
@@ -2058,16 +2063,17 @@ get_insn_template (code, insn)
case
INSN_OUTPUT_FORMAT_SINGLE
:
case
INSN_OUTPUT_FORMAT_SINGLE
:
return
(
const
char
*
)
output
;
return
(
const
char
*
)
output
;
case
INSN_OUTPUT_FORMAT_MULTI
:
case
INSN_OUTPUT_FORMAT_MULTI
:
return
((
const
char
*
const
*
)
output
)[
which_alternative
];
return
((
const
char
*
const
*
)
output
)[
which_alternative
];
case
INSN_OUTPUT_FORMAT_FUNCTION
:
case
INSN_OUTPUT_FORMAT_FUNCTION
:
if
(
insn
==
NULL
)
if
(
insn
==
NULL
)
abort
();
abort
();
return
(
*
(
insn_output_fn
)
output
)
(
recog_data
.
operand
,
insn
);
return
(
*
(
insn_output_fn
)
output
)
(
recog_data
.
operand
,
insn
);
default
:
default
:
abort
();
abort
();
}
}
}
}
/* The final scan for one insn, INSN.
/* The final scan for one insn, INSN.
Args are same as in `final', except that INSN
Args are same as in `final', except that INSN
is the insn being scanned.
is the insn being scanned.
...
@@ -2270,11 +2276,11 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes)
...
@@ -2270,11 +2276,11 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes)
||
debug_info_level
==
DINFO_LEVEL_VERBOSE
)
||
debug_info_level
==
DINFO_LEVEL_VERBOSE
)
{
{
#ifdef DWARF_DEBUGGING_INFO
#ifdef DWARF_DEBUGGING_INFO
if
(
write_symbols
==
DWARF_DEBUG
)
if
(
write_symbols
==
DWARF_DEBUG
)
dwarfout_label
(
insn
);
dwarfout_label
(
insn
);
#endif
#endif
#ifdef DWARF2_DEBUGGING_INFO
#ifdef DWARF2_DEBUGGING_INFO
if
(
write_symbols
==
DWARF2_DEBUG
)
if
(
write_symbols
==
DWARF2_DEBUG
)
dwarf2out_label
(
insn
);
dwarf2out_label
(
insn
);
#endif
#endif
}
}
...
@@ -2292,7 +2298,7 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes)
...
@@ -2292,7 +2298,7 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes)
register
rtx
note
;
register
rtx
note
;
int
note_after
=
0
;
int
note_after
=
0
;
/* If there is anything real after this note, output it.
/* If there is anything real after this note, output it.
If another line note follows, omit this one. */
If another line note follows, omit this one. */
for
(
note
=
NEXT_INSN
(
insn
);
note
;
note
=
NEXT_INSN
(
note
))
for
(
note
=
NEXT_INSN
(
insn
);
note
;
note
=
NEXT_INSN
(
note
))
{
{
...
@@ -2328,7 +2334,7 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes)
...
@@ -2328,7 +2334,7 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes)
if
(
!
note_after
)
if
(
!
note_after
)
output_source_line
(
file
,
insn
);
output_source_line
(
file
,
insn
);
}
}
break
;
break
;
}
}
break
;
break
;
...
@@ -2443,19 +2449,19 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes)
...
@@ -2443,19 +2449,19 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes)
ASM_OUTPUT_CASE_LABEL
(
file
,
"L"
,
CODE_LABEL_NUMBER
(
insn
),
ASM_OUTPUT_CASE_LABEL
(
file
,
"L"
,
CODE_LABEL_NUMBER
(
insn
),
NEXT_INSN
(
insn
));
NEXT_INSN
(
insn
));
#else
#else
if
(
LABEL_ALTERNATE_NAME
(
insn
))
if
(
LABEL_ALTERNATE_NAME
(
insn
))
ASM_OUTPUT_ALTERNATE_LABEL_NAME
(
file
,
insn
);
ASM_OUTPUT_ALTERNATE_LABEL_NAME
(
file
,
insn
);
else
else
ASM_OUTPUT_INTERNAL_LABEL
(
file
,
"L"
,
CODE_LABEL_NUMBER
(
insn
));
ASM_OUTPUT_INTERNAL_LABEL
(
file
,
"L"
,
CODE_LABEL_NUMBER
(
insn
));
#endif
#endif
#endif
#endif
break
;
break
;
}
}
}
}
if
(
LABEL_ALTERNATE_NAME
(
insn
))
if
(
LABEL_ALTERNATE_NAME
(
insn
))
ASM_OUTPUT_ALTERNATE_LABEL_NAME
(
file
,
insn
);
ASM_OUTPUT_ALTERNATE_LABEL_NAME
(
file
,
insn
);
else
else
ASM_OUTPUT_INTERNAL_LABEL
(
file
,
"L"
,
CODE_LABEL_NUMBER
(
insn
));
ASM_OUTPUT_INTERNAL_LABEL
(
file
,
"L"
,
CODE_LABEL_NUMBER
(
insn
));
break
;
break
;
default
:
default
:
...
@@ -2512,7 +2518,7 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes)
...
@@ -2512,7 +2518,7 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes)
#ifdef ASM_OUTPUT_ADDR_VEC
#ifdef ASM_OUTPUT_ADDR_VEC
ASM_OUTPUT_ADDR_VEC
(
PREV_INSN
(
insn
),
body
);
ASM_OUTPUT_ADDR_VEC
(
PREV_INSN
(
insn
),
body
);
#else
#else
abort
();
abort
();
#endif
#endif
}
}
else
else
...
@@ -2520,7 +2526,7 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes)
...
@@ -2520,7 +2526,7 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes)
#ifdef ASM_OUTPUT_ADDR_DIFF_VEC
#ifdef ASM_OUTPUT_ADDR_DIFF_VEC
ASM_OUTPUT_ADDR_DIFF_VEC
(
PREV_INSN
(
insn
),
body
);
ASM_OUTPUT_ADDR_DIFF_VEC
(
PREV_INSN
(
insn
),
body
);
#else
#else
abort
();
abort
();
#endif
#endif
}
}
#else
#else
...
@@ -2688,7 +2694,7 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes)
...
@@ -2688,7 +2694,7 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes)
body
=
PATTERN
(
insn
);
body
=
PATTERN
(
insn
);
#ifdef HAVE_cc0
#ifdef HAVE_cc0
set
=
single_set
(
insn
);
set
=
single_set
(
insn
);
/* Check for redundant test and compare instructions
/* Check for redundant test and compare instructions
(when the condition codes are already set up as desired).
(when the condition codes are already set up as desired).
...
@@ -2701,7 +2707,7 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes)
...
@@ -2701,7 +2707,7 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes)
if
(
optimize
)
if
(
optimize
)
{
{
#if 0
#if 0
rtx set = single_set(insn);
rtx set = single_set
(insn);
#endif
#endif
if
(
set
if
(
set
...
@@ -2820,7 +2826,7 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes)
...
@@ -2820,7 +2826,7 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes)
&&
set
!=
0
)
&&
set
!=
0
)
{
{
rtx
cond_rtx
,
then_rtx
,
else_rtx
;
rtx
cond_rtx
,
then_rtx
,
else_rtx
;
if
(
GET_CODE
(
insn
)
!=
JUMP_INSN
if
(
GET_CODE
(
insn
)
!=
JUMP_INSN
&&
GET_CODE
(
SET_SRC
(
set
))
==
IF_THEN_ELSE
)
&&
GET_CODE
(
SET_SRC
(
set
))
==
IF_THEN_ELSE
)
{
{
...
@@ -2834,7 +2840,7 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes)
...
@@ -2834,7 +2840,7 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes)
then_rtx
=
const_true_rtx
;
then_rtx
=
const_true_rtx
;
else_rtx
=
const0_rtx
;
else_rtx
=
const0_rtx
;
}
}
switch
(
GET_CODE
(
cond_rtx
))
switch
(
GET_CODE
(
cond_rtx
))
{
{
case
GTU
:
case
GTU
:
...
@@ -2994,7 +3000,7 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes)
...
@@ -2994,7 +3000,7 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes)
/* If we didn't split the insn, go away. */
/* If we didn't split the insn, go away. */
if
(
new
==
insn
&&
PATTERN
(
new
)
==
body
)
if
(
new
==
insn
&&
PATTERN
(
new
)
==
body
)
fatal_insn
(
"Could not split insn"
,
insn
);
fatal_insn
(
"Could not split insn"
,
insn
);
#ifdef HAVE_ATTR_length
#ifdef HAVE_ATTR_length
/* This instruction should have been split in shorten_branches,
/* This instruction should have been split in shorten_branches,
to ensure that we would have valid length info for the
to ensure that we would have valid length info for the
...
@@ -3005,7 +3011,7 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes)
...
@@ -3005,7 +3011,7 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes)
new_block
=
0
;
new_block
=
0
;
return
new
;
return
new
;
}
}
if
(
prescan
>
0
)
if
(
prescan
>
0
)
break
;
break
;
...
@@ -3116,9 +3122,9 @@ output_source_line (file, insn)
...
@@ -3116,9 +3122,9 @@ output_source_line (file, insn)
}
}
}
}
/* For each operand in INSN, simplify (subreg (reg)) so that it refers
/* For each operand in INSN, simplify (subreg (reg)) so that it refers
directly to the desired hard register. */
directly to the desired hard register. */
void
void
cleanup_subreg_operands
(
insn
)
cleanup_subreg_operands
(
insn
)
rtx
insn
;
rtx
insn
;
...
@@ -3129,19 +3135,19 @@ cleanup_subreg_operands (insn)
...
@@ -3129,19 +3135,19 @@ cleanup_subreg_operands (insn)
for
(
i
=
0
;
i
<
recog_data
.
n_operands
;
i
++
)
for
(
i
=
0
;
i
<
recog_data
.
n_operands
;
i
++
)
{
{
if
(
GET_CODE
(
recog_data
.
operand
[
i
])
==
SUBREG
)
if
(
GET_CODE
(
recog_data
.
operand
[
i
])
==
SUBREG
)
recog_data
.
operand
[
i
]
=
alter_subreg
(
recog_data
.
operand
[
i
]);
recog_data
.
operand
[
i
]
=
alter_subreg
(
recog_data
.
operand
[
i
]);
else
if
(
GET_CODE
(
recog_data
.
operand
[
i
])
==
PLUS
else
if
(
GET_CODE
(
recog_data
.
operand
[
i
])
==
PLUS
||
GET_CODE
(
recog_data
.
operand
[
i
])
==
MULT
)
||
GET_CODE
(
recog_data
.
operand
[
i
])
==
MULT
)
recog_data
.
operand
[
i
]
=
walk_alter_subreg
(
recog_data
.
operand
[
i
]);
recog_data
.
operand
[
i
]
=
walk_alter_subreg
(
recog_data
.
operand
[
i
]);
}
}
for
(
i
=
0
;
i
<
recog_data
.
n_dups
;
i
++
)
for
(
i
=
0
;
i
<
recog_data
.
n_dups
;
i
++
)
{
{
if
(
GET_CODE
(
*
recog_data
.
dup_loc
[
i
])
==
SUBREG
)
if
(
GET_CODE
(
*
recog_data
.
dup_loc
[
i
])
==
SUBREG
)
*
recog_data
.
dup_loc
[
i
]
=
alter_subreg
(
*
recog_data
.
dup_loc
[
i
]);
*
recog_data
.
dup_loc
[
i
]
=
alter_subreg
(
*
recog_data
.
dup_loc
[
i
]);
else
if
(
GET_CODE
(
*
recog_data
.
dup_loc
[
i
])
==
PLUS
else
if
(
GET_CODE
(
*
recog_data
.
dup_loc
[
i
])
==
PLUS
||
GET_CODE
(
*
recog_data
.
dup_loc
[
i
])
==
MULT
)
||
GET_CODE
(
*
recog_data
.
dup_loc
[
i
])
==
MULT
)
*
recog_data
.
dup_loc
[
i
]
=
walk_alter_subreg
(
*
recog_data
.
dup_loc
[
i
]);
*
recog_data
.
dup_loc
[
i
]
=
walk_alter_subreg
(
*
recog_data
.
dup_loc
[
i
]);
}
}
}
}
...
@@ -3173,8 +3179,8 @@ alter_subreg (x)
...
@@ -3173,8 +3179,8 @@ alter_subreg (x)
gen_lowpart and friends. */
gen_lowpart and friends. */
#ifdef ALTER_HARD_SUBREG
#ifdef ALTER_HARD_SUBREG
regno
=
ALTER_HARD_SUBREG
(
GET_MODE
(
x
),
SUBREG_WORD
(
x
),
regno
=
ALTER_HARD_SUBREG
(
GET_MODE
(
x
),
SUBREG_WORD
(
x
),
GET_MODE
(
y
),
REGNO
(
y
));
GET_MODE
(
y
),
REGNO
(
y
));
#else
#else
regno
=
REGNO
(
y
)
+
SUBREG_WORD
(
x
);
regno
=
REGNO
(
y
)
+
SUBREG_WORD
(
x
);
#endif
#endif
...
@@ -3219,7 +3225,7 @@ walk_alter_subreg (x)
...
@@ -3219,7 +3225,7 @@ walk_alter_subreg (x)
case
SUBREG
:
case
SUBREG
:
return
alter_subreg
(
x
);
return
alter_subreg
(
x
);
default
:
default
:
break
;
break
;
}
}
...
@@ -3280,7 +3286,7 @@ alter_cond (cond)
...
@@ -3280,7 +3286,7 @@ alter_cond (cond)
PUT_CODE
(
cond
,
NE
);
PUT_CODE
(
cond
,
NE
);
value
=
2
;
value
=
2
;
break
;
break
;
default
:
default
:
break
;
break
;
}
}
...
@@ -3309,7 +3315,7 @@ alter_cond (cond)
...
@@ -3309,7 +3315,7 @@ alter_cond (cond)
PUT_CODE
(
cond
,
NE
);
PUT_CODE
(
cond
,
NE
);
value
=
2
;
value
=
2
;
break
;
break
;
default
:
default
:
break
;
break
;
}
}
...
@@ -3334,7 +3340,7 @@ alter_cond (cond)
...
@@ -3334,7 +3340,7 @@ alter_cond (cond)
case
LTU
:
case
LTU
:
/* Jump becomes no-op. */
/* Jump becomes no-op. */
return
-
1
;
return
-
1
;
default
:
default
:
break
;
break
;
}
}
...
@@ -3433,7 +3439,7 @@ output_asm_name ()
...
@@ -3433,7 +3439,7 @@ output_asm_name ()
if
(
debug_insn
)
if
(
debug_insn
)
{
{
register
int
num
=
INSN_CODE
(
debug_insn
);
register
int
num
=
INSN_CODE
(
debug_insn
);
fprintf
(
asm_out_file
,
"
\t
%s %d
\t
%s"
,
fprintf
(
asm_out_file
,
"
\t
%s %d
\t
%s"
,
ASM_COMMENT_START
,
INSN_UID
(
debug_insn
),
ASM_COMMENT_START
,
INSN_UID
(
debug_insn
),
insn_data
[
num
].
name
);
insn_data
[
num
].
name
);
if
(
insn_data
[
num
].
n_alternatives
>
1
)
if
(
insn_data
[
num
].
n_alternatives
>
1
)
...
@@ -3489,7 +3495,7 @@ output_asm_insn (template, operands)
...
@@ -3489,7 +3495,7 @@ output_asm_insn (template, operands)
case
'{'
:
case
'{'
:
{
{
register
int
i
;
register
int
i
;
/* If we want the first dialect, do nothing. Otherwise, skip
/* If we want the first dialect, do nothing. Otherwise, skip
DIALECT_NUMBER of strings ending with '|'. */
DIALECT_NUMBER of strings ending with '|'. */
for
(
i
=
0
;
i
<
dialect_number
;
i
++
)
for
(
i
=
0
;
i
<
dialect_number
;
i
++
)
...
@@ -3534,7 +3540,7 @@ output_asm_insn (template, operands)
...
@@ -3534,7 +3540,7 @@ output_asm_insn (template, operands)
Letters `acln' are implemented directly.
Letters `acln' are implemented directly.
Other letters are passed to `output_operand' so that
Other letters are passed to `output_operand' so that
the PRINT_OPERAND macro can define them. */
the PRINT_OPERAND macro can define them. */
else
if
(
ISLOWER
(
*
p
)
||
ISUPPER
(
*
p
))
else
if
(
ISLOWER
(
*
p
)
||
ISUPPER
(
*
p
))
{
{
int
letter
=
*
p
++
;
int
letter
=
*
p
++
;
c
=
atoi
(
p
);
c
=
atoi
(
p
);
...
@@ -3567,24 +3573,27 @@ output_asm_insn (template, operands)
...
@@ -3567,24 +3573,27 @@ output_asm_insn (template, operands)
}
}
else
else
output_operand
(
operands
[
c
],
letter
);
output_operand
(
operands
[
c
],
letter
);
while
((
c
=
*
p
)
>=
'0'
&&
c
<=
'9'
)
p
++
;
while
((
c
=
*
p
)
>=
'0'
&&
c
<=
'9'
)
p
++
;
}
}
/* % followed by a digit outputs an operand the default way. */
/* % followed by a digit outputs an operand the default way. */
else
if
(
*
p
>=
'0'
&&
*
p
<=
'9'
)
else
if
(
*
p
>=
'0'
&&
*
p
<=
'9'
)
{
{
c
=
atoi
(
p
);
c
=
atoi
(
p
);
if
(
this_is_asm_operands
&&
(
c
<
0
||
(
unsigned
int
)
c
>=
insn_noperands
))
if
(
this_is_asm_operands
&&
(
c
<
0
||
(
unsigned
int
)
c
>=
insn_noperands
))
output_operand_lossage
(
"operand number out of range"
);
output_operand_lossage
(
"operand number out of range"
);
else
else
output_operand
(
operands
[
c
],
0
);
output_operand
(
operands
[
c
],
0
);
while
((
c
=
*
p
)
>=
'0'
&&
c
<=
'9'
)
p
++
;
while
((
c
=
*
p
)
>=
'0'
&&
c
<=
'9'
)
p
++
;
}
}
/* % followed by punctuation: output something for that
/* % followed by punctuation: output something for that
punctuation character alone, with no operand.
punctuation character alone, with no operand.
The PRINT_OPERAND macro decides what is actually done. */
The PRINT_OPERAND macro decides what is actually done. */
#ifdef PRINT_OPERAND_PUNCT_VALID_P
#ifdef PRINT_OPERAND_PUNCT_VALID_P
else
if
(
PRINT_OPERAND_PUNCT_VALID_P
((
unsigned
char
)
*
p
))
else
if
(
PRINT_OPERAND_PUNCT_VALID_P
((
unsigned
char
)
*
p
))
output_operand
(
NULL_RTX
,
*
p
++
);
output_operand
(
NULL_RTX
,
*
p
++
);
#endif
#endif
else
else
...
@@ -3711,7 +3720,7 @@ output_addr_const (file, x)
...
@@ -3711,7 +3720,7 @@ output_addr_const (file, x)
if
(
CONST_DOUBLE_HIGH
(
x
))
if
(
CONST_DOUBLE_HIGH
(
x
))
fprintf
(
file
,
HOST_WIDE_INT_PRINT_DOUBLE_HEX
,
fprintf
(
file
,
HOST_WIDE_INT_PRINT_DOUBLE_HEX
,
CONST_DOUBLE_HIGH
(
x
),
CONST_DOUBLE_LOW
(
x
));
CONST_DOUBLE_HIGH
(
x
),
CONST_DOUBLE_LOW
(
x
));
else
if
(
CONST_DOUBLE_LOW
(
x
)
<
0
)
else
if
(
CONST_DOUBLE_LOW
(
x
)
<
0
)
fprintf
(
file
,
HOST_WIDE_INT_PRINT_HEX
,
CONST_DOUBLE_LOW
(
x
));
fprintf
(
file
,
HOST_WIDE_INT_PRINT_HEX
,
CONST_DOUBLE_LOW
(
x
));
else
else
fprintf
(
file
,
HOST_WIDE_INT_PRINT_DEC
,
CONST_DOUBLE_LOW
(
x
));
fprintf
(
file
,
HOST_WIDE_INT_PRINT_DEC
,
CONST_DOUBLE_LOW
(
x
));
...
@@ -3817,7 +3826,7 @@ asm_fprintf VPARAMS ((FILE *file, const char *p, ...))
...
@@ -3817,7 +3826,7 @@ asm_fprintf VPARAMS ((FILE *file, const char *p, ...))
if
(
*
p
==
'|'
)
if
(
*
p
==
'|'
)
p
++
;
p
++
;
}
}
}
}
break
;
break
;
...
@@ -3933,7 +3942,7 @@ asm_fprintf VPARAMS ((FILE *file, const char *p, ...))
...
@@ -3933,7 +3942,7 @@ asm_fprintf VPARAMS ((FILE *file, const char *p, ...))
case
'M'
:
case
'N'
:
case
'P'
:
case
'Q'
:
case
'S'
:
case
'M'
:
case
'N'
:
case
'P'
:
case
'Q'
:
case
'S'
:
case
'T'
:
case
'V'
:
case
'W'
:
case
'Y'
:
case
'Z'
:
case
'T'
:
case
'V'
:
case
'W'
:
case
'Y'
:
case
'Z'
:
break
;
break
;
ASM_FPRINTF_EXTENSIONS
(
file
,
argptr
,
p
)
ASM_FPRINTF_EXTENSIONS
(
file
,
argptr
,
p
)
#endif
#endif
default
:
default
:
...
@@ -3982,7 +3991,7 @@ split_double (value, first, second)
...
@@ -3982,7 +3991,7 @@ split_double (value, first, second)
/* Set sign_extend as any remaining bits. */
/* Set sign_extend as any remaining bits. */
sign_extend
=
~
mask
;
sign_extend
=
~
mask
;
/* Pick the lower word and sign-extend it. */
/* Pick the lower word and sign-extend it. */
low
=
INTVAL
(
value
);
low
=
INTVAL
(
value
);
low
&=
mask
;
low
&=
mask
;
...
@@ -4061,7 +4070,8 @@ split_double (value, first, second)
...
@@ -4061,7 +4070,8 @@ split_double (value, first, second)
else
else
{
{
#ifdef REAL_ARITHMETIC
#ifdef REAL_ARITHMETIC
REAL_VALUE_TYPE
r
;
long
l
[
2
];
REAL_VALUE_TYPE
r
;
long
l
[
2
];
REAL_VALUE_FROM_CONST_DOUBLE
(
r
,
value
);
REAL_VALUE_FROM_CONST_DOUBLE
(
r
,
value
);
/* Note, this converts the REAL_VALUE_TYPE to the target's
/* Note, this converts the REAL_VALUE_TYPE to the target's
...
@@ -4136,7 +4146,9 @@ leaf_function_p ()
...
@@ -4136,7 +4146,9 @@ leaf_function_p ()
&&
!
SIBLING_CALL_P
(
XVECEXP
(
PATTERN
(
insn
),
0
,
0
)))
&&
!
SIBLING_CALL_P
(
XVECEXP
(
PATTERN
(
insn
),
0
,
0
)))
return
0
;
return
0
;
}
}
for
(
insn
=
current_function_epilogue_delay_list
;
insn
;
insn
=
XEXP
(
insn
,
1
))
for
(
insn
=
current_function_epilogue_delay_list
;
insn
;
insn
=
XEXP
(
insn
,
1
))
{
{
if
(
GET_CODE
(
XEXP
(
insn
,
0
))
==
CALL_INSN
if
(
GET_CODE
(
XEXP
(
insn
,
0
))
==
CALL_INSN
&&
!
SIBLING_CALL_P
(
insn
))
&&
!
SIBLING_CALL_P
(
insn
))
...
@@ -4200,7 +4212,9 @@ leaf_renumber_regs (first)
...
@@ -4200,7 +4212,9 @@ leaf_renumber_regs (first)
for
(
insn
=
first
;
insn
;
insn
=
NEXT_INSN
(
insn
))
for
(
insn
=
first
;
insn
;
insn
=
NEXT_INSN
(
insn
))
if
(
INSN_P
(
insn
))
if
(
INSN_P
(
insn
))
leaf_renumber_regs_insn
(
PATTERN
(
insn
));
leaf_renumber_regs_insn
(
PATTERN
(
insn
));
for
(
insn
=
current_function_epilogue_delay_list
;
insn
;
insn
=
XEXP
(
insn
,
1
))
for
(
insn
=
current_function_epilogue_delay_list
;
insn
;
insn
=
XEXP
(
insn
,
1
))
if
(
INSN_P
(
XEXP
(
insn
,
0
)))
if
(
INSN_P
(
XEXP
(
insn
,
0
)))
leaf_renumber_regs_insn
(
PATTERN
(
XEXP
(
insn
,
0
)));
leaf_renumber_regs_insn
(
PATTERN
(
XEXP
(
insn
,
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