1
+/* SPDX-License-Identifier: MIT */
2
+/*
3
+ * Target dependent memory related functions.
4
+ *
5
+ * Copyright (c) 2008 Fabrice Bellard
6
+ */
7
+
8
+#ifndef TCG_TCG_OP_MEM_H
9
+#define TCG_TCG_OP_MEM_H
10
+
11
+#ifndef TCG_ADDRESS_BITS
12
+#error TCG_ADDRESS_BITS must be defined
13
+#endif
14
+
15
+#if TCG_ADDRESS_BITS == 32
16
+typedef TCGv_i32 TCGv_va;
17
+#define TCG_TYPE_VA TCG_TYPE_I32
18
+#define tcgv_va_temp tcgv_i32_temp
19
+#define tcgv_va_temp_new tcg_temp_new_i32
20
+#elif TCG_ADDRESS_BITS == 64
21
+typedef TCGv_i64 TCGv_va;
22
+#define TCG_TYPE_VA TCG_TYPE_I64
23
+#define tcgv_va_temp tcgv_i64_temp
24
+#define tcgv_va_temp_new tcg_temp_new_i64
25
+#else
26
+#error
27
+#endif
28
+
29
+static inline void
30
+tcg_gen_qemu_ld_i32(TCGv_i32 v, TCGv_va a, TCGArg i, MemOp m)
31
+{
32
+ tcg_gen_qemu_ld_i32_chk(v, tcgv_va_temp(a), i, m, TCG_TYPE_VA);
33
+}
34
+
35
+static inline void
36
+tcg_gen_qemu_st_i32(TCGv_i32 v, TCGv_va a, TCGArg i, MemOp m)
37
+{
38
+ tcg_gen_qemu_st_i32_chk(v, tcgv_va_temp(a), i, m, TCG_TYPE_VA);
39
+}
40
+
41
+static inline void
42
+tcg_gen_qemu_ld_i64(TCGv_i64 v, TCGv_va a, TCGArg i, MemOp m)
43
+{
44
+ tcg_gen_qemu_ld_i64_chk(v, tcgv_va_temp(a), i, m, TCG_TYPE_VA);
45
+}
46
+
47
+static inline void
48
+tcg_gen_qemu_st_i64(TCGv_i64 v, TCGv_va a, TCGArg i, MemOp m)
49
+{
50
+ tcg_gen_qemu_st_i64_chk(v, tcgv_va_temp(a), i, m, TCG_TYPE_VA);
51
+}
52
+
53
+static inline void
54
+tcg_gen_qemu_ld_i128(TCGv_i128 v, TCGv_va a, TCGArg i, MemOp m)
55
+{
56
+ tcg_gen_qemu_ld_i128_chk(v, tcgv_va_temp(a), i, m, TCG_TYPE_VA);
57
+}
58
+
59
+static inline void
60
+tcg_gen_qemu_st_i128(TCGv_i128 v, TCGv_va a, TCGArg i, MemOp m)
61
+{
62
+ tcg_gen_qemu_st_i128_chk(v, tcgv_va_temp(a), i, m, TCG_TYPE_VA);
63
+}
64
+
65
+#define DEF_ATOMIC2(N, S) \
66
+ static inline void N##_##S(TCGv_##S r, TCGv_va a, TCGv_##S v, \
67
+ TCGArg i, MemOp m) \
68
+ { N##_##S##_chk(r, tcgv_va_temp(a), v, i, m, TCG_TYPE_VA); }
69
+
70
+#define DEF_ATOMIC3(N, S) \
71
+ static inline void N##_##S(TCGv_##S r, TCGv_va a, TCGv_##S o, \
72
+ TCGv_##S n, TCGArg i, MemOp m) \
73
+ { N##_##S##_chk(r, tcgv_va_temp(a), o, n, i, m, TCG_TYPE_VA); }
74
+
75
+DEF_ATOMIC3(tcg_gen_atomic_cmpxchg, i32)
76
+DEF_ATOMIC3(tcg_gen_atomic_cmpxchg, i64)
77
+DEF_ATOMIC3(tcg_gen_atomic_cmpxchg, i128)
78
+
79
+DEF_ATOMIC3(tcg_gen_nonatomic_cmpxchg, i32)
80
+DEF_ATOMIC3(tcg_gen_nonatomic_cmpxchg, i64)
81
+DEF_ATOMIC3(tcg_gen_nonatomic_cmpxchg, i128)
82
+
83
+DEF_ATOMIC2(tcg_gen_atomic_xchg, i32)
84
+DEF_ATOMIC2(tcg_gen_atomic_xchg, i64)
85
+DEF_ATOMIC2(tcg_gen_atomic_xchg, i128)
86
+
87
+DEF_ATOMIC2(tcg_gen_atomic_fetch_add, i32)
88
+DEF_ATOMIC2(tcg_gen_atomic_fetch_add, i64)
89
+DEF_ATOMIC2(tcg_gen_atomic_fetch_and, i32)
90
+DEF_ATOMIC2(tcg_gen_atomic_fetch_and, i64)
91
+DEF_ATOMIC2(tcg_gen_atomic_fetch_and, i128)
92
+DEF_ATOMIC2(tcg_gen_atomic_fetch_or, i32)
93
+DEF_ATOMIC2(tcg_gen_atomic_fetch_or, i64)
94
+DEF_ATOMIC2(tcg_gen_atomic_fetch_or, i128)
95
+DEF_ATOMIC2(tcg_gen_atomic_fetch_xor, i32)
96
+DEF_ATOMIC2(tcg_gen_atomic_fetch_xor, i64)
97
+DEF_ATOMIC2(tcg_gen_atomic_fetch_smin, i32)
98
+DEF_ATOMIC2(tcg_gen_atomic_fetch_smin, i64)
99
+DEF_ATOMIC2(tcg_gen_atomic_fetch_umin, i32)
100
+DEF_ATOMIC2(tcg_gen_atomic_fetch_umin, i64)
101
+DEF_ATOMIC2(tcg_gen_atomic_fetch_smax, i32)
102
+DEF_ATOMIC2(tcg_gen_atomic_fetch_smax, i64)
103
+DEF_ATOMIC2(tcg_gen_atomic_fetch_umax, i32)
104
+DEF_ATOMIC2(tcg_gen_atomic_fetch_umax, i64)
105
+
106
+DEF_ATOMIC2(tcg_gen_atomic_add_fetch, i32)
107
+DEF_ATOMIC2(tcg_gen_atomic_add_fetch, i64)
108
+DEF_ATOMIC2(tcg_gen_atomic_and_fetch, i32)
109
+DEF_ATOMIC2(tcg_gen_atomic_and_fetch, i64)
110
+DEF_ATOMIC2(tcg_gen_atomic_or_fetch, i32)
111
+DEF_ATOMIC2(tcg_gen_atomic_or_fetch, i64)
112
+DEF_ATOMIC2(tcg_gen_atomic_xor_fetch, i32)
113
+DEF_ATOMIC2(tcg_gen_atomic_xor_fetch, i64)
114
+DEF_ATOMIC2(tcg_gen_atomic_smin_fetch, i32)
115
+DEF_ATOMIC2(tcg_gen_atomic_smin_fetch, i64)
116
+DEF_ATOMIC2(tcg_gen_atomic_umin_fetch, i32)
117
+DEF_ATOMIC2(tcg_gen_atomic_umin_fetch, i64)
118
+DEF_ATOMIC2(tcg_gen_atomic_smax_fetch, i32)
119
+DEF_ATOMIC2(tcg_gen_atomic_smax_fetch, i64)
120
+DEF_ATOMIC2(tcg_gen_atomic_umax_fetch, i32)
121
+DEF_ATOMIC2(tcg_gen_atomic_umax_fetch, i64)
122
+
123
+#undef DEF_ATOMIC2
124
+#undef DEF_ATOMIC3
125
+
126
+#endif /* TCG_TCG_OP_MEM_H */