xref: /qemu/include/exec/memopidx.h (revision abe2e23eb703b7e2b0479b4672d087cc37b0e667)
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