Commit 26967318 by Richard Kenner

(unaligned_{load,store}hi): Clear low bit of address before using as operand to…

(unaligned_{load,store}hi): Clear low bit of address before using as operand to extwl, mskwl, and inswl.

(unaligned_{load,store}hi): Clear low bit of address before using as operand
to extwl, mskwl, and inswl.
(movhi, reload_inhi, reload_outhi): Pass extra scratch value.

From-SVN: r6696
parent 8b2e2b2f
...@@ -2718,10 +2718,12 @@ ...@@ -2718,10 +2718,12 @@
(const_int -7))) (const_int -7)))
(set (match_operand:DI 3 "register_operand" "") (set (match_operand:DI 3 "register_operand" "")
(mem:DI (match_dup 2))) (mem:DI (match_dup 2)))
(set (match_operand:DI 4 "register_operand" "")
(and:DI (match_dup 1) (const_int -2)))
(set (subreg:DI (match_operand:HI 0 "register_operand" "") 0) (set (subreg:DI (match_operand:HI 0 "register_operand" "") 0)
(zero_extract:DI (match_dup 3) (zero_extract:DI (match_dup 3)
(const_int 16) (const_int 16)
(ashift:DI (match_dup 1) (const_int 3))))] (ashift:DI (match_dup 4) (const_int 3))))]
"" ""
"") "")
...@@ -2794,13 +2796,15 @@ ...@@ -2794,13 +2796,15 @@
(and:DI (match_dup 2) (const_int -7))) (and:DI (match_dup 2) (const_int -7)))
(set (match_operand:DI 4 "register_operand" "") (set (match_operand:DI 4 "register_operand" "")
(mem:DI (match_dup 3))) (mem:DI (match_dup 3)))
(set (match_operand:DI 10 "register_operand" "")
(and:DI (match_dup 2) (const_int -2)))
(set (match_operand:DI 5 "register_operand" "") (set (match_operand:DI 5 "register_operand" "")
(and:DI (not:DI (ashift:DI (const_int 65535) (and:DI (not:DI (ashift:DI (const_int 65535)
(ashift:DI (match_dup 2) (const_int 3)))) (ashift:DI (match_dup 10) (const_int 3))))
(match_dup 4))) (match_dup 4)))
(set (match_operand:DI 6 "register_operand" "") (set (match_operand:DI 6 "register_operand" "")
(ashift:DI (zero_extend:DI (match_operand:HI 1 "register_operand" "")) (ashift:DI (zero_extend:DI (match_operand:HI 1 "register_operand" ""))
(ashift:DI (match_dup 2) (const_int 3)))) (ashift:DI (match_dup 10) (const_int 3))))
(set (match_operand:DI 7 "register_operand" "") (set (match_operand:DI 7 "register_operand" "")
(ior:DI (match_dup 5) (match_dup 6))) (ior:DI (match_dup 5) (match_dup 6)))
(set (match_operand:DI 8 "register_operand" "") (match_dup 0)) (set (match_operand:DI 8 "register_operand" "") (match_dup 0))
...@@ -2948,8 +2952,10 @@ ...@@ -2948,8 +2952,10 @@
NULL_RTX)); NULL_RTX));
rtx scratch1 = gen_reg_rtx (DImode); rtx scratch1 = gen_reg_rtx (DImode);
rtx scratch2 = gen_reg_rtx (DImode); rtx scratch2 = gen_reg_rtx (DImode);
rtx scratch3 = gen_reg_rtx (DImode);
rtx seq = gen_unaligned_loadhi (operands[0], addr, scratch1, rtx seq = gen_unaligned_loadhi (operands[0], addr, scratch1,
scratch2); scratch2, scratch3);
alpha_set_memflags (seq, operands[1]); alpha_set_memflags (seq, operands[1]);
emit_insn (seq); emit_insn (seq);
...@@ -2988,9 +2994,12 @@ ...@@ -2988,9 +2994,12 @@
rtx temp6 = gen_reg_rtx (DImode); rtx temp6 = gen_reg_rtx (DImode);
rtx temp7 = gen_reg_rtx (DImode); rtx temp7 = gen_reg_rtx (DImode);
rtx temp8 = gen_reg_rtx (DImode); rtx temp8 = gen_reg_rtx (DImode);
rtx temp9 = gen_reg_rtx (DImode);
rtx seq = gen_unaligned_storehi (get_unaligned_address (operands[0]), rtx seq = gen_unaligned_storehi (get_unaligned_address (operands[0]),
operands[1], temp1, temp2,temp3, operands[1], temp1, temp2,temp3,
temp4, temp5, temp6,temp7, temp8); temp4, temp5, temp6,temp7,
temp8, temp9);
alpha_set_memflags (seq, operands[0]); alpha_set_memflags (seq, operands[0]);
emit_insn (seq); emit_insn (seq);
...@@ -3038,7 +3047,7 @@ ...@@ -3038,7 +3047,7 @@
addr = scratch2; addr = scratch2;
} }
seq = gen_unaligned_loadhi (operands[0], addr, scratch1, scratch1); seq = gen_unaligned_loadhi (operands[0], addr, scratch1, scratch1, scratch2);
alpha_set_memflags (seq, operands[1]); alpha_set_memflags (seq, operands[1]);
emit_insn (seq); emit_insn (seq);
DONE; DONE;
...@@ -3112,7 +3121,7 @@ ...@@ -3112,7 +3121,7 @@
seq = gen_unaligned_storehi (addr, operands[1], scratch_a, seq = gen_unaligned_storehi (addr, operands[1], scratch_a,
scratch2, scratch2, scratch2, scratch2, scratch2, scratch2,
scratch1, scratch2, scratch_a, scratch1, scratch2, scratch_a,
scratch1); scratch1, scratch_a);
alpha_set_memflags (seq, operands[0]); alpha_set_memflags (seq, operands[0]);
emit_insn (seq); emit_insn (seq);
} }
......
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