OSDN Git Service

(unaligned_{load,store}hi): Clear low bit of address before using as operand
authorkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 5 Mar 1994 21:27:45 +0000 (21:27 +0000)
committerkenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 5 Mar 1994 21:27:45 +0000 (21:27 +0000)
to extwl, mskwl, and inswl.
(movhi, reload_inhi, reload_outhi): Pass extra scratch value.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@6696 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/config/alpha/alpha.md

index 13dcdd7..bf56286 100644 (file)
                (const_int -7)))
    (set (match_operand:DI 3 "register_operand" "")
        (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)
        (zero_extract:DI (match_dup 3)
                         (const_int 16)
-                        (ashift:DI (match_dup 1) (const_int 3))))]
+                        (ashift:DI (match_dup 4) (const_int 3))))]
   ""
   "")
        
        (and:DI (match_dup 2) (const_int -7)))
    (set (match_operand:DI 4 "register_operand" "")
        (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" "")
        (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)))
    (set (match_operand:DI 6 "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" "")
        (ior:DI (match_dup 5) (match_dup 6)))
    (set (match_operand:DI 8 "register_operand" "") (match_dup 0))
                                        NULL_RTX));
          rtx scratch1 = 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,
-                                         scratch2);
+                                         scratch2, scratch3);
 
          alpha_set_memflags (seq, operands[1]);
          emit_insn (seq);
          rtx temp6 = gen_reg_rtx (DImode);
          rtx temp7 = 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]),
                                           operands[1], temp1, temp2,temp3,
-                                          temp4, temp5, temp6,temp7, temp8);
+                                          temp4, temp5, temp6,temp7,
+                                          temp8, temp9);
 
          alpha_set_memflags (seq, operands[0]);
          emit_insn (seq);
       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]);
   emit_insn (seq);
   DONE;
       seq = gen_unaligned_storehi (addr, operands[1], scratch_a,
                                   scratch2, scratch2, scratch2,
                                   scratch1, scratch2, scratch_a,
-                                  scratch1);
+                                  scratch1, scratch_a);
       alpha_set_memflags (seq, operands[0]);
       emit_insn (seq);
     }