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