Hi Fabrice, thank you for commenting on this.
Fabrice Bellard wrote: > Hi, > > The code would be simpler if some intercept tests were done at runtime > in the corresponding helpers (for crN, drN and MSR registers, I/Os). > This is especially true when the existing helpers can return an > exception at runtime. So basically you mean it would be simpler if all the intercepts that can occur in helpers are checked for in helpers? Right now I'm quite glad to have all intercept information in one file (translate.c) and can see if there is an intercept happening just by taking a look at the opcode translation code. I don't know about the program flow simplicity though, so maybe I could change it back to implement all the intercepts that can be done in helpers in the helpers. > Complicating the translator to handle SVM is definitely not the way I > would have handled it. > Complicating in which way? Adding extra flags or adding extra instructions when svm is used? We have to add instructions in cases where the opcode is not handled by a helper or the order of checks is different (e.g. an instruction may only run in cpl 3, but the intercept always occurs). > For I/Os for example, there was already the necessary support to do > runtime tests (see gen_check_io()). Adding one bit to return the > prefix information is all what it needed. The current code is actually > slower because new ops were added for each I/O instruction. This looks good. I will take a look at that one. Thanks, Alex