• E
    translate-all: iterate over TBs in a page with PAGE_FOR_EACH_TB · 1e05197f
    Emilio G. Cota 提交于
    This commit does several things, but to avoid churn I merged them all
    into the same commit. To wit:
    
    - Use uintptr_t instead of TranslationBlock * for the list of TBs in a page.
      Just like we did in (c37e6d7e "tcg: Use uintptr_t type for
      jmp_list_{next|first} fields of TB"), the rationale is the same: these
      are tagged pointers, not pointers. So use a more appropriate type.
    
    - Only check the least significant bit of the tagged pointers. Masking
      with 3/~3 is unnecessary and confusing.
    
    - Introduce the TB_FOR_EACH_TAGGED macro, and use it to define
      PAGE_FOR_EACH_TB, which improves readability. Note that
      TB_FOR_EACH_TAGGED will gain another user in a subsequent patch.
    
    - Update tb_page_remove to use PAGE_FOR_EACH_TB. In case there
      is a bug and we attempt to remove a TB that is not in the list, instead
      of segfaulting (since the list is NULL-terminated) we will reach
      g_assert_not_reached().
    Reviewed-by: NRichard Henderson <richard.henderson@linaro.org>
    Signed-off-by: NEmilio G. Cota <cota@braap.org>
    Signed-off-by: NRichard Henderson <richard.henderson@linaro.org>
    1e05197f
translate-all.c 63.9 KB