Commit cccf3bdc by David Edelsohn Committed by David Edelsohn

rs6000.c (print_operand, case 'T'): New case.

	* rs6000.c (print_operand, case 'T'): New case.

	* rs6000.md (call_indirect_aix32): Convert to expander of
	scheduled instructions.
	(call_indirect_aix64): Likewise.
	(call_value_indirect_aix{32,64}): Likewise.
	(call, call_value): Invoke expanders for AIX.  Fall through to
	matchers for SysV.
	(call_indirect_nonlocal_aix{32,64}): New patterns (ctr and lr).
	(call_value_indirect_nonlocal_aix{32,64}): New patterns.
	(call_nonlocal_aix32): Remove CALL_LONG alternative.  Operand 1
	only "g" constraint.
	(call_nonlocal_aix64): Likewise.
	(call_value_nonlocal_aix{32,64}): Likewise.
	(call_nonlocal_sysv): New pattern for ctr, lr, and symbolic
	operands.
	(call_value_nonlocal_sysv): New pattern.
	(indirect_jump{si,di}): Use new 'T' modifier.
	(tablejump{si,di} matchers): Likewise.
	(return_internal_{si,di}): Likewise.
	(return_eh_{si,di}): Likewise.

From-SVN: r35246
parent 69b1b291
2000-07-25 David Edelsohn <edelsohn@gnu.org>
* rs6000.c (print_operand, case 'T'): New case.
* rs6000.md (call_indirect_aix32): Convert to expander of
scheduled instructions.
(call_indirect_aix64): Likewise.
(call_value_indirect_aix{32,64}): Likewise.
(call, call_value): Invoke expanders for AIX. Fall through to
matchers for SysV.
(call_indirect_nonlocal_aix{32,64}): New patterns (ctr and lr).
(call_value_indirect_nonlocal_aix{32,64}): New patterns.
(call_nonlocal_aix32): Remove CALL_LONG alternative. Operand 1
only "g" constraint.
(call_nonlocal_aix64): Likewise.
(call_value_nonlocal_aix{32,64}): Likewise.
(call_nonlocal_sysv): New pattern for ctr, lr, and symbolic
operands.
(call_value_nonlocal_sysv): New pattern.
(indirect_jump{si,di}): Use new 'T' modifier.
(tablejump{si,di} matchers): Likewise.
(return_internal_{si,di}): Likewise.
(return_eh_{si,di}): Likewise.
2000-07-24 Richard Henderson <rth@cygnus.com> 2000-07-24 Richard Henderson <rth@cygnus.com>
* config/ia64/ia64.c (ia64_print_operand): Handle "%,". * config/ia64/ia64.c (ia64_print_operand): Handle "%,".
......
...@@ -3984,6 +3984,7 @@ print_operand (file, x, code) ...@@ -3984,6 +3984,7 @@ print_operand (file, x, code)
mask begins at 63 - i from left */ mask begins at 63 - i from left */
if (i > 63) if (i > 63)
output_operand_lossage ("%%S computed all 1's mask"); output_operand_lossage ("%%S computed all 1's mask");
fprintf (file, "%d", 63 - i); fprintf (file, "%d", 63 - i);
return; return;
} }
...@@ -4010,10 +4011,23 @@ print_operand (file, x, code) ...@@ -4010,10 +4011,23 @@ print_operand (file, x, code)
mask ends at 62 - i from left */ mask ends at 62 - i from left */
if (i > 62) if (i > 62)
output_operand_lossage ("%%S computed all 0's mask"); output_operand_lossage ("%%S computed all 0's mask");
fprintf (file, "%d", 62 - i); fprintf (file, "%d", 62 - i);
return; return;
} }
case 'T':
/* Print the symbolic name of a branch target register. */
if (GET_CODE (x) != REG || (REGNO (x) != LINK_REGISTER_REGNUM
&& REGNO (x) != COUNT_REGISTER_REGNUM))
output_operand_lossage ("invalid %%T value");
if (REGNO (x) == LINK_REGISTER_REGNUM)
fputs (TARGET_NEW_MNEMONICS ? "lr" : "r", file);
else
fputs ("ctr", file);
return;
case 'u': case 'u':
/* High-order 16 bits of constant for use in unsigned operand. */ /* High-order 16 bits of constant for use in unsigned operand. */
if (! INT_P (x)) if (! INT_P (x))
......
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