diff options
author | Kito Cheng <kito.cheng@gmail.com> | 2018-03-04 16:27:34 +0000 |
---|---|---|
committer | Chung-Ju Wu <jasonwucj@gcc.gnu.org> | 2018-03-04 16:27:34 +0000 |
commit | 32a6f4f4886bdd41db8c2b342316da42e9c5f392 (patch) | |
tree | b6c54673de41634c966103d1f89bc9c25d333fc7 /gcc | |
parent | 264159d28c22a8d6eb35b47b65427654614772b9 (diff) | |
download | gcc-32a6f4f4886bdd41db8c2b342316da42e9c5f392.zip gcc-32a6f4f4886bdd41db8c2b342316da42e9c5f392.tar.gz gcc-32a6f4f4886bdd41db8c2b342316da42e9c5f392.tar.bz2 |
[NDS32] Refine load_multiple and store_multiple.
gcc/
* config/nds32/nds32-protos.h
(nds32_expand_load_multiple): New arguments.
(nds32_expand_store_multiple): Ditto.
(nds32_valid_multiple_load_store): Rename ...
(nds32_valid_multiple_load_store_p): ... to this.
* config/nds32/nds32-memory-manipulation.c
(nds32_expand_load_multiple): Refine implementation.
(nds32_expand_store_multiple): Ditto.
* config/nds32/nds32-multiple.md
(load_multiple): Update nds32_expand_load_multiple interface.
(store_multiple): Update nds32_expand_store_multiple interface.
* config/nds32/nds32-predicates.c
(nds32_valid_multiple_load_store): Rename ...
(nds32_valid_multiple_load_store_p): ... to this and refine
implementation.
* config/nds32/predicates.md
(nds32_load_multiple_and_update_address_operation): New predicate.
(nds32_store_multiple_and_update_address_operation): New predicate.
Co-Authored-By: Chung-Ju Wu <jasonwucj@gmail.com>
Co-Authored-By: Monk Chiang <sh.chiang04@gmail.com>
From-SVN: r258234
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 23 | ||||
-rw-r--r-- | gcc/config/nds32/nds32-memory-manipulation.c | 87 | ||||
-rw-r--r-- | gcc/config/nds32/nds32-multiple.md | 3328 | ||||
-rw-r--r-- | gcc/config/nds32/nds32-predicates.c | 44 | ||||
-rw-r--r-- | gcc/config/nds32/nds32-protos.h | 6 | ||||
-rw-r--r-- | gcc/config/nds32/predicates.md | 22 |
6 files changed, 3487 insertions, 23 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3b9fb4a..c5dffda 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,4 +1,27 @@ 2018-03-04 Kito Cheng <kito.cheng@gmail.com> + Monk Chiang <sh.chiang04@gmail.com> + Chung-Ju Wu <jasonwucj@gmail.com> + + * config/nds32/nds32-protos.h + (nds32_expand_load_multiple): New arguments. + (nds32_expand_store_multiple): Ditto. + (nds32_valid_multiple_load_store): Rename ... + (nds32_valid_multiple_load_store_p): ... to this. + * config/nds32/nds32-memory-manipulation.c + (nds32_expand_load_multiple): Refine implementation. + (nds32_expand_store_multiple): Ditto. + * config/nds32/nds32-multiple.md + (load_multiple): Update nds32_expand_load_multiple interface. + (store_multiple): Update nds32_expand_store_multiple interface. + * config/nds32/nds32-predicates.c + (nds32_valid_multiple_load_store): Rename ... + (nds32_valid_multiple_load_store_p): ... to this and refine + implementation. + * config/nds32/predicates.md + (nds32_load_multiple_and_update_address_operation): New predicate. + (nds32_store_multiple_and_update_address_operation): New predicate. + +2018-03-04 Kito Cheng <kito.cheng@gmail.com> Chung-Ju Wu <jasonwucj@gmail.com> * config/nds32/nds32.md (type): Add load_multiple and store_multiple. diff --git a/gcc/config/nds32/nds32-memory-manipulation.c b/gcc/config/nds32/nds32-memory-manipulation.c index 912a3e3..da01fc6 100644 --- a/gcc/config/nds32/nds32-memory-manipulation.c +++ b/gcc/config/nds32/nds32-memory-manipulation.c @@ -40,16 +40,50 @@ Check nds32-multiple.md file for the patterns. */ rtx nds32_expand_load_multiple (int base_regno, int count, - rtx base_addr, rtx basemem) + rtx base_addr, rtx basemem, + bool update_base_reg_p, + rtx *update_base_reg) { int par_index; int offset; + int start_idx; rtx result; rtx new_addr, mem, reg; + /* Generate a unaligned load to prevent load instruction pull out from + parallel, and then it will generate lwi, and lose unaligned acces */ + if (count == 1) + { + reg = gen_rtx_REG (SImode, base_regno); + if (update_base_reg_p) + { + *update_base_reg = gen_reg_rtx (SImode); + return gen_unaligned_load_update_base_w (*update_base_reg, reg, base_addr); + } + else + return gen_unaligned_load_w (reg, gen_rtx_MEM (SImode, base_addr)); + } + /* Create the pattern that is presented in nds32-multiple.md. */ + if (update_base_reg_p) + { + result = gen_rtx_PARALLEL (VOIDmode, rtvec_alloc (count + 1)); + start_idx = 1; + } + else + { + result = gen_rtx_PARALLEL (VOIDmode, rtvec_alloc (count)); + start_idx = 0; + } + + if (update_base_reg_p) + { + offset = count * 4; + new_addr = plus_constant (Pmode, base_addr, offset); + *update_base_reg = gen_reg_rtx (SImode); - result = gen_rtx_PARALLEL (VOIDmode, rtvec_alloc (count)); + XVECEXP (result, 0, 0) = gen_rtx_SET (*update_base_reg, new_addr); + } for (par_index = 0; par_index < count; par_index++) { @@ -60,7 +94,7 @@ nds32_expand_load_multiple (int base_regno, int count, new_addr, offset); reg = gen_rtx_REG (SImode, base_regno + par_index); - XVECEXP (result, 0, par_index) = gen_rtx_SET (reg, mem); + XVECEXP (result, 0, (par_index + start_idx)) = gen_rtx_SET (reg, mem); } return result; @@ -68,16 +102,49 @@ nds32_expand_load_multiple (int base_regno, int count, rtx nds32_expand_store_multiple (int base_regno, int count, - rtx base_addr, rtx basemem) + rtx base_addr, rtx basemem, + bool update_base_reg_p, + rtx *update_base_reg) { int par_index; int offset; + int start_idx; rtx result; rtx new_addr, mem, reg; + if (count == 1) + { + reg = gen_rtx_REG (SImode, base_regno); + if (update_base_reg_p) + { + *update_base_reg = gen_reg_rtx (SImode); + return gen_unaligned_store_update_base_w (*update_base_reg, base_addr, reg); + } + else + return gen_unaligned_store_w (gen_rtx_MEM (SImode, base_addr), reg); + } + /* Create the pattern that is presented in nds32-multiple.md. */ - result = gen_rtx_PARALLEL (VOIDmode, rtvec_alloc (count)); + if (update_base_reg_p) + { + result = gen_rtx_PARALLEL (VOIDmode, rtvec_alloc (count + 1)); + start_idx = 1; + } + else + { + result = gen_rtx_PARALLEL (VOIDmode, rtvec_alloc (count)); + start_idx = 0; + } + + if (update_base_reg_p) + { + offset = count * 4; + new_addr = plus_constant (Pmode, base_addr, offset); + *update_base_reg = gen_reg_rtx (SImode); + + XVECEXP (result, 0, 0) = gen_rtx_SET (*update_base_reg, new_addr); + } for (par_index = 0; par_index < count; par_index++) { @@ -88,7 +155,7 @@ nds32_expand_store_multiple (int base_regno, int count, new_addr, offset); reg = gen_rtx_REG (SImode, base_regno + par_index); - XVECEXP (result, 0, par_index) = gen_rtx_SET (mem, reg); + XVECEXP (result, 0, par_index + start_idx) = gen_rtx_SET (mem, reg); } return result; @@ -135,8 +202,12 @@ nds32_expand_movmemqi (rtx dstmem, rtx srcmem, rtx total_bytes, rtx alignment) out_words = in_words = INTVAL (total_bytes) / UNITS_PER_WORD; - emit_insn (nds32_expand_load_multiple (0, in_words, src_base_reg, srcmem)); - emit_insn (nds32_expand_store_multiple (0, out_words, dst_base_reg, dstmem)); + emit_insn ( + nds32_expand_load_multiple (0, in_words, src_base_reg, + srcmem, false, NULL)); + emit_insn ( + nds32_expand_store_multiple (0, out_words, dst_base_reg, + dstmem, false, NULL)); /* Successfully create patterns, return 1. */ return 1; diff --git a/gcc/config/nds32/nds32-multiple.md b/gcc/config/nds32/nds32-multiple.md index a16709f..c026591 100644 --- a/gcc/config/nds32/nds32-multiple.md +++ b/gcc/config/nds32/nds32-multiple.md @@ -71,10 +71,1669 @@ INTVAL (operands[2]), force_reg (SImode, XEXP (operands[1], 0)), - operands[1]); + operands[1], + false, NULL); }) ;; Ordinary Load Multiple. +(define_insn "*lmw_bim_si25" + [(match_parallel 0 "nds32_load_multiple_and_update_address_operation" + [(set (match_operand:SI 1 "register_operand" "=r") + (plus:SI (match_operand:SI 2 "register_operand" "1") (const_int 100))) + (set (match_operand:SI 3 "register_operand" "") + (mem:SI (match_dup 2))) + (set (match_operand:SI 4 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 4)))) + (set (match_operand:SI 5 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 8)))) + (set (match_operand:SI 6 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 12)))) + (set (match_operand:SI 7 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 16)))) + (set (match_operand:SI 8 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 20)))) + (set (match_operand:SI 9 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 24)))) + (set (match_operand:SI 10 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 28)))) + (set (match_operand:SI 11 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 32)))) + (set (match_operand:SI 12 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 36)))) + (set (match_operand:SI 13 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 40)))) + (set (match_operand:SI 14 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 44)))) + (set (match_operand:SI 15 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 48)))) + (set (match_operand:SI 16 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 52)))) + (set (match_operand:SI 17 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 56)))) + (set (match_operand:SI 18 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 60)))) + (set (match_operand:SI 19 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 64)))) + (set (match_operand:SI 20 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 68)))) + (set (match_operand:SI 21 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 72)))) + (set (match_operand:SI 22 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 76)))) + (set (match_operand:SI 23 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 80)))) + (set (match_operand:SI 24 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 84)))) + (set (match_operand:SI 25 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 88)))) + (set (match_operand:SI 26 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 92)))) + (set (match_operand:SI 27 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 96))))])] + "(XVECLEN (operands[0], 0) == 26)" + "lmw.bim\t%3, [%1], %27, 0x0" + [(set_attr "type" "load_multiple") + (set_attr "combo" "25") + (set_attr "length" "4")] +) + +(define_insn "*lmw_bim_si24" + [(match_parallel 0 "nds32_load_multiple_and_update_address_operation" + [(set (match_operand:SI 1 "register_operand" "=r") + (plus:SI (match_operand:SI 2 "register_operand" "1") (const_int 96))) + (set (match_operand:SI 3 "register_operand" "") + (mem:SI (match_dup 2))) + (set (match_operand:SI 4 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 4)))) + (set (match_operand:SI 5 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 8)))) + (set (match_operand:SI 6 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 12)))) + (set (match_operand:SI 7 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 16)))) + (set (match_operand:SI 8 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 20)))) + (set (match_operand:SI 9 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 24)))) + (set (match_operand:SI 10 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 28)))) + (set (match_operand:SI 11 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 32)))) + (set (match_operand:SI 12 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 36)))) + (set (match_operand:SI 13 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 40)))) + (set (match_operand:SI 14 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 44)))) + (set (match_operand:SI 15 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 48)))) + (set (match_operand:SI 16 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 52)))) + (set (match_operand:SI 17 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 56)))) + (set (match_operand:SI 18 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 60)))) + (set (match_operand:SI 19 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 64)))) + (set (match_operand:SI 20 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 68)))) + (set (match_operand:SI 21 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 72)))) + (set (match_operand:SI 22 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 76)))) + (set (match_operand:SI 23 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 80)))) + (set (match_operand:SI 24 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 84)))) + (set (match_operand:SI 25 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 88)))) + (set (match_operand:SI 26 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 92))))])] + "(XVECLEN (operands[0], 0) == 25)" + "lmw.bim\t%3, [%1], %26, 0x0" + [(set_attr "type" "load_multiple") + (set_attr "combo" "24") + (set_attr "length" "4")] +) + +(define_insn "*lmw_bim_si23" + [(match_parallel 0 "nds32_load_multiple_and_update_address_operation" + [(set (match_operand:SI 1 "register_operand" "=r") + (plus:SI (match_operand:SI 2 "register_operand" "1") (const_int 92))) + (set (match_operand:SI 3 "register_operand" "") + (mem:SI (match_dup 2))) + (set (match_operand:SI 4 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 4)))) + (set (match_operand:SI 5 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 8)))) + (set (match_operand:SI 6 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 12)))) + (set (match_operand:SI 7 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 16)))) + (set (match_operand:SI 8 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 20)))) + (set (match_operand:SI 9 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 24)))) + (set (match_operand:SI 10 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 28)))) + (set (match_operand:SI 11 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 32)))) + (set (match_operand:SI 12 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 36)))) + (set (match_operand:SI 13 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 40)))) + (set (match_operand:SI 14 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 44)))) + (set (match_operand:SI 15 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 48)))) + (set (match_operand:SI 16 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 52)))) + (set (match_operand:SI 17 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 56)))) + (set (match_operand:SI 18 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 60)))) + (set (match_operand:SI 19 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 64)))) + (set (match_operand:SI 20 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 68)))) + (set (match_operand:SI 21 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 72)))) + (set (match_operand:SI 22 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 76)))) + (set (match_operand:SI 23 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 80)))) + (set (match_operand:SI 24 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 84)))) + (set (match_operand:SI 25 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 88))))])] + "(XVECLEN (operands[0], 0) == 24)" + "lmw.bim\t%3, [%1], %25, 0x0" + [(set_attr "type" "load_multiple") + (set_attr "combo" "23") + (set_attr "length" "4")] +) + +(define_insn "*lmw_bim_si22" + [(match_parallel 0 "nds32_load_multiple_and_update_address_operation" + [(set (match_operand:SI 1 "register_operand" "=r") + (plus:SI (match_operand:SI 2 "register_operand" "1") (const_int 88))) + (set (match_operand:SI 3 "register_operand" "") + (mem:SI (match_dup 2))) + (set (match_operand:SI 4 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 4)))) + (set (match_operand:SI 5 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 8)))) + (set (match_operand:SI 6 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 12)))) + (set (match_operand:SI 7 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 16)))) + (set (match_operand:SI 8 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 20)))) + (set (match_operand:SI 9 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 24)))) + (set (match_operand:SI 10 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 28)))) + (set (match_operand:SI 11 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 32)))) + (set (match_operand:SI 12 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 36)))) + (set (match_operand:SI 13 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 40)))) + (set (match_operand:SI 14 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 44)))) + (set (match_operand:SI 15 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 48)))) + (set (match_operand:SI 16 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 52)))) + (set (match_operand:SI 17 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 56)))) + (set (match_operand:SI 18 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 60)))) + (set (match_operand:SI 19 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 64)))) + (set (match_operand:SI 20 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 68)))) + (set (match_operand:SI 21 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 72)))) + (set (match_operand:SI 22 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 76)))) + (set (match_operand:SI 23 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 80)))) + (set (match_operand:SI 24 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 84))))])] + "(XVECLEN (operands[0], 0) == 23)" + "lmw.bim\t%3, [%1], %24, 0x0" + [(set_attr "type" "load_multiple") + (set_attr "combo" "22") + (set_attr "length" "4")] +) + +(define_insn "*lmw_bim_si21" + [(match_parallel 0 "nds32_load_multiple_and_update_address_operation" + [(set (match_operand:SI 1 "register_operand" "=r") + (plus:SI (match_operand:SI 2 "register_operand" "1") (const_int 84))) + (set (match_operand:SI 3 "register_operand" "") + (mem:SI (match_dup 2))) + (set (match_operand:SI 4 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 4)))) + (set (match_operand:SI 5 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 8)))) + (set (match_operand:SI 6 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 12)))) + (set (match_operand:SI 7 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 16)))) + (set (match_operand:SI 8 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 20)))) + (set (match_operand:SI 9 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 24)))) + (set (match_operand:SI 10 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 28)))) + (set (match_operand:SI 11 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 32)))) + (set (match_operand:SI 12 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 36)))) + (set (match_operand:SI 13 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 40)))) + (set (match_operand:SI 14 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 44)))) + (set (match_operand:SI 15 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 48)))) + (set (match_operand:SI 16 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 52)))) + (set (match_operand:SI 17 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 56)))) + (set (match_operand:SI 18 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 60)))) + (set (match_operand:SI 19 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 64)))) + (set (match_operand:SI 20 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 68)))) + (set (match_operand:SI 21 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 72)))) + (set (match_operand:SI 22 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 76)))) + (set (match_operand:SI 23 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 80))))])] + "(XVECLEN (operands[0], 0) == 22)" + "lmw.bim\t%3, [%1], %23, 0x0" + [(set_attr "type" "load_multiple") + (set_attr "combo" "21") + (set_attr "length" "4")] +) + +(define_insn "*lmw_bim_si20" + [(match_parallel 0 "nds32_load_multiple_and_update_address_operation" + [(set (match_operand:SI 1 "register_operand" "=r") + (plus:SI (match_operand:SI 2 "register_operand" "1") (const_int 80))) + (set (match_operand:SI 3 "register_operand" "") + (mem:SI (match_dup 2))) + (set (match_operand:SI 4 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 4)))) + (set (match_operand:SI 5 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 8)))) + (set (match_operand:SI 6 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 12)))) + (set (match_operand:SI 7 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 16)))) + (set (match_operand:SI 8 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 20)))) + (set (match_operand:SI 9 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 24)))) + (set (match_operand:SI 10 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 28)))) + (set (match_operand:SI 11 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 32)))) + (set (match_operand:SI 12 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 36)))) + (set (match_operand:SI 13 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 40)))) + (set (match_operand:SI 14 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 44)))) + (set (match_operand:SI 15 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 48)))) + (set (match_operand:SI 16 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 52)))) + (set (match_operand:SI 17 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 56)))) + (set (match_operand:SI 18 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 60)))) + (set (match_operand:SI 19 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 64)))) + (set (match_operand:SI 20 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 68)))) + (set (match_operand:SI 21 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 72)))) + (set (match_operand:SI 22 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 76))))])] + "(XVECLEN (operands[0], 0) == 21)" + "lmw.bim\t%3, [%1], %22, 0x0" + [(set_attr "type" "load_multiple") + (set_attr "combo" "20") + (set_attr "length" "4")] +) + +(define_insn "*lmw_bim_si19" + [(match_parallel 0 "nds32_load_multiple_and_update_address_operation" + [(set (match_operand:SI 1 "register_operand" "=r") + (plus:SI (match_operand:SI 2 "register_operand" "1") (const_int 76))) + (set (match_operand:SI 3 "register_operand" "") + (mem:SI (match_dup 2))) + (set (match_operand:SI 4 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 4)))) + (set (match_operand:SI 5 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 8)))) + (set (match_operand:SI 6 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 12)))) + (set (match_operand:SI 7 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 16)))) + (set (match_operand:SI 8 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 20)))) + (set (match_operand:SI 9 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 24)))) + (set (match_operand:SI 10 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 28)))) + (set (match_operand:SI 11 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 32)))) + (set (match_operand:SI 12 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 36)))) + (set (match_operand:SI 13 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 40)))) + (set (match_operand:SI 14 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 44)))) + (set (match_operand:SI 15 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 48)))) + (set (match_operand:SI 16 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 52)))) + (set (match_operand:SI 17 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 56)))) + (set (match_operand:SI 18 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 60)))) + (set (match_operand:SI 19 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 64)))) + (set (match_operand:SI 20 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 68)))) + (set (match_operand:SI 21 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 72))))])] + "(XVECLEN (operands[0], 0) == 20)" + "lmw.bim\t%3, [%1], %21, 0x0" + [(set_attr "type" "load_multiple") + (set_attr "combo" "19") + (set_attr "length" "4")] +) + +(define_insn "*lmw_bim_si18" + [(match_parallel 0 "nds32_load_multiple_and_update_address_operation" + [(set (match_operand:SI 1 "register_operand" "=r") + (plus:SI (match_operand:SI 2 "register_operand" "1") (const_int 72))) + (set (match_operand:SI 3 "register_operand" "") + (mem:SI (match_dup 2))) + (set (match_operand:SI 4 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 4)))) + (set (match_operand:SI 5 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 8)))) + (set (match_operand:SI 6 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 12)))) + (set (match_operand:SI 7 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 16)))) + (set (match_operand:SI 8 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 20)))) + (set (match_operand:SI 9 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 24)))) + (set (match_operand:SI 10 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 28)))) + (set (match_operand:SI 11 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 32)))) + (set (match_operand:SI 12 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 36)))) + (set (match_operand:SI 13 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 40)))) + (set (match_operand:SI 14 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 44)))) + (set (match_operand:SI 15 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 48)))) + (set (match_operand:SI 16 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 52)))) + (set (match_operand:SI 17 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 56)))) + (set (match_operand:SI 18 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 60)))) + (set (match_operand:SI 19 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 64)))) + (set (match_operand:SI 20 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 68))))])] + "(XVECLEN (operands[0], 0) == 19)" + "lmw.bim\t%3, [%1], %20, 0x0" + [(set_attr "type" "load_multiple") + (set_attr "combo" "18") + (set_attr "length" "4")] +) + +(define_insn "*lmw_bim_si17" + [(match_parallel 0 "nds32_load_multiple_and_update_address_operation" + [(set (match_operand:SI 1 "register_operand" "=r") + (plus:SI (match_operand:SI 2 "register_operand" "1") (const_int 68))) + (set (match_operand:SI 3 "register_operand" "") + (mem:SI (match_dup 2))) + (set (match_operand:SI 4 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 4)))) + (set (match_operand:SI 5 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 8)))) + (set (match_operand:SI 6 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 12)))) + (set (match_operand:SI 7 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 16)))) + (set (match_operand:SI 8 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 20)))) + (set (match_operand:SI 9 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 24)))) + (set (match_operand:SI 10 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 28)))) + (set (match_operand:SI 11 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 32)))) + (set (match_operand:SI 12 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 36)))) + (set (match_operand:SI 13 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 40)))) + (set (match_operand:SI 14 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 44)))) + (set (match_operand:SI 15 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 48)))) + (set (match_operand:SI 16 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 52)))) + (set (match_operand:SI 17 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 56)))) + (set (match_operand:SI 18 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 60)))) + (set (match_operand:SI 19 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 64))))])] + "(XVECLEN (operands[0], 0) == 18)" + "lmw.bim\t%3, [%1], %19, 0x0" + [(set_attr "type" "load_multiple") + (set_attr "combo" "17") + (set_attr "length" "4")] +) + +(define_insn "*lmw_bim_si16" + [(match_parallel 0 "nds32_load_multiple_and_update_address_operation" + [(set (match_operand:SI 1 "register_operand" "=r") + (plus:SI (match_operand:SI 2 "register_operand" "1") (const_int 64))) + (set (match_operand:SI 3 "register_operand" "") + (mem:SI (match_dup 2))) + (set (match_operand:SI 4 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 4)))) + (set (match_operand:SI 5 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 8)))) + (set (match_operand:SI 6 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 12)))) + (set (match_operand:SI 7 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 16)))) + (set (match_operand:SI 8 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 20)))) + (set (match_operand:SI 9 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 24)))) + (set (match_operand:SI 10 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 28)))) + (set (match_operand:SI 11 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 32)))) + (set (match_operand:SI 12 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 36)))) + (set (match_operand:SI 13 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 40)))) + (set (match_operand:SI 14 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 44)))) + (set (match_operand:SI 15 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 48)))) + (set (match_operand:SI 16 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 52)))) + (set (match_operand:SI 17 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 56)))) + (set (match_operand:SI 18 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 60))))])] + "(XVECLEN (operands[0], 0) == 17)" + "lmw.bim\t%3, [%1], %18, 0x0" + [(set_attr "type" "load_multiple") + (set_attr "combo" "16") + (set_attr "length" "4")] +) + +(define_insn "*lmw_bim_si15" + [(match_parallel 0 "nds32_load_multiple_and_update_address_operation" + [(set (match_operand:SI 1 "register_operand" "=r") + (plus:SI (match_operand:SI 2 "register_operand" "1") (const_int 60))) + (set (match_operand:SI 3 "register_operand" "") + (mem:SI (match_dup 2))) + (set (match_operand:SI 4 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 4)))) + (set (match_operand:SI 5 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 8)))) + (set (match_operand:SI 6 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 12)))) + (set (match_operand:SI 7 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 16)))) + (set (match_operand:SI 8 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 20)))) + (set (match_operand:SI 9 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 24)))) + (set (match_operand:SI 10 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 28)))) + (set (match_operand:SI 11 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 32)))) + (set (match_operand:SI 12 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 36)))) + (set (match_operand:SI 13 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 40)))) + (set (match_operand:SI 14 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 44)))) + (set (match_operand:SI 15 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 48)))) + (set (match_operand:SI 16 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 52)))) + (set (match_operand:SI 17 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 56))))])] + "(XVECLEN (operands[0], 0) == 16)" + "lmw.bim\t%3, [%1], %17, 0x0" + [(set_attr "type" "load_multiple") + (set_attr "combo" "15") + (set_attr "length" "4")] +) + +(define_insn "*lmw_bim_si14" + [(match_parallel 0 "nds32_load_multiple_and_update_address_operation" + [(set (match_operand:SI 1 "register_operand" "=r") + (plus:SI (match_operand:SI 2 "register_operand" "1") (const_int 56))) + (set (match_operand:SI 3 "register_operand" "") + (mem:SI (match_dup 2))) + (set (match_operand:SI 4 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 4)))) + (set (match_operand:SI 5 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 8)))) + (set (match_operand:SI 6 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 12)))) + (set (match_operand:SI 7 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 16)))) + (set (match_operand:SI 8 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 20)))) + (set (match_operand:SI 9 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 24)))) + (set (match_operand:SI 10 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 28)))) + (set (match_operand:SI 11 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 32)))) + (set (match_operand:SI 12 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 36)))) + (set (match_operand:SI 13 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 40)))) + (set (match_operand:SI 14 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 44)))) + (set (match_operand:SI 15 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 48)))) + (set (match_operand:SI 16 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 52))))])] + "(XVECLEN (operands[0], 0) == 15)" + "lmw.bim\t%3, [%1], %16, 0x0" + [(set_attr "type" "load_multiple") + (set_attr "combo" "14") + (set_attr "length" "4")] +) + +(define_insn "*lmw_bim_si13" + [(match_parallel 0 "nds32_load_multiple_and_update_address_operation" + [(set (match_operand:SI 1 "register_operand" "=r") + (plus:SI (match_operand:SI 2 "register_operand" "1") (const_int 52))) + (set (match_operand:SI 3 "register_operand" "") + (mem:SI (match_dup 2))) + (set (match_operand:SI 4 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 4)))) + (set (match_operand:SI 5 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 8)))) + (set (match_operand:SI 6 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 12)))) + (set (match_operand:SI 7 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 16)))) + (set (match_operand:SI 8 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 20)))) + (set (match_operand:SI 9 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 24)))) + (set (match_operand:SI 10 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 28)))) + (set (match_operand:SI 11 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 32)))) + (set (match_operand:SI 12 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 36)))) + (set (match_operand:SI 13 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 40)))) + (set (match_operand:SI 14 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 44)))) + (set (match_operand:SI 15 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 48))))])] + "(XVECLEN (operands[0], 0) == 14)" + "lmw.bim\t%3, [%1], %15, 0x0" + [(set_attr "type" "load_multiple") + (set_attr "combo" "13") + (set_attr "length" "4")] +) + +(define_insn "*lmw_bim_si12" + [(match_parallel 0 "nds32_load_multiple_and_update_address_operation" + [(set (match_operand:SI 1 "register_operand" "=r") + (plus:SI (match_operand:SI 2 "register_operand" "1") (const_int 48))) + (set (match_operand:SI 3 "register_operand" "") + (mem:SI (match_dup 2))) + (set (match_operand:SI 4 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 4)))) + (set (match_operand:SI 5 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 8)))) + (set (match_operand:SI 6 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 12)))) + (set (match_operand:SI 7 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 16)))) + (set (match_operand:SI 8 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 20)))) + (set (match_operand:SI 9 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 24)))) + (set (match_operand:SI 10 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 28)))) + (set (match_operand:SI 11 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 32)))) + (set (match_operand:SI 12 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 36)))) + (set (match_operand:SI 13 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 40)))) + (set (match_operand:SI 14 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 44))))])] + "(XVECLEN (operands[0], 0) == 13)" + "lmw.bim\t%3, [%1], %14, 0x0" + [(set_attr "type" "load_multiple") + (set_attr "combo" "12") + (set_attr "length" "4")] +) + +(define_insn "*lmw_bim_si11" + [(match_parallel 0 "nds32_load_multiple_and_update_address_operation" + [(set (match_operand:SI 1 "register_operand" "=r") + (plus:SI (match_operand:SI 2 "register_operand" "1") (const_int 44))) + (set (match_operand:SI 3 "register_operand" "") + (mem:SI (match_dup 2))) + (set (match_operand:SI 4 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 4)))) + (set (match_operand:SI 5 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 8)))) + (set (match_operand:SI 6 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 12)))) + (set (match_operand:SI 7 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 16)))) + (set (match_operand:SI 8 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 20)))) + (set (match_operand:SI 9 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 24)))) + (set (match_operand:SI 10 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 28)))) + (set (match_operand:SI 11 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 32)))) + (set (match_operand:SI 12 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 36)))) + (set (match_operand:SI 13 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 40))))])] + "(XVECLEN (operands[0], 0) == 12)" + "lmw.bim\t%3, [%1], %13, 0x0" + [(set_attr "type" "load_multiple") + (set_attr "combo" "11") + (set_attr "length" "4")] +) + +(define_insn "*lmw_bim_si10" + [(match_parallel 0 "nds32_load_multiple_and_update_address_operation" + [(set (match_operand:SI 1 "register_operand" "=r") + (plus:SI (match_operand:SI 2 "register_operand" "1") (const_int 40))) + (set (match_operand:SI 3 "register_operand" "") + (mem:SI (match_dup 2))) + (set (match_operand:SI 4 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 4)))) + (set (match_operand:SI 5 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 8)))) + (set (match_operand:SI 6 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 12)))) + (set (match_operand:SI 7 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 16)))) + (set (match_operand:SI 8 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 20)))) + (set (match_operand:SI 9 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 24)))) + (set (match_operand:SI 10 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 28)))) + (set (match_operand:SI 11 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 32)))) + (set (match_operand:SI 12 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 36))))])] + "(XVECLEN (operands[0], 0) == 11)" + "lmw.bim\t%3, [%1], %12, 0x0" + [(set_attr "type" "load_multiple") + (set_attr "combo" "10") + (set_attr "length" "4")] +) + +(define_insn "*lmw_bim_si9" + [(match_parallel 0 "nds32_load_multiple_and_update_address_operation" + [(set (match_operand:SI 1 "register_operand" "=r") + (plus:SI (match_operand:SI 2 "register_operand" "1") (const_int 36))) + (set (match_operand:SI 3 "register_operand" "") + (mem:SI (match_dup 2))) + (set (match_operand:SI 4 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 4)))) + (set (match_operand:SI 5 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 8)))) + (set (match_operand:SI 6 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 12)))) + (set (match_operand:SI 7 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 16)))) + (set (match_operand:SI 8 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 20)))) + (set (match_operand:SI 9 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 24)))) + (set (match_operand:SI 10 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 28)))) + (set (match_operand:SI 11 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 32))))])] + "(XVECLEN (operands[0], 0) == 10)" + "lmw.bim\t%3, [%1], %11, 0x0" + [(set_attr "type" "load_multiple") + (set_attr "combo" "9") + (set_attr "length" "4")] +) + +(define_insn "*lmw_bim_si8" + [(match_parallel 0 "nds32_load_multiple_and_update_address_operation" + [(set (match_operand:SI 1 "register_operand" "=r") + (plus:SI (match_operand:SI 2 "register_operand" "1") (const_int 32))) + (set (match_operand:SI 3 "register_operand" "") + (mem:SI (match_dup 2))) + (set (match_operand:SI 4 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 4)))) + (set (match_operand:SI 5 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 8)))) + (set (match_operand:SI 6 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 12)))) + (set (match_operand:SI 7 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 16)))) + (set (match_operand:SI 8 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 20)))) + (set (match_operand:SI 9 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 24)))) + (set (match_operand:SI 10 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 28))))])] + "(XVECLEN (operands[0], 0) == 9)" + "lmw.bim\t%3, [%1], %10, 0x0" + [(set_attr "type" "load_multiple") + (set_attr "combo" "8") + (set_attr "length" "4")] +) + +(define_insn "*lmw_bim_si7" + [(match_parallel 0 "nds32_load_multiple_and_update_address_operation" + [(set (match_operand:SI 1 "register_operand" "=r") + (plus:SI (match_operand:SI 2 "register_operand" "1") (const_int 28))) + (set (match_operand:SI 3 "register_operand" "") + (mem:SI (match_dup 2))) + (set (match_operand:SI 4 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 4)))) + (set (match_operand:SI 5 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 8)))) + (set (match_operand:SI 6 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 12)))) + (set (match_operand:SI 7 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 16)))) + (set (match_operand:SI 8 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 20)))) + (set (match_operand:SI 9 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 24))))])] + "(XVECLEN (operands[0], 0) == 8)" + "lmw.bim\t%3, [%1], %9, 0x0" + [(set_attr "type" "load_multiple") + (set_attr "combo" "7") + (set_attr "length" "4")] +) + +(define_insn "*lmw_bim_si6" + [(match_parallel 0 "nds32_load_multiple_and_update_address_operation" + [(set (match_operand:SI 1 "register_operand" "=r") + (plus:SI (match_operand:SI 2 "register_operand" "1") (const_int 24))) + (set (match_operand:SI 3 "register_operand" "") + (mem:SI (match_dup 2))) + (set (match_operand:SI 4 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 4)))) + (set (match_operand:SI 5 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 8)))) + (set (match_operand:SI 6 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 12)))) + (set (match_operand:SI 7 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 16)))) + (set (match_operand:SI 8 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 20))))])] + "(XVECLEN (operands[0], 0) == 7)" + "lmw.bim\t%3, [%1], %8, 0x0" + [(set_attr "type" "load_multiple") + (set_attr "combo" "6") + (set_attr "length" "4")] +) + +(define_insn "*lmw_bim_si5" + [(match_parallel 0 "nds32_load_multiple_and_update_address_operation" + [(set (match_operand:SI 1 "register_operand" "=r") + (plus:SI (match_operand:SI 2 "register_operand" "1") (const_int 20))) + (set (match_operand:SI 3 "register_operand" "") + (mem:SI (match_dup 2))) + (set (match_operand:SI 4 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 4)))) + (set (match_operand:SI 5 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 8)))) + (set (match_operand:SI 6 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 12)))) + (set (match_operand:SI 7 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 16))))])] + "(XVECLEN (operands[0], 0) == 6)" + "lmw.bim\t%3, [%1], %7, 0x0" + [(set_attr "type" "load_multiple") + (set_attr "combo" "5") + (set_attr "length" "4")] +) + +(define_insn "*lmw_bim_si4" + [(match_parallel 0 "nds32_load_multiple_and_update_address_operation" + [(set (match_operand:SI 1 "register_operand" "=r") + (plus:SI (match_operand:SI 2 "register_operand" "1") (const_int 16))) + (set (match_operand:SI 3 "register_operand" "") + (mem:SI (match_dup 2))) + (set (match_operand:SI 4 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 4)))) + (set (match_operand:SI 5 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 8)))) + (set (match_operand:SI 6 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 12))))])] + "(XVECLEN (operands[0], 0) == 5)" + "lmw.bim\t%3, [%1], %6, 0x0" + [(set_attr "type" "load_multiple") + (set_attr "combo" "4") + (set_attr "length" "4")] +) + +(define_insn "*lmw_bim_si3" + [(match_parallel 0 "nds32_load_multiple_and_update_address_operation" + [(set (match_operand:SI 1 "register_operand" "=r") + (plus:SI (match_operand:SI 2 "register_operand" "1") (const_int 12))) + (set (match_operand:SI 3 "register_operand" "") + (mem:SI (match_dup 2))) + (set (match_operand:SI 4 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 4)))) + (set (match_operand:SI 5 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 8))))])] + "(XVECLEN (operands[0], 0) == 4)" + "lmw.bim\t%3, [%1], %5, 0x0" + [(set_attr "type" "load_multiple") + (set_attr "combo" "3") + (set_attr "length" "4")] +) + +(define_insn "*lmw_bim_si2" + [(match_parallel 0 "nds32_load_multiple_and_update_address_operation" + [(set (match_operand:SI 1 "register_operand" "=r") + (plus:SI (match_operand:SI 2 "register_operand" "1") (const_int 8))) + (set (match_operand:SI 3 "register_operand" "") + (mem:SI (match_dup 2))) + (set (match_operand:SI 4 "register_operand" "") + (mem:SI (plus:SI (match_dup 2) (const_int 4))))])] + "(XVECLEN (operands[0], 0) == 3)" + "lmw.bim\t%3, [%1], %4, 0x0" + [(set_attr "type" "load_multiple") + (set_attr "combo" "2") + (set_attr "length" "4")] +) + +(define_expand "unaligned_load_update_base_w" + [(parallel [(set (match_operand:SI 0 "register_operand" "") + (plus:SI (match_operand:SI 2 "register_operand" "") (const_int 4))) + (set (match_operand:SI 1 "register_operand" "") + (unspec:SI [(mem:SI (match_dup 2))] UNSPEC_UALOAD_W))])] + "" +{ + emit_insn (gen_unaligned_load_w (operands[1], gen_rtx_MEM (SImode, operands[2]))); + emit_insn (gen_addsi3 (operands[0], operands[2], gen_int_mode (4, Pmode))); + DONE; +} + [(set_attr "type" "load_multiple") + (set_attr "combo" "1") + (set_attr "length" "4")] +) + +(define_insn "*lmwsi25" + [(match_parallel 0 "nds32_load_multiple_operation" + [(set (match_operand:SI 2 "register_operand" "") + (mem:SI (match_operand:SI 1 "register_operand" "r"))) + (set (match_operand:SI 3 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 4)))) + (set (match_operand:SI 4 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 8)))) + (set (match_operand:SI 5 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 12)))) + (set (match_operand:SI 6 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 16)))) + (set (match_operand:SI 7 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 20)))) + (set (match_operand:SI 8 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 24)))) + (set (match_operand:SI 9 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 28)))) + (set (match_operand:SI 10 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 32)))) + (set (match_operand:SI 11 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 36)))) + (set (match_operand:SI 12 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 40)))) + (set (match_operand:SI 13 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 44)))) + (set (match_operand:SI 14 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 48)))) + (set (match_operand:SI 15 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 52)))) + (set (match_operand:SI 16 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 56)))) + (set (match_operand:SI 17 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 60)))) + (set (match_operand:SI 18 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 64)))) + (set (match_operand:SI 19 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 68)))) + (set (match_operand:SI 20 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 72)))) + (set (match_operand:SI 21 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 76)))) + (set (match_operand:SI 22 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 80)))) + (set (match_operand:SI 23 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 84)))) + (set (match_operand:SI 24 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 88)))) + (set (match_operand:SI 25 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 92)))) + (set (match_operand:SI 26 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 96))))])] + "(XVECLEN (operands[0], 0) == 25)" + "lmw.bi\t%2, [%1], %26, 0x0" + [(set_attr "type" "load_multiple") + (set_attr "combo" "25") + (set_attr "length" "4")] +) + +(define_insn "*lmwsi24" + [(match_parallel 0 "nds32_load_multiple_operation" + [(set (match_operand:SI 2 "register_operand" "") + (mem:SI (match_operand:SI 1 "register_operand" "r"))) + (set (match_operand:SI 3 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 4)))) + (set (match_operand:SI 4 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 8)))) + (set (match_operand:SI 5 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 12)))) + (set (match_operand:SI 6 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 16)))) + (set (match_operand:SI 7 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 20)))) + (set (match_operand:SI 8 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 24)))) + (set (match_operand:SI 9 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 28)))) + (set (match_operand:SI 10 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 32)))) + (set (match_operand:SI 11 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 36)))) + (set (match_operand:SI 12 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 40)))) + (set (match_operand:SI 13 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 44)))) + (set (match_operand:SI 14 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 48)))) + (set (match_operand:SI 15 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 52)))) + (set (match_operand:SI 16 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 56)))) + (set (match_operand:SI 17 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 60)))) + (set (match_operand:SI 18 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 64)))) + (set (match_operand:SI 19 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 68)))) + (set (match_operand:SI 20 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 72)))) + (set (match_operand:SI 21 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 76)))) + (set (match_operand:SI 22 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 80)))) + (set (match_operand:SI 23 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 84)))) + (set (match_operand:SI 24 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 88)))) + (set (match_operand:SI 25 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 92))))])] + "(XVECLEN (operands[0], 0) == 24)" + "lmw.bi\t%2, [%1], %25, 0x0" + [(set_attr "type" "load_multiple") + (set_attr "combo" "24") + (set_attr "length" "4")] +) + +(define_insn "*lmwsi23" + [(match_parallel 0 "nds32_load_multiple_operation" + [(set (match_operand:SI 2 "register_operand" "") + (mem:SI (match_operand:SI 1 "register_operand" "r"))) + (set (match_operand:SI 3 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 4)))) + (set (match_operand:SI 4 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 8)))) + (set (match_operand:SI 5 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 12)))) + (set (match_operand:SI 6 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 16)))) + (set (match_operand:SI 7 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 20)))) + (set (match_operand:SI 8 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 24)))) + (set (match_operand:SI 9 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 28)))) + (set (match_operand:SI 10 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 32)))) + (set (match_operand:SI 11 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 36)))) + (set (match_operand:SI 12 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 40)))) + (set (match_operand:SI 13 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 44)))) + (set (match_operand:SI 14 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 48)))) + (set (match_operand:SI 15 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 52)))) + (set (match_operand:SI 16 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 56)))) + (set (match_operand:SI 17 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 60)))) + (set (match_operand:SI 18 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 64)))) + (set (match_operand:SI 19 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 68)))) + (set (match_operand:SI 20 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 72)))) + (set (match_operand:SI 21 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 76)))) + (set (match_operand:SI 22 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 80)))) + (set (match_operand:SI 23 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 84)))) + (set (match_operand:SI 24 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 88))))])] + "(XVECLEN (operands[0], 0) == 23)" + "lmw.bi\t%2, [%1], %24, 0x0" + [(set_attr "type" "load_multiple") + (set_attr "combo" "23") + (set_attr "length" "4")] +) + +(define_insn "*lmwsi22" + [(match_parallel 0 "nds32_load_multiple_operation" + [(set (match_operand:SI 2 "register_operand" "") + (mem:SI (match_operand:SI 1 "register_operand" "r"))) + (set (match_operand:SI 3 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 4)))) + (set (match_operand:SI 4 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 8)))) + (set (match_operand:SI 5 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 12)))) + (set (match_operand:SI 6 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 16)))) + (set (match_operand:SI 7 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 20)))) + (set (match_operand:SI 8 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 24)))) + (set (match_operand:SI 9 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 28)))) + (set (match_operand:SI 10 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 32)))) + (set (match_operand:SI 11 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 36)))) + (set (match_operand:SI 12 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 40)))) + (set (match_operand:SI 13 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 44)))) + (set (match_operand:SI 14 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 48)))) + (set (match_operand:SI 15 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 52)))) + (set (match_operand:SI 16 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 56)))) + (set (match_operand:SI 17 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 60)))) + (set (match_operand:SI 18 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 64)))) + (set (match_operand:SI 19 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 68)))) + (set (match_operand:SI 20 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 72)))) + (set (match_operand:SI 21 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 76)))) + (set (match_operand:SI 22 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 80)))) + (set (match_operand:SI 23 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 84))))])] + "(XVECLEN (operands[0], 0) == 22)" + "lmw.bi\t%2, [%1], %23, 0x0" + [(set_attr "type" "load_multiple") + (set_attr "combo" "22") + (set_attr "length" "4")] +) + +(define_insn "*lmwsi21" + [(match_parallel 0 "nds32_load_multiple_operation" + [(set (match_operand:SI 2 "register_operand" "") + (mem:SI (match_operand:SI 1 "register_operand" "r"))) + (set (match_operand:SI 3 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 4)))) + (set (match_operand:SI 4 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 8)))) + (set (match_operand:SI 5 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 12)))) + (set (match_operand:SI 6 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 16)))) + (set (match_operand:SI 7 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 20)))) + (set (match_operand:SI 8 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 24)))) + (set (match_operand:SI 9 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 28)))) + (set (match_operand:SI 10 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 32)))) + (set (match_operand:SI 11 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 36)))) + (set (match_operand:SI 12 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 40)))) + (set (match_operand:SI 13 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 44)))) + (set (match_operand:SI 14 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 48)))) + (set (match_operand:SI 15 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 52)))) + (set (match_operand:SI 16 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 56)))) + (set (match_operand:SI 17 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 60)))) + (set (match_operand:SI 18 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 64)))) + (set (match_operand:SI 19 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 68)))) + (set (match_operand:SI 20 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 72)))) + (set (match_operand:SI 21 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 76)))) + (set (match_operand:SI 22 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 80))))])] + "(XVECLEN (operands[0], 0) == 21)" + "lmw.bi\t%2, [%1], %22, 0x0" + [(set_attr "type" "load_multiple") + (set_attr "combo" "21") + (set_attr "length" "4")] +) + +(define_insn "*lmwsi20" + [(match_parallel 0 "nds32_load_multiple_operation" + [(set (match_operand:SI 2 "register_operand" "") + (mem:SI (match_operand:SI 1 "register_operand" "r"))) + (set (match_operand:SI 3 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 4)))) + (set (match_operand:SI 4 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 8)))) + (set (match_operand:SI 5 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 12)))) + (set (match_operand:SI 6 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 16)))) + (set (match_operand:SI 7 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 20)))) + (set (match_operand:SI 8 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 24)))) + (set (match_operand:SI 9 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 28)))) + (set (match_operand:SI 10 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 32)))) + (set (match_operand:SI 11 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 36)))) + (set (match_operand:SI 12 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 40)))) + (set (match_operand:SI 13 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 44)))) + (set (match_operand:SI 14 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 48)))) + (set (match_operand:SI 15 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 52)))) + (set (match_operand:SI 16 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 56)))) + (set (match_operand:SI 17 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 60)))) + (set (match_operand:SI 18 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 64)))) + (set (match_operand:SI 19 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 68)))) + (set (match_operand:SI 20 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 72)))) + (set (match_operand:SI 21 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 76))))])] + "(XVECLEN (operands[0], 0) == 20)" + "lmw.bi\t%2, [%1], %21, 0x0" + [(set_attr "type" "load_multiple") + (set_attr "combo" "20") + (set_attr "length" "4")] +) + +(define_insn "*lmwsi19" + [(match_parallel 0 "nds32_load_multiple_operation" + [(set (match_operand:SI 2 "register_operand" "") + (mem:SI (match_operand:SI 1 "register_operand" "r"))) + (set (match_operand:SI 3 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 4)))) + (set (match_operand:SI 4 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 8)))) + (set (match_operand:SI 5 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 12)))) + (set (match_operand:SI 6 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 16)))) + (set (match_operand:SI 7 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 20)))) + (set (match_operand:SI 8 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 24)))) + (set (match_operand:SI 9 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 28)))) + (set (match_operand:SI 10 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 32)))) + (set (match_operand:SI 11 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 36)))) + (set (match_operand:SI 12 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 40)))) + (set (match_operand:SI 13 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 44)))) + (set (match_operand:SI 14 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 48)))) + (set (match_operand:SI 15 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 52)))) + (set (match_operand:SI 16 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 56)))) + (set (match_operand:SI 17 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 60)))) + (set (match_operand:SI 18 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 64)))) + (set (match_operand:SI 19 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 68)))) + (set (match_operand:SI 20 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 72))))])] + "(XVECLEN (operands[0], 0) == 19)" + "lmw.bi\t%2, [%1], %20, 0x0" + [(set_attr "type" "load_multiple") + (set_attr "combo" "19") + (set_attr "length" "4")] +) + +(define_insn "*lmwsi18" + [(match_parallel 0 "nds32_load_multiple_operation" + [(set (match_operand:SI 2 "register_operand" "") + (mem:SI (match_operand:SI 1 "register_operand" "r"))) + (set (match_operand:SI 3 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 4)))) + (set (match_operand:SI 4 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 8)))) + (set (match_operand:SI 5 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 12)))) + (set (match_operand:SI 6 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 16)))) + (set (match_operand:SI 7 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 20)))) + (set (match_operand:SI 8 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 24)))) + (set (match_operand:SI 9 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 28)))) + (set (match_operand:SI 10 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 32)))) + (set (match_operand:SI 11 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 36)))) + (set (match_operand:SI 12 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 40)))) + (set (match_operand:SI 13 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 44)))) + (set (match_operand:SI 14 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 48)))) + (set (match_operand:SI 15 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 52)))) + (set (match_operand:SI 16 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 56)))) + (set (match_operand:SI 17 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 60)))) + (set (match_operand:SI 18 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 64)))) + (set (match_operand:SI 19 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 68))))])] + "(XVECLEN (operands[0], 0) == 18)" + "lmw.bi\t%2, [%1], %19, 0x0" + [(set_attr "type" "load_multiple") + (set_attr "combo" "18") + (set_attr "length" "4")] +) + +(define_insn "*lmwsi17" + [(match_parallel 0 "nds32_load_multiple_operation" + [(set (match_operand:SI 2 "register_operand" "") + (mem:SI (match_operand:SI 1 "register_operand" "r"))) + (set (match_operand:SI 3 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 4)))) + (set (match_operand:SI 4 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 8)))) + (set (match_operand:SI 5 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 12)))) + (set (match_operand:SI 6 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 16)))) + (set (match_operand:SI 7 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 20)))) + (set (match_operand:SI 8 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 24)))) + (set (match_operand:SI 9 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 28)))) + (set (match_operand:SI 10 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 32)))) + (set (match_operand:SI 11 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 36)))) + (set (match_operand:SI 12 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 40)))) + (set (match_operand:SI 13 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 44)))) + (set (match_operand:SI 14 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 48)))) + (set (match_operand:SI 15 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 52)))) + (set (match_operand:SI 16 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 56)))) + (set (match_operand:SI 17 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 60)))) + (set (match_operand:SI 18 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 64))))])] + "(XVECLEN (operands[0], 0) == 17)" + "lmw.bi\t%2, [%1], %18, 0x0" + [(set_attr "type" "load_multiple") + (set_attr "combo" "17") + (set_attr "length" "4")] +) + +(define_insn "*lmwsi16" + [(match_parallel 0 "nds32_load_multiple_operation" + [(set (match_operand:SI 2 "register_operand" "") + (mem:SI (match_operand:SI 1 "register_operand" "r"))) + (set (match_operand:SI 3 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 4)))) + (set (match_operand:SI 4 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 8)))) + (set (match_operand:SI 5 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 12)))) + (set (match_operand:SI 6 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 16)))) + (set (match_operand:SI 7 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 20)))) + (set (match_operand:SI 8 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 24)))) + (set (match_operand:SI 9 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 28)))) + (set (match_operand:SI 10 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 32)))) + (set (match_operand:SI 11 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 36)))) + (set (match_operand:SI 12 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 40)))) + (set (match_operand:SI 13 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 44)))) + (set (match_operand:SI 14 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 48)))) + (set (match_operand:SI 15 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 52)))) + (set (match_operand:SI 16 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 56)))) + (set (match_operand:SI 17 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 60))))])] + "(XVECLEN (operands[0], 0) == 16)" + "lmw.bi\t%2, [%1], %17, 0x0" + [(set_attr "type" "load_multiple") + (set_attr "combo" "16") + (set_attr "length" "4")] +) + +(define_insn "*lmwsi15" + [(match_parallel 0 "nds32_load_multiple_operation" + [(set (match_operand:SI 2 "register_operand" "") + (mem:SI (match_operand:SI 1 "register_operand" "r"))) + (set (match_operand:SI 3 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 4)))) + (set (match_operand:SI 4 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 8)))) + (set (match_operand:SI 5 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 12)))) + (set (match_operand:SI 6 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 16)))) + (set (match_operand:SI 7 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 20)))) + (set (match_operand:SI 8 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 24)))) + (set (match_operand:SI 9 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 28)))) + (set (match_operand:SI 10 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 32)))) + (set (match_operand:SI 11 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 36)))) + (set (match_operand:SI 12 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 40)))) + (set (match_operand:SI 13 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 44)))) + (set (match_operand:SI 14 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 48)))) + (set (match_operand:SI 15 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 52)))) + (set (match_operand:SI 16 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 56))))])] + "(XVECLEN (operands[0], 0) == 15)" + "lmw.bi\t%2, [%1], %16, 0x0" + [(set_attr "type" "load_multiple") + (set_attr "combo" "15") + (set_attr "length" "4")] +) + +(define_insn "*lmwsi14" + [(match_parallel 0 "nds32_load_multiple_operation" + [(set (match_operand:SI 2 "register_operand" "") + (mem:SI (match_operand:SI 1 "register_operand" "r"))) + (set (match_operand:SI 3 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 4)))) + (set (match_operand:SI 4 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 8)))) + (set (match_operand:SI 5 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 12)))) + (set (match_operand:SI 6 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 16)))) + (set (match_operand:SI 7 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 20)))) + (set (match_operand:SI 8 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 24)))) + (set (match_operand:SI 9 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 28)))) + (set (match_operand:SI 10 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 32)))) + (set (match_operand:SI 11 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 36)))) + (set (match_operand:SI 12 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 40)))) + (set (match_operand:SI 13 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 44)))) + (set (match_operand:SI 14 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 48)))) + (set (match_operand:SI 15 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 52))))])] + "(XVECLEN (operands[0], 0) == 14)" + "lmw.bi\t%2, [%1], %15, 0x0" + [(set_attr "type" "load_multiple") + (set_attr "combo" "14") + (set_attr "length" "4")] +) + +(define_insn "*lmwsi13" + [(match_parallel 0 "nds32_load_multiple_operation" + [(set (match_operand:SI 2 "register_operand" "") + (mem:SI (match_operand:SI 1 "register_operand" "r"))) + (set (match_operand:SI 3 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 4)))) + (set (match_operand:SI 4 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 8)))) + (set (match_operand:SI 5 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 12)))) + (set (match_operand:SI 6 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 16)))) + (set (match_operand:SI 7 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 20)))) + (set (match_operand:SI 8 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 24)))) + (set (match_operand:SI 9 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 28)))) + (set (match_operand:SI 10 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 32)))) + (set (match_operand:SI 11 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 36)))) + (set (match_operand:SI 12 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 40)))) + (set (match_operand:SI 13 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 44)))) + (set (match_operand:SI 14 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 48))))])] + "(XVECLEN (operands[0], 0) == 13)" + "lmw.bi\t%2, [%1], %14, 0x0" + [(set_attr "type" "load_multiple") + (set_attr "combo" "13") + (set_attr "length" "4")] +) + +(define_insn "*lmwsi12" + [(match_parallel 0 "nds32_load_multiple_operation" + [(set (match_operand:SI 2 "register_operand" "") + (mem:SI (match_operand:SI 1 "register_operand" "r"))) + (set (match_operand:SI 3 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 4)))) + (set (match_operand:SI 4 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 8)))) + (set (match_operand:SI 5 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 12)))) + (set (match_operand:SI 6 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 16)))) + (set (match_operand:SI 7 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 20)))) + (set (match_operand:SI 8 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 24)))) + (set (match_operand:SI 9 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 28)))) + (set (match_operand:SI 10 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 32)))) + (set (match_operand:SI 11 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 36)))) + (set (match_operand:SI 12 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 40)))) + (set (match_operand:SI 13 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 44))))])] + "(XVECLEN (operands[0], 0) == 12)" + "lmw.bi\t%2, [%1], %13, 0x0" + [(set_attr "type" "load_multiple") + (set_attr "combo" "12") + (set_attr "length" "4")] +) + +(define_insn "*lmwsi11" + [(match_parallel 0 "nds32_load_multiple_operation" + [(set (match_operand:SI 2 "register_operand" "") + (mem:SI (match_operand:SI 1 "register_operand" "r"))) + (set (match_operand:SI 3 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 4)))) + (set (match_operand:SI 4 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 8)))) + (set (match_operand:SI 5 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 12)))) + (set (match_operand:SI 6 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 16)))) + (set (match_operand:SI 7 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 20)))) + (set (match_operand:SI 8 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 24)))) + (set (match_operand:SI 9 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 28)))) + (set (match_operand:SI 10 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 32)))) + (set (match_operand:SI 11 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 36)))) + (set (match_operand:SI 12 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 40))))])] + "(XVECLEN (operands[0], 0) == 11)" + "lmw.bi\t%2, [%1], %12, 0x0" + [(set_attr "type" "load_multiple") + (set_attr "combo" "11") + (set_attr "length" "4")] +) + +(define_insn "*lmwsi10" + [(match_parallel 0 "nds32_load_multiple_operation" + [(set (match_operand:SI 2 "register_operand" "") + (mem:SI (match_operand:SI 1 "register_operand" "r"))) + (set (match_operand:SI 3 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 4)))) + (set (match_operand:SI 4 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 8)))) + (set (match_operand:SI 5 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 12)))) + (set (match_operand:SI 6 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 16)))) + (set (match_operand:SI 7 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 20)))) + (set (match_operand:SI 8 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 24)))) + (set (match_operand:SI 9 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 28)))) + (set (match_operand:SI 10 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 32)))) + (set (match_operand:SI 11 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 36))))])] + "(XVECLEN (operands[0], 0) == 10)" + "lmw.bi\t%2, [%1], %11, 0x0" + [(set_attr "type" "load_multiple") + (set_attr "combo" "10") + (set_attr "length" "4")] +) + +(define_insn "*lmwsi9" + [(match_parallel 0 "nds32_load_multiple_operation" + [(set (match_operand:SI 2 "register_operand" "") + (mem:SI (match_operand:SI 1 "register_operand" "r"))) + (set (match_operand:SI 3 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 4)))) + (set (match_operand:SI 4 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 8)))) + (set (match_operand:SI 5 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 12)))) + (set (match_operand:SI 6 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 16)))) + (set (match_operand:SI 7 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 20)))) + (set (match_operand:SI 8 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 24)))) + (set (match_operand:SI 9 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 28)))) + (set (match_operand:SI 10 "register_operand" "") + (mem:SI (plus:SI (match_dup 1) (const_int 32))))])] + "(XVECLEN (operands[0], 0) == 9)" + "lmw.bi\t%2, [%1], %10, 0x0" + [(set_attr "type" "load_multiple") + (set_attr "combo" "9") + (set_attr "length" "4")] +) (define_insn "*lmwsi8" [(match_parallel 0 "nds32_load_multiple_operation" @@ -209,7 +1868,6 @@ (set_attr "length" "4")] ) - ;; Store Multiple Insns. ;; ;; operands[0] is the first memory location. @@ -262,10 +1920,1674 @@ INTVAL (operands[2]), force_reg (SImode, XEXP (operands[0], 0)), - operands[0]); + operands[0], + false, NULL); }) ;; Ordinary Store Multiple. +(define_insn "*stm_bim_si25" + [(match_parallel 0 "nds32_store_multiple_and_update_address_operation" + [(set (match_operand:SI 1 "register_operand" "=r") + (plus:SI (match_operand:SI 2 "register_operand" "1") (const_int 100))) + (set (mem:SI (match_dup 2)) + (match_operand:SI 3 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 4))) + (match_operand:SI 4 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 8))) + (match_operand:SI 5 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 12))) + (match_operand:SI 6 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 16))) + (match_operand:SI 7 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 20))) + (match_operand:SI 8 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 24))) + (match_operand:SI 9 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 28))) + (match_operand:SI 10 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 32))) + (match_operand:SI 11 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 36))) + (match_operand:SI 12 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 40))) + (match_operand:SI 13 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 44))) + (match_operand:SI 14 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 48))) + (match_operand:SI 15 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 52))) + (match_operand:SI 16 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 56))) + (match_operand:SI 17 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 60))) + (match_operand:SI 18 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 64))) + (match_operand:SI 19 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 68))) + (match_operand:SI 20 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 72))) + (match_operand:SI 21 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 76))) + (match_operand:SI 22 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 80))) + (match_operand:SI 23 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 84))) + (match_operand:SI 24 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 88))) + (match_operand:SI 25 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 92))) + (match_operand:SI 26 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 96))) + (match_operand:SI 27 "register_operand" ""))])] + "(XVECLEN (operands[0], 0) == 26)" + "smw.bim\t%3, [%1], %27, 0x0" + [(set_attr "type" "store_multiple") + (set_attr "combo" "25") + (set_attr "length" "4")] +) + +(define_insn "*stm_bim_si24" + [(match_parallel 0 "nds32_store_multiple_and_update_address_operation" + [(set (match_operand:SI 1 "register_operand" "=r") + (plus:SI (match_operand:SI 2 "register_operand" "1") (const_int 96))) + (set (mem:SI (match_dup 2)) + (match_operand:SI 3 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 4))) + (match_operand:SI 4 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 8))) + (match_operand:SI 5 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 12))) + (match_operand:SI 6 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 16))) + (match_operand:SI 7 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 20))) + (match_operand:SI 8 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 24))) + (match_operand:SI 9 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 28))) + (match_operand:SI 10 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 32))) + (match_operand:SI 11 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 36))) + (match_operand:SI 12 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 40))) + (match_operand:SI 13 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 44))) + (match_operand:SI 14 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 48))) + (match_operand:SI 15 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 52))) + (match_operand:SI 16 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 56))) + (match_operand:SI 17 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 60))) + (match_operand:SI 18 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 64))) + (match_operand:SI 19 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 68))) + (match_operand:SI 20 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 72))) + (match_operand:SI 21 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 76))) + (match_operand:SI 22 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 80))) + (match_operand:SI 23 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 84))) + (match_operand:SI 24 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 88))) + (match_operand:SI 25 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 92))) + (match_operand:SI 26 "register_operand" ""))])] + "(XVECLEN (operands[0], 0) == 25)" + "smw.bim\t%3, [%1], %26, 0x0" + [(set_attr "type" "store_multiple") + (set_attr "combo" "24") + (set_attr "length" "4")] +) + +(define_insn "*stm_bim_si23" + [(match_parallel 0 "nds32_store_multiple_and_update_address_operation" + [(set (match_operand:SI 1 "register_operand" "=r") + (plus:SI (match_operand:SI 2 "register_operand" "1") (const_int 92))) + (set (mem:SI (match_dup 2)) + (match_operand:SI 3 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 4))) + (match_operand:SI 4 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 8))) + (match_operand:SI 5 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 12))) + (match_operand:SI 6 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 16))) + (match_operand:SI 7 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 20))) + (match_operand:SI 8 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 24))) + (match_operand:SI 9 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 28))) + (match_operand:SI 10 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 32))) + (match_operand:SI 11 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 36))) + (match_operand:SI 12 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 40))) + (match_operand:SI 13 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 44))) + (match_operand:SI 14 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 48))) + (match_operand:SI 15 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 52))) + (match_operand:SI 16 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 56))) + (match_operand:SI 17 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 60))) + (match_operand:SI 18 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 64))) + (match_operand:SI 19 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 68))) + (match_operand:SI 20 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 72))) + (match_operand:SI 21 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 76))) + (match_operand:SI 22 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 80))) + (match_operand:SI 23 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 84))) + (match_operand:SI 24 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 88))) + (match_operand:SI 25 "register_operand" ""))])] + "(XVECLEN (operands[0], 0) == 24)" + "smw.bim\t%3, [%1], %25, 0x0" + [(set_attr "type" "store_multiple") + (set_attr "combo" "23") + (set_attr "length" "4")] +) + +(define_insn "*stm_bim_si22" + [(match_parallel 0 "nds32_store_multiple_and_update_address_operation" + [(set (match_operand:SI 1 "register_operand" "=r") + (plus:SI (match_operand:SI 2 "register_operand" "1") (const_int 88))) + (set (mem:SI (match_dup 2)) + (match_operand:SI 3 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 4))) + (match_operand:SI 4 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 8))) + (match_operand:SI 5 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 12))) + (match_operand:SI 6 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 16))) + (match_operand:SI 7 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 20))) + (match_operand:SI 8 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 24))) + (match_operand:SI 9 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 28))) + (match_operand:SI 10 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 32))) + (match_operand:SI 11 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 36))) + (match_operand:SI 12 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 40))) + (match_operand:SI 13 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 44))) + (match_operand:SI 14 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 48))) + (match_operand:SI 15 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 52))) + (match_operand:SI 16 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 56))) + (match_operand:SI 17 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 60))) + (match_operand:SI 18 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 64))) + (match_operand:SI 19 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 68))) + (match_operand:SI 20 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 72))) + (match_operand:SI 21 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 76))) + (match_operand:SI 22 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 80))) + (match_operand:SI 23 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 84))) + (match_operand:SI 24 "register_operand" ""))])] + "(XVECLEN (operands[0], 0) == 23)" + "smw.bim\t%3, [%1], %24, 0x0" + [(set_attr "type" "store_multiple") + (set_attr "combo" "22") + (set_attr "length" "4")] +) + +(define_insn "*stm_bim_si21" + [(match_parallel 0 "nds32_store_multiple_and_update_address_operation" + [(set (match_operand:SI 1 "register_operand" "=r") + (plus:SI (match_operand:SI 2 "register_operand" "1") (const_int 84))) + (set (mem:SI (match_dup 2)) + (match_operand:SI 3 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 4))) + (match_operand:SI 4 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 8))) + (match_operand:SI 5 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 12))) + (match_operand:SI 6 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 16))) + (match_operand:SI 7 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 20))) + (match_operand:SI 8 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 24))) + (match_operand:SI 9 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 28))) + (match_operand:SI 10 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 32))) + (match_operand:SI 11 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 36))) + (match_operand:SI 12 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 40))) + (match_operand:SI 13 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 44))) + (match_operand:SI 14 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 48))) + (match_operand:SI 15 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 52))) + (match_operand:SI 16 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 56))) + (match_operand:SI 17 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 60))) + (match_operand:SI 18 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 64))) + (match_operand:SI 19 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 68))) + (match_operand:SI 20 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 72))) + (match_operand:SI 21 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 76))) + (match_operand:SI 22 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 80))) + (match_operand:SI 23 "register_operand" ""))])] + "(XVECLEN (operands[0], 0) == 22)" + "smw.bim\t%3, [%1], %23, 0x0" + [(set_attr "type" "store_multiple") + (set_attr "combo" "21") + (set_attr "length" "4")] +) + +(define_insn "*stm_bim_si20" + [(match_parallel 0 "nds32_store_multiple_and_update_address_operation" + [(set (match_operand:SI 1 "register_operand" "=r") + (plus:SI (match_operand:SI 2 "register_operand" "1") (const_int 80))) + (set (mem:SI (match_dup 2)) + (match_operand:SI 3 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 4))) + (match_operand:SI 4 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 8))) + (match_operand:SI 5 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 12))) + (match_operand:SI 6 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 16))) + (match_operand:SI 7 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 20))) + (match_operand:SI 8 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 24))) + (match_operand:SI 9 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 28))) + (match_operand:SI 10 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 32))) + (match_operand:SI 11 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 36))) + (match_operand:SI 12 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 40))) + (match_operand:SI 13 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 44))) + (match_operand:SI 14 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 48))) + (match_operand:SI 15 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 52))) + (match_operand:SI 16 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 56))) + (match_operand:SI 17 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 60))) + (match_operand:SI 18 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 64))) + (match_operand:SI 19 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 68))) + (match_operand:SI 20 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 72))) + (match_operand:SI 21 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 76))) + (match_operand:SI 22 "register_operand" ""))])] + "(XVECLEN (operands[0], 0) == 21)" + "smw.bim\t%3, [%1], %22, 0x0" + [(set_attr "type" "store_multiple") + (set_attr "combo" "20") + (set_attr "length" "4")] +) + +(define_insn "*stm_bim_si19" + [(match_parallel 0 "nds32_store_multiple_and_update_address_operation" + [(set (match_operand:SI 1 "register_operand" "=r") + (plus:SI (match_operand:SI 2 "register_operand" "1") (const_int 76))) + (set (mem:SI (match_dup 2)) + (match_operand:SI 3 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 4))) + (match_operand:SI 4 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 8))) + (match_operand:SI 5 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 12))) + (match_operand:SI 6 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 16))) + (match_operand:SI 7 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 20))) + (match_operand:SI 8 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 24))) + (match_operand:SI 9 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 28))) + (match_operand:SI 10 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 32))) + (match_operand:SI 11 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 36))) + (match_operand:SI 12 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 40))) + (match_operand:SI 13 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 44))) + (match_operand:SI 14 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 48))) + (match_operand:SI 15 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 52))) + (match_operand:SI 16 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 56))) + (match_operand:SI 17 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 60))) + (match_operand:SI 18 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 64))) + (match_operand:SI 19 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 68))) + (match_operand:SI 20 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 72))) + (match_operand:SI 21 "register_operand" ""))])] + "(XVECLEN (operands[0], 0) == 20)" + "smw.bim\t%3, [%1], %21, 0x0" + [(set_attr "type" "store_multiple") + (set_attr "combo" "19") + (set_attr "length" "4")] +) + +(define_insn "*stm_bim_si18" + [(match_parallel 0 "nds32_store_multiple_and_update_address_operation" + [(set (match_operand:SI 1 "register_operand" "=r") + (plus:SI (match_operand:SI 2 "register_operand" "1") (const_int 72))) + (set (mem:SI (match_dup 2)) + (match_operand:SI 3 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 4))) + (match_operand:SI 4 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 8))) + (match_operand:SI 5 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 12))) + (match_operand:SI 6 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 16))) + (match_operand:SI 7 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 20))) + (match_operand:SI 8 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 24))) + (match_operand:SI 9 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 28))) + (match_operand:SI 10 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 32))) + (match_operand:SI 11 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 36))) + (match_operand:SI 12 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 40))) + (match_operand:SI 13 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 44))) + (match_operand:SI 14 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 48))) + (match_operand:SI 15 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 52))) + (match_operand:SI 16 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 56))) + (match_operand:SI 17 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 60))) + (match_operand:SI 18 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 64))) + (match_operand:SI 19 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 68))) + (match_operand:SI 20 "register_operand" ""))])] + "(XVECLEN (operands[0], 0) == 19)" + "smw.bim\t%3, [%1], %20, 0x0" + [(set_attr "type" "store_multiple") + (set_attr "combo" "18") + (set_attr "length" "4")] +) + +(define_insn "*stm_bim_si17" + [(match_parallel 0 "nds32_store_multiple_and_update_address_operation" + [(set (match_operand:SI 1 "register_operand" "=r") + (plus:SI (match_operand:SI 2 "register_operand" "1") (const_int 68))) + (set (mem:SI (match_dup 2)) + (match_operand:SI 3 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 4))) + (match_operand:SI 4 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 8))) + (match_operand:SI 5 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 12))) + (match_operand:SI 6 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 16))) + (match_operand:SI 7 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 20))) + (match_operand:SI 8 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 24))) + (match_operand:SI 9 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 28))) + (match_operand:SI 10 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 32))) + (match_operand:SI 11 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 36))) + (match_operand:SI 12 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 40))) + (match_operand:SI 13 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 44))) + (match_operand:SI 14 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 48))) + (match_operand:SI 15 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 52))) + (match_operand:SI 16 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 56))) + (match_operand:SI 17 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 60))) + (match_operand:SI 18 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 64))) + (match_operand:SI 19 "register_operand" ""))])] + "(XVECLEN (operands[0], 0) == 18)" + "smw.bim\t%3, [%1], %19, 0x0" + [(set_attr "type" "store_multiple") + (set_attr "combo" "17") + (set_attr "length" "4")] +) + +(define_insn "*stm_bim_si16" + [(match_parallel 0 "nds32_store_multiple_and_update_address_operation" + [(set (match_operand:SI 1 "register_operand" "=r") + (plus:SI (match_operand:SI 2 "register_operand" "1") (const_int 64))) + (set (mem:SI (match_dup 2)) + (match_operand:SI 3 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 4))) + (match_operand:SI 4 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 8))) + (match_operand:SI 5 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 12))) + (match_operand:SI 6 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 16))) + (match_operand:SI 7 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 20))) + (match_operand:SI 8 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 24))) + (match_operand:SI 9 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 28))) + (match_operand:SI 10 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 32))) + (match_operand:SI 11 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 36))) + (match_operand:SI 12 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 40))) + (match_operand:SI 13 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 44))) + (match_operand:SI 14 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 48))) + (match_operand:SI 15 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 52))) + (match_operand:SI 16 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 56))) + (match_operand:SI 17 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 60))) + (match_operand:SI 18 "register_operand" ""))])] + "(XVECLEN (operands[0], 0) == 17)" + "smw.bim\t%3, [%1], %18, 0x0" + [(set_attr "type" "store_multiple") + (set_attr "combo" "16") + (set_attr "length" "4")] +) + +(define_insn "*stm_bim_si15" + [(match_parallel 0 "nds32_store_multiple_and_update_address_operation" + [(set (match_operand:SI 1 "register_operand" "=r") + (plus:SI (match_operand:SI 2 "register_operand" "1") (const_int 60))) + (set (mem:SI (match_dup 2)) + (match_operand:SI 3 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 4))) + (match_operand:SI 4 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 8))) + (match_operand:SI 5 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 12))) + (match_operand:SI 6 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 16))) + (match_operand:SI 7 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 20))) + (match_operand:SI 8 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 24))) + (match_operand:SI 9 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 28))) + (match_operand:SI 10 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 32))) + (match_operand:SI 11 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 36))) + (match_operand:SI 12 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 40))) + (match_operand:SI 13 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 44))) + (match_operand:SI 14 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 48))) + (match_operand:SI 15 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 52))) + (match_operand:SI 16 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 56))) + (match_operand:SI 17 "register_operand" ""))])] + "(XVECLEN (operands[0], 0) == 16)" + "smw.bim\t%3, [%1], %17, 0x0" + [(set_attr "type" "store_multiple") + (set_attr "combo" "15") + (set_attr "length" "4")] +) + +(define_insn "*stm_bim_si14" + [(match_parallel 0 "nds32_store_multiple_and_update_address_operation" + [(set (match_operand:SI 1 "register_operand" "=r") + (plus:SI (match_operand:SI 2 "register_operand" "1") (const_int 56))) + (set (mem:SI (match_dup 2)) + (match_operand:SI 3 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 4))) + (match_operand:SI 4 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 8))) + (match_operand:SI 5 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 12))) + (match_operand:SI 6 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 16))) + (match_operand:SI 7 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 20))) + (match_operand:SI 8 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 24))) + (match_operand:SI 9 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 28))) + (match_operand:SI 10 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 32))) + (match_operand:SI 11 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 36))) + (match_operand:SI 12 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 40))) + (match_operand:SI 13 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 44))) + (match_operand:SI 14 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 48))) + (match_operand:SI 15 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 52))) + (match_operand:SI 16 "register_operand" ""))])] + "(XVECLEN (operands[0], 0) == 15)" + "smw.bim\t%3, [%1], %16, 0x0" + [(set_attr "type" "store_multiple") + (set_attr "combo" "14") + (set_attr "length" "4")] +) + +(define_insn "*stm_bim_si13" + [(match_parallel 0 "nds32_store_multiple_and_update_address_operation" + [(set (match_operand:SI 1 "register_operand" "=r") + (plus:SI (match_operand:SI 2 "register_operand" "1") (const_int 52))) + (set (mem:SI (match_dup 2)) + (match_operand:SI 3 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 4))) + (match_operand:SI 4 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 8))) + (match_operand:SI 5 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 12))) + (match_operand:SI 6 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 16))) + (match_operand:SI 7 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 20))) + (match_operand:SI 8 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 24))) + (match_operand:SI 9 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 28))) + (match_operand:SI 10 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 32))) + (match_operand:SI 11 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 36))) + (match_operand:SI 12 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 40))) + (match_operand:SI 13 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 44))) + (match_operand:SI 14 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 48))) + (match_operand:SI 15 "register_operand" ""))])] + "(XVECLEN (operands[0], 0) == 14)" + "smw.bim\t%3, [%1], %15, 0x0" + [(set_attr "type" "store_multiple") + (set_attr "combo" "13") + (set_attr "length" "4")] +) + +(define_insn "*stm_bim_si12" + [(match_parallel 0 "nds32_store_multiple_and_update_address_operation" + [(set (match_operand:SI 1 "register_operand" "=r") + (plus:SI (match_operand:SI 2 "register_operand" "1") (const_int 48))) + (set (mem:SI (match_dup 2)) + (match_operand:SI 3 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 4))) + (match_operand:SI 4 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 8))) + (match_operand:SI 5 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 12))) + (match_operand:SI 6 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 16))) + (match_operand:SI 7 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 20))) + (match_operand:SI 8 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 24))) + (match_operand:SI 9 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 28))) + (match_operand:SI 10 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 32))) + (match_operand:SI 11 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 36))) + (match_operand:SI 12 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 40))) + (match_operand:SI 13 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 44))) + (match_operand:SI 14 "register_operand" ""))])] + "(XVECLEN (operands[0], 0) == 13)" + "smw.bim\t%3, [%1], %14, 0x0" + [(set_attr "type" "store_multiple") + (set_attr "combo" "12") + (set_attr "length" "4")] +) + +(define_insn "*stm_bim_si11" + [(match_parallel 0 "nds32_store_multiple_and_update_address_operation" + [(set (match_operand:SI 1 "register_operand" "=r") + (plus:SI (match_operand:SI 2 "register_operand" "1") (const_int 44))) + (set (mem:SI (match_dup 2)) + (match_operand:SI 3 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 4))) + (match_operand:SI 4 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 8))) + (match_operand:SI 5 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 12))) + (match_operand:SI 6 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 16))) + (match_operand:SI 7 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 20))) + (match_operand:SI 8 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 24))) + (match_operand:SI 9 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 28))) + (match_operand:SI 10 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 32))) + (match_operand:SI 11 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 36))) + (match_operand:SI 12 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 40))) + (match_operand:SI 13 "register_operand" ""))])] + "(XVECLEN (operands[0], 0) == 12)" + "smw.bim\t%3, [%1], %13, 0x0" + [(set_attr "type" "store_multiple") + (set_attr "combo" "11") + (set_attr "length" "4")] +) + +(define_insn "*stm_bim_si10" + [(match_parallel 0 "nds32_store_multiple_and_update_address_operation" + [(set (match_operand:SI 1 "register_operand" "=r") + (plus:SI (match_operand:SI 2 "register_operand" "1") (const_int 40))) + (set (mem:SI (match_dup 2)) + (match_operand:SI 3 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 4))) + (match_operand:SI 4 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 8))) + (match_operand:SI 5 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 12))) + (match_operand:SI 6 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 16))) + (match_operand:SI 7 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 20))) + (match_operand:SI 8 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 24))) + (match_operand:SI 9 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 28))) + (match_operand:SI 10 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 32))) + (match_operand:SI 11 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 36))) + (match_operand:SI 12 "register_operand" ""))])] + "(XVECLEN (operands[0], 0) == 11)" + "smw.bim\t%3, [%1], %12, 0x0" + [(set_attr "type" "store_multiple") + (set_attr "combo" "10") + (set_attr "length" "4")] +) + +(define_insn "*stm_bim_si9" + [(match_parallel 0 "nds32_store_multiple_and_update_address_operation" + [(set (match_operand:SI 1 "register_operand" "=r") + (plus:SI (match_operand:SI 2 "register_operand" "1") (const_int 36))) + (set (mem:SI (match_dup 2)) + (match_operand:SI 3 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 4))) + (match_operand:SI 4 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 8))) + (match_operand:SI 5 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 12))) + (match_operand:SI 6 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 16))) + (match_operand:SI 7 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 20))) + (match_operand:SI 8 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 24))) + (match_operand:SI 9 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 28))) + (match_operand:SI 10 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 32))) + (match_operand:SI 11 "register_operand" ""))])] + "(XVECLEN (operands[0], 0) == 10)" + "smw.bim\t%3, [%1], %11, 0x0" + [(set_attr "type" "store_multiple") + (set_attr "combo" "9") + (set_attr "length" "4")] +) + + +(define_insn "*stm_bim_si8" + [(match_parallel 0 "nds32_store_multiple_and_update_address_operation" + [(set (match_operand:SI 1 "register_operand" "=r") + (plus:SI (match_operand:SI 2 "register_operand" "1") (const_int 32))) + (set (mem:SI (match_dup 2)) + (match_operand:SI 3 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 4))) + (match_operand:SI 4 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 8))) + (match_operand:SI 5 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 12))) + (match_operand:SI 6 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 16))) + (match_operand:SI 7 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 20))) + (match_operand:SI 8 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 24))) + (match_operand:SI 9 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 28))) + (match_operand:SI 10 "register_operand" ""))])] + "(XVECLEN (operands[0], 0) == 9)" + "smw.bim\t%3, [%1], %10, 0x0" + [(set_attr "type" "store_multiple") + (set_attr "combo" "8") + (set_attr "length" "4")] +) + +(define_insn "*stm_bim_si7" + [(match_parallel 0 "nds32_store_multiple_and_update_address_operation" + [(set (match_operand:SI 1 "register_operand" "=r") + (plus:SI (match_operand:SI 2 "register_operand" "1") (const_int 28))) + (set (mem:SI (match_dup 2)) + (match_operand:SI 3 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 4))) + (match_operand:SI 4 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 8))) + (match_operand:SI 5 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 12))) + (match_operand:SI 6 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 16))) + (match_operand:SI 7 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 20))) + (match_operand:SI 8 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 24))) + (match_operand:SI 9 "register_operand" ""))])] + "(XVECLEN (operands[0], 0) == 8)" + "smw.bim\t%3, [%1], %9, 0x0" + [(set_attr "type" "store_multiple") + (set_attr "combo" "7") + (set_attr "length" "4")] +) + +(define_insn "*stm_bim_si6" + [(match_parallel 0 "nds32_store_multiple_and_update_address_operation" + [(set (match_operand:SI 1 "register_operand" "=r") + (plus:SI (match_operand:SI 2 "register_operand" "1") (const_int 24))) + (set (mem:SI (match_dup 2)) + (match_operand:SI 3 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 4))) + (match_operand:SI 4 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 8))) + (match_operand:SI 5 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 12))) + (match_operand:SI 6 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 16))) + (match_operand:SI 7 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 20))) + (match_operand:SI 8 "register_operand" ""))])] + "(XVECLEN (operands[0], 0) == 7)" + "smw.bim\t%3, [%1], %8, 0x0" + [(set_attr "type" "store_multiple") + (set_attr "combo" "6") + (set_attr "length" "4")] +) + +(define_insn "*stm_bim_si5" + [(match_parallel 0 "nds32_store_multiple_and_update_address_operation" + [(set (match_operand:SI 1 "register_operand" "=r") + (plus:SI (match_operand:SI 2 "register_operand" "1") (const_int 20))) + (set (mem:SI (match_dup 2)) + (match_operand:SI 3 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 4))) + (match_operand:SI 4 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 8))) + (match_operand:SI 5 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 12))) + (match_operand:SI 6 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 16))) + (match_operand:SI 7 "register_operand" ""))])] + "(XVECLEN (operands[0], 0) == 6)" + "smw.bim\t%3, [%1], %7, 0x0" + [(set_attr "type" "store_multiple") + (set_attr "combo" "5") + (set_attr "length" "4")] +) + +(define_insn "*stm_bim_si4" + [(match_parallel 0 "nds32_store_multiple_and_update_address_operation" + [(set (match_operand:SI 1 "register_operand" "=r") + (plus:SI (match_operand:SI 2 "register_operand" "1") (const_int 16))) + (set (mem:SI (match_dup 2)) + (match_operand:SI 3 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 4))) + (match_operand:SI 4 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 8))) + (match_operand:SI 5 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 12))) + (match_operand:SI 6 "register_operand" ""))])] + "(XVECLEN (operands[0], 0) == 5)" + "smw.bim\t%3, [%1], %6, 0x0" + [(set_attr "type" "store_multiple") + (set_attr "combo" "4") + (set_attr "length" "4")] +) + +(define_insn "*stm_bim_si3" + [(match_parallel 0 "nds32_store_multiple_and_update_address_operation" + [(set (match_operand:SI 1 "register_operand" "=r") + (plus:SI (match_operand:SI 2 "register_operand" "1") (const_int 12))) + (set (mem:SI (match_dup 2)) + (match_operand:SI 3 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 4))) + (match_operand:SI 4 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 8))) + (match_operand:SI 5 "register_operand" ""))])] + "(XVECLEN (operands[0], 0) == 4)" + "smw.bim\t%3, [%1], %5, 0x0" + [(set_attr "type" "store_multiple") + (set_attr "combo" "3") + (set_attr "length" "4")] +) + +(define_insn "*stm_bim_si2" + [(match_parallel 0 "nds32_store_multiple_and_update_address_operation" + [(set (match_operand:SI 1 "register_operand" "=r") + (plus:SI (match_operand:SI 2 "register_operand" "1") (const_int 8))) + (set (mem:SI (match_dup 2)) + (match_operand:SI 3 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 2) (const_int 4))) + (match_operand:SI 4 "register_operand" ""))])] + "(XVECLEN (operands[0], 0) == 3)" + "smw.bim\t%3, [%1], %4, 0x0" + [(set_attr "type" "store_multiple") + (set_attr "combo" "2") + (set_attr "length" "4")] +) + +(define_expand "unaligned_store_update_base_w" + [(parallel [(set (match_operand:SI 0 "register_operand" "=r") + (plus:SI (match_operand:SI 1 "register_operand" "0") (const_int 4))) + (set (mem:SI (match_dup 1)) + (unspec:SI [(match_operand:SI 2 "register_operand" "r")] UNSPEC_UASTORE_W))])] + "" +{ + emit_insn (gen_unaligned_store_w (gen_rtx_MEM (SImode, operands[1]), operands[2])); + emit_insn (gen_addsi3 (operands[0], operands[1], gen_int_mode (4, Pmode))); + DONE; +} + [(set_attr "type" "store_multiple") + (set_attr "combo" "1") + (set_attr "length" "4")] +) + +(define_insn "*stmsi25" + [(match_parallel 0 "nds32_store_multiple_operation" + [(set (mem:SI (match_operand:SI 1 "register_operand" "r")) + (match_operand:SI 2 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 4))) + (match_operand:SI 3 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 8))) + (match_operand:SI 4 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 12))) + (match_operand:SI 5 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 16))) + (match_operand:SI 6 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 20))) + (match_operand:SI 7 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 24))) + (match_operand:SI 8 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 28))) + (match_operand:SI 9 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 32))) + (match_operand:SI 10 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 36))) + (match_operand:SI 11 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 40))) + (match_operand:SI 12 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 44))) + (match_operand:SI 13 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 48))) + (match_operand:SI 14 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 52))) + (match_operand:SI 15 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 56))) + (match_operand:SI 16 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 60))) + (match_operand:SI 17 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 64))) + (match_operand:SI 18 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 68))) + (match_operand:SI 19 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 72))) + (match_operand:SI 20 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 76))) + (match_operand:SI 21 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 80))) + (match_operand:SI 22 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 84))) + (match_operand:SI 23 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 88))) + (match_operand:SI 24 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 92))) + (match_operand:SI 25 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 96))) + (match_operand:SI 26 "register_operand" ""))])] + "(XVECLEN (operands[0], 0) == 25)" + "smw.bi\t%2, [%1], %26, 0x0" + [(set_attr "type" "store_multiple") + (set_attr "combo" "25") + (set_attr "length" "4")] +) + +(define_insn "*stmsi24" + [(match_parallel 0 "nds32_store_multiple_operation" + [(set (mem:SI (match_operand:SI 1 "register_operand" "r")) + (match_operand:SI 2 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 4))) + (match_operand:SI 3 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 8))) + (match_operand:SI 4 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 12))) + (match_operand:SI 5 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 16))) + (match_operand:SI 6 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 20))) + (match_operand:SI 7 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 24))) + (match_operand:SI 8 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 28))) + (match_operand:SI 9 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 32))) + (match_operand:SI 10 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 36))) + (match_operand:SI 11 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 40))) + (match_operand:SI 12 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 44))) + (match_operand:SI 13 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 48))) + (match_operand:SI 14 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 52))) + (match_operand:SI 15 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 56))) + (match_operand:SI 16 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 60))) + (match_operand:SI 17 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 64))) + (match_operand:SI 18 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 68))) + (match_operand:SI 19 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 72))) + (match_operand:SI 20 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 76))) + (match_operand:SI 21 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 80))) + (match_operand:SI 22 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 84))) + (match_operand:SI 23 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 88))) + (match_operand:SI 24 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 92))) + (match_operand:SI 25 "register_operand" "")) +])] + "(XVECLEN (operands[0], 0) == 24)" + "smw.bi\t%2, [%1], %25, 0x0" + [(set_attr "type" "store_multiple") + (set_attr "combo" "24") + (set_attr "length" "4")] +) + +(define_insn "*stmsi23" + [(match_parallel 0 "nds32_store_multiple_operation" + [(set (mem:SI (match_operand:SI 1 "register_operand" "r")) + (match_operand:SI 2 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 4))) + (match_operand:SI 3 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 8))) + (match_operand:SI 4 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 12))) + (match_operand:SI 5 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 16))) + (match_operand:SI 6 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 20))) + (match_operand:SI 7 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 24))) + (match_operand:SI 8 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 28))) + (match_operand:SI 9 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 32))) + (match_operand:SI 10 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 36))) + (match_operand:SI 11 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 40))) + (match_operand:SI 12 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 44))) + (match_operand:SI 13 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 48))) + (match_operand:SI 14 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 52))) + (match_operand:SI 15 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 56))) + (match_operand:SI 16 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 60))) + (match_operand:SI 17 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 64))) + (match_operand:SI 18 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 68))) + (match_operand:SI 19 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 72))) + (match_operand:SI 20 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 76))) + (match_operand:SI 21 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 80))) + (match_operand:SI 22 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 84))) + (match_operand:SI 23 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 88))) + (match_operand:SI 24 "register_operand" "")) +])] + "(XVECLEN (operands[0], 0) == 23)" + "smw.bi\t%2, [%1], %24, 0x0" + [(set_attr "type" "store_multiple") + (set_attr "combo" "23") + (set_attr "length" "4")] +) + +(define_insn "*stmsi22" + [(match_parallel 0 "nds32_store_multiple_operation" + [(set (mem:SI (match_operand:SI 1 "register_operand" "r")) + (match_operand:SI 2 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 4))) + (match_operand:SI 3 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 8))) + (match_operand:SI 4 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 12))) + (match_operand:SI 5 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 16))) + (match_operand:SI 6 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 20))) + (match_operand:SI 7 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 24))) + (match_operand:SI 8 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 28))) + (match_operand:SI 9 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 32))) + (match_operand:SI 10 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 36))) + (match_operand:SI 11 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 40))) + (match_operand:SI 12 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 44))) + (match_operand:SI 13 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 48))) + (match_operand:SI 14 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 52))) + (match_operand:SI 15 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 56))) + (match_operand:SI 16 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 60))) + (match_operand:SI 17 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 64))) + (match_operand:SI 18 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 68))) + (match_operand:SI 19 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 72))) + (match_operand:SI 20 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 76))) + (match_operand:SI 21 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 80))) + (match_operand:SI 22 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 84))) + (match_operand:SI 23 "register_operand" "")) +])] + "(XVECLEN (operands[0], 0) == 22)" + "smw.bi\t%2, [%1], %23, 0x0" + [(set_attr "type" "store_multiple") + (set_attr "combo" "22") + (set_attr "length" "4")] +) + +(define_insn "*stmsi21" + [(match_parallel 0 "nds32_store_multiple_operation" + [(set (mem:SI (match_operand:SI 1 "register_operand" "r")) + (match_operand:SI 2 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 4))) + (match_operand:SI 3 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 8))) + (match_operand:SI 4 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 12))) + (match_operand:SI 5 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 16))) + (match_operand:SI 6 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 20))) + (match_operand:SI 7 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 24))) + (match_operand:SI 8 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 28))) + (match_operand:SI 9 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 32))) + (match_operand:SI 10 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 36))) + (match_operand:SI 11 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 40))) + (match_operand:SI 12 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 44))) + (match_operand:SI 13 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 48))) + (match_operand:SI 14 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 52))) + (match_operand:SI 15 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 56))) + (match_operand:SI 16 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 60))) + (match_operand:SI 17 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 64))) + (match_operand:SI 18 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 68))) + (match_operand:SI 19 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 72))) + (match_operand:SI 20 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 76))) + (match_operand:SI 21 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 80))) + (match_operand:SI 22 "register_operand" "")) +])] + "(XVECLEN (operands[0], 0) == 21)" + "smw.bi\t%2, [%1], %22, 0x0" + [(set_attr "type" "store_multiple") + (set_attr "combo" "21") + (set_attr "length" "4")] +) + +(define_insn "*stmsi20" + [(match_parallel 0 "nds32_store_multiple_operation" + [(set (mem:SI (match_operand:SI 1 "register_operand" "r")) + (match_operand:SI 2 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 4))) + (match_operand:SI 3 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 8))) + (match_operand:SI 4 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 12))) + (match_operand:SI 5 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 16))) + (match_operand:SI 6 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 20))) + (match_operand:SI 7 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 24))) + (match_operand:SI 8 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 28))) + (match_operand:SI 9 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 32))) + (match_operand:SI 10 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 36))) + (match_operand:SI 11 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 40))) + (match_operand:SI 12 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 44))) + (match_operand:SI 13 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 48))) + (match_operand:SI 14 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 52))) + (match_operand:SI 15 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 56))) + (match_operand:SI 16 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 60))) + (match_operand:SI 17 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 64))) + (match_operand:SI 18 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 68))) + (match_operand:SI 19 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 72))) + (match_operand:SI 20 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 76))) + (match_operand:SI 21 "register_operand" ""))])] + "(XVECLEN (operands[0], 0) == 20)" + "smw.bi\t%2, [%1], %21, 0x0" + [(set_attr "type" "store_multiple") + (set_attr "combo" "20") + (set_attr "length" "4")] +) + +(define_insn "*stmsi19" + [(match_parallel 0 "nds32_store_multiple_operation" + [(set (mem:SI (match_operand:SI 1 "register_operand" "r")) + (match_operand:SI 2 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 4))) + (match_operand:SI 3 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 8))) + (match_operand:SI 4 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 12))) + (match_operand:SI 5 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 16))) + (match_operand:SI 6 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 20))) + (match_operand:SI 7 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 24))) + (match_operand:SI 8 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 28))) + (match_operand:SI 9 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 32))) + (match_operand:SI 10 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 36))) + (match_operand:SI 11 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 40))) + (match_operand:SI 12 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 44))) + (match_operand:SI 13 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 48))) + (match_operand:SI 14 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 52))) + (match_operand:SI 15 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 56))) + (match_operand:SI 16 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 60))) + (match_operand:SI 17 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 64))) + (match_operand:SI 18 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 68))) + (match_operand:SI 19 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 72))) + (match_operand:SI 20 "register_operand" ""))])] + "(XVECLEN (operands[0], 0) == 19)" + "smw.bi\t%2, [%1], %20, 0x0" + [(set_attr "type" "store_multiple") + (set_attr "combo" "19") + (set_attr "length" "4")] +) + +(define_insn "*stmsi18" + [(match_parallel 0 "nds32_store_multiple_operation" + [(set (mem:SI (match_operand:SI 1 "register_operand" "r")) + (match_operand:SI 2 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 4))) + (match_operand:SI 3 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 8))) + (match_operand:SI 4 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 12))) + (match_operand:SI 5 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 16))) + (match_operand:SI 6 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 20))) + (match_operand:SI 7 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 24))) + (match_operand:SI 8 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 28))) + (match_operand:SI 9 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 32))) + (match_operand:SI 10 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 36))) + (match_operand:SI 11 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 40))) + (match_operand:SI 12 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 44))) + (match_operand:SI 13 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 48))) + (match_operand:SI 14 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 52))) + (match_operand:SI 15 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 56))) + (match_operand:SI 16 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 60))) + (match_operand:SI 17 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 64))) + (match_operand:SI 18 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 68))) + (match_operand:SI 19 "register_operand" ""))])] + "(XVECLEN (operands[0], 0) == 18)" + "smw.bi\t%2, [%1], %19, 0x0" + [(set_attr "type" "store_multiple") + (set_attr "combo" "18") + (set_attr "length" "4")] +) + +(define_insn "*stmsi17" + [(match_parallel 0 "nds32_store_multiple_operation" + [(set (mem:SI (match_operand:SI 1 "register_operand" "r")) + (match_operand:SI 2 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 4))) + (match_operand:SI 3 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 8))) + (match_operand:SI 4 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 12))) + (match_operand:SI 5 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 16))) + (match_operand:SI 6 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 20))) + (match_operand:SI 7 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 24))) + (match_operand:SI 8 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 28))) + (match_operand:SI 9 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 32))) + (match_operand:SI 10 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 36))) + (match_operand:SI 11 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 40))) + (match_operand:SI 12 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 44))) + (match_operand:SI 13 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 48))) + (match_operand:SI 14 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 52))) + (match_operand:SI 15 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 56))) + (match_operand:SI 16 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 60))) + (match_operand:SI 17 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 64))) + (match_operand:SI 18 "register_operand" ""))])] + "(XVECLEN (operands[0], 0) == 17)" + "smw.bi\t%2, [%1], %18, 0x0" + [(set_attr "type" "store_multiple") + (set_attr "combo" "17") + (set_attr "length" "4")] +) + +(define_insn "*stmsi16" + [(match_parallel 0 "nds32_store_multiple_operation" + [(set (mem:SI (match_operand:SI 1 "register_operand" "r")) + (match_operand:SI 2 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 4))) + (match_operand:SI 3 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 8))) + (match_operand:SI 4 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 12))) + (match_operand:SI 5 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 16))) + (match_operand:SI 6 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 20))) + (match_operand:SI 7 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 24))) + (match_operand:SI 8 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 28))) + (match_operand:SI 9 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 32))) + (match_operand:SI 10 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 36))) + (match_operand:SI 11 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 40))) + (match_operand:SI 12 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 44))) + (match_operand:SI 13 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 48))) + (match_operand:SI 14 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 52))) + (match_operand:SI 15 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 56))) + (match_operand:SI 16 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 60))) + (match_operand:SI 17 "register_operand" ""))])] + "(XVECLEN (operands[0], 0) == 16)" + "smw.bi\t%2, [%1], %17, 0x0" + [(set_attr "type" "store_multiple") + (set_attr "combo" "16") + (set_attr "length" "4")] +) + +(define_insn "*stmsi15" + [(match_parallel 0 "nds32_store_multiple_operation" + [(set (mem:SI (match_operand:SI 1 "register_operand" "r")) + (match_operand:SI 2 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 4))) + (match_operand:SI 3 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 8))) + (match_operand:SI 4 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 12))) + (match_operand:SI 5 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 16))) + (match_operand:SI 6 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 20))) + (match_operand:SI 7 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 24))) + (match_operand:SI 8 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 28))) + (match_operand:SI 9 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 32))) + (match_operand:SI 10 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 36))) + (match_operand:SI 11 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 40))) + (match_operand:SI 12 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 44))) + (match_operand:SI 13 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 48))) + (match_operand:SI 14 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 52))) + (match_operand:SI 15 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 56))) + (match_operand:SI 16 "register_operand" ""))])] + "(XVECLEN (operands[0], 0) == 15)" + "smw.bi\t%2, [%1], %16, 0x0" + [(set_attr "type" "store_multiple") + (set_attr "combo" "15") + (set_attr "length" "4")] +) + +(define_insn "*stmsi14" + [(match_parallel 0 "nds32_store_multiple_operation" + [(set (mem:SI (match_operand:SI 1 "register_operand" "r")) + (match_operand:SI 2 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 4))) + (match_operand:SI 3 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 8))) + (match_operand:SI 4 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 12))) + (match_operand:SI 5 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 16))) + (match_operand:SI 6 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 20))) + (match_operand:SI 7 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 24))) + (match_operand:SI 8 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 28))) + (match_operand:SI 9 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 32))) + (match_operand:SI 10 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 36))) + (match_operand:SI 11 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 40))) + (match_operand:SI 12 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 44))) + (match_operand:SI 13 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 48))) + (match_operand:SI 14 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 52))) + (match_operand:SI 15 "register_operand" ""))])] + "(XVECLEN (operands[0], 0) == 14)" + "smw.bi\t%2, [%1], %15, 0x0" + [(set_attr "type" "store_multiple") + (set_attr "combo" "14") + (set_attr "length" "4")] +) + +(define_insn "*stmsi13" + [(match_parallel 0 "nds32_store_multiple_operation" + [(set (mem:SI (match_operand:SI 1 "register_operand" "r")) + (match_operand:SI 2 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 4))) + (match_operand:SI 3 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 8))) + (match_operand:SI 4 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 12))) + (match_operand:SI 5 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 16))) + (match_operand:SI 6 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 20))) + (match_operand:SI 7 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 24))) + (match_operand:SI 8 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 28))) + (match_operand:SI 9 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 32))) + (match_operand:SI 10 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 36))) + (match_operand:SI 11 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 40))) + (match_operand:SI 12 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 44))) + (match_operand:SI 13 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 48))) + (match_operand:SI 14 "register_operand" ""))])] + "(XVECLEN (operands[0], 0) == 13)" + "smw.bi\t%2, [%1], %14, 0x0" + [(set_attr "type" "store_multiple") + (set_attr "combo" "13") + (set_attr "length" "4")] +) + +(define_insn "*stmsi12" + [(match_parallel 0 "nds32_store_multiple_operation" + [(set (mem:SI (match_operand:SI 1 "register_operand" "r")) + (match_operand:SI 2 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 4))) + (match_operand:SI 3 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 8))) + (match_operand:SI 4 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 12))) + (match_operand:SI 5 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 16))) + (match_operand:SI 6 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 20))) + (match_operand:SI 7 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 24))) + (match_operand:SI 8 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 28))) + (match_operand:SI 9 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 32))) + (match_operand:SI 10 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 36))) + (match_operand:SI 11 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 40))) + (match_operand:SI 12 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 44))) + (match_operand:SI 13 "register_operand" ""))])] + "(XVECLEN (operands[0], 0) == 12)" + "smw.bi\t%2, [%1], %13, 0x0" + [(set_attr "type" "store_multiple") + (set_attr "combo" "12") + (set_attr "length" "4")] +) + +(define_insn "*stmsi11" + [(match_parallel 0 "nds32_store_multiple_operation" + [(set (mem:SI (match_operand:SI 1 "register_operand" "r")) + (match_operand:SI 2 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 4))) + (match_operand:SI 3 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 8))) + (match_operand:SI 4 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 12))) + (match_operand:SI 5 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 16))) + (match_operand:SI 6 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 20))) + (match_operand:SI 7 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 24))) + (match_operand:SI 8 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 28))) + (match_operand:SI 9 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 32))) + (match_operand:SI 10 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 36))) + (match_operand:SI 11 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 40))) + (match_operand:SI 12 "register_operand" ""))])] + "(XVECLEN (operands[0], 0) == 11)" + "smw.bi\t%2, [%1], %12, 0x0" + [(set_attr "type" "store_multiple") + (set_attr "combo" "11") + (set_attr "length" "4")] +) + +(define_insn "*stmsi10" + [(match_parallel 0 "nds32_store_multiple_operation" + [(set (mem:SI (match_operand:SI 1 "register_operand" "r")) + (match_operand:SI 2 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 4))) + (match_operand:SI 3 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 8))) + (match_operand:SI 4 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 12))) + (match_operand:SI 5 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 16))) + (match_operand:SI 6 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 20))) + (match_operand:SI 7 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 24))) + (match_operand:SI 8 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 28))) + (match_operand:SI 9 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 32))) + (match_operand:SI 10 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 36))) + (match_operand:SI 11 "register_operand" ""))])] + "(XVECLEN (operands[0], 0) == 10)" + "smw.bi\t%2, [%1], %11, 0x0" + [(set_attr "type" "store_multiple") + (set_attr "combo" "10") + (set_attr "length" "4")] +) + +(define_insn "*stmsi9" + [(match_parallel 0 "nds32_store_multiple_operation" + [(set (mem:SI (match_operand:SI 1 "register_operand" "r")) + (match_operand:SI 2 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 4))) + (match_operand:SI 3 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 8))) + (match_operand:SI 4 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 12))) + (match_operand:SI 5 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 16))) + (match_operand:SI 6 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 20))) + (match_operand:SI 7 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 24))) + (match_operand:SI 8 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 28))) + (match_operand:SI 9 "register_operand" "")) + (set (mem:SI (plus:SI (match_dup 1) (const_int 32))) + (match_operand:SI 10 "register_operand" ""))])] + "(XVECLEN (operands[0], 0) == 9)" + "smw.bi\t%2, [%1], %10, 0x0" + [(set_attr "type" "store_multiple") + (set_attr "combo" "9") + (set_attr "length" "4")] +) (define_insn "*stmsi8" [(match_parallel 0 "nds32_store_multiple_operation" diff --git a/gcc/config/nds32/nds32-predicates.c b/gcc/config/nds32/nds32-predicates.c index 341f8b6..c54eefb 100644 --- a/gcc/config/nds32/nds32-predicates.c +++ b/gcc/config/nds32/nds32-predicates.c @@ -101,21 +101,33 @@ nds32_consecutive_registers_load_store_p (rtx op, We have to extract reg and mem of every element and check if the information is valid for multiple load/store operation. */ bool -nds32_valid_multiple_load_store (rtx op, bool load_p) +nds32_valid_multiple_load_store_p (rtx op, bool load_p, bool bim_p) { int count; int first_elt_regno; + int update_base_elt_idx; + int offset; rtx elt; + rtx update_base; - /* Get the counts of elements in the parallel rtx. */ - count = XVECLEN (op, 0); - /* Pick up the first element. */ - elt = XVECEXP (op, 0, 0); + /* Get the counts of elements in the parallel rtx. + Last one is update base register if bim_p. + and pick up the first element. */ + if (bim_p) + { + count = XVECLEN (op, 0) - 1; + elt = XVECEXP (op, 0, 1); + } + else + { + count = XVECLEN (op, 0); + elt = XVECEXP (op, 0, 0); + } /* Perform some quick check for the first element in the parallel rtx. */ if (GET_CODE (elt) != SET || count <= 1 - || count > 8) + || count > 25) return false; /* Pick up regno of first element for further detail checking. @@ -141,11 +153,29 @@ nds32_valid_multiple_load_store (rtx op, bool load_p) Refer to nds32-multiple.md for more information about following checking. The starting element of parallel rtx is index 0. */ - if (!nds32_consecutive_registers_load_store_p (op, load_p, 0, + if (!nds32_consecutive_registers_load_store_p (op, load_p, bim_p ? 1 : 0, first_elt_regno, count)) return false; + if (bim_p) + { + update_base_elt_idx = 0; + update_base = XVECEXP (op, 0, update_base_elt_idx); + if (!REG_P (SET_DEST (update_base))) + return false; + if (GET_CODE (SET_SRC (update_base)) != PLUS) + return false; + else + { + offset = count * UNITS_PER_WORD; + elt = XEXP (SET_SRC (update_base), 1); + if (GET_CODE (elt) != CONST_INT + || (INTVAL (elt) != offset)) + return false; + } + } + /* Pass all test, this is a valid rtx. */ return true; } diff --git a/gcc/config/nds32/nds32-protos.h b/gcc/config/nds32/nds32-protos.h index a8ffb8c..d51d559 100644 --- a/gcc/config/nds32/nds32-protos.h +++ b/gcc/config/nds32/nds32-protos.h @@ -66,8 +66,8 @@ extern bool nds32_valid_smw_lwm_base_p (rtx); /* Auxiliary functions for expanding rtl used in nds32-multiple.md. */ -extern rtx nds32_expand_load_multiple (int, int, rtx, rtx); -extern rtx nds32_expand_store_multiple (int, int, rtx, rtx); +extern rtx nds32_expand_load_multiple (int, int, rtx, rtx, bool, rtx *); +extern rtx nds32_expand_store_multiple (int, int, rtx, rtx, bool, rtx *); extern int nds32_expand_movmemqi (rtx, rtx, rtx, rtx); /* Auxiliary functions for expand unalign load instruction. */ @@ -80,7 +80,7 @@ extern void nds32_expand_unaligned_store (rtx *, enum machine_mode); /* Auxiliary functions for multiple load/store predicate checking. */ -extern bool nds32_valid_multiple_load_store (rtx, bool); +extern bool nds32_valid_multiple_load_store_p (rtx, bool, bool); /* Auxiliary functions for stack operation predicate checking. */ diff --git a/gcc/config/nds32/predicates.md b/gcc/config/nds32/predicates.md index 98db74a8..bff37c7 100644 --- a/gcc/config/nds32/predicates.md +++ b/gcc/config/nds32/predicates.md @@ -66,7 +66,16 @@ { /* To verify 'load' operation, pass 'true' for the second argument. See the implementation in nds32.c for details. */ - return nds32_valid_multiple_load_store (op, true); + return nds32_valid_multiple_load_store_p (op, true, false); +}) + +(define_special_predicate "nds32_load_multiple_and_update_address_operation" + (match_code "parallel") +{ + /* To verify 'load' operation, pass 'true' for the second argument. + to verify 'update address' operation, pass 'true' for the third argument + See the implementation in nds32.c for details. */ + return nds32_valid_multiple_load_store_p (op, true, true); }) (define_special_predicate "nds32_store_multiple_operation" @@ -74,7 +83,16 @@ { /* To verify 'store' operation, pass 'false' for the second argument. See the implementation in nds32.c for details. */ - return nds32_valid_multiple_load_store (op, false); + return nds32_valid_multiple_load_store_p (op, false, false); +}) + +(define_special_predicate "nds32_store_multiple_and_update_address_operation" + (match_code "parallel") +{ + /* To verify 'store' operation, pass 'false' for the second argument, + to verify 'update address' operation, pass 'true' for the third argument + See the implementation in nds32.c for details. */ + return nds32_valid_multiple_load_store_p (op, false, true); }) (define_special_predicate "nds32_stack_push_operation" |