Commit 4911814e by Jim Wilson Committed by Jim Wilson

Fix bitfield insert/extract aliasing problem found by GNAT.

	* mips.md (insv, extzv, extv): Add change_address call.
	(movsi_ulw, movsi_usw): Change QImode to BLKmode in pattern.

From-SVN: r16331
parent 474eff88
Tue Nov 4 16:55:11 1997 Jim Wilson <wilson@cygnus.com> Tue Nov 4 16:55:11 1997 Jim Wilson <wilson@cygnus.com>
* mips.md (insv, extzv, extv): Add change_address call.
(movsi_ulw, movsi_usw): Change QImode to BLKmode in pattern.
* integrate.c (save_for_inline_copying): Copy parm_reg_stack_loc. * integrate.c (save_for_inline_copying): Copy parm_reg_stack_loc.
* reload.c (find_reloads, case 'm' and 'o'): Reject HIGH constants. * reload.c (find_reloads, case 'm' and 'o'): Reject HIGH constants.
......
...@@ -3152,6 +3152,9 @@ move\\t%0,%z4\\n\\ ...@@ -3152,6 +3152,9 @@ move\\t%0,%z4\\n\\
if (GET_CODE (operands[1]) != MEM) if (GET_CODE (operands[1]) != MEM)
FAIL; FAIL;
/* Change the mode to BLKmode for aliasing purposes. */
operands[1] = change_address (operands[1], BLKmode, XEXP (operands[1], 0));
/* Otherwise, emit a lwl/lwr pair to load the value. */ /* Otherwise, emit a lwl/lwr pair to load the value. */
emit_insn (gen_movsi_ulw (operands[0], operands[1])); emit_insn (gen_movsi_ulw (operands[0], operands[1]));
DONE; DONE;
...@@ -3176,6 +3179,9 @@ move\\t%0,%z4\\n\\ ...@@ -3176,6 +3179,9 @@ move\\t%0,%z4\\n\\
if (GET_CODE (operands[1]) != MEM) if (GET_CODE (operands[1]) != MEM)
FAIL; FAIL;
/* Change the mode to BLKmode for aliasing purposes. */
operands[1] = change_address (operands[1], BLKmode, XEXP (operands[1], 0));
/* Otherwise, emit a lwl/lwr pair to load the value. */ /* Otherwise, emit a lwl/lwr pair to load the value. */
emit_insn (gen_movsi_ulw (operands[0], operands[1])); emit_insn (gen_movsi_ulw (operands[0], operands[1]));
DONE; DONE;
...@@ -3200,6 +3206,9 @@ move\\t%0,%z4\\n\\ ...@@ -3200,6 +3206,9 @@ move\\t%0,%z4\\n\\
if (GET_CODE (operands[0]) != MEM) if (GET_CODE (operands[0]) != MEM)
FAIL; FAIL;
/* Change the mode to BLKmode for aliasing purposes. */
operands[0] = change_address (operands[0], BLKmode, XEXP (operands[0], 0));
/* Otherwise, emit a swl/swr pair to load the value. */ /* Otherwise, emit a swl/swr pair to load the value. */
emit_insn (gen_movsi_usw (operands[0], operands[3])); emit_insn (gen_movsi_usw (operands[0], operands[3]));
DONE; DONE;
...@@ -3209,7 +3218,7 @@ move\\t%0,%z4\\n\\ ...@@ -3209,7 +3218,7 @@ move\\t%0,%z4\\n\\
(define_insn "movsi_ulw" (define_insn "movsi_ulw"
[(set (match_operand:SI 0 "register_operand" "=&d,&d") [(set (match_operand:SI 0 "register_operand" "=&d,&d")
(unspec:SI [(match_operand:QI 1 "general_operand" "R,o")] 0))] (unspec:SI [(match_operand:BLK 1 "general_operand" "R,o")] 0))]
"" ""
"* "*
{ {
...@@ -3237,8 +3246,8 @@ move\\t%0,%z4\\n\\ ...@@ -3237,8 +3246,8 @@ move\\t%0,%z4\\n\\
(set_attr "length" "2,4")]) (set_attr "length" "2,4")])
(define_insn "movsi_usw" (define_insn "movsi_usw"
[(set (match_operand:QI 0 "memory_operand" "=R,o") [(set (match_operand:BLK 0 "memory_operand" "=R,o")
(unspec:QI [(match_operand:SI 1 "reg_or_0_operand" "dJ,dJ")] 1))] (unspec:BLK [(match_operand:SI 1 "reg_or_0_operand" "dJ,dJ")] 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