On 8/29/15 22:50, Peter Maydell wrote: > On 24 August 2015 at 17:17, Richard Henderson <r...@twiddle.net> wrote: > >> + qemu_log_mask(CPU_LOG_TB_IN_ASM, " %" PRIx64 ": { ", dc->pc); >> + if (get_Mode(bundle)) { >> + notice_excp(dc, bundle, "y0", decode_y0(dc, bundle)); >> + qemu_log_mask(CPU_LOG_TB_IN_ASM, " ; "); >> + notice_excp(dc, bundle, "y1", decode_y1(dc, bundle)); >> + qemu_log_mask(CPU_LOG_TB_IN_ASM, " ; "); >> + notice_excp(dc, bundle, "y2", decode_y2(dc, bundle)); >> + } else { >> + notice_excp(dc, bundle, "x0", decode_x0(dc, bundle)); >> + qemu_log_mask(CPU_LOG_TB_IN_ASM, " ; "); >> + notice_excp(dc, bundle, "x1", decode_x1(dc, bundle)); >> + } > > I notice that even if the first insn in a bundle generates an > exception we'll go ahead and generate unreachable code for > the rest. > > I haven't tried to find and compare against any instruction > set documentation, but structurally it looks good, so >
For me, I am not quite sure it is really safe, more explanations are welcomed. And for each bundle, I still suggest to: - buffering dest regs in temp regs for each pipe. - buffering 1st exception information in env for the related pipe. - flush temp regs to dest regs. - gen exception based on the env information. I assumed all exceptions which can still let working flow continue are all in pipe x1 (at present, it should be corret), so it is enough for us to only process 1st exception of bundle. > Reviewed-by: Peter Maydell <peter.mayd...@linaro.org> Thanks. -- Chen Gang Open, share, and attitude like air, water, and life which God blessed