diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 1993-12-06 20:55:51 -0500 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 1993-12-06 20:55:51 -0500 |
commit | c3a02afeaec436e35ae59b65fb879c7eb54a0a96 (patch) | |
tree | 5c2d0d24ce633e21aadb01b2664664477a1cb804 /gcc | |
parent | 77fc9313162a36f4936fcc3c81d6e68c27dd1500 (diff) | |
download | gcc-c3a02afeaec436e35ae59b65fb879c7eb54a0a96.zip gcc-c3a02afeaec436e35ae59b65fb879c7eb54a0a96.tar.gz gcc-c3a02afeaec436e35ae59b65fb879c7eb54a0a96.tar.bz2 |
(move_block_{to,from}_reg): Check HAVE_{load,store}_multiple value;
don't just #idef the symbol.
From-SVN: r6192
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/expr.c | 38 |
1 files changed, 22 insertions, 16 deletions
@@ -1573,16 +1573,19 @@ move_block_to_reg (regno, x, nregs, mode) /* See if the machine can do this with a load multiple insn. */ #ifdef HAVE_load_multiple - last = get_last_insn (); - pat = gen_load_multiple (gen_rtx (REG, word_mode, regno), x, - GEN_INT (nregs)); - if (pat) + if (HAVE_load_multiple) { - emit_insn (pat); - return; + last = get_last_insn (); + pat = gen_load_multiple (gen_rtx (REG, word_mode, regno), x, + GEN_INT (nregs)); + if (pat) + { + emit_insn (pat); + return; + } + else + delete_insns_since (last); } - else - delete_insns_since (last); #endif for (i = 0; i < nregs; i++) @@ -1625,16 +1628,19 @@ move_block_from_reg (regno, x, nregs, size) /* See if the machine can do this with a store multiple insn. */ #ifdef HAVE_store_multiple - last = get_last_insn (); - pat = gen_store_multiple (x, gen_rtx (REG, word_mode, regno), - GEN_INT (nregs)); - if (pat) + if (HAVE_store_multiple) { - emit_insn (pat); - return; + last = get_last_insn (); + pat = gen_store_multiple (x, gen_rtx (REG, word_mode, regno), + GEN_INT (nregs)); + if (pat) + { + emit_insn (pat); + return; + } + else + delete_insns_since (last); } - else - delete_insns_since (last); #endif for (i = 0; i < nregs; i++) |