On 22/09/19 05:54, Richard Henderson wrote: > +/* Wrap the unaligned load helpers to that they have a common signature. */ > +static inline uint64_t wrap_ldub(const void *haddr) > +{ > + return ldub_p(haddr); > +} > + > +static inline uint64_t wrap_lduw_be(const void *haddr) > +{ > + return lduw_be_p(haddr); > +} > + > +static inline uint64_t wrap_lduw_le(const void *haddr) > +{ > + return lduw_le_p(haddr); > +} > + > +static inline uint64_t wrap_ldul_be(const void *haddr) > +{ > + return (uint32_t)ldl_be_p(haddr); > +} > + > +static inline uint64_t wrap_ldul_le(const void *haddr) > +{ > + return (uint32_t)ldl_le_p(haddr); > +}
Any reason to have these five functions (plus five for stores) instead of a pair static uint64_t ld_memop(const void *haddr, MemOp op) { } static uint64_t st_memop(void *haddr, MemOp op, uint64_t val) { } that includes the switches? Everything should be inlined just the same if you do if (unlikely(tlb_addr & TLB_BSWAP)) { st_memop(haddr, op ^ MO_BSWAP, val); } else { st_memop(haddr, op, val); } and the like. Paolo > static inline uint64_t QEMU_ALWAYS_INLINE > load_helper(CPUArchState *env, target_ulong addr, TCGMemOpIdx oi, > uintptr_t retaddr, MemOp op, bool code_read, > - FullLoadHelper *full_load) > + FullLoadHelper *full_load, LoadHelper *direct) > { > uintptr_t mmu_idx = get_mmuidx(oi); > uintptr_t index = tlb_index(env, mmu_idx, addr); > @@ -1373,33 +1400,7 @@ load_helper(CPUArchState *env, target_ulong addr, > TCGMemOpIdx oi, > > do_aligned_access: > haddr = (void *)((uintptr_t)addr + entry->addend); > - switch (op) { > - case MO_UB: > - res = ldub_p(haddr); > - break; > - case MO_BEUW: > - res = lduw_be_p(haddr); > - break; > - case MO_LEUW: > - res = lduw_le_p(haddr); > - break; > - case MO_BEUL: > - res = (uint32_t)ldl_be_p(haddr); > - break; > - case MO_LEUL: > - res = (uint32_t)ldl_le_p(haddr); > - break; > - case MO_BEQ: > - res = ldq_be_p(haddr); > - break; > - case MO_LEQ: > - res = ldq_le_p(haddr); > - break; > - default: > - g_assert_not_reached(); > - } > - > - return res; > + return direct(haddr);