diff --git a/qemu/target-sparc/translate.c b/qemu/target-sparc/translate.c index a5b39c70..c43bd661 100644 --- a/qemu/target-sparc/translate.c +++ b/qemu/target-sparc/translate.c @@ -5248,7 +5248,8 @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn, bool hook_ins if (IS_IMM) { goto illegal_insn; } - if (!supervisor(dc)) { + /* LEON3 allows CASA from user space with ASI 0xa */ + if ((GET_FIELD(insn, 19, 26) != 0xa) && !supervisor(dc)) { goto priv_insn; } #endif