From 6f94a68e8729efb497abd23e9c6e2c9f098adb23 Mon Sep 17 00:00:00 2001 From: Geoffrey Keating Date: Thu, 16 Oct 2003 01:16:38 +0000 Subject: [PATCH] darwin-protos.h (machopic_non_lazy_ptr_name): Delete prototype. * config/darwin-protos.h (machopic_non_lazy_ptr_name): Delete prototype. Clean up some whitespace. * config/darwin.c: Use gen_rtx_FOO (...) rather than gen_rtx (FOO, ...). (machopic_non_lazy_ptr_name): Make static. (name_needs_quotes): Allow '.' and '$' unquoted. (machopic_legitimize_pic_address): Improve codegen in dynamic-no-pic case. From-SVN: r72544 --- gcc/ChangeLog | 11 +++ gcc/config/darwin-protos.h | 1 - gcc/config/darwin.c | 192 +++++++++++++++++++------------------ 3 files changed, 111 insertions(+), 93 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c72455a7cfc..108831c07ed 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,14 @@ +2003-10-15 Geoffrey Keating + + * config/darwin-protos.h (machopic_non_lazy_ptr_name): Delete + prototype. Clean up some whitespace. + * config/darwin.c: Use gen_rtx_FOO (...) rather than + gen_rtx (FOO, ...). + (machopic_non_lazy_ptr_name): Make static. + (name_needs_quotes): Allow '.' and '$' unquoted. + (machopic_legitimize_pic_address): Improve codegen in dynamic-no-pic + case. + 2003-10-15 Gábor Lóki * fold-const.c (tree_swap_operands_p): disables diff --git a/gcc/config/darwin-protos.h b/gcc/config/darwin-protos.h index b6dddfc0fcc..69b0b6fcb3e 100644 --- a/gcc/config/darwin-protos.h +++ b/gcc/config/darwin-protos.h @@ -24,7 +24,6 @@ extern void machopic_validate_stub_or_non_lazy_ptr (const char *, int); extern const char *machopic_function_base_name (void); extern void machopic_output_function_base_name (FILE *); -extern const char *machopic_non_lazy_ptr_name (const char*); extern const char *machopic_stub_name (const char*); extern void machopic_picsymbol_stub_section (void); diff --git a/gcc/config/darwin.c b/gcc/config/darwin.c index 66c3829ed94..dcb42d5199a 100644 --- a/gcc/config/darwin.c +++ b/gcc/config/darwin.c @@ -45,13 +45,14 @@ Boston, MA 02111-1307, USA. */ static int machopic_data_defined_p (const char *); static void update_non_lazy_ptrs (const char *); static void update_stubs (const char *); +static const char *machopic_non_lazy_ptr_name (const char*); int name_needs_quotes (const char *name) { int c; while ((c = *name++) != '\0') - if (! ISIDNUM (c)) + if (! ISIDNUM (c) && c != '.' && c != '$') return 1; return 0; } @@ -262,7 +263,7 @@ static GTY(()) tree machopic_non_lazy_pointers; either by finding it in our list of pointer names, or by generating a new one. */ -const char * +static const char * machopic_non_lazy_ptr_name (const char *name) { const char *temp_name; @@ -446,7 +447,6 @@ machopic_indirect_data_reference (rtx orig, rtx reg) if (GET_CODE (orig) == SYMBOL_REF) { const char *name = XSTR (orig, 0); - int defined = machopic_data_defined_p (name); if (defined && MACHO_DYNAMIC_NO_PIC_P) @@ -463,10 +463,10 @@ machopic_indirect_data_reference (rtx orig, rtx reg) else if (defined) { #if defined (TARGET_TOC) || defined (HAVE_lo_sum) - rtx pic_base = gen_rtx (SYMBOL_REF, Pmode, - machopic_function_base_name ()); - rtx offset = gen_rtx (CONST, Pmode, - gen_rtx (MINUS, Pmode, orig, pic_base)); + rtx pic_base = gen_rtx_SYMBOL_REF (Pmode, + machopic_function_base_name ()); + rtx offset = gen_rtx_CONST (Pmode, + gen_rtx_MINUS (Pmode, orig, pic_base)); #endif #if defined (TARGET_TOC) /* i.e., PowerPC */ @@ -475,32 +475,31 @@ machopic_indirect_data_reference (rtx orig, rtx reg) if (reg == NULL) abort (); - emit_insn (gen_rtx (SET, Pmode, hi_sum_reg, - gen_rtx (PLUS, Pmode, pic_offset_table_rtx, - gen_rtx (HIGH, Pmode, offset)))); - emit_insn (gen_rtx (SET, Pmode, reg, - gen_rtx (LO_SUM, Pmode, hi_sum_reg, offset))); + emit_insn (gen_rtx_SET (Pmode, hi_sum_reg, + gen_rtx_PLUS (Pmode, pic_offset_table_rtx, + gen_rtx_HIGH (Pmode, offset)))); + emit_insn (gen_rtx_SET (Pmode, reg, + gen_rtx_LO_SUM (Pmode, hi_sum_reg, offset))); orig = reg; #else #if defined (HAVE_lo_sum) if (reg == 0) abort (); - emit_insn (gen_rtx (SET, VOIDmode, reg, - gen_rtx (HIGH, Pmode, offset))); - emit_insn (gen_rtx (SET, VOIDmode, reg, - gen_rtx (LO_SUM, Pmode, reg, offset))); - emit_insn (gen_rtx (USE, VOIDmode, - gen_rtx_REG (Pmode, PIC_OFFSET_TABLE_REGNUM))); + emit_insn (gen_rtx_SET (VOIDmode, reg, + gen_rtx_HIGH (Pmode, offset))); + emit_insn (gen_rtx_SET (VOIDmode, reg, + gen_rtx_LO_SUM (Pmode, reg, offset))); + emit_insn (gen_rtx_USE (VOIDmode, pic_offset_table_rtx)); - orig = gen_rtx (PLUS, Pmode, pic_offset_table_rtx, reg); + orig = gen_rtx_PLUS (Pmode, pic_offset_table_rtx, reg); #endif #endif return orig; } - ptr_ref = gen_rtx (SYMBOL_REF, Pmode, - machopic_non_lazy_ptr_name (name)); + ptr_ref = gen_rtx_SYMBOL_REF (Pmode, + machopic_non_lazy_ptr_name (name)); ptr_ref = gen_rtx_MEM (Pmode, ptr_ref); RTX_UNCHANGING_P (ptr_ref) = 1; @@ -525,7 +524,7 @@ machopic_indirect_data_reference (rtx orig, rtx reg) if (MACHOPIC_PURE && GET_CODE (orig) == CONST_INT) result = plus_constant (base, INTVAL (orig)); else - result = gen_rtx (PLUS, Pmode, base, orig); + result = gen_rtx_PLUS (Pmode, base, orig); if (MACHOPIC_JUST_INDIRECT && GET_CODE (base) == MEM) { @@ -587,7 +586,7 @@ machopic_indirect_call_target (rtx target) { const char *stub_name = machopic_stub_name (name); - XEXP (target, 0) = gen_rtx (SYMBOL_REF, mode, stub_name); + XEXP (target, 0) = gen_rtx_SYMBOL_REF (mode, stub_name); RTX_UNCHANGING_P (target) = 1; } } @@ -627,7 +626,7 @@ machopic_legitimize_pic_address (rtx orig, enum machine_mode mode, rtx reg) if (MACHO_DYNAMIC_NO_PIC_P) pic_base = CONST0_RTX (Pmode); else - pic_base = gen_rtx (SYMBOL_REF, Pmode, machopic_function_base_name ()); + pic_base = gen_rtx_SYMBOL_REF (Pmode, machopic_function_base_name ()); if (GET_CODE (orig) == MEM) { @@ -651,9 +650,9 @@ machopic_legitimize_pic_address (rtx orig, enum machine_mode mode, rtx reg) emit_insn (gen_macho_high (temp_reg, asym)); mem = gen_rtx_MEM (GET_MODE (orig), - gen_rtx (LO_SUM, Pmode, temp_reg, asym)); + gen_rtx_LO_SUM (Pmode, temp_reg, asym)); RTX_UNCHANGING_P (mem) = 1; - emit_insn (gen_rtx (SET, VOIDmode, reg, mem)); + emit_insn (gen_rtx_SET (VOIDmode, reg, mem)); #else /* Some other CPU -- WriteMe! but right now there are no other platform that can use dynamic-no-pic */ abort (); @@ -664,37 +663,47 @@ machopic_legitimize_pic_address (rtx orig, enum machine_mode mode, rtx reg) if (GET_CODE (XEXP (orig, 0)) == SYMBOL_REF || GET_CODE (XEXP (orig, 0)) == LABEL_REF) { - rtx offset = gen_rtx (CONST, Pmode, - gen_rtx (MINUS, Pmode, - XEXP (orig, 0), pic_base)); + rtx offset = gen_rtx_CONST (Pmode, + gen_rtx_MINUS (Pmode, + XEXP (orig, 0), + pic_base)); #if defined (TARGET_TOC) /* i.e., PowerPC */ /* Generating a new reg may expose opportunities for common subexpression elimination. */ - rtx hi_sum_reg = - (reload_in_progress ? reg : gen_reg_rtx (SImode)); - - emit_insn (gen_rtx (SET, Pmode, hi_sum_reg, - gen_rtx (PLUS, Pmode, - pic_offset_table_rtx, - gen_rtx (HIGH, Pmode, offset)))); - emit_insn (gen_rtx (SET, VOIDmode, reg, - gen_rtx (MEM, GET_MODE (orig), - gen_rtx (LO_SUM, Pmode, - hi_sum_reg, offset)))); - pic_ref = reg; + rtx hi_sum_reg = no_new_pseudos ? reg : gen_reg_rtx (SImode); + rtx mem; + rtx insn; + rtx sum; + + sum = gen_rtx_HIGH (Pmode, offset); + if (! MACHO_DYNAMIC_NO_PIC_P) + sum = gen_rtx_PLUS (Pmode, pic_offset_table_rtx, sum); + emit_insn (gen_rtx_SET (Pmode, hi_sum_reg, sum)); + + mem = gen_rtx_MEM (GET_MODE (orig), + gen_rtx_LO_SUM (Pmode, + hi_sum_reg, offset)); + RTX_UNCHANGING_P (mem) = 1; + insn = emit_insn (gen_rtx_SET (VOIDmode, reg, mem)); + REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_EQUAL, pic_ref, + REG_NOTES (insn)); + + pic_ref = reg; #else - emit_insn (gen_rtx (USE, VOIDmode, - gen_rtx_REG (Pmode, PIC_OFFSET_TABLE_REGNUM))); - - emit_insn (gen_rtx (SET, VOIDmode, reg, - gen_rtx (HIGH, Pmode, - gen_rtx (CONST, Pmode, offset)))); - emit_insn (gen_rtx (SET, VOIDmode, reg, - gen_rtx (LO_SUM, Pmode, reg, - gen_rtx (CONST, Pmode, offset)))); - pic_ref = gen_rtx (PLUS, Pmode, - pic_offset_table_rtx, reg); + emit_insn (gen_rtx_USE (VOIDmode, + gen_rtx_REG (Pmode, + PIC_OFFSET_TABLE_REGNUM))); + + emit_insn (gen_rtx_SET (VOIDmode, reg, + gen_rtx_HIGH (Pmode, + gen_rtx_CONST (Pmode, + offset)))); + emit_insn (gen_rtx_SET (VOIDmode, reg, + gen_rtx_LO_SUM (Pmode, reg, + gen_rtx_CONST (Pmode, offset)))); + pic_ref = gen_rtx_PLUS (Pmode, + pic_offset_table_rtx, reg); #endif } else @@ -707,21 +716,22 @@ machopic_legitimize_pic_address (rtx orig, enum machine_mode mode, rtx reg) pic = reg; } #if 0 - emit_insn (gen_rtx (USE, VOIDmode, - gen_rtx (REG, Pmode, PIC_OFFSET_TABLE_REGNUM))); + emit_insn (gen_rtx_USE (VOIDmode, + gen_rtx_REG (Pmode, + PIC_OFFSET_TABLE_REGNUM))); #endif - pic_ref = gen_rtx (PLUS, Pmode, - pic, - gen_rtx (CONST, Pmode, - gen_rtx (MINUS, Pmode, - XEXP (orig, 0), - pic_base))); + pic_ref = gen_rtx_PLUS (Pmode, + pic, + gen_rtx_CONST (Pmode, + gen_rtx_MINUS (Pmode, + XEXP (orig, 0), + pic_base))); } #if !defined (TARGET_TOC) emit_move_insn (reg, pic_ref); - pic_ref = gen_rtx (MEM, GET_MODE (orig), reg); + pic_ref = gen_rtx_MEM (GET_MODE (orig), reg); #endif RTX_UNCHANGING_P (pic_ref) = 1; } @@ -732,8 +742,9 @@ machopic_legitimize_pic_address (rtx orig, enum machine_mode mode, rtx reg) if (GET_CODE (orig) == SYMBOL_REF || GET_CODE (orig) == LABEL_REF) { - rtx offset = gen_rtx (CONST, Pmode, - gen_rtx (MINUS, Pmode, orig, pic_base)); + rtx offset = gen_rtx_CONST (Pmode, + gen_rtx_MINUS (Pmode, + orig, pic_base)); #if defined (TARGET_TOC) /* i.e., PowerPC */ rtx hi_sum_reg; @@ -747,24 +758,25 @@ machopic_legitimize_pic_address (rtx orig, enum machine_mode mode, rtx reg) hi_sum_reg = reg; - emit_insn (gen_rtx (SET, Pmode, hi_sum_reg, - (MACHO_DYNAMIC_NO_PIC_P) - ? gen_rtx (HIGH, Pmode, offset) - : gen_rtx (PLUS, Pmode, - pic_offset_table_rtx, - gen_rtx (HIGH, Pmode, offset)))); - emit_insn (gen_rtx (SET, VOIDmode, reg, - gen_rtx (LO_SUM, Pmode, - hi_sum_reg, offset))); + emit_insn (gen_rtx_SET (Pmode, hi_sum_reg, + (MACHO_DYNAMIC_NO_PIC_P) + ? gen_rtx_HIGH (Pmode, offset) + : gen_rtx_PLUS (Pmode, + pic_offset_table_rtx, + gen_rtx_HIGH (Pmode, + offset)))); + emit_insn (gen_rtx_SET (VOIDmode, reg, + gen_rtx_LO_SUM (Pmode, + hi_sum_reg, offset))); pic_ref = reg; RTX_UNCHANGING_P (pic_ref) = 1; #else - emit_insn (gen_rtx (SET, VOIDmode, reg, - gen_rtx (HIGH, Pmode, offset))); - emit_insn (gen_rtx (SET, VOIDmode, reg, - gen_rtx (LO_SUM, Pmode, reg, offset))); - pic_ref = gen_rtx (PLUS, Pmode, - pic_offset_table_rtx, reg); + emit_insn (gen_rtx_SET (VOIDmode, reg, + gen_rtx_HIGH (Pmode, offset))); + emit_insn (gen_rtx_SET (VOIDmode, reg, + gen_rtx_LO_SUM (Pmode, reg, offset))); + pic_ref = gen_rtx_PLUS (Pmode, + pic_offset_table_rtx, reg); RTX_UNCHANGING_P (pic_ref) = 1; #endif } @@ -784,14 +796,14 @@ machopic_legitimize_pic_address (rtx orig, enum machine_mode mode, rtx reg) pic = reg; } #if 0 - emit_insn (gen_rtx (USE, VOIDmode, - pic_offset_table_rtx)); + emit_insn (gen_rtx_USE (VOIDmode, + pic_offset_table_rtx)); #endif - pic_ref = gen_rtx (PLUS, Pmode, - pic, - gen_rtx (CONST, Pmode, - gen_rtx (MINUS, Pmode, - orig, pic_base))); + pic_ref = gen_rtx_PLUS (Pmode, + pic, + gen_rtx_CONST (Pmode, + gen_rtx_MINUS (Pmode, + orig, pic_base))); } } } @@ -837,7 +849,7 @@ machopic_legitimize_pic_address (rtx orig, enum machine_mode mode, rtx reg) is_complex = 1; } else - pic_ref = gen_rtx (PLUS, Pmode, base, orig); + pic_ref = gen_rtx_PLUS (Pmode, base, orig); if (RTX_UNCHANGING_P (base) && RTX_UNCHANGING_P (orig)) RTX_UNCHANGING_P (pic_ref) = 1; @@ -860,7 +872,7 @@ machopic_legitimize_pic_address (rtx orig, enum machine_mode mode, rtx reg) { rtx addr = machopic_legitimize_pic_address (XEXP (orig, 0), Pmode, reg); - addr = gen_rtx (MEM, GET_MODE (orig), addr); + addr = gen_rtx_MEM (GET_MODE (orig), addr); RTX_UNCHANGING_P (addr) = RTX_UNCHANGING_P (orig); emit_move_insn (reg, addr); pic_ref = reg; @@ -925,7 +937,7 @@ machopic_finish (FILE *asm_out_file) data_section (); assemble_align (GET_MODE_ALIGNMENT (Pmode)); assemble_label (lazy_name); - assemble_integer (gen_rtx (SYMBOL_REF, Pmode, sym_name), + assemble_integer (gen_rtx_SYMBOL_REF (Pmode, sym_name), GET_MODE_SIZE (Pmode), GET_MODE_ALIGNMENT (Pmode), 1); } @@ -1092,7 +1104,6 @@ machopic_output_possible_stub_label (FILE *file, const char *name) { tree temp; - /* Ensure we're looking at a section-encoded name. */ if (name[0] != '!' || (name[1] != 't' && name[1] != 'T')) return; @@ -1281,7 +1292,6 @@ machopic_select_rtx_section (enum machine_mode mode, rtx x, void machopic_asm_out_constructor (rtx symbol, int priority ATTRIBUTE_UNUSED) { - if (MACHOPIC_INDIRECT) mod_init_section (); else @@ -1289,7 +1299,6 @@ machopic_asm_out_constructor (rtx symbol, int priority ATTRIBUTE_UNUSED) assemble_align (POINTER_SIZE); assemble_integer (symbol, POINTER_SIZE / BITS_PER_UNIT, POINTER_SIZE, 1); - if (! MACHOPIC_INDIRECT) fprintf (asm_out_file, ".reference .constructors_used\n"); } @@ -1297,7 +1306,6 @@ machopic_asm_out_constructor (rtx symbol, int priority ATTRIBUTE_UNUSED) void machopic_asm_out_destructor (rtx symbol, int priority ATTRIBUTE_UNUSED) { - if (MACHOPIC_INDIRECT) mod_term_section (); else -- 2.30.2