diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 1996-06-18 06:53:52 -0400 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 1996-06-18 06:53:52 -0400 |
commit | 85ab4aaaec03fc5ef6d0d4177a993cf36b1f7fab (patch) | |
tree | c5f3279053b00c1aa0aa694096bfba2552bde7f7 | |
parent | 9cc96794cc35d136c2b229c636c1495fac1d12ab (diff) | |
download | gcc-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.c | 31 |
1 files changed, 19 insertions, 12 deletions
@@ -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))); |