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
bd16a708
Commit
bd16a708
authored
Jun 06, 1996
by
Jim Wilson
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
(call_value): Handle PARALLEL in operands[0].
(call_value_multiple_internal2): New pattern. From-SVN: r12196
parent
a20b7b05
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
51 additions
and
1 deletions
+51
-1
gcc/config/mips/mips.md
+51
-1
No files found.
gcc/config/mips/mips.md
View file @
bd16a708
...
...
@@ -6322,12 +6322,23 @@ move\\t%0,%z4\\n\\
emit_insn (RTVEC_ELT (adjust, i));
}
/* Handle Irix6 function calls that have multiple non-contiguous
results. */
if (GET_CODE (operands[0]) == PARALLEL)
{
emit_call_insn (gen_call_value_multiple_internal2
(XEXP (XVECEXP (operands[0], 0, 0), 0),
operands[1], operands[2],
XEXP (XVECEXP (operands[0], 0, 1), 0),
gen_rtx (REG, SImode, GP_REG_FIRST + 31)));
DONE;
}
emit_call_insn (gen_call_value_internal1 (operands[0], operands[1], operands[2],
gen_rtx (REG, SImode, GP_REG_FIRST + 31)));
DONE;
}
}")
(define_insn "call_value_internal1"
...
...
@@ -6447,6 +6458,45 @@ move\\t%0,%z4\\n\\
(set_attr "mode" "none")
(set_attr "length" "2")])
;; ??? May eventually need all 6 versions of the call patterns with multiple
;; return values.
(define_insn "call_value_multiple_internal2"
[
(set (match_operand 0 "register_operand" "=df")
(call (match_operand 1 "call_insn_operand" "m")
(match_operand 2 "" "i")))
(set (match_operand 3 "register_operand" "=df")
(call (match_dup 1)
(match_dup 2)))
(clobber (match_operand:SI 4 "register_operand" "=d"))]
"TARGET_ABICALLS && !TARGET_LONG_CALLS"
"
*
{
register rtx target = XEXP (operands
[
1
]
, 0);
if (GET_CODE (target) == SYMBOL_REF)
return
\"
jal
\\
t%1
\"
;
else if (GET_CODE (target) == CONST_INT)
{
operands
[
1
]
= target;
return
\"
li
\\
t%^,%1
\\
n
\\
tjal
\\
t%4,%^
\"
;
}
else
{
operands
[
1
]
= target;
if (REGNO (target) != PIC_FUNCTION_ADDR_REGNUM)
return
\"
move
\\
t%^,%1
\\
n
\\
tjal
\\
t%4,%^
\"
;
else
return
\"
jal
\\
t%4,%1
\"
;
}
}"
[
(set_attr "type" "call")
(set_attr "mode" "none")
(set_attr "length" "2")])
;; Call subroutine returning any type.
(define_expand "untyped_call"
...
...
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