diff options
author | meissner <meissner@138bc75d-0d04-0410-961f-82ee72b054a4> | 1997-11-26 19:29:38 +0000 |
---|---|---|
committer | meissner <meissner@138bc75d-0d04-0410-961f-82ee72b054a4> | 1997-11-26 19:29:38 +0000 |
commit | a3c228aa8af7a0da80178e3293857c1a058df7dc (patch) | |
tree | 93f432007f4c11aaefd2eb76ca16c011effa38fb /gcc/config | |
parent | c5f82e239587225972ca179afa5146b5a2d74326 (diff) | |
download | gcc-a3c228aa8af7a0da80178e3293857c1a058df7dc.tar.gz |
Pass 9th fp argument correctly on System V/eabi; Add @plt for -fPIC/-mrelocatable
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@16746 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config')
-rw-r--r-- | gcc/config/rs6000/rs6000.c | 9 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.md | 4 |
2 files changed, 9 insertions, 4 deletions
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 557ef8b9294..4af7a75f803 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -1349,9 +1349,11 @@ function_arg (cum, mode, type, named) const0_rtx))); } - /* Long longs won't be split between register and stack */ + /* Long longs won't be split between register and stack; + FP arguments get passed on the stack if they didn't get a register. */ else if ((DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_SOLARIS) && - align_words + RS6000_ARG_SIZE (mode, type, named) > GP_ARG_NUM_REG) + (align_words + RS6000_ARG_SIZE (mode, type, named) > GP_ARG_NUM_REG + || (GET_MODE_CLASS (mode) == MODE_FLOAT && TARGET_HARD_FLOAT))) { return NULL_RTX; } @@ -1385,6 +1387,9 @@ function_arg_partial_nregs (cum, mode, type, named) return 0; } + if (GET_MODE_CLASS (mode) == MODE_FLOAT && TARGET_HARD_FLOAT) + return 0; + if (cum->words < GP_ARG_NUM_REG && GP_ARG_NUM_REG < (cum->words + RS6000_ARG_SIZE (mode, type, named))) { diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md index b9bd408e423..26ea2b4a0b3 100644 --- a/gcc/config/rs6000/rs6000.md +++ b/gcc/config/rs6000/rs6000.md @@ -7580,7 +7580,7 @@ else if (INTVAL (operands[2]) & CALL_V4_CLEAR_FP_ARGS) output_asm_insn (\"creqv 6,6,6\", operands); - return (flag_pic == 1) ? \"bl %z0@plt\" : \"bl %z0\"; + return flag_pic ? \"bl %z0@plt\" : \"bl %z0\"; }" [(set_attr "type" "branch") (set_attr "length" "4,8")]) @@ -7650,7 +7650,7 @@ else if (INTVAL (operands[3]) & CALL_V4_CLEAR_FP_ARGS) output_asm_insn (\"creqv 6,6,6\", operands); - return (flag_pic == 1) ? \"bl %z1@plt\" : \"bl %z1\"; + return flag_pic ? \"bl %z1@plt\" : \"bl %z1\"; }" [(set_attr "type" "branch") (set_attr "length" "4,8")]) |