Commit e236a9ff by Jeff Law

pa.h: Replace many uses of fprintf with fputs.

        * pa.h: Replace many uses of fprintf with fputs.
        * pa.c: Likewise.
        * pa-pro.h: Likewise.

        * pa.h (SECONDARY_RELOAD_CLASS): Don't call secondary_reload_class
        to handle trivial cases.
        * pa.c (secondary_reload_class): Rework to be more efficient.

From-SVN: r10664
parent 5456dd8e
...@@ -64,9 +64,9 @@ dtors_section () \ ...@@ -64,9 +64,9 @@ dtors_section () \
#define ASM_OUTPUT_DESTRUCTOR(FILE,NAME) \ #define ASM_OUTPUT_DESTRUCTOR(FILE,NAME) \
do { \ do { \
dtors_section (); \ dtors_section (); \
fprintf (FILE, "\t.word\t "); \ fputs ("\t.word\t ", FILE); \
assemble_name (FILE, NAME); \ assemble_name (FILE, NAME); \
fprintf (FILE, "\n"); \ fputs ("\n", FILE); \
} while (0) } while (0)
/* A C statement (sans semicolon) to output an element in the table of /* A C statement (sans semicolon) to output an element in the table of
...@@ -74,9 +74,9 @@ dtors_section () \ ...@@ -74,9 +74,9 @@ dtors_section () \
#define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \ #define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \
do { \ do { \
ctors_section (); \ ctors_section (); \
fprintf (FILE, "\t.word\t "); \ fputs ("\t.word\t ", FILE); \
assemble_name (FILE, NAME); \ assemble_name (FILE, NAME); \
fprintf (FILE, "\n"); \ fputs ("\n", FILE); \
} while (0) } while (0)
#include "pa/pa.h" #include "pa/pa.h"
......
...@@ -1726,7 +1726,7 @@ output_ascii (file, p, size) ...@@ -1726,7 +1726,7 @@ output_ascii (file, p, size)
restriction is in number of input characters (see \xnn & restriction is in number of input characters (see \xnn &
\whatever). So we have to do this very carefully. */ \whatever). So we have to do this very carefully. */
fprintf (file, "\t.STRING \""); fputs ("\t.STRING \"", file);
chars_output = 0; chars_output = 0;
for (i = 0; i < size; i += 4) for (i = 0; i < size; i += 4)
...@@ -1758,14 +1758,14 @@ output_ascii (file, p, size) ...@@ -1758,14 +1758,14 @@ output_ascii (file, p, size)
} }
if (chars_output + co > 243) if (chars_output + co > 243)
{ {
fprintf (file, "\"\n\t.STRING \""); fputs ("\"\n\t.STRING \"", file);
chars_output = 0; chars_output = 0;
} }
fwrite (partial_output, 1, co, file); fwrite (partial_output, 1, co, file);
chars_output += co; chars_output += co;
co = 0; co = 0;
} }
fprintf (file, "\"\n"); fputs ("\"\n", file);
} }
/* You may have trouble believing this, but this is the HP-PA stack /* You may have trouble believing this, but this is the HP-PA stack
...@@ -1983,12 +1983,12 @@ output_function_prologue (file, size) ...@@ -1983,12 +1983,12 @@ output_function_prologue (file, size)
of a function. */ of a function. */
fprintf (file, "\t.CALLINFO FRAME=%d", actual_fsize); fprintf (file, "\t.CALLINFO FRAME=%d", actual_fsize);
if (regs_ever_live[2] || profile_flag) if (regs_ever_live[2] || profile_flag)
fprintf (file, ",CALLS,SAVE_RP"); fputs (",CALLS,SAVE_RP", file);
else else
fprintf (file, ",NO_CALLS"); fputs (",NO_CALLS", file);
if (frame_pointer_needed) if (frame_pointer_needed)
fprintf (file, ",SAVE_SP"); fputs (",SAVE_SP", file);
/* Pass on information about the number of callee register saves /* Pass on information about the number of callee register saves
performed in the prologue. performed in the prologue.
...@@ -2004,7 +2004,7 @@ output_function_prologue (file, size) ...@@ -2004,7 +2004,7 @@ output_function_prologue (file, size)
if (fr_saved) if (fr_saved)
fprintf (file, ",ENTRY_FR=%d", fr_saved + 11); fprintf (file, ",ENTRY_FR=%d", fr_saved + 11);
fprintf (file, "\n\t.ENTRY\n"); fputs ("\n\t.ENTRY\n", file);
/* Horrid hack. emit_function_prologue will modify this RTL in /* Horrid hack. emit_function_prologue will modify this RTL in
place to get the expected results. */ place to get the expected results. */
...@@ -2293,9 +2293,9 @@ output_function_epilogue (file, size) ...@@ -2293,9 +2293,9 @@ output_function_epilogue (file, size)
/* If insn is a CALL_INSN, then it must be a call to a volatile /* If insn is a CALL_INSN, then it must be a call to a volatile
function (otherwise there would be epilogue insns). */ function (otherwise there would be epilogue insns). */
if (insn && GET_CODE (insn) == CALL_INSN) if (insn && GET_CODE (insn) == CALL_INSN)
fprintf (file, "\tnop\n"); fputs ("\tnop\n", file);
fprintf (file, "\t.EXIT\n\t.PROCEND\n"); fputs ("\t.EXIT\n\t.PROCEND\n", file);
/* If we have deferred plabels, then we need to switch into the data /* If we have deferred plabels, then we need to switch into the data
section and align it to a 4 byte boundary before we output the section and align it to a 4 byte boundary before we output the
...@@ -2827,25 +2827,25 @@ print_operand (file, x, code) ...@@ -2827,25 +2827,25 @@ print_operand (file, x, code)
switch (GET_CODE (x)) switch (GET_CODE (x))
{ {
case EQ: case EQ:
fprintf (file, "="); break; fputs ("=", file); break;
case NE: case NE:
fprintf (file, "<>"); break; fputs ("<>", file); break;
case GT: case GT:
fprintf (file, ">"); break; fputs (">", file); break;
case GE: case GE:
fprintf (file, ">="); break; fputs (">=", file); break;
case GEU: case GEU:
fprintf (file, ">>="); break; fputs (">>=", file); break;
case GTU: case GTU:
fprintf (file, ">>"); break; fputs (">>", file); break;
case LT: case LT:
fprintf (file, "<"); break; fputs ("<", file); break;
case LE: case LE:
fprintf (file, "<="); break; fputs ("<=", file); break;
case LEU: case LEU:
fprintf (file, "<<="); break; fputs ("<<=", file); break;
case LTU: case LTU:
fprintf (file, "<<"); break; fputs ("<<", file); break;
default: default:
abort (); abort ();
} }
...@@ -2854,25 +2854,25 @@ print_operand (file, x, code) ...@@ -2854,25 +2854,25 @@ print_operand (file, x, code)
switch (GET_CODE (x)) switch (GET_CODE (x))
{ {
case EQ: case EQ:
fprintf (file, "<>"); break; fputs ("<>", file); break;
case NE: case NE:
fprintf (file, "="); break; fputs ("=", file); break;
case GT: case GT:
fprintf (file, "<="); break; fputs ("<=", file); break;
case GE: case GE:
fprintf (file, "<"); break; fputs ("<", file); break;
case GEU: case GEU:
fprintf (file, "<<"); break; fputs ("<<", file); break;
case GTU: case GTU:
fprintf (file, "<<="); break; fputs ("<<=", file); break;
case LT: case LT:
fprintf (file, ">="); break; fputs (">=", file); break;
case LE: case LE:
fprintf (file, ">"); break; fputs (">", file); break;
case LEU: case LEU:
fprintf (file, ">>"); break; fputs (">>", file); break;
case LTU: case LTU:
fprintf (file, ">>="); break; fputs (">>=", file); break;
default: default:
abort (); abort ();
} }
...@@ -2883,17 +2883,17 @@ print_operand (file, x, code) ...@@ -2883,17 +2883,17 @@ print_operand (file, x, code)
switch (GET_CODE (x)) switch (GET_CODE (x))
{ {
case EQ: case EQ:
fprintf (file, "!="); break; fputs ("!=", file); break;
case NE: case NE:
fprintf (file, "="); break; fputs ("=", file); break;
case GT: case GT:
fprintf (file, "!>"); break; fputs ("!>", file); break;
case GE: case GE:
fprintf (file, "!>="); break; fputs ("!>=", file); break;
case LT: case LT:
fprintf (file, "!<"); break; fputs ("!<", file); break;
case LE: case LE:
fprintf (file, "!<="); break; fputs ("!<=", file); break;
default: default:
abort (); abort ();
} }
...@@ -2904,17 +2904,17 @@ print_operand (file, x, code) ...@@ -2904,17 +2904,17 @@ print_operand (file, x, code)
switch (GET_CODE (x)) switch (GET_CODE (x))
{ {
case EQ: case EQ:
fprintf (file, "?="); break; fputs ("?=", file); break;
case NE: case NE:
fprintf (file, "!?="); break; fputs ("!?=", file); break;
case GT: case GT:
fprintf (file, "!<="); break; fputs ("!<=", file); break;
case GE: case GE:
fprintf (file, "!<"); break; fputs ("!<", file); break;
case LT: case LT:
fprintf (file, "!>="); break; fputs ("!>=", file); break;
case LE: case LE:
fprintf (file, "!>"); break; fputs ("!>", file); break;
default: default:
abort (); abort ();
} }
...@@ -2923,25 +2923,25 @@ print_operand (file, x, code) ...@@ -2923,25 +2923,25 @@ print_operand (file, x, code)
switch (GET_CODE (x)) switch (GET_CODE (x))
{ {
case EQ: case EQ:
fprintf (file, "="); break; fputs ("=", file); break;
case NE: case NE:
fprintf (file, "<>"); break; fputs ("<>", file); break;
case GT: case GT:
fprintf (file, "<"); break; fputs ("<", file); break;
case GE: case GE:
fprintf (file, "<="); break; fputs ("<=", file); break;
case GEU: case GEU:
fprintf (file, "<<="); break; fputs ("<<=", file); break;
case GTU: case GTU:
fprintf (file, "<<"); break; fputs ("<<", file); break;
case LT: case LT:
fprintf (file, ">"); break; fputs (">", file); break;
case LE: case LE:
fprintf (file, ">="); break; fputs (">=", file); break;
case LEU: case LEU:
fprintf (file, ">>="); break; fputs (">>=", file); break;
case LTU: case LTU:
fprintf (file, ">>"); break; fputs (">>", file); break;
default: default:
abort (); abort ();
} }
...@@ -2950,25 +2950,25 @@ print_operand (file, x, code) ...@@ -2950,25 +2950,25 @@ print_operand (file, x, code)
switch (GET_CODE (x)) switch (GET_CODE (x))
{ {
case EQ: case EQ:
fprintf (file, "<>"); break; fputs ("<>", file); break;
case NE: case NE:
fprintf (file, "="); break; fputs ("=", file); break;
case GT: case GT:
fprintf (file, ">="); break; fputs (">=", file); break;
case GE: case GE:
fprintf (file, ">"); break; fputs (">", file); break;
case GEU: case GEU:
fprintf (file, ">>"); break; fputs (">>", file); break;
case GTU: case GTU:
fprintf (file, ">>="); break; fputs (">>=", file); break;
case LT: case LT:
fprintf (file, "<="); break; fputs ("<=", file); break;
case LE: case LE:
fprintf (file, "<"); break; fputs ("<", file); break;
case LEU: case LEU:
fprintf (file, "<<"); break; fputs ("<<", file); break;
case LTU: case LTU:
fprintf (file, "<<="); break; fputs ("<<=", file); break;
default: default:
abort (); abort ();
} }
...@@ -3010,11 +3010,11 @@ print_operand (file, x, code) ...@@ -3010,11 +3010,11 @@ print_operand (file, x, code)
{ {
case PRE_DEC: case PRE_DEC:
case PRE_INC: case PRE_INC:
fprintf (file, "s,mb"); fputs ("s,mb", file);
break; break;
case POST_DEC: case POST_DEC:
case POST_INC: case POST_INC:
fprintf (file, "s,ma"); fputs ("s,ma", file);
break; break;
default: default:
break; break;
...@@ -3025,11 +3025,11 @@ print_operand (file, x, code) ...@@ -3025,11 +3025,11 @@ print_operand (file, x, code)
{ {
case PRE_DEC: case PRE_DEC:
case PRE_INC: case PRE_INC:
fprintf (file, ",mb"); fputs (",mb", file);
break; break;
case POST_DEC: case POST_DEC:
case POST_INC: case POST_INC:
fprintf (file, ",ma"); fputs (",ma", file);
break; break;
default: default:
break; break;
...@@ -3101,7 +3101,7 @@ output_global_address (file, x, round_constant) ...@@ -3101,7 +3101,7 @@ output_global_address (file, x, round_constant)
else if (GET_CODE (x) == SYMBOL_REF && !flag_pic) else if (GET_CODE (x) == SYMBOL_REF && !flag_pic)
{ {
assemble_name (file, XSTR (x, 0)); assemble_name (file, XSTR (x, 0));
fprintf (file, "-$global$"); fputs ("-$global$", file);
} }
else if (GET_CODE (x) == CONST) else if (GET_CODE (x) == CONST)
{ {
...@@ -3155,7 +3155,7 @@ output_global_address (file, x, round_constant) ...@@ -3155,7 +3155,7 @@ output_global_address (file, x, round_constant)
else abort (); else abort ();
if (!read_only_operand (base) && !flag_pic) if (!read_only_operand (base) && !flag_pic)
fprintf (file, "-$global$"); fputs ("-$global$", file);
if (offset) if (offset)
fprintf (file,"%s%d", sep, offset); fprintf (file,"%s%d", sep, offset);
} }
...@@ -3341,8 +3341,8 @@ output_arg_descriptor (call_insn) ...@@ -3341,8 +3341,8 @@ output_arg_descriptor (call_insn)
if using the portable runtime calling conventions. */ if using the portable runtime calling conventions. */
if (TARGET_PORTABLE_RUNTIME) if (TARGET_PORTABLE_RUNTIME)
{ {
fprintf (asm_out_file, fputs ("\t.CALL ARGW0=NO,ARGW1=NO,ARGW2=NO,ARGW3=NO,RETVAL=NO\n",
"\t.CALL ARGW0=NO,ARGW1=NO,ARGW2=NO,ARGW3=NO,RETVAL=NO\n"); asm_out_file);
return; return;
} }
...@@ -3394,8 +3394,15 @@ output_arg_descriptor (call_insn) ...@@ -3394,8 +3394,15 @@ output_arg_descriptor (call_insn)
fputc ('\n', asm_out_file); fputc ('\n', asm_out_file);
} }
/* Memory loads/stores to/from the shift need to go through /* Return the class of any secondary reload register that is needed to
the general registers. */ move IN into a register in class CLASS using mode MODE.
Profiling has showed this routine and its descendants account for
a significant amount of compile time (~7%). So it has been
optimized to reduce redundant computations and eliminate useless
function calls.
It might be worthwhile to try and make this a leaf function too. */
enum reg_class enum reg_class
secondary_reload_class (class, mode, in) secondary_reload_class (class, mode, in)
...@@ -3403,7 +3410,7 @@ secondary_reload_class (class, mode, in) ...@@ -3403,7 +3410,7 @@ secondary_reload_class (class, mode, in)
enum machine_mode mode; enum machine_mode mode;
rtx in; rtx in;
{ {
int regno = true_regnum (in); int regno, is_symbolic;
/* Trying to load a constant into a FP register during PIC code /* Trying to load a constant into a FP register during PIC code
generation will require %r1 as a scratch register. */ generation will require %r1 as a scratch register. */
...@@ -3413,6 +3420,34 @@ secondary_reload_class (class, mode, in) ...@@ -3413,6 +3420,34 @@ secondary_reload_class (class, mode, in)
&& (GET_CODE (in) == CONST_INT || GET_CODE (in) == CONST_DOUBLE)) && (GET_CODE (in) == CONST_INT || GET_CODE (in) == CONST_DOUBLE))
return R1_REGS; return R1_REGS;
/* Profiling showed the PA port spends about 1.3% of its compilation
time in true_regnum from calls inside secondary_reload_class. */
if (GET_CODE (in) == REG)
{
regno = REGNO (in);
if (regno >= FIRST_PSEUDO_REGISTER)
regno = true_regnum (in);
}
else if (GET_CODE (in) == SUBREG)
regno = true_regnum (in);
else
regno = -1;
/* Profiling showed the PA port spends about 1.3% of its compilation
time in true_regnum from calls inside secondary_reload_class. */
if (GET_CODE (in) == REG)
{
regno = REGNO (in);
if (regno >= FIRST_PSEUDO_REGISTER)
regno = true_regnum (in);
}
else if (GET_CODE (in) == SUBREG)
regno = true_regnum (in);
else
regno = -1;
if (((regno >= FIRST_PSEUDO_REGISTER || regno == -1) if (((regno >= FIRST_PSEUDO_REGISTER || regno == -1)
&& GET_MODE_CLASS (mode) == MODE_INT && GET_MODE_CLASS (mode) == MODE_INT
&& FP_REG_CLASS_P (class)) && FP_REG_CLASS_P (class))
...@@ -3422,17 +3457,38 @@ secondary_reload_class (class, mode, in) ...@@ -3422,17 +3457,38 @@ secondary_reload_class (class, mode, in)
if (GET_CODE (in) == HIGH) if (GET_CODE (in) == HIGH)
in = XEXP (in, 0); in = XEXP (in, 0);
/* Profiling has showed GCC spends about 2.6% of its compilation
time in symbolic_operand from calls inside secondary_reload_class.
We use an inline copy and only compute its return value once to avoid
useless work. */
switch (GET_CODE (in))
{
rtx tmp;
case SYMBOL_REF:
case LABEL_REF:
is_symbolic = 1;
break;
case CONST:
tmp = XEXP (in, 0);
is_symbolic = ((GET_CODE (XEXP (tmp, 0)) == SYMBOL_REF
|| GET_CODE (XEXP (tmp, 0)) == LABEL_REF)
&& GET_CODE (XEXP (tmp, 1)) == CONST_INT);
break;
default:
is_symbolic = 0;
break;
}
if (!flag_pic if (!flag_pic
&& symbolic_operand (in, VOIDmode) && is_symbolic
&& read_only_operand (in)) && read_only_operand (in))
return NO_REGS; return NO_REGS;
if (class != R1_REGS && symbolic_operand (in, VOIDmode)) if (class != R1_REGS && is_symbolic)
return R1_REGS; return R1_REGS;
if (GET_CODE (in) == SUBREG)
in = SUBREG_REG (in);
return NO_REGS; return NO_REGS;
} }
......
...@@ -49,7 +49,7 @@ extern enum processor_type pa_cpu; ...@@ -49,7 +49,7 @@ extern enum processor_type pa_cpu;
/* Print subsidiary information on the compiler version in use. */ /* Print subsidiary information on the compiler version in use. */
#define TARGET_VERSION fprintf (stderr, " (hppa)"); #define TARGET_VERSION fputs (" (hppa)", stderr);
/* Run-time compilation parameters selecting different hardware subsets. */ /* Run-time compilation parameters selecting different hardware subsets. */
...@@ -702,11 +702,15 @@ enum reg_class { NO_REGS, R1_REGS, GENERAL_REGS, FP_REGS, GENERAL_OR_FP_REGS, ...@@ -702,11 +702,15 @@ enum reg_class { NO_REGS, R1_REGS, GENERAL_REGS, FP_REGS, GENERAL_OR_FP_REGS,
#define PREFERRED_RELOAD_CLASS(X,CLASS) (CLASS) #define PREFERRED_RELOAD_CLASS(X,CLASS) (CLASS)
/* Return the register class of a scratch register needed to copy IN into /* Return the register class of a scratch register needed to copy IN into
or out of a register in CLASS in MODE. If it can be done directly, or out of a register in CLASS in MODE. If it can be done directly
NO_REGS is returned. */ NO_REGS is returned.
Avoid doing any work for the common case calls. */
#define SECONDARY_RELOAD_CLASS(CLASS,MODE,IN) \ #define SECONDARY_RELOAD_CLASS(CLASS,MODE,IN) \
secondary_reload_class (CLASS, MODE, IN) ((CLASS == BASE_REG_CLASS && GET_CODE (IN) == REG \
&& REGNO (IN) < FIRST_PSEUDO_REGISTER) \
? NO_REGS : secondary_reload_class (CLASS, MODE, IN))
/* On the PA it is not possible to directly move data between /* On the PA it is not possible to directly move data between
GENERAL_REGS and FP_REGS. */ GENERAL_REGS and FP_REGS. */
...@@ -1087,11 +1091,11 @@ extern enum cmp_type hppa_branch_type; ...@@ -1087,11 +1091,11 @@ extern enum cmp_type hppa_branch_type;
fprintf (FILE, ",ARGW%d=GR", i); \ fprintf (FILE, ",ARGW%d=GR", i); \
} \ } \
if (TYPE_MODE (fntype) == DFmode && ! TARGET_SOFT_FLOAT) \ if (TYPE_MODE (fntype) == DFmode && ! TARGET_SOFT_FLOAT) \
fprintf (FILE, ",RTNVAL=FR"); \ fputs (",RTNVAL=FR", FILE); \
else if (TYPE_MODE (fntype) == SFmode && ! TARGET_SOFT_FLOAT) \ else if (TYPE_MODE (fntype) == SFmode && ! TARGET_SOFT_FLOAT) \
fprintf (FILE, ",RTNVAL=FU"); \ fputs (",RTNVAL=FU", FILE); \
else if (fntype != void_type_node) \ else if (fntype != void_type_node) \
fprintf (FILE, ",RTNVAL=GR"); \ fputs (",RTNVAL=GR", FILE); \
fputs ("\n", FILE); \ fputs ("\n", FILE); \
}} while (0) }} while (0)
...@@ -1171,17 +1175,17 @@ extern union tree_node *current_function_decl; ...@@ -1171,17 +1175,17 @@ extern union tree_node *current_function_decl;
#define TRAMPOLINE_TEMPLATE(FILE) \ #define TRAMPOLINE_TEMPLATE(FILE) \
{ \ { \
fprintf (FILE, "\tldw 36(0,%%r22),%%r21\n"); \ fputs ("\tldw 36(0,%%r22),%%r21\n", FILE); \
fprintf (FILE, "\tbb,>=,n %%r21,30,.+16\n"); \ fputs ("\tbb,>=,n %%r21,30,.+16\n", FILE); \
fprintf (FILE, "\tdepi 0,31,2,%%r21\n"); \ fputs ("\tdepi 0,31,2,%%r21\n", FILE); \
fprintf (FILE, "\tldw 4(0,%%r21),%%r19\n"); \ fputs ("\tldw 4(0,%%r21),%%r19\n", FILE); \
fprintf (FILE, "\tldw 0(0,%%r21),%%r21\n"); \ fputs ("\tldw 0(0,%%r21),%%r21\n", FILE); \
fprintf (FILE, "\tldsid (0,%%r21),%%r1\n"); \ fputs ("\tldsid (0,%%r21),%%r1\n", FILE); \
fprintf (FILE, "\tmtsp %%r1,%%sr0\n"); \ fputs ("\tmtsp %%r1,%%sr0\n", FILE); \
fprintf (FILE, "\tbe 0(%%sr0,%%r21)\n"); \ fputs ("\tbe 0(%%sr0,%%r21)\n", FILE); \
fprintf (FILE, "\tldw 40(0,%%r22),%%r29\n"); \ fputs ("\tldw 40(0,%%r22),%%r29\n", FILE); \
fprintf (FILE, "\t.word 0\n"); \ fputs ("\t.word 0\n", FILE); \
fprintf (FILE, "\t.word 0\n"); \ fputs ("\t.word 0\n", FILE); \
} }
/* Length in units of the trampoline for entering a nested function. /* Length in units of the trampoline for entering a nested function.
...@@ -1753,14 +1757,14 @@ while (0) ...@@ -1753,14 +1757,14 @@ while (0)
/* Output at beginning of assembler file. */ /* Output at beginning of assembler file. */
#define ASM_FILE_START(FILE) \ #define ASM_FILE_START(FILE) \
do { fprintf (FILE, "\t.SPACE $PRIVATE$\n\ do { fputs ("\t.SPACE $PRIVATE$\n\
\t.SUBSPA $DATA$,QUAD=1,ALIGN=8,ACCESS=31\n\ \t.SUBSPA $DATA$,QUAD=1,ALIGN=8,ACCESS=31\n\
\t.SUBSPA $BSS$,QUAD=1,ALIGN=8,ACCESS=31,ZERO,SORT=82\n\ \t.SUBSPA $BSS$,QUAD=1,ALIGN=8,ACCESS=31,ZERO,SORT=82\n\
\t.SPACE $TEXT$\n\ \t.SPACE $TEXT$\n\
\t.SUBSPA $LIT$,QUAD=0,ALIGN=8,ACCESS=44\n\ \t.SUBSPA $LIT$,QUAD=0,ALIGN=8,ACCESS=44\n\
\t.SUBSPA $CODE$,QUAD=0,ALIGN=8,ACCESS=44,CODE_ONLY\n\ \t.SUBSPA $CODE$,QUAD=0,ALIGN=8,ACCESS=44,CODE_ONLY\n\
\t.IMPORT $global$,DATA\n\ \t.IMPORT $global$,DATA\n\
\t.IMPORT $$dyncall,MILLICODE\n");\ \t.IMPORT $$dyncall,MILLICODE\n", FILE);\
if (profile_flag)\ if (profile_flag)\
fprintf (FILE, "\t.IMPORT _mcount, CODE\n");\ fprintf (FILE, "\t.IMPORT _mcount, CODE\n");\
if (write_symbols != NO_DEBUG) \ if (write_symbols != NO_DEBUG) \
...@@ -1778,7 +1782,7 @@ do { fprintf (FILE, "\t.SPACE $PRIVATE$\n\ ...@@ -1778,7 +1782,7 @@ do { fprintf (FILE, "\t.SPACE $PRIVATE$\n\
#define ASM_APP_OFF "" #define ASM_APP_OFF ""
/* We don't yet know how to identify GCC to HP-PA machines. */ /* We don't yet know how to identify GCC to HP-PA machines. */
#define ASM_IDENTIFY_GCC(FILE) fprintf (FILE, "; gcc_compiled.:\n") #define ASM_IDENTIFY_GCC(FILE) fputs ("; gcc_compiled.:\n", FILE)
/* Output before code. */ /* Output before code. */
...@@ -1982,24 +1986,24 @@ DTORS_SECTION_FUNCTION ...@@ -1982,24 +1986,24 @@ DTORS_SECTION_FUNCTION
/* This is how to output an assembler line defining an `int' constant. */ /* This is how to output an assembler line defining an `int' constant. */
#define ASM_OUTPUT_INT(FILE,VALUE) \ #define ASM_OUTPUT_INT(FILE,VALUE) \
{ fprintf (FILE, "\t.word "); \ { fputs ("\t.word ", FILE); \
if (function_label_operand (VALUE, VOIDmode) \ if (function_label_operand (VALUE, VOIDmode) \
&& !TARGET_PORTABLE_RUNTIME) \ && !TARGET_PORTABLE_RUNTIME) \
fprintf (FILE, "P%%"); \ fputs ("P%%", FILE); \
output_addr_const (FILE, (VALUE)); \ output_addr_const (FILE, (VALUE)); \
fprintf (FILE, "\n");} fputs ("\n", FILE);}
/* Likewise for `short' and `char' constants. */ /* Likewise for `short' and `char' constants. */
#define ASM_OUTPUT_SHORT(FILE,VALUE) \ #define ASM_OUTPUT_SHORT(FILE,VALUE) \
( fprintf (FILE, "\t.half "), \ ( fputs ("\t.half ", FILE), \
output_addr_const (FILE, (VALUE)), \ output_addr_const (FILE, (VALUE)), \
fprintf (FILE, "\n")) fputs ("\n", FILE))
#define ASM_OUTPUT_CHAR(FILE,VALUE) \ #define ASM_OUTPUT_CHAR(FILE,VALUE) \
( fprintf (FILE, "\t.byte "), \ ( fputs ("\t.byte ", FILE), \
output_addr_const (FILE, (VALUE)), \ output_addr_const (FILE, (VALUE)), \
fprintf (FILE, "\n")) fputs ("\n", FILE))
/* This is how to output an assembler line for a numeric constant byte. */ /* This is how to output an assembler line for a numeric constant byte. */
......
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