Commit 9dd11dcb by Richard Kenner

(make_field_assignment): Allow XOR in final case.

From-SVN: r11820
parent 7f9ca37e
...@@ -6602,7 +6602,7 @@ make_field_assignment (x) ...@@ -6602,7 +6602,7 @@ make_field_assignment (x)
return x; return x;
} }
/* If SRC is (ior (ashift (const_int 1) POS DEST)), this is a set of a /* If SRC is (ior (ashift (const_int 1) POS) DEST), this is a set of a
one-bit field. */ one-bit field. */
else if (GET_CODE (src) == IOR && GET_CODE (XEXP (src, 0)) == ASHIFT else if (GET_CODE (src) == IOR && GET_CODE (XEXP (src, 0)) == ASHIFT
&& XEXP (XEXP (src, 0), 0) == const1_rtx && XEXP (XEXP (src, 0), 0) == const1_rtx
...@@ -6616,14 +6616,14 @@ make_field_assignment (x) ...@@ -6616,14 +6616,14 @@ make_field_assignment (x)
} }
/* The other case we handle is assignments into a constant-position /* The other case we handle is assignments into a constant-position
field. They look like (ior (and DEST C1) OTHER). If C1 represents field. They look like (ior/xor (and DEST C1) OTHER). If C1 represents
a mask that has all one bits except for a group of zero bits and a mask that has all one bits except for a group of zero bits and
OTHER is known to have zeros where C1 has ones, this is such an OTHER is known to have zeros where C1 has ones, this is such an
assignment. Compute the position and length from C1. Shift OTHER assignment. Compute the position and length from C1. Shift OTHER
to the appropriate position, force it to the required mode, and to the appropriate position, force it to the required mode, and
make the extraction. Check for the AND in both operands. */ make the extraction. Check for the AND in both operands. */
if (GET_CODE (src) != IOR) if (GET_CODE (src) != IOR && GET_CODE (src) != XOR)
return x; return x;
rhs = expand_compound_operation (XEXP (src, 0)); rhs = expand_compound_operation (XEXP (src, 0));
......
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