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
8819eb78
Commit
8819eb78
authored
Oct 05, 2007
by
Anatoly Sokolov
Committed by
Anatoly Sokolov
Oct 05, 2007
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
* config/avr/avr.c (expand_epilogue): Don't set RTX_FRAME_RELATED_P.
From-SVN: r129023
parent
815cd406
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
28 additions
and
44 deletions
+28
-44
gcc/ChangeLog
+4
-0
gcc/config/avr/avr.c
+24
-44
No files found.
gcc/ChangeLog
View file @
8819eb78
2007
-
10
-
04
Anatoly
Sokolov
<
aesok
@
post
.
ru
>
*
config
/
avr
/
avr
.
c
(
expand_epilogue
):
Don
't set RTX_FRAME_RELATED_P.
2007-10-04 Richard Guenther <rguenther@suse.de>
PR middle-end/33641
gcc/config/avr/avr.c
View file @
8819eb78
...
...
@@ -787,13 +787,11 @@ expand_epilogue (void)
int
live_seq
;
int
minimize
;
HOST_WIDE_INT
size
=
get_frame_size
();
rtx
insn
;
/* epilogue: naked */
if
(
cfun
->
machine
->
is_naked
)
{
insn
=
emit_jump_insn
(
gen_return
());
RTX_FRAME_RELATED_P
(
insn
)
=
1
;
emit_jump_insn
(
gen_return
());
return
;
}
...
...
@@ -806,29 +804,23 @@ expand_epilogue (void)
{
/* Return value from main() is already in the correct registers
(r25:r24) as the exit() argument. */
insn
=
emit_jump_insn
(
gen_return
());
RTX_FRAME_RELATED_P
(
insn
)
=
1
;
emit_jump_insn
(
gen_return
());
}
else
if
(
minimize
&&
(
frame_pointer_needed
||
live_seq
>
4
))
{
if
(
frame_pointer_needed
)
{
/* Get rid of frame. */
insn
=
emit_move_insn
(
frame_pointer_rtx
,
gen_rtx_PLUS
(
HImode
,
frame_pointer_rtx
,
gen_int_mode
(
size
,
HImode
)));
RTX_FRAME_RELATED_P
(
insn
)
=
1
;
emit_move_insn
(
frame_pointer_rtx
,
gen_rtx_PLUS
(
HImode
,
frame_pointer_rtx
,
gen_int_mode
(
size
,
HImode
)));
}
else
{
insn
=
emit_move_insn
(
frame_pointer_rtx
,
stack_pointer_rtx
);
RTX_FRAME_RELATED_P
(
insn
)
=
1
;
emit_move_insn
(
frame_pointer_rtx
,
stack_pointer_rtx
);
}
insn
=
emit_insn
(
gen_epilogue_restores
(
gen_int_mode
(
live_seq
,
HImode
)));
RTX_FRAME_RELATED_P
(
insn
)
=
1
;
emit_insn
(
gen_epilogue_restores
(
gen_int_mode
(
live_seq
,
HImode
)));
}
else
{
...
...
@@ -842,7 +834,7 @@ expand_epilogue (void)
fp_plus_length
=
get_attr_length
(
gen_move_insn
(
frame_pointer_rtx
,
gen_rtx_PLUS
(
HImode
,
frame_pointer_rtx
,
gen_int_mode
(
size
,
gen_int_mode
(
size
,
HImode
))));
/* Copy to stack pointer. */
fp_plus_length
+=
...
...
@@ -855,32 +847,28 @@ expand_epilogue (void)
sp_plus_length
=
get_attr_length
(
gen_move_insn
(
stack_pointer_rtx
,
gen_rtx_PLUS
(
HImode
,
stack_pointer_rtx
,
gen_int_mode
(
size
,
gen_int_mode
(
size
,
HImode
))));
}
/* Use shortest method. */
if
(
size
<=
5
&&
(
sp_plus_length
<
fp_plus_length
))
{
insn
=
emit_move_insn
(
stack_pointer_rtx
,
gen_rtx_PLUS
(
HImode
,
stack_pointer_rtx
,
gen_int_mode
(
size
,
HImode
)));
RTX_FRAME_RELATED_P
(
insn
)
=
1
;
emit_move_insn
(
stack_pointer_rtx
,
gen_rtx_PLUS
(
HImode
,
stack_pointer_rtx
,
gen_int_mode
(
size
,
HImode
)));
}
else
{
insn
=
emit_move_insn
(
frame_pointer_rtx
,
gen_rtx_PLUS
(
HImode
,
frame_pointer_rtx
,
gen_int_mode
(
size
,
HImode
)));
RTX_FRAME_RELATED_P
(
insn
)
=
1
;
emit_move_insn
(
frame_pointer_rtx
,
gen_rtx_PLUS
(
HImode
,
frame_pointer_rtx
,
gen_int_mode
(
size
,
HImode
)));
/* Copy to stack pointer. */
insn
=
emit_move_insn
(
stack_pointer_rtx
,
frame_pointer_rtx
);
RTX_FRAME_RELATED_P
(
insn
)
=
1
;
emit_move_insn
(
stack_pointer_rtx
,
frame_pointer_rtx
);
}
}
/* Restore previous frame_pointer. */
insn
=
emit_insn
(
gen_pophi
(
frame_pointer_rtx
));
RTX_FRAME_RELATED_P
(
insn
)
=
1
;
emit_insn
(
gen_pophi
(
frame_pointer_rtx
));
}
/* Restore used registers. */
HARD_REG_SET
set
;
...
...
@@ -888,33 +876,25 @@ expand_epilogue (void)
for
(
reg
=
31
;
reg
>=
0
;
--
reg
)
{
if
(
TEST_HARD_REG_BIT
(
set
,
reg
))
{
insn
=
emit_insn
(
gen_popqi
(
gen_rtx_REG
(
QImode
,
reg
)));
RTX_FRAME_RELATED_P
(
insn
)
=
1
;
}
emit_insn
(
gen_popqi
(
gen_rtx_REG
(
QImode
,
reg
)));
}
if
(
cfun
->
machine
->
is_interrupt
||
cfun
->
machine
->
is_signal
)
{
/* Restore SREG using tmp reg as scratch. */
insn
=
emit_insn
(
gen_popqi
(
tmp_reg_rtx
));
RTX_FRAME_RELATED_P
(
insn
)
=
1
;
emit_insn
(
gen_popqi
(
tmp_reg_rtx
));
insn
=
emit_move_insn
(
gen_rtx_MEM
(
QImode
,
GEN_INT
(
SREG_ADDR
)),
tmp_reg_rtx
);
RTX_FRAME_RELATED_P
(
insn
)
=
1
;
emit_move_insn
(
gen_rtx_MEM
(
QImode
,
GEN_INT
(
SREG_ADDR
)),
tmp_reg_rtx
);
/* Restore tmp REG. */
insn
=
emit_insn
(
gen_popqi
(
tmp_reg_rtx
));
RTX_FRAME_RELATED_P
(
insn
)
=
1
;
emit_insn
(
gen_popqi
(
tmp_reg_rtx
));
/* Restore zero REG. */
insn
=
emit_insn
(
gen_popqi
(
zero_reg_rtx
));
RTX_FRAME_RELATED_P
(
insn
)
=
1
;
emit_insn
(
gen_popqi
(
zero_reg_rtx
));
}
insn
=
emit_jump_insn
(
gen_return
());
RTX_FRAME_RELATED_P
(
insn
)
=
1
;
emit_jump_insn
(
gen_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