aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1996-06-18 06:53:52 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1996-06-18 06:53:52 -0400
commit85ab4aaaec03fc5ef6d0d4177a993cf36b1f7fab (patch)
treec5f3279053b00c1aa0aa694096bfba2552bde7f7
parent9cc96794cc35d136c2b229c636c1495fac1d12ab (diff)
downloadgcc-85ab4aaaec03fc5ef6d0d4177a993cf36b1f7fab.zip
gcc-85ab4aaaec03fc5ef6d0d4177a993cf36b1f7fab.tar.gz
gcc-85ab4aaaec03fc5ef6d0d4177a993cf36b1f7fab.tar.bz2
(expand_builtin, case BUILT_IN_{SET,LONG}JMP): Properly handle case
when ptr_mode != Pmode. From-SVN: r12294
-rw-r--r--gcc/expr.c31
1 files changed, 19 insertions, 12 deletions
diff --git a/gcc/expr.c b/gcc/expr.c
index 9bda758..1603b62 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -8676,13 +8676,8 @@ expand_builtin (exp, target, subtarget, mode, ignore)
break;
{
- rtx buf_addr
- = force_reg (Pmode,
- convert_modes (Pmode, ptr_mode,
- expand_expr (TREE_VALUE (arglist),
- subtarget,
- VOIDmode, 0),
- 1));
+ rtx buf_addr = expand_expr (TREE_VALUE (arglist), subtarget,
+ VOIDmode, 0);
rtx lab1 = gen_label_rtx (), lab2 = gen_label_rtx ();
enum machine_mode sa_mode = Pmode;
rtx stack_save;
@@ -8693,6 +8688,12 @@ expand_builtin (exp, target, subtarget, mode, ignore)
CUMULATIVE_ARGS args_so_far;
int i;
+#ifdef POINTERS_EXTEND_UNSIGNED
+ buf_addr = convert_memory_address (Pmode, buf_addr);
+#endif
+
+ buf_addr = force_reg (Pmode, buf_addr);
+
if (target == 0 || GET_CODE (target) != REG
|| REGNO (target) < FIRST_PSEUDO_REGISTER)
target = gen_reg_rtx (value_mode);
@@ -8827,13 +8828,19 @@ expand_builtin (exp, target, subtarget, mode, ignore)
tree dummy_id = get_identifier ("__dummy");
tree dummy_type = build_function_type (void_type_node, NULL_TREE);
tree dummy_decl = build_decl (FUNCTION_DECL, dummy_id, dummy_type);
+#ifdef POINTERS_EXTEND_UNSIGNED
rtx buf_addr
= force_reg (Pmode,
- convert_modes (Pmode, ptr_mode,
- expand_expr (TREE_VALUE (arglist),
- NULL_RTX,
- VOIDmode, 0),
- 1));
+ convert_memory_address
+ (Pmode,
+ expand_expr (TREE_VALUE (arglist),
+ NULL_RTX, VOIDmode, 0)));
+#else
+ rtx buf_addr
+ = force_reg (Pmode, expand_expr (TREE_VALUE (arglist),
+ NULL_RTX,
+ VOIDmode, 0));
+#endif
rtx fp = gen_rtx (MEM, Pmode, buf_addr);
rtx lab = gen_rtx (MEM, Pmode,
plus_constant (buf_addr, GET_MODE_SIZE (Pmode)));