Il gio 19 ott 2023, 19:44 Richard Henderson <richard.hender...@linaro.org> ha scritto:
> On 10/19/23 03:46, Paolo Bonzini wrote: > > + /* > > + * Write back flags after last memory access. Some newer ALU > instructions, as > > + * well as SSE instructions, write flags in the gen_* function, but > that can > > + * cause incorrect tracking of CC_OP for instructions that write to > both memory > > + * and flags. > > + */ > > + if (decode.cc_op != -1) { > > + if (decode.cc_dst) { > > + tcg_gen_mov_tl(cpu_cc_dst, decode.cc_dst); > > + } > > + if (decode.cc_src) { > > + tcg_gen_mov_tl(cpu_cc_src, decode.cc_src); > > + } > > + if (decode.cc_src2) { > > + tcg_gen_mov_tl(cpu_cc_src2, decode.cc_src2); > > + } > > + if (decode.cc_op == CC_OP_DYNAMIC) { > > + tcg_gen_mov_i32(cpu_cc_op, decode.cc_op_dynamic); > > + } else { > > + assert(!decode.cc_op_dynamic); > > + } > > + set_cc_op(s, decode.cc_op); > > + } else { > > + assert(!decode.cc_dst); > > + assert(!decode.cc_src); > > + assert(!decode.cc_src2); > > + assert(!decode.cc_op_dynamic); > > + } > > I suggest you use cc_op_live[] to ensure that each output is present if > USES_CC_* is set, > and absent otherwise. Obviously that's not possible for CC_OP_DYNAMIC, but > for everything else... > I tried but it didn't work very well. I have shuffled things a bit and I don't remember why :) so I will give it another go. Paolo > > r~ > >