Commit 6f94a68e by Geoffrey Keating Committed by Geoffrey Keating

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
parent 42f3a0a0
2003-10-15 Geoffrey Keating <geoffk@apple.com>
* 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 Gbor Lki <alga@rgai.hu>
* fold-const.c (tree_swap_operands_p): disables
......
......@@ -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);
......
......@@ -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,
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 offset = gen_rtx_CONST (Pmode,
gen_rtx_MINUS (Pmode, orig, pic_base));
#endif
#if defined (TARGET_TOC) /* i.e., PowerPC */
......@@ -475,31 +475,30 @@ 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,
ptr_ref = gen_rtx_SYMBOL_REF (Pmode,
machopic_non_lazy_ptr_name (name));
ptr_ref = gen_rtx_MEM (Pmode, ptr_ref);
......@@ -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,36 +663,46 @@ 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));
rtx hi_sum_reg = no_new_pseudos ? reg : gen_reg_rtx (SImode);
rtx mem;
rtx insn;
rtx sum;
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;
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,
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
}
......@@ -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_ref = gen_rtx_PLUS (Pmode,
pic,
gen_rtx (CONST, Pmode,
gen_rtx (MINUS, Pmode,
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,23 +758,24 @@ 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,
emit_insn (gen_rtx_SET (Pmode, hi_sum_reg,
(MACHO_DYNAMIC_NO_PIC_P)
? gen_rtx (HIGH, Pmode, offset)
: gen_rtx (PLUS, Pmode,
? 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,
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,
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,13 +796,13 @@ machopic_legitimize_pic_address (rtx orig, enum machine_mode mode, rtx reg)
pic = reg;
}
#if 0
emit_insn (gen_rtx (USE, VOIDmode,
emit_insn (gen_rtx_USE (VOIDmode,
pic_offset_table_rtx));
#endif
pic_ref = gen_rtx (PLUS, Pmode,
pic_ref = gen_rtx_PLUS (Pmode,
pic,
gen_rtx (CONST, Pmode,
gen_rtx (MINUS, Pmode,
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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment