]>
Commit | Line | Data |
---|---|---|
dcdaadb6 LV |
1 | /* |
2 | * Helper functions for guest memory tracing | |
3 | * | |
4 | * Copyright (C) 2016 Lluís Vilanova <vilanova@ac.upc.edu> | |
5 | * | |
6 | * This work is licensed under the terms of the GNU GPL, version 2 or later. | |
7 | * See the COPYING file in the top-level directory. | |
8 | */ | |
9 | ||
10 | #ifndef TRACE__MEM_INTERNAL_H | |
11 | #define TRACE__MEM_INTERNAL_H | |
12 | ||
13 | static inline uint8_t trace_mem_get_info(TCGMemOp op, bool store) | |
14 | { | |
15 | uint8_t res = op; | |
16 | bool be = (op & MO_BSWAP) == MO_BE; | |
17 | ||
18 | /* remove untraced fields */ | |
19 | res &= (1ULL << 4) - 1; | |
20 | /* make endianness absolute */ | |
21 | res &= ~MO_BSWAP; | |
22 | if (be) { | |
23 | res |= 1ULL << 3; | |
24 | } | |
25 | /* add fields */ | |
26 | if (store) { | |
27 | res |= 1ULL << 4; | |
28 | } | |
29 | ||
30 | return res; | |
31 | } | |
32 | ||
33 | static inline uint8_t trace_mem_build_info( | |
34 | TCGMemOp size, bool sign_extend, TCGMemOp endianness, bool store) | |
35 | { | |
36 | uint8_t res = 0; | |
37 | res |= size; | |
38 | res |= (sign_extend << 2); | |
39 | if (endianness == MO_BE) { | |
40 | res |= (1ULL << 3); | |
41 | } | |
42 | res |= (store << 4); | |
43 | return res; | |
44 | } | |
45 | ||
175de524 | 46 | #endif /* TRACE__MEM_INTERNAL_H */ |