Commit dfafcb4d by Herman A.J. ten Brugge Committed by Michael Hayes

c4x.c (c4x_output_ascii): Restrict line length of output when TI syntax is used.

2000-01-29 Herman A.J. ten Brugge <Haj.Ten.Brugge@net.HCC.nl>

        * c4x.c (c4x_output_ascii): Restrict line length of output when TI
	syntax is used.
	(c4x_function_prologue): Use regnames intead of float_reg_names when
	TI syntax is used.
	(c4x_function_epilogue): Likewise.
	(c4x_print_operand): Likewise.
	* c4x.h (HOST_WIDE_INT_PRINT_HEX): Redefine.
	* c4x.md (set_high): Disable for TARGET_TI.

From-SVN: r31682
parent ed3614cd
2000-01-27 Herman A.J. ten Brugge <Haj.Ten.Brugge@net.HCC.nl> 2000-01-29 Herman A.J. ten Brugge <Haj.Ten.Brugge@net.HCC.nl>
* c4x.c (c4x_output_ascii): Restrict line length of output when TI
syntax is used.
(c4x_function_prologue): Use regnames intead of float_reg_names when
TI syntax is used.
(c4x_function_epilogue): Likewise.
(c4x_print_operand): Likewise.
* c4x.h (HOST_WIDE_INT_PRINT_HEX): Redefine.
* c4x.md (set_high): Disable for TARGET_TI.
2000-01-29 Herman A.J. ten Brugge <Haj.Ten.Brugge@net.HCC.nl>
* c4x.h (PREFERRED_RELOAD_CLASS): Change to restrict the reloading * c4x.h (PREFERRED_RELOAD_CLASS): Change to restrict the reloading
of framepointer + constant to ADDR_REGS class. of framepointer + constant to ADDR_REGS class.
......
...@@ -266,7 +266,7 @@ c4x_output_ascii (stream, ptr, len) ...@@ -266,7 +266,7 @@ c4x_output_ascii (stream, ptr, len)
int len; int len;
{ {
char sbuf[C4X_ASCII_LIMIT + 1]; char sbuf[C4X_ASCII_LIMIT + 1];
int s, first, onlys; int s, l, special, first, onlys;
if (len) if (len)
{ {
...@@ -274,17 +274,18 @@ c4x_output_ascii (stream, ptr, len) ...@@ -274,17 +274,18 @@ c4x_output_ascii (stream, ptr, len)
first = 1; first = 1;
} }
for (s = 0; len > 0; --len, ++ptr) for (s = l = 0; len > 0; --len, ++ptr)
{ {
onlys = 0; onlys = 0;
/* Escape " and \ with a \". */ /* Escape " and \ with a \". */
if (*ptr == '\"' || *ptr == '\\') special = *ptr == '\"' || *ptr == '\\';
sbuf[s++] = '\\';
/* If printable - add to buff. */ /* If printable - add to buff. */
if (*ptr >= 0x20 && *ptr < 0x7f) if ((! TARGET_TI || ! special) && *ptr >= 0x20 && *ptr < 0x7f)
{ {
if (special)
sbuf[s++] = '\\';
sbuf[s++] = *ptr; sbuf[s++] = *ptr;
if (s < C4X_ASCII_LIMIT - 1) if (s < C4X_ASCII_LIMIT - 1)
continue; continue;
...@@ -295,10 +296,21 @@ c4x_output_ascii (stream, ptr, len) ...@@ -295,10 +296,21 @@ c4x_output_ascii (stream, ptr, len)
if (first) if (first)
first = 0; first = 0;
else else
{
fputc (',', stream); fputc (',', stream);
l++;
}
sbuf[s] = 0; sbuf[s] = 0;
fprintf (stream, "\"%s\"", sbuf); fprintf (stream, "\"%s\"", sbuf);
l += s + 2;
if (TARGET_TI && l >= 80 && len > 1)
{
fprintf (stream, "\n\t.byte\t");
first = 1;
l = 0;
}
s = 0; s = 0;
} }
if (onlys) if (onlys)
...@@ -307,9 +319,19 @@ c4x_output_ascii (stream, ptr, len) ...@@ -307,9 +319,19 @@ c4x_output_ascii (stream, ptr, len)
if (first) if (first)
first = 0; first = 0;
else else
{
fputc (',', stream); fputc (',', stream);
l++;
}
fprintf (stream, "%d", *ptr); fprintf (stream, "%d", *ptr);
l += 3;
if (TARGET_TI && l >= 80 && len > 1)
{
fprintf (stream, "\n\t.byte\t");
first = 1;
l = 0;
}
} }
if (s) if (s)
{ {
...@@ -761,7 +783,9 @@ c4x_function_prologue (file, size) ...@@ -761,7 +783,9 @@ c4x_function_prologue (file, size)
{ {
fprintf (file, "\tpush\t%s\n", reg_names[regno]); fprintf (file, "\tpush\t%s\n", reg_names[regno]);
if (IS_EXT_REGNO (regno)) /* Save 32MSB of R0--R11. */ if (IS_EXT_REGNO (regno)) /* Save 32MSB of R0--R11. */
fprintf (file, "\tpushf\t%s\n", float_reg_names[regno]); fprintf (file, "\tpushf\t%s\n",
TARGET_TI ? reg_names[regno]
: float_reg_names[regno]);
} }
} }
/* We need to clear the repeat mode flag if the ISR is /* We need to clear the repeat mode flag if the ISR is
...@@ -840,7 +864,9 @@ c4x_function_prologue (file, size) ...@@ -840,7 +864,9 @@ c4x_function_prologue (file, size)
/* R6 and R7 are saved as floating point. */ /* R6 and R7 are saved as floating point. */
if (TARGET_PRESERVE_FLOAT) if (TARGET_PRESERVE_FLOAT)
fprintf (file, "\tpush\t%s\n", reg_names[regno]); fprintf (file, "\tpush\t%s\n", reg_names[regno]);
fprintf (file, "\tpushf\t%s\n", float_reg_names[regno]); fprintf (file, "\tpushf\t%s\n",
TARGET_TI ? reg_names[regno]
: float_reg_names[regno]);
} }
else if ((! dont_push_ar3) || (regno != AR3_REGNO)) else if ((! dont_push_ar3) || (regno != AR3_REGNO))
{ {
...@@ -894,7 +920,9 @@ c4x_function_epilogue (file, size) ...@@ -894,7 +920,9 @@ c4x_function_epilogue (file, size)
if (! c4x_isr_reg_used_p (regno)) if (! c4x_isr_reg_used_p (regno))
continue; continue;
if (IS_EXT_REGNO (regno)) if (IS_EXT_REGNO (regno))
fprintf (file, "\tpopf\t%s\n", float_reg_names[regno]); fprintf (file, "\tpopf\t%s\n",
TARGET_TI ? reg_names[regno]
: float_reg_names[regno]);
fprintf (file, "\tpop\t%s\n", reg_names[regno]); fprintf (file, "\tpop\t%s\n", reg_names[regno]);
} }
if (size) if (size)
...@@ -991,7 +1019,9 @@ c4x_function_epilogue (file, size) ...@@ -991,7 +1019,9 @@ c4x_function_epilogue (file, size)
/* R6 and R7 are saved as floating point. */ /* R6 and R7 are saved as floating point. */
if ((regno == R6_REGNO) || (regno == R7_REGNO)) if ((regno == R6_REGNO) || (regno == R7_REGNO))
{ {
fprintf (file, "\tpopf\t%s\n", float_reg_names[regno]); fprintf (file, "\tpopf\t%s\n",
TARGET_TI ? reg_names[regno]
: float_reg_names[regno]);
if (TARGET_PRESERVE_FLOAT) if (TARGET_PRESERVE_FLOAT)
{ {
restore_count--; restore_count--;
...@@ -1745,7 +1775,7 @@ c4x_print_operand (file, op, letter) ...@@ -1745,7 +1775,7 @@ c4x_print_operand (file, op, letter)
switch (letter) switch (letter)
{ {
case 'A': /* Direct address. */ case 'A': /* Direct address. */
if (code == CONST_INT || code == SYMBOL_REF) if (code == CONST_INT || code == SYMBOL_REF || code == CONST)
asm_fprintf (file, "@"); asm_fprintf (file, "@");
break; break;
...@@ -1779,7 +1809,7 @@ c4x_print_operand (file, op, letter) ...@@ -1779,7 +1809,7 @@ c4x_print_operand (file, op, letter)
op1 = XEXP (XEXP (op, 0), 1); op1 = XEXP (XEXP (op, 0), 1);
if (GET_CODE(op1) == CONST_INT || GET_CODE(op1) == SYMBOL_REF) if (GET_CODE(op1) == CONST_INT || GET_CODE(op1) == SYMBOL_REF)
{ {
asm_fprintf (file, "\t%s\t", TARGET_C3X ? "ldp" : "ldpk"); asm_fprintf (file, "\t%s\t@", TARGET_C3X ? "ldp" : "ldpk");
output_address (XEXP (adj_offsettable_operand (op, 1), 0)); output_address (XEXP (adj_offsettable_operand (op, 1), 0));
asm_fprintf (file, "\n"); asm_fprintf (file, "\n");
} }
...@@ -1792,7 +1822,7 @@ c4x_print_operand (file, op, letter) ...@@ -1792,7 +1822,7 @@ c4x_print_operand (file, op, letter)
&& (GET_CODE (XEXP (op, 0)) == CONST && (GET_CODE (XEXP (op, 0)) == CONST
|| GET_CODE (XEXP (op, 0)) == SYMBOL_REF)) || GET_CODE (XEXP (op, 0)) == SYMBOL_REF))
{ {
asm_fprintf (file, "%s\t", TARGET_C3X ? "ldp" : "ldpk"); asm_fprintf (file, "%s\t@", TARGET_C3X ? "ldp" : "ldpk");
output_address (XEXP (op, 0)); output_address (XEXP (op, 0));
asm_fprintf (file, "\n\t"); asm_fprintf (file, "\n\t");
} }
...@@ -1824,7 +1854,8 @@ c4x_print_operand (file, op, letter) ...@@ -1824,7 +1854,8 @@ c4x_print_operand (file, op, letter)
switch (code) switch (code)
{ {
case REG: case REG:
if (GET_MODE_CLASS (GET_MODE (op)) == MODE_FLOAT) if (GET_MODE_CLASS (GET_MODE (op)) == MODE_FLOAT
&& ! TARGET_TI)
fprintf (file, "%s", float_reg_names[REGNO (op)]); fprintf (file, "%s", float_reg_names[REGNO (op)]);
else else
fprintf (file, "%s", reg_names[REGNO (op)]); fprintf (file, "%s", reg_names[REGNO (op)]);
......
...@@ -21,6 +21,8 @@ ...@@ -21,6 +21,8 @@
the Free Software Foundation, 59 Temple Place - Suite 330, the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */ Boston, MA 02111-1307, USA. */
#include "hwint.h"
/* RUN-TIME TARGET SPECIFICATION. */ /* RUN-TIME TARGET SPECIFICATION. */
#define C4x 1 #define C4x 1
...@@ -2056,6 +2058,21 @@ dtors_section () \ ...@@ -2056,6 +2058,21 @@ dtors_section () \
const_section (); \ const_section (); \
} }
/* The TI assembler wants to have hex numbers this way. */
#undef HOST_WIDE_INT_PRINT_HEX
#ifndef HOST_WIDE_INT_PRINT_HEX
# if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_INT
# define HOST_WIDE_INT_PRINT_HEX "0%xh"
# else
# if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONG
# define HOST_WIDE_INT_PRINT_HEX "0%lxh"
# else
# define HOST_WIDE_INT_PRINT_HEX "0%llxh"
# endif
# endif
#endif /* ! HOST_WIDE_INT_PRINT_HEX */
/* A C statement or statements to switch to the appropriate /* A C statement or statements to switch to the appropriate
section for output of RTX in mode MODE. RTX is some kind section for output of RTX in mode MODE. RTX is some kind
of constant in RTL. The argument MODE is redundant except of constant in RTL. The argument MODE is redundant except
......
...@@ -1109,7 +1109,7 @@ ...@@ -1109,7 +1109,7 @@
(define_insn "set_high" (define_insn "set_high"
[(set (match_operand:QI 0 "std_reg_operand" "=c") [(set (match_operand:QI 0 "std_reg_operand" "=c")
(high:QI (match_operand:QI 1 "symbolic_address_operand" "")))] (high:QI (match_operand:QI 1 "symbolic_address_operand" "")))]
"! TARGET_C3X " "! TARGET_C3X && ! TARGET_TI"
"ldhi\\t^%H1,%0" "ldhi\\t^%H1,%0"
[(set_attr "type" "unary")]) [(set_attr "type" "unary")])
...@@ -1117,14 +1117,14 @@ ...@@ -1117,14 +1117,14 @@
[(set (match_operand:QI 0 "std_reg_operand" "=c") [(set (match_operand:QI 0 "std_reg_operand" "=c")
(lo_sum:QI (match_dup 0) (lo_sum:QI (match_dup 0)
(match_operand:QI 1 "symbolic_address_operand" "")))] (match_operand:QI 1 "symbolic_address_operand" "")))]
"" "! TARGET_TI"
"or\\t#%H1,%0" "or\\t#%H1,%0"
[(set_attr "type" "unary")]) [(set_attr "type" "unary")])
(define_split (define_split
[(set (match_operand:QI 0 "std_reg_operand" "") [(set (match_operand:QI 0 "std_reg_operand" "")
(match_operand:QI 1 "symbolic_address_operand" ""))] (match_operand:QI 1 "symbolic_address_operand" ""))]
"! TARGET_C3X" "! TARGET_C3X && ! TARGET_TI"
[(set (match_dup 0) (high:QI (match_dup 1))) [(set (match_dup 0) (high:QI (match_dup 1)))
(set (match_dup 0) (lo_sum:QI (match_dup 0) (match_dup 1)))] (set (match_dup 0) (lo_sum:QI (match_dup 0) (match_dup 1)))]
"") "")
...@@ -1251,7 +1251,8 @@ ...@@ -1251,7 +1251,8 @@
[(set (match_operand:QI 0 "reg_operand" "") [(set (match_operand:QI 0 "reg_operand" "")
(match_operand:QI 1 "symbolic_address_operand" ""))] (match_operand:QI 1 "symbolic_address_operand" ""))]
"! TARGET_SMALL "! TARGET_SMALL
&& (TARGET_C3X || (reload_completed && (TARGET_C3X || TARGET_TI
|| (reload_completed
&& ! std_reg_operand (operands[0], QImode)))" && ! std_reg_operand (operands[0], QImode)))"
[(set (match_dup 2) (high:QI (match_dup 3))) [(set (match_dup 2) (high:QI (match_dup 3)))
(set (match_dup 0) (match_dup 4)) (set (match_dup 0) (match_dup 4))
...@@ -1273,7 +1274,8 @@ ...@@ -1273,7 +1274,8 @@
[(set (match_operand:QI 0 "reg_operand" "") [(set (match_operand:QI 0 "reg_operand" "")
(match_operand:QI 1 "symbolic_address_operand" ""))] (match_operand:QI 1 "symbolic_address_operand" ""))]
"TARGET_SMALL "TARGET_SMALL
&& (TARGET_C3X || (reload_completed && (TARGET_C3X || TARGET_TI
|| (reload_completed
&& ! std_reg_operand (operands[0], QImode)))" && ! std_reg_operand (operands[0], QImode)))"
[(set (match_dup 0) (match_dup 2)) [(set (match_dup 0) (match_dup 2))
(use (match_dup 1))] (use (match_dup 1))]
......
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