aboutsummaryrefslogtreecommitdiff
path: root/gcc/builtins.c
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2005-03-30 20:59:21 +0000
committerFariborz Jahanian <fjahanian@gcc.gnu.org>2005-03-30 20:59:21 +0000
commit0b8495ae4558d0e96ef3f1cdb8333e820228f0a2 (patch)
treedc8bee2ade4f014827f574e15ef69b4b8b8775b7 /gcc/builtins.c
parent63579539f1ba8e2985327e52965906f09d6f0e36 (diff)
downloadgcc-0b8495ae4558d0e96ef3f1cdb8333e820228f0a2.zip
gcc-0b8495ae4558d0e96ef3f1cdb8333e820228f0a2.tar.gz
gcc-0b8495ae4558d0e96ef3f1cdb8333e820228f0a2.tar.bz2
Fix problem with calling powi* builtins.
OKed by Richard Henderson. From-SVN: r97278
Diffstat (limited to 'gcc/builtins.c')
-rw-r--r--gcc/builtins.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/gcc/builtins.c b/gcc/builtins.c
index 68b91c5..fb044de 100644
--- a/gcc/builtins.c
+++ b/gcc/builtins.c
@@ -2380,6 +2380,7 @@ expand_builtin_powi (tree exp, rtx target, rtx subtarget)
tree arg0, arg1;
rtx op0, op1;
enum machine_mode mode;
+ enum machine_mode mode2;
if (! validate_arglist (arglist, REAL_TYPE, INTEGER_TYPE, VOID_TYPE))
return 0;
@@ -2411,19 +2412,22 @@ expand_builtin_powi (tree exp, rtx target, rtx subtarget)
/* Emit a libcall to libgcc. */
+ /* Mode of the 2nd argument must match that of an int. */
+ mode2 = mode_for_size (INT_TYPE_SIZE, MODE_INT, 0);
+
if (target == NULL_RTX)
target = gen_reg_rtx (mode);
op0 = expand_expr (arg0, subtarget, mode, 0);
if (GET_MODE (op0) != mode)
op0 = convert_to_mode (mode, op0, 0);
- op1 = expand_expr (arg1, 0, word_mode, 0);
- if (GET_MODE (op1) != word_mode)
- op1 = convert_to_mode (word_mode, op1, 0);
+ op1 = expand_expr (arg1, 0, mode2, 0);
+ if (GET_MODE (op1) != mode2)
+ op1 = convert_to_mode (mode2, op1, 0);
target = emit_library_call_value (powi_optab->handlers[(int) mode].libfunc,
target, LCT_CONST_MAKE_BLOCK, mode, 2,
- op0, mode, op1, word_mode);
+ op0, mode, op1, mode2);
return target;
}