diff options
author | 2013-05-08 15:17:15 +0000 | |
---|---|---|
committer | 2013-05-08 15:17:15 +0000 | |
commit | 6f098b2c5e3a6ba4e5aa1d8297068a80b0f141e8 (patch) | |
tree | b7c247ba24e5d152a14ccef87e0a55165000568a | |
parent | Do not define OBSD_NO_DYNAMIC_LIBRARIES when building an ELF m88k compiler. (diff) | |
download | wireguard-openbsd-6f098b2c5e3a6ba4e5aa1d8297068a80b0f141e8.tar.xz wireguard-openbsd-6f098b2c5e3a6ba4e5aa1d8297068a80b0f141e8.zip |
In block_move_sequence(), use emit_move_insn() instead of rolling our own
incomplete equivalent. The ugly BLK<->{QI,HI,SI,DI} load and store insns in
m88k.md can thus get removed, and there was much rejoicing (as well as fewer
warnings when building).
-rw-r--r-- | gnu/usr.bin/gcc/gcc/config/m88k/m88k.c | 16 | ||||
-rw-r--r-- | gnu/usr.bin/gcc/gcc/config/m88k/m88k.md | 45 |
2 files changed, 4 insertions, 57 deletions
diff --git a/gnu/usr.bin/gcc/gcc/config/m88k/m88k.c b/gnu/usr.bin/gcc/gcc/config/m88k/m88k.c index 9ef505e71de..24c41b7300f 100644 --- a/gnu/usr.bin/gcc/gcc/config/m88k/m88k.c +++ b/gnu/usr.bin/gcc/gcc/config/m88k/m88k.c @@ -738,7 +738,6 @@ block_move_sequence (dest, dest_mem, src, src_mem, size, align, offset) do { - rtx srcp, dstp; next = phase; phase = !phase; @@ -752,11 +751,8 @@ block_move_sequence (dest, dest_mem, src, src_mem, size, align, offset) temp[next] = gen_reg_rtx (mode[next]); } size -= amount[next]; - srcp = gen_rtx_MEM (MEM_IN_STRUCT_P (src_mem) ? mode[next] : BLKmode, - plus_constant (src, offset_ld)); - - MEM_COPY_ATTRIBUTES (srcp, src_mem); - emit_insn (gen_rtx_SET (VOIDmode, temp[next], srcp)); + emit_move_insn (temp[next], + adjust_address (src_mem, mode[next], offset_ld)); offset_ld += amount[next]; active[next] = TRUE; } @@ -764,12 +760,8 @@ block_move_sequence (dest, dest_mem, src, src_mem, size, align, offset) if (active[phase]) { active[phase] = FALSE; - dstp - = gen_rtx_MEM (MEM_IN_STRUCT_P (dest_mem) ? mode[phase] : BLKmode, - plus_constant (dest, offset_st)); - - MEM_COPY_ATTRIBUTES (dstp, dest_mem); - emit_insn (gen_rtx_SET (VOIDmode, dstp, temp[phase])); + emit_move_insn (adjust_address (dest_mem, mode[phase], offset_st), + temp[phase]); offset_st += amount[phase]; } } diff --git a/gnu/usr.bin/gcc/gcc/config/m88k/m88k.md b/gnu/usr.bin/gcc/gcc/config/m88k/m88k.md index 40bd2ef192c..f0dd70b9b4b 100644 --- a/gnu/usr.bin/gcc/gcc/config/m88k/m88k.md +++ b/gnu/usr.bin/gcc/gcc/config/m88k/m88k.md @@ -2180,51 +2180,6 @@ DONE; }") -;; ??? We shouldn't be allowing such mode mismatches -(define_insn "" - [(set (match_operand 0 "register_operand" "=r") - (match_operand:BLK 1 "memory_operand" "m"))] - "" - "* -{ - switch (GET_MODE (operands[0])) - { - case QImode: - return \"%V1ld.bu\\t %0,%1\"; - case HImode: - return \"%V1ld.hu\\t %0,%1\"; - case SImode: - return \"%V1ld\\t %0,%1\"; - case DImode: - return \"%V1ld.d\\t %0,%1\"; - default: - abort (); - } -}" - [(set_attr "type" "load")]) - -(define_insn "" - [(set (match_operand:BLK 0 "memory_operand" "=m") - (match_operand 1 "register_operand" "r"))] - "" - "* -{ - switch (GET_MODE (operands[1])) - { - case QImode: - return \"%v0st.b\\t %1,%0\"; - case HImode: - return \"%v0st.h\\t %1,%0\"; - case SImode: - return \"%v0st\\t %1,%0\"; - case DImode: - return \"%v0st.d\\t %1,%0\"; - default: - abort (); - } -}" - [(set_attr "type" "store")]) - ;; Call a non-looping block move library function (e.g. __movstrSI96x64). ;; operand 0 is the function name ;; operand 1 is the destination pointer |