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
5985c7a6
Commit
5985c7a6
authored
Nov 14, 2003
by
Fariborz Jahanian
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix bug saving vararg registers on stack in -mpowerpc64 mode.
Approved by: David Edelsohn. From-SVN: r73616
parent
e6d98cb0
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
34 additions
and
2 deletions
+34
-2
gcc/config/rs6000/rs6000.c
+34
-2
No files found.
gcc/config/rs6000/rs6000.c
View file @
5985c7a6
...
...
@@ -395,6 +395,7 @@ static rtx rs6000_spe_function_arg (CUMULATIVE_ARGS *,
enum
machine_mode
,
tree
);
static
rtx
rs6000_mixed_function_arg
(
CUMULATIVE_ARGS
*
,
enum
machine_mode
,
tree
,
int
);
static
void
rs6000_move_block_from_reg
(
int
regno
,
rtx
x
,
int
nregs
);
static
void
setup_incoming_varargs
(
CUMULATIVE_ARGS
*
,
enum
machine_mode
,
tree
,
int
*
,
int
);
...
...
@@ -4374,6 +4375,37 @@ function_arg_pass_by_reference (CUMULATIVE_ARGS *cum ATTRIBUTE_UNUSED,
}
return
type
&&
int_size_in_bytes
(
type
)
<
0
;
}
static
void
rs6000_move_block_from_reg
(
int
regno
,
rtx
x
,
int
nregs
)
{
int
i
;
enum
machine_mode
reg_mode
=
TARGET_32BIT
?
SImode
:
DImode
;
if
(
nregs
==
0
)
return
;
for
(
i
=
0
;
i
<
nregs
;
i
++
)
{
rtx
tem
=
adjust_address_nv
(
x
,
reg_mode
,
i
*
GET_MODE_SIZE
(
reg_mode
));
if
(
reload_completed
)
{
if
(
!
strict_memory_address_p
(
reg_mode
,
XEXP
(
tem
,
0
)))
tem
=
NULL_RTX
;
else
tem
=
simplify_gen_subreg
(
reg_mode
,
x
,
BLKmode
,
i
*
GET_MODE_SIZE
(
reg_mode
));
}
else
tem
=
replace_equiv_address
(
tem
,
XEXP
(
tem
,
0
));
if
(
tem
==
NULL_RTX
)
abort
();
emit_move_insn
(
tem
,
gen_rtx_REG
(
reg_mode
,
regno
+
i
));
}
}
/* Perform any needed actions needed for a function that is receiving a
variable number of arguments.
...
...
@@ -4431,8 +4463,8 @@ setup_incoming_varargs (CUMULATIVE_ARGS *cum, enum machine_mode mode,
set_mem_alias_set
(
mem
,
set
);
set_mem_align
(
mem
,
BITS_PER_WORD
);
move_block_from_reg
(
GP_ARG_MIN_REG
+
first_reg_offset
,
mem
,
GP_ARG_NUM_REG
-
first_reg_offset
);
rs6000_move_block_from_reg
(
GP_ARG_MIN_REG
+
first_reg_offset
,
mem
,
GP_ARG_NUM_REG
-
first_reg_offset
);
}
/* Save FP registers if needed. */
...
...
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