1*abe2e23eSRichard Henderson /* 2*abe2e23eSRichard Henderson * Combine the MemOp and mmu_idx parameters into a single value. 3*abe2e23eSRichard Henderson * 4*abe2e23eSRichard Henderson * Authors: 5*abe2e23eSRichard Henderson * Richard Henderson <rth@twiddle.net> 6*abe2e23eSRichard Henderson * 7*abe2e23eSRichard Henderson * This work is licensed under the terms of the GNU GPL, version 2 or later. 8*abe2e23eSRichard Henderson * See the COPYING file in the top-level directory. 9*abe2e23eSRichard Henderson */ 10*abe2e23eSRichard Henderson 11*abe2e23eSRichard Henderson #ifndef EXEC_MEMOPIDX_H 12*abe2e23eSRichard Henderson #define EXEC_MEMOPIDX_H 1 13*abe2e23eSRichard Henderson 14*abe2e23eSRichard Henderson #include "exec/memop.h" 15*abe2e23eSRichard Henderson 16*abe2e23eSRichard Henderson typedef uint32_t MemOpIdx; 17*abe2e23eSRichard Henderson 18*abe2e23eSRichard Henderson /** 19*abe2e23eSRichard Henderson * make_memop_idx 20*abe2e23eSRichard Henderson * @op: memory operation 21*abe2e23eSRichard Henderson * @idx: mmu index 22*abe2e23eSRichard Henderson * 23*abe2e23eSRichard Henderson * Encode these values into a single parameter. 24*abe2e23eSRichard Henderson */ 25*abe2e23eSRichard Henderson static inline MemOpIdx make_memop_idx(MemOp op, unsigned idx) 26*abe2e23eSRichard Henderson { 27*abe2e23eSRichard Henderson #ifdef CONFIG_DEBUG_TCG 28*abe2e23eSRichard Henderson assert(idx <= 15); 29*abe2e23eSRichard Henderson #endif 30*abe2e23eSRichard Henderson return (op << 4) | idx; 31*abe2e23eSRichard Henderson } 32*abe2e23eSRichard Henderson 33*abe2e23eSRichard Henderson /** 34*abe2e23eSRichard Henderson * get_memop 35*abe2e23eSRichard Henderson * @oi: combined op/idx parameter 36*abe2e23eSRichard Henderson * 37*abe2e23eSRichard Henderson * Extract the memory operation from the combined value. 38*abe2e23eSRichard Henderson */ 39*abe2e23eSRichard Henderson static inline MemOp get_memop(MemOpIdx oi) 40*abe2e23eSRichard Henderson { 41*abe2e23eSRichard Henderson return oi >> 4; 42*abe2e23eSRichard Henderson } 43*abe2e23eSRichard Henderson 44*abe2e23eSRichard Henderson /** 45*abe2e23eSRichard Henderson * get_mmuidx 46*abe2e23eSRichard Henderson * @oi: combined op/idx parameter 47*abe2e23eSRichard Henderson * 48*abe2e23eSRichard Henderson * Extract the mmu index from the combined value. 49*abe2e23eSRichard Henderson */ 50*abe2e23eSRichard Henderson static inline unsigned get_mmuidx(MemOpIdx oi) 51*abe2e23eSRichard Henderson { 52*abe2e23eSRichard Henderson return oi & 15; 53*abe2e23eSRichard Henderson } 54*abe2e23eSRichard Henderson 55*abe2e23eSRichard Henderson #endif 56