Revision 5856d44e

b/target-arm/translate.c
8016 8016
                    }
8017 8017
                }
8018 8018
            } else {
8019
                int i;
8019
                int i, loaded_base = 0;
8020
                TCGv loaded_var;
8020 8021
                /* Load/store multiple.  */
8021 8022
                addr = load_reg(s, rn);
8022 8023
                offset = 0;
......
8028 8029
                    tcg_gen_addi_i32(addr, addr, -offset);
8029 8030
                }
8030 8031

  
8032
                TCGV_UNUSED(loaded_var);
8031 8033
                for (i = 0; i < 16; i++) {
8032 8034
                    if ((insn & (1 << i)) == 0)
8033 8035
                        continue;
......
8036 8038
                        tmp = gen_ld32(addr, IS_USER(s));
8037 8039
                        if (i == 15) {
8038 8040
                            gen_bx(s, tmp);
8041
                        } else if (i == rn) {
8042
                            loaded_var = tmp;
8043
                            loaded_base = 1;
8039 8044
                        } else {
8040 8045
                            store_reg(s, i, tmp);
8041 8046
                        }
......
8046 8051
                    }
8047 8052
                    tcg_gen_addi_i32(addr, addr, 4);
8048 8053
                }
8054
                if (loaded_base) {
8055
                    store_reg(s, rn, loaded_var);
8056
                }
8049 8057
                if (insn & (1 << 21)) {
8050 8058
                    /* Base register writeback.  */
8051 8059
                    if (insn & (1 << 24)) {

Also available in: Unified diff