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