Commit c81fc13e by David Edelsohn

xcoffout.c (xcoffout_declare_function): Add documentation.

	* xcoffout.c (xcoffout_declare_function): Add documentation.
	* rs6000.c (num_insns_constant_wide): Use TARGET_POWERPC64 not
	TARGET_64BIT.  Compare constant to -1, not bit pattern.
	(easy_fp_constant): Use TARGET_POWERPC64 not TARGET_64BIT.
	(expand_block_move): Allow 8 DImode loads for PowerPC64.  Fix
	gen_movsi typos.

From-SVN: r29697
parent 628d4410
Tue Sep 28 16:45:40 1999 David Edelsohn <edelsohn@gnu.org>
* xcoffout.c (xcoffout_declare_function): Add documentation.
* rs6000.c (num_insns_constant_wide): Use TARGET_POWERPC64 not
TARGET_64BIT. Compare constant to -1, not bit pattern.
(easy_fp_constant): Use TARGET_POWERPC64 not TARGET_64BIT.
(expand_block_move): Allow 8 DImode loads for PowerPC64. Fix
gen_movsi typos.
Tue Sep 28 16:43:14 1999 Nick Clifton <nickc@cygnus.com> Tue Sep 28 16:43:14 1999 Nick Clifton <nickc@cygnus.com>
* dwarf2out.c (add_abstract_origin_attribute): Abort if * dwarf2out.c (add_abstract_origin_attribute): Abort if
...@@ -167,7 +176,7 @@ Fri Sep 24 11:57:06 1999 Geoffrey Keating <geoffk@cygnus.com> ...@@ -167,7 +176,7 @@ Fri Sep 24 11:57:06 1999 Geoffrey Keating <geoffk@cygnus.com>
Thu Sep 23 18:18:55 1999 Mark Mitchell <mark@codesourcery.com> Thu Sep 23 18:18:55 1999 Mark Mitchell <mark@codesourcery.com>
* stmt.c (expand_start_bindings): Don't allow cleanup isntructions * stmt.c (expand_start_bindings): Don't allow cleanup instructions
to disappear. to disappear.
Thu Sep 23 18:07:01 1999 Mark Mitchell <mark@codesourcery.com> Thu Sep 23 18:07:01 1999 Mark Mitchell <mark@codesourcery.com>
......
...@@ -455,9 +455,9 @@ direct_return () ...@@ -455,9 +455,9 @@ direct_return ()
if (info->first_gp_reg_save == 32 if (info->first_gp_reg_save == 32
&& info->first_fp_reg_save == 64 && info->first_fp_reg_save == 64
&& !info->lr_save_p && ! info->lr_save_p
&& !info->cr_save_p && ! info->cr_save_p
&& !info->push_p) && ! info->push_p)
return 1; return 1;
} }
...@@ -676,7 +676,7 @@ num_insns_constant_wide (value) ...@@ -676,7 +676,7 @@ num_insns_constant_wide (value)
return 1; return 1;
#if HOST_BITS_PER_WIDE_INT == 64 #if HOST_BITS_PER_WIDE_INT == 64
else if (TARGET_64BIT) else if (TARGET_POWERPC64)
{ {
HOST_WIDE_INT low = value & 0xffffffff; HOST_WIDE_INT low = value & 0xffffffff;
HOST_WIDE_INT high = value >> 32; HOST_WIDE_INT high = value >> 32;
...@@ -684,10 +684,10 @@ num_insns_constant_wide (value) ...@@ -684,10 +684,10 @@ num_insns_constant_wide (value)
if (high == 0 && (low & 0x80000000) == 0) if (high == 0 && (low & 0x80000000) == 0)
return 2; return 2;
else if (high == 0xffffffff && (low & 0x80000000) != 0) else if (high == -1 && (low & 0x80000000) != 0)
return 2; return 2;
else if (!low) else if (! low)
return num_insns_constant_wide (high) + 1; return num_insns_constant_wide (high) + 1;
else else
...@@ -748,8 +748,7 @@ num_insns_constant (op, mode) ...@@ -748,8 +748,7 @@ num_insns_constant (op, mode)
if (high == 0 && (low & 0x80000000) == 0) if (high == 0 && (low & 0x80000000) == 0)
return num_insns_constant_wide (low); return num_insns_constant_wide (low);
else if (((high & 0xffffffff) == 0xffffffff) else if (high == -1 && (low & 0x80000000) != 0)
&& ((low & 0x80000000) != 0))
return num_insns_constant_wide (low); return num_insns_constant_wide (low);
else if (mask64_operand (op, mode)) else if (mask64_operand (op, mode))
...@@ -820,7 +819,7 @@ easy_fp_constant (op, mode) ...@@ -820,7 +819,7 @@ easy_fp_constant (op, mode)
} }
else if (mode == DImode) else if (mode == DImode)
return ((TARGET_64BIT return ((TARGET_POWERPC64
&& GET_CODE (op) == CONST_DOUBLE && CONST_DOUBLE_LOW (op) == 0) && GET_CODE (op) == CONST_DOUBLE && CONST_DOUBLE_LOW (op) == 0)
|| (num_insns_constant (op, DImode) <= 2)); || (num_insns_constant (op, DImode) <= 2));
...@@ -1132,7 +1131,7 @@ current_file_function_operand (op, mode) ...@@ -1132,7 +1131,7 @@ current_file_function_operand (op, mode)
return (GET_CODE (op) == SYMBOL_REF return (GET_CODE (op) == SYMBOL_REF
&& (SYMBOL_REF_FLAG (op) && (SYMBOL_REF_FLAG (op)
|| (op == XEXP (DECL_RTL (current_function_decl), 0) || (op == XEXP (DECL_RTL (current_function_decl), 0)
&& !DECL_WEAK (current_function_decl)))); && ! DECL_WEAK (current_function_decl))));
} }
...@@ -1549,7 +1548,7 @@ function_arg (cum, mode, type, named) ...@@ -1549,7 +1548,7 @@ function_arg (cum, mode, type, named)
&& function_arg_boundary (mode, type) == 64) ? 1 : 0; && function_arg_boundary (mode, type) == 64) ? 1 : 0;
int align_words = cum->words + align; int align_words = cum->words + align;
if (!named) if (! named)
return NULL_RTX; return NULL_RTX;
if (type && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST) if (type && TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
...@@ -1724,7 +1723,7 @@ setup_incoming_varargs (cum, mode, type, pretend_size, no_rtl) ...@@ -1724,7 +1723,7 @@ setup_incoming_varargs (cum, mode, type, pretend_size, no_rtl)
} }
set = get_varargs_alias_set (); set = get_varargs_alias_set ();
if (!no_rtl && first_reg_offset < GP_ARG_NUM_REG) if (! no_rtl && first_reg_offset < GP_ARG_NUM_REG)
{ {
mem = gen_rtx_MEM (BLKmode, mem = gen_rtx_MEM (BLKmode,
plus_constant (save_area, plus_constant (save_area,
...@@ -1742,7 +1741,7 @@ setup_incoming_varargs (cum, mode, type, pretend_size, no_rtl) ...@@ -1742,7 +1741,7 @@ setup_incoming_varargs (cum, mode, type, pretend_size, no_rtl)
/* Save FP registers if needed. */ /* Save FP registers if needed. */
if ((DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_SOLARIS) if ((DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_SOLARIS)
&& TARGET_HARD_FLOAT && !no_rtl && TARGET_HARD_FLOAT && ! no_rtl
&& next_cum.fregno <= FP_ARG_V4_MAX_REG) && next_cum.fregno <= FP_ARG_V4_MAX_REG)
{ {
int fregno = next_cum.fregno; int fregno = next_cum.fregno;
...@@ -2087,13 +2086,19 @@ expand_block_move (operands) ...@@ -2087,13 +2086,19 @@ expand_block_move (operands)
then don't generate more than 8 loads. */ then don't generate more than 8 loads. */
if (TARGET_STRING) if (TARGET_STRING)
{ {
if (bytes > 4*8) if (bytes > 8*4)
return 0; return 0;
} }
else if (! STRICT_ALIGNMENT) else if (! STRICT_ALIGNMENT)
{ {
if (bytes > 4*8) if (TARGET_POWERPC64 && align >= 4)
return 0; {
if (bytes > 8*8)
return 0;
}
else
if (bytes > 8*4)
return 0;
} }
else if (bytes > 8*align) else if (bytes > 8*align)
return 0; return 0;
...@@ -2290,7 +2295,7 @@ expand_block_move (operands) ...@@ -2290,7 +2295,7 @@ expand_block_move (operands)
{ {
move_bytes = 2; move_bytes = 2;
tmp_reg = gen_reg_rtx (HImode); tmp_reg = gen_reg_rtx (HImode);
emit_insn (gen_movsi (tmp_reg, emit_insn (gen_movhi (tmp_reg,
expand_block_move_mem (HImode, expand_block_move_mem (HImode,
src_addr, src_addr,
orig_src))); orig_src)));
...@@ -2303,7 +2308,7 @@ expand_block_move (operands) ...@@ -2303,7 +2308,7 @@ expand_block_move (operands)
{ {
move_bytes = 1; move_bytes = 1;
tmp_reg = gen_reg_rtx (QImode); tmp_reg = gen_reg_rtx (QImode);
emit_insn (gen_movsi (tmp_reg, emit_insn (gen_movqi (tmp_reg,
expand_block_move_mem (QImode, expand_block_move_mem (QImode,
src_addr, src_addr,
orig_src))); orig_src)));
...@@ -3919,16 +3924,16 @@ rs6000_stack_info () ...@@ -3919,16 +3924,16 @@ rs6000_stack_info ()
if (info_ptr->gp_size == 0) if (info_ptr->gp_size == 0)
info_ptr->gp_save_offset = 0; info_ptr->gp_save_offset = 0;
if (!info_ptr->lr_save_p) if (! info_ptr->lr_save_p)
info_ptr->lr_save_offset = 0; info_ptr->lr_save_offset = 0;
if (!info_ptr->cr_save_p) if (! info_ptr->cr_save_p)
info_ptr->cr_save_offset = 0; info_ptr->cr_save_offset = 0;
if (!info_ptr->toc_save_p) if (! info_ptr->toc_save_p)
info_ptr->toc_save_offset = 0; info_ptr->toc_save_offset = 0;
if (!info_ptr->main_save_p) if (! info_ptr->main_save_p)
info_ptr->main_save_offset = 0; info_ptr->main_save_offset = 0;
return info_ptr; return info_ptr;
...@@ -3940,7 +3945,7 @@ debug_stack_info (info) ...@@ -3940,7 +3945,7 @@ debug_stack_info (info)
{ {
const char *abi_string; const char *abi_string;
if (!info) if (! info)
info = rs6000_stack_info (); info = rs6000_stack_info ();
fprintf (stderr, "\nStack information for function %s:\n", fprintf (stderr, "\nStack information for function %s:\n",
...@@ -4080,7 +4085,7 @@ rs6000_output_load_toc_table (file, reg) ...@@ -4080,7 +4085,7 @@ rs6000_output_load_toc_table (file, reg)
fprintf (file, "\n"); fprintf (file, "\n");
/* possibly create the toc section */ /* possibly create the toc section */
if (!toc_initialized) if (! toc_initialized)
{ {
toc_section (); toc_section ();
function_section (current_function_decl); function_section (current_function_decl);
...@@ -4339,13 +4344,13 @@ output_prolog (file, size) ...@@ -4339,13 +4344,13 @@ output_prolog (file, size)
if ((DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_SOLARIS) if ((DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_SOLARIS)
&& flag_pic == 1 && regs_ever_live[PIC_OFFSET_TABLE_REGNUM]) && flag_pic == 1 && regs_ever_live[PIC_OFFSET_TABLE_REGNUM])
{ {
if (!info->lr_save_p) if (! info->lr_save_p)
asm_fprintf (file, "\tmflr %s\n", reg_names[0]); asm_fprintf (file, "\tmflr %s\n", reg_names[0]);
fputs ("\tbl _GLOBAL_OFFSET_TABLE_@local-4\n", file); fputs ("\tbl _GLOBAL_OFFSET_TABLE_@local-4\n", file);
asm_fprintf (file, "\tmflr %s\n", reg_names[PIC_OFFSET_TABLE_REGNUM]); asm_fprintf (file, "\tmflr %s\n", reg_names[PIC_OFFSET_TABLE_REGNUM]);
if (!info->lr_save_p) if (! info->lr_save_p)
asm_fprintf (file, "\tmtlr %s\n", reg_names[0]); asm_fprintf (file, "\tmtlr %s\n", reg_names[0]);
} }
...@@ -4459,7 +4464,7 @@ output_prolog (file, size) ...@@ -4459,7 +4464,7 @@ output_prolog (file, size)
if (TARGET_TOC && TARGET_MINIMAL_TOC && get_pool_size () != 0) if (TARGET_TOC && TARGET_MINIMAL_TOC && get_pool_size () != 0)
{ {
#ifdef USING_SVR4_H #ifdef USING_SVR4_H
if (!profile_flag) if (! profile_flag)
rs6000_pic_func_labelno = rs6000_pic_labelno; rs6000_pic_func_labelno = rs6000_pic_labelno;
#endif #endif
rs6000_output_load_toc_table (file, 30); rs6000_output_load_toc_table (file, 30);
...@@ -5195,7 +5200,7 @@ output_toc (file, x, labelno) ...@@ -5195,7 +5200,7 @@ output_toc (file, x, labelno)
a TOC reference to an unknown section. Thus, for vtables only, a TOC reference to an unknown section. Thus, for vtables only,
we emit the TOC reference to reference the symbol and not the we emit the TOC reference to reference the symbol and not the
section. */ section. */
if (!strncmp ("_vt.", name, 4)) if (! strncmp ("_vt.", name, 4))
{ {
RS6000_OUTPUT_BASENAME (file, name); RS6000_OUTPUT_BASENAME (file, name);
if (offset < 0) if (offset < 0)
...@@ -5983,7 +5988,7 @@ rs6000_encode_section_info (decl) ...@@ -5983,7 +5988,7 @@ rs6000_encode_section_info (decl)
{ {
rtx sym_ref = XEXP (DECL_RTL (decl), 0); rtx sym_ref = XEXP (DECL_RTL (decl), 0);
if ((TREE_ASM_WRITTEN (decl) || ! TREE_PUBLIC (decl)) if ((TREE_ASM_WRITTEN (decl) || ! TREE_PUBLIC (decl))
&& !DECL_WEAK (decl)) && ! DECL_WEAK (decl))
SYMBOL_REF_FLAG (sym_ref) = 1; SYMBOL_REF_FLAG (sym_ref) = 1;
if (DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_NT) if (DEFAULT_ABI == ABI_AIX || DEFAULT_ABI == ABI_NT)
......
...@@ -485,6 +485,9 @@ xcoffout_declare_function (file, decl, name) ...@@ -485,6 +485,9 @@ xcoffout_declare_function (file, decl, name)
file and/or at the wrong line number. */ file and/or at the wrong line number. */
xcoffout_source_file (file, DECL_SOURCE_FILE (decl), 0); xcoffout_source_file (file, DECL_SOURCE_FILE (decl), 0);
dbxout_symbol (decl, 0); dbxout_symbol (decl, 0);
/* .function NAME, TOP, MAPPING, TYPE, SIZE
16 and 044 are placeholders for backwards compatibility */
fprintf (file, "\t.function .%s,.%s,16,044,FE..%s-.%s\n", n, n, n, n); fprintf (file, "\t.function .%s,.%s,16,044,FE..%s-.%s\n", n, n, n, n);
} }
......
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