We have been using store_reg and not store_reg_for_load when writing
back a loaded value into the base register. At first glance this is
incorrect when base == pc, however that case is UNPREDICTABLE.
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Message-id:
20190904193059.26202-32-richard.henderson@linaro.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
list = a->list;
n = ctpop16(list);
- if (n < min_n) {
+ if (n < min_n || a->rn == 15) {
unallocated_encoding(s);
return true;
}
list = a->list;
n = ctpop16(list);
- if (n < min_n) {
+ if (n < min_n || a->rn == 15) {
unallocated_encoding(s);
return true;
}
op_addr_block_post(s, a, addr, n);
if (loaded_base) {
+ /* Note that we reject base == pc above. */
store_reg(s, a->rn, loaded_var);
}