On 23.10.2015 00:28, Peter Maydell wrote: > On 22 October 2015 at 19:28, Sergey Fedorov <serge.f...@gmail.com> wrote: >> Hi all, >> >> I am trying to understand what the difference should be between >> DISAS_JUMP and DISAS_UPDATE. Actually, these macros have comments in >> include/exec/exec-all.h which say that DISAS_JUMP should be used when >> only PC was modified dynamically whereas DISAS_UPDATE should be used >> when some other CPU state was (in addition to PC?) modified dynamically. >> In fact, every target except ARM AArch64 does not distinguish between >> them. As I can see ARM AArch64 seems to suppose that: (1) PC was not >> modified when DISAS_UPDATE is used and should be updated with dc->pc >> when finishing translation; (2) DISAS_JUMP can be used to indicate that >> a new PC value was set and it should be preserved when finishing >> translation. > As Richard says, (a) the semantics for these values are really > private to each translator (b) the general idea is how AArch64 > uses them. I think the 32-bit ARM code does something a bit odd > because it has to handle conditional execution (some things we > might have otherwise done immediately in the decode function > get postponed to the end of the loop). Mostly I haven't messed > around too much with that bit of the code because it works > and it's kind of complicated to understand. But the AArch64 > stuff we wrote from scratch so it does things in the straightforward > way.
Thanks, Peter. What if I am going to modify DISAS_JUMP and DISAS_UPDATE usage in 32-bit ARM code and apply AArch64 semantics to them? Best, Sergey