Commit 10802bee by Segher Boessenkool Committed by Segher Boessenkool

rs6000.c (print_operand): New.

2014-08-17  Segher Boessenkool  <segher@kernel.crashing.org>

	* config/rs6000/rs6000.c (print_operand) <'e'>: New.
	<'u'>: Also support printing the low-order 16 bits.
	* config/rs6000/rs6000.md (iorsi3, xorsi3, *boolsi3_internal1,
	*boolsi3_internal2 and split, *boolsi3_internal3 and split): Delete.
	(iordi3, xordi3, *booldi3_internal1, *booldi3_internal2 and split,
	*booldi3_internal3 and split): Delete.
	(ior<mode>3, xor<mode>3, *bool<mode>3, *bool<mode>3_dot,
	*bool<mode>3_dot2): New.
	(two anonymous define_splits for non_logical_cint_operand): Merge.

From-SVN: r214077
parent 19fe9658
2014-08-17 Segher Boessenkool <segher@kernel.crashing.org>
* config/rs6000/rs6000.c (print_operand) <'e'>: New.
<'u'>: Also support printing the low-order 16 bits.
* config/rs6000/rs6000.md (iorsi3, xorsi3, *boolsi3_internal1,
*boolsi3_internal2 and split, *boolsi3_internal3 and split): Delete.
(iordi3, xordi3, *booldi3_internal1, *booldi3_internal2 and split,
*booldi3_internal3 and split): Delete.
(ior<mode>3, xor<mode>3, *bool<mode>3, *bool<mode>3_dot,
*bool<mode>3_dot2): New.
(two anonymous define_splits for non_logical_cint_operand): Merge.
2014-08-17 Marek Polacek <polacek@redhat.com>
Manuel López-Ibáñez <manu@gcc.gnu.org>
......
......@@ -18044,6 +18044,19 @@ print_operand (FILE *file, rtx x, int code)
fprintf (file, "%d", i + 1);
return;
case 'e':
/* If the low 16 bits are 0, but some other bit is set, write 's'. */
if (! INT_P (x))
{
output_operand_lossage ("invalid %%e value");
return;
}
uval = INTVAL (x);
if ((uval & 0xffff) == 0 && uval != 0)
putc ('s', file);
return;
case 'E':
/* X is a CR register. Print the number of the EQ bit of the CR */
if (GET_CODE (x) != REG || ! CR_REGNO_P (REGNO (x)))
......@@ -18346,12 +18359,19 @@ print_operand (FILE *file, rtx x, int code)
return;
case 'u':
/* High-order 16 bits of constant for use in unsigned operand. */
/* High-order or low-order 16 bits of constant, whichever is non-zero,
for use in unsigned operand. */
if (! INT_P (x))
{
output_operand_lossage ("invalid %%u value");
else
fprintf (file, HOST_WIDE_INT_PRINT_HEX,
(INTVAL (x) >> 16) & 0xffff);
return;
}
uval = INTVAL (x);
if ((uval & 0xffff) == 0)
uval >>= 16;
fprintf (file, HOST_WIDE_INT_PRINT_HEX, uval & 0xffff);
return;
case 'v':
......
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