Commit df0311e6 authored by Alex Bennée's avatar Alex Bennée Committed by Peter Maydell
Browse files

include/exec/exec-all: document common exit conditions



As a precursor to later patches attempt to come up with a more
concrete wording for what each of the common exit cases would be.

CC: Emilio G. Cota <cota@braap.org>
CC: Richard Henderson <rth@twiddle.net>
CC: Lluís Vilanova <vilanova@ac.upc.edu>
Signed-off-by: default avatarAlex Bennée <alex.bennee@linaro.org>
Reviewed-by: default avatarRichard Henderson <rth@twiddle.net>
Message-id: 20170713141928.25419-2-alex.bennee@linaro.org
Signed-off-by: default avatarPeter Maydell <peter.maydell@linaro.org>
parent 8d92e26b
Loading
Loading
Loading
Loading
+26 −3
Original line number Diff line number Diff line
@@ -35,11 +35,34 @@ typedef abi_ulong tb_page_addr_t;
typedef ram_addr_t tb_page_addr_t;
#endif

/* is_jmp field values */
/* DisasContext is_jmp field values
 *
 * is_jmp starts as DISAS_NEXT. The translator will keep processing
 * instructions until an exit condition is reached. If we reach the
 * exit condition and is_jmp is still DISAS_NEXT (because of some
 * other condition) we simply "jump" to the next address.
 * The remaining exit cases are:
 *
 *   DISAS_JUMP    - Only the PC was modified dynamically (e.g computed)
 *   DISAS_TB_JUMP - Only the PC was modified statically (e.g. branch)
 *
 * In these cases as long as the PC is updated we can chain to the
 * next TB either by exiting the loop or looking up the next TB via
 * the loookup helper.
 *
 *   DISAS_UPDATE  - CPU State was modified dynamically
 *
 * This covers any other CPU state which necessities us exiting the
 * TCG code to the main run-loop. Typically this includes anything
 * that might change the interrupt state.
 *
 * Individual translators may define additional exit cases to deal
 * with per-target special conditions.
 */
#define DISAS_NEXT    0 /* next instruction can be analyzed */
#define DISAS_JUMP    1 /* only pc was modified dynamically */
#define DISAS_UPDATE  2 /* cpu state was modified dynamically */
#define DISAS_TB_JUMP 3 /* only pc was modified statically */
#define DISAS_TB_JUMP 2 /* only pc was modified statically */
#define DISAS_UPDATE  3 /* cpu state was modified dynamically */

#include "qemu/log.h"