1
The following changes since commit 2946e1af2704bf6584f57d4e3aec49d1d5f3ecc0:
1
With a couple of linux-user and target/sparc patches thrown in for good measure.
2
2
3
configure: Disable thread-safety warnings on macOS (2023-03-04 14:03:46 +0000)
3
r~
4
5
6
The following changes since commit 495de0fd82d8bb2d7035f82d9869cfeb48de2f9e:
7
8
Merge tag 'pull-trivial-patches' of https://gitlab.com/mjt0k/qemu into staging (2025-02-14 08:19:05 -0500)
4
9
5
are available in the Git repository at:
10
are available in the Git repository at:
6
11
7
https://gitlab.com/rth7680/qemu.git tags/pull-tcg-20230305
12
https://gitlab.com/rth7680/qemu.git tags/pull-tcg-20250215
8
13
9
for you to fetch changes up to b6611d8d5c265c138a4a0cc36a2c02d84a768976:
14
for you to fetch changes up to 2132751069134114814c7e1609e9cf644f077aad:
10
15
11
target/xtensa: Avoid tcg_const_i32 (2023-03-05 13:47:25 -0800)
16
target/sparc: fake UltraSPARC T1 PCR and PIC registers (2025-02-15 12:04:13 -0800)
12
17
13
----------------------------------------------------------------
18
----------------------------------------------------------------
14
tcg: Merge two sequential labels
19
tcg: Remove last traces of TCG_TARGET_NEED_POOL_LABELS
15
accel/tcg: Retain prot flags from tlb_fill
20
tcg: Cleanups after disallowing 64-on-32
16
accel/tcg: Honor TLB_DISCARD_WRITE in atomic_mmu_lookup
21
tcg: Introduce constraint for zero register
17
accel/tcg: Honor TLB_WATCHPOINTS in atomic_mmu_lookup
22
linux-user: Move TARGET_SA_RESTORER out of generic/signal.h
18
target/sparc: Use tlb_set_page_full
23
linux-user: Fix alignment when unmapping excess reservation
19
include/qemu/cpuid: Introduce xgetbv_low
24
target/sparc: Fix register selection for all F*TOx and FxTO* instructions
20
tcg/i386: Mark Win64 call-saved vector regs as reserved
25
target/sparc: Fix gdbstub incorrectly handling registers f32-f62
21
tcg: Decode the operand to INDEX_op_mb in dumps
26
target/sparc: fake UltraSPARC T1 PCR and PIC registers
22
23
Portion of the target/ patchset which eliminates use of tcg_temp_free*
24
Portion of the target/ patchset which eliminates use of tcg_const*
25
27
26
----------------------------------------------------------------
28
----------------------------------------------------------------
27
Richard Henderson (83):
29
Andreas Schwab (1):
28
tcg: Link branches to the labels
30
linux-user: Move TARGET_SA_RESTORER out of generic/signal.h
29
tcg: Merge two sequential labels
30
target/sparc: Use tlb_set_page_full
31
accel/tcg: Retain prot flags from tlb_fill
32
accel/tcg: Honor TLB_DISCARD_WRITE in atomic_mmu_lookup
33
softmmu: Check watchpoints for read+write at once
34
accel/tcg: Trigger watchpoints from atomic_mmu_lookup
35
include/qemu/cpuid: Introduce xgetbv_low
36
tcg/i386: Mark Win64 call-saved vector regs as reserved
37
tcg: Decode the operand to INDEX_op_mb in dumps
38
tcg: Remove tcg_check_temp_count, tcg_clear_temp_count
39
accel/tcg: Remove translator_loop_temp_check
40
target/alpha: Drop tcg_temp_free
41
target/arm: Remove arm_free_cc, a64_free_cc
42
target/arm: Remove value_global from DisasCompare
43
target/arm: Drop tcg_temp_free from translator.c
44
target/arm: Drop DisasContext.tmp_a64
45
target/arm: Drop new_tmp_a64
46
target/arm: Drop new_tmp_a64_zero
47
target/arm: Drop tcg_temp_free from translator-a64.c
48
target/arm: Drop tcg_temp_free from translator-m-nocp.c
49
target/arm: Drop tcg_temp_free from translator-mve.c
50
target/arm: Drop tcg_temp_free from translator-neon.c
51
target/arm: Drop tcg_temp_free from translator-sme.c
52
target/arm: Drop tcg_temp_free from translator-sve.c
53
target/arm: Drop tcg_temp_free from translator-vfp.c
54
target/arm: Drop tcg_temp_free from translator.h
55
target/avr: Drop DisasContext.free_skip_var0
56
target/avr: Drop R from trans_COM
57
target/avr: Drop tcg_temp_free
58
target/cris: Drop cris_alu_free_temps
59
target/cris: Drop cris_alu_m_free_temps
60
target/cris: Drop addr from dec10_ind_move_m_pr
61
target/cris: Drop tcg_temp_free
62
target/hexagon: Drop tcg_temp_free from C code
63
target/hexagon: Drop tcg_temp_free from gen_tcg_funcs.py
64
target/hexagon/idef-parser: Drop tcg_temp_free
65
target/hexagon/idef-parser: Drop HexValue.is_manual
66
target/hppa: Drop tcg_temp_free
67
target/loongarch: Drop temp_new
68
target/loongarch: Drop tcg_temp_free
69
target/m68k: Drop mark_to_release
70
target/m68k: Drop free_cond
71
target/m68k: Drop tcg_temp_free
72
target/microblaze: Drop tcg_temp_free
73
target/nios2: Drop tcg_temp_free
74
target/openrisc: Drop tcg_temp_free
75
target/ppc: Drop tcg_temp_free
76
target/riscv: Drop ftemp_new
77
target/riscv: Drop temp_new
78
target/riscv: Drop tcg_temp_free
79
target/rx: Drop tcg_temp_free
80
target/sh4: Drop tcg_temp_free
81
target/sparc: Drop get_temp_tl
82
target/sparc: Drop get_temp_i32
83
target/sparc: Remove egress label in disas_sparc_context
84
target/sparc: Drop free_compare
85
target/sparc: Drop tcg_temp_free
86
target/xtensa: Drop reset_sar_tracker
87
target/xtensa: Drop tcg_temp_free
88
target/i386: Drop tcg_temp_free
89
target/mips: Drop tcg_temp_free from mips16e_translate.c.inc
90
target/mips: Fix trans_mult_acc return
91
target/tricore: Drop tcg_temp_free
92
include/exec/gen-icount: Drop tcg_temp_free in gen_tb_start
93
tracing: remove transform.py
94
docs/devel/tcg-ops: Drop recommendation to free temps
95
target/hexagon: Use tcg_constant_* for gen_constant_from_imm
96
target/hexagon/idef-parser: Use gen_tmp for LPCFG
97
target/hexagon/idef-parser: Use gen_tmp for gen_pred_assign
98
target/hexagon/idef-parser: Use gen_tmp for gen_rvalue_pred
99
target/hexagon/idef-parser: Use gen_constant for gen_extend_tcg_width_op
100
target/i386: Simplify POPF
101
target/microblaze: Avoid tcg_const_* throughout
102
target/riscv: Avoid tcg_const_*
103
target/s390x: Split out gen_ri2
104
target/sparc: Avoid tcg_const_{tl,i32}
105
target/xtensa: Tidy translate_bb
106
target/xtensa: Tidy translate_clamps
107
target/xtensa: Avoid tcg_const_i32 in translate_l32r
108
target/xtensa: Use tcg_gen_subfi_i32 in translate_sll
109
target/xtensa: Split constant in bit shift
110
target/xtensa: Avoid tcg_const_i32
111
31
112
Richard W.M. Jones (1):
32
Artyom Tarasenko (1):
113
tcg: Include "qemu/timer.h" for profile_getclock
33
target/sparc: fake UltraSPARC T1 PCR and PIC registers
114
34
115
docs/devel/tcg-ops.rst | 4 -
35
Fabiano Rosas (1):
116
target/hexagon/idef-parser/README.rst | 8 -
36
elfload: Fix alignment when unmapping excess reservation
117
meson.build | 1 -
37
118
include/exec/gen-icount.h | 2 -
38
Mikael Szreder (2):
119
include/exec/translator.h | 2 -
39
target/sparc: Fix register selection for all F*TOx and FxTO* instructions
120
include/hw/core/cpu.h | 7 +-
40
target/sparc: Fix gdbstub incorrectly handling registers f32-f62
121
include/qemu/cpuid.h | 7 +
41
122
include/tcg/tcg-op.h | 7 +-
42
Richard Henderson (19):
123
include/tcg/tcg.h | 33 +-
43
tcg: Remove last traces of TCG_TARGET_NEED_POOL_LABELS
124
target/arm/tcg/translate-a64.h | 2 -
44
tcg: Remove TCG_OVERSIZED_GUEST
125
target/arm/tcg/translate.h | 7 -
45
tcg: Drop support for two address registers in gen_ldst
126
target/hexagon/gen_tcg.h | 29 -
46
tcg: Merge INDEX_op_qemu_*_{a32,a64}_*
127
target/hexagon/gen_tcg_hvx.h | 15 -
47
tcg/arm: Drop addrhi from prepare_host_addr
128
target/hexagon/idef-parser/idef-parser.h | 1 -
48
tcg/i386: Drop addrhi from prepare_host_addr
129
target/hexagon/idef-parser/parser-helpers.h | 10 -
49
tcg/mips: Drop addrhi from prepare_host_addr
130
target/hexagon/macros.h | 7 -
50
tcg/ppc: Drop addrhi from prepare_host_addr
131
target/loongarch/translate.h | 3 -
51
tcg: Replace addr{lo,hi}_reg with addr_reg in TCGLabelQemuLdst
132
accel/tcg/cputlb.c | 43 +-
52
plugins: Fix qemu_plugin_read_memory_vaddr parameters
133
accel/tcg/tcg-accel-ops.c | 1 +
53
accel/tcg: Fix tlb_set_page_with_attrs, tlb_set_page
134
accel/tcg/translate-all.c | 1 +
54
include/exec: Change vaddr to uintptr_t
135
accel/tcg/translator.c | 16 -
55
include/exec: Use uintptr_t in CPUTLBEntry
136
softmmu/runstate.c | 1 +
56
tcg: Introduce the 'z' constraint for a hardware zero register
137
softmmu/watchpoint.c | 19 +-
57
tcg/aarch64: Use 'z' constraint
138
target/alpha/translate.c | 71 ---
58
tcg/loongarch64: Use 'z' constraint
139
target/arm/tcg/translate-a64.c | 594 ++-------------------
59
tcg/mips: Use 'z' constraint
140
target/arm/tcg/translate-m-nocp.c | 20 -
60
tcg/riscv: Use 'z' constraint
141
target/arm/tcg/translate-mve.c | 52 --
61
tcg/sparc64: Use 'z' constraint
142
target/arm/tcg/translate-neon.c | 131 +----
62
143
target/arm/tcg/translate-sme.c | 28 -
63
include/exec/tlb-common.h | 10 +-
144
target/arm/tcg/translate-sve.c | 206 +------
64
include/exec/vaddr.h | 16 ++--
145
target/arm/tcg/translate-vfp.c | 193 -------
65
include/qemu/atomic.h | 18 +---
146
target/arm/tcg/translate.c | 281 +---------
66
include/tcg/oversized-guest.h | 23 -----
147
target/avr/translate.c | 251 ---------
67
include/tcg/tcg-opc.h | 28 ++----
148
target/cris/translate.c | 113 ----
68
include/tcg/tcg.h | 3 +-
149
target/hexagon/genptr.c | 58 --
69
linux-user/aarch64/target_signal.h | 2 +
150
target/hexagon/idef-parser/parser-helpers.c | 206 +------
70
linux-user/arm/target_signal.h | 2 +
151
target/hexagon/translate.c | 7 -
71
linux-user/generic/signal.h | 1 -
152
target/hppa/translate.c | 93 +---
72
linux-user/i386/target_signal.h | 2 +
153
target/i386/tcg/translate.c | 96 +---
73
linux-user/m68k/target_signal.h | 1 +
154
target/loongarch/translate.c | 21 +-
74
linux-user/microblaze/target_signal.h | 2 +
155
target/m68k/translate.c | 276 +---------
75
linux-user/ppc/target_signal.h | 2 +
156
target/microblaze/translate.c | 89 +--
76
linux-user/s390x/target_signal.h | 2 +
157
target/mips/tcg/vr54xx_translate.c | 2 +-
77
linux-user/sh4/target_signal.h | 2 +
158
target/nios2/translate.c | 15 -
78
linux-user/x86_64/target_signal.h | 2 +
159
target/openrisc/translate.c | 39 --
79
linux-user/xtensa/target_signal.h | 2 +
160
target/ppc/translate.c | 285 ----------
80
tcg/aarch64/tcg-target-con-set.h | 12 +--
161
target/riscv/translate.c | 65 +--
81
tcg/aarch64/tcg-target.h | 2 +
162
target/rx/translate.c | 84 ---
82
tcg/loongarch64/tcg-target-con-set.h | 15 ++-
163
target/s390x/tcg/translate.c | 23 +-
83
tcg/loongarch64/tcg-target-con-str.h | 1 -
164
target/sh4/translate.c | 110 ----
84
tcg/loongarch64/tcg-target.h | 2 +
165
target/sparc/mmu_helper.c | 121 ++---
85
tcg/mips/tcg-target-con-set.h | 26 +++---
166
target/sparc/translate.c | 339 +++---------
86
tcg/mips/tcg-target-con-str.h | 1 -
167
target/tricore/translate.c | 540 +------------------
87
tcg/mips/tcg-target.h | 2 +
168
target/xtensa/translate.c | 171 +-----
88
tcg/riscv/tcg-target-con-set.h | 10 +-
169
tcg/tcg-op.c | 22 +-
89
tcg/riscv/tcg-target-con-str.h | 1 -
170
tcg/tcg.c | 208 ++++++--
90
tcg/riscv/tcg-target.h | 2 +
171
util/bufferiszero.c | 3 +-
91
tcg/sparc64/tcg-target-con-set.h | 12 +--
172
target/cris/translate_v10.c.inc | 49 +-
92
tcg/sparc64/tcg-target-con-str.h | 1 -
173
target/i386/tcg/decode-new.c.inc | 15 -
93
tcg/sparc64/tcg-target.h | 3 +-
174
target/i386/tcg/emit.c.inc | 6 -
94
tcg/tci/tcg-target.h | 1 -
175
target/loongarch/insn_trans/trans_arith.c.inc | 12 -
95
accel/tcg/cputlb.c | 32 ++-----
176
target/loongarch/insn_trans/trans_atomic.c.inc | 3 -
96
accel/tcg/tcg-all.c | 9 +-
177
target/loongarch/insn_trans/trans_bit.c.inc | 12 -
97
linux-user/elfload.c | 4 +-
178
target/loongarch/insn_trans/trans_fcmp.c.inc | 3 -
98
plugins/api.c | 2 +-
179
target/loongarch/insn_trans/trans_fmemory.c.inc | 20 +-
99
target/arm/ptw.c | 34 -------
180
target/loongarch/insn_trans/trans_fmov.c.inc | 6 -
100
target/riscv/cpu_helper.c | 13 +--
181
target/loongarch/insn_trans/trans_memory.c.inc | 34 +-
101
target/sparc/gdbstub.c | 18 +++-
182
target/loongarch/insn_trans/trans_privileged.c.inc | 6 +-
102
target/sparc/translate.c | 19 ++++
183
target/loongarch/insn_trans/trans_shift.c.inc | 11 -
103
tcg/optimize.c | 21 ++---
184
target/mips/tcg/mips16e_translate.c.inc | 6 -
104
tcg/tcg-op-ldst.c | 103 +++++----------------
185
target/ppc/power8-pmu-regs.c.inc | 16 -
105
tcg/tcg.c | 97 +++++++++----------
186
target/ppc/translate/dfp-impl.c.inc | 20 -
106
tcg/tci.c | 119 +++++-------------------
187
target/ppc/translate/fixedpoint-impl.c.inc | 16 -
107
docs/devel/multi-thread-tcg.rst | 1 -
188
target/ppc/translate/fp-impl.c.inc | 122 +----
108
docs/devel/tcg-ops.rst | 4 +-
189
target/ppc/translate/spe-impl.c.inc | 59 --
109
target/sparc/insns.decode | 19 ++--
190
target/ppc/translate/storage-ctrl-impl.c.inc | 2 -
110
tcg/aarch64/tcg-target.c.inc | 86 +++++++----------
191
target/ppc/translate/vmx-impl.c.inc | 296 +---------
111
tcg/arm/tcg-target.c.inc | 104 ++++++---------------
192
target/ppc/translate/vsx-impl.c.inc | 287 +---------
112
tcg/i386/tcg-target.c.inc | 125 +++++++------------------
193
target/riscv/insn_trans/trans_rvb.c.inc | 24 -
113
tcg/loongarch64/tcg-target.c.inc | 72 ++++++---------
194
target/riscv/insn_trans/trans_rvd.c.inc | 2 -
114
tcg/mips/tcg-target.c.inc | 169 +++++++++++-----------------------
195
target/riscv/insn_trans/trans_rvf.c.inc | 9 -
115
tcg/ppc/tcg-target.c.inc | 164 ++++++++-------------------------
196
target/riscv/insn_trans/trans_rvi.c.inc | 37 --
116
tcg/riscv/tcg-target.c.inc | 56 +++++------
197
target/riscv/insn_trans/trans_rvk.c.inc | 15 -
117
tcg/s390x/tcg-target.c.inc | 40 +++-----
198
target/riscv/insn_trans/trans_rvm.c.inc | 33 --
118
tcg/sparc64/tcg-target.c.inc | 45 ++++-----
199
target/riscv/insn_trans/trans_rvv.c.inc | 59 +-
119
tcg/tci/tcg-target.c.inc | 60 +++---------
200
target/riscv/insn_trans/trans_rvzfh.c.inc | 14 +-
120
57 files changed, 536 insertions(+), 1089 deletions(-)
201
target/riscv/insn_trans/trans_xthead.c.inc | 24 +-
121
delete mode 100644 include/tcg/oversized-guest.h
202
tcg/i386/tcg-target.c.inc | 24 +-
203
scripts/tracetool/__init__.py | 23 -
204
scripts/tracetool/transform.py | 168 ------
205
target/hexagon/README | 5 -
206
target/hexagon/gen_tcg_funcs.py | 79 +--
207
target/hexagon/idef-parser/idef-parser.y | 14 +-
208
93 files changed, 579 insertions(+), 5991 deletions(-)
209
delete mode 100644 scripts/tracetool/transform.py
diff view generated by jsdifflib
Deleted patch
1
From: "Richard W.M. Jones" <rjones@redhat.com>
2
1
3
When CONFIG_PROFILER is set there are various undefined references to
4
profile_getclock. Include the header which defines this function.
5
6
For example:
7
8
../tcg/tcg.c: In function ‘tcg_gen_code’:
9
../tcg/tcg.c:4905:51: warning: implicit declaration of function ‘profile_getclock’ [-Wimplicit-function-declaration]
10
4905 | qatomic_set(&prof->opt_time, prof->opt_time - profile_getclock());
11
| ^~~~~~~~~~~~~~~~
12
13
Signed-off-by: Richard W.M. Jones <rjones@redhat.com>
14
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
15
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
16
Message-Id: <20230303084948.3351546-1-rjones@redhat.com>
17
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
18
---
19
accel/tcg/tcg-accel-ops.c | 1 +
20
accel/tcg/translate-all.c | 1 +
21
softmmu/runstate.c | 1 +
22
tcg/tcg.c | 1 +
23
4 files changed, 4 insertions(+)
24
25
diff --git a/accel/tcg/tcg-accel-ops.c b/accel/tcg/tcg-accel-ops.c
26
index XXXXXXX..XXXXXXX 100644
27
--- a/accel/tcg/tcg-accel-ops.c
28
+++ b/accel/tcg/tcg-accel-ops.c
29
@@ -XXX,XX +XXX,XX @@
30
#include "sysemu/cpu-timers.h"
31
#include "qemu/main-loop.h"
32
#include "qemu/guest-random.h"
33
+#include "qemu/timer.h"
34
#include "exec/exec-all.h"
35
#include "exec/hwaddr.h"
36
#include "exec/gdbstub.h"
37
diff --git a/accel/tcg/translate-all.c b/accel/tcg/translate-all.c
38
index XXXXXXX..XXXXXXX 100644
39
--- a/accel/tcg/translate-all.c
40
+++ b/accel/tcg/translate-all.c
41
@@ -XXX,XX +XXX,XX @@
42
#include "qemu/qemu-print.h"
43
#include "qemu/main-loop.h"
44
#include "qemu/cacheinfo.h"
45
+#include "qemu/timer.h"
46
#include "exec/log.h"
47
#include "sysemu/cpus.h"
48
#include "sysemu/cpu-timers.h"
49
diff --git a/softmmu/runstate.c b/softmmu/runstate.c
50
index XXXXXXX..XXXXXXX 100644
51
--- a/softmmu/runstate.c
52
+++ b/softmmu/runstate.c
53
@@ -XXX,XX +XXX,XX @@
54
#include "qemu/module.h"
55
#include "qemu/plugin.h"
56
#include "qemu/sockets.h"
57
+#include "qemu/timer.h"
58
#include "qemu/thread.h"
59
#include "qom/object.h"
60
#include "qom/object_interfaces.h"
61
diff --git a/tcg/tcg.c b/tcg/tcg.c
62
index XXXXXXX..XXXXXXX 100644
63
--- a/tcg/tcg.c
64
+++ b/tcg/tcg.c
65
@@ -XXX,XX +XXX,XX @@
66
#include "qemu/qemu-print.h"
67
#include "qemu/cacheflush.h"
68
#include "qemu/cacheinfo.h"
69
+#include "qemu/timer.h"
70
71
/* Note: the long term plan is to reduce the dependencies on the QEMU
72
CPU definitions. Currently they are used for qemu_ld/st
73
--
74
2.34.1
75
76
diff view generated by jsdifflib
1
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
1
These should have been removed with the rest. There are
2
a couple of hosts which can emit guest_base into the
3
constant pool: aarch64, mips64, ppc64, riscv64.
4
5
Fixes: a417ef835058 ("tcg: Remove TCG_TARGET_NEED_LDST_LABELS and TCG_TARGET_NEED_POOL_LABELS")
2
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
6
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
3
---
7
---
4
tcg/tcg.c | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
8
tcg/tci/tcg-target.h | 1 -
5
1 file changed, 79 insertions(+)
9
tcg/tcg.c | 4 ----
10
2 files changed, 5 deletions(-)
6
11
12
diff --git a/tcg/tci/tcg-target.h b/tcg/tci/tcg-target.h
13
index XXXXXXX..XXXXXXX 100644
14
--- a/tcg/tci/tcg-target.h
15
+++ b/tcg/tci/tcg-target.h
16
@@ -XXX,XX +XXX,XX @@ typedef enum {
17
} TCGReg;
18
19
#define HAVE_TCG_QEMU_TB_EXEC
20
-#define TCG_TARGET_NEED_POOL_LABELS
21
22
#endif /* TCG_TARGET_H */
7
diff --git a/tcg/tcg.c b/tcg/tcg.c
23
diff --git a/tcg/tcg.c b/tcg/tcg.c
8
index XXXXXXX..XXXXXXX 100644
24
index XXXXXXX..XXXXXXX 100644
9
--- a/tcg/tcg.c
25
--- a/tcg/tcg.c
10
+++ b/tcg/tcg.c
26
+++ b/tcg/tcg.c
11
@@ -XXX,XX +XXX,XX @@ static void tcg_dump_ops(TCGContext *s, FILE *f, bool have_prefs)
27
@@ -XXX,XX +XXX,XX @@ void tcg_prologue_init(void)
12
arg_label(op->args[k])->id);
28
tcg_qemu_tb_exec = (tcg_prologue_fn *)tcg_splitwx_to_rx(s->code_ptr);
13
i++, k++;
29
#endif
14
break;
30
15
+ case INDEX_op_mb:
31
-#ifdef TCG_TARGET_NEED_POOL_LABELS
16
+ {
32
s->pool_labels = NULL;
17
+ TCGBar membar = op->args[k];
33
-#endif
18
+ const char *b_op, *m_op;
34
19
+
35
qemu_thread_jit_write();
20
+ switch (membar & TCG_BAR_SC) {
36
/* Generate the prologue. */
21
+ case 0:
37
tcg_target_qemu_prologue(s);
22
+ b_op = "none";
38
23
+ break;
39
-#ifdef TCG_TARGET_NEED_POOL_LABELS
24
+ case TCG_BAR_LDAQ:
40
/* Allow the prologue to put e.g. guest_base into a pool entry. */
25
+ b_op = "acq";
41
{
26
+ break;
42
int result = tcg_out_pool_finalize(s);
27
+ case TCG_BAR_STRL:
43
tcg_debug_assert(result == 0);
28
+ b_op = "rel";
44
}
29
+ break;
45
-#endif
30
+ case TCG_BAR_SC:
46
31
+ b_op = "seq";
47
prologue_size = tcg_current_code_size(s);
32
+ break;
48
perf_report_prologue(s->code_gen_ptr, prologue_size);
33
+ default:
34
+ g_assert_not_reached();
35
+ }
36
+
37
+ switch (membar & TCG_MO_ALL) {
38
+ case 0:
39
+ m_op = "none";
40
+ break;
41
+ case TCG_MO_LD_LD:
42
+ m_op = "rr";
43
+ break;
44
+ case TCG_MO_LD_ST:
45
+ m_op = "rw";
46
+ break;
47
+ case TCG_MO_ST_LD:
48
+ m_op = "wr";
49
+ break;
50
+ case TCG_MO_ST_ST:
51
+ m_op = "ww";
52
+ break;
53
+ case TCG_MO_LD_LD | TCG_MO_LD_ST:
54
+ m_op = "rr+rw";
55
+ break;
56
+ case TCG_MO_LD_LD | TCG_MO_ST_LD:
57
+ m_op = "rr+wr";
58
+ break;
59
+ case TCG_MO_LD_LD | TCG_MO_ST_ST:
60
+ m_op = "rr+ww";
61
+ break;
62
+ case TCG_MO_LD_ST | TCG_MO_ST_LD:
63
+ m_op = "rw+wr";
64
+ break;
65
+ case TCG_MO_LD_ST | TCG_MO_ST_ST:
66
+ m_op = "rw+ww";
67
+ break;
68
+ case TCG_MO_ST_LD | TCG_MO_ST_ST:
69
+ m_op = "wr+ww";
70
+ break;
71
+ case TCG_MO_LD_LD | TCG_MO_LD_ST | TCG_MO_ST_LD:
72
+ m_op = "rr+rw+wr";
73
+ break;
74
+ case TCG_MO_LD_LD | TCG_MO_LD_ST | TCG_MO_ST_ST:
75
+ m_op = "rr+rw+ww";
76
+ break;
77
+ case TCG_MO_LD_LD | TCG_MO_ST_LD | TCG_MO_ST_ST:
78
+ m_op = "rr+wr+ww";
79
+ break;
80
+ case TCG_MO_LD_ST | TCG_MO_ST_LD | TCG_MO_ST_ST:
81
+ m_op = "rw+wr+ww";
82
+ break;
83
+ case TCG_MO_ALL:
84
+ m_op = "all";
85
+ break;
86
+ default:
87
+ g_assert_not_reached();
88
+ }
89
+
90
+ col += ne_fprintf(f, "%s%s:%s", (k ? "," : ""), b_op, m_op);
91
+ i++, k++;
92
+ }
93
+ break;
94
default:
95
break;
96
}
97
--
49
--
98
2.34.1
50
2.43.0
99
100
diff view generated by jsdifflib
1
Fixes a bug in that we weren't reporting these changes.
1
This is now prohibited in configuration.
2
2
3
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
3
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
5
---
5
---
6
accel/tcg/cputlb.c | 40 +++++++++++++++++++++++++++++-----------
6
include/qemu/atomic.h | 18 +++--------------
7
1 file changed, 29 insertions(+), 11 deletions(-)
7
include/tcg/oversized-guest.h | 23 ----------------------
8
8
accel/tcg/cputlb.c | 7 -------
9
accel/tcg/tcg-all.c | 9 ++++-----
10
target/arm/ptw.c | 34 ---------------------------------
11
target/riscv/cpu_helper.c | 13 +------------
12
docs/devel/multi-thread-tcg.rst | 1 -
13
7 files changed, 8 insertions(+), 97 deletions(-)
14
delete mode 100644 include/tcg/oversized-guest.h
15
16
diff --git a/include/qemu/atomic.h b/include/qemu/atomic.h
17
index XXXXXXX..XXXXXXX 100644
18
--- a/include/qemu/atomic.h
19
+++ b/include/qemu/atomic.h
20
@@ -XXX,XX +XXX,XX @@
21
*/
22
#define signal_barrier() __atomic_signal_fence(__ATOMIC_SEQ_CST)
23
24
-/* Sanity check that the size of an atomic operation isn't "overly large".
25
+/*
26
+ * Sanity check that the size of an atomic operation isn't "overly large".
27
* Despite the fact that e.g. i686 has 64-bit atomic operations, we do not
28
* want to use them because we ought not need them, and this lets us do a
29
* bit of sanity checking that other 32-bit hosts might build.
30
- *
31
- * That said, we have a problem on 64-bit ILP32 hosts in that in order to
32
- * sync with TCG_OVERSIZED_GUEST, this must match TCG_TARGET_REG_BITS.
33
- * We'd prefer not want to pull in everything else TCG related, so handle
34
- * those few cases by hand.
35
- *
36
- * Note that x32 is fully detected with __x86_64__ + _ILP32, and that for
37
- * Sparc we always force the use of sparcv9 in configure. MIPS n32 (ILP32) &
38
- * n64 (LP64) ABIs are both detected using __mips64.
39
*/
40
-#if defined(__x86_64__) || defined(__sparc__) || defined(__mips64)
41
-# define ATOMIC_REG_SIZE 8
42
-#else
43
-# define ATOMIC_REG_SIZE sizeof(void *)
44
-#endif
45
+#define ATOMIC_REG_SIZE sizeof(void *)
46
47
/* Weak atomic operations prevent the compiler moving other
48
* loads/stores past the atomic operation load/store. However there is
49
diff --git a/include/tcg/oversized-guest.h b/include/tcg/oversized-guest.h
50
deleted file mode 100644
51
index XXXXXXX..XXXXXXX
52
--- a/include/tcg/oversized-guest.h
53
+++ /dev/null
54
@@ -XXX,XX +XXX,XX @@
55
-/* SPDX-License-Identifier: MIT */
56
-/*
57
- * Define TCG_OVERSIZED_GUEST
58
- * Copyright (c) 2008 Fabrice Bellard
59
- */
60
-
61
-#ifndef EXEC_TCG_OVERSIZED_GUEST_H
62
-#define EXEC_TCG_OVERSIZED_GUEST_H
63
-
64
-#include "tcg-target-reg-bits.h"
65
-#include "cpu-param.h"
66
-
67
-/*
68
- * Oversized TCG guests make things like MTTCG hard
69
- * as we can't use atomics for cputlb updates.
70
- */
71
-#if TARGET_LONG_BITS > TCG_TARGET_REG_BITS
72
-#define TCG_OVERSIZED_GUEST 1
73
-#else
74
-#define TCG_OVERSIZED_GUEST 0
75
-#endif
76
-
77
-#endif
9
diff --git a/accel/tcg/cputlb.c b/accel/tcg/cputlb.c
78
diff --git a/accel/tcg/cputlb.c b/accel/tcg/cputlb.c
10
index XXXXXXX..XXXXXXX 100644
79
index XXXXXXX..XXXXXXX 100644
11
--- a/accel/tcg/cputlb.c
80
--- a/accel/tcg/cputlb.c
12
+++ b/accel/tcg/cputlb.c
81
+++ b/accel/tcg/cputlb.c
13
@@ -XXX,XX +XXX,XX @@ static void *atomic_mmu_lookup(CPUArchState *env, target_ulong addr,
82
@@ -XXX,XX +XXX,XX @@
14
CPUTLBEntry *tlbe;
83
#include "qemu/plugin-memory.h"
15
target_ulong tlb_addr;
84
#endif
16
void *hostaddr;
85
#include "tcg/tcg-ldst.h"
17
+ CPUTLBEntryFull *full;
86
-#include "tcg/oversized-guest.h"
18
87
19
tcg_debug_assert(mmu_idx < NB_MMU_MODES);
88
/* DEBUG defines, enable DEBUG_TLB_LOG to log to the CPU_LOG_MMU target */
20
89
/* #define DEBUG_TLB */
21
@@ -XXX,XX +XXX,XX @@ static void *atomic_mmu_lookup(CPUArchState *env, target_ulong addr,
90
@@ -XXX,XX +XXX,XX @@ static inline uint64_t tlb_read_idx(const CPUTLBEntry *entry,
22
tlb_addr = tlb_addr_write(tlbe) & ~TLB_INVALID_MASK;
91
return qatomic_read(ptr);
23
}
92
#else
24
93
const uint64_t *ptr = &entry->addr_idx[access_type];
25
- /* Let the guest notice RMW on a write-only page. */
94
-# if TCG_OVERSIZED_GUEST
26
- if ((prot & PAGE_READ) &&
95
- return *ptr;
27
- unlikely(tlbe->addr_read != (tlb_addr & ~TLB_NOTDIRTY))) {
96
-# else
28
- tlb_fill(env_cpu(env), addr, size,
97
/* ofs might correspond to .addr_write, so use qatomic_read */
29
- MMU_DATA_LOAD, mmu_idx, retaddr);
98
return qatomic_read(ptr);
30
+ if (prot & PAGE_READ) {
99
-# endif
100
#endif
101
}
102
103
@@ -XXX,XX +XXX,XX @@ static void tlb_reset_dirty_range_locked(CPUTLBEntry *tlb_entry,
104
uint32_t *ptr_write = (uint32_t *)&tlb_entry->addr_write;
105
ptr_write += HOST_BIG_ENDIAN;
106
qatomic_set(ptr_write, *ptr_write | TLB_NOTDIRTY);
107
-#elif TCG_OVERSIZED_GUEST
108
- tlb_entry->addr_write |= TLB_NOTDIRTY;
109
#else
110
qatomic_set(&tlb_entry->addr_write,
111
tlb_entry->addr_write | TLB_NOTDIRTY);
112
diff --git a/accel/tcg/tcg-all.c b/accel/tcg/tcg-all.c
113
index XXXXXXX..XXXXXXX 100644
114
--- a/accel/tcg/tcg-all.c
115
+++ b/accel/tcg/tcg-all.c
116
@@ -XXX,XX +XXX,XX @@
117
#include "exec/replay-core.h"
118
#include "system/cpu-timers.h"
119
#include "tcg/startup.h"
120
-#include "tcg/oversized-guest.h"
121
#include "qapi/error.h"
122
#include "qemu/error-report.h"
123
#include "qemu/accel.h"
124
@@ -XXX,XX +XXX,XX @@
125
#include "hw/boards.h"
126
#endif
127
#include "internal-common.h"
128
+#include "cpu-param.h"
129
+
130
131
struct TCGState {
132
AccelState parent_obj;
133
@@ -XXX,XX +XXX,XX @@ DECLARE_INSTANCE_CHECKER(TCGState, TCG_STATE,
134
135
static bool default_mttcg_enabled(void)
136
{
137
- if (icount_enabled() || TCG_OVERSIZED_GUEST) {
138
+ if (icount_enabled()) {
139
return false;
140
}
141
#ifdef TARGET_SUPPORTS_MTTCG
142
@@ -XXX,XX +XXX,XX @@ static void tcg_set_thread(Object *obj, const char *value, Error **errp)
143
TCGState *s = TCG_STATE(obj);
144
145
if (strcmp(value, "multi") == 0) {
146
- if (TCG_OVERSIZED_GUEST) {
147
- error_setg(errp, "No MTTCG when guest word size > hosts");
148
- } else if (icount_enabled()) {
149
+ if (icount_enabled()) {
150
error_setg(errp, "No MTTCG when icount is enabled");
151
} else {
152
#ifndef TARGET_SUPPORTS_MTTCG
153
diff --git a/target/arm/ptw.c b/target/arm/ptw.c
154
index XXXXXXX..XXXXXXX 100644
155
--- a/target/arm/ptw.c
156
+++ b/target/arm/ptw.c
157
@@ -XXX,XX +XXX,XX @@
158
#include "internals.h"
159
#include "cpu-features.h"
160
#include "idau.h"
161
-#ifdef CONFIG_TCG
162
-# include "tcg/oversized-guest.h"
163
-#endif
164
165
typedef struct S1Translate {
166
/*
167
@@ -XXX,XX +XXX,XX @@ static uint64_t arm_casq_ptw(CPUARMState *env, uint64_t old_val,
168
ptw->out_rw = true;
169
}
170
171
-#ifdef CONFIG_ATOMIC64
172
if (ptw->out_be) {
173
old_val = cpu_to_be64(old_val);
174
new_val = cpu_to_be64(new_val);
175
@@ -XXX,XX +XXX,XX @@ static uint64_t arm_casq_ptw(CPUARMState *env, uint64_t old_val,
176
cur_val = qatomic_cmpxchg__nocheck((uint64_t *)host, old_val, new_val);
177
cur_val = le64_to_cpu(cur_val);
178
}
179
-#else
180
- /*
181
- * We can't support the full 64-bit atomic cmpxchg on the host.
182
- * Because this is only used for FEAT_HAFDBS, which is only for AA64,
183
- * we know that TCG_OVERSIZED_GUEST is set, which means that we are
184
- * running in round-robin mode and could only race with dma i/o.
185
- */
186
-#if !TCG_OVERSIZED_GUEST
187
-# error "Unexpected configuration"
188
-#endif
189
- bool locked = bql_locked();
190
- if (!locked) {
191
- bql_lock();
192
- }
193
- if (ptw->out_be) {
194
- cur_val = ldq_be_p(host);
195
- if (cur_val == old_val) {
196
- stq_be_p(host, new_val);
197
- }
198
- } else {
199
- cur_val = ldq_le_p(host);
200
- if (cur_val == old_val) {
201
- stq_le_p(host, new_val);
202
- }
203
- }
204
- if (!locked) {
205
- bql_unlock();
206
- }
207
-#endif
208
-
209
return cur_val;
210
#else
211
/* AArch32 does not have FEAT_HADFS; non-TCG guests only use debug-mode. */
212
diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c
213
index XXXXXXX..XXXXXXX 100644
214
--- a/target/riscv/cpu_helper.c
215
+++ b/target/riscv/cpu_helper.c
216
@@ -XXX,XX +XXX,XX @@
217
#include "system/cpu-timers.h"
218
#include "cpu_bits.h"
219
#include "debug.h"
220
-#include "tcg/oversized-guest.h"
221
#include "pmp.h"
222
223
int riscv_env_mmu_index(CPURISCVState *env, bool ifetch)
224
@@ -XXX,XX +XXX,XX @@ static int get_physical_address(CPURISCVState *env, hwaddr *physical,
225
hwaddr pte_addr;
226
int i;
227
228
-#if !TCG_OVERSIZED_GUEST
229
-restart:
230
-#endif
231
+ restart:
232
for (i = 0; i < levels; i++, ptshift -= ptidxbits) {
233
target_ulong idx;
234
if (i == 0) {
235
@@ -XXX,XX +XXX,XX @@ restart:
236
false, MEMTXATTRS_UNSPECIFIED);
237
if (memory_region_is_ram(mr)) {
238
target_ulong *pte_pa = qemu_map_ram_ptr(mr->ram_block, addr1);
239
-#if TCG_OVERSIZED_GUEST
240
- /*
241
- * MTTCG is not enabled on oversized TCG guests so
242
- * page table updates do not need to be atomic
243
- */
244
- *pte_pa = pte = updated_pte;
245
-#else
246
target_ulong old_pte;
247
if (riscv_cpu_sxl(env) == MXL_RV32) {
248
old_pte = qatomic_cmpxchg((uint32_t *)pte_pa, pte, updated_pte);
249
@@ -XXX,XX +XXX,XX @@ restart:
250
goto restart;
251
}
252
pte = updated_pte;
253
-#endif
254
} else {
31
/*
255
/*
32
- * Since we don't support reads and writes to different addresses,
256
* Misconfigured PTE in ROM (AD bits are not preset) or
33
- * and we do have the proper page loaded for write, this shouldn't
257
diff --git a/docs/devel/multi-thread-tcg.rst b/docs/devel/multi-thread-tcg.rst
34
- * ever return. But just in case, handle via stop-the-world.
258
index XXXXXXX..XXXXXXX 100644
35
+ * Let the guest notice RMW on a write-only page.
259
--- a/docs/devel/multi-thread-tcg.rst
36
+ * We have just verified that the page is writable.
260
+++ b/docs/devel/multi-thread-tcg.rst
37
+ * Subpage lookups may have left TLB_INVALID_MASK set,
261
@@ -XXX,XX +XXX,XX @@ if:
38
+ * but addr_read will only be -1 if PAGE_READ was unset.
262
39
*/
263
* forced by --accel tcg,thread=single
40
- goto stop_the_world;
264
* enabling --icount mode
41
+ if (unlikely(tlbe->addr_read == -1)) {
265
-* 64 bit guests on 32 bit hosts (TCG_OVERSIZED_GUEST)
42
+ tlb_fill(env_cpu(env), addr, size,
266
43
+ MMU_DATA_LOAD, mmu_idx, retaddr);
267
In the general case of running translated code there should be no
44
+ /*
268
inter-vCPU dependencies and all vCPUs should be able to run at full
45
+ * Since we don't support reads and writes to different
46
+ * addresses, and we do have the proper page loaded for
47
+ * write, this shouldn't ever return. But just in case,
48
+ * handle via stop-the-world.
49
+ */
50
+ goto stop_the_world;
51
+ }
52
+ /* Collect TLB_WATCHPOINT for read. */
53
+ tlb_addr |= tlbe->addr_read;
54
}
55
} else /* if (prot & PAGE_READ) */ {
56
tlb_addr = tlbe->addr_read;
57
@@ -XXX,XX +XXX,XX @@ static void *atomic_mmu_lookup(CPUArchState *env, target_ulong addr,
58
}
59
60
hostaddr = (void *)((uintptr_t)addr + tlbe->addend);
61
+ full = &env_tlb(env)->d[mmu_idx].fulltlb[index];
62
63
if (unlikely(tlb_addr & TLB_NOTDIRTY)) {
64
- notdirty_write(env_cpu(env), addr, size,
65
- &env_tlb(env)->d[mmu_idx].fulltlb[index], retaddr);
66
+ notdirty_write(env_cpu(env), addr, size, full, retaddr);
67
+ }
68
+
69
+ if (unlikely(tlb_addr & TLB_WATCHPOINT)) {
70
+ QEMU_BUILD_BUG_ON(PAGE_READ != BP_MEM_READ);
71
+ QEMU_BUILD_BUG_ON(PAGE_WRITE != BP_MEM_WRITE);
72
+ /* therefore prot == watchpoint bits */
73
+ cpu_check_watchpoint(env_cpu(env), addr, size,
74
+ full->attrs, prot, retaddr);
75
}
76
77
return hostaddr;
78
--
269
--
79
2.34.1
270
2.43.0
271
272
diff view generated by jsdifflib
1
This allows us to easily find all branches that use a label.
1
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
2
Since 'refs' is only tested vs zero, remove it and test for
3
an empty list instead. Drop the use of bitfields, which had
4
been used to pack refs into a single 32-bit word.
5
6
Reviewed-by: Taylor Simpson <tsimpson@quicinc.com>
7
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
8
---
3
---
9
include/tcg/tcg-op.h | 7 +------
4
tcg/tcg-op-ldst.c | 21 +++------------------
10
include/tcg/tcg.h | 19 +++++++++++++------
5
tcg/tcg.c | 4 +---
11
tcg/tcg-op.c | 22 +++++++++++++++++++---
6
2 files changed, 4 insertions(+), 21 deletions(-)
12
tcg/tcg.c | 30 ++++++++++++++++++++----------
13
4 files changed, 53 insertions(+), 25 deletions(-)
14
7
15
diff --git a/include/tcg/tcg-op.h b/include/tcg/tcg-op.h
8
diff --git a/tcg/tcg-op-ldst.c b/tcg/tcg-op-ldst.c
16
index XXXXXXX..XXXXXXX 100644
9
index XXXXXXX..XXXXXXX 100644
17
--- a/include/tcg/tcg-op.h
10
--- a/tcg/tcg-op-ldst.c
18
+++ b/include/tcg/tcg-op.h
11
+++ b/tcg/tcg-op-ldst.c
19
@@ -XXX,XX +XXX,XX @@ static inline void gen_set_label(TCGLabel *l)
12
@@ -XXX,XX +XXX,XX @@ static MemOp tcg_canonicalize_memop(MemOp op, bool is64, bool st)
20
tcg_gen_op1(INDEX_op_set_label, label_arg(l));
13
static void gen_ldst(TCGOpcode opc, TCGType type, TCGTemp *vl, TCGTemp *vh,
21
}
14
TCGTemp *addr, MemOpIdx oi)
22
15
{
23
-static inline void tcg_gen_br(TCGLabel *l)
16
- if (TCG_TARGET_REG_BITS == 64 || tcg_ctx->addr_type == TCG_TYPE_I32) {
24
-{
17
- if (vh) {
25
- l->refs++;
18
- tcg_gen_op4(opc, type, temp_arg(vl), temp_arg(vh),
26
- tcg_gen_op1(INDEX_op_br, label_arg(l));
19
- temp_arg(addr), oi);
27
-}
20
- } else {
21
- tcg_gen_op3(opc, type, temp_arg(vl), temp_arg(addr), oi);
22
- }
23
+ if (vh) {
24
+ tcg_gen_op4(opc, type, temp_arg(vl), temp_arg(vh), temp_arg(addr), oi);
25
} else {
26
- /* See TCGV_LOW/HIGH. */
27
- TCGTemp *al = addr + HOST_BIG_ENDIAN;
28
- TCGTemp *ah = addr + !HOST_BIG_ENDIAN;
28
-
29
-
29
+void tcg_gen_br(TCGLabel *l);
30
- if (vh) {
30
void tcg_gen_mb(TCGBar);
31
- tcg_gen_op5(opc, type, temp_arg(vl), temp_arg(vh),
31
32
- temp_arg(al), temp_arg(ah), oi);
32
/* Helper calls. */
33
- } else {
33
diff --git a/include/tcg/tcg.h b/include/tcg/tcg.h
34
- tcg_gen_op4(opc, type, temp_arg(vl),
34
index XXXXXXX..XXXXXXX 100644
35
- temp_arg(al), temp_arg(ah), oi);
35
--- a/include/tcg/tcg.h
36
- }
36
+++ b/include/tcg/tcg.h
37
+ tcg_gen_op3(opc, type, temp_arg(vl), temp_arg(addr), oi);
37
@@ -XXX,XX +XXX,XX @@ struct TCGRelocation {
38
int type;
39
};
40
41
+typedef struct TCGOp TCGOp;
42
+typedef struct TCGLabelUse TCGLabelUse;
43
+struct TCGLabelUse {
44
+ QSIMPLEQ_ENTRY(TCGLabelUse) next;
45
+ TCGOp *op;
46
+};
47
+
48
typedef struct TCGLabel TCGLabel;
49
struct TCGLabel {
50
- unsigned present : 1;
51
- unsigned has_value : 1;
52
- unsigned id : 14;
53
- unsigned refs : 16;
54
+ bool present;
55
+ bool has_value;
56
+ uint16_t id;
57
union {
58
uintptr_t value;
59
const tcg_insn_unit *value_ptr;
60
} u;
61
+ QSIMPLEQ_HEAD(, TCGLabelUse) branches;
62
QSIMPLEQ_HEAD(, TCGRelocation) relocs;
63
QSIMPLEQ_ENTRY(TCGLabel) next;
64
};
65
@@ -XXX,XX +XXX,XX @@ typedef struct TCGTempSet {
66
#define SYNC_ARG (1 << 0)
67
typedef uint32_t TCGLifeData;
68
69
-typedef struct TCGOp {
70
+struct TCGOp {
71
TCGOpcode opc : 8;
72
unsigned nargs : 8;
73
74
@@ -XXX,XX +XXX,XX @@ typedef struct TCGOp {
75
76
/* Arguments for the opcode. */
77
TCGArg args[];
78
-} TCGOp;
79
+};
80
81
#define TCGOP_CALLI(X) (X)->param1
82
#define TCGOP_CALLO(X) (X)->param2
83
diff --git a/tcg/tcg-op.c b/tcg/tcg-op.c
84
index XXXXXXX..XXXXXXX 100644
85
--- a/tcg/tcg-op.c
86
+++ b/tcg/tcg-op.c
87
@@ -XXX,XX +XXX,XX @@ void tcg_gen_op6(TCGOpcode opc, TCGArg a1, TCGArg a2, TCGArg a3,
88
op->args[5] = a6;
89
}
90
91
+/* Generic ops. */
92
+
93
+static void add_last_as_label_use(TCGLabel *l)
94
+{
95
+ TCGLabelUse *u = tcg_malloc(sizeof(TCGLabelUse));
96
+
97
+ u->op = tcg_last_op();
98
+ QSIMPLEQ_INSERT_TAIL(&l->branches, u, next);
99
+}
100
+
101
+void tcg_gen_br(TCGLabel *l)
102
+{
103
+ tcg_gen_op1(INDEX_op_br, label_arg(l));
104
+ add_last_as_label_use(l);
105
+}
106
+
107
void tcg_gen_mb(TCGBar mb_type)
108
{
109
if (tcg_ctx->gen_tb->cflags & CF_PARALLEL) {
110
@@ -XXX,XX +XXX,XX @@ void tcg_gen_brcond_i32(TCGCond cond, TCGv_i32 arg1, TCGv_i32 arg2, TCGLabel *l)
111
if (cond == TCG_COND_ALWAYS) {
112
tcg_gen_br(l);
113
} else if (cond != TCG_COND_NEVER) {
114
- l->refs++;
115
tcg_gen_op4ii_i32(INDEX_op_brcond_i32, arg1, arg2, cond, label_arg(l));
116
+ add_last_as_label_use(l);
117
}
38
}
118
}
39
}
119
120
@@ -XXX,XX +XXX,XX @@ void tcg_gen_brcond_i64(TCGCond cond, TCGv_i64 arg1, TCGv_i64 arg2, TCGLabel *l)
121
if (cond == TCG_COND_ALWAYS) {
122
tcg_gen_br(l);
123
} else if (cond != TCG_COND_NEVER) {
124
- l->refs++;
125
if (TCG_TARGET_REG_BITS == 32) {
126
tcg_gen_op6ii_i32(INDEX_op_brcond2_i32, TCGV_LOW(arg1),
127
TCGV_HIGH(arg1), TCGV_LOW(arg2),
128
@@ -XXX,XX +XXX,XX @@ void tcg_gen_brcond_i64(TCGCond cond, TCGv_i64 arg1, TCGv_i64 arg2, TCGLabel *l)
129
tcg_gen_op4ii_i64(INDEX_op_brcond_i64, arg1, arg2, cond,
130
label_arg(l));
131
}
132
+ add_last_as_label_use(l);
133
}
134
}
135
136
@@ -XXX,XX +XXX,XX @@ void tcg_gen_brcondi_i64(TCGCond cond, TCGv_i64 arg1, int64_t arg2, TCGLabel *l)
137
} else if (cond == TCG_COND_ALWAYS) {
138
tcg_gen_br(l);
139
} else if (cond != TCG_COND_NEVER) {
140
- l->refs++;
141
tcg_gen_op6ii_i32(INDEX_op_brcond2_i32,
142
TCGV_LOW(arg1), TCGV_HIGH(arg1),
143
tcg_constant_i32(arg2),
144
tcg_constant_i32(arg2 >> 32),
145
cond, label_arg(l));
146
+ add_last_as_label_use(l);
147
}
148
}
149
40
150
diff --git a/tcg/tcg.c b/tcg/tcg.c
41
diff --git a/tcg/tcg.c b/tcg/tcg.c
151
index XXXXXXX..XXXXXXX 100644
42
index XXXXXXX..XXXXXXX 100644
152
--- a/tcg/tcg.c
43
--- a/tcg/tcg.c
153
+++ b/tcg/tcg.c
44
+++ b/tcg/tcg.c
154
@@ -XXX,XX +XXX,XX @@ TCGLabel *gen_new_label(void)
45
@@ -XXX,XX +XXX,XX @@ void tcg_func_start(TCGContext *s)
155
46
s->emit_before_op = NULL;
156
memset(l, 0, sizeof(TCGLabel));
47
QSIMPLEQ_INIT(&s->labels);
157
l->id = s->nb_labels++;
48
158
+ QSIMPLEQ_INIT(&l->branches);
49
- tcg_debug_assert(s->addr_type == TCG_TYPE_I32 ||
159
QSIMPLEQ_INIT(&l->relocs);
50
- s->addr_type == TCG_TYPE_I64);
160
51
-
161
QSIMPLEQ_INSERT_TAIL(&s->labels, l, next);
52
+ tcg_debug_assert(s->addr_type <= TCG_TYPE_REG);
162
@@ -XXX,XX +XXX,XX @@ static void process_op_defs(TCGContext *s)
53
tcg_debug_assert(s->insn_start_words > 0);
163
}
164
}
54
}
165
55
166
+static void remove_label_use(TCGOp *op, int idx)
167
+{
168
+ TCGLabel *label = arg_label(op->args[idx]);
169
+ TCGLabelUse *use;
170
+
171
+ QSIMPLEQ_FOREACH(use, &label->branches, next) {
172
+ if (use->op == op) {
173
+ QSIMPLEQ_REMOVE(&label->branches, use, TCGLabelUse, next);
174
+ return;
175
+ }
176
+ }
177
+ g_assert_not_reached();
178
+}
179
+
180
void tcg_op_remove(TCGContext *s, TCGOp *op)
181
{
182
- TCGLabel *label;
183
-
184
switch (op->opc) {
185
case INDEX_op_br:
186
- label = arg_label(op->args[0]);
187
- label->refs--;
188
+ remove_label_use(op, 0);
189
break;
190
case INDEX_op_brcond_i32:
191
case INDEX_op_brcond_i64:
192
- label = arg_label(op->args[3]);
193
- label->refs--;
194
+ remove_label_use(op, 3);
195
break;
196
case INDEX_op_brcond2_i32:
197
- label = arg_label(op->args[5]);
198
- label->refs--;
199
+ remove_label_use(op, 5);
200
break;
201
default:
202
break;
203
@@ -XXX,XX +XXX,XX @@ reachable_code_pass(TCGContext *s)
204
dead = false;
205
}
206
207
- if (label->refs == 0) {
208
+ if (QSIMPLEQ_EMPTY(&label->branches)) {
209
/*
210
* While there is an occasional backward branch, virtually
211
* all branches generated by the translators are forward.
212
@@ -XXX,XX +XXX,XX @@ int tcg_gen_code(TCGContext *s, TranslationBlock *tb, target_ulong pc_start)
213
bool error = false;
214
215
QSIMPLEQ_FOREACH(l, &s->labels, next) {
216
- if (unlikely(!l->present) && l->refs) {
217
+ if (unlikely(!l->present) && !QSIMPLEQ_EMPTY(&l->branches)) {
218
qemu_log_mask(CPU_LOG_TB_OP,
219
"$L%d referenced but not present.\n", l->id);
220
error = true;
221
--
56
--
222
2.34.1
57
2.43.0
58
59
diff view generated by jsdifflib
1
Remove the first label and redirect all uses to the second.
1
Since 64-on-32 is now unsupported, guest addresses always
2
fit in one host register. Drop the replication of opcodes.
2
3
3
Tested-by: Taylor Simpson <tsimpson@quicinc.com>
4
Reviewed-by: Taylor Simpson <tsimpson@quicinc.com>
5
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
6
---
5
---
7
tcg/tcg.c | 44 +++++++++++++++++++++++++++++++++++++++++++-
6
include/tcg/tcg-opc.h | 28 ++------
8
1 file changed, 43 insertions(+), 1 deletion(-)
7
tcg/optimize.c | 21 ++----
8
tcg/tcg-op-ldst.c | 82 +++++----------------
9
tcg/tcg.c | 42 ++++-------
10
tcg/tci.c | 119 ++++++-------------------------
11
tcg/aarch64/tcg-target.c.inc | 36 ++++------
12
tcg/arm/tcg-target.c.inc | 40 +++--------
13
tcg/i386/tcg-target.c.inc | 69 ++++--------------
14
tcg/loongarch64/tcg-target.c.inc | 36 ++++------
15
tcg/mips/tcg-target.c.inc | 51 +++----------
16
tcg/ppc/tcg-target.c.inc | 68 ++++--------------
17
tcg/riscv/tcg-target.c.inc | 24 +++----
18
tcg/s390x/tcg-target.c.inc | 36 ++++------
19
tcg/sparc64/tcg-target.c.inc | 24 +++----
20
tcg/tci/tcg-target.c.inc | 60 ++++------------
21
15 files changed, 177 insertions(+), 559 deletions(-)
9
22
23
diff --git a/include/tcg/tcg-opc.h b/include/tcg/tcg-opc.h
24
index XXXXXXX..XXXXXXX 100644
25
--- a/include/tcg/tcg-opc.h
26
+++ b/include/tcg/tcg-opc.h
27
@@ -XXX,XX +XXX,XX @@ DEF(goto_ptr, 0, 1, 0, TCG_OPF_BB_EXIT | TCG_OPF_BB_END)
28
DEF(plugin_cb, 0, 0, 1, TCG_OPF_NOT_PRESENT)
29
DEF(plugin_mem_cb, 0, 1, 1, TCG_OPF_NOT_PRESENT)
30
31
-/* Replicate ld/st ops for 32 and 64-bit guest addresses. */
32
-DEF(qemu_ld_a32_i32, 1, 1, 1,
33
+DEF(qemu_ld_i32, 1, 1, 1,
34
TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
35
-DEF(qemu_st_a32_i32, 0, 1 + 1, 1,
36
+DEF(qemu_st_i32, 0, 1 + 1, 1,
37
TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
38
-DEF(qemu_ld_a32_i64, DATA64_ARGS, 1, 1,
39
+DEF(qemu_ld_i64, DATA64_ARGS, 1, 1,
40
TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
41
-DEF(qemu_st_a32_i64, 0, DATA64_ARGS + 1, 1,
42
- TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
43
-
44
-DEF(qemu_ld_a64_i32, 1, DATA64_ARGS, 1,
45
- TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
46
-DEF(qemu_st_a64_i32, 0, 1 + DATA64_ARGS, 1,
47
- TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
48
-DEF(qemu_ld_a64_i64, DATA64_ARGS, DATA64_ARGS, 1,
49
- TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
50
-DEF(qemu_st_a64_i64, 0, DATA64_ARGS + DATA64_ARGS, 1,
51
+DEF(qemu_st_i64, 0, DATA64_ARGS + 1, 1,
52
TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
53
54
/* Only used by i386 to cope with stupid register constraints. */
55
-DEF(qemu_st8_a32_i32, 0, 1 + 1, 1,
56
- TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
57
-DEF(qemu_st8_a64_i32, 0, 1 + DATA64_ARGS, 1,
58
+DEF(qemu_st8_i32, 0, 1 + 1, 1,
59
TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
60
61
/* Only for 64-bit hosts at the moment. */
62
-DEF(qemu_ld_a32_i128, 2, 1, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
63
-DEF(qemu_ld_a64_i128, 2, 1, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
64
-DEF(qemu_st_a32_i128, 0, 3, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
65
-DEF(qemu_st_a64_i128, 0, 3, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
66
+DEF(qemu_ld_i128, 2, 1, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
67
+DEF(qemu_st_i128, 0, 3, 1, TCG_OPF_CALL_CLOBBER | TCG_OPF_SIDE_EFFECTS)
68
69
/* Host vector support. */
70
71
diff --git a/tcg/optimize.c b/tcg/optimize.c
72
index XXXXXXX..XXXXXXX 100644
73
--- a/tcg/optimize.c
74
+++ b/tcg/optimize.c
75
@@ -XXX,XX +XXX,XX @@ void tcg_optimize(TCGContext *s)
76
CASE_OP_32_64_VEC(orc):
77
done = fold_orc(&ctx, op);
78
break;
79
- case INDEX_op_qemu_ld_a32_i32:
80
- case INDEX_op_qemu_ld_a64_i32:
81
+ case INDEX_op_qemu_ld_i32:
82
done = fold_qemu_ld_1reg(&ctx, op);
83
break;
84
- case INDEX_op_qemu_ld_a32_i64:
85
- case INDEX_op_qemu_ld_a64_i64:
86
+ case INDEX_op_qemu_ld_i64:
87
if (TCG_TARGET_REG_BITS == 64) {
88
done = fold_qemu_ld_1reg(&ctx, op);
89
break;
90
}
91
QEMU_FALLTHROUGH;
92
- case INDEX_op_qemu_ld_a32_i128:
93
- case INDEX_op_qemu_ld_a64_i128:
94
+ case INDEX_op_qemu_ld_i128:
95
done = fold_qemu_ld_2reg(&ctx, op);
96
break;
97
- case INDEX_op_qemu_st8_a32_i32:
98
- case INDEX_op_qemu_st8_a64_i32:
99
- case INDEX_op_qemu_st_a32_i32:
100
- case INDEX_op_qemu_st_a64_i32:
101
- case INDEX_op_qemu_st_a32_i64:
102
- case INDEX_op_qemu_st_a64_i64:
103
- case INDEX_op_qemu_st_a32_i128:
104
- case INDEX_op_qemu_st_a64_i128:
105
+ case INDEX_op_qemu_st8_i32:
106
+ case INDEX_op_qemu_st_i32:
107
+ case INDEX_op_qemu_st_i64:
108
+ case INDEX_op_qemu_st_i128:
109
done = fold_qemu_st(&ctx, op);
110
break;
111
CASE_OP_32_64(rem):
112
diff --git a/tcg/tcg-op-ldst.c b/tcg/tcg-op-ldst.c
113
index XXXXXXX..XXXXXXX 100644
114
--- a/tcg/tcg-op-ldst.c
115
+++ b/tcg/tcg-op-ldst.c
116
@@ -XXX,XX +XXX,XX @@ static void tcg_gen_qemu_ld_i32_int(TCGv_i32 val, TCGTemp *addr,
117
MemOp orig_memop;
118
MemOpIdx orig_oi, oi;
119
TCGv_i64 copy_addr;
120
- TCGOpcode opc;
121
122
tcg_gen_req_mo(TCG_MO_LD_LD | TCG_MO_ST_LD);
123
orig_memop = memop = tcg_canonicalize_memop(memop, 0, 0);
124
@@ -XXX,XX +XXX,XX @@ static void tcg_gen_qemu_ld_i32_int(TCGv_i32 val, TCGTemp *addr,
125
}
126
127
copy_addr = plugin_maybe_preserve_addr(addr);
128
- if (tcg_ctx->addr_type == TCG_TYPE_I32) {
129
- opc = INDEX_op_qemu_ld_a32_i32;
130
- } else {
131
- opc = INDEX_op_qemu_ld_a64_i32;
132
- }
133
- gen_ldst(opc, TCG_TYPE_I32, tcgv_i32_temp(val), NULL, addr, oi);
134
+ gen_ldst(INDEX_op_qemu_ld_i32, TCG_TYPE_I32,
135
+ tcgv_i32_temp(val), NULL, addr, oi);
136
plugin_gen_mem_callbacks_i32(val, copy_addr, addr, orig_oi,
137
QEMU_PLUGIN_MEM_R);
138
139
@@ -XXX,XX +XXX,XX @@ static void tcg_gen_qemu_st_i32_int(TCGv_i32 val, TCGTemp *addr,
140
}
141
142
if (TCG_TARGET_HAS_qemu_st8_i32 && (memop & MO_SIZE) == MO_8) {
143
- if (tcg_ctx->addr_type == TCG_TYPE_I32) {
144
- opc = INDEX_op_qemu_st8_a32_i32;
145
- } else {
146
- opc = INDEX_op_qemu_st8_a64_i32;
147
- }
148
+ opc = INDEX_op_qemu_st8_i32;
149
} else {
150
- if (tcg_ctx->addr_type == TCG_TYPE_I32) {
151
- opc = INDEX_op_qemu_st_a32_i32;
152
- } else {
153
- opc = INDEX_op_qemu_st_a64_i32;
154
- }
155
+ opc = INDEX_op_qemu_st_i32;
156
}
157
gen_ldst(opc, TCG_TYPE_I32, tcgv_i32_temp(val), NULL, addr, oi);
158
plugin_gen_mem_callbacks_i32(val, NULL, addr, orig_oi, QEMU_PLUGIN_MEM_W);
159
@@ -XXX,XX +XXX,XX @@ static void tcg_gen_qemu_ld_i64_int(TCGv_i64 val, TCGTemp *addr,
160
MemOp orig_memop;
161
MemOpIdx orig_oi, oi;
162
TCGv_i64 copy_addr;
163
- TCGOpcode opc;
164
165
if (TCG_TARGET_REG_BITS == 32 && (memop & MO_SIZE) < MO_64) {
166
tcg_gen_qemu_ld_i32_int(TCGV_LOW(val), addr, idx, memop);
167
@@ -XXX,XX +XXX,XX @@ static void tcg_gen_qemu_ld_i64_int(TCGv_i64 val, TCGTemp *addr,
168
}
169
170
copy_addr = plugin_maybe_preserve_addr(addr);
171
- if (tcg_ctx->addr_type == TCG_TYPE_I32) {
172
- opc = INDEX_op_qemu_ld_a32_i64;
173
- } else {
174
- opc = INDEX_op_qemu_ld_a64_i64;
175
- }
176
- gen_ldst_i64(opc, val, addr, oi);
177
+ gen_ldst_i64(INDEX_op_qemu_ld_i64, val, addr, oi);
178
plugin_gen_mem_callbacks_i64(val, copy_addr, addr, orig_oi,
179
QEMU_PLUGIN_MEM_R);
180
181
@@ -XXX,XX +XXX,XX @@ static void tcg_gen_qemu_st_i64_int(TCGv_i64 val, TCGTemp *addr,
182
{
183
TCGv_i64 swap = NULL;
184
MemOpIdx orig_oi, oi;
185
- TCGOpcode opc;
186
187
if (TCG_TARGET_REG_BITS == 32 && (memop & MO_SIZE) < MO_64) {
188
tcg_gen_qemu_st_i32_int(TCGV_LOW(val), addr, idx, memop);
189
@@ -XXX,XX +XXX,XX @@ static void tcg_gen_qemu_st_i64_int(TCGv_i64 val, TCGTemp *addr,
190
oi = make_memop_idx(memop, idx);
191
}
192
193
- if (tcg_ctx->addr_type == TCG_TYPE_I32) {
194
- opc = INDEX_op_qemu_st_a32_i64;
195
- } else {
196
- opc = INDEX_op_qemu_st_a64_i64;
197
- }
198
- gen_ldst_i64(opc, val, addr, oi);
199
+ gen_ldst_i64(INDEX_op_qemu_st_i64, val, addr, oi);
200
plugin_gen_mem_callbacks_i64(val, NULL, addr, orig_oi, QEMU_PLUGIN_MEM_W);
201
202
if (swap) {
203
@@ -XXX,XX +XXX,XX @@ static void tcg_gen_qemu_ld_i128_int(TCGv_i128 val, TCGTemp *addr,
204
{
205
MemOpIdx orig_oi;
206
TCGv_i64 ext_addr = NULL;
207
- TCGOpcode opc;
208
209
check_max_alignment(memop_alignment_bits(memop));
210
tcg_gen_req_mo(TCG_MO_LD_LD | TCG_MO_ST_LD);
211
@@ -XXX,XX +XXX,XX @@ static void tcg_gen_qemu_ld_i128_int(TCGv_i128 val, TCGTemp *addr,
212
hi = TCGV128_HIGH(val);
213
}
214
215
- if (tcg_ctx->addr_type == TCG_TYPE_I32) {
216
- opc = INDEX_op_qemu_ld_a32_i128;
217
- } else {
218
- opc = INDEX_op_qemu_ld_a64_i128;
219
- }
220
- gen_ldst(opc, TCG_TYPE_I128, tcgv_i64_temp(lo),
221
+ gen_ldst(INDEX_op_qemu_ld_i128, TCG_TYPE_I128, tcgv_i64_temp(lo),
222
tcgv_i64_temp(hi), addr, oi);
223
224
if (need_bswap) {
225
@@ -XXX,XX +XXX,XX @@ static void tcg_gen_qemu_ld_i128_int(TCGv_i128 val, TCGTemp *addr,
226
canonicalize_memop_i128_as_i64(mop, memop);
227
need_bswap = (mop[0] ^ memop) & MO_BSWAP;
228
229
- if (tcg_ctx->addr_type == TCG_TYPE_I32) {
230
- opc = INDEX_op_qemu_ld_a32_i64;
231
- } else {
232
- opc = INDEX_op_qemu_ld_a64_i64;
233
- }
234
-
235
/*
236
* Since there are no global TCGv_i128, there is no visible state
237
* changed if the second load faults. Load directly into the two
238
@@ -XXX,XX +XXX,XX @@ static void tcg_gen_qemu_ld_i128_int(TCGv_i128 val, TCGTemp *addr,
239
y = TCGV128_LOW(val);
240
}
241
242
- gen_ldst_i64(opc, x, addr, make_memop_idx(mop[0], idx));
243
+ gen_ldst_i64(INDEX_op_qemu_ld_i64, x, addr,
244
+ make_memop_idx(mop[0], idx));
245
246
if (need_bswap) {
247
tcg_gen_bswap64_i64(x, x);
248
@@ -XXX,XX +XXX,XX @@ static void tcg_gen_qemu_ld_i128_int(TCGv_i128 val, TCGTemp *addr,
249
addr_p8 = tcgv_i64_temp(t);
250
}
251
252
- gen_ldst_i64(opc, y, addr_p8, make_memop_idx(mop[1], idx));
253
+ gen_ldst_i64(INDEX_op_qemu_ld_i64, y, addr_p8,
254
+ make_memop_idx(mop[1], idx));
255
tcg_temp_free_internal(addr_p8);
256
257
if (need_bswap) {
258
@@ -XXX,XX +XXX,XX @@ static void tcg_gen_qemu_st_i128_int(TCGv_i128 val, TCGTemp *addr,
259
{
260
MemOpIdx orig_oi;
261
TCGv_i64 ext_addr = NULL;
262
- TCGOpcode opc;
263
264
check_max_alignment(memop_alignment_bits(memop));
265
tcg_gen_req_mo(TCG_MO_ST_LD | TCG_MO_ST_ST);
266
@@ -XXX,XX +XXX,XX @@ static void tcg_gen_qemu_st_i128_int(TCGv_i128 val, TCGTemp *addr,
267
hi = TCGV128_HIGH(val);
268
}
269
270
- if (tcg_ctx->addr_type == TCG_TYPE_I32) {
271
- opc = INDEX_op_qemu_st_a32_i128;
272
- } else {
273
- opc = INDEX_op_qemu_st_a64_i128;
274
- }
275
- gen_ldst(opc, TCG_TYPE_I128, tcgv_i64_temp(lo),
276
- tcgv_i64_temp(hi), addr, oi);
277
+ gen_ldst(INDEX_op_qemu_st_i128, TCG_TYPE_I128,
278
+ tcgv_i64_temp(lo), tcgv_i64_temp(hi), addr, oi);
279
280
if (need_bswap) {
281
tcg_temp_free_i64(lo);
282
@@ -XXX,XX +XXX,XX @@ static void tcg_gen_qemu_st_i128_int(TCGv_i128 val, TCGTemp *addr,
283
284
canonicalize_memop_i128_as_i64(mop, memop);
285
286
- if (tcg_ctx->addr_type == TCG_TYPE_I32) {
287
- opc = INDEX_op_qemu_st_a32_i64;
288
- } else {
289
- opc = INDEX_op_qemu_st_a64_i64;
290
- }
291
-
292
if ((memop & MO_BSWAP) == MO_LE) {
293
x = TCGV128_LOW(val);
294
y = TCGV128_HIGH(val);
295
@@ -XXX,XX +XXX,XX @@ static void tcg_gen_qemu_st_i128_int(TCGv_i128 val, TCGTemp *addr,
296
x = b;
297
}
298
299
- gen_ldst_i64(opc, x, addr, make_memop_idx(mop[0], idx));
300
+ gen_ldst_i64(INDEX_op_qemu_st_i64, x, addr,
301
+ make_memop_idx(mop[0], idx));
302
303
if (tcg_ctx->addr_type == TCG_TYPE_I32) {
304
TCGv_i32 t = tcg_temp_ebb_new_i32();
305
@@ -XXX,XX +XXX,XX @@ static void tcg_gen_qemu_st_i128_int(TCGv_i128 val, TCGTemp *addr,
306
307
if (b) {
308
tcg_gen_bswap64_i64(b, y);
309
- gen_ldst_i64(opc, b, addr_p8, make_memop_idx(mop[1], idx));
310
+ gen_ldst_i64(INDEX_op_qemu_st_i64, b, addr_p8,
311
+ make_memop_idx(mop[1], idx));
312
tcg_temp_free_i64(b);
313
} else {
314
- gen_ldst_i64(opc, y, addr_p8, make_memop_idx(mop[1], idx));
315
+ gen_ldst_i64(INDEX_op_qemu_st_i64, y, addr_p8,
316
+ make_memop_idx(mop[1], idx));
317
}
318
tcg_temp_free_internal(addr_p8);
319
} else {
10
diff --git a/tcg/tcg.c b/tcg/tcg.c
320
diff --git a/tcg/tcg.c b/tcg/tcg.c
11
index XXXXXXX..XXXXXXX 100644
321
index XXXXXXX..XXXXXXX 100644
12
--- a/tcg/tcg.c
322
--- a/tcg/tcg.c
13
+++ b/tcg/tcg.c
323
+++ b/tcg/tcg.c
14
@@ -XXX,XX +XXX,XX @@ TCGOp *tcg_op_insert_after(TCGContext *s, TCGOp *old_op,
324
@@ -XXX,XX +XXX,XX @@ bool tcg_op_supported(TCGOpcode op, TCGType type, unsigned flags)
15
return new_op;
325
case INDEX_op_exit_tb:
326
case INDEX_op_goto_tb:
327
case INDEX_op_goto_ptr:
328
- case INDEX_op_qemu_ld_a32_i32:
329
- case INDEX_op_qemu_ld_a64_i32:
330
- case INDEX_op_qemu_st_a32_i32:
331
- case INDEX_op_qemu_st_a64_i32:
332
- case INDEX_op_qemu_ld_a32_i64:
333
- case INDEX_op_qemu_ld_a64_i64:
334
- case INDEX_op_qemu_st_a32_i64:
335
- case INDEX_op_qemu_st_a64_i64:
336
+ case INDEX_op_qemu_ld_i32:
337
+ case INDEX_op_qemu_st_i32:
338
+ case INDEX_op_qemu_ld_i64:
339
+ case INDEX_op_qemu_st_i64:
340
return true;
341
342
- case INDEX_op_qemu_st8_a32_i32:
343
- case INDEX_op_qemu_st8_a64_i32:
344
+ case INDEX_op_qemu_st8_i32:
345
return TCG_TARGET_HAS_qemu_st8_i32;
346
347
- case INDEX_op_qemu_ld_a32_i128:
348
- case INDEX_op_qemu_ld_a64_i128:
349
- case INDEX_op_qemu_st_a32_i128:
350
- case INDEX_op_qemu_st_a64_i128:
351
+ case INDEX_op_qemu_ld_i128:
352
+ case INDEX_op_qemu_st_i128:
353
return TCG_TARGET_HAS_qemu_ldst_i128;
354
355
case INDEX_op_mov_i32:
356
@@ -XXX,XX +XXX,XX @@ void tcg_dump_ops(TCGContext *s, FILE *f, bool have_prefs)
357
}
358
i = 1;
359
break;
360
- case INDEX_op_qemu_ld_a32_i32:
361
- case INDEX_op_qemu_ld_a64_i32:
362
- case INDEX_op_qemu_st_a32_i32:
363
- case INDEX_op_qemu_st_a64_i32:
364
- case INDEX_op_qemu_st8_a32_i32:
365
- case INDEX_op_qemu_st8_a64_i32:
366
- case INDEX_op_qemu_ld_a32_i64:
367
- case INDEX_op_qemu_ld_a64_i64:
368
- case INDEX_op_qemu_st_a32_i64:
369
- case INDEX_op_qemu_st_a64_i64:
370
- case INDEX_op_qemu_ld_a32_i128:
371
- case INDEX_op_qemu_ld_a64_i128:
372
- case INDEX_op_qemu_st_a32_i128:
373
- case INDEX_op_qemu_st_a64_i128:
374
+ case INDEX_op_qemu_ld_i32:
375
+ case INDEX_op_qemu_st_i32:
376
+ case INDEX_op_qemu_st8_i32:
377
+ case INDEX_op_qemu_ld_i64:
378
+ case INDEX_op_qemu_st_i64:
379
+ case INDEX_op_qemu_ld_i128:
380
+ case INDEX_op_qemu_st_i128:
381
{
382
const char *s_al, *s_op, *s_at;
383
MemOpIdx oi = op->args[k++];
384
diff --git a/tcg/tci.c b/tcg/tci.c
385
index XXXXXXX..XXXXXXX 100644
386
--- a/tcg/tci.c
387
+++ b/tcg/tci.c
388
@@ -XXX,XX +XXX,XX @@ static void tci_args_rrrbb(uint32_t insn, TCGReg *r0, TCGReg *r1,
389
*i4 = extract32(insn, 26, 6);
16
}
390
}
17
391
18
+static void move_label_uses(TCGLabel *to, TCGLabel *from)
392
-static void tci_args_rrrrr(uint32_t insn, TCGReg *r0, TCGReg *r1,
19
+{
393
- TCGReg *r2, TCGReg *r3, TCGReg *r4)
20
+ TCGLabelUse *u;
394
-{
21
+
395
- *r0 = extract32(insn, 8, 4);
22
+ QSIMPLEQ_FOREACH(u, &from->branches, next) {
396
- *r1 = extract32(insn, 12, 4);
23
+ TCGOp *op = u->op;
397
- *r2 = extract32(insn, 16, 4);
24
+ switch (op->opc) {
398
- *r3 = extract32(insn, 20, 4);
25
+ case INDEX_op_br:
399
- *r4 = extract32(insn, 24, 4);
26
+ op->args[0] = label_arg(to);
400
-}
401
-
402
static void tci_args_rrrr(uint32_t insn,
403
TCGReg *r0, TCGReg *r1, TCGReg *r2, TCGReg *r3)
404
{
405
@@ -XXX,XX +XXX,XX @@ uintptr_t QEMU_DISABLE_CFI tcg_qemu_tb_exec(CPUArchState *env,
406
tb_ptr = ptr;
407
break;
408
409
- case INDEX_op_qemu_ld_a32_i32:
410
+ case INDEX_op_qemu_ld_i32:
411
tci_args_rrm(insn, &r0, &r1, &oi);
412
- taddr = (uint32_t)regs[r1];
413
- goto do_ld_i32;
414
- case INDEX_op_qemu_ld_a64_i32:
415
- if (TCG_TARGET_REG_BITS == 64) {
416
- tci_args_rrm(insn, &r0, &r1, &oi);
417
- taddr = regs[r1];
418
- } else {
419
- tci_args_rrrr(insn, &r0, &r1, &r2, &r3);
420
- taddr = tci_uint64(regs[r2], regs[r1]);
421
- oi = regs[r3];
422
- }
423
- do_ld_i32:
424
+ taddr = regs[r1];
425
regs[r0] = tci_qemu_ld(env, taddr, oi, tb_ptr);
426
break;
427
428
- case INDEX_op_qemu_ld_a32_i64:
429
- if (TCG_TARGET_REG_BITS == 64) {
430
- tci_args_rrm(insn, &r0, &r1, &oi);
431
- taddr = (uint32_t)regs[r1];
432
- } else {
433
- tci_args_rrrr(insn, &r0, &r1, &r2, &r3);
434
- taddr = (uint32_t)regs[r2];
435
- oi = regs[r3];
436
- }
437
- goto do_ld_i64;
438
- case INDEX_op_qemu_ld_a64_i64:
439
+ case INDEX_op_qemu_ld_i64:
440
if (TCG_TARGET_REG_BITS == 64) {
441
tci_args_rrm(insn, &r0, &r1, &oi);
442
taddr = regs[r1];
443
} else {
444
- tci_args_rrrrr(insn, &r0, &r1, &r2, &r3, &r4);
445
- taddr = tci_uint64(regs[r3], regs[r2]);
446
- oi = regs[r4];
447
+ tci_args_rrrr(insn, &r0, &r1, &r2, &r3);
448
+ taddr = regs[r2];
449
+ oi = regs[r3];
450
}
451
- do_ld_i64:
452
tmp64 = tci_qemu_ld(env, taddr, oi, tb_ptr);
453
if (TCG_TARGET_REG_BITS == 32) {
454
tci_write_reg64(regs, r1, r0, tmp64);
455
@@ -XXX,XX +XXX,XX @@ uintptr_t QEMU_DISABLE_CFI tcg_qemu_tb_exec(CPUArchState *env,
456
}
457
break;
458
459
- case INDEX_op_qemu_st_a32_i32:
460
+ case INDEX_op_qemu_st_i32:
461
tci_args_rrm(insn, &r0, &r1, &oi);
462
- taddr = (uint32_t)regs[r1];
463
- goto do_st_i32;
464
- case INDEX_op_qemu_st_a64_i32:
465
- if (TCG_TARGET_REG_BITS == 64) {
466
- tci_args_rrm(insn, &r0, &r1, &oi);
467
- taddr = regs[r1];
468
- } else {
469
- tci_args_rrrr(insn, &r0, &r1, &r2, &r3);
470
- taddr = tci_uint64(regs[r2], regs[r1]);
471
- oi = regs[r3];
472
- }
473
- do_st_i32:
474
+ taddr = regs[r1];
475
tci_qemu_st(env, taddr, regs[r0], oi, tb_ptr);
476
break;
477
478
- case INDEX_op_qemu_st_a32_i64:
479
- if (TCG_TARGET_REG_BITS == 64) {
480
- tci_args_rrm(insn, &r0, &r1, &oi);
481
- tmp64 = regs[r0];
482
- taddr = (uint32_t)regs[r1];
483
- } else {
484
- tci_args_rrrr(insn, &r0, &r1, &r2, &r3);
485
- tmp64 = tci_uint64(regs[r1], regs[r0]);
486
- taddr = (uint32_t)regs[r2];
487
- oi = regs[r3];
488
- }
489
- goto do_st_i64;
490
- case INDEX_op_qemu_st_a64_i64:
491
+ case INDEX_op_qemu_st_i64:
492
if (TCG_TARGET_REG_BITS == 64) {
493
tci_args_rrm(insn, &r0, &r1, &oi);
494
tmp64 = regs[r0];
495
taddr = regs[r1];
496
} else {
497
- tci_args_rrrrr(insn, &r0, &r1, &r2, &r3, &r4);
498
+ tci_args_rrrr(insn, &r0, &r1, &r2, &r3);
499
tmp64 = tci_uint64(regs[r1], regs[r0]);
500
- taddr = tci_uint64(regs[r3], regs[r2]);
501
- oi = regs[r4];
502
+ taddr = regs[r2];
503
+ oi = regs[r3];
504
}
505
- do_st_i64:
506
tci_qemu_st(env, taddr, tmp64, oi, tb_ptr);
507
break;
508
509
@@ -XXX,XX +XXX,XX @@ int print_insn_tci(bfd_vma addr, disassemble_info *info)
510
str_r(r3), str_r(r4), str_r(r5));
511
break;
512
513
- case INDEX_op_qemu_ld_a32_i32:
514
- case INDEX_op_qemu_st_a32_i32:
515
- len = 1 + 1;
516
- goto do_qemu_ldst;
517
- case INDEX_op_qemu_ld_a32_i64:
518
- case INDEX_op_qemu_st_a32_i64:
519
- case INDEX_op_qemu_ld_a64_i32:
520
- case INDEX_op_qemu_st_a64_i32:
521
- len = 1 + DIV_ROUND_UP(64, TCG_TARGET_REG_BITS);
522
- goto do_qemu_ldst;
523
- case INDEX_op_qemu_ld_a64_i64:
524
- case INDEX_op_qemu_st_a64_i64:
525
- len = 2 * DIV_ROUND_UP(64, TCG_TARGET_REG_BITS);
526
- goto do_qemu_ldst;
527
- do_qemu_ldst:
528
- switch (len) {
529
- case 2:
530
- tci_args_rrm(insn, &r0, &r1, &oi);
531
- info->fprintf_func(info->stream, "%-12s %s, %s, %x",
532
- op_name, str_r(r0), str_r(r1), oi);
533
- break;
534
- case 3:
535
+ case INDEX_op_qemu_ld_i64:
536
+ case INDEX_op_qemu_st_i64:
537
+ if (TCG_TARGET_REG_BITS == 32) {
538
tci_args_rrrr(insn, &r0, &r1, &r2, &r3);
539
info->fprintf_func(info->stream, "%-12s %s, %s, %s, %s",
540
op_name, str_r(r0), str_r(r1),
541
str_r(r2), str_r(r3));
542
break;
543
- case 4:
544
- tci_args_rrrrr(insn, &r0, &r1, &r2, &r3, &r4);
545
- info->fprintf_func(info->stream, "%-12s %s, %s, %s, %s, %s",
546
- op_name, str_r(r0), str_r(r1),
547
- str_r(r2), str_r(r3), str_r(r4));
548
- break;
549
- default:
550
- g_assert_not_reached();
551
}
552
+ /* fall through */
553
+ case INDEX_op_qemu_ld_i32:
554
+ case INDEX_op_qemu_st_i32:
555
+ tci_args_rrm(insn, &r0, &r1, &oi);
556
+ info->fprintf_func(info->stream, "%-12s %s, %s, %x",
557
+ op_name, str_r(r0), str_r(r1), oi);
558
break;
559
560
case 0:
561
diff --git a/tcg/aarch64/tcg-target.c.inc b/tcg/aarch64/tcg-target.c.inc
562
index XXXXXXX..XXXXXXX 100644
563
--- a/tcg/aarch64/tcg-target.c.inc
564
+++ b/tcg/aarch64/tcg-target.c.inc
565
@@ -XXX,XX +XXX,XX @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, TCGType ext,
566
tcg_out_insn(s, 3506, CSEL, ext, a0, REG0(3), REG0(4), args[5]);
567
break;
568
569
- case INDEX_op_qemu_ld_a32_i32:
570
- case INDEX_op_qemu_ld_a64_i32:
571
- case INDEX_op_qemu_ld_a32_i64:
572
- case INDEX_op_qemu_ld_a64_i64:
573
+ case INDEX_op_qemu_ld_i32:
574
+ case INDEX_op_qemu_ld_i64:
575
tcg_out_qemu_ld(s, a0, a1, a2, ext);
576
break;
577
- case INDEX_op_qemu_st_a32_i32:
578
- case INDEX_op_qemu_st_a64_i32:
579
- case INDEX_op_qemu_st_a32_i64:
580
- case INDEX_op_qemu_st_a64_i64:
581
+ case INDEX_op_qemu_st_i32:
582
+ case INDEX_op_qemu_st_i64:
583
tcg_out_qemu_st(s, REG0(0), a1, a2, ext);
584
break;
585
- case INDEX_op_qemu_ld_a32_i128:
586
- case INDEX_op_qemu_ld_a64_i128:
587
+ case INDEX_op_qemu_ld_i128:
588
tcg_out_qemu_ldst_i128(s, a0, a1, a2, args[3], true);
589
break;
590
- case INDEX_op_qemu_st_a32_i128:
591
- case INDEX_op_qemu_st_a64_i128:
592
+ case INDEX_op_qemu_st_i128:
593
tcg_out_qemu_ldst_i128(s, REG0(0), REG0(1), a2, args[3], false);
594
break;
595
596
@@ -XXX,XX +XXX,XX @@ tcg_target_op_def(TCGOpcode op, TCGType type, unsigned flags)
597
case INDEX_op_movcond_i64:
598
return C_O1_I4(r, r, rC, rZ, rZ);
599
600
- case INDEX_op_qemu_ld_a32_i32:
601
- case INDEX_op_qemu_ld_a64_i32:
602
- case INDEX_op_qemu_ld_a32_i64:
603
- case INDEX_op_qemu_ld_a64_i64:
604
+ case INDEX_op_qemu_ld_i32:
605
+ case INDEX_op_qemu_ld_i64:
606
return C_O1_I1(r, r);
607
- case INDEX_op_qemu_ld_a32_i128:
608
- case INDEX_op_qemu_ld_a64_i128:
609
+ case INDEX_op_qemu_ld_i128:
610
return C_O2_I1(r, r, r);
611
- case INDEX_op_qemu_st_a32_i32:
612
- case INDEX_op_qemu_st_a64_i32:
613
- case INDEX_op_qemu_st_a32_i64:
614
- case INDEX_op_qemu_st_a64_i64:
615
+ case INDEX_op_qemu_st_i32:
616
+ case INDEX_op_qemu_st_i64:
617
return C_O0_I2(rZ, r);
618
- case INDEX_op_qemu_st_a32_i128:
619
- case INDEX_op_qemu_st_a64_i128:
620
+ case INDEX_op_qemu_st_i128:
621
return C_O0_I3(rZ, rZ, r);
622
623
case INDEX_op_deposit_i32:
624
diff --git a/tcg/arm/tcg-target.c.inc b/tcg/arm/tcg-target.c.inc
625
index XXXXXXX..XXXXXXX 100644
626
--- a/tcg/arm/tcg-target.c.inc
627
+++ b/tcg/arm/tcg-target.c.inc
628
@@ -XXX,XX +XXX,XX @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, TCGType type,
629
ARITH_MOV, args[0], 0, 0);
630
break;
631
632
- case INDEX_op_qemu_ld_a32_i32:
633
+ case INDEX_op_qemu_ld_i32:
634
tcg_out_qemu_ld(s, args[0], -1, args[1], -1, args[2], TCG_TYPE_I32);
635
break;
636
- case INDEX_op_qemu_ld_a64_i32:
637
- tcg_out_qemu_ld(s, args[0], -1, args[1], args[2],
638
- args[3], TCG_TYPE_I32);
639
- break;
640
- case INDEX_op_qemu_ld_a32_i64:
641
+ case INDEX_op_qemu_ld_i64:
642
tcg_out_qemu_ld(s, args[0], args[1], args[2], -1,
643
args[3], TCG_TYPE_I64);
644
break;
645
- case INDEX_op_qemu_ld_a64_i64:
646
- tcg_out_qemu_ld(s, args[0], args[1], args[2], args[3],
647
- args[4], TCG_TYPE_I64);
648
- break;
649
650
- case INDEX_op_qemu_st_a32_i32:
651
+ case INDEX_op_qemu_st_i32:
652
tcg_out_qemu_st(s, args[0], -1, args[1], -1, args[2], TCG_TYPE_I32);
653
break;
654
- case INDEX_op_qemu_st_a64_i32:
655
- tcg_out_qemu_st(s, args[0], -1, args[1], args[2],
656
- args[3], TCG_TYPE_I32);
657
- break;
658
- case INDEX_op_qemu_st_a32_i64:
659
+ case INDEX_op_qemu_st_i64:
660
tcg_out_qemu_st(s, args[0], args[1], args[2], -1,
661
args[3], TCG_TYPE_I64);
662
break;
663
- case INDEX_op_qemu_st_a64_i64:
664
- tcg_out_qemu_st(s, args[0], args[1], args[2], args[3],
665
- args[4], TCG_TYPE_I64);
666
- break;
667
668
case INDEX_op_bswap16_i32:
669
tcg_out_bswap16(s, COND_AL, args[0], args[1], args[2]);
670
@@ -XXX,XX +XXX,XX @@ tcg_target_op_def(TCGOpcode op, TCGType type, unsigned flags)
671
case INDEX_op_setcond2_i32:
672
return C_O1_I4(r, r, r, rI, rI);
673
674
- case INDEX_op_qemu_ld_a32_i32:
675
+ case INDEX_op_qemu_ld_i32:
676
return C_O1_I1(r, q);
677
- case INDEX_op_qemu_ld_a64_i32:
678
- return C_O1_I2(r, q, q);
679
- case INDEX_op_qemu_ld_a32_i64:
680
+ case INDEX_op_qemu_ld_i64:
681
return C_O2_I1(e, p, q);
682
- case INDEX_op_qemu_ld_a64_i64:
683
- return C_O2_I2(e, p, q, q);
684
- case INDEX_op_qemu_st_a32_i32:
685
+ case INDEX_op_qemu_st_i32:
686
return C_O0_I2(q, q);
687
- case INDEX_op_qemu_st_a64_i32:
688
- return C_O0_I3(q, q, q);
689
- case INDEX_op_qemu_st_a32_i64:
690
+ case INDEX_op_qemu_st_i64:
691
return C_O0_I3(Q, p, q);
692
- case INDEX_op_qemu_st_a64_i64:
693
- return C_O0_I4(Q, p, q, q);
694
695
case INDEX_op_st_vec:
696
return C_O0_I2(w, r);
697
diff --git a/tcg/i386/tcg-target.c.inc b/tcg/i386/tcg-target.c.inc
698
index XXXXXXX..XXXXXXX 100644
699
--- a/tcg/i386/tcg-target.c.inc
700
+++ b/tcg/i386/tcg-target.c.inc
701
@@ -XXX,XX +XXX,XX @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, TCGType type,
702
tcg_out_modrm(s, OPC_GRP3_Ev + rexw, EXT3_NOT, a0);
703
break;
704
705
- case INDEX_op_qemu_ld_a64_i32:
706
- if (TCG_TARGET_REG_BITS == 32) {
707
- tcg_out_qemu_ld(s, a0, -1, a1, a2, args[3], TCG_TYPE_I32);
708
- break;
709
- }
710
- /* fall through */
711
- case INDEX_op_qemu_ld_a32_i32:
712
+ case INDEX_op_qemu_ld_i32:
713
tcg_out_qemu_ld(s, a0, -1, a1, -1, a2, TCG_TYPE_I32);
714
break;
715
- case INDEX_op_qemu_ld_a32_i64:
716
+ case INDEX_op_qemu_ld_i64:
717
if (TCG_TARGET_REG_BITS == 64) {
718
tcg_out_qemu_ld(s, a0, -1, a1, -1, a2, TCG_TYPE_I64);
719
} else {
720
tcg_out_qemu_ld(s, a0, a1, a2, -1, args[3], TCG_TYPE_I64);
721
}
722
break;
723
- case INDEX_op_qemu_ld_a64_i64:
724
- if (TCG_TARGET_REG_BITS == 64) {
725
- tcg_out_qemu_ld(s, a0, -1, a1, -1, a2, TCG_TYPE_I64);
726
- } else {
727
- tcg_out_qemu_ld(s, a0, a1, a2, args[3], args[4], TCG_TYPE_I64);
728
- }
729
- break;
730
- case INDEX_op_qemu_ld_a32_i128:
731
- case INDEX_op_qemu_ld_a64_i128:
732
+ case INDEX_op_qemu_ld_i128:
733
tcg_debug_assert(TCG_TARGET_REG_BITS == 64);
734
tcg_out_qemu_ld(s, a0, a1, a2, -1, args[3], TCG_TYPE_I128);
735
break;
736
737
- case INDEX_op_qemu_st_a64_i32:
738
- case INDEX_op_qemu_st8_a64_i32:
739
- if (TCG_TARGET_REG_BITS == 32) {
740
- tcg_out_qemu_st(s, a0, -1, a1, a2, args[3], TCG_TYPE_I32);
741
- break;
742
- }
743
- /* fall through */
744
- case INDEX_op_qemu_st_a32_i32:
745
- case INDEX_op_qemu_st8_a32_i32:
746
+ case INDEX_op_qemu_st_i32:
747
+ case INDEX_op_qemu_st8_i32:
748
tcg_out_qemu_st(s, a0, -1, a1, -1, a2, TCG_TYPE_I32);
749
break;
750
- case INDEX_op_qemu_st_a32_i64:
751
+ case INDEX_op_qemu_st_i64:
752
if (TCG_TARGET_REG_BITS == 64) {
753
tcg_out_qemu_st(s, a0, -1, a1, -1, a2, TCG_TYPE_I64);
754
} else {
755
tcg_out_qemu_st(s, a0, a1, a2, -1, args[3], TCG_TYPE_I64);
756
}
757
break;
758
- case INDEX_op_qemu_st_a64_i64:
759
- if (TCG_TARGET_REG_BITS == 64) {
760
- tcg_out_qemu_st(s, a0, -1, a1, -1, a2, TCG_TYPE_I64);
761
- } else {
762
- tcg_out_qemu_st(s, a0, a1, a2, args[3], args[4], TCG_TYPE_I64);
763
- }
764
- break;
765
- case INDEX_op_qemu_st_a32_i128:
766
- case INDEX_op_qemu_st_a64_i128:
767
+ case INDEX_op_qemu_st_i128:
768
tcg_debug_assert(TCG_TARGET_REG_BITS == 64);
769
tcg_out_qemu_st(s, a0, a1, a2, -1, args[3], TCG_TYPE_I128);
770
break;
771
@@ -XXX,XX +XXX,XX @@ tcg_target_op_def(TCGOpcode op, TCGType type, unsigned flags)
772
case INDEX_op_clz_i64:
773
return have_lzcnt ? C_N1_I2(r, r, rW) : C_N1_I2(r, r, r);
774
775
- case INDEX_op_qemu_ld_a32_i32:
776
+ case INDEX_op_qemu_ld_i32:
777
return C_O1_I1(r, L);
778
- case INDEX_op_qemu_ld_a64_i32:
779
- return TCG_TARGET_REG_BITS == 64 ? C_O1_I1(r, L) : C_O1_I2(r, L, L);
780
781
- case INDEX_op_qemu_st_a32_i32:
782
+ case INDEX_op_qemu_st_i32:
783
return C_O0_I2(L, L);
784
- case INDEX_op_qemu_st_a64_i32:
785
- return TCG_TARGET_REG_BITS == 64 ? C_O0_I2(L, L) : C_O0_I3(L, L, L);
786
- case INDEX_op_qemu_st8_a32_i32:
787
+ case INDEX_op_qemu_st8_i32:
788
return C_O0_I2(s, L);
789
- case INDEX_op_qemu_st8_a64_i32:
790
- return TCG_TARGET_REG_BITS == 64 ? C_O0_I2(s, L) : C_O0_I3(s, L, L);
791
792
- case INDEX_op_qemu_ld_a32_i64:
793
+ case INDEX_op_qemu_ld_i64:
794
return TCG_TARGET_REG_BITS == 64 ? C_O1_I1(r, L) : C_O2_I1(r, r, L);
795
- case INDEX_op_qemu_ld_a64_i64:
796
- return TCG_TARGET_REG_BITS == 64 ? C_O1_I1(r, L) : C_O2_I2(r, r, L, L);
797
798
- case INDEX_op_qemu_st_a32_i64:
799
+ case INDEX_op_qemu_st_i64:
800
return TCG_TARGET_REG_BITS == 64 ? C_O0_I2(L, L) : C_O0_I3(L, L, L);
801
- case INDEX_op_qemu_st_a64_i64:
802
- return TCG_TARGET_REG_BITS == 64 ? C_O0_I2(L, L) : C_O0_I4(L, L, L, L);
803
804
- case INDEX_op_qemu_ld_a32_i128:
805
- case INDEX_op_qemu_ld_a64_i128:
806
+ case INDEX_op_qemu_ld_i128:
807
tcg_debug_assert(TCG_TARGET_REG_BITS == 64);
808
return C_O2_I1(r, r, L);
809
- case INDEX_op_qemu_st_a32_i128:
810
- case INDEX_op_qemu_st_a64_i128:
811
+ case INDEX_op_qemu_st_i128:
812
tcg_debug_assert(TCG_TARGET_REG_BITS == 64);
813
return C_O0_I3(L, L, L);
814
815
diff --git a/tcg/loongarch64/tcg-target.c.inc b/tcg/loongarch64/tcg-target.c.inc
816
index XXXXXXX..XXXXXXX 100644
817
--- a/tcg/loongarch64/tcg-target.c.inc
818
+++ b/tcg/loongarch64/tcg-target.c.inc
819
@@ -XXX,XX +XXX,XX @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, TCGType type,
820
tcg_out_ldst(s, OPC_ST_D, a0, a1, a2);
821
break;
822
823
- case INDEX_op_qemu_ld_a32_i32:
824
- case INDEX_op_qemu_ld_a64_i32:
825
+ case INDEX_op_qemu_ld_i32:
826
tcg_out_qemu_ld(s, a0, a1, a2, TCG_TYPE_I32);
827
break;
828
- case INDEX_op_qemu_ld_a32_i64:
829
- case INDEX_op_qemu_ld_a64_i64:
830
+ case INDEX_op_qemu_ld_i64:
831
tcg_out_qemu_ld(s, a0, a1, a2, TCG_TYPE_I64);
832
break;
833
- case INDEX_op_qemu_ld_a32_i128:
834
- case INDEX_op_qemu_ld_a64_i128:
835
+ case INDEX_op_qemu_ld_i128:
836
tcg_out_qemu_ldst_i128(s, a0, a1, a2, a3, true);
837
break;
838
- case INDEX_op_qemu_st_a32_i32:
839
- case INDEX_op_qemu_st_a64_i32:
840
+ case INDEX_op_qemu_st_i32:
841
tcg_out_qemu_st(s, a0, a1, a2, TCG_TYPE_I32);
842
break;
843
- case INDEX_op_qemu_st_a32_i64:
844
- case INDEX_op_qemu_st_a64_i64:
845
+ case INDEX_op_qemu_st_i64:
846
tcg_out_qemu_st(s, a0, a1, a2, TCG_TYPE_I64);
847
break;
848
- case INDEX_op_qemu_st_a32_i128:
849
- case INDEX_op_qemu_st_a64_i128:
850
+ case INDEX_op_qemu_st_i128:
851
tcg_out_qemu_ldst_i128(s, a0, a1, a2, a3, false);
852
break;
853
854
@@ -XXX,XX +XXX,XX @@ tcg_target_op_def(TCGOpcode op, TCGType type, unsigned flags)
855
case INDEX_op_st32_i64:
856
case INDEX_op_st_i32:
857
case INDEX_op_st_i64:
858
- case INDEX_op_qemu_st_a32_i32:
859
- case INDEX_op_qemu_st_a64_i32:
860
- case INDEX_op_qemu_st_a32_i64:
861
- case INDEX_op_qemu_st_a64_i64:
862
+ case INDEX_op_qemu_st_i32:
863
+ case INDEX_op_qemu_st_i64:
864
return C_O0_I2(rZ, r);
865
866
- case INDEX_op_qemu_ld_a32_i128:
867
- case INDEX_op_qemu_ld_a64_i128:
868
+ case INDEX_op_qemu_ld_i128:
869
return C_N2_I1(r, r, r);
870
871
- case INDEX_op_qemu_st_a32_i128:
872
- case INDEX_op_qemu_st_a64_i128:
873
+ case INDEX_op_qemu_st_i128:
874
return C_O0_I3(r, r, r);
875
876
case INDEX_op_brcond_i32:
877
@@ -XXX,XX +XXX,XX @@ tcg_target_op_def(TCGOpcode op, TCGType type, unsigned flags)
878
case INDEX_op_ld32u_i64:
879
case INDEX_op_ld_i32:
880
case INDEX_op_ld_i64:
881
- case INDEX_op_qemu_ld_a32_i32:
882
- case INDEX_op_qemu_ld_a64_i32:
883
- case INDEX_op_qemu_ld_a32_i64:
884
- case INDEX_op_qemu_ld_a64_i64:
885
+ case INDEX_op_qemu_ld_i32:
886
+ case INDEX_op_qemu_ld_i64:
887
return C_O1_I1(r, r);
888
889
case INDEX_op_andc_i32:
890
diff --git a/tcg/mips/tcg-target.c.inc b/tcg/mips/tcg-target.c.inc
891
index XXXXXXX..XXXXXXX 100644
892
--- a/tcg/mips/tcg-target.c.inc
893
+++ b/tcg/mips/tcg-target.c.inc
894
@@ -XXX,XX +XXX,XX @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, TCGType type,
895
tcg_out_setcond2(s, args[5], a0, a1, a2, args[3], args[4]);
896
break;
897
898
- case INDEX_op_qemu_ld_a64_i32:
899
- if (TCG_TARGET_REG_BITS == 32) {
900
- tcg_out_qemu_ld(s, a0, 0, a1, a2, args[3], TCG_TYPE_I32);
901
- break;
902
- }
903
- /* fall through */
904
- case INDEX_op_qemu_ld_a32_i32:
905
+ case INDEX_op_qemu_ld_i32:
906
tcg_out_qemu_ld(s, a0, 0, a1, 0, a2, TCG_TYPE_I32);
907
break;
908
- case INDEX_op_qemu_ld_a32_i64:
909
+ case INDEX_op_qemu_ld_i64:
910
if (TCG_TARGET_REG_BITS == 64) {
911
tcg_out_qemu_ld(s, a0, 0, a1, 0, a2, TCG_TYPE_I64);
912
} else {
913
tcg_out_qemu_ld(s, a0, a1, a2, 0, args[3], TCG_TYPE_I64);
914
}
915
break;
916
- case INDEX_op_qemu_ld_a64_i64:
917
- if (TCG_TARGET_REG_BITS == 64) {
918
- tcg_out_qemu_ld(s, a0, 0, a1, 0, a2, TCG_TYPE_I64);
919
- } else {
920
- tcg_out_qemu_ld(s, a0, a1, a2, args[3], args[4], TCG_TYPE_I64);
921
- }
922
- break;
923
924
- case INDEX_op_qemu_st_a64_i32:
925
- if (TCG_TARGET_REG_BITS == 32) {
926
- tcg_out_qemu_st(s, a0, 0, a1, a2, args[3], TCG_TYPE_I32);
927
- break;
928
- }
929
- /* fall through */
930
- case INDEX_op_qemu_st_a32_i32:
931
+ case INDEX_op_qemu_st_i32:
932
tcg_out_qemu_st(s, a0, 0, a1, 0, a2, TCG_TYPE_I32);
933
break;
934
- case INDEX_op_qemu_st_a32_i64:
935
+ case INDEX_op_qemu_st_i64:
936
if (TCG_TARGET_REG_BITS == 64) {
937
tcg_out_qemu_st(s, a0, 0, a1, 0, a2, TCG_TYPE_I64);
938
} else {
939
tcg_out_qemu_st(s, a0, a1, a2, 0, args[3], TCG_TYPE_I64);
940
}
941
break;
942
- case INDEX_op_qemu_st_a64_i64:
943
- if (TCG_TARGET_REG_BITS == 64) {
944
- tcg_out_qemu_st(s, a0, 0, a1, 0, a2, TCG_TYPE_I64);
945
- } else {
946
- tcg_out_qemu_st(s, a0, a1, a2, args[3], args[4], TCG_TYPE_I64);
947
- }
948
- break;
949
950
case INDEX_op_add2_i32:
951
tcg_out_addsub2(s, a0, a1, a2, args[3], args[4], args[5],
952
@@ -XXX,XX +XXX,XX @@ tcg_target_op_def(TCGOpcode op, TCGType type, unsigned flags)
953
case INDEX_op_brcond2_i32:
954
return C_O0_I4(rZ, rZ, rZ, rZ);
955
956
- case INDEX_op_qemu_ld_a32_i32:
957
+ case INDEX_op_qemu_ld_i32:
958
return C_O1_I1(r, r);
959
- case INDEX_op_qemu_ld_a64_i32:
960
- return TCG_TARGET_REG_BITS == 64 ? C_O1_I1(r, r) : C_O1_I2(r, r, r);
961
- case INDEX_op_qemu_st_a32_i32:
962
+ case INDEX_op_qemu_st_i32:
963
return C_O0_I2(rZ, r);
964
- case INDEX_op_qemu_st_a64_i32:
965
- return TCG_TARGET_REG_BITS == 64 ? C_O0_I2(rZ, r) : C_O0_I3(rZ, r, r);
966
- case INDEX_op_qemu_ld_a32_i64:
967
+ case INDEX_op_qemu_ld_i64:
968
return TCG_TARGET_REG_BITS == 64 ? C_O1_I1(r, r) : C_O2_I1(r, r, r);
969
- case INDEX_op_qemu_ld_a64_i64:
970
- return TCG_TARGET_REG_BITS == 64 ? C_O1_I1(r, r) : C_O2_I2(r, r, r, r);
971
- case INDEX_op_qemu_st_a32_i64:
972
+ case INDEX_op_qemu_st_i64:
973
return TCG_TARGET_REG_BITS == 64 ? C_O0_I2(rZ, r) : C_O0_I3(rZ, rZ, r);
974
- case INDEX_op_qemu_st_a64_i64:
975
- return (TCG_TARGET_REG_BITS == 64 ? C_O0_I2(rZ, r)
976
- : C_O0_I4(rZ, rZ, r, r));
977
978
default:
979
return C_NotImplemented;
980
diff --git a/tcg/ppc/tcg-target.c.inc b/tcg/ppc/tcg-target.c.inc
981
index XXXXXXX..XXXXXXX 100644
982
--- a/tcg/ppc/tcg-target.c.inc
983
+++ b/tcg/ppc/tcg-target.c.inc
984
@@ -XXX,XX +XXX,XX @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, TCGType type,
985
tcg_out32(s, MODUD | TAB(args[0], args[1], args[2]));
986
break;
987
988
- case INDEX_op_qemu_ld_a64_i32:
989
- if (TCG_TARGET_REG_BITS == 32) {
990
- tcg_out_qemu_ld(s, args[0], -1, args[1], args[2],
991
- args[3], TCG_TYPE_I32);
992
- break;
993
- }
994
- /* fall through */
995
- case INDEX_op_qemu_ld_a32_i32:
996
+ case INDEX_op_qemu_ld_i32:
997
tcg_out_qemu_ld(s, args[0], -1, args[1], -1, args[2], TCG_TYPE_I32);
998
break;
999
- case INDEX_op_qemu_ld_a32_i64:
1000
+ case INDEX_op_qemu_ld_i64:
1001
if (TCG_TARGET_REG_BITS == 64) {
1002
tcg_out_qemu_ld(s, args[0], -1, args[1], -1,
1003
args[2], TCG_TYPE_I64);
1004
@@ -XXX,XX +XXX,XX @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, TCGType type,
1005
args[3], TCG_TYPE_I64);
1006
}
1007
break;
1008
- case INDEX_op_qemu_ld_a64_i64:
1009
- if (TCG_TARGET_REG_BITS == 64) {
1010
- tcg_out_qemu_ld(s, args[0], -1, args[1], -1,
1011
- args[2], TCG_TYPE_I64);
1012
- } else {
1013
- tcg_out_qemu_ld(s, args[0], args[1], args[2], args[3],
1014
- args[4], TCG_TYPE_I64);
1015
- }
1016
- break;
1017
- case INDEX_op_qemu_ld_a32_i128:
1018
- case INDEX_op_qemu_ld_a64_i128:
1019
+ case INDEX_op_qemu_ld_i128:
1020
tcg_debug_assert(TCG_TARGET_REG_BITS == 64);
1021
tcg_out_qemu_ldst_i128(s, args[0], args[1], args[2], args[3], true);
1022
break;
1023
1024
- case INDEX_op_qemu_st_a64_i32:
1025
- if (TCG_TARGET_REG_BITS == 32) {
1026
- tcg_out_qemu_st(s, args[0], -1, args[1], args[2],
1027
- args[3], TCG_TYPE_I32);
1028
- break;
1029
- }
1030
- /* fall through */
1031
- case INDEX_op_qemu_st_a32_i32:
1032
+ case INDEX_op_qemu_st_i32:
1033
tcg_out_qemu_st(s, args[0], -1, args[1], -1, args[2], TCG_TYPE_I32);
1034
break;
1035
- case INDEX_op_qemu_st_a32_i64:
1036
+ case INDEX_op_qemu_st_i64:
1037
if (TCG_TARGET_REG_BITS == 64) {
1038
tcg_out_qemu_st(s, args[0], -1, args[1], -1,
1039
args[2], TCG_TYPE_I64);
1040
@@ -XXX,XX +XXX,XX @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, TCGType type,
1041
args[3], TCG_TYPE_I64);
1042
}
1043
break;
1044
- case INDEX_op_qemu_st_a64_i64:
1045
- if (TCG_TARGET_REG_BITS == 64) {
1046
- tcg_out_qemu_st(s, args[0], -1, args[1], -1,
1047
- args[2], TCG_TYPE_I64);
1048
- } else {
1049
- tcg_out_qemu_st(s, args[0], args[1], args[2], args[3],
1050
- args[4], TCG_TYPE_I64);
1051
- }
1052
- break;
1053
- case INDEX_op_qemu_st_a32_i128:
1054
- case INDEX_op_qemu_st_a64_i128:
1055
+ case INDEX_op_qemu_st_i128:
1056
tcg_debug_assert(TCG_TARGET_REG_BITS == 64);
1057
tcg_out_qemu_ldst_i128(s, args[0], args[1], args[2], args[3], false);
1058
break;
1059
@@ -XXX,XX +XXX,XX @@ tcg_target_op_def(TCGOpcode op, TCGType type, unsigned flags)
1060
case INDEX_op_sub2_i32:
1061
return C_O2_I4(r, r, rI, rZM, r, r);
1062
1063
- case INDEX_op_qemu_ld_a32_i32:
1064
+ case INDEX_op_qemu_ld_i32:
1065
return C_O1_I1(r, r);
1066
- case INDEX_op_qemu_ld_a64_i32:
1067
- return TCG_TARGET_REG_BITS == 64 ? C_O1_I1(r, r) : C_O1_I2(r, r, r);
1068
- case INDEX_op_qemu_ld_a32_i64:
1069
+ case INDEX_op_qemu_ld_i64:
1070
return TCG_TARGET_REG_BITS == 64 ? C_O1_I1(r, r) : C_O2_I1(r, r, r);
1071
- case INDEX_op_qemu_ld_a64_i64:
1072
- return TCG_TARGET_REG_BITS == 64 ? C_O1_I1(r, r) : C_O2_I2(r, r, r, r);
1073
1074
- case INDEX_op_qemu_st_a32_i32:
1075
+ case INDEX_op_qemu_st_i32:
1076
return C_O0_I2(r, r);
1077
- case INDEX_op_qemu_st_a64_i32:
1078
+ case INDEX_op_qemu_st_i64:
1079
return TCG_TARGET_REG_BITS == 64 ? C_O0_I2(r, r) : C_O0_I3(r, r, r);
1080
- case INDEX_op_qemu_st_a32_i64:
1081
- return TCG_TARGET_REG_BITS == 64 ? C_O0_I2(r, r) : C_O0_I3(r, r, r);
1082
- case INDEX_op_qemu_st_a64_i64:
1083
- return TCG_TARGET_REG_BITS == 64 ? C_O0_I2(r, r) : C_O0_I4(r, r, r, r);
1084
1085
- case INDEX_op_qemu_ld_a32_i128:
1086
- case INDEX_op_qemu_ld_a64_i128:
1087
+ case INDEX_op_qemu_ld_i128:
1088
return C_N1O1_I1(o, m, r);
1089
- case INDEX_op_qemu_st_a32_i128:
1090
- case INDEX_op_qemu_st_a64_i128:
1091
+ case INDEX_op_qemu_st_i128:
1092
return C_O0_I3(o, m, r);
1093
1094
case INDEX_op_add_vec:
1095
diff --git a/tcg/riscv/tcg-target.c.inc b/tcg/riscv/tcg-target.c.inc
1096
index XXXXXXX..XXXXXXX 100644
1097
--- a/tcg/riscv/tcg-target.c.inc
1098
+++ b/tcg/riscv/tcg-target.c.inc
1099
@@ -XXX,XX +XXX,XX @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, TCGType type,
1100
args[3], const_args[3], args[4], const_args[4]);
1101
break;
1102
1103
- case INDEX_op_qemu_ld_a32_i32:
1104
- case INDEX_op_qemu_ld_a64_i32:
1105
+ case INDEX_op_qemu_ld_i32:
1106
tcg_out_qemu_ld(s, a0, a1, a2, TCG_TYPE_I32);
1107
break;
1108
- case INDEX_op_qemu_ld_a32_i64:
1109
- case INDEX_op_qemu_ld_a64_i64:
1110
+ case INDEX_op_qemu_ld_i64:
1111
tcg_out_qemu_ld(s, a0, a1, a2, TCG_TYPE_I64);
1112
break;
1113
- case INDEX_op_qemu_st_a32_i32:
1114
- case INDEX_op_qemu_st_a64_i32:
1115
+ case INDEX_op_qemu_st_i32:
1116
tcg_out_qemu_st(s, a0, a1, a2, TCG_TYPE_I32);
1117
break;
1118
- case INDEX_op_qemu_st_a32_i64:
1119
- case INDEX_op_qemu_st_a64_i64:
1120
+ case INDEX_op_qemu_st_i64:
1121
tcg_out_qemu_st(s, a0, a1, a2, TCG_TYPE_I64);
1122
break;
1123
1124
@@ -XXX,XX +XXX,XX @@ tcg_target_op_def(TCGOpcode op, TCGType type, unsigned flags)
1125
case INDEX_op_sub2_i64:
1126
return C_O2_I4(r, r, rZ, rZ, rM, rM);
1127
1128
- case INDEX_op_qemu_ld_a32_i32:
1129
- case INDEX_op_qemu_ld_a64_i32:
1130
- case INDEX_op_qemu_ld_a32_i64:
1131
- case INDEX_op_qemu_ld_a64_i64:
1132
+ case INDEX_op_qemu_ld_i32:
1133
+ case INDEX_op_qemu_ld_i64:
1134
return C_O1_I1(r, r);
1135
- case INDEX_op_qemu_st_a32_i32:
1136
- case INDEX_op_qemu_st_a64_i32:
1137
- case INDEX_op_qemu_st_a32_i64:
1138
- case INDEX_op_qemu_st_a64_i64:
1139
+ case INDEX_op_qemu_st_i32:
1140
+ case INDEX_op_qemu_st_i64:
1141
return C_O0_I2(rZ, r);
1142
1143
case INDEX_op_st_vec:
1144
diff --git a/tcg/s390x/tcg-target.c.inc b/tcg/s390x/tcg-target.c.inc
1145
index XXXXXXX..XXXXXXX 100644
1146
--- a/tcg/s390x/tcg-target.c.inc
1147
+++ b/tcg/s390x/tcg-target.c.inc
1148
@@ -XXX,XX +XXX,XX @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, TCGType type,
1149
args[2], const_args[2], args[3], const_args[3], args[4]);
1150
break;
1151
1152
- case INDEX_op_qemu_ld_a32_i32:
1153
- case INDEX_op_qemu_ld_a64_i32:
1154
+ case INDEX_op_qemu_ld_i32:
1155
tcg_out_qemu_ld(s, args[0], args[1], args[2], TCG_TYPE_I32);
1156
break;
1157
- case INDEX_op_qemu_ld_a32_i64:
1158
- case INDEX_op_qemu_ld_a64_i64:
1159
+ case INDEX_op_qemu_ld_i64:
1160
tcg_out_qemu_ld(s, args[0], args[1], args[2], TCG_TYPE_I64);
1161
break;
1162
- case INDEX_op_qemu_st_a32_i32:
1163
- case INDEX_op_qemu_st_a64_i32:
1164
+ case INDEX_op_qemu_st_i32:
1165
tcg_out_qemu_st(s, args[0], args[1], args[2], TCG_TYPE_I32);
1166
break;
1167
- case INDEX_op_qemu_st_a32_i64:
1168
- case INDEX_op_qemu_st_a64_i64:
1169
+ case INDEX_op_qemu_st_i64:
1170
tcg_out_qemu_st(s, args[0], args[1], args[2], TCG_TYPE_I64);
1171
break;
1172
- case INDEX_op_qemu_ld_a32_i128:
1173
- case INDEX_op_qemu_ld_a64_i128:
1174
+ case INDEX_op_qemu_ld_i128:
1175
tcg_out_qemu_ldst_i128(s, args[0], args[1], args[2], args[3], true);
1176
break;
1177
- case INDEX_op_qemu_st_a32_i128:
1178
- case INDEX_op_qemu_st_a64_i128:
1179
+ case INDEX_op_qemu_st_i128:
1180
tcg_out_qemu_ldst_i128(s, args[0], args[1], args[2], args[3], false);
1181
break;
1182
1183
@@ -XXX,XX +XXX,XX @@ tcg_target_op_def(TCGOpcode op, TCGType type, unsigned flags)
1184
case INDEX_op_ctpop_i64:
1185
return C_O1_I1(r, r);
1186
1187
- case INDEX_op_qemu_ld_a32_i32:
1188
- case INDEX_op_qemu_ld_a64_i32:
1189
- case INDEX_op_qemu_ld_a32_i64:
1190
- case INDEX_op_qemu_ld_a64_i64:
1191
+ case INDEX_op_qemu_ld_i32:
1192
+ case INDEX_op_qemu_ld_i64:
1193
return C_O1_I1(r, r);
1194
- case INDEX_op_qemu_st_a32_i64:
1195
- case INDEX_op_qemu_st_a64_i64:
1196
- case INDEX_op_qemu_st_a32_i32:
1197
- case INDEX_op_qemu_st_a64_i32:
1198
+ case INDEX_op_qemu_st_i64:
1199
+ case INDEX_op_qemu_st_i32:
1200
return C_O0_I2(r, r);
1201
- case INDEX_op_qemu_ld_a32_i128:
1202
- case INDEX_op_qemu_ld_a64_i128:
1203
+ case INDEX_op_qemu_ld_i128:
1204
return C_O2_I1(o, m, r);
1205
- case INDEX_op_qemu_st_a32_i128:
1206
- case INDEX_op_qemu_st_a64_i128:
1207
+ case INDEX_op_qemu_st_i128:
1208
return C_O0_I3(o, m, r);
1209
1210
case INDEX_op_deposit_i32:
1211
diff --git a/tcg/sparc64/tcg-target.c.inc b/tcg/sparc64/tcg-target.c.inc
1212
index XXXXXXX..XXXXXXX 100644
1213
--- a/tcg/sparc64/tcg-target.c.inc
1214
+++ b/tcg/sparc64/tcg-target.c.inc
1215
@@ -XXX,XX +XXX,XX @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, TCGType type,
1216
tcg_out_arithi(s, a1, a0, 32, SHIFT_SRLX);
1217
break;
1218
1219
- case INDEX_op_qemu_ld_a32_i32:
1220
- case INDEX_op_qemu_ld_a64_i32:
1221
+ case INDEX_op_qemu_ld_i32:
1222
tcg_out_qemu_ld(s, a0, a1, a2, TCG_TYPE_I32);
1223
break;
1224
- case INDEX_op_qemu_ld_a32_i64:
1225
- case INDEX_op_qemu_ld_a64_i64:
1226
+ case INDEX_op_qemu_ld_i64:
1227
tcg_out_qemu_ld(s, a0, a1, a2, TCG_TYPE_I64);
1228
break;
1229
- case INDEX_op_qemu_st_a32_i32:
1230
- case INDEX_op_qemu_st_a64_i32:
1231
+ case INDEX_op_qemu_st_i32:
1232
tcg_out_qemu_st(s, a0, a1, a2, TCG_TYPE_I32);
1233
break;
1234
- case INDEX_op_qemu_st_a32_i64:
1235
- case INDEX_op_qemu_st_a64_i64:
1236
+ case INDEX_op_qemu_st_i64:
1237
tcg_out_qemu_st(s, a0, a1, a2, TCG_TYPE_I64);
1238
break;
1239
1240
@@ -XXX,XX +XXX,XX @@ tcg_target_op_def(TCGOpcode op, TCGType type, unsigned flags)
1241
case INDEX_op_extu_i32_i64:
1242
case INDEX_op_extract_i64:
1243
case INDEX_op_sextract_i64:
1244
- case INDEX_op_qemu_ld_a32_i32:
1245
- case INDEX_op_qemu_ld_a64_i32:
1246
- case INDEX_op_qemu_ld_a32_i64:
1247
- case INDEX_op_qemu_ld_a64_i64:
1248
+ case INDEX_op_qemu_ld_i32:
1249
+ case INDEX_op_qemu_ld_i64:
1250
return C_O1_I1(r, r);
1251
1252
case INDEX_op_st8_i32:
1253
@@ -XXX,XX +XXX,XX @@ tcg_target_op_def(TCGOpcode op, TCGType type, unsigned flags)
1254
case INDEX_op_st_i32:
1255
case INDEX_op_st32_i64:
1256
case INDEX_op_st_i64:
1257
- case INDEX_op_qemu_st_a32_i32:
1258
- case INDEX_op_qemu_st_a64_i32:
1259
- case INDEX_op_qemu_st_a32_i64:
1260
- case INDEX_op_qemu_st_a64_i64:
1261
+ case INDEX_op_qemu_st_i32:
1262
+ case INDEX_op_qemu_st_i64:
1263
return C_O0_I2(rZ, r);
1264
1265
case INDEX_op_add_i32:
1266
diff --git a/tcg/tci/tcg-target.c.inc b/tcg/tci/tcg-target.c.inc
1267
index XXXXXXX..XXXXXXX 100644
1268
--- a/tcg/tci/tcg-target.c.inc
1269
+++ b/tcg/tci/tcg-target.c.inc
1270
@@ -XXX,XX +XXX,XX @@ tcg_target_op_def(TCGOpcode op, TCGType type, unsigned flags)
1271
case INDEX_op_setcond2_i32:
1272
return C_O1_I4(r, r, r, r, r);
1273
1274
- case INDEX_op_qemu_ld_a32_i32:
1275
+ case INDEX_op_qemu_ld_i32:
1276
return C_O1_I1(r, r);
1277
- case INDEX_op_qemu_ld_a64_i32:
1278
- return TCG_TARGET_REG_BITS == 64 ? C_O1_I1(r, r) : C_O1_I2(r, r, r);
1279
- case INDEX_op_qemu_ld_a32_i64:
1280
+ case INDEX_op_qemu_ld_i64:
1281
return TCG_TARGET_REG_BITS == 64 ? C_O1_I1(r, r) : C_O2_I1(r, r, r);
1282
- case INDEX_op_qemu_ld_a64_i64:
1283
- return TCG_TARGET_REG_BITS == 64 ? C_O1_I1(r, r) : C_O2_I2(r, r, r, r);
1284
- case INDEX_op_qemu_st_a32_i32:
1285
+ case INDEX_op_qemu_st_i32:
1286
return C_O0_I2(r, r);
1287
- case INDEX_op_qemu_st_a64_i32:
1288
+ case INDEX_op_qemu_st_i64:
1289
return TCG_TARGET_REG_BITS == 64 ? C_O0_I2(r, r) : C_O0_I3(r, r, r);
1290
- case INDEX_op_qemu_st_a32_i64:
1291
- return TCG_TARGET_REG_BITS == 64 ? C_O0_I2(r, r) : C_O0_I3(r, r, r);
1292
- case INDEX_op_qemu_st_a64_i64:
1293
- return TCG_TARGET_REG_BITS == 64 ? C_O0_I2(r, r) : C_O0_I4(r, r, r, r);
1294
1295
default:
1296
return C_NotImplemented;
1297
@@ -XXX,XX +XXX,XX @@ static void tcg_out_op_rrrbb(TCGContext *s, TCGOpcode op, TCGReg r0,
1298
tcg_out32(s, insn);
1299
}
1300
1301
-static void tcg_out_op_rrrrr(TCGContext *s, TCGOpcode op, TCGReg r0,
1302
- TCGReg r1, TCGReg r2, TCGReg r3, TCGReg r4)
1303
-{
1304
- tcg_insn_unit insn = 0;
1305
-
1306
- insn = deposit32(insn, 0, 8, op);
1307
- insn = deposit32(insn, 8, 4, r0);
1308
- insn = deposit32(insn, 12, 4, r1);
1309
- insn = deposit32(insn, 16, 4, r2);
1310
- insn = deposit32(insn, 20, 4, r3);
1311
- insn = deposit32(insn, 24, 4, r4);
1312
- tcg_out32(s, insn);
1313
-}
1314
-
1315
static void tcg_out_op_rrrr(TCGContext *s, TCGOpcode op,
1316
TCGReg r0, TCGReg r1, TCGReg r2, TCGReg r3)
1317
{
1318
@@ -XXX,XX +XXX,XX @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, TCGType type,
1319
tcg_out_op_rrrr(s, opc, args[0], args[1], args[2], args[3]);
1320
break;
1321
1322
- case INDEX_op_qemu_ld_a32_i32:
1323
- case INDEX_op_qemu_st_a32_i32:
1324
- tcg_out_op_rrm(s, opc, args[0], args[1], args[2]);
1325
- break;
1326
- case INDEX_op_qemu_ld_a64_i32:
1327
- case INDEX_op_qemu_st_a64_i32:
1328
- case INDEX_op_qemu_ld_a32_i64:
1329
- case INDEX_op_qemu_st_a32_i64:
1330
- if (TCG_TARGET_REG_BITS == 64) {
1331
- tcg_out_op_rrm(s, opc, args[0], args[1], args[2]);
1332
- } else {
1333
+ case INDEX_op_qemu_ld_i64:
1334
+ case INDEX_op_qemu_st_i64:
1335
+ if (TCG_TARGET_REG_BITS == 32) {
1336
tcg_out_movi(s, TCG_TYPE_I32, TCG_REG_TMP, args[3]);
1337
tcg_out_op_rrrr(s, opc, args[0], args[1], args[2], TCG_REG_TMP);
27
+ break;
1338
+ break;
28
+ case INDEX_op_brcond_i32:
1339
}
29
+ case INDEX_op_brcond_i64:
1340
- break;
30
+ op->args[3] = label_arg(to);
1341
- case INDEX_op_qemu_ld_a64_i64:
31
+ break;
1342
- case INDEX_op_qemu_st_a64_i64:
32
+ case INDEX_op_brcond2_i32:
1343
- if (TCG_TARGET_REG_BITS == 64) {
33
+ op->args[5] = label_arg(to);
1344
- tcg_out_op_rrm(s, opc, args[0], args[1], args[2]);
34
+ break;
1345
+ /* fall through */
35
+ default:
1346
+ case INDEX_op_qemu_ld_i32:
36
+ g_assert_not_reached();
1347
+ case INDEX_op_qemu_st_i32:
37
+ }
1348
+ if (TCG_TARGET_REG_BITS == 64 && s->addr_type == TCG_TYPE_I32) {
38
+ }
1349
+ tcg_out_ext32u(s, TCG_REG_TMP, args[1]);
39
+
1350
+ tcg_out_op_rrm(s, opc, args[0], TCG_REG_TMP, args[2]);
40
+ QSIMPLEQ_CONCAT(&to->branches, &from->branches);
1351
} else {
41
+}
1352
- tcg_out_movi(s, TCG_TYPE_I32, TCG_REG_TMP, args[4]);
42
+
1353
- tcg_out_op_rrrrr(s, opc, args[0], args[1],
43
/* Reachable analysis : remove unreachable code. */
1354
- args[2], args[3], TCG_REG_TMP);
44
static void __attribute__((noinline))
1355
+ tcg_out_op_rrm(s, opc, args[0], args[1], args[2]);
45
reachable_code_pass(TCGContext *s)
1356
}
46
@@ -XXX,XX +XXX,XX @@ reachable_code_pass(TCGContext *s)
1357
break;
47
case INDEX_op_set_label:
1358
48
label = arg_label(op->args[0]);
49
50
+ /*
51
+ * Note that the first op in the TB is always a load,
52
+ * so there is always something before a label.
53
+ */
54
+ op_prev = QTAILQ_PREV(op, link);
55
+
56
+ /*
57
+ * If we find two sequential labels, move all branches to
58
+ * reference the second label and remove the first label.
59
+ * Do this before branch to next optimization, so that the
60
+ * middle label is out of the way.
61
+ */
62
+ if (op_prev->opc == INDEX_op_set_label) {
63
+ move_label_uses(label, arg_label(op_prev->args[0]));
64
+ tcg_op_remove(s, op_prev);
65
+ op_prev = QTAILQ_PREV(op, link);
66
+ }
67
+
68
/*
69
* Optimization can fold conditional branches to unconditional.
70
* If we find a label which is preceded by an unconditional
71
@@ -XXX,XX +XXX,XX @@ reachable_code_pass(TCGContext *s)
72
* processing the branch because any dead code between the branch
73
* and label had not yet been removed.
74
*/
75
- op_prev = QTAILQ_PREV(op, link);
76
if (op_prev->opc == INDEX_op_br &&
77
label == arg_label(op_prev->args[0])) {
78
tcg_op_remove(s, op_prev);
79
--
1359
--
80
2.34.1
1360
2.43.0
diff view generated by jsdifflib
1
Translators are no longer required to free tcg temporaries.
1
The guest address will now always be TCG_TYPE_I32.
2
2
3
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
3
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
5
---
4
---
6
target/arm/tcg/translate-a64.c | 468 +--------------------------------
5
tcg/arm/tcg-target.c.inc | 63 ++++++++++++++--------------------------
7
1 file changed, 11 insertions(+), 457 deletions(-)
6
1 file changed, 21 insertions(+), 42 deletions(-)
8
7
9
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
8
diff --git a/tcg/arm/tcg-target.c.inc b/tcg/arm/tcg-target.c.inc
10
index XXXXXXX..XXXXXXX 100644
9
index XXXXXXX..XXXXXXX 100644
11
--- a/target/arm/tcg/translate-a64.c
10
--- a/tcg/arm/tcg-target.c.inc
12
+++ b/target/arm/tcg/translate-a64.c
11
+++ b/tcg/arm/tcg-target.c.inc
13
@@ -XXX,XX +XXX,XX @@ static void write_fp_sreg(DisasContext *s, int reg, TCGv_i32 v)
12
@@ -XXX,XX +XXX,XX @@ static bool tcg_out_qemu_st_slow_path(TCGContext *s, TCGLabelQemuLdst *lb)
14
13
#define MIN_TLB_MASK_TABLE_OFS -256
15
tcg_gen_extu_i32_i64(tmp, v);
14
16
write_fp_dreg(s, reg, tmp);
15
static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
17
- tcg_temp_free_i64(tmp);
16
- TCGReg addrlo, TCGReg addrhi,
18
}
17
- MemOpIdx oi, bool is_ld)
19
18
+ TCGReg addr, MemOpIdx oi, bool is_ld)
20
/* Expand a 2-operand AdvSIMD vector operation using an expander function. */
19
{
21
@@ -XXX,XX +XXX,XX @@ static void gen_gvec_op3_fpst(DisasContext *s, bool is_q, int rd, int rn,
20
TCGLabelQemuLdst *ldst = NULL;
22
vec_full_reg_offset(s, rn),
21
MemOp opc = get_memop(oi);
23
vec_full_reg_offset(s, rm), fpst,
22
@@ -XXX,XX +XXX,XX @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
24
is_q ? 16 : 8, vec_full_reg_size(s), data, fn);
23
if (tcg_use_softmmu) {
25
- tcg_temp_free_ptr(fpst);
24
*h = (HostAddress){
26
}
25
.cond = COND_AL,
27
26
- .base = addrlo,
28
/* Expand a 3-operand + qc + operation using an out-of-line helper. */
27
+ .base = addr,
29
@@ -XXX,XX +XXX,XX @@ static void gen_gvec_op3_qc(DisasContext *s, bool is_q, int rd, int rn,
28
.index = TCG_REG_R1,
30
vec_full_reg_offset(s, rn),
29
.index_scratch = true,
31
vec_full_reg_offset(s, rm), qc_ptr,
30
};
32
is_q ? 16 : 8, vec_full_reg_size(s), 0, fn);
33
- tcg_temp_free_ptr(qc_ptr);
34
}
35
36
/* Expand a 4-operand operation using an out-of-line helper. */
37
@@ -XXX,XX +XXX,XX @@ static void gen_gvec_op4_fpst(DisasContext *s, bool is_q, int rd, int rn,
38
vec_full_reg_offset(s, rm),
39
vec_full_reg_offset(s, ra), fpst,
40
is_q ? 16 : 8, vec_full_reg_size(s), data, fn);
41
- tcg_temp_free_ptr(fpst);
42
}
43
44
/* Set ZF and NF based on a 64 bit result. This is alas fiddlier
45
@@ -XXX,XX +XXX,XX @@ static void gen_add_CC(int sf, TCGv_i64 dest, TCGv_i64 t0, TCGv_i64 t1)
46
tcg_gen_xor_i64(flag, result, t0);
47
tcg_gen_xor_i64(tmp, t0, t1);
48
tcg_gen_andc_i64(flag, flag, tmp);
49
- tcg_temp_free_i64(tmp);
50
tcg_gen_extrh_i64_i32(cpu_VF, flag);
51
52
tcg_gen_mov_i64(dest, result);
53
- tcg_temp_free_i64(result);
54
- tcg_temp_free_i64(flag);
55
} else {
31
} else {
56
/* 32 bit arithmetic */
32
*h = (HostAddress){
57
TCGv_i32 t0_32 = tcg_temp_new_i32();
33
.cond = COND_AL,
58
@@ -XXX,XX +XXX,XX @@ static void gen_add_CC(int sf, TCGv_i64 dest, TCGv_i64 t0, TCGv_i64 t1)
34
- .base = addrlo,
59
tcg_gen_xor_i32(tmp, t0_32, t1_32);
35
+ .base = addr,
60
tcg_gen_andc_i32(cpu_VF, cpu_VF, tmp);
36
.index = guest_base ? TCG_REG_GUEST_BASE : -1,
61
tcg_gen_extu_i32_i64(dest, cpu_NF);
37
.index_scratch = false,
62
-
38
};
63
- tcg_temp_free_i32(tmp);
39
@@ -XXX,XX +XXX,XX @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
64
- tcg_temp_free_i32(t0_32);
40
ldst = new_ldst_label(s);
65
- tcg_temp_free_i32(t1_32);
41
ldst->is_ld = is_ld;
66
}
42
ldst->oi = oi;
67
}
43
- ldst->addrlo_reg = addrlo;
68
44
- ldst->addrhi_reg = addrhi;
69
@@ -XXX,XX +XXX,XX @@ static void gen_sub_CC(int sf, TCGv_i64 dest, TCGv_i64 t0, TCGv_i64 t1)
45
+ ldst->addrlo_reg = addr;
70
tmp = tcg_temp_new_i64();
46
71
tcg_gen_xor_i64(tmp, t0, t1);
47
/* Load cpu->neg.tlb.f[mmu_idx].{mask,table} into {r0,r1}. */
72
tcg_gen_and_i64(flag, flag, tmp);
48
QEMU_BUILD_BUG_ON(offsetof(CPUTLBDescFast, mask) != 0);
73
- tcg_temp_free_i64(tmp);
49
@@ -XXX,XX +XXX,XX @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
74
tcg_gen_extrh_i64_i32(cpu_VF, flag);
50
tcg_out_ldrd_8(s, COND_AL, TCG_REG_R0, TCG_AREG0, fast_off);
75
tcg_gen_mov_i64(dest, result);
51
76
- tcg_temp_free_i64(flag);
52
/* Extract the tlb index from the address into R0. */
77
- tcg_temp_free_i64(result);
53
- tcg_out_dat_reg(s, COND_AL, ARITH_AND, TCG_REG_R0, TCG_REG_R0, addrlo,
78
} else {
54
+ tcg_out_dat_reg(s, COND_AL, ARITH_AND, TCG_REG_R0, TCG_REG_R0, addr,
79
/* 32 bit arithmetic */
55
SHIFT_IMM_LSR(s->page_bits - CPU_TLB_ENTRY_BITS));
80
TCGv_i32 t0_32 = tcg_temp_new_i32();
56
81
@@ -XXX,XX +XXX,XX @@ static void gen_sub_CC(int sf, TCGv_i64 dest, TCGv_i64 t0, TCGv_i64 t1)
57
/*
82
tcg_gen_xor_i32(cpu_VF, cpu_NF, t0_32);
58
* Add the tlb_table pointer, creating the CPUTLBEntry address in R1.
83
tmp = tcg_temp_new_i32();
59
- * Load the tlb comparator into R2/R3 and the fast path addend into R1.
84
tcg_gen_xor_i32(tmp, t0_32, t1_32);
60
+ * Load the tlb comparator into R2 and the fast path addend into R1.
85
- tcg_temp_free_i32(t0_32);
61
*/
86
- tcg_temp_free_i32(t1_32);
62
QEMU_BUILD_BUG_ON(HOST_BIG_ENDIAN);
87
tcg_gen_and_i32(cpu_VF, cpu_VF, tmp);
63
if (cmp_off == 0) {
88
- tcg_temp_free_i32(tmp);
64
- if (s->addr_type == TCG_TYPE_I32) {
89
tcg_gen_extu_i32_i64(dest, cpu_NF);
65
- tcg_out_ld32_rwb(s, COND_AL, TCG_REG_R2,
90
}
66
- TCG_REG_R1, TCG_REG_R0);
91
}
67
- } else {
92
@@ -XXX,XX +XXX,XX @@ static void gen_adc(int sf, TCGv_i64 dest, TCGv_i64 t0, TCGv_i64 t1)
68
- tcg_out_ldrd_rwb(s, COND_AL, TCG_REG_R2,
93
tcg_gen_extu_i32_i64(flag, cpu_CF);
69
- TCG_REG_R1, TCG_REG_R0);
94
tcg_gen_add_i64(dest, t0, t1);
70
- }
95
tcg_gen_add_i64(dest, dest, flag);
71
+ tcg_out_ld32_rwb(s, COND_AL, TCG_REG_R2, TCG_REG_R1, TCG_REG_R0);
96
- tcg_temp_free_i64(flag);
97
98
if (!sf) {
99
tcg_gen_ext32u_i64(dest, dest);
100
@@ -XXX,XX +XXX,XX @@ static void gen_adc_CC(int sf, TCGv_i64 dest, TCGv_i64 t0, TCGv_i64 t1)
101
tcg_gen_extrh_i64_i32(cpu_VF, vf_64);
102
103
tcg_gen_mov_i64(dest, result);
104
-
105
- tcg_temp_free_i64(tmp);
106
- tcg_temp_free_i64(vf_64);
107
- tcg_temp_free_i64(cf_64);
108
- tcg_temp_free_i64(result);
109
} else {
110
TCGv_i32 t0_32 = tcg_temp_new_i32();
111
TCGv_i32 t1_32 = tcg_temp_new_i32();
112
@@ -XXX,XX +XXX,XX @@ static void gen_adc_CC(int sf, TCGv_i64 dest, TCGv_i64 t0, TCGv_i64 t1)
113
tcg_gen_xor_i32(tmp, t0_32, t1_32);
114
tcg_gen_andc_i32(cpu_VF, cpu_VF, tmp);
115
tcg_gen_extu_i32_i64(dest, cpu_NF);
116
-
117
- tcg_temp_free_i32(tmp);
118
- tcg_temp_free_i32(t1_32);
119
- tcg_temp_free_i32(t0_32);
120
}
121
}
122
123
@@ -XXX,XX +XXX,XX @@ static void do_fp_st(DisasContext *s, int srcidx, TCGv_i64 tcg_addr, int size)
124
tcg_gen_addi_i64(tcg_hiaddr, tcg_addr, 8);
125
tcg_gen_qemu_st_i64(be ? tmplo : tmphi, tcg_hiaddr,
126
get_mem_index(s), mop);
127
-
128
- tcg_temp_free_i64(tcg_hiaddr);
129
- tcg_temp_free_i64(tmphi);
130
}
131
-
132
- tcg_temp_free_i64(tmplo);
133
}
134
135
/*
136
@@ -XXX,XX +XXX,XX @@ static void do_fp_ld(DisasContext *s, int destidx, TCGv_i64 tcg_addr, int size)
137
tcg_gen_addi_i64(tcg_hiaddr, tcg_addr, 8);
138
tcg_gen_qemu_ld_i64(be ? tmplo : tmphi, tcg_hiaddr,
139
get_mem_index(s), mop);
140
- tcg_temp_free_i64(tcg_hiaddr);
141
}
142
143
tcg_gen_st_i64(tmplo, cpu_env, fp_reg_offset(s, destidx, MO_64));
144
- tcg_temp_free_i64(tmplo);
145
146
if (tmphi) {
147
tcg_gen_st_i64(tmphi, cpu_env, fp_reg_hi_offset(s, destidx));
148
- tcg_temp_free_i64(tmphi);
149
}
150
clear_vec_high(s, tmphi != NULL, destidx);
151
}
152
@@ -XXX,XX +XXX,XX @@ static void do_vec_st(DisasContext *s, int srcidx, int element,
153
154
read_vec_element(s, tcg_tmp, srcidx, element, mop & MO_SIZE);
155
tcg_gen_qemu_st_i64(tcg_tmp, tcg_addr, get_mem_index(s), mop);
156
-
157
- tcg_temp_free_i64(tcg_tmp);
158
}
159
160
/* Load from memory to vector register */
161
@@ -XXX,XX +XXX,XX @@ static void do_vec_ld(DisasContext *s, int destidx, int element,
162
163
tcg_gen_qemu_ld_i64(tcg_tmp, tcg_addr, get_mem_index(s), mop);
164
write_vec_element(s, tcg_tmp, destidx, element, mop & MO_SIZE);
165
-
166
- tcg_temp_free_i64(tcg_tmp);
167
}
168
169
/* Check that FP/Neon access is enabled. If it is, return
170
@@ -XXX,XX +XXX,XX @@ static void disas_test_b_imm(DisasContext *s, uint32_t insn)
171
match = gen_disas_label(s);
172
tcg_gen_brcondi_i64(op ? TCG_COND_NE : TCG_COND_EQ,
173
tcg_cmp, 0, match.label);
174
- tcg_temp_free_i64(tcg_cmp);
175
gen_goto_tb(s, 0, 4);
176
set_disas_label(s, match);
177
gen_goto_tb(s, 1, diff);
178
@@ -XXX,XX +XXX,XX @@ static void gen_xaflag(void)
179
180
/* C | Z */
181
tcg_gen_or_i32(cpu_CF, cpu_CF, z);
182
-
183
- tcg_temp_free_i32(z);
184
}
185
186
static void gen_axflag(void)
187
@@ -XXX,XX +XXX,XX @@ static void gen_get_nzcv(TCGv_i64 tcg_rt)
188
tcg_gen_deposit_i32(nzcv, nzcv, tmp, 28, 1);
189
/* generate result */
190
tcg_gen_extu_i32_i64(tcg_rt, nzcv);
191
-
192
- tcg_temp_free_i32(nzcv);
193
- tcg_temp_free_i32(tmp);
194
}
195
196
static void gen_set_nzcv(TCGv_i64 tcg_rt)
197
@@ -XXX,XX +XXX,XX @@ static void gen_set_nzcv(TCGv_i64 tcg_rt)
198
/* bit 28, V */
199
tcg_gen_andi_i32(cpu_VF, nzcv, (1 << 28));
200
tcg_gen_shli_i32(cpu_VF, cpu_VF, 3);
201
- tcg_temp_free_i32(nzcv);
202
}
203
204
static void gen_sysreg_undef(DisasContext *s, bool isread,
205
@@ -XXX,XX +XXX,XX @@ static void handle_sys(DisasContext *s, uint32_t insn, bool isread,
206
case 0:
207
break;
208
case ARM_CP_NOP:
209
- goto exit;
210
+ return;
211
case ARM_CP_NZCV:
212
tcg_rt = cpu_reg(s, rt);
213
if (isread) {
214
@@ -XXX,XX +XXX,XX @@ static void handle_sys(DisasContext *s, uint32_t insn, bool isread,
215
} else {
72
} else {
216
gen_set_nzcv(tcg_rt);
73
tcg_out_dat_reg(s, COND_AL, ARITH_ADD,
74
TCG_REG_R1, TCG_REG_R1, TCG_REG_R0, 0);
75
- if (s->addr_type == TCG_TYPE_I32) {
76
- tcg_out_ld32_12(s, COND_AL, TCG_REG_R2, TCG_REG_R1, cmp_off);
77
- } else {
78
- tcg_out_ldrd_8(s, COND_AL, TCG_REG_R2, TCG_REG_R1, cmp_off);
79
- }
80
+ tcg_out_ld32_12(s, COND_AL, TCG_REG_R2, TCG_REG_R1, cmp_off);
217
}
81
}
218
- goto exit;
82
219
+ return;
83
/* Load the tlb addend. */
220
case ARM_CP_CURRENTEL:
84
@@ -XXX,XX +XXX,XX @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
221
/* Reads as current EL value from pstate, which is
85
* This leaves the least significant alignment bits unchanged, and of
222
* guaranteed to be constant by the tb flags.
86
* course must be zero.
223
*/
87
*/
224
tcg_rt = cpu_reg(s, rt);
88
- t_addr = addrlo;
225
tcg_gen_movi_i64(tcg_rt, s->current_el << 2);
89
+ t_addr = addr;
226
- goto exit;
90
if (a_mask < s_mask) {
227
+ return;
91
t_addr = TCG_REG_R0;
228
case ARM_CP_DC_ZVA:
92
tcg_out_dat_imm(s, COND_AL, ARITH_ADD, t_addr,
229
/* Writes clear the aligned block of memory which rt points into. */
93
- addrlo, s_mask - a_mask);
230
if (s->mte_active[0]) {
94
+ addr, s_mask - a_mask);
231
@@ -XXX,XX +XXX,XX @@ static void handle_sys(DisasContext *s, uint32_t insn, bool isread,
232
tcg_rt = clean_data_tbi(s, cpu_reg(s, rt));
233
}
95
}
234
gen_helper_dc_zva(cpu_env, tcg_rt);
96
if (use_armv7_instructions && s->page_bits <= 16) {
235
- goto exit;
97
tcg_out_movi32(s, COND_AL, TCG_REG_TMP, ~(s->page_mask | a_mask));
236
+ return;
98
@@ -XXX,XX +XXX,XX @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
237
case ARM_CP_DC_GVA:
99
} else {
238
{
100
if (a_mask) {
239
TCGv_i64 clean_addr, tag;
101
tcg_debug_assert(a_mask <= 0xff);
240
@@ -XXX,XX +XXX,XX @@ static void handle_sys(DisasContext *s, uint32_t insn, bool isread,
102
- tcg_out_dat_imm(s, COND_AL, ARITH_TST, 0, addrlo, a_mask);
241
tag = tcg_temp_new_i64();
103
+ tcg_out_dat_imm(s, COND_AL, ARITH_TST, 0, addr, a_mask);
242
tcg_gen_shri_i64(tag, tcg_rt, 56);
243
gen_helper_stzgm_tags(cpu_env, clean_addr, tag);
244
- tcg_temp_free_i64(tag);
245
}
104
}
246
}
105
tcg_out_dat_reg(s, COND_AL, ARITH_MOV, TCG_REG_TMP, 0, t_addr,
247
- goto exit;
106
SHIFT_IMM_LSR(s->page_bits));
248
+ return;
107
@@ -XXX,XX +XXX,XX @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
249
case ARM_CP_DC_GZVA:
108
0, TCG_REG_R2, TCG_REG_TMP,
250
{
109
SHIFT_IMM_LSL(s->page_bits));
251
TCGv_i64 clean_addr, tag;
252
@@ -XXX,XX +XXX,XX @@ static void handle_sys(DisasContext *s, uint32_t insn, bool isread,
253
tag = tcg_temp_new_i64();
254
tcg_gen_shri_i64(tag, tcg_rt, 56);
255
gen_helper_stzgm_tags(cpu_env, clean_addr, tag);
256
- tcg_temp_free_i64(tag);
257
}
258
}
259
- goto exit;
260
+ return;
261
default:
262
g_assert_not_reached();
263
}
264
if ((ri->type & ARM_CP_FPU) && !fp_access_check_only(s)) {
265
- goto exit;
266
+ return;
267
} else if ((ri->type & ARM_CP_SVE) && !sve_access_check(s)) {
268
- goto exit;
269
+ return;
270
} else if ((ri->type & ARM_CP_SME) && !sme_access_check(s)) {
271
- goto exit;
272
+ return;
273
}
274
275
if ((tb_cflags(s->base.tb) & CF_USE_ICOUNT) && (ri->type & ARM_CP_IO)) {
276
@@ -XXX,XX +XXX,XX @@ static void handle_sys(DisasContext *s, uint32_t insn, bool isread,
277
} else {
278
if (ri->type & ARM_CP_CONST) {
279
/* If not forbidden by access permissions, treat as WI */
280
- goto exit;
281
+ return;
282
} else if (ri->writefn) {
283
if (!tcg_ri) {
284
tcg_ri = gen_lookup_cp_reg(key);
285
@@ -XXX,XX +XXX,XX @@ static void handle_sys(DisasContext *s, uint32_t insn, bool isread,
286
*/
287
s->base.is_jmp = DISAS_UPDATE_EXIT;
288
}
289
-
290
- exit:
291
- if (tcg_ri) {
292
- tcg_temp_free_ptr(tcg_ri);
293
- }
294
}
295
296
/* System
297
@@ -XXX,XX +XXX,XX @@ static void disas_uncond_b_reg(DisasContext *s, uint32_t insn)
298
}
299
300
gen_helper_exception_return(cpu_env, dst);
301
- tcg_temp_free_i64(dst);
302
/* Must exit loop to check un-masked IRQs */
303
s->base.is_jmp = DISAS_EXIT;
304
return;
305
@@ -XXX,XX +XXX,XX @@ static void gen_load_exclusive(DisasContext *s, int rt, int rt2,
306
TCGv_i64 addr2 = tcg_temp_new_i64();
307
tcg_gen_addi_i64(addr2, addr, 8);
308
tcg_gen_qemu_ld_i64(cpu_exclusive_high, addr2, idx, memop);
309
- tcg_temp_free_i64(addr2);
310
311
tcg_gen_mov_i64(cpu_reg(s, rt), cpu_exclusive_val);
312
tcg_gen_mov_i64(cpu_reg(s, rt2), cpu_exclusive_high);
313
@@ -XXX,XX +XXX,XX @@ static void gen_store_exclusive(DisasContext *s, int rd, int rt, int rt2,
314
tcg_gen_atomic_cmpxchg_i128(t16, cpu_exclusive_addr, c16, t16,
315
get_mem_index(s),
316
MO_128 | MO_ALIGN | s->be_data);
317
- tcg_temp_free_i128(c16);
318
319
a = tcg_temp_new_i64();
320
b = tcg_temp_new_i64();
321
@@ -XXX,XX +XXX,XX @@ static void gen_store_exclusive(DisasContext *s, int rd, int rt, int rt2,
322
tcg_gen_xor_i64(a, a, cpu_exclusive_val);
323
tcg_gen_xor_i64(b, b, cpu_exclusive_high);
324
tcg_gen_or_i64(tmp, a, b);
325
- tcg_temp_free_i64(a);
326
- tcg_temp_free_i64(b);
327
- tcg_temp_free_i128(t16);
328
329
tcg_gen_setcondi_i64(TCG_COND_NE, tmp, tmp, 0);
330
}
331
@@ -XXX,XX +XXX,XX @@ static void gen_store_exclusive(DisasContext *s, int rd, int rt, int rt2,
332
tcg_gen_setcond_i64(TCG_COND_NE, tmp, tmp, cpu_exclusive_val);
333
}
334
tcg_gen_mov_i64(cpu_reg(s, rd), tmp);
335
- tcg_temp_free_i64(tmp);
336
tcg_gen_br(done_label);
337
338
gen_set_label(fail_label);
339
@@ -XXX,XX +XXX,XX @@ static void gen_compare_and_swap_pair(DisasContext *s, int rs, int rt,
340
341
tcg_gen_atomic_cmpxchg_i64(cmp, clean_addr, cmp, val, memidx,
342
MO_64 | MO_ALIGN | s->be_data);
343
- tcg_temp_free_i64(val);
344
345
if (s->be_data == MO_LE) {
346
tcg_gen_extr32_i64(s1, s2, cmp);
347
} else {
348
tcg_gen_extr32_i64(s2, s1, cmp);
349
}
350
- tcg_temp_free_i64(cmp);
351
} else {
352
TCGv_i128 cmp = tcg_temp_new_i128();
353
TCGv_i128 val = tcg_temp_new_i128();
354
@@ -XXX,XX +XXX,XX @@ static void gen_compare_and_swap_pair(DisasContext *s, int rs, int rt,
355
356
tcg_gen_atomic_cmpxchg_i128(cmp, clean_addr, cmp, val, memidx,
357
MO_128 | MO_ALIGN | s->be_data);
358
- tcg_temp_free_i128(val);
359
360
if (s->be_data == MO_LE) {
361
tcg_gen_extr_i128_i64(s1, s2, cmp);
362
} else {
363
tcg_gen_extr_i128_i64(s2, s1, cmp);
364
}
365
- tcg_temp_free_i128(cmp);
366
}
367
}
368
369
@@ -XXX,XX +XXX,XX @@ static void disas_ldst_pair(DisasContext *s, uint32_t insn)
370
false, false, 0, false, false);
371
372
tcg_gen_mov_i64(tcg_rt, tmp);
373
- tcg_temp_free_i64(tmp);
374
} else {
375
do_gpr_st(s, tcg_rt, clean_addr, size,
376
false, 0, false, false);
377
@@ -XXX,XX +XXX,XX @@ static void disas_ldst_single_struct(DisasContext *s, uint32_t insn)
378
tcg_gen_gvec_dup_i64(scale, vec_full_reg_offset(s, rt),
379
(is_q + 1) * 8, vec_full_reg_size(s),
380
tcg_tmp);
381
- tcg_temp_free_i64(tcg_tmp);
382
} else {
383
/* Load/store one element per register */
384
if (is_load) {
385
@@ -XXX,XX +XXX,XX @@ static void disas_add_sub_imm(DisasContext *s, uint32_t insn)
386
} else {
387
tcg_gen_ext32u_i64(tcg_rd, tcg_result);
388
}
389
-
390
- tcg_temp_free_i64(tcg_result);
391
}
392
393
/*
394
@@ -XXX,XX +XXX,XX @@ static void disas_extract(DisasContext *s, uint32_t insn)
395
TCGv_i32 t1 = tcg_temp_new_i32();
396
tcg_gen_extrl_i64_i32(t1, tcg_rn);
397
tcg_gen_extract2_i32(t0, t0, t1, imm);
398
- tcg_temp_free_i32(t1);
399
}
400
tcg_gen_extu_i32_i64(tcg_rd, t0);
401
- tcg_temp_free_i32(t0);
402
}
403
}
404
}
405
@@ -XXX,XX +XXX,XX @@ static void shift_reg(TCGv_i64 dst, TCGv_i64 src, int sf,
406
tcg_gen_extrl_i64_i32(t1, shift_amount);
407
tcg_gen_rotr_i32(t0, t0, t1);
408
tcg_gen_extu_i32_i64(dst, t0);
409
- tcg_temp_free_i32(t0);
410
- tcg_temp_free_i32(t1);
411
}
412
break;
413
default:
414
@@ -XXX,XX +XXX,XX @@ static void disas_add_sub_ext_reg(DisasContext *s, uint32_t insn)
415
} else {
416
tcg_gen_ext32u_i64(tcg_rd, tcg_result);
417
}
418
-
419
- tcg_temp_free_i64(tcg_result);
420
}
421
422
/*
423
@@ -XXX,XX +XXX,XX @@ static void disas_add_sub_reg(DisasContext *s, uint32_t insn)
424
} else {
425
tcg_gen_ext32u_i64(tcg_rd, tcg_result);
426
}
427
-
428
- tcg_temp_free_i64(tcg_result);
429
}
430
431
/* Data-processing (3 source)
432
@@ -XXX,XX +XXX,XX @@ static void disas_data_proc_3src(DisasContext *s, uint32_t insn)
433
} else {
434
tcg_gen_mulu2_i64(low_bits, tcg_rd, tcg_rn, tcg_rm);
435
}
110
}
436
-
111
-
437
- tcg_temp_free_i64(low_bits);
112
- if (s->addr_type != TCG_TYPE_I32) {
438
return;
113
- tcg_out_dat_reg(s, COND_EQ, ARITH_CMP, 0, TCG_REG_R3, addrhi, 0);
114
- }
115
} else if (a_mask) {
116
ldst = new_ldst_label(s);
117
ldst->is_ld = is_ld;
118
ldst->oi = oi;
119
- ldst->addrlo_reg = addrlo;
120
- ldst->addrhi_reg = addrhi;
121
+ ldst->addrlo_reg = addr;
122
123
/* We are expecting alignment to max out at 7 */
124
tcg_debug_assert(a_mask <= 0xff);
125
/* tst addr, #mask */
126
- tcg_out_dat_imm(s, COND_AL, ARITH_TST, 0, addrlo, a_mask);
127
+ tcg_out_dat_imm(s, COND_AL, ARITH_TST, 0, addr, a_mask);
439
}
128
}
440
129
441
@@ -XXX,XX +XXX,XX @@ static void disas_data_proc_3src(DisasContext *s, uint32_t insn)
130
return ldst;
442
if (!sf) {
131
@@ -XXX,XX +XXX,XX @@ static void tcg_out_qemu_ld_direct(TCGContext *s, MemOp opc, TCGReg datalo,
443
tcg_gen_ext32u_i64(cpu_reg(s, rd), cpu_reg(s, rd));
444
}
445
-
446
- tcg_temp_free_i64(tcg_op1);
447
- tcg_temp_free_i64(tcg_op2);
448
- tcg_temp_free_i64(tcg_tmp);
449
}
132
}
450
133
451
/* Add/subtract (with carry)
134
static void tcg_out_qemu_ld(TCGContext *s, TCGReg datalo, TCGReg datahi,
452
@@ -XXX,XX +XXX,XX @@ static void disas_rotate_right_into_flags(DisasContext *s, uint32_t insn)
135
- TCGReg addrlo, TCGReg addrhi,
453
if (mask & 1) { /* V */
136
- MemOpIdx oi, TCGType data_type)
454
tcg_gen_shli_i32(cpu_VF, nzcv, 31 - 0);
137
+ TCGReg addr, MemOpIdx oi, TCGType data_type)
455
}
138
{
456
-
139
MemOp opc = get_memop(oi);
457
- tcg_temp_free_i32(nzcv);
140
TCGLabelQemuLdst *ldst;
141
HostAddress h;
142
143
- ldst = prepare_host_addr(s, &h, addrlo, addrhi, oi, true);
144
+ ldst = prepare_host_addr(s, &h, addr, oi, true);
145
if (ldst) {
146
ldst->type = data_type;
147
ldst->datalo_reg = datalo;
148
@@ -XXX,XX +XXX,XX @@ static void tcg_out_qemu_st_direct(TCGContext *s, MemOp opc, TCGReg datalo,
458
}
149
}
459
150
460
/*
151
static void tcg_out_qemu_st(TCGContext *s, TCGReg datalo, TCGReg datahi,
461
@@ -XXX,XX +XXX,XX @@ static void disas_evaluate_into_flags(DisasContext *s, uint32_t insn)
152
- TCGReg addrlo, TCGReg addrhi,
462
tcg_gen_shli_i32(cpu_VF, tmp, shift - 1);
153
- MemOpIdx oi, TCGType data_type)
463
tcg_gen_mov_i32(cpu_ZF, cpu_NF);
154
+ TCGReg addr, MemOpIdx oi, TCGType data_type)
464
tcg_gen_xor_i32(cpu_VF, cpu_VF, cpu_NF);
155
{
465
- tcg_temp_free_i32(tmp);
156
MemOp opc = get_memop(oi);
466
}
157
TCGLabelQemuLdst *ldst;
467
158
HostAddress h;
468
/* Conditional compare (immediate / register)
159
469
@@ -XXX,XX +XXX,XX @@ static void disas_cc(DisasContext *s, uint32_t insn)
160
- ldst = prepare_host_addr(s, &h, addrlo, addrhi, oi, false);
470
} else {
161
+ ldst = prepare_host_addr(s, &h, addr, oi, false);
471
gen_add_CC(sf, tcg_tmp, tcg_rn, tcg_y);
162
if (ldst) {
472
}
163
ldst->type = data_type;
473
- tcg_temp_free_i64(tcg_tmp);
164
ldst->datalo_reg = datalo;
474
165
@@ -XXX,XX +XXX,XX @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, TCGType type,
475
/* If COND was false, force the flags to #nzcv. Compute two masks
476
* to help with this: T1 = (COND ? 0 : -1), T2 = (COND ? -1 : 0).
477
@@ -XXX,XX +XXX,XX @@ static void disas_cc(DisasContext *s, uint32_t insn)
478
tcg_gen_and_i32(cpu_VF, cpu_VF, tcg_t2);
479
}
480
}
481
- tcg_temp_free_i32(tcg_t0);
482
- tcg_temp_free_i32(tcg_t1);
483
- tcg_temp_free_i32(tcg_t2);
484
}
485
486
/* Conditional select
487
@@ -XXX,XX +XXX,XX @@ static void handle_clz(DisasContext *s, unsigned int sf,
488
tcg_gen_extrl_i64_i32(tcg_tmp32, tcg_rn);
489
tcg_gen_clzi_i32(tcg_tmp32, tcg_tmp32, 32);
490
tcg_gen_extu_i32_i64(tcg_rd, tcg_tmp32);
491
- tcg_temp_free_i32(tcg_tmp32);
492
}
493
}
494
495
@@ -XXX,XX +XXX,XX @@ static void handle_cls(DisasContext *s, unsigned int sf,
496
tcg_gen_extrl_i64_i32(tcg_tmp32, tcg_rn);
497
tcg_gen_clrsb_i32(tcg_tmp32, tcg_tmp32);
498
tcg_gen_extu_i32_i64(tcg_rd, tcg_tmp32);
499
- tcg_temp_free_i32(tcg_tmp32);
500
}
501
}
502
503
@@ -XXX,XX +XXX,XX @@ static void handle_rbit(DisasContext *s, unsigned int sf,
504
tcg_gen_extrl_i64_i32(tcg_tmp32, tcg_rn);
505
gen_helper_rbit(tcg_tmp32, tcg_tmp32);
506
tcg_gen_extu_i32_i64(tcg_rd, tcg_tmp32);
507
- tcg_temp_free_i32(tcg_tmp32);
508
}
509
}
510
511
@@ -XXX,XX +XXX,XX @@ static void handle_rev16(DisasContext *s, unsigned int sf,
512
tcg_gen_and_i64(tcg_tmp, tcg_tmp, mask);
513
tcg_gen_shli_i64(tcg_rd, tcg_rd, 8);
514
tcg_gen_or_i64(tcg_rd, tcg_rd, tcg_tmp);
515
-
516
- tcg_temp_free_i64(tcg_tmp);
517
}
518
519
/* Data-processing (1 source)
520
@@ -XXX,XX +XXX,XX @@ static void handle_shift_reg(DisasContext *s,
521
522
tcg_gen_andi_i64(tcg_shift, cpu_reg(s, rm), sf ? 63 : 31);
523
shift_reg(tcg_rd, tcg_rn, sf, shift_type, tcg_shift);
524
- tcg_temp_free_i64(tcg_shift);
525
}
526
527
/* CRC32[BHWX], CRC32C[BHWX] */
528
@@ -XXX,XX +XXX,XX @@ static void disas_data_proc_2src(DisasContext *s, uint32_t insn)
529
tcg_gen_extract_i64(t, cpu_reg_sp(s, rn), 56, 4);
530
tcg_gen_shl_i64(t, tcg_constant_i64(1), t);
531
tcg_gen_or_i64(cpu_reg(s, rd), cpu_reg(s, rm), t);
532
-
533
- tcg_temp_free_i64(t);
534
}
535
break;
166
break;
536
case 8: /* LSLV */
167
537
@@ -XXX,XX +XXX,XX @@ static void handle_fp_compare(DisasContext *s, int size,
168
case INDEX_op_qemu_ld_i32:
538
} else {
169
- tcg_out_qemu_ld(s, args[0], -1, args[1], -1, args[2], TCG_TYPE_I32);
539
gen_helper_vfp_cmpd_a64(tcg_flags, tcg_vn, tcg_vm, fpst);
170
+ tcg_out_qemu_ld(s, args[0], -1, args[1], args[2], TCG_TYPE_I32);
540
}
541
- tcg_temp_free_i64(tcg_vn);
542
- tcg_temp_free_i64(tcg_vm);
543
} else {
544
TCGv_i32 tcg_vn = tcg_temp_new_i32();
545
TCGv_i32 tcg_vm = tcg_temp_new_i32();
546
@@ -XXX,XX +XXX,XX @@ static void handle_fp_compare(DisasContext *s, int size,
547
default:
548
g_assert_not_reached();
549
}
550
-
551
- tcg_temp_free_i32(tcg_vn);
552
- tcg_temp_free_i32(tcg_vm);
553
}
554
555
- tcg_temp_free_ptr(fpst);
556
-
557
gen_set_nzcv(tcg_flags);
558
-
559
- tcg_temp_free_i64(tcg_flags);
560
}
561
562
/* Floating point compare
563
@@ -XXX,XX +XXX,XX @@ static void disas_fp_csel(DisasContext *s, uint32_t insn)
564
a64_test_cc(&c, cond);
565
tcg_gen_movcond_i64(c.cond, t_true, c.value, tcg_constant_i64(0),
566
t_true, t_false);
567
- tcg_temp_free_i64(t_false);
568
569
/* Note that sregs & hregs write back zeros to the high bits,
570
and we've already done the zero-extension. */
571
write_fp_dreg(s, rd, t_true);
572
- tcg_temp_free_i64(t_true);
573
}
574
575
/* Floating-point data-processing (1 source) - half precision */
576
@@ -XXX,XX +XXX,XX @@ static void handle_fp_1src_half(DisasContext *s, int opcode, int rd, int rn)
577
gen_helper_advsimd_rinth(tcg_res, tcg_op, fpst);
578
579
gen_helper_set_rmode(tcg_rmode, tcg_rmode, fpst);
580
- tcg_temp_free_i32(tcg_rmode);
581
break;
171
break;
582
}
172
case INDEX_op_qemu_ld_i64:
583
case 0xe: /* FRINTX */
173
- tcg_out_qemu_ld(s, args[0], args[1], args[2], -1,
584
@@ -XXX,XX +XXX,XX @@ static void handle_fp_1src_half(DisasContext *s, int opcode, int rd, int rn)
174
- args[3], TCG_TYPE_I64);
585
}
175
+ tcg_out_qemu_ld(s, args[0], args[1], args[2], args[3], TCG_TYPE_I64);
586
587
write_fp_sreg(s, rd, tcg_res);
588
-
589
- if (fpst) {
590
- tcg_temp_free_ptr(fpst);
591
- }
592
- tcg_temp_free_i32(tcg_op);
593
- tcg_temp_free_i32(tcg_res);
594
}
595
596
/* Floating-point data-processing (1 source) - single precision */
597
@@ -XXX,XX +XXX,XX @@ static void handle_fp_1src_single(DisasContext *s, int opcode, int rd, int rn)
598
gen_helper_set_rmode(tcg_rmode, tcg_rmode, fpst);
599
gen_fpst(tcg_res, tcg_op, fpst);
600
gen_helper_set_rmode(tcg_rmode, tcg_rmode, fpst);
601
- tcg_temp_free_i32(tcg_rmode);
602
} else {
603
gen_fpst(tcg_res, tcg_op, fpst);
604
}
605
- tcg_temp_free_ptr(fpst);
606
607
done:
608
write_fp_sreg(s, rd, tcg_res);
609
- tcg_temp_free_i32(tcg_op);
610
- tcg_temp_free_i32(tcg_res);
611
}
612
613
/* Floating-point data-processing (1 source) - double precision */
614
@@ -XXX,XX +XXX,XX @@ static void handle_fp_1src_double(DisasContext *s, int opcode, int rd, int rn)
615
gen_helper_set_rmode(tcg_rmode, tcg_rmode, fpst);
616
gen_fpst(tcg_res, tcg_op, fpst);
617
gen_helper_set_rmode(tcg_rmode, tcg_rmode, fpst);
618
- tcg_temp_free_i32(tcg_rmode);
619
} else {
620
gen_fpst(tcg_res, tcg_op, fpst);
621
}
622
- tcg_temp_free_ptr(fpst);
623
624
done:
625
write_fp_dreg(s, rd, tcg_res);
626
- tcg_temp_free_i64(tcg_op);
627
- tcg_temp_free_i64(tcg_res);
628
}
629
630
static void handle_fp_fcvt(DisasContext *s, int opcode,
631
@@ -XXX,XX +XXX,XX @@ static void handle_fp_fcvt(DisasContext *s, int opcode,
632
TCGv_i64 tcg_rd = tcg_temp_new_i64();
633
gen_helper_vfp_fcvtds(tcg_rd, tcg_rn, cpu_env);
634
write_fp_dreg(s, rd, tcg_rd);
635
- tcg_temp_free_i64(tcg_rd);
636
} else {
637
/* Single to half */
638
TCGv_i32 tcg_rd = tcg_temp_new_i32();
639
@@ -XXX,XX +XXX,XX @@ static void handle_fp_fcvt(DisasContext *s, int opcode,
640
gen_helper_vfp_fcvt_f32_to_f16(tcg_rd, tcg_rn, fpst, ahp);
641
/* write_fp_sreg is OK here because top half of tcg_rd is zero */
642
write_fp_sreg(s, rd, tcg_rd);
643
- tcg_temp_free_i32(tcg_rd);
644
- tcg_temp_free_i32(ahp);
645
- tcg_temp_free_ptr(fpst);
646
}
647
- tcg_temp_free_i32(tcg_rn);
648
break;
176
break;
649
}
177
650
case 0x1:
178
case INDEX_op_qemu_st_i32:
651
@@ -XXX,XX +XXX,XX @@ static void handle_fp_fcvt(DisasContext *s, int opcode,
179
- tcg_out_qemu_st(s, args[0], -1, args[1], -1, args[2], TCG_TYPE_I32);
652
/* Double to half */
180
+ tcg_out_qemu_st(s, args[0], -1, args[1], args[2], TCG_TYPE_I32);
653
gen_helper_vfp_fcvt_f64_to_f16(tcg_rd, tcg_rn, fpst, ahp);
654
/* write_fp_sreg is OK here because top half of tcg_rd is zero */
655
- tcg_temp_free_ptr(fpst);
656
- tcg_temp_free_i32(ahp);
657
}
658
write_fp_sreg(s, rd, tcg_rd);
659
- tcg_temp_free_i32(tcg_rd);
660
- tcg_temp_free_i64(tcg_rn);
661
break;
181
break;
662
}
182
case INDEX_op_qemu_st_i64:
663
case 0x3:
183
- tcg_out_qemu_st(s, args[0], args[1], args[2], -1,
664
@@ -XXX,XX +XXX,XX @@ static void handle_fp_fcvt(DisasContext *s, int opcode,
184
- args[3], TCG_TYPE_I64);
665
TCGv_i32 tcg_rd = tcg_temp_new_i32();
185
+ tcg_out_qemu_st(s, args[0], args[1], args[2], args[3], TCG_TYPE_I64);
666
gen_helper_vfp_fcvt_f16_to_f32(tcg_rd, tcg_rn, tcg_fpst, tcg_ahp);
667
write_fp_sreg(s, rd, tcg_rd);
668
- tcg_temp_free_i32(tcg_rd);
669
} else {
670
/* Half to double */
671
TCGv_i64 tcg_rd = tcg_temp_new_i64();
672
gen_helper_vfp_fcvt_f16_to_f64(tcg_rd, tcg_rn, tcg_fpst, tcg_ahp);
673
write_fp_dreg(s, rd, tcg_rd);
674
- tcg_temp_free_i64(tcg_rd);
675
}
676
- tcg_temp_free_i32(tcg_rn);
677
- tcg_temp_free_ptr(tcg_fpst);
678
- tcg_temp_free_i32(tcg_ahp);
679
break;
186
break;
680
}
187
681
default:
188
case INDEX_op_bswap16_i32:
682
@@ -XXX,XX +XXX,XX @@ static void handle_fp_2src_single(DisasContext *s, int opcode,
683
}
684
685
write_fp_sreg(s, rd, tcg_res);
686
-
687
- tcg_temp_free_ptr(fpst);
688
- tcg_temp_free_i32(tcg_op1);
689
- tcg_temp_free_i32(tcg_op2);
690
- tcg_temp_free_i32(tcg_res);
691
}
692
693
/* Floating-point data-processing (2 source) - double precision */
694
@@ -XXX,XX +XXX,XX @@ static void handle_fp_2src_double(DisasContext *s, int opcode,
695
}
696
697
write_fp_dreg(s, rd, tcg_res);
698
-
699
- tcg_temp_free_ptr(fpst);
700
- tcg_temp_free_i64(tcg_op1);
701
- tcg_temp_free_i64(tcg_op2);
702
- tcg_temp_free_i64(tcg_res);
703
}
704
705
/* Floating-point data-processing (2 source) - half precision */
706
@@ -XXX,XX +XXX,XX @@ static void handle_fp_2src_half(DisasContext *s, int opcode,
707
}
708
709
write_fp_sreg(s, rd, tcg_res);
710
-
711
- tcg_temp_free_ptr(fpst);
712
- tcg_temp_free_i32(tcg_op1);
713
- tcg_temp_free_i32(tcg_op2);
714
- tcg_temp_free_i32(tcg_res);
715
}
716
717
/* Floating point data-processing (2 source)
718
@@ -XXX,XX +XXX,XX @@ static void handle_fp_3src_single(DisasContext *s, bool o0, bool o1,
719
gen_helper_vfp_muladds(tcg_res, tcg_op1, tcg_op2, tcg_op3, fpst);
720
721
write_fp_sreg(s, rd, tcg_res);
722
-
723
- tcg_temp_free_ptr(fpst);
724
- tcg_temp_free_i32(tcg_op1);
725
- tcg_temp_free_i32(tcg_op2);
726
- tcg_temp_free_i32(tcg_op3);
727
- tcg_temp_free_i32(tcg_res);
728
}
729
730
/* Floating-point data-processing (3 source) - double precision */
731
@@ -XXX,XX +XXX,XX @@ static void handle_fp_3src_double(DisasContext *s, bool o0, bool o1,
732
gen_helper_vfp_muladdd(tcg_res, tcg_op1, tcg_op2, tcg_op3, fpst);
733
734
write_fp_dreg(s, rd, tcg_res);
735
-
736
- tcg_temp_free_ptr(fpst);
737
- tcg_temp_free_i64(tcg_op1);
738
- tcg_temp_free_i64(tcg_op2);
739
- tcg_temp_free_i64(tcg_op3);
740
- tcg_temp_free_i64(tcg_res);
741
}
742
743
/* Floating-point data-processing (3 source) - half precision */
744
@@ -XXX,XX +XXX,XX @@ static void handle_fp_3src_half(DisasContext *s, bool o0, bool o1,
745
gen_helper_advsimd_muladdh(tcg_res, tcg_op1, tcg_op2, tcg_op3, fpst);
746
747
write_fp_sreg(s, rd, tcg_res);
748
-
749
- tcg_temp_free_ptr(fpst);
750
- tcg_temp_free_i32(tcg_op1);
751
- tcg_temp_free_i32(tcg_op2);
752
- tcg_temp_free_i32(tcg_op3);
753
- tcg_temp_free_i32(tcg_res);
754
}
755
756
/* Floating point data-processing (3 source)
757
@@ -XXX,XX +XXX,XX @@ static void handle_fpfpcvt(DisasContext *s, int rd, int rn, int opcode,
758
tcg_shift, tcg_fpstatus);
759
}
760
write_fp_dreg(s, rd, tcg_double);
761
- tcg_temp_free_i64(tcg_double);
762
break;
763
764
case 0: /* float32 */
765
@@ -XXX,XX +XXX,XX @@ static void handle_fpfpcvt(DisasContext *s, int rd, int rn, int opcode,
766
tcg_shift, tcg_fpstatus);
767
}
768
write_fp_sreg(s, rd, tcg_single);
769
- tcg_temp_free_i32(tcg_single);
770
break;
771
772
case 3: /* float16 */
773
@@ -XXX,XX +XXX,XX @@ static void handle_fpfpcvt(DisasContext *s, int rd, int rn, int opcode,
774
tcg_shift, tcg_fpstatus);
775
}
776
write_fp_sreg(s, rd, tcg_single);
777
- tcg_temp_free_i32(tcg_single);
778
break;
779
780
default:
781
@@ -XXX,XX +XXX,XX @@ static void handle_fpfpcvt(DisasContext *s, int rd, int rn, int opcode,
782
if (!sf) {
783
tcg_gen_ext32u_i64(tcg_int, tcg_int);
784
}
785
- tcg_temp_free_i64(tcg_double);
786
break;
787
788
case 0: /* float32 */
789
@@ -XXX,XX +XXX,XX @@ static void handle_fpfpcvt(DisasContext *s, int rd, int rn, int opcode,
790
tcg_shift, tcg_fpstatus);
791
}
792
tcg_gen_extu_i32_i64(tcg_int, tcg_dest);
793
- tcg_temp_free_i32(tcg_dest);
794
}
795
- tcg_temp_free_i32(tcg_single);
796
break;
797
798
case 3: /* float16 */
799
@@ -XXX,XX +XXX,XX @@ static void handle_fpfpcvt(DisasContext *s, int rd, int rn, int opcode,
800
tcg_shift, tcg_fpstatus);
801
}
802
tcg_gen_extu_i32_i64(tcg_int, tcg_dest);
803
- tcg_temp_free_i32(tcg_dest);
804
}
805
- tcg_temp_free_i32(tcg_single);
806
break;
807
808
default:
809
@@ -XXX,XX +XXX,XX @@ static void handle_fpfpcvt(DisasContext *s, int rd, int rn, int opcode,
810
}
811
812
gen_helper_set_rmode(tcg_rmode, tcg_rmode, tcg_fpstatus);
813
- tcg_temp_free_i32(tcg_rmode);
814
}
815
-
816
- tcg_temp_free_ptr(tcg_fpstatus);
817
}
818
819
/* Floating point <-> fixed point conversions
820
@@ -XXX,XX +XXX,XX @@ static void handle_fmov(DisasContext *s, int rd, int rn, int type, bool itof)
821
tmp = tcg_temp_new_i64();
822
tcg_gen_ext32u_i64(tmp, tcg_rn);
823
write_fp_dreg(s, rd, tmp);
824
- tcg_temp_free_i64(tmp);
825
break;
826
case 1:
827
/* 64 bit */
828
@@ -XXX,XX +XXX,XX @@ static void handle_fmov(DisasContext *s, int rd, int rn, int type, bool itof)
829
tmp = tcg_temp_new_i64();
830
tcg_gen_ext16u_i64(tmp, tcg_rn);
831
write_fp_dreg(s, rd, tmp);
832
- tcg_temp_free_i64(tmp);
833
break;
834
default:
835
g_assert_not_reached();
836
@@ -XXX,XX +XXX,XX @@ static void handle_fjcvtzs(DisasContext *s, int rd, int rn)
837
838
gen_helper_fjcvtzs(t, t, fpstatus);
839
840
- tcg_temp_free_ptr(fpstatus);
841
-
842
tcg_gen_ext32u_i64(cpu_reg(s, rd), t);
843
tcg_gen_extrh_i64_i32(cpu_ZF, t);
844
tcg_gen_movi_i32(cpu_CF, 0);
845
tcg_gen_movi_i32(cpu_NF, 0);
846
tcg_gen_movi_i32(cpu_VF, 0);
847
-
848
- tcg_temp_free_i64(t);
849
}
850
851
/* Floating point <-> integer conversions
852
@@ -XXX,XX +XXX,XX @@ static void do_ext64(DisasContext *s, TCGv_i64 tcg_left, TCGv_i64 tcg_right,
853
tcg_gen_shri_i64(tcg_right, tcg_right, pos);
854
tcg_gen_shli_i64(tcg_tmp, tcg_left, 64 - pos);
855
tcg_gen_or_i64(tcg_right, tcg_right, tcg_tmp);
856
-
857
- tcg_temp_free_i64(tcg_tmp);
858
}
859
860
/* EXT
861
@@ -XXX,XX +XXX,XX @@ static void disas_simd_ext(DisasContext *s, uint32_t insn)
862
tcg_hh = tcg_temp_new_i64();
863
read_vec_element(s, tcg_hh, elt->reg, elt->elt, MO_64);
864
do_ext64(s, tcg_hh, tcg_resh, pos);
865
- tcg_temp_free_i64(tcg_hh);
866
}
867
}
868
869
write_vec_element(s, tcg_resl, rd, 0, MO_64);
870
- tcg_temp_free_i64(tcg_resl);
871
if (is_q) {
872
write_vec_element(s, tcg_resh, rd, 1, MO_64);
873
}
874
- tcg_temp_free_i64(tcg_resh);
875
clear_vec_high(s, is_q, rd);
876
}
877
878
@@ -XXX,XX +XXX,XX @@ static void disas_simd_zip_trn(DisasContext *s, uint32_t insn)
879
}
880
}
881
882
- tcg_temp_free_i64(tcg_res);
883
-
884
write_vec_element(s, tcg_resl, rd, 0, MO_64);
885
- tcg_temp_free_i64(tcg_resl);
886
-
887
if (is_q) {
888
write_vec_element(s, tcg_resh, rd, 1, MO_64);
889
- tcg_temp_free_i64(tcg_resh);
890
}
891
clear_vec_high(s, is_q, rd);
892
}
893
@@ -XXX,XX +XXX,XX @@ static TCGv_i32 do_reduction_op(DisasContext *s, int fpopcode, int rn,
894
default:
895
g_assert_not_reached();
896
}
897
-
898
- tcg_temp_free_i32(tcg_hi);
899
- tcg_temp_free_i32(tcg_lo);
900
return tcg_res;
901
}
902
}
903
@@ -XXX,XX +XXX,XX @@ static void disas_simd_across_lanes(DisasContext *s, uint32_t insn)
904
TCGv_i32 tcg_res32 = do_reduction_op(s, fpopcode, rn, esize,
905
(is_q ? 128 : 64), vmap, fpst);
906
tcg_gen_extu_i32_i64(tcg_res, tcg_res32);
907
- tcg_temp_free_i32(tcg_res32);
908
- tcg_temp_free_ptr(fpst);
909
}
910
911
- tcg_temp_free_i64(tcg_elt);
912
-
913
/* Now truncate the result to the width required for the final output */
914
if (opcode == 0x03) {
915
/* SADDLV, UADDLV: result is 2*esize */
916
@@ -XXX,XX +XXX,XX @@ static void disas_simd_across_lanes(DisasContext *s, uint32_t insn)
917
}
918
919
write_fp_dreg(s, rd, tcg_res);
920
- tcg_temp_free_i64(tcg_res);
921
}
922
923
/* DUP (Element, Vector)
924
@@ -XXX,XX +XXX,XX @@ static void handle_simd_dupes(DisasContext *s, int rd, int rn,
925
tmp = tcg_temp_new_i64();
926
read_vec_element(s, tmp, rn, index, size);
927
write_fp_dreg(s, rd, tmp);
928
- tcg_temp_free_i64(tmp);
929
}
930
931
/* DUP (General)
932
@@ -XXX,XX +XXX,XX @@ static void handle_simd_inse(DisasContext *s, int rd, int rn,
933
read_vec_element(s, tmp, rn, src_index, size);
934
write_vec_element(s, tmp, rd, dst_index, size);
935
936
- tcg_temp_free_i64(tmp);
937
-
938
/* INS is considered a 128-bit write for SVE. */
939
clear_vec_high(s, true, rd);
940
}
941
@@ -XXX,XX +XXX,XX @@ static void disas_simd_scalar_pairwise(DisasContext *s, uint32_t insn)
942
}
943
944
write_fp_dreg(s, rd, tcg_res);
945
-
946
- tcg_temp_free_i64(tcg_op1);
947
- tcg_temp_free_i64(tcg_op2);
948
- tcg_temp_free_i64(tcg_res);
949
} else {
950
TCGv_i32 tcg_op1 = tcg_temp_new_i32();
951
TCGv_i32 tcg_op2 = tcg_temp_new_i32();
952
@@ -XXX,XX +XXX,XX @@ static void disas_simd_scalar_pairwise(DisasContext *s, uint32_t insn)
953
}
954
955
write_fp_sreg(s, rd, tcg_res);
956
-
957
- tcg_temp_free_i32(tcg_op1);
958
- tcg_temp_free_i32(tcg_op2);
959
- tcg_temp_free_i32(tcg_res);
960
- }
961
-
962
- if (fpst) {
963
- tcg_temp_free_ptr(fpst);
964
}
965
}
966
967
@@ -XXX,XX +XXX,XX @@ static void handle_shri_with_rndacc(TCGv_i64 tcg_res, TCGv_i64 tcg_src,
968
} else {
969
tcg_gen_mov_i64(tcg_res, tcg_src);
970
}
971
-
972
- if (extended_result) {
973
- tcg_temp_free_i64(tcg_src_hi);
974
- }
975
}
976
977
/* SSHR[RA]/USHR[RA] - Scalar shift right (optional rounding/accumulate) */
978
@@ -XXX,XX +XXX,XX @@ static void handle_scalar_simd_shri(DisasContext *s,
979
}
980
981
write_fp_dreg(s, rd, tcg_rd);
982
-
983
- tcg_temp_free_i64(tcg_rn);
984
- tcg_temp_free_i64(tcg_rd);
985
}
986
987
/* SHL/SLI - Scalar shift left */
988
@@ -XXX,XX +XXX,XX @@ static void handle_scalar_simd_shli(DisasContext *s, bool insert,
989
}
990
991
write_fp_dreg(s, rd, tcg_rd);
992
-
993
- tcg_temp_free_i64(tcg_rn);
994
- tcg_temp_free_i64(tcg_rd);
995
}
996
997
/* SQSHRN/SQSHRUN - Saturating (signed/unsigned) shift right with
998
@@ -XXX,XX +XXX,XX @@ static void handle_vec_simd_sqshrn(DisasContext *s, bool is_scalar, bool is_q,
999
} else {
1000
write_vec_element(s, tcg_final, rd, 1, MO_64);
1001
}
1002
-
1003
- tcg_temp_free_i64(tcg_rn);
1004
- tcg_temp_free_i64(tcg_rd);
1005
- tcg_temp_free_i32(tcg_rd_narrowed);
1006
- tcg_temp_free_i64(tcg_final);
1007
-
1008
clear_vec_high(s, is_q, rd);
1009
}
1010
1011
@@ -XXX,XX +XXX,XX @@ static void handle_simd_qshl(DisasContext *s, bool scalar, bool is_q,
1012
read_vec_element(s, tcg_op, rn, pass, MO_64);
1013
genfn(tcg_op, cpu_env, tcg_op, tcg_shift);
1014
write_vec_element(s, tcg_op, rd, pass, MO_64);
1015
-
1016
- tcg_temp_free_i64(tcg_op);
1017
}
1018
clear_vec_high(s, is_q, rd);
1019
} else {
1020
@@ -XXX,XX +XXX,XX @@ static void handle_simd_qshl(DisasContext *s, bool scalar, bool is_q,
1021
} else {
1022
write_vec_element_i32(s, tcg_op, rd, pass, MO_32);
1023
}
1024
-
1025
- tcg_temp_free_i32(tcg_op);
1026
}
1027
1028
if (!scalar) {
1029
@@ -XXX,XX +XXX,XX @@ static void handle_simd_intfp_conv(DisasContext *s, int rd, int rn,
1030
write_vec_element(s, tcg_double, rd, pass, MO_64);
1031
}
1032
}
1033
-
1034
- tcg_temp_free_i64(tcg_int64);
1035
- tcg_temp_free_i64(tcg_double);
1036
-
1037
} else {
1038
TCGv_i32 tcg_int32 = tcg_temp_new_i32();
1039
TCGv_i32 tcg_float = tcg_temp_new_i32();
1040
@@ -XXX,XX +XXX,XX @@ static void handle_simd_intfp_conv(DisasContext *s, int rd, int rn,
1041
write_vec_element_i32(s, tcg_float, rd, pass, size);
1042
}
1043
}
1044
-
1045
- tcg_temp_free_i32(tcg_int32);
1046
- tcg_temp_free_i32(tcg_float);
1047
}
1048
1049
- tcg_temp_free_ptr(tcg_fpst);
1050
-
1051
clear_vec_high(s, elements << size == 16, rd);
1052
}
1053
1054
@@ -XXX,XX +XXX,XX @@ static void handle_simd_shift_fpint_conv(DisasContext *s, bool is_scalar,
1055
gen_helper_vfp_tosqd(tcg_op, tcg_op, tcg_shift, tcg_fpstatus);
1056
}
1057
write_vec_element(s, tcg_op, rd, pass, MO_64);
1058
- tcg_temp_free_i64(tcg_op);
1059
}
1060
clear_vec_high(s, is_q, rd);
1061
} else {
1062
@@ -XXX,XX +XXX,XX @@ static void handle_simd_shift_fpint_conv(DisasContext *s, bool is_scalar,
1063
} else {
1064
write_vec_element_i32(s, tcg_op, rd, pass, size);
1065
}
1066
- tcg_temp_free_i32(tcg_op);
1067
}
1068
if (!is_scalar) {
1069
clear_vec_high(s, is_q, rd);
1070
@@ -XXX,XX +XXX,XX @@ static void handle_simd_shift_fpint_conv(DisasContext *s, bool is_scalar,
1071
}
1072
1073
gen_helper_set_rmode(tcg_rmode, tcg_rmode, tcg_fpstatus);
1074
- tcg_temp_free_ptr(tcg_fpstatus);
1075
- tcg_temp_free_i32(tcg_rmode);
1076
}
1077
1078
/* AdvSIMD scalar shift by immediate
1079
@@ -XXX,XX +XXX,XX @@ static void disas_simd_scalar_three_reg_diff(DisasContext *s, uint32_t insn)
1080
}
1081
1082
write_fp_dreg(s, rd, tcg_res);
1083
-
1084
- tcg_temp_free_i64(tcg_op1);
1085
- tcg_temp_free_i64(tcg_op2);
1086
- tcg_temp_free_i64(tcg_res);
1087
} else {
1088
TCGv_i32 tcg_op1 = read_fp_hreg(s, rn);
1089
TCGv_i32 tcg_op2 = read_fp_hreg(s, rm);
1090
@@ -XXX,XX +XXX,XX @@ static void disas_simd_scalar_three_reg_diff(DisasContext *s, uint32_t insn)
1091
read_vec_element(s, tcg_op3, rd, 0, MO_32);
1092
gen_helper_neon_addl_saturate_s32(tcg_res, cpu_env,
1093
tcg_res, tcg_op3);
1094
- tcg_temp_free_i64(tcg_op3);
1095
break;
1096
}
1097
default:
1098
@@ -XXX,XX +XXX,XX @@ static void disas_simd_scalar_three_reg_diff(DisasContext *s, uint32_t insn)
1099
1100
tcg_gen_ext32u_i64(tcg_res, tcg_res);
1101
write_fp_dreg(s, rd, tcg_res);
1102
-
1103
- tcg_temp_free_i32(tcg_op1);
1104
- tcg_temp_free_i32(tcg_op2);
1105
- tcg_temp_free_i64(tcg_res);
1106
}
1107
}
1108
1109
@@ -XXX,XX +XXX,XX @@ static void handle_3same_float(DisasContext *s, int size, int elements,
1110
}
1111
1112
write_vec_element(s, tcg_res, rd, pass, MO_64);
1113
-
1114
- tcg_temp_free_i64(tcg_res);
1115
- tcg_temp_free_i64(tcg_op1);
1116
- tcg_temp_free_i64(tcg_op2);
1117
} else {
1118
/* Single */
1119
TCGv_i32 tcg_op1 = tcg_temp_new_i32();
1120
@@ -XXX,XX +XXX,XX @@ static void handle_3same_float(DisasContext *s, int size, int elements,
1121
1122
tcg_gen_extu_i32_i64(tcg_tmp, tcg_res);
1123
write_vec_element(s, tcg_tmp, rd, pass, MO_64);
1124
- tcg_temp_free_i64(tcg_tmp);
1125
} else {
1126
write_vec_element_i32(s, tcg_res, rd, pass, MO_32);
1127
}
1128
-
1129
- tcg_temp_free_i32(tcg_res);
1130
- tcg_temp_free_i32(tcg_op1);
1131
- tcg_temp_free_i32(tcg_op2);
1132
}
1133
}
1134
1135
- tcg_temp_free_ptr(fpst);
1136
-
1137
clear_vec_high(s, elements * (size ? 8 : 4) > 8, rd);
1138
}
1139
1140
@@ -XXX,XX +XXX,XX @@ static void disas_simd_scalar_three_reg_same(DisasContext *s, uint32_t insn)
1141
TCGv_i64 tcg_rm = read_fp_dreg(s, rm);
1142
1143
handle_3same_64(s, opcode, u, tcg_rd, tcg_rn, tcg_rm);
1144
- tcg_temp_free_i64(tcg_rn);
1145
- tcg_temp_free_i64(tcg_rm);
1146
} else {
1147
/* Do a single operation on the lowest element in the vector.
1148
* We use the standard Neon helpers and rely on 0 OP 0 == 0 with
1149
@@ -XXX,XX +XXX,XX @@ static void disas_simd_scalar_three_reg_same(DisasContext *s, uint32_t insn)
1150
1151
genenvfn(tcg_rd32, cpu_env, tcg_rn, tcg_rm);
1152
tcg_gen_extu_i32_i64(tcg_rd, tcg_rd32);
1153
- tcg_temp_free_i32(tcg_rd32);
1154
- tcg_temp_free_i32(tcg_rn);
1155
- tcg_temp_free_i32(tcg_rm);
1156
}
1157
1158
write_fp_dreg(s, rd, tcg_rd);
1159
-
1160
- tcg_temp_free_i64(tcg_rd);
1161
}
1162
1163
/* AdvSIMD scalar three same FP16
1164
@@ -XXX,XX +XXX,XX @@ static void disas_simd_scalar_three_reg_same_fp16(DisasContext *s,
1165
}
1166
1167
write_fp_sreg(s, rd, tcg_res);
1168
-
1169
-
1170
- tcg_temp_free_i32(tcg_res);
1171
- tcg_temp_free_i32(tcg_op1);
1172
- tcg_temp_free_i32(tcg_op2);
1173
- tcg_temp_free_ptr(fpst);
1174
}
1175
1176
/* AdvSIMD scalar three same extra
1177
@@ -XXX,XX +XXX,XX @@ static void disas_simd_scalar_three_reg_same_extra(DisasContext *s,
1178
default:
1179
g_assert_not_reached();
1180
}
1181
- tcg_temp_free_i32(ele1);
1182
- tcg_temp_free_i32(ele2);
1183
1184
res = tcg_temp_new_i64();
1185
tcg_gen_extu_i32_i64(res, ele3);
1186
- tcg_temp_free_i32(ele3);
1187
-
1188
write_fp_dreg(s, rd, res);
1189
- tcg_temp_free_i64(res);
1190
}
1191
1192
static void handle_2misc_64(DisasContext *s, int opcode, bool u,
1193
@@ -XXX,XX +XXX,XX @@ static void handle_2misc_fcmp_zero(DisasContext *s, int opcode,
1194
}
1195
write_vec_element(s, tcg_res, rd, pass, MO_64);
1196
}
1197
- tcg_temp_free_i64(tcg_res);
1198
- tcg_temp_free_i64(tcg_op);
1199
1200
clear_vec_high(s, !is_scalar, rd);
1201
} else {
1202
@@ -XXX,XX +XXX,XX @@ static void handle_2misc_fcmp_zero(DisasContext *s, int opcode,
1203
write_vec_element_i32(s, tcg_res, rd, pass, size);
1204
}
1205
}
1206
- tcg_temp_free_i32(tcg_res);
1207
- tcg_temp_free_i32(tcg_op);
1208
+
1209
if (!is_scalar) {
1210
clear_vec_high(s, is_q, rd);
1211
}
1212
}
1213
-
1214
- tcg_temp_free_ptr(fpst);
1215
}
1216
1217
static void handle_2misc_reciprocal(DisasContext *s, int opcode,
1218
@@ -XXX,XX +XXX,XX @@ static void handle_2misc_reciprocal(DisasContext *s, int opcode,
1219
}
1220
write_vec_element(s, tcg_res, rd, pass, MO_64);
1221
}
1222
- tcg_temp_free_i64(tcg_res);
1223
- tcg_temp_free_i64(tcg_op);
1224
clear_vec_high(s, !is_scalar, rd);
1225
} else {
1226
TCGv_i32 tcg_op = tcg_temp_new_i32();
1227
@@ -XXX,XX +XXX,XX @@ static void handle_2misc_reciprocal(DisasContext *s, int opcode,
1228
write_vec_element_i32(s, tcg_res, rd, pass, MO_32);
1229
}
1230
}
1231
- tcg_temp_free_i32(tcg_res);
1232
- tcg_temp_free_i32(tcg_op);
1233
if (!is_scalar) {
1234
clear_vec_high(s, is_q, rd);
1235
}
1236
}
1237
- tcg_temp_free_ptr(fpst);
1238
}
1239
1240
static void handle_2misc_narrow(DisasContext *s, bool scalar,
1241
@@ -XXX,XX +XXX,XX @@ static void handle_2misc_narrow(DisasContext *s, bool scalar,
1242
gen_helper_vfp_fcvt_f32_to_f16(tcg_lo, tcg_lo, fpst, ahp);
1243
gen_helper_vfp_fcvt_f32_to_f16(tcg_hi, tcg_hi, fpst, ahp);
1244
tcg_gen_deposit_i32(tcg_res[pass], tcg_lo, tcg_hi, 16, 16);
1245
- tcg_temp_free_i32(tcg_lo);
1246
- tcg_temp_free_i32(tcg_hi);
1247
- tcg_temp_free_ptr(fpst);
1248
- tcg_temp_free_i32(ahp);
1249
}
1250
break;
1251
case 0x36: /* BFCVTN, BFCVTN2 */
1252
{
1253
TCGv_ptr fpst = fpstatus_ptr(FPST_FPCR);
1254
gen_helper_bfcvt_pair(tcg_res[pass], tcg_op, fpst);
1255
- tcg_temp_free_ptr(fpst);
1256
}
1257
break;
1258
case 0x56: /* FCVTXN, FCVTXN2 */
1259
@@ -XXX,XX +XXX,XX @@ static void handle_2misc_narrow(DisasContext *s, bool scalar,
1260
} else if (genenvfn) {
1261
genenvfn(tcg_res[pass], cpu_env, tcg_op);
1262
}
1263
-
1264
- tcg_temp_free_i64(tcg_op);
1265
}
1266
1267
for (pass = 0; pass < 2; pass++) {
1268
write_vec_element_i32(s, tcg_res[pass], rd, destelt + pass, MO_32);
1269
- tcg_temp_free_i32(tcg_res[pass]);
1270
}
1271
clear_vec_high(s, is_q, rd);
1272
}
1273
@@ -XXX,XX +XXX,XX @@ static void handle_2misc_satacc(DisasContext *s, bool is_scalar, bool is_u,
1274
}
1275
write_vec_element(s, tcg_rd, rd, pass, MO_64);
1276
}
1277
- tcg_temp_free_i64(tcg_rd);
1278
- tcg_temp_free_i64(tcg_rn);
1279
clear_vec_high(s, !is_scalar, rd);
1280
} else {
1281
TCGv_i32 tcg_rn = tcg_temp_new_i32();
1282
@@ -XXX,XX +XXX,XX @@ static void handle_2misc_satacc(DisasContext *s, bool is_scalar, bool is_u,
1283
}
1284
write_vec_element_i32(s, tcg_rd, rd, pass, MO_32);
1285
}
1286
- tcg_temp_free_i32(tcg_rd);
1287
- tcg_temp_free_i32(tcg_rn);
1288
clear_vec_high(s, is_q, rd);
1289
}
1290
}
1291
@@ -XXX,XX +XXX,XX @@ static void disas_simd_scalar_two_reg_misc(DisasContext *s, uint32_t insn)
1292
1293
handle_2misc_64(s, opcode, u, tcg_rd, tcg_rn, tcg_rmode, tcg_fpstatus);
1294
write_fp_dreg(s, rd, tcg_rd);
1295
- tcg_temp_free_i64(tcg_rd);
1296
- tcg_temp_free_i64(tcg_rn);
1297
} else {
1298
TCGv_i32 tcg_rn = tcg_temp_new_i32();
1299
TCGv_i32 tcg_rd = tcg_temp_new_i32();
1300
@@ -XXX,XX +XXX,XX @@ static void disas_simd_scalar_two_reg_misc(DisasContext *s, uint32_t insn)
1301
}
1302
1303
write_fp_sreg(s, rd, tcg_rd);
1304
- tcg_temp_free_i32(tcg_rd);
1305
- tcg_temp_free_i32(tcg_rn);
1306
}
1307
1308
if (is_fcvt) {
1309
gen_helper_set_rmode(tcg_rmode, tcg_rmode, tcg_fpstatus);
1310
- tcg_temp_free_i32(tcg_rmode);
1311
- tcg_temp_free_ptr(tcg_fpstatus);
1312
}
1313
}
1314
1315
@@ -XXX,XX +XXX,XX @@ static void handle_vec_simd_shrn(DisasContext *s, bool is_q,
1316
} else {
1317
write_vec_element(s, tcg_final, rd, 1, MO_64);
1318
}
1319
- tcg_temp_free_i64(tcg_rn);
1320
- tcg_temp_free_i64(tcg_rd);
1321
- tcg_temp_free_i64(tcg_final);
1322
1323
clear_vec_high(s, is_q, rd);
1324
}
1325
@@ -XXX,XX +XXX,XX @@ static void handle_3rd_widening(DisasContext *s, int is_q, int is_u, int size,
1326
tcg_gen_movcond_i64(is_u ? TCG_COND_GEU : TCG_COND_GE,
1327
tcg_passres,
1328
tcg_op1, tcg_op2, tcg_tmp1, tcg_tmp2);
1329
- tcg_temp_free_i64(tcg_tmp1);
1330
- tcg_temp_free_i64(tcg_tmp2);
1331
break;
1332
}
1333
case 8: /* SMLAL, SMLAL2, UMLAL, UMLAL2 */
1334
@@ -XXX,XX +XXX,XX @@ static void handle_3rd_widening(DisasContext *s, int is_q, int is_u, int size,
1335
} else if (accop < 0) {
1336
tcg_gen_sub_i64(tcg_res[pass], tcg_res[pass], tcg_passres);
1337
}
1338
-
1339
- if (accop != 0) {
1340
- tcg_temp_free_i64(tcg_passres);
1341
- }
1342
-
1343
- tcg_temp_free_i64(tcg_op1);
1344
- tcg_temp_free_i64(tcg_op2);
1345
}
1346
} else {
1347
/* size 0 or 1, generally helper functions */
1348
@@ -XXX,XX +XXX,XX @@ static void handle_3rd_widening(DisasContext *s, int is_q, int is_u, int size,
1349
widenfn(tcg_passres, tcg_op1);
1350
gen_neon_addl(size, (opcode == 2), tcg_passres,
1351
tcg_passres, tcg_op2_64);
1352
- tcg_temp_free_i64(tcg_op2_64);
1353
break;
1354
}
1355
case 5: /* SABAL, SABAL2, UABAL, UABAL2 */
1356
@@ -XXX,XX +XXX,XX @@ static void handle_3rd_widening(DisasContext *s, int is_q, int is_u, int size,
1357
default:
1358
g_assert_not_reached();
1359
}
1360
- tcg_temp_free_i32(tcg_op1);
1361
- tcg_temp_free_i32(tcg_op2);
1362
1363
if (accop != 0) {
1364
if (opcode == 9 || opcode == 11) {
1365
@@ -XXX,XX +XXX,XX @@ static void handle_3rd_widening(DisasContext *s, int is_q, int is_u, int size,
1366
gen_neon_addl(size, (accop < 0), tcg_res[pass],
1367
tcg_res[pass], tcg_passres);
1368
}
1369
- tcg_temp_free_i64(tcg_passres);
1370
}
1371
}
1372
}
1373
1374
write_vec_element(s, tcg_res[0], rd, 0, MO_64);
1375
write_vec_element(s, tcg_res[1], rd, 1, MO_64);
1376
- tcg_temp_free_i64(tcg_res[0]);
1377
- tcg_temp_free_i64(tcg_res[1]);
1378
}
1379
1380
static void handle_3rd_wide(DisasContext *s, int is_q, int is_u, int size,
1381
@@ -XXX,XX +XXX,XX @@ static void handle_3rd_wide(DisasContext *s, int is_q, int is_u, int size,
1382
read_vec_element(s, tcg_op1, rn, pass, MO_64);
1383
read_vec_element_i32(s, tcg_op2, rm, part + pass, MO_32);
1384
widenfn(tcg_op2_wide, tcg_op2);
1385
- tcg_temp_free_i32(tcg_op2);
1386
tcg_res[pass] = tcg_temp_new_i64();
1387
gen_neon_addl(size, (opcode == 3),
1388
tcg_res[pass], tcg_op1, tcg_op2_wide);
1389
- tcg_temp_free_i64(tcg_op1);
1390
- tcg_temp_free_i64(tcg_op2_wide);
1391
}
1392
1393
for (pass = 0; pass < 2; pass++) {
1394
write_vec_element(s, tcg_res[pass], rd, pass, MO_64);
1395
- tcg_temp_free_i64(tcg_res[pass]);
1396
}
1397
}
1398
1399
@@ -XXX,XX +XXX,XX @@ static void handle_3rd_narrowing(DisasContext *s, int is_q, int is_u, int size,
1400
1401
gen_neon_addl(size, (opcode == 6), tcg_wideres, tcg_op1, tcg_op2);
1402
1403
- tcg_temp_free_i64(tcg_op1);
1404
- tcg_temp_free_i64(tcg_op2);
1405
-
1406
tcg_res[pass] = tcg_temp_new_i32();
1407
gennarrow(tcg_res[pass], tcg_wideres);
1408
- tcg_temp_free_i64(tcg_wideres);
1409
}
1410
1411
for (pass = 0; pass < 2; pass++) {
1412
write_vec_element_i32(s, tcg_res[pass], rd, pass + part, MO_32);
1413
- tcg_temp_free_i32(tcg_res[pass]);
1414
}
1415
clear_vec_high(s, is_q, rd);
1416
}
1417
@@ -XXX,XX +XXX,XX @@ static void handle_simd_3same_pair(DisasContext *s, int is_q, int u, int opcode,
1418
default:
1419
g_assert_not_reached();
1420
}
1421
-
1422
- tcg_temp_free_i64(tcg_op1);
1423
- tcg_temp_free_i64(tcg_op2);
1424
}
1425
1426
for (pass = 0; pass < 2; pass++) {
1427
write_vec_element(s, tcg_res[pass], rd, pass, MO_64);
1428
- tcg_temp_free_i64(tcg_res[pass]);
1429
}
1430
} else {
1431
int maxpass = is_q ? 4 : 2;
1432
@@ -XXX,XX +XXX,XX @@ static void handle_simd_3same_pair(DisasContext *s, int is_q, int u, int opcode,
1433
if (genfn) {
1434
genfn(tcg_res[pass], tcg_op1, tcg_op2);
1435
}
1436
-
1437
- tcg_temp_free_i32(tcg_op1);
1438
- tcg_temp_free_i32(tcg_op2);
1439
}
1440
1441
for (pass = 0; pass < maxpass; pass++) {
1442
write_vec_element_i32(s, tcg_res[pass], rd, pass, MO_32);
1443
- tcg_temp_free_i32(tcg_res[pass]);
1444
}
1445
clear_vec_high(s, is_q, rd);
1446
}
1447
-
1448
- if (fpst) {
1449
- tcg_temp_free_ptr(fpst);
1450
- }
1451
}
1452
1453
/* Floating point op subgroup of C3.6.16. */
1454
@@ -XXX,XX +XXX,XX @@ static void disas_simd_3same_int(DisasContext *s, uint32_t insn)
1455
handle_3same_64(s, opcode, u, tcg_res, tcg_op1, tcg_op2);
1456
1457
write_vec_element(s, tcg_res, rd, pass, MO_64);
1458
-
1459
- tcg_temp_free_i64(tcg_res);
1460
- tcg_temp_free_i64(tcg_op1);
1461
- tcg_temp_free_i64(tcg_op2);
1462
}
1463
} else {
1464
for (pass = 0; pass < (is_q ? 4 : 2); pass++) {
1465
@@ -XXX,XX +XXX,XX @@ static void disas_simd_3same_int(DisasContext *s, uint32_t insn)
1466
}
1467
1468
write_vec_element_i32(s, tcg_res, rd, pass, MO_32);
1469
-
1470
- tcg_temp_free_i32(tcg_res);
1471
- tcg_temp_free_i32(tcg_op1);
1472
- tcg_temp_free_i32(tcg_op2);
1473
}
1474
}
1475
clear_vec_high(s, is_q, rd);
1476
@@ -XXX,XX +XXX,XX @@ static void disas_simd_three_reg_same_fp16(DisasContext *s, uint32_t insn)
1477
1478
for (pass = 0; pass < maxpass; pass++) {
1479
write_vec_element_i32(s, tcg_res[pass], rd, pass, MO_16);
1480
- tcg_temp_free_i32(tcg_res[pass]);
1481
}
1482
-
1483
- tcg_temp_free_i32(tcg_op1);
1484
- tcg_temp_free_i32(tcg_op2);
1485
-
1486
} else {
1487
for (pass = 0; pass < elements; pass++) {
1488
TCGv_i32 tcg_op1 = tcg_temp_new_i32();
1489
@@ -XXX,XX +XXX,XX @@ static void disas_simd_three_reg_same_fp16(DisasContext *s, uint32_t insn)
1490
}
1491
1492
write_vec_element_i32(s, tcg_res, rd, pass, MO_16);
1493
- tcg_temp_free_i32(tcg_res);
1494
- tcg_temp_free_i32(tcg_op1);
1495
- tcg_temp_free_i32(tcg_op2);
1496
}
1497
}
1498
1499
- tcg_temp_free_ptr(fpst);
1500
-
1501
clear_vec_high(s, is_q, rd);
1502
}
1503
1504
@@ -XXX,XX +XXX,XX @@ static void handle_2misc_widening(DisasContext *s, int opcode, bool is_q,
1505
1506
read_vec_element_i32(s, tcg_op, rn, srcelt + pass, MO_32);
1507
gen_helper_vfp_fcvtds(tcg_res[pass], tcg_op, cpu_env);
1508
- tcg_temp_free_i32(tcg_op);
1509
}
1510
for (pass = 0; pass < 2; pass++) {
1511
write_vec_element(s, tcg_res[pass], rd, pass, MO_64);
1512
- tcg_temp_free_i64(tcg_res[pass]);
1513
}
1514
} else {
1515
/* 16 -> 32 bit fp conversion */
1516
@@ -XXX,XX +XXX,XX @@ static void handle_2misc_widening(DisasContext *s, int opcode, bool is_q,
1517
}
1518
for (pass = 0; pass < 4; pass++) {
1519
write_vec_element_i32(s, tcg_res[pass], rd, pass, MO_32);
1520
- tcg_temp_free_i32(tcg_res[pass]);
1521
}
1522
-
1523
- tcg_temp_free_ptr(fpst);
1524
- tcg_temp_free_i32(ahp);
1525
}
1526
}
1527
1528
@@ -XXX,XX +XXX,XX @@ static void handle_rev(DisasContext *s, int opcode, bool u,
1529
g_assert_not_reached();
1530
}
1531
write_vec_element(s, tcg_tmp, rd, i, grp_size);
1532
- tcg_temp_free_i64(tcg_tmp);
1533
}
1534
clear_vec_high(s, is_q, rd);
1535
} else {
1536
@@ -XXX,XX +XXX,XX @@ static void handle_rev(DisasContext *s, int opcode, bool u,
1537
}
1538
write_vec_element(s, tcg_rd, rd, 0, MO_64);
1539
write_vec_element(s, tcg_rd_hi, rd, 1, MO_64);
1540
-
1541
- tcg_temp_free_i64(tcg_rd_hi);
1542
- tcg_temp_free_i64(tcg_rd);
1543
- tcg_temp_free_i64(tcg_rn);
1544
}
1545
}
1546
1547
@@ -XXX,XX +XXX,XX @@ static void handle_2misc_pairwise(DisasContext *s, int opcode, bool u,
1548
read_vec_element(s, tcg_op1, rd, pass, MO_64);
1549
tcg_gen_add_i64(tcg_res[pass], tcg_res[pass], tcg_op1);
1550
}
1551
-
1552
- tcg_temp_free_i64(tcg_op1);
1553
- tcg_temp_free_i64(tcg_op2);
1554
}
1555
} else {
1556
for (pass = 0; pass < maxpass; pass++) {
1557
@@ -XXX,XX +XXX,XX @@ static void handle_2misc_pairwise(DisasContext *s, int opcode, bool u,
1558
tcg_res[pass], tcg_op);
1559
}
1560
}
1561
- tcg_temp_free_i64(tcg_op);
1562
}
1563
}
1564
if (!is_q) {
1565
@@ -XXX,XX +XXX,XX @@ static void handle_2misc_pairwise(DisasContext *s, int opcode, bool u,
1566
}
1567
for (pass = 0; pass < 2; pass++) {
1568
write_vec_element(s, tcg_res[pass], rd, pass, MO_64);
1569
- tcg_temp_free_i64(tcg_res[pass]);
1570
}
1571
}
1572
1573
@@ -XXX,XX +XXX,XX @@ static void handle_shll(DisasContext *s, bool is_q, int size, int rn, int rd)
1574
tcg_res[pass] = tcg_temp_new_i64();
1575
widenfn(tcg_res[pass], tcg_op);
1576
tcg_gen_shli_i64(tcg_res[pass], tcg_res[pass], 8 << size);
1577
-
1578
- tcg_temp_free_i32(tcg_op);
1579
}
1580
1581
for (pass = 0; pass < 2; pass++) {
1582
write_vec_element(s, tcg_res[pass], rd, pass, MO_64);
1583
- tcg_temp_free_i64(tcg_res[pass]);
1584
}
1585
}
1586
1587
@@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc(DisasContext *s, uint32_t insn)
1588
tcg_rmode, tcg_fpstatus);
1589
1590
write_vec_element(s, tcg_res, rd, pass, MO_64);
1591
-
1592
- tcg_temp_free_i64(tcg_res);
1593
- tcg_temp_free_i64(tcg_op);
1594
}
1595
} else {
1596
int pass;
1597
@@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc(DisasContext *s, uint32_t insn)
1598
}
1599
1600
write_vec_element_i32(s, tcg_res, rd, pass, MO_32);
1601
-
1602
- tcg_temp_free_i32(tcg_res);
1603
- tcg_temp_free_i32(tcg_op);
1604
}
1605
}
1606
clear_vec_high(s, is_q, rd);
1607
1608
if (need_rmode) {
1609
gen_helper_set_rmode(tcg_rmode, tcg_rmode, tcg_fpstatus);
1610
- tcg_temp_free_i32(tcg_rmode);
1611
- }
1612
- if (need_fpstatus) {
1613
- tcg_temp_free_ptr(tcg_fpstatus);
1614
}
1615
}
1616
1617
@@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc_fp16(DisasContext *s, uint32_t insn)
1618
/* limit any sign extension going on */
1619
tcg_gen_andi_i32(tcg_res, tcg_res, 0xffff);
1620
write_fp_sreg(s, rd, tcg_res);
1621
-
1622
- tcg_temp_free_i32(tcg_res);
1623
- tcg_temp_free_i32(tcg_op);
1624
} else {
1625
for (pass = 0; pass < (is_q ? 8 : 4); pass++) {
1626
TCGv_i32 tcg_op = tcg_temp_new_i32();
1627
@@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc_fp16(DisasContext *s, uint32_t insn)
1628
}
1629
1630
write_vec_element_i32(s, tcg_res, rd, pass, MO_16);
1631
-
1632
- tcg_temp_free_i32(tcg_res);
1633
- tcg_temp_free_i32(tcg_op);
1634
}
1635
1636
clear_vec_high(s, is_q, rd);
1637
@@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc_fp16(DisasContext *s, uint32_t insn)
1638
1639
if (tcg_rmode) {
1640
gen_helper_set_rmode(tcg_rmode, tcg_rmode, tcg_fpstatus);
1641
- tcg_temp_free_i32(tcg_rmode);
1642
- }
1643
-
1644
- if (tcg_fpstatus) {
1645
- tcg_temp_free_ptr(tcg_fpstatus);
1646
}
1647
}
1648
1649
@@ -XXX,XX +XXX,XX @@ static void disas_simd_indexed(DisasContext *s, uint32_t insn)
1650
size == MO_64
1651
? gen_helper_gvec_fcmlas_idx
1652
: gen_helper_gvec_fcmlah_idx);
1653
- tcg_temp_free_ptr(fpst);
1654
}
1655
return;
1656
1657
@@ -XXX,XX +XXX,XX @@ static void disas_simd_indexed(DisasContext *s, uint32_t insn)
1658
}
1659
1660
write_vec_element(s, tcg_res, rd, pass, MO_64);
1661
- tcg_temp_free_i64(tcg_op);
1662
- tcg_temp_free_i64(tcg_res);
1663
}
1664
1665
- tcg_temp_free_i64(tcg_idx);
1666
clear_vec_high(s, !is_scalar, rd);
1667
} else if (!is_long) {
1668
/* 32 bit floating point, or 16 or 32 bit integer.
1669
@@ -XXX,XX +XXX,XX @@ static void disas_simd_indexed(DisasContext *s, uint32_t insn)
1670
} else {
1671
write_vec_element_i32(s, tcg_res, rd, pass, MO_32);
1672
}
1673
-
1674
- tcg_temp_free_i32(tcg_op);
1675
- tcg_temp_free_i32(tcg_res);
1676
}
1677
1678
- tcg_temp_free_i32(tcg_idx);
1679
clear_vec_high(s, is_q, rd);
1680
} else {
1681
/* long ops: 16x16->32 or 32x32->64 */
1682
@@ -XXX,XX +XXX,XX @@ static void disas_simd_indexed(DisasContext *s, uint32_t insn)
1683
}
1684
1685
tcg_gen_mul_i64(tcg_passres, tcg_op, tcg_idx);
1686
- tcg_temp_free_i64(tcg_op);
1687
1688
if (satop) {
1689
/* saturating, doubling */
1690
@@ -XXX,XX +XXX,XX @@ static void disas_simd_indexed(DisasContext *s, uint32_t insn)
1691
default:
1692
g_assert_not_reached();
1693
}
1694
- tcg_temp_free_i64(tcg_passres);
1695
}
1696
- tcg_temp_free_i64(tcg_idx);
1697
1698
clear_vec_high(s, !is_scalar, rd);
1699
} else {
1700
@@ -XXX,XX +XXX,XX @@ static void disas_simd_indexed(DisasContext *s, uint32_t insn)
1701
gen_helper_neon_addl_saturate_s32(tcg_passres, cpu_env,
1702
tcg_passres, tcg_passres);
1703
}
1704
- tcg_temp_free_i32(tcg_op);
1705
1706
if (opcode == 0xa || opcode == 0xb) {
1707
continue;
1708
@@ -XXX,XX +XXX,XX @@ static void disas_simd_indexed(DisasContext *s, uint32_t insn)
1709
default:
1710
g_assert_not_reached();
1711
}
1712
- tcg_temp_free_i64(tcg_passres);
1713
}
1714
- tcg_temp_free_i32(tcg_idx);
1715
1716
if (is_scalar) {
1717
tcg_gen_ext32u_i64(tcg_res[0], tcg_res[0]);
1718
@@ -XXX,XX +XXX,XX @@ static void disas_simd_indexed(DisasContext *s, uint32_t insn)
1719
1720
for (pass = 0; pass < 2; pass++) {
1721
write_vec_element(s, tcg_res[pass], rd, pass, MO_64);
1722
- tcg_temp_free_i64(tcg_res[pass]);
1723
}
1724
}
1725
-
1726
- if (fpst) {
1727
- tcg_temp_free_ptr(fpst);
1728
- }
1729
}
1730
1731
/* Crypto AES
1732
@@ -XXX,XX +XXX,XX @@ static void disas_crypto_four_reg(DisasContext *s, uint32_t insn)
1733
}
1734
write_vec_element(s, tcg_res[0], rd, 0, MO_64);
1735
write_vec_element(s, tcg_res[1], rd, 1, MO_64);
1736
-
1737
- tcg_temp_free_i64(tcg_op1);
1738
- tcg_temp_free_i64(tcg_op2);
1739
- tcg_temp_free_i64(tcg_op3);
1740
- tcg_temp_free_i64(tcg_res[0]);
1741
- tcg_temp_free_i64(tcg_res[1]);
1742
} else {
1743
TCGv_i32 tcg_op1, tcg_op2, tcg_op3, tcg_res, tcg_zero;
1744
1745
@@ -XXX,XX +XXX,XX @@ static void disas_crypto_four_reg(DisasContext *s, uint32_t insn)
1746
write_vec_element_i32(s, tcg_zero, rd, 1, MO_32);
1747
write_vec_element_i32(s, tcg_zero, rd, 2, MO_32);
1748
write_vec_element_i32(s, tcg_res, rd, 3, MO_32);
1749
-
1750
- tcg_temp_free_i32(tcg_op1);
1751
- tcg_temp_free_i32(tcg_op2);
1752
- tcg_temp_free_i32(tcg_op3);
1753
- tcg_temp_free_i32(tcg_res);
1754
}
1755
}
1756
1757
--
189
--
1758
2.34.1
190
2.43.0
diff view generated by jsdifflib
1
While we do not include these in tcg_target_reg_alloc_order,
1
The guest address will now always fit in one register.
2
and therefore they ought never be allocated, it seems safer
3
to mark them reserved as well.
4
2
5
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
3
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
6
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
7
---
5
---
8
tcg/i386/tcg-target.c.inc | 13 +++++++++++++
6
tcg/i386/tcg-target.c.inc | 56 ++++++++++++++-------------------------
9
1 file changed, 13 insertions(+)
7
1 file changed, 20 insertions(+), 36 deletions(-)
10
8
11
diff --git a/tcg/i386/tcg-target.c.inc b/tcg/i386/tcg-target.c.inc
9
diff --git a/tcg/i386/tcg-target.c.inc b/tcg/i386/tcg-target.c.inc
12
index XXXXXXX..XXXXXXX 100644
10
index XXXXXXX..XXXXXXX 100644
13
--- a/tcg/i386/tcg-target.c.inc
11
--- a/tcg/i386/tcg-target.c.inc
14
+++ b/tcg/i386/tcg-target.c.inc
12
+++ b/tcg/i386/tcg-target.c.inc
15
@@ -XXX,XX +XXX,XX @@ static void tcg_target_init(TCGContext *s)
13
@@ -XXX,XX +XXX,XX @@ static inline int setup_guest_base_seg(void)
16
14
* is required and fill in @h with the host address for the fast path.
17
s->reserved_regs = 0;
15
*/
18
tcg_regset_set_reg(s->reserved_regs, TCG_REG_CALL_STACK);
16
static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
19
+#ifdef _WIN64
17
- TCGReg addrlo, TCGReg addrhi,
20
+ /* These are call saved, and we don't save them, so don't use them. */
18
- MemOpIdx oi, bool is_ld)
21
+ tcg_regset_set_reg(s->reserved_regs, TCG_REG_XMM6);
19
+ TCGReg addr, MemOpIdx oi, bool is_ld)
22
+ tcg_regset_set_reg(s->reserved_regs, TCG_REG_XMM7);
20
{
23
+ tcg_regset_set_reg(s->reserved_regs, TCG_REG_XMM8);
21
TCGLabelQemuLdst *ldst = NULL;
24
+ tcg_regset_set_reg(s->reserved_regs, TCG_REG_XMM9);
22
MemOp opc = get_memop(oi);
25
+ tcg_regset_set_reg(s->reserved_regs, TCG_REG_XMM10);
23
@@ -XXX,XX +XXX,XX @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
26
+ tcg_regset_set_reg(s->reserved_regs, TCG_REG_XMM11);
24
} else {
27
+ tcg_regset_set_reg(s->reserved_regs, TCG_REG_XMM12);
25
*h = x86_guest_base;
28
+ tcg_regset_set_reg(s->reserved_regs, TCG_REG_XMM13);
26
}
29
+ tcg_regset_set_reg(s->reserved_regs, TCG_REG_XMM14);
27
- h->base = addrlo;
30
+ tcg_regset_set_reg(s->reserved_regs, TCG_REG_XMM15);
28
+ h->base = addr;
31
+#endif
29
h->aa = atom_and_align_for_opc(s, opc, MO_ATOM_IFALIGN, s_bits == MO_128);
30
a_mask = (1 << h->aa.align) - 1;
31
32
@@ -XXX,XX +XXX,XX @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
33
ldst = new_ldst_label(s);
34
ldst->is_ld = is_ld;
35
ldst->oi = oi;
36
- ldst->addrlo_reg = addrlo;
37
- ldst->addrhi_reg = addrhi;
38
+ ldst->addrlo_reg = addr;
39
40
if (TCG_TARGET_REG_BITS == 64) {
41
ttype = s->addr_type;
42
@@ -XXX,XX +XXX,XX @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
43
}
44
}
45
46
- tcg_out_mov(s, tlbtype, TCG_REG_L0, addrlo);
47
+ tcg_out_mov(s, tlbtype, TCG_REG_L0, addr);
48
tcg_out_shifti(s, SHIFT_SHR + tlbrexw, TCG_REG_L0,
49
s->page_bits - CPU_TLB_ENTRY_BITS);
50
51
@@ -XXX,XX +XXX,XX @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
52
* check that we don't cross pages for the complete access.
53
*/
54
if (a_mask >= s_mask) {
55
- tcg_out_mov(s, ttype, TCG_REG_L1, addrlo);
56
+ tcg_out_mov(s, ttype, TCG_REG_L1, addr);
57
} else {
58
tcg_out_modrm_offset(s, OPC_LEA + trexw, TCG_REG_L1,
59
- addrlo, s_mask - a_mask);
60
+ addr, s_mask - a_mask);
61
}
62
tlb_mask = s->page_mask | a_mask;
63
tgen_arithi(s, ARITH_AND + trexw, TCG_REG_L1, tlb_mask, 0);
64
@@ -XXX,XX +XXX,XX @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
65
ldst->label_ptr[0] = s->code_ptr;
66
s->code_ptr += 4;
67
68
- if (TCG_TARGET_REG_BITS == 32 && s->addr_type == TCG_TYPE_I64) {
69
- /* cmp 4(TCG_REG_L0), addrhi */
70
- tcg_out_modrm_offset(s, OPC_CMP_GvEv, addrhi,
71
- TCG_REG_L0, cmp_ofs + 4);
72
-
73
- /* jne slow_path */
74
- tcg_out_opc(s, OPC_JCC_long + JCC_JNE, 0, 0, 0);
75
- ldst->label_ptr[1] = s->code_ptr;
76
- s->code_ptr += 4;
77
- }
78
-
79
/* TLB Hit. */
80
tcg_out_ld(s, TCG_TYPE_PTR, TCG_REG_L0, TCG_REG_L0,
81
offsetof(CPUTLBEntry, addend));
82
@@ -XXX,XX +XXX,XX @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
83
ldst = new_ldst_label(s);
84
ldst->is_ld = is_ld;
85
ldst->oi = oi;
86
- ldst->addrlo_reg = addrlo;
87
- ldst->addrhi_reg = addrhi;
88
+ ldst->addrlo_reg = addr;
89
90
/* jne slow_path */
91
- jcc = tcg_out_cmp(s, TCG_COND_TSTNE, addrlo, a_mask, true, false);
92
+ jcc = tcg_out_cmp(s, TCG_COND_TSTNE, addr, a_mask, true, false);
93
tcg_out_opc(s, OPC_JCC_long + jcc, 0, 0, 0);
94
ldst->label_ptr[0] = s->code_ptr;
95
s->code_ptr += 4;
96
@@ -XXX,XX +XXX,XX @@ static void tcg_out_qemu_ld_direct(TCGContext *s, TCGReg datalo, TCGReg datahi,
32
}
97
}
33
98
34
typedef struct {
99
static void tcg_out_qemu_ld(TCGContext *s, TCGReg datalo, TCGReg datahi,
100
- TCGReg addrlo, TCGReg addrhi,
101
- MemOpIdx oi, TCGType data_type)
102
+ TCGReg addr, MemOpIdx oi, TCGType data_type)
103
{
104
TCGLabelQemuLdst *ldst;
105
HostAddress h;
106
107
- ldst = prepare_host_addr(s, &h, addrlo, addrhi, oi, true);
108
+ ldst = prepare_host_addr(s, &h, addr, oi, true);
109
tcg_out_qemu_ld_direct(s, datalo, datahi, h, data_type, get_memop(oi));
110
111
if (ldst) {
112
@@ -XXX,XX +XXX,XX @@ static void tcg_out_qemu_st_direct(TCGContext *s, TCGReg datalo, TCGReg datahi,
113
}
114
115
static void tcg_out_qemu_st(TCGContext *s, TCGReg datalo, TCGReg datahi,
116
- TCGReg addrlo, TCGReg addrhi,
117
- MemOpIdx oi, TCGType data_type)
118
+ TCGReg addr, MemOpIdx oi, TCGType data_type)
119
{
120
TCGLabelQemuLdst *ldst;
121
HostAddress h;
122
123
- ldst = prepare_host_addr(s, &h, addrlo, addrhi, oi, false);
124
+ ldst = prepare_host_addr(s, &h, addr, oi, false);
125
tcg_out_qemu_st_direct(s, datalo, datahi, h, get_memop(oi));
126
127
if (ldst) {
128
@@ -XXX,XX +XXX,XX @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, TCGType type,
129
break;
130
131
case INDEX_op_qemu_ld_i32:
132
- tcg_out_qemu_ld(s, a0, -1, a1, -1, a2, TCG_TYPE_I32);
133
+ tcg_out_qemu_ld(s, a0, -1, a1, a2, TCG_TYPE_I32);
134
break;
135
case INDEX_op_qemu_ld_i64:
136
if (TCG_TARGET_REG_BITS == 64) {
137
- tcg_out_qemu_ld(s, a0, -1, a1, -1, a2, TCG_TYPE_I64);
138
+ tcg_out_qemu_ld(s, a0, -1, a1, a2, TCG_TYPE_I64);
139
} else {
140
- tcg_out_qemu_ld(s, a0, a1, a2, -1, args[3], TCG_TYPE_I64);
141
+ tcg_out_qemu_ld(s, a0, a1, a2, args[3], TCG_TYPE_I64);
142
}
143
break;
144
case INDEX_op_qemu_ld_i128:
145
tcg_debug_assert(TCG_TARGET_REG_BITS == 64);
146
- tcg_out_qemu_ld(s, a0, a1, a2, -1, args[3], TCG_TYPE_I128);
147
+ tcg_out_qemu_ld(s, a0, a1, a2, args[3], TCG_TYPE_I128);
148
break;
149
150
case INDEX_op_qemu_st_i32:
151
case INDEX_op_qemu_st8_i32:
152
- tcg_out_qemu_st(s, a0, -1, a1, -1, a2, TCG_TYPE_I32);
153
+ tcg_out_qemu_st(s, a0, -1, a1, a2, TCG_TYPE_I32);
154
break;
155
case INDEX_op_qemu_st_i64:
156
if (TCG_TARGET_REG_BITS == 64) {
157
- tcg_out_qemu_st(s, a0, -1, a1, -1, a2, TCG_TYPE_I64);
158
+ tcg_out_qemu_st(s, a0, -1, a1, a2, TCG_TYPE_I64);
159
} else {
160
- tcg_out_qemu_st(s, a0, a1, a2, -1, args[3], TCG_TYPE_I64);
161
+ tcg_out_qemu_st(s, a0, a1, a2, args[3], TCG_TYPE_I64);
162
}
163
break;
164
case INDEX_op_qemu_st_i128:
165
tcg_debug_assert(TCG_TARGET_REG_BITS == 64);
166
- tcg_out_qemu_st(s, a0, a1, a2, -1, args[3], TCG_TYPE_I128);
167
+ tcg_out_qemu_st(s, a0, a1, a2, args[3], TCG_TYPE_I128);
168
break;
169
170
OP_32_64(mulu2):
35
--
171
--
36
2.34.1
172
2.43.0
37
173
38
174
diff view generated by jsdifflib
1
Translators are no longer required to free tcg temporaries.
1
The guest address will now always fit in one register.
2
2
3
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
3
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
5
---
5
---
6
target/m68k/translate.c | 181 ----------------------------------------
6
tcg/mips/tcg-target.c.inc | 62 ++++++++++++++-------------------------
7
1 file changed, 181 deletions(-)
7
1 file changed, 22 insertions(+), 40 deletions(-)
8
8
9
diff --git a/target/m68k/translate.c b/target/m68k/translate.c
9
diff --git a/tcg/mips/tcg-target.c.inc b/tcg/mips/tcg-target.c.inc
10
index XXXXXXX..XXXXXXX 100644
10
index XXXXXXX..XXXXXXX 100644
11
--- a/target/m68k/translate.c
11
--- a/tcg/mips/tcg-target.c.inc
12
+++ b/target/m68k/translate.c
12
+++ b/tcg/mips/tcg-target.c.inc
13
@@ -XXX,XX +XXX,XX @@ static void delay_set_areg(DisasContext *s, unsigned regno,
13
@@ -XXX,XX +XXX,XX @@ bool tcg_target_has_memory_bswap(MemOp memop)
14
* is required and fill in @h with the host address for the fast path.
15
*/
16
static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
17
- TCGReg addrlo, TCGReg addrhi,
18
- MemOpIdx oi, bool is_ld)
19
+ TCGReg addr, MemOpIdx oi, bool is_ld)
14
{
20
{
15
if (s->writeback_mask & (1 << regno)) {
21
TCGType addr_type = s->addr_type;
16
if (give_temp) {
22
TCGLabelQemuLdst *ldst = NULL;
17
- tcg_temp_free(s->writeback[regno]);
23
@@ -XXX,XX +XXX,XX @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
18
s->writeback[regno] = val;
24
ldst = new_ldst_label(s);
25
ldst->is_ld = is_ld;
26
ldst->oi = oi;
27
- ldst->addrlo_reg = addrlo;
28
- ldst->addrhi_reg = addrhi;
29
+ ldst->addrlo_reg = addr;
30
31
/* Load tlb_mask[mmu_idx] and tlb_table[mmu_idx]. */
32
tcg_out_ld(s, TCG_TYPE_PTR, TCG_TMP0, TCG_AREG0, mask_off);
33
@@ -XXX,XX +XXX,XX @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
34
35
/* Extract the TLB index from the address into TMP3. */
36
if (TCG_TARGET_REG_BITS == 32 || addr_type == TCG_TYPE_I32) {
37
- tcg_out_opc_sa(s, OPC_SRL, TCG_TMP3, addrlo,
38
+ tcg_out_opc_sa(s, OPC_SRL, TCG_TMP3, addr,
39
s->page_bits - CPU_TLB_ENTRY_BITS);
19
} else {
40
} else {
20
tcg_gen_mov_i32(s->writeback[regno], val);
41
- tcg_out_dsrl(s, TCG_TMP3, addrlo,
21
@@ -XXX,XX +XXX,XX @@ static void do_writebacks(DisasContext *s)
42
- s->page_bits - CPU_TLB_ENTRY_BITS);
22
do {
43
+ tcg_out_dsrl(s, TCG_TMP3, addr, s->page_bits - CPU_TLB_ENTRY_BITS);
23
unsigned regno = ctz32(mask);
24
tcg_gen_mov_i32(cpu_aregs[regno], s->writeback[regno]);
25
- tcg_temp_free(s->writeback[regno]);
26
mask &= mask - 1;
27
} while (mask);
28
}
29
@@ -XXX,XX +XXX,XX @@ static void gen_raise_exception(int nr)
30
31
tmp = tcg_const_i32(nr);
32
gen_helper_raise_exception(cpu_env, tmp);
33
- tcg_temp_free_i32(tmp);
34
}
35
36
static void gen_raise_exception_format2(DisasContext *s, int nr,
37
@@ -XXX,XX +XXX,XX @@ static void gen_flush_flags(DisasContext *s)
38
gen_ext(t0, t0, s->cc_op - CC_OP_ADDB, 1);
39
tcg_gen_xor_i32(t1, QREG_CC_N, QREG_CC_V);
40
tcg_gen_xor_i32(QREG_CC_V, QREG_CC_V, t0);
41
- tcg_temp_free(t0);
42
tcg_gen_andc_i32(QREG_CC_V, t1, QREG_CC_V);
43
- tcg_temp_free(t1);
44
break;
45
46
case CC_OP_SUBB:
47
@@ -XXX,XX +XXX,XX @@ static void gen_flush_flags(DisasContext *s)
48
gen_ext(t0, t0, s->cc_op - CC_OP_SUBB, 1);
49
tcg_gen_xor_i32(t1, QREG_CC_N, t0);
50
tcg_gen_xor_i32(QREG_CC_V, QREG_CC_V, t0);
51
- tcg_temp_free(t0);
52
tcg_gen_and_i32(QREG_CC_V, QREG_CC_V, t1);
53
- tcg_temp_free(t1);
54
break;
55
56
case CC_OP_CMPB:
57
@@ -XXX,XX +XXX,XX @@ static void gen_flush_flags(DisasContext *s)
58
tcg_gen_xor_i32(t0, QREG_CC_Z, QREG_CC_N);
59
tcg_gen_xor_i32(QREG_CC_V, QREG_CC_V, QREG_CC_N);
60
tcg_gen_and_i32(QREG_CC_V, QREG_CC_V, t0);
61
- tcg_temp_free(t0);
62
tcg_gen_mov_i32(QREG_CC_N, QREG_CC_Z);
63
break;
64
65
@@ -XXX,XX +XXX,XX @@ static void gen_flush_flags(DisasContext *s)
66
default:
67
t0 = tcg_const_i32(s->cc_op);
68
gen_helper_flush_flags(cpu_env, t0);
69
- tcg_temp_free(t0);
70
s->cc_op_synced = 1;
71
break;
72
}
73
@@ -XXX,XX +XXX,XX @@ static void gen_partset_reg(int opsize, TCGv reg, TCGv val)
74
tmp = tcg_temp_new();
75
tcg_gen_ext8u_i32(tmp, val);
76
tcg_gen_or_i32(reg, reg, tmp);
77
- tcg_temp_free(tmp);
78
break;
79
case OS_WORD:
80
tcg_gen_andi_i32(reg, reg, 0xffff0000);
81
tmp = tcg_temp_new();
82
tcg_gen_ext16u_i32(tmp, val);
83
tcg_gen_or_i32(reg, reg, tmp);
84
- tcg_temp_free(tmp);
85
break;
86
case OS_LONG:
87
case OS_SINGLE:
88
@@ -XXX,XX +XXX,XX @@ static void gen_fp_move(TCGv_ptr dest, TCGv_ptr src)
89
t32 = tcg_temp_new();
90
tcg_gen_ld16u_i32(t32, src, offsetof(FPReg, l.upper));
91
tcg_gen_st16_i32(t32, dest, offsetof(FPReg, l.upper));
92
- tcg_temp_free(t32);
93
94
t64 = tcg_temp_new_i64();
95
tcg_gen_ld_i64(t64, src, offsetof(FPReg, l.lower));
96
tcg_gen_st_i64(t64, dest, offsetof(FPReg, l.lower));
97
- tcg_temp_free_i64(t64);
98
}
99
100
static void gen_load_fp(DisasContext *s, int opsize, TCGv addr, TCGv_ptr fp,
101
@@ -XXX,XX +XXX,XX @@ static void gen_load_fp(DisasContext *s, int opsize, TCGv addr, TCGv_ptr fp,
102
default:
103
g_assert_not_reached();
104
}
105
- tcg_temp_free(tmp);
106
- tcg_temp_free_i64(t64);
107
}
108
109
static void gen_store_fp(DisasContext *s, int opsize, TCGv addr, TCGv_ptr fp,
110
@@ -XXX,XX +XXX,XX @@ static void gen_store_fp(DisasContext *s, int opsize, TCGv addr, TCGv_ptr fp,
111
default:
112
g_assert_not_reached();
113
}
114
- tcg_temp_free(tmp);
115
- tcg_temp_free_i64(t64);
116
}
117
118
static void gen_ldst_fp(DisasContext *s, int opsize, TCGv addr,
119
@@ -XXX,XX +XXX,XX @@ static int gen_ea_mode_fp(CPUM68KState *env, DisasContext *s, int mode,
120
default:
121
g_assert_not_reached();
122
}
123
- tcg_temp_free(tmp);
124
}
44
}
125
return 0;
45
tcg_out_opc_reg(s, OPC_AND, TCG_TMP3, TCG_TMP3, TCG_TMP0);
126
case 1: /* Address register direct. */
46
127
@@ -XXX,XX +XXX,XX @@ static int gen_ea_mode_fp(CPUM68KState *env, DisasContext *s, int mode,
47
@@ -XXX,XX +XXX,XX @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
128
case OS_BYTE:
48
tcg_out_opc_imm(s, (TCG_TARGET_REG_BITS == 32
129
tmp = tcg_const_i32((int8_t)read_im8(env, s));
49
|| addr_type == TCG_TYPE_I32
130
gen_helper_exts32(cpu_env, fp, tmp);
50
? OPC_ADDIU : OPC_DADDIU),
131
- tcg_temp_free(tmp);
51
- TCG_TMP2, addrlo, s_mask - a_mask);
132
break;
52
+ TCG_TMP2, addr, s_mask - a_mask);
133
case OS_WORD:
53
tcg_out_opc_reg(s, OPC_AND, TCG_TMP1, TCG_TMP1, TCG_TMP2);
134
tmp = tcg_const_i32((int16_t)read_im16(env, s));
54
} else {
135
gen_helper_exts32(cpu_env, fp, tmp);
55
- tcg_out_opc_reg(s, OPC_AND, TCG_TMP1, TCG_TMP1, addrlo);
136
- tcg_temp_free(tmp);
56
+ tcg_out_opc_reg(s, OPC_AND, TCG_TMP1, TCG_TMP1, addr);
137
break;
57
}
138
case OS_LONG:
58
139
tmp = tcg_const_i32(read_im32(env, s));
59
/* Zero extend a 32-bit guest address for a 64-bit host. */
140
gen_helper_exts32(cpu_env, fp, tmp);
60
if (TCG_TARGET_REG_BITS == 64 && addr_type == TCG_TYPE_I32) {
141
- tcg_temp_free(tmp);
61
- tcg_out_ext32u(s, TCG_TMP2, addrlo);
142
break;
62
- addrlo = TCG_TMP2;
143
case OS_SINGLE:
63
+ tcg_out_ext32u(s, TCG_TMP2, addr);
144
tmp = tcg_const_i32(read_im32(env, s));
64
+ addr = TCG_TMP2;
145
gen_helper_extf32(cpu_env, fp, tmp);
65
}
146
- tcg_temp_free(tmp);
66
147
break;
67
ldst->label_ptr[0] = s->code_ptr;
148
case OS_DOUBLE:
68
tcg_out_opc_br(s, OPC_BNE, TCG_TMP1, TCG_TMP0);
149
t64 = tcg_const_i64(read_im64(env, s));
69
150
gen_helper_extf64(cpu_env, fp, t64);
70
- /* Load and test the high half tlb comparator. */
151
- tcg_temp_free_i64(t64);
71
- if (TCG_TARGET_REG_BITS == 32 && addr_type != TCG_TYPE_I32) {
152
break;
72
- /* delay slot */
153
case OS_EXTENDED:
73
- tcg_out_ldst(s, OPC_LW, TCG_TMP0, TCG_TMP3, cmp_off + HI_OFF);
154
if (m68k_feature(s->env, M68K_FEATURE_CF_FPU)) {
155
@@ -XXX,XX +XXX,XX @@ static int gen_ea_mode_fp(CPUM68KState *env, DisasContext *s, int mode,
156
}
157
tmp = tcg_const_i32(read_im32(env, s) >> 16);
158
tcg_gen_st16_i32(tmp, fp, offsetof(FPReg, l.upper));
159
- tcg_temp_free(tmp);
160
t64 = tcg_const_i64(read_im64(env, s));
161
tcg_gen_st_i64(t64, fp, offsetof(FPReg, l.lower));
162
- tcg_temp_free_i64(t64);
163
break;
164
case OS_PACKED:
165
/*
166
@@ -XXX,XX +XXX,XX @@ static void gen_cc_cond(DisasCompare *c, DisasContext *s, int cond)
167
tmp2 = tcg_temp_new();
168
tcg_gen_xor_i32(tmp2, QREG_CC_N, QREG_CC_V);
169
tcg_gen_or_i32(tmp, tmp, tmp2);
170
- tcg_temp_free(tmp2);
171
tcond = TCG_COND_LT;
172
break;
173
}
174
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(scc)
175
176
tcg_gen_neg_i32(tmp, tmp);
177
DEST_EA(env, insn, OS_BYTE, tmp, NULL);
178
- tcg_temp_free(tmp);
179
}
180
181
DISAS_INSN(dbcc)
182
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(mulw)
183
tcg_gen_mul_i32(tmp, tmp, src);
184
tcg_gen_mov_i32(reg, tmp);
185
gen_logic_cc(s, tmp, OS_LONG);
186
- tcg_temp_free(tmp);
187
}
188
189
DISAS_INSN(divw)
190
@@ -XXX,XX +XXX,XX @@ static void bcd_add(TCGv dest, TCGv src)
191
tcg_gen_andi_i32(t0, t0, 0x22);
192
tcg_gen_add_i32(dest, t0, t0);
193
tcg_gen_add_i32(dest, dest, t0);
194
- tcg_temp_free(t0);
195
196
/*
197
* remove the exceeding 0x6
198
@@ -XXX,XX +XXX,XX @@ static void bcd_add(TCGv dest, TCGv src)
199
*/
200
201
tcg_gen_sub_i32(dest, t1, dest);
202
- tcg_temp_free(t1);
203
}
204
205
static void bcd_sub(TCGv dest, TCGv src)
206
@@ -XXX,XX +XXX,XX @@ static void bcd_sub(TCGv dest, TCGv src)
207
tcg_gen_andi_i32(t2, t2, 0x22);
208
tcg_gen_add_i32(t0, t2, t2);
209
tcg_gen_add_i32(t0, t0, t2);
210
- tcg_temp_free(t2);
211
212
/* return t1 - t0 */
213
214
tcg_gen_sub_i32(dest, t1, t0);
215
- tcg_temp_free(t0);
216
- tcg_temp_free(t1);
217
}
218
219
static void bcd_flags(TCGv val)
220
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(nbcd)
221
DEST_EA(env, insn, OS_BYTE, dest, &addr);
222
223
bcd_flags(dest);
224
-
74
-
225
- tcg_temp_free(dest);
75
- /* Load the tlb addend for the fast path. */
226
}
76
- tcg_out_ld(s, TCG_TYPE_PTR, TCG_TMP3, TCG_TMP3, add_off);
227
77
-
228
DISAS_INSN(addsub)
78
- ldst->label_ptr[1] = s->code_ptr;
229
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(addsub)
79
- tcg_out_opc_br(s, OPC_BNE, addrhi, TCG_TMP0);
80
- }
81
-
82
/* delay slot */
83
base = TCG_TMP3;
84
- tcg_out_opc_reg(s, ALIAS_PADD, base, TCG_TMP3, addrlo);
85
+ tcg_out_opc_reg(s, ALIAS_PADD, base, TCG_TMP3, addr);
230
} else {
86
} else {
231
gen_partset_reg(opsize, DREG(insn, 9), dest);
87
if (a_mask && (use_mips32r6_instructions || a_bits != s_bits)) {
232
}
88
ldst = new_ldst_label(s);
233
- tcg_temp_free(dest);
89
234
}
90
ldst->is_ld = is_ld;
235
91
ldst->oi = oi;
236
/* Reverse the order of the bits in REG. */
92
- ldst->addrlo_reg = addrlo;
237
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(bitop_reg)
93
- ldst->addrhi_reg = addrhi;
238
94
+ ldst->addrlo_reg = addr;
239
tmp = tcg_const_i32(1);
95
240
tcg_gen_shl_i32(tmp, tmp, src2);
96
/* We are expecting a_bits to max out at 7, much lower than ANDI. */
241
- tcg_temp_free(src2);
97
tcg_debug_assert(a_bits < 16);
242
98
- tcg_out_opc_imm(s, OPC_ANDI, TCG_TMP0, addrlo, a_mask);
243
tcg_gen_and_i32(QREG_CC_Z, src1, tmp);
99
+ tcg_out_opc_imm(s, OPC_ANDI, TCG_TMP0, addr, a_mask);
244
100
245
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(bitop_reg)
101
ldst->label_ptr[0] = s->code_ptr;
246
default: /* btst */
102
if (use_mips32r6_instructions) {
247
break;
103
@@ -XXX,XX +XXX,XX @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
248
}
249
- tcg_temp_free(tmp);
250
if (op) {
251
DEST_EA(env, insn, opsize, dest, &addr);
252
}
253
- tcg_temp_free(dest);
254
}
255
256
DISAS_INSN(sats)
257
@@ -XXX,XX +XXX,XX @@ static void gen_push(DisasContext *s, TCGv val)
258
tcg_gen_subi_i32(tmp, QREG_SP, 4);
259
gen_store(s, OS_LONG, tmp, val, IS_USER(s));
260
tcg_gen_mov_i32(QREG_SP, tmp);
261
- tcg_temp_free(tmp);
262
}
263
264
static TCGv mreg(int reg)
265
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(movem)
266
for (i = 0; i < 16; i++) {
267
if (mask & (1 << i)) {
268
tcg_gen_mov_i32(mreg(i), r[i]);
269
- tcg_temp_free(r[i]);
270
}
104
}
271
}
105
}
272
if (mode == 3) {
106
273
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(movem)
107
- base = addrlo;
274
tmp = tcg_temp_new();
108
+ base = addr;
275
tcg_gen_sub_i32(tmp, cpu_aregs[reg0], incr);
109
if (TCG_TARGET_REG_BITS == 64 && addr_type == TCG_TYPE_I32) {
276
gen_store(s, opsize, addr, tmp, IS_USER(s));
110
tcg_out_ext32u(s, TCG_REG_A0, base);
277
- tcg_temp_free(tmp);
111
base = TCG_REG_A0;
278
} else {
112
@@ -XXX,XX +XXX,XX @@ static void tcg_out_qemu_ld_unalign(TCGContext *s, TCGReg lo, TCGReg hi,
279
gen_store(s, opsize, addr, mreg(i), IS_USER(s));
280
}
281
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(movem)
282
}
283
}
284
}
285
-
286
- tcg_temp_free(incr);
287
- tcg_temp_free(addr);
288
}
113
}
289
114
290
DISAS_INSN(movep)
115
static void tcg_out_qemu_ld(TCGContext *s, TCGReg datalo, TCGReg datahi,
291
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(movep)
116
- TCGReg addrlo, TCGReg addrhi,
292
}
117
- MemOpIdx oi, TCGType data_type)
293
}
118
+ TCGReg addr, MemOpIdx oi, TCGType data_type)
294
}
119
{
295
- tcg_temp_free(abuf);
120
MemOp opc = get_memop(oi);
296
- tcg_temp_free(dbuf);
121
TCGLabelQemuLdst *ldst;
122
HostAddress h;
123
124
- ldst = prepare_host_addr(s, &h, addrlo, addrhi, oi, true);
125
+ ldst = prepare_host_addr(s, &h, addr, oi, true);
126
127
if (use_mips32r6_instructions || h.aa.align >= (opc & MO_SIZE)) {
128
tcg_out_qemu_ld_direct(s, datalo, datahi, h.base, opc, data_type);
129
@@ -XXX,XX +XXX,XX @@ static void tcg_out_qemu_st_unalign(TCGContext *s, TCGReg lo, TCGReg hi,
297
}
130
}
298
131
299
DISAS_INSN(bitop_im)
132
static void tcg_out_qemu_st(TCGContext *s, TCGReg datalo, TCGReg datahi,
300
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(bitop_im)
133
- TCGReg addrlo, TCGReg addrhi,
301
break;
134
- MemOpIdx oi, TCGType data_type)
302
}
135
+ TCGReg addr, MemOpIdx oi, TCGType data_type)
303
DEST_EA(env, insn, opsize, tmp, &addr);
136
{
304
- tcg_temp_free(tmp);
137
MemOp opc = get_memop(oi);
305
}
138
TCGLabelQemuLdst *ldst;
306
}
139
HostAddress h;
307
140
308
@@ -XXX,XX +XXX,XX @@ static TCGv gen_get_sr(DisasContext *s)
141
- ldst = prepare_host_addr(s, &h, addrlo, addrhi, oi, false);
309
sr = tcg_temp_new();
142
+ ldst = prepare_host_addr(s, &h, addr, oi, false);
310
tcg_gen_andi_i32(sr, QREG_SR, 0xffe0);
143
311
tcg_gen_or_i32(sr, sr, ccr);
144
if (use_mips32r6_instructions || h.aa.align >= (opc & MO_SIZE)) {
312
- tcg_temp_free(ccr);
145
tcg_out_qemu_st_direct(s, datalo, datahi, h.base, opc);
313
return sr;
146
@@ -XXX,XX +XXX,XX @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, TCGType type,
314
}
147
break;
315
148
316
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(arith_im)
149
case INDEX_op_qemu_ld_i32:
317
default:
150
- tcg_out_qemu_ld(s, a0, 0, a1, 0, a2, TCG_TYPE_I32);
318
abort();
151
+ tcg_out_qemu_ld(s, a0, 0, a1, a2, TCG_TYPE_I32);
319
}
152
break;
320
- tcg_temp_free(im);
153
case INDEX_op_qemu_ld_i64:
321
- tcg_temp_free(dest);
154
if (TCG_TARGET_REG_BITS == 64) {
322
}
155
- tcg_out_qemu_ld(s, a0, 0, a1, 0, a2, TCG_TYPE_I64);
323
156
+ tcg_out_qemu_ld(s, a0, 0, a1, a2, TCG_TYPE_I64);
324
DISAS_INSN(cas)
325
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(cas)
326
gen_update_cc_cmp(s, load, cmp, opsize);
327
gen_partset_reg(opsize, DREG(ext, 0), load);
328
329
- tcg_temp_free(load);
330
-
331
switch (extract32(insn, 3, 3)) {
332
case 3: /* Indirect postincrement. */
333
tcg_gen_addi_i32(AREG(insn, 0), addr, opsize_bytes(opsize));
334
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(cas2w)
335
} else {
336
gen_helper_cas2w(cpu_env, regs, addr1, addr2);
337
}
338
- tcg_temp_free(regs);
339
340
/* Note that cas2w also assigned to env->cc_op. */
341
s->cc_op = CC_OP_CMPW;
342
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(cas2l)
343
} else {
344
gen_helper_cas2l(cpu_env, regs, addr1, addr2);
345
}
346
- tcg_temp_free(regs);
347
348
/* Note that cas2l also assigned to env->cc_op. */
349
s->cc_op = CC_OP_CMPL;
350
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(negx)
351
z = tcg_const_i32(0);
352
tcg_gen_add2_i32(QREG_CC_N, QREG_CC_X, src, z, QREG_CC_X, z);
353
tcg_gen_sub2_i32(QREG_CC_N, QREG_CC_X, z, z, QREG_CC_N, QREG_CC_X);
354
- tcg_temp_free(z);
355
gen_ext(QREG_CC_N, QREG_CC_N, opsize, 1);
356
357
tcg_gen_andi_i32(QREG_CC_X, QREG_CC_X, 1);
358
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(clr)
359
opsize = insn_opsize(insn);
360
DEST_EA(env, insn, opsize, zero, NULL);
361
gen_logic_cc(s, zero, opsize);
362
- tcg_temp_free(zero);
363
}
364
365
DISAS_INSN(move_from_ccr)
366
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(neg)
367
gen_update_cc_add(dest, src1, opsize);
368
tcg_gen_setcondi_i32(TCG_COND_NE, QREG_CC_X, dest, 0);
369
DEST_EA(env, insn, opsize, dest, &addr);
370
- tcg_temp_free(dest);
371
}
372
373
DISAS_INSN(move_to_ccr)
374
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(swap)
375
tcg_gen_shli_i32(src1, reg, 16);
376
tcg_gen_shri_i32(src2, reg, 16);
377
tcg_gen_or_i32(reg, src1, src2);
378
- tcg_temp_free(src2);
379
- tcg_temp_free(src1);
380
gen_logic_cc(s, reg, OS_LONG);
381
}
382
383
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(ext)
384
else
385
tcg_gen_mov_i32(reg, tmp);
386
gen_logic_cc(s, tmp, OS_LONG);
387
- tcg_temp_free(tmp);
388
}
389
390
DISAS_INSN(tst)
391
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(tas)
392
tcg_gen_atomic_fetch_or_tl(src1, addr, tcg_constant_tl(0x80),
393
IS_USER(s), MO_SB);
394
gen_logic_cc(s, src1, OS_BYTE);
395
- tcg_temp_free(src1);
396
397
switch (mode) {
398
case 3: /* Indirect postincrement. */
399
@@ -XXX,XX +XXX,XX @@ static void gen_link(DisasContext *s, uint16_t insn, int32_t offset)
400
tcg_gen_mov_i32(reg, tmp);
401
}
402
tcg_gen_addi_i32(QREG_SP, tmp, offset);
403
- tcg_temp_free(tmp);
404
}
405
406
DISAS_INSN(link)
407
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(unlk)
408
tmp = gen_load(s, OS_LONG, src, 0, IS_USER(s));
409
tcg_gen_mov_i32(reg, tmp);
410
tcg_gen_addi_i32(QREG_SP, src, 4);
411
- tcg_temp_free(src);
412
- tcg_temp_free(tmp);
413
}
414
415
#if defined(CONFIG_SOFTMMU)
416
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(rtr)
417
tcg_gen_addi_i32(sp, QREG_SP, 2);
418
tmp = gen_load(s, OS_LONG, sp, 0, IS_USER(s));
419
tcg_gen_addi_i32(QREG_SP, sp, 4);
420
- tcg_temp_free(sp);
421
422
gen_set_sr(s, ccr, true);
423
- tcg_temp_free(ccr);
424
425
gen_jmp(s, tmp);
426
}
427
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(addsubq)
428
}
429
gen_update_cc_add(dest, val, opsize);
430
}
431
- tcg_temp_free(val);
432
DEST_EA(env, insn, opsize, dest, &addr);
433
- tcg_temp_free(dest);
434
}
435
436
DISAS_INSN(branch)
437
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(or)
438
gen_partset_reg(opsize, DREG(insn, 9), dest);
439
}
440
gen_logic_cc(s, dest, opsize);
441
- tcg_temp_free(dest);
442
}
443
444
DISAS_INSN(suba)
445
@@ -XXX,XX +XXX,XX @@ static inline void gen_subx(DisasContext *s, TCGv src, TCGv dest, int opsize)
446
tcg_gen_xor_i32(QREG_CC_V, QREG_CC_N, dest);
447
tcg_gen_xor_i32(tmp, dest, src);
448
tcg_gen_and_i32(QREG_CC_V, QREG_CC_V, tmp);
449
- tcg_temp_free(tmp);
450
451
/* Copy the rest of the results into place. */
452
tcg_gen_or_i32(QREG_CC_Z, QREG_CC_Z, QREG_CC_N); /* !Z is sticky */
453
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(subx_mem)
454
gen_subx(s, src, dest, opsize);
455
456
gen_store(s, opsize, addr_dest, QREG_CC_N, IS_USER(s));
457
-
458
- tcg_temp_free(dest);
459
- tcg_temp_free(src);
460
}
461
462
DISAS_INSN(mov3q)
463
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(mov3q)
464
src = tcg_const_i32(val);
465
gen_logic_cc(s, src, OS_LONG);
466
DEST_EA(env, insn, OS_LONG, src, NULL);
467
- tcg_temp_free(src);
468
}
469
470
DISAS_INSN(cmp)
471
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(eor)
472
tcg_gen_xor_i32(dest, src, DREG(insn, 9));
473
gen_logic_cc(s, dest, opsize);
474
DEST_EA(env, insn, opsize, dest, &addr);
475
- tcg_temp_free(dest);
476
}
477
478
static void do_exg(TCGv reg1, TCGv reg2)
479
@@ -XXX,XX +XXX,XX @@ static void do_exg(TCGv reg1, TCGv reg2)
480
tcg_gen_mov_i32(temp, reg1);
481
tcg_gen_mov_i32(reg1, reg2);
482
tcg_gen_mov_i32(reg2, temp);
483
- tcg_temp_free(temp);
484
}
485
486
DISAS_INSN(exg_dd)
487
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(and)
488
gen_partset_reg(opsize, reg, dest);
489
}
490
gen_logic_cc(s, dest, opsize);
491
- tcg_temp_free(dest);
492
}
493
494
DISAS_INSN(adda)
495
@@ -XXX,XX +XXX,XX @@ static inline void gen_addx(DisasContext *s, TCGv src, TCGv dest, int opsize)
496
tcg_gen_xor_i32(QREG_CC_V, QREG_CC_N, src);
497
tcg_gen_xor_i32(tmp, dest, src);
498
tcg_gen_andc_i32(QREG_CC_V, QREG_CC_V, tmp);
499
- tcg_temp_free(tmp);
500
501
/* Copy the rest of the results into place. */
502
tcg_gen_or_i32(QREG_CC_Z, QREG_CC_Z, QREG_CC_N); /* !Z is sticky */
503
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(addx_mem)
504
gen_addx(s, src, dest, opsize);
505
506
gen_store(s, opsize, addr_dest, QREG_CC_N, IS_USER(s));
507
-
508
- tcg_temp_free(dest);
509
- tcg_temp_free(src);
510
}
511
512
static inline void shift_im(DisasContext *s, uint16_t insn, int opsize)
513
@@ -XXX,XX +XXX,XX @@ static inline void shift_im(DisasContext *s, uint16_t insn, int opsize)
514
tcg_gen_sari_i32(QREG_CC_V, reg, bits - 1);
515
tcg_gen_sari_i32(t0, reg, bits - count - 1);
516
tcg_gen_setcond_i32(TCG_COND_NE, QREG_CC_V, QREG_CC_V, t0);
517
- tcg_temp_free(t0);
518
}
519
tcg_gen_neg_i32(QREG_CC_V, QREG_CC_V);
520
}
521
@@ -XXX,XX +XXX,XX @@ static inline void shift_reg(DisasContext *s, uint16_t insn, int opsize)
522
tcg_gen_shri_i32(QREG_CC_C, QREG_CC_N, bits);
523
tcg_gen_movcond_i32(TCG_COND_EQ, QREG_CC_C,
524
s32, zero, zero, QREG_CC_C);
525
- tcg_temp_free(zero);
526
}
527
tcg_gen_andi_i32(QREG_CC_C, QREG_CC_C, 1);
528
529
@@ -XXX,XX +XXX,XX @@ static inline void shift_reg(DisasContext *s, uint16_t insn, int opsize)
530
TCGv_i64 tt = tcg_const_i64(32);
531
/* if shift is greater than 32, use 32 */
532
tcg_gen_movcond_i64(TCG_COND_GT, s64, s64, tt, tt, s64);
533
- tcg_temp_free_i64(tt);
534
/* Sign extend the input to 64 bits; re-do the shift. */
535
tcg_gen_ext_i32_i64(t64, reg);
536
tcg_gen_shl_i64(s64, t64, s64);
537
@@ -XXX,XX +XXX,XX @@ static inline void shift_reg(DisasContext *s, uint16_t insn, int opsize)
538
gen_ext(QREG_CC_N, QREG_CC_N, opsize, 1);
539
tcg_gen_mov_i32(QREG_CC_Z, QREG_CC_N);
540
541
- tcg_temp_free(s32);
542
- tcg_temp_free_i64(s64);
543
- tcg_temp_free_i64(t64);
544
-
545
/* Write back the result. */
546
gen_partset_reg(opsize, DREG(insn, 0), QREG_CC_N);
547
set_cc_op(s, CC_OP_FLAGS);
548
@@ -XXX,XX +XXX,XX @@ static TCGv rotate_x(TCGv reg, TCGv shift, int left, int size)
549
/* shx = shx < 0 ? size : shx; */
550
zero = tcg_const_i32(0);
551
tcg_gen_movcond_i32(TCG_COND_LT, shx, shx, zero, sz, shx);
552
- tcg_temp_free(zero);
553
} else {
554
tcg_gen_mov_i32(shr, shift); /* shr = shift */
555
tcg_gen_movi_i32(shl, size + 1);
556
tcg_gen_sub_i32(shl, shl, shift); /* shl = size + 1 - shift */
557
tcg_gen_sub_i32(shx, sz, shift); /* shx = size - shift */
558
}
559
- tcg_temp_free_i32(sz);
560
561
/* reg = (reg << shl) | (reg >> shr) | (x << shx); */
562
563
tcg_gen_shl_i32(shl, reg, shl);
564
tcg_gen_shr_i32(shr, reg, shr);
565
tcg_gen_or_i32(reg, shl, shr);
566
- tcg_temp_free(shl);
567
- tcg_temp_free(shr);
568
tcg_gen_shl_i32(shx, QREG_CC_X, shx);
569
tcg_gen_or_i32(reg, reg, shx);
570
- tcg_temp_free(shx);
571
572
/* X = (reg >> size) & 1 */
573
574
@@ -XXX,XX +XXX,XX @@ static TCGv rotate32_x(TCGv reg, TCGv shift, int left)
575
/* rotate */
576
577
tcg_gen_rotl_i64(t0, t0, shift64);
578
- tcg_temp_free_i64(shift64);
579
580
/* result is [reg:..:reg:X] */
581
582
@@ -XXX,XX +XXX,XX @@ static TCGv rotate32_x(TCGv reg, TCGv shift, int left)
583
tcg_gen_concat_i32_i64(t0, reg, QREG_CC_X);
584
585
tcg_gen_rotr_i64(t0, t0, shift64);
586
- tcg_temp_free_i64(shift64);
587
588
/* result is value: [X:reg:..:reg] */
589
590
@@ -XXX,XX +XXX,XX @@ static TCGv rotate32_x(TCGv reg, TCGv shift, int left)
591
592
tcg_gen_shli_i32(hi, hi, 1);
593
}
594
- tcg_temp_free_i64(t0);
595
tcg_gen_or_i32(lo, lo, hi);
596
- tcg_temp_free(hi);
597
598
/* if shift == 0, register and X are not affected */
599
600
zero = tcg_const_i32(0);
601
tcg_gen_movcond_i32(TCG_COND_EQ, X, shift, zero, QREG_CC_X, X);
602
tcg_gen_movcond_i32(TCG_COND_EQ, reg, shift, zero, reg, lo);
603
- tcg_temp_free(zero);
604
- tcg_temp_free(lo);
605
606
return X;
607
}
608
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(rotate_im)
609
} else {
610
TCGv X = rotate32_x(DREG(insn, 0), shift, left);
611
rotate_x_flags(DREG(insn, 0), X, 32);
612
- tcg_temp_free(X);
613
}
614
- tcg_temp_free(shift);
615
616
set_cc_op(s, CC_OP_FLAGS);
617
}
618
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(rotate8_im)
619
} else {
620
TCGv X = rotate_x(reg, shift, left, 8);
621
rotate_x_flags(reg, X, 8);
622
- tcg_temp_free(X);
623
}
624
- tcg_temp_free(shift);
625
gen_partset_reg(OS_BYTE, DREG(insn, 0), reg);
626
set_cc_op(s, CC_OP_FLAGS);
627
}
628
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(rotate16_im)
629
} else {
630
TCGv X = rotate_x(reg, shift, left, 16);
631
rotate_x_flags(reg, X, 16);
632
- tcg_temp_free(X);
633
}
634
- tcg_temp_free(shift);
635
gen_partset_reg(OS_WORD, DREG(insn, 0), reg);
636
set_cc_op(s, CC_OP_FLAGS);
637
}
638
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(rotate_reg)
639
tcg_gen_remu_i32(t1, t0, t1);
640
X = rotate32_x(DREG(insn, 0), t1, left);
641
rotate_x_flags(DREG(insn, 0), X, 32);
642
- tcg_temp_free(X);
643
}
644
- tcg_temp_free(t1);
645
- tcg_temp_free(t0);
646
set_cc_op(s, CC_OP_FLAGS);
647
}
648
649
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(rotate8_reg)
650
tcg_gen_remu_i32(t1, t0, t1);
651
X = rotate_x(reg, t1, left, 8);
652
rotate_x_flags(reg, X, 8);
653
- tcg_temp_free(X);
654
}
655
- tcg_temp_free(t1);
656
- tcg_temp_free(t0);
657
gen_partset_reg(OS_BYTE, DREG(insn, 0), reg);
658
set_cc_op(s, CC_OP_FLAGS);
659
}
660
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(rotate16_reg)
661
tcg_gen_remu_i32(t1, t0, t1);
662
X = rotate_x(reg, t1, left, 16);
663
rotate_x_flags(reg, X, 16);
664
- tcg_temp_free(X);
665
}
666
- tcg_temp_free(t1);
667
- tcg_temp_free(t0);
668
gen_partset_reg(OS_WORD, DREG(insn, 0), reg);
669
set_cc_op(s, CC_OP_FLAGS);
670
}
671
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(rotate_mem)
672
} else {
673
TCGv X = rotate_x(src, shift, left, 16);
674
rotate_x_flags(src, X, 16);
675
- tcg_temp_free(X);
676
}
677
- tcg_temp_free(shift);
678
DEST_EA(env, insn, OS_WORD, src, &addr);
679
set_cc_op(s, CC_OP_FLAGS);
680
}
681
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(bfext_reg)
682
} else {
157
} else {
683
tcg_gen_shr_i32(dst, tmp, shift);
158
- tcg_out_qemu_ld(s, a0, a1, a2, 0, args[3], TCG_TYPE_I64);
684
}
159
+ tcg_out_qemu_ld(s, a0, a1, a2, args[3], TCG_TYPE_I64);
685
- tcg_temp_free(shift);
686
} else {
687
/* Immediate width. */
688
if (ext & 0x800) {
689
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(bfext_reg)
690
}
691
}
692
693
- tcg_temp_free(tmp);
694
set_cc_op(s, CC_OP_LOGIC);
695
}
696
697
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(bfext_mem)
698
TCGv_i64 tmp = tcg_temp_new_i64();
699
gen_helper_bfextu_mem(tmp, cpu_env, addr, ofs, len);
700
tcg_gen_extr_i64_i32(dest, QREG_CC_N, tmp);
701
- tcg_temp_free_i64(tmp);
702
}
703
set_cc_op(s, CC_OP_LOGIC);
704
-
705
- if (!(ext & 0x20)) {
706
- tcg_temp_free(len);
707
- }
708
- if (!(ext & 0x800)) {
709
- tcg_temp_free(ofs);
710
- }
711
}
712
713
DISAS_INSN(bfop_reg)
714
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(bfop_reg)
715
tcg_gen_movi_i32(tofs, ofs);
716
}
717
}
718
- tcg_temp_free(tmp);
719
}
720
set_cc_op(s, CC_OP_LOGIC);
721
722
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(bfop_reg)
723
break;
724
case 0x0d00: /* bfffo */
725
gen_helper_bfffo_reg(DREG(ext, 12), QREG_CC_N, tofs, tlen);
726
- tcg_temp_free(tlen);
727
- tcg_temp_free(tofs);
728
break;
729
case 0x0e00: /* bfset */
730
tcg_gen_orc_i32(src, src, mask);
731
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(bfop_reg)
732
default:
733
g_assert_not_reached();
734
}
735
- tcg_temp_free(mask);
736
}
737
738
DISAS_INSN(bfop_mem)
739
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(bfop_mem)
740
t64 = tcg_temp_new_i64();
741
gen_helper_bfffo_mem(t64, cpu_env, addr, ofs, len);
742
tcg_gen_extr_i64_i32(DREG(ext, 12), QREG_CC_N, t64);
743
- tcg_temp_free_i64(t64);
744
break;
745
case 0x0e00: /* bfset */
746
gen_helper_bfset_mem(QREG_CC_N, cpu_env, addr, ofs, len);
747
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(bfop_mem)
748
g_assert_not_reached();
749
}
750
set_cc_op(s, CC_OP_LOGIC);
751
-
752
- if (!(ext & 0x20)) {
753
- tcg_temp_free(len);
754
- }
755
- if (!(ext & 0x800)) {
756
- tcg_temp_free(ofs);
757
- }
758
}
759
760
DISAS_INSN(bfins_reg)
761
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(bfins_reg)
762
tcg_gen_rotr_i32(tmp, tmp, rot);
763
tcg_gen_and_i32(dst, dst, mask);
764
tcg_gen_or_i32(dst, dst, tmp);
765
-
766
- tcg_temp_free(rot);
767
- tcg_temp_free(mask);
768
}
769
- tcg_temp_free(tmp);
770
}
771
772
DISAS_INSN(bfins_mem)
773
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(bfins_mem)
774
775
gen_helper_bfins_mem(QREG_CC_N, cpu_env, addr, src, ofs, len);
776
set_cc_op(s, CC_OP_LOGIC);
777
-
778
- if (!(ext & 0x20)) {
779
- tcg_temp_free(len);
780
- }
781
- if (!(ext & 0x800)) {
782
- tcg_temp_free(ofs);
783
- }
784
}
785
786
DISAS_INSN(ff1)
787
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(chk2)
788
tcg_gen_addi_i32(addr2, addr1, opsize_bytes(opsize));
789
790
bound1 = gen_load(s, opsize, addr1, 1, IS_USER(s));
791
- tcg_temp_free(addr1);
792
bound2 = gen_load(s, opsize, addr2, 1, IS_USER(s));
793
- tcg_temp_free(addr2);
794
795
reg = tcg_temp_new();
796
if (ext & 0x8000) {
797
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(chk2)
798
799
gen_flush_flags(s);
800
gen_helper_chk2(cpu_env, reg, bound1, bound2);
801
- tcg_temp_free(reg);
802
- tcg_temp_free(bound1);
803
- tcg_temp_free(bound2);
804
}
805
806
static void m68k_copy_line(TCGv dst, TCGv src, int index)
807
@@ -XXX,XX +XXX,XX @@ static void m68k_copy_line(TCGv dst, TCGv src, int index)
808
tcg_gen_qemu_st64(t0, addr, index);
809
tcg_gen_addi_i32(addr, addr, 8);
810
tcg_gen_qemu_st64(t1, addr, index);
811
-
812
- tcg_temp_free_i64(t0);
813
- tcg_temp_free_i64(t1);
814
- tcg_temp_free(addr);
815
}
816
817
DISAS_INSN(move16_reg)
818
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(move16_reg)
819
tcg_gen_mov_i32(tmp, AREG(ext, 12));
820
tcg_gen_addi_i32(AREG(insn, 0), AREG(insn, 0), 16);
821
tcg_gen_addi_i32(AREG(ext, 12), tmp, 16);
822
- tcg_temp_free(tmp);
823
}
824
825
DISAS_INSN(move16_mem)
826
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(move16_mem)
827
m68k_copy_line(addr, reg, index);
828
}
829
830
- tcg_temp_free(addr);
831
-
832
if (((insn >> 3) & 2) == 0) {
833
/* (Ay)+ */
834
tcg_gen_addi_i32(reg, reg, 16);
835
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(moves)
836
} else {
837
gen_partset_reg(opsize, reg, tmp);
838
}
839
- tcg_temp_free(tmp);
840
}
841
switch (extract32(insn, 3, 3)) {
842
case 3: /* Indirect postincrement. */
843
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(pflush)
844
845
opmode = tcg_const_i32((insn >> 3) & 3);
846
gen_helper_pflush(cpu_env, AREG(insn, 0), opmode);
847
- tcg_temp_free(opmode);
848
}
849
850
DISAS_INSN(ptest)
851
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(ptest)
852
}
853
is_read = tcg_const_i32((insn >> 5) & 1);
854
gen_helper_ptest(cpu_env, AREG(insn, 0), is_read);
855
- tcg_temp_free(is_read);
856
}
857
#endif
858
859
@@ -XXX,XX +XXX,XX @@ static void gen_qemu_store_fcr(DisasContext *s, TCGv addr, int reg)
860
tmp = tcg_temp_new();
861
gen_load_fcr(s, tmp, reg);
862
tcg_gen_qemu_st32(tmp, addr, index);
863
- tcg_temp_free(tmp);
864
}
865
866
static void gen_qemu_load_fcr(DisasContext *s, TCGv addr, int reg)
867
@@ -XXX,XX +XXX,XX @@ static void gen_qemu_load_fcr(DisasContext *s, TCGv addr, int reg)
868
tmp = tcg_temp_new();
869
tcg_gen_qemu_ld32u(tmp, addr, index);
870
gen_store_fcr(s, tmp, reg);
871
- tcg_temp_free(tmp);
872
}
873
874
875
@@ -XXX,XX +XXX,XX @@ static void gen_op_fmove_fcr(CPUM68KState *env, DisasContext *s,
876
}
877
tmp = tcg_const_i32(read_im32(env, s));
878
gen_store_fcr(s, tmp, mask);
879
- tcg_temp_free(tmp);
880
return;
881
}
160
}
882
break;
161
break;
883
@@ -XXX,XX +XXX,XX @@ static void gen_op_fmove_fcr(CPUM68KState *env, DisasContext *s,
162
884
tcg_gen_mov_i32(AREG(insn, 0), addr);
163
case INDEX_op_qemu_st_i32:
885
}
164
- tcg_out_qemu_st(s, a0, 0, a1, 0, a2, TCG_TYPE_I32);
886
}
165
+ tcg_out_qemu_st(s, a0, 0, a1, a2, TCG_TYPE_I32);
887
- tcg_temp_free_i32(addr);
166
break;
888
}
167
case INDEX_op_qemu_st_i64:
889
168
if (TCG_TARGET_REG_BITS == 64) {
890
static void gen_op_fmovem(CPUM68KState *env, DisasContext *s,
169
- tcg_out_qemu_st(s, a0, 0, a1, 0, a2, TCG_TYPE_I64);
891
@@ -XXX,XX +XXX,XX @@ static void gen_op_fmovem(CPUM68KState *env, DisasContext *s,
170
+ tcg_out_qemu_st(s, a0, 0, a1, a2, TCG_TYPE_I64);
892
if ((insn & 070) == 030 || (insn & 070) == 040) {
171
} else {
893
tcg_gen_mov_i32(AREG(insn, 0), tmp);
172
- tcg_out_qemu_st(s, a0, a1, a2, 0, args[3], TCG_TYPE_I64);
894
}
173
+ tcg_out_qemu_st(s, a0, a1, a2, args[3], TCG_TYPE_I64);
895
- tcg_temp_free(tmp);
896
}
897
898
/*
899
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(fpu)
900
TCGv rom_offset = tcg_const_i32(opmode);
901
cpu_dest = gen_fp_ptr(REG(ext, 7));
902
gen_helper_fconst(cpu_env, cpu_dest, rom_offset);
903
- tcg_temp_free_ptr(cpu_dest);
904
- tcg_temp_free(rom_offset);
905
return;
906
}
174
}
907
break;
175
break;
908
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(fpu)
909
gen_addr_fault(s);
910
}
911
gen_helper_ftst(cpu_env, cpu_src);
912
- tcg_temp_free_ptr(cpu_src);
913
return;
914
case 4: /* fmove to control register. */
915
case 5: /* fmove from control register. */
916
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(fpu)
917
case 0x36: case 0x37: {
918
TCGv_ptr cpu_dest2 = gen_fp_ptr(REG(ext, 0));
919
gen_helper_fsincos(cpu_env, cpu_dest, cpu_dest2, cpu_src);
920
- tcg_temp_free_ptr(cpu_dest2);
921
}
922
break;
923
case 0x38: /* fcmp */
924
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(fpu)
925
default:
926
goto undef;
927
}
928
- tcg_temp_free_ptr(cpu_src);
929
gen_helper_ftst(cpu_env, cpu_dest);
930
- tcg_temp_free_ptr(cpu_dest);
931
return;
932
undef:
933
/* FIXME: Is this right for offset addressing modes? */
934
@@ -XXX,XX +XXX,XX @@ static void gen_fcc_cond(DisasCompare *c, DisasContext *s, int cond)
935
c->tcond = TCG_COND_ALWAYS;
936
break;
937
}
938
- tcg_temp_free(fpsr);
939
}
940
941
static void gen_fjmpcc(DisasContext *s, int cond, TCGLabel *l1)
942
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(fscc)
943
944
tcg_gen_neg_i32(tmp, tmp);
945
DEST_EA(env, insn, OS_BYTE, tmp, NULL);
946
- tcg_temp_free(tmp);
947
}
948
949
DISAS_INSN(ftrapcc)
950
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(fsave)
951
/* always write IDLE */
952
TCGv idle = tcg_const_i32(0x41000000);
953
DEST_EA(env, insn, OS_LONG, idle, NULL);
954
- tcg_temp_free(idle);
955
} else {
956
disas_undef(env, s, insn);
957
}
958
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(mac)
959
case 4: /* Pre-decrement. */
960
tcg_gen_mov_i32(AREG(insn, 0), addr);
961
}
962
- tcg_temp_free(loadval);
963
}
964
}
965
966
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(macsr_to_ccr)
967
/* Note that X and C are always cleared. */
968
tcg_gen_andi_i32(tmp, QREG_MACSR, CCF_N | CCF_Z | CCF_V);
969
gen_helper_set_ccr(cpu_env, tmp);
970
- tcg_temp_free(tmp);
971
set_cc_op(s, CC_OP_FLAGS);
972
}
973
176
974
--
177
--
975
2.34.1
178
2.43.0
179
180
diff view generated by jsdifflib
1
Translators are no longer required to free tcg temporaries.
1
The guest address will now always fit in one register.
2
2
3
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
3
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
5
---
5
---
6
target/arm/tcg/translate-vfp.c | 193 ---------------------------------
6
tcg/ppc/tcg-target.c.inc | 75 ++++++++++++----------------------------
7
1 file changed, 193 deletions(-)
7
1 file changed, 23 insertions(+), 52 deletions(-)
8
8
9
diff --git a/target/arm/tcg/translate-vfp.c b/target/arm/tcg/translate-vfp.c
9
diff --git a/tcg/ppc/tcg-target.c.inc b/tcg/ppc/tcg-target.c.inc
10
index XXXXXXX..XXXXXXX 100644
10
index XXXXXXX..XXXXXXX 100644
11
--- a/target/arm/tcg/translate-vfp.c
11
--- a/tcg/ppc/tcg-target.c.inc
12
+++ b/target/arm/tcg/translate-vfp.c
12
+++ b/tcg/ppc/tcg-target.c.inc
13
@@ -XXX,XX +XXX,XX @@ static void gen_update_fp_context(DisasContext *s)
13
@@ -XXX,XX +XXX,XX @@ bool tcg_target_has_memory_bswap(MemOp memop)
14
14
* is required and fill in @h with the host address for the fast path.
15
fpscr = load_cpu_field(v7m.fpdscr[s->v8m_secure]);
15
*/
16
gen_helper_vfp_set_fpscr(cpu_env, fpscr);
16
static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
17
- tcg_temp_free_i32(fpscr);
17
- TCGReg addrlo, TCGReg addrhi,
18
if (dc_isar_feature(aa32_mve, s)) {
18
- MemOpIdx oi, bool is_ld)
19
store_cpu_field(tcg_constant_i32(0), v7m.vpr);
19
+ TCGReg addr, MemOpIdx oi, bool is_ld)
20
}
20
{
21
@@ -XXX,XX +XXX,XX @@ static bool trans_VSEL(DisasContext *s, arg_VSEL *a)
21
TCGType addr_type = s->addr_type;
22
tmp = tcg_temp_new_i64();
22
TCGLabelQemuLdst *ldst = NULL;
23
tcg_gen_xor_i64(tmp, vf, nf);
23
@@ -XXX,XX +XXX,XX @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
24
tcg_gen_movcond_i64(TCG_COND_GE, dest, tmp, zero, frn, frm);
24
ldst = new_ldst_label(s);
25
- tcg_temp_free_i64(tmp);
25
ldst->is_ld = is_ld;
26
break;
26
ldst->oi = oi;
27
case 3: /* gt: !Z && N == V */
27
- ldst->addrlo_reg = addrlo;
28
tcg_gen_movcond_i64(TCG_COND_NE, dest, zf, zero, frn, frm);
28
- ldst->addrhi_reg = addrhi;
29
tmp = tcg_temp_new_i64();
29
+ ldst->addrlo_reg = addr;
30
tcg_gen_xor_i64(tmp, vf, nf);
30
31
tcg_gen_movcond_i64(TCG_COND_GE, dest, tmp, zero, dest, frm);
31
/* Load tlb_mask[mmu_idx] and tlb_table[mmu_idx]. */
32
- tcg_temp_free_i64(tmp);
32
tcg_out_ld(s, TCG_TYPE_PTR, TCG_REG_TMP1, TCG_AREG0, mask_off);
33
break;
33
@@ -XXX,XX +XXX,XX @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
34
}
34
35
vfp_store_reg64(dest, rd);
35
/* Extract the page index, shifted into place for tlb index. */
36
- tcg_temp_free_i64(frn);
36
if (TCG_TARGET_REG_BITS == 32) {
37
- tcg_temp_free_i64(frm);
37
- tcg_out_shri32(s, TCG_REG_R0, addrlo,
38
- tcg_temp_free_i64(dest);
38
+ tcg_out_shri32(s, TCG_REG_R0, addr,
39
-
39
s->page_bits - CPU_TLB_ENTRY_BITS);
40
- tcg_temp_free_i64(zf);
40
} else {
41
- tcg_temp_free_i64(nf);
41
- tcg_out_shri64(s, TCG_REG_R0, addrlo,
42
- tcg_temp_free_i64(vf);
42
+ tcg_out_shri64(s, TCG_REG_R0, addr,
43
s->page_bits - CPU_TLB_ENTRY_BITS);
44
}
45
tcg_out32(s, AND | SAB(TCG_REG_TMP1, TCG_REG_TMP1, TCG_REG_R0));
46
@@ -XXX,XX +XXX,XX @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
47
if (a_bits < s_bits) {
48
a_bits = s_bits;
49
}
50
- tcg_out_rlw(s, RLWINM, TCG_REG_R0, addrlo, 0,
51
+ tcg_out_rlw(s, RLWINM, TCG_REG_R0, addr, 0,
52
(32 - a_bits) & 31, 31 - s->page_bits);
53
} else {
54
- TCGReg t = addrlo;
55
+ TCGReg t = addr;
56
57
/*
58
* If the access is unaligned, we need to make sure we fail if we
59
@@ -XXX,XX +XXX,XX @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
60
}
61
}
62
63
- if (TCG_TARGET_REG_BITS == 32 && addr_type != TCG_TYPE_I32) {
64
- /* Low part comparison into cr7. */
65
- tcg_out_cmp(s, TCG_COND_EQ, TCG_REG_R0, TCG_REG_TMP2,
66
- 0, 7, TCG_TYPE_I32);
67
-
68
- /* Load the high part TLB comparator into TMP2. */
69
- tcg_out_ld(s, TCG_TYPE_I32, TCG_REG_TMP2, TCG_REG_TMP1,
70
- cmp_off + 4 * !HOST_BIG_ENDIAN);
71
-
72
- /* Load addend, deferred for this case. */
73
- tcg_out_ld(s, TCG_TYPE_PTR, TCG_REG_TMP1, TCG_REG_TMP1,
74
- offsetof(CPUTLBEntry, addend));
75
-
76
- /* High part comparison into cr6. */
77
- tcg_out_cmp(s, TCG_COND_EQ, addrhi, TCG_REG_TMP2,
78
- 0, 6, TCG_TYPE_I32);
79
-
80
- /* Combine comparisons into cr0. */
81
- tcg_out32(s, CRAND | BT(0, CR_EQ) | BA(6, CR_EQ) | BB(7, CR_EQ));
82
- } else {
83
- /* Full comparison into cr0. */
84
- tcg_out_cmp(s, TCG_COND_EQ, TCG_REG_R0, TCG_REG_TMP2,
85
- 0, 0, addr_type);
86
- }
87
+ /* Full comparison into cr0. */
88
+ tcg_out_cmp(s, TCG_COND_EQ, TCG_REG_R0, TCG_REG_TMP2, 0, 0, addr_type);
89
90
/* Load a pointer into the current opcode w/conditional branch-link. */
91
ldst->label_ptr[0] = s->code_ptr;
92
@@ -XXX,XX +XXX,XX @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
93
ldst = new_ldst_label(s);
94
ldst->is_ld = is_ld;
95
ldst->oi = oi;
96
- ldst->addrlo_reg = addrlo;
97
- ldst->addrhi_reg = addrhi;
98
+ ldst->addrlo_reg = addr;
99
100
/* We are expecting a_bits to max out at 7, much lower than ANDI. */
101
tcg_debug_assert(a_bits < 16);
102
- tcg_out32(s, ANDI | SAI(addrlo, TCG_REG_R0, (1 << a_bits) - 1));
103
+ tcg_out32(s, ANDI | SAI(addr, TCG_REG_R0, (1 << a_bits) - 1));
104
105
ldst->label_ptr[0] = s->code_ptr;
106
tcg_out32(s, BC | BI(0, CR_EQ) | BO_COND_FALSE | LK);
107
@@ -XXX,XX +XXX,XX @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
108
109
if (TCG_TARGET_REG_BITS == 64 && addr_type == TCG_TYPE_I32) {
110
/* Zero-extend the guest address for use in the host address. */
111
- tcg_out_ext32u(s, TCG_REG_TMP2, addrlo);
112
+ tcg_out_ext32u(s, TCG_REG_TMP2, addr);
113
h->index = TCG_REG_TMP2;
43
} else {
114
} else {
44
TCGv_i32 frn, frm, dest;
115
- h->index = addrlo;
45
TCGv_i32 tmp, zero;
116
+ h->index = addr;
46
@@ -XXX,XX +XXX,XX @@ static bool trans_VSEL(DisasContext *s, arg_VSEL *a)
47
tmp = tcg_temp_new_i32();
48
tcg_gen_xor_i32(tmp, cpu_VF, cpu_NF);
49
tcg_gen_movcond_i32(TCG_COND_GE, dest, tmp, zero, frn, frm);
50
- tcg_temp_free_i32(tmp);
51
break;
52
case 3: /* gt: !Z && N == V */
53
tcg_gen_movcond_i32(TCG_COND_NE, dest, cpu_ZF, zero, frn, frm);
54
tmp = tcg_temp_new_i32();
55
tcg_gen_xor_i32(tmp, cpu_VF, cpu_NF);
56
tcg_gen_movcond_i32(TCG_COND_GE, dest, tmp, zero, dest, frm);
57
- tcg_temp_free_i32(tmp);
58
break;
59
}
60
/* For fp16 the top half is always zeroes */
61
@@ -XXX,XX +XXX,XX @@ static bool trans_VSEL(DisasContext *s, arg_VSEL *a)
62
tcg_gen_andi_i32(dest, dest, 0xffff);
63
}
64
vfp_store_reg32(dest, rd);
65
- tcg_temp_free_i32(frn);
66
- tcg_temp_free_i32(frm);
67
- tcg_temp_free_i32(dest);
68
}
117
}
69
118
70
return true;
119
return ldst;
71
@@ -XXX,XX +XXX,XX @@ static bool trans_VRINT(DisasContext *s, arg_VRINT *a)
72
vfp_load_reg64(tcg_op, rm);
73
gen_helper_rintd(tcg_res, tcg_op, fpst);
74
vfp_store_reg64(tcg_res, rd);
75
- tcg_temp_free_i64(tcg_op);
76
- tcg_temp_free_i64(tcg_res);
77
} else {
78
TCGv_i32 tcg_op;
79
TCGv_i32 tcg_res;
80
@@ -XXX,XX +XXX,XX @@ static bool trans_VRINT(DisasContext *s, arg_VRINT *a)
81
gen_helper_rints(tcg_res, tcg_op, fpst);
82
}
83
vfp_store_reg32(tcg_res, rd);
84
- tcg_temp_free_i32(tcg_op);
85
- tcg_temp_free_i32(tcg_res);
86
}
87
88
gen_helper_set_rmode(tcg_rmode, tcg_rmode, fpst);
89
- tcg_temp_free_i32(tcg_rmode);
90
-
91
- tcg_temp_free_ptr(fpst);
92
return true;
93
}
120
}
94
121
95
@@ -XXX,XX +XXX,XX @@ static bool trans_VCVT(DisasContext *s, arg_VCVT *a)
122
static void tcg_out_qemu_ld(TCGContext *s, TCGReg datalo, TCGReg datahi,
96
}
123
- TCGReg addrlo, TCGReg addrhi,
97
tcg_gen_extrl_i64_i32(tcg_tmp, tcg_res);
124
- MemOpIdx oi, TCGType data_type)
98
vfp_store_reg32(tcg_tmp, rd);
125
+ TCGReg addr, MemOpIdx oi, TCGType data_type)
99
- tcg_temp_free_i32(tcg_tmp);
126
{
100
- tcg_temp_free_i64(tcg_res);
127
MemOp opc = get_memop(oi);
101
- tcg_temp_free_i64(tcg_double);
128
TCGLabelQemuLdst *ldst;
102
} else {
129
HostAddress h;
103
TCGv_i32 tcg_single, tcg_res;
130
104
tcg_single = tcg_temp_new_i32();
131
- ldst = prepare_host_addr(s, &h, addrlo, addrhi, oi, true);
105
@@ -XXX,XX +XXX,XX @@ static bool trans_VCVT(DisasContext *s, arg_VCVT *a)
132
+ ldst = prepare_host_addr(s, &h, addr, oi, true);
106
}
133
107
}
134
if (TCG_TARGET_REG_BITS == 32 && (opc & MO_SIZE) == MO_64) {
108
vfp_store_reg32(tcg_res, rd);
135
if (opc & MO_BSWAP) {
109
- tcg_temp_free_i32(tcg_res);
136
@@ -XXX,XX +XXX,XX @@ static void tcg_out_qemu_ld(TCGContext *s, TCGReg datalo, TCGReg datahi,
110
- tcg_temp_free_i32(tcg_single);
111
}
112
113
gen_helper_set_rmode(tcg_rmode, tcg_rmode, fpst);
114
- tcg_temp_free_i32(tcg_rmode);
115
-
116
- tcg_temp_free_ptr(fpst);
117
-
118
return true;
119
}
137
}
120
138
121
@@ -XXX,XX +XXX,XX @@ static bool trans_VMOV_from_gp(DisasContext *s, arg_VMOV_from_gp *a)
139
static void tcg_out_qemu_st(TCGContext *s, TCGReg datalo, TCGReg datahi,
122
if (!mve_skip_vmov(s, a->vn, a->index, a->size)) {
140
- TCGReg addrlo, TCGReg addrhi,
123
tmp = load_reg(s, a->rt);
141
- MemOpIdx oi, TCGType data_type)
124
write_neon_element32(tmp, a->vn, a->index, a->size);
142
+ TCGReg addr, MemOpIdx oi, TCGType data_type)
125
- tcg_temp_free_i32(tmp);
143
{
126
}
144
MemOp opc = get_memop(oi);
127
145
TCGLabelQemuLdst *ldst;
128
if (dc_isar_feature(aa32_mve, s)) {
146
HostAddress h;
129
@@ -XXX,XX +XXX,XX @@ static bool trans_VDUP(DisasContext *s, arg_VDUP *a)
147
130
tmp = load_reg(s, a->rt);
148
- ldst = prepare_host_addr(s, &h, addrlo, addrhi, oi, false);
131
tcg_gen_gvec_dup_i32(size, neon_full_reg_offset(a->vn),
149
+ ldst = prepare_host_addr(s, &h, addr, oi, false);
132
vec_size, vec_size, tmp);
150
133
- tcg_temp_free_i32(tmp);
151
if (TCG_TARGET_REG_BITS == 32 && (opc & MO_SIZE) == MO_64) {
134
-
152
if (opc & MO_BSWAP) {
135
return true;
153
@@ -XXX,XX +XXX,XX @@ static void tcg_out_qemu_ldst_i128(TCGContext *s, TCGReg datalo, TCGReg datahi,
136
}
154
uint32_t insn;
137
155
TCGReg index;
138
@@ -XXX,XX +XXX,XX @@ static bool trans_VMSR_VMRS(DisasContext *s, arg_VMSR_VMRS *a)
156
139
if (a->rt == 15) {
157
- ldst = prepare_host_addr(s, &h, addr_reg, -1, oi, is_ld);
140
/* Set the 4 flag bits in the CPSR. */
158
+ ldst = prepare_host_addr(s, &h, addr_reg, oi, is_ld);
141
gen_set_nzcv(tmp);
159
142
- tcg_temp_free_i32(tmp);
160
/* Compose the final address, as LQ/STQ have no indexing. */
143
} else {
161
index = h.index;
144
store_reg(s, a->rt, tmp);
162
@@ -XXX,XX +XXX,XX @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, TCGType type,
145
}
163
break;
146
@@ -XXX,XX +XXX,XX @@ static bool trans_VMSR_VMRS(DisasContext *s, arg_VMSR_VMRS *a)
164
147
case ARM_VFP_FPSCR:
165
case INDEX_op_qemu_ld_i32:
148
tmp = load_reg(s, a->rt);
166
- tcg_out_qemu_ld(s, args[0], -1, args[1], -1, args[2], TCG_TYPE_I32);
149
gen_helper_vfp_set_fpscr(cpu_env, tmp);
167
+ tcg_out_qemu_ld(s, args[0], -1, args[1], args[2], TCG_TYPE_I32);
150
- tcg_temp_free_i32(tmp);
168
break;
151
gen_lookup_tb(s);
169
case INDEX_op_qemu_ld_i64:
152
break;
170
if (TCG_TARGET_REG_BITS == 64) {
153
case ARM_VFP_FPEXC:
171
- tcg_out_qemu_ld(s, args[0], -1, args[1], -1,
154
@@ -XXX,XX +XXX,XX @@ static bool trans_VMOV_half(DisasContext *s, arg_VMOV_single *a)
172
- args[2], TCG_TYPE_I64);
155
tmp = load_reg(s, a->rt);
173
+ tcg_out_qemu_ld(s, args[0], -1, args[1], args[2], TCG_TYPE_I64);
156
tcg_gen_andi_i32(tmp, tmp, 0xffff);
174
} else {
157
vfp_store_reg32(tmp, a->vn);
175
- tcg_out_qemu_ld(s, args[0], args[1], args[2], -1,
158
- tcg_temp_free_i32(tmp);
176
+ tcg_out_qemu_ld(s, args[0], args[1], args[2],
159
}
177
args[3], TCG_TYPE_I64);
160
178
}
161
return true;
179
break;
162
@@ -XXX,XX +XXX,XX @@ static bool trans_VMOV_single(DisasContext *s, arg_VMOV_single *a)
180
@@ -XXX,XX +XXX,XX @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, TCGType type,
163
if (a->rt == 15) {
181
break;
164
/* Set the 4 flag bits in the CPSR. */
182
165
gen_set_nzcv(tmp);
183
case INDEX_op_qemu_st_i32:
166
- tcg_temp_free_i32(tmp);
184
- tcg_out_qemu_st(s, args[0], -1, args[1], -1, args[2], TCG_TYPE_I32);
167
} else {
185
+ tcg_out_qemu_st(s, args[0], -1, args[1], args[2], TCG_TYPE_I32);
168
store_reg(s, a->rt, tmp);
186
break;
169
}
187
case INDEX_op_qemu_st_i64:
170
@@ -XXX,XX +XXX,XX @@ static bool trans_VMOV_single(DisasContext *s, arg_VMOV_single *a)
188
if (TCG_TARGET_REG_BITS == 64) {
171
/* general purpose register to VFP */
189
- tcg_out_qemu_st(s, args[0], -1, args[1], -1,
172
tmp = load_reg(s, a->rt);
190
- args[2], TCG_TYPE_I64);
173
vfp_store_reg32(tmp, a->vn);
191
+ tcg_out_qemu_st(s, args[0], -1, args[1], args[2], TCG_TYPE_I64);
174
- tcg_temp_free_i32(tmp);
192
} else {
175
}
193
- tcg_out_qemu_st(s, args[0], args[1], args[2], -1,
176
194
+ tcg_out_qemu_st(s, args[0], args[1], args[2],
177
return true;
195
args[3], TCG_TYPE_I64);
178
@@ -XXX,XX +XXX,XX @@ static bool trans_VMOV_64_sp(DisasContext *s, arg_VMOV_64_sp *a)
196
}
179
/* gpreg to fpreg */
197
break;
180
tmp = load_reg(s, a->rt);
181
vfp_store_reg32(tmp, a->vm);
182
- tcg_temp_free_i32(tmp);
183
tmp = load_reg(s, a->rt2);
184
vfp_store_reg32(tmp, a->vm + 1);
185
- tcg_temp_free_i32(tmp);
186
}
187
188
return true;
189
@@ -XXX,XX +XXX,XX @@ static bool trans_VMOV_64_dp(DisasContext *s, arg_VMOV_64_dp *a)
190
/* gpreg to fpreg */
191
tmp = load_reg(s, a->rt);
192
vfp_store_reg32(tmp, a->vm * 2);
193
- tcg_temp_free_i32(tmp);
194
tmp = load_reg(s, a->rt2);
195
vfp_store_reg32(tmp, a->vm * 2 + 1);
196
- tcg_temp_free_i32(tmp);
197
}
198
199
return true;
200
@@ -XXX,XX +XXX,XX @@ static bool trans_VLDR_VSTR_hp(DisasContext *s, arg_VLDR_VSTR_sp *a)
201
vfp_load_reg32(tmp, a->vd);
202
gen_aa32_st_i32(s, tmp, addr, get_mem_index(s), MO_UW | MO_ALIGN);
203
}
204
- tcg_temp_free_i32(tmp);
205
- tcg_temp_free_i32(addr);
206
-
207
return true;
208
}
209
210
@@ -XXX,XX +XXX,XX @@ static bool trans_VLDR_VSTR_sp(DisasContext *s, arg_VLDR_VSTR_sp *a)
211
vfp_load_reg32(tmp, a->vd);
212
gen_aa32_st_i32(s, tmp, addr, get_mem_index(s), MO_UL | MO_ALIGN);
213
}
214
- tcg_temp_free_i32(tmp);
215
- tcg_temp_free_i32(addr);
216
-
217
return true;
218
}
219
220
@@ -XXX,XX +XXX,XX @@ static bool trans_VLDR_VSTR_dp(DisasContext *s, arg_VLDR_VSTR_dp *a)
221
vfp_load_reg64(tmp, a->vd);
222
gen_aa32_st_i64(s, tmp, addr, get_mem_index(s), MO_UQ | MO_ALIGN_4);
223
}
224
- tcg_temp_free_i64(tmp);
225
- tcg_temp_free_i32(addr);
226
-
227
return true;
228
}
229
230
@@ -XXX,XX +XXX,XX @@ static bool trans_VLDM_VSTM_sp(DisasContext *s, arg_VLDM_VSTM_sp *a)
231
}
232
tcg_gen_addi_i32(addr, addr, offset);
233
}
234
- tcg_temp_free_i32(tmp);
235
if (a->w) {
236
/* writeback */
237
if (a->p) {
238
@@ -XXX,XX +XXX,XX @@ static bool trans_VLDM_VSTM_sp(DisasContext *s, arg_VLDM_VSTM_sp *a)
239
tcg_gen_addi_i32(addr, addr, offset);
240
}
241
store_reg(s, a->rn, addr);
242
- } else {
243
- tcg_temp_free_i32(addr);
244
}
245
246
clear_eci_state(s);
247
@@ -XXX,XX +XXX,XX @@ static bool trans_VLDM_VSTM_dp(DisasContext *s, arg_VLDM_VSTM_dp *a)
248
}
249
tcg_gen_addi_i32(addr, addr, offset);
250
}
251
- tcg_temp_free_i64(tmp);
252
if (a->w) {
253
/* writeback */
254
if (a->p) {
255
@@ -XXX,XX +XXX,XX @@ static bool trans_VLDM_VSTM_dp(DisasContext *s, arg_VLDM_VSTM_dp *a)
256
tcg_gen_addi_i32(addr, addr, offset);
257
}
258
store_reg(s, a->rn, addr);
259
- } else {
260
- tcg_temp_free_i32(addr);
261
}
262
263
clear_eci_state(s);
264
@@ -XXX,XX +XXX,XX @@ static bool do_vfp_3op_sp(DisasContext *s, VFPGen3OpSPFn *fn,
265
vfp_load_reg32(f1, vm);
266
}
267
}
268
-
269
- tcg_temp_free_i32(f0);
270
- tcg_temp_free_i32(f1);
271
- tcg_temp_free_i32(fd);
272
- tcg_temp_free_ptr(fpst);
273
-
274
return true;
275
}
276
277
@@ -XXX,XX +XXX,XX @@ static bool do_vfp_3op_hp(DisasContext *s, VFPGen3OpSPFn *fn,
278
}
279
fn(fd, f0, f1, fpst);
280
vfp_store_reg32(fd, vd);
281
-
282
- tcg_temp_free_i32(f0);
283
- tcg_temp_free_i32(f1);
284
- tcg_temp_free_i32(fd);
285
- tcg_temp_free_ptr(fpst);
286
-
287
return true;
288
}
289
290
@@ -XXX,XX +XXX,XX @@ static bool do_vfp_3op_dp(DisasContext *s, VFPGen3OpDPFn *fn,
291
vfp_load_reg64(f1, vm);
292
}
293
}
294
-
295
- tcg_temp_free_i64(f0);
296
- tcg_temp_free_i64(f1);
297
- tcg_temp_free_i64(fd);
298
- tcg_temp_free_ptr(fpst);
299
-
300
return true;
301
}
302
303
@@ -XXX,XX +XXX,XX @@ static bool do_vfp_2op_sp(DisasContext *s, VFPGen2OpSPFn *fn, int vd, int vm)
304
vm = vfp_advance_sreg(vm, delta_m);
305
vfp_load_reg32(f0, vm);
306
}
307
-
308
- tcg_temp_free_i32(f0);
309
- tcg_temp_free_i32(fd);
310
-
311
return true;
312
}
313
314
@@ -XXX,XX +XXX,XX @@ static bool do_vfp_2op_hp(DisasContext *s, VFPGen2OpSPFn *fn, int vd, int vm)
315
vfp_load_reg32(f0, vm);
316
fn(f0, f0);
317
vfp_store_reg32(f0, vd);
318
- tcg_temp_free_i32(f0);
319
320
return true;
321
}
322
@@ -XXX,XX +XXX,XX @@ static bool do_vfp_2op_dp(DisasContext *s, VFPGen2OpDPFn *fn, int vd, int vm)
323
vd = vfp_advance_dreg(vm, delta_m);
324
vfp_load_reg64(f0, vm);
325
}
326
-
327
- tcg_temp_free_i64(f0);
328
- tcg_temp_free_i64(fd);
329
-
330
return true;
331
}
332
333
@@ -XXX,XX +XXX,XX @@ static void gen_VMLA_hp(TCGv_i32 vd, TCGv_i32 vn, TCGv_i32 vm, TCGv_ptr fpst)
334
335
gen_helper_vfp_mulh(tmp, vn, vm, fpst);
336
gen_helper_vfp_addh(vd, vd, tmp, fpst);
337
- tcg_temp_free_i32(tmp);
338
}
339
340
static bool trans_VMLA_hp(DisasContext *s, arg_VMLA_sp *a)
341
@@ -XXX,XX +XXX,XX @@ static void gen_VMLA_sp(TCGv_i32 vd, TCGv_i32 vn, TCGv_i32 vm, TCGv_ptr fpst)
342
343
gen_helper_vfp_muls(tmp, vn, vm, fpst);
344
gen_helper_vfp_adds(vd, vd, tmp, fpst);
345
- tcg_temp_free_i32(tmp);
346
}
347
348
static bool trans_VMLA_sp(DisasContext *s, arg_VMLA_sp *a)
349
@@ -XXX,XX +XXX,XX @@ static void gen_VMLA_dp(TCGv_i64 vd, TCGv_i64 vn, TCGv_i64 vm, TCGv_ptr fpst)
350
351
gen_helper_vfp_muld(tmp, vn, vm, fpst);
352
gen_helper_vfp_addd(vd, vd, tmp, fpst);
353
- tcg_temp_free_i64(tmp);
354
}
355
356
static bool trans_VMLA_dp(DisasContext *s, arg_VMLA_dp *a)
357
@@ -XXX,XX +XXX,XX @@ static void gen_VMLS_hp(TCGv_i32 vd, TCGv_i32 vn, TCGv_i32 vm, TCGv_ptr fpst)
358
gen_helper_vfp_mulh(tmp, vn, vm, fpst);
359
gen_helper_vfp_negh(tmp, tmp);
360
gen_helper_vfp_addh(vd, vd, tmp, fpst);
361
- tcg_temp_free_i32(tmp);
362
}
363
364
static bool trans_VMLS_hp(DisasContext *s, arg_VMLS_sp *a)
365
@@ -XXX,XX +XXX,XX @@ static void gen_VMLS_sp(TCGv_i32 vd, TCGv_i32 vn, TCGv_i32 vm, TCGv_ptr fpst)
366
gen_helper_vfp_muls(tmp, vn, vm, fpst);
367
gen_helper_vfp_negs(tmp, tmp);
368
gen_helper_vfp_adds(vd, vd, tmp, fpst);
369
- tcg_temp_free_i32(tmp);
370
}
371
372
static bool trans_VMLS_sp(DisasContext *s, arg_VMLS_sp *a)
373
@@ -XXX,XX +XXX,XX @@ static void gen_VMLS_dp(TCGv_i64 vd, TCGv_i64 vn, TCGv_i64 vm, TCGv_ptr fpst)
374
gen_helper_vfp_muld(tmp, vn, vm, fpst);
375
gen_helper_vfp_negd(tmp, tmp);
376
gen_helper_vfp_addd(vd, vd, tmp, fpst);
377
- tcg_temp_free_i64(tmp);
378
}
379
380
static bool trans_VMLS_dp(DisasContext *s, arg_VMLS_dp *a)
381
@@ -XXX,XX +XXX,XX @@ static void gen_VNMLS_hp(TCGv_i32 vd, TCGv_i32 vn, TCGv_i32 vm, TCGv_ptr fpst)
382
gen_helper_vfp_mulh(tmp, vn, vm, fpst);
383
gen_helper_vfp_negh(vd, vd);
384
gen_helper_vfp_addh(vd, vd, tmp, fpst);
385
- tcg_temp_free_i32(tmp);
386
}
387
388
static bool trans_VNMLS_hp(DisasContext *s, arg_VNMLS_sp *a)
389
@@ -XXX,XX +XXX,XX @@ static void gen_VNMLS_sp(TCGv_i32 vd, TCGv_i32 vn, TCGv_i32 vm, TCGv_ptr fpst)
390
gen_helper_vfp_muls(tmp, vn, vm, fpst);
391
gen_helper_vfp_negs(vd, vd);
392
gen_helper_vfp_adds(vd, vd, tmp, fpst);
393
- tcg_temp_free_i32(tmp);
394
}
395
396
static bool trans_VNMLS_sp(DisasContext *s, arg_VNMLS_sp *a)
397
@@ -XXX,XX +XXX,XX @@ static void gen_VNMLS_dp(TCGv_i64 vd, TCGv_i64 vn, TCGv_i64 vm, TCGv_ptr fpst)
398
gen_helper_vfp_muld(tmp, vn, vm, fpst);
399
gen_helper_vfp_negd(vd, vd);
400
gen_helper_vfp_addd(vd, vd, tmp, fpst);
401
- tcg_temp_free_i64(tmp);
402
}
403
404
static bool trans_VNMLS_dp(DisasContext *s, arg_VNMLS_dp *a)
405
@@ -XXX,XX +XXX,XX @@ static void gen_VNMLA_hp(TCGv_i32 vd, TCGv_i32 vn, TCGv_i32 vm, TCGv_ptr fpst)
406
gen_helper_vfp_negh(tmp, tmp);
407
gen_helper_vfp_negh(vd, vd);
408
gen_helper_vfp_addh(vd, vd, tmp, fpst);
409
- tcg_temp_free_i32(tmp);
410
}
411
412
static bool trans_VNMLA_hp(DisasContext *s, arg_VNMLA_sp *a)
413
@@ -XXX,XX +XXX,XX @@ static void gen_VNMLA_sp(TCGv_i32 vd, TCGv_i32 vn, TCGv_i32 vm, TCGv_ptr fpst)
414
gen_helper_vfp_negs(tmp, tmp);
415
gen_helper_vfp_negs(vd, vd);
416
gen_helper_vfp_adds(vd, vd, tmp, fpst);
417
- tcg_temp_free_i32(tmp);
418
}
419
420
static bool trans_VNMLA_sp(DisasContext *s, arg_VNMLA_sp *a)
421
@@ -XXX,XX +XXX,XX @@ static void gen_VNMLA_dp(TCGv_i64 vd, TCGv_i64 vn, TCGv_i64 vm, TCGv_ptr fpst)
422
gen_helper_vfp_negd(tmp, tmp);
423
gen_helper_vfp_negd(vd, vd);
424
gen_helper_vfp_addd(vd, vd, tmp, fpst);
425
- tcg_temp_free_i64(tmp);
426
}
427
428
static bool trans_VNMLA_dp(DisasContext *s, arg_VNMLA_dp *a)
429
@@ -XXX,XX +XXX,XX @@ static bool do_vfm_hp(DisasContext *s, arg_VFMA_sp *a, bool neg_n, bool neg_d)
430
fpst = fpstatus_ptr(FPST_FPCR_F16);
431
gen_helper_vfp_muladdh(vd, vn, vm, vd, fpst);
432
vfp_store_reg32(vd, a->vd);
433
-
434
- tcg_temp_free_ptr(fpst);
435
- tcg_temp_free_i32(vn);
436
- tcg_temp_free_i32(vm);
437
- tcg_temp_free_i32(vd);
438
-
439
return true;
440
}
441
442
@@ -XXX,XX +XXX,XX @@ static bool do_vfm_sp(DisasContext *s, arg_VFMA_sp *a, bool neg_n, bool neg_d)
443
fpst = fpstatus_ptr(FPST_FPCR);
444
gen_helper_vfp_muladds(vd, vn, vm, vd, fpst);
445
vfp_store_reg32(vd, a->vd);
446
-
447
- tcg_temp_free_ptr(fpst);
448
- tcg_temp_free_i32(vn);
449
- tcg_temp_free_i32(vm);
450
- tcg_temp_free_i32(vd);
451
-
452
return true;
453
}
454
455
@@ -XXX,XX +XXX,XX @@ static bool do_vfm_dp(DisasContext *s, arg_VFMA_dp *a, bool neg_n, bool neg_d)
456
fpst = fpstatus_ptr(FPST_FPCR);
457
gen_helper_vfp_muladdd(vd, vn, vm, vd, fpst);
458
vfp_store_reg64(vd, a->vd);
459
-
460
- tcg_temp_free_ptr(fpst);
461
- tcg_temp_free_i64(vn);
462
- tcg_temp_free_i64(vm);
463
- tcg_temp_free_i64(vd);
464
-
465
return true;
466
}
467
468
@@ -XXX,XX +XXX,XX @@ static bool trans_VCMP_hp(DisasContext *s, arg_VCMP_sp *a)
469
} else {
470
gen_helper_vfp_cmph(vd, vm, cpu_env);
471
}
472
-
473
- tcg_temp_free_i32(vd);
474
- tcg_temp_free_i32(vm);
475
-
476
return true;
477
}
478
479
@@ -XXX,XX +XXX,XX @@ static bool trans_VCMP_sp(DisasContext *s, arg_VCMP_sp *a)
480
} else {
481
gen_helper_vfp_cmps(vd, vm, cpu_env);
482
}
483
-
484
- tcg_temp_free_i32(vd);
485
- tcg_temp_free_i32(vm);
486
-
487
return true;
488
}
489
490
@@ -XXX,XX +XXX,XX @@ static bool trans_VCMP_dp(DisasContext *s, arg_VCMP_dp *a)
491
} else {
492
gen_helper_vfp_cmpd(vd, vm, cpu_env);
493
}
494
-
495
- tcg_temp_free_i64(vd);
496
- tcg_temp_free_i64(vm);
497
-
498
return true;
499
}
500
501
@@ -XXX,XX +XXX,XX @@ static bool trans_VCVT_f32_f16(DisasContext *s, arg_VCVT_f32_f16 *a)
502
tcg_gen_ld16u_i32(tmp, cpu_env, vfp_f16_offset(a->vm, a->t));
503
gen_helper_vfp_fcvt_f16_to_f32(tmp, tmp, fpst, ahp_mode);
504
vfp_store_reg32(tmp, a->vd);
505
- tcg_temp_free_i32(ahp_mode);
506
- tcg_temp_free_ptr(fpst);
507
- tcg_temp_free_i32(tmp);
508
return true;
509
}
510
511
@@ -XXX,XX +XXX,XX @@ static bool trans_VCVT_f64_f16(DisasContext *s, arg_VCVT_f64_f16 *a)
512
vd = tcg_temp_new_i64();
513
gen_helper_vfp_fcvt_f16_to_f64(vd, tmp, fpst, ahp_mode);
514
vfp_store_reg64(vd, a->vd);
515
- tcg_temp_free_i32(ahp_mode);
516
- tcg_temp_free_ptr(fpst);
517
- tcg_temp_free_i32(tmp);
518
- tcg_temp_free_i64(vd);
519
return true;
520
}
521
522
@@ -XXX,XX +XXX,XX @@ static bool trans_VCVT_b16_f32(DisasContext *s, arg_VCVT_b16_f32 *a)
523
vfp_load_reg32(tmp, a->vm);
524
gen_helper_bfcvt(tmp, tmp, fpst);
525
tcg_gen_st16_i32(tmp, cpu_env, vfp_f16_offset(a->vd, a->t));
526
- tcg_temp_free_ptr(fpst);
527
- tcg_temp_free_i32(tmp);
528
return true;
529
}
530
531
@@ -XXX,XX +XXX,XX @@ static bool trans_VCVT_f16_f32(DisasContext *s, arg_VCVT_f16_f32 *a)
532
vfp_load_reg32(tmp, a->vm);
533
gen_helper_vfp_fcvt_f32_to_f16(tmp, tmp, fpst, ahp_mode);
534
tcg_gen_st16_i32(tmp, cpu_env, vfp_f16_offset(a->vd, a->t));
535
- tcg_temp_free_i32(ahp_mode);
536
- tcg_temp_free_ptr(fpst);
537
- tcg_temp_free_i32(tmp);
538
return true;
539
}
540
541
@@ -XXX,XX +XXX,XX @@ static bool trans_VCVT_f16_f64(DisasContext *s, arg_VCVT_f16_f64 *a)
542
543
vfp_load_reg64(vm, a->vm);
544
gen_helper_vfp_fcvt_f64_to_f16(tmp, vm, fpst, ahp_mode);
545
- tcg_temp_free_i64(vm);
546
tcg_gen_st16_i32(tmp, cpu_env, vfp_f16_offset(a->vd, a->t));
547
- tcg_temp_free_i32(ahp_mode);
548
- tcg_temp_free_ptr(fpst);
549
- tcg_temp_free_i32(tmp);
550
return true;
551
}
552
553
@@ -XXX,XX +XXX,XX @@ static bool trans_VRINTR_hp(DisasContext *s, arg_VRINTR_sp *a)
554
fpst = fpstatus_ptr(FPST_FPCR_F16);
555
gen_helper_rinth(tmp, tmp, fpst);
556
vfp_store_reg32(tmp, a->vd);
557
- tcg_temp_free_ptr(fpst);
558
- tcg_temp_free_i32(tmp);
559
return true;
560
}
561
562
@@ -XXX,XX +XXX,XX @@ static bool trans_VRINTR_sp(DisasContext *s, arg_VRINTR_sp *a)
563
fpst = fpstatus_ptr(FPST_FPCR);
564
gen_helper_rints(tmp, tmp, fpst);
565
vfp_store_reg32(tmp, a->vd);
566
- tcg_temp_free_ptr(fpst);
567
- tcg_temp_free_i32(tmp);
568
return true;
569
}
570
571
@@ -XXX,XX +XXX,XX @@ static bool trans_VRINTR_dp(DisasContext *s, arg_VRINTR_dp *a)
572
fpst = fpstatus_ptr(FPST_FPCR);
573
gen_helper_rintd(tmp, tmp, fpst);
574
vfp_store_reg64(tmp, a->vd);
575
- tcg_temp_free_ptr(fpst);
576
- tcg_temp_free_i64(tmp);
577
return true;
578
}
579
580
@@ -XXX,XX +XXX,XX @@ static bool trans_VRINTZ_hp(DisasContext *s, arg_VRINTZ_sp *a)
581
gen_helper_rinth(tmp, tmp, fpst);
582
gen_helper_set_rmode(tcg_rmode, tcg_rmode, fpst);
583
vfp_store_reg32(tmp, a->vd);
584
- tcg_temp_free_ptr(fpst);
585
- tcg_temp_free_i32(tcg_rmode);
586
- tcg_temp_free_i32(tmp);
587
return true;
588
}
589
590
@@ -XXX,XX +XXX,XX @@ static bool trans_VRINTZ_sp(DisasContext *s, arg_VRINTZ_sp *a)
591
gen_helper_rints(tmp, tmp, fpst);
592
gen_helper_set_rmode(tcg_rmode, tcg_rmode, fpst);
593
vfp_store_reg32(tmp, a->vd);
594
- tcg_temp_free_ptr(fpst);
595
- tcg_temp_free_i32(tcg_rmode);
596
- tcg_temp_free_i32(tmp);
597
return true;
598
}
599
600
@@ -XXX,XX +XXX,XX @@ static bool trans_VRINTZ_dp(DisasContext *s, arg_VRINTZ_dp *a)
601
gen_helper_rintd(tmp, tmp, fpst);
602
gen_helper_set_rmode(tcg_rmode, tcg_rmode, fpst);
603
vfp_store_reg64(tmp, a->vd);
604
- tcg_temp_free_ptr(fpst);
605
- tcg_temp_free_i64(tmp);
606
- tcg_temp_free_i32(tcg_rmode);
607
return true;
608
}
609
610
@@ -XXX,XX +XXX,XX @@ static bool trans_VRINTX_hp(DisasContext *s, arg_VRINTX_sp *a)
611
fpst = fpstatus_ptr(FPST_FPCR_F16);
612
gen_helper_rinth_exact(tmp, tmp, fpst);
613
vfp_store_reg32(tmp, a->vd);
614
- tcg_temp_free_ptr(fpst);
615
- tcg_temp_free_i32(tmp);
616
return true;
617
}
618
619
@@ -XXX,XX +XXX,XX @@ static bool trans_VRINTX_sp(DisasContext *s, arg_VRINTX_sp *a)
620
fpst = fpstatus_ptr(FPST_FPCR);
621
gen_helper_rints_exact(tmp, tmp, fpst);
622
vfp_store_reg32(tmp, a->vd);
623
- tcg_temp_free_ptr(fpst);
624
- tcg_temp_free_i32(tmp);
625
return true;
626
}
627
628
@@ -XXX,XX +XXX,XX @@ static bool trans_VRINTX_dp(DisasContext *s, arg_VRINTX_dp *a)
629
fpst = fpstatus_ptr(FPST_FPCR);
630
gen_helper_rintd_exact(tmp, tmp, fpst);
631
vfp_store_reg64(tmp, a->vd);
632
- tcg_temp_free_ptr(fpst);
633
- tcg_temp_free_i64(tmp);
634
return true;
635
}
636
637
@@ -XXX,XX +XXX,XX @@ static bool trans_VCVT_sp(DisasContext *s, arg_VCVT_sp *a)
638
vfp_load_reg32(vm, a->vm);
639
gen_helper_vfp_fcvtds(vd, vm, cpu_env);
640
vfp_store_reg64(vd, a->vd);
641
- tcg_temp_free_i32(vm);
642
- tcg_temp_free_i64(vd);
643
return true;
644
}
645
646
@@ -XXX,XX +XXX,XX @@ static bool trans_VCVT_dp(DisasContext *s, arg_VCVT_dp *a)
647
vfp_load_reg64(vm, a->vm);
648
gen_helper_vfp_fcvtsd(vd, vm, cpu_env);
649
vfp_store_reg32(vd, a->vd);
650
- tcg_temp_free_i32(vd);
651
- tcg_temp_free_i64(vm);
652
return true;
653
}
654
655
@@ -XXX,XX +XXX,XX @@ static bool trans_VCVT_int_hp(DisasContext *s, arg_VCVT_int_sp *a)
656
gen_helper_vfp_uitoh(vm, vm, fpst);
657
}
658
vfp_store_reg32(vm, a->vd);
659
- tcg_temp_free_i32(vm);
660
- tcg_temp_free_ptr(fpst);
661
return true;
662
}
663
664
@@ -XXX,XX +XXX,XX @@ static bool trans_VCVT_int_sp(DisasContext *s, arg_VCVT_int_sp *a)
665
gen_helper_vfp_uitos(vm, vm, fpst);
666
}
667
vfp_store_reg32(vm, a->vd);
668
- tcg_temp_free_i32(vm);
669
- tcg_temp_free_ptr(fpst);
670
return true;
671
}
672
673
@@ -XXX,XX +XXX,XX @@ static bool trans_VCVT_int_dp(DisasContext *s, arg_VCVT_int_dp *a)
674
gen_helper_vfp_uitod(vd, vm, fpst);
675
}
676
vfp_store_reg64(vd, a->vd);
677
- tcg_temp_free_i32(vm);
678
- tcg_temp_free_i64(vd);
679
- tcg_temp_free_ptr(fpst);
680
return true;
681
}
682
683
@@ -XXX,XX +XXX,XX @@ static bool trans_VJCVT(DisasContext *s, arg_VJCVT *a)
684
vfp_load_reg64(vm, a->vm);
685
gen_helper_vjcvt(vd, vm, cpu_env);
686
vfp_store_reg32(vd, a->vd);
687
- tcg_temp_free_i64(vm);
688
- tcg_temp_free_i32(vd);
689
return true;
690
}
691
692
@@ -XXX,XX +XXX,XX @@ static bool trans_VCVT_fix_hp(DisasContext *s, arg_VCVT_fix_sp *a)
693
}
694
695
vfp_store_reg32(vd, a->vd);
696
- tcg_temp_free_i32(vd);
697
- tcg_temp_free_ptr(fpst);
698
return true;
699
}
700
701
@@ -XXX,XX +XXX,XX @@ static bool trans_VCVT_fix_sp(DisasContext *s, arg_VCVT_fix_sp *a)
702
}
703
704
vfp_store_reg32(vd, a->vd);
705
- tcg_temp_free_i32(vd);
706
- tcg_temp_free_ptr(fpst);
707
return true;
708
}
709
710
@@ -XXX,XX +XXX,XX @@ static bool trans_VCVT_fix_dp(DisasContext *s, arg_VCVT_fix_dp *a)
711
}
712
713
vfp_store_reg64(vd, a->vd);
714
- tcg_temp_free_i64(vd);
715
- tcg_temp_free_ptr(fpst);
716
return true;
717
}
718
719
@@ -XXX,XX +XXX,XX @@ static bool trans_VCVT_hp_int(DisasContext *s, arg_VCVT_sp_int *a)
720
}
721
}
722
vfp_store_reg32(vm, a->vd);
723
- tcg_temp_free_i32(vm);
724
- tcg_temp_free_ptr(fpst);
725
return true;
726
}
727
728
@@ -XXX,XX +XXX,XX @@ static bool trans_VCVT_sp_int(DisasContext *s, arg_VCVT_sp_int *a)
729
}
730
}
731
vfp_store_reg32(vm, a->vd);
732
- tcg_temp_free_i32(vm);
733
- tcg_temp_free_ptr(fpst);
734
return true;
735
}
736
737
@@ -XXX,XX +XXX,XX @@ static bool trans_VCVT_dp_int(DisasContext *s, arg_VCVT_dp_int *a)
738
}
739
}
740
vfp_store_reg32(vd, a->vd);
741
- tcg_temp_free_i32(vd);
742
- tcg_temp_free_i64(vm);
743
- tcg_temp_free_ptr(fpst);
744
return true;
745
}
746
747
@@ -XXX,XX +XXX,XX @@ static bool trans_VINS(DisasContext *s, arg_VINS *a)
748
vfp_load_reg32(rd, a->vd);
749
tcg_gen_deposit_i32(rd, rd, rm, 16, 16);
750
vfp_store_reg32(rd, a->vd);
751
- tcg_temp_free_i32(rm);
752
- tcg_temp_free_i32(rd);
753
return true;
754
}
755
756
@@ -XXX,XX +XXX,XX @@ static bool trans_VMOVX(DisasContext *s, arg_VINS *a)
757
vfp_load_reg32(rm, a->vm);
758
tcg_gen_shri_i32(rm, rm, 16);
759
vfp_store_reg32(rm, a->vd);
760
- tcg_temp_free_i32(rm);
761
return true;
762
}
763
--
198
--
764
2.34.1
199
2.43.0
200
201
diff view generated by jsdifflib
1
Replace the two uses of asm to expand xgetbv with an inline function.
1
There is now always only one guest address register.
2
Since one of the two has been using the mnemonic, assume that the
3
comment about "older versions of the assember" is obsolete, as even
4
that is 4 years old.
5
2
6
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
3
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
7
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
8
---
5
---
9
include/qemu/cpuid.h | 7 +++++++
6
tcg/tcg.c | 18 +++++++++---------
10
util/bufferiszero.c | 3 +--
7
tcg/aarch64/tcg-target.c.inc | 4 ++--
11
tcg/i386/tcg-target.c.inc | 11 ++++-------
8
tcg/arm/tcg-target.c.inc | 4 ++--
12
3 files changed, 12 insertions(+), 9 deletions(-)
9
tcg/i386/tcg-target.c.inc | 4 ++--
13
10
tcg/loongarch64/tcg-target.c.inc | 4 ++--
14
diff --git a/include/qemu/cpuid.h b/include/qemu/cpuid.h
11
tcg/mips/tcg-target.c.inc | 4 ++--
15
index XXXXXXX..XXXXXXX 100644
12
tcg/ppc/tcg-target.c.inc | 4 ++--
16
--- a/include/qemu/cpuid.h
13
tcg/riscv/tcg-target.c.inc | 4 ++--
17
+++ b/include/qemu/cpuid.h
14
tcg/s390x/tcg-target.c.inc | 4 ++--
18
@@ -XXX,XX +XXX,XX @@
15
tcg/sparc64/tcg-target.c.inc | 4 ++--
19
#define bit_LZCNT (1 << 5)
16
10 files changed, 27 insertions(+), 27 deletions(-)
20
#endif
17
21
18
diff --git a/tcg/tcg.c b/tcg/tcg.c
22
+static inline unsigned xgetbv_low(unsigned c)
19
index XXXXXXX..XXXXXXX 100644
23
+{
20
--- a/tcg/tcg.c
24
+ unsigned a, d;
21
+++ b/tcg/tcg.c
25
+ asm("xgetbv" : "=a"(a), "=d"(d) : "c"(c));
22
@@ -XXX,XX +XXX,XX @@ struct TCGLabelQemuLdst {
26
+ return a;
23
bool is_ld; /* qemu_ld: true, qemu_st: false */
27
+}
24
MemOpIdx oi;
28
+
25
TCGType type; /* result type of a load */
29
#endif /* QEMU_CPUID_H */
26
- TCGReg addrlo_reg; /* reg index for low word of guest virtual addr */
30
diff --git a/util/bufferiszero.c b/util/bufferiszero.c
27
- TCGReg addrhi_reg; /* reg index for high word of guest virtual addr */
31
index XXXXXXX..XXXXXXX 100644
28
+ TCGReg addr_reg; /* reg index for guest virtual addr */
32
--- a/util/bufferiszero.c
29
TCGReg datalo_reg; /* reg index for low word to be loaded or stored */
33
+++ b/util/bufferiszero.c
30
TCGReg datahi_reg; /* reg index for high word to be loaded or stored */
34
@@ -XXX,XX +XXX,XX @@ static void __attribute__((constructor)) init_cpuid_cache(void)
31
const tcg_insn_unit *raddr; /* addr of the next IR of qemu_ld/st IR */
35
32
@@ -XXX,XX +XXX,XX @@ static void tcg_out_ld_helper_args(TCGContext *s, const TCGLabelQemuLdst *ldst,
36
/* We must check that AVX is not just available, but usable. */
33
*/
37
if ((c & bit_OSXSAVE) && (c & bit_AVX) && max >= 7) {
34
tcg_out_helper_add_mov(mov, loc + HOST_BIG_ENDIAN,
38
- int bv;
35
TCG_TYPE_I32, TCG_TYPE_I32,
39
- __asm("xgetbv" : "=a"(bv), "=d"(d) : "c"(0));
36
- ldst->addrlo_reg, -1);
40
+ unsigned bv = xgetbv_low(0);
37
+ ldst->addr_reg, -1);
41
__cpuid_count(7, 0, a, b, c, d);
38
tcg_out_helper_load_slots(s, 1, mov, parm);
42
if ((bv & 0x6) == 0x6 && (b & bit_AVX2)) {
39
43
cache |= CACHE_AVX2;
40
tcg_out_helper_load_imm(s, loc[!HOST_BIG_ENDIAN].arg_slot,
41
@@ -XXX,XX +XXX,XX @@ static void tcg_out_ld_helper_args(TCGContext *s, const TCGLabelQemuLdst *ldst,
42
next_arg += 2;
43
} else {
44
nmov = tcg_out_helper_add_mov(mov, loc, TCG_TYPE_I64, s->addr_type,
45
- ldst->addrlo_reg, ldst->addrhi_reg);
46
+ ldst->addr_reg, -1);
47
tcg_out_helper_load_slots(s, nmov, mov, parm);
48
next_arg += nmov;
49
}
50
@@ -XXX,XX +XXX,XX @@ static void tcg_out_st_helper_args(TCGContext *s, const TCGLabelQemuLdst *ldst,
51
52
/* Handle addr argument. */
53
loc = &info->in[next_arg];
54
- if (TCG_TARGET_REG_BITS == 32 && s->addr_type == TCG_TYPE_I32) {
55
+ tcg_debug_assert(s->addr_type <= TCG_TYPE_REG);
56
+ if (TCG_TARGET_REG_BITS == 32) {
57
/*
58
- * 32-bit host with 32-bit guest: zero-extend the guest address
59
+ * 32-bit host (and thus 32-bit guest): zero-extend the guest address
60
* to 64-bits for the helper by storing the low part. Later,
61
* after we have processed the register inputs, we will load a
62
* zero for the high part.
63
*/
64
tcg_out_helper_add_mov(mov, loc + HOST_BIG_ENDIAN,
65
TCG_TYPE_I32, TCG_TYPE_I32,
66
- ldst->addrlo_reg, -1);
67
+ ldst->addr_reg, -1);
68
next_arg += 2;
69
nmov += 1;
70
} else {
71
n = tcg_out_helper_add_mov(mov, loc, TCG_TYPE_I64, s->addr_type,
72
- ldst->addrlo_reg, ldst->addrhi_reg);
73
+ ldst->addr_reg, -1);
74
next_arg += n;
75
nmov += n;
76
}
77
@@ -XXX,XX +XXX,XX @@ static void tcg_out_st_helper_args(TCGContext *s, const TCGLabelQemuLdst *ldst,
78
g_assert_not_reached();
79
}
80
81
- if (TCG_TARGET_REG_BITS == 32 && s->addr_type == TCG_TYPE_I32) {
82
+ if (TCG_TARGET_REG_BITS == 32) {
83
/* Zero extend the address by loading a zero for the high part. */
84
loc = &info->in[1 + !HOST_BIG_ENDIAN];
85
tcg_out_helper_load_imm(s, loc->arg_slot, TCG_TYPE_I32, 0, parm);
86
diff --git a/tcg/aarch64/tcg-target.c.inc b/tcg/aarch64/tcg-target.c.inc
87
index XXXXXXX..XXXXXXX 100644
88
--- a/tcg/aarch64/tcg-target.c.inc
89
+++ b/tcg/aarch64/tcg-target.c.inc
90
@@ -XXX,XX +XXX,XX @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
91
ldst = new_ldst_label(s);
92
ldst->is_ld = is_ld;
93
ldst->oi = oi;
94
- ldst->addrlo_reg = addr_reg;
95
+ ldst->addr_reg = addr_reg;
96
97
mask_type = (s->page_bits + s->tlb_dyn_max_bits > 32
98
? TCG_TYPE_I64 : TCG_TYPE_I32);
99
@@ -XXX,XX +XXX,XX @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
100
101
ldst->is_ld = is_ld;
102
ldst->oi = oi;
103
- ldst->addrlo_reg = addr_reg;
104
+ ldst->addr_reg = addr_reg;
105
106
/* tst addr, #mask */
107
tcg_out_logicali(s, I3404_ANDSI, 0, TCG_REG_XZR, addr_reg, a_mask);
108
diff --git a/tcg/arm/tcg-target.c.inc b/tcg/arm/tcg-target.c.inc
109
index XXXXXXX..XXXXXXX 100644
110
--- a/tcg/arm/tcg-target.c.inc
111
+++ b/tcg/arm/tcg-target.c.inc
112
@@ -XXX,XX +XXX,XX @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
113
ldst = new_ldst_label(s);
114
ldst->is_ld = is_ld;
115
ldst->oi = oi;
116
- ldst->addrlo_reg = addr;
117
+ ldst->addr_reg = addr;
118
119
/* Load cpu->neg.tlb.f[mmu_idx].{mask,table} into {r0,r1}. */
120
QEMU_BUILD_BUG_ON(offsetof(CPUTLBDescFast, mask) != 0);
121
@@ -XXX,XX +XXX,XX @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
122
ldst = new_ldst_label(s);
123
ldst->is_ld = is_ld;
124
ldst->oi = oi;
125
- ldst->addrlo_reg = addr;
126
+ ldst->addr_reg = addr;
127
128
/* We are expecting alignment to max out at 7 */
129
tcg_debug_assert(a_mask <= 0xff);
44
diff --git a/tcg/i386/tcg-target.c.inc b/tcg/i386/tcg-target.c.inc
130
diff --git a/tcg/i386/tcg-target.c.inc b/tcg/i386/tcg-target.c.inc
45
index XXXXXXX..XXXXXXX 100644
131
index XXXXXXX..XXXXXXX 100644
46
--- a/tcg/i386/tcg-target.c.inc
132
--- a/tcg/i386/tcg-target.c.inc
47
+++ b/tcg/i386/tcg-target.c.inc
133
+++ b/tcg/i386/tcg-target.c.inc
48
@@ -XXX,XX +XXX,XX @@ static void tcg_target_init(TCGContext *s)
134
@@ -XXX,XX +XXX,XX @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
49
/* There are a number of things we must check before we can be
135
ldst = new_ldst_label(s);
50
sure of not hitting invalid opcode. */
136
ldst->is_ld = is_ld;
51
if (c & bit_OSXSAVE) {
137
ldst->oi = oi;
52
- unsigned xcrl, xcrh;
138
- ldst->addrlo_reg = addr;
53
- /* The xgetbv instruction is not available to older versions of
139
+ ldst->addr_reg = addr;
54
- * the assembler, so we encode the instruction manually.
140
55
- */
141
if (TCG_TARGET_REG_BITS == 64) {
56
- asm(".byte 0x0f, 0x01, 0xd0" : "=a" (xcrl), "=d" (xcrh) : "c" (0));
142
ttype = s->addr_type;
57
- if ((xcrl & 6) == 6) {
143
@@ -XXX,XX +XXX,XX @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
58
+ unsigned bv = xgetbv_low(0);
144
ldst = new_ldst_label(s);
59
+
145
ldst->is_ld = is_ld;
60
+ if ((bv & 6) == 6) {
146
ldst->oi = oi;
61
have_avx1 = (c & bit_AVX) != 0;
147
- ldst->addrlo_reg = addr;
62
have_avx2 = (b7 & bit_AVX2) != 0;
148
+ ldst->addr_reg = addr;
63
149
64
@@ -XXX,XX +XXX,XX @@ static void tcg_target_init(TCGContext *s)
150
/* jne slow_path */
65
* check that OPMASK and all extended ZMM state are enabled
151
jcc = tcg_out_cmp(s, TCG_COND_TSTNE, addr, a_mask, true, false);
66
* even if we're not using them -- the insns will fault.
152
diff --git a/tcg/loongarch64/tcg-target.c.inc b/tcg/loongarch64/tcg-target.c.inc
67
*/
153
index XXXXXXX..XXXXXXX 100644
68
- if ((xcrl & 0xe0) == 0xe0
154
--- a/tcg/loongarch64/tcg-target.c.inc
69
+ if ((bv & 0xe0) == 0xe0
155
+++ b/tcg/loongarch64/tcg-target.c.inc
70
&& (b7 & bit_AVX512F)
156
@@ -XXX,XX +XXX,XX @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
71
&& (b7 & bit_AVX512VL)) {
157
ldst = new_ldst_label(s);
72
have_avx512vl = true;
158
ldst->is_ld = is_ld;
159
ldst->oi = oi;
160
- ldst->addrlo_reg = addr_reg;
161
+ ldst->addr_reg = addr_reg;
162
163
tcg_out_ld(s, TCG_TYPE_PTR, TCG_REG_TMP0, TCG_AREG0, mask_ofs);
164
tcg_out_ld(s, TCG_TYPE_PTR, TCG_REG_TMP1, TCG_AREG0, table_ofs);
165
@@ -XXX,XX +XXX,XX @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
166
167
ldst->is_ld = is_ld;
168
ldst->oi = oi;
169
- ldst->addrlo_reg = addr_reg;
170
+ ldst->addr_reg = addr_reg;
171
172
/*
173
* Without micro-architecture details, we don't know which of
174
diff --git a/tcg/mips/tcg-target.c.inc b/tcg/mips/tcg-target.c.inc
175
index XXXXXXX..XXXXXXX 100644
176
--- a/tcg/mips/tcg-target.c.inc
177
+++ b/tcg/mips/tcg-target.c.inc
178
@@ -XXX,XX +XXX,XX @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
179
ldst = new_ldst_label(s);
180
ldst->is_ld = is_ld;
181
ldst->oi = oi;
182
- ldst->addrlo_reg = addr;
183
+ ldst->addr_reg = addr;
184
185
/* Load tlb_mask[mmu_idx] and tlb_table[mmu_idx]. */
186
tcg_out_ld(s, TCG_TYPE_PTR, TCG_TMP0, TCG_AREG0, mask_off);
187
@@ -XXX,XX +XXX,XX @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
188
189
ldst->is_ld = is_ld;
190
ldst->oi = oi;
191
- ldst->addrlo_reg = addr;
192
+ ldst->addr_reg = addr;
193
194
/* We are expecting a_bits to max out at 7, much lower than ANDI. */
195
tcg_debug_assert(a_bits < 16);
196
diff --git a/tcg/ppc/tcg-target.c.inc b/tcg/ppc/tcg-target.c.inc
197
index XXXXXXX..XXXXXXX 100644
198
--- a/tcg/ppc/tcg-target.c.inc
199
+++ b/tcg/ppc/tcg-target.c.inc
200
@@ -XXX,XX +XXX,XX @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
201
ldst = new_ldst_label(s);
202
ldst->is_ld = is_ld;
203
ldst->oi = oi;
204
- ldst->addrlo_reg = addr;
205
+ ldst->addr_reg = addr;
206
207
/* Load tlb_mask[mmu_idx] and tlb_table[mmu_idx]. */
208
tcg_out_ld(s, TCG_TYPE_PTR, TCG_REG_TMP1, TCG_AREG0, mask_off);
209
@@ -XXX,XX +XXX,XX @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
210
ldst = new_ldst_label(s);
211
ldst->is_ld = is_ld;
212
ldst->oi = oi;
213
- ldst->addrlo_reg = addr;
214
+ ldst->addr_reg = addr;
215
216
/* We are expecting a_bits to max out at 7, much lower than ANDI. */
217
tcg_debug_assert(a_bits < 16);
218
diff --git a/tcg/riscv/tcg-target.c.inc b/tcg/riscv/tcg-target.c.inc
219
index XXXXXXX..XXXXXXX 100644
220
--- a/tcg/riscv/tcg-target.c.inc
221
+++ b/tcg/riscv/tcg-target.c.inc
222
@@ -XXX,XX +XXX,XX @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, TCGReg *pbase,
223
ldst = new_ldst_label(s);
224
ldst->is_ld = is_ld;
225
ldst->oi = oi;
226
- ldst->addrlo_reg = addr_reg;
227
+ ldst->addr_reg = addr_reg;
228
229
init_setting_vtype(s);
230
231
@@ -XXX,XX +XXX,XX @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, TCGReg *pbase,
232
ldst = new_ldst_label(s);
233
ldst->is_ld = is_ld;
234
ldst->oi = oi;
235
- ldst->addrlo_reg = addr_reg;
236
+ ldst->addr_reg = addr_reg;
237
238
init_setting_vtype(s);
239
240
diff --git a/tcg/s390x/tcg-target.c.inc b/tcg/s390x/tcg-target.c.inc
241
index XXXXXXX..XXXXXXX 100644
242
--- a/tcg/s390x/tcg-target.c.inc
243
+++ b/tcg/s390x/tcg-target.c.inc
244
@@ -XXX,XX +XXX,XX @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
245
ldst = new_ldst_label(s);
246
ldst->is_ld = is_ld;
247
ldst->oi = oi;
248
- ldst->addrlo_reg = addr_reg;
249
+ ldst->addr_reg = addr_reg;
250
251
tcg_out_sh64(s, RSY_SRLG, TCG_TMP0, addr_reg, TCG_REG_NONE,
252
s->page_bits - CPU_TLB_ENTRY_BITS);
253
@@ -XXX,XX +XXX,XX @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
254
ldst = new_ldst_label(s);
255
ldst->is_ld = is_ld;
256
ldst->oi = oi;
257
- ldst->addrlo_reg = addr_reg;
258
+ ldst->addr_reg = addr_reg;
259
260
tcg_debug_assert(a_mask <= 0xffff);
261
tcg_out_insn(s, RI, TMLL, addr_reg, a_mask);
262
diff --git a/tcg/sparc64/tcg-target.c.inc b/tcg/sparc64/tcg-target.c.inc
263
index XXXXXXX..XXXXXXX 100644
264
--- a/tcg/sparc64/tcg-target.c.inc
265
+++ b/tcg/sparc64/tcg-target.c.inc
266
@@ -XXX,XX +XXX,XX @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
267
ldst = new_ldst_label(s);
268
ldst->is_ld = is_ld;
269
ldst->oi = oi;
270
- ldst->addrlo_reg = addr_reg;
271
+ ldst->addr_reg = addr_reg;
272
ldst->label_ptr[0] = s->code_ptr;
273
274
/* bne,pn %[xi]cc, label0 */
275
@@ -XXX,XX +XXX,XX @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
276
ldst = new_ldst_label(s);
277
ldst->is_ld = is_ld;
278
ldst->oi = oi;
279
- ldst->addrlo_reg = addr_reg;
280
+ ldst->addr_reg = addr_reg;
281
ldst->label_ptr[0] = s->code_ptr;
282
283
/* bne,pn %icc, label0 */
73
--
284
--
74
2.34.1
285
2.43.0
75
286
76
287
diff view generated by jsdifflib
1
Success from trans_* subroutines should be true.
1
The declaration uses uint64_t for addr.
2
2
3
Fixes: 5fa38eedbd ("target/mips: Convert Vr54xx MACC* opcodes to decodetree")
3
Fixes: 595cd9ce2ec ("plugins: add plugin API to read guest memory")
4
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
4
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
5
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
5
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
6
---
6
---
7
target/mips/tcg/vr54xx_translate.c | 2 +-
7
plugins/api.c | 2 +-
8
1 file changed, 1 insertion(+), 1 deletion(-)
8
1 file changed, 1 insertion(+), 1 deletion(-)
9
9
10
diff --git a/target/mips/tcg/vr54xx_translate.c b/target/mips/tcg/vr54xx_translate.c
10
diff --git a/plugins/api.c b/plugins/api.c
11
index XXXXXXX..XXXXXXX 100644
11
index XXXXXXX..XXXXXXX 100644
12
--- a/target/mips/tcg/vr54xx_translate.c
12
--- a/plugins/api.c
13
+++ b/target/mips/tcg/vr54xx_translate.c
13
+++ b/plugins/api.c
14
@@ -XXX,XX +XXX,XX @@ static bool trans_mult_acc(DisasContext *ctx, arg_r *a,
14
@@ -XXX,XX +XXX,XX @@ GArray *qemu_plugin_get_registers(void)
15
tcg_temp_free(t0);
15
return create_register_handles(regs);
16
tcg_temp_free(t1);
17
18
- return false;
19
+ return true;
20
}
16
}
21
17
22
TRANS(MACC, trans_mult_acc, gen_helper_macc);
18
-bool qemu_plugin_read_memory_vaddr(vaddr addr, GByteArray *data, size_t len)
19
+bool qemu_plugin_read_memory_vaddr(uint64_t addr, GByteArray *data, size_t len)
20
{
21
g_assert(current_cpu);
22
23
--
23
--
24
2.34.1
24
2.43.0
25
25
26
26
diff view generated by jsdifflib
1
While changes are made to prot within tlb_set_page_full, they are
1
The declarations use vaddr for size.
2
an implementation detail of softmmu. Retain the original for any
3
target use of probe_access_full.
4
2
5
Fixes: 4047368938f6 ("accel/tcg: Introduce tlb_set_page_full")
6
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
7
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
3
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
8
---
4
---
9
accel/tcg/cputlb.c | 1 -
5
accel/tcg/cputlb.c | 4 ++--
10
1 file changed, 1 deletion(-)
6
1 file changed, 2 insertions(+), 2 deletions(-)
11
7
12
diff --git a/accel/tcg/cputlb.c b/accel/tcg/cputlb.c
8
diff --git a/accel/tcg/cputlb.c b/accel/tcg/cputlb.c
13
index XXXXXXX..XXXXXXX 100644
9
index XXXXXXX..XXXXXXX 100644
14
--- a/accel/tcg/cputlb.c
10
--- a/accel/tcg/cputlb.c
15
+++ b/accel/tcg/cputlb.c
11
+++ b/accel/tcg/cputlb.c
16
@@ -XXX,XX +XXX,XX @@ void tlb_set_page_full(CPUState *cpu, int mmu_idx,
12
@@ -XXX,XX +XXX,XX @@ void tlb_set_page_full(CPUState *cpu, int mmu_idx,
17
desc->fulltlb[index] = *full;
13
18
desc->fulltlb[index].xlat_section = iotlb - vaddr_page;
14
void tlb_set_page_with_attrs(CPUState *cpu, vaddr addr,
19
desc->fulltlb[index].phys_addr = paddr_page;
15
hwaddr paddr, MemTxAttrs attrs, int prot,
20
- desc->fulltlb[index].prot = prot;
16
- int mmu_idx, uint64_t size)
21
17
+ int mmu_idx, vaddr size)
22
/* Now calculate the new entry */
18
{
23
tn.addend = addend - vaddr_page;
19
CPUTLBEntryFull full = {
20
.phys_addr = paddr,
21
@@ -XXX,XX +XXX,XX @@ void tlb_set_page_with_attrs(CPUState *cpu, vaddr addr,
22
23
void tlb_set_page(CPUState *cpu, vaddr addr,
24
hwaddr paddr, int prot,
25
- int mmu_idx, uint64_t size)
26
+ int mmu_idx, vaddr size)
27
{
28
tlb_set_page_with_attrs(cpu, addr, paddr, MEMTXATTRS_UNSPECIFIED,
29
prot, mmu_idx, size);
24
--
30
--
25
2.34.1
31
2.43.0
diff view generated by jsdifflib
1
All uses are strictly read-only.
1
Since we no longer support 64-bit guests on 32-bit hosts,
2
we can use a 32-bit type on a 32-bit host.
2
3
3
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
4
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
5
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
5
---
6
---
6
target/riscv/translate.c | 4 ++--
7
include/exec/vaddr.h | 16 +++++++++-------
7
target/riscv/insn_trans/trans_rvv.c.inc | 4 ++--
8
1 file changed, 9 insertions(+), 7 deletions(-)
8
target/riscv/insn_trans/trans_rvzfh.c.inc | 2 +-
9
3 files changed, 5 insertions(+), 5 deletions(-)
10
9
11
diff --git a/target/riscv/translate.c b/target/riscv/translate.c
10
diff --git a/include/exec/vaddr.h b/include/exec/vaddr.h
12
index XXXXXXX..XXXXXXX 100644
11
index XXXXXXX..XXXXXXX 100644
13
--- a/target/riscv/translate.c
12
--- a/include/exec/vaddr.h
14
+++ b/target/riscv/translate.c
13
+++ b/include/exec/vaddr.h
15
@@ -XXX,XX +XXX,XX @@ static void gen_nanbox_h(TCGv_i64 out, TCGv_i64 in)
14
@@ -XXX,XX +XXX,XX @@
15
/**
16
* vaddr:
17
* Type wide enough to contain any #target_ulong virtual address.
18
+ * We do not support 64-bit guest on 32-host and detect at configure time.
19
+ * Therefore, a host pointer width will always fit a guest pointer.
16
*/
20
*/
17
static void gen_check_nanbox_h(TCGv_i64 out, TCGv_i64 in)
21
-typedef uint64_t vaddr;
18
{
22
-#define VADDR_PRId PRId64
19
- TCGv_i64 t_max = tcg_const_i64(0xffffffffffff0000ull);
23
-#define VADDR_PRIu PRIu64
20
- TCGv_i64 t_nan = tcg_const_i64(0xffffffffffff7e00ull);
24
-#define VADDR_PRIo PRIo64
21
+ TCGv_i64 t_max = tcg_constant_i64(0xffffffffffff0000ull);
25
-#define VADDR_PRIx PRIx64
22
+ TCGv_i64 t_nan = tcg_constant_i64(0xffffffffffff7e00ull);
26
-#define VADDR_PRIX PRIX64
23
27
-#define VADDR_MAX UINT64_MAX
24
tcg_gen_movcond_i64(TCG_COND_GEU, out, in, t_max, in, t_nan);
28
+typedef uintptr_t vaddr;
25
}
29
+#define VADDR_PRId PRIdPTR
26
diff --git a/target/riscv/insn_trans/trans_rvv.c.inc b/target/riscv/insn_trans/trans_rvv.c.inc
30
+#define VADDR_PRIu PRIuPTR
27
index XXXXXXX..XXXXXXX 100644
31
+#define VADDR_PRIo PRIoPTR
28
--- a/target/riscv/insn_trans/trans_rvv.c.inc
32
+#define VADDR_PRIx PRIxPTR
29
+++ b/target/riscv/insn_trans/trans_rvv.c.inc
33
+#define VADDR_PRIX PRIXPTR
30
@@ -XXX,XX +XXX,XX @@ static bool trans_vsetvli(DisasContext *s, arg_vsetvli *a)
34
+#define VADDR_MAX UINTPTR_MAX
31
35
32
static bool trans_vsetivli(DisasContext *s, arg_vsetivli *a)
36
#endif
33
{
34
- TCGv s1 = tcg_const_tl(a->rs1);
35
- TCGv s2 = tcg_const_tl(a->zimm);
36
+ TCGv s1 = tcg_constant_tl(a->rs1);
37
+ TCGv s2 = tcg_constant_tl(a->zimm);
38
return do_vsetivli(s, a->rd, s1, s2);
39
}
40
41
diff --git a/target/riscv/insn_trans/trans_rvzfh.c.inc b/target/riscv/insn_trans/trans_rvzfh.c.inc
42
index XXXXXXX..XXXXXXX 100644
43
--- a/target/riscv/insn_trans/trans_rvzfh.c.inc
44
+++ b/target/riscv/insn_trans/trans_rvzfh.c.inc
45
@@ -XXX,XX +XXX,XX @@ static bool trans_fsgnjn_h(DisasContext *ctx, arg_fsgnjn_h *a)
46
* Replace bit 15 in rs1 with inverse in rs2.
47
* This formulation retains the nanboxing of rs1.
48
*/
49
- mask = tcg_const_i64(~MAKE_64BIT_MASK(15, 1));
50
+ mask = tcg_constant_i64(~MAKE_64BIT_MASK(15, 1));
51
tcg_gen_not_i64(rs2, rs2);
52
tcg_gen_andc_i64(rs2, rs2, mask);
53
tcg_gen_and_i64(dest, mask, rs1);
54
--
37
--
55
2.34.1
38
2.43.0
56
39
57
40
diff view generated by jsdifflib
1
Compute the eflags write mask separately, leaving one call
1
Since we no longer support 64-bit guests on 32-bit hosts,
2
to the helper. Use tcg_constant_i32.
2
we can use a 32-bit type on a 32-bit host. This shrinks
3
the size of the structure to 16 bytes on a 32-bit host.
3
4
4
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
5
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
5
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
6
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
6
---
7
---
7
target/i386/tcg/translate.c | 55 ++++++++-----------------------------
8
include/exec/tlb-common.h | 10 +++++-----
8
1 file changed, 11 insertions(+), 44 deletions(-)
9
accel/tcg/cputlb.c | 21 ++++-----------------
10
tcg/arm/tcg-target.c.inc | 1 -
11
tcg/mips/tcg-target.c.inc | 12 +++++-------
12
tcg/ppc/tcg-target.c.inc | 21 +++++----------------
13
5 files changed, 19 insertions(+), 46 deletions(-)
9
14
10
diff --git a/target/i386/tcg/translate.c b/target/i386/tcg/translate.c
15
diff --git a/include/exec/tlb-common.h b/include/exec/tlb-common.h
11
index XXXXXXX..XXXXXXX 100644
16
index XXXXXXX..XXXXXXX 100644
12
--- a/target/i386/tcg/translate.c
17
--- a/include/exec/tlb-common.h
13
+++ b/target/i386/tcg/translate.c
18
+++ b/include/exec/tlb-common.h
14
@@ -XXX,XX +XXX,XX @@ static bool disas_insn(DisasContext *s, CPUState *cpu)
19
@@ -XXX,XX +XXX,XX @@
15
case 0x9d: /* popf */
20
#ifndef EXEC_TLB_COMMON_H
16
gen_svm_check_intercept(s, SVM_EXIT_POPF);
21
#define EXEC_TLB_COMMON_H 1
17
if (check_vm86_iopl(s)) {
22
18
- ot = gen_pop_T0(s);
23
-#define CPU_TLB_ENTRY_BITS 5
19
+ int mask = TF_MASK | AC_MASK | ID_MASK | NT_MASK;
24
+#define CPU_TLB_ENTRY_BITS (HOST_LONG_BITS == 32 ? 4 : 5)
20
+
25
21
if (CPL(s) == 0) {
26
/* Minimalized TLB entry for use by TCG fast path. */
22
- if (dflag != MO_16) {
27
typedef union CPUTLBEntry {
23
- gen_helper_write_eflags(cpu_env, s->T0,
28
struct {
24
- tcg_const_i32((TF_MASK | AC_MASK |
29
- uint64_t addr_read;
25
- ID_MASK | NT_MASK |
30
- uint64_t addr_write;
26
- IF_MASK |
31
- uint64_t addr_code;
27
- IOPL_MASK)));
32
+ uintptr_t addr_read;
28
- } else {
33
+ uintptr_t addr_write;
29
- gen_helper_write_eflags(cpu_env, s->T0,
34
+ uintptr_t addr_code;
30
- tcg_const_i32((TF_MASK | AC_MASK |
35
/*
31
- ID_MASK | NT_MASK |
36
* Addend to virtual address to get host address. IO accesses
32
- IF_MASK | IOPL_MASK)
37
* use the corresponding iotlb value.
33
- & 0xffff));
38
@@ -XXX,XX +XXX,XX @@ typedef union CPUTLBEntry {
34
- }
39
* Padding to get a power of two size, as well as index
40
* access to addr_{read,write,code}.
41
*/
42
- uint64_t addr_idx[(1 << CPU_TLB_ENTRY_BITS) / sizeof(uint64_t)];
43
+ uintptr_t addr_idx[(1 << CPU_TLB_ENTRY_BITS) / sizeof(uintptr_t)];
44
} CPUTLBEntry;
45
46
QEMU_BUILD_BUG_ON(sizeof(CPUTLBEntry) != (1 << CPU_TLB_ENTRY_BITS));
47
diff --git a/accel/tcg/cputlb.c b/accel/tcg/cputlb.c
48
index XXXXXXX..XXXXXXX 100644
49
--- a/accel/tcg/cputlb.c
50
+++ b/accel/tcg/cputlb.c
51
@@ -XXX,XX +XXX,XX @@ static inline uint64_t tlb_read_idx(const CPUTLBEntry *entry,
52
{
53
/* Do not rearrange the CPUTLBEntry structure members. */
54
QEMU_BUILD_BUG_ON(offsetof(CPUTLBEntry, addr_read) !=
55
- MMU_DATA_LOAD * sizeof(uint64_t));
56
+ MMU_DATA_LOAD * sizeof(uintptr_t));
57
QEMU_BUILD_BUG_ON(offsetof(CPUTLBEntry, addr_write) !=
58
- MMU_DATA_STORE * sizeof(uint64_t));
59
+ MMU_DATA_STORE * sizeof(uintptr_t));
60
QEMU_BUILD_BUG_ON(offsetof(CPUTLBEntry, addr_code) !=
61
- MMU_INST_FETCH * sizeof(uint64_t));
62
+ MMU_INST_FETCH * sizeof(uintptr_t));
63
64
-#if TARGET_LONG_BITS == 32
65
- /* Use qatomic_read, in case of addr_write; only care about low bits. */
66
- const uint32_t *ptr = (uint32_t *)&entry->addr_idx[access_type];
67
- ptr += HOST_BIG_ENDIAN;
68
- return qatomic_read(ptr);
69
-#else
70
- const uint64_t *ptr = &entry->addr_idx[access_type];
71
+ const uintptr_t *ptr = &entry->addr_idx[access_type];
72
/* ofs might correspond to .addr_write, so use qatomic_read */
73
return qatomic_read(ptr);
74
-#endif
75
}
76
77
static inline uint64_t tlb_addr_write(const CPUTLBEntry *entry)
78
@@ -XXX,XX +XXX,XX @@ static void tlb_reset_dirty_range_locked(CPUTLBEntry *tlb_entry,
79
addr &= TARGET_PAGE_MASK;
80
addr += tlb_entry->addend;
81
if ((addr - start) < length) {
82
-#if TARGET_LONG_BITS == 32
83
- uint32_t *ptr_write = (uint32_t *)&tlb_entry->addr_write;
84
- ptr_write += HOST_BIG_ENDIAN;
85
- qatomic_set(ptr_write, *ptr_write | TLB_NOTDIRTY);
86
-#else
87
qatomic_set(&tlb_entry->addr_write,
88
tlb_entry->addr_write | TLB_NOTDIRTY);
89
-#endif
90
}
91
}
92
}
93
diff --git a/tcg/arm/tcg-target.c.inc b/tcg/arm/tcg-target.c.inc
94
index XXXXXXX..XXXXXXX 100644
95
--- a/tcg/arm/tcg-target.c.inc
96
+++ b/tcg/arm/tcg-target.c.inc
97
@@ -XXX,XX +XXX,XX @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
98
* Add the tlb_table pointer, creating the CPUTLBEntry address in R1.
99
* Load the tlb comparator into R2 and the fast path addend into R1.
100
*/
101
- QEMU_BUILD_BUG_ON(HOST_BIG_ENDIAN);
102
if (cmp_off == 0) {
103
tcg_out_ld32_rwb(s, COND_AL, TCG_REG_R2, TCG_REG_R1, TCG_REG_R0);
104
} else {
105
diff --git a/tcg/mips/tcg-target.c.inc b/tcg/mips/tcg-target.c.inc
106
index XXXXXXX..XXXXXXX 100644
107
--- a/tcg/mips/tcg-target.c.inc
108
+++ b/tcg/mips/tcg-target.c.inc
109
@@ -XXX,XX +XXX,XX @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
110
/* Add the tlb_table pointer, creating the CPUTLBEntry address. */
111
tcg_out_opc_reg(s, ALIAS_PADD, TCG_TMP3, TCG_TMP3, TCG_TMP1);
112
113
- if (TCG_TARGET_REG_BITS == 32 || addr_type == TCG_TYPE_I32) {
114
- /* Load the (low half) tlb comparator. */
115
+ /* Load the tlb comparator. */
116
+ if (TCG_TARGET_REG_BITS == 64 && addr_type == TCG_TYPE_I32) {
117
tcg_out_ld(s, TCG_TYPE_I32, TCG_TMP0, TCG_TMP3,
118
cmp_off + HOST_BIG_ENDIAN * 4);
119
} else {
120
- tcg_out_ld(s, TCG_TYPE_I64, TCG_TMP0, TCG_TMP3, cmp_off);
121
+ tcg_out_ld(s, TCG_TYPE_REG, TCG_TMP0, TCG_TMP3, cmp_off);
122
}
123
124
- if (TCG_TARGET_REG_BITS == 64 || addr_type == TCG_TYPE_I32) {
125
- /* Load the tlb addend for the fast path. */
126
- tcg_out_ld(s, TCG_TYPE_PTR, TCG_TMP3, TCG_TMP3, add_off);
127
- }
128
+ /* Load the tlb addend for the fast path. */
129
+ tcg_out_ld(s, TCG_TYPE_PTR, TCG_TMP3, TCG_TMP3, add_off);
130
131
/*
132
* Mask the page bits, keeping the alignment bits to compare against.
133
diff --git a/tcg/ppc/tcg-target.c.inc b/tcg/ppc/tcg-target.c.inc
134
index XXXXXXX..XXXXXXX 100644
135
--- a/tcg/ppc/tcg-target.c.inc
136
+++ b/tcg/ppc/tcg-target.c.inc
137
@@ -XXX,XX +XXX,XX @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
138
tcg_out32(s, AND | SAB(TCG_REG_TMP1, TCG_REG_TMP1, TCG_REG_R0));
139
140
/*
141
- * Load the (low part) TLB comparator into TMP2.
142
+ * Load the TLB comparator into TMP2.
143
* For 64-bit host, always load the entire 64-bit slot for simplicity.
144
* We will ignore the high bits with tcg_out_cmp(..., addr_type).
145
*/
146
- if (TCG_TARGET_REG_BITS == 64) {
147
- if (cmp_off == 0) {
148
- tcg_out32(s, LDUX | TAB(TCG_REG_TMP2,
149
- TCG_REG_TMP1, TCG_REG_TMP2));
35
- } else {
150
- } else {
36
- if (CPL(s) <= IOPL(s)) {
151
- tcg_out32(s, ADD | TAB(TCG_REG_TMP1,
37
- if (dflag != MO_16) {
152
- TCG_REG_TMP1, TCG_REG_TMP2));
38
- gen_helper_write_eflags(cpu_env, s->T0,
153
- tcg_out_ld(s, TCG_TYPE_I64, TCG_REG_TMP2,
39
- tcg_const_i32((TF_MASK |
154
- TCG_REG_TMP1, cmp_off);
40
- AC_MASK |
155
- }
41
- ID_MASK |
156
- } else if (cmp_off == 0 && !HOST_BIG_ENDIAN) {
42
- NT_MASK |
157
- tcg_out32(s, LWZUX | TAB(TCG_REG_TMP2,
43
- IF_MASK)));
158
- TCG_REG_TMP1, TCG_REG_TMP2));
44
- } else {
159
+ if (cmp_off == 0) {
45
- gen_helper_write_eflags(cpu_env, s->T0,
160
+ tcg_out32(s, (TCG_TARGET_REG_BITS == 64 ? LDUX : LWZUX)
46
- tcg_const_i32((TF_MASK |
161
+ | TAB(TCG_REG_TMP2, TCG_REG_TMP1, TCG_REG_TMP2));
47
- AC_MASK |
162
} else {
48
- ID_MASK |
163
tcg_out32(s, ADD | TAB(TCG_REG_TMP1, TCG_REG_TMP1, TCG_REG_TMP2));
49
- NT_MASK |
164
- tcg_out_ld(s, TCG_TYPE_I32, TCG_REG_TMP2, TCG_REG_TMP1,
50
- IF_MASK)
165
- cmp_off + 4 * HOST_BIG_ENDIAN);
51
- & 0xffff));
166
+ tcg_out_ld(s, TCG_TYPE_PTR, TCG_REG_TMP2, TCG_REG_TMP1, cmp_off);
52
- }
167
}
53
- } else {
168
54
- if (dflag != MO_16) {
169
/*
55
- gen_helper_write_eflags(cpu_env, s->T0,
56
- tcg_const_i32((TF_MASK | AC_MASK |
57
- ID_MASK | NT_MASK)));
58
- } else {
59
- gen_helper_write_eflags(cpu_env, s->T0,
60
- tcg_const_i32((TF_MASK | AC_MASK |
61
- ID_MASK | NT_MASK)
62
- & 0xffff));
63
- }
64
- }
65
+ mask |= IF_MASK | IOPL_MASK;
66
+ } else if (CPL(s) <= IOPL(s)) {
67
+ mask |= IF_MASK;
68
}
69
+ if (dflag == MO_16) {
70
+ mask &= 0xffff;
71
+ }
72
+
73
+ ot = gen_pop_T0(s);
74
+ gen_helper_write_eflags(cpu_env, s->T0, tcg_constant_i32(mask));
75
gen_pop_update(s, ot);
76
set_cc_op(s, CC_OP_EFLAGS);
77
/* abort translation because TF/AC flag may change */
78
--
170
--
79
2.34.1
171
2.43.0
80
172
81
173
diff view generated by jsdifflib
1
Since all temps allocated by guest front-ends are now TEMP_TB,
1
For loongarch, mips, riscv and sparc, a zero register is
2
and we don't recycle TEMP_TB, there's no point in requiring
2
available all the time. For aarch64, register index 31
3
that the front-ends free the temps at all. Begin by dropping
3
depends on context: sometimes it is the stack pointer,
4
the inner-most checks that all temps have been freed.
4
and sometimes it is the zero register.
5
5
6
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
6
Introduce a new general-purpose constraint which maps 0
7
to TCG_REG_ZERO, if defined. This differs from existing
8
constant constraints in that const_arg[*] is recorded as
9
false, indicating that the value is in a register.
10
11
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
7
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
12
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
8
---
13
---
9
include/tcg/tcg.h | 14 -----------
14
include/tcg/tcg.h | 3 ++-
10
accel/tcg/translator.c | 12 ----------
15
tcg/aarch64/tcg-target.h | 2 ++
11
tcg/tcg.c | 54 +++++++-----------------------------------
16
tcg/loongarch64/tcg-target.h | 2 ++
12
3 files changed, 8 insertions(+), 72 deletions(-)
17
tcg/mips/tcg-target.h | 2 ++
18
tcg/riscv/tcg-target.h | 2 ++
19
tcg/sparc64/tcg-target.h | 3 ++-
20
tcg/tcg.c | 29 ++++++++++++++++++++++-------
21
docs/devel/tcg-ops.rst | 4 +++-
22
8 files changed, 37 insertions(+), 10 deletions(-)
13
23
14
diff --git a/include/tcg/tcg.h b/include/tcg/tcg.h
24
diff --git a/include/tcg/tcg.h b/include/tcg/tcg.h
15
index XXXXXXX..XXXXXXX 100644
25
index XXXXXXX..XXXXXXX 100644
16
--- a/include/tcg/tcg.h
26
--- a/include/tcg/tcg.h
17
+++ b/include/tcg/tcg.h
27
+++ b/include/tcg/tcg.h
18
@@ -XXX,XX +XXX,XX @@ struct TCGContext {
28
@@ -XXX,XX +XXX,XX @@ void tb_target_set_jmp_target(const TranslationBlock *, int,
29
30
void tcg_set_frame(TCGContext *s, TCGReg reg, intptr_t start, intptr_t size);
31
32
-#define TCG_CT_CONST 1 /* any constant of register size */
33
+#define TCG_CT_CONST 1 /* any constant of register size */
34
+#define TCG_CT_REG_ZERO 2 /* zero, in TCG_REG_ZERO */
35
36
typedef struct TCGArgConstraint {
37
unsigned ct : 16;
38
diff --git a/tcg/aarch64/tcg-target.h b/tcg/aarch64/tcg-target.h
39
index XXXXXXX..XXXXXXX 100644
40
--- a/tcg/aarch64/tcg-target.h
41
+++ b/tcg/aarch64/tcg-target.h
42
@@ -XXX,XX +XXX,XX @@ typedef enum {
43
TCG_AREG0 = TCG_REG_X19,
44
} TCGReg;
45
46
+#define TCG_REG_ZERO TCG_REG_XZR
47
+
48
#define TCG_TARGET_NB_REGS 64
49
50
#endif /* AARCH64_TCG_TARGET_H */
51
diff --git a/tcg/loongarch64/tcg-target.h b/tcg/loongarch64/tcg-target.h
52
index XXXXXXX..XXXXXXX 100644
53
--- a/tcg/loongarch64/tcg-target.h
54
+++ b/tcg/loongarch64/tcg-target.h
55
@@ -XXX,XX +XXX,XX @@ typedef enum {
56
TCG_VEC_TMP0 = TCG_REG_V23,
57
} TCGReg;
58
59
+#define TCG_REG_ZERO TCG_REG_ZERO
60
+
61
#endif /* LOONGARCH_TCG_TARGET_H */
62
diff --git a/tcg/mips/tcg-target.h b/tcg/mips/tcg-target.h
63
index XXXXXXX..XXXXXXX 100644
64
--- a/tcg/mips/tcg-target.h
65
+++ b/tcg/mips/tcg-target.h
66
@@ -XXX,XX +XXX,XX @@ typedef enum {
67
TCG_AREG0 = TCG_REG_S8,
68
} TCGReg;
69
70
+#define TCG_REG_ZERO TCG_REG_ZERO
71
+
19
#endif
72
#endif
20
73
diff --git a/tcg/riscv/tcg-target.h b/tcg/riscv/tcg-target.h
21
#ifdef CONFIG_DEBUG_TCG
74
index XXXXXXX..XXXXXXX 100644
22
- int temps_in_use;
75
--- a/tcg/riscv/tcg-target.h
23
int goto_tb_issue_mask;
76
+++ b/tcg/riscv/tcg-target.h
24
const TCGOpcode *vecop_list;
77
@@ -XXX,XX +XXX,XX @@ typedef enum {
78
TCG_REG_TMP2 = TCG_REG_T4,
79
} TCGReg;
80
81
+#define TCG_REG_ZERO TCG_REG_ZERO
82
+
25
#endif
83
#endif
26
@@ -XXX,XX +XXX,XX @@ static inline TCGv_ptr tcg_temp_new_ptr(void)
84
diff --git a/tcg/sparc64/tcg-target.h b/tcg/sparc64/tcg-target.h
27
return temp_tcgv_ptr(t);
28
}
29
30
-#if defined(CONFIG_DEBUG_TCG)
31
-/* If you call tcg_clear_temp_count() at the start of a section of
32
- * code which is not supposed to leak any TCG temporaries, then
33
- * calling tcg_check_temp_count() at the end of the section will
34
- * return 1 if the section did in fact leak a temporary.
35
- */
36
-void tcg_clear_temp_count(void);
37
-int tcg_check_temp_count(void);
38
-#else
39
-#define tcg_clear_temp_count() do { } while (0)
40
-#define tcg_check_temp_count() 0
41
-#endif
42
-
43
int64_t tcg_cpu_exec_time(void);
44
void tcg_dump_info(GString *buf);
45
void tcg_dump_op_count(GString *buf);
46
diff --git a/accel/tcg/translator.c b/accel/tcg/translator.c
47
index XXXXXXX..XXXXXXX 100644
85
index XXXXXXX..XXXXXXX 100644
48
--- a/accel/tcg/translator.c
86
--- a/tcg/sparc64/tcg-target.h
49
+++ b/accel/tcg/translator.c
87
+++ b/tcg/sparc64/tcg-target.h
50
@@ -XXX,XX +XXX,XX @@
88
@@ -XXX,XX +XXX,XX @@ typedef enum {
51
#include "exec/plugin-gen.h"
89
TCG_REG_I7,
52
#include "exec/replay-core.h"
90
} TCGReg;
53
91
54
-/* Pairs with tcg_clear_temp_count.
92
-#define TCG_AREG0 TCG_REG_I0
55
- To be called by #TranslatorOps.{translate_insn,tb_stop} if
93
+#define TCG_AREG0 TCG_REG_I0
56
- (1) the target is sufficiently clean to support reporting,
94
+#define TCG_REG_ZERO TCG_REG_G0
57
- (2) as and when all temporaries are known to be consumed.
95
58
- For most targets, (2) is at the end of translate_insn. */
96
#endif
59
void translator_loop_temp_check(DisasContextBase *db)
60
{
61
- if (tcg_check_temp_count()) {
62
- qemu_log("warning: TCG temporary leaks before "
63
- TARGET_FMT_lx "\n", db->pc_next);
64
- }
65
}
66
67
bool translator_use_goto_tb(DisasContextBase *db, target_ulong dest)
68
@@ -XXX,XX +XXX,XX @@ void translator_loop(CPUState *cpu, TranslationBlock *tb, int *max_insns,
69
ops->init_disas_context(db, cpu);
70
tcg_debug_assert(db->is_jmp == DISAS_NEXT); /* no early exit */
71
72
- /* Reset the temp count so that we can identify leaks */
73
- tcg_clear_temp_count();
74
-
75
/* Start translating. */
76
gen_tb_start(db->tb);
77
ops->tb_start(db, cpu);
78
diff --git a/tcg/tcg.c b/tcg/tcg.c
97
diff --git a/tcg/tcg.c b/tcg/tcg.c
79
index XXXXXXX..XXXXXXX 100644
98
index XXXXXXX..XXXXXXX 100644
80
--- a/tcg/tcg.c
99
--- a/tcg/tcg.c
81
+++ b/tcg/tcg.c
100
+++ b/tcg/tcg.c
82
@@ -XXX,XX +XXX,XX @@ TCGTemp *tcg_temp_new_internal(TCGType type, TCGTempKind kind)
101
@@ -XXX,XX +XXX,XX @@ static void process_constraint_sets(void)
83
ts->temp_allocated = 1;
102
case 'i':
84
tcg_debug_assert(ts->base_type == type);
103
args_ct[i].ct |= TCG_CT_CONST;
85
tcg_debug_assert(ts->kind == kind);
104
break;
86
- goto done;
105
+#ifdef TCG_REG_ZERO
87
+ return ts;
106
+ case 'z':
107
+ args_ct[i].ct |= TCG_CT_REG_ZERO;
108
+ break;
109
+#endif
110
111
/* Include all of the target-specific constraints. */
112
113
@@ -XXX,XX +XXX,XX @@ static void tcg_reg_alloc_op(TCGContext *s, const TCGOp *op)
114
arg_ct = &args_ct[i];
115
ts = arg_temp(arg);
116
117
- if (ts->val_type == TEMP_VAL_CONST
118
- && tcg_target_const_match(ts->val, arg_ct->ct, ts->type,
119
- op_cond, TCGOP_VECE(op))) {
120
- /* constant is OK for instruction */
121
- const_args[i] = 1;
122
- new_args[i] = ts->val;
123
- continue;
124
+ if (ts->val_type == TEMP_VAL_CONST) {
125
+#ifdef TCG_REG_ZERO
126
+ if (ts->val == 0 && (arg_ct->ct & TCG_CT_REG_ZERO)) {
127
+ /* Hardware zero register: indicate register via non-const. */
128
+ const_args[i] = 0;
129
+ new_args[i] = TCG_REG_ZERO;
130
+ continue;
131
+ }
132
+#endif
133
+
134
+ if (tcg_target_const_match(ts->val, arg_ct->ct, ts->type,
135
+ op_cond, TCGOP_VECE(op))) {
136
+ /* constant is OK for instruction */
137
+ const_args[i] = 1;
138
+ new_args[i] = ts->val;
139
+ continue;
140
+ }
88
}
141
}
89
} else {
142
90
tcg_debug_assert(kind == TEMP_TB);
143
reg = ts->reg;
91
@@ -XXX,XX +XXX,XX @@ TCGTemp *tcg_temp_new_internal(TCGType type, TCGTempKind kind)
144
diff --git a/docs/devel/tcg-ops.rst b/docs/devel/tcg-ops.rst
92
ts2->kind = kind;
145
index XXXXXXX..XXXXXXX 100644
93
}
146
--- a/docs/devel/tcg-ops.rst
94
}
147
+++ b/docs/devel/tcg-ops.rst
95
-
148
@@ -XXX,XX +XXX,XX @@ operation uses a constant input constraint which does not allow all
96
- done:
149
constants, it must also accept registers in order to have a fallback.
97
-#if defined(CONFIG_DEBUG_TCG)
150
The constraint '``i``' is defined generically to accept any constant.
98
- s->temps_in_use++;
151
The constraint '``r``' is not defined generically, but is consistently
99
-#endif
152
-used by each backend to indicate all registers.
100
return ts;
153
+used by each backend to indicate all registers. If ``TCG_REG_ZERO``
101
}
154
+is defined by the backend, the constraint '``z``' is defined generically
102
155
+to map constant 0 to the hardware zero register.
103
@@ -XXX,XX +XXX,XX @@ void tcg_temp_free_internal(TCGTemp *ts)
156
104
157
The movi_i32 and movi_i64 operations must accept any constants.
105
switch (ts->kind) {
158
106
case TEMP_CONST:
107
- /*
108
- * In order to simplify users of tcg_constant_*,
109
- * silently ignore free.
110
- */
111
- return;
112
- case TEMP_EBB:
113
case TEMP_TB:
114
+ /* Silently ignore free. */
115
+ break;
116
+ case TEMP_EBB:
117
+ tcg_debug_assert(ts->temp_allocated != 0);
118
+ ts->temp_allocated = 0;
119
+ set_bit(temp_idx(ts), s->free_temps[ts->base_type].l);
120
break;
121
default:
122
+ /* It never made sense to free TEMP_FIXED or TEMP_GLOBAL. */
123
g_assert_not_reached();
124
}
125
-
126
- tcg_debug_assert(ts->temp_allocated != 0);
127
- ts->temp_allocated = 0;
128
-
129
-#if defined(CONFIG_DEBUG_TCG)
130
- assert(s->temps_in_use > 0);
131
- s->temps_in_use--;
132
-#endif
133
-
134
- if (ts->kind == TEMP_EBB) {
135
- int idx = temp_idx(ts);
136
- set_bit(idx, s->free_temps[ts->base_type].l);
137
- }
138
}
139
140
TCGTemp *tcg_constant_internal(TCGType type, int64_t val)
141
@@ -XXX,XX +XXX,XX @@ TCGv_i64 tcg_const_i64(int64_t val)
142
return t0;
143
}
144
145
-#if defined(CONFIG_DEBUG_TCG)
146
-void tcg_clear_temp_count(void)
147
-{
148
- TCGContext *s = tcg_ctx;
149
- s->temps_in_use = 0;
150
-}
151
-
152
-int tcg_check_temp_count(void)
153
-{
154
- TCGContext *s = tcg_ctx;
155
- if (s->temps_in_use) {
156
- /* Clear the count so that we don't give another
157
- * warning immediately next time around.
158
- */
159
- s->temps_in_use = 0;
160
- return 1;
161
- }
162
- return 0;
163
-}
164
-#endif
165
-
166
/* Return true if OP may appear in the opcode stream.
167
Test the runtime variable that controls each opcode. */
168
bool tcg_op_supported(TCGOpcode op)
169
--
159
--
170
2.34.1
160
2.43.0
161
162
diff view generated by jsdifflib
1
Translators are no longer required to free tcg temporaries.
1
Note that 'Z' is still used for addsub2.
2
2
3
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
3
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
5
---
4
---
6
target/arm/tcg/translate-sve.c | 186 +--------------------------------
5
tcg/aarch64/tcg-target-con-set.h | 12 ++++-----
7
1 file changed, 2 insertions(+), 184 deletions(-)
6
tcg/aarch64/tcg-target.c.inc | 46 ++++++++++++++------------------
7
2 files changed, 26 insertions(+), 32 deletions(-)
8
8
9
diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c
9
diff --git a/tcg/aarch64/tcg-target-con-set.h b/tcg/aarch64/tcg-target-con-set.h
10
index XXXXXXX..XXXXXXX 100644
10
index XXXXXXX..XXXXXXX 100644
11
--- a/target/arm/tcg/translate-sve.c
11
--- a/tcg/aarch64/tcg-target-con-set.h
12
+++ b/target/arm/tcg/translate-sve.c
12
+++ b/tcg/aarch64/tcg-target-con-set.h
13
@@ -XXX,XX +XXX,XX @@ static bool gen_gvec_fpst_zz(DisasContext *s, gen_helper_gvec_2_ptr *fn,
13
@@ -XXX,XX +XXX,XX @@
14
tcg_gen_gvec_2_ptr(vec_full_reg_offset(s, rd),
14
*/
15
vec_full_reg_offset(s, rn),
15
C_O0_I1(r)
16
status, vsz, vsz, data, fn);
16
C_O0_I2(r, rC)
17
- tcg_temp_free_ptr(status);
17
-C_O0_I2(rZ, r)
18
}
18
+C_O0_I2(rz, r)
19
return true;
19
C_O0_I2(w, r)
20
}
20
-C_O0_I3(rZ, rZ, r)
21
@@ -XXX,XX +XXX,XX @@ static bool gen_gvec_fpst_zzz(DisasContext *s, gen_helper_gvec_3_ptr *fn,
21
+C_O0_I3(rz, rz, r)
22
vec_full_reg_offset(s, rn),
22
C_O1_I1(r, r)
23
vec_full_reg_offset(s, rm),
23
C_O1_I1(w, r)
24
status, vsz, vsz, data, fn);
24
C_O1_I1(w, w)
25
C_O1_I1(w, wr)
26
-C_O1_I2(r, 0, rZ)
27
+C_O1_I2(r, 0, rz)
28
C_O1_I2(r, r, r)
29
C_O1_I2(r, r, rA)
30
C_O1_I2(r, r, rAL)
31
C_O1_I2(r, r, rC)
32
C_O1_I2(r, r, ri)
33
C_O1_I2(r, r, rL)
34
-C_O1_I2(r, rZ, rZ)
35
+C_O1_I2(r, rz, rz)
36
C_O1_I2(w, 0, w)
37
C_O1_I2(w, w, w)
38
C_O1_I2(w, w, wN)
39
C_O1_I2(w, w, wO)
40
C_O1_I2(w, w, wZ)
41
C_O1_I3(w, w, w, w)
42
-C_O1_I4(r, r, rC, rZ, rZ)
43
+C_O1_I4(r, r, rC, rz, rz)
44
C_O2_I1(r, r, r)
45
-C_O2_I4(r, r, rZ, rZ, rA, rMZ)
46
+C_O2_I4(r, r, rz, rz, rA, rMZ)
47
diff --git a/tcg/aarch64/tcg-target.c.inc b/tcg/aarch64/tcg-target.c.inc
48
index XXXXXXX..XXXXXXX 100644
49
--- a/tcg/aarch64/tcg-target.c.inc
50
+++ b/tcg/aarch64/tcg-target.c.inc
51
@@ -XXX,XX +XXX,XX @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, TCGType ext,
52
TCGArg a2 = args[2];
53
int c2 = const_args[2];
54
55
- /* Some operands are defined with "rZ" constraint, a register or
56
- the zero register. These need not actually test args[I] == 0. */
57
-#define REG0(I) (const_args[I] ? TCG_REG_XZR : (TCGReg)args[I])
25
-
58
-
26
- tcg_temp_free_ptr(status);
59
switch (opc) {
27
}
60
case INDEX_op_goto_ptr:
28
return true;
61
tcg_out_insn(s, 3207, BR, a0);
29
}
62
@@ -XXX,XX +XXX,XX @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, TCGType ext,
30
@@ -XXX,XX +XXX,XX @@ static bool gen_gvec_fpst_zzzz(DisasContext *s, gen_helper_gvec_4_ptr *fn,
63
31
{
64
case INDEX_op_st8_i32:
32
TCGv_ptr status = fpstatus_ptr(flavour);
65
case INDEX_op_st8_i64:
33
bool ret = gen_gvec_ptr_zzzz(s, fn, rd, rn, rm, ra, data, status);
66
- tcg_out_ldst(s, I3312_STRB, REG0(0), a1, a2, 0);
34
- tcg_temp_free_ptr(status);
67
+ tcg_out_ldst(s, I3312_STRB, a0, a1, a2, 0);
35
return ret;
68
break;
36
}
69
case INDEX_op_st16_i32:
37
70
case INDEX_op_st16_i64:
38
@@ -XXX,XX +XXX,XX @@ static bool gen_gvec_fpst_zzzzp(DisasContext *s, gen_helper_gvec_5_ptr *fn,
71
- tcg_out_ldst(s, I3312_STRH, REG0(0), a1, a2, 1);
39
vec_full_reg_offset(s, ra),
72
+ tcg_out_ldst(s, I3312_STRH, a0, a1, a2, 1);
40
pred_full_reg_offset(s, pg),
73
break;
41
status, vsz, vsz, data, fn);
74
case INDEX_op_st_i32:
42
-
75
case INDEX_op_st32_i64:
43
- tcg_temp_free_ptr(status);
76
- tcg_out_ldst(s, I3312_STRW, REG0(0), a1, a2, 2);
44
}
77
+ tcg_out_ldst(s, I3312_STRW, a0, a1, a2, 2);
45
return true;
78
break;
46
}
79
case INDEX_op_st_i64:
47
@@ -XXX,XX +XXX,XX @@ static bool gen_gvec_fpst_zzp(DisasContext *s, gen_helper_gvec_3_ptr *fn,
80
- tcg_out_ldst(s, I3312_STRX, REG0(0), a1, a2, 3);
48
vec_full_reg_offset(s, rn),
81
+ tcg_out_ldst(s, I3312_STRX, a0, a1, a2, 3);
49
pred_full_reg_offset(s, pg),
82
break;
50
status, vsz, vsz, data, fn);
83
51
- tcg_temp_free_ptr(status);
84
case INDEX_op_add_i32:
52
}
85
@@ -XXX,XX +XXX,XX @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, TCGType ext,
53
return true;
86
/* FALLTHRU */
54
}
87
case INDEX_op_movcond_i64:
55
@@ -XXX,XX +XXX,XX @@ static bool gen_gvec_fpst_zzzp(DisasContext *s, gen_helper_gvec_4_ptr *fn,
88
tcg_out_cmp(s, ext, args[5], a1, a2, c2);
56
vec_full_reg_offset(s, rm),
89
- tcg_out_insn(s, 3506, CSEL, ext, a0, REG0(3), REG0(4), args[5]);
57
pred_full_reg_offset(s, pg),
90
+ tcg_out_insn(s, 3506, CSEL, ext, a0, args[3], args[4], args[5]);
58
status, vsz, vsz, data, fn);
91
break;
59
- tcg_temp_free_ptr(status);
92
60
}
93
case INDEX_op_qemu_ld_i32:
61
return true;
94
@@ -XXX,XX +XXX,XX @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, TCGType ext,
62
}
95
break;
63
@@ -XXX,XX +XXX,XX @@ static void do_predtest1(TCGv_i64 d, TCGv_i64 g)
96
case INDEX_op_qemu_st_i32:
64
97
case INDEX_op_qemu_st_i64:
65
gen_helper_sve_predtest1(t, d, g);
98
- tcg_out_qemu_st(s, REG0(0), a1, a2, ext);
66
do_pred_flags(t);
99
+ tcg_out_qemu_st(s, a0, a1, a2, ext);
67
- tcg_temp_free_i32(t);
100
break;
68
}
101
case INDEX_op_qemu_ld_i128:
69
102
tcg_out_qemu_ldst_i128(s, a0, a1, a2, args[3], true);
70
static void do_predtest(DisasContext *s, int dofs, int gofs, int words)
103
break;
71
@@ -XXX,XX +XXX,XX @@ static void do_predtest(DisasContext *s, int dofs, int gofs, int words)
104
case INDEX_op_qemu_st_i128:
72
tcg_gen_addi_ptr(gptr, cpu_env, gofs);
105
- tcg_out_qemu_ldst_i128(s, REG0(0), REG0(1), a2, args[3], false);
73
106
+ tcg_out_qemu_ldst_i128(s, a0, a1, a2, args[3], false);
74
gen_helper_sve_predtest(t, dptr, gptr, tcg_constant_i32(words));
107
break;
75
- tcg_temp_free_ptr(dptr);
108
76
- tcg_temp_free_ptr(gptr);
109
case INDEX_op_bswap64_i64:
77
110
@@ -XXX,XX +XXX,XX @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, TCGType ext,
78
do_pred_flags(t);
111
79
- tcg_temp_free_i32(t);
112
case INDEX_op_deposit_i64:
80
}
113
case INDEX_op_deposit_i32:
81
114
- tcg_out_dep(s, ext, a0, REG0(2), args[3], args[4]);
82
/* For each element size, the bits within a predicate word that are active. */
115
+ tcg_out_dep(s, ext, a0, a2, args[3], args[4]);
83
@@ -XXX,XX +XXX,XX @@ static void gen_xar8_i64(TCGv_i64 d, TCGv_i64 n, TCGv_i64 m, int64_t sh)
116
break;
84
tcg_gen_andi_i64(d, d, mask);
117
85
tcg_gen_andi_i64(t, t, ~mask);
118
case INDEX_op_extract_i64:
86
tcg_gen_or_i64(d, d, t);
119
@@ -XXX,XX +XXX,XX @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, TCGType ext,
87
- tcg_temp_free_i64(t);
120
88
}
121
case INDEX_op_extract2_i64:
89
122
case INDEX_op_extract2_i32:
90
static void gen_xar16_i64(TCGv_i64 d, TCGv_i64 n, TCGv_i64 m, int64_t sh)
123
- tcg_out_extr(s, ext, a0, REG0(2), REG0(1), args[3]);
91
@@ -XXX,XX +XXX,XX @@ static void gen_xar16_i64(TCGv_i64 d, TCGv_i64 n, TCGv_i64 m, int64_t sh)
124
+ tcg_out_extr(s, ext, a0, a2, a1, args[3]);
92
tcg_gen_andi_i64(d, d, mask);
125
break;
93
tcg_gen_andi_i64(t, t, ~mask);
126
94
tcg_gen_or_i64(d, d, t);
127
case INDEX_op_add2_i32:
95
- tcg_temp_free_i64(t);
128
- tcg_out_addsub2(s, TCG_TYPE_I32, a0, a1, REG0(2), REG0(3),
96
}
129
+ tcg_out_addsub2(s, TCG_TYPE_I32, a0, a1, a2, args[3],
97
130
(int32_t)args[4], args[5], const_args[4],
98
static void gen_xar_i32(TCGv_i32 d, TCGv_i32 n, TCGv_i32 m, int32_t sh)
131
const_args[5], false);
99
@@ -XXX,XX +XXX,XX @@ static bool do_vpz_ool(DisasContext *s, arg_rpr_esz *a,
132
break;
100
tcg_gen_addi_ptr(t_zn, cpu_env, vec_full_reg_offset(s, a->rn));
133
case INDEX_op_add2_i64:
101
tcg_gen_addi_ptr(t_pg, cpu_env, pred_full_reg_offset(s, a->pg));
134
- tcg_out_addsub2(s, TCG_TYPE_I64, a0, a1, REG0(2), REG0(3), args[4],
102
fn(temp, t_zn, t_pg, desc);
135
+ tcg_out_addsub2(s, TCG_TYPE_I64, a0, a1, a2, args[3], args[4],
103
- tcg_temp_free_ptr(t_zn);
136
args[5], const_args[4], const_args[5], false);
104
- tcg_temp_free_ptr(t_pg);
137
break;
105
138
case INDEX_op_sub2_i32:
106
write_fp_dreg(s, a->rd, temp);
139
- tcg_out_addsub2(s, TCG_TYPE_I32, a0, a1, REG0(2), REG0(3),
107
- tcg_temp_free_i64(temp);
140
+ tcg_out_addsub2(s, TCG_TYPE_I32, a0, a1, a2, args[3],
108
return true;
141
(int32_t)args[4], args[5], const_args[4],
109
}
142
const_args[5], true);
110
143
break;
111
@@ -XXX,XX +XXX,XX @@ static bool do_index(DisasContext *s, int esz, int rd,
144
case INDEX_op_sub2_i64:
112
tcg_gen_extrl_i64_i32(s32, start);
145
- tcg_out_addsub2(s, TCG_TYPE_I64, a0, a1, REG0(2), REG0(3), args[4],
113
tcg_gen_extrl_i64_i32(i32, incr);
146
+ tcg_out_addsub2(s, TCG_TYPE_I64, a0, a1, a2, args[3], args[4],
114
fns[esz](t_zd, s32, i32, desc);
147
args[5], const_args[4], const_args[5], true);
115
-
148
break;
116
- tcg_temp_free_i32(s32);
149
117
- tcg_temp_free_i32(i32);
150
@@ -XXX,XX +XXX,XX @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, TCGType ext,
118
}
119
- tcg_temp_free_ptr(t_zd);
120
return true;
121
}
122
123
@@ -XXX,XX +XXX,XX @@ static bool do_pppp_flags(DisasContext *s, arg_rprr_s *a,
124
tcg_gen_st_i64(pd, cpu_env, dofs);
125
126
do_predtest1(pd, pg);
127
-
128
- tcg_temp_free_i64(pd);
129
- tcg_temp_free_i64(pn);
130
- tcg_temp_free_i64(pm);
131
- tcg_temp_free_i64(pg);
132
} else {
133
/* The operation and flags generation is large. The computation
134
* of the flags depends on the original contents of the guarding
135
@@ -XXX,XX +XXX,XX @@ static bool trans_PTEST(DisasContext *s, arg_PTEST *a)
136
tcg_gen_ld_i64(pn, cpu_env, nofs);
137
tcg_gen_ld_i64(pg, cpu_env, gofs);
138
do_predtest1(pn, pg);
139
-
140
- tcg_temp_free_i64(pn);
141
- tcg_temp_free_i64(pg);
142
} else {
143
do_predtest(s, nofs, gofs, words);
144
}
145
@@ -XXX,XX +XXX,XX @@ static bool do_predset(DisasContext *s, int esz, int rd, int pat, bool setflag)
146
}
147
148
done:
149
- tcg_temp_free_i64(t);
150
-
151
/* PTRUES */
152
if (setflag) {
153
tcg_gen_movi_i32(cpu_NF, -(word != 0));
154
@@ -XXX,XX +XXX,XX @@ static bool do_pfirst_pnext(DisasContext *s, arg_rr_esz *a,
155
t = tcg_temp_new_i32();
156
157
gen_fn(t, t_pd, t_pg, tcg_constant_i32(desc));
158
- tcg_temp_free_ptr(t_pd);
159
- tcg_temp_free_ptr(t_pg);
160
161
do_pred_flags(t);
162
- tcg_temp_free_i32(t);
163
return true;
164
}
165
166
@@ -XXX,XX +XXX,XX @@ static void do_sat_addsub_64(TCGv_i64 reg, TCGv_i64 val, bool u, bool d)
167
t2 = tcg_constant_i64(0);
168
tcg_gen_movcond_i64(TCG_COND_LT, reg, t0, t2, t1, reg);
169
}
170
- tcg_temp_free_i64(t1);
171
}
172
- tcg_temp_free_i64(t0);
173
}
174
175
/* Similarly with a vector and a scalar operand. */
176
@@ -XXX,XX +XXX,XX @@ static void do_sat_addsub_vec(DisasContext *s, int esz, int rd, int rn,
177
} else {
178
gen_helper_sve_sqaddi_b(dptr, nptr, t32, desc);
179
}
180
- tcg_temp_free_i32(t32);
181
break;
182
183
case MO_16:
184
@@ -XXX,XX +XXX,XX @@ static void do_sat_addsub_vec(DisasContext *s, int esz, int rd, int rn,
185
} else {
186
gen_helper_sve_sqaddi_h(dptr, nptr, t32, desc);
187
}
188
- tcg_temp_free_i32(t32);
189
break;
190
191
case MO_32:
192
@@ -XXX,XX +XXX,XX @@ static void do_sat_addsub_vec(DisasContext *s, int esz, int rd, int rn,
193
} else {
194
gen_helper_sve_sqaddi_s(dptr, nptr, t64, desc);
195
}
196
- tcg_temp_free_i64(t64);
197
break;
198
199
case MO_64:
200
@@ -XXX,XX +XXX,XX @@ static void do_sat_addsub_vec(DisasContext *s, int esz, int rd, int rn,
201
t64 = tcg_temp_new_i64();
202
tcg_gen_neg_i64(t64, val);
203
gen_helper_sve_sqaddi_d(dptr, nptr, t64, desc);
204
- tcg_temp_free_i64(t64);
205
} else {
206
gen_helper_sve_sqaddi_d(dptr, nptr, val, desc);
207
}
208
@@ -XXX,XX +XXX,XX @@ static void do_sat_addsub_vec(DisasContext *s, int esz, int rd, int rn,
209
default:
151
default:
210
g_assert_not_reached();
152
g_assert_not_reached();
211
}
153
}
212
-
154
-
213
- tcg_temp_free_ptr(dptr);
155
-#undef REG0
214
- tcg_temp_free_ptr(nptr);
215
}
156
}
216
157
217
static bool trans_CNT_r(DisasContext *s, arg_CNT_r *a)
158
static void tcg_out_vec_op(TCGContext *s, TCGOpcode opc,
218
@@ -XXX,XX +XXX,XX @@ static void do_cpy_m(DisasContext *s, int esz, int rd, int rn, int pg,
159
@@ -XXX,XX +XXX,XX @@ tcg_target_op_def(TCGOpcode op, TCGType type, unsigned flags)
219
tcg_gen_addi_ptr(t_pg, cpu_env, pred_full_reg_offset(s, pg));
160
case INDEX_op_st16_i64:
220
161
case INDEX_op_st32_i64:
221
fns[esz](t_zd, t_zn, t_pg, val, desc);
162
case INDEX_op_st_i64:
222
-
163
- return C_O0_I2(rZ, r);
223
- tcg_temp_free_ptr(t_zd);
164
+ return C_O0_I2(rz, r);
224
- tcg_temp_free_ptr(t_zn);
165
225
- tcg_temp_free_ptr(t_pg);
166
case INDEX_op_add_i32:
226
}
167
case INDEX_op_add_i64:
227
168
@@ -XXX,XX +XXX,XX @@ tcg_target_op_def(TCGOpcode op, TCGType type, unsigned flags)
228
static bool trans_FCPY(DisasContext *s, arg_FCPY *a)
169
229
@@ -XXX,XX +XXX,XX @@ static void do_insr_i64(DisasContext *s, arg_rrr_esz *a, TCGv_i64 val)
170
case INDEX_op_movcond_i32:
230
tcg_gen_addi_ptr(t_zn, cpu_env, vec_full_reg_offset(s, a->rn));
171
case INDEX_op_movcond_i64:
231
172
- return C_O1_I4(r, r, rC, rZ, rZ);
232
fns[a->esz](t_zd, t_zn, val, desc);
173
+ return C_O1_I4(r, r, rC, rz, rz);
233
-
174
234
- tcg_temp_free_ptr(t_zd);
175
case INDEX_op_qemu_ld_i32:
235
- tcg_temp_free_ptr(t_zn);
176
case INDEX_op_qemu_ld_i64:
236
}
177
@@ -XXX,XX +XXX,XX @@ tcg_target_op_def(TCGOpcode op, TCGType type, unsigned flags)
237
178
return C_O2_I1(r, r, r);
238
static bool trans_INSR_f(DisasContext *s, arg_rrr_esz *a)
179
case INDEX_op_qemu_st_i32:
239
@@ -XXX,XX +XXX,XX @@ static bool trans_INSR_f(DisasContext *s, arg_rrr_esz *a)
180
case INDEX_op_qemu_st_i64:
240
TCGv_i64 t = tcg_temp_new_i64();
181
- return C_O0_I2(rZ, r);
241
tcg_gen_ld_i64(t, cpu_env, vec_reg_offset(s, a->rm, 0, MO_64));
182
+ return C_O0_I2(rz, r);
242
do_insr_i64(s, a, t);
183
case INDEX_op_qemu_st_i128:
243
- tcg_temp_free_i64(t);
184
- return C_O0_I3(rZ, rZ, r);
244
}
185
+ return C_O0_I3(rz, rz, r);
245
return true;
186
246
}
187
case INDEX_op_deposit_i32:
247
@@ -XXX,XX +XXX,XX @@ static bool do_perm_pred3(DisasContext *s, arg_rrr_esz *a, bool high_odd,
188
case INDEX_op_deposit_i64:
248
tcg_gen_addi_ptr(t_m, cpu_env, pred_full_reg_offset(s, a->rm));
189
- return C_O1_I2(r, 0, rZ);
249
190
+ return C_O1_I2(r, 0, rz);
250
fn(t_d, t_n, t_m, tcg_constant_i32(desc));
191
251
-
192
case INDEX_op_extract2_i32:
252
- tcg_temp_free_ptr(t_d);
193
case INDEX_op_extract2_i64:
253
- tcg_temp_free_ptr(t_n);
194
- return C_O1_I2(r, rZ, rZ);
254
- tcg_temp_free_ptr(t_m);
195
+ return C_O1_I2(r, rz, rz);
255
return true;
196
256
}
197
case INDEX_op_add2_i32:
257
198
case INDEX_op_add2_i64:
258
@@ -XXX,XX +XXX,XX @@ static bool do_perm_pred2(DisasContext *s, arg_rr_esz *a, bool high_odd,
199
case INDEX_op_sub2_i32:
259
desc = FIELD_DP32(desc, PREDDESC, DATA, high_odd);
200
case INDEX_op_sub2_i64:
260
201
- return C_O2_I4(r, r, rZ, rZ, rA, rMZ);
261
fn(t_d, t_n, tcg_constant_i32(desc));
202
+ return C_O2_I4(r, r, rz, rz, rA, rMZ);
262
-
203
263
- tcg_temp_free_ptr(t_d);
204
case INDEX_op_add_vec:
264
- tcg_temp_free_ptr(t_n);
205
case INDEX_op_sub_vec:
265
return true;
266
}
267
268
@@ -XXX,XX +XXX,XX @@ static void find_last_active(DisasContext *s, TCGv_i32 ret, int esz, int pg)
269
tcg_gen_addi_ptr(t_p, cpu_env, pred_full_reg_offset(s, pg));
270
271
gen_helper_sve_last_active_element(ret, t_p, tcg_constant_i32(desc));
272
-
273
- tcg_temp_free_ptr(t_p);
274
}
275
276
/* Increment LAST to the offset of the next element in the vector,
277
@@ -XXX,XX +XXX,XX @@ static TCGv_i64 load_last_active(DisasContext *s, TCGv_i32 last,
278
int rm, int esz)
279
{
280
TCGv_ptr p = tcg_temp_new_ptr();
281
- TCGv_i64 r;
282
283
/* Convert offset into vector into offset into ENV.
284
* The final adjustment for the vector register base
285
@@ -XXX,XX +XXX,XX @@ static TCGv_i64 load_last_active(DisasContext *s, TCGv_i32 last,
286
tcg_gen_ext_i32_ptr(p, last);
287
tcg_gen_add_ptr(p, p, cpu_env);
288
289
- r = load_esz(p, vec_full_reg_offset(s, rm), esz);
290
- tcg_temp_free_ptr(p);
291
-
292
- return r;
293
+ return load_esz(p, vec_full_reg_offset(s, rm), esz);
294
}
295
296
/* Compute CLAST for a Zreg. */
297
@@ -XXX,XX +XXX,XX @@ static bool do_clast_vector(DisasContext *s, arg_rprr_esz *a, bool before)
298
}
299
300
ele = load_last_active(s, last, a->rm, esz);
301
- tcg_temp_free_i32(last);
302
303
vsz = vec_full_reg_size(s);
304
tcg_gen_gvec_dup_i64(esz, vec_full_reg_offset(s, a->rd), vsz, vsz, ele);
305
- tcg_temp_free_i64(ele);
306
307
/* If this insn used MOVPRFX, we may need a second move. */
308
if (a->rd != a->rn) {
309
@@ -XXX,XX +XXX,XX @@ static void do_clast_scalar(DisasContext *s, int esz, int pg, int rm,
310
* a conditional move.
311
*/
312
ele = load_last_active(s, last, rm, esz);
313
- tcg_temp_free_i32(last);
314
315
tcg_gen_movcond_i64(TCG_COND_GE, reg_val, cmp, tcg_constant_i64(0),
316
ele, reg_val);
317
-
318
- tcg_temp_free_i64(cmp);
319
- tcg_temp_free_i64(ele);
320
}
321
322
/* Compute CLAST for a Vreg. */
323
@@ -XXX,XX +XXX,XX @@ static bool do_clast_fp(DisasContext *s, arg_rpr_esz *a, bool before)
324
325
do_clast_scalar(s, esz, a->pg, a->rn, before, reg);
326
write_fp_dreg(s, a->rd, reg);
327
- tcg_temp_free_i64(reg);
328
}
329
return true;
330
}
331
@@ -XXX,XX +XXX,XX @@ static TCGv_i64 do_last_scalar(DisasContext *s, int esz,
332
int pg, int rm, bool before)
333
{
334
TCGv_i32 last = tcg_temp_new_i32();
335
- TCGv_i64 ret;
336
337
find_last_active(s, last, esz, pg);
338
if (before) {
339
@@ -XXX,XX +XXX,XX @@ static TCGv_i64 do_last_scalar(DisasContext *s, int esz,
340
incr_last_active(s, last, esz);
341
}
342
343
- ret = load_last_active(s, last, rm, esz);
344
- tcg_temp_free_i32(last);
345
- return ret;
346
+ return load_last_active(s, last, rm, esz);
347
}
348
349
/* Compute LAST for a Vreg. */
350
@@ -XXX,XX +XXX,XX @@ static bool do_last_fp(DisasContext *s, arg_rpr_esz *a, bool before)
351
if (sve_access_check(s)) {
352
TCGv_i64 val = do_last_scalar(s, a->esz, a->pg, a->rn, before);
353
write_fp_dreg(s, a->rd, val);
354
- tcg_temp_free_i64(val);
355
}
356
return true;
357
}
358
@@ -XXX,XX +XXX,XX @@ static bool do_last_general(DisasContext *s, arg_rpr_esz *a, bool before)
359
if (sve_access_check(s)) {
360
TCGv_i64 val = do_last_scalar(s, a->esz, a->pg, a->rn, before);
361
tcg_gen_mov_i64(cpu_reg(s, a->rd), val);
362
- tcg_temp_free_i64(val);
363
}
364
return true;
365
}
366
@@ -XXX,XX +XXX,XX @@ static bool trans_CPY_m_v(DisasContext *s, arg_rpr_esz *a)
367
int ofs = vec_reg_offset(s, a->rn, 0, a->esz);
368
TCGv_i64 t = load_esz(cpu_env, ofs, a->esz);
369
do_cpy_m(s, a->esz, a->rd, a->rd, a->pg, t);
370
- tcg_temp_free_i64(t);
371
}
372
return true;
373
}
374
@@ -XXX,XX +XXX,XX @@ static bool do_ppzz_flags(DisasContext *s, arg_rprr_esz *a,
375
376
gen_fn(t, pd, zn, zm, pg, tcg_constant_i32(simd_desc(vsz, vsz, 0)));
377
378
- tcg_temp_free_ptr(pd);
379
- tcg_temp_free_ptr(zn);
380
- tcg_temp_free_ptr(zm);
381
- tcg_temp_free_ptr(pg);
382
-
383
do_pred_flags(t);
384
-
385
- tcg_temp_free_i32(t);
386
return true;
387
}
388
389
@@ -XXX,XX +XXX,XX @@ static bool do_ppzi_flags(DisasContext *s, arg_rpri_esz *a,
390
391
gen_fn(t, pd, zn, pg, tcg_constant_i32(simd_desc(vsz, vsz, a->imm)));
392
393
- tcg_temp_free_ptr(pd);
394
- tcg_temp_free_ptr(zn);
395
- tcg_temp_free_ptr(pg);
396
-
397
do_pred_flags(t);
398
-
399
- tcg_temp_free_i32(t);
400
return true;
401
}
402
403
@@ -XXX,XX +XXX,XX @@ static bool do_brk3(DisasContext *s, arg_rprr_s *a,
404
TCGv_i32 t = tcg_temp_new_i32();
405
fn_s(t, d, n, m, g, desc);
406
do_pred_flags(t);
407
- tcg_temp_free_i32(t);
408
} else {
409
fn(d, n, m, g, desc);
410
}
411
- tcg_temp_free_ptr(d);
412
- tcg_temp_free_ptr(n);
413
- tcg_temp_free_ptr(m);
414
- tcg_temp_free_ptr(g);
415
return true;
416
}
417
418
@@ -XXX,XX +XXX,XX @@ static bool do_brk2(DisasContext *s, arg_rpr_s *a,
419
TCGv_i32 t = tcg_temp_new_i32();
420
fn_s(t, d, n, g, desc);
421
do_pred_flags(t);
422
- tcg_temp_free_i32(t);
423
} else {
424
fn(d, n, g, desc);
425
}
426
- tcg_temp_free_ptr(d);
427
- tcg_temp_free_ptr(n);
428
- tcg_temp_free_ptr(g);
429
return true;
430
}
431
432
@@ -XXX,XX +XXX,XX @@ static void do_cntp(DisasContext *s, TCGv_i64 val, int esz, int pn, int pg)
433
TCGv_i64 g = tcg_temp_new_i64();
434
tcg_gen_ld_i64(g, cpu_env, pred_full_reg_offset(s, pg));
435
tcg_gen_and_i64(val, val, g);
436
- tcg_temp_free_i64(g);
437
}
438
439
/* Reduce the pred_esz_masks value simply to reduce the
440
@@ -XXX,XX +XXX,XX @@ static void do_cntp(DisasContext *s, TCGv_i64 val, int esz, int pn, int pg)
441
tcg_gen_addi_ptr(t_pg, cpu_env, pred_full_reg_offset(s, pg));
442
443
gen_helper_sve_cntp(val, t_pn, t_pg, tcg_constant_i32(desc));
444
- tcg_temp_free_ptr(t_pn);
445
- tcg_temp_free_ptr(t_pg);
446
}
447
}
448
449
@@ -XXX,XX +XXX,XX @@ static bool trans_INCDECP_r(DisasContext *s, arg_incdec_pred *a)
450
} else {
451
tcg_gen_add_i64(reg, reg, val);
452
}
453
- tcg_temp_free_i64(val);
454
}
455
return true;
456
}
457
@@ -XXX,XX +XXX,XX @@ static bool trans_CTERM(DisasContext *s, arg_CTERM *a)
458
459
tcg_gen_setcond_i64(cond, cmp, rn, rm);
460
tcg_gen_extrl_i64_i32(cpu_NF, cmp);
461
- tcg_temp_free_i64(cmp);
462
463
/* VF = !NF & !CF. */
464
tcg_gen_xori_i32(cpu_VF, cpu_NF, 1);
465
@@ -XXX,XX +XXX,XX @@ static bool trans_WHILE(DisasContext *s, arg_WHILE *a)
466
/* Set the count to zero if the condition is false. */
467
tcg_gen_movi_i64(t1, 0);
468
tcg_gen_movcond_i64(cond, t0, op0, op1, t0, t1);
469
- tcg_temp_free_i64(t1);
470
471
/* Since we're bounded, pass as a 32-bit type. */
472
t2 = tcg_temp_new_i32();
473
tcg_gen_extrl_i64_i32(t2, t0);
474
- tcg_temp_free_i64(t0);
475
476
/* Scale elements to bits. */
477
tcg_gen_shli_i32(t2, t2, a->esz);
478
@@ -XXX,XX +XXX,XX @@ static bool trans_WHILE(DisasContext *s, arg_WHILE *a)
479
gen_helper_sve_whileg(t2, ptr, t2, tcg_constant_i32(desc));
480
}
481
do_pred_flags(t2);
482
-
483
- tcg_temp_free_ptr(ptr);
484
- tcg_temp_free_i32(t2);
485
return true;
486
}
487
488
@@ -XXX,XX +XXX,XX @@ static bool trans_WHILE_ptr(DisasContext *s, arg_WHILE_ptr *a)
489
tcg_gen_sub_i64(diff, op0, op1);
490
tcg_gen_sub_i64(t1, op1, op0);
491
tcg_gen_movcond_i64(TCG_COND_GEU, diff, op0, op1, diff, t1);
492
- tcg_temp_free_i64(t1);
493
/* Round down to a multiple of ESIZE. */
494
tcg_gen_andi_i64(diff, diff, -1 << a->esz);
495
/* If op1 == op0, diff == 0, and the condition is always true. */
496
@@ -XXX,XX +XXX,XX @@ static bool trans_WHILE_ptr(DisasContext *s, arg_WHILE_ptr *a)
497
/* Since we're bounded, pass as a 32-bit type. */
498
t2 = tcg_temp_new_i32();
499
tcg_gen_extrl_i64_i32(t2, diff);
500
- tcg_temp_free_i64(diff);
501
502
desc = FIELD_DP32(desc, PREDDESC, OPRSZ, vsz / 8);
503
desc = FIELD_DP32(desc, PREDDESC, ESZ, a->esz);
504
@@ -XXX,XX +XXX,XX @@ static bool trans_WHILE_ptr(DisasContext *s, arg_WHILE_ptr *a)
505
506
gen_helper_sve_whilel(t2, ptr, t2, tcg_constant_i32(desc));
507
do_pred_flags(t2);
508
-
509
- tcg_temp_free_ptr(ptr);
510
- tcg_temp_free_i32(t2);
511
return true;
512
}
513
514
@@ -XXX,XX +XXX,XX @@ static bool do_reduce(DisasContext *s, arg_rpr_esz *a,
515
status = fpstatus_ptr(a->esz == MO_16 ? FPST_FPCR_F16 : FPST_FPCR);
516
517
fn(temp, t_zn, t_pg, status, t_desc);
518
- tcg_temp_free_ptr(t_zn);
519
- tcg_temp_free_ptr(t_pg);
520
- tcg_temp_free_ptr(status);
521
522
write_fp_dreg(s, a->rd, temp);
523
- tcg_temp_free_i64(temp);
524
return true;
525
}
526
527
@@ -XXX,XX +XXX,XX @@ static bool do_ppz_fp(DisasContext *s, arg_rpr_esz *a,
528
vec_full_reg_offset(s, a->rn),
529
pred_full_reg_offset(s, a->pg),
530
status, vsz, vsz, 0, fn);
531
- tcg_temp_free_ptr(status);
532
}
533
return true;
534
}
535
@@ -XXX,XX +XXX,XX @@ static bool trans_FADDA(DisasContext *s, arg_rprr_esz *a)
536
537
fns[a->esz - 1](t_val, t_val, t_rm, t_pg, t_fpst, t_desc);
538
539
- tcg_temp_free_ptr(t_fpst);
540
- tcg_temp_free_ptr(t_pg);
541
- tcg_temp_free_ptr(t_rm);
542
-
543
write_fp_dreg(s, a->rd, t_val);
544
- tcg_temp_free_i64(t_val);
545
return true;
546
}
547
548
@@ -XXX,XX +XXX,XX @@ static void do_fp_scalar(DisasContext *s, int zd, int zn, int pg, bool is_fp16,
549
status = fpstatus_ptr(is_fp16 ? FPST_FPCR_F16 : FPST_FPCR);
550
desc = tcg_constant_i32(simd_desc(vsz, vsz, 0));
551
fn(t_zd, t_zn, t_pg, scalar, status, desc);
552
-
553
- tcg_temp_free_ptr(status);
554
- tcg_temp_free_ptr(t_pg);
555
- tcg_temp_free_ptr(t_zn);
556
- tcg_temp_free_ptr(t_zd);
557
}
558
559
static bool do_fp_imm(DisasContext *s, arg_rpri_esz *a, uint64_t imm,
560
@@ -XXX,XX +XXX,XX @@ static bool do_fp_cmp(DisasContext *s, arg_rprr_esz *a,
561
vec_full_reg_offset(s, a->rm),
562
pred_full_reg_offset(s, a->pg),
563
status, vsz, vsz, 0, fn);
564
- tcg_temp_free_ptr(status);
565
}
566
return true;
567
}
568
@@ -XXX,XX +XXX,XX @@ static bool do_frint_mode(DisasContext *s, arg_rpr_esz *a,
569
status, vsz, vsz, 0, fn);
570
571
gen_helper_set_rmode(tmode, tmode, status);
572
- tcg_temp_free_i32(tmode);
573
- tcg_temp_free_ptr(status);
574
return true;
575
}
576
577
@@ -XXX,XX +XXX,XX @@ void gen_sve_ldr(DisasContext *s, TCGv_ptr base, int vofs,
578
dirty_addr = tcg_temp_new_i64();
579
tcg_gen_addi_i64(dirty_addr, cpu_reg_sp(s, rn), imm);
580
clean_addr = gen_mte_checkN(s, dirty_addr, false, rn != 31, len);
581
- tcg_temp_free_i64(dirty_addr);
582
583
/*
584
* Note that unpredicated load/store of vector/predicate registers
585
@@ -XXX,XX +XXX,XX @@ void gen_sve_ldr(DisasContext *s, TCGv_ptr base, int vofs,
586
tcg_gen_st_i64(t0, base, vofs + i);
587
tcg_gen_addi_i64(clean_addr, clean_addr, 8);
588
}
589
- tcg_temp_free_i64(t0);
590
} else {
591
TCGLabel *loop = gen_new_label();
592
TCGv_ptr tp, i = tcg_const_ptr(0);
593
@@ -XXX,XX +XXX,XX @@ void gen_sve_ldr(DisasContext *s, TCGv_ptr base, int vofs,
594
tcg_gen_add_ptr(tp, base, i);
595
tcg_gen_addi_ptr(i, i, 8);
596
tcg_gen_st_i64(t0, tp, vofs);
597
- tcg_temp_free_ptr(tp);
598
- tcg_temp_free_i64(t0);
599
600
tcg_gen_brcondi_ptr(TCG_COND_LTU, i, len_align, loop);
601
- tcg_temp_free_ptr(i);
602
}
603
604
/*
605
@@ -XXX,XX +XXX,XX @@ void gen_sve_ldr(DisasContext *s, TCGv_ptr base, int vofs,
606
tcg_gen_addi_i64(clean_addr, clean_addr, 4);
607
tcg_gen_qemu_ld_i64(t1, clean_addr, midx, MO_LEUW);
608
tcg_gen_deposit_i64(t0, t0, t1, 32, 32);
609
- tcg_temp_free_i64(t1);
610
break;
611
612
default:
613
g_assert_not_reached();
614
}
615
tcg_gen_st_i64(t0, base, vofs + len_align);
616
- tcg_temp_free_i64(t0);
617
}
618
}
619
620
@@ -XXX,XX +XXX,XX @@ void gen_sve_str(DisasContext *s, TCGv_ptr base, int vofs,
621
dirty_addr = tcg_temp_new_i64();
622
tcg_gen_addi_i64(dirty_addr, cpu_reg_sp(s, rn), imm);
623
clean_addr = gen_mte_checkN(s, dirty_addr, false, rn != 31, len);
624
- tcg_temp_free_i64(dirty_addr);
625
626
/* Note that unpredicated load/store of vector/predicate registers
627
* are defined as a stream of bytes, which equates to little-endian
628
@@ -XXX,XX +XXX,XX @@ void gen_sve_str(DisasContext *s, TCGv_ptr base, int vofs,
629
tcg_gen_qemu_st_i64(t0, clean_addr, midx, MO_LEUQ);
630
tcg_gen_addi_i64(clean_addr, clean_addr, 8);
631
}
632
- tcg_temp_free_i64(t0);
633
} else {
634
TCGLabel *loop = gen_new_label();
635
TCGv_ptr tp, i = tcg_const_ptr(0);
636
@@ -XXX,XX +XXX,XX @@ void gen_sve_str(DisasContext *s, TCGv_ptr base, int vofs,
637
tcg_gen_add_ptr(tp, base, i);
638
tcg_gen_ld_i64(t0, tp, vofs);
639
tcg_gen_addi_ptr(i, i, 8);
640
- tcg_temp_free_ptr(tp);
641
642
tcg_gen_qemu_st_i64(t0, clean_addr, midx, MO_LEUQ);
643
tcg_gen_addi_i64(clean_addr, clean_addr, 8);
644
- tcg_temp_free_i64(t0);
645
646
tcg_gen_brcondi_ptr(TCG_COND_LTU, i, len_align, loop);
647
- tcg_temp_free_ptr(i);
648
}
649
650
/* Predicate register stores can be any multiple of 2. */
651
@@ -XXX,XX +XXX,XX @@ void gen_sve_str(DisasContext *s, TCGv_ptr base, int vofs,
652
default:
653
g_assert_not_reached();
654
}
655
- tcg_temp_free_i64(t0);
656
}
657
}
658
659
@@ -XXX,XX +XXX,XX @@ static void do_mem_zpa(DisasContext *s, int zt, int pg, TCGv_i64 addr,
660
661
tcg_gen_addi_ptr(t_pg, cpu_env, pred_full_reg_offset(s, pg));
662
fn(cpu_env, t_pg, addr, tcg_constant_i32(desc));
663
-
664
- tcg_temp_free_ptr(t_pg);
665
}
666
667
/* Indexed by [mte][be][dtype][nreg] */
668
@@ -XXX,XX +XXX,XX @@ static void do_ldrq(DisasContext *s, int zt, int pg, TCGv_i64 addr, int dtype)
669
670
poff = offsetof(CPUARMState, vfp.preg_tmp);
671
tcg_gen_st_i64(tmp, cpu_env, poff);
672
- tcg_temp_free_i64(tmp);
673
}
674
675
t_pg = tcg_temp_new_ptr();
676
@@ -XXX,XX +XXX,XX @@ static void do_ldrq(DisasContext *s, int zt, int pg, TCGv_i64 addr, int dtype)
677
= ldr_fns[s->mte_active[0]][s->be_data == MO_BE][dtype][0];
678
fn(cpu_env, t_pg, addr, tcg_constant_i32(simd_desc(16, 16, zt)));
679
680
- tcg_temp_free_ptr(t_pg);
681
-
682
/* Replicate that first quadword. */
683
if (vsz > 16) {
684
int doff = vec_full_reg_offset(s, zt);
685
@@ -XXX,XX +XXX,XX @@ static void do_ldro(DisasContext *s, int zt, int pg, TCGv_i64 addr, int dtype)
686
687
poff = offsetof(CPUARMState, vfp.preg_tmp);
688
tcg_gen_st_i64(tmp, cpu_env, poff);
689
- tcg_temp_free_i64(tmp);
690
}
691
692
t_pg = tcg_temp_new_ptr();
693
@@ -XXX,XX +XXX,XX @@ static void do_ldro(DisasContext *s, int zt, int pg, TCGv_i64 addr, int dtype)
694
= ldr_fns[s->mte_active[0]][s->be_data == MO_BE][dtype][0];
695
fn(cpu_env, t_pg, addr, tcg_constant_i32(simd_desc(32, 32, zt)));
696
697
- tcg_temp_free_ptr(t_pg);
698
-
699
/*
700
* Replicate that first octaword.
701
* The replication happens in units of 32; if the full vector size
702
@@ -XXX,XX +XXX,XX @@ static bool trans_LD1R_zpri(DisasContext *s, arg_rpri_load *a)
703
tcg_gen_ld_i64(temp, cpu_env, pred_full_reg_offset(s, a->pg));
704
tcg_gen_andi_i64(temp, temp, pred_esz_masks[esz] & psz_mask);
705
tcg_gen_brcondi_i64(TCG_COND_EQ, temp, 0, over);
706
- tcg_temp_free_i64(temp);
707
} else {
708
TCGv_i32 t32 = tcg_temp_new_i32();
709
find_last_active(s, t32, esz, a->pg);
710
tcg_gen_brcondi_i32(TCG_COND_LT, t32, 0, over);
711
- tcg_temp_free_i32(t32);
712
}
713
714
/* Load the data. */
715
@@ -XXX,XX +XXX,XX @@ static bool trans_LD1R_zpri(DisasContext *s, arg_rpri_load *a)
716
/* Broadcast to *all* elements. */
717
tcg_gen_gvec_dup_i64(esz, vec_full_reg_offset(s, a->rd),
718
vsz, vsz, temp);
719
- tcg_temp_free_i64(temp);
720
721
/* Zero the inactive elements. */
722
gen_set_label(over);
723
@@ -XXX,XX +XXX,XX @@ static void do_mem_zpz(DisasContext *s, int zt, int pg, int zm,
724
tcg_gen_addi_ptr(t_zm, cpu_env, vec_full_reg_offset(s, zm));
725
tcg_gen_addi_ptr(t_zt, cpu_env, vec_full_reg_offset(s, zt));
726
fn(cpu_env, t_zt, t_pg, t_zm, scalar, tcg_constant_i32(desc));
727
-
728
- tcg_temp_free_ptr(t_zt);
729
- tcg_temp_free_ptr(t_zm);
730
- tcg_temp_free_ptr(t_pg);
731
}
732
733
/* Indexed by [mte][be][ff][xs][u][msz]. */
734
@@ -XXX,XX +XXX,XX @@ static void gen_sshll_vec(unsigned vece, TCGv_vec d, TCGv_vec n, int64_t imm)
735
TCGv_vec t = tcg_temp_new_vec_matching(d);
736
tcg_gen_dupi_vec(vece, t, MAKE_64BIT_MASK(halfbits, halfbits));
737
tcg_gen_and_vec(vece, d, n, t);
738
- tcg_temp_free_vec(t);
739
} else {
740
tcg_gen_sari_vec(vece, d, n, halfbits);
741
tcg_gen_shli_vec(vece, d, d, shl);
742
@@ -XXX,XX +XXX,XX @@ static void gen_ushll_vec(unsigned vece, TCGv_vec d, TCGv_vec n, int64_t imm)
743
TCGv_vec t = tcg_temp_new_vec_matching(d);
744
tcg_gen_dupi_vec(vece, t, MAKE_64BIT_MASK(halfbits, halfbits));
745
tcg_gen_and_vec(vece, d, n, t);
746
- tcg_temp_free_vec(t);
747
} else {
748
tcg_gen_shri_vec(vece, d, n, halfbits);
749
tcg_gen_shli_vec(vece, d, d, shl);
750
@@ -XXX,XX +XXX,XX @@ static void gen_ushll_vec(unsigned vece, TCGv_vec d, TCGv_vec n, int64_t imm)
751
TCGv_vec t = tcg_temp_new_vec_matching(d);
752
tcg_gen_dupi_vec(vece, t, MAKE_64BIT_MASK(0, halfbits));
753
tcg_gen_and_vec(vece, d, n, t);
754
- tcg_temp_free_vec(t);
755
} else {
756
tcg_gen_shli_vec(vece, d, n, halfbits);
757
tcg_gen_shri_vec(vece, d, d, halfbits - shl);
758
@@ -XXX,XX +XXX,XX @@ static void gen_sqxtnb_vec(unsigned vece, TCGv_vec d, TCGv_vec n)
759
tcg_gen_smin_vec(vece, d, d, t);
760
tcg_gen_dupi_vec(vece, t, mask);
761
tcg_gen_and_vec(vece, d, d, t);
762
- tcg_temp_free_vec(t);
763
}
764
765
static const GVecGen2 sqxtnb_ops[3] = {
766
@@ -XXX,XX +XXX,XX @@ static void gen_sqxtnt_vec(unsigned vece, TCGv_vec d, TCGv_vec n)
767
tcg_gen_shli_vec(vece, n, n, halfbits);
768
tcg_gen_dupi_vec(vece, t, mask);
769
tcg_gen_bitsel_vec(vece, d, t, d, n);
770
- tcg_temp_free_vec(t);
771
}
772
773
static const GVecGen2 sqxtnt_ops[3] = {
774
@@ -XXX,XX +XXX,XX @@ static void gen_uqxtnb_vec(unsigned vece, TCGv_vec d, TCGv_vec n)
775
776
tcg_gen_dupi_vec(vece, t, max);
777
tcg_gen_umin_vec(vece, d, n, t);
778
- tcg_temp_free_vec(t);
779
}
780
781
static const GVecGen2 uqxtnb_ops[3] = {
782
@@ -XXX,XX +XXX,XX @@ static void gen_uqxtnt_vec(unsigned vece, TCGv_vec d, TCGv_vec n)
783
tcg_gen_umin_vec(vece, n, n, t);
784
tcg_gen_shli_vec(vece, n, n, halfbits);
785
tcg_gen_bitsel_vec(vece, d, t, d, n);
786
- tcg_temp_free_vec(t);
787
}
788
789
static const GVecGen2 uqxtnt_ops[3] = {
790
@@ -XXX,XX +XXX,XX @@ static void gen_sqxtunb_vec(unsigned vece, TCGv_vec d, TCGv_vec n)
791
tcg_gen_smax_vec(vece, d, n, t);
792
tcg_gen_dupi_vec(vece, t, max);
793
tcg_gen_umin_vec(vece, d, d, t);
794
- tcg_temp_free_vec(t);
795
}
796
797
static const GVecGen2 sqxtunb_ops[3] = {
798
@@ -XXX,XX +XXX,XX @@ static void gen_sqxtunt_vec(unsigned vece, TCGv_vec d, TCGv_vec n)
799
tcg_gen_umin_vec(vece, n, n, t);
800
tcg_gen_shli_vec(vece, n, n, halfbits);
801
tcg_gen_bitsel_vec(vece, d, t, d, n);
802
- tcg_temp_free_vec(t);
803
}
804
805
static const GVecGen2 sqxtunt_ops[3] = {
806
@@ -XXX,XX +XXX,XX @@ static void gen_shrnb_vec(unsigned vece, TCGv_vec d, TCGv_vec n, int64_t shr)
807
tcg_gen_shri_vec(vece, n, n, shr);
808
tcg_gen_dupi_vec(vece, t, mask);
809
tcg_gen_and_vec(vece, d, n, t);
810
- tcg_temp_free_vec(t);
811
}
812
813
static const TCGOpcode shrnb_vec_list[] = { INDEX_op_shri_vec, 0 };
814
@@ -XXX,XX +XXX,XX @@ static void gen_shrnt_vec(unsigned vece, TCGv_vec d, TCGv_vec n, int64_t shr)
815
tcg_gen_shli_vec(vece, n, n, halfbits - shr);
816
tcg_gen_dupi_vec(vece, t, mask);
817
tcg_gen_bitsel_vec(vece, d, t, d, n);
818
- tcg_temp_free_vec(t);
819
}
820
821
static const TCGOpcode shrnt_vec_list[] = { INDEX_op_shli_vec, 0 };
822
@@ -XXX,XX +XXX,XX @@ static void gen_sqshrunb_vec(unsigned vece, TCGv_vec d,
823
tcg_gen_smax_vec(vece, n, n, t);
824
tcg_gen_dupi_vec(vece, t, MAKE_64BIT_MASK(0, halfbits));
825
tcg_gen_umin_vec(vece, d, n, t);
826
- tcg_temp_free_vec(t);
827
}
828
829
static const TCGOpcode sqshrunb_vec_list[] = {
830
@@ -XXX,XX +XXX,XX @@ static void gen_sqshrunt_vec(unsigned vece, TCGv_vec d,
831
tcg_gen_umin_vec(vece, n, n, t);
832
tcg_gen_shli_vec(vece, n, n, halfbits);
833
tcg_gen_bitsel_vec(vece, d, t, d, n);
834
- tcg_temp_free_vec(t);
835
}
836
837
static const TCGOpcode sqshrunt_vec_list[] = {
838
@@ -XXX,XX +XXX,XX @@ static void gen_sqshrnb_vec(unsigned vece, TCGv_vec d,
839
tcg_gen_smin_vec(vece, n, n, t);
840
tcg_gen_dupi_vec(vece, t, MAKE_64BIT_MASK(0, halfbits));
841
tcg_gen_and_vec(vece, d, n, t);
842
- tcg_temp_free_vec(t);
843
}
844
845
static const TCGOpcode sqshrnb_vec_list[] = {
846
@@ -XXX,XX +XXX,XX @@ static void gen_sqshrnt_vec(unsigned vece, TCGv_vec d,
847
tcg_gen_shli_vec(vece, n, n, halfbits);
848
tcg_gen_dupi_vec(vece, t, MAKE_64BIT_MASK(0, halfbits));
849
tcg_gen_bitsel_vec(vece, d, t, d, n);
850
- tcg_temp_free_vec(t);
851
}
852
853
static const TCGOpcode sqshrnt_vec_list[] = {
854
@@ -XXX,XX +XXX,XX @@ static void gen_uqshrnb_vec(unsigned vece, TCGv_vec d,
855
tcg_gen_shri_vec(vece, n, n, shr);
856
tcg_gen_dupi_vec(vece, t, MAKE_64BIT_MASK(0, halfbits));
857
tcg_gen_umin_vec(vece, d, n, t);
858
- tcg_temp_free_vec(t);
859
}
860
861
static const TCGOpcode uqshrnb_vec_list[] = {
862
@@ -XXX,XX +XXX,XX @@ static void gen_uqshrnt_vec(unsigned vece, TCGv_vec d,
863
tcg_gen_umin_vec(vece, n, n, t);
864
tcg_gen_shli_vec(vece, n, n, halfbits);
865
tcg_gen_bitsel_vec(vece, d, t, d, n);
866
- tcg_temp_free_vec(t);
867
}
868
869
static const TCGOpcode uqshrnt_vec_list[] = {
870
@@ -XXX,XX +XXX,XX @@ static bool trans_PSEL(DisasContext *s, arg_psel *a)
871
/* Apply to either copy the source, or write zeros. */
872
tcg_gen_gvec_ands(MO_64, pred_full_reg_offset(s, a->pd),
873
pred_full_reg_offset(s, a->pn), tmp, pl, pl);
874
-
875
- tcg_temp_free_i64(tmp);
876
- tcg_temp_free_i64(dbit);
877
- tcg_temp_free_i64(didx);
878
- tcg_temp_free_ptr(ptr);
879
return true;
880
}
881
882
--
206
--
883
2.34.1
207
2.43.0
diff view generated by jsdifflib
1
Pass CPUTLBEntryFull to get_physical_address instead
1
Replace target-specific 'Z' with generic 'z'.
2
of a collection of pointers.
3
2
4
Acked-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
5
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
3
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
6
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
7
---
5
---
8
target/sparc/mmu_helper.c | 121 +++++++++++++++++---------------------
6
tcg/loongarch64/tcg-target-con-set.h | 15 ++++++-------
9
1 file changed, 54 insertions(+), 67 deletions(-)
7
tcg/loongarch64/tcg-target-con-str.h | 1 -
8
tcg/loongarch64/tcg-target.c.inc | 32 ++++++++++++----------------
9
3 files changed, 21 insertions(+), 27 deletions(-)
10
10
11
diff --git a/target/sparc/mmu_helper.c b/target/sparc/mmu_helper.c
11
diff --git a/tcg/loongarch64/tcg-target-con-set.h b/tcg/loongarch64/tcg-target-con-set.h
12
index XXXXXXX..XXXXXXX 100644
12
index XXXXXXX..XXXXXXX 100644
13
--- a/target/sparc/mmu_helper.c
13
--- a/tcg/loongarch64/tcg-target-con-set.h
14
+++ b/target/sparc/mmu_helper.c
14
+++ b/tcg/loongarch64/tcg-target-con-set.h
15
@@ -XXX,XX +XXX,XX @@ static const int perm_table[2][8] = {
15
@@ -XXX,XX +XXX,XX @@
16
}
16
* tcg-target-con-str.h; the constraint combination is inclusive or.
17
};
17
*/
18
18
C_O0_I1(r)
19
-static int get_physical_address(CPUSPARCState *env, hwaddr *physical,
19
-C_O0_I2(rZ, r)
20
- int *prot, int *access_index, MemTxAttrs *attrs,
20
-C_O0_I2(rZ, rZ)
21
- target_ulong address, int rw, int mmu_idx,
21
+C_O0_I2(rz, r)
22
- target_ulong *page_size)
22
+C_O0_I2(rz, rz)
23
+static int get_physical_address(CPUSPARCState *env, CPUTLBEntryFull *full,
23
C_O0_I2(w, r)
24
+ int *access_index, target_ulong address,
24
C_O0_I3(r, r, r)
25
+ int rw, int mmu_idx)
25
C_O1_I1(r, r)
26
{
26
@@ -XXX,XX +XXX,XX @@ C_O1_I2(r, r, rI)
27
int access_perms = 0;
27
C_O1_I2(r, r, rJ)
28
hwaddr pde_ptr;
28
C_O1_I2(r, r, rU)
29
@@ -XXX,XX +XXX,XX @@ static int get_physical_address(CPUSPARCState *env, hwaddr *physical,
29
C_O1_I2(r, r, rW)
30
is_user = mmu_idx == MMU_USER_IDX;
30
-C_O1_I2(r, r, rZ)
31
31
-C_O1_I2(r, 0, rZ)
32
if (mmu_idx == MMU_PHYS_IDX) {
32
-C_O1_I2(r, rZ, ri)
33
- *page_size = TARGET_PAGE_SIZE;
33
-C_O1_I2(r, rZ, rJ)
34
+ full->lg_page_size = TARGET_PAGE_BITS;
34
-C_O1_I2(r, rZ, rZ)
35
/* Boot mode: instruction fetches are taken from PROM */
35
+C_O1_I2(r, 0, rz)
36
if (rw == 2 && (env->mmuregs[0] & env->def.mmu_bm)) {
36
+C_O1_I2(r, rz, ri)
37
- *physical = env->prom_addr | (address & 0x7ffffULL);
37
+C_O1_I2(r, rz, rJ)
38
- *prot = PAGE_READ | PAGE_EXEC;
38
+C_O1_I2(r, rz, rz)
39
+ full->phys_addr = env->prom_addr | (address & 0x7ffffULL);
39
C_O1_I2(w, w, w)
40
+ full->prot = PAGE_READ | PAGE_EXEC;
40
C_O1_I2(w, w, wM)
41
return 0;
41
C_O1_I2(w, w, wA)
42
}
42
C_O1_I3(w, w, w, w)
43
- *physical = address;
43
-C_O1_I4(r, rZ, rJ, rZ, rZ)
44
- *prot = PAGE_READ | PAGE_WRITE | PAGE_EXEC;
44
+C_O1_I4(r, rz, rJ, rz, rz)
45
+ full->phys_addr = address;
45
C_N2_I1(r, r, r)
46
+ full->prot = PAGE_READ | PAGE_WRITE | PAGE_EXEC;
46
diff --git a/tcg/loongarch64/tcg-target-con-str.h b/tcg/loongarch64/tcg-target-con-str.h
47
return 0;
47
index XXXXXXX..XXXXXXX 100644
48
}
48
--- a/tcg/loongarch64/tcg-target-con-str.h
49
49
+++ b/tcg/loongarch64/tcg-target-con-str.h
50
*access_index = ((rw & 1) << 2) | (rw & 2) | (is_user ? 0 : 1);
50
@@ -XXX,XX +XXX,XX @@ REGS('w', ALL_VECTOR_REGS)
51
- *physical = 0xffffffffffff0000ULL;
51
CONST('I', TCG_CT_CONST_S12)
52
+ full->phys_addr = 0xffffffffffff0000ULL;
52
CONST('J', TCG_CT_CONST_S32)
53
53
CONST('U', TCG_CT_CONST_U12)
54
/* SPARC reference MMU table walk: Context table->L1->L2->PTE */
54
-CONST('Z', TCG_CT_CONST_ZERO)
55
/* Context base + context number */
55
CONST('C', TCG_CT_CONST_C12)
56
@@ -XXX,XX +XXX,XX @@ static int get_physical_address(CPUSPARCState *env, hwaddr *physical,
56
CONST('W', TCG_CT_CONST_WSZ)
57
case 2: /* L3 PTE */
57
CONST('M', TCG_CT_CONST_VCMP)
58
page_offset = 0;
58
diff --git a/tcg/loongarch64/tcg-target.c.inc b/tcg/loongarch64/tcg-target.c.inc
59
}
59
index XXXXXXX..XXXXXXX 100644
60
- *page_size = TARGET_PAGE_SIZE;
60
--- a/tcg/loongarch64/tcg-target.c.inc
61
+ full->lg_page_size = TARGET_PAGE_BITS;
61
+++ b/tcg/loongarch64/tcg-target.c.inc
62
break;
62
@@ -XXX,XX +XXX,XX @@ static TCGReg tcg_target_call_oarg_reg(TCGCallReturnKind kind, int slot)
63
case 2: /* L2 PTE */
63
64
page_offset = address & 0x3f000;
64
#define TCG_GUEST_BASE_REG TCG_REG_S1
65
- *page_size = 0x40000;
65
66
+ full->lg_page_size = 18;
66
-#define TCG_CT_CONST_ZERO 0x100
67
}
67
-#define TCG_CT_CONST_S12 0x200
68
break;
68
-#define TCG_CT_CONST_S32 0x400
69
case 2: /* L1 PTE */
69
-#define TCG_CT_CONST_U12 0x800
70
page_offset = address & 0xfff000;
70
-#define TCG_CT_CONST_C12 0x1000
71
- *page_size = 0x1000000;
71
-#define TCG_CT_CONST_WSZ 0x2000
72
+ full->lg_page_size = 24;
72
-#define TCG_CT_CONST_VCMP 0x4000
73
+ break;
73
-#define TCG_CT_CONST_VADD 0x8000
74
}
74
+#define TCG_CT_CONST_S12 0x100
75
}
75
+#define TCG_CT_CONST_S32 0x200
76
76
+#define TCG_CT_CONST_U12 0x400
77
@@ -XXX,XX +XXX,XX @@ static int get_physical_address(CPUSPARCState *env, hwaddr *physical,
77
+#define TCG_CT_CONST_C12 0x800
78
}
78
+#define TCG_CT_CONST_WSZ 0x1000
79
79
+#define TCG_CT_CONST_VCMP 0x2000
80
/* the page can be put in the TLB */
80
+#define TCG_CT_CONST_VADD 0x4000
81
- *prot = perm_table[is_user][access_perms];
81
82
+ full->prot = perm_table[is_user][access_perms];
82
#define ALL_GENERAL_REGS MAKE_64BIT_MASK(0, 32)
83
if (!(pde & PG_MODIFIED_MASK)) {
83
#define ALL_VECTOR_REGS MAKE_64BIT_MASK(32, 32)
84
/* only set write access if already dirty... otherwise wait
84
@@ -XXX,XX +XXX,XX @@ static bool tcg_target_const_match(int64_t val, int ct,
85
for dirty access */
85
if (ct & TCG_CT_CONST) {
86
- *prot &= ~PAGE_WRITE;
87
+ full->prot &= ~PAGE_WRITE;
88
}
89
90
/* Even if large ptes, we map only one 4KB page in the cache to
91
avoid filling it too fast */
92
- *physical = ((hwaddr)(pde & PTE_ADDR_MASK) << 4) + page_offset;
93
+ full->phys_addr = ((hwaddr)(pde & PTE_ADDR_MASK) << 4) + page_offset;
94
return error_code;
95
}
96
97
@@ -XXX,XX +XXX,XX @@ bool sparc_cpu_tlb_fill(CPUState *cs, vaddr address, int size,
98
{
99
SPARCCPU *cpu = SPARC_CPU(cs);
100
CPUSPARCState *env = &cpu->env;
101
- hwaddr paddr;
102
+ CPUTLBEntryFull full = {};
103
target_ulong vaddr;
104
- target_ulong page_size;
105
- int error_code = 0, prot, access_index;
106
- MemTxAttrs attrs = {};
107
+ int error_code = 0, access_index;
108
109
/*
110
* TODO: If we ever need tlb_vaddr_to_host for this target,
111
@@ -XXX,XX +XXX,XX @@ bool sparc_cpu_tlb_fill(CPUState *cs, vaddr address, int size,
112
assert(!probe);
113
114
address &= TARGET_PAGE_MASK;
115
- error_code = get_physical_address(env, &paddr, &prot, &access_index, &attrs,
116
- address, access_type,
117
- mmu_idx, &page_size);
118
+ error_code = get_physical_address(env, &full, &access_index,
119
+ address, access_type, mmu_idx);
120
vaddr = address;
121
if (likely(error_code == 0)) {
122
qemu_log_mask(CPU_LOG_MMU,
123
"Translate at %" VADDR_PRIx " -> "
124
HWADDR_FMT_plx ", vaddr " TARGET_FMT_lx "\n",
125
- address, paddr, vaddr);
126
- tlb_set_page(cs, vaddr, paddr, prot, mmu_idx, page_size);
127
+ address, full.phys_addr, vaddr);
128
+ tlb_set_page_full(cs, mmu_idx, vaddr, &full);
129
return true;
86
return true;
130
}
87
}
131
88
- if ((ct & TCG_CT_CONST_ZERO) && val == 0) {
132
@@ -XXX,XX +XXX,XX @@ bool sparc_cpu_tlb_fill(CPUState *cs, vaddr address, int size,
89
- return true;
133
permissions. If no mapping is available, redirect accesses to
90
- }
134
neverland. Fake/overridden mappings will be flushed when
91
if ((ct & TCG_CT_CONST_S12) && val == sextreg(val, 0, 12)) {
135
switching to normal mode. */
136
- prot = PAGE_READ | PAGE_WRITE | PAGE_EXEC;
137
- tlb_set_page(cs, vaddr, paddr, prot, mmu_idx, TARGET_PAGE_SIZE);
138
+ full.prot = PAGE_READ | PAGE_WRITE | PAGE_EXEC;
139
+ tlb_set_page_full(cs, mmu_idx, vaddr, &full);
140
return true;
141
} else {
142
if (access_type == MMU_INST_FETCH) {
143
@@ -XXX,XX +XXX,XX @@ static uint64_t build_sfsr(CPUSPARCState *env, int mmu_idx, int rw)
144
return sfsr;
145
}
146
147
-static int get_physical_address_data(CPUSPARCState *env, hwaddr *physical,
148
- int *prot, MemTxAttrs *attrs,
149
+static int get_physical_address_data(CPUSPARCState *env, CPUTLBEntryFull *full,
150
target_ulong address, int rw, int mmu_idx)
151
{
152
CPUState *cs = env_cpu(env);
153
@@ -XXX,XX +XXX,XX @@ static int get_physical_address_data(CPUSPARCState *env, hwaddr *physical,
154
155
for (i = 0; i < 64; i++) {
156
/* ctx match, vaddr match, valid? */
157
- if (ultrasparc_tag_match(&env->dtlb[i], address, context, physical)) {
158
+ if (ultrasparc_tag_match(&env->dtlb[i], address, context,
159
+ &full->phys_addr)) {
160
int do_fault = 0;
161
162
if (TTE_IS_IE(env->dtlb[i].tte)) {
163
- attrs->byte_swap = true;
164
+ full->attrs.byte_swap = true;
165
}
166
167
/* access ok? */
168
@@ -XXX,XX +XXX,XX @@ static int get_physical_address_data(CPUSPARCState *env, hwaddr *physical,
169
}
170
171
if (!do_fault) {
172
- *prot = PAGE_READ;
173
+ full->prot = PAGE_READ;
174
if (TTE_IS_W_OK(env->dtlb[i].tte)) {
175
- *prot |= PAGE_WRITE;
176
+ full->prot |= PAGE_WRITE;
177
}
178
179
TTE_SET_USED(env->dtlb[i].tte);
180
@@ -XXX,XX +XXX,XX @@ static int get_physical_address_data(CPUSPARCState *env, hwaddr *physical,
181
return 1;
182
}
183
184
-static int get_physical_address_code(CPUSPARCState *env, hwaddr *physical,
185
- int *prot, MemTxAttrs *attrs,
186
+static int get_physical_address_code(CPUSPARCState *env, CPUTLBEntryFull *full,
187
target_ulong address, int mmu_idx)
188
{
189
CPUState *cs = env_cpu(env);
190
@@ -XXX,XX +XXX,XX @@ static int get_physical_address_code(CPUSPARCState *env, hwaddr *physical,
191
for (i = 0; i < 64; i++) {
192
/* ctx match, vaddr match, valid? */
193
if (ultrasparc_tag_match(&env->itlb[i],
194
- address, context, physical)) {
195
+ address, context, &full->phys_addr)) {
196
/* access ok? */
197
if (TTE_IS_PRIV(env->itlb[i].tte) && is_user) {
198
/* Fault status register */
199
@@ -XXX,XX +XXX,XX @@ static int get_physical_address_code(CPUSPARCState *env, hwaddr *physical,
200
201
return 1;
202
}
203
- *prot = PAGE_EXEC;
204
+ full->prot = PAGE_EXEC;
205
TTE_SET_USED(env->itlb[i].tte);
206
return 0;
207
}
208
@@ -XXX,XX +XXX,XX @@ static int get_physical_address_code(CPUSPARCState *env, hwaddr *physical,
209
return 1;
210
}
211
212
-static int get_physical_address(CPUSPARCState *env, hwaddr *physical,
213
- int *prot, int *access_index, MemTxAttrs *attrs,
214
- target_ulong address, int rw, int mmu_idx,
215
- target_ulong *page_size)
216
+static int get_physical_address(CPUSPARCState *env, CPUTLBEntryFull *full,
217
+ int *access_index, target_ulong address,
218
+ int rw, int mmu_idx)
219
{
220
/* ??? We treat everything as a small page, then explicitly flush
221
everything when an entry is evicted. */
222
- *page_size = TARGET_PAGE_SIZE;
223
+ full->lg_page_size = TARGET_PAGE_BITS;
224
225
/* safety net to catch wrong softmmu index use from dynamic code */
226
if (env->tl > 0 && mmu_idx != MMU_NUCLEUS_IDX) {
227
@@ -XXX,XX +XXX,XX @@ static int get_physical_address(CPUSPARCState *env, hwaddr *physical,
228
}
229
230
if (mmu_idx == MMU_PHYS_IDX) {
231
- *physical = ultrasparc_truncate_physical(address);
232
- *prot = PAGE_READ | PAGE_WRITE | PAGE_EXEC;
233
+ full->phys_addr = ultrasparc_truncate_physical(address);
234
+ full->prot = PAGE_READ | PAGE_WRITE | PAGE_EXEC;
235
return 0;
236
}
237
238
if (rw == 2) {
239
- return get_physical_address_code(env, physical, prot, attrs, address,
240
- mmu_idx);
241
+ return get_physical_address_code(env, full, address, mmu_idx);
242
} else {
243
- return get_physical_address_data(env, physical, prot, attrs, address,
244
- rw, mmu_idx);
245
+ return get_physical_address_data(env, full, address, rw, mmu_idx);
246
}
247
}
248
249
@@ -XXX,XX +XXX,XX @@ bool sparc_cpu_tlb_fill(CPUState *cs, vaddr address, int size,
250
{
251
SPARCCPU *cpu = SPARC_CPU(cs);
252
CPUSPARCState *env = &cpu->env;
253
- target_ulong vaddr;
254
- hwaddr paddr;
255
- target_ulong page_size;
256
- MemTxAttrs attrs = {};
257
- int error_code = 0, prot, access_index;
258
+ CPUTLBEntryFull full = {};
259
+ int error_code = 0, access_index;
260
261
address &= TARGET_PAGE_MASK;
262
- error_code = get_physical_address(env, &paddr, &prot, &access_index, &attrs,
263
- address, access_type,
264
- mmu_idx, &page_size);
265
+ error_code = get_physical_address(env, &full, &access_index,
266
+ address, access_type, mmu_idx);
267
if (likely(error_code == 0)) {
268
- vaddr = address;
269
-
270
- trace_mmu_helper_mmu_fault(address, paddr, mmu_idx, env->tl,
271
+ trace_mmu_helper_mmu_fault(address, full.phys_addr, mmu_idx, env->tl,
272
env->dmmu.mmu_primary_context,
273
env->dmmu.mmu_secondary_context);
274
-
275
- tlb_set_page_with_attrs(cs, vaddr, paddr, attrs, prot, mmu_idx,
276
- page_size);
277
+ tlb_set_page_full(cs, mmu_idx, address, &full);
278
return true;
92
return true;
279
}
93
}
280
if (probe) {
94
@@ -XXX,XX +XXX,XX @@ tcg_target_op_def(TCGOpcode op, TCGType type, unsigned flags)
281
@@ -XXX,XX +XXX,XX @@ void dump_mmu(CPUSPARCState *env)
95
case INDEX_op_st_i64:
282
static int cpu_sparc_get_phys_page(CPUSPARCState *env, hwaddr *phys,
96
case INDEX_op_qemu_st_i32:
283
target_ulong addr, int rw, int mmu_idx)
97
case INDEX_op_qemu_st_i64:
284
{
98
- return C_O0_I2(rZ, r);
285
- target_ulong page_size;
99
+ return C_O0_I2(rz, r);
286
- int prot, access_index;
100
287
- MemTxAttrs attrs = {};
101
case INDEX_op_qemu_ld_i128:
288
+ CPUTLBEntryFull full = {};
102
return C_N2_I1(r, r, r);
289
+ int access_index, ret;
103
@@ -XXX,XX +XXX,XX @@ tcg_target_op_def(TCGOpcode op, TCGType type, unsigned flags)
290
104
291
- return get_physical_address(env, phys, &prot, &access_index, &attrs, addr,
105
case INDEX_op_brcond_i32:
292
- rw, mmu_idx, &page_size);
106
case INDEX_op_brcond_i64:
293
+ ret = get_physical_address(env, &full, &access_index, addr, rw, mmu_idx);
107
- return C_O0_I2(rZ, rZ);
294
+ if (ret == 0) {
108
+ return C_O0_I2(rz, rz);
295
+ *phys = full.phys_addr;
109
296
+ }
110
case INDEX_op_ext8s_i32:
297
+ return ret;
111
case INDEX_op_ext8s_i64:
298
}
112
@@ -XXX,XX +XXX,XX @@ tcg_target_op_def(TCGOpcode op, TCGType type, unsigned flags)
299
113
case INDEX_op_deposit_i32:
300
#if defined(TARGET_SPARC64)
114
case INDEX_op_deposit_i64:
115
/* Must deposit into the same register as input */
116
- return C_O1_I2(r, 0, rZ);
117
+ return C_O1_I2(r, 0, rz);
118
119
case INDEX_op_sub_i32:
120
case INDEX_op_setcond_i32:
121
- return C_O1_I2(r, rZ, ri);
122
+ return C_O1_I2(r, rz, ri);
123
case INDEX_op_sub_i64:
124
case INDEX_op_setcond_i64:
125
- return C_O1_I2(r, rZ, rJ);
126
+ return C_O1_I2(r, rz, rJ);
127
128
case INDEX_op_mul_i32:
129
case INDEX_op_mul_i64:
130
@@ -XXX,XX +XXX,XX @@ tcg_target_op_def(TCGOpcode op, TCGType type, unsigned flags)
131
case INDEX_op_rem_i64:
132
case INDEX_op_remu_i32:
133
case INDEX_op_remu_i64:
134
- return C_O1_I2(r, rZ, rZ);
135
+ return C_O1_I2(r, rz, rz);
136
137
case INDEX_op_movcond_i32:
138
case INDEX_op_movcond_i64:
139
- return C_O1_I4(r, rZ, rJ, rZ, rZ);
140
+ return C_O1_I4(r, rz, rJ, rz, rz);
141
142
case INDEX_op_ld_vec:
143
case INDEX_op_dupm_vec:
301
--
144
--
302
2.34.1
145
2.43.0
303
146
304
147
diff view generated by jsdifflib
Deleted patch
1
Using an atomic write or read-write insn on ROM is basically
2
a happens-never case. Handle it via stop-the-world, which
3
will generate non-atomic serial code, where we can correctly
4
ignore the write while producing the correct read result.
5
1
6
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
7
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
8
---
9
accel/tcg/cputlb.c | 2 +-
10
1 file changed, 1 insertion(+), 1 deletion(-)
11
12
diff --git a/accel/tcg/cputlb.c b/accel/tcg/cputlb.c
13
index XXXXXXX..XXXXXXX 100644
14
--- a/accel/tcg/cputlb.c
15
+++ b/accel/tcg/cputlb.c
16
@@ -XXX,XX +XXX,XX @@ static void *atomic_mmu_lookup(CPUArchState *env, target_ulong addr,
17
}
18
19
/* Notice an IO access or a needs-MMU-lookup access */
20
- if (unlikely(tlb_addr & TLB_MMIO)) {
21
+ if (unlikely(tlb_addr & (TLB_MMIO | TLB_DISCARD_WRITE))) {
22
/* There's really nothing that can be done to
23
support this apart from stop-the-world. */
24
goto stop_the_world;
25
--
26
2.34.1
diff view generated by jsdifflib
1
Atomic operations are read-modify-write, and we'd like to
1
Replace target-specific 'Z' with generic 'z'.
2
be able to test both read and write with one call. This is
3
easy enough, with BP_MEM_READ | BP_MEM_WRITE.
4
5
Add BP_HIT_SHIFT to make it easy to set BP_WATCHPOINT_HIT_*.
6
2
7
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
3
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
8
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
9
---
5
---
10
include/hw/core/cpu.h | 7 ++++---
6
tcg/mips/tcg-target-con-set.h | 26 ++++++++++-----------
11
softmmu/watchpoint.c | 19 ++++++++++---------
7
tcg/mips/tcg-target-con-str.h | 1 -
12
2 files changed, 14 insertions(+), 12 deletions(-)
8
tcg/mips/tcg-target.c.inc | 44 ++++++++++++++---------------------
9
3 files changed, 31 insertions(+), 40 deletions(-)
13
10
14
diff --git a/include/hw/core/cpu.h b/include/hw/core/cpu.h
11
diff --git a/tcg/mips/tcg-target-con-set.h b/tcg/mips/tcg-target-con-set.h
15
index XXXXXXX..XXXXXXX 100644
12
index XXXXXXX..XXXXXXX 100644
16
--- a/include/hw/core/cpu.h
13
--- a/tcg/mips/tcg-target-con-set.h
17
+++ b/include/hw/core/cpu.h
14
+++ b/tcg/mips/tcg-target-con-set.h
18
@@ -XXX,XX +XXX,XX @@ void cpu_single_step(CPUState *cpu, int enabled);
15
@@ -XXX,XX +XXX,XX @@
19
#define BP_GDB 0x10
16
* tcg-target-con-str.h; the constraint combination is inclusive or.
20
#define BP_CPU 0x20
17
*/
21
#define BP_ANY (BP_GDB | BP_CPU)
18
C_O0_I1(r)
22
-#define BP_WATCHPOINT_HIT_READ 0x40
19
-C_O0_I2(rZ, r)
23
-#define BP_WATCHPOINT_HIT_WRITE 0x80
20
-C_O0_I2(rZ, rZ)
24
-#define BP_WATCHPOINT_HIT (BP_WATCHPOINT_HIT_READ | BP_WATCHPOINT_HIT_WRITE)
21
-C_O0_I3(rZ, r, r)
25
+#define BP_HIT_SHIFT 6
22
-C_O0_I3(rZ, rZ, r)
26
+#define BP_WATCHPOINT_HIT_READ (BP_MEM_READ << BP_HIT_SHIFT)
23
-C_O0_I4(rZ, rZ, rZ, rZ)
27
+#define BP_WATCHPOINT_HIT_WRITE (BP_MEM_WRITE << BP_HIT_SHIFT)
24
-C_O0_I4(rZ, rZ, r, r)
28
+#define BP_WATCHPOINT_HIT (BP_MEM_ACCESS << BP_HIT_SHIFT)
25
+C_O0_I2(rz, r)
29
26
+C_O0_I2(rz, rz)
30
int cpu_breakpoint_insert(CPUState *cpu, vaddr pc, int flags,
27
+C_O0_I3(rz, r, r)
31
CPUBreakpoint **breakpoint);
28
+C_O0_I3(rz, rz, r)
32
diff --git a/softmmu/watchpoint.c b/softmmu/watchpoint.c
29
+C_O0_I4(rz, rz, rz, rz)
30
+C_O0_I4(rz, rz, r, r)
31
C_O1_I1(r, r)
32
-C_O1_I2(r, 0, rZ)
33
+C_O1_I2(r, 0, rz)
34
C_O1_I2(r, r, r)
35
C_O1_I2(r, r, ri)
36
C_O1_I2(r, r, rI)
37
C_O1_I2(r, r, rIK)
38
C_O1_I2(r, r, rJ)
39
-C_O1_I2(r, r, rWZ)
40
-C_O1_I2(r, rZ, rN)
41
-C_O1_I2(r, rZ, rZ)
42
-C_O1_I4(r, rZ, rZ, rZ, 0)
43
-C_O1_I4(r, rZ, rZ, rZ, rZ)
44
+C_O1_I2(r, r, rzW)
45
+C_O1_I2(r, rz, rN)
46
+C_O1_I2(r, rz, rz)
47
+C_O1_I4(r, rz, rz, rz, 0)
48
+C_O1_I4(r, rz, rz, rz, rz)
49
C_O2_I1(r, r, r)
50
C_O2_I2(r, r, r, r)
51
-C_O2_I4(r, r, rZ, rZ, rN, rN)
52
+C_O2_I4(r, r, rz, rz, rN, rN)
53
diff --git a/tcg/mips/tcg-target-con-str.h b/tcg/mips/tcg-target-con-str.h
33
index XXXXXXX..XXXXXXX 100644
54
index XXXXXXX..XXXXXXX 100644
34
--- a/softmmu/watchpoint.c
55
--- a/tcg/mips/tcg-target-con-str.h
35
+++ b/softmmu/watchpoint.c
56
+++ b/tcg/mips/tcg-target-con-str.h
36
@@ -XXX,XX +XXX,XX @@ void cpu_check_watchpoint(CPUState *cpu, vaddr addr, vaddr len,
57
@@ -XXX,XX +XXX,XX @@ CONST('J', TCG_CT_CONST_S16)
37
/* this is currently used only by ARM BE32 */
58
CONST('K', TCG_CT_CONST_P2M1)
38
addr = cc->tcg_ops->adjust_watchpoint_address(cpu, addr, len);
59
CONST('N', TCG_CT_CONST_N16)
39
}
60
CONST('W', TCG_CT_CONST_WSZ)
40
+
61
-CONST('Z', TCG_CT_CONST_ZERO)
41
+ assert((flags & ~BP_MEM_ACCESS) == 0);
62
diff --git a/tcg/mips/tcg-target.c.inc b/tcg/mips/tcg-target.c.inc
42
QTAILQ_FOREACH(wp, &cpu->watchpoints, entry) {
63
index XXXXXXX..XXXXXXX 100644
43
- if (watchpoint_address_matches(wp, addr, len)
64
--- a/tcg/mips/tcg-target.c.inc
44
- && (wp->flags & flags)) {
65
+++ b/tcg/mips/tcg-target.c.inc
45
+ int hit_flags = wp->flags & flags;
66
@@ -XXX,XX +XXX,XX @@ static bool patch_reloc(tcg_insn_unit *code_ptr, int type,
46
+
67
g_assert_not_reached();
47
+ if (hit_flags && watchpoint_address_matches(wp, addr, len)) {
68
}
48
if (replay_running_debug()) {
69
49
/*
70
-#define TCG_CT_CONST_ZERO 0x100
50
* replay_breakpoint reads icount.
71
-#define TCG_CT_CONST_U16 0x200 /* Unsigned 16-bit: 0 - 0xffff. */
51
@@ -XXX,XX +XXX,XX @@ void cpu_check_watchpoint(CPUState *cpu, vaddr addr, vaddr len,
72
-#define TCG_CT_CONST_S16 0x400 /* Signed 16-bit: -32768 - 32767 */
52
replay_breakpoint();
73
-#define TCG_CT_CONST_P2M1 0x800 /* Power of 2 minus 1. */
53
return;
74
-#define TCG_CT_CONST_N16 0x1000 /* "Negatable" 16-bit: -32767 - 32767 */
54
}
75
-#define TCG_CT_CONST_WSZ 0x2000 /* word size */
55
- if (flags == BP_MEM_READ) {
76
+#define TCG_CT_CONST_U16 0x100 /* Unsigned 16-bit: 0 - 0xffff. */
56
- wp->flags |= BP_WATCHPOINT_HIT_READ;
77
+#define TCG_CT_CONST_S16 0x200 /* Signed 16-bit: -32768 - 32767 */
57
- } else {
78
+#define TCG_CT_CONST_P2M1 0x400 /* Power of 2 minus 1. */
58
- wp->flags |= BP_WATCHPOINT_HIT_WRITE;
79
+#define TCG_CT_CONST_N16 0x800 /* "Negatable" 16-bit: -32767 - 32767 */
59
- }
80
+#define TCG_CT_CONST_WSZ 0x1000 /* word size */
60
+
81
61
+ wp->flags |= hit_flags << BP_HIT_SHIFT;
82
#define ALL_GENERAL_REGS 0xffffffffu
62
wp->hitaddr = MAX(addr, wp->vaddr);
83
63
wp->hitattrs = attrs;
84
@@ -XXX,XX +XXX,XX @@ static bool tcg_target_const_match(int64_t val, int ct,
64
85
{
65
- if (wp->flags & BP_CPU && cc->tcg_ops->debug_check_watchpoint &&
86
if (ct & TCG_CT_CONST) {
66
- !cc->tcg_ops->debug_check_watchpoint(cpu, wp)) {
87
return 1;
67
+ if (wp->flags & BP_CPU
88
- } else if ((ct & TCG_CT_CONST_ZERO) && val == 0) {
68
+ && cc->tcg_ops->debug_check_watchpoint
89
- return 1;
69
+ && !cc->tcg_ops->debug_check_watchpoint(cpu, wp)) {
90
} else if ((ct & TCG_CT_CONST_U16) && val == (uint16_t)val) {
70
wp->flags &= ~BP_WATCHPOINT_HIT;
91
return 1;
71
continue;
92
} else if ((ct & TCG_CT_CONST_S16) && val == (int16_t)val) {
72
}
93
@@ -XXX,XX +XXX,XX @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, TCGType type,
94
TCGArg a0, a1, a2;
95
int c2;
96
97
- /*
98
- * Note that many operands use the constraint set "rZ".
99
- * We make use of the fact that 0 is the ZERO register,
100
- * and hence such cases need not check for const_args.
101
- */
102
a0 = args[0];
103
a1 = args[1];
104
a2 = args[2];
105
@@ -XXX,XX +XXX,XX @@ tcg_target_op_def(TCGOpcode op, TCGType type, unsigned flags)
106
case INDEX_op_st16_i64:
107
case INDEX_op_st32_i64:
108
case INDEX_op_st_i64:
109
- return C_O0_I2(rZ, r);
110
+ return C_O0_I2(rz, r);
111
112
case INDEX_op_add_i32:
113
case INDEX_op_add_i64:
114
return C_O1_I2(r, r, rJ);
115
case INDEX_op_sub_i32:
116
case INDEX_op_sub_i64:
117
- return C_O1_I2(r, rZ, rN);
118
+ return C_O1_I2(r, rz, rN);
119
case INDEX_op_mul_i32:
120
case INDEX_op_mulsh_i32:
121
case INDEX_op_muluh_i32:
122
@@ -XXX,XX +XXX,XX @@ tcg_target_op_def(TCGOpcode op, TCGType type, unsigned flags)
123
case INDEX_op_remu_i64:
124
case INDEX_op_nor_i64:
125
case INDEX_op_setcond_i64:
126
- return C_O1_I2(r, rZ, rZ);
127
+ return C_O1_I2(r, rz, rz);
128
case INDEX_op_muls2_i32:
129
case INDEX_op_mulu2_i32:
130
case INDEX_op_muls2_i64:
131
@@ -XXX,XX +XXX,XX @@ tcg_target_op_def(TCGOpcode op, TCGType type, unsigned flags)
132
return C_O1_I2(r, r, ri);
133
case INDEX_op_clz_i32:
134
case INDEX_op_clz_i64:
135
- return C_O1_I2(r, r, rWZ);
136
+ return C_O1_I2(r, r, rzW);
137
138
case INDEX_op_deposit_i32:
139
case INDEX_op_deposit_i64:
140
- return C_O1_I2(r, 0, rZ);
141
+ return C_O1_I2(r, 0, rz);
142
case INDEX_op_brcond_i32:
143
case INDEX_op_brcond_i64:
144
- return C_O0_I2(rZ, rZ);
145
+ return C_O0_I2(rz, rz);
146
case INDEX_op_movcond_i32:
147
case INDEX_op_movcond_i64:
148
return (use_mips32r6_instructions
149
- ? C_O1_I4(r, rZ, rZ, rZ, rZ)
150
- : C_O1_I4(r, rZ, rZ, rZ, 0));
151
+ ? C_O1_I4(r, rz, rz, rz, rz)
152
+ : C_O1_I4(r, rz, rz, rz, 0));
153
case INDEX_op_add2_i32:
154
case INDEX_op_sub2_i32:
155
- return C_O2_I4(r, r, rZ, rZ, rN, rN);
156
+ return C_O2_I4(r, r, rz, rz, rN, rN);
157
case INDEX_op_setcond2_i32:
158
- return C_O1_I4(r, rZ, rZ, rZ, rZ);
159
+ return C_O1_I4(r, rz, rz, rz, rz);
160
case INDEX_op_brcond2_i32:
161
- return C_O0_I4(rZ, rZ, rZ, rZ);
162
+ return C_O0_I4(rz, rz, rz, rz);
163
164
case INDEX_op_qemu_ld_i32:
165
return C_O1_I1(r, r);
166
case INDEX_op_qemu_st_i32:
167
- return C_O0_I2(rZ, r);
168
+ return C_O0_I2(rz, r);
169
case INDEX_op_qemu_ld_i64:
170
return TCG_TARGET_REG_BITS == 64 ? C_O1_I1(r, r) : C_O2_I1(r, r, r);
171
case INDEX_op_qemu_st_i64:
172
- return TCG_TARGET_REG_BITS == 64 ? C_O0_I2(rZ, r) : C_O0_I3(rZ, rZ, r);
173
+ return TCG_TARGET_REG_BITS == 64 ? C_O0_I2(rz, r) : C_O0_I3(rz, rz, r);
174
175
default:
176
return C_NotImplemented;
73
--
177
--
74
2.34.1
178
2.43.0
75
179
76
180
diff view generated by jsdifflib
Deleted patch
1
Finish removing tcg temp free accounting interfaces.
2
1
3
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
5
---
6
include/exec/translator.h | 2 --
7
accel/tcg/translator.c | 4 ----
8
target/alpha/translate.c | 1 -
9
target/arm/tcg/translate-a64.c | 2 --
10
target/arm/tcg/translate.c | 1 -
11
target/ppc/translate.c | 2 --
12
6 files changed, 12 deletions(-)
13
14
diff --git a/include/exec/translator.h b/include/exec/translator.h
15
index XXXXXXX..XXXXXXX 100644
16
--- a/include/exec/translator.h
17
+++ b/include/exec/translator.h
18
@@ -XXX,XX +XXX,XX @@ void translator_loop(CPUState *cpu, TranslationBlock *tb, int *max_insns,
19
target_ulong pc, void *host_pc,
20
const TranslatorOps *ops, DisasContextBase *db);
21
22
-void translator_loop_temp_check(DisasContextBase *db);
23
-
24
/**
25
* translator_use_goto_tb
26
* @db: Disassembly context
27
diff --git a/accel/tcg/translator.c b/accel/tcg/translator.c
28
index XXXXXXX..XXXXXXX 100644
29
--- a/accel/tcg/translator.c
30
+++ b/accel/tcg/translator.c
31
@@ -XXX,XX +XXX,XX @@
32
#include "exec/plugin-gen.h"
33
#include "exec/replay-core.h"
34
35
-void translator_loop_temp_check(DisasContextBase *db)
36
-{
37
-}
38
-
39
bool translator_use_goto_tb(DisasContextBase *db, target_ulong dest)
40
{
41
/* Suppress goto_tb if requested. */
42
diff --git a/target/alpha/translate.c b/target/alpha/translate.c
43
index XXXXXXX..XXXXXXX 100644
44
--- a/target/alpha/translate.c
45
+++ b/target/alpha/translate.c
46
@@ -XXX,XX +XXX,XX @@ static void alpha_tr_translate_insn(DisasContextBase *dcbase, CPUState *cpu)
47
ctx->base.is_jmp = translate_one(ctx, insn);
48
49
free_context_temps(ctx);
50
- translator_loop_temp_check(&ctx->base);
51
}
52
53
static void alpha_tr_tb_stop(DisasContextBase *dcbase, CPUState *cpu)
54
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
55
index XXXXXXX..XXXXXXX 100644
56
--- a/target/arm/tcg/translate-a64.c
57
+++ b/target/arm/tcg/translate-a64.c
58
@@ -XXX,XX +XXX,XX @@ static void aarch64_tr_translate_insn(DisasContextBase *dcbase, CPUState *cpu)
59
if (s->btype > 0 && s->base.is_jmp != DISAS_NORETURN) {
60
reset_btype(s);
61
}
62
-
63
- translator_loop_temp_check(&s->base);
64
}
65
66
static void aarch64_tr_tb_stop(DisasContextBase *dcbase, CPUState *cpu)
67
diff --git a/target/arm/tcg/translate.c b/target/arm/tcg/translate.c
68
index XXXXXXX..XXXXXXX 100644
69
--- a/target/arm/tcg/translate.c
70
+++ b/target/arm/tcg/translate.c
71
@@ -XXX,XX +XXX,XX @@ static void arm_post_translate_insn(DisasContext *dc)
72
gen_set_label(dc->condlabel.label);
73
dc->condjmp = 0;
74
}
75
- translator_loop_temp_check(&dc->base);
76
}
77
78
static void arm_tr_translate_insn(DisasContextBase *dcbase, CPUState *cpu)
79
diff --git a/target/ppc/translate.c b/target/ppc/translate.c
80
index XXXXXXX..XXXXXXX 100644
81
--- a/target/ppc/translate.c
82
+++ b/target/ppc/translate.c
83
@@ -XXX,XX +XXX,XX @@ static void ppc_tr_translate_insn(DisasContextBase *dcbase, CPUState *cs)
84
if (ctx->base.is_jmp == DISAS_NEXT && !(pc & ~TARGET_PAGE_MASK)) {
85
ctx->base.is_jmp = DISAS_TOO_MANY;
86
}
87
-
88
- translator_loop_temp_check(&ctx->base);
89
}
90
91
static void ppc_tr_tb_stop(DisasContextBase *dcbase, CPUState *cs)
92
--
93
2.34.1
diff view generated by jsdifflib
Deleted patch
1
Translators are no longer required to free tcg temporaries.
2
1
3
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
5
---
6
target/alpha/translate.c | 70 ----------------------------------------
7
1 file changed, 70 deletions(-)
8
9
diff --git a/target/alpha/translate.c b/target/alpha/translate.c
10
index XXXXXXX..XXXXXXX 100644
11
--- a/target/alpha/translate.c
12
+++ b/target/alpha/translate.c
13
@@ -XXX,XX +XXX,XX @@ static void free_context_temps(DisasContext *ctx)
14
{
15
if (ctx->sink) {
16
tcg_gen_discard_i64(ctx->sink);
17
- tcg_temp_free(ctx->sink);
18
ctx->sink = NULL;
19
}
20
}
21
@@ -XXX,XX +XXX,XX @@ static void gen_ldf(DisasContext *ctx, TCGv dest, TCGv addr)
22
TCGv_i32 tmp32 = tcg_temp_new_i32();
23
tcg_gen_qemu_ld_i32(tmp32, addr, ctx->mem_idx, MO_LEUL | UNALIGN(ctx));
24
gen_helper_memory_to_f(dest, tmp32);
25
- tcg_temp_free_i32(tmp32);
26
}
27
28
static void gen_ldg(DisasContext *ctx, TCGv dest, TCGv addr)
29
@@ -XXX,XX +XXX,XX @@ static void gen_ldg(DisasContext *ctx, TCGv dest, TCGv addr)
30
TCGv tmp = tcg_temp_new();
31
tcg_gen_qemu_ld_i64(tmp, addr, ctx->mem_idx, MO_LEUQ | UNALIGN(ctx));
32
gen_helper_memory_to_g(dest, tmp);
33
- tcg_temp_free(tmp);
34
}
35
36
static void gen_lds(DisasContext *ctx, TCGv dest, TCGv addr)
37
@@ -XXX,XX +XXX,XX @@ static void gen_lds(DisasContext *ctx, TCGv dest, TCGv addr)
38
TCGv_i32 tmp32 = tcg_temp_new_i32();
39
tcg_gen_qemu_ld_i32(tmp32, addr, ctx->mem_idx, MO_LEUL | UNALIGN(ctx));
40
gen_helper_memory_to_s(dest, tmp32);
41
- tcg_temp_free_i32(tmp32);
42
}
43
44
static void gen_ldt(DisasContext *ctx, TCGv dest, TCGv addr)
45
@@ -XXX,XX +XXX,XX @@ static void gen_load_fp(DisasContext *ctx, int ra, int rb, int32_t disp16,
46
TCGv addr = tcg_temp_new();
47
tcg_gen_addi_i64(addr, load_gpr(ctx, rb), disp16);
48
func(ctx, cpu_fir[ra], addr);
49
- tcg_temp_free(addr);
50
}
51
}
52
53
@@ -XXX,XX +XXX,XX @@ static void gen_load_int(DisasContext *ctx, int ra, int rb, int32_t disp16,
54
tcg_gen_mov_i64(cpu_lock_addr, addr);
55
tcg_gen_mov_i64(cpu_lock_value, dest);
56
}
57
- tcg_temp_free(addr);
58
}
59
60
static void gen_stf(DisasContext *ctx, TCGv src, TCGv addr)
61
@@ -XXX,XX +XXX,XX @@ static void gen_stf(DisasContext *ctx, TCGv src, TCGv addr)
62
TCGv_i32 tmp32 = tcg_temp_new_i32();
63
gen_helper_f_to_memory(tmp32, addr);
64
tcg_gen_qemu_st_i32(tmp32, addr, ctx->mem_idx, MO_LEUL | UNALIGN(ctx));
65
- tcg_temp_free_i32(tmp32);
66
}
67
68
static void gen_stg(DisasContext *ctx, TCGv src, TCGv addr)
69
@@ -XXX,XX +XXX,XX @@ static void gen_stg(DisasContext *ctx, TCGv src, TCGv addr)
70
TCGv tmp = tcg_temp_new();
71
gen_helper_g_to_memory(tmp, src);
72
tcg_gen_qemu_st_i64(tmp, addr, ctx->mem_idx, MO_LEUQ | UNALIGN(ctx));
73
- tcg_temp_free(tmp);
74
}
75
76
static void gen_sts(DisasContext *ctx, TCGv src, TCGv addr)
77
@@ -XXX,XX +XXX,XX @@ static void gen_sts(DisasContext *ctx, TCGv src, TCGv addr)
78
TCGv_i32 tmp32 = tcg_temp_new_i32();
79
gen_helper_s_to_memory(tmp32, src);
80
tcg_gen_qemu_st_i32(tmp32, addr, ctx->mem_idx, MO_LEUL | UNALIGN(ctx));
81
- tcg_temp_free_i32(tmp32);
82
}
83
84
static void gen_stt(DisasContext *ctx, TCGv src, TCGv addr)
85
@@ -XXX,XX +XXX,XX @@ static void gen_store_fp(DisasContext *ctx, int ra, int rb, int32_t disp16,
86
TCGv addr = tcg_temp_new();
87
tcg_gen_addi_i64(addr, load_gpr(ctx, rb), disp16);
88
func(ctx, load_fpr(ctx, ra), addr);
89
- tcg_temp_free(addr);
90
}
91
92
static void gen_store_int(DisasContext *ctx, int ra, int rb, int32_t disp16,
93
@@ -XXX,XX +XXX,XX @@ static void gen_store_int(DisasContext *ctx, int ra, int rb, int32_t disp16,
94
95
src = load_gpr(ctx, ra);
96
tcg_gen_qemu_st_i64(src, addr, ctx->mem_idx, op);
97
-
98
- tcg_temp_free(addr);
99
}
100
101
static DisasJumpType gen_store_conditional(DisasContext *ctx, int ra, int rb,
102
@@ -XXX,XX +XXX,XX @@ static DisasJumpType gen_store_conditional(DisasContext *ctx, int ra, int rb,
103
lab_fail = gen_new_label();
104
lab_done = gen_new_label();
105
tcg_gen_brcond_i64(TCG_COND_NE, addr, cpu_lock_addr, lab_fail);
106
- tcg_temp_free_i64(addr);
107
108
val = tcg_temp_new_i64();
109
tcg_gen_atomic_cmpxchg_i64(val, cpu_lock_addr, cpu_lock_value,
110
@@ -XXX,XX +XXX,XX @@ static DisasJumpType gen_store_conditional(DisasContext *ctx, int ra, int rb,
111
if (ra != 31) {
112
tcg_gen_setcond_i64(TCG_COND_EQ, ctx->ir[ra], val, cpu_lock_value);
113
}
114
- tcg_temp_free_i64(val);
115
tcg_gen_br(lab_done);
116
117
gen_set_label(lab_fail);
118
@@ -XXX,XX +XXX,XX @@ static DisasJumpType gen_bcond(DisasContext *ctx, TCGCond cond, int ra,
119
120
tcg_gen_andi_i64(tmp, load_gpr(ctx, ra), 1);
121
ret = gen_bcond_internal(ctx, cond, tmp, disp);
122
- tcg_temp_free(tmp);
123
return ret;
124
}
125
return gen_bcond_internal(ctx, cond, load_gpr(ctx, ra), disp);
126
@@ -XXX,XX +XXX,XX @@ static DisasJumpType gen_fbcond(DisasContext *ctx, TCGCond cond, int ra,
127
128
gen_fold_mzero(cond, cmp_tmp, load_fpr(ctx, ra));
129
ret = gen_bcond_internal(ctx, cond, cmp_tmp, disp);
130
- tcg_temp_free(cmp_tmp);
131
return ret;
132
}
133
134
@@ -XXX,XX +XXX,XX @@ static void gen_fcmov(DisasContext *ctx, TCGCond cond, int ra, int rb, int rc)
135
gen_fold_mzero(cond, va, load_fpr(ctx, ra));
136
137
tcg_gen_movcond_i64(cond, dest_fpr(ctx, rc), va, z, vb, load_fpr(ctx, rc));
138
-
139
- tcg_temp_free(va);
140
}
141
142
#define QUAL_RM_N 0x080 /* Round mode nearest even */
143
@@ -XXX,XX +XXX,XX @@ static void gen_qual_roundmode(DisasContext *ctx, int fn11)
144
#else
145
gen_helper_setroundmode(tmp);
146
#endif
147
-
148
- tcg_temp_free_i32(tmp);
149
}
150
151
static void gen_qual_flushzero(DisasContext *ctx, int fn11)
152
@@ -XXX,XX +XXX,XX @@ static void gen_qual_flushzero(DisasContext *ctx, int fn11)
153
#else
154
gen_helper_setflushzero(tmp);
155
#endif
156
-
157
- tcg_temp_free_i32(tmp);
158
}
159
160
static TCGv gen_ieee_input(DisasContext *ctx, int reg, int fn11, int is_cmp)
161
@@ -XXX,XX +XXX,XX @@ static void gen_cvtlq(TCGv vc, TCGv vb)
162
tcg_gen_shri_i64(tmp, vb, 29);
163
tcg_gen_sari_i64(vc, vb, 32);
164
tcg_gen_deposit_i64(vc, vc, tmp, 0, 30);
165
-
166
- tcg_temp_free(tmp);
167
}
168
169
static void gen_ieee_arith2(DisasContext *ctx,
170
@@ -XXX,XX +XXX,XX @@ static void gen_cpy_mask(TCGv vc, TCGv va, TCGv vb, bool inv_a, uint64_t mask)
171
172
tcg_gen_andc_i64(vc, vb, vmask);
173
tcg_gen_or_i64(vc, vc, tmp);
174
-
175
- tcg_temp_free(tmp);
176
}
177
178
static void gen_ieee_arith3(DisasContext *ctx,
179
@@ -XXX,XX +XXX,XX @@ static void gen_ext_h(DisasContext *ctx, TCGv vc, TCGv va, int rb, bool islit,
180
tcg_gen_neg_i64(tmp, tmp);
181
tcg_gen_andi_i64(tmp, tmp, 0x3f);
182
tcg_gen_shl_i64(vc, va, tmp);
183
- tcg_temp_free(tmp);
184
}
185
gen_zapnoti(vc, vc, byte_mask);
186
}
187
@@ -XXX,XX +XXX,XX @@ static void gen_ext_l(DisasContext *ctx, TCGv vc, TCGv va, int rb, bool islit,
188
tcg_gen_andi_i64(tmp, load_gpr(ctx, rb), 7);
189
tcg_gen_shli_i64(tmp, tmp, 3);
190
tcg_gen_shr_i64(vc, va, tmp);
191
- tcg_temp_free(tmp);
192
gen_zapnoti(vc, vc, byte_mask);
193
}
194
}
195
@@ -XXX,XX +XXX,XX @@ static void gen_ins_h(DisasContext *ctx, TCGv vc, TCGv va, int rb, bool islit,
196
197
tcg_gen_shr_i64(vc, tmp, shift);
198
tcg_gen_shri_i64(vc, vc, 1);
199
- tcg_temp_free(shift);
200
- tcg_temp_free(tmp);
201
}
202
}
203
204
@@ -XXX,XX +XXX,XX @@ static void gen_ins_l(DisasContext *ctx, TCGv vc, TCGv va, int rb, bool islit,
205
tcg_gen_andi_i64(shift, load_gpr(ctx, rb), 7);
206
tcg_gen_shli_i64(shift, shift, 3);
207
tcg_gen_shl_i64(vc, tmp, shift);
208
- tcg_temp_free(shift);
209
- tcg_temp_free(tmp);
210
}
211
}
212
213
@@ -XXX,XX +XXX,XX @@ static void gen_msk_h(DisasContext *ctx, TCGv vc, TCGv va, int rb, bool islit,
214
tcg_gen_shri_i64(mask, mask, 1);
215
216
tcg_gen_andc_i64(vc, va, mask);
217
-
218
- tcg_temp_free(mask);
219
- tcg_temp_free(shift);
220
}
221
}
222
223
@@ -XXX,XX +XXX,XX @@ static void gen_msk_l(DisasContext *ctx, TCGv vc, TCGv va, int rb, bool islit,
224
tcg_gen_shl_i64(mask, mask, shift);
225
226
tcg_gen_andc_i64(vc, va, mask);
227
-
228
- tcg_temp_free(mask);
229
- tcg_temp_free(shift);
230
}
231
}
232
233
@@ -XXX,XX +XXX,XX @@ static DisasJumpType gen_call_pal(DisasContext *ctx, int palcode)
234
TCGv tmp = tcg_temp_new();
235
tcg_gen_andi_i64(tmp, ctx->ir[IR_A0], PS_INT_MASK);
236
st_flag_byte(tmp, ENV_FLAG_PS_SHIFT);
237
- tcg_temp_free(tmp);
238
}
239
240
/* Allow interrupts to be recognized right away. */
241
@@ -XXX,XX +XXX,XX @@ static DisasJumpType gen_call_pal(DisasContext *ctx, int palcode)
242
243
tcg_gen_movi_i64(tmp, exc_addr);
244
tcg_gen_st_i64(tmp, cpu_env, offsetof(CPUAlphaState, exc_addr));
245
- tcg_temp_free(tmp);
246
247
entry += (palcode & 0x80
248
? 0x2000 + (palcode - 0x80) * 64
249
@@ -XXX,XX +XXX,XX @@ static DisasJumpType translate_one(DisasContext *ctx, uint32_t insn)
250
tcg_gen_shli_i64(tmp, va, 2);
251
tcg_gen_add_i64(tmp, tmp, vb);
252
tcg_gen_ext32s_i64(vc, tmp);
253
- tcg_temp_free(tmp);
254
break;
255
case 0x09:
256
/* SUBL */
257
@@ -XXX,XX +XXX,XX @@ static DisasJumpType translate_one(DisasContext *ctx, uint32_t insn)
258
tcg_gen_shli_i64(tmp, va, 2);
259
tcg_gen_sub_i64(tmp, tmp, vb);
260
tcg_gen_ext32s_i64(vc, tmp);
261
- tcg_temp_free(tmp);
262
break;
263
case 0x0F:
264
/* CMPBGE */
265
@@ -XXX,XX +XXX,XX @@ static DisasJumpType translate_one(DisasContext *ctx, uint32_t insn)
266
tcg_gen_shli_i64(tmp, va, 3);
267
tcg_gen_add_i64(tmp, tmp, vb);
268
tcg_gen_ext32s_i64(vc, tmp);
269
- tcg_temp_free(tmp);
270
break;
271
case 0x1B:
272
/* S8SUBL */
273
@@ -XXX,XX +XXX,XX @@ static DisasJumpType translate_one(DisasContext *ctx, uint32_t insn)
274
tcg_gen_shli_i64(tmp, va, 3);
275
tcg_gen_sub_i64(tmp, tmp, vb);
276
tcg_gen_ext32s_i64(vc, tmp);
277
- tcg_temp_free(tmp);
278
break;
279
case 0x1D:
280
/* CMPULT */
281
@@ -XXX,XX +XXX,XX @@ static DisasJumpType translate_one(DisasContext *ctx, uint32_t insn)
282
tmp = tcg_temp_new();
283
tcg_gen_shli_i64(tmp, va, 2);
284
tcg_gen_add_i64(vc, tmp, vb);
285
- tcg_temp_free(tmp);
286
break;
287
case 0x29:
288
/* SUBQ */
289
@@ -XXX,XX +XXX,XX @@ static DisasJumpType translate_one(DisasContext *ctx, uint32_t insn)
290
tmp = tcg_temp_new();
291
tcg_gen_shli_i64(tmp, va, 2);
292
tcg_gen_sub_i64(vc, tmp, vb);
293
- tcg_temp_free(tmp);
294
break;
295
case 0x2D:
296
/* CMPEQ */
297
@@ -XXX,XX +XXX,XX @@ static DisasJumpType translate_one(DisasContext *ctx, uint32_t insn)
298
tmp = tcg_temp_new();
299
tcg_gen_shli_i64(tmp, va, 3);
300
tcg_gen_add_i64(vc, tmp, vb);
301
- tcg_temp_free(tmp);
302
break;
303
case 0x3B:
304
/* S8SUBQ */
305
tmp = tcg_temp_new();
306
tcg_gen_shli_i64(tmp, va, 3);
307
tcg_gen_sub_i64(vc, tmp, vb);
308
- tcg_temp_free(tmp);
309
break;
310
case 0x3D:
311
/* CMPULE */
312
@@ -XXX,XX +XXX,XX @@ static DisasJumpType translate_one(DisasContext *ctx, uint32_t insn)
313
tcg_gen_add_i64(tmp, tmp, vc);
314
tcg_gen_ext32s_i64(vc, tmp);
315
gen_helper_check_overflow(cpu_env, vc, tmp);
316
- tcg_temp_free(tmp);
317
break;
318
case 0x49:
319
/* SUBL/V */
320
@@ -XXX,XX +XXX,XX @@ static DisasJumpType translate_one(DisasContext *ctx, uint32_t insn)
321
tcg_gen_sub_i64(tmp, tmp, vc);
322
tcg_gen_ext32s_i64(vc, tmp);
323
gen_helper_check_overflow(cpu_env, vc, tmp);
324
- tcg_temp_free(tmp);
325
break;
326
case 0x4D:
327
/* CMPLT */
328
@@ -XXX,XX +XXX,XX @@ static DisasJumpType translate_one(DisasContext *ctx, uint32_t insn)
329
tcg_gen_shri_i64(tmp, tmp, 63);
330
tcg_gen_movi_i64(tmp2, 0);
331
gen_helper_check_overflow(cpu_env, tmp, tmp2);
332
- tcg_temp_free(tmp);
333
- tcg_temp_free(tmp2);
334
break;
335
case 0x69:
336
/* SUBQ/V */
337
@@ -XXX,XX +XXX,XX @@ static DisasJumpType translate_one(DisasContext *ctx, uint32_t insn)
338
tcg_gen_shri_i64(tmp, tmp, 63);
339
tcg_gen_movi_i64(tmp2, 0);
340
gen_helper_check_overflow(cpu_env, tmp, tmp2);
341
- tcg_temp_free(tmp);
342
- tcg_temp_free(tmp2);
343
break;
344
case 0x6D:
345
/* CMPLE */
346
@@ -XXX,XX +XXX,XX @@ static DisasJumpType translate_one(DisasContext *ctx, uint32_t insn)
347
tcg_gen_andi_i64(tmp, va, 1);
348
tcg_gen_movcond_i64(TCG_COND_NE, vc, tmp, load_zero(ctx),
349
vb, load_gpr(ctx, rc));
350
- tcg_temp_free(tmp);
351
break;
352
case 0x16:
353
/* CMOVLBC */
354
@@ -XXX,XX +XXX,XX @@ static DisasJumpType translate_one(DisasContext *ctx, uint32_t insn)
355
tcg_gen_andi_i64(tmp, va, 1);
356
tcg_gen_movcond_i64(TCG_COND_EQ, vc, tmp, load_zero(ctx),
357
vb, load_gpr(ctx, rc));
358
- tcg_temp_free(tmp);
359
break;
360
case 0x20:
361
/* BIS */
362
@@ -XXX,XX +XXX,XX @@ static DisasJumpType translate_one(DisasContext *ctx, uint32_t insn)
363
vb = load_gpr(ctx, rb);
364
tcg_gen_andi_i64(tmp, vb, 0x3f);
365
tcg_gen_shr_i64(vc, va, tmp);
366
- tcg_temp_free(tmp);
367
}
368
break;
369
case 0x36:
370
@@ -XXX,XX +XXX,XX @@ static DisasJumpType translate_one(DisasContext *ctx, uint32_t insn)
371
vb = load_gpr(ctx, rb);
372
tcg_gen_andi_i64(tmp, vb, 0x3f);
373
tcg_gen_shl_i64(vc, va, tmp);
374
- tcg_temp_free(tmp);
375
}
376
break;
377
case 0x3B:
378
@@ -XXX,XX +XXX,XX @@ static DisasJumpType translate_one(DisasContext *ctx, uint32_t insn)
379
vb = load_gpr(ctx, rb);
380
tcg_gen_andi_i64(tmp, vb, 0x3f);
381
tcg_gen_sar_i64(vc, va, tmp);
382
- tcg_temp_free(tmp);
383
}
384
break;
385
case 0x52:
386
@@ -XXX,XX +XXX,XX @@ static DisasJumpType translate_one(DisasContext *ctx, uint32_t insn)
387
/* UMULH */
388
tmp = tcg_temp_new();
389
tcg_gen_mulu2_i64(tmp, vc, va, vb);
390
- tcg_temp_free(tmp);
391
break;
392
case 0x40:
393
/* MULL/V */
394
@@ -XXX,XX +XXX,XX @@ static DisasJumpType translate_one(DisasContext *ctx, uint32_t insn)
395
tcg_gen_mul_i64(tmp, tmp, vc);
396
tcg_gen_ext32s_i64(vc, tmp);
397
gen_helper_check_overflow(cpu_env, vc, tmp);
398
- tcg_temp_free(tmp);
399
break;
400
case 0x60:
401
/* MULQ/V */
402
@@ -XXX,XX +XXX,XX @@ static DisasJumpType translate_one(DisasContext *ctx, uint32_t insn)
403
tcg_gen_muls2_i64(vc, tmp, va, vb);
404
tcg_gen_sari_i64(tmp2, vc, 63);
405
gen_helper_check_overflow(cpu_env, tmp, tmp2);
406
- tcg_temp_free(tmp);
407
- tcg_temp_free(tmp2);
408
break;
409
default:
410
goto invalid_opc;
411
@@ -XXX,XX +XXX,XX @@ static DisasJumpType translate_one(DisasContext *ctx, uint32_t insn)
412
va = load_gpr(ctx, ra);
413
tcg_gen_extrl_i64_i32(t32, va);
414
gen_helper_memory_to_s(vc, t32);
415
- tcg_temp_free_i32(t32);
416
break;
417
case 0x0A:
418
/* SQRTF */
419
@@ -XXX,XX +XXX,XX @@ static DisasJumpType translate_one(DisasContext *ctx, uint32_t insn)
420
va = load_gpr(ctx, ra);
421
tcg_gen_extrl_i64_i32(t32, va);
422
gen_helper_memory_to_f(vc, t32);
423
- tcg_temp_free_i32(t32);
424
break;
425
case 0x24:
426
/* ITOFT */
427
@@ -XXX,XX +XXX,XX @@ static DisasJumpType translate_one(DisasContext *ctx, uint32_t insn)
428
tcg_gen_qemu_ld_i64(va, addr, MMU_USER_IDX, MO_LEUQ);
429
break;
430
}
431
- tcg_temp_free(addr);
432
break;
433
}
434
#else
435
@@ -XXX,XX +XXX,XX @@ static DisasJumpType translate_one(DisasContext *ctx, uint32_t insn)
436
va = load_fpr(ctx, ra);
437
gen_helper_s_to_memory(t32, va);
438
tcg_gen_ext_i32_i64(vc, t32);
439
- tcg_temp_free_i32(t32);
440
break;
441
}
442
443
@@ -XXX,XX +XXX,XX @@ static DisasJumpType translate_one(DisasContext *ctx, uint32_t insn)
444
tmp = tcg_temp_new();
445
tcg_gen_andi_i64(tmp, vb, 1);
446
st_flag_byte(tmp, ENV_FLAG_PAL_SHIFT);
447
- tcg_temp_free(tmp);
448
tcg_gen_andi_i64(cpu_pc, vb, ~3);
449
/* Allow interrupts to be recognized right away. */
450
ret = DISAS_PC_UPDATED_NOCHAIN;
451
@@ -XXX,XX +XXX,XX @@ static DisasJumpType translate_one(DisasContext *ctx, uint32_t insn)
452
tmp = tcg_temp_new();
453
tcg_gen_addi_i64(tmp, vb, disp12);
454
tcg_gen_qemu_st_i64(va, tmp, MMU_PHYS_IDX, MO_LESL);
455
- tcg_temp_free(tmp);
456
break;
457
case 0x1:
458
/* Quadword physical access */
459
@@ -XXX,XX +XXX,XX @@ static DisasJumpType translate_one(DisasContext *ctx, uint32_t insn)
460
tmp = tcg_temp_new();
461
tcg_gen_addi_i64(tmp, vb, disp12);
462
tcg_gen_qemu_st_i64(va, tmp, MMU_PHYS_IDX, MO_LEUQ);
463
- tcg_temp_free(tmp);
464
break;
465
case 0x2:
466
/* Longword physical access with lock */
467
--
468
2.34.1
diff view generated by jsdifflib
Deleted patch
1
Translators are no longer required to free tcg temporaries.
2
1
3
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
5
---
6
target/arm/tcg/translate.h | 1 -
7
target/arm/tcg/translate-a64.c | 17 ++++-------------
8
target/arm/tcg/translate.c | 9 ---------
9
3 files changed, 4 insertions(+), 23 deletions(-)
10
11
diff --git a/target/arm/tcg/translate.h b/target/arm/tcg/translate.h
12
index XXXXXXX..XXXXXXX 100644
13
--- a/target/arm/tcg/translate.h
14
+++ b/target/arm/tcg/translate.h
15
@@ -XXX,XX +XXX,XX @@ static inline void gen_a64_update_pc(DisasContext *s, target_long diff)
16
#endif
17
18
void arm_test_cc(DisasCompare *cmp, int cc);
19
-void arm_free_cc(DisasCompare *cmp);
20
void arm_jump_cc(DisasCompare *cmp, TCGLabel *label);
21
void arm_gen_test_cc(int cc, TCGLabel *label);
22
MemOp pow2_align(unsigned i);
23
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
24
index XXXXXXX..XXXXXXX 100644
25
--- a/target/arm/tcg/translate-a64.c
26
+++ b/target/arm/tcg/translate-a64.c
27
@@ -XXX,XX +XXX,XX @@ static void a64_test_cc(DisasCompare64 *c64, int cc)
28
29
arm_test_cc(&c32, cc);
30
31
- /* Sign-extend the 32-bit value so that the GE/LT comparisons work
32
- * properly. The NE/EQ comparisons are also fine with this choice. */
33
+ /*
34
+ * Sign-extend the 32-bit value so that the GE/LT comparisons work
35
+ * properly. The NE/EQ comparisons are also fine with this choice.
36
+ */
37
c64->cond = c32.cond;
38
c64->value = tcg_temp_new_i64();
39
tcg_gen_ext_i32_i64(c64->value, c32.value);
40
-
41
- arm_free_cc(&c32);
42
-}
43
-
44
-static void a64_free_cc(DisasCompare64 *c64)
45
-{
46
- tcg_temp_free_i64(c64->value);
47
}
48
49
static void gen_rebuild_hflags(DisasContext *s)
50
@@ -XXX,XX +XXX,XX @@ static void disas_cc(DisasContext *s, uint32_t insn)
51
tcg_t0 = tcg_temp_new_i32();
52
arm_test_cc(&c, cond);
53
tcg_gen_setcondi_i32(tcg_invert_cond(c.cond), tcg_t0, c.value, 0);
54
- arm_free_cc(&c);
55
56
/* Load the arguments for the new comparison. */
57
if (is_imm) {
58
@@ -XXX,XX +XXX,XX @@ static void disas_cond_select(DisasContext *s, uint32_t insn)
59
tcg_gen_movcond_i64(c.cond, tcg_rd, c.value, zero, t_true, t_false);
60
}
61
62
- a64_free_cc(&c);
63
-
64
if (!sf) {
65
tcg_gen_ext32u_i64(tcg_rd, tcg_rd);
66
}
67
@@ -XXX,XX +XXX,XX @@ static void disas_fp_csel(DisasContext *s, uint32_t insn)
68
tcg_gen_movcond_i64(c.cond, t_true, c.value, tcg_constant_i64(0),
69
t_true, t_false);
70
tcg_temp_free_i64(t_false);
71
- a64_free_cc(&c);
72
73
/* Note that sregs & hregs write back zeros to the high bits,
74
and we've already done the zero-extension. */
75
diff --git a/target/arm/tcg/translate.c b/target/arm/tcg/translate.c
76
index XXXXXXX..XXXXXXX 100644
77
--- a/target/arm/tcg/translate.c
78
+++ b/target/arm/tcg/translate.c
79
@@ -XXX,XX +XXX,XX @@ void arm_test_cc(DisasCompare *cmp, int cc)
80
cmp->value_global = global;
81
}
82
83
-void arm_free_cc(DisasCompare *cmp)
84
-{
85
- if (!cmp->value_global) {
86
- tcg_temp_free_i32(cmp->value);
87
- }
88
-}
89
-
90
void arm_jump_cc(DisasCompare *cmp, TCGLabel *label)
91
{
92
tcg_gen_brcondi_i32(cmp->cond, cmp->value, 0, label);
93
@@ -XXX,XX +XXX,XX @@ void arm_gen_test_cc(int cc, TCGLabel *label)
94
DisasCompare cmp;
95
arm_test_cc(&cmp, cc);
96
arm_jump_cc(&cmp, label);
97
- arm_free_cc(&cmp);
98
}
99
100
void gen_set_condexec(DisasContext *s)
101
@@ -XXX,XX +XXX,XX @@ static bool trans_CSEL(DisasContext *s, arg_CSEL *a)
102
103
arm_test_cc(&c, a->fcond);
104
tcg_gen_movcond_i32(c.cond, rn, c.value, zero, rn, rm);
105
- arm_free_cc(&c);
106
107
store_reg(s, a->rd, rn);
108
tcg_temp_free_i32(rm);
109
--
110
2.34.1
diff view generated by jsdifflib
Deleted patch
1
This field was only used to avoid freeing globals.
2
Since we no longer free any temps, this is dead.
3
1
4
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
5
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
6
---
7
target/arm/tcg/translate.h | 1 -
8
target/arm/tcg/translate.c | 5 -----
9
2 files changed, 6 deletions(-)
10
11
diff --git a/target/arm/tcg/translate.h b/target/arm/tcg/translate.h
12
index XXXXXXX..XXXXXXX 100644
13
--- a/target/arm/tcg/translate.h
14
+++ b/target/arm/tcg/translate.h
15
@@ -XXX,XX +XXX,XX @@ typedef struct DisasContext {
16
typedef struct DisasCompare {
17
TCGCond cond;
18
TCGv_i32 value;
19
- bool value_global;
20
} DisasCompare;
21
22
/* Share the TCG temporaries common between 32 and 64 bit modes. */
23
diff --git a/target/arm/tcg/translate.c b/target/arm/tcg/translate.c
24
index XXXXXXX..XXXXXXX 100644
25
--- a/target/arm/tcg/translate.c
26
+++ b/target/arm/tcg/translate.c
27
@@ -XXX,XX +XXX,XX @@ void arm_test_cc(DisasCompare *cmp, int cc)
28
{
29
TCGv_i32 value;
30
TCGCond cond;
31
- bool global = true;
32
33
switch (cc) {
34
case 0: /* eq: Z */
35
@@ -XXX,XX +XXX,XX @@ void arm_test_cc(DisasCompare *cmp, int cc)
36
case 9: /* ls: !C || Z -> !(C && !Z) */
37
cond = TCG_COND_NE;
38
value = tcg_temp_new_i32();
39
- global = false;
40
/* CF is 1 for C, so -CF is an all-bits-set mask for C;
41
ZF is non-zero for !Z; so AND the two subexpressions. */
42
tcg_gen_neg_i32(value, cpu_CF);
43
@@ -XXX,XX +XXX,XX @@ void arm_test_cc(DisasCompare *cmp, int cc)
44
/* Since we're only interested in the sign bit, == 0 is >= 0. */
45
cond = TCG_COND_GE;
46
value = tcg_temp_new_i32();
47
- global = false;
48
tcg_gen_xor_i32(value, cpu_VF, cpu_NF);
49
break;
50
51
@@ -XXX,XX +XXX,XX @@ void arm_test_cc(DisasCompare *cmp, int cc)
52
case 13: /* le: Z || N != V */
53
cond = TCG_COND_NE;
54
value = tcg_temp_new_i32();
55
- global = false;
56
/* (N == V) is equal to the sign bit of ~(NF ^ VF). Propagate
57
* the sign bit then AND with ZF to yield the result. */
58
tcg_gen_xor_i32(value, cpu_VF, cpu_NF);
59
@@ -XXX,XX +XXX,XX @@ void arm_test_cc(DisasCompare *cmp, int cc)
60
no_invert:
61
cmp->cond = cond;
62
cmp->value = value;
63
- cmp->value_global = global;
64
}
65
66
void arm_jump_cc(DisasCompare *cmp, TCGLabel *label)
67
--
68
2.34.1
diff view generated by jsdifflib
Deleted patch
1
Translators are no longer required to free tcg temporaries.
2
1
3
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
5
---
6
target/arm/tcg/translate.c | 266 +------------------------------------
7
1 file changed, 5 insertions(+), 261 deletions(-)
8
9
diff --git a/target/arm/tcg/translate.c b/target/arm/tcg/translate.c
10
index XXXXXXX..XXXXXXX 100644
11
--- a/target/arm/tcg/translate.c
12
+++ b/target/arm/tcg/translate.c
13
@@ -XXX,XX +XXX,XX @@ void store_cpu_offset(TCGv_i32 var, int offset, int size)
14
default:
15
g_assert_not_reached();
16
}
17
- tcg_temp_free_i32(var);
18
}
19
20
/* Save the syndrome information for a Data Abort */
21
@@ -XXX,XX +XXX,XX @@ void store_reg(DisasContext *s, int reg, TCGv_i32 var)
22
tcg_gen_andi_i32(var, var, ~3);
23
}
24
tcg_gen_mov_i32(cpu_R[reg], var);
25
- tcg_temp_free_i32(var);
26
}
27
28
/*
29
@@ -XXX,XX +XXX,XX @@ static void gen_smul_dual(TCGv_i32 a, TCGv_i32 b)
30
tcg_gen_ext16s_i32(tmp1, a);
31
tcg_gen_ext16s_i32(tmp2, b);
32
tcg_gen_mul_i32(tmp1, tmp1, tmp2);
33
- tcg_temp_free_i32(tmp2);
34
tcg_gen_sari_i32(a, a, 16);
35
tcg_gen_sari_i32(b, b, 16);
36
tcg_gen_mul_i32(b, b, a);
37
tcg_gen_mov_i32(a, tmp1);
38
- tcg_temp_free_i32(tmp1);
39
}
40
41
/* Byteswap each halfword. */
42
@@ -XXX,XX +XXX,XX @@ void gen_rev16(TCGv_i32 dest, TCGv_i32 var)
43
tcg_gen_and_i32(var, var, mask);
44
tcg_gen_shli_i32(var, var, 8);
45
tcg_gen_or_i32(dest, var, tmp);
46
- tcg_temp_free_i32(tmp);
47
}
48
49
/* Byteswap low halfword and sign extend. */
50
@@ -XXX,XX +XXX,XX @@ static void gen_add16(TCGv_i32 dest, TCGv_i32 t0, TCGv_i32 t1)
51
tcg_gen_andi_i32(t1, t1, ~0x8000);
52
tcg_gen_add_i32(t0, t0, t1);
53
tcg_gen_xor_i32(dest, t0, tmp);
54
- tcg_temp_free_i32(tmp);
55
}
56
57
/* Set N and Z flags from var. */
58
@@ -XXX,XX +XXX,XX @@ static void gen_add_CC(TCGv_i32 dest, TCGv_i32 t0, TCGv_i32 t1)
59
tcg_gen_xor_i32(cpu_VF, cpu_NF, t0);
60
tcg_gen_xor_i32(tmp, t0, t1);
61
tcg_gen_andc_i32(cpu_VF, cpu_VF, tmp);
62
- tcg_temp_free_i32(tmp);
63
tcg_gen_mov_i32(dest, cpu_NF);
64
}
65
66
@@ -XXX,XX +XXX,XX @@ static void gen_adc_CC(TCGv_i32 dest, TCGv_i32 t0, TCGv_i32 t1)
67
tcg_gen_extu_i32_i64(q1, cpu_CF);
68
tcg_gen_add_i64(q0, q0, q1);
69
tcg_gen_extr_i64_i32(cpu_NF, cpu_CF, q0);
70
- tcg_temp_free_i64(q0);
71
- tcg_temp_free_i64(q1);
72
}
73
tcg_gen_mov_i32(cpu_ZF, cpu_NF);
74
tcg_gen_xor_i32(cpu_VF, cpu_NF, t0);
75
tcg_gen_xor_i32(tmp, t0, t1);
76
tcg_gen_andc_i32(cpu_VF, cpu_VF, tmp);
77
- tcg_temp_free_i32(tmp);
78
tcg_gen_mov_i32(dest, cpu_NF);
79
}
80
81
@@ -XXX,XX +XXX,XX @@ static void gen_sub_CC(TCGv_i32 dest, TCGv_i32 t0, TCGv_i32 t1)
82
tmp = tcg_temp_new_i32();
83
tcg_gen_xor_i32(tmp, t0, t1);
84
tcg_gen_and_i32(cpu_VF, cpu_VF, tmp);
85
- tcg_temp_free_i32(tmp);
86
tcg_gen_mov_i32(dest, cpu_NF);
87
}
88
89
@@ -XXX,XX +XXX,XX @@ static void gen_sbc_CC(TCGv_i32 dest, TCGv_i32 t0, TCGv_i32 t1)
90
TCGv_i32 tmp = tcg_temp_new_i32();
91
tcg_gen_not_i32(tmp, t1);
92
gen_adc_CC(dest, t0, tmp);
93
- tcg_temp_free_i32(tmp);
94
}
95
96
#define GEN_SHIFT(name) \
97
@@ -XXX,XX +XXX,XX @@ static void gen_##name(TCGv_i32 dest, TCGv_i32 t0, TCGv_i32 t1) \
98
tcg_gen_##name##_i32(tmpd, t0, tmp1); \
99
tcg_gen_andi_i32(tmp1, t1, 0xe0); \
100
tcg_gen_movcond_i32(TCG_COND_NE, dest, tmp1, zero, zero, tmpd); \
101
- tcg_temp_free_i32(tmpd); \
102
- tcg_temp_free_i32(tmp1); \
103
}
104
GEN_SHIFT(shl)
105
GEN_SHIFT(shr)
106
@@ -XXX,XX +XXX,XX @@ static void gen_sar(TCGv_i32 dest, TCGv_i32 t0, TCGv_i32 t1)
107
tcg_gen_andi_i32(tmp1, t1, 0xff);
108
tcg_gen_umin_i32(tmp1, tmp1, tcg_constant_i32(31));
109
tcg_gen_sar_i32(dest, t0, tmp1);
110
- tcg_temp_free_i32(tmp1);
111
}
112
113
static void shifter_out_im(TCGv_i32 var, int shift)
114
@@ -XXX,XX +XXX,XX @@ static inline void gen_arm_shift_im(TCGv_i32 var, int shiftop,
115
shifter_out_im(var, 0);
116
tcg_gen_shri_i32(var, var, 1);
117
tcg_gen_or_i32(var, var, tmp);
118
- tcg_temp_free_i32(tmp);
119
}
120
}
121
};
122
@@ -XXX,XX +XXX,XX @@ static inline void gen_arm_shift_reg(TCGv_i32 var, int shiftop,
123
tcg_gen_rotr_i32(var, var, shift); break;
124
}
125
}
126
- tcg_temp_free_i32(shift);
127
}
128
129
/*
130
@@ -XXX,XX +XXX,XX @@ static inline void gen_bxns(DisasContext *s, int rm)
131
* "zeroes the IT bits" as our UNPREDICTABLE behaviour otherwise.
132
*/
133
gen_helper_v7m_bxns(cpu_env, var);
134
- tcg_temp_free_i32(var);
135
s->base.is_jmp = DISAS_EXIT;
136
}
137
138
@@ -XXX,XX +XXX,XX @@ static inline void gen_blxns(DisasContext *s, int rm)
139
*/
140
gen_update_pc(s, curr_insn_len(s));
141
gen_helper_v7m_blxns(cpu_env, var);
142
- tcg_temp_free_i32(var);
143
s->base.is_jmp = DISAS_EXIT;
144
}
145
146
@@ -XXX,XX +XXX,XX @@ void gen_aa32_ld_internal_i32(DisasContext *s, TCGv_i32 val,
147
{
148
TCGv addr = gen_aa32_addr(s, a32, opc);
149
tcg_gen_qemu_ld_i32(val, addr, index, opc);
150
- tcg_temp_free(addr);
151
}
152
153
void gen_aa32_st_internal_i32(DisasContext *s, TCGv_i32 val,
154
@@ -XXX,XX +XXX,XX @@ void gen_aa32_st_internal_i32(DisasContext *s, TCGv_i32 val,
155
{
156
TCGv addr = gen_aa32_addr(s, a32, opc);
157
tcg_gen_qemu_st_i32(val, addr, index, opc);
158
- tcg_temp_free(addr);
159
}
160
161
void gen_aa32_ld_internal_i64(DisasContext *s, TCGv_i64 val,
162
@@ -XXX,XX +XXX,XX @@ void gen_aa32_ld_internal_i64(DisasContext *s, TCGv_i64 val,
163
if (!IS_USER_ONLY && s->sctlr_b && (opc & MO_SIZE) == MO_64) {
164
tcg_gen_rotri_i64(val, val, 32);
165
}
166
- tcg_temp_free(addr);
167
}
168
169
void gen_aa32_st_internal_i64(DisasContext *s, TCGv_i64 val,
170
@@ -XXX,XX +XXX,XX @@ void gen_aa32_st_internal_i64(DisasContext *s, TCGv_i64 val,
171
TCGv_i64 tmp = tcg_temp_new_i64();
172
tcg_gen_rotri_i64(tmp, val, 32);
173
tcg_gen_qemu_st_i64(tmp, addr, index, opc);
174
- tcg_temp_free_i64(tmp);
175
} else {
176
tcg_gen_qemu_st_i64(val, addr, index, opc);
177
}
178
- tcg_temp_free(addr);
179
}
180
181
void gen_aa32_ld_i32(DisasContext *s, TCGv_i32 val, TCGv_i32 a32,
182
@@ -XXX,XX +XXX,XX @@ static inline TCGv_i32 iwmmxt_load_creg(int reg)
183
static inline void iwmmxt_store_creg(int reg, TCGv_i32 var)
184
{
185
tcg_gen_st_i32(var, cpu_env, offsetof(CPUARMState, iwmmxt.cregs[reg]));
186
- tcg_temp_free_i32(var);
187
}
188
189
static inline void gen_op_iwmmxt_movq_wRn_M0(int rn)
190
@@ -XXX,XX +XXX,XX @@ static inline int gen_iwmmxt_address(DisasContext *s, uint32_t insn,
191
else
192
tcg_gen_addi_i32(tmp, tmp, -offset);
193
tcg_gen_mov_i32(dest, tmp);
194
- if (insn & (1 << 21))
195
+ if (insn & (1 << 21)) {
196
store_reg(s, rd, tmp);
197
- else
198
- tcg_temp_free_i32(tmp);
199
+ }
200
} else if (insn & (1 << 21)) {
201
/* Post indexed */
202
tcg_gen_mov_i32(dest, tmp);
203
@@ -XXX,XX +XXX,XX @@ static inline int gen_iwmmxt_shift(uint32_t insn, uint32_t mask, TCGv_i32 dest)
204
}
205
tcg_gen_andi_i32(tmp, tmp, mask);
206
tcg_gen_mov_i32(dest, tmp);
207
- tcg_temp_free_i32(tmp);
208
return 0;
209
}
210
211
@@ -XXX,XX +XXX,XX @@ static int disas_iwmmxt_insn(DisasContext *s, uint32_t insn)
212
wrd = (insn >> 12) & 0xf;
213
addr = tcg_temp_new_i32();
214
if (gen_iwmmxt_address(s, insn, addr)) {
215
- tcg_temp_free_i32(addr);
216
return 1;
217
}
218
if (insn & ARM_CP_RW_BIT) {
219
@@ -XXX,XX +XXX,XX @@ static int disas_iwmmxt_insn(DisasContext *s, uint32_t insn)
220
}
221
if (i) {
222
tcg_gen_extu_i32_i64(cpu_M0, tmp);
223
- tcg_temp_free_i32(tmp);
224
}
225
gen_op_iwmmxt_movq_wRn_M0(wrd);
226
}
227
@@ -XXX,XX +XXX,XX @@ static int disas_iwmmxt_insn(DisasContext *s, uint32_t insn)
228
}
229
}
230
}
231
- tcg_temp_free_i32(tmp);
232
}
233
- tcg_temp_free_i32(addr);
234
return 0;
235
}
236
237
@@ -XXX,XX +XXX,XX @@ static int disas_iwmmxt_insn(DisasContext *s, uint32_t insn)
238
tmp = iwmmxt_load_creg(wrd);
239
tmp2 = load_reg(s, rd);
240
tcg_gen_andc_i32(tmp, tmp, tmp2);
241
- tcg_temp_free_i32(tmp2);
242
iwmmxt_store_creg(wrd, tmp);
243
break;
244
case ARM_IWMMXT_wCGR0:
245
@@ -XXX,XX +XXX,XX @@ static int disas_iwmmxt_insn(DisasContext *s, uint32_t insn)
246
tcg_gen_andi_i32(tmp, tmp, 7);
247
iwmmxt_load_reg(cpu_V1, rd1);
248
gen_helper_iwmmxt_align(cpu_M0, cpu_M0, cpu_V1, tmp);
249
- tcg_temp_free_i32(tmp);
250
gen_op_iwmmxt_movq_wRn_M0(wrd);
251
gen_op_iwmmxt_set_mup();
252
break;
253
@@ -XXX,XX +XXX,XX @@ static int disas_iwmmxt_insn(DisasContext *s, uint32_t insn)
254
g_assert_not_reached();
255
}
256
gen_helper_iwmmxt_insr(cpu_M0, cpu_M0, tmp, tmp2, tmp3);
257
- tcg_temp_free_i32(tmp);
258
gen_op_iwmmxt_movq_wRn_M0(wrd);
259
gen_op_iwmmxt_set_mup();
260
break;
261
@@ -XXX,XX +XXX,XX @@ static int disas_iwmmxt_insn(DisasContext *s, uint32_t insn)
262
}
263
tcg_gen_shli_i32(tmp, tmp, 28);
264
gen_set_nzcv(tmp);
265
- tcg_temp_free_i32(tmp);
266
break;
267
case 0x401: case 0x405: case 0x409: case 0x40d: /* TBCST */
268
if (((insn >> 6) & 3) == 3)
269
@@ -XXX,XX +XXX,XX @@ static int disas_iwmmxt_insn(DisasContext *s, uint32_t insn)
270
gen_helper_iwmmxt_bcstl(cpu_M0, tmp);
271
break;
272
}
273
- tcg_temp_free_i32(tmp);
274
gen_op_iwmmxt_movq_wRn_M0(wrd);
275
gen_op_iwmmxt_set_mup();
276
break;
277
@@ -XXX,XX +XXX,XX @@ static int disas_iwmmxt_insn(DisasContext *s, uint32_t insn)
278
break;
279
}
280
gen_set_nzcv(tmp);
281
- tcg_temp_free_i32(tmp2);
282
- tcg_temp_free_i32(tmp);
283
break;
284
case 0x01c: case 0x41c: case 0x81c: case 0xc1c: /* WACC */
285
wrd = (insn >> 12) & 0xf;
286
@@ -XXX,XX +XXX,XX @@ static int disas_iwmmxt_insn(DisasContext *s, uint32_t insn)
287
break;
288
}
289
gen_set_nzcv(tmp);
290
- tcg_temp_free_i32(tmp2);
291
- tcg_temp_free_i32(tmp);
292
break;
293
case 0x103: case 0x503: case 0x903: case 0xd03: /* TMOVMSK */
294
rd = (insn >> 12) & 0xf;
295
@@ -XXX,XX +XXX,XX @@ static int disas_iwmmxt_insn(DisasContext *s, uint32_t insn)
296
gen_op_iwmmxt_movq_M0_wRn(rd0);
297
tmp = tcg_temp_new_i32();
298
if (gen_iwmmxt_shift(insn, 0xff, tmp)) {
299
- tcg_temp_free_i32(tmp);
300
return 1;
301
}
302
switch ((insn >> 22) & 3) {
303
@@ -XXX,XX +XXX,XX @@ static int disas_iwmmxt_insn(DisasContext *s, uint32_t insn)
304
gen_helper_iwmmxt_srlq(cpu_M0, cpu_env, cpu_M0, tmp);
305
break;
306
}
307
- tcg_temp_free_i32(tmp);
308
gen_op_iwmmxt_movq_wRn_M0(wrd);
309
gen_op_iwmmxt_set_mup();
310
gen_op_iwmmxt_set_cup();
311
@@ -XXX,XX +XXX,XX @@ static int disas_iwmmxt_insn(DisasContext *s, uint32_t insn)
312
gen_op_iwmmxt_movq_M0_wRn(rd0);
313
tmp = tcg_temp_new_i32();
314
if (gen_iwmmxt_shift(insn, 0xff, tmp)) {
315
- tcg_temp_free_i32(tmp);
316
return 1;
317
}
318
switch ((insn >> 22) & 3) {
319
@@ -XXX,XX +XXX,XX @@ static int disas_iwmmxt_insn(DisasContext *s, uint32_t insn)
320
gen_helper_iwmmxt_sraq(cpu_M0, cpu_env, cpu_M0, tmp);
321
break;
322
}
323
- tcg_temp_free_i32(tmp);
324
gen_op_iwmmxt_movq_wRn_M0(wrd);
325
gen_op_iwmmxt_set_mup();
326
gen_op_iwmmxt_set_cup();
327
@@ -XXX,XX +XXX,XX @@ static int disas_iwmmxt_insn(DisasContext *s, uint32_t insn)
328
gen_op_iwmmxt_movq_M0_wRn(rd0);
329
tmp = tcg_temp_new_i32();
330
if (gen_iwmmxt_shift(insn, 0xff, tmp)) {
331
- tcg_temp_free_i32(tmp);
332
return 1;
333
}
334
switch ((insn >> 22) & 3) {
335
@@ -XXX,XX +XXX,XX @@ static int disas_iwmmxt_insn(DisasContext *s, uint32_t insn)
336
gen_helper_iwmmxt_sllq(cpu_M0, cpu_env, cpu_M0, tmp);
337
break;
338
}
339
- tcg_temp_free_i32(tmp);
340
gen_op_iwmmxt_movq_wRn_M0(wrd);
341
gen_op_iwmmxt_set_mup();
342
gen_op_iwmmxt_set_cup();
343
@@ -XXX,XX +XXX,XX @@ static int disas_iwmmxt_insn(DisasContext *s, uint32_t insn)
344
switch ((insn >> 22) & 3) {
345
case 1:
346
if (gen_iwmmxt_shift(insn, 0xf, tmp)) {
347
- tcg_temp_free_i32(tmp);
348
return 1;
349
}
350
gen_helper_iwmmxt_rorw(cpu_M0, cpu_env, cpu_M0, tmp);
351
break;
352
case 2:
353
if (gen_iwmmxt_shift(insn, 0x1f, tmp)) {
354
- tcg_temp_free_i32(tmp);
355
return 1;
356
}
357
gen_helper_iwmmxt_rorl(cpu_M0, cpu_env, cpu_M0, tmp);
358
break;
359
case 3:
360
if (gen_iwmmxt_shift(insn, 0x3f, tmp)) {
361
- tcg_temp_free_i32(tmp);
362
return 1;
363
}
364
gen_helper_iwmmxt_rorq(cpu_M0, cpu_env, cpu_M0, tmp);
365
break;
366
}
367
- tcg_temp_free_i32(tmp);
368
gen_op_iwmmxt_movq_wRn_M0(wrd);
369
gen_op_iwmmxt_set_mup();
370
gen_op_iwmmxt_set_cup();
371
@@ -XXX,XX +XXX,XX @@ static int disas_iwmmxt_insn(DisasContext *s, uint32_t insn)
372
gen_helper_iwmmxt_muladdswl(cpu_M0, cpu_M0, tmp, tmp2);
373
break;
374
default:
375
- tcg_temp_free_i32(tmp2);
376
- tcg_temp_free_i32(tmp);
377
return 1;
378
}
379
- tcg_temp_free_i32(tmp2);
380
- tcg_temp_free_i32(tmp);
381
gen_op_iwmmxt_movq_wRn_M0(wrd);
382
gen_op_iwmmxt_set_mup();
383
break;
384
@@ -XXX,XX +XXX,XX @@ static int disas_dsp_insn(DisasContext *s, uint32_t insn)
385
default:
386
return 1;
387
}
388
- tcg_temp_free_i32(tmp2);
389
- tcg_temp_free_i32(tmp);
390
391
gen_op_iwmmxt_movq_wRn_M0(acc);
392
return 0;
393
@@ -XXX,XX +XXX,XX @@ static int gen_set_psr(DisasContext *s, uint32_t mask, int spsr, TCGv_i32 t0)
394
} else {
395
gen_set_cpsr(t0, mask);
396
}
397
- tcg_temp_free_i32(t0);
398
gen_lookup_tb(s);
399
return 0;
400
}
401
@@ -XXX,XX +XXX,XX @@ static bool msr_banked_access_decode(DisasContext *s, int r, int sysm, int rn,
402
403
gen_exception_insn_el_v(s, 0, EXCP_UDEF,
404
syn_uncategorized(), tcg_el);
405
- tcg_temp_free_i32(tcg_el);
406
return false;
407
}
408
break;
409
@@ -XXX,XX +XXX,XX @@ static void gen_msr_banked(DisasContext *s, int r, int sysm, int rn)
410
gen_helper_msr_banked(cpu_env, tcg_reg,
411
tcg_constant_i32(tgtmode),
412
tcg_constant_i32(regno));
413
- tcg_temp_free_i32(tcg_reg);
414
s->base.is_jmp = DISAS_UPDATE_EXIT;
415
}
416
417
@@ -XXX,XX +XXX,XX @@ static void gen_mrs_banked(DisasContext *s, int r, int sysm, int rn)
418
static void store_pc_exc_ret(DisasContext *s, TCGv_i32 pc)
419
{
420
tcg_gen_mov_i32(cpu_R[15], pc);
421
- tcg_temp_free_i32(pc);
422
}
423
424
/* Generate a v6 exception return. Marks both values as dead. */
425
@@ -XXX,XX +XXX,XX @@ static void gen_rfe(DisasContext *s, TCGv_i32 pc, TCGv_i32 cpsr)
426
gen_io_start();
427
}
428
gen_helper_cpsr_write_eret(cpu_env, cpsr);
429
- tcg_temp_free_i32(cpsr);
430
/* Must exit loop to check un-masked IRQs */
431
s->base.is_jmp = DISAS_EXIT;
432
}
433
@@ -XXX,XX +XXX,XX @@ static void gen_gvec_fn3_qc(uint32_t rd_ofs, uint32_t rn_ofs, uint32_t rm_ofs,
434
tcg_gen_addi_ptr(qc_ptr, cpu_env, offsetof(CPUARMState, vfp.qc));
435
tcg_gen_gvec_3_ptr(rd_ofs, rn_ofs, rm_ofs, qc_ptr,
436
opr_sz, max_sz, 0, fn);
437
- tcg_temp_free_ptr(qc_ptr);
438
}
439
440
void gen_gvec_sqrdmlah_qc(unsigned vece, uint32_t rd_ofs, uint32_t rn_ofs,
441
@@ -XXX,XX +XXX,XX @@ static void gen_srshr8_i64(TCGv_i64 d, TCGv_i64 a, int64_t sh)
442
tcg_gen_andi_i64(t, t, dup_const(MO_8, 1));
443
tcg_gen_vec_sar8i_i64(d, a, sh);
444
tcg_gen_vec_add8_i64(d, d, t);
445
- tcg_temp_free_i64(t);
446
}
447
448
static void gen_srshr16_i64(TCGv_i64 d, TCGv_i64 a, int64_t sh)
449
@@ -XXX,XX +XXX,XX @@ static void gen_srshr16_i64(TCGv_i64 d, TCGv_i64 a, int64_t sh)
450
tcg_gen_andi_i64(t, t, dup_const(MO_16, 1));
451
tcg_gen_vec_sar16i_i64(d, a, sh);
452
tcg_gen_vec_add16_i64(d, d, t);
453
- tcg_temp_free_i64(t);
454
}
455
456
static void gen_srshr32_i32(TCGv_i32 d, TCGv_i32 a, int32_t sh)
457
@@ -XXX,XX +XXX,XX @@ static void gen_srshr32_i32(TCGv_i32 d, TCGv_i32 a, int32_t sh)
458
tcg_gen_extract_i32(t, a, sh - 1, 1);
459
tcg_gen_sari_i32(d, a, sh);
460
tcg_gen_add_i32(d, d, t);
461
- tcg_temp_free_i32(t);
462
}
463
464
static void gen_srshr64_i64(TCGv_i64 d, TCGv_i64 a, int64_t sh)
465
@@ -XXX,XX +XXX,XX @@ static void gen_srshr64_i64(TCGv_i64 d, TCGv_i64 a, int64_t sh)
466
tcg_gen_extract_i64(t, a, sh - 1, 1);
467
tcg_gen_sari_i64(d, a, sh);
468
tcg_gen_add_i64(d, d, t);
469
- tcg_temp_free_i64(t);
470
}
471
472
static void gen_srshr_vec(unsigned vece, TCGv_vec d, TCGv_vec a, int64_t sh)
473
@@ -XXX,XX +XXX,XX @@ static void gen_srshr_vec(unsigned vece, TCGv_vec d, TCGv_vec a, int64_t sh)
474
tcg_gen_and_vec(vece, t, t, ones);
475
tcg_gen_sari_vec(vece, d, a, sh);
476
tcg_gen_add_vec(vece, d, d, t);
477
-
478
- tcg_temp_free_vec(t);
479
- tcg_temp_free_vec(ones);
480
}
481
482
void gen_gvec_srshr(unsigned vece, uint32_t rd_ofs, uint32_t rm_ofs,
483
@@ -XXX,XX +XXX,XX @@ static void gen_srsra8_i64(TCGv_i64 d, TCGv_i64 a, int64_t sh)
484
485
gen_srshr8_i64(t, a, sh);
486
tcg_gen_vec_add8_i64(d, d, t);
487
- tcg_temp_free_i64(t);
488
}
489
490
static void gen_srsra16_i64(TCGv_i64 d, TCGv_i64 a, int64_t sh)
491
@@ -XXX,XX +XXX,XX @@ static void gen_srsra16_i64(TCGv_i64 d, TCGv_i64 a, int64_t sh)
492
493
gen_srshr16_i64(t, a, sh);
494
tcg_gen_vec_add16_i64(d, d, t);
495
- tcg_temp_free_i64(t);
496
}
497
498
static void gen_srsra32_i32(TCGv_i32 d, TCGv_i32 a, int32_t sh)
499
@@ -XXX,XX +XXX,XX @@ static void gen_srsra32_i32(TCGv_i32 d, TCGv_i32 a, int32_t sh)
500
501
gen_srshr32_i32(t, a, sh);
502
tcg_gen_add_i32(d, d, t);
503
- tcg_temp_free_i32(t);
504
}
505
506
static void gen_srsra64_i64(TCGv_i64 d, TCGv_i64 a, int64_t sh)
507
@@ -XXX,XX +XXX,XX @@ static void gen_srsra64_i64(TCGv_i64 d, TCGv_i64 a, int64_t sh)
508
509
gen_srshr64_i64(t, a, sh);
510
tcg_gen_add_i64(d, d, t);
511
- tcg_temp_free_i64(t);
512
}
513
514
static void gen_srsra_vec(unsigned vece, TCGv_vec d, TCGv_vec a, int64_t sh)
515
@@ -XXX,XX +XXX,XX @@ static void gen_srsra_vec(unsigned vece, TCGv_vec d, TCGv_vec a, int64_t sh)
516
517
gen_srshr_vec(vece, t, a, sh);
518
tcg_gen_add_vec(vece, d, d, t);
519
- tcg_temp_free_vec(t);
520
}
521
522
void gen_gvec_srsra(unsigned vece, uint32_t rd_ofs, uint32_t rm_ofs,
523
@@ -XXX,XX +XXX,XX @@ static void gen_urshr8_i64(TCGv_i64 d, TCGv_i64 a, int64_t sh)
524
tcg_gen_andi_i64(t, t, dup_const(MO_8, 1));
525
tcg_gen_vec_shr8i_i64(d, a, sh);
526
tcg_gen_vec_add8_i64(d, d, t);
527
- tcg_temp_free_i64(t);
528
}
529
530
static void gen_urshr16_i64(TCGv_i64 d, TCGv_i64 a, int64_t sh)
531
@@ -XXX,XX +XXX,XX @@ static void gen_urshr16_i64(TCGv_i64 d, TCGv_i64 a, int64_t sh)
532
tcg_gen_andi_i64(t, t, dup_const(MO_16, 1));
533
tcg_gen_vec_shr16i_i64(d, a, sh);
534
tcg_gen_vec_add16_i64(d, d, t);
535
- tcg_temp_free_i64(t);
536
}
537
538
static void gen_urshr32_i32(TCGv_i32 d, TCGv_i32 a, int32_t sh)
539
@@ -XXX,XX +XXX,XX @@ static void gen_urshr32_i32(TCGv_i32 d, TCGv_i32 a, int32_t sh)
540
tcg_gen_extract_i32(t, a, sh - 1, 1);
541
tcg_gen_shri_i32(d, a, sh);
542
tcg_gen_add_i32(d, d, t);
543
- tcg_temp_free_i32(t);
544
}
545
546
static void gen_urshr64_i64(TCGv_i64 d, TCGv_i64 a, int64_t sh)
547
@@ -XXX,XX +XXX,XX @@ static void gen_urshr64_i64(TCGv_i64 d, TCGv_i64 a, int64_t sh)
548
tcg_gen_extract_i64(t, a, sh - 1, 1);
549
tcg_gen_shri_i64(d, a, sh);
550
tcg_gen_add_i64(d, d, t);
551
- tcg_temp_free_i64(t);
552
}
553
554
static void gen_urshr_vec(unsigned vece, TCGv_vec d, TCGv_vec a, int64_t shift)
555
@@ -XXX,XX +XXX,XX @@ static void gen_urshr_vec(unsigned vece, TCGv_vec d, TCGv_vec a, int64_t shift)
556
tcg_gen_and_vec(vece, t, t, ones);
557
tcg_gen_shri_vec(vece, d, a, shift);
558
tcg_gen_add_vec(vece, d, d, t);
559
-
560
- tcg_temp_free_vec(t);
561
- tcg_temp_free_vec(ones);
562
}
563
564
void gen_gvec_urshr(unsigned vece, uint32_t rd_ofs, uint32_t rm_ofs,
565
@@ -XXX,XX +XXX,XX @@ static void gen_ursra8_i64(TCGv_i64 d, TCGv_i64 a, int64_t sh)
566
gen_urshr8_i64(t, a, sh);
567
}
568
tcg_gen_vec_add8_i64(d, d, t);
569
- tcg_temp_free_i64(t);
570
}
571
572
static void gen_ursra16_i64(TCGv_i64 d, TCGv_i64 a, int64_t sh)
573
@@ -XXX,XX +XXX,XX @@ static void gen_ursra16_i64(TCGv_i64 d, TCGv_i64 a, int64_t sh)
574
gen_urshr16_i64(t, a, sh);
575
}
576
tcg_gen_vec_add16_i64(d, d, t);
577
- tcg_temp_free_i64(t);
578
}
579
580
static void gen_ursra32_i32(TCGv_i32 d, TCGv_i32 a, int32_t sh)
581
@@ -XXX,XX +XXX,XX @@ static void gen_ursra32_i32(TCGv_i32 d, TCGv_i32 a, int32_t sh)
582
gen_urshr32_i32(t, a, sh);
583
}
584
tcg_gen_add_i32(d, d, t);
585
- tcg_temp_free_i32(t);
586
}
587
588
static void gen_ursra64_i64(TCGv_i64 d, TCGv_i64 a, int64_t sh)
589
@@ -XXX,XX +XXX,XX @@ static void gen_ursra64_i64(TCGv_i64 d, TCGv_i64 a, int64_t sh)
590
gen_urshr64_i64(t, a, sh);
591
}
592
tcg_gen_add_i64(d, d, t);
593
- tcg_temp_free_i64(t);
594
}
595
596
static void gen_ursra_vec(unsigned vece, TCGv_vec d, TCGv_vec a, int64_t sh)
597
@@ -XXX,XX +XXX,XX @@ static void gen_ursra_vec(unsigned vece, TCGv_vec d, TCGv_vec a, int64_t sh)
598
gen_urshr_vec(vece, t, a, sh);
599
}
600
tcg_gen_add_vec(vece, d, d, t);
601
- tcg_temp_free_vec(t);
602
}
603
604
void gen_gvec_ursra(unsigned vece, uint32_t rd_ofs, uint32_t rm_ofs,
605
@@ -XXX,XX +XXX,XX @@ static void gen_shr8_ins_i64(TCGv_i64 d, TCGv_i64 a, int64_t shift)
606
tcg_gen_andi_i64(t, t, mask);
607
tcg_gen_andi_i64(d, d, ~mask);
608
tcg_gen_or_i64(d, d, t);
609
- tcg_temp_free_i64(t);
610
}
611
612
static void gen_shr16_ins_i64(TCGv_i64 d, TCGv_i64 a, int64_t shift)
613
@@ -XXX,XX +XXX,XX @@ static void gen_shr16_ins_i64(TCGv_i64 d, TCGv_i64 a, int64_t shift)
614
tcg_gen_andi_i64(t, t, mask);
615
tcg_gen_andi_i64(d, d, ~mask);
616
tcg_gen_or_i64(d, d, t);
617
- tcg_temp_free_i64(t);
618
}
619
620
static void gen_shr32_ins_i32(TCGv_i32 d, TCGv_i32 a, int32_t shift)
621
@@ -XXX,XX +XXX,XX @@ static void gen_shr_ins_vec(unsigned vece, TCGv_vec d, TCGv_vec a, int64_t sh)
622
tcg_gen_shri_vec(vece, t, a, sh);
623
tcg_gen_and_vec(vece, d, d, m);
624
tcg_gen_or_vec(vece, d, d, t);
625
-
626
- tcg_temp_free_vec(t);
627
- tcg_temp_free_vec(m);
628
}
629
630
void gen_gvec_sri(unsigned vece, uint32_t rd_ofs, uint32_t rm_ofs,
631
@@ -XXX,XX +XXX,XX @@ static void gen_shl8_ins_i64(TCGv_i64 d, TCGv_i64 a, int64_t shift)
632
tcg_gen_andi_i64(t, t, mask);
633
tcg_gen_andi_i64(d, d, ~mask);
634
tcg_gen_or_i64(d, d, t);
635
- tcg_temp_free_i64(t);
636
}
637
638
static void gen_shl16_ins_i64(TCGv_i64 d, TCGv_i64 a, int64_t shift)
639
@@ -XXX,XX +XXX,XX @@ static void gen_shl16_ins_i64(TCGv_i64 d, TCGv_i64 a, int64_t shift)
640
tcg_gen_andi_i64(t, t, mask);
641
tcg_gen_andi_i64(d, d, ~mask);
642
tcg_gen_or_i64(d, d, t);
643
- tcg_temp_free_i64(t);
644
}
645
646
static void gen_shl32_ins_i32(TCGv_i32 d, TCGv_i32 a, int32_t shift)
647
@@ -XXX,XX +XXX,XX @@ static void gen_shl_ins_vec(unsigned vece, TCGv_vec d, TCGv_vec a, int64_t sh)
648
tcg_gen_dupi_vec(vece, m, MAKE_64BIT_MASK(0, sh));
649
tcg_gen_and_vec(vece, d, d, m);
650
tcg_gen_or_vec(vece, d, d, t);
651
-
652
- tcg_temp_free_vec(t);
653
- tcg_temp_free_vec(m);
654
}
655
656
void gen_gvec_sli(unsigned vece, uint32_t rd_ofs, uint32_t rm_ofs,
657
@@ -XXX,XX +XXX,XX @@ void gen_ushl_i32(TCGv_i32 dst, TCGv_i32 src, TCGv_i32 shift)
658
tcg_gen_shr_i32(rval, src, rsh);
659
tcg_gen_movcond_i32(TCG_COND_LTU, dst, lsh, max, lval, zero);
660
tcg_gen_movcond_i32(TCG_COND_LTU, dst, rsh, max, rval, dst);
661
-
662
- tcg_temp_free_i32(lval);
663
- tcg_temp_free_i32(rval);
664
- tcg_temp_free_i32(lsh);
665
- tcg_temp_free_i32(rsh);
666
}
667
668
void gen_ushl_i64(TCGv_i64 dst, TCGv_i64 src, TCGv_i64 shift)
669
@@ -XXX,XX +XXX,XX @@ void gen_ushl_i64(TCGv_i64 dst, TCGv_i64 src, TCGv_i64 shift)
670
tcg_gen_shr_i64(rval, src, rsh);
671
tcg_gen_movcond_i64(TCG_COND_LTU, dst, lsh, max, lval, zero);
672
tcg_gen_movcond_i64(TCG_COND_LTU, dst, rsh, max, rval, dst);
673
-
674
- tcg_temp_free_i64(lval);
675
- tcg_temp_free_i64(rval);
676
- tcg_temp_free_i64(lsh);
677
- tcg_temp_free_i64(rsh);
678
}
679
680
static void gen_ushl_vec(unsigned vece, TCGv_vec dst,
681
@@ -XXX,XX +XXX,XX @@ static void gen_ushl_vec(unsigned vece, TCGv_vec dst,
682
tcg_gen_dupi_vec(vece, msk, 0xff);
683
tcg_gen_and_vec(vece, lsh, shift, msk);
684
tcg_gen_and_vec(vece, rsh, rsh, msk);
685
- tcg_temp_free_vec(msk);
686
}
687
688
/*
689
@@ -XXX,XX +XXX,XX @@ static void gen_ushl_vec(unsigned vece, TCGv_vec dst,
690
tcg_gen_and_vec(vece, rval, rval, rsh);
691
}
692
tcg_gen_or_vec(vece, dst, lval, rval);
693
-
694
- tcg_temp_free_vec(max);
695
- tcg_temp_free_vec(lval);
696
- tcg_temp_free_vec(rval);
697
- tcg_temp_free_vec(lsh);
698
- tcg_temp_free_vec(rsh);
699
}
700
701
void gen_gvec_ushl(unsigned vece, uint32_t rd_ofs, uint32_t rn_ofs,
702
@@ -XXX,XX +XXX,XX @@ void gen_sshl_i32(TCGv_i32 dst, TCGv_i32 src, TCGv_i32 shift)
703
tcg_gen_sar_i32(rval, src, rsh);
704
tcg_gen_movcond_i32(TCG_COND_LEU, lval, lsh, max, lval, zero);
705
tcg_gen_movcond_i32(TCG_COND_LT, dst, lsh, zero, rval, lval);
706
-
707
- tcg_temp_free_i32(lval);
708
- tcg_temp_free_i32(rval);
709
- tcg_temp_free_i32(lsh);
710
- tcg_temp_free_i32(rsh);
711
}
712
713
void gen_sshl_i64(TCGv_i64 dst, TCGv_i64 src, TCGv_i64 shift)
714
@@ -XXX,XX +XXX,XX @@ void gen_sshl_i64(TCGv_i64 dst, TCGv_i64 src, TCGv_i64 shift)
715
tcg_gen_sar_i64(rval, src, rsh);
716
tcg_gen_movcond_i64(TCG_COND_LEU, lval, lsh, max, lval, zero);
717
tcg_gen_movcond_i64(TCG_COND_LT, dst, lsh, zero, rval, lval);
718
-
719
- tcg_temp_free_i64(lval);
720
- tcg_temp_free_i64(rval);
721
- tcg_temp_free_i64(lsh);
722
- tcg_temp_free_i64(rsh);
723
}
724
725
static void gen_sshl_vec(unsigned vece, TCGv_vec dst,
726
@@ -XXX,XX +XXX,XX @@ static void gen_sshl_vec(unsigned vece, TCGv_vec dst,
727
tcg_gen_dupi_vec(vece, tmp, 0x80);
728
tcg_gen_cmpsel_vec(TCG_COND_LT, vece, dst, lsh, tmp, lval, rval);
729
}
730
-
731
- tcg_temp_free_vec(lval);
732
- tcg_temp_free_vec(rval);
733
- tcg_temp_free_vec(lsh);
734
- tcg_temp_free_vec(rsh);
735
- tcg_temp_free_vec(tmp);
736
}
737
738
void gen_gvec_sshl(unsigned vece, uint32_t rd_ofs, uint32_t rn_ofs,
739
@@ -XXX,XX +XXX,XX @@ static void gen_uqadd_vec(unsigned vece, TCGv_vec t, TCGv_vec sat,
740
tcg_gen_usadd_vec(vece, t, a, b);
741
tcg_gen_cmp_vec(TCG_COND_NE, vece, x, x, t);
742
tcg_gen_or_vec(vece, sat, sat, x);
743
- tcg_temp_free_vec(x);
744
}
745
746
void gen_gvec_uqadd_qc(unsigned vece, uint32_t rd_ofs, uint32_t rn_ofs,
747
@@ -XXX,XX +XXX,XX @@ static void gen_sqadd_vec(unsigned vece, TCGv_vec t, TCGv_vec sat,
748
tcg_gen_ssadd_vec(vece, t, a, b);
749
tcg_gen_cmp_vec(TCG_COND_NE, vece, x, x, t);
750
tcg_gen_or_vec(vece, sat, sat, x);
751
- tcg_temp_free_vec(x);
752
}
753
754
void gen_gvec_sqadd_qc(unsigned vece, uint32_t rd_ofs, uint32_t rn_ofs,
755
@@ -XXX,XX +XXX,XX @@ static void gen_uqsub_vec(unsigned vece, TCGv_vec t, TCGv_vec sat,
756
tcg_gen_ussub_vec(vece, t, a, b);
757
tcg_gen_cmp_vec(TCG_COND_NE, vece, x, x, t);
758
tcg_gen_or_vec(vece, sat, sat, x);
759
- tcg_temp_free_vec(x);
760
}
761
762
void gen_gvec_uqsub_qc(unsigned vece, uint32_t rd_ofs, uint32_t rn_ofs,
763
@@ -XXX,XX +XXX,XX @@ static void gen_sqsub_vec(unsigned vece, TCGv_vec t, TCGv_vec sat,
764
tcg_gen_sssub_vec(vece, t, a, b);
765
tcg_gen_cmp_vec(TCG_COND_NE, vece, x, x, t);
766
tcg_gen_or_vec(vece, sat, sat, x);
767
- tcg_temp_free_vec(x);
768
}
769
770
void gen_gvec_sqsub_qc(unsigned vece, uint32_t rd_ofs, uint32_t rn_ofs,
771
@@ -XXX,XX +XXX,XX @@ static void gen_sabd_i32(TCGv_i32 d, TCGv_i32 a, TCGv_i32 b)
772
tcg_gen_sub_i32(t, a, b);
773
tcg_gen_sub_i32(d, b, a);
774
tcg_gen_movcond_i32(TCG_COND_LT, d, a, b, d, t);
775
- tcg_temp_free_i32(t);
776
}
777
778
static void gen_sabd_i64(TCGv_i64 d, TCGv_i64 a, TCGv_i64 b)
779
@@ -XXX,XX +XXX,XX @@ static void gen_sabd_i64(TCGv_i64 d, TCGv_i64 a, TCGv_i64 b)
780
tcg_gen_sub_i64(t, a, b);
781
tcg_gen_sub_i64(d, b, a);
782
tcg_gen_movcond_i64(TCG_COND_LT, d, a, b, d, t);
783
- tcg_temp_free_i64(t);
784
}
785
786
static void gen_sabd_vec(unsigned vece, TCGv_vec d, TCGv_vec a, TCGv_vec b)
787
@@ -XXX,XX +XXX,XX @@ static void gen_sabd_vec(unsigned vece, TCGv_vec d, TCGv_vec a, TCGv_vec b)
788
tcg_gen_smin_vec(vece, t, a, b);
789
tcg_gen_smax_vec(vece, d, a, b);
790
tcg_gen_sub_vec(vece, d, d, t);
791
- tcg_temp_free_vec(t);
792
}
793
794
void gen_gvec_sabd(unsigned vece, uint32_t rd_ofs, uint32_t rn_ofs,
795
@@ -XXX,XX +XXX,XX @@ static void gen_uabd_i32(TCGv_i32 d, TCGv_i32 a, TCGv_i32 b)
796
tcg_gen_sub_i32(t, a, b);
797
tcg_gen_sub_i32(d, b, a);
798
tcg_gen_movcond_i32(TCG_COND_LTU, d, a, b, d, t);
799
- tcg_temp_free_i32(t);
800
}
801
802
static void gen_uabd_i64(TCGv_i64 d, TCGv_i64 a, TCGv_i64 b)
803
@@ -XXX,XX +XXX,XX @@ static void gen_uabd_i64(TCGv_i64 d, TCGv_i64 a, TCGv_i64 b)
804
tcg_gen_sub_i64(t, a, b);
805
tcg_gen_sub_i64(d, b, a);
806
tcg_gen_movcond_i64(TCG_COND_LTU, d, a, b, d, t);
807
- tcg_temp_free_i64(t);
808
}
809
810
static void gen_uabd_vec(unsigned vece, TCGv_vec d, TCGv_vec a, TCGv_vec b)
811
@@ -XXX,XX +XXX,XX @@ static void gen_uabd_vec(unsigned vece, TCGv_vec d, TCGv_vec a, TCGv_vec b)
812
tcg_gen_umin_vec(vece, t, a, b);
813
tcg_gen_umax_vec(vece, d, a, b);
814
tcg_gen_sub_vec(vece, d, d, t);
815
- tcg_temp_free_vec(t);
816
}
817
818
void gen_gvec_uabd(unsigned vece, uint32_t rd_ofs, uint32_t rn_ofs,
819
@@ -XXX,XX +XXX,XX @@ static void gen_saba_i32(TCGv_i32 d, TCGv_i32 a, TCGv_i32 b)
820
TCGv_i32 t = tcg_temp_new_i32();
821
gen_sabd_i32(t, a, b);
822
tcg_gen_add_i32(d, d, t);
823
- tcg_temp_free_i32(t);
824
}
825
826
static void gen_saba_i64(TCGv_i64 d, TCGv_i64 a, TCGv_i64 b)
827
@@ -XXX,XX +XXX,XX @@ static void gen_saba_i64(TCGv_i64 d, TCGv_i64 a, TCGv_i64 b)
828
TCGv_i64 t = tcg_temp_new_i64();
829
gen_sabd_i64(t, a, b);
830
tcg_gen_add_i64(d, d, t);
831
- tcg_temp_free_i64(t);
832
}
833
834
static void gen_saba_vec(unsigned vece, TCGv_vec d, TCGv_vec a, TCGv_vec b)
835
@@ -XXX,XX +XXX,XX @@ static void gen_saba_vec(unsigned vece, TCGv_vec d, TCGv_vec a, TCGv_vec b)
836
TCGv_vec t = tcg_temp_new_vec_matching(d);
837
gen_sabd_vec(vece, t, a, b);
838
tcg_gen_add_vec(vece, d, d, t);
839
- tcg_temp_free_vec(t);
840
}
841
842
void gen_gvec_saba(unsigned vece, uint32_t rd_ofs, uint32_t rn_ofs,
843
@@ -XXX,XX +XXX,XX @@ static void gen_uaba_i32(TCGv_i32 d, TCGv_i32 a, TCGv_i32 b)
844
TCGv_i32 t = tcg_temp_new_i32();
845
gen_uabd_i32(t, a, b);
846
tcg_gen_add_i32(d, d, t);
847
- tcg_temp_free_i32(t);
848
}
849
850
static void gen_uaba_i64(TCGv_i64 d, TCGv_i64 a, TCGv_i64 b)
851
@@ -XXX,XX +XXX,XX @@ static void gen_uaba_i64(TCGv_i64 d, TCGv_i64 a, TCGv_i64 b)
852
TCGv_i64 t = tcg_temp_new_i64();
853
gen_uabd_i64(t, a, b);
854
tcg_gen_add_i64(d, d, t);
855
- tcg_temp_free_i64(t);
856
}
857
858
static void gen_uaba_vec(unsigned vece, TCGv_vec d, TCGv_vec a, TCGv_vec b)
859
@@ -XXX,XX +XXX,XX @@ static void gen_uaba_vec(unsigned vece, TCGv_vec d, TCGv_vec a, TCGv_vec b)
860
TCGv_vec t = tcg_temp_new_vec_matching(d);
861
gen_uabd_vec(vece, t, a, b);
862
tcg_gen_add_vec(vece, d, d, t);
863
- tcg_temp_free_vec(t);
864
}
865
866
void gen_gvec_uaba(unsigned vece, uint32_t rd_ofs, uint32_t rn_ofs,
867
@@ -XXX,XX +XXX,XX @@ static void do_coproc_insn(DisasContext *s, int cpnum, int is64,
868
t = load_cpu_offset(offsetoflow32(CPUARMState, cp15.hstr_el2));
869
tcg_gen_andi_i32(t, t, 1u << maskbit);
870
tcg_gen_brcondi_i32(TCG_COND_EQ, t, 0, over.label);
871
- tcg_temp_free_i32(t);
872
873
gen_exception_insn(s, 0, EXCP_UDEF, syndrome);
874
set_disas_label(s, over);
875
@@ -XXX,XX +XXX,XX @@ static void do_coproc_insn(DisasContext *s, int cpnum, int is64,
876
case 0:
877
break;
878
case ARM_CP_NOP:
879
- goto exit;
880
+ return;
881
case ARM_CP_WFI:
882
if (isread) {
883
unallocated_encoding(s);
884
@@ -XXX,XX +XXX,XX @@ static void do_coproc_insn(DisasContext *s, int cpnum, int is64,
885
gen_update_pc(s, curr_insn_len(s));
886
s->base.is_jmp = DISAS_WFI;
887
}
888
- goto exit;
889
+ return;
890
default:
891
g_assert_not_reached();
892
}
893
@@ -XXX,XX +XXX,XX @@ static void do_coproc_insn(DisasContext *s, int cpnum, int is64,
894
store_reg(s, rt, tmp);
895
tmp = tcg_temp_new_i32();
896
tcg_gen_extrh_i64_i32(tmp, tmp64);
897
- tcg_temp_free_i64(tmp64);
898
store_reg(s, rt2, tmp);
899
} else {
900
TCGv_i32 tmp;
901
@@ -XXX,XX +XXX,XX @@ static void do_coproc_insn(DisasContext *s, int cpnum, int is64,
902
* the condition codes from the high 4 bits of the value
903
*/
904
gen_set_nzcv(tmp);
905
- tcg_temp_free_i32(tmp);
906
} else {
907
store_reg(s, rt, tmp);
908
}
909
@@ -XXX,XX +XXX,XX @@ static void do_coproc_insn(DisasContext *s, int cpnum, int is64,
910
/* Write */
911
if (ri->type & ARM_CP_CONST) {
912
/* If not forbidden by access permissions, treat as WI */
913
- goto exit;
914
+ return;
915
}
916
917
if (is64) {
918
@@ -XXX,XX +XXX,XX @@ static void do_coproc_insn(DisasContext *s, int cpnum, int is64,
919
tmplo = load_reg(s, rt);
920
tmphi = load_reg(s, rt2);
921
tcg_gen_concat_i32_i64(tmp64, tmplo, tmphi);
922
- tcg_temp_free_i32(tmplo);
923
- tcg_temp_free_i32(tmphi);
924
if (ri->writefn) {
925
if (!tcg_ri) {
926
tcg_ri = gen_lookup_cp_reg(key);
927
@@ -XXX,XX +XXX,XX @@ static void do_coproc_insn(DisasContext *s, int cpnum, int is64,
928
} else {
929
tcg_gen_st_i64(tmp64, cpu_env, ri->fieldoffset);
930
}
931
- tcg_temp_free_i64(tmp64);
932
} else {
933
TCGv_i32 tmp = load_reg(s, rt);
934
if (ri->writefn) {
935
@@ -XXX,XX +XXX,XX @@ static void do_coproc_insn(DisasContext *s, int cpnum, int is64,
936
tcg_ri = gen_lookup_cp_reg(key);
937
}
938
gen_helper_set_cp_reg(cpu_env, tcg_ri, tmp);
939
- tcg_temp_free_i32(tmp);
940
} else {
941
store_cpu_offset(tmp, ri->fieldoffset, 4);
942
}
943
@@ -XXX,XX +XXX,XX @@ static void do_coproc_insn(DisasContext *s, int cpnum, int is64,
944
if (need_exit_tb) {
945
gen_lookup_tb(s);
946
}
947
-
948
- exit:
949
- if (tcg_ri) {
950
- tcg_temp_free_ptr(tcg_ri);
951
- }
952
}
953
954
/* Decode XScale DSP or iWMMXt insn (in the copro space, cp=0 or 1) */
955
@@ -XXX,XX +XXX,XX @@ static void gen_addq(DisasContext *s, TCGv_i64 val, int rlow, int rhigh)
956
tmph = load_reg(s, rhigh);
957
tmp = tcg_temp_new_i64();
958
tcg_gen_concat_i32_i64(tmp, tmpl, tmph);
959
- tcg_temp_free_i32(tmpl);
960
- tcg_temp_free_i32(tmph);
961
tcg_gen_add_i64(val, val, tmp);
962
- tcg_temp_free_i64(tmp);
963
}
964
965
/* Set N and Z flags from hi|lo. */
966
@@ -XXX,XX +XXX,XX @@ static void gen_load_exclusive(DisasContext *s, int rt, int rt2,
967
TCGv taddr = gen_aa32_addr(s, addr, opc);
968
969
tcg_gen_qemu_ld_i64(t64, taddr, get_mem_index(s), opc);
970
- tcg_temp_free(taddr);
971
tcg_gen_mov_i64(cpu_exclusive_val, t64);
972
if (s->be_data == MO_BE) {
973
tcg_gen_extr_i64_i32(tmp2, tmp, t64);
974
} else {
975
tcg_gen_extr_i64_i32(tmp, tmp2, t64);
976
}
977
- tcg_temp_free_i64(t64);
978
-
979
store_reg(s, rt2, tmp2);
980
} else {
981
gen_aa32_ld_i32(s, tmp, addr, get_mem_index(s), opc);
982
@@ -XXX,XX +XXX,XX @@ static void gen_store_exclusive(DisasContext *s, int rd, int rt, int rt2,
983
extaddr = tcg_temp_new_i64();
984
tcg_gen_extu_i32_i64(extaddr, addr);
985
tcg_gen_brcond_i64(TCG_COND_NE, extaddr, cpu_exclusive_addr, fail_label);
986
- tcg_temp_free_i64(extaddr);
987
988
taddr = gen_aa32_addr(s, addr, opc);
989
t0 = tcg_temp_new_i32();
990
@@ -XXX,XX +XXX,XX @@ static void gen_store_exclusive(DisasContext *s, int rd, int rt, int rt2,
991
} else {
992
tcg_gen_concat_i32_i64(n64, t1, t2);
993
}
994
- tcg_temp_free_i32(t2);
995
996
tcg_gen_atomic_cmpxchg_i64(o64, taddr, cpu_exclusive_val, n64,
997
get_mem_index(s), opc);
998
- tcg_temp_free_i64(n64);
999
1000
tcg_gen_setcond_i64(TCG_COND_NE, o64, o64, cpu_exclusive_val);
1001
tcg_gen_extrl_i64_i32(t0, o64);
1002
-
1003
- tcg_temp_free_i64(o64);
1004
} else {
1005
t2 = tcg_temp_new_i32();
1006
tcg_gen_extrl_i64_i32(t2, cpu_exclusive_val);
1007
tcg_gen_atomic_cmpxchg_i32(t0, taddr, t2, t1, get_mem_index(s), opc);
1008
tcg_gen_setcond_i32(TCG_COND_NE, t0, t0, t2);
1009
- tcg_temp_free_i32(t2);
1010
}
1011
- tcg_temp_free_i32(t1);
1012
- tcg_temp_free(taddr);
1013
tcg_gen_mov_i32(cpu_R[rd], t0);
1014
- tcg_temp_free_i32(t0);
1015
tcg_gen_br(done_label);
1016
1017
gen_set_label(fail_label);
1018
@@ -XXX,XX +XXX,XX @@ static void gen_srs(DisasContext *s,
1019
tcg_gen_addi_i32(addr, addr, offset);
1020
tmp = load_reg(s, 14);
1021
gen_aa32_st_i32(s, tmp, addr, get_mem_index(s), MO_UL | MO_ALIGN);
1022
- tcg_temp_free_i32(tmp);
1023
tmp = load_cpu_field(spsr);
1024
tcg_gen_addi_i32(addr, addr, 4);
1025
gen_aa32_st_i32(s, tmp, addr, get_mem_index(s), MO_UL | MO_ALIGN);
1026
- tcg_temp_free_i32(tmp);
1027
if (writeback) {
1028
switch (amode) {
1029
case 0:
1030
@@ -XXX,XX +XXX,XX @@ static void gen_srs(DisasContext *s,
1031
tcg_gen_addi_i32(addr, addr, offset);
1032
gen_helper_set_r13_banked(cpu_env, tcg_constant_i32(mode), addr);
1033
}
1034
- tcg_temp_free_i32(addr);
1035
s->base.is_jmp = DISAS_UPDATE_EXIT;
1036
}
1037
1038
@@ -XXX,XX +XXX,XX @@ static bool store_reg_kind(DisasContext *s, int rd,
1039
{
1040
switch (kind) {
1041
case STREG_NONE:
1042
- tcg_temp_free_i32(val);
1043
return true;
1044
case STREG_NORMAL:
1045
/* See ALUWritePC: Interworking only from a32 mode. */
1046
@@ -XXX,XX +XXX,XX @@ static bool op_s_rrr_shi(DisasContext *s, arg_s_rrr_shi *a,
1047
tmp1 = load_reg(s, a->rn);
1048
1049
gen(tmp1, tmp1, tmp2);
1050
- tcg_temp_free_i32(tmp2);
1051
1052
if (logic_cc) {
1053
gen_logic_CC(tmp1);
1054
@@ -XXX,XX +XXX,XX @@ static bool op_s_rrr_shr(DisasContext *s, arg_s_rrr_shr *a,
1055
tmp1 = load_reg(s, a->rn);
1056
1057
gen(tmp1, tmp1, tmp2);
1058
- tcg_temp_free_i32(tmp2);
1059
1060
if (logic_cc) {
1061
gen_logic_CC(tmp1);
1062
@@ -XXX,XX +XXX,XX @@ static bool do_mve_shl_ri(DisasContext *s, arg_mve_shl_ri *a,
1063
tcg_gen_extrh_i64_i32(rdahi, rda);
1064
store_reg(s, a->rdalo, rdalo);
1065
store_reg(s, a->rdahi, rdahi);
1066
- tcg_temp_free_i64(rda);
1067
1068
return true;
1069
}
1070
@@ -XXX,XX +XXX,XX @@ static bool do_mve_shl_rr(DisasContext *s, arg_mve_shl_rr *a, WideShiftFn *fn)
1071
tcg_gen_extrh_i64_i32(rdahi, rda);
1072
store_reg(s, a->rdalo, rdalo);
1073
store_reg(s, a->rdahi, rdahi);
1074
- tcg_temp_free_i64(rda);
1075
1076
return true;
1077
}
1078
@@ -XXX,XX +XXX,XX @@ static bool op_mla(DisasContext *s, arg_s_rrrr *a, bool add)
1079
t1 = load_reg(s, a->rn);
1080
t2 = load_reg(s, a->rm);
1081
tcg_gen_mul_i32(t1, t1, t2);
1082
- tcg_temp_free_i32(t2);
1083
if (add) {
1084
t2 = load_reg(s, a->ra);
1085
tcg_gen_add_i32(t1, t1, t2);
1086
- tcg_temp_free_i32(t2);
1087
}
1088
if (a->s) {
1089
gen_logic_CC(t1);
1090
@@ -XXX,XX +XXX,XX @@ static bool trans_MLS(DisasContext *s, arg_MLS *a)
1091
t1 = load_reg(s, a->rn);
1092
t2 = load_reg(s, a->rm);
1093
tcg_gen_mul_i32(t1, t1, t2);
1094
- tcg_temp_free_i32(t2);
1095
t2 = load_reg(s, a->ra);
1096
tcg_gen_sub_i32(t1, t2, t1);
1097
- tcg_temp_free_i32(t2);
1098
store_reg(s, a->rd, t1);
1099
return true;
1100
}
1101
@@ -XXX,XX +XXX,XX @@ static bool op_mlal(DisasContext *s, arg_s_rrrr *a, bool uns, bool add)
1102
t2 = load_reg(s, a->ra);
1103
t3 = load_reg(s, a->rd);
1104
tcg_gen_add2_i32(t0, t1, t0, t1, t2, t3);
1105
- tcg_temp_free_i32(t2);
1106
- tcg_temp_free_i32(t3);
1107
}
1108
if (a->s) {
1109
gen_logicq_cc(t0, t1);
1110
@@ -XXX,XX +XXX,XX @@ static bool trans_UMAAL(DisasContext *s, arg_UMAAL *a)
1111
zero = tcg_constant_i32(0);
1112
t2 = load_reg(s, a->ra);
1113
tcg_gen_add2_i32(t0, t1, t0, t1, t2, zero);
1114
- tcg_temp_free_i32(t2);
1115
t2 = load_reg(s, a->rd);
1116
tcg_gen_add2_i32(t0, t1, t0, t1, t2, zero);
1117
- tcg_temp_free_i32(t2);
1118
store_reg(s, a->ra, t0);
1119
store_reg(s, a->rd, t1);
1120
return true;
1121
@@ -XXX,XX +XXX,XX @@ static bool op_qaddsub(DisasContext *s, arg_rrr *a, bool add, bool doub)
1122
} else {
1123
gen_helper_sub_saturate(t0, cpu_env, t0, t1);
1124
}
1125
- tcg_temp_free_i32(t1);
1126
store_reg(s, a->rd, t0);
1127
return true;
1128
}
1129
@@ -XXX,XX +XXX,XX @@ static bool op_smlaxxx(DisasContext *s, arg_rrrr *a,
1130
t0 = load_reg(s, a->rn);
1131
t1 = load_reg(s, a->rm);
1132
gen_mulxy(t0, t1, nt, mt);
1133
- tcg_temp_free_i32(t1);
1134
1135
switch (add_long) {
1136
case 0:
1137
@@ -XXX,XX +XXX,XX @@ static bool op_smlaxxx(DisasContext *s, arg_rrrr *a,
1138
case 1:
1139
t1 = load_reg(s, a->ra);
1140
gen_helper_add_setq(t0, cpu_env, t0, t1);
1141
- tcg_temp_free_i32(t1);
1142
store_reg(s, a->rd, t0);
1143
break;
1144
case 2:
1145
@@ -XXX,XX +XXX,XX @@ static bool op_smlaxxx(DisasContext *s, arg_rrrr *a,
1146
t1 = tcg_temp_new_i32();
1147
tcg_gen_sari_i32(t1, t0, 31);
1148
tcg_gen_add2_i32(tl, th, tl, th, t0, t1);
1149
- tcg_temp_free_i32(t0);
1150
- tcg_temp_free_i32(t1);
1151
store_reg(s, a->ra, tl);
1152
store_reg(s, a->rd, th);
1153
break;
1154
@@ -XXX,XX +XXX,XX @@ static bool op_smlawx(DisasContext *s, arg_rrrr *a, bool add, bool mt)
1155
tcg_gen_shli_i32(t1, t1, 16);
1156
}
1157
tcg_gen_muls2_i32(t0, t1, t0, t1);
1158
- tcg_temp_free_i32(t0);
1159
if (add) {
1160
t0 = load_reg(s, a->ra);
1161
gen_helper_add_setq(t1, cpu_env, t1, t0);
1162
- tcg_temp_free_i32(t0);
1163
}
1164
store_reg(s, a->rd, t1);
1165
return true;
1166
@@ -XXX,XX +XXX,XX @@ static bool op_crc32(DisasContext *s, arg_rrr *a, bool c, MemOp sz)
1167
} else {
1168
gen_helper_crc32(t1, t1, t2, t3);
1169
}
1170
- tcg_temp_free_i32(t2);
1171
store_reg(s, a->rd, t1);
1172
return true;
1173
}
1174
@@ -XXX,XX +XXX,XX @@ static bool trans_MSR_v7m(DisasContext *s, arg_MSR_v7m *a)
1175
addr = tcg_constant_i32((a->mask << 10) | a->sysm);
1176
reg = load_reg(s, a->rn);
1177
gen_helper_v7m_msr(cpu_env, addr, reg);
1178
- tcg_temp_free_i32(reg);
1179
/* If we wrote to CONTROL, the EL might have changed */
1180
gen_rebuild_hflags(s, true);
1181
gen_lookup_tb(s);
1182
@@ -XXX,XX +XXX,XX @@ static bool trans_TT(DisasContext *s, arg_TT *a)
1183
addr = load_reg(s, a->rn);
1184
tmp = tcg_temp_new_i32();
1185
gen_helper_v7m_tt(tmp, cpu_env, addr, tcg_constant_i32((a->A << 1) | a->T));
1186
- tcg_temp_free_i32(addr);
1187
store_reg(s, a->rd, tmp);
1188
return true;
1189
}
1190
@@ -XXX,XX +XXX,XX @@ static TCGv_i32 op_addr_rr_pre(DisasContext *s, arg_ldst_rr *a)
1191
} else {
1192
tcg_gen_sub_i32(addr, addr, ofs);
1193
}
1194
- tcg_temp_free_i32(ofs);
1195
}
1196
return addr;
1197
}
1198
@@ -XXX,XX +XXX,XX @@ static void op_addr_rr_post(DisasContext *s, arg_ldst_rr *a,
1199
} else {
1200
tcg_gen_sub_i32(addr, addr, ofs);
1201
}
1202
- tcg_temp_free_i32(ofs);
1203
} else if (!a->w) {
1204
- tcg_temp_free_i32(addr);
1205
return;
1206
}
1207
tcg_gen_addi_i32(addr, addr, address_offset);
1208
@@ -XXX,XX +XXX,XX @@ static bool op_store_rr(DisasContext *s, arg_ldst_rr *a,
1209
tmp = load_reg(s, a->rt);
1210
gen_aa32_st_i32(s, tmp, addr, mem_idx, mop);
1211
disas_set_da_iss(s, mop, issinfo);
1212
- tcg_temp_free_i32(tmp);
1213
1214
op_addr_rr_post(s, a, addr, 0);
1215
return true;
1216
@@ -XXX,XX +XXX,XX @@ static bool trans_STRD_rr(DisasContext *s, arg_ldst_rr *a)
1217
1218
tmp = load_reg(s, a->rt);
1219
gen_aa32_st_i32(s, tmp, addr, mem_idx, MO_UL | MO_ALIGN);
1220
- tcg_temp_free_i32(tmp);
1221
1222
tcg_gen_addi_i32(addr, addr, 4);
1223
1224
tmp = load_reg(s, a->rt + 1);
1225
gen_aa32_st_i32(s, tmp, addr, mem_idx, MO_UL | MO_ALIGN);
1226
- tcg_temp_free_i32(tmp);
1227
1228
op_addr_rr_post(s, a, addr, -4);
1229
return true;
1230
@@ -XXX,XX +XXX,XX @@ static TCGv_i32 op_addr_ri_pre(DisasContext *s, arg_ldst_ri *a)
1231
TCGv_i32 newsp = tcg_temp_new_i32();
1232
tcg_gen_addi_i32(newsp, cpu_R[13], ofs);
1233
gen_helper_v8m_stackcheck(cpu_env, newsp);
1234
- tcg_temp_free_i32(newsp);
1235
} else {
1236
gen_helper_v8m_stackcheck(cpu_env, cpu_R[13]);
1237
}
1238
@@ -XXX,XX +XXX,XX @@ static void op_addr_ri_post(DisasContext *s, arg_ldst_ri *a,
1239
address_offset -= a->imm;
1240
}
1241
} else if (!a->w) {
1242
- tcg_temp_free_i32(addr);
1243
return;
1244
}
1245
tcg_gen_addi_i32(addr, addr, address_offset);
1246
@@ -XXX,XX +XXX,XX @@ static bool op_store_ri(DisasContext *s, arg_ldst_ri *a,
1247
tmp = load_reg(s, a->rt);
1248
gen_aa32_st_i32(s, tmp, addr, mem_idx, mop);
1249
disas_set_da_iss(s, mop, issinfo);
1250
- tcg_temp_free_i32(tmp);
1251
1252
op_addr_ri_post(s, a, addr, 0);
1253
return true;
1254
@@ -XXX,XX +XXX,XX @@ static bool op_strd_ri(DisasContext *s, arg_ldst_ri *a, int rt2)
1255
1256
tmp = load_reg(s, a->rt);
1257
gen_aa32_st_i32(s, tmp, addr, mem_idx, MO_UL | MO_ALIGN);
1258
- tcg_temp_free_i32(tmp);
1259
1260
tcg_gen_addi_i32(addr, addr, 4);
1261
1262
tmp = load_reg(s, rt2);
1263
gen_aa32_st_i32(s, tmp, addr, mem_idx, MO_UL | MO_ALIGN);
1264
- tcg_temp_free_i32(tmp);
1265
1266
op_addr_ri_post(s, a, addr, -4);
1267
return true;
1268
@@ -XXX,XX +XXX,XX @@ static bool op_swp(DisasContext *s, arg_SWP *a, MemOp opc)
1269
opc |= s->be_data;
1270
addr = load_reg(s, a->rn);
1271
taddr = gen_aa32_addr(s, addr, opc);
1272
- tcg_temp_free_i32(addr);
1273
1274
tmp = load_reg(s, a->rt2);
1275
tcg_gen_atomic_xchg_i32(tmp, taddr, tmp, get_mem_index(s), opc);
1276
- tcg_temp_free(taddr);
1277
1278
store_reg(s, a->rt, tmp);
1279
return true;
1280
@@ -XXX,XX +XXX,XX @@ static bool op_strex(DisasContext *s, arg_STREX *a, MemOp mop, bool rel)
1281
tcg_gen_addi_i32(addr, addr, a->imm);
1282
1283
gen_store_exclusive(s, a->rd, a->rt, a->rt2, addr, mop);
1284
- tcg_temp_free_i32(addr);
1285
return true;
1286
}
1287
1288
@@ -XXX,XX +XXX,XX @@ static bool op_stl(DisasContext *s, arg_STL *a, MemOp mop)
1289
gen_aa32_st_i32(s, tmp, addr, get_mem_index(s), mop | MO_ALIGN);
1290
disas_set_da_iss(s, mop, a->rt | ISSIsAcqRel | ISSIsWrite);
1291
1292
- tcg_temp_free_i32(tmp);
1293
- tcg_temp_free_i32(addr);
1294
return true;
1295
}
1296
1297
@@ -XXX,XX +XXX,XX @@ static bool op_ldrex(DisasContext *s, arg_LDREX *a, MemOp mop, bool acq)
1298
tcg_gen_addi_i32(addr, addr, a->imm);
1299
1300
gen_load_exclusive(s, a->rt, a->rt2, addr, mop);
1301
- tcg_temp_free_i32(addr);
1302
1303
if (acq) {
1304
tcg_gen_mb(TCG_MO_ALL | TCG_BAR_LDAQ);
1305
@@ -XXX,XX +XXX,XX @@ static bool op_lda(DisasContext *s, arg_LDA *a, MemOp mop)
1306
tmp = tcg_temp_new_i32();
1307
gen_aa32_ld_i32(s, tmp, addr, get_mem_index(s), mop | MO_ALIGN);
1308
disas_set_da_iss(s, mop, a->rt | ISSIsAcqRel);
1309
- tcg_temp_free_i32(addr);
1310
1311
store_reg(s, a->rt, tmp);
1312
tcg_gen_mb(TCG_MO_ALL | TCG_BAR_STRL);
1313
@@ -XXX,XX +XXX,XX @@ static bool trans_USADA8(DisasContext *s, arg_USADA8 *a)
1314
t1 = load_reg(s, a->rn);
1315
t2 = load_reg(s, a->rm);
1316
gen_helper_usad8(t1, t1, t2);
1317
- tcg_temp_free_i32(t2);
1318
if (a->ra != 15) {
1319
t2 = load_reg(s, a->ra);
1320
tcg_gen_add_i32(t1, t1, t2);
1321
- tcg_temp_free_i32(t2);
1322
}
1323
store_reg(s, a->rd, t1);
1324
return true;
1325
@@ -XXX,XX +XXX,XX @@ static bool trans_BFCI(DisasContext *s, arg_BFCI *a)
1326
if (width != 32) {
1327
TCGv_i32 tmp2 = load_reg(s, a->rd);
1328
tcg_gen_deposit_i32(tmp, tmp2, tmp, lsb, width);
1329
- tcg_temp_free_i32(tmp2);
1330
}
1331
store_reg(s, a->rd, tmp);
1332
return true;
1333
@@ -XXX,XX +XXX,XX @@ static bool op_par_addsub(DisasContext *s, arg_rrr *a,
1334
1335
gen(t0, t0, t1);
1336
1337
- tcg_temp_free_i32(t1);
1338
store_reg(s, a->rd, t0);
1339
return true;
1340
}
1341
@@ -XXX,XX +XXX,XX @@ static bool op_par_addsub_ge(DisasContext *s, arg_rrr *a,
1342
tcg_gen_addi_ptr(ge, cpu_env, offsetof(CPUARMState, GE));
1343
gen(t0, t0, t1, ge);
1344
1345
- tcg_temp_free_ptr(ge);
1346
- tcg_temp_free_i32(t1);
1347
store_reg(s, a->rd, t0);
1348
return true;
1349
}
1350
@@ -XXX,XX +XXX,XX @@ static bool trans_PKH(DisasContext *s, arg_PKH *a)
1351
tcg_gen_shli_i32(tm, tm, shift);
1352
tcg_gen_deposit_i32(tn, tm, tn, 0, 16);
1353
}
1354
- tcg_temp_free_i32(tm);
1355
store_reg(s, a->rd, tn);
1356
return true;
1357
}
1358
@@ -XXX,XX +XXX,XX @@ static bool op_xta(DisasContext *s, arg_rrr_rot *a,
1359
if (a->rn != 15) {
1360
TCGv_i32 tmp2 = load_reg(s, a->rn);
1361
gen_add(tmp, tmp, tmp2);
1362
- tcg_temp_free_i32(tmp2);
1363
}
1364
store_reg(s, a->rd, tmp);
1365
return true;
1366
@@ -XXX,XX +XXX,XX @@ static bool trans_SEL(DisasContext *s, arg_rrr *a)
1367
t3 = tcg_temp_new_i32();
1368
tcg_gen_ld_i32(t3, cpu_env, offsetof(CPUARMState, GE));
1369
gen_helper_sel_flags(t1, t3, t1, t2);
1370
- tcg_temp_free_i32(t3);
1371
- tcg_temp_free_i32(t2);
1372
store_reg(s, a->rd, t1);
1373
return true;
1374
}
1375
@@ -XXX,XX +XXX,XX @@ static bool op_smlad(DisasContext *s, arg_rrrr *a, bool m_swap, bool sub)
1376
* addition of Ra.
1377
*/
1378
tcg_gen_sub_i32(t1, t1, t2);
1379
- tcg_temp_free_i32(t2);
1380
1381
if (a->ra != 15) {
1382
t2 = load_reg(s, a->ra);
1383
gen_helper_add_setq(t1, cpu_env, t1, t2);
1384
- tcg_temp_free_i32(t2);
1385
}
1386
} else if (a->ra == 15) {
1387
/* Single saturation-checking addition */
1388
gen_helper_add_setq(t1, cpu_env, t1, t2);
1389
- tcg_temp_free_i32(t2);
1390
} else {
1391
/*
1392
* We need to add the products and Ra together and then
1393
@@ -XXX,XX +XXX,XX @@ static bool op_smlad(DisasContext *s, arg_rrrr *a, bool m_swap, bool sub)
1394
load_reg_var(s, t2, a->ra);
1395
tcg_gen_ext_i32_i64(q64, t2);
1396
tcg_gen_add_i64(p64, p64, q64);
1397
- tcg_temp_free_i64(q64);
1398
1399
tcg_gen_extr_i64_i32(t1, t2, p64);
1400
- tcg_temp_free_i64(p64);
1401
/*
1402
* t1 is the low half of the result which goes into Rd.
1403
* We have overflow and must set Q if the high half (t2)
1404
@@ -XXX,XX +XXX,XX @@ static bool op_smlad(DisasContext *s, arg_rrrr *a, bool m_swap, bool sub)
1405
one = tcg_constant_i32(1);
1406
tcg_gen_movcond_i32(TCG_COND_NE, qf, t2, t3, one, qf);
1407
store_cpu_field(qf, QF);
1408
- tcg_temp_free_i32(t3);
1409
- tcg_temp_free_i32(t2);
1410
}
1411
store_reg(s, a->rd, t1);
1412
return true;
1413
@@ -XXX,XX +XXX,XX @@ static bool op_smlald(DisasContext *s, arg_rrrr *a, bool m_swap, bool sub)
1414
l2 = tcg_temp_new_i64();
1415
tcg_gen_ext_i32_i64(l1, t1);
1416
tcg_gen_ext_i32_i64(l2, t2);
1417
- tcg_temp_free_i32(t1);
1418
- tcg_temp_free_i32(t2);
1419
1420
if (sub) {
1421
tcg_gen_sub_i64(l1, l1, l2);
1422
} else {
1423
tcg_gen_add_i64(l1, l1, l2);
1424
}
1425
- tcg_temp_free_i64(l2);
1426
1427
gen_addq(s, l1, a->ra, a->rd);
1428
gen_storeq_reg(s, a->ra, a->rd, l1);
1429
- tcg_temp_free_i64(l1);
1430
return true;
1431
}
1432
1433
@@ -XXX,XX +XXX,XX @@ static bool op_smmla(DisasContext *s, arg_rrrr *a, bool round, bool sub)
1434
} else {
1435
tcg_gen_add_i32(t1, t1, t3);
1436
}
1437
- tcg_temp_free_i32(t3);
1438
}
1439
if (round) {
1440
/*
1441
@@ -XXX,XX +XXX,XX @@ static bool op_smmla(DisasContext *s, arg_rrrr *a, bool round, bool sub)
1442
tcg_gen_shri_i32(t2, t2, 31);
1443
tcg_gen_add_i32(t1, t1, t2);
1444
}
1445
- tcg_temp_free_i32(t2);
1446
store_reg(s, a->rd, t1);
1447
return true;
1448
}
1449
@@ -XXX,XX +XXX,XX @@ static bool op_div(DisasContext *s, arg_rrr *a, bool u)
1450
} else {
1451
gen_helper_sdiv(t1, cpu_env, t1, t2);
1452
}
1453
- tcg_temp_free_i32(t2);
1454
store_reg(s, a->rd, t1);
1455
return true;
1456
}
1457
@@ -XXX,XX +XXX,XX @@ static void op_addr_block_post(DisasContext *s, arg_ldst_block *a,
1458
tcg_gen_addi_i32(addr, addr, -((n - 1) * 4));
1459
}
1460
store_reg(s, a->rn, addr);
1461
- } else {
1462
- tcg_temp_free_i32(addr);
1463
}
1464
}
1465
1466
@@ -XXX,XX +XXX,XX @@ static bool op_stm(DisasContext *s, arg_ldst_block *a, int min_n)
1467
tmp = load_reg(s, i);
1468
}
1469
gen_aa32_st_i32(s, tmp, addr, mem_idx, MO_UL | MO_ALIGN);
1470
- tcg_temp_free_i32(tmp);
1471
1472
/* No need to add after the last transfer. */
1473
if (++j != n) {
1474
@@ -XXX,XX +XXX,XX @@ static bool do_ldm(DisasContext *s, arg_ldst_block *a, int min_n)
1475
gen_aa32_ld_i32(s, tmp, addr, mem_idx, MO_UL | MO_ALIGN);
1476
if (user) {
1477
gen_helper_set_user_reg(cpu_env, tcg_constant_i32(i), tmp);
1478
- tcg_temp_free_i32(tmp);
1479
} else if (i == a->rn) {
1480
loaded_var = tmp;
1481
loaded_base = true;
1482
@@ -XXX,XX +XXX,XX @@ static bool do_ldm(DisasContext *s, arg_ldst_block *a, int min_n)
1483
gen_io_start();
1484
}
1485
gen_helper_cpsr_write_eret(cpu_env, tmp);
1486
- tcg_temp_free_i32(tmp);
1487
/* Must exit loop to check un-masked IRQs */
1488
s->base.is_jmp = DISAS_EXIT;
1489
}
1490
@@ -XXX,XX +XXX,XX @@ static bool trans_LE(DisasContext *s, arg_LE *a)
1491
DisasLabel skipexc = gen_disas_label(s);
1492
tmp = load_cpu_field(v7m.ltpsize);
1493
tcg_gen_brcondi_i32(TCG_COND_EQ, tmp, 4, skipexc.label);
1494
- tcg_temp_free_i32(tmp);
1495
gen_exception_insn(s, 0, EXCP_INVSTATE, syn_uncategorized());
1496
set_disas_label(s, skipexc);
1497
}
1498
@@ -XXX,XX +XXX,XX @@ static bool trans_LE(DisasContext *s, arg_LE *a)
1499
TCGv_i32 ltpsize = load_cpu_field(v7m.ltpsize);
1500
tcg_gen_sub_i32(decr, tcg_constant_i32(4), ltpsize);
1501
tcg_gen_shl_i32(decr, tcg_constant_i32(1), decr);
1502
- tcg_temp_free_i32(ltpsize);
1503
1504
tcg_gen_brcond_i32(TCG_COND_LEU, cpu_R[14], decr, loopend.label);
1505
1506
tcg_gen_sub_i32(cpu_R[14], cpu_R[14], decr);
1507
- tcg_temp_free_i32(decr);
1508
}
1509
/* Jump back to the loop start */
1510
gen_jmp(s, jmp_diff(s, -a->imm));
1511
@@ -XXX,XX +XXX,XX @@ static bool trans_VCTP(DisasContext *s, arg_VCTP *a)
1512
masklen, tcg_constant_i32(1 << (4 - a->size)),
1513
rn_shifted, tcg_constant_i32(16));
1514
gen_helper_mve_vctp(cpu_env, masklen);
1515
- tcg_temp_free_i32(masklen);
1516
- tcg_temp_free_i32(rn_shifted);
1517
/* This insn updates predication bits */
1518
s->base.is_jmp = DISAS_UPDATE_NOCHAIN;
1519
mve_update_eci(s);
1520
@@ -XXX,XX +XXX,XX @@ static bool op_tbranch(DisasContext *s, arg_tbranch *a, bool half)
1521
tcg_gen_add_i32(tmp, tmp, tmp);
1522
gen_pc_plus_diff(s, addr, jmp_diff(s, 0));
1523
tcg_gen_add_i32(tmp, tmp, addr);
1524
- tcg_temp_free_i32(addr);
1525
store_reg(s, 15, tmp);
1526
return true;
1527
}
1528
@@ -XXX,XX +XXX,XX @@ static bool trans_CBZ(DisasContext *s, arg_CBZ *a)
1529
arm_gen_condlabel(s);
1530
tcg_gen_brcondi_i32(a->nz ? TCG_COND_EQ : TCG_COND_NE,
1531
tmp, 0, s->condlabel.label);
1532
- tcg_temp_free_i32(tmp);
1533
gen_jmp(s, jmp_diff(s, a->imm));
1534
return true;
1535
}
1536
@@ -XXX,XX +XXX,XX @@ static bool trans_RFE(DisasContext *s, arg_RFE *a)
1537
/* Base writeback. */
1538
tcg_gen_addi_i32(addr, addr, post_offset[a->pu]);
1539
store_reg(s, a->rn, addr);
1540
- } else {
1541
- tcg_temp_free_i32(addr);
1542
}
1543
gen_rfe(s, t1, t2);
1544
return true;
1545
@@ -XXX,XX +XXX,XX @@ static bool trans_CSEL(DisasContext *s, arg_CSEL *a)
1546
tcg_gen_movcond_i32(c.cond, rn, c.value, zero, rn, rm);
1547
1548
store_reg(s, a->rd, rn);
1549
- tcg_temp_free_i32(rm);
1550
-
1551
return true;
1552
}
1553
1554
--
1555
2.34.1
diff view generated by jsdifflib
Deleted patch
1
Translators are no longer required to free tcg temporaries,
2
therefore there's no need to record temps for later freeing.
3
1
4
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
5
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
6
---
7
target/arm/tcg/translate.h | 3 ---
8
target/arm/tcg/translate-a64.c | 25 +------------------------
9
2 files changed, 1 insertion(+), 27 deletions(-)
10
11
diff --git a/target/arm/tcg/translate.h b/target/arm/tcg/translate.h
12
index XXXXXXX..XXXXXXX 100644
13
--- a/target/arm/tcg/translate.h
14
+++ b/target/arm/tcg/translate.h
15
@@ -XXX,XX +XXX,XX @@ typedef struct DisasContext {
16
int c15_cpar;
17
/* TCG op of the current insn_start. */
18
TCGOp *insn_start;
19
-#define TMP_A64_MAX 16
20
- int tmp_a64_count;
21
- TCGv_i64 tmp_a64[TMP_A64_MAX];
22
} DisasContext;
23
24
typedef struct DisasCompare {
25
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
26
index XXXXXXX..XXXXXXX 100644
27
--- a/target/arm/tcg/translate-a64.c
28
+++ b/target/arm/tcg/translate-a64.c
29
@@ -XXX,XX +XXX,XX @@ static void gen_goto_tb(DisasContext *s, int n, int64_t diff)
30
}
31
}
32
33
-static void init_tmp_a64_array(DisasContext *s)
34
-{
35
-#ifdef CONFIG_DEBUG_TCG
36
- memset(s->tmp_a64, 0, sizeof(s->tmp_a64));
37
-#endif
38
- s->tmp_a64_count = 0;
39
-}
40
-
41
-static void free_tmp_a64(DisasContext *s)
42
-{
43
- int i;
44
- for (i = 0; i < s->tmp_a64_count; i++) {
45
- tcg_temp_free_i64(s->tmp_a64[i]);
46
- }
47
- init_tmp_a64_array(s);
48
-}
49
-
50
TCGv_i64 new_tmp_a64(DisasContext *s)
51
{
52
- assert(s->tmp_a64_count < TMP_A64_MAX);
53
- return s->tmp_a64[s->tmp_a64_count++] = tcg_temp_new_i64();
54
+ return tcg_temp_new_i64();
55
}
56
57
TCGv_i64 new_tmp_a64_zero(DisasContext *s)
58
@@ -XXX,XX +XXX,XX @@ static void aarch64_tr_init_disas_context(DisasContextBase *dcbase,
59
bound = 1;
60
}
61
dc->base.max_insns = MIN(dc->base.max_insns, bound);
62
-
63
- init_tmp_a64_array(dc);
64
}
65
66
static void aarch64_tr_tb_start(DisasContextBase *db, CPUState *cpu)
67
@@ -XXX,XX +XXX,XX @@ static void aarch64_tr_translate_insn(DisasContextBase *dcbase, CPUState *cpu)
68
break;
69
}
70
71
- /* if we allocated any temporaries, free them here */
72
- free_tmp_a64(s);
73
-
74
/*
75
* After execution of most insns, btype is reset to 0.
76
* Note that we set btype == -1 when the insn sets btype.
77
--
78
2.34.1
diff view generated by jsdifflib
Deleted patch
1
This is now a simple wrapper for tcg_temp_new_i64.
2
1
3
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
5
---
6
target/arm/tcg/translate-a64.h | 1 -
7
target/arm/tcg/translate-a64.c | 45 +++++++++++++++-------------------
8
target/arm/tcg/translate-sve.c | 20 +++++++--------
9
3 files changed, 30 insertions(+), 36 deletions(-)
10
11
diff --git a/target/arm/tcg/translate-a64.h b/target/arm/tcg/translate-a64.h
12
index XXXXXXX..XXXXXXX 100644
13
--- a/target/arm/tcg/translate-a64.h
14
+++ b/target/arm/tcg/translate-a64.h
15
@@ -XXX,XX +XXX,XX @@
16
#ifndef TARGET_ARM_TRANSLATE_A64_H
17
#define TARGET_ARM_TRANSLATE_A64_H
18
19
-TCGv_i64 new_tmp_a64(DisasContext *s);
20
TCGv_i64 new_tmp_a64_zero(DisasContext *s);
21
TCGv_i64 cpu_reg(DisasContext *s, int reg);
22
TCGv_i64 cpu_reg_sp(DisasContext *s, int reg);
23
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
24
index XXXXXXX..XXXXXXX 100644
25
--- a/target/arm/tcg/translate-a64.c
26
+++ b/target/arm/tcg/translate-a64.c
27
@@ -XXX,XX +XXX,XX @@ static void gen_a64_set_pc(DisasContext *s, TCGv_i64 src)
28
29
TCGv_i64 clean_data_tbi(DisasContext *s, TCGv_i64 addr)
30
{
31
- TCGv_i64 clean = new_tmp_a64(s);
32
+ TCGv_i64 clean = tcg_temp_new_i64();
33
#ifdef CONFIG_USER_ONLY
34
gen_top_byte_ignore(s, clean, addr, s->tbid);
35
#else
36
@@ -XXX,XX +XXX,XX @@ static TCGv_i64 gen_mte_check1_mmuidx(DisasContext *s, TCGv_i64 addr,
37
desc = FIELD_DP32(desc, MTEDESC, WRITE, is_write);
38
desc = FIELD_DP32(desc, MTEDESC, SIZEM1, (1 << log2_size) - 1);
39
40
- ret = new_tmp_a64(s);
41
+ ret = tcg_temp_new_i64();
42
gen_helper_mte_check(ret, cpu_env, tcg_constant_i32(desc), addr);
43
44
return ret;
45
@@ -XXX,XX +XXX,XX @@ TCGv_i64 gen_mte_checkN(DisasContext *s, TCGv_i64 addr, bool is_write,
46
desc = FIELD_DP32(desc, MTEDESC, WRITE, is_write);
47
desc = FIELD_DP32(desc, MTEDESC, SIZEM1, size - 1);
48
49
- ret = new_tmp_a64(s);
50
+ ret = tcg_temp_new_i64();
51
gen_helper_mte_check(ret, cpu_env, tcg_constant_i32(desc), addr);
52
53
return ret;
54
@@ -XXX,XX +XXX,XX @@ static void gen_goto_tb(DisasContext *s, int n, int64_t diff)
55
}
56
}
57
58
-TCGv_i64 new_tmp_a64(DisasContext *s)
59
-{
60
- return tcg_temp_new_i64();
61
-}
62
-
63
TCGv_i64 new_tmp_a64_zero(DisasContext *s)
64
{
65
- TCGv_i64 t = new_tmp_a64(s);
66
+ TCGv_i64 t = tcg_temp_new_i64();
67
tcg_gen_movi_i64(t, 0);
68
return t;
69
}
70
@@ -XXX,XX +XXX,XX @@ TCGv_i64 cpu_reg_sp(DisasContext *s, int reg)
71
*/
72
TCGv_i64 read_cpu_reg(DisasContext *s, int reg, int sf)
73
{
74
- TCGv_i64 v = new_tmp_a64(s);
75
+ TCGv_i64 v = tcg_temp_new_i64();
76
if (reg != 31) {
77
if (sf) {
78
tcg_gen_mov_i64(v, cpu_X[reg]);
79
@@ -XXX,XX +XXX,XX @@ TCGv_i64 read_cpu_reg(DisasContext *s, int reg, int sf)
80
81
TCGv_i64 read_cpu_reg_sp(DisasContext *s, int reg, int sf)
82
{
83
- TCGv_i64 v = new_tmp_a64(s);
84
+ TCGv_i64 v = tcg_temp_new_i64();
85
if (sf) {
86
tcg_gen_mov_i64(v, cpu_X[reg]);
87
} else {
88
@@ -XXX,XX +XXX,XX @@ static void handle_sys(DisasContext *s, uint32_t insn, bool isread,
89
desc = FIELD_DP32(desc, MTEDESC, TBI, s->tbid);
90
desc = FIELD_DP32(desc, MTEDESC, TCMA, s->tcma);
91
92
- tcg_rt = new_tmp_a64(s);
93
+ tcg_rt = tcg_temp_new_i64();
94
gen_helper_mte_check_zva(tcg_rt, cpu_env,
95
tcg_constant_i32(desc), cpu_reg(s, rt));
96
} else {
97
@@ -XXX,XX +XXX,XX @@ static void disas_uncond_b_reg(DisasContext *s, uint32_t insn)
98
modifier = new_tmp_a64_zero(s);
99
}
100
if (s->pauth_active) {
101
- dst = new_tmp_a64(s);
102
+ dst = tcg_temp_new_i64();
103
if (op3 == 2) {
104
gen_helper_autia(dst, cpu_env, cpu_reg(s, rn), modifier);
105
} else {
106
@@ -XXX,XX +XXX,XX @@ static void disas_uncond_b_reg(DisasContext *s, uint32_t insn)
107
if (opc == 1) {
108
TCGv_i64 lr = cpu_reg(s, 30);
109
if (dst == lr) {
110
- TCGv_i64 tmp = new_tmp_a64(s);
111
+ TCGv_i64 tmp = tcg_temp_new_i64();
112
tcg_gen_mov_i64(tmp, dst);
113
dst = tmp;
114
}
115
@@ -XXX,XX +XXX,XX @@ static void disas_uncond_b_reg(DisasContext *s, uint32_t insn)
116
}
117
btype_mod = opc & 1;
118
if (s->pauth_active) {
119
- dst = new_tmp_a64(s);
120
+ dst = tcg_temp_new_i64();
121
modifier = cpu_reg_sp(s, op4);
122
if (op3 == 2) {
123
gen_helper_autia(dst, cpu_env, cpu_reg(s, rn), modifier);
124
@@ -XXX,XX +XXX,XX @@ static void disas_uncond_b_reg(DisasContext *s, uint32_t insn)
125
if (opc == 9) {
126
TCGv_i64 lr = cpu_reg(s, 30);
127
if (dst == lr) {
128
- TCGv_i64 tmp = new_tmp_a64(s);
129
+ TCGv_i64 tmp = tcg_temp_new_i64();
130
tcg_gen_mov_i64(tmp, dst);
131
dst = tmp;
132
}
133
@@ -XXX,XX +XXX,XX @@ static void disas_ld_lit(DisasContext *s, uint32_t insn)
134
135
tcg_rt = cpu_reg(s, rt);
136
137
- clean_addr = new_tmp_a64(s);
138
+ clean_addr = tcg_temp_new_i64();
139
gen_pc_plus_diff(s, clean_addr, imm);
140
if (is_vector) {
141
do_fp_ld(s, rt, clean_addr, size);
142
@@ -XXX,XX +XXX,XX @@ static void disas_adc_sbc(DisasContext *s, uint32_t insn)
143
tcg_rn = cpu_reg(s, rn);
144
145
if (op) {
146
- tcg_y = new_tmp_a64(s);
147
+ tcg_y = tcg_temp_new_i64();
148
tcg_gen_not_i64(tcg_y, cpu_reg(s, rm));
149
} else {
150
tcg_y = cpu_reg(s, rm);
151
@@ -XXX,XX +XXX,XX @@ static void disas_cc(DisasContext *s, uint32_t insn)
152
153
/* Load the arguments for the new comparison. */
154
if (is_imm) {
155
- tcg_y = new_tmp_a64(s);
156
+ tcg_y = tcg_temp_new_i64();
157
tcg_gen_movi_i64(tcg_y, y);
158
} else {
159
tcg_y = cpu_reg(s, y);
160
@@ -XXX,XX +XXX,XX @@ static void handle_div(DisasContext *s, bool is_signed, unsigned int sf,
161
tcg_rd = cpu_reg(s, rd);
162
163
if (!sf && is_signed) {
164
- tcg_n = new_tmp_a64(s);
165
- tcg_m = new_tmp_a64(s);
166
+ tcg_n = tcg_temp_new_i64();
167
+ tcg_m = tcg_temp_new_i64();
168
tcg_gen_ext32s_i64(tcg_n, cpu_reg(s, rn));
169
tcg_gen_ext32s_i64(tcg_m, cpu_reg(s, rm));
170
} else {
171
@@ -XXX,XX +XXX,XX @@ static void handle_crc32(DisasContext *s,
172
default:
173
g_assert_not_reached();
174
}
175
- tcg_val = new_tmp_a64(s);
176
+ tcg_val = tcg_temp_new_i64();
177
tcg_gen_andi_i64(tcg_val, cpu_reg(s, rm), mask);
178
}
179
180
@@ -XXX,XX +XXX,XX @@ static void handle_fpfpcvt(DisasContext *s, int rd, int rn, int opcode,
181
if (itof) {
182
TCGv_i64 tcg_int = cpu_reg(s, rn);
183
if (!sf) {
184
- TCGv_i64 tcg_extend = new_tmp_a64(s);
185
+ TCGv_i64 tcg_extend = tcg_temp_new_i64();
186
187
if (is_signed) {
188
tcg_gen_ext32s_i64(tcg_extend, tcg_int);
189
@@ -XXX,XX +XXX,XX @@ static void handle_vec_simd_wshli(DisasContext *s, bool is_q, bool is_u,
190
int dsize = 64;
191
int esize = 8 << size;
192
int elements = dsize/esize;
193
- TCGv_i64 tcg_rn = new_tmp_a64(s);
194
- TCGv_i64 tcg_rd = new_tmp_a64(s);
195
+ TCGv_i64 tcg_rn = tcg_temp_new_i64();
196
+ TCGv_i64 tcg_rd = tcg_temp_new_i64();
197
int i;
198
199
if (size >= 3) {
200
diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c
201
index XXXXXXX..XXXXXXX 100644
202
--- a/target/arm/tcg/translate-sve.c
203
+++ b/target/arm/tcg/translate-sve.c
204
@@ -XXX,XX +XXX,XX @@ static bool trans_LD_zprr(DisasContext *s, arg_rprr_load *a)
205
return false;
206
}
207
if (sve_access_check(s)) {
208
- TCGv_i64 addr = new_tmp_a64(s);
209
+ TCGv_i64 addr = tcg_temp_new_i64();
210
tcg_gen_shli_i64(addr, cpu_reg(s, a->rm), dtype_msz(a->dtype));
211
tcg_gen_add_i64(addr, addr, cpu_reg_sp(s, a->rn));
212
do_ld_zpa(s, a->rd, a->pg, addr, a->dtype, a->nreg);
213
@@ -XXX,XX +XXX,XX @@ static bool trans_LD_zpri(DisasContext *s, arg_rpri_load *a)
214
if (sve_access_check(s)) {
215
int vsz = vec_full_reg_size(s);
216
int elements = vsz >> dtype_esz[a->dtype];
217
- TCGv_i64 addr = new_tmp_a64(s);
218
+ TCGv_i64 addr = tcg_temp_new_i64();
219
220
tcg_gen_addi_i64(addr, cpu_reg_sp(s, a->rn),
221
(a->imm * elements * (a->nreg + 1))
222
@@ -XXX,XX +XXX,XX @@ static bool trans_LDFF1_zprr(DisasContext *s, arg_rprr_load *a)
223
}
224
s->is_nonstreaming = true;
225
if (sve_access_check(s)) {
226
- TCGv_i64 addr = new_tmp_a64(s);
227
+ TCGv_i64 addr = tcg_temp_new_i64();
228
tcg_gen_shli_i64(addr, cpu_reg(s, a->rm), dtype_msz(a->dtype));
229
tcg_gen_add_i64(addr, addr, cpu_reg_sp(s, a->rn));
230
do_mem_zpa(s, a->rd, a->pg, addr, a->dtype, 1, false,
231
@@ -XXX,XX +XXX,XX @@ static bool trans_LDNF1_zpri(DisasContext *s, arg_rpri_load *a)
232
int vsz = vec_full_reg_size(s);
233
int elements = vsz >> dtype_esz[a->dtype];
234
int off = (a->imm * elements) << dtype_msz(a->dtype);
235
- TCGv_i64 addr = new_tmp_a64(s);
236
+ TCGv_i64 addr = tcg_temp_new_i64();
237
238
tcg_gen_addi_i64(addr, cpu_reg_sp(s, a->rn), off);
239
do_mem_zpa(s, a->rd, a->pg, addr, a->dtype, 1, false,
240
@@ -XXX,XX +XXX,XX @@ static bool trans_LD1RQ_zprr(DisasContext *s, arg_rprr_load *a)
241
}
242
if (sve_access_check(s)) {
243
int msz = dtype_msz(a->dtype);
244
- TCGv_i64 addr = new_tmp_a64(s);
245
+ TCGv_i64 addr = tcg_temp_new_i64();
246
tcg_gen_shli_i64(addr, cpu_reg(s, a->rm), msz);
247
tcg_gen_add_i64(addr, addr, cpu_reg_sp(s, a->rn));
248
do_ldrq(s, a->rd, a->pg, addr, a->dtype);
249
@@ -XXX,XX +XXX,XX @@ static bool trans_LD1RQ_zpri(DisasContext *s, arg_rpri_load *a)
250
return false;
251
}
252
if (sve_access_check(s)) {
253
- TCGv_i64 addr = new_tmp_a64(s);
254
+ TCGv_i64 addr = tcg_temp_new_i64();
255
tcg_gen_addi_i64(addr, cpu_reg_sp(s, a->rn), a->imm * 16);
256
do_ldrq(s, a->rd, a->pg, addr, a->dtype);
257
}
258
@@ -XXX,XX +XXX,XX @@ static bool trans_LD1RO_zprr(DisasContext *s, arg_rprr_load *a)
259
}
260
s->is_nonstreaming = true;
261
if (sve_access_check(s)) {
262
- TCGv_i64 addr = new_tmp_a64(s);
263
+ TCGv_i64 addr = tcg_temp_new_i64();
264
tcg_gen_shli_i64(addr, cpu_reg(s, a->rm), dtype_msz(a->dtype));
265
tcg_gen_add_i64(addr, addr, cpu_reg_sp(s, a->rn));
266
do_ldro(s, a->rd, a->pg, addr, a->dtype);
267
@@ -XXX,XX +XXX,XX @@ static bool trans_LD1RO_zpri(DisasContext *s, arg_rpri_load *a)
268
}
269
s->is_nonstreaming = true;
270
if (sve_access_check(s)) {
271
- TCGv_i64 addr = new_tmp_a64(s);
272
+ TCGv_i64 addr = tcg_temp_new_i64();
273
tcg_gen_addi_i64(addr, cpu_reg_sp(s, a->rn), a->imm * 32);
274
do_ldro(s, a->rd, a->pg, addr, a->dtype);
275
}
276
@@ -XXX,XX +XXX,XX @@ static bool trans_ST_zprr(DisasContext *s, arg_rprr_store *a)
277
return false;
278
}
279
if (sve_access_check(s)) {
280
- TCGv_i64 addr = new_tmp_a64(s);
281
+ TCGv_i64 addr = tcg_temp_new_i64();
282
tcg_gen_shli_i64(addr, cpu_reg(s, a->rm), a->msz);
283
tcg_gen_add_i64(addr, addr, cpu_reg_sp(s, a->rn));
284
do_st_zpa(s, a->rd, a->pg, addr, a->msz, a->esz, a->nreg);
285
@@ -XXX,XX +XXX,XX @@ static bool trans_ST_zpri(DisasContext *s, arg_rpri_store *a)
286
if (sve_access_check(s)) {
287
int vsz = vec_full_reg_size(s);
288
int elements = vsz >> a->esz;
289
- TCGv_i64 addr = new_tmp_a64(s);
290
+ TCGv_i64 addr = tcg_temp_new_i64();
291
292
tcg_gen_addi_i64(addr, cpu_reg_sp(s, a->rn),
293
(a->imm * elements * (a->nreg + 1)) << a->msz);
294
--
295
2.34.1
diff view generated by jsdifflib
Deleted patch
1
Only the use within cpu_reg requires a writable temp,
2
so inline new_tmp_a64_zero there. All other uses are
3
fine with a constant temp, so use tcg_constant_i64(0).
4
1
5
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
6
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
7
---
8
target/arm/tcg/translate-a64.h | 1 -
9
target/arm/tcg/translate-a64.c | 41 +++++++++++++++-------------------
10
2 files changed, 18 insertions(+), 24 deletions(-)
11
12
diff --git a/target/arm/tcg/translate-a64.h b/target/arm/tcg/translate-a64.h
13
index XXXXXXX..XXXXXXX 100644
14
--- a/target/arm/tcg/translate-a64.h
15
+++ b/target/arm/tcg/translate-a64.h
16
@@ -XXX,XX +XXX,XX @@
17
#ifndef TARGET_ARM_TRANSLATE_A64_H
18
#define TARGET_ARM_TRANSLATE_A64_H
19
20
-TCGv_i64 new_tmp_a64_zero(DisasContext *s);
21
TCGv_i64 cpu_reg(DisasContext *s, int reg);
22
TCGv_i64 cpu_reg_sp(DisasContext *s, int reg);
23
TCGv_i64 read_cpu_reg(DisasContext *s, int reg, int sf);
24
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
25
index XXXXXXX..XXXXXXX 100644
26
--- a/target/arm/tcg/translate-a64.c
27
+++ b/target/arm/tcg/translate-a64.c
28
@@ -XXX,XX +XXX,XX @@ static void gen_goto_tb(DisasContext *s, int n, int64_t diff)
29
}
30
}
31
32
-TCGv_i64 new_tmp_a64_zero(DisasContext *s)
33
-{
34
- TCGv_i64 t = tcg_temp_new_i64();
35
- tcg_gen_movi_i64(t, 0);
36
- return t;
37
-}
38
-
39
/*
40
* Register access functions
41
*
42
@@ -XXX,XX +XXX,XX @@ TCGv_i64 new_tmp_a64_zero(DisasContext *s)
43
TCGv_i64 cpu_reg(DisasContext *s, int reg)
44
{
45
if (reg == 31) {
46
- return new_tmp_a64_zero(s);
47
+ TCGv_i64 t = tcg_temp_new_i64();
48
+ tcg_gen_movi_i64(t, 0);
49
+ return t;
50
} else {
51
return cpu_X[reg];
52
}
53
@@ -XXX,XX +XXX,XX @@ static void handle_hint(DisasContext *s, uint32_t insn,
54
case 0b11000: /* PACIAZ */
55
if (s->pauth_active) {
56
gen_helper_pacia(cpu_X[30], cpu_env, cpu_X[30],
57
- new_tmp_a64_zero(s));
58
+ tcg_constant_i64(0));
59
}
60
break;
61
case 0b11001: /* PACIASP */
62
@@ -XXX,XX +XXX,XX @@ static void handle_hint(DisasContext *s, uint32_t insn,
63
case 0b11010: /* PACIBZ */
64
if (s->pauth_active) {
65
gen_helper_pacib(cpu_X[30], cpu_env, cpu_X[30],
66
- new_tmp_a64_zero(s));
67
+ tcg_constant_i64(0));
68
}
69
break;
70
case 0b11011: /* PACIBSP */
71
@@ -XXX,XX +XXX,XX @@ static void handle_hint(DisasContext *s, uint32_t insn,
72
case 0b11100: /* AUTIAZ */
73
if (s->pauth_active) {
74
gen_helper_autia(cpu_X[30], cpu_env, cpu_X[30],
75
- new_tmp_a64_zero(s));
76
+ tcg_constant_i64(0));
77
}
78
break;
79
case 0b11101: /* AUTIASP */
80
@@ -XXX,XX +XXX,XX @@ static void handle_hint(DisasContext *s, uint32_t insn,
81
case 0b11110: /* AUTIBZ */
82
if (s->pauth_active) {
83
gen_helper_autib(cpu_X[30], cpu_env, cpu_X[30],
84
- new_tmp_a64_zero(s));
85
+ tcg_constant_i64(0));
86
}
87
break;
88
case 0b11111: /* AUTIBSP */
89
@@ -XXX,XX +XXX,XX @@ static void disas_uncond_b_reg(DisasContext *s, uint32_t insn)
90
if (op4 != 0x1f) {
91
goto do_unallocated;
92
}
93
- modifier = new_tmp_a64_zero(s);
94
+ modifier = tcg_constant_i64(0);
95
}
96
if (s->pauth_active) {
97
dst = tcg_temp_new_i64();
98
@@ -XXX,XX +XXX,XX @@ static void disas_ldst_pac(DisasContext *s, uint32_t insn,
99
if (s->pauth_active) {
100
if (use_key_a) {
101
gen_helper_autda(dirty_addr, cpu_env, dirty_addr,
102
- new_tmp_a64_zero(s));
103
+ tcg_constant_i64(0));
104
} else {
105
gen_helper_autdb(dirty_addr, cpu_env, dirty_addr,
106
- new_tmp_a64_zero(s));
107
+ tcg_constant_i64(0));
108
}
109
}
110
111
@@ -XXX,XX +XXX,XX @@ static void disas_data_proc_1src(DisasContext *s, uint32_t insn)
112
goto do_unallocated;
113
} else if (s->pauth_active) {
114
tcg_rd = cpu_reg(s, rd);
115
- gen_helper_pacia(tcg_rd, cpu_env, tcg_rd, new_tmp_a64_zero(s));
116
+ gen_helper_pacia(tcg_rd, cpu_env, tcg_rd, tcg_constant_i64(0));
117
}
118
break;
119
case MAP(1, 0x01, 0x09): /* PACIZB */
120
@@ -XXX,XX +XXX,XX @@ static void disas_data_proc_1src(DisasContext *s, uint32_t insn)
121
goto do_unallocated;
122
} else if (s->pauth_active) {
123
tcg_rd = cpu_reg(s, rd);
124
- gen_helper_pacib(tcg_rd, cpu_env, tcg_rd, new_tmp_a64_zero(s));
125
+ gen_helper_pacib(tcg_rd, cpu_env, tcg_rd, tcg_constant_i64(0));
126
}
127
break;
128
case MAP(1, 0x01, 0x0a): /* PACDZA */
129
@@ -XXX,XX +XXX,XX @@ static void disas_data_proc_1src(DisasContext *s, uint32_t insn)
130
goto do_unallocated;
131
} else if (s->pauth_active) {
132
tcg_rd = cpu_reg(s, rd);
133
- gen_helper_pacda(tcg_rd, cpu_env, tcg_rd, new_tmp_a64_zero(s));
134
+ gen_helper_pacda(tcg_rd, cpu_env, tcg_rd, tcg_constant_i64(0));
135
}
136
break;
137
case MAP(1, 0x01, 0x0b): /* PACDZB */
138
@@ -XXX,XX +XXX,XX @@ static void disas_data_proc_1src(DisasContext *s, uint32_t insn)
139
goto do_unallocated;
140
} else if (s->pauth_active) {
141
tcg_rd = cpu_reg(s, rd);
142
- gen_helper_pacdb(tcg_rd, cpu_env, tcg_rd, new_tmp_a64_zero(s));
143
+ gen_helper_pacdb(tcg_rd, cpu_env, tcg_rd, tcg_constant_i64(0));
144
}
145
break;
146
case MAP(1, 0x01, 0x0c): /* AUTIZA */
147
@@ -XXX,XX +XXX,XX @@ static void disas_data_proc_1src(DisasContext *s, uint32_t insn)
148
goto do_unallocated;
149
} else if (s->pauth_active) {
150
tcg_rd = cpu_reg(s, rd);
151
- gen_helper_autia(tcg_rd, cpu_env, tcg_rd, new_tmp_a64_zero(s));
152
+ gen_helper_autia(tcg_rd, cpu_env, tcg_rd, tcg_constant_i64(0));
153
}
154
break;
155
case MAP(1, 0x01, 0x0d): /* AUTIZB */
156
@@ -XXX,XX +XXX,XX @@ static void disas_data_proc_1src(DisasContext *s, uint32_t insn)
157
goto do_unallocated;
158
} else if (s->pauth_active) {
159
tcg_rd = cpu_reg(s, rd);
160
- gen_helper_autib(tcg_rd, cpu_env, tcg_rd, new_tmp_a64_zero(s));
161
+ gen_helper_autib(tcg_rd, cpu_env, tcg_rd, tcg_constant_i64(0));
162
}
163
break;
164
case MAP(1, 0x01, 0x0e): /* AUTDZA */
165
@@ -XXX,XX +XXX,XX @@ static void disas_data_proc_1src(DisasContext *s, uint32_t insn)
166
goto do_unallocated;
167
} else if (s->pauth_active) {
168
tcg_rd = cpu_reg(s, rd);
169
- gen_helper_autda(tcg_rd, cpu_env, tcg_rd, new_tmp_a64_zero(s));
170
+ gen_helper_autda(tcg_rd, cpu_env, tcg_rd, tcg_constant_i64(0));
171
}
172
break;
173
case MAP(1, 0x01, 0x0f): /* AUTDZB */
174
@@ -XXX,XX +XXX,XX @@ static void disas_data_proc_1src(DisasContext *s, uint32_t insn)
175
goto do_unallocated;
176
} else if (s->pauth_active) {
177
tcg_rd = cpu_reg(s, rd);
178
- gen_helper_autdb(tcg_rd, cpu_env, tcg_rd, new_tmp_a64_zero(s));
179
+ gen_helper_autdb(tcg_rd, cpu_env, tcg_rd, tcg_constant_i64(0));
180
}
181
break;
182
case MAP(1, 0x01, 0x10): /* XPACI */
183
--
184
2.34.1
diff view generated by jsdifflib
Deleted patch
1
Translators are no longer required to free tcg temporaries.
2
1
3
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
5
---
6
target/arm/tcg/translate-m-nocp.c | 20 --------------------
7
1 file changed, 20 deletions(-)
8
9
diff --git a/target/arm/tcg/translate-m-nocp.c b/target/arm/tcg/translate-m-nocp.c
10
index XXXXXXX..XXXXXXX 100644
11
--- a/target/arm/tcg/translate-m-nocp.c
12
+++ b/target/arm/tcg/translate-m-nocp.c
13
@@ -XXX,XX +XXX,XX @@ static bool trans_VLLDM_VLSTM(DisasContext *s, arg_VLLDM_VLSTM *a)
14
} else {
15
gen_helper_v7m_vlstm(cpu_env, fptr);
16
}
17
- tcg_temp_free_i32(fptr);
18
19
clear_eci_state(s);
20
21
@@ -XXX,XX +XXX,XX @@ static void gen_branch_fpInactive(DisasContext *s, TCGCond cond,
22
tcg_gen_andi_i32(fpca, fpca, R_V7M_CONTROL_FPCA_MASK);
23
tcg_gen_or_i32(fpca, fpca, aspen);
24
tcg_gen_brcondi_i32(tcg_invert_cond(cond), fpca, 0, label);
25
- tcg_temp_free_i32(aspen);
26
- tcg_temp_free_i32(fpca);
27
}
28
29
static bool gen_M_fp_sysreg_write(DisasContext *s, int regno,
30
@@ -XXX,XX +XXX,XX @@ static bool gen_M_fp_sysreg_write(DisasContext *s, int regno,
31
case ARM_VFP_FPSCR:
32
tmp = loadfn(s, opaque, true);
33
gen_helper_vfp_set_fpscr(cpu_env, tmp);
34
- tcg_temp_free_i32(tmp);
35
gen_lookup_tb(s);
36
break;
37
case ARM_VFP_FPSCR_NZCVQC:
38
@@ -XXX,XX +XXX,XX @@ static bool gen_M_fp_sysreg_write(DisasContext *s, int regno,
39
tcg_gen_andi_i32(fpscr, fpscr, ~FPCR_NZCV_MASK);
40
tcg_gen_or_i32(fpscr, fpscr, tmp);
41
store_cpu_field(fpscr, vfp.xregs[ARM_VFP_FPSCR]);
42
- tcg_temp_free_i32(tmp);
43
break;
44
}
45
case ARM_VFP_FPCXT_NS:
46
@@ -XXX,XX +XXX,XX @@ static bool gen_M_fp_sysreg_write(DisasContext *s, int regno,
47
tcg_gen_andi_i32(tmp, tmp, ~FPCR_NZCV_MASK);
48
gen_helper_vfp_set_fpscr(cpu_env, tmp);
49
s->base.is_jmp = DISAS_UPDATE_NOCHAIN;
50
- tcg_temp_free_i32(tmp);
51
- tcg_temp_free_i32(sfpa);
52
break;
53
}
54
case ARM_VFP_VPR:
55
@@ -XXX,XX +XXX,XX @@ static bool gen_M_fp_sysreg_write(DisasContext *s, int regno,
56
R_V7M_VPR_P0_SHIFT, R_V7M_VPR_P0_LENGTH);
57
store_cpu_field(vpr, v7m.vpr);
58
s->base.is_jmp = DISAS_UPDATE_NOCHAIN;
59
- tcg_temp_free_i32(tmp);
60
break;
61
}
62
default:
63
@@ -XXX,XX +XXX,XX @@ static bool gen_M_fp_sysreg_read(DisasContext *s, int regno,
64
tcg_gen_andi_i32(sfpa, control, R_V7M_CONTROL_SFPA_MASK);
65
tcg_gen_shli_i32(sfpa, sfpa, 31 - R_V7M_CONTROL_SFPA_SHIFT);
66
tcg_gen_or_i32(tmp, tmp, sfpa);
67
- tcg_temp_free_i32(sfpa);
68
/*
69
* Store result before updating FPSCR etc, in case
70
* it is a memory write which causes an exception.
71
@@ -XXX,XX +XXX,XX @@ static bool gen_M_fp_sysreg_read(DisasContext *s, int regno,
72
store_cpu_field(control, v7m.control[M_REG_S]);
73
fpscr = load_cpu_field(v7m.fpdscr[M_REG_NS]);
74
gen_helper_vfp_set_fpscr(cpu_env, fpscr);
75
- tcg_temp_free_i32(fpscr);
76
lookup_tb = true;
77
break;
78
}
79
@@ -XXX,XX +XXX,XX @@ static bool gen_M_fp_sysreg_read(DisasContext *s, int regno,
80
tcg_gen_andi_i32(sfpa, control, R_V7M_CONTROL_SFPA_MASK);
81
tcg_gen_shli_i32(sfpa, sfpa, 31 - R_V7M_CONTROL_SFPA_SHIFT);
82
tcg_gen_or_i32(tmp, tmp, sfpa);
83
- tcg_temp_free_i32(control);
84
/* Store result before updating FPSCR, in case it faults */
85
storefn(s, opaque, tmp, true);
86
/* If SFPA is zero then set FPSCR from FPDSCR_NS */
87
@@ -XXX,XX +XXX,XX @@ static bool gen_M_fp_sysreg_read(DisasContext *s, int regno,
88
tcg_gen_movcond_i32(TCG_COND_EQ, fpscr, sfpa, tcg_constant_i32(0),
89
fpdscr, fpscr);
90
gen_helper_vfp_set_fpscr(cpu_env, fpscr);
91
- tcg_temp_free_i32(sfpa);
92
- tcg_temp_free_i32(fpdscr);
93
- tcg_temp_free_i32(fpscr);
94
break;
95
}
96
case ARM_VFP_VPR:
97
@@ -XXX,XX +XXX,XX @@ static void fp_sysreg_to_gpr(DisasContext *s, void *opaque, TCGv_i32 value,
98
if (a->rt == 15) {
99
/* Set the 4 flag bits in the CPSR */
100
gen_set_nzcv(value);
101
- tcg_temp_free_i32(value);
102
} else {
103
store_reg(s, a->rt, value);
104
}
105
@@ -XXX,XX +XXX,XX @@ static void fp_sysreg_to_memory(DisasContext *s, void *opaque, TCGv_i32 value,
106
if (do_access) {
107
gen_aa32_st_i32(s, value, addr, get_mem_index(s),
108
MO_UL | MO_ALIGN | s->be_data);
109
- tcg_temp_free_i32(value);
110
}
111
112
if (a->w) {
113
@@ -XXX,XX +XXX,XX @@ static void fp_sysreg_to_memory(DisasContext *s, void *opaque, TCGv_i32 value,
114
tcg_gen_addi_i32(addr, addr, offset);
115
}
116
store_reg(s, a->rn, addr);
117
- } else {
118
- tcg_temp_free_i32(addr);
119
}
120
}
121
122
@@ -XXX,XX +XXX,XX @@ static TCGv_i32 memory_to_fp_sysreg(DisasContext *s, void *opaque,
123
tcg_gen_addi_i32(addr, addr, offset);
124
}
125
store_reg(s, a->rn, addr);
126
- } else {
127
- tcg_temp_free_i32(addr);
128
}
129
return value;
130
}
131
--
132
2.34.1
diff view generated by jsdifflib
Deleted patch
1
Translators are no longer required to free tcg temporaries.
2
1
3
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
5
---
6
target/arm/tcg/translate-mve.c | 52 ----------------------------------
7
1 file changed, 52 deletions(-)
8
9
diff --git a/target/arm/tcg/translate-mve.c b/target/arm/tcg/translate-mve.c
10
index XXXXXXX..XXXXXXX 100644
11
--- a/target/arm/tcg/translate-mve.c
12
+++ b/target/arm/tcg/translate-mve.c
13
@@ -XXX,XX +XXX,XX @@ static bool do_ldst(DisasContext *s, arg_VLDR_VSTR *a, MVEGenLdStFn *fn,
14
15
qreg = mve_qreg_ptr(a->qd);
16
fn(cpu_env, qreg, addr);
17
- tcg_temp_free_ptr(qreg);
18
19
/*
20
* Writeback always happens after the last beat of the insn,
21
@@ -XXX,XX +XXX,XX @@ static bool do_ldst(DisasContext *s, arg_VLDR_VSTR *a, MVEGenLdStFn *fn,
22
tcg_gen_addi_i32(addr, addr, offset);
23
}
24
store_reg(s, a->rn, addr);
25
- } else {
26
- tcg_temp_free_i32(addr);
27
}
28
mve_update_eci(s);
29
return true;
30
@@ -XXX,XX +XXX,XX @@ static bool do_ldst_sg(DisasContext *s, arg_vldst_sg *a, MVEGenLdStSGFn fn)
31
qd = mve_qreg_ptr(a->qd);
32
qm = mve_qreg_ptr(a->qm);
33
fn(cpu_env, qd, qm, addr);
34
- tcg_temp_free_ptr(qd);
35
- tcg_temp_free_ptr(qm);
36
- tcg_temp_free_i32(addr);
37
mve_update_eci(s);
38
return true;
39
}
40
@@ -XXX,XX +XXX,XX @@ static bool do_ldst_sg_imm(DisasContext *s, arg_vldst_sg_imm *a,
41
qd = mve_qreg_ptr(a->qd);
42
qm = mve_qreg_ptr(a->qm);
43
fn(cpu_env, qd, qm, tcg_constant_i32(offset));
44
- tcg_temp_free_ptr(qd);
45
- tcg_temp_free_ptr(qm);
46
mve_update_eci(s);
47
return true;
48
}
49
@@ -XXX,XX +XXX,XX @@ static bool do_vldst_il(DisasContext *s, arg_vldst_il *a, MVEGenLdStIlFn *fn,
50
if (a->w) {
51
tcg_gen_addi_i32(rn, rn, addrinc);
52
store_reg(s, a->rn, rn);
53
- } else {
54
- tcg_temp_free_i32(rn);
55
}
56
mve_update_and_store_eci(s);
57
return true;
58
@@ -XXX,XX +XXX,XX @@ static bool trans_VDUP(DisasContext *s, arg_VDUP *a)
59
qd = mve_qreg_ptr(a->qd);
60
tcg_gen_dup_i32(a->size, rt, rt);
61
gen_helper_mve_vdup(cpu_env, qd, rt);
62
- tcg_temp_free_ptr(qd);
63
}
64
- tcg_temp_free_i32(rt);
65
mve_update_eci(s);
66
return true;
67
}
68
@@ -XXX,XX +XXX,XX @@ static bool do_1op_vec(DisasContext *s, arg_1op *a, MVEGenOneOpFn fn,
69
qd = mve_qreg_ptr(a->qd);
70
qm = mve_qreg_ptr(a->qm);
71
fn(cpu_env, qd, qm);
72
- tcg_temp_free_ptr(qd);
73
- tcg_temp_free_ptr(qm);
74
}
75
mve_update_eci(s);
76
return true;
77
@@ -XXX,XX +XXX,XX @@ static bool do_vcvt_rmode(DisasContext *s, arg_1op *a,
78
qd = mve_qreg_ptr(a->qd);
79
qm = mve_qreg_ptr(a->qm);
80
fn(cpu_env, qd, qm, tcg_constant_i32(arm_rmode_to_sf(rmode)));
81
- tcg_temp_free_ptr(qd);
82
- tcg_temp_free_ptr(qm);
83
mve_update_eci(s);
84
return true;
85
}
86
@@ -XXX,XX +XXX,XX @@ static bool do_2op_vec(DisasContext *s, arg_2op *a, MVEGenTwoOpFn fn,
87
qn = mve_qreg_ptr(a->qn);
88
qm = mve_qreg_ptr(a->qm);
89
fn(cpu_env, qd, qn, qm);
90
- tcg_temp_free_ptr(qd);
91
- tcg_temp_free_ptr(qn);
92
- tcg_temp_free_ptr(qm);
93
}
94
mve_update_eci(s);
95
return true;
96
@@ -XXX,XX +XXX,XX @@ static bool do_2op_scalar(DisasContext *s, arg_2scalar *a,
97
qn = mve_qreg_ptr(a->qn);
98
rm = load_reg(s, a->rm);
99
fn(cpu_env, qd, qn, rm);
100
- tcg_temp_free_i32(rm);
101
- tcg_temp_free_ptr(qd);
102
- tcg_temp_free_ptr(qn);
103
mve_update_eci(s);
104
return true;
105
}
106
@@ -XXX,XX +XXX,XX @@ static bool do_long_dual_acc(DisasContext *s, arg_vmlaldav *a,
107
rdalo = load_reg(s, a->rdalo);
108
rdahi = load_reg(s, a->rdahi);
109
tcg_gen_concat_i32_i64(rda, rdalo, rdahi);
110
- tcg_temp_free_i32(rdalo);
111
- tcg_temp_free_i32(rdahi);
112
} else {
113
rda = tcg_const_i64(0);
114
}
115
116
fn(rda, cpu_env, qn, qm, rda);
117
- tcg_temp_free_ptr(qn);
118
- tcg_temp_free_ptr(qm);
119
120
rdalo = tcg_temp_new_i32();
121
rdahi = tcg_temp_new_i32();
122
@@ -XXX,XX +XXX,XX @@ static bool do_long_dual_acc(DisasContext *s, arg_vmlaldav *a,
123
tcg_gen_extrh_i64_i32(rdahi, rda);
124
store_reg(s, a->rdalo, rdalo);
125
store_reg(s, a->rdahi, rdahi);
126
- tcg_temp_free_i64(rda);
127
mve_update_eci(s);
128
return true;
129
}
130
@@ -XXX,XX +XXX,XX @@ static bool do_dual_acc(DisasContext *s, arg_vmladav *a, MVEGenDualAccOpFn *fn)
131
132
fn(rda, cpu_env, qn, qm, rda);
133
store_reg(s, a->rda, rda);
134
- tcg_temp_free_ptr(qn);
135
- tcg_temp_free_ptr(qm);
136
137
mve_update_eci(s);
138
return true;
139
@@ -XXX,XX +XXX,XX @@ static bool trans_VADDV(DisasContext *s, arg_VADDV *a)
140
qm = mve_qreg_ptr(a->qm);
141
fns[a->size][a->u](rda, cpu_env, qm, rda);
142
store_reg(s, a->rda, rda);
143
- tcg_temp_free_ptr(qm);
144
145
mve_update_eci(s);
146
return true;
147
@@ -XXX,XX +XXX,XX @@ static bool trans_VADDLV(DisasContext *s, arg_VADDLV *a)
148
rdalo = load_reg(s, a->rdalo);
149
rdahi = load_reg(s, a->rdahi);
150
tcg_gen_concat_i32_i64(rda, rdalo, rdahi);
151
- tcg_temp_free_i32(rdalo);
152
- tcg_temp_free_i32(rdahi);
153
} else {
154
/* Accumulate starting at zero */
155
rda = tcg_const_i64(0);
156
@@ -XXX,XX +XXX,XX @@ static bool trans_VADDLV(DisasContext *s, arg_VADDLV *a)
157
} else {
158
gen_helper_mve_vaddlv_s(rda, cpu_env, qm, rda);
159
}
160
- tcg_temp_free_ptr(qm);
161
162
rdalo = tcg_temp_new_i32();
163
rdahi = tcg_temp_new_i32();
164
@@ -XXX,XX +XXX,XX @@ static bool trans_VADDLV(DisasContext *s, arg_VADDLV *a)
165
tcg_gen_extrh_i64_i32(rdahi, rda);
166
store_reg(s, a->rdalo, rdalo);
167
store_reg(s, a->rdahi, rdahi);
168
- tcg_temp_free_i64(rda);
169
mve_update_eci(s);
170
return true;
171
}
172
@@ -XXX,XX +XXX,XX @@ static bool do_1imm(DisasContext *s, arg_1imm *a, MVEGenOneOpImmFn *fn,
173
} else {
174
qd = mve_qreg_ptr(a->qd);
175
fn(cpu_env, qd, tcg_constant_i64(imm));
176
- tcg_temp_free_ptr(qd);
177
}
178
mve_update_eci(s);
179
return true;
180
@@ -XXX,XX +XXX,XX @@ static bool do_2shift_vec(DisasContext *s, arg_2shift *a, MVEGenTwoOpShiftFn fn,
181
qd = mve_qreg_ptr(a->qd);
182
qm = mve_qreg_ptr(a->qm);
183
fn(cpu_env, qd, qm, tcg_constant_i32(shift));
184
- tcg_temp_free_ptr(qd);
185
- tcg_temp_free_ptr(qm);
186
}
187
mve_update_eci(s);
188
return true;
189
@@ -XXX,XX +XXX,XX @@ static bool do_2shift_scalar(DisasContext *s, arg_shl_scalar *a,
190
qda = mve_qreg_ptr(a->qda);
191
rm = load_reg(s, a->rm);
192
fn(cpu_env, qda, qda, rm);
193
- tcg_temp_free_ptr(qda);
194
- tcg_temp_free_i32(rm);
195
mve_update_eci(s);
196
return true;
197
}
198
@@ -XXX,XX +XXX,XX @@ static bool trans_VSHLC(DisasContext *s, arg_VSHLC *a)
199
rdm = load_reg(s, a->rdm);
200
gen_helper_mve_vshlc(rdm, cpu_env, qd, rdm, tcg_constant_i32(a->imm));
201
store_reg(s, a->rdm, rdm);
202
- tcg_temp_free_ptr(qd);
203
mve_update_eci(s);
204
return true;
205
}
206
@@ -XXX,XX +XXX,XX @@ static bool do_vidup(DisasContext *s, arg_vidup *a, MVEGenVIDUPFn *fn)
207
rn = load_reg(s, a->rn);
208
fn(rn, cpu_env, qd, rn, tcg_constant_i32(a->imm));
209
store_reg(s, a->rn, rn);
210
- tcg_temp_free_ptr(qd);
211
mve_update_eci(s);
212
return true;
213
}
214
@@ -XXX,XX +XXX,XX @@ static bool do_viwdup(DisasContext *s, arg_viwdup *a, MVEGenVIWDUPFn *fn)
215
rm = load_reg(s, a->rm);
216
fn(rn, cpu_env, qd, rn, rm, tcg_constant_i32(a->imm));
217
store_reg(s, a->rn, rn);
218
- tcg_temp_free_ptr(qd);
219
- tcg_temp_free_i32(rm);
220
mve_update_eci(s);
221
return true;
222
}
223
@@ -XXX,XX +XXX,XX @@ static bool do_vcmp(DisasContext *s, arg_vcmp *a, MVEGenCmpFn *fn)
224
qn = mve_qreg_ptr(a->qn);
225
qm = mve_qreg_ptr(a->qm);
226
fn(cpu_env, qn, qm);
227
- tcg_temp_free_ptr(qn);
228
- tcg_temp_free_ptr(qm);
229
if (a->mask) {
230
/* VPT */
231
gen_vpst(s, a->mask);
232
@@ -XXX,XX +XXX,XX @@ static bool do_vcmp_scalar(DisasContext *s, arg_vcmp_scalar *a,
233
rm = load_reg(s, a->rm);
234
}
235
fn(cpu_env, qn, rm);
236
- tcg_temp_free_ptr(qn);
237
- tcg_temp_free_i32(rm);
238
if (a->mask) {
239
/* VPT */
240
gen_vpst(s, a->mask);
241
@@ -XXX,XX +XXX,XX @@ static bool do_vmaxv(DisasContext *s, arg_vmaxv *a, MVEGenVADDVFn fn)
242
rda = load_reg(s, a->rda);
243
fn(rda, cpu_env, qm, rda);
244
store_reg(s, a->rda, rda);
245
- tcg_temp_free_ptr(qm);
246
mve_update_eci(s);
247
return true;
248
}
249
@@ -XXX,XX +XXX,XX @@ static bool do_vabav(DisasContext *s, arg_vabav *a, MVEGenVABAVFn *fn)
250
rda = load_reg(s, a->rda);
251
fn(rda, cpu_env, qn, qm, rda);
252
store_reg(s, a->rda, rda);
253
- tcg_temp_free_ptr(qm);
254
- tcg_temp_free_ptr(qn);
255
mve_update_eci(s);
256
return true;
257
}
258
@@ -XXX,XX +XXX,XX @@ static bool trans_VMOV_from_2gp(DisasContext *s, arg_VMOV_to_2gp *a)
259
if (!mve_skip_vmov(s, vd, a->idx, MO_32)) {
260
tmp = load_reg(s, a->rt);
261
write_neon_element32(tmp, vd, a->idx, MO_32);
262
- tcg_temp_free_i32(tmp);
263
}
264
if (!mve_skip_vmov(s, vd + 1, a->idx, MO_32)) {
265
tmp = load_reg(s, a->rt2);
266
write_neon_element32(tmp, vd + 1, a->idx, MO_32);
267
- tcg_temp_free_i32(tmp);
268
}
269
270
mve_update_and_store_eci(s);
271
--
272
2.34.1
diff view generated by jsdifflib
Deleted patch
1
Translators are no longer required to free tcg temporaries.
2
1
3
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
5
---
6
target/arm/tcg/translate-neon.c | 131 +-------------------------------
7
1 file changed, 1 insertion(+), 130 deletions(-)
8
9
diff --git a/target/arm/tcg/translate-neon.c b/target/arm/tcg/translate-neon.c
10
index XXXXXXX..XXXXXXX 100644
11
--- a/target/arm/tcg/translate-neon.c
12
+++ b/target/arm/tcg/translate-neon.c
13
@@ -XXX,XX +XXX,XX @@ static bool do_neon_ddda_fpst(DisasContext *s, int q, int vd, int vn, int vm,
14
vfp_reg_offset(1, vm),
15
vfp_reg_offset(1, vd),
16
fpst, opr_sz, opr_sz, data, fn_gvec_ptr);
17
- tcg_temp_free_ptr(fpst);
18
return true;
19
}
20
21
@@ -XXX,XX +XXX,XX @@ static bool trans_VCADD(DisasContext *s, arg_VCADD *a)
22
vfp_reg_offset(1, a->vm),
23
fpst, opr_sz, opr_sz, a->rot,
24
fn_gvec_ptr);
25
- tcg_temp_free_ptr(fpst);
26
return true;
27
}
28
29
@@ -XXX,XX +XXX,XX @@ static void gen_neon_ldst_base_update(DisasContext *s, int rm, int rn,
30
TCGv_i32 index;
31
index = load_reg(s, rm);
32
tcg_gen_add_i32(base, base, index);
33
- tcg_temp_free_i32(index);
34
}
35
store_reg(s, rn, base);
36
}
37
@@ -XXX,XX +XXX,XX @@ static bool trans_VLDST_multiple(DisasContext *s, arg_VLDST_multiple *a)
38
}
39
}
40
}
41
- tcg_temp_free_i32(addr);
42
- tcg_temp_free_i64(tmp64);
43
44
gen_neon_ldst_base_update(s, a->rm, a->rn, nregs * interleave * 8);
45
return true;
46
@@ -XXX,XX +XXX,XX @@ static bool trans_VLD_all_lanes(DisasContext *s, arg_VLD_all_lanes *a)
47
/* Subsequent memory operations inherit alignment */
48
mop &= ~MO_AMASK;
49
}
50
- tcg_temp_free_i32(tmp);
51
- tcg_temp_free_i32(addr);
52
53
gen_neon_ldst_base_update(s, a->rm, a->rn, (1 << size) * nregs);
54
55
@@ -XXX,XX +XXX,XX @@ static bool trans_VLDST_single(DisasContext *s, arg_VLDST_single *a)
56
/* Subsequent memory operations inherit alignment */
57
mop &= ~MO_AMASK;
58
}
59
- tcg_temp_free_i32(addr);
60
- tcg_temp_free_i32(tmp);
61
62
gen_neon_ldst_base_update(s, a->rm, a->rn, (1 << a->size) * nregs);
63
64
@@ -XXX,XX +XXX,XX @@ static bool do_3same_pair(DisasContext *s, arg_3same *a, NeonGenTwoOpFn *fn)
65
write_neon_element32(tmp, a->vd, 0, MO_32);
66
write_neon_element32(tmp3, a->vd, 1, MO_32);
67
68
- tcg_temp_free_i32(tmp);
69
- tcg_temp_free_i32(tmp2);
70
- tcg_temp_free_i32(tmp3);
71
return true;
72
}
73
74
@@ -XXX,XX +XXX,XX @@ DO_3SAME_VQDMULH(VQRDMULH, qrdmulh)
75
TCGv_ptr fpst = fpstatus_ptr(FPST); \
76
tcg_gen_gvec_3_ptr(rd_ofs, rn_ofs, rm_ofs, fpst, \
77
oprsz, maxsz, 0, FUNC); \
78
- tcg_temp_free_ptr(fpst); \
79
}
80
81
#define DO_3S_FP_GVEC(INSN,SFUNC,HFUNC) \
82
@@ -XXX,XX +XXX,XX @@ static bool do_3same_fp_pair(DisasContext *s, arg_3same *a,
83
vfp_reg_offset(1, a->vn),
84
vfp_reg_offset(1, a->vm),
85
fpstatus, 8, 8, 0, fn);
86
- tcg_temp_free_ptr(fpstatus);
87
88
return true;
89
}
90
@@ -XXX,XX +XXX,XX @@ static bool do_2shift_env_64(DisasContext *s, arg_2reg_shift *a,
91
read_neon_element64(tmp, a->vm, pass, MO_64);
92
fn(tmp, cpu_env, tmp, constimm);
93
write_neon_element64(tmp, a->vd, pass, MO_64);
94
- tcg_temp_free_i64(tmp);
95
}
96
return true;
97
}
98
@@ -XXX,XX +XXX,XX @@ static bool do_2shift_env_32(DisasContext *s, arg_2reg_shift *a,
99
fn(tmp, cpu_env, tmp, constimm);
100
write_neon_element32(tmp, a->vd, pass, MO_32);
101
}
102
- tcg_temp_free_i32(tmp);
103
return true;
104
}
105
106
@@ -XXX,XX +XXX,XX @@ static bool do_2shift_narrow_64(DisasContext *s, arg_2reg_shift *a,
107
narrowfn(rd, cpu_env, rm2);
108
write_neon_element32(rd, a->vd, 1, MO_32);
109
110
- tcg_temp_free_i32(rd);
111
- tcg_temp_free_i64(rm1);
112
- tcg_temp_free_i64(rm2);
113
-
114
return true;
115
}
116
117
@@ -XXX,XX +XXX,XX @@ static bool do_2shift_narrow_32(DisasContext *s, arg_2reg_shift *a,
118
shiftfn(rm2, rm2, constimm);
119
120
tcg_gen_concat_i32_i64(rtmp, rm1, rm2);
121
- tcg_temp_free_i32(rm2);
122
123
narrowfn(rm1, cpu_env, rtmp);
124
write_neon_element32(rm1, a->vd, 0, MO_32);
125
- tcg_temp_free_i32(rm1);
126
127
shiftfn(rm3, rm3, constimm);
128
shiftfn(rm4, rm4, constimm);
129
130
tcg_gen_concat_i32_i64(rtmp, rm3, rm4);
131
- tcg_temp_free_i32(rm4);
132
133
narrowfn(rm3, cpu_env, rtmp);
134
- tcg_temp_free_i64(rtmp);
135
write_neon_element32(rm3, a->vd, 1, MO_32);
136
- tcg_temp_free_i32(rm3);
137
return true;
138
}
139
140
@@ -XXX,XX +XXX,XX @@ static bool do_vshll_2sh(DisasContext *s, arg_2reg_shift *a,
141
tmp = tcg_temp_new_i64();
142
143
widenfn(tmp, rm0);
144
- tcg_temp_free_i32(rm0);
145
if (a->shift != 0) {
146
tcg_gen_shli_i64(tmp, tmp, a->shift);
147
tcg_gen_andi_i64(tmp, tmp, ~widen_mask);
148
@@ -XXX,XX +XXX,XX @@ static bool do_vshll_2sh(DisasContext *s, arg_2reg_shift *a,
149
write_neon_element64(tmp, a->vd, 0, MO_64);
150
151
widenfn(tmp, rm1);
152
- tcg_temp_free_i32(rm1);
153
if (a->shift != 0) {
154
tcg_gen_shli_i64(tmp, tmp, a->shift);
155
tcg_gen_andi_i64(tmp, tmp, ~widen_mask);
156
}
157
write_neon_element64(tmp, a->vd, 1, MO_64);
158
- tcg_temp_free_i64(tmp);
159
return true;
160
}
161
162
@@ -XXX,XX +XXX,XX @@ static bool do_fp_2sh(DisasContext *s, arg_2reg_shift *a,
163
164
fpst = fpstatus_ptr(a->size == MO_16 ? FPST_STD_F16 : FPST_STD);
165
tcg_gen_gvec_2_ptr(rd_ofs, rm_ofs, fpst, vec_size, vec_size, a->shift, fn);
166
- tcg_temp_free_ptr(fpst);
167
return true;
168
}
169
170
@@ -XXX,XX +XXX,XX @@ static bool do_prewiden_3d(DisasContext *s, arg_3diff *a,
171
TCGv_i32 tmp = tcg_temp_new_i32();
172
read_neon_element32(tmp, a->vn, 0, MO_32);
173
widenfn(rn0_64, tmp);
174
- tcg_temp_free_i32(tmp);
175
}
176
if (src2_mop >= 0) {
177
read_neon_element64(rm_64, a->vm, 0, src2_mop);
178
@@ -XXX,XX +XXX,XX @@ static bool do_prewiden_3d(DisasContext *s, arg_3diff *a,
179
TCGv_i32 tmp = tcg_temp_new_i32();
180
read_neon_element32(tmp, a->vm, 0, MO_32);
181
widenfn(rm_64, tmp);
182
- tcg_temp_free_i32(tmp);
183
}
184
185
opfn(rn0_64, rn0_64, rm_64);
186
@@ -XXX,XX +XXX,XX @@ static bool do_prewiden_3d(DisasContext *s, arg_3diff *a,
187
TCGv_i32 tmp = tcg_temp_new_i32();
188
read_neon_element32(tmp, a->vn, 1, MO_32);
189
widenfn(rn1_64, tmp);
190
- tcg_temp_free_i32(tmp);
191
}
192
if (src2_mop >= 0) {
193
read_neon_element64(rm_64, a->vm, 1, src2_mop);
194
@@ -XXX,XX +XXX,XX @@ static bool do_prewiden_3d(DisasContext *s, arg_3diff *a,
195
TCGv_i32 tmp = tcg_temp_new_i32();
196
read_neon_element32(tmp, a->vm, 1, MO_32);
197
widenfn(rm_64, tmp);
198
- tcg_temp_free_i32(tmp);
199
}
200
201
write_neon_element64(rn0_64, a->vd, 0, MO_64);
202
@@ -XXX,XX +XXX,XX @@ static bool do_prewiden_3d(DisasContext *s, arg_3diff *a,
203
opfn(rn1_64, rn1_64, rm_64);
204
write_neon_element64(rn1_64, a->vd, 1, MO_64);
205
206
- tcg_temp_free_i64(rn0_64);
207
- tcg_temp_free_i64(rn1_64);
208
- tcg_temp_free_i64(rm_64);
209
-
210
return true;
211
}
212
213
@@ -XXX,XX +XXX,XX @@ static bool do_narrow_3d(DisasContext *s, arg_3diff *a,
214
write_neon_element32(rd0, a->vd, 0, MO_32);
215
write_neon_element32(rd1, a->vd, 1, MO_32);
216
217
- tcg_temp_free_i32(rd0);
218
- tcg_temp_free_i32(rd1);
219
- tcg_temp_free_i64(rn_64);
220
- tcg_temp_free_i64(rm_64);
221
-
222
return true;
223
}
224
225
@@ -XXX,XX +XXX,XX @@ static bool do_long_3d(DisasContext *s, arg_3diff *a,
226
read_neon_element32(rn, a->vn, 1, MO_32);
227
read_neon_element32(rm, a->vm, 1, MO_32);
228
opfn(rd1, rn, rm);
229
- tcg_temp_free_i32(rn);
230
- tcg_temp_free_i32(rm);
231
232
/* Don't store results until after all loads: they might overlap */
233
if (accfn) {
234
@@ -XXX,XX +XXX,XX @@ static bool do_long_3d(DisasContext *s, arg_3diff *a,
235
accfn(rd0, tmp, rd0);
236
read_neon_element64(tmp, a->vd, 1, MO_64);
237
accfn(rd1, tmp, rd1);
238
- tcg_temp_free_i64(tmp);
239
}
240
241
write_neon_element64(rd0, a->vd, 0, MO_64);
242
write_neon_element64(rd1, a->vd, 1, MO_64);
243
- tcg_temp_free_i64(rd0);
244
- tcg_temp_free_i64(rd1);
245
246
return true;
247
}
248
@@ -XXX,XX +XXX,XX @@ static void gen_mull_s32(TCGv_i64 rd, TCGv_i32 rn, TCGv_i32 rm)
249
250
tcg_gen_muls2_i32(lo, hi, rn, rm);
251
tcg_gen_concat_i32_i64(rd, lo, hi);
252
-
253
- tcg_temp_free_i32(lo);
254
- tcg_temp_free_i32(hi);
255
}
256
257
static void gen_mull_u32(TCGv_i64 rd, TCGv_i32 rn, TCGv_i32 rm)
258
@@ -XXX,XX +XXX,XX @@ static void gen_mull_u32(TCGv_i64 rd, TCGv_i32 rn, TCGv_i32 rm)
259
260
tcg_gen_mulu2_i32(lo, hi, rn, rm);
261
tcg_gen_concat_i32_i64(rd, lo, hi);
262
-
263
- tcg_temp_free_i32(lo);
264
- tcg_temp_free_i32(hi);
265
}
266
267
static bool trans_VMULL_S_3d(DisasContext *s, arg_3diff *a)
268
@@ -XXX,XX +XXX,XX @@ static void gen_neon_dup_low16(TCGv_i32 var)
269
tcg_gen_ext16u_i32(var, var);
270
tcg_gen_shli_i32(tmp, var, 16);
271
tcg_gen_or_i32(var, var, tmp);
272
- tcg_temp_free_i32(tmp);
273
}
274
275
static void gen_neon_dup_high16(TCGv_i32 var)
276
@@ -XXX,XX +XXX,XX @@ static void gen_neon_dup_high16(TCGv_i32 var)
277
tcg_gen_andi_i32(var, var, 0xffff0000);
278
tcg_gen_shri_i32(tmp, var, 16);
279
tcg_gen_or_i32(var, var, tmp);
280
- tcg_temp_free_i32(tmp);
281
}
282
283
static inline TCGv_i32 neon_get_scalar(int size, int reg)
284
@@ -XXX,XX +XXX,XX @@ static bool do_2scalar(DisasContext *s, arg_2scalar *a,
285
TCGv_i32 rd = tcg_temp_new_i32();
286
read_neon_element32(rd, a->vd, pass, MO_32);
287
accfn(tmp, rd, tmp);
288
- tcg_temp_free_i32(rd);
289
}
290
write_neon_element32(tmp, a->vd, pass, MO_32);
291
}
292
- tcg_temp_free_i32(tmp);
293
- tcg_temp_free_i32(scalar);
294
return true;
295
}
296
297
@@ -XXX,XX +XXX,XX @@ static bool do_2scalar_fp_vec(DisasContext *s, arg_2scalar *a,
298
fpstatus = fpstatus_ptr(a->size == 1 ? FPST_STD_F16 : FPST_STD);
299
tcg_gen_gvec_3_ptr(rd_ofs, rn_ofs, rm_ofs, fpstatus,
300
vec_size, vec_size, idx, fn);
301
- tcg_temp_free_ptr(fpstatus);
302
return true;
303
}
304
305
@@ -XXX,XX +XXX,XX @@ static bool do_vqrdmlah_2sc(DisasContext *s, arg_2scalar *a,
306
opfn(rd, cpu_env, rn, scalar, rd);
307
write_neon_element32(rd, a->vd, pass, MO_32);
308
}
309
- tcg_temp_free_i32(rn);
310
- tcg_temp_free_i32(rd);
311
- tcg_temp_free_i32(scalar);
312
-
313
return true;
314
}
315
316
@@ -XXX,XX +XXX,XX @@ static bool do_2scalar_long(DisasContext *s, arg_2scalar *a,
317
read_neon_element32(rn, a->vn, 1, MO_32);
318
rn1_64 = tcg_temp_new_i64();
319
opfn(rn1_64, rn, scalar);
320
- tcg_temp_free_i32(rn);
321
- tcg_temp_free_i32(scalar);
322
323
if (accfn) {
324
TCGv_i64 t64 = tcg_temp_new_i64();
325
@@ -XXX,XX +XXX,XX @@ static bool do_2scalar_long(DisasContext *s, arg_2scalar *a,
326
accfn(rn0_64, t64, rn0_64);
327
read_neon_element64(t64, a->vd, 1, MO_64);
328
accfn(rn1_64, t64, rn1_64);
329
- tcg_temp_free_i64(t64);
330
}
331
332
write_neon_element64(rn0_64, a->vd, 0, MO_64);
333
write_neon_element64(rn1_64, a->vd, 1, MO_64);
334
- tcg_temp_free_i64(rn0_64);
335
- tcg_temp_free_i64(rn1_64);
336
return true;
337
}
338
339
@@ -XXX,XX +XXX,XX @@ static bool trans_VEXT(DisasContext *s, arg_VEXT *a)
340
read_neon_element64(left, a->vm, 0, MO_64);
341
tcg_gen_extract2_i64(dest, right, left, a->imm * 8);
342
write_neon_element64(dest, a->vd, 0, MO_64);
343
-
344
- tcg_temp_free_i64(left);
345
- tcg_temp_free_i64(right);
346
- tcg_temp_free_i64(dest);
347
} else {
348
/* Extract 128 bits from <Vm+1:Vm:Vn+1:Vn> */
349
TCGv_i64 left, middle, right, destleft, destright;
350
@@ -XXX,XX +XXX,XX @@ static bool trans_VEXT(DisasContext *s, arg_VEXT *a)
351
352
write_neon_element64(destright, a->vd, 0, MO_64);
353
write_neon_element64(destleft, a->vd, 1, MO_64);
354
-
355
- tcg_temp_free_i64(destright);
356
- tcg_temp_free_i64(destleft);
357
- tcg_temp_free_i64(right);
358
- tcg_temp_free_i64(middle);
359
- tcg_temp_free_i64(left);
360
}
361
return true;
362
}
363
@@ -XXX,XX +XXX,XX @@ static bool trans_VTBL(DisasContext *s, arg_VTBL *a)
364
365
gen_helper_neon_tbl(val, cpu_env, desc, val, def);
366
write_neon_element64(val, a->vd, 0, MO_64);
367
-
368
- tcg_temp_free_i64(def);
369
- tcg_temp_free_i64(val);
370
return true;
371
}
372
373
@@ -XXX,XX +XXX,XX @@ static bool trans_VREV64(DisasContext *s, arg_VREV64 *a)
374
write_neon_element32(tmp[1], a->vd, pass * 2, MO_32);
375
write_neon_element32(tmp[0], a->vd, pass * 2 + 1, MO_32);
376
}
377
-
378
- tcg_temp_free_i32(tmp[0]);
379
- tcg_temp_free_i32(tmp[1]);
380
return true;
381
}
382
383
@@ -XXX,XX +XXX,XX @@ static bool do_2misc_pairwise(DisasContext *s, arg_2misc *a,
384
widenfn(rm0_64, tmp);
385
read_neon_element32(tmp, a->vm, pass * 2 + 1, MO_32);
386
widenfn(rm1_64, tmp);
387
- tcg_temp_free_i32(tmp);
388
389
opfn(rd_64, rm0_64, rm1_64);
390
- tcg_temp_free_i64(rm0_64);
391
- tcg_temp_free_i64(rm1_64);
392
393
if (accfn) {
394
TCGv_i64 tmp64 = tcg_temp_new_i64();
395
read_neon_element64(tmp64, a->vd, pass, MO_64);
396
accfn(rd_64, tmp64, rd_64);
397
- tcg_temp_free_i64(tmp64);
398
}
399
write_neon_element64(rd_64, a->vd, pass, MO_64);
400
- tcg_temp_free_i64(rd_64);
401
}
402
return true;
403
}
404
@@ -XXX,XX +XXX,XX @@ static bool do_zip_uzp(DisasContext *s, arg_2misc *a,
405
pd = vfp_reg_ptr(true, a->vd);
406
pm = vfp_reg_ptr(true, a->vm);
407
fn(pd, pm);
408
- tcg_temp_free_ptr(pd);
409
- tcg_temp_free_ptr(pm);
410
return true;
411
}
412
413
@@ -XXX,XX +XXX,XX @@ static bool do_vmovn(DisasContext *s, arg_2misc *a,
414
narrowfn(rd1, cpu_env, rm);
415
write_neon_element32(rd0, a->vd, 0, MO_32);
416
write_neon_element32(rd1, a->vd, 1, MO_32);
417
- tcg_temp_free_i32(rd0);
418
- tcg_temp_free_i32(rd1);
419
- tcg_temp_free_i64(rm);
420
return true;
421
}
422
423
@@ -XXX,XX +XXX,XX @@ static bool trans_VSHLL(DisasContext *s, arg_2misc *a)
424
widenfn(rd, rm1);
425
tcg_gen_shli_i64(rd, rd, 8 << a->size);
426
write_neon_element64(rd, a->vd, 1, MO_64);
427
-
428
- tcg_temp_free_i64(rd);
429
- tcg_temp_free_i32(rm0);
430
- tcg_temp_free_i32(rm1);
431
return true;
432
}
433
434
@@ -XXX,XX +XXX,XX @@ static bool trans_VCVT_B16_F32(DisasContext *s, arg_2misc *a)
435
436
write_neon_element32(dst0, a->vd, 0, MO_32);
437
write_neon_element32(dst1, a->vd, 1, MO_32);
438
-
439
- tcg_temp_free_i64(tmp);
440
- tcg_temp_free_i32(dst0);
441
- tcg_temp_free_i32(dst1);
442
- tcg_temp_free_ptr(fpst);
443
return true;
444
}
445
446
@@ -XXX,XX +XXX,XX @@ static bool trans_VCVT_F16_F32(DisasContext *s, arg_2misc *a)
447
tmp3 = tcg_temp_new_i32();
448
read_neon_element32(tmp3, a->vm, 3, MO_32);
449
write_neon_element32(tmp2, a->vd, 0, MO_32);
450
- tcg_temp_free_i32(tmp2);
451
gen_helper_vfp_fcvt_f32_to_f16(tmp3, tmp3, fpst, ahp);
452
tcg_gen_shli_i32(tmp3, tmp3, 16);
453
tcg_gen_or_i32(tmp3, tmp3, tmp);
454
write_neon_element32(tmp3, a->vd, 1, MO_32);
455
- tcg_temp_free_i32(tmp3);
456
- tcg_temp_free_i32(tmp);
457
- tcg_temp_free_i32(ahp);
458
- tcg_temp_free_ptr(fpst);
459
-
460
return true;
461
}
462
463
@@ -XXX,XX +XXX,XX @@ static bool trans_VCVT_F32_F16(DisasContext *s, arg_2misc *a)
464
tcg_gen_shri_i32(tmp, tmp, 16);
465
gen_helper_vfp_fcvt_f16_to_f32(tmp, tmp, fpst, ahp);
466
write_neon_element32(tmp, a->vd, 1, MO_32);
467
- tcg_temp_free_i32(tmp);
468
tcg_gen_ext16u_i32(tmp3, tmp2);
469
gen_helper_vfp_fcvt_f16_to_f32(tmp3, tmp3, fpst, ahp);
470
write_neon_element32(tmp3, a->vd, 2, MO_32);
471
- tcg_temp_free_i32(tmp3);
472
tcg_gen_shri_i32(tmp2, tmp2, 16);
473
gen_helper_vfp_fcvt_f16_to_f32(tmp2, tmp2, fpst, ahp);
474
write_neon_element32(tmp2, a->vd, 3, MO_32);
475
- tcg_temp_free_i32(tmp2);
476
- tcg_temp_free_i32(ahp);
477
- tcg_temp_free_ptr(fpst);
478
-
479
return true;
480
}
481
482
@@ -XXX,XX +XXX,XX @@ static bool do_2misc(DisasContext *s, arg_2misc *a, NeonGenOneOpFn *fn)
483
fn(tmp, tmp);
484
write_neon_element32(tmp, a->vd, pass, MO_32);
485
}
486
- tcg_temp_free_i32(tmp);
487
-
488
return true;
489
}
490
491
@@ -XXX,XX +XXX,XX @@ static bool trans_VQNEG(DisasContext *s, arg_2misc *a)
492
fpst = fpstatus_ptr(vece == MO_16 ? FPST_STD_F16 : FPST_STD); \
493
tcg_gen_gvec_2_ptr(rd_ofs, rm_ofs, fpst, oprsz, maxsz, 0, \
494
fns[vece]); \
495
- tcg_temp_free_ptr(fpst); \
496
} \
497
static bool trans_##INSN(DisasContext *s, arg_2misc *a) \
498
{ \
499
@@ -XXX,XX +XXX,XX @@ static bool trans_VRINTX(DisasContext *s, arg_2misc *a)
500
fpst = fpstatus_ptr(vece == 1 ? FPST_STD_F16 : FPST_STD); \
501
tcg_gen_gvec_2_ptr(rd_ofs, rm_ofs, fpst, oprsz, maxsz, \
502
arm_rmode_to_sf(RMODE), fns[vece]); \
503
- tcg_temp_free_ptr(fpst); \
504
} \
505
static bool trans_##INSN(DisasContext *s, arg_2misc *a) \
506
{ \
507
@@ -XXX,XX +XXX,XX @@ static bool trans_VSWP(DisasContext *s, arg_2misc *a)
508
write_neon_element64(rm, a->vd, pass, MO_64);
509
write_neon_element64(rd, a->vm, pass, MO_64);
510
}
511
- tcg_temp_free_i64(rm);
512
- tcg_temp_free_i64(rd);
513
-
514
return true;
515
}
516
+
517
static void gen_neon_trn_u8(TCGv_i32 t0, TCGv_i32 t1)
518
{
519
TCGv_i32 rd, tmp;
520
@@ -XXX,XX +XXX,XX @@ static void gen_neon_trn_u8(TCGv_i32 t0, TCGv_i32 t1)
521
tcg_gen_andi_i32(tmp, t0, 0xff00ff00);
522
tcg_gen_or_i32(t1, t1, tmp);
523
tcg_gen_mov_i32(t0, rd);
524
-
525
- tcg_temp_free_i32(tmp);
526
- tcg_temp_free_i32(rd);
527
}
528
529
static void gen_neon_trn_u16(TCGv_i32 t0, TCGv_i32 t1)
530
@@ -XXX,XX +XXX,XX @@ static void gen_neon_trn_u16(TCGv_i32 t0, TCGv_i32 t1)
531
tcg_gen_andi_i32(tmp, t0, 0xffff0000);
532
tcg_gen_or_i32(t1, t1, tmp);
533
tcg_gen_mov_i32(t0, rd);
534
-
535
- tcg_temp_free_i32(tmp);
536
- tcg_temp_free_i32(rd);
537
}
538
539
static bool trans_VTRN(DisasContext *s, arg_2misc *a)
540
@@ -XXX,XX +XXX,XX @@ static bool trans_VTRN(DisasContext *s, arg_2misc *a)
541
write_neon_element32(tmp, a->vd, pass, MO_32);
542
}
543
}
544
- tcg_temp_free_i32(tmp);
545
- tcg_temp_free_i32(tmp2);
546
return true;
547
}
548
549
--
550
2.34.1
diff view generated by jsdifflib
Deleted patch
1
Translators are no longer required to free tcg temporaries.
2
1
3
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
5
---
6
target/arm/tcg/translate-sme.c | 28 ----------------------------
7
1 file changed, 28 deletions(-)
8
9
diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c
10
index XXXXXXX..XXXXXXX 100644
11
--- a/target/arm/tcg/translate-sme.c
12
+++ b/target/arm/tcg/translate-sme.c
13
@@ -XXX,XX +XXX,XX @@ static TCGv_ptr get_tile_rowcol(DisasContext *s, int esz, int rs,
14
/* Add the byte offset to env to produce the final pointer. */
15
addr = tcg_temp_new_ptr();
16
tcg_gen_ext_i32_ptr(addr, tmp);
17
- tcg_temp_free_i32(tmp);
18
tcg_gen_add_ptr(addr, addr, cpu_env);
19
20
return addr;
21
@@ -XXX,XX +XXX,XX @@ static bool trans_MOVA(DisasContext *s, arg_MOVA *a)
22
h_fns[a->esz](t_za, t_zr, t_za, t_pg, t_desc);
23
}
24
}
25
-
26
- tcg_temp_free_ptr(t_za);
27
- tcg_temp_free_ptr(t_zr);
28
- tcg_temp_free_ptr(t_pg);
29
-
30
return true;
31
}
32
33
@@ -XXX,XX +XXX,XX @@ static bool trans_LDST1(DisasContext *s, arg_LDST1 *a)
34
35
fns[a->esz][be][a->v][mte][a->st](cpu_env, t_za, t_pg, addr,
36
tcg_constant_i32(desc));
37
-
38
- tcg_temp_free_ptr(t_za);
39
- tcg_temp_free_ptr(t_pg);
40
- tcg_temp_free_i64(addr);
41
return true;
42
}
43
44
@@ -XXX,XX +XXX,XX @@ static bool do_ldst_r(DisasContext *s, arg_ldstr *a, GenLdStR *fn)
45
base = get_tile_rowcol(s, MO_8, a->rv, imm, false);
46
47
fn(s, base, 0, svl, a->rn, imm * svl);
48
-
49
- tcg_temp_free_ptr(base);
50
return true;
51
}
52
53
@@ -XXX,XX +XXX,XX @@ static bool do_adda(DisasContext *s, arg_adda *a, MemOp esz,
54
pm = pred_full_reg_ptr(s, a->pm);
55
56
fn(za, zn, pn, pm, tcg_constant_i32(desc));
57
-
58
- tcg_temp_free_ptr(za);
59
- tcg_temp_free_ptr(zn);
60
- tcg_temp_free_ptr(pn);
61
- tcg_temp_free_ptr(pm);
62
return true;
63
}
64
65
@@ -XXX,XX +XXX,XX @@ static bool do_outprod(DisasContext *s, arg_op *a, MemOp esz,
66
pm = pred_full_reg_ptr(s, a->pm);
67
68
fn(za, zn, zm, pn, pm, tcg_constant_i32(desc));
69
-
70
- tcg_temp_free_ptr(za);
71
- tcg_temp_free_ptr(zn);
72
- tcg_temp_free_ptr(pn);
73
- tcg_temp_free_ptr(pm);
74
return true;
75
}
76
77
@@ -XXX,XX +XXX,XX @@ static bool do_outprod_fpst(DisasContext *s, arg_op *a, MemOp esz,
78
fpst = fpstatus_ptr(FPST_FPCR);
79
80
fn(za, zn, zm, pn, pm, fpst, tcg_constant_i32(desc));
81
-
82
- tcg_temp_free_ptr(za);
83
- tcg_temp_free_ptr(zn);
84
- tcg_temp_free_ptr(pn);
85
- tcg_temp_free_ptr(pm);
86
- tcg_temp_free_ptr(fpst);
87
return true;
88
}
89
90
--
91
2.34.1
diff view generated by jsdifflib
Deleted patch
1
Translators are no longer required to free tcg temporaries.
2
1
3
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
5
---
6
target/arm/tcg/translate.h | 2 --
7
1 file changed, 2 deletions(-)
8
9
diff --git a/target/arm/tcg/translate.h b/target/arm/tcg/translate.h
10
index XXXXXXX..XXXXXXX 100644
11
--- a/target/arm/tcg/translate.h
12
+++ b/target/arm/tcg/translate.h
13
@@ -XXX,XX +XXX,XX @@ static inline void set_pstate_bits(uint32_t bits)
14
tcg_gen_ld_i32(p, cpu_env, offsetof(CPUARMState, pstate));
15
tcg_gen_ori_i32(p, p, bits);
16
tcg_gen_st_i32(p, cpu_env, offsetof(CPUARMState, pstate));
17
- tcg_temp_free_i32(p);
18
}
19
20
/* Clear bits within PSTATE. */
21
@@ -XXX,XX +XXX,XX @@ static inline void clear_pstate_bits(uint32_t bits)
22
tcg_gen_ld_i32(p, cpu_env, offsetof(CPUARMState, pstate));
23
tcg_gen_andi_i32(p, p, ~bits);
24
tcg_gen_st_i32(p, cpu_env, offsetof(CPUARMState, pstate));
25
- tcg_temp_free_i32(p);
26
}
27
28
/* If the singlestep state is Active-not-pending, advance to Active-pending. */
29
--
30
2.34.1
diff view generated by jsdifflib
Deleted patch
1
Translators are no longer required to free tcg temporaries,
2
therefore there's no need to record for later freeing.
3
1
4
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
5
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
6
---
7
target/avr/translate.c | 19 -------------------
8
1 file changed, 19 deletions(-)
9
10
diff --git a/target/avr/translate.c b/target/avr/translate.c
11
index XXXXXXX..XXXXXXX 100644
12
--- a/target/avr/translate.c
13
+++ b/target/avr/translate.c
14
@@ -XXX,XX +XXX,XX @@ struct DisasContext {
15
* tcg_gen_brcond_tl(skip_cond, skip_var0, skip_var1, skip_label);
16
* }
17
*
18
- * if (free_skip_var0) {
19
- * tcg_temp_free(skip_var0);
20
- * free_skip_var0 = false;
21
- * }
22
- *
23
* translate(ctx);
24
*
25
* if (skip_label) {
26
@@ -XXX,XX +XXX,XX @@ struct DisasContext {
27
TCGv skip_var0;
28
TCGv skip_var1;
29
TCGCond skip_cond;
30
- bool free_skip_var0;
31
};
32
33
void avr_cpu_tcg_init(void)
34
@@ -XXX,XX +XXX,XX @@ static bool trans_SBRC(DisasContext *ctx, arg_SBRC *a)
35
36
ctx->skip_cond = TCG_COND_EQ;
37
ctx->skip_var0 = tcg_temp_new();
38
- ctx->free_skip_var0 = true;
39
40
tcg_gen_andi_tl(ctx->skip_var0, Rr, 1 << a->bit);
41
return true;
42
@@ -XXX,XX +XXX,XX @@ static bool trans_SBRS(DisasContext *ctx, arg_SBRS *a)
43
44
ctx->skip_cond = TCG_COND_NE;
45
ctx->skip_var0 = tcg_temp_new();
46
- ctx->free_skip_var0 = true;
47
48
tcg_gen_andi_tl(ctx->skip_var0, Rr, 1 << a->bit);
49
return true;
50
@@ -XXX,XX +XXX,XX @@ static bool trans_SBIC(DisasContext *ctx, arg_SBIC *a)
51
tcg_gen_andi_tl(temp, temp, 1 << a->bit);
52
ctx->skip_cond = TCG_COND_EQ;
53
ctx->skip_var0 = temp;
54
- ctx->free_skip_var0 = true;
55
56
return true;
57
}
58
@@ -XXX,XX +XXX,XX @@ static bool trans_SBIS(DisasContext *ctx, arg_SBIS *a)
59
tcg_gen_andi_tl(temp, temp, 1 << a->bit);
60
ctx->skip_cond = TCG_COND_NE;
61
ctx->skip_var0 = temp;
62
- ctx->free_skip_var0 = true;
63
64
return true;
65
}
66
@@ -XXX,XX +XXX,XX @@ static bool canonicalize_skip(DisasContext *ctx)
67
ctx->skip_cond = TCG_COND_NE;
68
break;
69
}
70
- if (ctx->free_skip_var0) {
71
- tcg_temp_free(ctx->skip_var0);
72
- ctx->free_skip_var0 = false;
73
- }
74
ctx->skip_var0 = cpu_skip;
75
return true;
76
}
77
@@ -XXX,XX +XXX,XX @@ static void avr_tr_translate_insn(DisasContextBase *dcbase, CPUState *cs)
78
* This ensures that cpu_skip is non-zero after the label
79
* if and only if the skipped insn itself sets a skip.
80
*/
81
- ctx->free_skip_var0 = true;
82
ctx->skip_var0 = tcg_temp_new();
83
tcg_gen_mov_tl(ctx->skip_var0, cpu_skip);
84
tcg_gen_movi_tl(cpu_skip, 0);
85
@@ -XXX,XX +XXX,XX @@ static void avr_tr_translate_insn(DisasContextBase *dcbase, CPUState *cs)
86
ctx->skip_var1, skip_label);
87
ctx->skip_var1 = NULL;
88
}
89
- if (ctx->free_skip_var0) {
90
- tcg_temp_free(ctx->skip_var0);
91
- ctx->free_skip_var0 = false;
92
- }
93
ctx->skip_cond = TCG_COND_NEVER;
94
ctx->skip_var0 = NULL;
95
}
96
--
97
2.34.1
diff view generated by jsdifflib
Deleted patch
1
This variable is not used, only allocated and freed.
2
1
3
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
5
---
6
target/avr/translate.c | 4 ----
7
1 file changed, 4 deletions(-)
8
9
diff --git a/target/avr/translate.c b/target/avr/translate.c
10
index XXXXXXX..XXXXXXX 100644
11
--- a/target/avr/translate.c
12
+++ b/target/avr/translate.c
13
@@ -XXX,XX +XXX,XX @@ static bool trans_EOR(DisasContext *ctx, arg_EOR *a)
14
static bool trans_COM(DisasContext *ctx, arg_COM *a)
15
{
16
TCGv Rd = cpu_r[a->rd];
17
- TCGv R = tcg_temp_new_i32();
18
19
tcg_gen_xori_tl(Rd, Rd, 0xff);
20
21
@@ -XXX,XX +XXX,XX @@ static bool trans_COM(DisasContext *ctx, arg_COM *a)
22
tcg_gen_movi_tl(cpu_Cf, 1); /* Cf = 1 */
23
tcg_gen_movi_tl(cpu_Vf, 0); /* Vf = 0 */
24
gen_ZNSf(Rd);
25
-
26
- tcg_temp_free_i32(R);
27
-
28
return true;
29
}
30
31
--
32
2.34.1
diff view generated by jsdifflib
Deleted patch
1
Translators are no longer required to free tcg temporaries.
2
1
3
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
5
---
6
target/avr/translate.c | 228 -----------------------------------------
7
1 file changed, 228 deletions(-)
8
9
diff --git a/target/avr/translate.c b/target/avr/translate.c
10
index XXXXXXX..XXXXXXX 100644
11
--- a/target/avr/translate.c
12
+++ b/target/avr/translate.c
13
@@ -XXX,XX +XXX,XX @@ static void gen_add_CHf(TCGv R, TCGv Rd, TCGv Rr)
14
tcg_gen_shri_tl(cpu_Cf, t1, 7); /* Cf = t1(7) */
15
tcg_gen_shri_tl(cpu_Hf, t1, 3); /* Hf = t1(3) */
16
tcg_gen_andi_tl(cpu_Hf, cpu_Hf, 1);
17
-
18
- tcg_temp_free_i32(t3);
19
- tcg_temp_free_i32(t2);
20
- tcg_temp_free_i32(t1);
21
}
22
23
static void gen_add_Vf(TCGv R, TCGv Rd, TCGv Rr)
24
@@ -XXX,XX +XXX,XX @@ static void gen_add_Vf(TCGv R, TCGv Rd, TCGv Rr)
25
tcg_gen_andc_tl(t1, t1, t2);
26
27
tcg_gen_shri_tl(cpu_Vf, t1, 7); /* Vf = t1(7) */
28
-
29
- tcg_temp_free_i32(t2);
30
- tcg_temp_free_i32(t1);
31
}
32
33
static void gen_sub_CHf(TCGv R, TCGv Rd, TCGv Rr)
34
@@ -XXX,XX +XXX,XX @@ static void gen_sub_CHf(TCGv R, TCGv Rd, TCGv Rr)
35
tcg_gen_shri_tl(cpu_Cf, t2, 7); /* Cf = t2(7) */
36
tcg_gen_shri_tl(cpu_Hf, t2, 3); /* Hf = t2(3) */
37
tcg_gen_andi_tl(cpu_Hf, cpu_Hf, 1);
38
-
39
- tcg_temp_free_i32(t3);
40
- tcg_temp_free_i32(t2);
41
- tcg_temp_free_i32(t1);
42
}
43
44
static void gen_sub_Vf(TCGv R, TCGv Rd, TCGv Rr)
45
@@ -XXX,XX +XXX,XX @@ static void gen_sub_Vf(TCGv R, TCGv Rd, TCGv Rr)
46
tcg_gen_and_tl(t1, t1, t2);
47
48
tcg_gen_shri_tl(cpu_Vf, t1, 7); /* Vf = t1(7) */
49
-
50
- tcg_temp_free_i32(t2);
51
- tcg_temp_free_i32(t1);
52
}
53
54
static void gen_NSf(TCGv R)
55
@@ -XXX,XX +XXX,XX @@ static bool trans_ADD(DisasContext *ctx, arg_ADD *a)
56
57
/* update output registers */
58
tcg_gen_mov_tl(Rd, R);
59
-
60
- tcg_temp_free_i32(R);
61
-
62
return true;
63
}
64
65
@@ -XXX,XX +XXX,XX @@ static bool trans_ADC(DisasContext *ctx, arg_ADC *a)
66
67
/* update output registers */
68
tcg_gen_mov_tl(Rd, R);
69
-
70
- tcg_temp_free_i32(R);
71
-
72
return true;
73
}
74
75
@@ -XXX,XX +XXX,XX @@ static bool trans_ADIW(DisasContext *ctx, arg_ADIW *a)
76
/* update output registers */
77
tcg_gen_andi_tl(RdL, R, 0xff);
78
tcg_gen_shri_tl(RdH, R, 8);
79
-
80
- tcg_temp_free_i32(Rd);
81
- tcg_temp_free_i32(R);
82
-
83
return true;
84
}
85
86
@@ -XXX,XX +XXX,XX @@ static bool trans_SUB(DisasContext *ctx, arg_SUB *a)
87
88
/* update output registers */
89
tcg_gen_mov_tl(Rd, R);
90
-
91
- tcg_temp_free_i32(R);
92
-
93
return true;
94
}
95
96
@@ -XXX,XX +XXX,XX @@ static bool trans_SUBI(DisasContext *ctx, arg_SUBI *a)
97
98
/* update output registers */
99
tcg_gen_mov_tl(Rd, R);
100
-
101
- tcg_temp_free_i32(R);
102
- tcg_temp_free_i32(Rr);
103
-
104
return true;
105
}
106
107
@@ -XXX,XX +XXX,XX @@ static bool trans_SBC(DisasContext *ctx, arg_SBC *a)
108
109
/* update output registers */
110
tcg_gen_mov_tl(Rd, R);
111
-
112
- tcg_temp_free_i32(zero);
113
- tcg_temp_free_i32(R);
114
-
115
return true;
116
}
117
118
@@ -XXX,XX +XXX,XX @@ static bool trans_SBCI(DisasContext *ctx, arg_SBCI *a)
119
120
/* update output registers */
121
tcg_gen_mov_tl(Rd, R);
122
-
123
- tcg_temp_free_i32(zero);
124
- tcg_temp_free_i32(R);
125
- tcg_temp_free_i32(Rr);
126
-
127
return true;
128
}
129
130
@@ -XXX,XX +XXX,XX @@ static bool trans_SBIW(DisasContext *ctx, arg_SBIW *a)
131
/* update output registers */
132
tcg_gen_andi_tl(RdL, R, 0xff);
133
tcg_gen_shri_tl(RdH, R, 8);
134
-
135
- tcg_temp_free_i32(Rd);
136
- tcg_temp_free_i32(R);
137
-
138
return true;
139
}
140
141
@@ -XXX,XX +XXX,XX @@ static bool trans_AND(DisasContext *ctx, arg_AND *a)
142
143
/* update output registers */
144
tcg_gen_mov_tl(Rd, R);
145
-
146
- tcg_temp_free_i32(R);
147
-
148
return true;
149
}
150
151
@@ -XXX,XX +XXX,XX @@ static bool trans_OR(DisasContext *ctx, arg_OR *a)
152
153
/* update output registers */
154
tcg_gen_mov_tl(Rd, R);
155
-
156
- tcg_temp_free_i32(R);
157
-
158
return true;
159
}
160
161
@@ -XXX,XX +XXX,XX @@ static bool trans_NEG(DisasContext *ctx, arg_NEG *a)
162
163
/* update output registers */
164
tcg_gen_mov_tl(Rd, R);
165
-
166
- tcg_temp_free_i32(t0);
167
- tcg_temp_free_i32(R);
168
-
169
return true;
170
}
171
172
@@ -XXX,XX +XXX,XX @@ static bool trans_MUL(DisasContext *ctx, arg_MUL *a)
173
/* update status register */
174
tcg_gen_shri_tl(cpu_Cf, R, 15); /* Cf = R(15) */
175
tcg_gen_setcondi_tl(TCG_COND_EQ, cpu_Zf, R, 0); /* Zf = R == 0 */
176
-
177
- tcg_temp_free_i32(R);
178
-
179
return true;
180
}
181
182
@@ -XXX,XX +XXX,XX @@ static bool trans_MULS(DisasContext *ctx, arg_MULS *a)
183
/* update status register */
184
tcg_gen_shri_tl(cpu_Cf, R, 15); /* Cf = R(15) */
185
tcg_gen_setcondi_tl(TCG_COND_EQ, cpu_Zf, R, 0); /* Zf = R == 0 */
186
-
187
- tcg_temp_free_i32(t1);
188
- tcg_temp_free_i32(t0);
189
- tcg_temp_free_i32(R);
190
-
191
return true;
192
}
193
194
@@ -XXX,XX +XXX,XX @@ static bool trans_MULSU(DisasContext *ctx, arg_MULSU *a)
195
/* update status register */
196
tcg_gen_shri_tl(cpu_Cf, R, 15); /* Cf = R(15) */
197
tcg_gen_setcondi_tl(TCG_COND_EQ, cpu_Zf, R, 0); /* Zf = R == 0 */
198
-
199
- tcg_temp_free_i32(t0);
200
- tcg_temp_free_i32(R);
201
-
202
return true;
203
}
204
205
@@ -XXX,XX +XXX,XX @@ static bool trans_FMUL(DisasContext *ctx, arg_FMUL *a)
206
tcg_gen_andi_tl(R0, R, 0xff);
207
tcg_gen_shri_tl(R1, R, 8);
208
tcg_gen_andi_tl(R1, R1, 0xff);
209
-
210
-
211
- tcg_temp_free_i32(R);
212
-
213
return true;
214
}
215
216
@@ -XXX,XX +XXX,XX @@ static bool trans_FMULS(DisasContext *ctx, arg_FMULS *a)
217
tcg_gen_andi_tl(R0, R, 0xff);
218
tcg_gen_shri_tl(R1, R, 8);
219
tcg_gen_andi_tl(R1, R1, 0xff);
220
-
221
- tcg_temp_free_i32(t1);
222
- tcg_temp_free_i32(t0);
223
- tcg_temp_free_i32(R);
224
-
225
return true;
226
}
227
228
@@ -XXX,XX +XXX,XX @@ static bool trans_FMULSU(DisasContext *ctx, arg_FMULSU *a)
229
tcg_gen_andi_tl(R0, R, 0xff);
230
tcg_gen_shri_tl(R1, R, 8);
231
tcg_gen_andi_tl(R1, R1, 0xff);
232
-
233
- tcg_temp_free_i32(t0);
234
- tcg_temp_free_i32(R);
235
-
236
return true;
237
}
238
239
@@ -XXX,XX +XXX,XX @@ static void gen_jmp_z(DisasContext *ctx)
240
static void gen_push_ret(DisasContext *ctx, int ret)
241
{
242
if (avr_feature(ctx->env, AVR_FEATURE_1_BYTE_PC)) {
243
-
244
TCGv t0 = tcg_const_i32((ret & 0x0000ff));
245
246
tcg_gen_qemu_st_tl(t0, cpu_sp, MMU_DATA_IDX, MO_UB);
247
tcg_gen_subi_tl(cpu_sp, cpu_sp, 1);
248
-
249
- tcg_temp_free_i32(t0);
250
} else if (avr_feature(ctx->env, AVR_FEATURE_2_BYTE_PC)) {
251
-
252
TCGv t0 = tcg_const_i32((ret & 0x00ffff));
253
254
tcg_gen_subi_tl(cpu_sp, cpu_sp, 1);
255
tcg_gen_qemu_st_tl(t0, cpu_sp, MMU_DATA_IDX, MO_BEUW);
256
tcg_gen_subi_tl(cpu_sp, cpu_sp, 1);
257
-
258
- tcg_temp_free_i32(t0);
259
-
260
} else if (avr_feature(ctx->env, AVR_FEATURE_3_BYTE_PC)) {
261
-
262
TCGv lo = tcg_const_i32((ret & 0x0000ff));
263
TCGv hi = tcg_const_i32((ret & 0xffff00) >> 8);
264
265
@@ -XXX,XX +XXX,XX @@ static void gen_push_ret(DisasContext *ctx, int ret)
266
tcg_gen_subi_tl(cpu_sp, cpu_sp, 2);
267
tcg_gen_qemu_st_tl(hi, cpu_sp, MMU_DATA_IDX, MO_BEUW);
268
tcg_gen_subi_tl(cpu_sp, cpu_sp, 1);
269
-
270
- tcg_temp_free_i32(lo);
271
- tcg_temp_free_i32(hi);
272
}
273
}
274
275
@@ -XXX,XX +XXX,XX @@ static void gen_pop_ret(DisasContext *ctx, TCGv ret)
276
tcg_gen_qemu_ld_tl(lo, cpu_sp, MMU_DATA_IDX, MO_UB);
277
278
tcg_gen_deposit_tl(ret, lo, hi, 8, 16);
279
-
280
- tcg_temp_free_i32(lo);
281
- tcg_temp_free_i32(hi);
282
}
283
}
284
285
@@ -XXX,XX +XXX,XX @@ static bool trans_CP(DisasContext *ctx, arg_CP *a)
286
gen_sub_CHf(R, Rd, Rr);
287
gen_sub_Vf(R, Rd, Rr);
288
gen_ZNSf(R);
289
-
290
- tcg_temp_free_i32(R);
291
-
292
return true;
293
}
294
295
@@ -XXX,XX +XXX,XX @@ static bool trans_CPC(DisasContext *ctx, arg_CPC *a)
296
* cleared otherwise.
297
*/
298
tcg_gen_movcond_tl(TCG_COND_EQ, cpu_Zf, R, zero, cpu_Zf, zero);
299
-
300
- tcg_temp_free_i32(zero);
301
- tcg_temp_free_i32(R);
302
-
303
return true;
304
}
305
306
@@ -XXX,XX +XXX,XX @@ static bool trans_CPI(DisasContext *ctx, arg_CPI *a)
307
gen_sub_CHf(R, Rd, Rr);
308
gen_sub_Vf(R, Rd, Rr);
309
gen_ZNSf(R);
310
-
311
- tcg_temp_free_i32(R);
312
- tcg_temp_free_i32(Rr);
313
-
314
return true;
315
}
316
317
@@ -XXX,XX +XXX,XX @@ static bool trans_LDS(DisasContext *ctx, arg_LDS *a)
318
tcg_gen_ori_tl(addr, addr, a->imm);
319
320
gen_data_load(ctx, Rd, addr);
321
-
322
- tcg_temp_free_i32(addr);
323
-
324
return true;
325
}
326
327
@@ -XXX,XX +XXX,XX @@ static bool trans_LDX1(DisasContext *ctx, arg_LDX1 *a)
328
TCGv addr = gen_get_xaddr();
329
330
gen_data_load(ctx, Rd, addr);
331
-
332
- tcg_temp_free_i32(addr);
333
-
334
return true;
335
}
336
337
@@ -XXX,XX +XXX,XX @@ static bool trans_LDX2(DisasContext *ctx, arg_LDX2 *a)
338
tcg_gen_addi_tl(addr, addr, 1); /* addr = addr + 1 */
339
340
gen_set_xaddr(addr);
341
-
342
- tcg_temp_free_i32(addr);
343
-
344
return true;
345
}
346
347
@@ -XXX,XX +XXX,XX @@ static bool trans_LDX3(DisasContext *ctx, arg_LDX3 *a)
348
tcg_gen_subi_tl(addr, addr, 1); /* addr = addr - 1 */
349
gen_data_load(ctx, Rd, addr);
350
gen_set_xaddr(addr);
351
-
352
- tcg_temp_free_i32(addr);
353
-
354
return true;
355
}
356
357
@@ -XXX,XX +XXX,XX @@ static bool trans_LDY2(DisasContext *ctx, arg_LDY2 *a)
358
tcg_gen_addi_tl(addr, addr, 1); /* addr = addr + 1 */
359
360
gen_set_yaddr(addr);
361
-
362
- tcg_temp_free_i32(addr);
363
-
364
return true;
365
}
366
367
@@ -XXX,XX +XXX,XX @@ static bool trans_LDY3(DisasContext *ctx, arg_LDY3 *a)
368
tcg_gen_subi_tl(addr, addr, 1); /* addr = addr - 1 */
369
gen_data_load(ctx, Rd, addr);
370
gen_set_yaddr(addr);
371
-
372
- tcg_temp_free_i32(addr);
373
-
374
return true;
375
}
376
377
@@ -XXX,XX +XXX,XX @@ static bool trans_LDDY(DisasContext *ctx, arg_LDDY *a)
378
379
tcg_gen_addi_tl(addr, addr, a->imm); /* addr = addr + q */
380
gen_data_load(ctx, Rd, addr);
381
-
382
- tcg_temp_free_i32(addr);
383
-
384
return true;
385
}
386
387
@@ -XXX,XX +XXX,XX @@ static bool trans_LDZ2(DisasContext *ctx, arg_LDZ2 *a)
388
tcg_gen_addi_tl(addr, addr, 1); /* addr = addr + 1 */
389
390
gen_set_zaddr(addr);
391
-
392
- tcg_temp_free_i32(addr);
393
-
394
return true;
395
}
396
397
@@ -XXX,XX +XXX,XX @@ static bool trans_LDZ3(DisasContext *ctx, arg_LDZ3 *a)
398
gen_data_load(ctx, Rd, addr);
399
400
gen_set_zaddr(addr);
401
-
402
- tcg_temp_free_i32(addr);
403
-
404
return true;
405
}
406
407
@@ -XXX,XX +XXX,XX @@ static bool trans_LDDZ(DisasContext *ctx, arg_LDDZ *a)
408
409
tcg_gen_addi_tl(addr, addr, a->imm); /* addr = addr + q */
410
gen_data_load(ctx, Rd, addr);
411
-
412
- tcg_temp_free_i32(addr);
413
-
414
return true;
415
}
416
417
@@ -XXX,XX +XXX,XX @@ static bool trans_STS(DisasContext *ctx, arg_STS *a)
418
tcg_gen_shli_tl(addr, addr, 16);
419
tcg_gen_ori_tl(addr, addr, a->imm);
420
gen_data_store(ctx, Rd, addr);
421
-
422
- tcg_temp_free_i32(addr);
423
-
424
return true;
425
}
426
427
@@ -XXX,XX +XXX,XX @@ static bool trans_STX1(DisasContext *ctx, arg_STX1 *a)
428
TCGv addr = gen_get_xaddr();
429
430
gen_data_store(ctx, Rd, addr);
431
-
432
- tcg_temp_free_i32(addr);
433
-
434
return true;
435
}
436
437
@@ -XXX,XX +XXX,XX @@ static bool trans_STX2(DisasContext *ctx, arg_STX2 *a)
438
gen_data_store(ctx, Rd, addr);
439
tcg_gen_addi_tl(addr, addr, 1); /* addr = addr + 1 */
440
gen_set_xaddr(addr);
441
-
442
- tcg_temp_free_i32(addr);
443
-
444
return true;
445
}
446
447
@@ -XXX,XX +XXX,XX @@ static bool trans_STX3(DisasContext *ctx, arg_STX3 *a)
448
tcg_gen_subi_tl(addr, addr, 1); /* addr = addr - 1 */
449
gen_data_store(ctx, Rd, addr);
450
gen_set_xaddr(addr);
451
-
452
- tcg_temp_free_i32(addr);
453
-
454
return true;
455
}
456
457
@@ -XXX,XX +XXX,XX @@ static bool trans_STY2(DisasContext *ctx, arg_STY2 *a)
458
gen_data_store(ctx, Rd, addr);
459
tcg_gen_addi_tl(addr, addr, 1); /* addr = addr + 1 */
460
gen_set_yaddr(addr);
461
-
462
- tcg_temp_free_i32(addr);
463
-
464
return true;
465
}
466
467
@@ -XXX,XX +XXX,XX @@ static bool trans_STY3(DisasContext *ctx, arg_STY3 *a)
468
tcg_gen_subi_tl(addr, addr, 1); /* addr = addr - 1 */
469
gen_data_store(ctx, Rd, addr);
470
gen_set_yaddr(addr);
471
-
472
- tcg_temp_free_i32(addr);
473
-
474
return true;
475
}
476
477
@@ -XXX,XX +XXX,XX @@ static bool trans_STDY(DisasContext *ctx, arg_STDY *a)
478
479
tcg_gen_addi_tl(addr, addr, a->imm); /* addr = addr + q */
480
gen_data_store(ctx, Rd, addr);
481
-
482
- tcg_temp_free_i32(addr);
483
-
484
return true;
485
}
486
487
@@ -XXX,XX +XXX,XX @@ static bool trans_STZ2(DisasContext *ctx, arg_STZ2 *a)
488
tcg_gen_addi_tl(addr, addr, 1); /* addr = addr + 1 */
489
490
gen_set_zaddr(addr);
491
-
492
- tcg_temp_free_i32(addr);
493
-
494
return true;
495
}
496
497
@@ -XXX,XX +XXX,XX @@ static bool trans_STZ3(DisasContext *ctx, arg_STZ3 *a)
498
gen_data_store(ctx, Rd, addr);
499
500
gen_set_zaddr(addr);
501
-
502
- tcg_temp_free_i32(addr);
503
-
504
return true;
505
}
506
507
@@ -XXX,XX +XXX,XX @@ static bool trans_STDZ(DisasContext *ctx, arg_STDZ *a)
508
509
tcg_gen_addi_tl(addr, addr, a->imm); /* addr = addr + q */
510
gen_data_store(ctx, Rd, addr);
511
-
512
- tcg_temp_free_i32(addr);
513
-
514
return true;
515
}
516
517
@@ -XXX,XX +XXX,XX @@ static bool trans_LPM1(DisasContext *ctx, arg_LPM1 *a)
518
tcg_gen_shli_tl(addr, H, 8); /* addr = H:L */
519
tcg_gen_or_tl(addr, addr, L);
520
tcg_gen_qemu_ld8u(Rd, addr, MMU_CODE_IDX); /* Rd = mem[addr] */
521
-
522
- tcg_temp_free_i32(addr);
523
-
524
return true;
525
}
526
527
@@ -XXX,XX +XXX,XX @@ static bool trans_LPM2(DisasContext *ctx, arg_LPM2 *a)
528
tcg_gen_shli_tl(addr, H, 8); /* addr = H:L */
529
tcg_gen_or_tl(addr, addr, L);
530
tcg_gen_qemu_ld8u(Rd, addr, MMU_CODE_IDX); /* Rd = mem[addr] */
531
-
532
- tcg_temp_free_i32(addr);
533
-
534
return true;
535
}
536
537
@@ -XXX,XX +XXX,XX @@ static bool trans_LPMX(DisasContext *ctx, arg_LPMX *a)
538
tcg_gen_andi_tl(L, addr, 0xff);
539
tcg_gen_shri_tl(addr, addr, 8);
540
tcg_gen_andi_tl(H, addr, 0xff);
541
-
542
- tcg_temp_free_i32(addr);
543
-
544
return true;
545
}
546
547
@@ -XXX,XX +XXX,XX @@ static bool trans_ELPM1(DisasContext *ctx, arg_ELPM1 *a)
548
TCGv addr = gen_get_zaddr();
549
550
tcg_gen_qemu_ld8u(Rd, addr, MMU_CODE_IDX); /* Rd = mem[addr] */
551
-
552
- tcg_temp_free_i32(addr);
553
-
554
return true;
555
}
556
557
@@ -XXX,XX +XXX,XX @@ static bool trans_ELPM2(DisasContext *ctx, arg_ELPM2 *a)
558
TCGv addr = gen_get_zaddr();
559
560
tcg_gen_qemu_ld8u(Rd, addr, MMU_CODE_IDX); /* Rd = mem[addr] */
561
-
562
- tcg_temp_free_i32(addr);
563
-
564
return true;
565
}
566
567
@@ -XXX,XX +XXX,XX @@ static bool trans_ELPMX(DisasContext *ctx, arg_ELPMX *a)
568
tcg_gen_qemu_ld8u(Rd, addr, MMU_CODE_IDX); /* Rd = mem[addr] */
569
tcg_gen_addi_tl(addr, addr, 1); /* addr = addr + 1 */
570
gen_set_zaddr(addr);
571
-
572
- tcg_temp_free_i32(addr);
573
-
574
return true;
575
}
576
577
@@ -XXX,XX +XXX,XX @@ static bool trans_IN(DisasContext *ctx, arg_IN *a)
578
TCGv port = tcg_const_i32(a->imm);
579
580
gen_helper_inb(Rd, cpu_env, port);
581
-
582
- tcg_temp_free_i32(port);
583
-
584
return true;
585
}
586
587
@@ -XXX,XX +XXX,XX @@ static bool trans_OUT(DisasContext *ctx, arg_OUT *a)
588
TCGv port = tcg_const_i32(a->imm);
589
590
gen_helper_outb(cpu_env, port, Rd);
591
-
592
- tcg_temp_free_i32(port);
593
-
594
return true;
595
}
596
597
@@ -XXX,XX +XXX,XX @@ static bool trans_XCH(DisasContext *ctx, arg_XCH *a)
598
gen_data_load(ctx, t0, addr);
599
gen_data_store(ctx, Rd, addr);
600
tcg_gen_mov_tl(Rd, t0);
601
-
602
- tcg_temp_free_i32(t0);
603
- tcg_temp_free_i32(addr);
604
-
605
return true;
606
}
607
608
@@ -XXX,XX +XXX,XX @@ static bool trans_LAS(DisasContext *ctx, arg_LAS *a)
609
tcg_gen_or_tl(t1, t0, Rr);
610
tcg_gen_mov_tl(Rr, t0); /* Rr = t0 */
611
gen_data_store(ctx, t1, addr); /* mem[addr] = t1 */
612
-
613
- tcg_temp_free_i32(t1);
614
- tcg_temp_free_i32(t0);
615
- tcg_temp_free_i32(addr);
616
-
617
return true;
618
}
619
620
@@ -XXX,XX +XXX,XX @@ static bool trans_LAC(DisasContext *ctx, arg_LAC *a)
621
tcg_gen_andc_tl(t1, t0, Rr); /* t1 = t0 & (0xff - Rr) = t0 & ~Rr */
622
tcg_gen_mov_tl(Rr, t0); /* Rr = t0 */
623
gen_data_store(ctx, t1, addr); /* mem[addr] = t1 */
624
-
625
- tcg_temp_free_i32(t1);
626
- tcg_temp_free_i32(t0);
627
- tcg_temp_free_i32(addr);
628
-
629
return true;
630
}
631
632
@@ -XXX,XX +XXX,XX @@ static bool trans_LAT(DisasContext *ctx, arg_LAT *a)
633
tcg_gen_xor_tl(t1, t0, Rd);
634
tcg_gen_mov_tl(Rd, t0); /* Rd = t0 */
635
gen_data_store(ctx, t1, addr); /* mem[addr] = t1 */
636
-
637
- tcg_temp_free_i32(t1);
638
- tcg_temp_free_i32(t0);
639
- tcg_temp_free_i32(addr);
640
-
641
return true;
642
}
643
644
@@ -XXX,XX +XXX,XX @@ static bool trans_ROR(DisasContext *ctx, arg_ROR *a)
645
646
/* update status register */
647
gen_rshift_ZNVSf(Rd);
648
-
649
- tcg_temp_free_i32(t0);
650
-
651
return true;
652
}
653
654
@@ -XXX,XX +XXX,XX @@ static bool trans_ASR(DisasContext *ctx, arg_ASR *a)
655
656
/* update status register */
657
gen_rshift_ZNVSf(Rd);
658
-
659
- tcg_temp_free_i32(t0);
660
-
661
return true;
662
}
663
664
@@ -XXX,XX +XXX,XX @@ static bool trans_SWAP(DisasContext *ctx, arg_SWAP *a)
665
tcg_gen_andi_tl(t1, Rd, 0xf0);
666
tcg_gen_shri_tl(t1, t1, 4);
667
tcg_gen_or_tl(Rd, t0, t1);
668
-
669
- tcg_temp_free_i32(t1);
670
- tcg_temp_free_i32(t0);
671
-
672
return true;
673
}
674
675
@@ -XXX,XX +XXX,XX @@ static bool trans_SBI(DisasContext *ctx, arg_SBI *a)
676
gen_helper_inb(data, cpu_env, port);
677
tcg_gen_ori_tl(data, data, 1 << a->bit);
678
gen_helper_outb(cpu_env, port, data);
679
-
680
- tcg_temp_free_i32(port);
681
- tcg_temp_free_i32(data);
682
-
683
return true;
684
}
685
686
@@ -XXX,XX +XXX,XX @@ static bool trans_CBI(DisasContext *ctx, arg_CBI *a)
687
gen_helper_inb(data, cpu_env, port);
688
tcg_gen_andi_tl(data, data, ~(1 << a->bit));
689
gen_helper_outb(cpu_env, port, data);
690
-
691
- tcg_temp_free_i32(data);
692
- tcg_temp_free_i32(port);
693
-
694
return true;
695
}
696
697
@@ -XXX,XX +XXX,XX @@ static bool trans_BLD(DisasContext *ctx, arg_BLD *a)
698
tcg_gen_andi_tl(Rd, Rd, ~(1u << a->bit)); /* clear bit */
699
tcg_gen_shli_tl(t1, cpu_Tf, a->bit); /* create mask */
700
tcg_gen_or_tl(Rd, Rd, t1);
701
-
702
- tcg_temp_free_i32(t1);
703
-
704
return true;
705
}
706
707
--
708
2.34.1
diff view generated by jsdifflib
Deleted patch
1
Translators are no longer required to free tcg temporaries.
2
1
3
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
5
---
6
target/cris/translate.c | 20 --------------------
7
1 file changed, 20 deletions(-)
8
9
diff --git a/target/cris/translate.c b/target/cris/translate.c
10
index XXXXXXX..XXXXXXX 100644
11
--- a/target/cris/translate.c
12
+++ b/target/cris/translate.c
13
@@ -XXX,XX +XXX,XX @@ static inline void cris_alu_alloc_temps(DisasContext *dc, int size, TCGv *t)
14
}
15
}
16
17
-static inline void cris_alu_free_temps(DisasContext *dc, int size, TCGv *t)
18
-{
19
- if (size != 4) {
20
- tcg_temp_free(t[0]);
21
- tcg_temp_free(t[1]);
22
- }
23
-}
24
-
25
static int dec_and_r(CPUCRISState *env, DisasContext *dc)
26
{
27
TCGv t[2];
28
@@ -XXX,XX +XXX,XX @@ static int dec_and_r(CPUCRISState *env, DisasContext *dc)
29
cris_alu_alloc_temps(dc, size, t);
30
dec_prep_alu_r(dc, dc->op1, dc->op2, size, 0, t[0], t[1]);
31
cris_alu(dc, CC_OP_AND, cpu_R[dc->op2], t[0], t[1], size);
32
- cris_alu_free_temps(dc, size, t);
33
return 2;
34
}
35
36
@@ -XXX,XX +XXX,XX @@ static int dec_lsl_r(CPUCRISState *env, DisasContext *dc)
37
dec_prep_alu_r(dc, dc->op1, dc->op2, size, 0, t[0], t[1]);
38
tcg_gen_andi_tl(t[1], t[1], 63);
39
cris_alu(dc, CC_OP_LSL, cpu_R[dc->op2], t[0], t[1], size);
40
- cris_alu_free_temps(dc, size, t);
41
return 2;
42
}
43
44
@@ -XXX,XX +XXX,XX @@ static int dec_lsr_r(CPUCRISState *env, DisasContext *dc)
45
dec_prep_alu_r(dc, dc->op1, dc->op2, size, 0, t[0], t[1]);
46
tcg_gen_andi_tl(t[1], t[1], 63);
47
cris_alu(dc, CC_OP_LSR, cpu_R[dc->op2], t[0], t[1], size);
48
- cris_alu_free_temps(dc, size, t);
49
return 2;
50
}
51
52
@@ -XXX,XX +XXX,XX @@ static int dec_asr_r(CPUCRISState *env, DisasContext *dc)
53
dec_prep_alu_r(dc, dc->op1, dc->op2, size, 1, t[0], t[1]);
54
tcg_gen_andi_tl(t[1], t[1], 63);
55
cris_alu(dc, CC_OP_ASR, cpu_R[dc->op2], t[0], t[1], size);
56
- cris_alu_free_temps(dc, size, t);
57
return 2;
58
}
59
60
@@ -XXX,XX +XXX,XX @@ static int dec_muls_r(CPUCRISState *env, DisasContext *dc)
61
dec_prep_alu_r(dc, dc->op1, dc->op2, size, 1, t[0], t[1]);
62
63
cris_alu(dc, CC_OP_MULS, cpu_R[dc->op2], t[0], t[1], 4);
64
- cris_alu_free_temps(dc, size, t);
65
return 2;
66
}
67
68
@@ -XXX,XX +XXX,XX @@ static int dec_mulu_r(CPUCRISState *env, DisasContext *dc)
69
dec_prep_alu_r(dc, dc->op1, dc->op2, size, 0, t[0], t[1]);
70
71
cris_alu(dc, CC_OP_MULU, cpu_R[dc->op2], t[0], t[1], 4);
72
- cris_alu_free_temps(dc, size, t);
73
return 2;
74
}
75
76
@@ -XXX,XX +XXX,XX @@ static int dec_xor_r(CPUCRISState *env, DisasContext *dc)
77
dec_prep_alu_r(dc, dc->op1, dc->op2, size, 0, t[0], t[1]);
78
79
cris_alu(dc, CC_OP_XOR, cpu_R[dc->op2], t[0], t[1], 4);
80
- cris_alu_free_temps(dc, size, t);
81
return 2;
82
}
83
84
@@ -XXX,XX +XXX,XX @@ static int dec_cmp_r(CPUCRISState *env, DisasContext *dc)
85
dec_prep_alu_r(dc, dc->op1, dc->op2, size, 0, t[0], t[1]);
86
87
cris_alu(dc, CC_OP_CMP, cpu_R[dc->op2], t[0], t[1], size);
88
- cris_alu_free_temps(dc, size, t);
89
return 2;
90
}
91
92
@@ -XXX,XX +XXX,XX @@ static int dec_add_r(CPUCRISState *env, DisasContext *dc)
93
dec_prep_alu_r(dc, dc->op1, dc->op2, size, 0, t[0], t[1]);
94
95
cris_alu(dc, CC_OP_ADD, cpu_R[dc->op2], t[0], t[1], size);
96
- cris_alu_free_temps(dc, size, t);
97
return 2;
98
}
99
100
@@ -XXX,XX +XXX,XX @@ static int dec_or_r(CPUCRISState *env, DisasContext *dc)
101
cris_alu_alloc_temps(dc, size, t);
102
dec_prep_alu_r(dc, dc->op1, dc->op2, size, 0, t[0], t[1]);
103
cris_alu(dc, CC_OP_OR, cpu_R[dc->op2], t[0], t[1], size);
104
- cris_alu_free_temps(dc, size, t);
105
return 2;
106
}
107
108
@@ -XXX,XX +XXX,XX @@ static int dec_neg_r(CPUCRISState *env, DisasContext *dc)
109
dec_prep_alu_r(dc, dc->op1, dc->op2, size, 0, t[0], t[1]);
110
111
cris_alu(dc, CC_OP_NEG, cpu_R[dc->op2], t[0], t[1], size);
112
- cris_alu_free_temps(dc, size, t);
113
return 2;
114
}
115
116
@@ -XXX,XX +XXX,XX @@ static int dec_sub_r(CPUCRISState *env, DisasContext *dc)
117
cris_alu_alloc_temps(dc, size, t);
118
dec_prep_alu_r(dc, dc->op1, dc->op2, size, 0, t[0], t[1]);
119
cris_alu(dc, CC_OP_SUB, cpu_R[dc->op2], t[0], t[1], size);
120
- cris_alu_free_temps(dc, size, t);
121
return 2;
122
}
123
124
--
125
2.34.1
diff view generated by jsdifflib
Deleted patch
1
Translators are no longer required to free tcg temporaries.
2
1
3
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
5
---
6
target/cris/translate.c | 23 -----------------------
7
target/cris/translate_v10.c.inc | 4 ----
8
2 files changed, 27 deletions(-)
9
10
diff --git a/target/cris/translate.c b/target/cris/translate.c
11
index XXXXXXX..XXXXXXX 100644
12
--- a/target/cris/translate.c
13
+++ b/target/cris/translate.c
14
@@ -XXX,XX +XXX,XX @@ static inline void cris_alu_m_alloc_temps(TCGv *t)
15
t[1] = tcg_temp_new();
16
}
17
18
-static inline void cris_alu_m_free_temps(TCGv *t)
19
-{
20
- tcg_temp_free(t[0]);
21
- tcg_temp_free(t[1]);
22
-}
23
-
24
static int dec_movs_m(CPUCRISState *env, DisasContext *dc)
25
{
26
TCGv t[2];
27
@@ -XXX,XX +XXX,XX @@ static int dec_movs_m(CPUCRISState *env, DisasContext *dc)
28
cris_alu(dc, CC_OP_MOVE,
29
cpu_R[dc->op2], cpu_R[dc->op2], t[1], 4);
30
do_postinc(dc, memsize);
31
- cris_alu_m_free_temps(t);
32
return insn_len;
33
}
34
35
@@ -XXX,XX +XXX,XX @@ static int dec_addu_m(CPUCRISState *env, DisasContext *dc)
36
cris_alu(dc, CC_OP_ADD,
37
cpu_R[dc->op2], cpu_R[dc->op2], t[1], 4);
38
do_postinc(dc, memsize);
39
- cris_alu_m_free_temps(t);
40
return insn_len;
41
}
42
43
@@ -XXX,XX +XXX,XX @@ static int dec_adds_m(CPUCRISState *env, DisasContext *dc)
44
cris_cc_mask(dc, CC_MASK_NZVC);
45
cris_alu(dc, CC_OP_ADD, cpu_R[dc->op2], cpu_R[dc->op2], t[1], 4);
46
do_postinc(dc, memsize);
47
- cris_alu_m_free_temps(t);
48
return insn_len;
49
}
50
51
@@ -XXX,XX +XXX,XX @@ static int dec_subu_m(CPUCRISState *env, DisasContext *dc)
52
cris_cc_mask(dc, CC_MASK_NZVC);
53
cris_alu(dc, CC_OP_SUB, cpu_R[dc->op2], cpu_R[dc->op2], t[1], 4);
54
do_postinc(dc, memsize);
55
- cris_alu_m_free_temps(t);
56
return insn_len;
57
}
58
59
@@ -XXX,XX +XXX,XX @@ static int dec_subs_m(CPUCRISState *env, DisasContext *dc)
60
cris_cc_mask(dc, CC_MASK_NZVC);
61
cris_alu(dc, CC_OP_SUB, cpu_R[dc->op2], cpu_R[dc->op2], t[1], 4);
62
do_postinc(dc, memsize);
63
- cris_alu_m_free_temps(t);
64
return insn_len;
65
}
66
67
@@ -XXX,XX +XXX,XX @@ static int dec_movu_m(CPUCRISState *env, DisasContext *dc)
68
cris_cc_mask(dc, CC_MASK_NZ);
69
cris_alu(dc, CC_OP_MOVE, cpu_R[dc->op2], cpu_R[dc->op2], t[1], 4);
70
do_postinc(dc, memsize);
71
- cris_alu_m_free_temps(t);
72
return insn_len;
73
}
74
75
@@ -XXX,XX +XXX,XX @@ static int dec_cmpu_m(CPUCRISState *env, DisasContext *dc)
76
cris_cc_mask(dc, CC_MASK_NZVC);
77
cris_alu(dc, CC_OP_CMP, cpu_R[dc->op2], cpu_R[dc->op2], t[1], 4);
78
do_postinc(dc, memsize);
79
- cris_alu_m_free_temps(t);
80
return insn_len;
81
}
82
83
@@ -XXX,XX +XXX,XX @@ static int dec_cmps_m(CPUCRISState *env, DisasContext *dc)
84
cpu_R[dc->op2], cpu_R[dc->op2], t[1],
85
memsize_zz(dc));
86
do_postinc(dc, memsize);
87
- cris_alu_m_free_temps(t);
88
return insn_len;
89
}
90
91
@@ -XXX,XX +XXX,XX @@ static int dec_cmp_m(CPUCRISState *env, DisasContext *dc)
92
cpu_R[dc->op2], cpu_R[dc->op2], t[1],
93
memsize_zz(dc));
94
do_postinc(dc, memsize);
95
- cris_alu_m_free_temps(t);
96
return insn_len;
97
}
98
99
@@ -XXX,XX +XXX,XX @@ static int dec_test_m(CPUCRISState *env, DisasContext *dc)
100
cpu_R[dc->op2], t[1], c, memsize_zz(dc));
101
tcg_temp_free(c);
102
do_postinc(dc, memsize);
103
- cris_alu_m_free_temps(t);
104
return insn_len;
105
}
106
107
@@ -XXX,XX +XXX,XX @@ static int dec_and_m(CPUCRISState *env, DisasContext *dc)
108
cris_cc_mask(dc, CC_MASK_NZ);
109
cris_alu(dc, CC_OP_AND, cpu_R[dc->op2], t[0], t[1], memsize_zz(dc));
110
do_postinc(dc, memsize);
111
- cris_alu_m_free_temps(t);
112
return insn_len;
113
}
114
115
@@ -XXX,XX +XXX,XX @@ static int dec_add_m(CPUCRISState *env, DisasContext *dc)
116
cris_alu(dc, CC_OP_ADD,
117
cpu_R[dc->op2], t[0], t[1], memsize_zz(dc));
118
do_postinc(dc, memsize);
119
- cris_alu_m_free_temps(t);
120
return insn_len;
121
}
122
123
@@ -XXX,XX +XXX,XX @@ static int dec_addo_m(CPUCRISState *env, DisasContext *dc)
124
cris_cc_mask(dc, 0);
125
cris_alu(dc, CC_OP_ADD, cpu_R[R_ACR], t[0], t[1], 4);
126
do_postinc(dc, memsize);
127
- cris_alu_m_free_temps(t);
128
return insn_len;
129
}
130
131
@@ -XXX,XX +XXX,XX @@ static int dec_addc_mr(CPUCRISState *env, DisasContext *dc)
132
cris_cc_mask(dc, CC_MASK_NZVC);
133
cris_alu(dc, CC_OP_ADDC, cpu_R[dc->op2], t[0], t[1], 4);
134
do_postinc(dc, 4);
135
- cris_alu_m_free_temps(t);
136
return insn_len;
137
}
138
139
@@ -XXX,XX +XXX,XX @@ static int dec_sub_m(CPUCRISState *env, DisasContext *dc)
140
cris_cc_mask(dc, CC_MASK_NZVC);
141
cris_alu(dc, CC_OP_SUB, cpu_R[dc->op2], t[0], t[1], memsize);
142
do_postinc(dc, memsize);
143
- cris_alu_m_free_temps(t);
144
return insn_len;
145
}
146
147
@@ -XXX,XX +XXX,XX @@ static int dec_or_m(CPUCRISState *env, DisasContext *dc)
148
cris_alu(dc, CC_OP_OR,
149
cpu_R[dc->op2], t[0], t[1], memsize_zz(dc));
150
do_postinc(dc, memsize);
151
- cris_alu_m_free_temps(t);
152
return insn_len;
153
}
154
155
@@ -XXX,XX +XXX,XX @@ static int dec_move_mp(CPUCRISState *env, DisasContext *dc)
156
t_gen_mov_preg_TN(dc, dc->op2, t[1]);
157
158
do_postinc(dc, memsize);
159
- cris_alu_m_free_temps(t);
160
return insn_len;
161
}
162
163
diff --git a/target/cris/translate_v10.c.inc b/target/cris/translate_v10.c.inc
164
index XXXXXXX..XXXXXXX 100644
165
--- a/target/cris/translate_v10.c.inc
166
+++ b/target/cris/translate_v10.c.inc
167
@@ -XXX,XX +XXX,XX @@ static int dec10_ind_alu(CPUCRISState *env, DisasContext *dc,
168
dc->delayed_branch = 1;
169
return insn_len;
170
}
171
-
172
- cris_alu_m_free_temps(t);
173
-
174
return insn_len;
175
}
176
177
@@ -XXX,XX +XXX,XX @@ static unsigned int dec10_ind(CPUCRISState *env, DisasContext *dc)
178
cris_alu(dc, CC_OP_CMP, cpu_R[dc->dst],
179
t[0], c, size);
180
tcg_temp_free(c);
181
- cris_alu_m_free_temps(t);
182
break;
183
case CRISV10_IND_ADD:
184
LOG_DIS("add size=%d op=%d %d\n", size, dc->src, dc->dst);
185
--
186
2.34.1
diff view generated by jsdifflib
Deleted patch
1
This variable is not used, only allocated and freed.
2
1
3
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
5
---
6
target/cris/translate_v10.c.inc | 4 +---
7
1 file changed, 1 insertion(+), 3 deletions(-)
8
9
diff --git a/target/cris/translate_v10.c.inc b/target/cris/translate_v10.c.inc
10
index XXXXXXX..XXXXXXX 100644
11
--- a/target/cris/translate_v10.c.inc
12
+++ b/target/cris/translate_v10.c.inc
13
@@ -XXX,XX +XXX,XX @@ static unsigned int dec10_ind_move_r_m(DisasContext *dc, unsigned int size)
14
static unsigned int dec10_ind_move_m_pr(CPUCRISState *env, DisasContext *dc)
15
{
16
unsigned int insn_len = 2, rd = dc->dst;
17
- TCGv t, addr;
18
+ TCGv t;
19
20
LOG_DIS("move.%d $p%d, [$r%d]\n", dc->size, dc->dst, dc->src);
21
cris_lock_irq(dc);
22
23
- addr = tcg_temp_new();
24
t = tcg_temp_new();
25
insn_len += dec10_prep_move_m(env, dc, 0, 4, t);
26
if (rd == 15) {
27
@@ -XXX,XX +XXX,XX @@ static unsigned int dec10_ind_move_m_pr(CPUCRISState *env, DisasContext *dc)
28
tcg_gen_mov_tl(cpu_PR[rd], t);
29
dc->cpustate_changed = 1;
30
}
31
- tcg_temp_free(addr);
32
tcg_temp_free(t);
33
return insn_len;
34
}
35
--
36
2.34.1
diff view generated by jsdifflib
Deleted patch
1
Translators are no longer required to free tcg temporaries.
2
1
3
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
5
---
6
target/cris/translate.c | 70 ---------------------------------
7
target/cris/translate_v10.c.inc | 41 -------------------
8
2 files changed, 111 deletions(-)
9
10
diff --git a/target/cris/translate.c b/target/cris/translate.c
11
index XXXXXXX..XXXXXXX 100644
12
--- a/target/cris/translate.c
13
+++ b/target/cris/translate.c
14
@@ -XXX,XX +XXX,XX @@ static const int preg_sizes[] = {
15
do { \
16
TCGv tc = tcg_const_tl(c); \
17
t_gen_mov_env_TN(member, tc); \
18
- tcg_temp_free(tc); \
19
} while (0)
20
21
static inline void t_gen_mov_TN_preg(TCGv tn, int r)
22
@@ -XXX,XX +XXX,XX @@ static inline void t_gen_raise_exception(uint32_t index)
23
{
24
TCGv_i32 tmp = tcg_const_i32(index);
25
gen_helper_raise_exception(cpu_env, tmp);
26
- tcg_temp_free_i32(tmp);
27
}
28
29
static void t_gen_lsl(TCGv d, TCGv a, TCGv b)
30
@@ -XXX,XX +XXX,XX @@ static void t_gen_lsl(TCGv d, TCGv a, TCGv b)
31
tcg_gen_sar_tl(t0, t0, t_31);
32
tcg_gen_and_tl(t0, t0, d);
33
tcg_gen_xor_tl(d, d, t0);
34
- tcg_temp_free(t0);
35
- tcg_temp_free(t_31);
36
}
37
38
static void t_gen_lsr(TCGv d, TCGv a, TCGv b)
39
@@ -XXX,XX +XXX,XX @@ static void t_gen_lsr(TCGv d, TCGv a, TCGv b)
40
tcg_gen_sar_tl(t0, t0, t_31);
41
tcg_gen_and_tl(t0, t0, d);
42
tcg_gen_xor_tl(d, d, t0);
43
- tcg_temp_free(t0);
44
- tcg_temp_free(t_31);
45
}
46
47
static void t_gen_asr(TCGv d, TCGv a, TCGv b)
48
@@ -XXX,XX +XXX,XX @@ static void t_gen_asr(TCGv d, TCGv a, TCGv b)
49
tcg_gen_sub_tl(t0, t_31, b);
50
tcg_gen_sar_tl(t0, t0, t_31);
51
tcg_gen_or_tl(d, d, t0);
52
- tcg_temp_free(t0);
53
- tcg_temp_free(t_31);
54
}
55
56
static void t_gen_cris_dstep(TCGv d, TCGv a, TCGv b)
57
@@ -XXX,XX +XXX,XX @@ static void t_gen_cris_dstep(TCGv d, TCGv a, TCGv b)
58
tcg_gen_shli_tl(d, a, 1);
59
tcg_gen_sub_tl(t, d, b);
60
tcg_gen_movcond_tl(TCG_COND_GEU, d, d, b, t, d);
61
- tcg_temp_free(t);
62
}
63
64
static void t_gen_cris_mstep(TCGv d, TCGv a, TCGv b, TCGv ccs)
65
@@ -XXX,XX +XXX,XX @@ static void t_gen_cris_mstep(TCGv d, TCGv a, TCGv b, TCGv ccs)
66
tcg_gen_sari_tl(t, t, 31);
67
tcg_gen_and_tl(t, t, b);
68
tcg_gen_add_tl(d, d, t);
69
- tcg_temp_free(t);
70
}
71
72
/* Extended arithmetics on CRIS. */
73
@@ -XXX,XX +XXX,XX @@ static inline void t_gen_add_flag(TCGv d, int flag)
74
tcg_gen_shri_tl(c, c, flag);
75
}
76
tcg_gen_add_tl(d, d, c);
77
- tcg_temp_free(c);
78
}
79
80
static inline void t_gen_addx_carry(DisasContext *dc, TCGv d)
81
@@ -XXX,XX +XXX,XX @@ static inline void t_gen_addx_carry(DisasContext *dc, TCGv d)
82
/* C flag is already at bit 0. */
83
tcg_gen_andi_tl(c, c, C_FLAG);
84
tcg_gen_add_tl(d, d, c);
85
- tcg_temp_free(c);
86
}
87
}
88
89
@@ -XXX,XX +XXX,XX @@ static inline void t_gen_subx_carry(DisasContext *dc, TCGv d)
90
/* C flag is already at bit 0. */
91
tcg_gen_andi_tl(c, c, C_FLAG);
92
tcg_gen_sub_tl(d, d, c);
93
- tcg_temp_free(c);
94
}
95
}
96
97
@@ -XXX,XX +XXX,XX @@ static inline void t_gen_swapb(TCGv d, TCGv s)
98
tcg_gen_shri_tl(t, org_s, 8);
99
tcg_gen_andi_tl(t, t, 0x00ff00ff);
100
tcg_gen_or_tl(d, d, t);
101
- tcg_temp_free(t);
102
- tcg_temp_free(org_s);
103
}
104
105
/* Swap the halfwords of the s operand. */
106
@@ -XXX,XX +XXX,XX @@ static inline void t_gen_swapw(TCGv d, TCGv s)
107
tcg_gen_shli_tl(d, t, 16);
108
tcg_gen_shri_tl(t, t, 16);
109
tcg_gen_or_tl(d, d, t);
110
- tcg_temp_free(t);
111
}
112
113
/* Reverse the within each byte.
114
@@ -XXX,XX +XXX,XX @@ static void t_gen_swapr(TCGv d, TCGv s)
115
tcg_gen_andi_tl(t, t, bitrev[i].mask);
116
tcg_gen_or_tl(d, d, t);
117
}
118
- tcg_temp_free(t);
119
- tcg_temp_free(org_s);
120
}
121
122
static bool use_goto_tb(DisasContext *dc, target_ulong dest)
123
@@ -XXX,XX +XXX,XX @@ static void cris_alu(DisasContext *dc, int op,
124
}
125
tcg_gen_or_tl(d, d, tmp);
126
}
127
- if (tmp != d) {
128
- tcg_temp_free(tmp);
129
- }
130
}
131
132
static int arith_cc(DisasContext *dc)
133
@@ -XXX,XX +XXX,XX @@ static void gen_tst_cc (DisasContext *dc, TCGv cc, int cond)
134
tcg_gen_shli_tl(cc, tmp, 2);
135
tcg_gen_and_tl(cc, tmp, cc);
136
tcg_gen_andi_tl(cc, cc, Z_FLAG);
137
-
138
- tcg_temp_free(tmp);
139
}
140
break;
141
case CC_GE:
142
@@ -XXX,XX +XXX,XX @@ static void gen_tst_cc (DisasContext *dc, TCGv cc, int cond)
143
tcg_gen_xori_tl(n, n, 2);
144
tcg_gen_and_tl(cc, z, n);
145
tcg_gen_andi_tl(cc, cc, 2);
146
-
147
- tcg_temp_free(n);
148
- tcg_temp_free(z);
149
}
150
break;
151
case CC_LE:
152
@@ -XXX,XX +XXX,XX @@ static void gen_tst_cc (DisasContext *dc, TCGv cc, int cond)
153
tcg_gen_xor_tl(n, n, cpu_PR[PR_CCS]);
154
tcg_gen_or_tl(cc, z, n);
155
tcg_gen_andi_tl(cc, cc, 2);
156
-
157
- tcg_temp_free(n);
158
- tcg_temp_free(z);
159
}
160
break;
161
case CC_P:
162
@@ -XXX,XX +XXX,XX @@ static int dec_addq(CPUCRISState *env, DisasContext *dc)
163
c = tcg_const_tl(dc->op1);
164
cris_alu(dc, CC_OP_ADD,
165
cpu_R[dc->op2], cpu_R[dc->op2], c, 4);
166
- tcg_temp_free(c);
167
return 2;
168
}
169
static int dec_moveq(CPUCRISState *env, DisasContext *dc)
170
@@ -XXX,XX +XXX,XX @@ static int dec_subq(CPUCRISState *env, DisasContext *dc)
171
c = tcg_const_tl(dc->op1);
172
cris_alu(dc, CC_OP_SUB,
173
cpu_R[dc->op2], cpu_R[dc->op2], c, 4);
174
- tcg_temp_free(c);
175
return 2;
176
}
177
static int dec_cmpq(CPUCRISState *env, DisasContext *dc)
178
@@ -XXX,XX +XXX,XX @@ static int dec_cmpq(CPUCRISState *env, DisasContext *dc)
179
c = tcg_const_tl(imm);
180
cris_alu(dc, CC_OP_CMP,
181
cpu_R[dc->op2], cpu_R[dc->op2], c, 4);
182
- tcg_temp_free(c);
183
return 2;
184
}
185
static int dec_andq(CPUCRISState *env, DisasContext *dc)
186
@@ -XXX,XX +XXX,XX @@ static int dec_andq(CPUCRISState *env, DisasContext *dc)
187
c = tcg_const_tl(imm);
188
cris_alu(dc, CC_OP_AND,
189
cpu_R[dc->op2], cpu_R[dc->op2], c, 4);
190
- tcg_temp_free(c);
191
return 2;
192
}
193
static int dec_orq(CPUCRISState *env, DisasContext *dc)
194
@@ -XXX,XX +XXX,XX @@ static int dec_orq(CPUCRISState *env, DisasContext *dc)
195
c = tcg_const_tl(imm);
196
cris_alu(dc, CC_OP_OR,
197
cpu_R[dc->op2], cpu_R[dc->op2], c, 4);
198
- tcg_temp_free(c);
199
return 2;
200
}
201
static int dec_btstq(CPUCRISState *env, DisasContext *dc)
202
@@ -XXX,XX +XXX,XX @@ static int dec_btstq(CPUCRISState *env, DisasContext *dc)
203
cris_evaluate_flags(dc);
204
gen_helper_btst(cpu_PR[PR_CCS], cpu_env, cpu_R[dc->op2],
205
c, cpu_PR[PR_CCS]);
206
- tcg_temp_free(c);
207
cris_alu(dc, CC_OP_MOVE,
208
cpu_R[dc->op2], cpu_R[dc->op2], cpu_R[dc->op2], 4);
209
cris_update_cc_op(dc, CC_OP_FLAGS, 4);
210
@@ -XXX,XX +XXX,XX @@ static int dec_move_r(CPUCRISState *env, DisasContext *dc)
211
cris_alu(dc, CC_OP_MOVE,
212
cpu_R[dc->op2],
213
cpu_R[dc->op2], t0, size);
214
- tcg_temp_free(t0);
215
}
216
return 2;
217
}
218
@@ -XXX,XX +XXX,XX @@ static int dec_lz_r(CPUCRISState *env, DisasContext *dc)
219
t0 = tcg_temp_new();
220
dec_prep_alu_r(dc, dc->op1, dc->op2, 4, 0, cpu_R[dc->op2], t0);
221
cris_alu(dc, CC_OP_LZ, cpu_R[dc->op2], cpu_R[dc->op2], t0, 4);
222
- tcg_temp_free(t0);
223
return 2;
224
}
225
226
@@ -XXX,XX +XXX,XX @@ static int dec_bound_r(CPUCRISState *env, DisasContext *dc)
227
l0 = tcg_temp_new();
228
dec_prep_move_r(dc, dc->op1, dc->op2, size, 0, l0);
229
cris_alu(dc, CC_OP_BOUND, cpu_R[dc->op2], cpu_R[dc->op2], l0, 4);
230
- tcg_temp_free(l0);
231
return 2;
232
}
233
234
@@ -XXX,XX +XXX,XX @@ static int dec_swap_r(CPUCRISState *env, DisasContext *dc)
235
t_gen_swapr(t0, t0);
236
}
237
cris_alu(dc, CC_OP_MOVE, cpu_R[dc->op1], cpu_R[dc->op1], t0, 4);
238
- tcg_temp_free(t0);
239
return 2;
240
}
241
242
@@ -XXX,XX +XXX,XX @@ static int dec_addi_r(CPUCRISState *env, DisasContext *dc)
243
t0 = tcg_temp_new();
244
tcg_gen_shli_tl(t0, cpu_R[dc->op2], dc->zzsize);
245
tcg_gen_add_tl(cpu_R[dc->op1], cpu_R[dc->op1], t0);
246
- tcg_temp_free(t0);
247
return 2;
248
}
249
250
@@ -XXX,XX +XXX,XX @@ static int dec_addi_acr(CPUCRISState *env, DisasContext *dc)
251
t0 = tcg_temp_new();
252
tcg_gen_shli_tl(t0, cpu_R[dc->op2], dc->zzsize);
253
tcg_gen_add_tl(cpu_R[R_ACR], cpu_R[dc->op1], t0);
254
- tcg_temp_free(t0);
255
return 2;
256
}
257
258
@@ -XXX,XX +XXX,XX @@ static int dec_movu_r(CPUCRISState *env, DisasContext *dc)
259
t0 = tcg_temp_new();
260
dec_prep_move_r(dc, dc->op1, dc->op2, size, 0, t0);
261
cris_alu(dc, CC_OP_MOVE, cpu_R[dc->op2], cpu_R[dc->op2], t0, 4);
262
- tcg_temp_free(t0);
263
return 2;
264
}
265
266
@@ -XXX,XX +XXX,XX @@ static int dec_movs_r(CPUCRISState *env, DisasContext *dc)
267
t_gen_sext(t0, cpu_R[dc->op1], size);
268
cris_alu(dc, CC_OP_MOVE,
269
cpu_R[dc->op2], cpu_R[dc->op1], t0, 4);
270
- tcg_temp_free(t0);
271
return 2;
272
}
273
274
@@ -XXX,XX +XXX,XX @@ static int dec_addu_r(CPUCRISState *env, DisasContext *dc)
275
/* Size can only be qi or hi. */
276
t_gen_zext(t0, cpu_R[dc->op1], size);
277
cris_alu(dc, CC_OP_ADD, cpu_R[dc->op2], cpu_R[dc->op2], t0, 4);
278
- tcg_temp_free(t0);
279
return 2;
280
}
281
282
@@ -XXX,XX +XXX,XX @@ static int dec_adds_r(CPUCRISState *env, DisasContext *dc)
283
t_gen_sext(t0, cpu_R[dc->op1], size);
284
cris_alu(dc, CC_OP_ADD,
285
cpu_R[dc->op2], cpu_R[dc->op2], t0, 4);
286
- tcg_temp_free(t0);
287
return 2;
288
}
289
290
@@ -XXX,XX +XXX,XX @@ static int dec_subu_r(CPUCRISState *env, DisasContext *dc)
291
t_gen_zext(t0, cpu_R[dc->op1], size);
292
cris_alu(dc, CC_OP_SUB,
293
cpu_R[dc->op2], cpu_R[dc->op2], t0, 4);
294
- tcg_temp_free(t0);
295
return 2;
296
}
297
298
@@ -XXX,XX +XXX,XX @@ static int dec_subs_r(CPUCRISState *env, DisasContext *dc)
299
t_gen_sext(t0, cpu_R[dc->op1], size);
300
cris_alu(dc, CC_OP_SUB,
301
cpu_R[dc->op2], cpu_R[dc->op2], t0, 4);
302
- tcg_temp_free(t0);
303
return 2;
304
}
305
306
@@ -XXX,XX +XXX,XX @@ static int dec_move_rs(CPUCRISState *env, DisasContext *dc)
307
c2 = tcg_const_tl(dc->op2);
308
cris_cc_mask(dc, 0);
309
gen_helper_movl_sreg_reg(cpu_env, c2, c1);
310
- tcg_temp_free(c1);
311
- tcg_temp_free(c2);
312
return 2;
313
}
314
static int dec_move_sr(CPUCRISState *env, DisasContext *dc)
315
@@ -XXX,XX +XXX,XX @@ static int dec_move_sr(CPUCRISState *env, DisasContext *dc)
316
c2 = tcg_const_tl(dc->op2);
317
cris_cc_mask(dc, 0);
318
gen_helper_movl_reg_sreg(cpu_env, c1, c2);
319
- tcg_temp_free(c1);
320
- tcg_temp_free(c2);
321
return 2;
322
}
323
324
@@ -XXX,XX +XXX,XX @@ static int dec_move_rp(CPUCRISState *env, DisasContext *dc)
325
tcg_gen_andi_tl(t[0], t[0], 0x39f);
326
tcg_gen_andi_tl(t[1], cpu_PR[PR_CCS], ~0x39f);
327
tcg_gen_or_tl(t[0], t[1], t[0]);
328
- tcg_temp_free(t[1]);
329
}
330
} else {
331
tcg_gen_mov_tl(t[0], cpu_R[dc->op1]);
332
@@ -XXX,XX +XXX,XX @@ static int dec_move_rp(CPUCRISState *env, DisasContext *dc)
333
cris_update_cc_op(dc, CC_OP_FLAGS, 4);
334
dc->flags_uptodate = 1;
335
}
336
- tcg_temp_free(t[0]);
337
return 2;
338
}
339
static int dec_move_pr(CPUCRISState *env, DisasContext *dc)
340
@@ -XXX,XX +XXX,XX @@ static int dec_move_pr(CPUCRISState *env, DisasContext *dc)
341
cris_alu(dc, CC_OP_MOVE,
342
cpu_R[dc->op1], cpu_R[dc->op1], t0,
343
preg_sizes[dc->op2]);
344
- tcg_temp_free(t0);
345
}
346
return 2;
347
}
348
@@ -XXX,XX +XXX,XX @@ static int dec_move_mr(CPUCRISState *env, DisasContext *dc)
349
cris_cc_mask(dc, CC_MASK_NZ);
350
cris_alu(dc, CC_OP_MOVE,
351
cpu_R[dc->op2], cpu_R[dc->op2], t0, memsize);
352
- tcg_temp_free(t0);
353
}
354
do_postinc(dc, memsize);
355
return insn_len;
356
@@ -XXX,XX +XXX,XX @@ static int dec_test_m(CPUCRISState *env, DisasContext *dc)
357
c = tcg_const_tl(0);
358
cris_alu(dc, CC_OP_CMP,
359
cpu_R[dc->op2], t[1], c, memsize_zz(dc));
360
- tcg_temp_free(c);
361
do_postinc(dc, memsize);
362
return insn_len;
363
}
364
@@ -XXX,XX +XXX,XX @@ static int dec_bound_m(CPUCRISState *env, DisasContext *dc)
365
cris_cc_mask(dc, CC_MASK_NZ);
366
cris_alu(dc, CC_OP_BOUND, cpu_R[dc->op2], l[0], l[1], 4);
367
do_postinc(dc, memsize);
368
- tcg_temp_free(l[0]);
369
- tcg_temp_free(l[1]);
370
return insn_len;
371
}
372
373
@@ -XXX,XX +XXX,XX @@ static int dec_move_pm(CPUCRISState *env, DisasContext *dc)
374
t_gen_mov_TN_preg(t0, dc->op2);
375
cris_flush_cc_state(dc);
376
gen_store(dc, cpu_R[dc->op1], t0, memsize);
377
- tcg_temp_free(t0);
378
379
cris_cc_mask(dc, 0);
380
if (dc->postinc) {
381
@@ -XXX,XX +XXX,XX @@ static int dec_movem_mr(CPUCRISState *env, DisasContext *dc)
382
} else {
383
tmp32 = NULL;
384
}
385
- tcg_temp_free(addr);
386
387
for (i = 0; i < (nr >> 1); i++) {
388
tcg_gen_extrl_i64_i32(cpu_R[i * 2], tmp[i]);
389
tcg_gen_shri_i64(tmp[i], tmp[i], 32);
390
tcg_gen_extrl_i64_i32(cpu_R[i * 2 + 1], tmp[i]);
391
- tcg_temp_free_i64(tmp[i]);
392
}
393
if (nr & 1) {
394
tcg_gen_mov_tl(cpu_R[dc->op2], tmp32);
395
- tcg_temp_free(tmp32);
396
}
397
398
/* writeback the updated pointer value. */
399
@@ -XXX,XX +XXX,XX @@ static int dec_movem_rm(CPUCRISState *env, DisasContext *dc)
400
tcg_gen_mov_tl(cpu_R[dc->op1], addr);
401
}
402
cris_cc_mask(dc, 0);
403
- tcg_temp_free(tmp);
404
- tcg_temp_free(addr);
405
return 2;
406
}
407
408
@@ -XXX,XX +XXX,XX @@ static int dec_jas_r(CPUCRISState *env, DisasContext *dc)
409
}
410
c = tcg_const_tl(dc->pc + 4);
411
t_gen_mov_preg_TN(dc, dc->op2, c);
412
- tcg_temp_free(c);
413
414
cris_prepare_jmp(dc, JMP_INDIRECT);
415
return 2;
416
@@ -XXX,XX +XXX,XX @@ static int dec_jas_im(CPUCRISState *env, DisasContext *dc)
417
c = tcg_const_tl(dc->pc + 8);
418
/* Store the return address in Pd. */
419
t_gen_mov_preg_TN(dc, dc->op2, c);
420
- tcg_temp_free(c);
421
422
dc->jmp_pc = imm;
423
cris_prepare_jmp(dc, JMP_DIRECT);
424
@@ -XXX,XX +XXX,XX @@ static int dec_jasc_im(CPUCRISState *env, DisasContext *dc)
425
c = tcg_const_tl(dc->pc + 8 + 4);
426
/* Store the return address in Pd. */
427
t_gen_mov_preg_TN(dc, dc->op2, c);
428
- tcg_temp_free(c);
429
430
dc->jmp_pc = imm;
431
cris_prepare_jmp(dc, JMP_DIRECT);
432
@@ -XXX,XX +XXX,XX @@ static int dec_jasc_r(CPUCRISState *env, DisasContext *dc)
433
tcg_gen_mov_tl(env_btarget, cpu_R[dc->op1]);
434
c = tcg_const_tl(dc->pc + 4 + 4);
435
t_gen_mov_preg_TN(dc, dc->op2, c);
436
- tcg_temp_free(c);
437
cris_prepare_jmp(dc, JMP_INDIRECT);
438
return 2;
439
}
440
@@ -XXX,XX +XXX,XX @@ static int dec_bas_im(CPUCRISState *env, DisasContext *dc)
441
c = tcg_const_tl(dc->pc + 8);
442
/* Store the return address in Pd. */
443
t_gen_mov_preg_TN(dc, dc->op2, c);
444
- tcg_temp_free(c);
445
446
dc->jmp_pc = dc->pc + simm;
447
cris_prepare_jmp(dc, JMP_DIRECT);
448
@@ -XXX,XX +XXX,XX @@ static int dec_basc_im(CPUCRISState *env, DisasContext *dc)
449
c = tcg_const_tl(dc->pc + 12);
450
/* Store the return address in Pd. */
451
t_gen_mov_preg_TN(dc, dc->op2, c);
452
- tcg_temp_free(c);
453
454
dc->jmp_pc = dc->pc + simm;
455
cris_prepare_jmp(dc, JMP_DIRECT);
456
diff --git a/target/cris/translate_v10.c.inc b/target/cris/translate_v10.c.inc
457
index XXXXXXX..XXXXXXX 100644
458
--- a/target/cris/translate_v10.c.inc
459
+++ b/target/cris/translate_v10.c.inc
460
@@ -XXX,XX +XXX,XX @@ static void gen_store_v10_conditional(DisasContext *dc, TCGv addr, TCGv val,
461
gen_set_label(l1);
462
tcg_gen_shri_tl(t1, t1, 1); /* shift F to P position */
463
tcg_gen_or_tl(cpu_PR[PR_CCS], cpu_PR[PR_CCS], t1); /*P=F*/
464
- tcg_temp_free(t1);
465
- tcg_temp_free(tval);
466
- tcg_temp_free(taddr);
467
}
468
469
static void gen_store_v10(DisasContext *dc, TCGv addr, TCGv val,
470
@@ -XXX,XX +XXX,XX @@ static int dec10_prep_move_m(CPUCRISState *env, DisasContext *dc,
471
else
472
t_gen_zext(dst, dst, memsize);
473
insn_len += crisv10_post_memaddr(dc, memsize);
474
- tcg_temp_free(addr);
475
}
476
477
if (dc->mode == CRISV10_MODE_INDIRECT && (dc->tb_flags & PFIX_FLAG)) {
478
@@ -XXX,XX +XXX,XX @@ static unsigned int dec10_quick_imm(DisasContext *dc)
479
c = tcg_const_tl(simm);
480
cris_alu(dc, CC_OP_MOVE, cpu_R[dc->dst],
481
cpu_R[dc->dst], c, 4);
482
- tcg_temp_free(c);
483
break;
484
case CRISV10_QIMM_CMPQ:
485
LOG_DIS("cmpq %d, $r%d\n", simm, dc->dst);
486
@@ -XXX,XX +XXX,XX @@ static unsigned int dec10_quick_imm(DisasContext *dc)
487
c = tcg_const_tl(simm);
488
cris_alu(dc, CC_OP_CMP, cpu_R[dc->dst],
489
cpu_R[dc->dst], c, 4);
490
- tcg_temp_free(c);
491
break;
492
case CRISV10_QIMM_ADDQ:
493
LOG_DIS("addq %d, $r%d\n", imm, dc->dst);
494
@@ -XXX,XX +XXX,XX @@ static unsigned int dec10_quick_imm(DisasContext *dc)
495
c = tcg_const_tl(imm);
496
cris_alu(dc, CC_OP_ADD, cpu_R[dc->dst],
497
cpu_R[dc->dst], c, 4);
498
- tcg_temp_free(c);
499
break;
500
case CRISV10_QIMM_ANDQ:
501
LOG_DIS("andq %d, $r%d\n", simm, dc->dst);
502
@@ -XXX,XX +XXX,XX @@ static unsigned int dec10_quick_imm(DisasContext *dc)
503
c = tcg_const_tl(simm);
504
cris_alu(dc, CC_OP_AND, cpu_R[dc->dst],
505
cpu_R[dc->dst], c, 4);
506
- tcg_temp_free(c);
507
break;
508
case CRISV10_QIMM_ASHQ:
509
LOG_DIS("ashq %d, $r%d\n", simm, dc->dst);
510
@@ -XXX,XX +XXX,XX @@ static unsigned int dec10_quick_imm(DisasContext *dc)
511
gen_helper_btst(cpu_PR[PR_CCS], cpu_env, cpu_R[dc->dst],
512
c, cpu_PR[PR_CCS]);
513
}
514
- tcg_temp_free(c);
515
break;
516
case CRISV10_QIMM_LSHQ:
517
LOG_DIS("lshq %d, $r%d\n", simm, dc->dst);
518
@@ -XXX,XX +XXX,XX @@ static unsigned int dec10_quick_imm(DisasContext *dc)
519
c = tcg_const_tl(imm);
520
cris_alu(dc, op, cpu_R[dc->dst],
521
cpu_R[dc->dst], c, 4);
522
- tcg_temp_free(c);
523
break;
524
case CRISV10_QIMM_SUBQ:
525
LOG_DIS("subq %d, $r%d\n", imm, dc->dst);
526
@@ -XXX,XX +XXX,XX @@ static unsigned int dec10_quick_imm(DisasContext *dc)
527
c = tcg_const_tl(imm);
528
cris_alu(dc, CC_OP_SUB, cpu_R[dc->dst],
529
cpu_R[dc->dst], c, 4);
530
- tcg_temp_free(c);
531
break;
532
case CRISV10_QIMM_ORQ:
533
LOG_DIS("andq %d, $r%d\n", simm, dc->dst);
534
@@ -XXX,XX +XXX,XX @@ static unsigned int dec10_quick_imm(DisasContext *dc)
535
c = tcg_const_tl(simm);
536
cris_alu(dc, CC_OP_OR, cpu_R[dc->dst],
537
cpu_R[dc->dst], c, 4);
538
- tcg_temp_free(c);
539
break;
540
541
case CRISV10_QIMM_BCC_R0:
542
@@ -XXX,XX +XXX,XX @@ static void dec10_reg_alu(DisasContext *dc, int op, int size, int sext)
543
544
assert(dc->dst != 15);
545
cris_alu(dc, op, cpu_R[dc->dst], t[0], t[1], size);
546
- tcg_temp_free(t[0]);
547
- tcg_temp_free(t[1]);
548
}
549
550
static void dec10_reg_bound(DisasContext *dc, int size)
551
@@ -XXX,XX +XXX,XX @@ static void dec10_reg_bound(DisasContext *dc, int size)
552
t = tcg_temp_new();
553
t_gen_zext(t, cpu_R[dc->src], size);
554
cris_alu(dc, CC_OP_BOUND, cpu_R[dc->dst], cpu_R[dc->dst], t, 4);
555
- tcg_temp_free(t);
556
}
557
558
static void dec10_reg_mul(DisasContext *dc, int size, int sext)
559
@@ -XXX,XX +XXX,XX @@ static void dec10_reg_mul(DisasContext *dc, int size, int sext)
560
t[0], t[1], cpu_R[dc->dst], cpu_R[dc->src]);
561
562
cris_alu(dc, op, cpu_R[dc->dst], t[0], t[1], 4);
563
-
564
- tcg_temp_free(t[0]);
565
- tcg_temp_free(t[1]);
566
}
567
568
569
@@ -XXX,XX +XXX,XX @@ static void dec10_reg_movs(DisasContext *dc)
570
t_gen_zext(t, cpu_R[dc->src], size);
571
572
cris_alu(dc, CC_OP_MOVE, cpu_R[dc->dst], cpu_R[dc->dst], t, 4);
573
- tcg_temp_free(t);
574
}
575
576
static void dec10_reg_alux(DisasContext *dc, int op)
577
@@ -XXX,XX +XXX,XX @@ static void dec10_reg_alux(DisasContext *dc, int op)
578
t_gen_zext(t, cpu_R[dc->src], size);
579
580
cris_alu(dc, op, cpu_R[dc->dst], cpu_R[dc->dst], t, 4);
581
- tcg_temp_free(t);
582
}
583
584
static void dec10_reg_mov_pr(DisasContext *dc)
585
@@ -XXX,XX +XXX,XX @@ static void dec10_reg_abs(DisasContext *dc)
586
tcg_gen_sub_tl(t0, cpu_R[dc->dst], t0);
587
588
cris_alu(dc, CC_OP_MOVE, cpu_R[dc->dst], cpu_R[dc->dst], t0, 4);
589
- tcg_temp_free(t0);
590
}
591
592
static void dec10_reg_swap(DisasContext *dc)
593
@@ -XXX,XX +XXX,XX @@ static void dec10_reg_swap(DisasContext *dc)
594
if (dc->dst & 1)
595
t_gen_swapr(t0, t0);
596
cris_alu(dc, CC_OP_MOVE, cpu_R[dc->src], cpu_R[dc->src], t0, 4);
597
- tcg_temp_free(t0);
598
}
599
600
static void dec10_reg_scc(DisasContext *dc)
601
@@ -XXX,XX +XXX,XX @@ static unsigned int dec10_reg(DisasContext *dc)
602
LOG_DIS("addi r%d r%d size=%d\n", dc->src, dc->dst, dc->size);
603
tcg_gen_shli_tl(t, cpu_R[dc->dst], dc->size & 3);
604
tcg_gen_add_tl(cpu_R[dc->src], cpu_R[dc->src], t);
605
- tcg_temp_free(t);
606
break;
607
case CRISV10_REG_LSL:
608
LOG_DIS("lsl $r%d, $r%d sz=%d\n", dc->src, dc->dst, size);
609
@@ -XXX,XX +XXX,XX @@ static unsigned int dec10_reg(DisasContext *dc)
610
} else {
611
tcg_gen_add_tl(cpu_PR[PR_PREFIX], cpu_R[dc->src], t);
612
}
613
- tcg_temp_free(t);
614
cris_set_prefix(dc);
615
break;
616
617
@@ -XXX,XX +XXX,XX @@ static unsigned int dec10_ind_move_m_r(CPUCRISState *env, DisasContext *dc,
618
dc->delayed_branch = 1;
619
}
620
621
- tcg_temp_free(t);
622
return insn_len;
623
}
624
625
@@ -XXX,XX +XXX,XX @@ static unsigned int dec10_ind_move_r_m(DisasContext *dc, unsigned int size)
626
crisv10_prepare_memaddr(dc, addr, size);
627
gen_store_v10(dc, addr, cpu_R[dc->dst], size);
628
insn_len += crisv10_post_memaddr(dc, size);
629
- tcg_temp_free(addr);
630
631
return insn_len;
632
}
633
@@ -XXX,XX +XXX,XX @@ static unsigned int dec10_ind_move_m_pr(CPUCRISState *env, DisasContext *dc)
634
tcg_gen_mov_tl(cpu_PR[rd], t);
635
dc->cpustate_changed = 1;
636
}
637
- tcg_temp_free(t);
638
return insn_len;
639
}
640
641
@@ -XXX,XX +XXX,XX @@ static unsigned int dec10_ind_move_pr_m(DisasContext *dc)
642
cris_evaluate_flags(dc);
643
tcg_gen_andi_tl(t0, cpu_PR[PR_CCS], ~PFIX_FLAG);
644
gen_store_v10(dc, addr, t0, size);
645
- tcg_temp_free(t0);
646
} else {
647
gen_store_v10(dc, addr, cpu_PR[dc->dst], size);
648
}
649
insn_len += crisv10_post_memaddr(dc, size);
650
- tcg_temp_free(addr);
651
cris_lock_irq(dc);
652
653
return insn_len;
654
@@ -XXX,XX +XXX,XX @@ static void dec10_movem_r_m(DisasContext *dc)
655
if (!pfix && dc->mode == CRISV10_MODE_AUTOINC) {
656
tcg_gen_mov_tl(cpu_R[dc->src], addr);
657
}
658
- tcg_temp_free(addr);
659
- tcg_temp_free(t0);
660
}
661
662
static void dec10_movem_m_r(DisasContext *dc)
663
@@ -XXX,XX +XXX,XX @@ static void dec10_movem_m_r(DisasContext *dc)
664
if (!pfix && dc->mode == CRISV10_MODE_AUTOINC) {
665
tcg_gen_mov_tl(cpu_R[dc->src], addr);
666
}
667
- tcg_temp_free(addr);
668
- tcg_temp_free(t0);
669
}
670
671
static int dec10_ind_alu(CPUCRISState *env, DisasContext *dc,
672
@@ -XXX,XX +XXX,XX @@ static int dec10_ind_bound(CPUCRISState *env, DisasContext *dc,
673
dc->delayed_branch = 1;
674
}
675
676
- tcg_temp_free(t);
677
return insn_len;
678
}
679
680
@@ -XXX,XX +XXX,XX @@ static int dec10_alux_m(CPUCRISState *env, DisasContext *dc, int op)
681
dc->delayed_branch = 1;
682
}
683
684
- tcg_temp_free(t);
685
return insn_len;
686
}
687
688
@@ -XXX,XX +XXX,XX @@ static unsigned int dec10_ind(CPUCRISState *env, DisasContext *dc)
689
c = tcg_const_tl(0);
690
cris_alu(dc, CC_OP_CMP, cpu_R[dc->dst],
691
t[0], c, size);
692
- tcg_temp_free(c);
693
break;
694
case CRISV10_IND_ADD:
695
LOG_DIS("add size=%d op=%d %d\n", size, dc->src, dc->dst);
696
@@ -XXX,XX +XXX,XX @@ static unsigned int dec10_ind(CPUCRISState *env, DisasContext *dc)
697
698
c = tcg_const_tl(dc->pc + insn_len);
699
t_gen_mov_preg_TN(dc, dc->dst, c);
700
- tcg_temp_free(c);
701
dc->jmp_pc = imm;
702
cris_prepare_jmp(dc, JMP_DIRECT);
703
dc->delayed_branch--; /* v10 has no dslot here. */
704
@@ -XXX,XX +XXX,XX @@ static unsigned int dec10_ind(CPUCRISState *env, DisasContext *dc)
705
tcg_gen_movi_tl(env_pc, dc->pc + 2);
706
c = tcg_const_tl(dc->src + 2);
707
t_gen_mov_env_TN(trap_vector, c);
708
- tcg_temp_free(c);
709
t_gen_raise_exception(EXCP_BREAK);
710
dc->base.is_jmp = DISAS_NORETURN;
711
return insn_len;
712
@@ -XXX,XX +XXX,XX @@ static unsigned int dec10_ind(CPUCRISState *env, DisasContext *dc)
713
t[0] = tcg_temp_new();
714
c = tcg_const_tl(dc->pc + insn_len);
715
t_gen_mov_preg_TN(dc, dc->dst, c);
716
- tcg_temp_free(c);
717
crisv10_prepare_memaddr(dc, t[0], size);
718
gen_load(dc, env_btarget, t[0], 4, 0);
719
insn_len += crisv10_post_memaddr(dc, size);
720
cris_prepare_jmp(dc, JMP_INDIRECT);
721
dc->delayed_branch--; /* v10 has no dslot here. */
722
- tcg_temp_free(t[0]);
723
}
724
break;
725
726
@@ -XXX,XX +XXX,XX @@ static unsigned int dec10_ind(CPUCRISState *env, DisasContext *dc)
727
tcg_gen_mov_tl(env_btarget, cpu_R[dc->src]);
728
c = tcg_const_tl(dc->pc + insn_len);
729
t_gen_mov_preg_TN(dc, dc->dst, c);
730
- tcg_temp_free(c);
731
cris_prepare_jmp(dc, JMP_INDIRECT);
732
dc->delayed_branch--; /* v10 has no dslot here. */
733
break;
734
--
735
2.34.1
diff view generated by jsdifflib
Deleted patch
1
Translators are no longer required to free tcg temporaries.
2
1
3
Reviewed-by: Taylor Simpson <tsimpson@quicinc.com>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
5
---
6
target/hexagon/gen_tcg.h | 29 ------------------
7
target/hexagon/gen_tcg_hvx.h | 15 ----------
8
target/hexagon/macros.h | 7 -----
9
target/hexagon/genptr.c | 58 ------------------------------------
10
target/hexagon/translate.c | 7 -----
11
target/hexagon/README | 5 ----
12
6 files changed, 121 deletions(-)
13
14
diff --git a/target/hexagon/gen_tcg.h b/target/hexagon/gen_tcg.h
15
index XXXXXXX..XXXXXXX 100644
16
--- a/target/hexagon/gen_tcg.h
17
+++ b/target/hexagon/gen_tcg.h
18
@@ -XXX,XX +XXX,XX @@
19
tcg_gen_mov_tl(EA, RxV); \
20
gen_read_ireg(ireg, MuV, (SHIFT)); \
21
gen_helper_fcircadd(RxV, RxV, ireg, MuV, hex_gpr[HEX_REG_CS0 + MuN]); \
22
- tcg_temp_free(ireg); \
23
} while (0)
24
25
/* Instructions with multiple definitions */
26
@@ -XXX,XX +XXX,XX @@
27
gen_read_ireg(ireg, MuV, SHIFT); \
28
gen_helper_fcircadd(RxV, RxV, ireg, MuV, hex_gpr[HEX_REG_CS0 + MuN]); \
29
LOAD; \
30
- tcg_temp_free(ireg); \
31
} while (0)
32
33
#define fGEN_TCG_L2_loadrub_pcr(SHORTCODE) \
34
@@ -XXX,XX +XXX,XX @@
35
for (int i = 0; i < 2; i++) { \
36
gen_set_half(i, RdV, gen_get_byte(byte, i, tmp, (SIGN))); \
37
} \
38
- tcg_temp_free(tmp); \
39
- tcg_temp_free(byte); \
40
} while (0)
41
42
#define fGEN_TCG_L2_loadbzw2_io(SHORTCODE) \
43
@@ -XXX,XX +XXX,XX @@
44
for (int i = 0; i < 4; i++) { \
45
gen_set_half_i64(i, RddV, gen_get_byte(byte, i, tmp, (SIGN))); \
46
} \
47
- tcg_temp_free(tmp); \
48
- tcg_temp_free(byte); \
49
} while (0)
50
51
#define fGEN_TCG_L2_loadbzw4_io(SHORTCODE) \
52
@@ -XXX,XX +XXX,XX @@
53
tcg_gen_extu_i32_i64(tmp_i64, tmp); \
54
tcg_gen_shri_i64(RyyV, RyyV, 16); \
55
tcg_gen_deposit_i64(RyyV, RyyV, tmp_i64, 48, 16); \
56
- tcg_temp_free(tmp); \
57
- tcg_temp_free_i64(tmp_i64); \
58
} while (0)
59
60
#define fGEN_TCG_L4_loadalignh_ur(SHORTCODE) \
61
@@ -XXX,XX +XXX,XX @@
62
tcg_gen_extu_i32_i64(tmp_i64, tmp); \
63
tcg_gen_shri_i64(RyyV, RyyV, 8); \
64
tcg_gen_deposit_i64(RyyV, RyyV, tmp_i64, 56, 8); \
65
- tcg_temp_free(tmp); \
66
- tcg_temp_free_i64(tmp_i64); \
67
} while (0)
68
69
#define fGEN_TCG_L2_loadalignb_io(SHORTCODE) \
70
@@ -XXX,XX +XXX,XX @@
71
tcg_gen_brcondi_tl(TCG_COND_EQ, LSB, 0, label); \
72
fLOAD(1, SIZE, SIGN, EA, RdV); \
73
gen_set_label(label); \
74
- tcg_temp_free(LSB); \
75
} while (0)
76
77
#define fGEN_TCG_L2_ploadrubt_pi(SHORTCODE) \
78
@@ -XXX,XX +XXX,XX @@
79
tcg_gen_brcondi_tl(TCG_COND_EQ, LSB, 0, label); \
80
fLOAD(1, 8, u, EA, RddV); \
81
gen_set_label(label); \
82
- tcg_temp_free(LSB); \
83
} while (0)
84
85
#define fGEN_TCG_L2_ploadrdt_pi(SHORTCODE) \
86
@@ -XXX,XX +XXX,XX @@
87
TCGv HALF = tcg_temp_new(); \
88
TCGv BYTE = tcg_temp_new(); \
89
SHORTCODE; \
90
- tcg_temp_free(HALF); \
91
- tcg_temp_free(BYTE); \
92
} while (0)
93
94
#define fGEN_TCG_STORE_pcr(SHIFT, STORE) \
95
@@ -XXX,XX +XXX,XX @@
96
gen_read_ireg(ireg, MuV, SHIFT); \
97
gen_helper_fcircadd(RxV, RxV, ireg, MuV, hex_gpr[HEX_REG_CS0 + MuN]); \
98
STORE; \
99
- tcg_temp_free(ireg); \
100
- tcg_temp_free(HALF); \
101
- tcg_temp_free(BYTE); \
102
} while (0)
103
104
#define fGEN_TCG_S2_storerb_pbr(SHORTCODE) \
105
@@ -XXX,XX +XXX,XX @@
106
gen_helper_sfrecipa(tmp, cpu_env, RsV, RtV); \
107
tcg_gen_extrh_i64_i32(RdV, tmp); \
108
tcg_gen_extrl_i64_i32(PeV, tmp); \
109
- tcg_temp_free_i64(tmp); \
110
} while (0)
111
112
/*
113
@@ -XXX,XX +XXX,XX @@
114
gen_helper_sfinvsqrta(tmp, cpu_env, RsV); \
115
tcg_gen_extrh_i64_i32(RdV, tmp); \
116
tcg_gen_extrl_i64_i32(PeV, tmp); \
117
- tcg_temp_free_i64(tmp); \
118
} while (0)
119
120
/*
121
@@ -XXX,XX +XXX,XX @@
122
tcg_gen_add2_i64(RddV, carry, RddV, carry, RttV, zero); \
123
tcg_gen_extrl_i64_i32(PxV, carry); \
124
gen_8bitsof(PxV, PxV); \
125
- tcg_temp_free_i64(carry); \
126
} while (0)
127
128
/* r5:4 = sub(r1:0, r3:2, p1):carry */
129
@@ -XXX,XX +XXX,XX @@
130
tcg_gen_add2_i64(RddV, carry, RddV, carry, not_RttV, zero); \
131
tcg_gen_extrl_i64_i32(PxV, carry); \
132
gen_8bitsof(PxV, PxV); \
133
- tcg_temp_free_i64(carry); \
134
- tcg_temp_free_i64(not_RttV); \
135
} while (0)
136
137
/*
138
@@ -XXX,XX +XXX,XX @@
139
tcg_gen_umin_tl(tmp, left, right); \
140
gen_set_byte_i64(i, RddV, tmp); \
141
} \
142
- tcg_temp_free(left); \
143
- tcg_temp_free(right); \
144
- tcg_temp_free(tmp); \
145
} while (0)
146
147
#define fGEN_TCG_J2_call(SHORTCODE) \
148
@@ -XXX,XX +XXX,XX @@
149
TCGv LSB = tcg_temp_new(); \
150
COND; \
151
gen_cond_jump(ctx, TCG_COND_EQ, LSB, riV); \
152
- tcg_temp_free(LSB); \
153
} while (0)
154
#define fGEN_TCG_cond_jumpf(COND) \
155
do { \
156
TCGv LSB = tcg_temp_new(); \
157
COND; \
158
gen_cond_jump(ctx, TCG_COND_NE, LSB, riV); \
159
- tcg_temp_free(LSB); \
160
} while (0)
161
162
#define fGEN_TCG_J2_jumpt(SHORTCODE) \
163
@@ -XXX,XX +XXX,XX @@
164
TCGv LSB = tcg_temp_new(); \
165
COND; \
166
gen_cond_jumpr(ctx, RsV, TCG_COND_EQ, LSB); \
167
- tcg_temp_free(LSB); \
168
} while (0)
169
#define fGEN_TCG_cond_jumprf(COND) \
170
do { \
171
TCGv LSB = tcg_temp_new(); \
172
COND; \
173
gen_cond_jumpr(ctx, RsV, TCG_COND_NE, LSB); \
174
- tcg_temp_free(LSB); \
175
} while (0)
176
177
#define fGEN_TCG_J2_jumprt(SHORTCODE) \
178
diff --git a/target/hexagon/gen_tcg_hvx.h b/target/hexagon/gen_tcg_hvx.h
179
index XXXXXXX..XXXXXXX 100644
180
--- a/target/hexagon/gen_tcg_hvx.h
181
+++ b/target/hexagon/gen_tcg_hvx.h
182
@@ -XXX,XX +XXX,XX @@ static inline void assert_vhist_tmp(DisasContext *ctx)
183
TCGLabel *end_label = gen_new_label(); \
184
tcg_gen_andi_tl(lsb, PsV, 1); \
185
tcg_gen_brcondi_tl(TCG_COND_NE, lsb, PRED, false_label); \
186
- tcg_temp_free(lsb); \
187
tcg_gen_gvec_mov(MO_64, VdV_off, VuV_off, \
188
sizeof(MMVector), sizeof(MMVector)); \
189
tcg_gen_br(end_label); \
190
@@ -XXX,XX +XXX,XX @@ static inline void assert_vhist_tmp(DisasContext *ctx)
191
tcg_gen_andi_tl(shift, RtV, 15); \
192
tcg_gen_gvec_sars(MO_16, VdV_off, VuV_off, shift, \
193
sizeof(MMVector), sizeof(MMVector)); \
194
- tcg_temp_free(shift); \
195
} while (0)
196
197
#define fGEN_TCG_V6_vasrh_acc(SHORTCODE) \
198
@@ -XXX,XX +XXX,XX @@ static inline void assert_vhist_tmp(DisasContext *ctx)
199
sizeof(MMVector), sizeof(MMVector)); \
200
tcg_gen_gvec_add(MO_16, VxV_off, VxV_off, tmpoff, \
201
sizeof(MMVector), sizeof(MMVector)); \
202
- tcg_temp_free(shift); \
203
} while (0)
204
205
#define fGEN_TCG_V6_vasrw(SHORTCODE) \
206
@@ -XXX,XX +XXX,XX @@ static inline void assert_vhist_tmp(DisasContext *ctx)
207
tcg_gen_andi_tl(shift, RtV, 31); \
208
tcg_gen_gvec_sars(MO_32, VdV_off, VuV_off, shift, \
209
sizeof(MMVector), sizeof(MMVector)); \
210
- tcg_temp_free(shift); \
211
} while (0)
212
213
#define fGEN_TCG_V6_vasrw_acc(SHORTCODE) \
214
@@ -XXX,XX +XXX,XX @@ static inline void assert_vhist_tmp(DisasContext *ctx)
215
sizeof(MMVector), sizeof(MMVector)); \
216
tcg_gen_gvec_add(MO_32, VxV_off, VxV_off, tmpoff, \
217
sizeof(MMVector), sizeof(MMVector)); \
218
- tcg_temp_free(shift); \
219
} while (0)
220
221
#define fGEN_TCG_V6_vlsrb(SHORTCODE) \
222
@@ -XXX,XX +XXX,XX @@ static inline void assert_vhist_tmp(DisasContext *ctx)
223
tcg_gen_andi_tl(shift, RtV, 7); \
224
tcg_gen_gvec_shrs(MO_8, VdV_off, VuV_off, shift, \
225
sizeof(MMVector), sizeof(MMVector)); \
226
- tcg_temp_free(shift); \
227
} while (0)
228
229
#define fGEN_TCG_V6_vlsrh(SHORTCODE) \
230
@@ -XXX,XX +XXX,XX @@ static inline void assert_vhist_tmp(DisasContext *ctx)
231
tcg_gen_andi_tl(shift, RtV, 15); \
232
tcg_gen_gvec_shrs(MO_16, VdV_off, VuV_off, shift, \
233
sizeof(MMVector), sizeof(MMVector)); \
234
- tcg_temp_free(shift); \
235
} while (0)
236
237
#define fGEN_TCG_V6_vlsrw(SHORTCODE) \
238
@@ -XXX,XX +XXX,XX @@ static inline void assert_vhist_tmp(DisasContext *ctx)
239
tcg_gen_andi_tl(shift, RtV, 31); \
240
tcg_gen_gvec_shrs(MO_32, VdV_off, VuV_off, shift, \
241
sizeof(MMVector), sizeof(MMVector)); \
242
- tcg_temp_free(shift); \
243
} while (0)
244
245
/* Vector shift left - various forms */
246
@@ -XXX,XX +XXX,XX @@ static inline void assert_vhist_tmp(DisasContext *ctx)
247
tcg_gen_andi_tl(shift, RtV, 7); \
248
tcg_gen_gvec_shls(MO_8, VdV_off, VuV_off, shift, \
249
sizeof(MMVector), sizeof(MMVector)); \
250
- tcg_temp_free(shift); \
251
} while (0)
252
253
#define fGEN_TCG_V6_vaslh(SHORTCODE) \
254
@@ -XXX,XX +XXX,XX @@ static inline void assert_vhist_tmp(DisasContext *ctx)
255
tcg_gen_andi_tl(shift, RtV, 15); \
256
tcg_gen_gvec_shls(MO_16, VdV_off, VuV_off, shift, \
257
sizeof(MMVector), sizeof(MMVector)); \
258
- tcg_temp_free(shift); \
259
} while (0)
260
261
#define fGEN_TCG_V6_vaslh_acc(SHORTCODE) \
262
@@ -XXX,XX +XXX,XX @@ static inline void assert_vhist_tmp(DisasContext *ctx)
263
sizeof(MMVector), sizeof(MMVector)); \
264
tcg_gen_gvec_add(MO_16, VxV_off, VxV_off, tmpoff, \
265
sizeof(MMVector), sizeof(MMVector)); \
266
- tcg_temp_free(shift); \
267
} while (0)
268
269
#define fGEN_TCG_V6_vaslw(SHORTCODE) \
270
@@ -XXX,XX +XXX,XX @@ static inline void assert_vhist_tmp(DisasContext *ctx)
271
tcg_gen_andi_tl(shift, RtV, 31); \
272
tcg_gen_gvec_shls(MO_32, VdV_off, VuV_off, shift, \
273
sizeof(MMVector), sizeof(MMVector)); \
274
- tcg_temp_free(shift); \
275
} while (0)
276
277
#define fGEN_TCG_V6_vaslw_acc(SHORTCODE) \
278
@@ -XXX,XX +XXX,XX @@ static inline void assert_vhist_tmp(DisasContext *ctx)
279
sizeof(MMVector), sizeof(MMVector)); \
280
tcg_gen_gvec_add(MO_32, VxV_off, VxV_off, tmpoff, \
281
sizeof(MMVector), sizeof(MMVector)); \
282
- tcg_temp_free(shift); \
283
} while (0)
284
285
/* Vector max - various forms */
286
@@ -XXX,XX +XXX,XX @@ static inline void assert_vhist_tmp(DisasContext *ctx)
287
GET_EA; \
288
PRED; \
289
tcg_gen_brcondi_tl(TCG_COND_EQ, LSB, 0, false_label); \
290
- tcg_temp_free(LSB); \
291
gen_vreg_load(ctx, DSTOFF, EA, true); \
292
INC; \
293
tcg_gen_br(end_label); \
294
@@ -XXX,XX +XXX,XX @@ static inline void assert_vhist_tmp(DisasContext *ctx)
295
GET_EA; \
296
PRED; \
297
tcg_gen_brcondi_tl(TCG_COND_EQ, LSB, 0, false_label); \
298
- tcg_temp_free(LSB); \
299
gen_vreg_store(ctx, EA, SRCOFF, insn->slot, ALIGN); \
300
INC; \
301
tcg_gen_br(end_label); \
302
diff --git a/target/hexagon/macros.h b/target/hexagon/macros.h
303
index XXXXXXX..XXXXXXX 100644
304
--- a/target/hexagon/macros.h
305
+++ b/target/hexagon/macros.h
306
@@ -XXX,XX +XXX,XX @@ static inline void gen_pred_cancel(TCGv pred, uint32_t slot_num)
307
tcg_gen_andi_tl(tmp, pred, 1);
308
tcg_gen_movcond_tl(TCG_COND_EQ, hex_slot_cancelled, tmp, zero,
309
slot_mask, hex_slot_cancelled);
310
- tcg_temp_free(slot_mask);
311
- tcg_temp_free(tmp);
312
}
313
#define PRED_LOAD_CANCEL(PRED, EA) \
314
gen_pred_cancel(PRED, insn->is_endloop ? 4 : insn->slot)
315
@@ -XXX,XX +XXX,XX @@ static inline TCGv gen_read_ireg(TCGv result, TCGv val, int shift)
316
tcg_gen_deposit_tl(result, msb, lsb, 0, 7);
317
318
tcg_gen_shli_tl(result, result, shift);
319
-
320
- tcg_temp_free(msb);
321
- tcg_temp_free(lsb);
322
-
323
return result;
324
}
325
#define fREAD_IREG(VAL, SHIFT) gen_read_ireg(ireg, (VAL), (SHIFT))
326
@@ -XXX,XX +XXX,XX @@ static inline TCGv gen_read_ireg(TCGv result, TCGv val, int shift)
327
TCGv tmp = tcg_temp_new(); \
328
tcg_gen_shli_tl(tmp, REG2, SCALE); \
329
tcg_gen_add_tl(EA, REG, tmp); \
330
- tcg_temp_free(tmp); \
331
} while (0)
332
#define fEA_IRs(IMM, REG, SCALE) \
333
do { \
334
diff --git a/target/hexagon/genptr.c b/target/hexagon/genptr.c
335
index XXXXXXX..XXXXXXX 100644
336
--- a/target/hexagon/genptr.c
337
+++ b/target/hexagon/genptr.c
338
@@ -XXX,XX +XXX,XX @@ static inline void gen_masked_reg_write(TCGv new_val, TCGv cur_val,
339
tcg_gen_andi_tl(new_val, new_val, ~reg_mask);
340
tcg_gen_andi_tl(tmp, cur_val, reg_mask);
341
tcg_gen_or_tl(new_val, new_val, tmp);
342
-
343
- tcg_temp_free(tmp);
344
}
345
}
346
347
@@ -XXX,XX +XXX,XX @@ static inline void gen_log_predicated_reg_write(int rnum, TCGv val,
348
tcg_gen_setcond_tl(TCG_COND_EQ, slot_mask, slot_mask, zero);
349
tcg_gen_or_tl(hex_reg_written[rnum], hex_reg_written[rnum], slot_mask);
350
}
351
-
352
- tcg_temp_free(slot_mask);
353
}
354
355
void gen_log_reg_write(int rnum, TCGv val)
356
@@ -XXX,XX +XXX,XX @@ static void gen_log_predicated_reg_write_pair(int rnum, TCGv_i64 val,
357
tcg_gen_or_tl(hex_reg_written[rnum + 1], hex_reg_written[rnum + 1],
358
slot_mask);
359
}
360
-
361
- tcg_temp_free(val32);
362
- tcg_temp_free(slot_mask);
363
}
364
365
static void gen_log_reg_write_pair(int rnum, TCGv_i64 val)
366
@@ -XXX,XX +XXX,XX @@ static void gen_log_reg_write_pair(int rnum, TCGv_i64 val)
367
/* Do this so HELPER(debug_commit_end) will know */
368
tcg_gen_movi_tl(hex_reg_written[rnum + 1], 1);
369
}
370
-
371
- tcg_temp_free(val32);
372
}
373
374
void gen_log_pred_write(DisasContext *ctx, int pnum, TCGv val)
375
@@ -XXX,XX +XXX,XX @@ void gen_log_pred_write(DisasContext *ctx, int pnum, TCGv val)
376
hex_new_pred_value[pnum], base_val);
377
}
378
tcg_gen_ori_tl(hex_pred_written, hex_pred_written, 1 << pnum);
379
-
380
- tcg_temp_free(base_val);
381
}
382
383
static inline void gen_read_p3_0(TCGv control_reg)
384
@@ -XXX,XX +XXX,XX @@ static inline void gen_read_ctrl_reg_pair(DisasContext *ctx, const int reg_num,
385
TCGv p3_0 = tcg_temp_new();
386
gen_read_p3_0(p3_0);
387
tcg_gen_concat_i32_i64(dest, p3_0, hex_gpr[reg_num + 1]);
388
- tcg_temp_free(p3_0);
389
} else if (reg_num == HEX_REG_PC - 1) {
390
TCGv pc = tcg_constant_tl(ctx->base.pc_next);
391
tcg_gen_concat_i32_i64(dest, hex_gpr[reg_num], pc);
392
@@ -XXX,XX +XXX,XX @@ static inline void gen_read_ctrl_reg_pair(DisasContext *ctx, const int reg_num,
393
tcg_gen_addi_tl(insn_cnt, hex_gpr[HEX_REG_QEMU_INSN_CNT],
394
ctx->num_insns);
395
tcg_gen_concat_i32_i64(dest, pkt_cnt, insn_cnt);
396
- tcg_temp_free(pkt_cnt);
397
- tcg_temp_free(insn_cnt);
398
} else if (reg_num == HEX_REG_QEMU_HVX_CNT) {
399
TCGv hvx_cnt = tcg_temp_new();
400
tcg_gen_addi_tl(hvx_cnt, hex_gpr[HEX_REG_QEMU_HVX_CNT],
401
ctx->num_hvx_insns);
402
tcg_gen_concat_i32_i64(dest, hvx_cnt, hex_gpr[reg_num + 1]);
403
- tcg_temp_free(hvx_cnt);
404
} else {
405
tcg_gen_concat_i32_i64(dest,
406
hex_gpr[reg_num],
407
@@ -XXX,XX +XXX,XX @@ static void gen_write_p3_0(DisasContext *ctx, TCGv control_reg)
408
gen_log_pred_write(ctx, i, hex_p8);
409
ctx_log_pred_write(ctx, i);
410
}
411
- tcg_temp_free(hex_p8);
412
}
413
414
/*
415
@@ -XXX,XX +XXX,XX @@ static inline void gen_write_ctrl_reg_pair(DisasContext *ctx, int reg_num,
416
gen_write_p3_0(ctx, val32);
417
tcg_gen_extrh_i64_i32(val32, val);
418
gen_log_reg_write(reg_num + 1, val32);
419
- tcg_temp_free(val32);
420
ctx_log_reg_write(ctx, reg_num + 1);
421
} else {
422
gen_log_reg_write_pair(reg_num, val);
423
@@ -XXX,XX +XXX,XX @@ TCGv gen_get_byte_i64(TCGv result, int N, TCGv_i64 src, bool sign)
424
tcg_gen_extract_i64(res64, src, N * 8, 8);
425
}
426
tcg_gen_extrl_i64_i32(result, res64);
427
- tcg_temp_free_i64(res64);
428
429
return result;
430
}
431
@@ -XXX,XX +XXX,XX @@ void gen_set_half_i64(int N, TCGv_i64 result, TCGv src)
432
TCGv_i64 src64 = tcg_temp_new_i64();
433
tcg_gen_extu_i32_i64(src64, src);
434
tcg_gen_deposit_i64(result, result, src64, N * 16, 16);
435
- tcg_temp_free_i64(src64);
436
}
437
438
void gen_set_byte_i64(int N, TCGv_i64 result, TCGv src)
439
@@ -XXX,XX +XXX,XX @@ void gen_set_byte_i64(int N, TCGv_i64 result, TCGv src)
440
TCGv_i64 src64 = tcg_temp_new_i64();
441
tcg_gen_extu_i32_i64(src64, src);
442
tcg_gen_deposit_i64(result, result, src64, N * 8, 8);
443
- tcg_temp_free_i64(src64);
444
}
445
446
static inline void gen_load_locked4u(TCGv dest, TCGv vaddr, int mem_index)
447
@@ -XXX,XX +XXX,XX @@ static inline void gen_store_conditional4(DisasContext *ctx,
448
ctx->mem_idx, MO_32);
449
tcg_gen_movcond_tl(TCG_COND_EQ, pred, tmp, hex_llsc_val,
450
one, zero);
451
- tcg_temp_free(tmp);
452
tcg_gen_br(done);
453
454
gen_set_label(fail);
455
@@ -XXX,XX +XXX,XX @@ static inline void gen_store_conditional8(DisasContext *ctx,
456
tcg_gen_movcond_i64(TCG_COND_EQ, tmp, tmp, hex_llsc_val_i64,
457
one, zero);
458
tcg_gen_extrl_i64_i32(pred, tmp);
459
- tcg_temp_free_i64(tmp);
460
tcg_gen_br(done);
461
462
gen_set_label(fail);
463
@@ -XXX,XX +XXX,XX @@ static void gen_cmpnd_cmp_jmp(DisasContext *ctx,
464
TCGv pred = tcg_temp_new();
465
gen_compare(cond1, pred, arg1, arg2);
466
gen_log_pred_write(ctx, pnum, pred);
467
- tcg_temp_free(pred);
468
} else {
469
TCGv pred = tcg_temp_new();
470
tcg_gen_mov_tl(pred, hex_new_pred_value[pnum]);
471
gen_cond_jump(ctx, cond2, pred, pc_off);
472
- tcg_temp_free(pred);
473
}
474
}
475
476
@@ -XXX,XX +XXX,XX @@ static void gen_cmpnd_tstbit0_jmp(DisasContext *ctx,
477
tcg_gen_andi_tl(pred, arg, 1);
478
gen_8bitsof(pred, pred);
479
gen_log_pred_write(ctx, pnum, pred);
480
- tcg_temp_free(pred);
481
} else {
482
TCGv pred = tcg_temp_new();
483
tcg_gen_mov_tl(pred, hex_new_pred_value[pnum]);
484
gen_cond_jump(ctx, cond, pred, pc_off);
485
- tcg_temp_free(pred);
486
}
487
}
488
489
@@ -XXX,XX +XXX,XX @@ static void gen_testbit0_jumpnv(DisasContext *ctx,
490
TCGv pred = tcg_temp_new();
491
tcg_gen_andi_tl(pred, arg, 1);
492
gen_cond_jump(ctx, cond, pred, pc_off);
493
- tcg_temp_free(pred);
494
}
495
496
static void gen_jump(DisasContext *ctx, int pc_off)
497
@@ -XXX,XX +XXX,XX @@ static void gen_cond_call(DisasContext *ctx, TCGv pred,
498
tcg_gen_andi_tl(lsb, pred, 1);
499
gen_write_new_pc_pcrel(ctx, pc_off, cond, lsb);
500
tcg_gen_brcondi_tl(cond, lsb, 0, skip);
501
- tcg_temp_free(lsb);
502
next_PC =
503
tcg_constant_tl(ctx->pkt->pc + ctx->pkt->encod_pkt_size_in_bytes);
504
gen_log_reg_write(HEX_REG_LR, next_PC);
505
@@ -XXX,XX +XXX,XX @@ static void gen_endloop0(DisasContext *ctx)
506
}
507
gen_set_label(label3);
508
}
509
-
510
- tcg_temp_free(lpcfg);
511
}
512
513
static void gen_cmp_jumpnv(DisasContext *ctx,
514
@@ -XXX,XX +XXX,XX @@ static void gen_cmp_jumpnv(DisasContext *ctx,
515
TCGv pred = tcg_temp_new();
516
tcg_gen_setcond_tl(cond, pred, val, src);
517
gen_cond_jump(ctx, TCG_COND_EQ, pred, pc_off);
518
- tcg_temp_free(pred);
519
}
520
521
static void gen_cmpi_jumpnv(DisasContext *ctx,
522
@@ -XXX,XX +XXX,XX @@ static void gen_cmpi_jumpnv(DisasContext *ctx,
523
TCGv pred = tcg_temp_new();
524
tcg_gen_setcondi_tl(cond, pred, val, src);
525
gen_cond_jump(ctx, TCG_COND_EQ, pred, pc_off);
526
- tcg_temp_free(pred);
527
}
528
529
/* Shift left with saturation */
530
@@ -XXX,XX +XXX,XX @@ static void gen_shl_sat(TCGv dst, TCGv src, TCGv shift_amt)
531
tcg_gen_or_tl(hex_new_value[HEX_REG_USR], hex_new_value[HEX_REG_USR], ovf);
532
533
tcg_gen_movcond_tl(TCG_COND_EQ, dst, dst_sar, src, dst, satval);
534
-
535
- tcg_temp_free(sh32);
536
- tcg_temp_free(dst_sar);
537
- tcg_temp_free(ovf);
538
- tcg_temp_free(satval);
539
}
540
541
static void gen_sar(TCGv dst, TCGv src, TCGv shift_amt)
542
@@ -XXX,XX +XXX,XX @@ static void gen_sar(TCGv dst, TCGv src, TCGv shift_amt)
543
TCGv tmp = tcg_temp_new();
544
tcg_gen_umin_tl(tmp, shift_amt, tcg_constant_tl(31));
545
tcg_gen_sar_tl(dst, src, tmp);
546
- tcg_temp_free(tmp);
547
}
548
549
/* Bidirectional shift right with saturation */
550
@@ -XXX,XX +XXX,XX @@ static void gen_asr_r_r_sat(TCGv RdV, TCGv RsV, TCGv RtV)
551
gen_sar(RdV, RsV, shift_amt);
552
553
gen_set_label(done);
554
-
555
- tcg_temp_free(shift_amt);
556
}
557
558
/* Bidirectional shift left with saturation */
559
@@ -XXX,XX +XXX,XX @@ static void gen_asl_r_r_sat(TCGv RdV, TCGv RsV, TCGv RtV)
560
gen_shl_sat(RdV, RsV, shift_amt);
561
562
gen_set_label(done);
563
-
564
- tcg_temp_free(shift_amt);
565
}
566
567
static intptr_t vreg_src_off(DisasContext *ctx, int num)
568
@@ -XXX,XX +XXX,XX @@ static void gen_log_vreg_write(DisasContext *ctx, intptr_t srcoff, int num,
569
/* Don't do anything if the slot was cancelled */
570
tcg_gen_extract_tl(cancelled, hex_slot_cancelled, slot_num, 1);
571
tcg_gen_brcondi_tl(TCG_COND_NE, cancelled, 0, label_end);
572
- tcg_temp_free(cancelled);
573
}
574
575
if (type != EXT_TMP) {
576
@@ -XXX,XX +XXX,XX @@ static void gen_log_qreg_write(intptr_t srcoff, int num, int vnew,
577
/* Don't do anything if the slot was cancelled */
578
tcg_gen_extract_tl(cancelled, hex_slot_cancelled, slot_num, 1);
579
tcg_gen_brcondi_tl(TCG_COND_NE, cancelled, 0, label_end);
580
- tcg_temp_free(cancelled);
581
}
582
583
dstoff = offsetof(CPUHexagonState, future_QRegs[num]);
584
@@ -XXX,XX +XXX,XX @@ static void gen_vreg_load(DisasContext *ctx, intptr_t dstoff, TCGv src,
585
tcg_gen_addi_tl(src, src, 8);
586
tcg_gen_st_i64(tmp, cpu_env, dstoff + i * 8);
587
}
588
- tcg_temp_free_i64(tmp);
589
}
590
591
static void gen_vreg_store(DisasContext *ctx, TCGv EA, intptr_t srcoff,
592
@@ -XXX,XX +XXX,XX @@ static void vec_to_qvec(size_t size, intptr_t dstoff, intptr_t srcoff)
593
594
tcg_gen_st8_i64(mask, cpu_env, dstoff + i);
595
}
596
- tcg_temp_free_i64(tmp);
597
- tcg_temp_free_i64(word);
598
- tcg_temp_free_i64(bits);
599
- tcg_temp_free_i64(mask);
600
}
601
602
void probe_noshuf_load(TCGv va, int s, int mi)
603
@@ -XXX,XX +XXX,XX @@ void gen_set_usr_field_if(int field, TCGv val)
604
tcg_gen_or_tl(hex_new_value[HEX_REG_USR],
605
hex_new_value[HEX_REG_USR],
606
tmp);
607
- tcg_temp_free(tmp);
608
} else {
609
TCGLabel *skip_label = gen_new_label();
610
tcg_gen_brcondi_tl(TCG_COND_EQ, val, 0, skip_label);
611
@@ -XXX,XX +XXX,XX @@ void gen_sat_i64_ovfl(TCGv ovfl, TCGv_i64 dest, TCGv_i64 source, int width)
612
ovfl_64 = tcg_temp_new_i64();
613
tcg_gen_setcond_i64(TCG_COND_NE, ovfl_64, dest, source);
614
tcg_gen_trunc_i64_tl(ovfl, ovfl_64);
615
- tcg_temp_free_i64(ovfl_64);
616
}
617
618
void gen_satu_i64(TCGv_i64 dest, TCGv_i64 source, int width)
619
@@ -XXX,XX +XXX,XX @@ void gen_satu_i64_ovfl(TCGv ovfl, TCGv_i64 dest, TCGv_i64 source, int width)
620
ovfl_64 = tcg_temp_new_i64();
621
tcg_gen_setcond_i64(TCG_COND_NE, ovfl_64, dest, source);
622
tcg_gen_trunc_i64_tl(ovfl, ovfl_64);
623
- tcg_temp_free_i64(ovfl_64);
624
}
625
626
/* Implements the fADDSAT64 macro in TCG */
627
@@ -XXX,XX +XXX,XX @@ void gen_add_sat_i64(TCGv_i64 ret, TCGv_i64 a, TCGv_i64 b)
628
629
/* if (xor & mask) */
630
tcg_gen_and_i64(cond1, xor, mask);
631
- tcg_temp_free_i64(xor);
632
tcg_gen_brcondi_i64(TCG_COND_NE, cond1, 0, no_ovfl_label);
633
- tcg_temp_free_i64(cond1);
634
635
/* else if ((a ^ sum) & mask) */
636
tcg_gen_xor_i64(cond2, a, sum);
637
tcg_gen_and_i64(cond2, cond2, mask);
638
tcg_gen_brcondi_i64(TCG_COND_NE, cond2, 0, ovfl_label);
639
- tcg_temp_free_i64(cond2);
640
/* fallthrough to no_ovfl_label branch */
641
642
/* if branch */
643
@@ -XXX,XX +XXX,XX @@ void gen_add_sat_i64(TCGv_i64 ret, TCGv_i64 a, TCGv_i64 b)
644
/* else if branch */
645
gen_set_label(ovfl_label);
646
tcg_gen_and_i64(cond3, sum, mask);
647
- tcg_temp_free_i64(mask);
648
- tcg_temp_free_i64(sum);
649
tcg_gen_movcond_i64(TCG_COND_NE, ret, cond3, zero, max_pos, max_neg);
650
- tcg_temp_free_i64(cond3);
651
SET_USR_FIELD(USR_OVF, 1);
652
653
gen_set_label(ret_label);
654
diff --git a/target/hexagon/translate.c b/target/hexagon/translate.c
655
index XXXXXXX..XXXXXXX 100644
656
--- a/target/hexagon/translate.c
657
+++ b/target/hexagon/translate.c
658
@@ -XXX,XX +XXX,XX @@ static void gen_pred_writes(DisasContext *ctx)
659
hex_new_pred_value[pred_num],
660
hex_pred[pred_num]);
661
}
662
- tcg_temp_free(pred_written);
663
} else {
664
for (i = 0; i < ctx->preg_log_idx; i++) {
665
int pred_num = ctx->preg_log[i];
666
@@ -XXX,XX +XXX,XX @@ void process_store(DisasContext *ctx, int slot_num)
667
/* Don't do anything if the slot was cancelled */
668
tcg_gen_extract_tl(cancelled, hex_slot_cancelled, slot_num, 1);
669
tcg_gen_brcondi_tl(TCG_COND_NE, cancelled, 0, label_end);
670
- tcg_temp_free(cancelled);
671
}
672
{
673
TCGv address = tcg_temp_new();
674
@@ -XXX,XX +XXX,XX @@ void process_store(DisasContext *ctx, int slot_num)
675
gen_helper_commit_store(cpu_env, slot);
676
}
677
}
678
- tcg_temp_free(address);
679
}
680
if (is_predicated) {
681
gen_set_label(label_end);
682
@@ -XXX,XX +XXX,XX @@ static void process_dczeroa(DisasContext *ctx)
683
tcg_gen_qemu_st64(zero, addr, ctx->mem_idx);
684
tcg_gen_addi_tl(addr, addr, 8);
685
tcg_gen_qemu_st64(zero, addr, ctx->mem_idx);
686
-
687
- tcg_temp_free(addr);
688
}
689
}
690
691
@@ -XXX,XX +XXX,XX @@ static void gen_commit_hvx(DisasContext *ctx)
692
693
tcg_gen_andi_tl(cmp, hex_VRegs_updated, 1 << rnum);
694
tcg_gen_brcondi_tl(TCG_COND_EQ, cmp, 0, label_skip);
695
- tcg_temp_free(cmp);
696
tcg_gen_gvec_mov(MO_64, dstoff, srcoff, size, size);
697
gen_set_label(label_skip);
698
} else {
699
@@ -XXX,XX +XXX,XX @@ static void gen_commit_hvx(DisasContext *ctx)
700
701
tcg_gen_andi_tl(cmp, hex_QRegs_updated, 1 << rnum);
702
tcg_gen_brcondi_tl(TCG_COND_EQ, cmp, 0, label_skip);
703
- tcg_temp_free(cmp);
704
tcg_gen_gvec_mov(MO_64, dstoff, srcoff, size, size);
705
gen_set_label(label_skip);
706
} else {
707
diff --git a/target/hexagon/README b/target/hexagon/README
708
index XXXXXXX..XXXXXXX 100644
709
--- a/target/hexagon/README
710
+++ b/target/hexagon/README
711
@@ -XXX,XX +XXX,XX @@ tcg_funcs_generated.c.inc
712
gen_helper_A2_add(RdV, cpu_env, RsV, RtV);
713
gen_log_reg_write(RdN, RdV);
714
ctx_log_reg_write(ctx, RdN);
715
- tcg_temp_free(RdV);
716
}
717
718
helper_funcs_generated.c.inc
719
@@ -XXX,XX +XXX,XX @@ istruction.
720
tcg_gen_addi_ptr(VvV, cpu_env, VvV_off);
721
TCGv slot = tcg_constant_tl(insn->slot);
722
gen_helper_V6_vaddw(cpu_env, VdV, VuV, VvV, slot);
723
- tcg_temp_free(slot);
724
gen_log_vreg_write(ctx, VdV_off, VdN, EXT_DFL, insn->slot, false);
725
ctx_log_vreg_write(ctx, VdN, EXT_DFL, false);
726
- tcg_temp_free_ptr(VdV);
727
- tcg_temp_free_ptr(VuV);
728
- tcg_temp_free_ptr(VvV);
729
}
730
731
Notice that we also generate a variable named <operand>_off for each operand of
732
--
733
2.34.1
diff view generated by jsdifflib
Deleted patch
1
Translators are no longer required to free tcg temporaries.
2
1
3
Reviewed-by: Taylor Simpson <tsimpson@quicinc.com>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
5
---
6
target/hexagon/gen_tcg_funcs.py | 79 +--------------------------------
7
1 file changed, 1 insertion(+), 78 deletions(-)
8
9
diff --git a/target/hexagon/gen_tcg_funcs.py b/target/hexagon/gen_tcg_funcs.py
10
index XXXXXXX..XXXXXXX 100755
11
--- a/target/hexagon/gen_tcg_funcs.py
12
+++ b/target/hexagon/gen_tcg_funcs.py
13
@@ -XXX,XX +XXX,XX @@
14
## Helpers for gen_tcg_func
15
##
16
def gen_decl_ea_tcg(f, tag):
17
- f.write(" TCGv EA = tcg_temp_new();\n")
18
-
19
-def gen_free_ea_tcg(f):
20
- f.write(" tcg_temp_free(EA);\n")
21
+ f.write(" TCGv EA G_GNUC_UNUSED = tcg_temp_new();\n")
22
23
def genptr_decl_pair_writable(f, tag, regtype, regid, regno):
24
regN="%s%sN" % (regtype,regid)
25
@@ -XXX,XX +XXX,XX @@ def genptr_decl_imm(f,immlett):
26
f.write(" int %s = insn->immed[%d];\n" % \
27
(hex_common.imm_name(immlett), i))
28
29
-def genptr_free(f, tag, regtype, regid, regno):
30
- if (regtype == "R"):
31
- if (regid in {"dd", "ss", "tt", "xx", "yy"}):
32
- f.write(" tcg_temp_free_i64(%s%sV);\n" % (regtype, regid))
33
- elif (regid in {"d", "e", "x", "y"}):
34
- f.write(" tcg_temp_free(%s%sV);\n" % (regtype, regid))
35
- elif (regid not in {"s", "t", "u", "v"}):
36
- print("Bad register parse: ",regtype,regid)
37
- elif (regtype == "P"):
38
- if (regid in {"d", "e", "x"}):
39
- f.write(" tcg_temp_free(%s%sV);\n" % (regtype, regid))
40
- elif (regid not in {"s", "t", "u", "v"}):
41
- print("Bad register parse: ",regtype,regid)
42
- elif (regtype == "C"):
43
- if (regid in {"dd", "ss"}):
44
- f.write(" tcg_temp_free_i64(%s%sV);\n" % (regtype, regid))
45
- elif (regid in {"d", "s"}):
46
- f.write(" tcg_temp_free(%s%sV);\n" % (regtype, regid))
47
- else:
48
- print("Bad register parse: ",regtype,regid)
49
- elif (regtype == "M"):
50
- if (regid != "u"):
51
- print("Bad register parse: ", regtype, regid)
52
- elif (regtype == "V"):
53
- if (regid in {"dd", "uu", "vv", "xx", \
54
- "d", "s", "u", "v", "w", "x", "y"}):
55
- if (not hex_common.skip_qemu_helper(tag)):
56
- f.write(" tcg_temp_free_ptr(%s%sV);\n" % \
57
- (regtype, regid))
58
- else:
59
- print("Bad register parse: ", regtype, regid)
60
- elif (regtype == "Q"):
61
- if (regid in {"d", "e", "s", "t", "u", "v", "x"}):
62
- if (not hex_common.skip_qemu_helper(tag)):
63
- f.write(" tcg_temp_free_ptr(%s%sV);\n" % \
64
- (regtype, regid))
65
- else:
66
- print("Bad register parse: ", regtype, regid)
67
- else:
68
- print("Bad register parse: ", regtype, regid)
69
-
70
-def genptr_free_new(f, tag, regtype, regid, regno):
71
- if (regtype == "N"):
72
- if (regid not in {"s", "t"}):
73
- print("Bad register parse: ", regtype, regid)
74
- elif (regtype == "P"):
75
- if (regid not in {"t", "u", "v"}):
76
- print("Bad register parse: ", regtype, regid)
77
- elif (regtype == "O"):
78
- if (regid != "s"):
79
- print("Bad register parse: ", regtype, regid)
80
- else:
81
- print("Bad register parse: ", regtype, regid)
82
-
83
-def genptr_free_opn(f,regtype,regid,i,tag):
84
- if (hex_common.is_pair(regid)):
85
- genptr_free(f, tag, regtype, regid, i)
86
- elif (hex_common.is_single(regid)):
87
- if hex_common.is_old_val(regtype, regid, tag):
88
- genptr_free(f, tag, regtype, regid, i)
89
- elif hex_common.is_new_val(regtype, regid, tag):
90
- genptr_free_new(f, tag, regtype, regid, i)
91
- else:
92
- print("Bad register parse: ",regtype,regid,toss,numregs)
93
- else:
94
- print("Bad register parse: ",regtype,regid,toss,numregs)
95
-
96
def genptr_src_read(f, tag, regtype, regid):
97
if (regtype == "R"):
98
if (regid in {"ss", "tt", "xx", "yy"}):
99
@@ -XXX,XX +XXX,XX @@ def genptr_dst_write_opn(f,regtype, regid, tag):
100
## <GEN>
101
## gen_log_reg_write(RdN, RdV);
102
## ctx_log_reg_write(ctx, RdN);
103
-## tcg_temp_free(RdV);
104
## }
105
##
106
## where <GEN> depends on hex_common.skip_qemu_helper(tag)
107
@@ -XXX,XX +XXX,XX @@ def gen_tcg_func(f, tag, regs, imms):
108
if (hex_common.is_written(regid)):
109
genptr_dst_write_opn(f,regtype, regid, tag)
110
111
- ## Free all the operands (regs and immediates)
112
- if hex_common.need_ea(tag): gen_free_ea_tcg(f)
113
- for regtype,regid,toss,numregs in regs:
114
- genptr_free_opn(f,regtype,regid,i,tag)
115
- i += 1
116
-
117
f.write("}\n\n")
118
119
def gen_def_tcg_func(f, tag, tagregs, tagimms):
120
--
121
2.34.1
diff view generated by jsdifflib
Deleted patch
1
Translators are no longer required to free tcg temporaries.
2
This removes gen_rvalue_free, gen_rvalue_free_manual and
3
free_variables, whose only purpose was to emit tcg_temp_free.
4
1
5
Reviewed-by: Taylor Simpson <tsimpson@quicinc.com>
6
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
7
---
8
target/hexagon/idef-parser/README.rst | 8 --
9
target/hexagon/idef-parser/parser-helpers.h | 4 -
10
target/hexagon/idef-parser/parser-helpers.c | 142 --------------------
11
target/hexagon/idef-parser/idef-parser.y | 10 --
12
4 files changed, 164 deletions(-)
13
14
diff --git a/target/hexagon/idef-parser/README.rst b/target/hexagon/idef-parser/README.rst
15
index XXXXXXX..XXXXXXX 100644
16
--- a/target/hexagon/idef-parser/README.rst
17
+++ b/target/hexagon/idef-parser/README.rst
18
@@ -XXX,XX +XXX,XX @@ idef-parser will compile the above code into the following code:
19
TCGv_i32 tmp_0 = tcg_temp_new_i32();
20
tcg_gen_add_i32(tmp_0, RsV, RtV);
21
tcg_gen_mov_i32(RdV, tmp_0);
22
- tcg_temp_free_i32(tmp_0);
23
}
24
25
The output of the compilation process will be a function, containing the
26
@@ -XXX,XX +XXX,XX @@ The result of the addition is now stored in the temporary, we move it into the
27
correct destination register. This code may seem inefficient, but QEMU will
28
perform some optimizations on the tinycode, reducing the unnecessary copy.
29
30
-::
31
-
32
- tcg_temp_free_i32(tmp_0);
33
-
34
-Finally, we free the temporary we used to hold the addition result.
35
-
36
Parser Input
37
------------
38
39
@@ -XXX,XX +XXX,XX @@ instruction,
40
TCGv_i32 tmp_0 = tcg_temp_new_i32();
41
tcg_gen_add_i32(tmp_0, RsV, RsV);
42
tcg_gen_mov_i32(RdV, tmp_0);
43
- tcg_temp_free_i32(tmp_0);
44
}
45
46
Here the bug, albeit hard to spot, is in ``tcg_gen_add_i32(tmp_0, RsV, RsV);``
47
diff --git a/target/hexagon/idef-parser/parser-helpers.h b/target/hexagon/idef-parser/parser-helpers.h
48
index XXXXXXX..XXXXXXX 100644
49
--- a/target/hexagon/idef-parser/parser-helpers.h
50
+++ b/target/hexagon/idef-parser/parser-helpers.h
51
@@ -XXX,XX +XXX,XX @@ HexValue gen_imm_value(Context *c __attribute__((unused)),
52
HexValue gen_imm_qemu_tmp(Context *c, YYLTYPE *locp, unsigned bit_width,
53
HexSignedness signedness);
54
55
-void gen_rvalue_free(Context *c, YYLTYPE *locp, HexValue *rvalue);
56
-
57
HexValue rvalue_materialize(Context *c, YYLTYPE *locp, HexValue *rvalue);
58
59
HexValue gen_rvalue_extend(Context *c, YYLTYPE *locp, HexValue *rvalue);
60
@@ -XXX,XX +XXX,XX @@ void emit_footer(Context *c);
61
62
void track_string(Context *c, GString *s);
63
64
-void free_variables(Context *c, YYLTYPE *locp);
65
-
66
void free_instruction(Context *c);
67
68
void assert_signedness(Context *c,
69
diff --git a/target/hexagon/idef-parser/parser-helpers.c b/target/hexagon/idef-parser/parser-helpers.c
70
index XXXXXXX..XXXXXXX 100644
71
--- a/target/hexagon/idef-parser/parser-helpers.c
72
+++ b/target/hexagon/idef-parser/parser-helpers.c
73
@@ -XXX,XX +XXX,XX @@ HexValue gen_imm_qemu_tmp(Context *c, YYLTYPE *locp, unsigned bit_width,
74
return rvalue;
75
}
76
77
-void gen_rvalue_free(Context *c, YYLTYPE *locp, HexValue *rvalue)
78
-{
79
- if (rvalue->type == TEMP && !rvalue->is_manual) {
80
- const char *bit_suffix = (rvalue->bit_width == 64) ? "i64" : "i32";
81
- OUT(c, locp, "tcg_temp_free_", bit_suffix, "(", rvalue, ");\n");
82
- }
83
-}
84
-
85
-static void gen_rvalue_free_manual(Context *c, YYLTYPE *locp, HexValue *rvalue)
86
-{
87
- rvalue->is_manual = false;
88
- gen_rvalue_free(c, locp, rvalue);
89
-}
90
-
91
HexValue rvalue_materialize(Context *c, YYLTYPE *locp, HexValue *rvalue)
92
{
93
if (rvalue->type == IMMEDIATE) {
94
HexValue res = gen_tmp_value_from_imm(c, locp, rvalue);
95
- gen_rvalue_free(c, locp, rvalue);
96
return res;
97
}
98
return *rvalue;
99
@@ -XXX,XX +XXX,XX @@ HexValue gen_rvalue_extend(Context *c, YYLTYPE *locp, HexValue *rvalue)
100
const char *sign_suffix = is_unsigned ? "u" : "";
101
OUT(c, locp, "tcg_gen_ext", sign_suffix,
102
"_i32_i64(", &res, ", ", rvalue, ");\n");
103
- gen_rvalue_free(c, locp, rvalue);
104
return res;
105
}
106
}
107
@@ -XXX,XX +XXX,XX @@ HexValue gen_rvalue_truncate(Context *c, YYLTYPE *locp, HexValue *rvalue)
108
if (rvalue->bit_width == 64) {
109
HexValue res = gen_tmp(c, locp, 32, rvalue->signedness);
110
OUT(c, locp, "tcg_gen_trunc_i64_tl(", &res, ", ", rvalue, ");\n");
111
- gen_rvalue_free(c, locp, rvalue);
112
return res;
113
}
114
}
115
@@ -XXX,XX +XXX,XX @@ HexValue gen_bin_cmp(Context *c,
116
fprintf(stderr, "Error in evalutating immediateness!");
117
abort();
118
}
119
-
120
- /* Free operands */
121
- gen_rvalue_free(c, locp, &op1_m);
122
- gen_rvalue_free(c, locp, &op2_m);
123
-
124
return res;
125
}
126
127
@@ -XXX,XX +XXX,XX @@ static void gen_simple_op(Context *c, YYLTYPE *locp, unsigned bit_width,
128
"(", res, ", ", op1, ", ", op2, ");\n");
129
break;
130
}
131
- gen_rvalue_free(c, locp, op1);
132
- gen_rvalue_free(c, locp, op2);
133
}
134
135
static void gen_sub_op(Context *c, YYLTYPE *locp, unsigned bit_width,
136
@@ -XXX,XX +XXX,XX @@ static void gen_sub_op(Context *c, YYLTYPE *locp, unsigned bit_width,
137
"(", res, ", ", op1, ", ", op2, ");\n");
138
} break;
139
}
140
- gen_rvalue_free(c, locp, op1);
141
- gen_rvalue_free(c, locp, op2);
142
}
143
144
static void gen_asl_op(Context *c, YYLTYPE *locp, unsigned bit_width,
145
@@ -XXX,XX +XXX,XX @@ static void gen_asl_op(Context *c, YYLTYPE *locp, unsigned bit_width,
146
OUT(c, locp, "tcg_gen_movcond_i", &bit_width);
147
OUT(c, locp, "(TCG_COND_GEU, ", res, ", ", &op2_m, ", ", &edge);
148
OUT(c, locp, ", ", &zero, ", ", res, ");\n");
149
- gen_rvalue_free(c, locp, &edge);
150
}
151
- gen_rvalue_free(c, locp, &op1_m);
152
- gen_rvalue_free(c, locp, &op2_m);
153
}
154
155
static void gen_asr_op(Context *c, YYLTYPE *locp, unsigned bit_width,
156
@@ -XXX,XX +XXX,XX @@ static void gen_asr_op(Context *c, YYLTYPE *locp, unsigned bit_width,
157
OUT(c, locp, "tcg_gen_movcond_i", &bit_width);
158
OUT(c, locp, "(TCG_COND_GEU, ", res, ", ", &op2_m, ", ", &edge);
159
OUT(c, locp, ", ", &tmp, ", ", res, ");\n");
160
- gen_rvalue_free(c, locp, &edge);
161
- gen_rvalue_free(c, locp, &tmp);
162
}
163
- gen_rvalue_free(c, locp, &op1_m);
164
- gen_rvalue_free(c, locp, &op2_m);
165
}
166
167
static void gen_lsr_op(Context *c, YYLTYPE *locp, unsigned bit_width,
168
@@ -XXX,XX +XXX,XX @@ static void gen_lsr_op(Context *c, YYLTYPE *locp, unsigned bit_width,
169
OUT(c, locp, "tcg_gen_movcond_i", &bit_width);
170
OUT(c, locp, "(TCG_COND_GEU, ", res, ", ", &op2_m, ", ", &edge);
171
OUT(c, locp, ", ", &zero, ", ", res, ");\n");
172
- gen_rvalue_free(c, locp, &edge);
173
}
174
- gen_rvalue_free(c, locp, &op1_m);
175
- gen_rvalue_free(c, locp, &op2_m);
176
}
177
178
/*
179
@@ -XXX,XX +XXX,XX @@ static void gen_andl_op(Context *c, YYLTYPE *locp, unsigned bit_width,
180
tmp2 = gen_bin_cmp(c, locp, TCG_COND_NE, op2, &zero);
181
OUT(c, locp, "tcg_gen_and_", bit_suffix,
182
"(", res, ", ", &tmp1, ", ", &tmp2, ");\n");
183
- gen_rvalue_free_manual(c, locp, &zero);
184
- gen_rvalue_free(c, locp, &tmp1);
185
- gen_rvalue_free(c, locp, &tmp2);
186
break;
187
}
188
}
189
@@ -XXX,XX +XXX,XX @@ static void gen_minmax_op(Context *c, YYLTYPE *locp, unsigned bit_width,
190
OUT(c, locp, res, ", ", op1, ", ", &op2_m, ");\n");
191
break;
192
}
193
- gen_rvalue_free(c, locp, &op1_m);
194
- gen_rvalue_free(c, locp, &op2_m);
195
}
196
197
/* Code generation functions */
198
@@ -XXX,XX +XXX,XX @@ HexValue gen_cast_op(Context *c,
199
&res, ", ", src, ");\n");
200
}
201
}
202
- gen_rvalue_free(c, locp, src);
203
return res;
204
}
205
}
206
@@ -XXX,XX +XXX,XX @@ static HexValue gen_extend_imm_width_op(Context *c,
207
if (need_guarding) {
208
OUT(c, locp, "}\n");
209
}
210
-
211
- gen_rvalue_free(c, locp, value);
212
return res;
213
} else {
214
/*
215
@@ -XXX,XX +XXX,XX @@ static HexValue gen_extend_imm_width_op(Context *c,
216
", 0);\n");
217
OUT(c, locp, "}\n");
218
}
219
-
220
- gen_rvalue_free(c, locp, value);
221
return res;
222
}
223
}
224
@@ -XXX,XX +XXX,XX @@ static HexValue gen_extend_tcg_width_op(Context *c,
225
&mask, ", ", &mask, ", ", &shift, ");\n");
226
OUT(c, locp, "tcg_gen_and_i", &dst_width, "(",
227
&res, ", ", value, ", ", &mask, ");\n");
228
- gen_rvalue_free(c, locp, &mask);
229
} else {
230
OUT(c, locp, "tcg_gen_shl_i", &dst_width, "(",
231
&res, ", ", value, ", ", &shift, ");\n");
232
@@ -XXX,XX +XXX,XX @@ static HexValue gen_extend_tcg_width_op(Context *c,
233
OUT(c, locp, &src_width_m, ", ", &zero, ", ", &zero, ", ", &res,
234
");\n");
235
236
- gen_rvalue_free(c, locp, &src_width_m);
237
- gen_rvalue_free(c, locp, value);
238
- gen_rvalue_free(c, locp, &shift);
239
-
240
return res;
241
}
242
243
@@ -XXX,XX +XXX,XX @@ void gen_rdeposit_op(Context *c,
244
dst);
245
OUT(c, locp, ", ", &width_m, ", ", &zero, ", ", &res, ", ", dst,
246
");\n");
247
-
248
- gen_rvalue_free(c, locp, width);
249
- gen_rvalue_free(c, locp, &res);
250
}
251
252
void gen_deposit_op(Context *c,
253
@@ -XXX,XX +XXX,XX @@ void gen_deposit_op(Context *c,
254
value_m = rvalue_materialize(c, locp, &value_m);
255
OUT(c, locp, "tcg_gen_deposit_i", &bit_width, "(", dst, ", ", dst, ", ");
256
OUT(c, locp, &value_m, ", ", index, " * ", &width, ", ", &width, ");\n");
257
- gen_rvalue_free(c, locp, index);
258
- gen_rvalue_free(c, locp, &value_m);
259
}
260
261
HexValue gen_rextract_op(Context *c,
262
@@ -XXX,XX +XXX,XX @@ HexValue gen_rextract_op(Context *c,
263
HexValue res = gen_tmp(c, locp, bit_width, UNSIGNED);
264
OUT(c, locp, "tcg_gen_extract_i", &bit_width, "(", &res);
265
OUT(c, locp, ", ", src, ", ", &begin, ", ", &width, ");\n");
266
- gen_rvalue_free(c, locp, src);
267
return res;
268
}
269
270
@@ -XXX,XX +XXX,XX @@ HexValue gen_extract_op(Context *c,
271
const char *sign_suffix = (extract->signedness == UNSIGNED) ? "u" : "";
272
OUT(c, locp, "tcg_gen_ext", sign_suffix, "_i32_i64(",
273
&tmp, ", ", &res, ");\n");
274
- gen_rvalue_free(c, locp, &res);
275
res = tmp;
276
}
277
-
278
- gen_rvalue_free(c, locp, src);
279
- gen_rvalue_free(c, locp, index);
280
return res;
281
}
282
283
@@ -XXX,XX +XXX,XX @@ void gen_write_reg(Context *c, YYLTYPE *locp, HexValue *reg, HexValue *value)
284
locp,
285
"ctx_log_reg_write(ctx, ", &reg->reg.id,
286
");\n");
287
- gen_rvalue_free(c, locp, reg);
288
- gen_rvalue_free(c, locp, &value_m);
289
}
290
291
void gen_assign(Context *c,
292
@@ -XXX,XX +XXX,XX @@ void gen_assign(Context *c,
293
const char *imm_suffix = (value_m.type == IMMEDIATE) ? "i" : "";
294
OUT(c, locp, "tcg_gen_mov", imm_suffix, "_i", &bit_width,
295
"(", dst, ", ", &value_m, ");\n");
296
-
297
- gen_rvalue_free(c, locp, &value_m);
298
}
299
300
HexValue gen_convround(Context *c,
301
@@ -XXX,XX +XXX,XX @@ HexValue gen_convround(Context *c,
302
OUT(c, locp, ", ", &and, ", ", &mask, ", ");
303
OUT(c, locp, &src_p1, ", ", &src_m, ");\n");
304
305
- /* Free src but use the original `is_manual` value */
306
- gen_rvalue_free(c, locp, src);
307
-
308
- /* Free the rest of the values */
309
- gen_rvalue_free(c, locp, &src_p1);
310
-
311
return res;
312
}
313
314
@@ -XXX,XX +XXX,XX @@ static HexValue gen_convround_n_b(Context *c,
315
OUT(c, locp, "tcg_gen_add_i64(", &res);
316
OUT(c, locp, ", ", &res, ", ", &tmp_64, ");\n");
317
318
- gen_rvalue_free(c, locp, &tmp);
319
- gen_rvalue_free(c, locp, &tmp_64);
320
-
321
return res;
322
}
323
324
@@ -XXX,XX +XXX,XX @@ static HexValue gen_convround_n_c(Context *c,
325
OUT(c, locp, "tcg_gen_add_i64(", &res);
326
OUT(c, locp, ", ", &res, ", ", &tmp_64, ");\n");
327
328
- gen_rvalue_free(c, locp, &one);
329
- gen_rvalue_free(c, locp, &tmp);
330
- gen_rvalue_free(c, locp, &tmp_64);
331
-
332
return res;
333
}
334
335
@@ -XXX,XX +XXX,XX @@ HexValue gen_convround_n(Context *c,
336
OUT(c, locp, "tcg_gen_shr_i64(", &res);
337
OUT(c, locp, ", ", &res, ", ", &n_64, ");\n");
338
339
- gen_rvalue_free(c, locp, &src_casted);
340
- gen_rvalue_free(c, locp, &pos_casted);
341
-
342
- gen_rvalue_free(c, locp, &r1);
343
- gen_rvalue_free(c, locp, &r2);
344
- gen_rvalue_free(c, locp, &r3);
345
-
346
- gen_rvalue_free(c, locp, &cond);
347
- gen_rvalue_free(c, locp, &cond_64);
348
- gen_rvalue_free(c, locp, &mask);
349
- gen_rvalue_free(c, locp, &n_64);
350
-
351
res = gen_rvalue_truncate(c, locp, &res);
352
return res;
353
}
354
@@ -XXX,XX +XXX,XX @@ HexValue gen_round(Context *c,
355
OUT(c, locp, "(TCG_COND_EQ, ", &res, ", ", &b, ", ", &zero);
356
OUT(c, locp, ", ", &a, ", ", &sum, ");\n");
357
358
- gen_rvalue_free_manual(c, locp, &a);
359
- gen_rvalue_free_manual(c, locp, &b);
360
- gen_rvalue_free(c, locp, &sum);
361
-
362
return res;
363
}
364
365
@@ -XXX,XX +XXX,XX @@ void gen_circ_op(Context *c,
366
", ",
367
modifier);
368
OUT(c, locp, ", ", &cs, ");\n");
369
- gen_rvalue_free(c, locp, &increment_m);
370
- gen_rvalue_free(c, locp, modifier);
371
- gen_rvalue_free(c, locp, &cs);
372
}
373
374
HexValue gen_locnt_op(Context *c, YYLTYPE *locp, HexValue *src)
375
@@ -XXX,XX +XXX,XX @@ HexValue gen_locnt_op(Context *c, YYLTYPE *locp, HexValue *src)
376
&res, ", ", &src_m, ");\n");
377
OUT(c, locp, "tcg_gen_clzi_i", bit_suffix, "(", &res, ", ", &res, ", ");
378
OUT(c, locp, bit_suffix, ");\n");
379
- gen_rvalue_free(c, locp, &src_m);
380
return res;
381
}
382
383
@@ -XXX,XX +XXX,XX @@ HexValue gen_ctpop_op(Context *c, YYLTYPE *locp, HexValue *src)
384
src_m = rvalue_materialize(c, locp, &src_m);
385
OUT(c, locp, "tcg_gen_ctpop_i", bit_suffix,
386
"(", &res, ", ", &src_m, ");\n");
387
- gen_rvalue_free(c, locp, &src_m);
388
return res;
389
}
390
391
@@ -XXX,XX +XXX,XX @@ HexValue gen_rotl(Context *c, YYLTYPE *locp, HexValue *src, HexValue *width)
392
amount = rvalue_materialize(c, locp, &amount);
393
OUT(c, locp, "tcg_gen_rotl_", suffix, "(",
394
&res, ", ", src, ", ", &amount, ");\n");
395
- gen_rvalue_free(c, locp, src);
396
- gen_rvalue_free(c, locp, &amount);
397
398
return res;
399
}
400
@@ -XXX,XX +XXX,XX @@ HexValue gen_carry_from_add(Context *c,
401
OUT(c, locp, "tcg_gen_add2_i64(", &res, ", ", &cf, ", ", &res, ", ", &cf);
402
OUT(c, locp, ", ", &op2_m, ", ", &zero, ");\n");
403
404
- gen_rvalue_free(c, locp, &op1_m);
405
- gen_rvalue_free(c, locp, &op2_m);
406
- gen_rvalue_free(c, locp, &op3_m);
407
- gen_rvalue_free(c, locp, &res);
408
return cf;
409
}
410
411
@@ -XXX,XX +XXX,XX @@ void gen_inst_code(Context *c, YYLTYPE *locp)
412
c->inst.name->str,
413
c->inst.error_count);
414
} else {
415
- free_variables(c, locp);
416
c->implemented_insn++;
417
fprintf(c->enabled_file, "%s\n", c->inst.name->str);
418
emit_footer(c);
419
@@ -XXX,XX +XXX,XX @@ void gen_pred_assign(Context *c, YYLTYPE *locp, HexValue *left_pred,
420
OUT(c, locp, "gen_log_pred_write(ctx, ", pred_id, ", ", left_pred,
421
");\n");
422
OUT(c, locp, "ctx_log_pred_write(ctx, ", pred_id, ");\n");
423
- gen_rvalue_free(c, locp, left_pred);
424
}
425
- /* Free temporary value */
426
- gen_rvalue_free(c, locp, &r);
427
}
428
429
void gen_cancel(Context *c, YYLTYPE *locp)
430
@@ -XXX,XX +XXX,XX @@ void gen_load(Context *c, YYLTYPE *locp, HexValue *width,
431
OUT(c, locp, "(TCGv) ");
432
}
433
OUT(c, locp, dst, ", ", ea, ", ctx->mem_idx);\n");
434
- /* If the var in EA was truncated it is now a tmp HexValue, so free it. */
435
- gen_rvalue_free(c, locp, ea);
436
}
437
438
void gen_store(Context *c, YYLTYPE *locp, HexValue *width, HexValue *ea,
439
@@ -XXX,XX +XXX,XX @@ void gen_store(Context *c, YYLTYPE *locp, HexValue *width, HexValue *ea,
440
src_m = rvalue_materialize(c, locp, &src_m);
441
OUT(c, locp, "gen_store", &mem_width, "(cpu_env, ", ea, ", ", &src_m);
442
OUT(c, locp, ", insn->slot);\n");
443
- gen_rvalue_free(c, locp, &src_m);
444
- /* If the var in ea was truncated it is now a tmp HexValue, so free it. */
445
- gen_rvalue_free(c, locp, ea);
446
}
447
448
void gen_sethalf(Context *c, YYLTYPE *locp, HexCast *sh, HexValue *n,
449
@@ -XXX,XX +XXX,XX @@ void gen_setbits(Context *c, YYLTYPE *locp, HexValue *hi, HexValue *lo,
450
OUT(c, locp, "tcg_gen_deposit_i32(", dst, ", ", dst,
451
", ", &tmp, ", ");
452
OUT(c, locp, lo, ", ", &len, ");\n");
453
-
454
- gen_rvalue_free(c, locp, &tmp);
455
- gen_rvalue_free(c, locp, hi);
456
- gen_rvalue_free(c, locp, lo);
457
- gen_rvalue_free(c, locp, value);
458
}
459
460
unsigned gen_if_cond(Context *c, YYLTYPE *locp, HexValue *cond)
461
@@ -XXX,XX +XXX,XX @@ unsigned gen_if_cond(Context *c, YYLTYPE *locp, HexValue *cond)
462
bit_suffix = (cond->bit_width == 64) ? "i64" : "i32";
463
OUT(c, locp, "tcg_gen_brcondi_", bit_suffix, "(TCG_COND_EQ, ", cond,
464
", 0, if_label_", &c->inst.if_count, ");\n");
465
- gen_rvalue_free(c, locp, cond);
466
return c->inst.if_count++;
467
}
468
469
@@ -XXX,XX +XXX,XX @@ static inline HexValue gen_rvalue_simple_unary(Context *c, YYLTYPE *locp,
470
res = gen_tmp(c, locp, bit_width, value->signedness);
471
OUT(c, locp, tcg_code, "_i", &bit_width, "(", &res, ", ", value,
472
");\n");
473
- gen_rvalue_free(c, locp, value);
474
}
475
return res;
476
}
477
@@ -XXX,XX +XXX,XX @@ HexValue gen_rvalue_notl(Context *c, YYLTYPE *locp, HexValue *value)
478
OUT(c, locp, "tcg_gen_movcond_i", &bit_width);
479
OUT(c, locp, "(TCG_COND_EQ, ", &res, ", ", value, ", ", &zero);
480
OUT(c, locp, ", ", &one, ", ", &zero, ");\n");
481
- gen_rvalue_free(c, locp, value);
482
}
483
return res;
484
}
485
@@ -XXX,XX +XXX,XX @@ HexValue gen_rvalue_sat(Context *c, YYLTYPE *locp, HexSat *sat,
486
OUT(c, locp, &ovfl, ", ", &res, ", ", value, ", ", &width->imm.value,
487
");\n");
488
OUT(c, locp, "gen_set_usr_field_if(USR_OVF,", &ovfl, ");\n");
489
- gen_rvalue_free(c, locp, value);
490
491
return res;
492
}
493
@@ -XXX,XX +XXX,XX @@ HexValue gen_rvalue_fscr(Context *c, YYLTYPE *locp, HexValue *value)
494
OUT(c, locp, "tcg_gen_concat_i32_i64(",
495
&key, ", ", &frame_key, ", ", &frame_key, ");\n");
496
OUT(c, locp, "tcg_gen_xor_i64(", &res, ", ", value, ", ", &key, ");\n");
497
- gen_rvalue_free(c, locp, &key);
498
- gen_rvalue_free(c, locp, &frame_key);
499
- gen_rvalue_free(c, locp, value);
500
return res;
501
}
502
503
@@ -XXX,XX +XXX,XX @@ HexValue gen_rvalue_brev(Context *c, YYLTYPE *locp, HexValue *value)
504
res = gen_tmp(c, locp, value->bit_width, value->signedness);
505
*value = rvalue_materialize(c, locp, value);
506
OUT(c, locp, "gen_helper_fbrev(", &res, ", ", value, ");\n");
507
- gen_rvalue_free(c, locp, value);
508
return res;
509
}
510
511
@@ -XXX,XX +XXX,XX @@ HexValue gen_rvalue_ternary(Context *c, YYLTYPE *locp, HexValue *cond,
512
unsigned bit_width = (is_64bit) ? 64 : 32;
513
HexValue zero = gen_constant(c, locp, "0", bit_width, UNSIGNED);
514
HexValue res = gen_tmp(c, locp, bit_width, UNSIGNED);
515
- Ternary *ternary = NULL;
516
517
if (is_64bit) {
518
*cond = gen_rvalue_extend(c, locp, cond);
519
@@ -XXX,XX +XXX,XX @@ HexValue gen_rvalue_ternary(Context *c, YYLTYPE *locp, HexValue *cond,
520
OUT(c, locp, ", ", true_branch, ", ", false_branch, ");\n");
521
522
assert(c->ternary->len > 0);
523
- ternary = &g_array_index(c->ternary, Ternary, c->ternary->len - 1);
524
- gen_rvalue_free_manual(c, locp, &ternary->cond);
525
g_array_remove_index(c->ternary, c->ternary->len - 1);
526
527
- gen_rvalue_free(c, locp, cond);
528
- gen_rvalue_free(c, locp, true_branch);
529
- gen_rvalue_free(c, locp, false_branch);
530
return res;
531
}
532
533
@@ -XXX,XX +XXX,XX @@ void track_string(Context *c, GString *s)
534
g_array_append_val(c->inst.strings, s);
535
}
536
537
-void free_variables(Context *c, YYLTYPE *locp)
538
-{
539
- for (unsigned i = 0; i < c->inst.allocated->len; ++i) {
540
- Var *var = &g_array_index(c->inst.allocated, Var, i);
541
- const char *suffix = var->bit_width == 64 ? "i64" : "i32";
542
- OUT(c, locp, "tcg_temp_free_", suffix, "(", var->name->str, ");\n");
543
- }
544
-}
545
-
546
void free_instruction(Context *c)
547
{
548
assert(!is_inside_ternary(c));
549
diff --git a/target/hexagon/idef-parser/idef-parser.y b/target/hexagon/idef-parser/idef-parser.y
550
index XXXXXXX..XXXXXXX 100644
551
--- a/target/hexagon/idef-parser/idef-parser.y
552
+++ b/target/hexagon/idef-parser/idef-parser.y
553
@@ -XXX,XX +XXX,XX @@ statements : statements statement
554
statement : control_statement
555
| var_decl ';'
556
| rvalue ';'
557
- {
558
- gen_rvalue_free(c, &@1, &$1);
559
- }
560
| code_block
561
| ';'
562
;
563
@@ -XXX,XX +XXX,XX @@ assign_statement : lvalue '=' rvalue
564
$3 = gen_rvalue_truncate(c, &@1, &$3);
565
$3 = rvalue_materialize(c, &@1, &$3);
566
OUT(c, &@1, "gen_write_new_pc(", &$3, ");\n");
567
- gen_rvalue_free(c, &@1, &$3); /* Free temporary value */
568
}
569
| LOAD '(' IMM ',' IMM ',' SIGN ',' var ',' lvalue ')'
570
{
571
@@ -XXX,XX +XXX,XX @@ assign_statement : lvalue '=' rvalue
572
$3 = gen_rvalue_truncate(c, &@1, &$3);
573
$3 = rvalue_materialize(c, &@1, &$3);
574
OUT(c, &@1, "SET_USR_FIELD(USR_LPCFG, ", &$3, ");\n");
575
- gen_rvalue_free(c, &@1, &$3);
576
}
577
| DEPOSIT '(' rvalue ',' rvalue ',' rvalue ')'
578
{
579
@@ -XXX,XX +XXX,XX @@ control_statement : frame_check
580
;
581
582
frame_check : FCHK '(' rvalue ',' rvalue ')' ';'
583
- {
584
- gen_rvalue_free(c, &@1, &$3);
585
- gen_rvalue_free(c, &@1, &$5);
586
- }
587
;
588
589
cancel_statement : LOAD_CANCEL
590
@@ -XXX,XX +XXX,XX @@ rvalue : FAIL
591
@1.last_column = @6.last_column;
592
$$ = gen_tmp(c, &@1, 32, UNSIGNED);
593
OUT(c, &@1, "gen_read_ireg(", &$$, ", ", &$3, ", ", &$6, ");\n");
594
- gen_rvalue_free(c, &@1, &$3);
595
}
596
| CIRCADD '(' rvalue ',' rvalue ',' rvalue ')'
597
{
598
--
599
2.34.1
diff view generated by jsdifflib
Deleted patch
1
This field is no longer used.
2
1
3
Reviewed-by: Taylor Simpson <tsimpson@quicinc.com>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
5
---
6
target/hexagon/idef-parser/idef-parser.h | 1 -
7
target/hexagon/idef-parser/parser-helpers.c | 15 ---------------
8
target/hexagon/idef-parser/idef-parser.y | 2 --
9
3 files changed, 18 deletions(-)
10
11
diff --git a/target/hexagon/idef-parser/idef-parser.h b/target/hexagon/idef-parser/idef-parser.h
12
index XXXXXXX..XXXXXXX 100644
13
--- a/target/hexagon/idef-parser/idef-parser.h
14
+++ b/target/hexagon/idef-parser/idef-parser.h
15
@@ -XXX,XX +XXX,XX @@ typedef struct HexValue {
16
unsigned bit_width; /**< Bit width of the rvalue */
17
HexSignedness signedness; /**< Unsigned flag for the rvalue */
18
bool is_dotnew; /**< rvalue of predicate type is dotnew? */
19
- bool is_manual; /**< Opt out of automatic freeing of params */
20
} HexValue;
21
22
/**
23
diff --git a/target/hexagon/idef-parser/parser-helpers.c b/target/hexagon/idef-parser/parser-helpers.c
24
index XXXXXXX..XXXXXXX 100644
25
--- a/target/hexagon/idef-parser/parser-helpers.c
26
+++ b/target/hexagon/idef-parser/parser-helpers.c
27
@@ -XXX,XX +XXX,XX @@ static HexValue gen_constant(Context *c,
28
rvalue.bit_width = bit_width;
29
rvalue.signedness = signedness;
30
rvalue.is_dotnew = false;
31
- rvalue.is_manual = true;
32
rvalue.tmp.index = c->inst.tmp_count;
33
OUT(c, locp, "TCGv_i", &bit_width, " tmp_", &c->inst.tmp_count,
34
" = tcg_constant_i", &bit_width, "(", value, ");\n");
35
@@ -XXX,XX +XXX,XX @@ HexValue gen_tmp(Context *c,
36
rvalue.bit_width = bit_width;
37
rvalue.signedness = signedness;
38
rvalue.is_dotnew = false;
39
- rvalue.is_manual = false;
40
rvalue.tmp.index = c->inst.tmp_count;
41
OUT(c, locp, "TCGv_i", &bit_width, " tmp_", &c->inst.tmp_count,
42
" = tcg_temp_new_i", &bit_width, "();\n");
43
@@ -XXX,XX +XXX,XX @@ HexValue gen_tmp_value(Context *c,
44
rvalue.bit_width = bit_width;
45
rvalue.signedness = signedness;
46
rvalue.is_dotnew = false;
47
- rvalue.is_manual = false;
48
rvalue.tmp.index = c->inst.tmp_count;
49
OUT(c, locp, "TCGv_i", &bit_width, " tmp_", &c->inst.tmp_count,
50
" = tcg_const_i", &bit_width, "(", value, ");\n");
51
@@ -XXX,XX +XXX,XX @@ static HexValue gen_tmp_value_from_imm(Context *c,
52
rvalue.bit_width = value->bit_width;
53
rvalue.signedness = value->signedness;
54
rvalue.is_dotnew = false;
55
- rvalue.is_manual = false;
56
rvalue.tmp.index = c->inst.tmp_count;
57
/*
58
* Here we output the call to `tcg_const_i<width>` in
59
@@ -XXX,XX +XXX,XX @@ HexValue gen_imm_value(Context *c __attribute__((unused)),
60
rvalue.bit_width = bit_width;
61
rvalue.signedness = signedness;
62
rvalue.is_dotnew = false;
63
- rvalue.is_manual = false;
64
rvalue.imm.type = VALUE;
65
rvalue.imm.value = value;
66
return rvalue;
67
@@ -XXX,XX +XXX,XX @@ HexValue gen_imm_qemu_tmp(Context *c, YYLTYPE *locp, unsigned bit_width,
68
memset(&rvalue, 0, sizeof(HexValue));
69
rvalue.type = IMMEDIATE;
70
rvalue.is_dotnew = false;
71
- rvalue.is_manual = false;
72
rvalue.bit_width = bit_width;
73
rvalue.signedness = signedness;
74
rvalue.imm.type = QEMU_TMP;
75
@@ -XXX,XX +XXX,XX @@ void gen_rdeposit_op(Context *c,
76
*/
77
k64 = gen_bin_op(c, locp, SUB_OP, &k64, &width_m);
78
mask = gen_bin_op(c, locp, LSR_OP, &mask, &k64);
79
- begin_m.is_manual = true;
80
mask = gen_bin_op(c, locp, ASL_OP, &mask, &begin_m);
81
- mask.is_manual = true;
82
value_m = gen_bin_op(c, locp, ASL_OP, &value_m, &begin_m);
83
value_m = gen_bin_op(c, locp, ANDB_OP, &value_m, &mask);
84
85
OUT(c, locp, "tcg_gen_not_i", &dst->bit_width, "(", &mask, ", ",
86
&mask, ");\n");
87
- mask.is_manual = false;
88
res = gen_bin_op(c, locp, ANDB_OP, dst, &mask);
89
res = gen_bin_op(c, locp, ORB_OP, &res, &value_m);
90
91
@@ -XXX,XX +XXX,XX @@ HexValue gen_convround(Context *c,
92
HexValue and;
93
HexValue src_p1;
94
95
- src_m.is_manual = true;
96
-
97
and = gen_bin_op(c, locp, ANDB_OP, &src_m, &mask);
98
src_p1 = gen_bin_op(c, locp, ADD_OP, &src_m, &one);
99
100
@@ -XXX,XX +XXX,XX @@ HexValue gen_round(Context *c,
101
b = gen_extend_op(c, locp, &src_width, 64, pos, UNSIGNED);
102
b = rvalue_materialize(c, locp, &b);
103
104
- /* Disable auto-free of values used more than once */
105
- a.is_manual = true;
106
- b.is_manual = true;
107
-
108
n_m1 = gen_bin_op(c, locp, SUB_OP, &b, &one);
109
shifted = gen_bin_op(c, locp, ASL_OP, &one, &n_m1);
110
sum = gen_bin_op(c, locp, ADD_OP, &shifted, &a);
111
diff --git a/target/hexagon/idef-parser/idef-parser.y b/target/hexagon/idef-parser/idef-parser.y
112
index XXXXXXX..XXXXXXX 100644
113
--- a/target/hexagon/idef-parser/idef-parser.y
114
+++ b/target/hexagon/idef-parser/idef-parser.y
115
@@ -XXX,XX +XXX,XX @@ rvalue : FAIL
116
rvalue.imm.type = IMM_CONSTEXT;
117
rvalue.signedness = UNSIGNED;
118
rvalue.is_dotnew = false;
119
- rvalue.is_manual = false;
120
$$ = rvalue;
121
}
122
| var
123
@@ -XXX,XX +XXX,XX @@ rvalue : FAIL
124
}
125
| rvalue '?'
126
{
127
- $1.is_manual = true;
128
Ternary t = { 0 };
129
t.state = IN_LEFT;
130
t.cond = $1;
131
--
132
2.34.1
diff view generated by jsdifflib
Deleted patch
1
Translators are no longer required to free tcg temporaries.
2
1
3
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
5
---
6
target/hppa/translate.c | 93 +----------------------------------------
7
1 file changed, 1 insertion(+), 92 deletions(-)
8
9
diff --git a/target/hppa/translate.c b/target/hppa/translate.c
10
index XXXXXXX..XXXXXXX 100644
11
--- a/target/hppa/translate.c
12
+++ b/target/hppa/translate.c
13
@@ -XXX,XX +XXX,XX @@
14
#undef TCGv
15
#undef tcg_temp_new
16
#undef tcg_global_mem_new
17
-#undef tcg_temp_free
18
19
#if TARGET_LONG_BITS == 64
20
#define TCGv_tl TCGv_i64
21
#define tcg_temp_new_tl tcg_temp_new_i64
22
-#define tcg_temp_free_tl tcg_temp_free_i64
23
#if TARGET_REGISTER_BITS == 64
24
#define tcg_gen_extu_reg_tl tcg_gen_mov_i64
25
#else
26
@@ -XXX,XX +XXX,XX @@
27
#else
28
#define TCGv_tl TCGv_i32
29
#define tcg_temp_new_tl tcg_temp_new_i32
30
-#define tcg_temp_free_tl tcg_temp_free_i32
31
#define tcg_gen_extu_reg_tl tcg_gen_mov_i32
32
#endif
33
34
@@ -XXX,XX +XXX,XX @@
35
36
#define tcg_temp_new tcg_temp_new_i64
37
#define tcg_global_mem_new tcg_global_mem_new_i64
38
-#define tcg_temp_free tcg_temp_free_i64
39
40
#define tcg_gen_movi_reg tcg_gen_movi_i64
41
#define tcg_gen_mov_reg tcg_gen_mov_i64
42
@@ -XXX,XX +XXX,XX @@
43
#define TCGv_reg TCGv_i32
44
#define tcg_temp_new tcg_temp_new_i32
45
#define tcg_global_mem_new tcg_global_mem_new_i32
46
-#define tcg_temp_free tcg_temp_free_i32
47
48
#define tcg_gen_movi_reg tcg_gen_movi_i32
49
#define tcg_gen_mov_reg tcg_gen_mov_i32
50
@@ -XXX,XX +XXX,XX @@ static void cond_free(DisasCond *cond)
51
{
52
switch (cond->c) {
53
default:
54
- if (cond->a0 != cpu_psw_n) {
55
- tcg_temp_free(cond->a0);
56
- }
57
- tcg_temp_free(cond->a1);
58
cond->a0 = NULL;
59
cond->a1 = NULL;
60
/* fallthru */
61
@@ -XXX,XX +XXX,XX @@ static DisasCond do_unit_cond(unsigned cf, TCGv_reg res,
62
tcg_gen_and_reg(tmp, in1, in2);
63
tcg_gen_andc_reg(cb, cb, res);
64
tcg_gen_or_reg(cb, cb, tmp);
65
- tcg_temp_free(tmp);
66
}
67
68
switch (cf >> 1) {
69
@@ -XXX,XX +XXX,XX @@ static DisasCond do_unit_cond(unsigned cf, TCGv_reg res,
70
tcg_gen_andc_reg(tmp, tmp, res);
71
tcg_gen_andi_reg(tmp, tmp, 0x80808080u);
72
cond = cond_make_0(TCG_COND_NE, tmp);
73
- tcg_temp_free(tmp);
74
break;
75
76
case 3: /* SHZ / NHZ */
77
@@ -XXX,XX +XXX,XX @@ static DisasCond do_unit_cond(unsigned cf, TCGv_reg res,
78
tcg_gen_andc_reg(tmp, tmp, res);
79
tcg_gen_andi_reg(tmp, tmp, 0x80008000u);
80
cond = cond_make_0(TCG_COND_NE, tmp);
81
- tcg_temp_free(tmp);
82
break;
83
84
case 4: /* SDC / NDC */
85
@@ -XXX,XX +XXX,XX @@ static DisasCond do_unit_cond(unsigned cf, TCGv_reg res,
86
default:
87
g_assert_not_reached();
88
}
89
- if (cf & 8) {
90
- tcg_temp_free(cb);
91
- }
92
if (cf & 1) {
93
cond.c = tcg_invert_cond(cond.c);
94
}
95
@@ -XXX,XX +XXX,XX @@ static TCGv_reg do_add_sv(DisasContext *ctx, TCGv_reg res,
96
tcg_gen_xor_reg(sv, res, in1);
97
tcg_gen_xor_reg(tmp, in1, in2);
98
tcg_gen_andc_reg(sv, sv, tmp);
99
- tcg_temp_free(tmp);
100
101
return sv;
102
}
103
@@ -XXX,XX +XXX,XX @@ static TCGv_reg do_sub_sv(DisasContext *ctx, TCGv_reg res,
104
tcg_gen_xor_reg(sv, res, in1);
105
tcg_gen_xor_reg(tmp, in1, in2);
106
tcg_gen_and_reg(sv, sv, tmp);
107
- tcg_temp_free(tmp);
108
109
return sv;
110
}
111
@@ -XXX,XX +XXX,XX @@ static void do_add(DisasContext *ctx, unsigned rt, TCGv_reg in1,
112
tmp = tcg_temp_new();
113
tcg_gen_setcond_reg(cond.c, tmp, cond.a0, cond.a1);
114
gen_helper_tcond(cpu_env, tmp);
115
- tcg_temp_free(tmp);
116
}
117
118
/* Write back the result. */
119
@@ -XXX,XX +XXX,XX @@ static void do_add(DisasContext *ctx, unsigned rt, TCGv_reg in1,
120
save_or_nullify(ctx, cpu_psw_cb_msb, cb_msb);
121
}
122
save_gpr(ctx, rt, dest);
123
- tcg_temp_free(dest);
124
125
/* Install the new nullification. */
126
cond_free(&ctx->null_cond);
127
@@ -XXX,XX +XXX,XX @@ static void do_sub(DisasContext *ctx, unsigned rt, TCGv_reg in1,
128
tmp = tcg_temp_new();
129
tcg_gen_setcond_reg(cond.c, tmp, cond.a0, cond.a1);
130
gen_helper_tcond(cpu_env, tmp);
131
- tcg_temp_free(tmp);
132
}
133
134
/* Write back the result. */
135
save_or_nullify(ctx, cpu_psw_cb, cb);
136
save_or_nullify(ctx, cpu_psw_cb_msb, cb_msb);
137
save_gpr(ctx, rt, dest);
138
- tcg_temp_free(dest);
139
- tcg_temp_free(cb);
140
- tcg_temp_free(cb_msb);
141
142
/* Install the new nullification. */
143
cond_free(&ctx->null_cond);
144
@@ -XXX,XX +XXX,XX @@ static void do_cmpclr(DisasContext *ctx, unsigned rt, TCGv_reg in1,
145
/* Clear. */
146
tcg_gen_movi_reg(dest, 0);
147
save_gpr(ctx, rt, dest);
148
- tcg_temp_free(dest);
149
150
/* Install the new nullification. */
151
cond_free(&ctx->null_cond);
152
@@ -XXX,XX +XXX,XX @@ static void do_unit(DisasContext *ctx, unsigned rt, TCGv_reg in1,
153
TCGv_reg tmp = tcg_temp_new();
154
tcg_gen_setcond_reg(cond.c, tmp, cond.a0, cond.a1);
155
gen_helper_tcond(cpu_env, tmp);
156
- tcg_temp_free(tmp);
157
}
158
save_gpr(ctx, rt, dest);
159
160
@@ -XXX,XX +XXX,XX @@ static TCGv_i64 space_select(DisasContext *ctx, int sp, TCGv_reg base)
161
tcg_gen_shri_reg(tmp, base, TARGET_REGISTER_BITS - 5);
162
tcg_gen_andi_reg(tmp, tmp, 030);
163
tcg_gen_trunc_reg_ptr(ptr, tmp);
164
- tcg_temp_free(tmp);
165
166
tcg_gen_add_ptr(ptr, ptr, cpu_env);
167
tcg_gen_ld_i64(spc, ptr, offsetof(CPUHPPAState, sr[4]));
168
- tcg_temp_free_ptr(ptr);
169
170
return spc;
171
}
172
@@ -XXX,XX +XXX,XX @@ static bool do_floadw(DisasContext *ctx, unsigned rt, unsigned rb,
173
tmp = tcg_temp_new_i32();
174
do_load_32(ctx, tmp, rb, rx, scale, disp, sp, modify, MO_TEUL);
175
save_frw_i32(rt, tmp);
176
- tcg_temp_free_i32(tmp);
177
178
if (rt == 0) {
179
gen_helper_loaded_fr0(cpu_env);
180
@@ -XXX,XX +XXX,XX @@ static bool do_floadd(DisasContext *ctx, unsigned rt, unsigned rb,
181
tmp = tcg_temp_new_i64();
182
do_load_64(ctx, tmp, rb, rx, scale, disp, sp, modify, MO_TEUQ);
183
save_frd(rt, tmp);
184
- tcg_temp_free_i64(tmp);
185
186
if (rt == 0) {
187
gen_helper_loaded_fr0(cpu_env);
188
@@ -XXX,XX +XXX,XX @@ static bool do_fstorew(DisasContext *ctx, unsigned rt, unsigned rb,
189
190
tmp = load_frw_i32(rt);
191
do_store_32(ctx, tmp, rb, rx, scale, disp, sp, modify, MO_TEUL);
192
- tcg_temp_free_i32(tmp);
193
194
return nullify_end(ctx);
195
}
196
@@ -XXX,XX +XXX,XX @@ static bool do_fstored(DisasContext *ctx, unsigned rt, unsigned rb,
197
198
tmp = load_frd(rt);
199
do_store_64(ctx, tmp, rb, rx, scale, disp, sp, modify, MO_TEUQ);
200
- tcg_temp_free_i64(tmp);
201
202
return nullify_end(ctx);
203
}
204
@@ -XXX,XX +XXX,XX @@ static bool do_fop_wew(DisasContext *ctx, unsigned rt, unsigned ra,
205
func(tmp, cpu_env, tmp);
206
207
save_frw_i32(rt, tmp);
208
- tcg_temp_free_i32(tmp);
209
return nullify_end(ctx);
210
}
211
212
@@ -XXX,XX +XXX,XX @@ static bool do_fop_wed(DisasContext *ctx, unsigned rt, unsigned ra,
213
214
func(dst, cpu_env, src);
215
216
- tcg_temp_free_i64(src);
217
save_frw_i32(rt, dst);
218
- tcg_temp_free_i32(dst);
219
return nullify_end(ctx);
220
}
221
222
@@ -XXX,XX +XXX,XX @@ static bool do_fop_ded(DisasContext *ctx, unsigned rt, unsigned ra,
223
func(tmp, cpu_env, tmp);
224
225
save_frd(rt, tmp);
226
- tcg_temp_free_i64(tmp);
227
return nullify_end(ctx);
228
}
229
230
@@ -XXX,XX +XXX,XX @@ static bool do_fop_dew(DisasContext *ctx, unsigned rt, unsigned ra,
231
232
func(dst, cpu_env, src);
233
234
- tcg_temp_free_i32(src);
235
save_frd(rt, dst);
236
- tcg_temp_free_i64(dst);
237
return nullify_end(ctx);
238
}
239
240
@@ -XXX,XX +XXX,XX @@ static bool do_fop_weww(DisasContext *ctx, unsigned rt,
241
242
func(a, cpu_env, a, b);
243
244
- tcg_temp_free_i32(b);
245
save_frw_i32(rt, a);
246
- tcg_temp_free_i32(a);
247
return nullify_end(ctx);
248
}
249
250
@@ -XXX,XX +XXX,XX @@ static bool do_fop_dedd(DisasContext *ctx, unsigned rt,
251
252
func(a, cpu_env, a, b);
253
254
- tcg_temp_free_i64(b);
255
save_frd(rt, a);
256
- tcg_temp_free_i64(a);
257
return nullify_end(ctx);
258
}
259
260
@@ -XXX,XX +XXX,XX @@ static bool trans_mfsp(DisasContext *ctx, arg_mfsp *a)
261
tcg_gen_trunc_i64_reg(t1, t0);
262
263
save_gpr(ctx, rt, t1);
264
- tcg_temp_free(t1);
265
- tcg_temp_free_i64(t0);
266
267
cond_free(&ctx->null_cond);
268
return true;
269
@@ -XXX,XX +XXX,XX @@ static bool trans_mtsp(DisasContext *ctx, arg_mtsp *a)
270
} else {
271
tcg_gen_mov_i64(cpu_sr[rs], t64);
272
}
273
- tcg_temp_free_i64(t64);
274
275
return nullify_end(ctx);
276
}
277
@@ -XXX,XX +XXX,XX @@ static bool trans_mtctl(DisasContext *ctx, arg_mtctl *a)
278
tmp = tcg_temp_new();
279
tcg_gen_andi_reg(tmp, reg, TARGET_REGISTER_BITS - 1);
280
save_or_nullify(ctx, cpu_sar, tmp);
281
- tcg_temp_free(tmp);
282
283
cond_free(&ctx->null_cond);
284
return true;
285
@@ -XXX,XX +XXX,XX @@ static bool trans_mtsarcm(DisasContext *ctx, arg_mtsarcm *a)
286
tcg_gen_not_reg(tmp, load_gpr(ctx, a->r));
287
tcg_gen_andi_reg(tmp, tmp, TARGET_REGISTER_BITS - 1);
288
save_or_nullify(ctx, cpu_sar, tmp);
289
- tcg_temp_free(tmp);
290
291
cond_free(&ctx->null_cond);
292
return true;
293
@@ -XXX,XX +XXX,XX @@ static bool trans_ldsid(DisasContext *ctx, arg_ldsid *a)
294
tcg_gen_mov_i64(t0, space_select(ctx, a->sp, load_gpr(ctx, a->b)));
295
tcg_gen_shri_i64(t0, t0, 32);
296
tcg_gen_trunc_i64_reg(dest, t0);
297
-
298
- tcg_temp_free_i64(t0);
299
#endif
300
save_gpr(ctx, a->t, dest);
301
302
@@ -XXX,XX +XXX,XX @@ static bool trans_probe(DisasContext *ctx, arg_probe *a)
303
304
gen_helper_probe(dest, cpu_env, addr, level, want);
305
306
- tcg_temp_free_i32(level);
307
-
308
save_gpr(ctx, a->t, dest);
309
return nullify_end(ctx);
310
}
311
@@ -XXX,XX +XXX,XX @@ static bool trans_ixtlbxf(DisasContext *ctx, arg_ixtlbxf *a)
312
: offsetof(CPUHPPAState, cr[CR_IIAOQ]));
313
tcg_gen_shli_i64(stl, stl, 32);
314
tcg_gen_or_tl(addr, atl, stl);
315
- tcg_temp_free_tl(atl);
316
- tcg_temp_free_tl(stl);
317
318
reg = load_gpr(ctx, a->r);
319
if (a->addr) {
320
@@ -XXX,XX +XXX,XX @@ static bool trans_ixtlbxf(DisasContext *ctx, arg_ixtlbxf *a)
321
} else {
322
gen_helper_itlbp(cpu_env, addr, reg);
323
}
324
- tcg_temp_free_tl(addr);
325
326
/* Exit TB for TLB change if mmu is enabled. */
327
if (ctx->tb_flags & PSW_C) {
328
@@ -XXX,XX +XXX,XX @@ static bool trans_lpa(DisasContext *ctx, arg_ldst *a)
329
save_gpr(ctx, a->b, ofs);
330
}
331
save_gpr(ctx, a->t, paddr);
332
- tcg_temp_free(paddr);
333
334
return nullify_end(ctx);
335
#endif
336
@@ -XXX,XX +XXX,XX @@ static bool trans_ds(DisasContext *ctx, arg_rrr_cf *a)
337
tcg_gen_add2_i32(dest, cpu_psw_cb_msb, add1, zero, add2, zero);
338
tcg_gen_add2_i32(dest, cpu_psw_cb_msb, dest, cpu_psw_cb_msb, addc, zero);
339
340
- tcg_temp_free(addc);
341
-
342
/* Write back the result register. */
343
save_gpr(ctx, a->t, dest);
344
345
@@ -XXX,XX +XXX,XX @@ static bool trans_ds(DisasContext *ctx, arg_rrr_cf *a)
346
ctx->null_cond = do_cond(a->cf, dest, cpu_psw_cb_msb, sv);
347
}
348
349
- tcg_temp_free(add1);
350
- tcg_temp_free(add2);
351
- tcg_temp_free(dest);
352
-
353
return nullify_end(ctx);
354
}
355
356
@@ -XXX,XX +XXX,XX @@ static bool do_addb(DisasContext *ctx, unsigned r, TCGv_reg in1,
357
358
cond = do_cond(c * 2 + f, dest, cb_msb, sv);
359
save_gpr(ctx, r, dest);
360
- tcg_temp_free(dest);
361
return do_cbranch(ctx, disp, n, &cond);
362
}
363
364
@@ -XXX,XX +XXX,XX @@ static bool trans_bb_sar(DisasContext *ctx, arg_bb_sar *a)
365
tcg_gen_shl_reg(tmp, tcg_r, cpu_sar);
366
367
cond = cond_make_0(a->c ? TCG_COND_GE : TCG_COND_LT, tmp);
368
- tcg_temp_free(tmp);
369
return do_cbranch(ctx, a->disp, a->n, &cond);
370
}
371
372
@@ -XXX,XX +XXX,XX @@ static bool trans_bb_imm(DisasContext *ctx, arg_bb_imm *a)
373
tcg_gen_shli_reg(tmp, tcg_r, a->p);
374
375
cond = cond_make_0(a->c ? TCG_COND_GE : TCG_COND_LT, tmp);
376
- tcg_temp_free(tmp);
377
return do_cbranch(ctx, a->disp, a->n, &cond);
378
}
379
380
@@ -XXX,XX +XXX,XX @@ static bool trans_shrpw_sar(DisasContext *ctx, arg_shrpw_sar *a)
381
tcg_gen_trunc_reg_i32(t32, load_gpr(ctx, a->r2));
382
tcg_gen_rotr_i32(t32, t32, cpu_sar);
383
tcg_gen_extu_i32_reg(dest, t32);
384
- tcg_temp_free_i32(t32);
385
} else {
386
TCGv_i64 t = tcg_temp_new_i64();
387
TCGv_i64 s = tcg_temp_new_i64();
388
@@ -XXX,XX +XXX,XX @@ static bool trans_shrpw_sar(DisasContext *ctx, arg_shrpw_sar *a)
389
tcg_gen_extu_reg_i64(s, cpu_sar);
390
tcg_gen_shr_i64(t, t, s);
391
tcg_gen_trunc_i64_reg(dest, t);
392
-
393
- tcg_temp_free_i64(t);
394
- tcg_temp_free_i64(s);
395
}
396
save_gpr(ctx, a->t, dest);
397
398
@@ -XXX,XX +XXX,XX @@ static bool trans_shrpw_imm(DisasContext *ctx, arg_shrpw_imm *a)
399
tcg_gen_trunc_reg_i32(t32, t2);
400
tcg_gen_rotri_i32(t32, t32, sa);
401
tcg_gen_extu_i32_reg(dest, t32);
402
- tcg_temp_free_i32(t32);
403
} else {
404
TCGv_i64 t64 = tcg_temp_new_i64();
405
tcg_gen_concat_reg_i64(t64, t2, cpu_gr[a->r1]);
406
tcg_gen_shri_i64(t64, t64, sa);
407
tcg_gen_trunc_i64_reg(dest, t64);
408
- tcg_temp_free_i64(t64);
409
}
410
save_gpr(ctx, a->t, dest);
411
412
@@ -XXX,XX +XXX,XX @@ static bool trans_extrw_sar(DisasContext *ctx, arg_extrw_sar *a)
413
tcg_gen_shr_reg(dest, src, tmp);
414
tcg_gen_extract_reg(dest, dest, 0, len);
415
}
416
- tcg_temp_free(tmp);
417
save_gpr(ctx, a->t, dest);
418
419
/* Install the new nullification. */
420
@@ -XXX,XX +XXX,XX @@ static bool do_depw_sar(DisasContext *ctx, unsigned rt, unsigned c,
421
} else {
422
tcg_gen_shl_reg(dest, tmp, shift);
423
}
424
- tcg_temp_free(shift);
425
- tcg_temp_free(mask);
426
- tcg_temp_free(tmp);
427
save_gpr(ctx, rt, dest);
428
429
/* Install the new nullification. */
430
@@ -XXX,XX +XXX,XX @@ static bool trans_be(DisasContext *ctx, arg_be *a)
431
tcg_gen_mov_i64(cpu_iasq_b, new_spc);
432
nullify_set(ctx, a->n);
433
}
434
- tcg_temp_free_i64(new_spc);
435
tcg_gen_lookup_and_goto_ptr();
436
ctx->base.is_jmp = DISAS_NORETURN;
437
return nullify_end(ctx);
438
@@ -XXX,XX +XXX,XX @@ static bool trans_fcmp_f(DisasContext *ctx, arg_fclass2 *a)
439
440
gen_helper_fcmp_s(cpu_env, ta, tb, ty, tc);
441
442
- tcg_temp_free_i32(ta);
443
- tcg_temp_free_i32(tb);
444
-
445
return nullify_end(ctx);
446
}
447
448
@@ -XXX,XX +XXX,XX @@ static bool trans_fcmp_d(DisasContext *ctx, arg_fclass2 *a)
449
450
gen_helper_fcmp_d(cpu_env, ta, tb, ty, tc);
451
452
- tcg_temp_free_i64(ta);
453
- tcg_temp_free_i64(tb);
454
-
455
return nullify_end(ctx);
456
}
457
458
@@ -XXX,XX +XXX,XX @@ static bool trans_ftest(DisasContext *ctx, arg_ftest *a)
459
460
tcg_gen_extract_reg(t, t, 21 - cbit, 1);
461
ctx->null_cond = cond_make_0(TCG_COND_NE, t);
462
- tcg_temp_free(t);
463
}
464
465
done:
466
@@ -XXX,XX +XXX,XX @@ static bool trans_xmpyu(DisasContext *ctx, arg_xmpyu *a)
467
y = load_frw0_i64(a->r2);
468
tcg_gen_mul_i64(x, x, y);
469
save_frd(a->t, x);
470
- tcg_temp_free_i64(x);
471
- tcg_temp_free_i64(y);
472
473
return nullify_end(ctx);
474
}
475
@@ -XXX,XX +XXX,XX @@ static bool trans_fmpyfadd_f(DisasContext *ctx, arg_fmpyfadd_f *a)
476
gen_helper_fmpyfadd_s(x, cpu_env, x, y, z);
477
}
478
479
- tcg_temp_free_i32(y);
480
- tcg_temp_free_i32(z);
481
save_frw_i32(a->t, x);
482
- tcg_temp_free_i32(x);
483
return nullify_end(ctx);
484
}
485
486
@@ -XXX,XX +XXX,XX @@ static bool trans_fmpyfadd_d(DisasContext *ctx, arg_fmpyfadd_d *a)
487
gen_helper_fmpyfadd_d(x, cpu_env, x, y, z);
488
}
489
490
- tcg_temp_free_i64(y);
491
- tcg_temp_free_i64(z);
492
save_frd(a->t, x);
493
- tcg_temp_free_i64(x);
494
return nullify_end(ctx);
495
}
496
497
@@ -XXX,XX +XXX,XX @@ static void hppa_tr_translate_insn(DisasContextBase *dcbase, CPUState *cs)
498
}
499
}
500
501
- /* Free any temporaries allocated. */
502
+ /* Forget any temporaries allocated. */
503
for (i = 0, n = ctx->ntempr; i < n; ++i) {
504
- tcg_temp_free(ctx->tempr[i]);
505
ctx->tempr[i] = NULL;
506
}
507
for (i = 0, n = ctx->ntempl; i < n; ++i) {
508
- tcg_temp_free_tl(ctx->templ[i]);
509
ctx->templ[i] = NULL;
510
}
511
ctx->ntempr = 0;
512
--
513
2.34.1
diff view generated by jsdifflib
Deleted patch
1
Translators are no longer required to free tcg temporaries,
2
therefore there's no need to record temps for later freeing.
3
Replace the few uses with tcg_temp_new.
4
1
5
Reviewed-by: Song Gao <gaosong@loongson.cn>
6
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
7
---
8
target/loongarch/translate.h | 3 ---
9
target/loongarch/translate.c | 21 +++----------------
10
.../insn_trans/trans_privileged.c.inc | 2 +-
11
3 files changed, 4 insertions(+), 22 deletions(-)
12
13
diff --git a/target/loongarch/translate.h b/target/loongarch/translate.h
14
index XXXXXXX..XXXXXXX 100644
15
--- a/target/loongarch/translate.h
16
+++ b/target/loongarch/translate.h
17
@@ -XXX,XX +XXX,XX @@ typedef struct DisasContext {
18
uint16_t mem_idx;
19
uint16_t plv;
20
TCGv zero;
21
- /* Space for 3 operands plus 1 extra for address computation. */
22
- TCGv temp[4];
23
- uint8_t ntemp;
24
} DisasContext;
25
26
void generate_exception(DisasContext *ctx, int excp);
27
diff --git a/target/loongarch/translate.c b/target/loongarch/translate.c
28
index XXXXXXX..XXXXXXX 100644
29
--- a/target/loongarch/translate.c
30
+++ b/target/loongarch/translate.c
31
@@ -XXX,XX +XXX,XX @@ static void loongarch_tr_init_disas_context(DisasContextBase *dcbase,
32
bound = -(ctx->base.pc_first | TARGET_PAGE_MASK) / 4;
33
ctx->base.max_insns = MIN(ctx->base.max_insns, bound);
34
35
- ctx->ntemp = 0;
36
- memset(ctx->temp, 0, sizeof(ctx->temp));
37
-
38
ctx->zero = tcg_constant_tl(0);
39
}
40
41
@@ -XXX,XX +XXX,XX @@ static void loongarch_tr_insn_start(DisasContextBase *dcbase, CPUState *cs)
42
*
43
* Further, we may provide an extension for word operations.
44
*/
45
-static TCGv temp_new(DisasContext *ctx)
46
-{
47
- assert(ctx->ntemp < ARRAY_SIZE(ctx->temp));
48
- return ctx->temp[ctx->ntemp++] = tcg_temp_new();
49
-}
50
-
51
static TCGv gpr_src(DisasContext *ctx, int reg_num, DisasExtend src_ext)
52
{
53
TCGv t;
54
@@ -XXX,XX +XXX,XX @@ static TCGv gpr_src(DisasContext *ctx, int reg_num, DisasExtend src_ext)
55
case EXT_NONE:
56
return cpu_gpr[reg_num];
57
case EXT_SIGN:
58
- t = temp_new(ctx);
59
+ t = tcg_temp_new();
60
tcg_gen_ext32s_tl(t, cpu_gpr[reg_num]);
61
return t;
62
case EXT_ZERO:
63
- t = temp_new(ctx);
64
+ t = tcg_temp_new();
65
tcg_gen_ext32u_tl(t, cpu_gpr[reg_num]);
66
return t;
67
}
68
@@ -XXX,XX +XXX,XX @@ static TCGv gpr_src(DisasContext *ctx, int reg_num, DisasExtend src_ext)
69
static TCGv gpr_dst(DisasContext *ctx, int reg_num, DisasExtend dst_ext)
70
{
71
if (reg_num == 0 || dst_ext) {
72
- return temp_new(ctx);
73
+ return tcg_temp_new();
74
}
75
return cpu_gpr[reg_num];
76
}
77
@@ -XXX,XX +XXX,XX @@ static void loongarch_tr_translate_insn(DisasContextBase *dcbase, CPUState *cs)
78
generate_exception(ctx, EXCCODE_INE);
79
}
80
81
- for (int i = ctx->ntemp - 1; i >= 0; --i) {
82
- tcg_temp_free(ctx->temp[i]);
83
- ctx->temp[i] = NULL;
84
- }
85
- ctx->ntemp = 0;
86
-
87
ctx->base.pc_next += 4;
88
}
89
90
diff --git a/target/loongarch/insn_trans/trans_privileged.c.inc b/target/loongarch/insn_trans/trans_privileged.c.inc
91
index XXXXXXX..XXXXXXX 100644
92
--- a/target/loongarch/insn_trans/trans_privileged.c.inc
93
+++ b/target/loongarch/insn_trans/trans_privileged.c.inc
94
@@ -XXX,XX +XXX,XX @@ static bool trans_csrwr(DisasContext *ctx, arg_csrwr *a)
95
dest = gpr_dst(ctx, a->rd, EXT_NONE);
96
csr->writefn(dest, cpu_env, src1);
97
} else {
98
- dest = temp_new(ctx);
99
+ dest = tcg_temp_new();
100
tcg_gen_ld_tl(dest, cpu_env, csr->offset);
101
tcg_gen_st_tl(src1, cpu_env, csr->offset);
102
}
103
--
104
2.34.1
diff view generated by jsdifflib
Deleted patch
1
Translators are no longer required to free tcg temporaries.
2
1
3
Reviewed-by: Song Gao <gaosong@loongson.cn>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
5
---
6
target/loongarch/insn_trans/trans_arith.c.inc | 12 -------
7
.../loongarch/insn_trans/trans_atomic.c.inc | 3 --
8
target/loongarch/insn_trans/trans_bit.c.inc | 12 -------
9
target/loongarch/insn_trans/trans_fcmp.c.inc | 3 --
10
.../loongarch/insn_trans/trans_fmemory.c.inc | 20 ++---------
11
target/loongarch/insn_trans/trans_fmov.c.inc | 6 ----
12
.../loongarch/insn_trans/trans_memory.c.inc | 34 +++----------------
13
.../insn_trans/trans_privileged.c.inc | 4 ---
14
target/loongarch/insn_trans/trans_shift.c.inc | 11 ------
15
9 files changed, 6 insertions(+), 99 deletions(-)
16
17
diff --git a/target/loongarch/insn_trans/trans_arith.c.inc b/target/loongarch/insn_trans/trans_arith.c.inc
18
index XXXXXXX..XXXXXXX 100644
19
--- a/target/loongarch/insn_trans/trans_arith.c.inc
20
+++ b/target/loongarch/insn_trans/trans_arith.c.inc
21
@@ -XXX,XX +XXX,XX @@ static void gen_mulh_d(TCGv dest, TCGv src1, TCGv src2)
22
{
23
TCGv discard = tcg_temp_new();
24
tcg_gen_muls2_tl(discard, dest, src1, src2);
25
- tcg_temp_free(discard);
26
}
27
28
static void gen_mulh_du(TCGv dest, TCGv src1, TCGv src2)
29
{
30
TCGv discard = tcg_temp_new();
31
tcg_gen_mulu2_tl(discard, dest, src1, src2);
32
- tcg_temp_free(discard);
33
}
34
35
static void prep_divisor_d(TCGv ret, TCGv src1, TCGv src2)
36
@@ -XXX,XX +XXX,XX @@ static void prep_divisor_d(TCGv ret, TCGv src1, TCGv src2)
37
tcg_gen_and_tl(ret, ret, t0);
38
tcg_gen_or_tl(ret, ret, t1);
39
tcg_gen_movcond_tl(TCG_COND_NE, ret, ret, zero, ret, src2);
40
-
41
- tcg_temp_free(t0);
42
- tcg_temp_free(t1);
43
}
44
45
static void prep_divisor_du(TCGv ret, TCGv src2)
46
@@ -XXX,XX +XXX,XX @@ static void gen_div_d(TCGv dest, TCGv src1, TCGv src2)
47
TCGv t0 = tcg_temp_new();
48
prep_divisor_d(t0, src1, src2);
49
tcg_gen_div_tl(dest, src1, t0);
50
- tcg_temp_free(t0);
51
}
52
53
static void gen_rem_d(TCGv dest, TCGv src1, TCGv src2)
54
@@ -XXX,XX +XXX,XX @@ static void gen_rem_d(TCGv dest, TCGv src1, TCGv src2)
55
TCGv t0 = tcg_temp_new();
56
prep_divisor_d(t0, src1, src2);
57
tcg_gen_rem_tl(dest, src1, t0);
58
- tcg_temp_free(t0);
59
}
60
61
static void gen_div_du(TCGv dest, TCGv src1, TCGv src2)
62
@@ -XXX,XX +XXX,XX @@ static void gen_div_du(TCGv dest, TCGv src1, TCGv src2)
63
TCGv t0 = tcg_temp_new();
64
prep_divisor_du(t0, src2);
65
tcg_gen_divu_tl(dest, src1, t0);
66
- tcg_temp_free(t0);
67
}
68
69
static void gen_rem_du(TCGv dest, TCGv src1, TCGv src2)
70
@@ -XXX,XX +XXX,XX @@ static void gen_rem_du(TCGv dest, TCGv src1, TCGv src2)
71
TCGv t0 = tcg_temp_new();
72
prep_divisor_du(t0, src2);
73
tcg_gen_remu_tl(dest, src1, t0);
74
- tcg_temp_free(t0);
75
}
76
77
static void gen_div_w(TCGv dest, TCGv src1, TCGv src2)
78
@@ -XXX,XX +XXX,XX @@ static void gen_div_w(TCGv dest, TCGv src1, TCGv src2)
79
/* We need not check for integer overflow for div_w. */
80
prep_divisor_du(t0, src2);
81
tcg_gen_div_tl(dest, src1, t0);
82
- tcg_temp_free(t0);
83
}
84
85
static void gen_rem_w(TCGv dest, TCGv src1, TCGv src2)
86
@@ -XXX,XX +XXX,XX @@ static void gen_rem_w(TCGv dest, TCGv src1, TCGv src2)
87
/* We need not check for integer overflow for rem_w. */
88
prep_divisor_du(t0, src2);
89
tcg_gen_rem_tl(dest, src1, t0);
90
- tcg_temp_free(t0);
91
}
92
93
static void gen_alsl(TCGv dest, TCGv src1, TCGv src2, target_long sa)
94
@@ -XXX,XX +XXX,XX @@ static void gen_alsl(TCGv dest, TCGv src1, TCGv src2, target_long sa)
95
TCGv t0 = tcg_temp_new();
96
tcg_gen_shli_tl(t0, src1, sa);
97
tcg_gen_add_tl(dest, t0, src2);
98
- tcg_temp_free(t0);
99
}
100
101
static bool trans_lu32i_d(DisasContext *ctx, arg_lu32i_d *a)
102
diff --git a/target/loongarch/insn_trans/trans_atomic.c.inc b/target/loongarch/insn_trans/trans_atomic.c.inc
103
index XXXXXXX..XXXXXXX 100644
104
--- a/target/loongarch/insn_trans/trans_atomic.c.inc
105
+++ b/target/loongarch/insn_trans/trans_atomic.c.inc
106
@@ -XXX,XX +XXX,XX @@ static bool gen_ll(DisasContext *ctx, arg_rr_i *a, MemOp mop)
107
tcg_gen_st_tl(t0, cpu_env, offsetof(CPULoongArchState, lladdr));
108
tcg_gen_st_tl(dest, cpu_env, offsetof(CPULoongArchState, llval));
109
gen_set_gpr(a->rd, dest, EXT_NONE);
110
- tcg_temp_free(t0);
111
112
return true;
113
}
114
@@ -XXX,XX +XXX,XX @@ static bool gen_sc(DisasContext *ctx, arg_rr_i *a, MemOp mop)
115
tcg_gen_setcond_tl(TCG_COND_EQ, dest, t0, cpu_llval);
116
gen_set_label(done);
117
gen_set_gpr(a->rd, dest, EXT_NONE);
118
- tcg_temp_free(t0);
119
- tcg_temp_free(val);
120
121
return true;
122
}
123
diff --git a/target/loongarch/insn_trans/trans_bit.c.inc b/target/loongarch/insn_trans/trans_bit.c.inc
124
index XXXXXXX..XXXXXXX 100644
125
--- a/target/loongarch/insn_trans/trans_bit.c.inc
126
+++ b/target/loongarch/insn_trans/trans_bit.c.inc
127
@@ -XXX,XX +XXX,XX @@ static void gen_revb_2h(TCGv dest, TCGv src1)
128
tcg_gen_and_tl(t1, src1, mask);
129
tcg_gen_shli_tl(t1, t1, 8);
130
tcg_gen_or_tl(dest, t0, t1);
131
-
132
- tcg_temp_free(t0);
133
- tcg_temp_free(t1);
134
}
135
136
static void gen_revb_4h(TCGv dest, TCGv src1)
137
@@ -XXX,XX +XXX,XX @@ static void gen_revb_4h(TCGv dest, TCGv src1)
138
tcg_gen_and_tl(t1, src1, mask);
139
tcg_gen_shli_tl(t1, t1, 8);
140
tcg_gen_or_tl(dest, t0, t1);
141
-
142
- tcg_temp_free(t0);
143
- tcg_temp_free(t1);
144
}
145
146
static void gen_revh_2w(TCGv dest, TCGv src1)
147
@@ -XXX,XX +XXX,XX @@ static void gen_revh_2w(TCGv dest, TCGv src1)
148
tcg_gen_and_i64(t0, t0, mask);
149
tcg_gen_shli_i64(t1, t1, 16);
150
tcg_gen_or_i64(dest, t1, t0);
151
-
152
- tcg_temp_free_i64(t0);
153
- tcg_temp_free_i64(t1);
154
}
155
156
static void gen_revh_d(TCGv dest, TCGv src1)
157
@@ -XXX,XX +XXX,XX @@ static void gen_revh_d(TCGv dest, TCGv src1)
158
tcg_gen_shli_tl(t0, t0, 16);
159
tcg_gen_or_tl(t0, t0, t1);
160
tcg_gen_rotri_tl(dest, t0, 32);
161
-
162
- tcg_temp_free(t0);
163
- tcg_temp_free(t1);
164
}
165
166
static void gen_maskeqz(TCGv dest, TCGv src1, TCGv src2)
167
diff --git a/target/loongarch/insn_trans/trans_fcmp.c.inc b/target/loongarch/insn_trans/trans_fcmp.c.inc
168
index XXXXXXX..XXXXXXX 100644
169
--- a/target/loongarch/insn_trans/trans_fcmp.c.inc
170
+++ b/target/loongarch/insn_trans/trans_fcmp.c.inc
171
@@ -XXX,XX +XXX,XX @@ static bool trans_fcmp_cond_s(DisasContext *ctx, arg_fcmp_cond_s *a)
172
fn(var, cpu_env, cpu_fpr[a->fj], cpu_fpr[a->fk], tcg_constant_i32(flags));
173
174
tcg_gen_st8_tl(var, cpu_env, offsetof(CPULoongArchState, cf[a->cd]));
175
- tcg_temp_free(var);
176
return true;
177
}
178
179
@@ -XXX,XX +XXX,XX @@ static bool trans_fcmp_cond_d(DisasContext *ctx, arg_fcmp_cond_d *a)
180
fn(var, cpu_env, cpu_fpr[a->fj], cpu_fpr[a->fk], tcg_constant_i32(flags));
181
182
tcg_gen_st8_tl(var, cpu_env, offsetof(CPULoongArchState, cf[a->cd]));
183
-
184
- tcg_temp_free(var);
185
return true;
186
}
187
diff --git a/target/loongarch/insn_trans/trans_fmemory.c.inc b/target/loongarch/insn_trans/trans_fmemory.c.inc
188
index XXXXXXX..XXXXXXX 100644
189
--- a/target/loongarch/insn_trans/trans_fmemory.c.inc
190
+++ b/target/loongarch/insn_trans/trans_fmemory.c.inc
191
@@ -XXX,XX +XXX,XX @@ static void maybe_nanbox_load(TCGv freg, MemOp mop)
192
static bool gen_fload_i(DisasContext *ctx, arg_fr_i *a, MemOp mop)
193
{
194
TCGv addr = gpr_src(ctx, a->rj, EXT_NONE);
195
- TCGv temp = NULL;
196
197
CHECK_FPE;
198
199
if (a->imm) {
200
- temp = tcg_temp_new();
201
+ TCGv temp = tcg_temp_new();
202
tcg_gen_addi_tl(temp, addr, a->imm);
203
addr = temp;
204
}
205
@@ -XXX,XX +XXX,XX @@ static bool gen_fload_i(DisasContext *ctx, arg_fr_i *a, MemOp mop)
206
tcg_gen_qemu_ld_tl(cpu_fpr[a->fd], addr, ctx->mem_idx, mop);
207
maybe_nanbox_load(cpu_fpr[a->fd], mop);
208
209
- if (temp) {
210
- tcg_temp_free(temp);
211
- }
212
-
213
return true;
214
}
215
216
static bool gen_fstore_i(DisasContext *ctx, arg_fr_i *a, MemOp mop)
217
{
218
TCGv addr = gpr_src(ctx, a->rj, EXT_NONE);
219
- TCGv temp = NULL;
220
221
CHECK_FPE;
222
223
if (a->imm) {
224
- temp = tcg_temp_new();
225
+ TCGv temp = tcg_temp_new();
226
tcg_gen_addi_tl(temp, addr, a->imm);
227
addr = temp;
228
}
229
230
tcg_gen_qemu_st_tl(cpu_fpr[a->fd], addr, ctx->mem_idx, mop);
231
-
232
- if (temp) {
233
- tcg_temp_free(temp);
234
- }
235
return true;
236
}
237
238
@@ -XXX,XX +XXX,XX @@ static bool gen_floadx(DisasContext *ctx, arg_frr *a, MemOp mop)
239
tcg_gen_add_tl(addr, src1, src2);
240
tcg_gen_qemu_ld_tl(cpu_fpr[a->fd], addr, ctx->mem_idx, mop);
241
maybe_nanbox_load(cpu_fpr[a->fd], mop);
242
- tcg_temp_free(addr);
243
244
return true;
245
}
246
@@ -XXX,XX +XXX,XX @@ static bool gen_fstorex(DisasContext *ctx, arg_frr *a, MemOp mop)
247
addr = tcg_temp_new();
248
tcg_gen_add_tl(addr, src1, src2);
249
tcg_gen_qemu_st_tl(cpu_fpr[a->fd], addr, ctx->mem_idx, mop);
250
- tcg_temp_free(addr);
251
252
return true;
253
}
254
@@ -XXX,XX +XXX,XX @@ static bool gen_fload_gt(DisasContext *ctx, arg_frr *a, MemOp mop)
255
tcg_gen_add_tl(addr, src1, src2);
256
tcg_gen_qemu_ld_tl(cpu_fpr[a->fd], addr, ctx->mem_idx, mop);
257
maybe_nanbox_load(cpu_fpr[a->fd], mop);
258
- tcg_temp_free(addr);
259
260
return true;
261
}
262
@@ -XXX,XX +XXX,XX @@ static bool gen_fstore_gt(DisasContext *ctx, arg_frr *a, MemOp mop)
263
gen_helper_asrtgt_d(cpu_env, src1, src2);
264
tcg_gen_add_tl(addr, src1, src2);
265
tcg_gen_qemu_st_tl(cpu_fpr[a->fd], addr, ctx->mem_idx, mop);
266
- tcg_temp_free(addr);
267
268
return true;
269
}
270
@@ -XXX,XX +XXX,XX @@ static bool gen_fload_le(DisasContext *ctx, arg_frr *a, MemOp mop)
271
tcg_gen_add_tl(addr, src1, src2);
272
tcg_gen_qemu_ld_tl(cpu_fpr[a->fd], addr, ctx->mem_idx, mop);
273
maybe_nanbox_load(cpu_fpr[a->fd], mop);
274
- tcg_temp_free(addr);
275
276
return true;
277
}
278
@@ -XXX,XX +XXX,XX @@ static bool gen_fstore_le(DisasContext *ctx, arg_frr *a, MemOp mop)
279
gen_helper_asrtle_d(cpu_env, src1, src2);
280
tcg_gen_add_tl(addr, src1, src2);
281
tcg_gen_qemu_st_tl(cpu_fpr[a->fd], addr, ctx->mem_idx, mop);
282
- tcg_temp_free(addr);
283
284
return true;
285
}
286
diff --git a/target/loongarch/insn_trans/trans_fmov.c.inc b/target/loongarch/insn_trans/trans_fmov.c.inc
287
index XXXXXXX..XXXXXXX 100644
288
--- a/target/loongarch/insn_trans/trans_fmov.c.inc
289
+++ b/target/loongarch/insn_trans/trans_fmov.c.inc
290
@@ -XXX,XX +XXX,XX @@ static bool trans_fsel(DisasContext *ctx, arg_fsel *a)
291
tcg_gen_ld8u_tl(cond, cpu_env, offsetof(CPULoongArchState, cf[a->ca]));
292
tcg_gen_movcond_tl(TCG_COND_EQ, cpu_fpr[a->fd], cond, zero,
293
cpu_fpr[a->fj], cpu_fpr[a->fk]);
294
- tcg_temp_free(cond);
295
296
return true;
297
}
298
@@ -XXX,XX +XXX,XX @@ static bool trans_movgr2fcsr(DisasContext *ctx, arg_movgr2fcsr *a)
299
tcg_gen_andi_i32(fcsr0, fcsr0, ~mask);
300
tcg_gen_or_i32(fcsr0, fcsr0, temp);
301
tcg_gen_st_i32(fcsr0, cpu_env, offsetof(CPULoongArchState, fcsr0));
302
-
303
- tcg_temp_free_i32(temp);
304
- tcg_temp_free_i32(fcsr0);
305
}
306
307
/*
308
@@ -XXX,XX +XXX,XX @@ static bool trans_movfr2cf(DisasContext *ctx, arg_movfr2cf *a)
309
t0 = tcg_temp_new();
310
tcg_gen_andi_tl(t0, cpu_fpr[a->fj], 0x1);
311
tcg_gen_st8_tl(t0, cpu_env, offsetof(CPULoongArchState, cf[a->cd & 0x7]));
312
- tcg_temp_free(t0);
313
314
return true;
315
}
316
@@ -XXX,XX +XXX,XX @@ static bool trans_movgr2cf(DisasContext *ctx, arg_movgr2cf *a)
317
t0 = tcg_temp_new();
318
tcg_gen_andi_tl(t0, gpr_src(ctx, a->rj, EXT_NONE), 0x1);
319
tcg_gen_st8_tl(t0, cpu_env, offsetof(CPULoongArchState, cf[a->cd & 0x7]));
320
- tcg_temp_free(t0);
321
322
return true;
323
}
324
diff --git a/target/loongarch/insn_trans/trans_memory.c.inc b/target/loongarch/insn_trans/trans_memory.c.inc
325
index XXXXXXX..XXXXXXX 100644
326
--- a/target/loongarch/insn_trans/trans_memory.c.inc
327
+++ b/target/loongarch/insn_trans/trans_memory.c.inc
328
@@ -XXX,XX +XXX,XX @@ static bool gen_load(DisasContext *ctx, arg_rr_i *a, MemOp mop)
329
{
330
TCGv dest = gpr_dst(ctx, a->rd, EXT_NONE);
331
TCGv addr = gpr_src(ctx, a->rj, EXT_NONE);
332
- TCGv temp = NULL;
333
334
if (a->imm) {
335
- temp = tcg_temp_new();
336
+ TCGv temp = tcg_temp_new();
337
tcg_gen_addi_tl(temp, addr, a->imm);
338
addr = temp;
339
}
340
341
tcg_gen_qemu_ld_tl(dest, addr, ctx->mem_idx, mop);
342
gen_set_gpr(a->rd, dest, EXT_NONE);
343
-
344
- if (temp) {
345
- tcg_temp_free(temp);
346
- }
347
-
348
return true;
349
}
350
351
@@ -XXX,XX +XXX,XX @@ static bool gen_store(DisasContext *ctx, arg_rr_i *a, MemOp mop)
352
{
353
TCGv data = gpr_src(ctx, a->rd, EXT_NONE);
354
TCGv addr = gpr_src(ctx, a->rj, EXT_NONE);
355
- TCGv temp = NULL;
356
357
if (a->imm) {
358
- temp = tcg_temp_new();
359
+ TCGv temp = tcg_temp_new();
360
tcg_gen_addi_tl(temp, addr, a->imm);
361
addr = temp;
362
}
363
364
tcg_gen_qemu_st_tl(data, addr, ctx->mem_idx, mop);
365
-
366
- if (temp) {
367
- tcg_temp_free(temp);
368
- }
369
-
370
return true;
371
}
372
373
@@ -XXX,XX +XXX,XX @@ static bool gen_loadx(DisasContext *ctx, arg_rrr *a, MemOp mop)
374
tcg_gen_add_tl(addr, src1, src2);
375
tcg_gen_qemu_ld_tl(dest, addr, ctx->mem_idx, mop);
376
gen_set_gpr(a->rd, dest, EXT_NONE);
377
- tcg_temp_free(addr);
378
379
return true;
380
}
381
@@ -XXX,XX +XXX,XX @@ static bool gen_storex(DisasContext *ctx, arg_rrr *a, MemOp mop)
382
383
tcg_gen_add_tl(addr, src1, src2);
384
tcg_gen_qemu_st_tl(data, addr, ctx->mem_idx, mop);
385
- tcg_temp_free(addr);
386
387
return true;
388
}
389
@@ -XXX,XX +XXX,XX @@ static bool gen_ldptr(DisasContext *ctx, arg_rr_i *a, MemOp mop)
390
{
391
TCGv dest = gpr_dst(ctx, a->rd, EXT_NONE);
392
TCGv addr = gpr_src(ctx, a->rj, EXT_NONE);
393
- TCGv temp = NULL;
394
395
if (a->imm) {
396
- temp = tcg_temp_new();
397
+ TCGv temp = tcg_temp_new();
398
tcg_gen_addi_tl(temp, addr, a->imm);
399
addr = temp;
400
}
401
402
tcg_gen_qemu_ld_tl(dest, addr, ctx->mem_idx, mop);
403
gen_set_gpr(a->rd, dest, EXT_NONE);
404
-
405
- if (temp) {
406
- tcg_temp_free(temp);
407
- }
408
-
409
return true;
410
}
411
412
@@ -XXX,XX +XXX,XX @@ static bool gen_stptr(DisasContext *ctx, arg_rr_i *a, MemOp mop)
413
{
414
TCGv data = gpr_src(ctx, a->rd, EXT_NONE);
415
TCGv addr = gpr_src(ctx, a->rj, EXT_NONE);
416
- TCGv temp = NULL;
417
418
if (a->imm) {
419
- temp = tcg_temp_new();
420
+ TCGv temp = tcg_temp_new();
421
tcg_gen_addi_tl(temp, addr, a->imm);
422
addr = temp;
423
}
424
425
tcg_gen_qemu_st_tl(data, addr, ctx->mem_idx, mop);
426
-
427
- if (temp) {
428
- tcg_temp_free(temp);
429
- }
430
-
431
return true;
432
}
433
434
diff --git a/target/loongarch/insn_trans/trans_privileged.c.inc b/target/loongarch/insn_trans/trans_privileged.c.inc
435
index XXXXXXX..XXXXXXX 100644
436
--- a/target/loongarch/insn_trans/trans_privileged.c.inc
437
+++ b/target/loongarch/insn_trans/trans_privileged.c.inc
438
@@ -XXX,XX +XXX,XX @@ static bool trans_csrxchg(DisasContext *ctx, arg_csrxchg *a)
439
tcg_gen_st_tl(newv, cpu_env, csr->offset);
440
}
441
gen_set_gpr(a->rd, oldv, EXT_NONE);
442
-
443
- tcg_temp_free(temp);
444
- tcg_temp_free(newv);
445
- tcg_temp_free(oldv);
446
return true;
447
}
448
449
diff --git a/target/loongarch/insn_trans/trans_shift.c.inc b/target/loongarch/insn_trans/trans_shift.c.inc
450
index XXXXXXX..XXXXXXX 100644
451
--- a/target/loongarch/insn_trans/trans_shift.c.inc
452
+++ b/target/loongarch/insn_trans/trans_shift.c.inc
453
@@ -XXX,XX +XXX,XX @@ static void gen_sll_w(TCGv dest, TCGv src1, TCGv src2)
454
TCGv t0 = tcg_temp_new();
455
tcg_gen_andi_tl(t0, src2, 0x1f);
456
tcg_gen_shl_tl(dest, src1, t0);
457
- tcg_temp_free(t0);
458
}
459
460
static void gen_srl_w(TCGv dest, TCGv src1, TCGv src2)
461
@@ -XXX,XX +XXX,XX @@ static void gen_srl_w(TCGv dest, TCGv src1, TCGv src2)
462
TCGv t0 = tcg_temp_new();
463
tcg_gen_andi_tl(t0, src2, 0x1f);
464
tcg_gen_shr_tl(dest, src1, t0);
465
- tcg_temp_free(t0);
466
}
467
468
static void gen_sra_w(TCGv dest, TCGv src1, TCGv src2)
469
@@ -XXX,XX +XXX,XX @@ static void gen_sra_w(TCGv dest, TCGv src1, TCGv src2)
470
TCGv t0 = tcg_temp_new();
471
tcg_gen_andi_tl(t0, src2, 0x1f);
472
tcg_gen_sar_tl(dest, src1, t0);
473
- tcg_temp_free(t0);
474
}
475
476
static void gen_sll_d(TCGv dest, TCGv src1, TCGv src2)
477
@@ -XXX,XX +XXX,XX @@ static void gen_sll_d(TCGv dest, TCGv src1, TCGv src2)
478
TCGv t0 = tcg_temp_new();
479
tcg_gen_andi_tl(t0, src2, 0x3f);
480
tcg_gen_shl_tl(dest, src1, t0);
481
- tcg_temp_free(t0);
482
}
483
484
static void gen_srl_d(TCGv dest, TCGv src1, TCGv src2)
485
@@ -XXX,XX +XXX,XX @@ static void gen_srl_d(TCGv dest, TCGv src1, TCGv src2)
486
TCGv t0 = tcg_temp_new();
487
tcg_gen_andi_tl(t0, src2, 0x3f);
488
tcg_gen_shr_tl(dest, src1, t0);
489
- tcg_temp_free(t0);
490
}
491
492
static void gen_sra_d(TCGv dest, TCGv src1, TCGv src2)
493
@@ -XXX,XX +XXX,XX @@ static void gen_sra_d(TCGv dest, TCGv src1, TCGv src2)
494
TCGv t0 = tcg_temp_new();
495
tcg_gen_andi_tl(t0, src2, 0x3f);
496
tcg_gen_sar_tl(dest, src1, t0);
497
- tcg_temp_free(t0);
498
}
499
500
static void gen_rotr_w(TCGv dest, TCGv src1, TCGv src2)
501
@@ -XXX,XX +XXX,XX @@ static void gen_rotr_w(TCGv dest, TCGv src1, TCGv src2)
502
503
tcg_gen_rotr_i32(t1, t1, t2);
504
tcg_gen_ext_i32_tl(dest, t1);
505
-
506
- tcg_temp_free_i32(t1);
507
- tcg_temp_free_i32(t2);
508
- tcg_temp_free(t0);
509
}
510
511
static void gen_rotr_d(TCGv dest, TCGv src1, TCGv src2)
512
@@ -XXX,XX +XXX,XX @@ static void gen_rotr_d(TCGv dest, TCGv src1, TCGv src2)
513
TCGv t0 = tcg_temp_new();
514
tcg_gen_andi_tl(t0, src2, 0x3f);
515
tcg_gen_rotr_tl(dest, src1, t0);
516
- tcg_temp_free(t0);
517
}
518
519
static bool trans_srai_w(DisasContext *ctx, arg_srai_w *a)
520
--
521
2.34.1
diff view generated by jsdifflib
Deleted patch
1
Translators are no longer required to free tcg temporaries,
2
therefore there's no need to record temps for later freeing.
3
1
4
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
5
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
6
---
7
target/m68k/translate.c | 55 ++++++++++-------------------------------
8
1 file changed, 13 insertions(+), 42 deletions(-)
9
10
diff --git a/target/m68k/translate.c b/target/m68k/translate.c
11
index XXXXXXX..XXXXXXX 100644
12
--- a/target/m68k/translate.c
13
+++ b/target/m68k/translate.c
14
@@ -XXX,XX +XXX,XX @@ typedef struct DisasContext {
15
int done_mac;
16
int writeback_mask;
17
TCGv writeback[8];
18
-#define MAX_TO_RELEASE 8
19
- int release_count;
20
- TCGv release[MAX_TO_RELEASE];
21
bool ss_active;
22
} DisasContext;
23
24
-static void init_release_array(DisasContext *s)
25
-{
26
-#ifdef CONFIG_DEBUG_TCG
27
- memset(s->release, 0, sizeof(s->release));
28
-#endif
29
- s->release_count = 0;
30
-}
31
-
32
-static void do_release(DisasContext *s)
33
-{
34
- int i;
35
- for (i = 0; i < s->release_count; i++) {
36
- tcg_temp_free(s->release[i]);
37
- }
38
- init_release_array(s);
39
-}
40
-
41
-static TCGv mark_to_release(DisasContext *s, TCGv tmp)
42
-{
43
- g_assert(s->release_count < MAX_TO_RELEASE);
44
- return s->release[s->release_count++] = tmp;
45
-}
46
-
47
static TCGv get_areg(DisasContext *s, unsigned regno)
48
{
49
if (s->writeback_mask & (1 << regno)) {
50
@@ -XXX,XX +XXX,XX @@ static TCGv gen_ldst(DisasContext *s, int opsize, TCGv addr, TCGv val,
51
gen_store(s, opsize, addr, val, index);
52
return store_dummy;
53
} else {
54
- return mark_to_release(s, gen_load(s, opsize, addr,
55
- what == EA_LOADS, index));
56
+ return gen_load(s, opsize, addr, what == EA_LOADS, index);
57
}
58
}
59
60
@@ -XXX,XX +XXX,XX @@ static TCGv gen_lea_indexed(CPUM68KState *env, DisasContext *s, TCGv base)
61
} else {
62
bd = 0;
63
}
64
- tmp = mark_to_release(s, tcg_temp_new());
65
+ tmp = tcg_temp_new();
66
if ((ext & 0x44) == 0) {
67
/* pre-index */
68
add = gen_addr_index(s, ext, tmp);
69
@@ -XXX,XX +XXX,XX @@ static TCGv gen_lea_indexed(CPUM68KState *env, DisasContext *s, TCGv base)
70
if ((ext & 0x80) == 0) {
71
/* base not suppressed */
72
if (IS_NULL_QREG(base)) {
73
- base = mark_to_release(s, tcg_const_i32(offset + bd));
74
+ base = tcg_const_i32(offset + bd);
75
bd = 0;
76
}
77
if (!IS_NULL_QREG(add)) {
78
@@ -XXX,XX +XXX,XX @@ static TCGv gen_lea_indexed(CPUM68KState *env, DisasContext *s, TCGv base)
79
add = tmp;
80
}
81
} else {
82
- add = mark_to_release(s, tcg_const_i32(bd));
83
+ add = tcg_const_i32(bd);
84
}
85
if ((ext & 3) != 0) {
86
/* memory indirect */
87
- base = mark_to_release(s, gen_load(s, OS_LONG, add, 0, IS_USER(s)));
88
+ base = gen_load(s, OS_LONG, add, 0, IS_USER(s));
89
if ((ext & 0x44) == 4) {
90
add = gen_addr_index(s, ext, tmp);
91
tcg_gen_add_i32(tmp, add, base);
92
@@ -XXX,XX +XXX,XX @@ static TCGv gen_lea_indexed(CPUM68KState *env, DisasContext *s, TCGv base)
93
}
94
} else {
95
/* brief extension word format */
96
- tmp = mark_to_release(s, tcg_temp_new());
97
+ tmp = tcg_temp_new();
98
add = gen_addr_index(s, ext, tmp);
99
if (!IS_NULL_QREG(base)) {
100
tcg_gen_add_i32(tmp, add, base);
101
@@ -XXX,XX +XXX,XX @@ static inline TCGv gen_extend(DisasContext *s, TCGv val, int opsize, int sign)
102
if (opsize == OS_LONG) {
103
tmp = val;
104
} else {
105
- tmp = mark_to_release(s, tcg_temp_new());
106
+ tmp = tcg_temp_new();
107
gen_ext(tmp, val, opsize, sign);
108
}
109
110
@@ -XXX,XX +XXX,XX @@ static TCGv gen_lea_mode(CPUM68KState *env, DisasContext *s,
111
return NULL_QREG;
112
}
113
reg = get_areg(s, reg0);
114
- tmp = mark_to_release(s, tcg_temp_new());
115
+ tmp = tcg_temp_new();
116
if (reg0 == 7 && opsize == OS_BYTE &&
117
m68k_feature(s->env, M68K_FEATURE_M68K)) {
118
tcg_gen_subi_i32(tmp, reg, 2);
119
@@ -XXX,XX +XXX,XX @@ static TCGv gen_lea_mode(CPUM68KState *env, DisasContext *s,
120
return tmp;
121
case 5: /* Indirect displacement. */
122
reg = get_areg(s, reg0);
123
- tmp = mark_to_release(s, tcg_temp_new());
124
+ tmp = tcg_temp_new();
125
ext = read_im16(env, s);
126
tcg_gen_addi_i32(tmp, reg, (int16_t)ext);
127
return tmp;
128
@@ -XXX,XX +XXX,XX @@ static TCGv gen_lea_mode(CPUM68KState *env, DisasContext *s,
129
switch (reg0) {
130
case 0: /* Absolute short. */
131
offset = (int16_t)read_im16(env, s);
132
- return mark_to_release(s, tcg_const_i32(offset));
133
+ return tcg_const_i32(offset);
134
case 1: /* Absolute long. */
135
offset = read_im32(env, s);
136
- return mark_to_release(s, tcg_const_i32(offset));
137
+ return tcg_const_i32(offset);
138
case 2: /* pc displacement */
139
offset = s->pc;
140
offset += (int16_t)read_im16(env, s);
141
- return mark_to_release(s, tcg_const_i32(offset));
142
+ return tcg_const_i32(offset);
143
case 3: /* pc index+displacement. */
144
return gen_lea_indexed(env, s, NULL_QREG);
145
case 4: /* Immediate. */
146
@@ -XXX,XX +XXX,XX @@ static TCGv gen_ea_mode(CPUM68KState *env, DisasContext *s, int mode, int reg0,
147
default:
148
g_assert_not_reached();
149
}
150
- return mark_to_release(s, tcg_const_i32(offset));
151
+ return tcg_const_i32(offset);
152
default:
153
return NULL_QREG;
154
}
155
@@ -XXX,XX +XXX,XX @@ static void m68k_tr_init_disas_context(DisasContextBase *dcbase, CPUState *cpu)
156
dc->cc_op_synced = 1;
157
dc->done_mac = 0;
158
dc->writeback_mask = 0;
159
- init_release_array(dc);
160
161
dc->ss_active = (M68K_SR_TRACE(env->sr) == M68K_SR_TRACE_ANY_INS);
162
/* If architectural single step active, limit to 1 */
163
@@ -XXX,XX +XXX,XX @@ static void m68k_tr_translate_insn(DisasContextBase *dcbase, CPUState *cpu)
164
165
opcode_table[insn](env, dc, insn);
166
do_writebacks(dc);
167
- do_release(dc);
168
169
dc->pc_prev = dc->base.pc_next;
170
dc->base.pc_next = dc->pc;
171
--
172
2.34.1
diff view generated by jsdifflib
Deleted patch
1
Translators are no longer required to free tcg temporaries.
2
Remove the g1 and g2 members of DisasCompare, as they were
3
used to track which temps needed to be freed.
4
1
5
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
6
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
7
---
8
target/m68k/translate.c | 40 ----------------------------------------
9
1 file changed, 40 deletions(-)
10
11
diff --git a/target/m68k/translate.c b/target/m68k/translate.c
12
index XXXXXXX..XXXXXXX 100644
13
--- a/target/m68k/translate.c
14
+++ b/target/m68k/translate.c
15
@@ -XXX,XX +XXX,XX @@ static int gen_ea_fp(CPUM68KState *env, DisasContext *s, uint16_t insn,
16
17
typedef struct {
18
TCGCond tcond;
19
- bool g1;
20
- bool g2;
21
TCGv v1;
22
TCGv v2;
23
} DisasCompare;
24
@@ -XXX,XX +XXX,XX @@ static void gen_cc_cond(DisasCompare *c, DisasContext *s, int cond)
25
26
/* The CC_OP_CMP form can handle most normal comparisons directly. */
27
if (op == CC_OP_CMPB || op == CC_OP_CMPW || op == CC_OP_CMPL) {
28
- c->g1 = c->g2 = 1;
29
c->v1 = QREG_CC_N;
30
c->v2 = QREG_CC_V;
31
switch (cond) {
32
@@ -XXX,XX +XXX,XX @@ static void gen_cc_cond(DisasCompare *c, DisasContext *s, int cond)
33
goto done;
34
case 10: /* PL */
35
case 11: /* MI */
36
- c->g1 = c->g2 = 0;
37
c->v2 = tcg_const_i32(0);
38
c->v1 = tmp = tcg_temp_new();
39
tcg_gen_sub_i32(tmp, QREG_CC_N, QREG_CC_V);
40
@@ -XXX,XX +XXX,XX @@ static void gen_cc_cond(DisasCompare *c, DisasContext *s, int cond)
41
}
42
}
43
44
- c->g1 = 1;
45
- c->g2 = 0;
46
c->v2 = tcg_const_i32(0);
47
48
switch (cond) {
49
@@ -XXX,XX +XXX,XX @@ static void gen_cc_cond(DisasCompare *c, DisasContext *s, int cond)
50
case 2: /* HI (!C && !Z) -> !(C || Z)*/
51
case 3: /* LS (C || Z) */
52
c->v1 = tmp = tcg_temp_new();
53
- c->g1 = 0;
54
tcg_gen_setcond_i32(TCG_COND_EQ, tmp, QREG_CC_Z, c->v2);
55
tcg_gen_or_i32(tmp, tmp, QREG_CC_C);
56
tcond = TCG_COND_NE;
57
@@ -XXX,XX +XXX,XX @@ static void gen_cc_cond(DisasCompare *c, DisasContext *s, int cond)
58
case 12: /* GE (!(N ^ V)) */
59
case 13: /* LT (N ^ V) */
60
c->v1 = tmp = tcg_temp_new();
61
- c->g1 = 0;
62
tcg_gen_xor_i32(tmp, QREG_CC_N, QREG_CC_V);
63
tcond = TCG_COND_LT;
64
break;
65
case 14: /* GT (!(Z || (N ^ V))) */
66
case 15: /* LE (Z || (N ^ V)) */
67
c->v1 = tmp = tcg_temp_new();
68
- c->g1 = 0;
69
tcg_gen_setcond_i32(TCG_COND_EQ, tmp, QREG_CC_Z, c->v2);
70
tcg_gen_neg_i32(tmp, tmp);
71
tmp2 = tcg_temp_new();
72
@@ -XXX,XX +XXX,XX @@ static void gen_cc_cond(DisasCompare *c, DisasContext *s, int cond)
73
c->tcond = tcond;
74
}
75
76
-static void free_cond(DisasCompare *c)
77
-{
78
- if (!c->g1) {
79
- tcg_temp_free(c->v1);
80
- }
81
- if (!c->g2) {
82
- tcg_temp_free(c->v2);
83
- }
84
-}
85
-
86
static void gen_jmpcc(DisasContext *s, int cond, TCGLabel *l1)
87
{
88
DisasCompare c;
89
@@ -XXX,XX +XXX,XX @@ static void gen_jmpcc(DisasContext *s, int cond, TCGLabel *l1)
90
gen_cc_cond(&c, s, cond);
91
update_cc_op(s);
92
tcg_gen_brcond_i32(c.tcond, c.v1, c.v2, l1);
93
- free_cond(&c);
94
}
95
96
/* Force a TB lookup after an instruction that changes the CPU state. */
97
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(scc)
98
99
tmp = tcg_temp_new();
100
tcg_gen_setcond_i32(c.tcond, tmp, c.v1, c.v2);
101
- free_cond(&c);
102
103
tcg_gen_neg_i32(tmp, tmp);
104
DEST_EA(env, insn, OS_BYTE, tmp, NULL);
105
@@ -XXX,XX +XXX,XX @@ static void do_trapcc(DisasContext *s, DisasCompare *c)
106
s->base.is_jmp = DISAS_NEXT;
107
}
108
}
109
- free_cond(c);
110
}
111
112
DISAS_INSN(trapcc)
113
@@ -XXX,XX +XXX,XX @@ static void gen_fcc_cond(DisasCompare *c, DisasContext *s, int cond)
114
{
115
TCGv fpsr;
116
117
- c->g1 = 1;
118
c->v2 = tcg_const_i32(0);
119
- c->g2 = 0;
120
/* TODO: Raise BSUN exception. */
121
fpsr = tcg_temp_new();
122
gen_load_fcr(s, fpsr, M68K_FPSR);
123
@@ -XXX,XX +XXX,XX @@ static void gen_fcc_cond(DisasCompare *c, DisasContext *s, int cond)
124
case 1: /* EQual Z */
125
case 17: /* Signaling EQual Z */
126
c->v1 = tcg_temp_new();
127
- c->g1 = 0;
128
tcg_gen_andi_i32(c->v1, fpsr, FPSR_CC_Z);
129
c->tcond = TCG_COND_NE;
130
break;
131
case 2: /* Ordered Greater Than !(A || Z || N) */
132
case 18: /* Greater Than !(A || Z || N) */
133
c->v1 = tcg_temp_new();
134
- c->g1 = 0;
135
tcg_gen_andi_i32(c->v1, fpsr,
136
FPSR_CC_A | FPSR_CC_Z | FPSR_CC_N);
137
c->tcond = TCG_COND_EQ;
138
@@ -XXX,XX +XXX,XX @@ static void gen_fcc_cond(DisasCompare *c, DisasContext *s, int cond)
139
case 3: /* Ordered Greater than or Equal Z || !(A || N) */
140
case 19: /* Greater than or Equal Z || !(A || N) */
141
c->v1 = tcg_temp_new();
142
- c->g1 = 0;
143
tcg_gen_andi_i32(c->v1, fpsr, FPSR_CC_A);
144
tcg_gen_shli_i32(c->v1, c->v1, ctz32(FPSR_CC_N) - ctz32(FPSR_CC_A));
145
tcg_gen_andi_i32(fpsr, fpsr, FPSR_CC_Z | FPSR_CC_N);
146
@@ -XXX,XX +XXX,XX @@ static void gen_fcc_cond(DisasCompare *c, DisasContext *s, int cond)
147
case 4: /* Ordered Less Than !(!N || A || Z); */
148
case 20: /* Less Than !(!N || A || Z); */
149
c->v1 = tcg_temp_new();
150
- c->g1 = 0;
151
tcg_gen_xori_i32(c->v1, fpsr, FPSR_CC_N);
152
tcg_gen_andi_i32(c->v1, c->v1, FPSR_CC_N | FPSR_CC_A | FPSR_CC_Z);
153
c->tcond = TCG_COND_EQ;
154
@@ -XXX,XX +XXX,XX @@ static void gen_fcc_cond(DisasCompare *c, DisasContext *s, int cond)
155
case 5: /* Ordered Less than or Equal Z || (N && !A) */
156
case 21: /* Less than or Equal Z || (N && !A) */
157
c->v1 = tcg_temp_new();
158
- c->g1 = 0;
159
tcg_gen_andi_i32(c->v1, fpsr, FPSR_CC_A);
160
tcg_gen_shli_i32(c->v1, c->v1, ctz32(FPSR_CC_N) - ctz32(FPSR_CC_A));
161
tcg_gen_andc_i32(c->v1, fpsr, c->v1);
162
@@ -XXX,XX +XXX,XX @@ static void gen_fcc_cond(DisasCompare *c, DisasContext *s, int cond)
163
case 6: /* Ordered Greater or Less than !(A || Z) */
164
case 22: /* Greater or Less than !(A || Z) */
165
c->v1 = tcg_temp_new();
166
- c->g1 = 0;
167
tcg_gen_andi_i32(c->v1, fpsr, FPSR_CC_A | FPSR_CC_Z);
168
c->tcond = TCG_COND_EQ;
169
break;
170
case 7: /* Ordered !A */
171
case 23: /* Greater, Less or Equal !A */
172
c->v1 = tcg_temp_new();
173
- c->g1 = 0;
174
tcg_gen_andi_i32(c->v1, fpsr, FPSR_CC_A);
175
c->tcond = TCG_COND_EQ;
176
break;
177
case 8: /* Unordered A */
178
case 24: /* Not Greater, Less or Equal A */
179
c->v1 = tcg_temp_new();
180
- c->g1 = 0;
181
tcg_gen_andi_i32(c->v1, fpsr, FPSR_CC_A);
182
c->tcond = TCG_COND_NE;
183
break;
184
case 9: /* Unordered or Equal A || Z */
185
case 25: /* Not Greater or Less then A || Z */
186
c->v1 = tcg_temp_new();
187
- c->g1 = 0;
188
tcg_gen_andi_i32(c->v1, fpsr, FPSR_CC_A | FPSR_CC_Z);
189
c->tcond = TCG_COND_NE;
190
break;
191
case 10: /* Unordered or Greater Than A || !(N || Z)) */
192
case 26: /* Not Less or Equal A || !(N || Z)) */
193
c->v1 = tcg_temp_new();
194
- c->g1 = 0;
195
tcg_gen_andi_i32(c->v1, fpsr, FPSR_CC_Z);
196
tcg_gen_shli_i32(c->v1, c->v1, ctz32(FPSR_CC_N) - ctz32(FPSR_CC_Z));
197
tcg_gen_andi_i32(fpsr, fpsr, FPSR_CC_A | FPSR_CC_N);
198
@@ -XXX,XX +XXX,XX @@ static void gen_fcc_cond(DisasCompare *c, DisasContext *s, int cond)
199
case 11: /* Unordered or Greater or Equal A || Z || !N */
200
case 27: /* Not Less Than A || Z || !N */
201
c->v1 = tcg_temp_new();
202
- c->g1 = 0;
203
tcg_gen_andi_i32(c->v1, fpsr, FPSR_CC_A | FPSR_CC_Z | FPSR_CC_N);
204
tcg_gen_xori_i32(c->v1, c->v1, FPSR_CC_N);
205
c->tcond = TCG_COND_NE;
206
@@ -XXX,XX +XXX,XX @@ static void gen_fcc_cond(DisasCompare *c, DisasContext *s, int cond)
207
case 12: /* Unordered or Less Than A || (N && !Z) */
208
case 28: /* Not Greater than or Equal A || (N && !Z) */
209
c->v1 = tcg_temp_new();
210
- c->g1 = 0;
211
tcg_gen_andi_i32(c->v1, fpsr, FPSR_CC_Z);
212
tcg_gen_shli_i32(c->v1, c->v1, ctz32(FPSR_CC_N) - ctz32(FPSR_CC_Z));
213
tcg_gen_andc_i32(c->v1, fpsr, c->v1);
214
@@ -XXX,XX +XXX,XX @@ static void gen_fcc_cond(DisasCompare *c, DisasContext *s, int cond)
215
case 13: /* Unordered or Less or Equal A || Z || N */
216
case 29: /* Not Greater Than A || Z || N */
217
c->v1 = tcg_temp_new();
218
- c->g1 = 0;
219
tcg_gen_andi_i32(c->v1, fpsr, FPSR_CC_A | FPSR_CC_Z | FPSR_CC_N);
220
c->tcond = TCG_COND_NE;
221
break;
222
case 14: /* Not Equal !Z */
223
case 30: /* Signaling Not Equal !Z */
224
c->v1 = tcg_temp_new();
225
- c->g1 = 0;
226
tcg_gen_andi_i32(c->v1, fpsr, FPSR_CC_Z);
227
c->tcond = TCG_COND_EQ;
228
break;
229
@@ -XXX,XX +XXX,XX @@ static void gen_fjmpcc(DisasContext *s, int cond, TCGLabel *l1)
230
gen_fcc_cond(&c, s, cond);
231
update_cc_op(s);
232
tcg_gen_brcond_i32(c.tcond, c.v1, c.v2, l1);
233
- free_cond(&c);
234
}
235
236
DISAS_INSN(fbcc)
237
@@ -XXX,XX +XXX,XX @@ DISAS_INSN(fscc)
238
239
tmp = tcg_temp_new();
240
tcg_gen_setcond_i32(c.tcond, tmp, c.v1, c.v2);
241
- free_cond(&c);
242
243
tcg_gen_neg_i32(tmp, tmp);
244
DEST_EA(env, insn, OS_BYTE, tmp, NULL);
245
--
246
2.34.1
diff view generated by jsdifflib
Deleted patch
1
Translators are no longer required to free tcg temporaries.
2
1
3
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
5
---
6
target/microblaze/translate.c | 54 -----------------------------------
7
1 file changed, 54 deletions(-)
8
9
diff --git a/target/microblaze/translate.c b/target/microblaze/translate.c
10
index XXXXXXX..XXXXXXX 100644
11
--- a/target/microblaze/translate.c
12
+++ b/target/microblaze/translate.c
13
@@ -XXX,XX +XXX,XX @@ static void gen_raise_exception(DisasContext *dc, uint32_t index)
14
TCGv_i32 tmp = tcg_const_i32(index);
15
16
gen_helper_raise_exception(cpu_env, tmp);
17
- tcg_temp_free_i32(tmp);
18
dc->base.is_jmp = DISAS_NORETURN;
19
}
20
21
@@ -XXX,XX +XXX,XX @@ static void gen_raise_hw_excp(DisasContext *dc, uint32_t esr_ec)
22
{
23
TCGv_i32 tmp = tcg_const_i32(esr_ec);
24
tcg_gen_st_i32(tmp, cpu_env, offsetof(CPUMBState, esr));
25
- tcg_temp_free_i32(tmp);
26
27
gen_raise_exception_sync(dc, EXCP_HW_EXCP);
28
}
29
@@ -XXX,XX +XXX,XX @@ static bool do_typeb_val(DisasContext *dc, arg_typeb *arg, bool side_effects,
30
imm = tcg_const_i32(arg->imm);
31
32
fn(rd, ra, imm);
33
-
34
- tcg_temp_free_i32(imm);
35
return true;
36
}
37
38
@@ -XXX,XX +XXX,XX @@ static void gen_add(TCGv_i32 out, TCGv_i32 ina, TCGv_i32 inb)
39
TCGv_i32 zero = tcg_const_i32(0);
40
41
tcg_gen_add2_i32(out, cpu_msr_c, ina, zero, inb, zero);
42
-
43
- tcg_temp_free_i32(zero);
44
}
45
46
/* Input and output carry. */
47
@@ -XXX,XX +XXX,XX @@ static void gen_addc(TCGv_i32 out, TCGv_i32 ina, TCGv_i32 inb)
48
49
tcg_gen_add2_i32(tmp, cpu_msr_c, ina, zero, cpu_msr_c, zero);
50
tcg_gen_add2_i32(out, cpu_msr_c, tmp, cpu_msr_c, inb, zero);
51
-
52
- tcg_temp_free_i32(tmp);
53
- tcg_temp_free_i32(zero);
54
}
55
56
/* Input carry, but no output carry. */
57
@@ -XXX,XX +XXX,XX @@ static void gen_bsra(TCGv_i32 out, TCGv_i32 ina, TCGv_i32 inb)
58
TCGv_i32 tmp = tcg_temp_new_i32();
59
tcg_gen_andi_i32(tmp, inb, 31);
60
tcg_gen_sar_i32(out, ina, tmp);
61
- tcg_temp_free_i32(tmp);
62
}
63
64
static void gen_bsrl(TCGv_i32 out, TCGv_i32 ina, TCGv_i32 inb)
65
@@ -XXX,XX +XXX,XX @@ static void gen_bsrl(TCGv_i32 out, TCGv_i32 ina, TCGv_i32 inb)
66
TCGv_i32 tmp = tcg_temp_new_i32();
67
tcg_gen_andi_i32(tmp, inb, 31);
68
tcg_gen_shr_i32(out, ina, tmp);
69
- tcg_temp_free_i32(tmp);
70
}
71
72
static void gen_bsll(TCGv_i32 out, TCGv_i32 ina, TCGv_i32 inb)
73
@@ -XXX,XX +XXX,XX @@ static void gen_bsll(TCGv_i32 out, TCGv_i32 ina, TCGv_i32 inb)
74
TCGv_i32 tmp = tcg_temp_new_i32();
75
tcg_gen_andi_i32(tmp, inb, 31);
76
tcg_gen_shl_i32(out, ina, tmp);
77
- tcg_temp_free_i32(tmp);
78
}
79
80
static void gen_bsefi(TCGv_i32 out, TCGv_i32 ina, int32_t imm)
81
@@ -XXX,XX +XXX,XX @@ static void gen_cmp(TCGv_i32 out, TCGv_i32 ina, TCGv_i32 inb)
82
tcg_gen_setcond_i32(TCG_COND_LT, lt, inb, ina);
83
tcg_gen_sub_i32(out, inb, ina);
84
tcg_gen_deposit_i32(out, out, lt, 31, 1);
85
- tcg_temp_free_i32(lt);
86
}
87
88
static void gen_cmpu(TCGv_i32 out, TCGv_i32 ina, TCGv_i32 inb)
89
@@ -XXX,XX +XXX,XX @@ static void gen_cmpu(TCGv_i32 out, TCGv_i32 ina, TCGv_i32 inb)
90
tcg_gen_setcond_i32(TCG_COND_LTU, lt, inb, ina);
91
tcg_gen_sub_i32(out, inb, ina);
92
tcg_gen_deposit_i32(out, out, lt, 31, 1);
93
- tcg_temp_free_i32(lt);
94
}
95
96
DO_TYPEA(cmp, false, gen_cmp)
97
@@ -XXX,XX +XXX,XX @@ static void gen_mulh(TCGv_i32 out, TCGv_i32 ina, TCGv_i32 inb)
98
{
99
TCGv_i32 tmp = tcg_temp_new_i32();
100
tcg_gen_muls2_i32(tmp, out, ina, inb);
101
- tcg_temp_free_i32(tmp);
102
}
103
104
static void gen_mulhu(TCGv_i32 out, TCGv_i32 ina, TCGv_i32 inb)
105
{
106
TCGv_i32 tmp = tcg_temp_new_i32();
107
tcg_gen_mulu2_i32(tmp, out, ina, inb);
108
- tcg_temp_free_i32(tmp);
109
}
110
111
static void gen_mulhsu(TCGv_i32 out, TCGv_i32 ina, TCGv_i32 inb)
112
{
113
TCGv_i32 tmp = tcg_temp_new_i32();
114
tcg_gen_mulsu2_i32(tmp, out, ina, inb);
115
- tcg_temp_free_i32(tmp);
116
}
117
118
DO_TYPEA_CFG(mul, use_hw_mul, false, tcg_gen_mul_i32)
119
@@ -XXX,XX +XXX,XX @@ static void gen_rsubc(TCGv_i32 out, TCGv_i32 ina, TCGv_i32 inb)
120
tcg_gen_not_i32(tmp, ina);
121
tcg_gen_add2_i32(tmp, cpu_msr_c, tmp, zero, cpu_msr_c, zero);
122
tcg_gen_add2_i32(out, cpu_msr_c, tmp, cpu_msr_c, inb, zero);
123
-
124
- tcg_temp_free_i32(zero);
125
- tcg_temp_free_i32(tmp);
126
}
127
128
/* No input or output carry. */
129
@@ -XXX,XX +XXX,XX @@ static void gen_rsubkc(TCGv_i32 out, TCGv_i32 ina, TCGv_i32 inb)
130
tcg_gen_not_i32(nota, ina);
131
tcg_gen_add_i32(out, inb, nota);
132
tcg_gen_add_i32(out, out, cpu_msr_c);
133
-
134
- tcg_temp_free_i32(nota);
135
}
136
137
DO_TYPEA(rsub, true, gen_rsub)
138
@@ -XXX,XX +XXX,XX @@ static void gen_src(TCGv_i32 out, TCGv_i32 ina)
139
tcg_gen_mov_i32(tmp, cpu_msr_c);
140
tcg_gen_andi_i32(cpu_msr_c, ina, 1);
141
tcg_gen_extract2_i32(out, ina, tmp, 1);
142
-
143
- tcg_temp_free_i32(tmp);
144
}
145
146
static void gen_srl(TCGv_i32 out, TCGv_i32 ina)
147
@@ -XXX,XX +XXX,XX @@ static TCGv compute_ldst_addr_typea(DisasContext *dc, int ra, int rb)
148
TCGv_i32 tmp = tcg_temp_new_i32();
149
tcg_gen_add_i32(tmp, cpu_R[ra], cpu_R[rb]);
150
tcg_gen_extu_i32_tl(ret, tmp);
151
- tcg_temp_free_i32(tmp);
152
} else if (ra) {
153
tcg_gen_extu_i32_tl(ret, cpu_R[ra]);
154
} else if (rb) {
155
@@ -XXX,XX +XXX,XX @@ static TCGv compute_ldst_addr_typeb(DisasContext *dc, int ra, int imm)
156
TCGv_i32 tmp = tcg_temp_new_i32();
157
tcg_gen_addi_i32(tmp, cpu_R[ra], imm);
158
tcg_gen_extu_i32_tl(ret, tmp);
159
- tcg_temp_free_i32(tmp);
160
} else {
161
tcg_gen_movi_tl(ret, (uint32_t)imm);
162
}
163
@@ -XXX,XX +XXX,XX @@ static bool do_load(DisasContext *dc, int rd, TCGv addr, MemOp mop,
164
#endif
165
166
tcg_gen_qemu_ld_i32(reg_for_write(dc, rd), addr, mem_index, mop);
167
-
168
- tcg_temp_free(addr);
169
return true;
170
}
171
172
@@ -XXX,XX +XXX,XX @@ static bool trans_lwx(DisasContext *dc, arg_typea *arg)
173
174
tcg_gen_qemu_ld_i32(cpu_res_val, addr, dc->mem_index, MO_TEUL);
175
tcg_gen_mov_tl(cpu_res_addr, addr);
176
- tcg_temp_free(addr);
177
178
if (arg->rd) {
179
tcg_gen_mov_i32(cpu_R[arg->rd], cpu_res_val);
180
@@ -XXX,XX +XXX,XX @@ static bool do_store(DisasContext *dc, int rd, TCGv addr, MemOp mop,
181
#endif
182
183
tcg_gen_qemu_st_i32(reg_for_read(dc, rd), addr, mem_index, mop);
184
-
185
- tcg_temp_free(addr);
186
return true;
187
}
188
189
@@ -XXX,XX +XXX,XX @@ static bool trans_swx(DisasContext *dc, arg_typea *arg)
190
* In either case, addr is no longer needed.
191
*/
192
tcg_gen_brcond_tl(TCG_COND_NE, cpu_res_addr, addr, swx_fail);
193
- tcg_temp_free(addr);
194
195
/*
196
* Compare the value loaded during lwx with current contents of
197
@@ -XXX,XX +XXX,XX @@ static bool trans_swx(DisasContext *dc, arg_typea *arg)
198
dc->mem_index, MO_TEUL);
199
200
tcg_gen_brcond_i32(TCG_COND_NE, cpu_res_val, tval, swx_fail);
201
- tcg_temp_free_i32(tval);
202
203
/* Success */
204
tcg_gen_movi_i32(cpu_msr_c, 0);
205
@@ -XXX,XX +XXX,XX @@ static bool do_bcc(DisasContext *dc, int dest_rb, int dest_imm,
206
tcg_gen_movcond_i32(dc->jmp_cond, cpu_btarget,
207
reg_for_read(dc, ra), zero,
208
cpu_btarget, next);
209
- tcg_temp_free_i32(zero);
210
- tcg_temp_free_i32(next);
211
212
return true;
213
}
214
@@ -XXX,XX +XXX,XX @@ static bool trans_mbar(DisasContext *dc, arg_mbar *arg)
215
tcg_gen_st_i32(tmp_1, cpu_env,
216
-offsetof(MicroBlazeCPU, env)
217
+offsetof(CPUState, halted));
218
- tcg_temp_free_i32(tmp_1);
219
220
tcg_gen_movi_i32(cpu_pc, dc->base.pc_next + 4);
221
222
@@ -XXX,XX +XXX,XX @@ static void msr_read(DisasContext *dc, TCGv_i32 d)
223
t = tcg_temp_new_i32();
224
tcg_gen_muli_i32(t, cpu_msr_c, MSR_C | MSR_CC);
225
tcg_gen_or_i32(d, cpu_msr, t);
226
- tcg_temp_free_i32(t);
227
}
228
229
static bool do_msrclrset(DisasContext *dc, arg_type_msr *arg, bool set)
230
@@ -XXX,XX +XXX,XX @@ static bool trans_mts(DisasContext *dc, arg_mts *arg)
231
TCGv_i32 tmp_reg = tcg_const_i32(arg->rs & 7);
232
233
gen_helper_mmu_write(cpu_env, tmp_ext, tmp_reg, src);
234
- tcg_temp_free_i32(tmp_reg);
235
- tcg_temp_free_i32(tmp_ext);
236
}
237
break;
238
239
@@ -XXX,XX +XXX,XX @@ static bool trans_mfs(DisasContext *dc, arg_mfs *arg)
240
TCGv_i64 t64 = tcg_temp_new_i64();
241
tcg_gen_ld_i64(t64, cpu_env, offsetof(CPUMBState, ear));
242
tcg_gen_extrh_i64_i32(dest, t64);
243
- tcg_temp_free_i64(t64);
244
}
245
return true;
246
#ifndef CONFIG_USER_ONLY
247
@@ -XXX,XX +XXX,XX @@ static bool trans_mfs(DisasContext *dc, arg_mfs *arg)
248
TCGv_i64 t64 = tcg_temp_new_i64();
249
tcg_gen_ld_i64(t64, cpu_env, offsetof(CPUMBState, ear));
250
tcg_gen_extrl_i64_i32(dest, t64);
251
- tcg_temp_free_i64(t64);
252
}
253
break;
254
case SR_ESR:
255
@@ -XXX,XX +XXX,XX @@ static bool trans_mfs(DisasContext *dc, arg_mfs *arg)
256
TCGv_i32 tmp_reg = tcg_const_i32(arg->rs & 7);
257
258
gen_helper_mmu_read(dest, cpu_env, tmp_ext, tmp_reg);
259
- tcg_temp_free_i32(tmp_reg);
260
- tcg_temp_free_i32(tmp_ext);
261
}
262
break;
263
#endif
264
@@ -XXX,XX +XXX,XX @@ static void do_rti(DisasContext *dc)
265
tcg_gen_andi_i32(tmp, tmp, MSR_VM | MSR_UM);
266
tcg_gen_andi_i32(cpu_msr, cpu_msr, ~(MSR_VM | MSR_UM));
267
tcg_gen_or_i32(cpu_msr, cpu_msr, tmp);
268
-
269
- tcg_temp_free_i32(tmp);
270
}
271
272
static void do_rtb(DisasContext *dc)
273
@@ -XXX,XX +XXX,XX @@ static void do_rtb(DisasContext *dc)
274
tcg_gen_andi_i32(cpu_msr, cpu_msr, ~(MSR_VM | MSR_UM | MSR_BIP));
275
tcg_gen_andi_i32(tmp, tmp, (MSR_VM | MSR_UM));
276
tcg_gen_or_i32(cpu_msr, cpu_msr, tmp);
277
-
278
- tcg_temp_free_i32(tmp);
279
}
280
281
static void do_rte(DisasContext *dc)
282
@@ -XXX,XX +XXX,XX @@ static void do_rte(DisasContext *dc)
283
tcg_gen_andi_i32(tmp, tmp, (MSR_VM | MSR_UM));
284
tcg_gen_andi_i32(cpu_msr, cpu_msr, ~(MSR_VM | MSR_UM | MSR_EIP));
285
tcg_gen_or_i32(cpu_msr, cpu_msr, tmp);
286
-
287
- tcg_temp_free_i32(tmp);
288
}
289
290
/* Insns connected to FSL or AXI stream attached devices. */
291
@@ -XXX,XX +XXX,XX @@ static bool do_get(DisasContext *dc, int rd, int rb, int imm, int ctrl)
292
293
t_ctrl = tcg_const_i32(ctrl);
294
gen_helper_get(reg_for_write(dc, rd), t_id, t_ctrl);
295
- tcg_temp_free_i32(t_id);
296
- tcg_temp_free_i32(t_ctrl);
297
return true;
298
}
299
300
@@ -XXX,XX +XXX,XX @@ static bool do_put(DisasContext *dc, int ra, int rb, int imm, int ctrl)
301
302
t_ctrl = tcg_const_i32(ctrl);
303
gen_helper_put(t_id, t_ctrl, reg_for_read(dc, ra));
304
- tcg_temp_free_i32(t_id);
305
- tcg_temp_free_i32(t_ctrl);
306
return true;
307
}
308
309
@@ -XXX,XX +XXX,XX @@ static void mb_tr_translate_insn(DisasContextBase *dcb, CPUState *cs)
310
}
311
312
if (dc->r0) {
313
- tcg_temp_free_i32(dc->r0);
314
dc->r0 = NULL;
315
dc->r0_set = false;
316
}
317
--
318
2.34.1
diff view generated by jsdifflib
Deleted patch
1
Translators are no longer required to free tcg temporaries.
2
1
3
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
5
---
6
target/nios2/translate.c | 15 ---------------
7
1 file changed, 15 deletions(-)
8
9
diff --git a/target/nios2/translate.c b/target/nios2/translate.c
10
index XXXXXXX..XXXXXXX 100644
11
--- a/target/nios2/translate.c
12
+++ b/target/nios2/translate.c
13
@@ -XXX,XX +XXX,XX @@ static void gen_jumpr(DisasContext *dc, int regno, bool is_call)
14
15
tcg_gen_andi_tl(test, dest, 3);
16
tcg_gen_brcondi_tl(TCG_COND_NE, test, 0, l);
17
- tcg_temp_free(test);
18
19
tcg_gen_mov_tl(cpu_pc, dest);
20
if (is_call) {
21
@@ -XXX,XX +XXX,XX @@ static void gen_ldx(DisasContext *dc, uint32_t code, uint32_t flags)
22
23
tcg_gen_addi_tl(addr, load_gpr(dc, instr.a), instr.imm16.s);
24
tcg_gen_qemu_ld_tl(data, addr, dc->mem_idx, flags);
25
- tcg_temp_free(addr);
26
}
27
28
/* Store instructions */
29
@@ -XXX,XX +XXX,XX @@ static void gen_stx(DisasContext *dc, uint32_t code, uint32_t flags)
30
TCGv addr = tcg_temp_new();
31
tcg_gen_addi_tl(addr, load_gpr(dc, instr.a), instr.imm16.s);
32
tcg_gen_qemu_st_tl(val, addr, dc->mem_idx, flags);
33
- tcg_temp_free(addr);
34
}
35
36
/* Branch instructions */
37
@@ -XXX,XX +XXX,XX @@ static void eret(DisasContext *dc, uint32_t code, uint32_t flags)
38
TCGv tmp = tcg_temp_new();
39
tcg_gen_ld_tl(tmp, cpu_env, offsetof(CPUNios2State, ctrl[CR_ESTATUS]));
40
gen_helper_eret(cpu_env, tmp, load_gpr(dc, R_EA));
41
- tcg_temp_free(tmp);
42
} else {
43
gen_helper_eret(cpu_env, load_gpr(dc, R_SSTATUS), load_gpr(dc, R_EA));
44
}
45
@@ -XXX,XX +XXX,XX @@ static void bret(DisasContext *dc, uint32_t code, uint32_t flags)
46
TCGv tmp = tcg_temp_new();
47
tcg_gen_ld_tl(tmp, cpu_env, offsetof(CPUNios2State, ctrl[CR_BSTATUS]));
48
gen_helper_eret(cpu_env, tmp, load_gpr(dc, R_BA));
49
- tcg_temp_free(tmp);
50
51
dc->base.is_jmp = DISAS_NORETURN;
52
#endif
53
@@ -XXX,XX +XXX,XX @@ static void rdctl(DisasContext *dc, uint32_t code, uint32_t flags)
54
tcg_gen_ld_tl(t1, cpu_env, offsetof(CPUNios2State, ctrl[CR_IPENDING]));
55
tcg_gen_ld_tl(t2, cpu_env, offsetof(CPUNios2State, ctrl[CR_IENABLE]));
56
tcg_gen_and_tl(dest, t1, t2);
57
- tcg_temp_free(t1);
58
- tcg_temp_free(t2);
59
break;
60
default:
61
tcg_gen_ld_tl(dest, cpu_env,
62
@@ -XXX,XX +XXX,XX @@ static void wrctl(DisasContext *dc, uint32_t code, uint32_t flags)
63
tcg_gen_ld_tl(o, cpu_env, ofs);
64
tcg_gen_andi_tl(o, o, ro);
65
tcg_gen_or_tl(n, n, o);
66
- tcg_temp_free(o);
67
}
68
69
tcg_gen_st_tl(n, cpu_env, ofs);
70
- tcg_temp_free(n);
71
}
72
break;
73
}
74
@@ -XXX,XX +XXX,XX @@ static void do_rr_mul_high(DisasContext *dc, uint32_t insn, GenFn4 *fn)
75
76
fn(discard, dest_gpr(dc, instr.c),
77
load_gpr(dc, instr.a), load_gpr(dc, instr.b));
78
- tcg_temp_free(discard);
79
}
80
81
#define gen_rr_mul_high(fname, insn) \
82
@@ -XXX,XX +XXX,XX @@ static void do_rr_shift(DisasContext *dc, uint32_t insn, GenFn3 *fn)
83
84
tcg_gen_andi_tl(sh, load_gpr(dc, instr.b), 31);
85
fn(dest_gpr(dc, instr.c), load_gpr(dc, instr.a), sh);
86
- tcg_temp_free(sh);
87
}
88
89
#define gen_rr_shift(fname, insn) \
90
@@ -XXX,XX +XXX,XX @@ static void nios2_tr_translate_insn(DisasContextBase *dcbase, CPUState *cs)
91
92
instr = &i_type_instructions[op];
93
instr->handler(dc, code, instr->flags);
94
-
95
- if (dc->sink) {
96
- tcg_temp_free(dc->sink);
97
- }
98
}
99
100
static void nios2_tr_tb_stop(DisasContextBase *dcbase, CPUState *cs)
101
--
102
2.34.1
diff view generated by jsdifflib
Deleted patch
1
Translators are no longer required to free tcg temporaries.
2
1
3
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
5
---
6
target/openrisc/translate.c | 39 -------------------------------------
7
1 file changed, 39 deletions(-)
8
9
diff --git a/target/openrisc/translate.c b/target/openrisc/translate.c
10
index XXXXXXX..XXXXXXX 100644
11
--- a/target/openrisc/translate.c
12
+++ b/target/openrisc/translate.c
13
@@ -XXX,XX +XXX,XX @@ static void gen_add(DisasContext *dc, TCGv dest, TCGv srca, TCGv srcb)
14
tcg_gen_xor_tl(cpu_sr_ov, srca, srcb);
15
tcg_gen_xor_tl(t0, res, srcb);
16
tcg_gen_andc_tl(cpu_sr_ov, t0, cpu_sr_ov);
17
- tcg_temp_free(t0);
18
19
tcg_gen_mov_tl(dest, res);
20
- tcg_temp_free(res);
21
22
gen_ove_cyov(dc);
23
}
24
@@ -XXX,XX +XXX,XX @@ static void gen_addc(DisasContext *dc, TCGv dest, TCGv srca, TCGv srcb)
25
tcg_gen_xor_tl(cpu_sr_ov, srca, srcb);
26
tcg_gen_xor_tl(t0, res, srcb);
27
tcg_gen_andc_tl(cpu_sr_ov, t0, cpu_sr_ov);
28
- tcg_temp_free(t0);
29
30
tcg_gen_mov_tl(dest, res);
31
- tcg_temp_free(res);
32
33
gen_ove_cyov(dc);
34
}
35
@@ -XXX,XX +XXX,XX @@ static void gen_sub(DisasContext *dc, TCGv dest, TCGv srca, TCGv srcb)
36
tcg_gen_setcond_tl(TCG_COND_LTU, cpu_sr_cy, srca, srcb);
37
38
tcg_gen_mov_tl(dest, res);
39
- tcg_temp_free(res);
40
41
gen_ove_cyov(dc);
42
}
43
@@ -XXX,XX +XXX,XX @@ static void gen_mul(DisasContext *dc, TCGv dest, TCGv srca, TCGv srcb)
44
tcg_gen_muls2_tl(dest, cpu_sr_ov, srca, srcb);
45
tcg_gen_sari_tl(t0, dest, TARGET_LONG_BITS - 1);
46
tcg_gen_setcond_tl(TCG_COND_NE, cpu_sr_ov, cpu_sr_ov, t0);
47
- tcg_temp_free(t0);
48
49
tcg_gen_neg_tl(cpu_sr_ov, cpu_sr_ov);
50
gen_ove_ov(dc);
51
@@ -XXX,XX +XXX,XX @@ static void gen_div(DisasContext *dc, TCGv dest, TCGv srca, TCGv srcb)
52
Supress the host-side exception by dividing by 1. */
53
tcg_gen_or_tl(t0, srcb, cpu_sr_ov);
54
tcg_gen_div_tl(dest, srca, t0);
55
- tcg_temp_free(t0);
56
57
tcg_gen_neg_tl(cpu_sr_ov, cpu_sr_ov);
58
gen_ove_ov(dc);
59
@@ -XXX,XX +XXX,XX @@ static void gen_divu(DisasContext *dc, TCGv dest, TCGv srca, TCGv srcb)
60
Supress the host-side exception by dividing by 1. */
61
tcg_gen_or_tl(t0, srcb, cpu_sr_cy);
62
tcg_gen_divu_tl(dest, srca, t0);
63
- tcg_temp_free(t0);
64
65
gen_ove_cy(dc);
66
}
67
@@ -XXX,XX +XXX,XX @@ static void gen_muld(DisasContext *dc, TCGv srca, TCGv srcb)
68
tcg_gen_muls2_i64(cpu_mac, high, t1, t2);
69
tcg_gen_sari_i64(t1, cpu_mac, 63);
70
tcg_gen_setcond_i64(TCG_COND_NE, t1, t1, high);
71
- tcg_temp_free_i64(high);
72
tcg_gen_trunc_i64_tl(cpu_sr_ov, t1);
73
tcg_gen_neg_tl(cpu_sr_ov, cpu_sr_ov);
74
75
gen_ove_ov(dc);
76
}
77
- tcg_temp_free_i64(t1);
78
- tcg_temp_free_i64(t2);
79
}
80
81
static void gen_muldu(DisasContext *dc, TCGv srca, TCGv srcb)
82
@@ -XXX,XX +XXX,XX @@ static void gen_muldu(DisasContext *dc, TCGv srca, TCGv srcb)
83
tcg_gen_mulu2_i64(cpu_mac, high, t1, t2);
84
tcg_gen_setcondi_i64(TCG_COND_NE, high, high, 0);
85
tcg_gen_trunc_i64_tl(cpu_sr_cy, high);
86
- tcg_temp_free_i64(high);
87
88
gen_ove_cy(dc);
89
}
90
- tcg_temp_free_i64(t1);
91
- tcg_temp_free_i64(t2);
92
}
93
94
static void gen_mac(DisasContext *dc, TCGv srca, TCGv srcb)
95
@@ -XXX,XX +XXX,XX @@ static void gen_mac(DisasContext *dc, TCGv srca, TCGv srcb)
96
tcg_gen_add_i64(cpu_mac, cpu_mac, t1);
97
tcg_gen_xor_i64(t1, t1, cpu_mac);
98
tcg_gen_andc_i64(t1, t1, t2);
99
- tcg_temp_free_i64(t2);
100
101
#if TARGET_LONG_BITS == 32
102
tcg_gen_extrh_i64_i32(cpu_sr_ov, t1);
103
#else
104
tcg_gen_mov_i64(cpu_sr_ov, t1);
105
#endif
106
- tcg_temp_free_i64(t1);
107
108
gen_ove_ov(dc);
109
}
110
@@ -XXX,XX +XXX,XX @@ static void gen_macu(DisasContext *dc, TCGv srca, TCGv srcb)
111
tcg_gen_extu_tl_i64(t1, srca);
112
tcg_gen_extu_tl_i64(t2, srcb);
113
tcg_gen_mul_i64(t1, t1, t2);
114
- tcg_temp_free_i64(t2);
115
116
/* Note that overflow is only computed during addition stage. */
117
tcg_gen_add_i64(cpu_mac, cpu_mac, t1);
118
tcg_gen_setcond_i64(TCG_COND_LTU, t1, cpu_mac, t1);
119
tcg_gen_trunc_i64_tl(cpu_sr_cy, t1);
120
- tcg_temp_free_i64(t1);
121
122
gen_ove_cy(dc);
123
}
124
@@ -XXX,XX +XXX,XX @@ static void gen_msb(DisasContext *dc, TCGv srca, TCGv srcb)
125
tcg_gen_sub_i64(cpu_mac, cpu_mac, t1);
126
tcg_gen_xor_i64(t1, t1, cpu_mac);
127
tcg_gen_and_i64(t1, t1, t2);
128
- tcg_temp_free_i64(t2);
129
130
#if TARGET_LONG_BITS == 32
131
tcg_gen_extrh_i64_i32(cpu_sr_ov, t1);
132
#else
133
tcg_gen_mov_i64(cpu_sr_ov, t1);
134
#endif
135
- tcg_temp_free_i64(t1);
136
137
gen_ove_ov(dc);
138
}
139
@@ -XXX,XX +XXX,XX @@ static void gen_msbu(DisasContext *dc, TCGv srca, TCGv srcb)
140
tcg_gen_setcond_i64(TCG_COND_LTU, t2, cpu_mac, t1);
141
tcg_gen_sub_i64(cpu_mac, cpu_mac, t1);
142
tcg_gen_trunc_i64_tl(cpu_sr_cy, t2);
143
- tcg_temp_free_i64(t2);
144
- tcg_temp_free_i64(t1);
145
146
gen_ove_cy(dc);
147
}
148
@@ -XXX,XX +XXX,XX @@ static bool trans_l_lwa(DisasContext *dc, arg_load *a)
149
tcg_gen_qemu_ld_tl(cpu_R(dc, a->d), ea, dc->mem_idx, MO_TEUL);
150
tcg_gen_mov_tl(cpu_lock_addr, ea);
151
tcg_gen_mov_tl(cpu_lock_value, cpu_R(dc, a->d));
152
- tcg_temp_free(ea);
153
return true;
154
}
155
156
@@ -XXX,XX +XXX,XX @@ static void do_load(DisasContext *dc, arg_load *a, MemOp mop)
157
ea = tcg_temp_new();
158
tcg_gen_addi_tl(ea, cpu_R(dc, a->a), a->i);
159
tcg_gen_qemu_ld_tl(cpu_R(dc, a->d), ea, dc->mem_idx, mop);
160
- tcg_temp_free(ea);
161
}
162
163
static bool trans_l_lwz(DisasContext *dc, arg_load *a)
164
@@ -XXX,XX +XXX,XX @@ static bool trans_l_swa(DisasContext *dc, arg_store *a)
165
lab_fail = gen_new_label();
166
lab_done = gen_new_label();
167
tcg_gen_brcond_tl(TCG_COND_NE, ea, cpu_lock_addr, lab_fail);
168
- tcg_temp_free(ea);
169
170
val = tcg_temp_new();
171
tcg_gen_atomic_cmpxchg_tl(val, cpu_lock_addr, cpu_lock_value,
172
cpu_R(dc, a->b), dc->mem_idx, MO_TEUL);
173
tcg_gen_setcond_tl(TCG_COND_EQ, cpu_sr_f, val, cpu_lock_value);
174
- tcg_temp_free(val);
175
176
tcg_gen_br(lab_done);
177
178
@@ -XXX,XX +XXX,XX @@ static void do_store(DisasContext *dc, arg_store *a, MemOp mop)
179
TCGv t0 = tcg_temp_new();
180
tcg_gen_addi_tl(t0, cpu_R(dc, a->a), a->i);
181
tcg_gen_qemu_st_tl(cpu_R(dc, a->b), t0, dc->mem_idx, mop);
182
- tcg_temp_free(t0);
183
}
184
185
static bool trans_l_sw(DisasContext *dc, arg_store *a)
186
@@ -XXX,XX +XXX,XX @@ static bool trans_l_mfspr(DisasContext *dc, arg_l_mfspr *a)
187
188
tcg_gen_ori_tl(spr, cpu_R(dc, a->a), a->k);
189
gen_helper_mfspr(cpu_R(dc, a->d), cpu_env, cpu_R(dc, a->d), spr);
190
- tcg_temp_free(spr);
191
}
192
return true;
193
}
194
@@ -XXX,XX +XXX,XX @@ static bool trans_l_mtspr(DisasContext *dc, arg_l_mtspr *a)
195
spr = tcg_temp_new();
196
tcg_gen_ori_tl(spr, cpu_R(dc, a->a), a->k);
197
gen_helper_mtspr(cpu_env, spr, cpu_R(dc, a->b));
198
- tcg_temp_free(spr);
199
}
200
return true;
201
}
202
@@ -XXX,XX +XXX,XX @@ static bool do_dp3(DisasContext *dc, arg_dab_pair *a,
203
load_pair(dc, t1, a->b, a->bp);
204
fn(t0, cpu_env, t0, t1);
205
save_pair(dc, t0, a->d, a->dp);
206
- tcg_temp_free_i64(t0);
207
- tcg_temp_free_i64(t1);
208
209
gen_helper_update_fpcsr(cpu_env);
210
return true;
211
@@ -XXX,XX +XXX,XX @@ static bool do_dp2(DisasContext *dc, arg_da_pair *a,
212
load_pair(dc, t0, a->a, a->ap);
213
fn(t0, cpu_env, t0);
214
save_pair(dc, t0, a->d, a->dp);
215
- tcg_temp_free_i64(t0);
216
217
gen_helper_update_fpcsr(cpu_env);
218
return true;
219
@@ -XXX,XX +XXX,XX @@ static bool do_dpcmp(DisasContext *dc, arg_ab_pair *a,
220
} else {
221
fn(cpu_sr_f, cpu_env, t0, t1);
222
}
223
- tcg_temp_free_i64(t0);
224
- tcg_temp_free_i64(t1);
225
226
if (inv) {
227
tcg_gen_xori_tl(cpu_sr_f, cpu_sr_f, 1);
228
@@ -XXX,XX +XXX,XX @@ static bool trans_lf_stod_d(DisasContext *dc, arg_lf_stod_d *a)
229
t0 = tcg_temp_new_i64();
230
gen_helper_stod(t0, cpu_env, cpu_R(dc, a->a));
231
save_pair(dc, t0, a->d, a->dp);
232
- tcg_temp_free_i64(t0);
233
234
gen_helper_update_fpcsr(cpu_env);
235
return true;
236
@@ -XXX,XX +XXX,XX @@ static bool trans_lf_dtos_d(DisasContext *dc, arg_lf_dtos_d *a)
237
t0 = tcg_temp_new_i64();
238
load_pair(dc, t0, a->a, a->ap);
239
gen_helper_dtos(cpu_R(dc, a->d), cpu_env, t0);
240
- tcg_temp_free_i64(t0);
241
242
gen_helper_update_fpcsr(cpu_env);
243
return true;
244
@@ -XXX,XX +XXX,XX @@ static bool trans_lf_madd_d(DisasContext *dc, arg_dab_pair *a)
245
load_pair(dc, t2, a->b, a->bp);
246
gen_helper_float_madd_d(t0, cpu_env, t0, t1, t2);
247
save_pair(dc, t0, a->d, a->dp);
248
- tcg_temp_free_i64(t0);
249
- tcg_temp_free_i64(t1);
250
- tcg_temp_free_i64(t2);
251
252
gen_helper_update_fpcsr(cpu_env);
253
return true;
254
--
255
2.34.1
diff view generated by jsdifflib
Deleted patch
1
Translators are no longer required to free tcg temporaries.
2
1
3
Reviewed-by: Daniel Henrique Barboza <danielhb413@gmail.com>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
5
---
6
target/ppc/translate.c | 283 ------------------
7
target/ppc/power8-pmu-regs.c.inc | 16 -
8
target/ppc/translate/dfp-impl.c.inc | 20 --
9
target/ppc/translate/fixedpoint-impl.c.inc | 16 -
10
target/ppc/translate/fp-impl.c.inc | 122 +-------
11
target/ppc/translate/spe-impl.c.inc | 59 ----
12
target/ppc/translate/storage-ctrl-impl.c.inc | 2 -
13
target/ppc/translate/vmx-impl.c.inc | 296 +------------------
14
target/ppc/translate/vsx-impl.c.inc | 287 +-----------------
15
9 files changed, 7 insertions(+), 1094 deletions(-)
16
17
diff --git a/target/ppc/translate.c b/target/ppc/translate.c
18
index XXXXXXX..XXXXXXX 100644
19
--- a/target/ppc/translate.c
20
+++ b/target/ppc/translate.c
21
@@ -XXX,XX +XXX,XX @@ static void gen_exception_err(DisasContext *ctx, uint32_t excp, uint32_t error)
22
t0 = tcg_const_i32(excp);
23
t1 = tcg_const_i32(error);
24
gen_helper_raise_exception_err(cpu_env, t0, t1);
25
- tcg_temp_free_i32(t0);
26
- tcg_temp_free_i32(t1);
27
ctx->base.is_jmp = DISAS_NORETURN;
28
}
29
30
@@ -XXX,XX +XXX,XX @@ static void gen_exception(DisasContext *ctx, uint32_t excp)
31
gen_update_nip(ctx, ctx->cia);
32
t0 = tcg_const_i32(excp);
33
gen_helper_raise_exception(cpu_env, t0);
34
- tcg_temp_free_i32(t0);
35
ctx->base.is_jmp = DISAS_NORETURN;
36
}
37
38
@@ -XXX,XX +XXX,XX @@ static void gen_exception_nip(DisasContext *ctx, uint32_t excp,
39
gen_update_nip(ctx, nip);
40
t0 = tcg_const_i32(excp);
41
gen_helper_raise_exception(cpu_env, t0);
42
- tcg_temp_free_i32(t0);
43
ctx->base.is_jmp = DISAS_NORETURN;
44
}
45
46
@@ -XXX,XX +XXX,XX @@ static uint32_t gen_prep_dbgex(DisasContext *ctx)
47
gen_load_spr(t0, SPR_BOOKE_DBSR);
48
tcg_gen_ori_tl(t0, t0, dbsr);
49
gen_store_spr(SPR_BOOKE_DBSR, t0);
50
- tcg_temp_free(t0);
51
return POWERPC_EXCP_DEBUG;
52
} else {
53
return POWERPC_EXCP_TRACE;
54
@@ -XXX,XX +XXX,XX @@ static void spr_load_dump_spr(int sprn)
55
#ifdef PPC_DUMP_SPR_ACCESSES
56
TCGv_i32 t0 = tcg_const_i32(sprn);
57
gen_helper_load_dump_spr(cpu_env, t0);
58
- tcg_temp_free_i32(t0);
59
#endif
60
}
61
62
@@ -XXX,XX +XXX,XX @@ static void spr_store_dump_spr(int sprn)
63
#ifdef PPC_DUMP_SPR_ACCESSES
64
TCGv_i32 t0 = tcg_const_i32(sprn);
65
gen_helper_store_dump_spr(cpu_env, t0);
66
- tcg_temp_free_i32(t0);
67
#endif
68
}
69
70
@@ -XXX,XX +XXX,XX @@ void spr_write_generic32(DisasContext *ctx, int sprn, int gprn)
71
TCGv t0 = tcg_temp_new();
72
tcg_gen_ext32u_tl(t0, cpu_gpr[gprn]);
73
gen_store_spr(sprn, t0);
74
- tcg_temp_free(t0);
75
spr_store_dump_spr(sprn);
76
#else
77
spr_write_generic(ctx, sprn, gprn);
78
@@ -XXX,XX +XXX,XX @@ void spr_write_clear(DisasContext *ctx, int sprn, int gprn)
79
tcg_gen_neg_tl(t1, cpu_gpr[gprn]);
80
tcg_gen_and_tl(t0, t0, t1);
81
gen_store_spr(sprn, t0);
82
- tcg_temp_free(t0);
83
- tcg_temp_free(t1);
84
}
85
86
void spr_access_nop(DisasContext *ctx, int sprn, int gprn)
87
@@ -XXX,XX +XXX,XX @@ void spr_read_xer(DisasContext *ctx, int gprn, int sprn)
88
tcg_gen_shli_tl(t0, cpu_ca32, XER_CA32);
89
tcg_gen_or_tl(dst, dst, t0);
90
}
91
- tcg_temp_free(t0);
92
- tcg_temp_free(t1);
93
- tcg_temp_free(t2);
94
}
95
96
void spr_write_xer(DisasContext *ctx, int sprn, int gprn)
97
@@ -XXX,XX +XXX,XX @@ void spr_write_ibatu(DisasContext *ctx, int sprn, int gprn)
98
{
99
TCGv_i32 t0 = tcg_const_i32((sprn - SPR_IBAT0U) / 2);
100
gen_helper_store_ibatu(cpu_env, t0, cpu_gpr[gprn]);
101
- tcg_temp_free_i32(t0);
102
}
103
104
void spr_write_ibatu_h(DisasContext *ctx, int sprn, int gprn)
105
{
106
TCGv_i32 t0 = tcg_const_i32(((sprn - SPR_IBAT4U) / 2) + 4);
107
gen_helper_store_ibatu(cpu_env, t0, cpu_gpr[gprn]);
108
- tcg_temp_free_i32(t0);
109
}
110
111
void spr_write_ibatl(DisasContext *ctx, int sprn, int gprn)
112
{
113
TCGv_i32 t0 = tcg_const_i32((sprn - SPR_IBAT0L) / 2);
114
gen_helper_store_ibatl(cpu_env, t0, cpu_gpr[gprn]);
115
- tcg_temp_free_i32(t0);
116
}
117
118
void spr_write_ibatl_h(DisasContext *ctx, int sprn, int gprn)
119
{
120
TCGv_i32 t0 = tcg_const_i32(((sprn - SPR_IBAT4L) / 2) + 4);
121
gen_helper_store_ibatl(cpu_env, t0, cpu_gpr[gprn]);
122
- tcg_temp_free_i32(t0);
123
}
124
125
/* DBAT0U...DBAT7U */
126
@@ -XXX,XX +XXX,XX @@ void spr_write_dbatu(DisasContext *ctx, int sprn, int gprn)
127
{
128
TCGv_i32 t0 = tcg_const_i32((sprn - SPR_DBAT0U) / 2);
129
gen_helper_store_dbatu(cpu_env, t0, cpu_gpr[gprn]);
130
- tcg_temp_free_i32(t0);
131
}
132
133
void spr_write_dbatu_h(DisasContext *ctx, int sprn, int gprn)
134
{
135
TCGv_i32 t0 = tcg_const_i32(((sprn - SPR_DBAT4U) / 2) + 4);
136
gen_helper_store_dbatu(cpu_env, t0, cpu_gpr[gprn]);
137
- tcg_temp_free_i32(t0);
138
}
139
140
void spr_write_dbatl(DisasContext *ctx, int sprn, int gprn)
141
{
142
TCGv_i32 t0 = tcg_const_i32((sprn - SPR_DBAT0L) / 2);
143
gen_helper_store_dbatl(cpu_env, t0, cpu_gpr[gprn]);
144
- tcg_temp_free_i32(t0);
145
}
146
147
void spr_write_dbatl_h(DisasContext *ctx, int sprn, int gprn)
148
{
149
TCGv_i32 t0 = tcg_const_i32(((sprn - SPR_DBAT4L) / 2) + 4);
150
gen_helper_store_dbatl(cpu_env, t0, cpu_gpr[gprn]);
151
- tcg_temp_free_i32(t0);
152
}
153
154
/* SDR1 */
155
@@ -XXX,XX +XXX,XX @@ void spr_write_hior(DisasContext *ctx, int sprn, int gprn)
156
TCGv t0 = tcg_temp_new();
157
tcg_gen_andi_tl(t0, cpu_gpr[gprn], 0x3FFFFF00000ULL);
158
tcg_gen_st_tl(t0, cpu_env, offsetof(CPUPPCState, excp_prefix));
159
- tcg_temp_free(t0);
160
}
161
void spr_write_ptcr(DisasContext *ctx, int sprn, int gprn)
162
{
163
@@ -XXX,XX +XXX,XX @@ void spr_write_40x_pid(DisasContext *ctx, int sprn, int gprn)
164
TCGv t0 = tcg_temp_new();
165
tcg_gen_andi_tl(t0, cpu_gpr[gprn], 0xFF);
166
gen_helper_store_40x_pid(cpu_env, t0);
167
- tcg_temp_free(t0);
168
}
169
170
void spr_write_booke_tcr(DisasContext *ctx, int sprn, int gprn)
171
@@ -XXX,XX +XXX,XX @@ void spr_write_pir(DisasContext *ctx, int sprn, int gprn)
172
TCGv t0 = tcg_temp_new();
173
tcg_gen_andi_tl(t0, cpu_gpr[gprn], 0xF);
174
gen_store_spr(SPR_PIR, t0);
175
- tcg_temp_free(t0);
176
}
177
#endif
178
179
@@ -XXX,XX +XXX,XX @@ void spr_read_spefscr(DisasContext *ctx, int gprn, int sprn)
180
TCGv_i32 t0 = tcg_temp_new_i32();
181
tcg_gen_ld_i32(t0, cpu_env, offsetof(CPUPPCState, spe_fscr));
182
tcg_gen_extu_i32_tl(cpu_gpr[gprn], t0);
183
- tcg_temp_free_i32(t0);
184
}
185
186
void spr_write_spefscr(DisasContext *ctx, int sprn, int gprn)
187
@@ -XXX,XX +XXX,XX @@ void spr_write_spefscr(DisasContext *ctx, int sprn, int gprn)
188
TCGv_i32 t0 = tcg_temp_new_i32();
189
tcg_gen_trunc_tl_i32(t0, cpu_gpr[gprn]);
190
tcg_gen_st_i32(t0, cpu_env, offsetof(CPUPPCState, spe_fscr));
191
- tcg_temp_free_i32(t0);
192
}
193
194
#if !defined(CONFIG_USER_ONLY)
195
@@ -XXX,XX +XXX,XX @@ void spr_write_excp_prefix(DisasContext *ctx, int sprn, int gprn)
196
tcg_gen_and_tl(t0, t0, cpu_gpr[gprn]);
197
tcg_gen_st_tl(t0, cpu_env, offsetof(CPUPPCState, excp_prefix));
198
gen_store_spr(sprn, t0);
199
- tcg_temp_free(t0);
200
}
201
202
void spr_write_excp_vector(DisasContext *ctx, int sprn, int gprn)
203
@@ -XXX,XX +XXX,XX @@ void spr_write_excp_vector(DisasContext *ctx, int sprn, int gprn)
204
tcg_gen_and_tl(t0, t0, cpu_gpr[gprn]);
205
tcg_gen_st_tl(t0, cpu_env, offsetof(CPUPPCState, excp_vectors[sprn_offs]));
206
gen_store_spr(sprn, t0);
207
- tcg_temp_free(t0);
208
}
209
#endif
210
211
@@ -XXX,XX +XXX,XX @@ void spr_write_amr(DisasContext *ctx, int sprn, int gprn)
212
tcg_gen_or_tl(t0, t0, t2);
213
gen_store_spr(SPR_AMR, t0);
214
spr_store_dump_spr(SPR_AMR);
215
-
216
- tcg_temp_free(t0);
217
- tcg_temp_free(t1);
218
- tcg_temp_free(t2);
219
}
220
221
void spr_write_uamor(DisasContext *ctx, int sprn, int gprn)
222
@@ -XXX,XX +XXX,XX @@ void spr_write_uamor(DisasContext *ctx, int sprn, int gprn)
223
tcg_gen_or_tl(t0, t0, t2);
224
gen_store_spr(SPR_UAMOR, t0);
225
spr_store_dump_spr(SPR_UAMOR);
226
-
227
- tcg_temp_free(t0);
228
- tcg_temp_free(t1);
229
- tcg_temp_free(t2);
230
}
231
232
void spr_write_iamr(DisasContext *ctx, int sprn, int gprn)
233
@@ -XXX,XX +XXX,XX @@ void spr_write_iamr(DisasContext *ctx, int sprn, int gprn)
234
tcg_gen_or_tl(t0, t0, t2);
235
gen_store_spr(SPR_IAMR, t0);
236
spr_store_dump_spr(SPR_IAMR);
237
-
238
- tcg_temp_free(t0);
239
- tcg_temp_free(t1);
240
- tcg_temp_free(t2);
241
}
242
#endif
243
#endif
244
@@ -XXX,XX +XXX,XX @@ void spr_write_e500_l1csr0(DisasContext *ctx, int sprn, int gprn)
245
246
tcg_gen_andi_tl(t0, cpu_gpr[gprn], L1CSR0_DCE | L1CSR0_CPE);
247
gen_store_spr(sprn, t0);
248
- tcg_temp_free(t0);
249
}
250
251
void spr_write_e500_l1csr1(DisasContext *ctx, int sprn, int gprn)
252
@@ -XXX,XX +XXX,XX @@ void spr_write_e500_l1csr1(DisasContext *ctx, int sprn, int gprn)
253
254
tcg_gen_andi_tl(t0, cpu_gpr[gprn], L1CSR1_ICE | L1CSR1_CPE);
255
gen_store_spr(sprn, t0);
256
- tcg_temp_free(t0);
257
}
258
259
void spr_write_e500_l2csr0(DisasContext *ctx, int sprn, int gprn)
260
@@ -XXX,XX +XXX,XX @@ void spr_write_e500_l2csr0(DisasContext *ctx, int sprn, int gprn)
261
tcg_gen_andi_tl(t0, cpu_gpr[gprn],
262
~(E500_L2CSR0_L2FI | E500_L2CSR0_L2FL | E500_L2CSR0_L2LFC));
263
gen_store_spr(sprn, t0);
264
- tcg_temp_free(t0);
265
}
266
267
void spr_write_booke206_mmucsr0(DisasContext *ctx, int sprn, int gprn)
268
@@ -XXX,XX +XXX,XX @@ void spr_write_booke_pid(DisasContext *ctx, int sprn, int gprn)
269
{
270
TCGv_i32 t0 = tcg_const_i32(sprn);
271
gen_helper_booke_setpid(cpu_env, t0, cpu_gpr[gprn]);
272
- tcg_temp_free_i32(t0);
273
}
274
void spr_write_eplc(DisasContext *ctx, int sprn, int gprn)
275
{
276
@@ -XXX,XX +XXX,XX @@ void spr_write_mas73(DisasContext *ctx, int sprn, int gprn)
277
gen_store_spr(SPR_BOOKE_MAS3, val);
278
tcg_gen_shri_tl(val, cpu_gpr[gprn], 32);
279
gen_store_spr(SPR_BOOKE_MAS7, val);
280
- tcg_temp_free(val);
281
}
282
283
void spr_read_mas73(DisasContext *ctx, int gprn, int sprn)
284
@@ -XXX,XX +XXX,XX @@ void spr_read_mas73(DisasContext *ctx, int gprn, int sprn)
285
tcg_gen_shli_tl(mas7, mas7, 32);
286
gen_load_spr(mas3, SPR_BOOKE_MAS3);
287
tcg_gen_or_tl(cpu_gpr[gprn], mas3, mas7);
288
- tcg_temp_free(mas3);
289
- tcg_temp_free(mas7);
290
}
291
292
#endif
293
@@ -XXX,XX +XXX,XX @@ static void gen_fscr_facility_check(DisasContext *ctx, int facility_sprn,
294
TCGv_i32 t3 = tcg_const_i32(cause);
295
296
gen_helper_fscr_facility_check(cpu_env, t1, t2, t3);
297
-
298
- tcg_temp_free_i32(t3);
299
- tcg_temp_free_i32(t2);
300
- tcg_temp_free_i32(t1);
301
}
302
303
static void gen_msr_facility_check(DisasContext *ctx, int facility_sprn,
304
@@ -XXX,XX +XXX,XX @@ static void gen_msr_facility_check(DisasContext *ctx, int facility_sprn,
305
TCGv_i32 t3 = tcg_const_i32(cause);
306
307
gen_helper_msr_facility_check(cpu_env, t1, t2, t3);
308
-
309
- tcg_temp_free_i32(t3);
310
- tcg_temp_free_i32(t2);
311
- tcg_temp_free_i32(t1);
312
}
313
314
void spr_read_prev_upper32(DisasContext *ctx, int gprn, int sprn)
315
@@ -XXX,XX +XXX,XX @@ void spr_read_prev_upper32(DisasContext *ctx, int gprn, int sprn)
316
gen_load_spr(spr, sprn - 1);
317
tcg_gen_shri_tl(spr_up, spr, 32);
318
tcg_gen_ext32u_tl(cpu_gpr[gprn], spr_up);
319
-
320
- tcg_temp_free(spr);
321
- tcg_temp_free(spr_up);
322
}
323
324
void spr_write_prev_upper32(DisasContext *ctx, int sprn, int gprn)
325
@@ -XXX,XX +XXX,XX @@ void spr_write_prev_upper32(DisasContext *ctx, int sprn, int gprn)
326
gen_load_spr(spr, sprn - 1);
327
tcg_gen_deposit_tl(spr, spr, cpu_gpr[gprn], 32, 32);
328
gen_store_spr(sprn - 1, spr);
329
-
330
- tcg_temp_free(spr);
331
}
332
333
#if !defined(CONFIG_USER_ONLY)
334
@@ -XXX,XX +XXX,XX @@ void spr_write_hmer(DisasContext *ctx, int sprn, int gprn)
335
tcg_gen_and_tl(hmer, cpu_gpr[gprn], hmer);
336
gen_store_spr(sprn, hmer);
337
spr_store_dump_spr(sprn);
338
- tcg_temp_free(hmer);
339
}
340
341
void spr_write_lpcr(DisasContext *ctx, int sprn, int gprn)
342
@@ -XXX,XX +XXX,XX @@ void spr_read_dexcr_ureg(DisasContext *ctx, int gprn, int sprn)
343
344
gen_load_spr(t0, sprn + 16);
345
tcg_gen_ext32u_tl(cpu_gpr[gprn], t0);
346
-
347
- tcg_temp_free(t0);
348
}
349
#endif
350
351
@@ -XXX,XX +XXX,XX @@ static inline void gen_op_cmp(TCGv arg0, TCGv arg1, int s, int crf)
352
tcg_gen_trunc_tl_i32(t, t0);
353
tcg_gen_trunc_tl_i32(cpu_crf[crf], cpu_so);
354
tcg_gen_or_i32(cpu_crf[crf], cpu_crf[crf], t);
355
-
356
- tcg_temp_free(t0);
357
- tcg_temp_free(t1);
358
- tcg_temp_free_i32(t);
359
}
360
361
static inline void gen_op_cmpi(TCGv arg0, target_ulong arg1, int s, int crf)
362
{
363
TCGv t0 = tcg_const_tl(arg1);
364
gen_op_cmp(arg0, t0, s, crf);
365
- tcg_temp_free(t0);
366
}
367
368
static inline void gen_op_cmp32(TCGv arg0, TCGv arg1, int s, int crf)
369
@@ -XXX,XX +XXX,XX @@ static inline void gen_op_cmp32(TCGv arg0, TCGv arg1, int s, int crf)
370
tcg_gen_ext32u_tl(t1, arg1);
371
}
372
gen_op_cmp(t0, t1, s, crf);
373
- tcg_temp_free(t1);
374
- tcg_temp_free(t0);
375
}
376
377
static inline void gen_op_cmpi32(TCGv arg0, target_ulong arg1, int s, int crf)
378
{
379
TCGv t0 = tcg_const_tl(arg1);
380
gen_op_cmp32(arg0, t0, s, crf);
381
- tcg_temp_free(t0);
382
}
383
384
static inline void gen_set_Rc0(DisasContext *ctx, TCGv reg)
385
@@ -XXX,XX +XXX,XX @@ static void gen_cmprb(DisasContext *ctx)
386
tcg_gen_or_i32(crf, crf, src2lo);
387
}
388
tcg_gen_shli_i32(crf, crf, CRF_GT_BIT);
389
- tcg_temp_free_i32(src1);
390
- tcg_temp_free_i32(src2);
391
- tcg_temp_free_i32(src2lo);
392
- tcg_temp_free_i32(src2hi);
393
}
394
395
#if defined(TARGET_PPC64)
396
@@ -XXX,XX +XXX,XX @@ static void gen_isel(DisasContext *ctx)
397
tcg_gen_movcond_tl(TCG_COND_NE, cpu_gpr[rD(ctx->opcode)], t0, zr,
398
rA(ctx->opcode) ? cpu_gpr[rA(ctx->opcode)] : zr,
399
cpu_gpr[rB(ctx->opcode)]);
400
- tcg_temp_free(zr);
401
- tcg_temp_free(t0);
402
}
403
404
/* cmpb: PowerPC 2.05 specification */
405
@@ -XXX,XX +XXX,XX @@ static inline void gen_op_arith_compute_ov(DisasContext *ctx, TCGv arg0,
406
} else {
407
tcg_gen_andc_tl(cpu_ov, cpu_ov, t0);
408
}
409
- tcg_temp_free(t0);
410
if (NARROW_MODE(ctx)) {
411
tcg_gen_extract_tl(cpu_ov, cpu_ov, 31, 1);
412
if (is_isa300(ctx)) {
413
@@ -XXX,XX +XXX,XX @@ static inline void gen_op_arith_compute_ca32(DisasContext *ctx,
414
}
415
tcg_gen_xor_tl(t0, t0, res);
416
tcg_gen_extract_tl(ca32, t0, 32, 1);
417
- tcg_temp_free(t0);
418
}
419
420
/* Common add function */
421
@@ -XXX,XX +XXX,XX @@ static inline void gen_op_arith_add(DisasContext *ctx, TCGv ret, TCGv arg1,
422
tcg_gen_add_tl(t0, t0, ca);
423
}
424
tcg_gen_xor_tl(ca, t0, t1); /* bits changed w/ carry */
425
- tcg_temp_free(t1);
426
tcg_gen_extract_tl(ca, ca, 32, 1);
427
if (is_isa300(ctx)) {
428
tcg_gen_mov_tl(ca32, ca);
429
@@ -XXX,XX +XXX,XX @@ static inline void gen_op_arith_add(DisasContext *ctx, TCGv ret, TCGv arg1,
430
tcg_gen_add2_tl(t0, ca, arg1, zero, arg2, zero);
431
}
432
gen_op_arith_compute_ca32(ctx, t0, arg1, arg2, ca32, 0);
433
- tcg_temp_free(zero);
434
}
435
} else {
436
tcg_gen_add_tl(t0, arg1, arg2);
437
@@ -XXX,XX +XXX,XX @@ static inline void gen_op_arith_add(DisasContext *ctx, TCGv ret, TCGv arg1,
438
439
if (t0 != ret) {
440
tcg_gen_mov_tl(ret, t0);
441
- tcg_temp_free(t0);
442
}
443
}
444
/* Add functions with two operands */
445
@@ -XXX,XX +XXX,XX @@ static void glue(gen_, name)(DisasContext *ctx) \
446
cpu_gpr[rA(ctx->opcode)], t0, \
447
ca, glue(ca, 32), \
448
add_ca, compute_ca, compute_ov, Rc(ctx->opcode)); \
449
- tcg_temp_free(t0); \
450
}
451
452
/* add add. addo addo. */
453
@@ -XXX,XX +XXX,XX @@ static inline void gen_op_addic(DisasContext *ctx, bool compute_rc0)
454
TCGv c = tcg_const_tl(SIMM(ctx->opcode));
455
gen_op_arith_add(ctx, cpu_gpr[rD(ctx->opcode)], cpu_gpr[rA(ctx->opcode)],
456
c, cpu_ca, cpu_ca32, 0, 1, 0, compute_rc0);
457
- tcg_temp_free(c);
458
}
459
460
static void gen_addic(DisasContext *ctx)
461
@@ -XXX,XX +XXX,XX @@ static inline void gen_op_arith_divw(DisasContext *ctx, TCGv ret, TCGv arg1,
462
}
463
tcg_gen_or_tl(cpu_so, cpu_so, cpu_ov);
464
}
465
- tcg_temp_free_i32(t0);
466
- tcg_temp_free_i32(t1);
467
- tcg_temp_free_i32(t2);
468
- tcg_temp_free_i32(t3);
469
470
if (unlikely(Rc(ctx->opcode) != 0)) {
471
gen_set_Rc0(ctx, ret);
472
@@ -XXX,XX +XXX,XX @@ static void gen_##name(DisasContext *ctx) \
473
TCGv_i32 t0 = tcg_const_i32(compute_ov); \
474
gen_helper_##hlpr(cpu_gpr[rD(ctx->opcode)], cpu_env, \
475
cpu_gpr[rA(ctx->opcode)], cpu_gpr[rB(ctx->opcode)], t0); \
476
- tcg_temp_free_i32(t0); \
477
if (unlikely(Rc(ctx->opcode) != 0)) { \
478
gen_set_Rc0(ctx, cpu_gpr[rD(ctx->opcode)]); \
479
} \
480
@@ -XXX,XX +XXX,XX @@ static inline void gen_op_arith_divd(DisasContext *ctx, TCGv ret, TCGv arg1,
481
}
482
tcg_gen_or_tl(cpu_so, cpu_so, cpu_ov);
483
}
484
- tcg_temp_free_i64(t0);
485
- tcg_temp_free_i64(t1);
486
- tcg_temp_free_i64(t2);
487
- tcg_temp_free_i64(t3);
488
489
if (unlikely(Rc(ctx->opcode) != 0)) {
490
gen_set_Rc0(ctx, ret);
491
@@ -XXX,XX +XXX,XX @@ static inline void gen_op_arith_modw(DisasContext *ctx, TCGv ret, TCGv arg1,
492
tcg_gen_movcond_i32(TCG_COND_NE, t1, t2, t3, t2, t1);
493
tcg_gen_rem_i32(t3, t0, t1);
494
tcg_gen_ext_i32_tl(ret, t3);
495
- tcg_temp_free_i32(t2);
496
- tcg_temp_free_i32(t3);
497
} else {
498
TCGv_i32 t2 = tcg_const_i32(1);
499
TCGv_i32 t3 = tcg_const_i32(0);
500
tcg_gen_movcond_i32(TCG_COND_EQ, t1, t1, t3, t2, t1);
501
tcg_gen_remu_i32(t3, t0, t1);
502
tcg_gen_extu_i32_tl(ret, t3);
503
- tcg_temp_free_i32(t2);
504
- tcg_temp_free_i32(t3);
505
}
506
- tcg_temp_free_i32(t0);
507
- tcg_temp_free_i32(t1);
508
}
509
510
#define GEN_INT_ARITH_MODW(name, opc3, sign) \
511
@@ -XXX,XX +XXX,XX @@ static inline void gen_op_arith_modd(DisasContext *ctx, TCGv ret, TCGv arg1,
512
tcg_gen_movi_i64(t3, 0);
513
tcg_gen_movcond_i64(TCG_COND_NE, t1, t2, t3, t2, t1);
514
tcg_gen_rem_i64(ret, t0, t1);
515
- tcg_temp_free_i64(t2);
516
- tcg_temp_free_i64(t3);
517
} else {
518
TCGv_i64 t2 = tcg_const_i64(1);
519
TCGv_i64 t3 = tcg_const_i64(0);
520
tcg_gen_movcond_i64(TCG_COND_EQ, t1, t1, t3, t2, t1);
521
tcg_gen_remu_i64(ret, t0, t1);
522
- tcg_temp_free_i64(t2);
523
- tcg_temp_free_i64(t3);
524
}
525
- tcg_temp_free_i64(t0);
526
- tcg_temp_free_i64(t1);
527
}
528
529
#define GEN_INT_ARITH_MODD(name, opc3, sign) \
530
@@ -XXX,XX +XXX,XX @@ static void gen_mulhw(DisasContext *ctx)
531
tcg_gen_trunc_tl_i32(t1, cpu_gpr[rB(ctx->opcode)]);
532
tcg_gen_muls2_i32(t0, t1, t0, t1);
533
tcg_gen_extu_i32_tl(cpu_gpr[rD(ctx->opcode)], t1);
534
- tcg_temp_free_i32(t0);
535
- tcg_temp_free_i32(t1);
536
if (unlikely(Rc(ctx->opcode) != 0)) {
537
gen_set_Rc0(ctx, cpu_gpr[rD(ctx->opcode)]);
538
}
539
@@ -XXX,XX +XXX,XX @@ static void gen_mulhwu(DisasContext *ctx)
540
tcg_gen_trunc_tl_i32(t1, cpu_gpr[rB(ctx->opcode)]);
541
tcg_gen_mulu2_i32(t0, t1, t0, t1);
542
tcg_gen_extu_i32_tl(cpu_gpr[rD(ctx->opcode)], t1);
543
- tcg_temp_free_i32(t0);
544
- tcg_temp_free_i32(t1);
545
if (unlikely(Rc(ctx->opcode) != 0)) {
546
gen_set_Rc0(ctx, cpu_gpr[rD(ctx->opcode)]);
547
}
548
@@ -XXX,XX +XXX,XX @@ static void gen_mullw(DisasContext *ctx)
549
tcg_gen_ext32s_tl(t0, cpu_gpr[rA(ctx->opcode)]);
550
tcg_gen_ext32s_tl(t1, cpu_gpr[rB(ctx->opcode)]);
551
tcg_gen_mul_i64(cpu_gpr[rD(ctx->opcode)], t0, t1);
552
- tcg_temp_free(t0);
553
- tcg_temp_free(t1);
554
#else
555
tcg_gen_mul_i32(cpu_gpr[rD(ctx->opcode)], cpu_gpr[rA(ctx->opcode)],
556
cpu_gpr[rB(ctx->opcode)]);
557
@@ -XXX,XX +XXX,XX @@ static void gen_mullwo(DisasContext *ctx)
558
}
559
tcg_gen_or_tl(cpu_so, cpu_so, cpu_ov);
560
561
- tcg_temp_free_i32(t0);
562
- tcg_temp_free_i32(t1);
563
if (unlikely(Rc(ctx->opcode) != 0)) {
564
gen_set_Rc0(ctx, cpu_gpr[rD(ctx->opcode)]);
565
}
566
@@ -XXX,XX +XXX,XX @@ static void gen_mulhd(DisasContext *ctx)
567
TCGv lo = tcg_temp_new();
568
tcg_gen_muls2_tl(lo, cpu_gpr[rD(ctx->opcode)],
569
cpu_gpr[rA(ctx->opcode)], cpu_gpr[rB(ctx->opcode)]);
570
- tcg_temp_free(lo);
571
if (unlikely(Rc(ctx->opcode) != 0)) {
572
gen_set_Rc0(ctx, cpu_gpr[rD(ctx->opcode)]);
573
}
574
@@ -XXX,XX +XXX,XX @@ static void gen_mulhdu(DisasContext *ctx)
575
TCGv lo = tcg_temp_new();
576
tcg_gen_mulu2_tl(lo, cpu_gpr[rD(ctx->opcode)],
577
cpu_gpr[rA(ctx->opcode)], cpu_gpr[rB(ctx->opcode)]);
578
- tcg_temp_free(lo);
579
if (unlikely(Rc(ctx->opcode) != 0)) {
580
gen_set_Rc0(ctx, cpu_gpr[rD(ctx->opcode)]);
581
}
582
@@ -XXX,XX +XXX,XX @@ static void gen_mulldo(DisasContext *ctx)
583
}
584
tcg_gen_or_tl(cpu_so, cpu_so, cpu_ov);
585
586
- tcg_temp_free_i64(t0);
587
- tcg_temp_free_i64(t1);
588
-
589
if (unlikely(Rc(ctx->opcode) != 0)) {
590
gen_set_Rc0(ctx, cpu_gpr[rD(ctx->opcode)]);
591
}
592
@@ -XXX,XX +XXX,XX @@ static inline void gen_op_arith_subf(DisasContext *ctx, TCGv ret, TCGv arg1,
593
}
594
tcg_gen_xor_tl(t1, arg2, inv1); /* add without carry */
595
tcg_gen_add_tl(t0, t0, inv1);
596
- tcg_temp_free(inv1);
597
tcg_gen_xor_tl(cpu_ca, t0, t1); /* bits changes w/ carry */
598
- tcg_temp_free(t1);
599
tcg_gen_extract_tl(cpu_ca, cpu_ca, 32, 1);
600
if (is_isa300(ctx)) {
601
tcg_gen_mov_tl(cpu_ca32, cpu_ca);
602
@@ -XXX,XX +XXX,XX @@ static inline void gen_op_arith_subf(DisasContext *ctx, TCGv ret, TCGv arg1,
603
tcg_gen_add2_tl(t0, cpu_ca, arg2, zero, cpu_ca, zero);
604
tcg_gen_add2_tl(t0, cpu_ca, t0, cpu_ca, inv1, zero);
605
gen_op_arith_compute_ca32(ctx, t0, inv1, arg2, cpu_ca32, 0);
606
- tcg_temp_free(zero);
607
- tcg_temp_free(inv1);
608
} else {
609
tcg_gen_setcond_tl(TCG_COND_GEU, cpu_ca, arg2, arg1);
610
tcg_gen_sub_tl(t0, arg2, arg1);
611
@@ -XXX,XX +XXX,XX @@ static inline void gen_op_arith_subf(DisasContext *ctx, TCGv ret, TCGv arg1,
612
613
if (t0 != ret) {
614
tcg_gen_mov_tl(ret, t0);
615
- tcg_temp_free(t0);
616
}
617
}
618
/* Sub functions with Two operands functions */
619
@@ -XXX,XX +XXX,XX @@ static void glue(gen_, name)(DisasContext *ctx) \
620
gen_op_arith_subf(ctx, cpu_gpr[rD(ctx->opcode)], \
621
cpu_gpr[rA(ctx->opcode)], t0, \
622
add_ca, compute_ca, compute_ov, Rc(ctx->opcode)); \
623
- tcg_temp_free(t0); \
624
}
625
/* subf subf. subfo subfo. */
626
GEN_INT_ARITH_SUBF(subf, 0x01, 0, 0, 0)
627
@@ -XXX,XX +XXX,XX @@ static void gen_subfic(DisasContext *ctx)
628
TCGv c = tcg_const_tl(SIMM(ctx->opcode));
629
gen_op_arith_subf(ctx, cpu_gpr[rD(ctx->opcode)], cpu_gpr[rA(ctx->opcode)],
630
c, 0, 1, 0, 0);
631
- tcg_temp_free(c);
632
}
633
634
/* neg neg. nego nego. */
635
@@ -XXX,XX +XXX,XX @@ static inline void gen_op_arith_neg(DisasContext *ctx, bool compute_ov)
636
TCGv zero = tcg_const_tl(0);
637
gen_op_arith_subf(ctx, cpu_gpr[rD(ctx->opcode)], cpu_gpr[rA(ctx->opcode)],
638
zero, 0, 0, compute_ov, Rc(ctx->opcode));
639
- tcg_temp_free(zero);
640
}
641
642
static void gen_neg(DisasContext *ctx)
643
@@ -XXX,XX +XXX,XX @@ static void gen_cntlzw(DisasContext *ctx)
644
tcg_gen_trunc_tl_i32(t, cpu_gpr[rS(ctx->opcode)]);
645
tcg_gen_clzi_i32(t, t, 32);
646
tcg_gen_extu_i32_tl(cpu_gpr[rA(ctx->opcode)], t);
647
- tcg_temp_free_i32(t);
648
649
if (unlikely(Rc(ctx->opcode) != 0)) {
650
gen_set_Rc0(ctx, cpu_gpr[rA(ctx->opcode)]);
651
@@ -XXX,XX +XXX,XX @@ static void gen_cnttzw(DisasContext *ctx)
652
tcg_gen_trunc_tl_i32(t, cpu_gpr[rS(ctx->opcode)]);
653
tcg_gen_ctzi_i32(t, t, 32);
654
tcg_gen_extu_i32_tl(cpu_gpr[rA(ctx->opcode)], t);
655
- tcg_temp_free_i32(t);
656
657
if (unlikely(Rc(ctx->opcode) != 0)) {
658
gen_set_Rc0(ctx, cpu_gpr[rA(ctx->opcode)]);
659
@@ -XXX,XX +XXX,XX @@ static void gen_pause(DisasContext *ctx)
660
TCGv_i32 t0 = tcg_const_i32(0);
661
tcg_gen_st_i32(t0, cpu_env,
662
-offsetof(PowerPCCPU, env) + offsetof(CPUState, halted));
663
- tcg_temp_free_i32(t0);
664
665
/* Stop translation, this gives other CPUs a chance to run */
666
gen_exception_nip(ctx, EXCP_HLT, ctx->base.pc_next);
667
@@ -XXX,XX +XXX,XX @@ static void gen_or(DisasContext *ctx)
668
tcg_gen_andi_tl(t0, t0, ~0x001C000000000000ULL);
669
tcg_gen_ori_tl(t0, t0, ((uint64_t)prio) << 50);
670
gen_store_spr(SPR_PPR, t0);
671
- tcg_temp_free(t0);
672
}
673
#if !defined(CONFIG_USER_ONLY)
674
/*
675
@@ -XXX,XX +XXX,XX @@ static void gen_prtyw(DisasContext *ctx)
676
tcg_gen_shri_tl(t0, ra, 8);
677
tcg_gen_xor_tl(ra, ra, t0);
678
tcg_gen_andi_tl(ra, ra, (target_ulong)0x100000001ULL);
679
- tcg_temp_free(t0);
680
}
681
682
#if defined(TARGET_PPC64)
683
@@ -XXX,XX +XXX,XX @@ static void gen_prtyd(DisasContext *ctx)
684
tcg_gen_shri_tl(t0, ra, 8);
685
tcg_gen_xor_tl(ra, ra, t0);
686
tcg_gen_andi_tl(ra, ra, 1);
687
- tcg_temp_free(t0);
688
}
689
#endif
690
691
@@ -XXX,XX +XXX,XX @@ static void gen_rlwimi(DisasContext *ctx)
692
tcg_gen_trunc_tl_i32(t0, t_rs);
693
tcg_gen_rotli_i32(t0, t0, sh);
694
tcg_gen_extu_i32_tl(t1, t0);
695
- tcg_temp_free_i32(t0);
696
} else {
697
#if defined(TARGET_PPC64)
698
tcg_gen_deposit_i64(t1, t_rs, t_rs, 32, 32);
699
@@ -XXX,XX +XXX,XX @@ static void gen_rlwimi(DisasContext *ctx)
700
tcg_gen_andi_tl(t1, t1, mask);
701
tcg_gen_andi_tl(t_ra, t_ra, ~mask);
702
tcg_gen_or_tl(t_ra, t_ra, t1);
703
- tcg_temp_free(t1);
704
}
705
if (unlikely(Rc(ctx->opcode) != 0)) {
706
gen_set_Rc0(ctx, t_ra);
707
@@ -XXX,XX +XXX,XX @@ static void gen_rlwinm(DisasContext *ctx)
708
tcg_gen_rotli_i32(t0, t0, sh);
709
tcg_gen_andi_i32(t0, t0, mask);
710
tcg_gen_extu_i32_tl(t_ra, t0);
711
- tcg_temp_free_i32(t0);
712
}
713
} else {
714
#if defined(TARGET_PPC64)
715
@@ -XXX,XX +XXX,XX @@ static void gen_rlwnm(DisasContext *ctx)
716
tcg_gen_andi_i32(t0, t0, 0x1f);
717
tcg_gen_rotl_i32(t1, t1, t0);
718
tcg_gen_extu_i32_tl(t_ra, t1);
719
- tcg_temp_free_i32(t0);
720
- tcg_temp_free_i32(t1);
721
} else {
722
#if defined(TARGET_PPC64)
723
TCGv_i64 t0 = tcg_temp_new_i64();
724
tcg_gen_andi_i64(t0, t_rb, 0x1f);
725
tcg_gen_deposit_i64(t_ra, t_rs, t_rs, 32, 32);
726
tcg_gen_rotl_i64(t_ra, t_ra, t0);
727
- tcg_temp_free_i64(t0);
728
#else
729
g_assert_not_reached();
730
#endif
731
@@ -XXX,XX +XXX,XX @@ static void gen_rldnm(DisasContext *ctx, int mb, int me)
732
t0 = tcg_temp_new();
733
tcg_gen_andi_tl(t0, t_rb, 0x3f);
734
tcg_gen_rotl_tl(t_ra, t_rs, t0);
735
- tcg_temp_free(t0);
736
737
tcg_gen_andi_tl(t_ra, t_ra, MASK(mb, me));
738
if (unlikely(Rc(ctx->opcode) != 0)) {
739
@@ -XXX,XX +XXX,XX @@ static void gen_rldimi(DisasContext *ctx, int mbn, int shn)
740
tcg_gen_andi_tl(t1, t1, mask);
741
tcg_gen_andi_tl(t_ra, t_ra, ~mask);
742
tcg_gen_or_tl(t_ra, t_ra, t1);
743
- tcg_temp_free(t1);
744
}
745
if (unlikely(Rc(ctx->opcode) != 0)) {
746
gen_set_Rc0(ctx, t_ra);
747
@@ -XXX,XX +XXX,XX @@ static void gen_slw(DisasContext *ctx)
748
t1 = tcg_temp_new();
749
tcg_gen_andi_tl(t1, cpu_gpr[rB(ctx->opcode)], 0x1f);
750
tcg_gen_shl_tl(cpu_gpr[rA(ctx->opcode)], t0, t1);
751
- tcg_temp_free(t1);
752
- tcg_temp_free(t0);
753
tcg_gen_ext32u_tl(cpu_gpr[rA(ctx->opcode)], cpu_gpr[rA(ctx->opcode)]);
754
if (unlikely(Rc(ctx->opcode) != 0)) {
755
gen_set_Rc0(ctx, cpu_gpr[rA(ctx->opcode)]);
756
@@ -XXX,XX +XXX,XX @@ static void gen_srawi(DisasContext *ctx)
757
t0 = tcg_temp_new();
758
tcg_gen_sari_tl(t0, dst, TARGET_LONG_BITS - 1);
759
tcg_gen_and_tl(cpu_ca, cpu_ca, t0);
760
- tcg_temp_free(t0);
761
tcg_gen_setcondi_tl(TCG_COND_NE, cpu_ca, cpu_ca, 0);
762
if (is_isa300(ctx)) {
763
tcg_gen_mov_tl(cpu_ca32, cpu_ca);
764
@@ -XXX,XX +XXX,XX @@ static void gen_srw(DisasContext *ctx)
765
t1 = tcg_temp_new();
766
tcg_gen_andi_tl(t1, cpu_gpr[rB(ctx->opcode)], 0x1f);
767
tcg_gen_shr_tl(cpu_gpr[rA(ctx->opcode)], t0, t1);
768
- tcg_temp_free(t1);
769
- tcg_temp_free(t0);
770
if (unlikely(Rc(ctx->opcode) != 0)) {
771
gen_set_Rc0(ctx, cpu_gpr[rA(ctx->opcode)]);
772
}
773
@@ -XXX,XX +XXX,XX @@ static void gen_sld(DisasContext *ctx)
774
t1 = tcg_temp_new();
775
tcg_gen_andi_tl(t1, cpu_gpr[rB(ctx->opcode)], 0x3f);
776
tcg_gen_shl_tl(cpu_gpr[rA(ctx->opcode)], t0, t1);
777
- tcg_temp_free(t1);
778
- tcg_temp_free(t0);
779
if (unlikely(Rc(ctx->opcode) != 0)) {
780
gen_set_Rc0(ctx, cpu_gpr[rA(ctx->opcode)]);
781
}
782
@@ -XXX,XX +XXX,XX @@ static inline void gen_sradi(DisasContext *ctx, int n)
783
t0 = tcg_temp_new();
784
tcg_gen_sari_tl(t0, src, TARGET_LONG_BITS - 1);
785
tcg_gen_and_tl(cpu_ca, cpu_ca, t0);
786
- tcg_temp_free(t0);
787
tcg_gen_setcondi_tl(TCG_COND_NE, cpu_ca, cpu_ca, 0);
788
if (is_isa300(ctx)) {
789
tcg_gen_mov_tl(cpu_ca32, cpu_ca);
790
@@ -XXX,XX +XXX,XX @@ static void gen_srd(DisasContext *ctx)
791
t1 = tcg_temp_new();
792
tcg_gen_andi_tl(t1, cpu_gpr[rB(ctx->opcode)], 0x3f);
793
tcg_gen_shr_tl(cpu_gpr[rA(ctx->opcode)], t0, t1);
794
- tcg_temp_free(t1);
795
- tcg_temp_free(t0);
796
if (unlikely(Rc(ctx->opcode) != 0)) {
797
gen_set_Rc0(ctx, cpu_gpr[rA(ctx->opcode)]);
798
}
799
@@ -XXX,XX +XXX,XX @@ static void glue(gen_, name##x)(DisasContext *ctx) \
800
EA = tcg_temp_new(); \
801
gen_addr_reg_index(ctx, EA); \
802
gen_qemu_##ldop(ctx, cpu_gpr[rD(ctx->opcode)], EA); \
803
- tcg_temp_free(EA); \
804
}
805
806
#define GEN_LDX(name, ldop, opc2, opc3, type) \
807
@@ -XXX,XX +XXX,XX @@ static void glue(gen_, name##epx)(DisasContext *ctx) \
808
EA = tcg_temp_new(); \
809
gen_addr_reg_index(ctx, EA); \
810
tcg_gen_qemu_ld_tl(cpu_gpr[rD(ctx->opcode)], EA, PPC_TLB_EPID_LOAD, ldop);\
811
- tcg_temp_free(EA); \
812
}
813
814
GEN_LDEPX(lb, DEF_MEMOP(MO_UB), 0x1F, 0x02)
815
@@ -XXX,XX +XXX,XX @@ static void glue(gen_, name##x)(DisasContext *ctx) \
816
EA = tcg_temp_new(); \
817
gen_addr_reg_index(ctx, EA); \
818
gen_qemu_##stop(ctx, cpu_gpr[rS(ctx->opcode)], EA); \
819
- tcg_temp_free(EA); \
820
}
821
#define GEN_STX(name, stop, opc2, opc3, type) \
822
GEN_STX_E(name, stop, opc2, opc3, type, PPC_NONE, CHK_NONE)
823
@@ -XXX,XX +XXX,XX @@ static void glue(gen_, name##epx)(DisasContext *ctx) \
824
gen_addr_reg_index(ctx, EA); \
825
tcg_gen_qemu_st_tl( \
826
cpu_gpr[rD(ctx->opcode)], EA, PPC_TLB_EPID_STORE, stop); \
827
- tcg_temp_free(EA); \
828
}
829
830
GEN_STEPX(stb, DEF_MEMOP(MO_UB), 0x1F, 0x06)
831
@@ -XXX,XX +XXX,XX @@ static void gen_lmw(DisasContext *ctx)
832
t1 = tcg_const_i32(rD(ctx->opcode));
833
gen_addr_imm_index(ctx, t0, 0);
834
gen_helper_lmw(cpu_env, t0, t1);
835
- tcg_temp_free(t0);
836
- tcg_temp_free_i32(t1);
837
}
838
839
/* stmw */
840
@@ -XXX,XX +XXX,XX @@ static void gen_stmw(DisasContext *ctx)
841
t1 = tcg_const_i32(rS(ctx->opcode));
842
gen_addr_imm_index(ctx, t0, 0);
843
gen_helper_stmw(cpu_env, t0, t1);
844
- tcg_temp_free(t0);
845
- tcg_temp_free_i32(t1);
846
}
847
848
/*** Integer load and store strings ***/
849
@@ -XXX,XX +XXX,XX @@ static void gen_lswi(DisasContext *ctx)
850
t1 = tcg_const_i32(nb);
851
t2 = tcg_const_i32(start);
852
gen_helper_lsw(cpu_env, t0, t1, t2);
853
- tcg_temp_free(t0);
854
- tcg_temp_free_i32(t1);
855
- tcg_temp_free_i32(t2);
856
}
857
858
/* lswx */
859
@@ -XXX,XX +XXX,XX @@ static void gen_lswx(DisasContext *ctx)
860
t2 = tcg_const_i32(rA(ctx->opcode));
861
t3 = tcg_const_i32(rB(ctx->opcode));
862
gen_helper_lswx(cpu_env, t0, t1, t2, t3);
863
- tcg_temp_free(t0);
864
- tcg_temp_free_i32(t1);
865
- tcg_temp_free_i32(t2);
866
- tcg_temp_free_i32(t3);
867
}
868
869
/* stswi */
870
@@ -XXX,XX +XXX,XX @@ static void gen_stswi(DisasContext *ctx)
871
t1 = tcg_const_i32(nb);
872
t2 = tcg_const_i32(rS(ctx->opcode));
873
gen_helper_stsw(cpu_env, t0, t1, t2);
874
- tcg_temp_free(t0);
875
- tcg_temp_free_i32(t1);
876
- tcg_temp_free_i32(t2);
877
}
878
879
/* stswx */
880
@@ -XXX,XX +XXX,XX @@ static void gen_stswx(DisasContext *ctx)
881
tcg_gen_andi_i32(t1, t1, 0x7F);
882
t2 = tcg_const_i32(rS(ctx->opcode));
883
gen_helper_stsw(cpu_env, t0, t1, t2);
884
- tcg_temp_free(t0);
885
- tcg_temp_free_i32(t1);
886
- tcg_temp_free_i32(t2);
887
}
888
889
/*** Memory synchronisation ***/
890
@@ -XXX,XX +XXX,XX @@ static inline void gen_check_tlb_flush(DisasContext *ctx, bool global)
891
gen_helper_check_tlb_flush_local(cpu_env);
892
}
893
gen_set_label(l);
894
- tcg_temp_free_i32(t);
895
}
896
#else
897
static inline void gen_check_tlb_flush(DisasContext *ctx, bool global) { }
898
@@ -XXX,XX +XXX,XX @@ static void gen_load_locked(DisasContext *ctx, MemOp memop)
899
tcg_gen_mov_tl(cpu_reserve, t0);
900
tcg_gen_mov_tl(cpu_reserve_val, gpr);
901
tcg_gen_mb(TCG_MO_ALL | TCG_BAR_LDAQ);
902
- tcg_temp_free(t0);
903
}
904
905
#define LARX(name, memop) \
906
@@ -XXX,XX +XXX,XX @@ static void gen_fetch_inc_conditional(DisasContext *ctx, MemOp memop,
907
/* RT = (t != t2 ? t : u = 1<<(s*8-1)) */
908
tcg_gen_movi_tl(u, 1 << (MEMOP_GET_SIZE(memop) * 8 - 1));
909
tcg_gen_movcond_tl(cond, cpu_gpr[rD(ctx->opcode)], t, t2, t, u);
910
-
911
- tcg_temp_free(t);
912
- tcg_temp_free(t2);
913
- tcg_temp_free(u);
914
}
915
916
static void gen_ld_atomic(DisasContext *ctx, MemOp memop)
917
@@ -XXX,XX +XXX,XX @@ static void gen_ld_atomic(DisasContext *ctx, MemOp memop)
918
cpu_gpr[(rt + 2) & 31], t0);
919
tcg_gen_qemu_st_tl(t1, EA, ctx->mem_idx, memop);
920
tcg_gen_mov_tl(dst, t0);
921
-
922
- tcg_temp_free(t0);
923
- tcg_temp_free(t1);
924
}
925
break;
926
927
@@ -XXX,XX +XXX,XX @@ static void gen_ld_atomic(DisasContext *ctx, MemOp memop)
928
/* invoke data storage error handler */
929
gen_exception_err(ctx, POWERPC_EXCP_DSI, POWERPC_EXCP_INVAL);
930
}
931
- tcg_temp_free(EA);
932
933
if (need_serial) {
934
/* Restart with exclusive lock. */
935
@@ -XXX,XX +XXX,XX @@ static void gen_st_atomic(DisasContext *ctx, MemOp memop)
936
tcg_gen_movcond_tl(TCG_COND_EQ, s2, t, t2, src, t2);
937
tcg_gen_qemu_st_tl(s, EA, ctx->mem_idx, memop);
938
tcg_gen_qemu_st_tl(s2, ea_plus_s, ctx->mem_idx, memop);
939
-
940
- tcg_temp_free(ea_plus_s);
941
- tcg_temp_free(s2);
942
- tcg_temp_free(s);
943
- tcg_temp_free(t2);
944
- tcg_temp_free(t);
945
}
946
break;
947
default:
948
/* invoke data storage error handler */
949
gen_exception_err(ctx, POWERPC_EXCP_DSI, POWERPC_EXCP_INVAL);
950
}
951
- tcg_temp_free(discard);
952
- tcg_temp_free(EA);
953
}
954
955
static void gen_stwat(DisasContext *ctx)
956
@@ -XXX,XX +XXX,XX @@ static void gen_conditional_store(DisasContext *ctx, MemOp memop)
957
gen_set_access_type(ctx, ACCESS_RES);
958
gen_addr_reg_index(ctx, t0);
959
tcg_gen_brcond_tl(TCG_COND_NE, t0, cpu_reserve, l1);
960
- tcg_temp_free(t0);
961
962
t0 = tcg_temp_new();
963
tcg_gen_atomic_cmpxchg_tl(t0, cpu_reserve, cpu_reserve_val,
964
@@ -XXX,XX +XXX,XX @@ static void gen_conditional_store(DisasContext *ctx, MemOp memop)
965
tcg_gen_shli_tl(t0, t0, CRF_EQ_BIT);
966
tcg_gen_or_tl(t0, t0, cpu_so);
967
tcg_gen_trunc_tl_i32(cpu_crf[0], t0);
968
- tcg_temp_free(t0);
969
tcg_gen_br(l2);
970
971
gen_set_label(l1);
972
@@ -XXX,XX +XXX,XX @@ static void gen_lqarx(DisasContext *ctx)
973
ctx->mem_idx));
974
gen_helper_lq_be_parallel(lo, cpu_env, EA, oi);
975
}
976
- tcg_temp_free_i32(oi);
977
tcg_gen_ld_i64(hi, cpu_env, offsetof(CPUPPCState, retxh));
978
} else {
979
/* Restart with exclusive lock. */
980
gen_helper_exit_atomic(cpu_env);
981
ctx->base.is_jmp = DISAS_NORETURN;
982
- tcg_temp_free(EA);
983
return;
984
}
985
} else if (ctx->le_mode) {
986
@@ -XXX,XX +XXX,XX @@ static void gen_lqarx(DisasContext *ctx)
987
gen_addr_add(ctx, EA, EA, 8);
988
tcg_gen_qemu_ld_i64(lo, EA, ctx->mem_idx, MO_BEUQ);
989
}
990
- tcg_temp_free(EA);
991
992
tcg_gen_st_tl(hi, cpu_env, offsetof(CPUPPCState, reserve_val));
993
tcg_gen_st_tl(lo, cpu_env, offsetof(CPUPPCState, reserve_val2));
994
@@ -XXX,XX +XXX,XX @@ static void gen_stqcx_(DisasContext *ctx)
995
gen_addr_reg_index(ctx, EA);
996
997
tcg_gen_brcond_tl(TCG_COND_NE, EA, cpu_reserve, lab_fail);
998
- tcg_temp_free(EA);
999
1000
cmp = tcg_temp_new_i128();
1001
val = tcg_temp_new_i128();
1002
@@ -XXX,XX +XXX,XX @@ static void gen_stqcx_(DisasContext *ctx)
1003
1004
tcg_gen_atomic_cmpxchg_i128(val, cpu_reserve, cmp, val, ctx->mem_idx,
1005
DEF_MEMOP(MO_128 | MO_ALIGN));
1006
- tcg_temp_free_i128(cmp);
1007
1008
t0 = tcg_temp_new();
1009
t1 = tcg_temp_new();
1010
tcg_gen_extr_i128_i64(t1, t0, val);
1011
- tcg_temp_free_i128(val);
1012
1013
tcg_gen_xor_tl(t1, t1, cpu_reserve_val2);
1014
tcg_gen_xor_tl(t0, t0, cpu_reserve_val);
1015
tcg_gen_or_tl(t0, t0, t1);
1016
- tcg_temp_free(t1);
1017
1018
tcg_gen_setcondi_tl(TCG_COND_EQ, t0, t0, 0);
1019
tcg_gen_shli_tl(t0, t0, CRF_EQ_BIT);
1020
tcg_gen_or_tl(t0, t0, cpu_so);
1021
tcg_gen_trunc_tl_i32(cpu_crf[0], t0);
1022
- tcg_temp_free(t0);
1023
1024
tcg_gen_br(lab_over);
1025
gen_set_label(lab_fail);
1026
@@ -XXX,XX +XXX,XX @@ static void gen_wait(DisasContext *ctx)
1027
TCGv_i32 t0 = tcg_const_i32(1);
1028
tcg_gen_st_i32(t0, cpu_env,
1029
-offsetof(PowerPCCPU, env) + offsetof(CPUState, halted));
1030
- tcg_temp_free_i32(t0);
1031
/* Stop translation, as the CPU is supposed to sleep from now */
1032
gen_exception_nip(ctx, EXCP_HLT, ctx->base.pc_next);
1033
}
1034
@@ -XXX,XX +XXX,XX @@ static void gen_doze(DisasContext *ctx)
1035
CHK_HV(ctx);
1036
t = tcg_const_i32(PPC_PM_DOZE);
1037
gen_helper_pminsn(cpu_env, t);
1038
- tcg_temp_free_i32(t);
1039
/* Stop translation, as the CPU is supposed to sleep from now */
1040
gen_exception_nip(ctx, EXCP_HLT, ctx->base.pc_next);
1041
#endif /* defined(CONFIG_USER_ONLY) */
1042
@@ -XXX,XX +XXX,XX @@ static void gen_nap(DisasContext *ctx)
1043
CHK_HV(ctx);
1044
t = tcg_const_i32(PPC_PM_NAP);
1045
gen_helper_pminsn(cpu_env, t);
1046
- tcg_temp_free_i32(t);
1047
/* Stop translation, as the CPU is supposed to sleep from now */
1048
gen_exception_nip(ctx, EXCP_HLT, ctx->base.pc_next);
1049
#endif /* defined(CONFIG_USER_ONLY) */
1050
@@ -XXX,XX +XXX,XX @@ static void gen_stop(DisasContext *ctx)
1051
CHK_HV(ctx);
1052
t = tcg_const_i32(PPC_PM_STOP);
1053
gen_helper_pminsn(cpu_env, t);
1054
- tcg_temp_free_i32(t);
1055
/* Stop translation, as the CPU is supposed to sleep from now */
1056
gen_exception_nip(ctx, EXCP_HLT, ctx->base.pc_next);
1057
#endif /* defined(CONFIG_USER_ONLY) */
1058
@@ -XXX,XX +XXX,XX @@ static void gen_sleep(DisasContext *ctx)
1059
CHK_HV(ctx);
1060
t = tcg_const_i32(PPC_PM_SLEEP);
1061
gen_helper_pminsn(cpu_env, t);
1062
- tcg_temp_free_i32(t);
1063
/* Stop translation, as the CPU is supposed to sleep from now */
1064
gen_exception_nip(ctx, EXCP_HLT, ctx->base.pc_next);
1065
#endif /* defined(CONFIG_USER_ONLY) */
1066
@@ -XXX,XX +XXX,XX @@ static void gen_rvwinkle(DisasContext *ctx)
1067
CHK_HV(ctx);
1068
t = tcg_const_i32(PPC_PM_RVWINKLE);
1069
gen_helper_pminsn(cpu_env, t);
1070
- tcg_temp_free_i32(t);
1071
/* Stop translation, as the CPU is supposed to sleep from now */
1072
gen_exception_nip(ctx, EXCP_HLT, ctx->base.pc_next);
1073
#endif /* defined(CONFIG_USER_ONLY) */
1074
@@ -XXX,XX +XXX,XX @@ static void pmu_count_insns(DisasContext *ctx)
1075
}
1076
1077
gen_set_label(l);
1078
- tcg_temp_free(t0);
1079
} else {
1080
gen_helper_insns_inc(cpu_env, tcg_constant_i32(ctx->base.num_insns));
1081
}
1082
@@ -XXX,XX +XXX,XX @@ static void pmu_count_insns(DisasContext *ctx)
1083
gen_load_spr(t0, SPR_POWER_PMC5);
1084
tcg_gen_addi_tl(t0, t0, ctx->base.num_insns);
1085
gen_store_spr(SPR_POWER_PMC5, t0);
1086
-
1087
- tcg_temp_free(t0);
1088
#endif /* #if !defined(CONFIG_USER_ONLY) */
1089
}
1090
#else
1091
@@ -XXX,XX +XXX,XX @@ static void gen_bcond(DisasContext *ctx, int type)
1092
*/
1093
if (unlikely(!is_book3s_arch2x(ctx))) {
1094
gen_inval_exception(ctx, POWERPC_EXCP_INVAL_INVAL);
1095
- tcg_temp_free(temp);
1096
- tcg_temp_free(target);
1097
return;
1098
}
1099
1100
@@ -XXX,XX +XXX,XX @@ static void gen_bcond(DisasContext *ctx, int type)
1101
tcg_gen_brcondi_tl(TCG_COND_EQ, temp, 0, l1);
1102
}
1103
}
1104
- tcg_temp_free(temp);
1105
}
1106
if ((bo & 0x10) == 0) {
1107
/* Test CR */
1108
@@ -XXX,XX +XXX,XX @@ static void gen_bcond(DisasContext *ctx, int type)
1109
tcg_gen_andi_i32(temp, cpu_crf[bi >> 2], mask);
1110
tcg_gen_brcondi_i32(TCG_COND_NE, temp, 0, l1);
1111
}
1112
- tcg_temp_free_i32(temp);
1113
}
1114
gen_update_cfar(ctx, ctx->cia);
1115
if (type == BCOND_IM) {
1116
@@ -XXX,XX +XXX,XX @@ static void gen_bcond(DisasContext *ctx, int type)
1117
tcg_gen_andi_tl(cpu_nip, target, ~3);
1118
}
1119
gen_lookup_and_goto_ptr(ctx);
1120
- tcg_temp_free(target);
1121
}
1122
if ((bo & 0x14) != 0x14) {
1123
/* fallthrough case */
1124
@@ -XXX,XX +XXX,XX @@ static void glue(gen_, name)(DisasContext *ctx) \
1125
tcg_gen_andi_i32(t0, t0, bitmask); \
1126
tcg_gen_andi_i32(t1, cpu_crf[crbD(ctx->opcode) >> 2], ~bitmask); \
1127
tcg_gen_or_i32(cpu_crf[crbD(ctx->opcode) >> 2], t0, t1); \
1128
- tcg_temp_free_i32(t0); \
1129
- tcg_temp_free_i32(t1); \
1130
}
1131
1132
/* crand */
1133
@@ -XXX,XX +XXX,XX @@ static void gen_tw(DisasContext *ctx)
1134
t0 = tcg_const_i32(TO(ctx->opcode));
1135
gen_helper_tw(cpu_env, cpu_gpr[rA(ctx->opcode)], cpu_gpr[rB(ctx->opcode)],
1136
t0);
1137
- tcg_temp_free_i32(t0);
1138
}
1139
1140
/* twi */
1141
@@ -XXX,XX +XXX,XX @@ static void gen_twi(DisasContext *ctx)
1142
t0 = tcg_const_tl(SIMM(ctx->opcode));
1143
t1 = tcg_const_i32(TO(ctx->opcode));
1144
gen_helper_tw(cpu_env, cpu_gpr[rA(ctx->opcode)], t0, t1);
1145
- tcg_temp_free(t0);
1146
- tcg_temp_free_i32(t1);
1147
}
1148
1149
#if defined(TARGET_PPC64)
1150
@@ -XXX,XX +XXX,XX @@ static void gen_td(DisasContext *ctx)
1151
t0 = tcg_const_i32(TO(ctx->opcode));
1152
gen_helper_td(cpu_env, cpu_gpr[rA(ctx->opcode)], cpu_gpr[rB(ctx->opcode)],
1153
t0);
1154
- tcg_temp_free_i32(t0);
1155
}
1156
1157
/* tdi */
1158
@@ -XXX,XX +XXX,XX @@ static void gen_tdi(DisasContext *ctx)
1159
t0 = tcg_const_tl(SIMM(ctx->opcode));
1160
t1 = tcg_const_i32(TO(ctx->opcode));
1161
gen_helper_td(cpu_env, cpu_gpr[rA(ctx->opcode)], t0, t1);
1162
- tcg_temp_free(t0);
1163
- tcg_temp_free_i32(t1);
1164
}
1165
#endif
1166
1167
@@ -XXX,XX +XXX,XX @@ static void gen_mcrxr(DisasContext *ctx)
1168
tcg_gen_shli_i32(dst, dst, 1);
1169
tcg_gen_or_i32(dst, dst, t0);
1170
tcg_gen_or_i32(dst, dst, t1);
1171
- tcg_temp_free_i32(t0);
1172
- tcg_temp_free_i32(t1);
1173
1174
tcg_gen_movi_tl(cpu_so, 0);
1175
tcg_gen_movi_tl(cpu_ov, 0);
1176
@@ -XXX,XX +XXX,XX @@ static void gen_mcrxrx(DisasContext *ctx)
1177
tcg_gen_or_tl(t1, t1, cpu_ca32);
1178
tcg_gen_or_tl(t0, t0, t1);
1179
tcg_gen_trunc_tl_i32(dst, t0);
1180
- tcg_temp_free(t0);
1181
- tcg_temp_free(t1);
1182
}
1183
#endif
1184
1185
@@ -XXX,XX +XXX,XX @@ static void gen_mfcr(DisasContext *ctx)
1186
tcg_gen_shli_i32(t0, t0, 4);
1187
tcg_gen_or_i32(t0, t0, cpu_crf[7]);
1188
tcg_gen_extu_i32_tl(cpu_gpr[rD(ctx->opcode)], t0);
1189
- tcg_temp_free_i32(t0);
1190
}
1191
}
1192
1193
@@ -XXX,XX +XXX,XX @@ static void gen_mtcrf(DisasContext *ctx)
1194
tcg_gen_trunc_tl_i32(temp, cpu_gpr[rS(ctx->opcode)]);
1195
tcg_gen_shri_i32(temp, temp, crn * 4);
1196
tcg_gen_andi_i32(cpu_crf[7 - crn], temp, 0xf);
1197
- tcg_temp_free_i32(temp);
1198
}
1199
} else {
1200
TCGv_i32 temp = tcg_temp_new_i32();
1201
@@ -XXX,XX +XXX,XX @@ static void gen_mtcrf(DisasContext *ctx)
1202
tcg_gen_andi_i32(cpu_crf[7 - crn], cpu_crf[7 - crn], 0xf);
1203
}
1204
}
1205
- tcg_temp_free_i32(temp);
1206
}
1207
}
1208
1209
@@ -XXX,XX +XXX,XX @@ static void gen_mtmsrd(DisasContext *ctx)
1210
1211
/* Must stop the translation as machine state (may have) changed */
1212
ctx->base.is_jmp = DISAS_EXIT_UPDATE;
1213
-
1214
- tcg_temp_free(t0);
1215
- tcg_temp_free(t1);
1216
#endif /* !defined(CONFIG_USER_ONLY) */
1217
}
1218
#endif /* defined(TARGET_PPC64) */
1219
@@ -XXX,XX +XXX,XX @@ static void gen_mtmsr(DisasContext *ctx)
1220
1221
/* Must stop the translation as machine state (may have) changed */
1222
ctx->base.is_jmp = DISAS_EXIT_UPDATE;
1223
-
1224
- tcg_temp_free(t0);
1225
- tcg_temp_free(t1);
1226
#endif
1227
}
1228
1229
@@ -XXX,XX +XXX,XX @@ static void gen_setb(DisasContext *ctx)
1230
tcg_gen_setcondi_i32(TCG_COND_GEU, t0, cpu_crf[crf], 4);
1231
tcg_gen_movcond_i32(TCG_COND_GEU, t0, cpu_crf[crf], t8, tm1, t0);
1232
tcg_gen_ext_i32_tl(cpu_gpr[rD(ctx->opcode)], t0);
1233
-
1234
- tcg_temp_free_i32(t0);
1235
}
1236
#endif
1237
1238
@@ -XXX,XX +XXX,XX @@ static void gen_dcbf(DisasContext *ctx)
1239
t0 = tcg_temp_new();
1240
gen_addr_reg_index(ctx, t0);
1241
gen_qemu_ld8u(ctx, t0, t0);
1242
- tcg_temp_free(t0);
1243
}
1244
1245
/* dcbfep (external PID dcbf) */
1246
@@ -XXX,XX +XXX,XX @@ static void gen_dcbfep(DisasContext *ctx)
1247
t0 = tcg_temp_new();
1248
gen_addr_reg_index(ctx, t0);
1249
tcg_gen_qemu_ld_tl(t0, t0, PPC_TLB_EPID_LOAD, DEF_MEMOP(MO_UB));
1250
- tcg_temp_free(t0);
1251
}
1252
1253
/* dcbi (Supervisor only) */
1254
@@ -XXX,XX +XXX,XX @@ static void gen_dcbi(DisasContext *ctx)
1255
/* XXX: specification says this should be treated as a store by the MMU */
1256
gen_qemu_ld8u(ctx, val, EA);
1257
gen_qemu_st8(ctx, val, EA);
1258
- tcg_temp_free(val);
1259
- tcg_temp_free(EA);
1260
#endif /* defined(CONFIG_USER_ONLY) */
1261
}
1262
1263
@@ -XXX,XX +XXX,XX @@ static void gen_dcbst(DisasContext *ctx)
1264
t0 = tcg_temp_new();
1265
gen_addr_reg_index(ctx, t0);
1266
gen_qemu_ld8u(ctx, t0, t0);
1267
- tcg_temp_free(t0);
1268
}
1269
1270
/* dcbstep (dcbstep External PID version) */
1271
@@ -XXX,XX +XXX,XX @@ static void gen_dcbstep(DisasContext *ctx)
1272
t0 = tcg_temp_new();
1273
gen_addr_reg_index(ctx, t0);
1274
tcg_gen_qemu_ld_tl(t0, t0, PPC_TLB_EPID_LOAD, DEF_MEMOP(MO_UB));
1275
- tcg_temp_free(t0);
1276
}
1277
1278
/* dcbt */
1279
@@ -XXX,XX +XXX,XX @@ static void gen_dcbtls(DisasContext *ctx)
1280
gen_load_spr(t0, SPR_Exxx_L1CSR0);
1281
tcg_gen_ori_tl(t0, t0, L1CSR0_CUL);
1282
gen_store_spr(SPR_Exxx_L1CSR0, t0);
1283
- tcg_temp_free(t0);
1284
}
1285
1286
/* dcblc */
1287
@@ -XXX,XX +XXX,XX @@ static void gen_dcbz(DisasContext *ctx)
1288
tcgv_op = tcg_const_i32(ctx->opcode & 0x03FF000);
1289
gen_addr_reg_index(ctx, tcgv_addr);
1290
gen_helper_dcbz(cpu_env, tcgv_addr, tcgv_op);
1291
- tcg_temp_free(tcgv_addr);
1292
- tcg_temp_free_i32(tcgv_op);
1293
}
1294
1295
/* dcbzep */
1296
@@ -XXX,XX +XXX,XX @@ static void gen_dcbzep(DisasContext *ctx)
1297
tcgv_op = tcg_const_i32(ctx->opcode & 0x03FF000);
1298
gen_addr_reg_index(ctx, tcgv_addr);
1299
gen_helper_dcbzep(cpu_env, tcgv_addr, tcgv_op);
1300
- tcg_temp_free(tcgv_addr);
1301
- tcg_temp_free_i32(tcgv_op);
1302
}
1303
1304
/* dst / dstt */
1305
@@ -XXX,XX +XXX,XX @@ static void gen_icbi(DisasContext *ctx)
1306
t0 = tcg_temp_new();
1307
gen_addr_reg_index(ctx, t0);
1308
gen_helper_icbi(cpu_env, t0);
1309
- tcg_temp_free(t0);
1310
}
1311
1312
/* icbiep */
1313
@@ -XXX,XX +XXX,XX @@ static void gen_icbiep(DisasContext *ctx)
1314
t0 = tcg_temp_new();
1315
gen_addr_reg_index(ctx, t0);
1316
gen_helper_icbiep(cpu_env, t0);
1317
- tcg_temp_free(t0);
1318
}
1319
1320
/* Optional: */
1321
@@ -XXX,XX +XXX,XX @@ static void gen_mfsr(DisasContext *ctx)
1322
CHK_SV(ctx);
1323
t0 = tcg_const_tl(SR(ctx->opcode));
1324
gen_helper_load_sr(cpu_gpr[rD(ctx->opcode)], cpu_env, t0);
1325
- tcg_temp_free(t0);
1326
#endif /* defined(CONFIG_USER_ONLY) */
1327
}
1328
1329
@@ -XXX,XX +XXX,XX @@ static void gen_mfsrin(DisasContext *ctx)
1330
t0 = tcg_temp_new();
1331
tcg_gen_extract_tl(t0, cpu_gpr[rB(ctx->opcode)], 28, 4);
1332
gen_helper_load_sr(cpu_gpr[rD(ctx->opcode)], cpu_env, t0);
1333
- tcg_temp_free(t0);
1334
#endif /* defined(CONFIG_USER_ONLY) */
1335
}
1336
1337
@@ -XXX,XX +XXX,XX @@ static void gen_mtsr(DisasContext *ctx)
1338
CHK_SV(ctx);
1339
t0 = tcg_const_tl(SR(ctx->opcode));
1340
gen_helper_store_sr(cpu_env, t0, cpu_gpr[rS(ctx->opcode)]);
1341
- tcg_temp_free(t0);
1342
#endif /* defined(CONFIG_USER_ONLY) */
1343
}
1344
1345
@@ -XXX,XX +XXX,XX @@ static void gen_mtsrin(DisasContext *ctx)
1346
t0 = tcg_temp_new();
1347
tcg_gen_extract_tl(t0, cpu_gpr[rB(ctx->opcode)], 28, 4);
1348
gen_helper_store_sr(cpu_env, t0, cpu_gpr[rD(ctx->opcode)]);
1349
- tcg_temp_free(t0);
1350
#endif /* defined(CONFIG_USER_ONLY) */
1351
}
1352
1353
@@ -XXX,XX +XXX,XX @@ static void gen_mfsr_64b(DisasContext *ctx)
1354
CHK_SV(ctx);
1355
t0 = tcg_const_tl(SR(ctx->opcode));
1356
gen_helper_load_sr(cpu_gpr[rD(ctx->opcode)], cpu_env, t0);
1357
- tcg_temp_free(t0);
1358
#endif /* defined(CONFIG_USER_ONLY) */
1359
}
1360
1361
@@ -XXX,XX +XXX,XX @@ static void gen_mfsrin_64b(DisasContext *ctx)
1362
t0 = tcg_temp_new();
1363
tcg_gen_extract_tl(t0, cpu_gpr[rB(ctx->opcode)], 28, 4);
1364
gen_helper_load_sr(cpu_gpr[rD(ctx->opcode)], cpu_env, t0);
1365
- tcg_temp_free(t0);
1366
#endif /* defined(CONFIG_USER_ONLY) */
1367
}
1368
1369
@@ -XXX,XX +XXX,XX @@ static void gen_mtsr_64b(DisasContext *ctx)
1370
CHK_SV(ctx);
1371
t0 = tcg_const_tl(SR(ctx->opcode));
1372
gen_helper_store_sr(cpu_env, t0, cpu_gpr[rS(ctx->opcode)]);
1373
- tcg_temp_free(t0);
1374
#endif /* defined(CONFIG_USER_ONLY) */
1375
}
1376
1377
@@ -XXX,XX +XXX,XX @@ static void gen_mtsrin_64b(DisasContext *ctx)
1378
t0 = tcg_temp_new();
1379
tcg_gen_extract_tl(t0, cpu_gpr[rB(ctx->opcode)], 28, 4);
1380
gen_helper_store_sr(cpu_env, t0, cpu_gpr[rS(ctx->opcode)]);
1381
- tcg_temp_free(t0);
1382
#endif /* defined(CONFIG_USER_ONLY) */
1383
}
1384
1385
@@ -XXX,XX +XXX,XX @@ static void gen_eciwx(DisasContext *ctx)
1386
gen_addr_reg_index(ctx, t0);
1387
tcg_gen_qemu_ld_tl(cpu_gpr[rD(ctx->opcode)], t0, ctx->mem_idx,
1388
DEF_MEMOP(MO_UL | MO_ALIGN));
1389
- tcg_temp_free(t0);
1390
}
1391
1392
/* ecowx */
1393
@@ -XXX,XX +XXX,XX @@ static void gen_ecowx(DisasContext *ctx)
1394
gen_addr_reg_index(ctx, t0);
1395
tcg_gen_qemu_st_tl(cpu_gpr[rD(ctx->opcode)], t0, ctx->mem_idx,
1396
DEF_MEMOP(MO_UL | MO_ALIGN));
1397
- tcg_temp_free(t0);
1398
}
1399
1400
/* 602 - 603 - G2 TLB management */
1401
@@ -XXX,XX +XXX,XX @@ static void gen_tlbiva(DisasContext *ctx)
1402
t0 = tcg_temp_new();
1403
gen_addr_reg_index(ctx, t0);
1404
gen_helper_tlbiva(cpu_env, cpu_gpr[rB(ctx->opcode)]);
1405
- tcg_temp_free(t0);
1406
#endif /* defined(CONFIG_USER_ONLY) */
1407
}
1408
1409
@@ -XXX,XX +XXX,XX @@ static inline void gen_405_mulladd_insn(DisasContext *ctx, int opc2, int opc3,
1410
} else {
1411
tcg_gen_mul_tl(cpu_gpr[rt], t0, t1);
1412
}
1413
- tcg_temp_free(t0);
1414
- tcg_temp_free(t1);
1415
if (unlikely(Rc) != 0) {
1416
/* Update Rc0 */
1417
gen_set_Rc0(ctx, cpu_gpr[rt]);
1418
@@ -XXX,XX +XXX,XX @@ static void gen_mfdcr(DisasContext *ctx)
1419
CHK_SV(ctx);
1420
dcrn = tcg_const_tl(SPR(ctx->opcode));
1421
gen_helper_load_dcr(cpu_gpr[rD(ctx->opcode)], cpu_env, dcrn);
1422
- tcg_temp_free(dcrn);
1423
#endif /* defined(CONFIG_USER_ONLY) */
1424
}
1425
1426
@@ -XXX,XX +XXX,XX @@ static void gen_mtdcr(DisasContext *ctx)
1427
CHK_SV(ctx);
1428
dcrn = tcg_const_tl(SPR(ctx->opcode));
1429
gen_helper_store_dcr(cpu_env, dcrn, cpu_gpr[rS(ctx->opcode)]);
1430
- tcg_temp_free(dcrn);
1431
#endif /* defined(CONFIG_USER_ONLY) */
1432
}
1433
1434
@@ -XXX,XX +XXX,XX @@ static void gen_dcread(DisasContext *ctx)
1435
gen_addr_reg_index(ctx, EA);
1436
val = tcg_temp_new();
1437
gen_qemu_ld32u(ctx, val, EA);
1438
- tcg_temp_free(val);
1439
tcg_gen_mov_tl(cpu_gpr[rD(ctx->opcode)], EA);
1440
- tcg_temp_free(EA);
1441
#endif /* defined(CONFIG_USER_ONLY) */
1442
}
1443
1444
@@ -XXX,XX +XXX,XX @@ static void gen_tlbsx_40x(DisasContext *ctx)
1445
t0 = tcg_temp_new();
1446
gen_addr_reg_index(ctx, t0);
1447
gen_helper_4xx_tlbsx(cpu_gpr[rD(ctx->opcode)], cpu_env, t0);
1448
- tcg_temp_free(t0);
1449
if (Rc(ctx->opcode)) {
1450
TCGLabel *l1 = gen_new_label();
1451
tcg_gen_trunc_tl_i32(cpu_crf[0], cpu_so);
1452
@@ -XXX,XX +XXX,XX @@ static void gen_tlbre_440(DisasContext *ctx)
1453
TCGv_i32 t0 = tcg_const_i32(rB(ctx->opcode));
1454
gen_helper_440_tlbre(cpu_gpr[rD(ctx->opcode)], cpu_env,
1455
t0, cpu_gpr[rA(ctx->opcode)]);
1456
- tcg_temp_free_i32(t0);
1457
}
1458
break;
1459
default:
1460
@@ -XXX,XX +XXX,XX @@ static void gen_tlbsx_440(DisasContext *ctx)
1461
t0 = tcg_temp_new();
1462
gen_addr_reg_index(ctx, t0);
1463
gen_helper_440_tlbsx(cpu_gpr[rD(ctx->opcode)], cpu_env, t0);
1464
- tcg_temp_free(t0);
1465
if (Rc(ctx->opcode)) {
1466
TCGLabel *l1 = gen_new_label();
1467
tcg_gen_trunc_tl_i32(cpu_crf[0], cpu_so);
1468
@@ -XXX,XX +XXX,XX @@ static void gen_tlbwe_440(DisasContext *ctx)
1469
TCGv_i32 t0 = tcg_const_i32(rB(ctx->opcode));
1470
gen_helper_440_tlbwe(cpu_env, t0, cpu_gpr[rA(ctx->opcode)],
1471
cpu_gpr[rS(ctx->opcode)]);
1472
- tcg_temp_free_i32(t0);
1473
}
1474
break;
1475
default:
1476
@@ -XXX,XX +XXX,XX @@ static void gen_tlbsx_booke206(DisasContext *ctx)
1477
1478
tcg_gen_add_tl(t0, t0, cpu_gpr[rB(ctx->opcode)]);
1479
gen_helper_booke206_tlbsx(cpu_env, t0);
1480
- tcg_temp_free(t0);
1481
#endif /* defined(CONFIG_USER_ONLY) */
1482
}
1483
1484
@@ -XXX,XX +XXX,XX @@ static void gen_tlbivax_booke206(DisasContext *ctx)
1485
t0 = tcg_temp_new();
1486
gen_addr_reg_index(ctx, t0);
1487
gen_helper_booke206_tlbivax(cpu_env, t0);
1488
- tcg_temp_free(t0);
1489
#endif /* defined(CONFIG_USER_ONLY) */
1490
}
1491
1492
@@ -XXX,XX +XXX,XX @@ static void gen_tlbilx_booke206(DisasContext *ctx)
1493
gen_inval_exception(ctx, POWERPC_EXCP_INVAL_INVAL);
1494
break;
1495
}
1496
-
1497
- tcg_temp_free(t0);
1498
#endif /* defined(CONFIG_USER_ONLY) */
1499
}
1500
1501
@@ -XXX,XX +XXX,XX @@ static void gen_wrtee(DisasContext *ctx)
1502
tcg_gen_andi_tl(cpu_msr, cpu_msr, ~(1 << MSR_EE));
1503
tcg_gen_or_tl(cpu_msr, cpu_msr, t0);
1504
gen_ppc_maybe_interrupt(ctx);
1505
- tcg_temp_free(t0);
1506
/*
1507
* Stop translation to have a chance to raise an exception if we
1508
* just set msr_ee to 1
1509
@@ -XXX,XX +XXX,XX @@ static void gen_dlmzb(DisasContext *ctx)
1510
TCGv_i32 t0 = tcg_const_i32(Rc(ctx->opcode));
1511
gen_helper_dlmzb(cpu_gpr[rA(ctx->opcode)], cpu_env,
1512
cpu_gpr[rS(ctx->opcode)], cpu_gpr[rB(ctx->opcode)], t0);
1513
- tcg_temp_free_i32(t0);
1514
}
1515
1516
/* mbar replaces eieio on 440 */
1517
@@ -XXX,XX +XXX,XX @@ static void gen_maddld(DisasContext *ctx)
1518
1519
tcg_gen_mul_i64(t1, cpu_gpr[rA(ctx->opcode)], cpu_gpr[rB(ctx->opcode)]);
1520
tcg_gen_add_i64(cpu_gpr[rD(ctx->opcode)], t1, cpu_gpr[rC(ctx->opcode)]);
1521
- tcg_temp_free_i64(t1);
1522
}
1523
1524
/* maddhd maddhdu */
1525
@@ -XXX,XX +XXX,XX @@ static void gen_maddhd_maddhdu(DisasContext *ctx)
1526
}
1527
tcg_gen_add2_i64(t1, cpu_gpr[rD(ctx->opcode)], lo, hi,
1528
cpu_gpr[rC(ctx->opcode)], t1);
1529
- tcg_temp_free_i64(lo);
1530
- tcg_temp_free_i64(hi);
1531
- tcg_temp_free_i64(t1);
1532
}
1533
#endif /* defined(TARGET_PPC64) */
1534
1535
@@ -XXX,XX +XXX,XX @@ static void gen_brh(DisasContext *ctx)
1536
tcg_gen_and_i64(t1, cpu_gpr[rS(ctx->opcode)], mask);
1537
tcg_gen_shli_i64(t1, t1, 8);
1538
tcg_gen_or_i64(cpu_gpr[rA(ctx->opcode)], t1, t2);
1539
-
1540
- tcg_temp_free_i64(t1);
1541
- tcg_temp_free_i64(t2);
1542
}
1543
#endif
1544
1545
diff --git a/target/ppc/power8-pmu-regs.c.inc b/target/ppc/power8-pmu-regs.c.inc
1546
index XXXXXXX..XXXXXXX 100644
1547
--- a/target/ppc/power8-pmu-regs.c.inc
1548
+++ b/target/ppc/power8-pmu-regs.c.inc
1549
@@ -XXX,XX +XXX,XX @@ static bool spr_groupA_write_allowed(DisasContext *ctx)
1550
/*
1551
* Helper function to avoid code repetition between MMCR0 and
1552
* MMCR2 problem state write functions.
1553
- *
1554
- * 'ret' must be tcg_temp_freed() by the caller.
1555
*/
1556
static TCGv masked_gprn_for_spr_write(int gprn, int sprn,
1557
uint64_t spr_mask)
1558
@@ -XXX,XX +XXX,XX @@ static TCGv masked_gprn_for_spr_write(int gprn, int sprn,
1559
/* Add the masked gprn bits into 'ret' */
1560
tcg_gen_or_tl(ret, ret, t0);
1561
1562
- tcg_temp_free(t0);
1563
-
1564
return ret;
1565
}
1566
1567
@@ -XXX,XX +XXX,XX @@ void spr_read_MMCR0_ureg(DisasContext *ctx, int gprn, int sprn)
1568
gen_load_spr(t0, SPR_POWER_MMCR0);
1569
tcg_gen_andi_tl(t0, t0, MMCR0_UREG_MASK);
1570
tcg_gen_mov_tl(cpu_gpr[gprn], t0);
1571
-
1572
- tcg_temp_free(t0);
1573
}
1574
1575
static void write_MMCR0_common(DisasContext *ctx, TCGv val)
1576
@@ -XXX,XX +XXX,XX @@ void spr_write_MMCR0_ureg(DisasContext *ctx, int sprn, int gprn)
1577
masked_gprn = masked_gprn_for_spr_write(gprn, SPR_POWER_MMCR0,
1578
MMCR0_UREG_MASK);
1579
write_MMCR0_common(ctx, masked_gprn);
1580
-
1581
- tcg_temp_free(masked_gprn);
1582
}
1583
1584
void spr_read_MMCR2_ureg(DisasContext *ctx, int gprn, int sprn)
1585
@@ -XXX,XX +XXX,XX @@ void spr_read_MMCR2_ureg(DisasContext *ctx, int gprn, int sprn)
1586
gen_load_spr(t0, SPR_POWER_MMCR2);
1587
tcg_gen_andi_tl(t0, t0, MMCR2_UREG_MASK);
1588
tcg_gen_mov_tl(cpu_gpr[gprn], t0);
1589
-
1590
- tcg_temp_free(t0);
1591
}
1592
1593
void spr_write_MMCR2_ureg(DisasContext *ctx, int sprn, int gprn)
1594
@@ -XXX,XX +XXX,XX @@ void spr_write_MMCR2_ureg(DisasContext *ctx, int sprn, int gprn)
1595
masked_gprn = masked_gprn_for_spr_write(gprn, SPR_POWER_MMCR2,
1596
MMCR2_UREG_MASK);
1597
gen_store_spr(SPR_POWER_MMCR2, masked_gprn);
1598
-
1599
- tcg_temp_free(masked_gprn);
1600
}
1601
1602
void spr_read_PMC(DisasContext *ctx, int gprn, int sprn)
1603
@@ -XXX,XX +XXX,XX @@ void spr_read_PMC(DisasContext *ctx, int gprn, int sprn)
1604
1605
gen_icount_io_start(ctx);
1606
gen_helper_read_pmc(cpu_gpr[gprn], cpu_env, t_sprn);
1607
-
1608
- tcg_temp_free_i32(t_sprn);
1609
}
1610
1611
void spr_read_PMC14_ureg(DisasContext *ctx, int gprn, int sprn)
1612
@@ -XXX,XX +XXX,XX @@ void spr_write_PMC(DisasContext *ctx, int sprn, int gprn)
1613
1614
gen_icount_io_start(ctx);
1615
gen_helper_store_pmc(cpu_env, t_sprn, cpu_gpr[gprn]);
1616
-
1617
- tcg_temp_free_i32(t_sprn);
1618
}
1619
1620
void spr_write_PMC14_ureg(DisasContext *ctx, int sprn, int gprn)
1621
diff --git a/target/ppc/translate/dfp-impl.c.inc b/target/ppc/translate/dfp-impl.c.inc
1622
index XXXXXXX..XXXXXXX 100644
1623
--- a/target/ppc/translate/dfp-impl.c.inc
1624
+++ b/target/ppc/translate/dfp-impl.c.inc
1625
@@ -XXX,XX +XXX,XX @@ static bool trans_##NAME(DisasContext *ctx, arg_##NAME *a) \
1626
if (unlikely(a->rc)) { \
1627
gen_set_cr1_from_fpscr(ctx); \
1628
} \
1629
- tcg_temp_free_ptr(rt); \
1630
- tcg_temp_free_ptr(ra); \
1631
- tcg_temp_free_ptr(rb); \
1632
return true; \
1633
}
1634
1635
@@ -XXX,XX +XXX,XX @@ static bool trans_##NAME(DisasContext *ctx, arg_##NAME *a) \
1636
rb = gen_fprp_ptr(a->rb); \
1637
gen_helper_##NAME(cpu_crf[a->bf], \
1638
cpu_env, ra, rb); \
1639
- tcg_temp_free_ptr(ra); \
1640
- tcg_temp_free_ptr(rb); \
1641
return true; \
1642
}
1643
1644
@@ -XXX,XX +XXX,XX @@ static bool trans_##NAME(DisasContext *ctx, arg_##NAME *a) \
1645
rb = gen_fprp_ptr(a->rb); \
1646
gen_helper_##NAME(cpu_crf[a->bf], \
1647
cpu_env, tcg_constant_i32(a->uim), rb);\
1648
- tcg_temp_free_ptr(rb); \
1649
return true; \
1650
}
1651
1652
@@ -XXX,XX +XXX,XX @@ static bool trans_##NAME(DisasContext *ctx, arg_##NAME *a) \
1653
ra = gen_fprp_ptr(a->fra); \
1654
gen_helper_##NAME(cpu_crf[a->bf], \
1655
cpu_env, ra, tcg_constant_i32(a->dm)); \
1656
- tcg_temp_free_ptr(ra); \
1657
return true; \
1658
}
1659
1660
@@ -XXX,XX +XXX,XX @@ static bool trans_##NAME(DisasContext *ctx, arg_##NAME *a) \
1661
if (unlikely(a->rc)) { \
1662
gen_set_cr1_from_fpscr(ctx); \
1663
} \
1664
- tcg_temp_free_ptr(rt); \
1665
- tcg_temp_free_ptr(rb); \
1666
return true; \
1667
}
1668
1669
@@ -XXX,XX +XXX,XX @@ static bool trans_##NAME(DisasContext *ctx, arg_##NAME *a) \
1670
if (unlikely(a->rc)) { \
1671
gen_set_cr1_from_fpscr(ctx); \
1672
} \
1673
- tcg_temp_free_ptr(rt); \
1674
- tcg_temp_free_ptr(ra); \
1675
- tcg_temp_free_ptr(rb); \
1676
return true; \
1677
}
1678
1679
@@ -XXX,XX +XXX,XX @@ static bool trans_##NAME(DisasContext *ctx, arg_##NAME *a) \
1680
if (unlikely(a->rc)) { \
1681
gen_set_cr1_from_fpscr(ctx); \
1682
} \
1683
- tcg_temp_free_ptr(rt); \
1684
- tcg_temp_free_ptr(rb); \
1685
return true; \
1686
}
1687
1688
@@ -XXX,XX +XXX,XX @@ static bool trans_##NAME(DisasContext *ctx, arg_##NAME *a) \
1689
if (unlikely(a->rc)) { \
1690
gen_set_cr1_from_fpscr(ctx); \
1691
} \
1692
- tcg_temp_free_ptr(rt); \
1693
- tcg_temp_free_ptr(rx); \
1694
return true; \
1695
}
1696
1697
@@ -XXX,XX +XXX,XX @@ static bool trans_DCFFIXQQ(DisasContext *ctx, arg_DCFFIXQQ *a)
1698
rt = gen_fprp_ptr(a->frtp);
1699
rb = gen_avr_ptr(a->vrb);
1700
gen_helper_DCFFIXQQ(cpu_env, rt, rb);
1701
- tcg_temp_free_ptr(rt);
1702
- tcg_temp_free_ptr(rb);
1703
1704
return true;
1705
}
1706
@@ -XXX,XX +XXX,XX @@ static bool trans_DCTFIXQQ(DisasContext *ctx, arg_DCTFIXQQ *a)
1707
rt = gen_avr_ptr(a->vrt);
1708
rb = gen_fprp_ptr(a->frbp);
1709
gen_helper_DCTFIXQQ(cpu_env, rt, rb);
1710
- tcg_temp_free_ptr(rt);
1711
- tcg_temp_free_ptr(rb);
1712
1713
return true;
1714
}
1715
diff --git a/target/ppc/translate/fixedpoint-impl.c.inc b/target/ppc/translate/fixedpoint-impl.c.inc
1716
index XXXXXXX..XXXXXXX 100644
1717
--- a/target/ppc/translate/fixedpoint-impl.c.inc
1718
+++ b/target/ppc/translate/fixedpoint-impl.c.inc
1719
@@ -XXX,XX +XXX,XX @@ static bool do_ldst(DisasContext *ctx, int rt, int ra, TCGv displ, bool update,
1720
if (update) {
1721
tcg_gen_mov_tl(cpu_gpr[ra], ea);
1722
}
1723
- tcg_temp_free(ea);
1724
-
1725
return true;
1726
}
1727
1728
@@ -XXX,XX +XXX,XX @@ static bool do_ldst_quad(DisasContext *ctx, arg_D *a, bool store, bool prefixed)
1729
tcg_gen_qemu_ld_i64(high_addr_gpr, ea, ctx->mem_idx, mop);
1730
}
1731
}
1732
- tcg_temp_free(ea);
1733
#else
1734
qemu_build_not_reached();
1735
#endif
1736
@@ -XXX,XX +XXX,XX @@ static bool do_set_bool_cond(DisasContext *ctx, arg_X_bi *a, bool neg, bool rev)
1737
if (neg) {
1738
tcg_gen_neg_tl(cpu_gpr[a->rt], cpu_gpr[a->rt]);
1739
}
1740
- tcg_temp_free(temp);
1741
-
1742
return true;
1743
}
1744
1745
@@ -XXX,XX +XXX,XX @@ static void do_cntzdm(TCGv_i64 dst, TCGv_i64 src, TCGv_i64 mask, int64_t trail)
1746
}
1747
1748
tcg_gen_ctpop_i64(dst, t0);
1749
-
1750
- tcg_temp_free_i64(t0);
1751
- tcg_temp_free_i64(t1);
1752
}
1753
1754
static bool trans_CNTLZDM(DisasContext *ctx, arg_X *a)
1755
@@ -XXX,XX +XXX,XX @@ static bool trans_ADDG6S(DisasContext *ctx, arg_X *a)
1756
1757
tcg_gen_xori_tl(carry, carry, (target_long)carry_bits);
1758
tcg_gen_muli_tl(cpu_gpr[a->rt], carry, 6);
1759
-
1760
- tcg_temp_free(t0);
1761
- tcg_temp_free(t1);
1762
- tcg_temp_free(carry);
1763
-
1764
return true;
1765
}
1766
1767
@@ -XXX,XX +XXX,XX @@ static bool do_hash(DisasContext *ctx, arg_X *a, bool priv,
1768
1769
ea = do_ea_calc(ctx, a->ra, tcg_constant_tl(a->rt));
1770
helper(cpu_env, ea, cpu_gpr[a->ra], cpu_gpr[a->rb]);
1771
-
1772
- tcg_temp_free(ea);
1773
-
1774
return true;
1775
}
1776
1777
diff --git a/target/ppc/translate/fp-impl.c.inc b/target/ppc/translate/fp-impl.c.inc
1778
index XXXXXXX..XXXXXXX 100644
1779
--- a/target/ppc/translate/fp-impl.c.inc
1780
+++ b/target/ppc/translate/fp-impl.c.inc
1781
@@ -XXX,XX +XXX,XX @@ static void gen_set_cr1_from_fpscr(DisasContext *ctx)
1782
TCGv_i32 tmp = tcg_temp_new_i32();
1783
tcg_gen_trunc_tl_i32(tmp, cpu_fpscr);
1784
tcg_gen_shri_i32(cpu_crf[1], tmp, 28);
1785
- tcg_temp_free_i32(tmp);
1786
}
1787
#else
1788
static void gen_set_cr1_from_fpscr(DisasContext *ctx)
1789
@@ -XXX,XX +XXX,XX @@ static void gen_f##name(DisasContext *ctx) \
1790
if (unlikely(Rc(ctx->opcode) != 0)) { \
1791
gen_set_cr1_from_fpscr(ctx); \
1792
} \
1793
- tcg_temp_free_i64(t0); \
1794
- tcg_temp_free_i64(t1); \
1795
- tcg_temp_free_i64(t2); \
1796
- tcg_temp_free_i64(t3); \
1797
}
1798
1799
#define GEN_FLOAT_ACB(name, op2, set_fprf, type) \
1800
@@ -XXX,XX +XXX,XX @@ static void gen_f##name(DisasContext *ctx) \
1801
if (unlikely(Rc(ctx->opcode) != 0)) { \
1802
gen_set_cr1_from_fpscr(ctx); \
1803
} \
1804
- tcg_temp_free_i64(t0); \
1805
- tcg_temp_free_i64(t1); \
1806
- tcg_temp_free_i64(t2); \
1807
}
1808
#define GEN_FLOAT_AB(name, op2, inval, set_fprf, type) \
1809
_GEN_FLOAT_AB(name, 0x3F, op2, inval, set_fprf, type); \
1810
@@ -XXX,XX +XXX,XX @@ static void gen_f##name(DisasContext *ctx) \
1811
if (unlikely(Rc(ctx->opcode) != 0)) { \
1812
gen_set_cr1_from_fpscr(ctx); \
1813
} \
1814
- tcg_temp_free_i64(t0); \
1815
- tcg_temp_free_i64(t1); \
1816
- tcg_temp_free_i64(t2); \
1817
}
1818
#define GEN_FLOAT_AC(name, op2, inval, set_fprf, type) \
1819
_GEN_FLOAT_AC(name, 0x3F, op2, inval, set_fprf, type); \
1820
@@ -XXX,XX +XXX,XX @@ static void gen_f##name(DisasContext *ctx) \
1821
if (unlikely(Rc(ctx->opcode) != 0)) { \
1822
gen_set_cr1_from_fpscr(ctx); \
1823
} \
1824
- tcg_temp_free_i64(t0); \
1825
- tcg_temp_free_i64(t1); \
1826
}
1827
1828
#define GEN_FLOAT_BS(name, op1, op2, set_fprf, type) \
1829
@@ -XXX,XX +XXX,XX @@ static void gen_f##name(DisasContext *ctx) \
1830
if (unlikely(Rc(ctx->opcode) != 0)) { \
1831
gen_set_cr1_from_fpscr(ctx); \
1832
} \
1833
- tcg_temp_free_i64(t0); \
1834
- tcg_temp_free_i64(t1); \
1835
}
1836
1837
/* fadd - fadds */
1838
@@ -XXX,XX +XXX,XX @@ static void gen_frsqrtes(DisasContext *ctx)
1839
if (unlikely(Rc(ctx->opcode) != 0)) {
1840
gen_set_cr1_from_fpscr(ctx);
1841
}
1842
- tcg_temp_free_i64(t0);
1843
- tcg_temp_free_i64(t1);
1844
}
1845
1846
static bool trans_FSEL(DisasContext *ctx, arg_A *a)
1847
@@ -XXX,XX +XXX,XX @@ static bool trans_FSEL(DisasContext *ctx, arg_A *a)
1848
if (a->rc) {
1849
gen_set_cr1_from_fpscr(ctx);
1850
}
1851
-
1852
- tcg_temp_free_i64(t0);
1853
- tcg_temp_free_i64(t1);
1854
- tcg_temp_free_i64(t2);
1855
-
1856
return true;
1857
}
1858
1859
@@ -XXX,XX +XXX,XX @@ static bool do_helper_fsqrt(DisasContext *ctx, arg_A_tb *a,
1860
if (unlikely(a->rc != 0)) {
1861
gen_set_cr1_from_fpscr(ctx);
1862
}
1863
-
1864
- tcg_temp_free_i64(t0);
1865
- tcg_temp_free_i64(t1);
1866
-
1867
return true;
1868
}
1869
1870
@@ -XXX,XX +XXX,XX @@ static void gen_ftdiv(DisasContext *ctx)
1871
get_fpr(t0, rA(ctx->opcode));
1872
get_fpr(t1, rB(ctx->opcode));
1873
gen_helper_ftdiv(cpu_crf[crfD(ctx->opcode)], t0, t1);
1874
- tcg_temp_free_i64(t0);
1875
- tcg_temp_free_i64(t1);
1876
}
1877
1878
static void gen_ftsqrt(DisasContext *ctx)
1879
@@ -XXX,XX +XXX,XX @@ static void gen_ftsqrt(DisasContext *ctx)
1880
t0 = tcg_temp_new_i64();
1881
get_fpr(t0, rB(ctx->opcode));
1882
gen_helper_ftsqrt(cpu_crf[crfD(ctx->opcode)], t0);
1883
- tcg_temp_free_i64(t0);
1884
}
1885
1886
1887
@@ -XXX,XX +XXX,XX @@ static void gen_fcmpo(DisasContext *ctx)
1888
get_fpr(t0, rA(ctx->opcode));
1889
get_fpr(t1, rB(ctx->opcode));
1890
gen_helper_fcmpo(cpu_env, t0, t1, crf);
1891
- tcg_temp_free_i32(crf);
1892
gen_helper_float_check_status(cpu_env);
1893
- tcg_temp_free_i64(t0);
1894
- tcg_temp_free_i64(t1);
1895
}
1896
1897
/* fcmpu */
1898
@@ -XXX,XX +XXX,XX @@ static void gen_fcmpu(DisasContext *ctx)
1899
get_fpr(t0, rA(ctx->opcode));
1900
get_fpr(t1, rB(ctx->opcode));
1901
gen_helper_fcmpu(cpu_env, t0, t1, crf);
1902
- tcg_temp_free_i32(crf);
1903
gen_helper_float_check_status(cpu_env);
1904
- tcg_temp_free_i64(t0);
1905
- tcg_temp_free_i64(t1);
1906
}
1907
1908
/*** Floating-point move ***/
1909
@@ -XXX,XX +XXX,XX @@ static void gen_fabs(DisasContext *ctx)
1910
if (unlikely(Rc(ctx->opcode))) {
1911
gen_set_cr1_from_fpscr(ctx);
1912
}
1913
- tcg_temp_free_i64(t0);
1914
- tcg_temp_free_i64(t1);
1915
}
1916
1917
/* fmr - fmr. */
1918
@@ -XXX,XX +XXX,XX @@ static void gen_fmr(DisasContext *ctx)
1919
if (unlikely(Rc(ctx->opcode))) {
1920
gen_set_cr1_from_fpscr(ctx);
1921
}
1922
- tcg_temp_free_i64(t0);
1923
}
1924
1925
/* fnabs */
1926
@@ -XXX,XX +XXX,XX @@ static void gen_fnabs(DisasContext *ctx)
1927
if (unlikely(Rc(ctx->opcode))) {
1928
gen_set_cr1_from_fpscr(ctx);
1929
}
1930
- tcg_temp_free_i64(t0);
1931
- tcg_temp_free_i64(t1);
1932
}
1933
1934
/* fneg */
1935
@@ -XXX,XX +XXX,XX @@ static void gen_fneg(DisasContext *ctx)
1936
if (unlikely(Rc(ctx->opcode))) {
1937
gen_set_cr1_from_fpscr(ctx);
1938
}
1939
- tcg_temp_free_i64(t0);
1940
- tcg_temp_free_i64(t1);
1941
}
1942
1943
/* fcpsgn: PowerPC 2.05 specification */
1944
@@ -XXX,XX +XXX,XX @@ static void gen_fcpsgn(DisasContext *ctx)
1945
if (unlikely(Rc(ctx->opcode))) {
1946
gen_set_cr1_from_fpscr(ctx);
1947
}
1948
- tcg_temp_free_i64(t0);
1949
- tcg_temp_free_i64(t1);
1950
- tcg_temp_free_i64(t2);
1951
}
1952
1953
static void gen_fmrgew(DisasContext *ctx)
1954
@@ -XXX,XX +XXX,XX @@ static void gen_fmrgew(DisasContext *ctx)
1955
get_fpr(t0, rA(ctx->opcode));
1956
tcg_gen_deposit_i64(t1, t0, b0, 0, 32);
1957
set_fpr(rD(ctx->opcode), t1);
1958
- tcg_temp_free_i64(b0);
1959
- tcg_temp_free_i64(t0);
1960
- tcg_temp_free_i64(t1);
1961
}
1962
1963
static void gen_fmrgow(DisasContext *ctx)
1964
@@ -XXX,XX +XXX,XX @@ static void gen_fmrgow(DisasContext *ctx)
1965
get_fpr(t1, rA(ctx->opcode));
1966
tcg_gen_deposit_i64(t2, t0, t1, 32, 32);
1967
set_fpr(rD(ctx->opcode), t2);
1968
- tcg_temp_free_i64(t0);
1969
- tcg_temp_free_i64(t1);
1970
- tcg_temp_free_i64(t2);
1971
}
1972
1973
/*** Floating-Point status & ctrl register ***/
1974
@@ -XXX,XX +XXX,XX @@ static void gen_mcrfs(DisasContext *ctx)
1975
tcg_gen_trunc_tl_i32(cpu_crf[crfD(ctx->opcode)], tmp);
1976
tcg_gen_andi_i32(cpu_crf[crfD(ctx->opcode)], cpu_crf[crfD(ctx->opcode)],
1977
0xf);
1978
- tcg_temp_free(tmp);
1979
tcg_gen_extu_tl_i64(tnew_fpscr, cpu_fpscr);
1980
/* Only the exception bits (including FX) should be cleared if read */
1981
tcg_gen_andi_i64(tnew_fpscr, tnew_fpscr,
1982
@@ -XXX,XX +XXX,XX @@ static void gen_mcrfs(DisasContext *ctx)
1983
/* FEX and VX need to be updated, so don't set fpscr directly */
1984
tmask = tcg_const_i32(1 << nibble);
1985
gen_helper_store_fpscr(cpu_env, tnew_fpscr, tmask);
1986
- tcg_temp_free_i32(tmask);
1987
- tcg_temp_free_i64(tnew_fpscr);
1988
}
1989
1990
static TCGv_i64 place_from_fpscr(int rt, uint64_t mask)
1991
@@ -XXX,XX +XXX,XX @@ static TCGv_i64 place_from_fpscr(int rt, uint64_t mask)
1992
tcg_gen_andi_i64(fpscr_masked, fpscr, mask);
1993
set_fpr(rt, fpscr_masked);
1994
1995
- tcg_temp_free_i64(fpscr_masked);
1996
-
1997
return fpscr;
1998
}
1999
2000
@@ -XXX,XX +XXX,XX @@ static void store_fpscr_masked(TCGv_i64 fpscr, uint64_t clear_mask,
2001
tcg_gen_andi_i64(fpscr_masked, fpscr, ~clear_mask);
2002
tcg_gen_or_i64(fpscr_masked, fpscr_masked, set_mask);
2003
gen_helper_store_fpscr(cpu_env, fpscr_masked, st_mask);
2004
-
2005
- tcg_temp_free_i64(fpscr_masked);
2006
}
2007
2008
static bool trans_MFFS(DisasContext *ctx, arg_X_t_rc *a)
2009
{
2010
- TCGv_i64 fpscr;
2011
-
2012
REQUIRE_FPU(ctx);
2013
2014
gen_reset_fpstatus();
2015
- fpscr = place_from_fpscr(a->rt, UINT64_MAX);
2016
+ place_from_fpscr(a->rt, UINT64_MAX);
2017
if (a->rc) {
2018
gen_set_cr1_from_fpscr(ctx);
2019
}
2020
-
2021
- tcg_temp_free_i64(fpscr);
2022
-
2023
return true;
2024
}
2025
2026
@@ -XXX,XX +XXX,XX @@ static bool trans_MFFSCE(DisasContext *ctx, arg_X_t *a)
2027
gen_reset_fpstatus();
2028
fpscr = place_from_fpscr(a->rt, UINT64_MAX);
2029
store_fpscr_masked(fpscr, FP_ENABLES, tcg_constant_i64(0), 0x0003);
2030
-
2031
- tcg_temp_free_i64(fpscr);
2032
-
2033
return true;
2034
}
2035
2036
@@ -XXX,XX +XXX,XX @@ static bool trans_MFFSCRN(DisasContext *ctx, arg_X_tb *a)
2037
gen_reset_fpstatus();
2038
fpscr = place_from_fpscr(a->rt, FP_DRN | FP_ENABLES | FP_NI | FP_RN);
2039
store_fpscr_masked(fpscr, FP_RN, t1, 0x0001);
2040
-
2041
- tcg_temp_free_i64(t1);
2042
- tcg_temp_free_i64(fpscr);
2043
-
2044
return true;
2045
}
2046
2047
@@ -XXX,XX +XXX,XX @@ static bool trans_MFFSCDRN(DisasContext *ctx, arg_X_tb *a)
2048
gen_reset_fpstatus();
2049
fpscr = place_from_fpscr(a->rt, FP_DRN | FP_ENABLES | FP_NI | FP_RN);
2050
store_fpscr_masked(fpscr, FP_DRN, t1, 0x0100);
2051
-
2052
- tcg_temp_free_i64(t1);
2053
- tcg_temp_free_i64(fpscr);
2054
-
2055
return true;
2056
}
2057
2058
@@ -XXX,XX +XXX,XX @@ static bool trans_MFFSCRNI(DisasContext *ctx, arg_X_imm2 *a)
2059
gen_reset_fpstatus();
2060
fpscr = place_from_fpscr(a->rt, FP_DRN | FP_ENABLES | FP_NI | FP_RN);
2061
store_fpscr_masked(fpscr, FP_RN, t1, 0x0001);
2062
-
2063
- tcg_temp_free_i64(t1);
2064
- tcg_temp_free_i64(fpscr);
2065
-
2066
return true;
2067
}
2068
2069
@@ -XXX,XX +XXX,XX @@ static bool trans_MFFSCDRNI(DisasContext *ctx, arg_X_imm3 *a)
2070
gen_reset_fpstatus();
2071
fpscr = place_from_fpscr(a->rt, FP_DRN | FP_ENABLES | FP_NI | FP_RN);
2072
store_fpscr_masked(fpscr, FP_DRN, t1, 0x0100);
2073
-
2074
- tcg_temp_free_i64(t1);
2075
- tcg_temp_free_i64(fpscr);
2076
-
2077
return true;
2078
}
2079
2080
static bool trans_MFFSL(DisasContext *ctx, arg_X_t *a)
2081
{
2082
- TCGv_i64 fpscr;
2083
-
2084
REQUIRE_INSNS_FLAGS2(ctx, ISA300);
2085
REQUIRE_FPU(ctx);
2086
2087
gen_reset_fpstatus();
2088
- fpscr = place_from_fpscr(a->rt,
2089
- FP_DRN | FP_STATUS | FP_ENABLES | FP_NI | FP_RN);
2090
-
2091
- tcg_temp_free_i64(fpscr);
2092
-
2093
+ place_from_fpscr(a->rt, FP_DRN | FP_STATUS | FP_ENABLES | FP_NI | FP_RN);
2094
return true;
2095
}
2096
2097
@@ -XXX,XX +XXX,XX @@ static void gen_mtfsb0(DisasContext *ctx)
2098
TCGv_i32 t0;
2099
t0 = tcg_const_i32(crb);
2100
gen_helper_fpscr_clrbit(cpu_env, t0);
2101
- tcg_temp_free_i32(t0);
2102
}
2103
if (unlikely(Rc(ctx->opcode) != 0)) {
2104
tcg_gen_trunc_tl_i32(cpu_crf[1], cpu_fpscr);
2105
@@ -XXX,XX +XXX,XX @@ static void gen_mtfsb1(DisasContext *ctx)
2106
TCGv_i32 t0;
2107
t0 = tcg_const_i32(crb);
2108
gen_helper_fpscr_setbit(cpu_env, t0);
2109
- tcg_temp_free_i32(t0);
2110
}
2111
if (unlikely(Rc(ctx->opcode) != 0)) {
2112
tcg_gen_trunc_tl_i32(cpu_crf[1], cpu_fpscr);
2113
@@ -XXX,XX +XXX,XX @@ static void gen_mtfsf(DisasContext *ctx)
2114
t1 = tcg_temp_new_i64();
2115
get_fpr(t1, rB(ctx->opcode));
2116
gen_helper_store_fpscr(cpu_env, t1, t0);
2117
- tcg_temp_free_i32(t0);
2118
if (unlikely(Rc(ctx->opcode) != 0)) {
2119
tcg_gen_trunc_tl_i32(cpu_crf[1], cpu_fpscr);
2120
tcg_gen_shri_i32(cpu_crf[1], cpu_crf[1], FPSCR_OX);
2121
}
2122
/* We can raise a deferred exception */
2123
gen_helper_fpscr_check_status(cpu_env);
2124
- tcg_temp_free_i64(t1);
2125
}
2126
2127
/* mtfsfi */
2128
@@ -XXX,XX +XXX,XX @@ static void gen_mtfsfi(DisasContext *ctx)
2129
t0 = tcg_const_i64(((uint64_t)FPIMM(ctx->opcode)) << (4 * sh));
2130
t1 = tcg_const_i32(1 << sh);
2131
gen_helper_store_fpscr(cpu_env, t0, t1);
2132
- tcg_temp_free_i64(t0);
2133
- tcg_temp_free_i32(t1);
2134
if (unlikely(Rc(ctx->opcode) != 0)) {
2135
tcg_gen_trunc_tl_i32(cpu_crf[1], cpu_fpscr);
2136
tcg_gen_shri_i32(cpu_crf[1], cpu_crf[1], FPSCR_OX);
2137
@@ -XXX,XX +XXX,XX @@ static void gen_qemu_ld32fs(DisasContext *ctx, TCGv_i64 dest, TCGv addr)
2138
TCGv_i32 tmp = tcg_temp_new_i32();
2139
tcg_gen_qemu_ld_i32(tmp, addr, ctx->mem_idx, DEF_MEMOP(MO_UL));
2140
gen_helper_todouble(dest, tmp);
2141
- tcg_temp_free_i32(tmp);
2142
}
2143
2144
/* lfdepx (external PID lfdx) */
2145
@@ -XXX,XX +XXX,XX @@ static void gen_lfdepx(DisasContext *ctx)
2146
gen_addr_reg_index(ctx, EA);
2147
tcg_gen_qemu_ld_i64(t0, EA, PPC_TLB_EPID_LOAD, DEF_MEMOP(MO_UQ));
2148
set_fpr(rD(ctx->opcode), t0);
2149
- tcg_temp_free(EA);
2150
- tcg_temp_free_i64(t0);
2151
}
2152
2153
/* lfdp */
2154
@@ -XXX,XX +XXX,XX @@ static void gen_lfdp(DisasContext *ctx)
2155
gen_qemu_ld64_i64(ctx, t0, EA);
2156
set_fpr(rD(ctx->opcode) + 1, t0);
2157
}
2158
- tcg_temp_free(EA);
2159
- tcg_temp_free_i64(t0);
2160
}
2161
2162
/* lfdpx */
2163
@@ -XXX,XX +XXX,XX @@ static void gen_lfdpx(DisasContext *ctx)
2164
gen_qemu_ld64_i64(ctx, t0, EA);
2165
set_fpr(rD(ctx->opcode) + 1, t0);
2166
}
2167
- tcg_temp_free(EA);
2168
- tcg_temp_free_i64(t0);
2169
}
2170
2171
/* lfiwax */
2172
@@ -XXX,XX +XXX,XX @@ static void gen_lfiwax(DisasContext *ctx)
2173
gen_qemu_ld32s(ctx, t0, EA);
2174
tcg_gen_ext_tl_i64(t1, t0);
2175
set_fpr(rD(ctx->opcode), t1);
2176
- tcg_temp_free(EA);
2177
- tcg_temp_free(t0);
2178
- tcg_temp_free_i64(t1);
2179
}
2180
2181
/* lfiwzx */
2182
@@ -XXX,XX +XXX,XX @@ static void gen_lfiwzx(DisasContext *ctx)
2183
gen_addr_reg_index(ctx, EA);
2184
gen_qemu_ld32u_i64(ctx, t0, EA);
2185
set_fpr(rD(ctx->opcode), t0);
2186
- tcg_temp_free(EA);
2187
- tcg_temp_free_i64(t0);
2188
}
2189
2190
#define GEN_STXF(name, stop, opc2, opc3, type) \
2191
@@ -XXX,XX +XXX,XX @@ static void glue(gen_, name##x)(DisasContext *ctx) \
2192
gen_addr_reg_index(ctx, EA); \
2193
get_fpr(t0, rS(ctx->opcode)); \
2194
gen_qemu_##stop(ctx, t0, EA); \
2195
- tcg_temp_free(EA); \
2196
- tcg_temp_free_i64(t0); \
2197
}
2198
2199
static void gen_qemu_st32fs(DisasContext *ctx, TCGv_i64 src, TCGv addr)
2200
@@ -XXX,XX +XXX,XX @@ static void gen_qemu_st32fs(DisasContext *ctx, TCGv_i64 src, TCGv addr)
2201
TCGv_i32 tmp = tcg_temp_new_i32();
2202
gen_helper_tosingle(tmp, src);
2203
tcg_gen_qemu_st_i32(tmp, addr, ctx->mem_idx, DEF_MEMOP(MO_UL));
2204
- tcg_temp_free_i32(tmp);
2205
}
2206
2207
/* stfdepx (external PID lfdx) */
2208
@@ -XXX,XX +XXX,XX @@ static void gen_stfdepx(DisasContext *ctx)
2209
gen_addr_reg_index(ctx, EA);
2210
get_fpr(t0, rD(ctx->opcode));
2211
tcg_gen_qemu_st_i64(t0, EA, PPC_TLB_EPID_STORE, DEF_MEMOP(MO_UQ));
2212
- tcg_temp_free(EA);
2213
- tcg_temp_free_i64(t0);
2214
}
2215
2216
/* stfdp */
2217
@@ -XXX,XX +XXX,XX @@ static void gen_stfdp(DisasContext *ctx)
2218
get_fpr(t0, rD(ctx->opcode) + 1);
2219
gen_qemu_st64_i64(ctx, t0, EA);
2220
}
2221
- tcg_temp_free(EA);
2222
- tcg_temp_free_i64(t0);
2223
}
2224
2225
/* stfdpx */
2226
@@ -XXX,XX +XXX,XX @@ static void gen_stfdpx(DisasContext *ctx)
2227
get_fpr(t0, rD(ctx->opcode) + 1);
2228
gen_qemu_st64_i64(ctx, t0, EA);
2229
}
2230
- tcg_temp_free(EA);
2231
- tcg_temp_free_i64(t0);
2232
}
2233
2234
/* Optional: */
2235
@@ -XXX,XX +XXX,XX @@ static inline void gen_qemu_st32fiw(DisasContext *ctx, TCGv_i64 arg1, TCGv arg2)
2236
TCGv t0 = tcg_temp_new();
2237
tcg_gen_trunc_i64_tl(t0, arg1),
2238
gen_qemu_st32(ctx, t0, arg2);
2239
- tcg_temp_free(t0);
2240
}
2241
/* stfiwx */
2242
GEN_STXF(stfiw, st32fiw, 0x17, 0x1E, PPC_FLOAT_STFIWX);
2243
@@ -XXX,XX +XXX,XX @@ static bool do_lsfpsd(DisasContext *ctx, int rt, int ra, TCGv displ,
2244
if (update) {
2245
tcg_gen_mov_tl(cpu_gpr[ra], ea);
2246
}
2247
- tcg_temp_free_i64(t0);
2248
- tcg_temp_free(ea);
2249
return true;
2250
}
2251
2252
diff --git a/target/ppc/translate/spe-impl.c.inc b/target/ppc/translate/spe-impl.c.inc
2253
index XXXXXXX..XXXXXXX 100644
2254
--- a/target/ppc/translate/spe-impl.c.inc
2255
+++ b/target/ppc/translate/spe-impl.c.inc
2256
@@ -XXX,XX +XXX,XX @@ static inline void gen_evmra(DisasContext *ctx)
2257
2258
/* spe_acc := tmp */
2259
tcg_gen_st_i64(tmp, cpu_env, offsetof(CPUPPCState, spe_acc));
2260
- tcg_temp_free_i64(tmp);
2261
2262
/* rD := rA */
2263
tcg_gen_mov_tl(cpu_gpr[rD(ctx->opcode)], cpu_gpr[rA(ctx->opcode)]);
2264
@@ -XXX,XX +XXX,XX @@ static inline void gen_##name(DisasContext *ctx) \
2265
tcg_gen_trunc_tl_i32(t0, cpu_gprh[rA(ctx->opcode)]); \
2266
tcg_opi(t0, t0, rB(ctx->opcode)); \
2267
tcg_gen_extu_i32_tl(cpu_gprh[rD(ctx->opcode)], t0); \
2268
- \
2269
- tcg_temp_free_i32(t0); \
2270
}
2271
GEN_SPEOP_TCG_LOGIC_IMM2(evslwi, tcg_gen_shli_i32);
2272
GEN_SPEOP_TCG_LOGIC_IMM2(evsrwiu, tcg_gen_shri_i32);
2273
@@ -XXX,XX +XXX,XX @@ static inline void gen_##name(DisasContext *ctx) \
2274
tcg_gen_trunc_tl_i32(t0, cpu_gprh[rA(ctx->opcode)]); \
2275
tcg_op(t0, t0); \
2276
tcg_gen_extu_i32_tl(cpu_gprh[rD(ctx->opcode)], t0); \
2277
- \
2278
- tcg_temp_free_i32(t0); \
2279
}
2280
2281
GEN_SPEOP_ARITH1(evabs, tcg_gen_abs_i32);
2282
@@ -XXX,XX +XXX,XX @@ static inline void gen_##name(DisasContext *ctx) \
2283
tcg_gen_trunc_tl_i32(t1, cpu_gprh[rB(ctx->opcode)]); \
2284
tcg_op(t0, t0, t1); \
2285
tcg_gen_extu_i32_tl(cpu_gprh[rD(ctx->opcode)], t0); \
2286
- \
2287
- tcg_temp_free_i32(t0); \
2288
- tcg_temp_free_i32(t1); \
2289
}
2290
2291
static inline void gen_op_evsrwu(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
2292
@@ -XXX,XX +XXX,XX @@ static inline void gen_op_evsrwu(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
2293
gen_set_label(l1);
2294
tcg_gen_movi_i32(ret, 0);
2295
gen_set_label(l2);
2296
- tcg_temp_free_i32(t0);
2297
}
2298
GEN_SPEOP_ARITH2(evsrwu, gen_op_evsrwu);
2299
static inline void gen_op_evsrws(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
2300
@@ -XXX,XX +XXX,XX @@ static inline void gen_op_evsrws(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
2301
gen_set_label(l1);
2302
tcg_gen_movi_i32(ret, 0);
2303
gen_set_label(l2);
2304
- tcg_temp_free_i32(t0);
2305
}
2306
GEN_SPEOP_ARITH2(evsrws, gen_op_evsrws);
2307
static inline void gen_op_evslw(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
2308
@@ -XXX,XX +XXX,XX @@ static inline void gen_op_evslw(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
2309
gen_set_label(l1);
2310
tcg_gen_movi_i32(ret, 0);
2311
gen_set_label(l2);
2312
- tcg_temp_free_i32(t0);
2313
}
2314
GEN_SPEOP_ARITH2(evslw, gen_op_evslw);
2315
static inline void gen_op_evrlw(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
2316
@@ -XXX,XX +XXX,XX @@ static inline void gen_op_evrlw(TCGv_i32 ret, TCGv_i32 arg1, TCGv_i32 arg2)
2317
TCGv_i32 t0 = tcg_temp_new_i32();
2318
tcg_gen_andi_i32(t0, arg2, 0x1F);
2319
tcg_gen_rotl_i32(ret, arg1, t0);
2320
- tcg_temp_free_i32(t0);
2321
}
2322
GEN_SPEOP_ARITH2(evrlw, gen_op_evrlw);
2323
static inline void gen_evmergehi(DisasContext *ctx)
2324
@@ -XXX,XX +XXX,XX @@ static inline void gen_##name(DisasContext *ctx) \
2325
tcg_gen_trunc_tl_i32(t0, cpu_gprh[rB(ctx->opcode)]); \
2326
tcg_op(t0, t0, rA(ctx->opcode)); \
2327
tcg_gen_extu_i32_tl(cpu_gprh[rD(ctx->opcode)], t0); \
2328
- \
2329
- tcg_temp_free_i32(t0); \
2330
}
2331
GEN_SPEOP_ARITH_IMM2(evaddiw, tcg_gen_addi_i32);
2332
GEN_SPEOP_ARITH_IMM2(evsubifw, tcg_gen_subi_i32);
2333
@@ -XXX,XX +XXX,XX @@ static inline void gen_evmergelohi(DisasContext *ctx)
2334
tcg_gen_mov_tl(tmp, cpu_gpr[rA(ctx->opcode)]);
2335
tcg_gen_mov_tl(cpu_gpr[rD(ctx->opcode)], cpu_gprh[rB(ctx->opcode)]);
2336
tcg_gen_mov_tl(cpu_gprh[rD(ctx->opcode)], tmp);
2337
- tcg_temp_free(tmp);
2338
} else {
2339
tcg_gen_mov_tl(cpu_gpr[rD(ctx->opcode)], cpu_gprh[rB(ctx->opcode)]);
2340
tcg_gen_mov_tl(cpu_gprh[rD(ctx->opcode)], cpu_gpr[rA(ctx->opcode)]);
2341
@@ -XXX,XX +XXX,XX @@ static inline void gen_evsel(DisasContext *ctx)
2342
gen_set_label(l3);
2343
tcg_gen_mov_tl(cpu_gpr[rD(ctx->opcode)], cpu_gpr[rB(ctx->opcode)]);
2344
gen_set_label(l4);
2345
- tcg_temp_free_i32(t0);
2346
}
2347
2348
static void gen_evsel0(DisasContext *ctx)
2349
@@ -XXX,XX +XXX,XX @@ static inline void gen_evmwumi(DisasContext *ctx)
2350
tcg_gen_mul_i64(t0, t0, t1); /* t0 := rA * rB */
2351
2352
gen_store_gpr64(rD(ctx->opcode), t0); /* rD := t0 */
2353
-
2354
- tcg_temp_free_i64(t0);
2355
- tcg_temp_free_i64(t1);
2356
}
2357
2358
static inline void gen_evmwumia(DisasContext *ctx)
2359
@@ -XXX,XX +XXX,XX @@ static inline void gen_evmwumia(DisasContext *ctx)
2360
/* acc := rD */
2361
gen_load_gpr64(tmp, rD(ctx->opcode));
2362
tcg_gen_st_i64(tmp, cpu_env, offsetof(CPUPPCState, spe_acc));
2363
- tcg_temp_free_i64(tmp);
2364
}
2365
2366
static inline void gen_evmwumiaa(DisasContext *ctx)
2367
@@ -XXX,XX +XXX,XX @@ static inline void gen_evmwumiaa(DisasContext *ctx)
2368
2369
/* rD := acc */
2370
gen_store_gpr64(rD(ctx->opcode), acc);
2371
-
2372
- tcg_temp_free_i64(acc);
2373
- tcg_temp_free_i64(tmp);
2374
}
2375
2376
static inline void gen_evmwsmi(DisasContext *ctx)
2377
@@ -XXX,XX +XXX,XX @@ static inline void gen_evmwsmi(DisasContext *ctx)
2378
tcg_gen_mul_i64(t0, t0, t1); /* t0 := rA * rB */
2379
2380
gen_store_gpr64(rD(ctx->opcode), t0); /* rD := t0 */
2381
-
2382
- tcg_temp_free_i64(t0);
2383
- tcg_temp_free_i64(t1);
2384
}
2385
2386
static inline void gen_evmwsmia(DisasContext *ctx)
2387
@@ -XXX,XX +XXX,XX @@ static inline void gen_evmwsmia(DisasContext *ctx)
2388
/* acc := rD */
2389
gen_load_gpr64(tmp, rD(ctx->opcode));
2390
tcg_gen_st_i64(tmp, cpu_env, offsetof(CPUPPCState, spe_acc));
2391
-
2392
- tcg_temp_free_i64(tmp);
2393
}
2394
2395
static inline void gen_evmwsmiaa(DisasContext *ctx)
2396
@@ -XXX,XX +XXX,XX @@ static inline void gen_evmwsmiaa(DisasContext *ctx)
2397
2398
/* rD := acc */
2399
gen_store_gpr64(rD(ctx->opcode), acc);
2400
-
2401
- tcg_temp_free_i64(acc);
2402
- tcg_temp_free_i64(tmp);
2403
}
2404
2405
GEN_SPE(evaddw, speundef, 0x00, 0x08, 0x00000000, 0xFFFFFFFF, PPC_SPE); ////
2406
@@ -XXX,XX +XXX,XX @@ static inline void gen_op_evldd(DisasContext *ctx, TCGv addr)
2407
TCGv_i64 t0 = tcg_temp_new_i64();
2408
gen_qemu_ld64_i64(ctx, t0, addr);
2409
gen_store_gpr64(rD(ctx->opcode), t0);
2410
- tcg_temp_free_i64(t0);
2411
}
2412
2413
static inline void gen_op_evldw(DisasContext *ctx, TCGv addr)
2414
@@ -XXX,XX +XXX,XX @@ static inline void gen_op_evldh(DisasContext *ctx, TCGv addr)
2415
gen_addr_add(ctx, addr, addr, 2);
2416
gen_qemu_ld16u(ctx, t0, addr);
2417
tcg_gen_or_tl(cpu_gpr[rD(ctx->opcode)], cpu_gpr[rD(ctx->opcode)], t0);
2418
- tcg_temp_free(t0);
2419
}
2420
2421
static inline void gen_op_evlhhesplat(DisasContext *ctx, TCGv addr)
2422
@@ -XXX,XX +XXX,XX @@ static inline void gen_op_evlhhesplat(DisasContext *ctx, TCGv addr)
2423
tcg_gen_shli_tl(t0, t0, 16);
2424
tcg_gen_mov_tl(cpu_gprh[rD(ctx->opcode)], t0);
2425
tcg_gen_mov_tl(cpu_gpr[rD(ctx->opcode)], t0);
2426
- tcg_temp_free(t0);
2427
}
2428
2429
static inline void gen_op_evlhhousplat(DisasContext *ctx, TCGv addr)
2430
@@ -XXX,XX +XXX,XX @@ static inline void gen_op_evlhhousplat(DisasContext *ctx, TCGv addr)
2431
gen_qemu_ld16u(ctx, t0, addr);
2432
tcg_gen_mov_tl(cpu_gprh[rD(ctx->opcode)], t0);
2433
tcg_gen_mov_tl(cpu_gpr[rD(ctx->opcode)], t0);
2434
- tcg_temp_free(t0);
2435
}
2436
2437
static inline void gen_op_evlhhossplat(DisasContext *ctx, TCGv addr)
2438
@@ -XXX,XX +XXX,XX @@ static inline void gen_op_evlhhossplat(DisasContext *ctx, TCGv addr)
2439
gen_qemu_ld16s(ctx, t0, addr);
2440
tcg_gen_mov_tl(cpu_gprh[rD(ctx->opcode)], t0);
2441
tcg_gen_mov_tl(cpu_gpr[rD(ctx->opcode)], t0);
2442
- tcg_temp_free(t0);
2443
}
2444
2445
static inline void gen_op_evlwhe(DisasContext *ctx, TCGv addr)
2446
@@ -XXX,XX +XXX,XX @@ static inline void gen_op_evlwhe(DisasContext *ctx, TCGv addr)
2447
gen_addr_add(ctx, addr, addr, 2);
2448
gen_qemu_ld16u(ctx, t0, addr);
2449
tcg_gen_shli_tl(cpu_gpr[rD(ctx->opcode)], t0, 16);
2450
- tcg_temp_free(t0);
2451
}
2452
2453
static inline void gen_op_evlwhou(DisasContext *ctx, TCGv addr)
2454
@@ -XXX,XX +XXX,XX @@ static inline void gen_op_evlwwsplat(DisasContext *ctx, TCGv addr)
2455
gen_qemu_ld32u(ctx, t0, addr);
2456
tcg_gen_mov_tl(cpu_gprh[rD(ctx->opcode)], t0);
2457
tcg_gen_mov_tl(cpu_gpr[rD(ctx->opcode)], t0);
2458
- tcg_temp_free(t0);
2459
}
2460
2461
static inline void gen_op_evlwhsplat(DisasContext *ctx, TCGv addr)
2462
@@ -XXX,XX +XXX,XX @@ static inline void gen_op_evlwhsplat(DisasContext *ctx, TCGv addr)
2463
gen_qemu_ld16u(ctx, t0, addr);
2464
tcg_gen_shli_tl(cpu_gpr[rD(ctx->opcode)], t0, 16);
2465
tcg_gen_or_tl(cpu_gpr[rD(ctx->opcode)], cpu_gprh[rD(ctx->opcode)], t0);
2466
- tcg_temp_free(t0);
2467
}
2468
2469
static inline void gen_op_evstdd(DisasContext *ctx, TCGv addr)
2470
@@ -XXX,XX +XXX,XX @@ static inline void gen_op_evstdd(DisasContext *ctx, TCGv addr)
2471
TCGv_i64 t0 = tcg_temp_new_i64();
2472
gen_load_gpr64(t0, rS(ctx->opcode));
2473
gen_qemu_st64_i64(ctx, t0, addr);
2474
- tcg_temp_free_i64(t0);
2475
}
2476
2477
static inline void gen_op_evstdw(DisasContext *ctx, TCGv addr)
2478
@@ -XXX,XX +XXX,XX @@ static inline void gen_op_evstdh(DisasContext *ctx, TCGv addr)
2479
gen_addr_add(ctx, addr, addr, 2);
2480
tcg_gen_shri_tl(t0, cpu_gpr[rS(ctx->opcode)], 16);
2481
gen_qemu_st16(ctx, t0, addr);
2482
- tcg_temp_free(t0);
2483
gen_addr_add(ctx, addr, addr, 2);
2484
gen_qemu_st16(ctx, cpu_gpr[rS(ctx->opcode)], addr);
2485
}
2486
@@ -XXX,XX +XXX,XX @@ static inline void gen_op_evstwhe(DisasContext *ctx, TCGv addr)
2487
gen_addr_add(ctx, addr, addr, 2);
2488
tcg_gen_shri_tl(t0, cpu_gpr[rS(ctx->opcode)], 16);
2489
gen_qemu_st16(ctx, t0, addr);
2490
- tcg_temp_free(t0);
2491
}
2492
2493
static inline void gen_op_evstwho(DisasContext *ctx, TCGv addr)
2494
@@ -XXX,XX +XXX,XX @@ static void glue(gen_, name)(DisasContext *ctx) \
2495
gen_addr_reg_index(ctx, t0); \
2496
} \
2497
gen_op_##name(ctx, t0); \
2498
- tcg_temp_free(t0); \
2499
}
2500
2501
GEN_SPEOP_LDST(evldd, 0x00, 3);
2502
@@ -XXX,XX +XXX,XX @@ static inline void gen_##name(DisasContext *ctx) \
2503
tcg_gen_trunc_tl_i32(t0, cpu_gpr[rB(ctx->opcode)]); \
2504
gen_helper_##name(t0, cpu_env, t0); \
2505
tcg_gen_extu_i32_tl(cpu_gpr[rD(ctx->opcode)], t0); \
2506
- tcg_temp_free_i32(t0); \
2507
}
2508
#define GEN_SPEFPUOP_CONV_32_64(name) \
2509
static inline void gen_##name(DisasContext *ctx) \
2510
@@ -XXX,XX +XXX,XX @@ static inline void gen_##name(DisasContext *ctx) \
2511
gen_load_gpr64(t0, rB(ctx->opcode)); \
2512
gen_helper_##name(t1, cpu_env, t0); \
2513
tcg_gen_extu_i32_tl(cpu_gpr[rD(ctx->opcode)], t1); \
2514
- tcg_temp_free_i64(t0); \
2515
- tcg_temp_free_i32(t1); \
2516
}
2517
#define GEN_SPEFPUOP_CONV_64_32(name) \
2518
static inline void gen_##name(DisasContext *ctx) \
2519
@@ -XXX,XX +XXX,XX @@ static inline void gen_##name(DisasContext *ctx) \
2520
tcg_gen_trunc_tl_i32(t1, cpu_gpr[rB(ctx->opcode)]); \
2521
gen_helper_##name(t0, cpu_env, t1); \
2522
gen_store_gpr64(rD(ctx->opcode), t0); \
2523
- tcg_temp_free_i64(t0); \
2524
- tcg_temp_free_i32(t1); \
2525
}
2526
#define GEN_SPEFPUOP_CONV_64_64(name) \
2527
static inline void gen_##name(DisasContext *ctx) \
2528
@@ -XXX,XX +XXX,XX @@ static inline void gen_##name(DisasContext *ctx) \
2529
gen_load_gpr64(t0, rB(ctx->opcode)); \
2530
gen_helper_##name(t0, cpu_env, t0); \
2531
gen_store_gpr64(rD(ctx->opcode), t0); \
2532
- tcg_temp_free_i64(t0); \
2533
}
2534
#define GEN_SPEFPUOP_ARITH2_32_32(name) \
2535
static inline void gen_##name(DisasContext *ctx) \
2536
@@ -XXX,XX +XXX,XX @@ static inline void gen_##name(DisasContext *ctx) \
2537
tcg_gen_trunc_tl_i32(t1, cpu_gpr[rB(ctx->opcode)]); \
2538
gen_helper_##name(t0, cpu_env, t0, t1); \
2539
tcg_gen_extu_i32_tl(cpu_gpr[rD(ctx->opcode)], t0); \
2540
- \
2541
- tcg_temp_free_i32(t0); \
2542
- tcg_temp_free_i32(t1); \
2543
}
2544
#define GEN_SPEFPUOP_ARITH2_64_64(name) \
2545
static inline void gen_##name(DisasContext *ctx) \
2546
@@ -XXX,XX +XXX,XX @@ static inline void gen_##name(DisasContext *ctx) \
2547
gen_load_gpr64(t1, rB(ctx->opcode)); \
2548
gen_helper_##name(t0, cpu_env, t0, t1); \
2549
gen_store_gpr64(rD(ctx->opcode), t0); \
2550
- tcg_temp_free_i64(t0); \
2551
- tcg_temp_free_i64(t1); \
2552
}
2553
#define GEN_SPEFPUOP_COMP_32(name) \
2554
static inline void gen_##name(DisasContext *ctx) \
2555
@@ -XXX,XX +XXX,XX @@ static inline void gen_##name(DisasContext *ctx) \
2556
tcg_gen_trunc_tl_i32(t0, cpu_gpr[rA(ctx->opcode)]); \
2557
tcg_gen_trunc_tl_i32(t1, cpu_gpr[rB(ctx->opcode)]); \
2558
gen_helper_##name(cpu_crf[crfD(ctx->opcode)], cpu_env, t0, t1); \
2559
- \
2560
- tcg_temp_free_i32(t0); \
2561
- tcg_temp_free_i32(t1); \
2562
}
2563
#define GEN_SPEFPUOP_COMP_64(name) \
2564
static inline void gen_##name(DisasContext *ctx) \
2565
@@ -XXX,XX +XXX,XX @@ static inline void gen_##name(DisasContext *ctx) \
2566
gen_load_gpr64(t0, rA(ctx->opcode)); \
2567
gen_load_gpr64(t1, rB(ctx->opcode)); \
2568
gen_helper_##name(cpu_crf[crfD(ctx->opcode)], cpu_env, t0, t1); \
2569
- tcg_temp_free_i64(t0); \
2570
- tcg_temp_free_i64(t1); \
2571
}
2572
2573
/* Single precision floating-point vectors operations */
2574
diff --git a/target/ppc/translate/storage-ctrl-impl.c.inc b/target/ppc/translate/storage-ctrl-impl.c.inc
2575
index XXXXXXX..XXXXXXX 100644
2576
--- a/target/ppc/translate/storage-ctrl-impl.c.inc
2577
+++ b/target/ppc/translate/storage-ctrl-impl.c.inc
2578
@@ -XXX,XX +XXX,XX @@ static bool do_tlbie(DisasContext *ctx, arg_X_tlbie *a, bool local)
2579
TCGv t0 = tcg_temp_new();
2580
tcg_gen_ext32u_tl(t0, cpu_gpr[rb]);
2581
gen_helper_tlbie(cpu_env, t0);
2582
- tcg_temp_free(t0);
2583
2584
#if defined(TARGET_PPC64)
2585
/*
2586
@@ -XXX,XX +XXX,XX @@ static bool do_tlbie(DisasContext *ctx, arg_X_tlbie *a, bool local)
2587
tcg_gen_ld_i32(t1, cpu_env, offsetof(CPUPPCState, tlb_need_flush));
2588
tcg_gen_ori_i32(t1, t1, TLB_NEED_GLOBAL_FLUSH);
2589
tcg_gen_st_i32(t1, cpu_env, offsetof(CPUPPCState, tlb_need_flush));
2590
- tcg_temp_free_i32(t1);
2591
2592
return true;
2593
#endif
2594
diff --git a/target/ppc/translate/vmx-impl.c.inc b/target/ppc/translate/vmx-impl.c.inc
2595
index XXXXXXX..XXXXXXX 100644
2596
--- a/target/ppc/translate/vmx-impl.c.inc
2597
+++ b/target/ppc/translate/vmx-impl.c.inc
2598
@@ -XXX,XX +XXX,XX @@ static void glue(gen_, name)(DisasContext *ctx) \
2599
gen_qemu_ld64_i64(ctx, avr, EA); \
2600
set_avr64(rD(ctx->opcode), avr, false); \
2601
} \
2602
- tcg_temp_free(EA); \
2603
- tcg_temp_free_i64(avr); \
2604
}
2605
2606
#define GEN_VR_STX(name, opc2, opc3) \
2607
@@ -XXX,XX +XXX,XX @@ static void gen_st##name(DisasContext *ctx) \
2608
get_avr64(avr, rD(ctx->opcode), false); \
2609
gen_qemu_st64_i64(ctx, avr, EA); \
2610
} \
2611
- tcg_temp_free(EA); \
2612
- tcg_temp_free_i64(avr); \
2613
}
2614
2615
#define GEN_VR_LVE(name, opc2, opc3, size) \
2616
@@ -XXX,XX +XXX,XX @@ static void gen_lve##name(DisasContext *ctx) \
2617
} \
2618
rs = gen_avr_ptr(rS(ctx->opcode)); \
2619
gen_helper_lve##name(cpu_env, rs, EA); \
2620
- tcg_temp_free(EA); \
2621
- tcg_temp_free_ptr(rs); \
2622
}
2623
2624
#define GEN_VR_STVE(name, opc2, opc3, size) \
2625
@@ -XXX,XX +XXX,XX @@ static void gen_stve##name(DisasContext *ctx) \
2626
} \
2627
rs = gen_avr_ptr(rS(ctx->opcode)); \
2628
gen_helper_stve##name(cpu_env, rs, EA); \
2629
- tcg_temp_free(EA); \
2630
- tcg_temp_free_ptr(rs); \
2631
}
2632
2633
GEN_VR_LDX(lvx, 0x07, 0x03);
2634
@@ -XXX,XX +XXX,XX @@ static void gen_mfvscr(DisasContext *ctx)
2635
gen_helper_mfvscr(t, cpu_env);
2636
tcg_gen_extu_i32_i64(avr, t);
2637
set_avr64(rD(ctx->opcode), avr, false);
2638
- tcg_temp_free_i32(t);
2639
- tcg_temp_free_i64(avr);
2640
}
2641
2642
static void gen_mtvscr(DisasContext *ctx)
2643
@@ -XXX,XX +XXX,XX @@ static void gen_mtvscr(DisasContext *ctx)
2644
2645
tcg_gen_ld_i32(val, cpu_env, bofs);
2646
gen_helper_mtvscr(cpu_env, val);
2647
- tcg_temp_free_i32(val);
2648
}
2649
2650
#define GEN_VX_VMUL10(name, add_cin, ret_carry) \
2651
@@ -XXX,XX +XXX,XX @@ static void glue(gen_, name)(DisasContext *ctx) \
2652
tcg_gen_add_i64(avr, t0, t2); \
2653
set_avr64(rD(ctx->opcode), avr, true); \
2654
} \
2655
- \
2656
- tcg_temp_free_i64(t0); \
2657
- tcg_temp_free_i64(t1); \
2658
- tcg_temp_free_i64(t2); \
2659
- tcg_temp_free_i64(avr); \
2660
- tcg_temp_free_i64(ten); \
2661
- tcg_temp_free_i64(z); \
2662
} \
2663
2664
GEN_VX_VMUL10(vmul10uq, 0, 0);
2665
@@ -XXX,XX +XXX,XX @@ static void glue(gen_, name)(DisasContext *ctx) \
2666
rb = gen_avr_ptr(rB(ctx->opcode)); \
2667
rd = gen_avr_ptr(rD(ctx->opcode)); \
2668
gen_helper_##name(rd, ra, rb); \
2669
- tcg_temp_free_ptr(ra); \
2670
- tcg_temp_free_ptr(rb); \
2671
- tcg_temp_free_ptr(rd); \
2672
}
2673
2674
#define GEN_VXFORM_TRANS(name, opc2, opc3) \
2675
@@ -XXX,XX +XXX,XX @@ static void glue(gen_, name)(DisasContext *ctx) \
2676
rb = gen_avr_ptr(rB(ctx->opcode)); \
2677
rd = gen_avr_ptr(rD(ctx->opcode)); \
2678
gen_helper_##name(cpu_env, rd, ra, rb); \
2679
- tcg_temp_free_ptr(ra); \
2680
- tcg_temp_free_ptr(rb); \
2681
- tcg_temp_free_ptr(rd); \
2682
}
2683
2684
#define GEN_VXFORM3(name, opc2, opc3) \
2685
@@ -XXX,XX +XXX,XX @@ static void glue(gen_, name)(DisasContext *ctx) \
2686
rc = gen_avr_ptr(rC(ctx->opcode)); \
2687
rd = gen_avr_ptr(rD(ctx->opcode)); \
2688
gen_helper_##name(rd, ra, rb, rc); \
2689
- tcg_temp_free_ptr(ra); \
2690
- tcg_temp_free_ptr(rb); \
2691
- tcg_temp_free_ptr(rc); \
2692
- tcg_temp_free_ptr(rd); \
2693
}
2694
2695
/*
2696
@@ -XXX,XX +XXX,XX @@ static void glue(gen_, name)(DisasContext *ctx) \
2697
} \
2698
rb = gen_avr_ptr(rB(ctx->opcode)); \
2699
gen_helper_##name(cpu_gpr[rD(ctx->opcode)], cpu_gpr[rA(ctx->opcode)], rb); \
2700
- tcg_temp_free_ptr(rb); \
2701
}
2702
2703
GEN_VXFORM_V(vaddubm, MO_8, tcg_gen_gvec_add, 0, 0);
2704
@@ -XXX,XX +XXX,XX @@ static void trans_vmrgew(DisasContext *ctx)
2705
get_avr64(avr, VA, false);
2706
tcg_gen_deposit_i64(avr, avr, tmp, 0, 32);
2707
set_avr64(VT, avr, false);
2708
-
2709
- tcg_temp_free_i64(tmp);
2710
- tcg_temp_free_i64(avr);
2711
}
2712
2713
static void trans_vmrgow(DisasContext *ctx)
2714
@@ -XXX,XX +XXX,XX @@ static void trans_vmrgow(DisasContext *ctx)
2715
get_avr64(t1, VA, false);
2716
tcg_gen_deposit_i64(avr, t0, t1, 32, 32);
2717
set_avr64(VT, avr, false);
2718
-
2719
- tcg_temp_free_i64(t0);
2720
- tcg_temp_free_i64(t1);
2721
- tcg_temp_free_i64(avr);
2722
}
2723
2724
/*
2725
@@ -XXX,XX +XXX,XX @@ static void trans_lvsl(DisasContext *ctx)
2726
*/
2727
tcg_gen_addi_i64(result, sh, 0x08090a0b0c0d0e0fULL);
2728
set_avr64(VT, result, false);
2729
-
2730
- tcg_temp_free_i64(result);
2731
- tcg_temp_free_i64(sh);
2732
- tcg_temp_free(EA);
2733
}
2734
2735
/*
2736
@@ -XXX,XX +XXX,XX @@ static void trans_lvsr(DisasContext *ctx)
2737
*/
2738
tcg_gen_subfi_i64(result, 0x18191a1b1c1d1e1fULL, sh);
2739
set_avr64(VT, result, false);
2740
-
2741
- tcg_temp_free_i64(result);
2742
- tcg_temp_free_i64(sh);
2743
- tcg_temp_free(EA);
2744
}
2745
2746
/*
2747
@@ -XXX,XX +XXX,XX @@ static void trans_vsl(DisasContext *ctx)
2748
tcg_gen_shl_i64(avr, avr, sh);
2749
tcg_gen_or_i64(avr, avr, carry);
2750
set_avr64(VT, avr, true);
2751
-
2752
- tcg_temp_free_i64(avr);
2753
- tcg_temp_free_i64(sh);
2754
- tcg_temp_free_i64(carry);
2755
- tcg_temp_free_i64(tmp);
2756
}
2757
2758
/*
2759
@@ -XXX,XX +XXX,XX @@ static void trans_vsr(DisasContext *ctx)
2760
tcg_gen_shr_i64(avr, avr, sh);
2761
tcg_gen_or_i64(avr, avr, carry);
2762
set_avr64(VT, avr, false);
2763
-
2764
- tcg_temp_free_i64(avr);
2765
- tcg_temp_free_i64(sh);
2766
- tcg_temp_free_i64(carry);
2767
- tcg_temp_free_i64(tmp);
2768
}
2769
2770
/*
2771
@@ -XXX,XX +XXX,XX @@ static void trans_vgbbd(DisasContext *ctx)
2772
for (j = 0; j < 2; j++) {
2773
set_avr64(VT, result[j], j);
2774
}
2775
-
2776
- tcg_temp_free_i64(tmp);
2777
- tcg_temp_free_i64(tcg_mask);
2778
- tcg_temp_free_i64(result[0]);
2779
- tcg_temp_free_i64(result[1]);
2780
- tcg_temp_free_i64(avr[0]);
2781
- tcg_temp_free_i64(avr[1]);
2782
}
2783
2784
/*
2785
@@ -XXX,XX +XXX,XX @@ static void trans_vclzw(DisasContext *ctx)
2786
tcg_gen_st_i32(tmp, cpu_env,
2787
offsetof(CPUPPCState, vsr[32 + VT].u64[0]) + i * 4);
2788
}
2789
-
2790
- tcg_temp_free_i32(tmp);
2791
}
2792
2793
/*
2794
@@ -XXX,XX +XXX,XX @@ static void trans_vclzd(DisasContext *ctx)
2795
get_avr64(avr, VB, false);
2796
tcg_gen_clzi_i64(avr, avr, 64);
2797
set_avr64(VT, avr, false);
2798
-
2799
- tcg_temp_free_i64(avr);
2800
}
2801
2802
GEN_VXFORM_V(vmuluwm, MO_32, tcg_gen_gvec_mul, 4, 2);
2803
@@ -XXX,XX +XXX,XX @@ static TCGv_vec do_vrl_mask_vec(unsigned vece, TCGv_vec vrb)
2804
/* negate the mask */
2805
tcg_gen_xor_vec(vece, t0, t0, t2);
2806
2807
- tcg_temp_free_vec(t1);
2808
- tcg_temp_free_vec(t2);
2809
-
2810
return t0;
2811
}
2812
2813
@@ -XXX,XX +XXX,XX @@ static void gen_vrlnm_vec(unsigned vece, TCGv_vec vrt, TCGv_vec vra,
2814
/* Rotate and mask */
2815
tcg_gen_rotlv_vec(vece, vrt, vra, n);
2816
tcg_gen_and_vec(vece, vrt, vrt, mask);
2817
-
2818
- tcg_temp_free_vec(n);
2819
- tcg_temp_free_vec(mask);
2820
}
2821
2822
static bool do_vrlnm(DisasContext *ctx, arg_VX *a, int vece)
2823
@@ -XXX,XX +XXX,XX @@ static void gen_vrlmi_vec(unsigned vece, TCGv_vec vrt, TCGv_vec vra,
2824
/* Rotate and insert */
2825
tcg_gen_rotlv_vec(vece, tmp, vra, n);
2826
tcg_gen_bitsel_vec(vece, vrt, mask, tmp, vrt);
2827
-
2828
- tcg_temp_free_vec(n);
2829
- tcg_temp_free_vec(tmp);
2830
- tcg_temp_free_vec(mask);
2831
}
2832
2833
static bool do_vrlmi(DisasContext *ctx, arg_VX *a, int vece)
2834
@@ -XXX,XX +XXX,XX @@ static bool do_vector_shift_quad(DisasContext *ctx, arg_VX *a, bool right,
2835
}
2836
tcg_gen_or_i64(hi, hi, lo);
2837
set_avr64(a->vrt, hi, !right);
2838
-
2839
- tcg_temp_free_i64(hi);
2840
- tcg_temp_free_i64(lo);
2841
- tcg_temp_free_i64(t0);
2842
- tcg_temp_free_i64(t1);
2843
- tcg_temp_free_i64(n);
2844
-
2845
return true;
2846
}
2847
2848
@@ -XXX,XX +XXX,XX @@ static void do_vrlq_mask(TCGv_i64 mh, TCGv_i64 ml, TCGv_i64 b, TCGv_i64 e)
2849
2850
tcg_gen_xor_i64(mh, mh, t0);
2851
tcg_gen_xor_i64(ml, ml, t0);
2852
-
2853
- tcg_temp_free_i64(th);
2854
- tcg_temp_free_i64(tl);
2855
- tcg_temp_free_i64(t0);
2856
- tcg_temp_free_i64(t1);
2857
}
2858
2859
static bool do_vector_rotl_quad(DisasContext *ctx, arg_VX *a, bool mask,
2860
@@ -XXX,XX +XXX,XX @@ static bool do_vector_rotl_quad(DisasContext *ctx, arg_VX *a, bool mask,
2861
2862
set_avr64(a->vrt, t0, true);
2863
set_avr64(a->vrt, t1, false);
2864
-
2865
- tcg_temp_free_i64(ah);
2866
- tcg_temp_free_i64(al);
2867
- tcg_temp_free_i64(vrb);
2868
- tcg_temp_free_i64(n);
2869
- tcg_temp_free_i64(t0);
2870
- tcg_temp_free_i64(t1);
2871
-
2872
return true;
2873
}
2874
2875
@@ -XXX,XX +XXX,XX @@ static void glue(glue(gen_, NAME), _vec)(unsigned vece, TCGv_vec t, \
2876
glue(glue(tcg_gen_, SAT), _vec)(VECE, t, a, b); \
2877
tcg_gen_cmp_vec(TCG_COND_NE, VECE, x, x, t); \
2878
tcg_gen_or_vec(VECE, sat, sat, x); \
2879
- tcg_temp_free_vec(x); \
2880
} \
2881
static void glue(gen_, NAME)(DisasContext *ctx) \
2882
{ \
2883
@@ -XXX,XX +XXX,XX @@ static void glue(gen_, name)(DisasContext *ctx) \
2884
rb = gen_avr_ptr(rB(ctx->opcode)); \
2885
rd = gen_avr_ptr(rD(ctx->opcode)); \
2886
gen_helper_##opname(cpu_env, rd, ra, rb); \
2887
- tcg_temp_free_ptr(ra); \
2888
- tcg_temp_free_ptr(rb); \
2889
- tcg_temp_free_ptr(rd); \
2890
}
2891
2892
#define GEN_VXRFORM(name, opc2, opc3) \
2893
@@ -XXX,XX +XXX,XX @@ static void do_vcmp_rc(int vrt)
2894
2895
tcg_gen_or_i64(tmp, set, clr);
2896
tcg_gen_extrl_i64_i32(cpu_crf[6], tmp);
2897
-
2898
- tcg_temp_free_i64(tmp);
2899
- tcg_temp_free_i64(set);
2900
- tcg_temp_free_i64(clr);
2901
}
2902
2903
static bool do_vcmp(DisasContext *ctx, arg_VC *a, TCGCond cond, int vece)
2904
@@ -XXX,XX +XXX,XX @@ static void gen_vcmpnez_vec(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b)
2905
2906
tcg_gen_or_vec(vece, t, t, t0);
2907
tcg_gen_or_vec(vece, t, t, t1);
2908
-
2909
- tcg_temp_free_vec(t0);
2910
- tcg_temp_free_vec(t1);
2911
}
2912
2913
static bool do_vcmpnez(DisasContext *ctx, arg_VC *a, int vece)
2914
@@ -XXX,XX +XXX,XX @@ static bool trans_VCMPEQUQ(DisasContext *ctx, arg_VC *a)
2915
tcg_gen_andi_i32(cpu_crf[6], cpu_crf[6], 0xa);
2916
tcg_gen_xori_i32(cpu_crf[6], cpu_crf[6], 0x2);
2917
}
2918
-
2919
- tcg_temp_free_i64(t0);
2920
- tcg_temp_free_i64(t1);
2921
- tcg_temp_free_i64(t2);
2922
-
2923
return true;
2924
}
2925
2926
@@ -XXX,XX +XXX,XX @@ static bool do_vcmpgtq(DisasContext *ctx, arg_VC *a, bool sign)
2927
tcg_gen_andi_i32(cpu_crf[6], cpu_crf[6], 0xa);
2928
tcg_gen_xori_i32(cpu_crf[6], cpu_crf[6], 0x2);
2929
}
2930
-
2931
- tcg_temp_free_i64(t0);
2932
- tcg_temp_free_i64(t1);
2933
- tcg_temp_free_i64(t2);
2934
-
2935
return true;
2936
}
2937
2938
@@ -XXX,XX +XXX,XX @@ static bool do_vcmpq(DisasContext *ctx, arg_VX_bf *a, bool sign)
2939
tcg_gen_br(done);
2940
2941
gen_set_label(done);
2942
- tcg_temp_free_i64(vra);
2943
- tcg_temp_free_i64(vrb);
2944
-
2945
return true;
2946
}
2947
2948
@@ -XXX,XX +XXX,XX @@ static void glue(gen_, name)(DisasContext *ctx) \
2949
rb = gen_avr_ptr(rB(ctx->opcode)); \
2950
rd = gen_avr_ptr(rD(ctx->opcode)); \
2951
gen_helper_##name(rd, rb); \
2952
- tcg_temp_free_ptr(rb); \
2953
- tcg_temp_free_ptr(rd); \
2954
}
2955
2956
#define GEN_VXFORM_NOA_ENV(name, opc2, opc3) \
2957
@@ -XXX,XX +XXX,XX @@ static void glue(gen_, name)(DisasContext *ctx) \
2958
rb = gen_avr_ptr(rB(ctx->opcode)); \
2959
rd = gen_avr_ptr(rD(ctx->opcode)); \
2960
gen_helper_##name(cpu_env, rd, rb); \
2961
- tcg_temp_free_ptr(rb); \
2962
- tcg_temp_free_ptr(rd); \
2963
}
2964
2965
#define GEN_VXFORM_NOA_2(name, opc2, opc3, opc4) \
2966
@@ -XXX,XX +XXX,XX @@ static void glue(gen_, name)(DisasContext *ctx) \
2967
rb = gen_avr_ptr(rB(ctx->opcode)); \
2968
rd = gen_avr_ptr(rD(ctx->opcode)); \
2969
gen_helper_##name(rd, rb); \
2970
- tcg_temp_free_ptr(rb); \
2971
- tcg_temp_free_ptr(rd); \
2972
}
2973
2974
#define GEN_VXFORM_NOA_3(name, opc2, opc3, opc4) \
2975
@@ -XXX,XX +XXX,XX @@ static void glue(gen_, name)(DisasContext *ctx) \
2976
} \
2977
rb = gen_avr_ptr(rB(ctx->opcode)); \
2978
gen_helper_##name(cpu_gpr[rD(ctx->opcode)], rb); \
2979
- tcg_temp_free_ptr(rb); \
2980
}
2981
GEN_VXFORM_NOA(vupkhsb, 7, 8);
2982
GEN_VXFORM_NOA(vupkhsh, 7, 9);
2983
@@ -XXX,XX +XXX,XX @@ static void gen_vprtyb_vec(unsigned vece, TCGv_vec t, TCGv_vec b)
2984
tcg_gen_xor_vec(vece, b, tmp, b);
2985
}
2986
tcg_gen_and_vec(vece, t, b, tcg_constant_vec_matching(t, vece, 1));
2987
- tcg_temp_free_vec(tmp);
2988
}
2989
2990
/* vprtybw */
2991
@@ -XXX,XX +XXX,XX @@ static void glue(gen_, name)(DisasContext *ctx) \
2992
rb = gen_avr_ptr(rB(ctx->opcode)); \
2993
rd = gen_avr_ptr(rD(ctx->opcode)); \
2994
gen_helper_##name(cpu_env, rd, rb, uimm); \
2995
- tcg_temp_free_i32(uimm); \
2996
- tcg_temp_free_ptr(rb); \
2997
- tcg_temp_free_ptr(rd); \
2998
}
2999
3000
#define GEN_VXFORM_UIMM_SPLAT(name, opc2, opc3, splat_max) \
3001
@@ -XXX,XX +XXX,XX @@ static void glue(gen_, name)(DisasContext *ctx) \
3002
rb = gen_avr_ptr(rB(ctx->opcode)); \
3003
rd = gen_avr_ptr(rD(ctx->opcode)); \
3004
gen_helper_##name(rd, rb, t0); \
3005
- tcg_temp_free_i32(t0); \
3006
- tcg_temp_free_ptr(rb); \
3007
- tcg_temp_free_ptr(rd); \
3008
}
3009
3010
GEN_VXFORM_VSPLT(vspltb, MO_8, 6, 8);
3011
@@ -XXX,XX +XXX,XX @@ static bool trans_VGNB(DisasContext *ctx, arg_VX_n *a)
3012
tcg_gen_shri_i64(lo, lo, nbits);
3013
tcg_gen_or_i64(hi, hi, lo);
3014
tcg_gen_trunc_i64_tl(cpu_gpr[a->rt], hi);
3015
-
3016
- tcg_temp_free_i64(hi);
3017
- tcg_temp_free_i64(lo);
3018
- tcg_temp_free_i64(t0);
3019
- tcg_temp_free_i64(t1);
3020
-
3021
return true;
3022
}
3023
3024
@@ -XXX,XX +XXX,XX @@ static bool do_vextdx(DisasContext *ctx, arg_VA *a, int size, bool right,
3025
tcg_gen_subfi_tl(rc, 32 - size, rc);
3026
}
3027
gen_helper(cpu_env, vrt, vra, vrb, rc);
3028
-
3029
- tcg_temp_free_ptr(vrt);
3030
- tcg_temp_free_ptr(vra);
3031
- tcg_temp_free_ptr(vrb);
3032
- tcg_temp_free(rc);
3033
return true;
3034
}
3035
3036
@@ -XXX,XX +XXX,XX @@ static bool do_vinsx(DisasContext *ctx, int vrt, int size, bool right, TCGv ra,
3037
}
3038
3039
gen_helper(cpu_env, t, rb, idx);
3040
-
3041
- tcg_temp_free_ptr(t);
3042
- tcg_temp_free(idx);
3043
-
3044
return true;
3045
}
3046
3047
static bool do_vinsvx(DisasContext *ctx, int vrt, int size, bool right, TCGv ra,
3048
int vrb, void (*gen_helper)(TCGv_ptr, TCGv_ptr, TCGv_i64, TCGv))
3049
{
3050
- bool ok;
3051
TCGv_i64 val;
3052
3053
val = tcg_temp_new_i64();
3054
get_avr64(val, vrb, true);
3055
- ok = do_vinsx(ctx, vrt, size, right, ra, val, gen_helper);
3056
-
3057
- tcg_temp_free_i64(val);
3058
- return ok;
3059
+ return do_vinsx(ctx, vrt, size, right, ra, val, gen_helper);
3060
}
3061
3062
static bool do_vinsx_VX(DisasContext *ctx, arg_VX *a, int size, bool right,
3063
void (*gen_helper)(TCGv_ptr, TCGv_ptr, TCGv_i64, TCGv))
3064
{
3065
- bool ok;
3066
TCGv_i64 val;
3067
3068
REQUIRE_INSNS_FLAGS2(ctx, ISA310);
3069
@@ -XXX,XX +XXX,XX @@ static bool do_vinsx_VX(DisasContext *ctx, arg_VX *a, int size, bool right,
3070
val = tcg_temp_new_i64();
3071
tcg_gen_extu_tl_i64(val, cpu_gpr[a->vrb]);
3072
3073
- ok = do_vinsx(ctx, a->vrt, size, right, cpu_gpr[a->vra], val, gen_helper);
3074
-
3075
- tcg_temp_free_i64(val);
3076
- return ok;
3077
+ return do_vinsx(ctx, a->vrt, size, right, cpu_gpr[a->vra], val, gen_helper);
3078
}
3079
3080
static bool do_vinsvx_VX(DisasContext *ctx, arg_VX *a, int size, bool right,
3081
@@ -XXX,XX +XXX,XX @@ static bool do_vinsvx_VX(DisasContext *ctx, arg_VX *a, int size, bool right,
3082
static bool do_vins_VX_uim4(DisasContext *ctx, arg_VX_uim4 *a, int size,
3083
void (*gen_helper)(TCGv_ptr, TCGv_ptr, TCGv_i64, TCGv))
3084
{
3085
- bool ok;
3086
TCGv_i64 val;
3087
3088
REQUIRE_INSNS_FLAGS2(ctx, ISA310);
3089
@@ -XXX,XX +XXX,XX @@ static bool do_vins_VX_uim4(DisasContext *ctx, arg_VX_uim4 *a, int size,
3090
val = tcg_temp_new_i64();
3091
tcg_gen_extu_tl_i64(val, cpu_gpr[a->vrb]);
3092
3093
- ok = do_vinsx(ctx, a->vrt, size, false, tcg_constant_tl(a->uim), val,
3094
- gen_helper);
3095
-
3096
- tcg_temp_free_i64(val);
3097
- return ok;
3098
+ return do_vinsx(ctx, a->vrt, size, false, tcg_constant_tl(a->uim), val,
3099
+ gen_helper);
3100
}
3101
3102
static bool do_vinsert_VX_uim4(DisasContext *ctx, arg_VX_uim4 *a, int size,
3103
@@ -XXX,XX +XXX,XX @@ static void gen_vsldoi(DisasContext *ctx)
3104
rd = gen_avr_ptr(rD(ctx->opcode));
3105
sh = tcg_const_i32(VSH(ctx->opcode));
3106
gen_helper_vsldoi(rd, ra, rb, sh);
3107
- tcg_temp_free_ptr(ra);
3108
- tcg_temp_free_ptr(rb);
3109
- tcg_temp_free_ptr(rd);
3110
- tcg_temp_free_i32(sh);
3111
}
3112
3113
static bool trans_VSLDBI(DisasContext *ctx, arg_VN *a)
3114
@@ -XXX,XX +XXX,XX @@ static bool trans_VSLDBI(DisasContext *ctx, arg_VN *a)
3115
3116
tcg_gen_extract2_i64(t0, t1, t0, 64 - a->sh);
3117
tcg_gen_extract2_i64(t1, t2, t1, 64 - a->sh);
3118
-
3119
- tcg_temp_free_i64(t2);
3120
}
3121
3122
set_avr64(a->vrt, t0, true);
3123
set_avr64(a->vrt, t1, false);
3124
-
3125
- tcg_temp_free_i64(t0);
3126
- tcg_temp_free_i64(t1);
3127
-
3128
return true;
3129
}
3130
3131
@@ -XXX,XX +XXX,XX @@ static bool trans_VSRDBI(DisasContext *ctx, arg_VN *a)
3132
3133
tcg_gen_extract2_i64(t0, t0, t1, a->sh);
3134
tcg_gen_extract2_i64(t1, t1, t2, a->sh);
3135
-
3136
- tcg_temp_free_i64(t2);
3137
}
3138
3139
set_avr64(a->vrt, t0, false);
3140
set_avr64(a->vrt, t1, true);
3141
-
3142
- tcg_temp_free_i64(t0);
3143
- tcg_temp_free_i64(t1);
3144
-
3145
return true;
3146
}
3147
3148
@@ -XXX,XX +XXX,XX @@ static bool trans_VEXPANDQM(DisasContext *ctx, arg_VX_tb *a)
3149
tcg_gen_sari_i64(tmp, tmp, 63);
3150
set_avr64(a->vrt, tmp, false);
3151
set_avr64(a->vrt, tmp, true);
3152
-
3153
- tcg_temp_free_i64(tmp);
3154
return true;
3155
}
3156
3157
@@ -XXX,XX +XXX,XX @@ static bool do_vextractm(DisasContext *ctx, arg_VX_tb *a, unsigned vece)
3158
tcg_gen_shri_i64(hi, hi, 64 - elem_count_half);
3159
tcg_gen_extract2_i64(lo, lo, hi, 64 - elem_count_half);
3160
tcg_gen_trunc_i64_tl(cpu_gpr[a->vrt], lo);
3161
-
3162
- tcg_temp_free_i64(hi);
3163
- tcg_temp_free_i64(lo);
3164
- tcg_temp_free_i64(t0);
3165
- tcg_temp_free_i64(t1);
3166
-
3167
return true;
3168
}
3169
3170
@@ -XXX,XX +XXX,XX @@ static bool trans_VEXTRACTQM(DisasContext *ctx, arg_VX_tb *a)
3171
get_avr64(tmp, a->vrb, true);
3172
tcg_gen_shri_i64(tmp, tmp, 63);
3173
tcg_gen_trunc_i64_tl(cpu_gpr[a->vrt], tmp);
3174
-
3175
- tcg_temp_free_i64(tmp);
3176
-
3177
return true;
3178
}
3179
3180
@@ -XXX,XX +XXX,XX @@ static bool do_mtvsrm(DisasContext *ctx, arg_VX_tb *a, unsigned vece)
3181
3182
set_avr64(a->vrt, lo, false);
3183
set_avr64(a->vrt, hi, true);
3184
-
3185
- tcg_temp_free_i64(hi);
3186
- tcg_temp_free_i64(lo);
3187
- tcg_temp_free_i64(t0);
3188
- tcg_temp_free_i64(t1);
3189
-
3190
return true;
3191
}
3192
3193
@@ -XXX,XX +XXX,XX @@ static bool trans_MTVSRQM(DisasContext *ctx, arg_VX_tb *a)
3194
tcg_gen_sextract_i64(tmp, tmp, 0, 1);
3195
set_avr64(a->vrt, tmp, false);
3196
set_avr64(a->vrt, tmp, true);
3197
-
3198
- tcg_temp_free_i64(tmp);
3199
-
3200
return true;
3201
}
3202
3203
@@ -XXX,XX +XXX,XX @@ static bool do_vcntmb(DisasContext *ctx, arg_VX_mp *a, int vece)
3204
3205
tcg_gen_shli_i64(rt, rt, TARGET_LONG_BITS - 8 + vece);
3206
tcg_gen_trunc_i64_tl(cpu_gpr[a->rt], rt);
3207
-
3208
- tcg_temp_free_i64(vrb);
3209
- tcg_temp_free_i64(rt);
3210
-
3211
return true;
3212
}
3213
3214
@@ -XXX,XX +XXX,XX @@ static bool do_vstri(DisasContext *ctx, arg_VX_tb_rc *a,
3215
} else {
3216
TCGv_i32 discard = tcg_temp_new_i32();
3217
gen_helper(discard, vrt, vrb);
3218
- tcg_temp_free_i32(discard);
3219
}
3220
-
3221
- tcg_temp_free_ptr(vrt);
3222
- tcg_temp_free_ptr(vrb);
3223
-
3224
return true;
3225
}
3226
3227
@@ -XXX,XX +XXX,XX @@ static bool do_vclrb(DisasContext *ctx, arg_VX *a, bool right)
3228
get_avr64(tmp, a->vra, false);
3229
tcg_gen_and_i64(tmp, tmp, ml);
3230
set_avr64(a->vrt, tmp, false);
3231
-
3232
- tcg_temp_free_i64(rb);
3233
- tcg_temp_free_i64(mh);
3234
- tcg_temp_free_i64(ml);
3235
- tcg_temp_free_i64(tmp);
3236
-
3237
return true;
3238
}
3239
3240
@@ -XXX,XX +XXX,XX @@ static void glue(gen_, name0##_##name1)(DisasContext *ctx) \
3241
} else { \
3242
gen_helper_##name0(cpu_env, rd, ra, rb, rc); \
3243
} \
3244
- tcg_temp_free_ptr(ra); \
3245
- tcg_temp_free_ptr(rb); \
3246
- tcg_temp_free_ptr(rc); \
3247
- tcg_temp_free_ptr(rd); \
3248
}
3249
3250
GEN_VAFORM_PAIRED(vmaddfp, vnmsubfp, 23)
3251
@@ -XXX,XX +XXX,XX @@ static bool do_va_helper(DisasContext *ctx, arg_VA *a,
3252
vrb = gen_avr_ptr(a->vrb);
3253
vrc = gen_avr_ptr(a->rc);
3254
gen_helper(vrt, vra, vrb, vrc);
3255
- tcg_temp_free_ptr(vrt);
3256
- tcg_temp_free_ptr(vra);
3257
- tcg_temp_free_ptr(vrb);
3258
- tcg_temp_free_ptr(vrc);
3259
-
3260
return true;
3261
}
3262
3263
@@ -XXX,XX +XXX,XX @@ static bool do_va_env_helper(DisasContext *ctx, arg_VA *a,
3264
vrb = gen_avr_ptr(a->vrb);
3265
vrc = gen_avr_ptr(a->rc);
3266
gen_helper(cpu_env, vrt, vra, vrb, vrc);
3267
- tcg_temp_free_ptr(vrt);
3268
- tcg_temp_free_ptr(vra);
3269
- tcg_temp_free_ptr(vrb);
3270
- tcg_temp_free_ptr(vrc);
3271
-
3272
return true;
3273
}
3274
3275
@@ -XXX,XX +XXX,XX @@ static bool trans_VEXTSD2Q(DisasContext *ctx, arg_VX_tb *a)
3276
set_avr64(a->vrt, tmp, false);
3277
tcg_gen_sari_i64(tmp, tmp, 63);
3278
set_avr64(a->vrt, tmp, true);
3279
-
3280
- tcg_temp_free_i64(tmp);
3281
return true;
3282
}
3283
3284
@@ -XXX,XX +XXX,XX @@ static void gen_##op(DisasContext *ctx) \
3285
ps = tcg_const_i32((ctx->opcode & 0x200) != 0); \
3286
\
3287
gen_helper_##op(cpu_crf[6], rd, ra, rb, ps); \
3288
- \
3289
- tcg_temp_free_ptr(ra); \
3290
- tcg_temp_free_ptr(rb); \
3291
- tcg_temp_free_ptr(rd); \
3292
- tcg_temp_free_i32(ps); \
3293
}
3294
3295
#define GEN_BCD2(op) \
3296
@@ -XXX,XX +XXX,XX @@ static void gen_##op(DisasContext *ctx) \
3297
ps = tcg_const_i32((ctx->opcode & 0x200) != 0); \
3298
\
3299
gen_helper_##op(cpu_crf[6], rd, rb, ps); \
3300
- \
3301
- tcg_temp_free_ptr(rb); \
3302
- tcg_temp_free_ptr(rd); \
3303
- tcg_temp_free_i32(ps); \
3304
}
3305
3306
GEN_BCD(bcdadd)
3307
@@ -XXX,XX +XXX,XX @@ static void gen_vsbox(DisasContext *ctx)
3308
ra = gen_avr_ptr(rA(ctx->opcode));
3309
rd = gen_avr_ptr(rD(ctx->opcode));
3310
gen_helper_vsbox(rd, ra);
3311
- tcg_temp_free_ptr(ra);
3312
- tcg_temp_free_ptr(rd);
3313
}
3314
3315
GEN_VXFORM(vcipher, 4, 20)
3316
@@ -XXX,XX +XXX,XX @@ static void gen_##op(DisasContext *ctx) \
3317
rd = gen_avr_ptr(rD(ctx->opcode)); \
3318
st_six = tcg_const_i32(rB(ctx->opcode)); \
3319
gen_helper_##op(rd, ra, st_six); \
3320
- tcg_temp_free_ptr(ra); \
3321
- tcg_temp_free_ptr(rd); \
3322
- tcg_temp_free_i32(st_six); \
3323
}
3324
3325
VSHASIGMA(vshasigmaw)
3326
@@ -XXX,XX +XXX,XX @@ static bool trans_VMSUMUDM(DisasContext *ctx, arg_VA *a)
3327
3328
set_avr64(a->vrt, rl, false);
3329
set_avr64(a->vrt, rh, true);
3330
-
3331
- tcg_temp_free_i64(rl);
3332
- tcg_temp_free_i64(rh);
3333
- tcg_temp_free_i64(src1);
3334
- tcg_temp_free_i64(src2);
3335
-
3336
return true;
3337
}
3338
3339
@@ -XXX,XX +XXX,XX @@ static bool trans_VMSUMCUD(DisasContext *ctx, arg_VA *a)
3340
/* Discard 64 more bits to complete the CHOP128(temp >> 128) */
3341
set_avr64(a->vrt, tmp0, false);
3342
set_avr64(a->vrt, zero, true);
3343
-
3344
- tcg_temp_free_i64(tmp0);
3345
- tcg_temp_free_i64(tmp1);
3346
- tcg_temp_free_i64(prod1h);
3347
- tcg_temp_free_i64(prod1l);
3348
- tcg_temp_free_i64(prod0h);
3349
- tcg_temp_free_i64(prod0l);
3350
-
3351
return true;
3352
}
3353
3354
@@ -XXX,XX +XXX,XX @@ static bool do_vx_helper(DisasContext *ctx, arg_VX *a,
3355
rb = gen_avr_ptr(a->vrb);
3356
rd = gen_avr_ptr(a->vrt);
3357
gen_helper(rd, ra, rb);
3358
- tcg_temp_free_ptr(ra);
3359
- tcg_temp_free_ptr(rb);
3360
- tcg_temp_free_ptr(rd);
3361
-
3362
return true;
3363
}
3364
3365
@@ -XXX,XX +XXX,XX @@ static bool do_vx_vmuleo(DisasContext *ctx, arg_VX *a, bool even,
3366
gen_mul(vrt0, vrt1, vra, vrb);
3367
set_avr64(a->vrt, vrt0, false);
3368
set_avr64(a->vrt, vrt1, true);
3369
-
3370
- tcg_temp_free_i64(vra);
3371
- tcg_temp_free_i64(vrb);
3372
- tcg_temp_free_i64(vrt0);
3373
- tcg_temp_free_i64(vrt1);
3374
-
3375
return true;
3376
}
3377
3378
@@ -XXX,XX +XXX,XX @@ static void do_vx_vmulhw_i64(TCGv_i64 t, TCGv_i64 a, TCGv_i64 b, bool sign)
3379
3380
tcg_gen_shri_i64(lh, lh, 32);
3381
tcg_gen_deposit_i64(t, hh, lh, 0, 32);
3382
-
3383
- tcg_temp_free_i64(hh);
3384
- tcg_temp_free_i64(lh);
3385
- tcg_temp_free_i64(temp);
3386
}
3387
3388
static void do_vx_vmulhd_i64(TCGv_i64 t, TCGv_i64 a, TCGv_i64 b, bool sign)
3389
@@ -XXX,XX +XXX,XX @@ static void do_vx_vmulhd_i64(TCGv_i64 t, TCGv_i64 a, TCGv_i64 b, bool sign)
3390
} else {
3391
tcg_gen_mulu2_i64(tlow, t, a, b);
3392
}
3393
-
3394
- tcg_temp_free_i64(tlow);
3395
}
3396
3397
static bool do_vx_mulh(DisasContext *ctx, arg_VX *a, bool sign,
3398
@@ -XXX,XX +XXX,XX @@ static bool do_vx_mulh(DisasContext *ctx, arg_VX *a, bool sign,
3399
3400
set_avr64(a->vrt, vrt, i);
3401
}
3402
-
3403
- tcg_temp_free_i64(vra);
3404
- tcg_temp_free_i64(vrb);
3405
- tcg_temp_free_i64(vrt);
3406
-
3407
return true;
3408
-
3409
}
3410
3411
TRANS(VMULHSW, do_vx_mulh, true , do_vx_vmulhw_i64)
3412
@@ -XXX,XX +XXX,XX @@ static void do_vavg(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b,
3413
gen_shr_vec(vece, b, b, 1);
3414
tcg_gen_add_vec(vece, t, a, b);
3415
tcg_gen_add_vec(vece, t, t, tmp);
3416
- tcg_temp_free_vec(tmp);
3417
}
3418
3419
QEMU_FLATTEN
3420
@@ -XXX,XX +XXX,XX @@ static void NAME(TCGv_i32 t, TCGv_i32 a, TCGv_i32 b) \
3421
tcg_gen_movi_i32(t1, 0); \
3422
tcg_gen_movcond_i32(TCG_COND_NE, b, t0, t1, t0, b); \
3423
DIV(t, a, b); \
3424
- tcg_temp_free_i32(t0); \
3425
- tcg_temp_free_i32(t1); \
3426
}
3427
3428
#define DIVU64(NAME, DIV) \
3429
@@ -XXX,XX +XXX,XX @@ static void NAME(TCGv_i64 t, TCGv_i64 a, TCGv_i64 b) \
3430
tcg_gen_movi_i64(t1, 0); \
3431
tcg_gen_movcond_i64(TCG_COND_NE, b, t0, t1, t0, b); \
3432
DIV(t, a, b); \
3433
- tcg_temp_free_i64(t0); \
3434
- tcg_temp_free_i64(t1); \
3435
}
3436
3437
DIVS32(do_divsw, tcg_gen_div_i32)
3438
@@ -XXX,XX +XXX,XX @@ static void do_dives_i32(TCGv_i32 t, TCGv_i32 a, TCGv_i32 b)
3439
3440
/* if quotient doesn't fit in 32 bits the result is undefined */
3441
tcg_gen_extrl_i64_i32(t, val1);
3442
-
3443
- tcg_temp_free_i64(val1);
3444
- tcg_temp_free_i64(val2);
3445
}
3446
3447
static void do_diveu_i32(TCGv_i32 t, TCGv_i32 a, TCGv_i32 b)
3448
@@ -XXX,XX +XXX,XX @@ static void do_diveu_i32(TCGv_i32 t, TCGv_i32 a, TCGv_i32 b)
3449
3450
/* if quotient doesn't fit in 32 bits the result is undefined */
3451
tcg_gen_extrl_i64_i32(t, val1);
3452
-
3453
- tcg_temp_free_i64(val1);
3454
- tcg_temp_free_i64(val2);
3455
}
3456
3457
DIVS32(do_divesw, do_dives_i32)
3458
diff --git a/target/ppc/translate/vsx-impl.c.inc b/target/ppc/translate/vsx-impl.c.inc
3459
index XXXXXXX..XXXXXXX 100644
3460
--- a/target/ppc/translate/vsx-impl.c.inc
3461
+++ b/target/ppc/translate/vsx-impl.c.inc
3462
@@ -XXX,XX +XXX,XX @@ static void gen_##name(DisasContext *ctx) \
3463
gen_qemu_##operation(ctx, t0, EA); \
3464
set_cpu_vsr(xT(ctx->opcode), t0, true); \
3465
/* NOTE: cpu_vsrl is undefined */ \
3466
- tcg_temp_free(EA); \
3467
- tcg_temp_free_i64(t0); \
3468
}
3469
3470
VSX_LOAD_SCALAR(lxsdx, ld64_i64)
3471
@@ -XXX,XX +XXX,XX @@ static void gen_lxvd2x(DisasContext *ctx)
3472
tcg_gen_addi_tl(EA, EA, 8);
3473
gen_qemu_ld64_i64(ctx, t0, EA);
3474
set_cpu_vsr(xT(ctx->opcode), t0, false);
3475
- tcg_temp_free(EA);
3476
- tcg_temp_free_i64(t0);
3477
}
3478
3479
static void gen_lxvw4x(DisasContext *ctx)
3480
@@ -XXX,XX +XXX,XX @@ static void gen_lxvw4x(DisasContext *ctx)
3481
tcg_gen_qemu_ld_i64(t0, EA, ctx->mem_idx, MO_LEUQ);
3482
tcg_gen_shri_i64(t1, t0, 32);
3483
tcg_gen_deposit_i64(xtl, t1, t0, 32, 32);
3484
- tcg_temp_free_i64(t0);
3485
- tcg_temp_free_i64(t1);
3486
} else {
3487
tcg_gen_qemu_ld_i64(xth, EA, ctx->mem_idx, MO_BEUQ);
3488
tcg_gen_addi_tl(EA, EA, 8);
3489
@@ -XXX,XX +XXX,XX @@ static void gen_lxvw4x(DisasContext *ctx)
3490
}
3491
set_cpu_vsr(xT(ctx->opcode), xth, true);
3492
set_cpu_vsr(xT(ctx->opcode), xtl, false);
3493
- tcg_temp_free(EA);
3494
- tcg_temp_free_i64(xth);
3495
- tcg_temp_free_i64(xtl);
3496
}
3497
3498
static void gen_lxvwsx(DisasContext *ctx)
3499
@@ -XXX,XX +XXX,XX @@ static void gen_lxvwsx(DisasContext *ctx)
3500
data = tcg_temp_new_i32();
3501
tcg_gen_qemu_ld_i32(data, EA, ctx->mem_idx, DEF_MEMOP(MO_UL));
3502
tcg_gen_gvec_dup_i32(MO_UL, vsr_full_offset(xT(ctx->opcode)), 16, 16, data);
3503
-
3504
- tcg_temp_free(EA);
3505
- tcg_temp_free_i32(data);
3506
}
3507
3508
static void gen_lxvdsx(DisasContext *ctx)
3509
@@ -XXX,XX +XXX,XX @@ static void gen_lxvdsx(DisasContext *ctx)
3510
data = tcg_temp_new_i64();
3511
tcg_gen_qemu_ld_i64(data, EA, ctx->mem_idx, DEF_MEMOP(MO_UQ));
3512
tcg_gen_gvec_dup_i64(MO_UQ, vsr_full_offset(xT(ctx->opcode)), 16, 16, data);
3513
-
3514
- tcg_temp_free(EA);
3515
- tcg_temp_free_i64(data);
3516
}
3517
3518
static void gen_bswap16x8(TCGv_i64 outh, TCGv_i64 outl,
3519
@@ -XXX,XX +XXX,XX @@ static void gen_bswap16x8(TCGv_i64 outh, TCGv_i64 outl,
3520
tcg_gen_shri_i64(t1, inl, 8);
3521
tcg_gen_and_i64(t1, t1, mask);
3522
tcg_gen_or_i64(outl, t0, t1);
3523
-
3524
- tcg_temp_free_i64(t0);
3525
- tcg_temp_free_i64(t1);
3526
- tcg_temp_free_i64(mask);
3527
}
3528
3529
static void gen_bswap32x4(TCGv_i64 outh, TCGv_i64 outl,
3530
@@ -XXX,XX +XXX,XX @@ static void gen_bswap32x4(TCGv_i64 outh, TCGv_i64 outl,
3531
tcg_gen_deposit_i64(outh, outh, hi, 32, 32);
3532
tcg_gen_shri_i64(outl, lo, 32);
3533
tcg_gen_deposit_i64(outl, outl, lo, 32, 32);
3534
-
3535
- tcg_temp_free_i64(hi);
3536
- tcg_temp_free_i64(lo);
3537
}
3538
+
3539
static void gen_lxvh8x(DisasContext *ctx)
3540
{
3541
TCGv EA;
3542
@@ -XXX,XX +XXX,XX @@ static void gen_lxvh8x(DisasContext *ctx)
3543
}
3544
set_cpu_vsr(xT(ctx->opcode), xth, true);
3545
set_cpu_vsr(xT(ctx->opcode), xtl, false);
3546
- tcg_temp_free(EA);
3547
- tcg_temp_free_i64(xth);
3548
- tcg_temp_free_i64(xtl);
3549
}
3550
3551
static void gen_lxvb16x(DisasContext *ctx)
3552
@@ -XXX,XX +XXX,XX @@ static void gen_lxvb16x(DisasContext *ctx)
3553
tcg_gen_qemu_ld_i64(xtl, EA, ctx->mem_idx, MO_BEUQ);
3554
set_cpu_vsr(xT(ctx->opcode), xth, true);
3555
set_cpu_vsr(xT(ctx->opcode), xtl, false);
3556
- tcg_temp_free(EA);
3557
- tcg_temp_free_i64(xth);
3558
- tcg_temp_free_i64(xtl);
3559
}
3560
3561
#ifdef TARGET_PPC64
3562
@@ -XXX,XX +XXX,XX @@ static void gen_##name(DisasContext *ctx) \
3563
gen_set_access_type(ctx, ACCESS_INT); \
3564
gen_addr_register(ctx, EA); \
3565
gen_helper_##name(cpu_env, EA, xt, cpu_gpr[rB(ctx->opcode)]); \
3566
- tcg_temp_free(EA); \
3567
- tcg_temp_free_ptr(xt); \
3568
}
3569
3570
VSX_VECTOR_LOAD_STORE_LENGTH(lxvl)
3571
@@ -XXX,XX +XXX,XX @@ static void gen_##name(DisasContext *ctx) \
3572
gen_addr_reg_index(ctx, EA); \
3573
get_cpu_vsr(t0, xS(ctx->opcode), true); \
3574
gen_qemu_##operation(ctx, t0, EA); \
3575
- tcg_temp_free(EA); \
3576
- tcg_temp_free_i64(t0); \
3577
}
3578
3579
VSX_STORE_SCALAR(stxsdx, st64_i64)
3580
@@ -XXX,XX +XXX,XX @@ static void gen_stxvd2x(DisasContext *ctx)
3581
tcg_gen_addi_tl(EA, EA, 8);
3582
get_cpu_vsr(t0, xS(ctx->opcode), false);
3583
gen_qemu_st64_i64(ctx, t0, EA);
3584
- tcg_temp_free(EA);
3585
- tcg_temp_free_i64(t0);
3586
}
3587
3588
static void gen_stxvw4x(DisasContext *ctx)
3589
@@ -XXX,XX +XXX,XX @@ static void gen_stxvw4x(DisasContext *ctx)
3590
tcg_gen_shri_i64(t0, xsl, 32);
3591
tcg_gen_deposit_i64(t1, t0, xsl, 32, 32);
3592
tcg_gen_qemu_st_i64(t1, EA, ctx->mem_idx, MO_LEUQ);
3593
- tcg_temp_free_i64(t0);
3594
- tcg_temp_free_i64(t1);
3595
} else {
3596
tcg_gen_qemu_st_i64(xsh, EA, ctx->mem_idx, MO_BEUQ);
3597
tcg_gen_addi_tl(EA, EA, 8);
3598
tcg_gen_qemu_st_i64(xsl, EA, ctx->mem_idx, MO_BEUQ);
3599
}
3600
- tcg_temp_free(EA);
3601
- tcg_temp_free_i64(xsh);
3602
- tcg_temp_free_i64(xsl);
3603
}
3604
3605
static void gen_stxvh8x(DisasContext *ctx)
3606
@@ -XXX,XX +XXX,XX @@ static void gen_stxvh8x(DisasContext *ctx)
3607
tcg_gen_qemu_st_i64(outh, EA, ctx->mem_idx, MO_BEUQ);
3608
tcg_gen_addi_tl(EA, EA, 8);
3609
tcg_gen_qemu_st_i64(outl, EA, ctx->mem_idx, MO_BEUQ);
3610
- tcg_temp_free_i64(outh);
3611
- tcg_temp_free_i64(outl);
3612
} else {
3613
tcg_gen_qemu_st_i64(xsh, EA, ctx->mem_idx, MO_BEUQ);
3614
tcg_gen_addi_tl(EA, EA, 8);
3615
tcg_gen_qemu_st_i64(xsl, EA, ctx->mem_idx, MO_BEUQ);
3616
}
3617
- tcg_temp_free(EA);
3618
- tcg_temp_free_i64(xsh);
3619
- tcg_temp_free_i64(xsl);
3620
}
3621
3622
static void gen_stxvb16x(DisasContext *ctx)
3623
@@ -XXX,XX +XXX,XX @@ static void gen_stxvb16x(DisasContext *ctx)
3624
tcg_gen_qemu_st_i64(xsh, EA, ctx->mem_idx, MO_BEUQ);
3625
tcg_gen_addi_tl(EA, EA, 8);
3626
tcg_gen_qemu_st_i64(xsl, EA, ctx->mem_idx, MO_BEUQ);
3627
- tcg_temp_free(EA);
3628
- tcg_temp_free_i64(xsh);
3629
- tcg_temp_free_i64(xsl);
3630
}
3631
3632
static void gen_mfvsrwz(DisasContext *ctx)
3633
@@ -XXX,XX +XXX,XX @@ static void gen_mfvsrwz(DisasContext *ctx)
3634
get_cpu_vsr(xsh, xS(ctx->opcode), true);
3635
tcg_gen_ext32u_i64(tmp, xsh);
3636
tcg_gen_trunc_i64_tl(cpu_gpr[rA(ctx->opcode)], tmp);
3637
- tcg_temp_free_i64(tmp);
3638
- tcg_temp_free_i64(xsh);
3639
}
3640
3641
static void gen_mtvsrwa(DisasContext *ctx)
3642
@@ -XXX,XX +XXX,XX @@ static void gen_mtvsrwa(DisasContext *ctx)
3643
tcg_gen_extu_tl_i64(tmp, cpu_gpr[rA(ctx->opcode)]);
3644
tcg_gen_ext32s_i64(xsh, tmp);
3645
set_cpu_vsr(xT(ctx->opcode), xsh, true);
3646
- tcg_temp_free_i64(tmp);
3647
- tcg_temp_free_i64(xsh);
3648
}
3649
3650
static void gen_mtvsrwz(DisasContext *ctx)
3651
@@ -XXX,XX +XXX,XX @@ static void gen_mtvsrwz(DisasContext *ctx)
3652
tcg_gen_extu_tl_i64(tmp, cpu_gpr[rA(ctx->opcode)]);
3653
tcg_gen_ext32u_i64(xsh, tmp);
3654
set_cpu_vsr(xT(ctx->opcode), xsh, true);
3655
- tcg_temp_free_i64(tmp);
3656
- tcg_temp_free_i64(xsh);
3657
}
3658
3659
#if defined(TARGET_PPC64)
3660
@@ -XXX,XX +XXX,XX @@ static void gen_mfvsrd(DisasContext *ctx)
3661
t0 = tcg_temp_new_i64();
3662
get_cpu_vsr(t0, xS(ctx->opcode), true);
3663
tcg_gen_mov_i64(cpu_gpr[rA(ctx->opcode)], t0);
3664
- tcg_temp_free_i64(t0);
3665
}
3666
3667
static void gen_mtvsrd(DisasContext *ctx)
3668
@@ -XXX,XX +XXX,XX @@ static void gen_mtvsrd(DisasContext *ctx)
3669
t0 = tcg_temp_new_i64();
3670
tcg_gen_mov_i64(t0, cpu_gpr[rA(ctx->opcode)]);
3671
set_cpu_vsr(xT(ctx->opcode), t0, true);
3672
- tcg_temp_free_i64(t0);
3673
}
3674
3675
static void gen_mfvsrld(DisasContext *ctx)
3676
@@ -XXX,XX +XXX,XX @@ static void gen_mfvsrld(DisasContext *ctx)
3677
t0 = tcg_temp_new_i64();
3678
get_cpu_vsr(t0, xS(ctx->opcode), false);
3679
tcg_gen_mov_i64(cpu_gpr[rA(ctx->opcode)], t0);
3680
- tcg_temp_free_i64(t0);
3681
}
3682
3683
static void gen_mtvsrdd(DisasContext *ctx)
3684
@@ -XXX,XX +XXX,XX @@ static void gen_mtvsrdd(DisasContext *ctx)
3685
3686
tcg_gen_mov_i64(t0, cpu_gpr[rB(ctx->opcode)]);
3687
set_cpu_vsr(xT(ctx->opcode), t0, false);
3688
- tcg_temp_free_i64(t0);
3689
}
3690
3691
static void gen_mtvsrws(DisasContext *ctx)
3692
@@ -XXX,XX +XXX,XX @@ static void gen_mtvsrws(DisasContext *ctx)
3693
cpu_gpr[rA(ctx->opcode)], 32, 32);
3694
set_cpu_vsr(xT(ctx->opcode), t0, false);
3695
set_cpu_vsr(xT(ctx->opcode), t0, true);
3696
- tcg_temp_free_i64(t0);
3697
}
3698
3699
#endif
3700
@@ -XXX,XX +XXX,XX @@ static void glue(gen_, name)(DisasContext *ctx) \
3701
tcg_gen_and_i64(xa, xa, sgm); \
3702
tcg_gen_andc_i64(xb, xb, sgm); \
3703
tcg_gen_or_i64(xb, xb, xa); \
3704
- tcg_temp_free_i64(xa); \
3705
break; \
3706
} \
3707
} \
3708
set_cpu_vsr(xT(ctx->opcode), xb, true); \
3709
set_cpu_vsr(xT(ctx->opcode), tcg_constant_i64(0), false); \
3710
- tcg_temp_free_i64(xb); \
3711
- tcg_temp_free_i64(sgm); \
3712
}
3713
3714
VSX_SCALAR_MOVE(xsabsdp, OP_ABS, SGN_MASK_DP)
3715
@@ -XXX,XX +XXX,XX @@ static void glue(gen_, name)(DisasContext *ctx) \
3716
tcg_gen_and_i64(xah, tmp, sgm); \
3717
tcg_gen_andc_i64(xbh, xbh, sgm); \
3718
tcg_gen_or_i64(xbh, xbh, xah); \
3719
- tcg_temp_free_i64(xah); \
3720
break; \
3721
} \
3722
set_cpu_vsr(xt, xbh, true); \
3723
set_cpu_vsr(xt, xbl, false); \
3724
- tcg_temp_free_i64(xbl); \
3725
- tcg_temp_free_i64(xbh); \
3726
- tcg_temp_free_i64(sgm); \
3727
- tcg_temp_free_i64(tmp); \
3728
}
3729
3730
VSX_SCALAR_MOVE_QP(xsabsqp, OP_ABS, SGN_MASK_DP)
3731
@@ -XXX,XX +XXX,XX @@ static void gen_##name(DisasContext *ctx) \
3732
} else { \
3733
ignored = tcg_temp_new_i32(); \
3734
gen_helper_##name(ignored, cpu_env, xt, xa, xb); \
3735
- tcg_temp_free_i32(ignored); \
3736
} \
3737
- tcg_temp_free_ptr(xt); \
3738
- tcg_temp_free_ptr(xa); \
3739
- tcg_temp_free_ptr(xb); \
3740
}
3741
3742
VSX_CMP(xvcmpeqdp, 0x0C, 0x0C, 0, PPC2_VSX)
3743
@@ -XXX,XX +XXX,XX @@ static bool trans_XSCVQPDP(DisasContext *ctx, arg_X_tb_rc *a)
3744
xt = gen_avr_ptr(a->rt);
3745
xb = gen_avr_ptr(a->rb);
3746
gen_helper_XSCVQPDP(cpu_env, ro, xt, xb);
3747
- tcg_temp_free_i32(ro);
3748
- tcg_temp_free_ptr(xt);
3749
- tcg_temp_free_ptr(xb);
3750
-
3751
return true;
3752
}
3753
3754
@@ -XXX,XX +XXX,XX @@ static bool do_helper_env_X_tb(DisasContext *ctx, arg_X_tb *a,
3755
xt = gen_avr_ptr(a->rt);
3756
xb = gen_avr_ptr(a->rb);
3757
gen_helper(cpu_env, xt, xb);
3758
- tcg_temp_free_ptr(xt);
3759
- tcg_temp_free_ptr(xb);
3760
-
3761
return true;
3762
}
3763
3764
@@ -XXX,XX +XXX,XX @@ static void gen_##name(DisasContext *ctx) \
3765
} \
3766
opc = tcg_const_i32(ctx->opcode); \
3767
gen_helper_##name(cpu_env, opc); \
3768
- tcg_temp_free_i32(opc); \
3769
}
3770
3771
#define GEN_VSX_HELPER_X3(name, op1, op2, inval, type) \
3772
@@ -XXX,XX +XXX,XX @@ static void gen_##name(DisasContext *ctx) \
3773
xa = gen_vsr_ptr(xA(ctx->opcode)); \
3774
xb = gen_vsr_ptr(xB(ctx->opcode)); \
3775
gen_helper_##name(cpu_env, xt, xa, xb); \
3776
- tcg_temp_free_ptr(xt); \
3777
- tcg_temp_free_ptr(xa); \
3778
- tcg_temp_free_ptr(xb); \
3779
}
3780
3781
#define GEN_VSX_HELPER_X2(name, op1, op2, inval, type) \
3782
@@ -XXX,XX +XXX,XX @@ static void gen_##name(DisasContext *ctx) \
3783
xt = gen_vsr_ptr(xT(ctx->opcode)); \
3784
xb = gen_vsr_ptr(xB(ctx->opcode)); \
3785
gen_helper_##name(cpu_env, xt, xb); \
3786
- tcg_temp_free_ptr(xt); \
3787
- tcg_temp_free_ptr(xb); \
3788
}
3789
3790
#define GEN_VSX_HELPER_X2_AB(name, op1, op2, inval, type) \
3791
@@ -XXX,XX +XXX,XX @@ static void gen_##name(DisasContext *ctx) \
3792
xa = gen_vsr_ptr(xA(ctx->opcode)); \
3793
xb = gen_vsr_ptr(xB(ctx->opcode)); \
3794
gen_helper_##name(cpu_env, opc, xa, xb); \
3795
- tcg_temp_free_i32(opc); \
3796
- tcg_temp_free_ptr(xa); \
3797
- tcg_temp_free_ptr(xb); \
3798
}
3799
3800
#define GEN_VSX_HELPER_X1(name, op1, op2, inval, type) \
3801
@@ -XXX,XX +XXX,XX @@ static void gen_##name(DisasContext *ctx) \
3802
opc = tcg_const_i32(ctx->opcode); \
3803
xb = gen_vsr_ptr(xB(ctx->opcode)); \
3804
gen_helper_##name(cpu_env, opc, xb); \
3805
- tcg_temp_free_i32(opc); \
3806
- tcg_temp_free_ptr(xb); \
3807
}
3808
3809
#define GEN_VSX_HELPER_R3(name, op1, op2, inval, type) \
3810
@@ -XXX,XX +XXX,XX @@ static void gen_##name(DisasContext *ctx) \
3811
xa = gen_vsr_ptr(rA(ctx->opcode) + 32); \
3812
xb = gen_vsr_ptr(rB(ctx->opcode) + 32); \
3813
gen_helper_##name(cpu_env, opc, xt, xa, xb); \
3814
- tcg_temp_free_i32(opc); \
3815
- tcg_temp_free_ptr(xt); \
3816
- tcg_temp_free_ptr(xa); \
3817
- tcg_temp_free_ptr(xb); \
3818
}
3819
3820
#define GEN_VSX_HELPER_R2(name, op1, op2, inval, type) \
3821
@@ -XXX,XX +XXX,XX @@ static void gen_##name(DisasContext *ctx) \
3822
xt = gen_vsr_ptr(rD(ctx->opcode) + 32); \
3823
xb = gen_vsr_ptr(rB(ctx->opcode) + 32); \
3824
gen_helper_##name(cpu_env, opc, xt, xb); \
3825
- tcg_temp_free_i32(opc); \
3826
- tcg_temp_free_ptr(xt); \
3827
- tcg_temp_free_ptr(xb); \
3828
}
3829
3830
#define GEN_VSX_HELPER_R2_AB(name, op1, op2, inval, type) \
3831
@@ -XXX,XX +XXX,XX @@ static void gen_##name(DisasContext *ctx) \
3832
xa = gen_vsr_ptr(rA(ctx->opcode) + 32); \
3833
xb = gen_vsr_ptr(rB(ctx->opcode) + 32); \
3834
gen_helper_##name(cpu_env, opc, xa, xb); \
3835
- tcg_temp_free_i32(opc); \
3836
- tcg_temp_free_ptr(xa); \
3837
- tcg_temp_free_ptr(xb); \
3838
}
3839
3840
#define GEN_VSX_HELPER_XT_XB_ENV(name, op1, op2, inval, type) \
3841
@@ -XXX,XX +XXX,XX @@ static void gen_##name(DisasContext *ctx) \
3842
gen_helper_##name(t1, cpu_env, t0); \
3843
set_cpu_vsr(xT(ctx->opcode), t1, true); \
3844
set_cpu_vsr(xT(ctx->opcode), tcg_constant_i64(0), false); \
3845
- tcg_temp_free_i64(t0); \
3846
- tcg_temp_free_i64(t1); \
3847
}
3848
3849
GEN_VSX_HELPER_X3(xsadddp, 0x00, 0x04, 0, PPC2_VSX)
3850
@@ -XXX,XX +XXX,XX @@ static bool do_XX2_bf_uim(DisasContext *ctx, arg_XX2_bf_uim *a, bool vsr,
3851
REQUIRE_VSX(ctx);
3852
xb = vsr ? gen_vsr_ptr(a->xb) : gen_avr_ptr(a->xb);
3853
gen_helper(cpu_env, tcg_constant_i32(a->bf), tcg_constant_i32(a->uim), xb);
3854
- tcg_temp_free_ptr(xb);
3855
-
3856
return true;
3857
}
3858
3859
@@ -XXX,XX +XXX,XX @@ bool trans_XSCVSPDPN(DisasContext *ctx, arg_XX2 *a)
3860
3861
set_cpu_vsr(a->xt, tmp, true);
3862
set_cpu_vsr(a->xt, tcg_constant_i64(0), false);
3863
-
3864
- tcg_temp_free_i64(tmp);
3865
-
3866
return true;
3867
}
3868
3869
@@ -XXX,XX +XXX,XX @@ static bool trans_XXPERM(DisasContext *ctx, arg_XX3 *a)
3870
xb = gen_vsr_ptr(a->xb);
3871
3872
gen_helper_VPERM(xt, xa, xt, xb);
3873
-
3874
- tcg_temp_free_ptr(xt);
3875
- tcg_temp_free_ptr(xa);
3876
- tcg_temp_free_ptr(xb);
3877
-
3878
return true;
3879
}
3880
3881
@@ -XXX,XX +XXX,XX @@ static bool trans_XXPERMR(DisasContext *ctx, arg_XX3 *a)
3882
xb = gen_vsr_ptr(a->xb);
3883
3884
gen_helper_VPERMR(xt, xa, xt, xb);
3885
-
3886
- tcg_temp_free_ptr(xt);
3887
- tcg_temp_free_ptr(xa);
3888
- tcg_temp_free_ptr(xb);
3889
-
3890
return true;
3891
}
3892
3893
@@ -XXX,XX +XXX,XX @@ static bool trans_XXPERMDI(DisasContext *ctx, arg_XX3_dm *a)
3894
3895
set_cpu_vsr(a->xt, t0, true);
3896
set_cpu_vsr(a->xt, t1, false);
3897
-
3898
- tcg_temp_free_i64(t1);
3899
} else {
3900
get_cpu_vsr(t0, a->xa, (a->dm & 2) == 0);
3901
set_cpu_vsr(a->xt, t0, true);
3902
@@ -XXX,XX +XXX,XX @@ static bool trans_XXPERMDI(DisasContext *ctx, arg_XX3_dm *a)
3903
get_cpu_vsr(t0, a->xb, (a->dm & 1) == 0);
3904
set_cpu_vsr(a->xt, t0, false);
3905
}
3906
-
3907
- tcg_temp_free_i64(t0);
3908
-
3909
return true;
3910
}
3911
3912
@@ -XXX,XX +XXX,XX @@ static bool trans_XXPERMX(DisasContext *ctx, arg_8RR_XX4_uim3 *a)
3913
xc = gen_vsr_ptr(a->xc);
3914
3915
gen_helper_XXPERMX(xt, xa, xb, xc, tcg_constant_tl(a->uim3));
3916
-
3917
- tcg_temp_free_ptr(xt);
3918
- tcg_temp_free_ptr(xa);
3919
- tcg_temp_free_ptr(xb);
3920
- tcg_temp_free_ptr(xc);
3921
-
3922
return true;
3923
}
3924
3925
@@ -XXX,XX +XXX,XX @@ static bool do_xxgenpcv(DisasContext *ctx, arg_X_imm5 *a,
3926
vrb = gen_avr_ptr(a->vrb);
3927
3928
fn[a->imm](xt, vrb);
3929
-
3930
- tcg_temp_free_ptr(xt);
3931
- tcg_temp_free_ptr(vrb);
3932
-
3933
return true;
3934
}
3935
3936
@@ -XXX,XX +XXX,XX @@ static bool do_xsmadd(DisasContext *ctx, int tgt, int src1, int src2, int src3,
3937
s3 = gen_vsr_ptr(src3);
3938
3939
gen_helper(cpu_env, t, s1, s2, s3);
3940
-
3941
- tcg_temp_free_ptr(t);
3942
- tcg_temp_free_ptr(s1);
3943
- tcg_temp_free_ptr(s2);
3944
- tcg_temp_free_ptr(s3);
3945
-
3946
return true;
3947
}
3948
3949
@@ -XXX,XX +XXX,XX @@ static void gen_##name(DisasContext *ctx) \
3950
s3 = gen_vsr_ptr(xB(ctx->opcode)); \
3951
} \
3952
gen_helper_##name(cpu_env, xt, s1, s2, s3); \
3953
- tcg_temp_free_ptr(xt); \
3954
- tcg_temp_free_ptr(s1); \
3955
- tcg_temp_free_ptr(s2); \
3956
- tcg_temp_free_ptr(s3); \
3957
}
3958
3959
GEN_VSX_HELPER_VSX_MADD(xvmadddp, 0x04, 0x0C, 0x0D, 0, PPC2_VSX)
3960
@@ -XXX,XX +XXX,XX @@ static void gen_xxbrd(DisasContext *ctx)
3961
tcg_gen_bswap64_i64(xtl, xbl);
3962
set_cpu_vsr(xT(ctx->opcode), xth, true);
3963
set_cpu_vsr(xT(ctx->opcode), xtl, false);
3964
-
3965
- tcg_temp_free_i64(xth);
3966
- tcg_temp_free_i64(xtl);
3967
- tcg_temp_free_i64(xbh);
3968
- tcg_temp_free_i64(xbl);
3969
}
3970
3971
static void gen_xxbrh(DisasContext *ctx)
3972
@@ -XXX,XX +XXX,XX @@ static void gen_xxbrh(DisasContext *ctx)
3973
gen_bswap16x8(xth, xtl, xbh, xbl);
3974
set_cpu_vsr(xT(ctx->opcode), xth, true);
3975
set_cpu_vsr(xT(ctx->opcode), xtl, false);
3976
-
3977
- tcg_temp_free_i64(xth);
3978
- tcg_temp_free_i64(xtl);
3979
- tcg_temp_free_i64(xbh);
3980
- tcg_temp_free_i64(xbl);
3981
}
3982
3983
static void gen_xxbrq(DisasContext *ctx)
3984
@@ -XXX,XX +XXX,XX @@ static void gen_xxbrq(DisasContext *ctx)
3985
set_cpu_vsr(xT(ctx->opcode), xtl, false);
3986
tcg_gen_mov_i64(xth, t0);
3987
set_cpu_vsr(xT(ctx->opcode), xth, true);
3988
-
3989
- tcg_temp_free_i64(t0);
3990
- tcg_temp_free_i64(xth);
3991
- tcg_temp_free_i64(xtl);
3992
- tcg_temp_free_i64(xbh);
3993
- tcg_temp_free_i64(xbl);
3994
}
3995
3996
static void gen_xxbrw(DisasContext *ctx)
3997
@@ -XXX,XX +XXX,XX @@ static void gen_xxbrw(DisasContext *ctx)
3998
gen_bswap32x4(xth, xtl, xbh, xbl);
3999
set_cpu_vsr(xT(ctx->opcode), xth, true);
4000
set_cpu_vsr(xT(ctx->opcode), xtl, false);
4001
-
4002
- tcg_temp_free_i64(xth);
4003
- tcg_temp_free_i64(xtl);
4004
- tcg_temp_free_i64(xbh);
4005
- tcg_temp_free_i64(xbl);
4006
}
4007
4008
#define VSX_LOGICAL(name, vece, tcg_op) \
4009
@@ -XXX,XX +XXX,XX @@ static void glue(gen_, name)(DisasContext *ctx) \
4010
set_cpu_vsr(xT(ctx->opcode), tmp, true); \
4011
tcg_gen_deposit_i64(tmp, b1, a1, 32, 32); \
4012
set_cpu_vsr(xT(ctx->opcode), tmp, false); \
4013
- tcg_temp_free_i64(a0); \
4014
- tcg_temp_free_i64(a1); \
4015
- tcg_temp_free_i64(b0); \
4016
- tcg_temp_free_i64(b1); \
4017
- tcg_temp_free_i64(tmp); \
4018
}
4019
4020
VSX_XXMRG(xxmrghw, 1)
4021
@@ -XXX,XX +XXX,XX @@ static bool trans_XVTLSBB(DisasContext *ctx, arg_XX2_bf_xb *a)
4022
4023
tcg_gen_or_i64(t0, all_false, all_true);
4024
tcg_gen_extrl_i64_i32(cpu_crf[a->bf], t0);
4025
-
4026
- tcg_temp_free_i64(xb);
4027
- tcg_temp_free_i64(t0);
4028
- tcg_temp_free_i64(t1);
4029
- tcg_temp_free_i64(all_true);
4030
- tcg_temp_free_i64(all_false);
4031
-
4032
return true;
4033
}
4034
4035
@@ -XXX,XX +XXX,XX @@ static void gen_xxsldwi(DisasContext *ctx)
4036
get_cpu_vsr(t0, xB(ctx->opcode), true);
4037
tcg_gen_shri_i64(t0, t0, 32);
4038
tcg_gen_or_i64(xtl, xtl, t0);
4039
- tcg_temp_free_i64(t0);
4040
break;
4041
}
4042
case 2: {
4043
@@ -XXX,XX +XXX,XX @@ static void gen_xxsldwi(DisasContext *ctx)
4044
get_cpu_vsr(t0, xB(ctx->opcode), false);
4045
tcg_gen_shri_i64(t0, t0, 32);
4046
tcg_gen_or_i64(xtl, xtl, t0);
4047
- tcg_temp_free_i64(t0);
4048
break;
4049
}
4050
}
4051
4052
set_cpu_vsr(xT(ctx->opcode), xth, true);
4053
set_cpu_vsr(xT(ctx->opcode), xtl, false);
4054
-
4055
- tcg_temp_free_i64(xth);
4056
- tcg_temp_free_i64(xtl);
4057
}
4058
4059
static bool do_vsx_extract_insert(DisasContext *ctx, arg_XX2_uim *a,
4060
@@ -XXX,XX +XXX,XX @@ static bool do_vsx_extract_insert(DisasContext *ctx, arg_XX2_uim *a,
4061
xt = gen_vsr_ptr(a->xt);
4062
xb = gen_vsr_ptr(a->xb);
4063
gen_helper(xt, xb, tcg_constant_i32(a->uim));
4064
- tcg_temp_free_ptr(xb);
4065
- tcg_temp_free_ptr(xt);
4066
}
4067
-
4068
return true;
4069
}
4070
4071
@@ -XXX,XX +XXX,XX @@ static void gen_xsxexpdp(DisasContext *ctx)
4072
t0 = tcg_temp_new_i64();
4073
get_cpu_vsr(t0, xB(ctx->opcode), true);
4074
tcg_gen_extract_i64(rt, t0, 52, 11);
4075
- tcg_temp_free_i64(t0);
4076
}
4077
4078
static void gen_xsxexpqp(DisasContext *ctx)
4079
@@ -XXX,XX +XXX,XX @@ static void gen_xsxexpqp(DisasContext *ctx)
4080
set_cpu_vsr(rD(ctx->opcode) + 32, xth, true);
4081
tcg_gen_movi_i64(xtl, 0);
4082
set_cpu_vsr(rD(ctx->opcode) + 32, xtl, false);
4083
-
4084
- tcg_temp_free_i64(xbh);
4085
- tcg_temp_free_i64(xth);
4086
- tcg_temp_free_i64(xtl);
4087
}
4088
4089
static void gen_xsiexpdp(DisasContext *ctx)
4090
@@ -XXX,XX +XXX,XX @@ static void gen_xsiexpdp(DisasContext *ctx)
4091
tcg_gen_or_i64(xth, xth, t0);
4092
set_cpu_vsr(xT(ctx->opcode), xth, true);
4093
set_cpu_vsr(xT(ctx->opcode), tcg_constant_i64(0), false);
4094
- tcg_temp_free_i64(t0);
4095
- tcg_temp_free_i64(xth);
4096
}
4097
4098
static void gen_xsiexpqp(DisasContext *ctx)
4099
@@ -XXX,XX +XXX,XX @@ static void gen_xsiexpqp(DisasContext *ctx)
4100
set_cpu_vsr(rD(ctx->opcode) + 32, xth, true);
4101
tcg_gen_mov_i64(xtl, xal);
4102
set_cpu_vsr(rD(ctx->opcode) + 32, xtl, false);
4103
-
4104
- tcg_temp_free_i64(t0);
4105
- tcg_temp_free_i64(xth);
4106
- tcg_temp_free_i64(xtl);
4107
- tcg_temp_free_i64(xah);
4108
- tcg_temp_free_i64(xal);
4109
- tcg_temp_free_i64(xbh);
4110
}
4111
4112
static void gen_xsxsigdp(DisasContext *ctx)
4113
@@ -XXX,XX +XXX,XX @@ static void gen_xsxsigdp(DisasContext *ctx)
4114
tcg_gen_movcond_i64(TCG_COND_EQ, t0, exp, nan, zr, t0);
4115
get_cpu_vsr(t1, xB(ctx->opcode), true);
4116
tcg_gen_deposit_i64(rt, t0, t1, 0, 52);
4117
-
4118
- tcg_temp_free_i64(t0);
4119
- tcg_temp_free_i64(t1);
4120
- tcg_temp_free_i64(exp);
4121
- tcg_temp_free_i64(zr);
4122
- tcg_temp_free_i64(nan);
4123
}
4124
4125
static void gen_xsxsigqp(DisasContext *ctx)
4126
@@ -XXX,XX +XXX,XX @@ static void gen_xsxsigqp(DisasContext *ctx)
4127
set_cpu_vsr(rD(ctx->opcode) + 32, xth, true);
4128
tcg_gen_mov_i64(xtl, xbl);
4129
set_cpu_vsr(rD(ctx->opcode) + 32, xtl, false);
4130
-
4131
- tcg_temp_free_i64(t0);
4132
- tcg_temp_free_i64(exp);
4133
- tcg_temp_free_i64(zr);
4134
- tcg_temp_free_i64(nan);
4135
- tcg_temp_free_i64(xth);
4136
- tcg_temp_free_i64(xtl);
4137
- tcg_temp_free_i64(xbh);
4138
- tcg_temp_free_i64(xbl);
4139
}
4140
#endif
4141
4142
@@ -XXX,XX +XXX,XX @@ static void gen_xviexpsp(DisasContext *ctx)
4143
tcg_gen_shli_i64(t0, t0, 23);
4144
tcg_gen_or_i64(xtl, xtl, t0);
4145
set_cpu_vsr(xT(ctx->opcode), xtl, false);
4146
-
4147
- tcg_temp_free_i64(t0);
4148
- tcg_temp_free_i64(xth);
4149
- tcg_temp_free_i64(xtl);
4150
- tcg_temp_free_i64(xah);
4151
- tcg_temp_free_i64(xal);
4152
- tcg_temp_free_i64(xbh);
4153
- tcg_temp_free_i64(xbl);
4154
}
4155
4156
static void gen_xviexpdp(DisasContext *ctx)
4157
@@ -XXX,XX +XXX,XX @@ static void gen_xviexpdp(DisasContext *ctx)
4158
4159
tcg_gen_deposit_i64(xtl, xal, xbl, 52, 11);
4160
set_cpu_vsr(xT(ctx->opcode), xtl, false);
4161
-
4162
- tcg_temp_free_i64(xth);
4163
- tcg_temp_free_i64(xtl);
4164
- tcg_temp_free_i64(xah);
4165
- tcg_temp_free_i64(xal);
4166
- tcg_temp_free_i64(xbh);
4167
- tcg_temp_free_i64(xbl);
4168
}
4169
4170
static void gen_xvxexpsp(DisasContext *ctx)
4171
@@ -XXX,XX +XXX,XX @@ static void gen_xvxexpsp(DisasContext *ctx)
4172
tcg_gen_shri_i64(xtl, xbl, 23);
4173
tcg_gen_andi_i64(xtl, xtl, 0xFF000000FF);
4174
set_cpu_vsr(xT(ctx->opcode), xtl, false);
4175
-
4176
- tcg_temp_free_i64(xth);
4177
- tcg_temp_free_i64(xtl);
4178
- tcg_temp_free_i64(xbh);
4179
- tcg_temp_free_i64(xbl);
4180
}
4181
4182
static void gen_xvxexpdp(DisasContext *ctx)
4183
@@ -XXX,XX +XXX,XX @@ static void gen_xvxexpdp(DisasContext *ctx)
4184
set_cpu_vsr(xT(ctx->opcode), xth, true);
4185
tcg_gen_extract_i64(xtl, xbl, 52, 11);
4186
set_cpu_vsr(xT(ctx->opcode), xtl, false);
4187
-
4188
- tcg_temp_free_i64(xth);
4189
- tcg_temp_free_i64(xtl);
4190
- tcg_temp_free_i64(xbh);
4191
- tcg_temp_free_i64(xbl);
4192
}
4193
4194
static bool trans_XVXSIGSP(DisasContext *ctx, arg_XX2 *a)
4195
@@ -XXX,XX +XXX,XX @@ static bool trans_XVXSIGSP(DisasContext *ctx, arg_XX2 *a)
4196
b = gen_vsr_ptr(a->xb);
4197
4198
gen_helper_XVXSIGSP(t, b);
4199
-
4200
- tcg_temp_free_ptr(t);
4201
- tcg_temp_free_ptr(b);
4202
-
4203
return true;
4204
}
4205
4206
@@ -XXX,XX +XXX,XX @@ static void gen_xvxsigdp(DisasContext *ctx)
4207
tcg_gen_movcond_i64(TCG_COND_EQ, t0, exp, nan, zr, t0);
4208
tcg_gen_deposit_i64(xtl, t0, xbl, 0, 52);
4209
set_cpu_vsr(xT(ctx->opcode), xtl, false);
4210
-
4211
- tcg_temp_free_i64(t0);
4212
- tcg_temp_free_i64(exp);
4213
- tcg_temp_free_i64(zr);
4214
- tcg_temp_free_i64(nan);
4215
- tcg_temp_free_i64(xth);
4216
- tcg_temp_free_i64(xtl);
4217
- tcg_temp_free_i64(xbh);
4218
- tcg_temp_free_i64(xbl);
4219
}
4220
4221
static bool do_lstxv(DisasContext *ctx, int ra, TCGv displ,
4222
@@ -XXX,XX +XXX,XX @@ static bool do_lstxv(DisasContext *ctx, int ra, TCGv displ,
4223
set_cpu_vsr(rt2, xt, ctx->le_mode);
4224
}
4225
}
4226
-
4227
- tcg_temp_free(ea);
4228
- tcg_temp_free_i64(xt);
4229
return true;
4230
}
4231
4232
@@ -XXX,XX +XXX,XX @@ static bool do_lstxsd(DisasContext *ctx, int rt, int ra, TCGv displ, bool store)
4233
set_cpu_vsr(rt + 32, xt, true);
4234
set_cpu_vsr(rt + 32, tcg_constant_i64(0), false);
4235
}
4236
-
4237
- tcg_temp_free(ea);
4238
- tcg_temp_free_i64(xt);
4239
-
4240
return true;
4241
}
4242
4243
@@ -XXX,XX +XXX,XX @@ static bool do_lstxssp(DisasContext *ctx, int rt, int ra, TCGv displ, bool store
4244
set_cpu_vsr(rt + 32, xt, true);
4245
set_cpu_vsr(rt + 32, tcg_constant_i64(0), false);
4246
}
4247
-
4248
- tcg_temp_free(ea);
4249
- tcg_temp_free_i64(xt);
4250
-
4251
return true;
4252
}
4253
4254
@@ -XXX,XX +XXX,XX @@ static bool do_lstrm(DisasContext *ctx, arg_X *a, MemOp mop, bool store)
4255
set_cpu_vsr(a->rt, xt, false);
4256
set_cpu_vsr(a->rt, tcg_constant_i64(0), true);
4257
}
4258
-
4259
- tcg_temp_free(ea);
4260
- tcg_temp_free_i64(xt);
4261
return true;
4262
}
4263
4264
@@ -XXX,XX +XXX,XX @@ static void gen_xxeval_i64(TCGv_i64 t, TCGv_i64 a, TCGv_i64 b, TCGv_i64 c,
4265
}
4266
4267
tcg_gen_mov_i64(t, disj);
4268
-
4269
- tcg_temp_free_i64(conj);
4270
- tcg_temp_free_i64(disj);
4271
}
4272
4273
static void gen_xxeval_vec(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b,
4274
@@ -XXX,XX +XXX,XX @@ static void gen_xxeval_vec(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b,
4275
}
4276
4277
tcg_gen_mov_vec(t, disj);
4278
-
4279
- tcg_temp_free_vec(disj);
4280
- tcg_temp_free_vec(conj);
4281
}
4282
4283
static bool trans_XXEVAL(DisasContext *ctx, arg_8RR_XX4_imm *a)
4284
@@ -XXX,XX +XXX,XX @@ static void gen_xxblendv_vec(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b,
4285
TCGv_vec tmp = tcg_temp_new_vec_matching(c);
4286
tcg_gen_sari_vec(vece, tmp, c, (8 << vece) - 1);
4287
tcg_gen_bitsel_vec(vece, t, tmp, b, a);
4288
- tcg_temp_free_vec(tmp);
4289
}
4290
4291
static bool do_xxblendv(DisasContext *ctx, arg_8RR_XX4 *a, unsigned vece)
4292
@@ -XXX,XX +XXX,XX @@ static bool do_helper_XX3(DisasContext *ctx, arg_XX3 *a,
4293
xb = gen_vsr_ptr(a->xb);
4294
4295
helper(cpu_env, xt, xa, xb);
4296
-
4297
- tcg_temp_free_ptr(xt);
4298
- tcg_temp_free_ptr(xa);
4299
- tcg_temp_free_ptr(xb);
4300
-
4301
return true;
4302
}
4303
4304
@@ -XXX,XX +XXX,XX @@ static bool do_helper_X(arg_X *a,
4305
rb = gen_avr_ptr(a->rb);
4306
4307
helper(cpu_env, rt, ra, rb);
4308
-
4309
- tcg_temp_free_ptr(rt);
4310
- tcg_temp_free_ptr(ra);
4311
- tcg_temp_free_ptr(rb);
4312
-
4313
return true;
4314
}
4315
4316
@@ -XXX,XX +XXX,XX @@ static bool trans_XVCVSPBF16(DisasContext *ctx, arg_XX2 *a)
4317
xb = gen_vsr_ptr(a->xb);
4318
4319
gen_helper_XVCVSPBF16(cpu_env, xt, xb);
4320
-
4321
- tcg_temp_free_ptr(xt);
4322
- tcg_temp_free_ptr(xb);
4323
-
4324
return true;
4325
}
4326
4327
@@ -XXX,XX +XXX,XX @@ static bool do_ger(DisasContext *ctx, arg_MMIRR_XX3 *a,
4328
4329
mask = ger_pack_masks(a->pmsk, a->ymsk, a->xmsk);
4330
helper(cpu_env, xa, xb, xt, tcg_constant_i32(mask));
4331
- tcg_temp_free_ptr(xt);
4332
- tcg_temp_free_ptr(xa);
4333
- tcg_temp_free_ptr(xb);
4334
return true;
4335
}
4336
4337
--
4338
2.34.1
diff view generated by jsdifflib
Deleted patch
1
Translators are no longer required to free tcg temporaries,
2
therefore there's no need to record temps for later freeing.
3
Replace the few uses with tcg_temp_new_i64.
4
1
5
Reviewed-by: Weiwei Li <liweiwei@iscas.ac.cn>
6
Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
7
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
8
---
9
target/riscv/translate.c | 24 ++++--------------------
10
1 file changed, 4 insertions(+), 20 deletions(-)
11
12
diff --git a/target/riscv/translate.c b/target/riscv/translate.c
13
index XXXXXXX..XXXXXXX 100644
14
--- a/target/riscv/translate.c
15
+++ b/target/riscv/translate.c
16
@@ -XXX,XX +XXX,XX @@ typedef struct DisasContext {
17
TCGv zero;
18
/* Space for 3 operands plus 1 extra for address computation. */
19
TCGv temp[4];
20
- /* Space for 4 operands(1 dest and <=3 src) for float point computation */
21
- TCGv_i64 ftemp[4];
22
- uint8_t nftemp;
23
/* PointerMasking extension */
24
bool pm_mask_enabled;
25
bool pm_base_enabled;
26
@@ -XXX,XX +XXX,XX @@ static void gen_set_gpr128(DisasContext *ctx, int reg_num, TCGv rl, TCGv rh)
27
}
28
}
29
30
-static TCGv_i64 ftemp_new(DisasContext *ctx)
31
-{
32
- assert(ctx->nftemp < ARRAY_SIZE(ctx->ftemp));
33
- return ctx->ftemp[ctx->nftemp++] = tcg_temp_new_i64();
34
-}
35
-
36
static TCGv_i64 get_fpr_hs(DisasContext *ctx, int reg_num)
37
{
38
if (!ctx->cfg_ptr->ext_zfinx) {
39
@@ -XXX,XX +XXX,XX @@ static TCGv_i64 get_fpr_hs(DisasContext *ctx, int reg_num)
40
case MXL_RV32:
41
#ifdef TARGET_RISCV32
42
{
43
- TCGv_i64 t = ftemp_new(ctx);
44
+ TCGv_i64 t = tcg_temp_new_i64();
45
tcg_gen_ext_i32_i64(t, cpu_gpr[reg_num]);
46
return t;
47
}
48
@@ -XXX,XX +XXX,XX @@ static TCGv_i64 get_fpr_d(DisasContext *ctx, int reg_num)
49
switch (get_xl(ctx)) {
50
case MXL_RV32:
51
{
52
- TCGv_i64 t = ftemp_new(ctx);
53
+ TCGv_i64 t = tcg_temp_new_i64();
54
tcg_gen_concat_tl_i64(t, cpu_gpr[reg_num], cpu_gpr[reg_num + 1]);
55
return t;
56
}
57
@@ -XXX,XX +XXX,XX @@ static TCGv_i64 dest_fpr(DisasContext *ctx, int reg_num)
58
}
59
60
if (reg_num == 0) {
61
- return ftemp_new(ctx);
62
+ return tcg_temp_new_i64();
63
}
64
65
switch (get_xl(ctx)) {
66
case MXL_RV32:
67
- return ftemp_new(ctx);
68
+ return tcg_temp_new_i64();
69
#ifdef TARGET_RISCV64
70
case MXL_RV64:
71
return cpu_gpr[reg_num];
72
@@ -XXX,XX +XXX,XX @@ static void riscv_tr_init_disas_context(DisasContextBase *dcbase, CPUState *cs)
73
ctx->cs = cs;
74
ctx->ntemp = 0;
75
memset(ctx->temp, 0, sizeof(ctx->temp));
76
- ctx->nftemp = 0;
77
- memset(ctx->ftemp, 0, sizeof(ctx->ftemp));
78
ctx->pm_mask_enabled = FIELD_EX32(tb_flags, TB_FLAGS, PM_MASK_ENABLED);
79
ctx->pm_base_enabled = FIELD_EX32(tb_flags, TB_FLAGS, PM_BASE_ENABLED);
80
ctx->itrigger = FIELD_EX32(tb_flags, TB_FLAGS, ITRIGGER);
81
@@ -XXX,XX +XXX,XX @@ static void riscv_tr_translate_insn(DisasContextBase *dcbase, CPUState *cpu)
82
ctx->temp[i] = NULL;
83
}
84
ctx->ntemp = 0;
85
- for (i = ctx->nftemp - 1; i >= 0; --i) {
86
- tcg_temp_free_i64(ctx->ftemp[i]);
87
- ctx->ftemp[i] = NULL;
88
- }
89
- ctx->nftemp = 0;
90
91
/* Only the first insn within a TB is allowed to cross a page boundary. */
92
if (ctx->base.is_jmp == DISAS_NEXT) {
93
--
94
2.34.1
diff view generated by jsdifflib
Deleted patch
1
Translators are no longer required to free tcg temporaries,
2
therefore there's no need to record temps for later freeing.
3
Replace the few uses with tcg_temp_new.
4
1
5
Reviewed-by: Weiwei Li <liweiwei@iscas.ac.cn>
6
Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
7
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
8
---
9
target/riscv/translate.c | 30 +++++------------------
10
target/riscv/insn_trans/trans_rvzfh.c.inc | 2 +-
11
2 files changed, 7 insertions(+), 25 deletions(-)
12
13
diff --git a/target/riscv/translate.c b/target/riscv/translate.c
14
index XXXXXXX..XXXXXXX 100644
15
--- a/target/riscv/translate.c
16
+++ b/target/riscv/translate.c
17
@@ -XXX,XX +XXX,XX @@ typedef struct DisasContext {
18
bool cfg_vta_all_1s;
19
target_ulong vstart;
20
bool vl_eq_vlmax;
21
- uint8_t ntemp;
22
CPUState *cs;
23
TCGv zero;
24
- /* Space for 3 operands plus 1 extra for address computation. */
25
- TCGv temp[4];
26
/* PointerMasking extension */
27
bool pm_mask_enabled;
28
bool pm_base_enabled;
29
@@ -XXX,XX +XXX,XX @@ static void gen_goto_tb(DisasContext *ctx, int n, target_ulong dest)
30
*
31
* Further, we may provide an extension for word operations.
32
*/
33
-static TCGv temp_new(DisasContext *ctx)
34
-{
35
- assert(ctx->ntemp < ARRAY_SIZE(ctx->temp));
36
- return ctx->temp[ctx->ntemp++] = tcg_temp_new();
37
-}
38
-
39
static TCGv get_gpr(DisasContext *ctx, int reg_num, DisasExtend ext)
40
{
41
TCGv t;
42
@@ -XXX,XX +XXX,XX @@ static TCGv get_gpr(DisasContext *ctx, int reg_num, DisasExtend ext)
43
case EXT_NONE:
44
break;
45
case EXT_SIGN:
46
- t = temp_new(ctx);
47
+ t = tcg_temp_new();
48
tcg_gen_ext32s_tl(t, cpu_gpr[reg_num]);
49
return t;
50
case EXT_ZERO:
51
- t = temp_new(ctx);
52
+ t = tcg_temp_new();
53
tcg_gen_ext32u_tl(t, cpu_gpr[reg_num]);
54
return t;
55
default:
56
@@ -XXX,XX +XXX,XX @@ static TCGv get_gprh(DisasContext *ctx, int reg_num)
57
static TCGv dest_gpr(DisasContext *ctx, int reg_num)
58
{
59
if (reg_num == 0 || get_olen(ctx) < TARGET_LONG_BITS) {
60
- return temp_new(ctx);
61
+ return tcg_temp_new();
62
}
63
return cpu_gpr[reg_num];
64
}
65
@@ -XXX,XX +XXX,XX @@ static TCGv dest_gpr(DisasContext *ctx, int reg_num)
66
static TCGv dest_gprh(DisasContext *ctx, int reg_num)
67
{
68
if (reg_num == 0) {
69
- return temp_new(ctx);
70
+ return tcg_temp_new();
71
}
72
return cpu_gprh[reg_num];
73
}
74
@@ -XXX,XX +XXX,XX @@ static void gen_jal(DisasContext *ctx, int rd, target_ulong imm)
75
/* Compute a canonical address from a register plus offset. */
76
static TCGv get_address(DisasContext *ctx, int rs1, int imm)
77
{
78
- TCGv addr = temp_new(ctx);
79
+ TCGv addr = tcg_temp_new();
80
TCGv src1 = get_gpr(ctx, rs1, EXT_NONE);
81
82
tcg_gen_addi_tl(addr, src1, imm);
83
@@ -XXX,XX +XXX,XX @@ static TCGv get_address(DisasContext *ctx, int rs1, int imm)
84
/* Compute a canonical address from a register plus reg offset. */
85
static TCGv get_address_indexed(DisasContext *ctx, int rs1, TCGv offs)
86
{
87
- TCGv addr = temp_new(ctx);
88
+ TCGv addr = tcg_temp_new();
89
TCGv src1 = get_gpr(ctx, rs1, EXT_NONE);
90
91
tcg_gen_add_tl(addr, src1, offs);
92
@@ -XXX,XX +XXX,XX @@ static void riscv_tr_init_disas_context(DisasContextBase *dcbase, CPUState *cs)
93
ctx->misa_mxl_max = env->misa_mxl_max;
94
ctx->xl = FIELD_EX32(tb_flags, TB_FLAGS, XL);
95
ctx->cs = cs;
96
- ctx->ntemp = 0;
97
- memset(ctx->temp, 0, sizeof(ctx->temp));
98
ctx->pm_mask_enabled = FIELD_EX32(tb_flags, TB_FLAGS, PM_MASK_ENABLED);
99
ctx->pm_base_enabled = FIELD_EX32(tb_flags, TB_FLAGS, PM_BASE_ENABLED);
100
ctx->itrigger = FIELD_EX32(tb_flags, TB_FLAGS, ITRIGGER);
101
@@ -XXX,XX +XXX,XX @@ static void riscv_tr_translate_insn(DisasContextBase *dcbase, CPUState *cpu)
102
DisasContext *ctx = container_of(dcbase, DisasContext, base);
103
CPURISCVState *env = cpu->env_ptr;
104
uint16_t opcode16 = translator_lduw(env, &ctx->base, ctx->base.pc_next);
105
- int i;
106
107
ctx->ol = ctx->xl;
108
decode_opc(env, ctx, opcode16);
109
ctx->base.pc_next = ctx->pc_succ_insn;
110
111
- for (i = ctx->ntemp - 1; i >= 0; --i) {
112
- tcg_temp_free(ctx->temp[i]);
113
- ctx->temp[i] = NULL;
114
- }
115
- ctx->ntemp = 0;
116
-
117
/* Only the first insn within a TB is allowed to cross a page boundary. */
118
if (ctx->base.is_jmp == DISAS_NEXT) {
119
if (ctx->itrigger || !is_same_page(&ctx->base, ctx->base.pc_next)) {
120
diff --git a/target/riscv/insn_trans/trans_rvzfh.c.inc b/target/riscv/insn_trans/trans_rvzfh.c.inc
121
index XXXXXXX..XXXXXXX 100644
122
--- a/target/riscv/insn_trans/trans_rvzfh.c.inc
123
+++ b/target/riscv/insn_trans/trans_rvzfh.c.inc
124
@@ -XXX,XX +XXX,XX @@ static bool trans_flh(DisasContext *ctx, arg_flh *a)
125
decode_save_opc(ctx);
126
t0 = get_gpr(ctx, a->rs1, EXT_NONE);
127
if (a->imm) {
128
- TCGv temp = temp_new(ctx);
129
+ TCGv temp = tcg_temp_new();
130
tcg_gen_addi_tl(temp, t0, a->imm);
131
t0 = temp;
132
}
133
--
134
2.34.1
diff view generated by jsdifflib
Deleted patch
1
Translators are no longer required to free tcg temporaries.
2
1
3
Reviewed-by: Weiwei Li <liweiwei@iscas.ac.cn>
4
Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
5
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
6
---
7
target/riscv/translate.c | 7 ---
8
target/riscv/insn_trans/trans_rvb.c.inc | 24 ----------
9
target/riscv/insn_trans/trans_rvd.c.inc | 2 -
10
target/riscv/insn_trans/trans_rvf.c.inc | 9 ----
11
target/riscv/insn_trans/trans_rvi.c.inc | 37 ---------------
12
target/riscv/insn_trans/trans_rvk.c.inc | 15 ------
13
target/riscv/insn_trans/trans_rvm.c.inc | 33 -------------
14
target/riscv/insn_trans/trans_rvv.c.inc | 55 ----------------------
15
target/riscv/insn_trans/trans_rvzfh.c.inc | 10 ----
16
target/riscv/insn_trans/trans_xthead.c.inc | 24 +---------
17
10 files changed, 1 insertion(+), 215 deletions(-)
18
19
diff --git a/target/riscv/translate.c b/target/riscv/translate.c
20
index XXXXXXX..XXXXXXX 100644
21
--- a/target/riscv/translate.c
22
+++ b/target/riscv/translate.c
23
@@ -XXX,XX +XXX,XX @@ static void gen_check_nanbox_h(TCGv_i64 out, TCGv_i64 in)
24
TCGv_i64 t_nan = tcg_const_i64(0xffffffffffff7e00ull);
25
26
tcg_gen_movcond_i64(TCG_COND_GEU, out, in, t_max, in, t_nan);
27
- tcg_temp_free_i64(t_max);
28
- tcg_temp_free_i64(t_nan);
29
}
30
31
static void gen_check_nanbox_s(TCGv_i64 out, TCGv_i64 in)
32
@@ -XXX,XX +XXX,XX @@ static void mark_fs_dirty(DisasContext *ctx)
33
tcg_gen_ld_tl(tmp, cpu_env, offsetof(CPURISCVState, mstatus));
34
tcg_gen_ori_tl(tmp, tmp, MSTATUS_FS);
35
tcg_gen_st_tl(tmp, cpu_env, offsetof(CPURISCVState, mstatus));
36
- tcg_temp_free(tmp);
37
}
38
39
if (ctx->virt_enabled && ctx->mstatus_hs_fs != MSTATUS_FS) {
40
@@ -XXX,XX +XXX,XX @@ static void mark_fs_dirty(DisasContext *ctx)
41
tcg_gen_ld_tl(tmp, cpu_env, offsetof(CPURISCVState, mstatus_hs));
42
tcg_gen_ori_tl(tmp, tmp, MSTATUS_FS);
43
tcg_gen_st_tl(tmp, cpu_env, offsetof(CPURISCVState, mstatus_hs));
44
- tcg_temp_free(tmp);
45
}
46
}
47
#else
48
@@ -XXX,XX +XXX,XX @@ static void mark_vs_dirty(DisasContext *ctx)
49
tcg_gen_ld_tl(tmp, cpu_env, offsetof(CPURISCVState, mstatus));
50
tcg_gen_ori_tl(tmp, tmp, MSTATUS_VS);
51
tcg_gen_st_tl(tmp, cpu_env, offsetof(CPURISCVState, mstatus));
52
- tcg_temp_free(tmp);
53
}
54
55
if (ctx->virt_enabled && ctx->mstatus_hs_vs != MSTATUS_VS) {
56
@@ -XXX,XX +XXX,XX @@ static void mark_vs_dirty(DisasContext *ctx)
57
tcg_gen_ld_tl(tmp, cpu_env, offsetof(CPURISCVState, mstatus_hs));
58
tcg_gen_ori_tl(tmp, tmp, MSTATUS_VS);
59
tcg_gen_st_tl(tmp, cpu_env, offsetof(CPURISCVState, mstatus_hs));
60
- tcg_temp_free(tmp);
61
}
62
}
63
#else
64
@@ -XXX,XX +XXX,XX @@ static bool gen_shift(DisasContext *ctx, arg_r *a, DisasExtend ext,
65
f128(dest, desth, src1, src1h, ext2);
66
gen_set_gpr128(ctx, a->rd, dest, desth);
67
}
68
- tcg_temp_free(ext2);
69
return true;
70
}
71
72
diff --git a/target/riscv/insn_trans/trans_rvb.c.inc b/target/riscv/insn_trans/trans_rvb.c.inc
73
index XXXXXXX..XXXXXXX 100644
74
--- a/target/riscv/insn_trans/trans_rvb.c.inc
75
+++ b/target/riscv/insn_trans/trans_rvb.c.inc
76
@@ -XXX,XX +XXX,XX @@ static void gen_clzw(TCGv ret, TCGv arg1)
77
TCGv t = tcg_temp_new();
78
tcg_gen_shli_tl(t, arg1, 32);
79
tcg_gen_clzi_tl(ret, t, 32);
80
- tcg_temp_free(t);
81
}
82
83
static bool trans_clz(DisasContext *ctx, arg_clz *a)
84
@@ -XXX,XX +XXX,XX @@ static void gen_bset(TCGv ret, TCGv arg1, TCGv shamt)
85
86
gen_sbop_mask(t, shamt);
87
tcg_gen_or_tl(ret, arg1, t);
88
-
89
- tcg_temp_free(t);
90
}
91
92
static bool trans_bset(DisasContext *ctx, arg_bset *a)
93
@@ -XXX,XX +XXX,XX @@ static void gen_bclr(TCGv ret, TCGv arg1, TCGv shamt)
94
95
gen_sbop_mask(t, shamt);
96
tcg_gen_andc_tl(ret, arg1, t);
97
-
98
- tcg_temp_free(t);
99
}
100
101
static bool trans_bclr(DisasContext *ctx, arg_bclr *a)
102
@@ -XXX,XX +XXX,XX @@ static void gen_binv(TCGv ret, TCGv arg1, TCGv shamt)
103
104
gen_sbop_mask(t, shamt);
105
tcg_gen_xor_tl(ret, arg1, t);
106
-
107
- tcg_temp_free(t);
108
}
109
110
static bool trans_binv(DisasContext *ctx, arg_binv *a)
111
@@ -XXX,XX +XXX,XX @@ static void gen_rorw(TCGv ret, TCGv arg1, TCGv arg2)
112
113
/* sign-extend 64-bits */
114
tcg_gen_ext_i32_tl(ret, t1);
115
-
116
- tcg_temp_free_i32(t1);
117
- tcg_temp_free_i32(t2);
118
}
119
120
static bool trans_ror(DisasContext *ctx, arg_ror *a)
121
@@ -XXX,XX +XXX,XX @@ static void gen_roriw(TCGv ret, TCGv arg1, target_long shamt)
122
tcg_gen_trunc_tl_i32(t1, arg1);
123
tcg_gen_rotri_i32(t1, t1, shamt);
124
tcg_gen_ext_i32_tl(ret, t1);
125
-
126
- tcg_temp_free_i32(t1);
127
}
128
129
static bool trans_rori(DisasContext *ctx, arg_rori *a)
130
@@ -XXX,XX +XXX,XX @@ static void gen_rolw(TCGv ret, TCGv arg1, TCGv arg2)
131
132
/* sign-extend 64-bits */
133
tcg_gen_ext_i32_tl(ret, t1);
134
-
135
- tcg_temp_free_i32(t1);
136
- tcg_temp_free_i32(t2);
137
}
138
139
static bool trans_rol(DisasContext *ctx, arg_rol *a)
140
@@ -XXX,XX +XXX,XX @@ static void gen_orc_b(TCGv ret, TCGv source1)
141
142
/* Replicate the lsb of each byte across the byte. */
143
tcg_gen_muli_tl(ret, tmp, 0xff);
144
-
145
- tcg_temp_free(tmp);
146
}
147
148
static bool trans_orc_b(DisasContext *ctx, arg_orc_b *a)
149
@@ -XXX,XX +XXX,XX @@ static void gen_sh##SHAMT##add(TCGv ret, TCGv arg1, TCGv arg2) \
150
\
151
tcg_gen_shli_tl(t, arg1, SHAMT); \
152
tcg_gen_add_tl(ret, t, arg2); \
153
- \
154
- tcg_temp_free(t); \
155
}
156
157
GEN_SHADD(1)
158
@@ -XXX,XX +XXX,XX @@ static void gen_sh##SHAMT##add_uw(TCGv ret, TCGv arg1, TCGv arg2) \
159
\
160
tcg_gen_shli_tl(t, t, SHAMT); \
161
tcg_gen_add_tl(ret, t, arg2); \
162
- \
163
- tcg_temp_free(t); \
164
}
165
166
GEN_SHADD_UW(1)
167
@@ -XXX,XX +XXX,XX @@ static void gen_add_uw(TCGv ret, TCGv arg1, TCGv arg2)
168
TCGv t = tcg_temp_new();
169
tcg_gen_ext32u_tl(t, arg1);
170
tcg_gen_add_tl(ret, t, arg2);
171
- tcg_temp_free(t);
172
}
173
174
static bool trans_add_uw(DisasContext *ctx, arg_add_uw *a)
175
@@ -XXX,XX +XXX,XX @@ static void gen_packh(TCGv ret, TCGv src1, TCGv src2)
176
177
tcg_gen_ext8u_tl(t, src2);
178
tcg_gen_deposit_tl(ret, src1, t, 8, TARGET_LONG_BITS - 8);
179
- tcg_temp_free(t);
180
}
181
182
static void gen_packw(TCGv ret, TCGv src1, TCGv src2)
183
@@ -XXX,XX +XXX,XX @@ static void gen_packw(TCGv ret, TCGv src1, TCGv src2)
184
185
tcg_gen_ext16s_tl(t, src2);
186
tcg_gen_deposit_tl(ret, src1, t, 16, TARGET_LONG_BITS - 16);
187
- tcg_temp_free(t);
188
}
189
190
static bool trans_brev8(DisasContext *ctx, arg_brev8 *a)
191
diff --git a/target/riscv/insn_trans/trans_rvd.c.inc b/target/riscv/insn_trans/trans_rvd.c.inc
192
index XXXXXXX..XXXXXXX 100644
193
--- a/target/riscv/insn_trans/trans_rvd.c.inc
194
+++ b/target/riscv/insn_trans/trans_rvd.c.inc
195
@@ -XXX,XX +XXX,XX @@ static bool trans_fsgnjn_d(DisasContext *ctx, arg_fsgnjn_d *a)
196
TCGv_i64 t0 = tcg_temp_new_i64();
197
tcg_gen_not_i64(t0, src2);
198
tcg_gen_deposit_i64(dest, t0, src1, 0, 63);
199
- tcg_temp_free_i64(t0);
200
}
201
gen_set_fpr_d(ctx, a->rd, dest);
202
mark_fs_dirty(ctx);
203
@@ -XXX,XX +XXX,XX @@ static bool trans_fsgnjx_d(DisasContext *ctx, arg_fsgnjx_d *a)
204
TCGv_i64 t0 = tcg_temp_new_i64();
205
tcg_gen_andi_i64(t0, src2, INT64_MIN);
206
tcg_gen_xor_i64(dest, src1, t0);
207
- tcg_temp_free_i64(t0);
208
}
209
gen_set_fpr_d(ctx, a->rd, dest);
210
mark_fs_dirty(ctx);
211
diff --git a/target/riscv/insn_trans/trans_rvf.c.inc b/target/riscv/insn_trans/trans_rvf.c.inc
212
index XXXXXXX..XXXXXXX 100644
213
--- a/target/riscv/insn_trans/trans_rvf.c.inc
214
+++ b/target/riscv/insn_trans/trans_rvf.c.inc
215
@@ -XXX,XX +XXX,XX @@ static bool trans_fsgnj_s(DisasContext *ctx, arg_fsgnj_s *a)
216
217
/* This formulation retains the nanboxing of rs2 in normal 'F'. */
218
tcg_gen_deposit_i64(dest, rs2, rs1, 0, 31);
219
-
220
- tcg_temp_free_i64(rs1);
221
- tcg_temp_free_i64(rs2);
222
} else {
223
tcg_gen_deposit_i64(dest, src2, src1, 0, 31);
224
tcg_gen_ext32s_i64(dest, dest);
225
@@ -XXX,XX +XXX,XX @@ static bool trans_fsgnjn_s(DisasContext *ctx, arg_fsgnjn_s *a)
226
tcg_gen_nor_i64(rs2, rs2, mask);
227
tcg_gen_and_i64(dest, mask, rs1);
228
tcg_gen_or_i64(dest, dest, rs2);
229
-
230
- tcg_temp_free_i64(rs2);
231
}
232
/* signed-extended intead of nanboxing for result if enable zfinx */
233
if (ctx->cfg_ptr->ext_zfinx) {
234
tcg_gen_ext32s_i64(dest, dest);
235
}
236
gen_set_fpr_hs(ctx, a->rd, dest);
237
- tcg_temp_free_i64(rs1);
238
mark_fs_dirty(ctx);
239
return true;
240
}
241
@@ -XXX,XX +XXX,XX @@ static bool trans_fsgnjx_s(DisasContext *ctx, arg_fsgnjx_s *a)
242
*/
243
tcg_gen_andi_i64(dest, rs2, MAKE_64BIT_MASK(31, 1));
244
tcg_gen_xor_i64(dest, rs1, dest);
245
-
246
- tcg_temp_free_i64(rs2);
247
}
248
/* signed-extended intead of nanboxing for result if enable zfinx */
249
if (ctx->cfg_ptr->ext_zfinx) {
250
tcg_gen_ext32s_i64(dest, dest);
251
}
252
- tcg_temp_free_i64(rs1);
253
gen_set_fpr_hs(ctx, a->rd, dest);
254
mark_fs_dirty(ctx);
255
return true;
256
diff --git a/target/riscv/insn_trans/trans_rvi.c.inc b/target/riscv/insn_trans/trans_rvi.c.inc
257
index XXXXXXX..XXXXXXX 100644
258
--- a/target/riscv/insn_trans/trans_rvi.c.inc
259
+++ b/target/riscv/insn_trans/trans_rvi.c.inc
260
@@ -XXX,XX +XXX,XX @@ static bool trans_jalr(DisasContext *ctx, arg_jalr *a)
261
misaligned = gen_new_label();
262
tcg_gen_andi_tl(t0, cpu_pc, 0x2);
263
tcg_gen_brcondi_tl(TCG_COND_NE, t0, 0x0, misaligned);
264
- tcg_temp_free(t0);
265
}
266
267
gen_set_gpri(ctx, a->rd, ctx->pc_succ_insn);
268
@@ -XXX,XX +XXX,XX @@ static TCGCond gen_compare_i128(bool bz, TCGv rl,
269
tcg_gen_xor_tl(tmp, ah, bh);
270
tcg_gen_and_tl(rl, rl, tmp);
271
tcg_gen_xor_tl(rl, rh, rl);
272
-
273
- tcg_temp_free(tmp);
274
}
275
break;
276
277
@@ -XXX,XX +XXX,XX @@ static TCGCond gen_compare_i128(bool bz, TCGv rl,
278
/* seed third word with 1, which will be result */
279
tcg_gen_sub2_tl(tmp, rh, ah, one, tmp, zero);
280
tcg_gen_sub2_tl(tmp, rl, tmp, rh, bh, zero);
281
-
282
- tcg_temp_free(tmp);
283
}
284
break;
285
286
@@ -XXX,XX +XXX,XX @@ static TCGCond gen_compare_i128(bool bz, TCGv rl,
287
if (invert) {
288
cond = tcg_invert_cond(cond);
289
}
290
-
291
- tcg_temp_free(rh);
292
return cond;
293
}
294
295
@@ -XXX,XX +XXX,XX @@ static bool gen_branch(DisasContext *ctx, arg_b *a, TCGCond cond)
296
cond = gen_compare_i128(a->rs2 == 0,
297
tmp, src1, src1h, src2, src2h, cond);
298
tcg_gen_brcondi_tl(cond, tmp, 0, l);
299
-
300
- tcg_temp_free(tmp);
301
} else {
302
tcg_gen_brcond_tl(cond, src1, src2, l);
303
}
304
@@ -XXX,XX +XXX,XX @@ static bool gen_load_i128(DisasContext *ctx, arg_lb *a, MemOp memop)
305
}
306
307
gen_set_gpr128(ctx, a->rd, destl, desth);
308
-
309
- tcg_temp_free(addrl);
310
return true;
311
}
312
313
@@ -XXX,XX +XXX,XX @@ static bool gen_store_i128(DisasContext *ctx, arg_sb *a, MemOp memop)
314
tcg_gen_addi_tl(addrl, addrl, 8);
315
tcg_gen_qemu_st_tl(src2h, addrl, ctx->mem_idx, MO_TEUQ);
316
}
317
-
318
- tcg_temp_free(addrl);
319
return true;
320
}
321
322
@@ -XXX,XX +XXX,XX @@ static void gen_sll_i128(TCGv destl, TCGv desth,
323
324
tcg_gen_movcond_tl(TCG_COND_NE, destl, hs, zero, zero, ll);
325
tcg_gen_movcond_tl(TCG_COND_NE, desth, hs, zero, ll, h1);
326
-
327
- tcg_temp_free(ls);
328
- tcg_temp_free(rs);
329
- tcg_temp_free(hs);
330
- tcg_temp_free(ll);
331
- tcg_temp_free(lr);
332
- tcg_temp_free(h0);
333
- tcg_temp_free(h1);
334
}
335
336
static bool trans_sll(DisasContext *ctx, arg_sll *a)
337
@@ -XXX,XX +XXX,XX @@ static void gen_srl_i128(TCGv destl, TCGv desth,
338
339
tcg_gen_movcond_tl(TCG_COND_NE, destl, hs, zero, h1, h0);
340
tcg_gen_movcond_tl(TCG_COND_NE, desth, hs, zero, zero, h1);
341
-
342
- tcg_temp_free(ls);
343
- tcg_temp_free(rs);
344
- tcg_temp_free(hs);
345
- tcg_temp_free(ll);
346
- tcg_temp_free(lr);
347
- tcg_temp_free(h0);
348
- tcg_temp_free(h1);
349
}
350
351
static bool trans_srl(DisasContext *ctx, arg_srl *a)
352
@@ -XXX,XX +XXX,XX @@ static void gen_sra_i128(TCGv destl, TCGv desth,
353
354
tcg_gen_movcond_tl(TCG_COND_NE, destl, hs, zero, h1, h0);
355
tcg_gen_movcond_tl(TCG_COND_NE, desth, hs, zero, lr, h1);
356
-
357
- tcg_temp_free(ls);
358
- tcg_temp_free(rs);
359
- tcg_temp_free(hs);
360
- tcg_temp_free(ll);
361
- tcg_temp_free(lr);
362
- tcg_temp_free(h0);
363
- tcg_temp_free(h1);
364
}
365
366
static bool trans_sra(DisasContext *ctx, arg_sra *a)
367
diff --git a/target/riscv/insn_trans/trans_rvk.c.inc b/target/riscv/insn_trans/trans_rvk.c.inc
368
index XXXXXXX..XXXXXXX 100644
369
--- a/target/riscv/insn_trans/trans_rvk.c.inc
370
+++ b/target/riscv/insn_trans/trans_rvk.c.inc
371
@@ -XXX,XX +XXX,XX @@ static bool gen_sha256(DisasContext *ctx, arg_r2 *a, DisasExtend ext,
372
tcg_gen_ext_i32_tl(dest, t1);
373
374
gen_set_gpr(ctx, a->rd, dest);
375
- tcg_temp_free_i32(t0);
376
- tcg_temp_free_i32(t1);
377
- tcg_temp_free_i32(t2);
378
return true;
379
}
380
381
@@ -XXX,XX +XXX,XX @@ static bool gen_sha512_rv32(DisasContext *ctx, arg_r *a, DisasExtend ext,
382
tcg_gen_trunc_i64_tl(dest, t1);
383
384
gen_set_gpr(ctx, a->rd, dest);
385
- tcg_temp_free_i64(t0);
386
- tcg_temp_free_i64(t1);
387
- tcg_temp_free_i64(t2);
388
return true;
389
}
390
391
@@ -XXX,XX +XXX,XX @@ static bool gen_sha512h_rv32(DisasContext *ctx, arg_r *a, DisasExtend ext,
392
tcg_gen_trunc_i64_tl(dest, t1);
393
394
gen_set_gpr(ctx, a->rd, dest);
395
- tcg_temp_free_i64(t0);
396
- tcg_temp_free_i64(t1);
397
- tcg_temp_free_i64(t2);
398
return true;
399
}
400
401
@@ -XXX,XX +XXX,XX @@ static bool gen_sha512_rv64(DisasContext *ctx, arg_r2 *a, DisasExtend ext,
402
tcg_gen_trunc_i64_tl(dest, t1);
403
404
gen_set_gpr(ctx, a->rd, dest);
405
- tcg_temp_free_i64(t0);
406
- tcg_temp_free_i64(t1);
407
- tcg_temp_free_i64(t2);
408
return true;
409
}
410
411
@@ -XXX,XX +XXX,XX @@ static bool gen_sm3(DisasContext *ctx, arg_r2 *a, int32_t b, int32_t c)
412
tcg_gen_xor_i32(t1, t1, t0);
413
tcg_gen_ext_i32_tl(dest, t1);
414
gen_set_gpr(ctx, a->rd, dest);
415
-
416
- tcg_temp_free_i32(t0);
417
- tcg_temp_free_i32(t1);
418
return true;
419
}
420
421
diff --git a/target/riscv/insn_trans/trans_rvm.c.inc b/target/riscv/insn_trans/trans_rvm.c.inc
422
index XXXXXXX..XXXXXXX 100644
423
--- a/target/riscv/insn_trans/trans_rvm.c.inc
424
+++ b/target/riscv/insn_trans/trans_rvm.c.inc
425
@@ -XXX,XX +XXX,XX @@ static void gen_mulhu_i128(TCGv r2, TCGv r3, TCGv al, TCGv ah, TCGv bl, TCGv bh)
426
427
tcg_gen_mulu2_tl(tmpl, tmph, ah, bh);
428
tcg_gen_add2_tl(r2, r3, r2, r3, tmpl, tmph);
429
-
430
- tcg_temp_free(tmpl);
431
- tcg_temp_free(tmph);
432
}
433
434
static void gen_mul_i128(TCGv rl, TCGv rh,
435
@@ -XXX,XX +XXX,XX @@ static void gen_mul_i128(TCGv rl, TCGv rh,
436
tcg_gen_add2_tl(rh, tmpx, rh, zero, tmpl, tmph);
437
tcg_gen_mulu2_tl(tmpl, tmph, rs1h, rs2l);
438
tcg_gen_add2_tl(rh, tmph, rh, tmpx, tmpl, tmph);
439
-
440
- tcg_temp_free(tmpl);
441
- tcg_temp_free(tmph);
442
- tcg_temp_free(tmpx);
443
}
444
445
static bool trans_mul(DisasContext *ctx, arg_mul *a)
446
@@ -XXX,XX +XXX,XX @@ static void gen_mulh_i128(TCGv rl, TCGv rh,
447
tcg_gen_and_tl(t1h, t1h, rs1h);
448
tcg_gen_sub2_tl(t0l, t0h, rl, rh, t0l, t0h);
449
tcg_gen_sub2_tl(rl, rh, t0l, t0h, t1l, t1h);
450
-
451
- tcg_temp_free(t0l);
452
- tcg_temp_free(t0h);
453
- tcg_temp_free(t1l);
454
- tcg_temp_free(t1h);
455
}
456
457
static void gen_mulh(TCGv ret, TCGv s1, TCGv s2)
458
@@ -XXX,XX +XXX,XX @@ static void gen_mulh(TCGv ret, TCGv s1, TCGv s2)
459
TCGv discard = tcg_temp_new();
460
461
tcg_gen_muls2_tl(discard, ret, s1, s2);
462
- tcg_temp_free(discard);
463
}
464
465
static void gen_mulh_w(TCGv ret, TCGv s1, TCGv s2)
466
@@ -XXX,XX +XXX,XX @@ static void gen_mulhsu_i128(TCGv rl, TCGv rh,
467
tcg_gen_and_tl(t0l, t0h, rs2l);
468
tcg_gen_and_tl(t0h, t0h, rs2h);
469
tcg_gen_sub2_tl(rl, rh, rl, rh, t0l, t0h);
470
-
471
- tcg_temp_free(t0l);
472
- tcg_temp_free(t0h);
473
}
474
475
static void gen_mulhsu(TCGv ret, TCGv arg1, TCGv arg2)
476
@@ -XXX,XX +XXX,XX @@ static void gen_mulhsu(TCGv ret, TCGv arg1, TCGv arg2)
477
tcg_gen_sari_tl(rl, arg1, TARGET_LONG_BITS - 1);
478
tcg_gen_and_tl(rl, rl, arg2);
479
tcg_gen_sub_tl(ret, rh, rl);
480
-
481
- tcg_temp_free(rl);
482
- tcg_temp_free(rh);
483
}
484
485
static void gen_mulhsu_w(TCGv ret, TCGv arg1, TCGv arg2)
486
@@ -XXX,XX +XXX,XX @@ static void gen_mulhsu_w(TCGv ret, TCGv arg1, TCGv arg2)
487
tcg_gen_ext32s_tl(t1, arg1);
488
tcg_gen_ext32u_tl(t2, arg2);
489
tcg_gen_mul_tl(ret, t1, t2);
490
- tcg_temp_free(t1);
491
- tcg_temp_free(t2);
492
tcg_gen_sari_tl(ret, ret, 32);
493
}
494
495
@@ -XXX,XX +XXX,XX @@ static void gen_mulhu(TCGv ret, TCGv s1, TCGv s2)
496
TCGv discard = tcg_temp_new();
497
498
tcg_gen_mulu2_tl(discard, ret, s1, s2);
499
- tcg_temp_free(discard);
500
}
501
502
static bool trans_mulhu(DisasContext *ctx, arg_mulhu *a)
503
@@ -XXX,XX +XXX,XX @@ static void gen_div(TCGv ret, TCGv source1, TCGv source2)
504
tcg_gen_movcond_tl(TCG_COND_EQ, temp2, source2, zero, one, temp2);
505
506
tcg_gen_div_tl(ret, temp1, temp2);
507
-
508
- tcg_temp_free(temp1);
509
- tcg_temp_free(temp2);
510
}
511
512
static bool trans_div(DisasContext *ctx, arg_div *a)
513
@@ -XXX,XX +XXX,XX @@ static void gen_divu(TCGv ret, TCGv source1, TCGv source2)
514
tcg_gen_movcond_tl(TCG_COND_EQ, temp1, source2, zero, max, source1);
515
tcg_gen_movcond_tl(TCG_COND_EQ, temp2, source2, zero, one, source2);
516
tcg_gen_divu_tl(ret, temp1, temp2);
517
-
518
- tcg_temp_free(temp1);
519
- tcg_temp_free(temp2);
520
}
521
522
static bool trans_divu(DisasContext *ctx, arg_divu *a)
523
@@ -XXX,XX +XXX,XX @@ static void gen_rem(TCGv ret, TCGv source1, TCGv source2)
524
525
/* If div by zero, the required result is the original dividend. */
526
tcg_gen_movcond_tl(TCG_COND_EQ, ret, source2, zero, source1, temp1);
527
-
528
- tcg_temp_free(temp1);
529
- tcg_temp_free(temp2);
530
}
531
532
static bool trans_rem(DisasContext *ctx, arg_rem *a)
533
@@ -XXX,XX +XXX,XX @@ static void gen_remu(TCGv ret, TCGv source1, TCGv source2)
534
535
/* If div by zero, the required result is the original dividend. */
536
tcg_gen_movcond_tl(TCG_COND_EQ, ret, source2, zero, source1, temp);
537
-
538
- tcg_temp_free(temp);
539
}
540
541
static bool trans_remu(DisasContext *ctx, arg_remu *a)
542
diff --git a/target/riscv/insn_trans/trans_rvv.c.inc b/target/riscv/insn_trans/trans_rvv.c.inc
543
index XXXXXXX..XXXXXXX 100644
544
--- a/target/riscv/insn_trans/trans_rvv.c.inc
545
+++ b/target/riscv/insn_trans/trans_rvv.c.inc
546
@@ -XXX,XX +XXX,XX @@ static bool do_vsetvl(DisasContext *s, int rd, int rs1, TCGv s2)
547
gen_set_pc_imm(s, s->pc_succ_insn);
548
lookup_and_goto_ptr(s);
549
s->base.is_jmp = DISAS_NORETURN;
550
-
551
- if (rd == 0 && rs1 == 0) {
552
- tcg_temp_free(s1);
553
- }
554
-
555
return true;
556
}
557
558
@@ -XXX,XX +XXX,XX @@ static bool ldst_us_trans(uint32_t vd, uint32_t rs1, uint32_t data,
559
560
fn(dest, mask, base, cpu_env, desc);
561
562
- tcg_temp_free_ptr(dest);
563
- tcg_temp_free_ptr(mask);
564
-
565
if (!is_store) {
566
mark_vs_dirty(s);
567
}
568
@@ -XXX,XX +XXX,XX @@ static bool ldst_stride_trans(uint32_t vd, uint32_t rs1, uint32_t rs2,
569
570
fn(dest, mask, base, stride, cpu_env, desc);
571
572
- tcg_temp_free_ptr(dest);
573
- tcg_temp_free_ptr(mask);
574
-
575
if (!is_store) {
576
mark_vs_dirty(s);
577
}
578
@@ -XXX,XX +XXX,XX @@ static bool ldst_index_trans(uint32_t vd, uint32_t rs1, uint32_t vs2,
579
580
fn(dest, mask, base, index, cpu_env, desc);
581
582
- tcg_temp_free_ptr(dest);
583
- tcg_temp_free_ptr(mask);
584
- tcg_temp_free_ptr(index);
585
-
586
if (!is_store) {
587
mark_vs_dirty(s);
588
}
589
@@ -XXX,XX +XXX,XX @@ static bool ldff_trans(uint32_t vd, uint32_t rs1, uint32_t data,
590
591
fn(dest, mask, base, cpu_env, desc);
592
593
- tcg_temp_free_ptr(dest);
594
- tcg_temp_free_ptr(mask);
595
mark_vs_dirty(s);
596
gen_set_label(over);
597
return true;
598
@@ -XXX,XX +XXX,XX @@ static bool ldst_whole_trans(uint32_t vd, uint32_t rs1, uint32_t nf,
599
600
fn(dest, base, cpu_env, desc);
601
602
- tcg_temp_free_ptr(dest);
603
-
604
if (!is_store) {
605
mark_vs_dirty(s);
606
}
607
@@ -XXX,XX +XXX,XX @@ static bool opivx_trans(uint32_t vd, uint32_t rs1, uint32_t vs2, uint32_t vm,
608
609
fn(dest, mask, src1, src2, cpu_env, desc);
610
611
- tcg_temp_free_ptr(dest);
612
- tcg_temp_free_ptr(mask);
613
- tcg_temp_free_ptr(src2);
614
mark_vs_dirty(s);
615
gen_set_label(over);
616
return true;
617
@@ -XXX,XX +XXX,XX @@ do_opivx_gvec(DisasContext *s, arg_rmrr *a, GVecGen2sFn *gvec_fn,
618
gvec_fn(s->sew, vreg_ofs(s, a->rd), vreg_ofs(s, a->rs2),
619
src1, MAXSZ(s), MAXSZ(s));
620
621
- tcg_temp_free_i64(src1);
622
mark_vs_dirty(s);
623
return true;
624
}
625
@@ -XXX,XX +XXX,XX @@ static bool opivi_trans(uint32_t vd, uint32_t imm, uint32_t vs2, uint32_t vm,
626
627
fn(dest, mask, src1, src2, cpu_env, desc);
628
629
- tcg_temp_free_ptr(dest);
630
- tcg_temp_free_ptr(mask);
631
- tcg_temp_free_ptr(src2);
632
mark_vs_dirty(s);
633
gen_set_label(over);
634
return true;
635
@@ -XXX,XX +XXX,XX @@ do_opivx_gvec_shift(DisasContext *s, arg_rmrr *a, GVecGen2sFn32 *gvec_fn,
636
gvec_fn(s->sew, vreg_ofs(s, a->rd), vreg_ofs(s, a->rs2),
637
src1, MAXSZ(s), MAXSZ(s));
638
639
- tcg_temp_free_i32(src1);
640
mark_vs_dirty(s);
641
return true;
642
}
643
@@ -XXX,XX +XXX,XX @@ static bool trans_vmv_v_x(DisasContext *s, arg_vmv_v_x *a)
644
tcg_gen_ext_tl_i64(s1_i64, s1);
645
tcg_gen_gvec_dup_i64(s->sew, vreg_ofs(s, a->rd),
646
MAXSZ(s), MAXSZ(s), s1_i64);
647
- tcg_temp_free_i64(s1_i64);
648
} else {
649
tcg_gen_gvec_dup_tl(s->sew, vreg_ofs(s, a->rd),
650
MAXSZ(s), MAXSZ(s), s1);
651
@@ -XXX,XX +XXX,XX @@ static bool trans_vmv_v_x(DisasContext *s, arg_vmv_v_x *a)
652
s->cfg_ptr->vlen / 8, data));
653
tcg_gen_addi_ptr(dest, cpu_env, vreg_ofs(s, a->rd));
654
fns[s->sew](dest, s1_i64, cpu_env, desc);
655
-
656
- tcg_temp_free_ptr(dest);
657
- tcg_temp_free_i64(s1_i64);
658
}
659
660
mark_vs_dirty(s);
661
@@ -XXX,XX +XXX,XX @@ static bool trans_vmv_v_i(DisasContext *s, arg_vmv_v_i *a)
662
tcg_gen_addi_ptr(dest, cpu_env, vreg_ofs(s, a->rd));
663
fns[s->sew](dest, s1, cpu_env, desc);
664
665
- tcg_temp_free_ptr(dest);
666
mark_vs_dirty(s);
667
gen_set_label(over);
668
}
669
@@ -XXX,XX +XXX,XX @@ static bool opfvf_trans(uint32_t vd, uint32_t rs1, uint32_t vs2,
670
671
fn(dest, mask, t1, src2, cpu_env, desc);
672
673
- tcg_temp_free_ptr(dest);
674
- tcg_temp_free_ptr(mask);
675
- tcg_temp_free_ptr(src2);
676
- tcg_temp_free_i64(t1);
677
mark_vs_dirty(s);
678
gen_set_label(over);
679
return true;
680
@@ -XXX,XX +XXX,XX @@ static bool trans_vfmv_v_f(DisasContext *s, arg_vfmv_v_f *a)
681
682
fns[s->sew - 1](dest, t1, cpu_env, desc);
683
684
- tcg_temp_free_ptr(dest);
685
mark_vs_dirty(s);
686
gen_set_label(over);
687
}
688
- tcg_temp_free_i64(t1);
689
return true;
690
}
691
return false;
692
@@ -XXX,XX +XXX,XX @@ static bool trans_vcpop_m(DisasContext *s, arg_rmr *a)
693
694
gen_helper_vcpop_m(dst, mask, src2, cpu_env, desc);
695
gen_set_gpr(s, a->rd, dst);
696
-
697
- tcg_temp_free_ptr(mask);
698
- tcg_temp_free_ptr(src2);
699
-
700
return true;
701
}
702
return false;
703
@@ -XXX,XX +XXX,XX @@ static bool trans_vfirst_m(DisasContext *s, arg_rmr *a)
704
705
gen_helper_vfirst_m(dst, mask, src2, cpu_env, desc);
706
gen_set_gpr(s, a->rd, dst);
707
-
708
- tcg_temp_free_ptr(mask);
709
- tcg_temp_free_ptr(src2);
710
return true;
711
}
712
return false;
713
@@ -XXX,XX +XXX,XX @@ static void vec_element_loadx(DisasContext *s, TCGv_i64 dest,
714
/* Perform the load. */
715
load_element(dest, base,
716
vreg_ofs(s, vreg), s->sew, false);
717
- tcg_temp_free_ptr(base);
718
- tcg_temp_free_i32(ofs);
719
720
/* Flush out-of-range indexing to zero. */
721
t_vlmax = tcg_constant_i64(vlmax);
722
@@ -XXX,XX +XXX,XX @@ static void vec_element_loadx(DisasContext *s, TCGv_i64 dest,
723
724
tcg_gen_movcond_i64(TCG_COND_LTU, dest, t_idx,
725
t_vlmax, dest, t_zero);
726
-
727
- tcg_temp_free_i64(t_idx);
728
}
729
730
static void vec_element_loadi(DisasContext *s, TCGv_i64 dest,
731
@@ -XXX,XX +XXX,XX @@ static bool trans_vmv_x_s(DisasContext *s, arg_vmv_x_s *a)
732
vec_element_loadi(s, t1, a->rs2, 0, true);
733
tcg_gen_trunc_i64_tl(dest, t1);
734
gen_set_gpr(s, a->rd, dest);
735
- tcg_temp_free_i64(t1);
736
- tcg_temp_free(dest);
737
-
738
return true;
739
}
740
return false;
741
@@ -XXX,XX +XXX,XX @@ static bool trans_vmv_s_x(DisasContext *s, arg_vmv_s_x *a)
742
s1 = get_gpr(s, a->rs1, EXT_NONE);
743
tcg_gen_ext_tl_i64(t1, s1);
744
vec_element_storei(s, a->rd, 0, t1);
745
- tcg_temp_free_i64(t1);
746
mark_vs_dirty(s);
747
gen_set_label(over);
748
return true;
749
@@ -XXX,XX +XXX,XX @@ static bool trans_vfmv_s_f(DisasContext *s, arg_vfmv_s_f *a)
750
do_nanbox(s, t1, cpu_fpr[a->rs1]);
751
752
vec_element_storei(s, a->rd, 0, t1);
753
- tcg_temp_free_i64(t1);
754
mark_vs_dirty(s);
755
gen_set_label(over);
756
return true;
757
@@ -XXX,XX +XXX,XX @@ static bool trans_vrgather_vx(DisasContext *s, arg_rmrr *a)
758
759
tcg_gen_gvec_dup_i64(s->sew, vreg_ofs(s, a->rd),
760
MAXSZ(s), MAXSZ(s), dest);
761
- tcg_temp_free_i64(dest);
762
mark_vs_dirty(s);
763
} else {
764
static gen_helper_opivx * const fns[4] = {
765
diff --git a/target/riscv/insn_trans/trans_rvzfh.c.inc b/target/riscv/insn_trans/trans_rvzfh.c.inc
766
index XXXXXXX..XXXXXXX 100644
767
--- a/target/riscv/insn_trans/trans_rvzfh.c.inc
768
+++ b/target/riscv/insn_trans/trans_rvzfh.c.inc
769
@@ -XXX,XX +XXX,XX @@ static bool trans_fsgnj_h(DisasContext *ctx, arg_fsgnj_h *a)
770
771
/* This formulation retains the nanboxing of rs2 in normal 'Zfh'. */
772
tcg_gen_deposit_i64(dest, rs2, rs1, 0, 15);
773
-
774
- tcg_temp_free_i64(rs1);
775
- tcg_temp_free_i64(rs2);
776
} else {
777
tcg_gen_deposit_i64(dest, src2, src1, 0, 15);
778
tcg_gen_ext16s_i64(dest, dest);
779
@@ -XXX,XX +XXX,XX @@ static bool trans_fsgnjn_h(DisasContext *ctx, arg_fsgnjn_h *a)
780
tcg_gen_andc_i64(rs2, rs2, mask);
781
tcg_gen_and_i64(dest, mask, rs1);
782
tcg_gen_or_i64(dest, dest, rs2);
783
-
784
- tcg_temp_free_i64(mask);
785
- tcg_temp_free_i64(rs2);
786
}
787
/* signed-extended intead of nanboxing for result if enable zfinx */
788
if (ctx->cfg_ptr->ext_zfinx) {
789
tcg_gen_ext16s_i64(dest, dest);
790
}
791
- tcg_temp_free_i64(rs1);
792
mark_fs_dirty(ctx);
793
return true;
794
}
795
@@ -XXX,XX +XXX,XX @@ static bool trans_fsgnjx_h(DisasContext *ctx, arg_fsgnjx_h *a)
796
*/
797
tcg_gen_andi_i64(dest, rs2, MAKE_64BIT_MASK(15, 1));
798
tcg_gen_xor_i64(dest, rs1, dest);
799
-
800
- tcg_temp_free_i64(rs2);
801
}
802
/* signed-extended intead of nanboxing for result if enable zfinx */
803
if (ctx->cfg_ptr->ext_zfinx) {
804
tcg_gen_ext16s_i64(dest, dest);
805
}
806
- tcg_temp_free_i64(rs1);
807
mark_fs_dirty(ctx);
808
return true;
809
}
810
diff --git a/target/riscv/insn_trans/trans_xthead.c.inc b/target/riscv/insn_trans/trans_xthead.c.inc
811
index XXXXXXX..XXXXXXX 100644
812
--- a/target/riscv/insn_trans/trans_xthead.c.inc
813
+++ b/target/riscv/insn_trans/trans_xthead.c.inc
814
@@ -XXX,XX +XXX,XX @@ static TCGv get_th_address_indexed(DisasContext *ctx, int rs1, int rs2,
815
tcg_gen_shli_tl(offs, src2, imm2);
816
}
817
818
- TCGv addr = get_address_indexed(ctx, rs1, offs);
819
-
820
- tcg_temp_free(offs);
821
- return addr;
822
+ return get_address_indexed(ctx, rs1, offs);
823
}
824
825
/* XTheadBa */
826
@@ -XXX,XX +XXX,XX @@ static void gen_th_addsl##SHAMT(TCGv ret, TCGv arg1, TCGv arg2) \
827
TCGv t = tcg_temp_new(); \
828
tcg_gen_shli_tl(t, arg2, SHAMT); \
829
tcg_gen_add_tl(ret, t, arg1); \
830
- tcg_temp_free(t); \
831
}
832
833
GEN_TH_ADDSL(1)
834
@@ -XXX,XX +XXX,XX @@ static bool gen_th_ff0(DisasContext *ctx, arg_th_ff0 *a, DisasExtend ext)
835
gen_clz(dest, t);
836
}
837
838
- tcg_temp_free(t);
839
gen_set_gpr(ctx, a->rd, dest);
840
841
return true;
842
@@ -XXX,XX +XXX,XX @@ static bool trans_th_fmv_hw_x(DisasContext *ctx, arg_th_fmv_hw_x *a)
843
844
tcg_gen_extu_tl_i64(t1, src1);
845
tcg_gen_deposit_i64(cpu_fpr[a->rd], cpu_fpr[a->rd], t1, 32, 32);
846
- tcg_temp_free_i64(t1);
847
mark_fs_dirty(ctx);
848
return true;
849
}
850
@@ -XXX,XX +XXX,XX @@ static bool trans_th_fmv_x_hw(DisasContext *ctx, arg_th_fmv_x_hw *a)
851
tcg_gen_extract_i64(t1, cpu_fpr[a->rs1], 32, 32);
852
tcg_gen_trunc_i64_tl(dst, t1);
853
gen_set_gpr(ctx, a->rd, dst);
854
- tcg_temp_free_i64(t1);
855
mark_fs_dirty(ctx);
856
return true;
857
}
858
@@ -XXX,XX +XXX,XX @@ static bool gen_th_mac(DisasContext *ctx, arg_r *a,
859
extend_operand_func(tmp, src1);
860
extend_operand_func(tmp2, src2);
861
tcg_gen_mul_tl(tmp, tmp, tmp2);
862
- tcg_temp_free(tmp2);
863
} else {
864
tcg_gen_mul_tl(tmp, src1, src2);
865
}
866
867
accumulate_func(dest, src0, tmp);
868
gen_set_gpr(ctx, a->rd, dest);
869
- tcg_temp_free(tmp);
870
-
871
return true;
872
}
873
874
@@ -XXX,XX +XXX,XX @@ static bool gen_load_inc(DisasContext *ctx, arg_th_meminc *a, MemOp memop,
875
tcg_gen_addi_tl(rs1, rs1, imm);
876
gen_set_gpr(ctx, a->rd, rd);
877
gen_set_gpr(ctx, a->rs1, rs1);
878
-
879
- tcg_temp_free(addr);
880
return true;
881
}
882
883
@@ -XXX,XX +XXX,XX @@ static bool gen_store_inc(DisasContext *ctx, arg_th_meminc *a, MemOp memop,
884
tcg_gen_qemu_st_tl(data, addr, ctx->mem_idx, memop);
885
tcg_gen_addi_tl(rs1, rs1, imm);
886
gen_set_gpr(ctx, a->rs1, rs1);
887
-
888
- tcg_temp_free(addr);
889
return true;
890
}
891
892
@@ -XXX,XX +XXX,XX @@ static bool gen_loadpair_tl(DisasContext *ctx, arg_th_pair *a, MemOp memop,
893
tcg_gen_qemu_ld_tl(t2, addr2, ctx->mem_idx, memop);
894
gen_set_gpr(ctx, a->rd1, t1);
895
gen_set_gpr(ctx, a->rd2, t2);
896
-
897
- tcg_temp_free(t1);
898
- tcg_temp_free(t2);
899
- tcg_temp_free(addr1);
900
- tcg_temp_free(addr2);
901
return true;
902
}
903
904
@@ -XXX,XX +XXX,XX @@ static bool gen_storepair_tl(DisasContext *ctx, arg_th_pair *a, MemOp memop,
905
906
tcg_gen_qemu_st_tl(data1, addr1, ctx->mem_idx, memop);
907
tcg_gen_qemu_st_tl(data2, addr2, ctx->mem_idx, memop);
908
-
909
- tcg_temp_free(addr1);
910
- tcg_temp_free(addr2);
911
return true;
912
}
913
914
--
915
2.34.1
diff view generated by jsdifflib
Deleted patch
1
Translators are no longer required to free tcg temporaries.
2
1
3
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
5
---
6
target/rx/translate.c | 84 -------------------------------------------
7
1 file changed, 84 deletions(-)
8
9
diff --git a/target/rx/translate.c b/target/rx/translate.c
10
index XXXXXXX..XXXXXXX 100644
11
--- a/target/rx/translate.c
12
+++ b/target/rx/translate.c
13
@@ -XXX,XX +XXX,XX @@ static bool trans_MOV_rm(DisasContext *ctx, arg_MOV_rm *a)
14
mem = tcg_temp_new();
15
tcg_gen_addi_i32(mem, cpu_regs[a->rd], a->dsp << a->sz);
16
rx_gen_st(a->sz, cpu_regs[a->rs], mem);
17
- tcg_temp_free(mem);
18
return true;
19
}
20
21
@@ -XXX,XX +XXX,XX @@ static bool trans_MOV_mr(DisasContext *ctx, arg_MOV_mr *a)
22
mem = tcg_temp_new();
23
tcg_gen_addi_i32(mem, cpu_regs[a->rs], a->dsp << a->sz);
24
rx_gen_ld(a->sz, cpu_regs[a->rd], mem);
25
- tcg_temp_free(mem);
26
return true;
27
}
28
29
@@ -XXX,XX +XXX,XX @@ static bool trans_MOV_im(DisasContext *ctx, arg_MOV_im *a)
30
mem = tcg_temp_new();
31
tcg_gen_addi_i32(mem, cpu_regs[a->rd], a->dsp << a->sz);
32
rx_gen_st(a->sz, imm, mem);
33
- tcg_temp_free(imm);
34
- tcg_temp_free(mem);
35
return true;
36
}
37
38
@@ -XXX,XX +XXX,XX @@ static bool trans_MOV_ar(DisasContext *ctx, arg_MOV_ar *a)
39
mem = tcg_temp_new();
40
rx_gen_regindex(ctx, mem, a->sz, a->ri, a->rb);
41
rx_gen_ld(a->sz, cpu_regs[a->rd], mem);
42
- tcg_temp_free(mem);
43
return true;
44
}
45
46
@@ -XXX,XX +XXX,XX @@ static bool trans_MOV_ra(DisasContext *ctx, arg_MOV_ra *a)
47
mem = tcg_temp_new();
48
rx_gen_regindex(ctx, mem, a->sz, a->ri, a->rb);
49
rx_gen_st(a->sz, cpu_regs[a->rs], mem);
50
- tcg_temp_free(mem);
51
return true;
52
}
53
54
@@ -XXX,XX +XXX,XX @@ static bool trans_MOV_mm(DisasContext *ctx, arg_MOV_mm *a)
55
rx_gen_ld(a->sz, tmp, addr);
56
addr = rx_index_addr(ctx, mem, a->ldd, a->sz, a->rd);
57
rx_gen_st(a->sz, tmp, addr);
58
- tcg_temp_free(tmp);
59
}
60
- tcg_temp_free(mem);
61
return true;
62
}
63
64
@@ -XXX,XX +XXX,XX @@ static bool trans_MOV_rp(DisasContext *ctx, arg_MOV_rp *a)
65
if (a->ad == 0) {
66
tcg_gen_addi_i32(cpu_regs[a->rd], cpu_regs[a->rd], 1 << a->sz);
67
}
68
- tcg_temp_free(val);
69
return true;
70
}
71
72
@@ -XXX,XX +XXX,XX @@ static bool trans_MOV_pr(DisasContext *ctx, arg_MOV_pr *a)
73
tcg_gen_addi_i32(cpu_regs[a->rd], cpu_regs[a->rd], 1 << a->sz);
74
}
75
tcg_gen_mov_i32(cpu_regs[a->rs], val);
76
- tcg_temp_free(val);
77
return true;
78
}
79
80
@@ -XXX,XX +XXX,XX @@ static bool trans_MOVU_mr(DisasContext *ctx, arg_MOVU_mr *a)
81
mem = tcg_temp_new();
82
tcg_gen_addi_i32(mem, cpu_regs[a->rs], a->dsp << a->sz);
83
rx_gen_ldu(a->sz, cpu_regs[a->rd], mem);
84
- tcg_temp_free(mem);
85
return true;
86
}
87
88
@@ -XXX,XX +XXX,XX @@ static bool trans_MOVU_ar(DisasContext *ctx, arg_MOVU_ar *a)
89
mem = tcg_temp_new();
90
rx_gen_regindex(ctx, mem, a->sz, a->ri, a->rb);
91
rx_gen_ldu(a->sz, cpu_regs[a->rd], mem);
92
- tcg_temp_free(mem);
93
return true;
94
}
95
96
@@ -XXX,XX +XXX,XX @@ static bool trans_MOVU_pr(DisasContext *ctx, arg_MOVU_pr *a)
97
tcg_gen_addi_i32(cpu_regs[a->rd], cpu_regs[a->rd], 1 << a->sz);
98
}
99
tcg_gen_mov_i32(cpu_regs[a->rs], val);
100
- tcg_temp_free(val);
101
return true;
102
}
103
104
@@ -XXX,XX +XXX,XX @@ static bool trans_POPC(DisasContext *ctx, arg_POPC *a)
105
val = tcg_temp_new();
106
pop(val);
107
move_to_cr(ctx, val, a->cr);
108
- tcg_temp_free(val);
109
return true;
110
}
111
112
@@ -XXX,XX +XXX,XX @@ static bool trans_PUSH_r(DisasContext *ctx, arg_PUSH_r *a)
113
tcg_gen_mov_i32(val, cpu_regs[a->rs]);
114
tcg_gen_subi_i32(cpu_sp, cpu_sp, 4);
115
rx_gen_st(a->sz, val, cpu_sp);
116
- tcg_temp_free(val);
117
return true;
118
}
119
120
@@ -XXX,XX +XXX,XX @@ static bool trans_PUSH_m(DisasContext *ctx, arg_PUSH_m *a)
121
rx_gen_ld(a->sz, val, addr);
122
tcg_gen_subi_i32(cpu_sp, cpu_sp, 4);
123
rx_gen_st(a->sz, val, cpu_sp);
124
- tcg_temp_free(mem);
125
- tcg_temp_free(val);
126
return true;
127
}
128
129
@@ -XXX,XX +XXX,XX @@ static bool trans_PUSHC(DisasContext *ctx, arg_PUSHC *a)
130
val = tcg_temp_new();
131
move_from_cr(ctx, val, a->cr, ctx->pc);
132
push(val);
133
- tcg_temp_free(val);
134
return true;
135
}
136
137
@@ -XXX,XX +XXX,XX @@ static bool trans_XCHG_rr(DisasContext *ctx, arg_XCHG_rr *a)
138
tcg_gen_mov_i32(tmp, cpu_regs[a->rs]);
139
tcg_gen_mov_i32(cpu_regs[a->rs], cpu_regs[a->rd]);
140
tcg_gen_mov_i32(cpu_regs[a->rd], tmp);
141
- tcg_temp_free(tmp);
142
return true;
143
}
144
145
@@ -XXX,XX +XXX,XX @@ static bool trans_XCHG_mr(DisasContext *ctx, arg_XCHG_mr *a)
146
}
147
tcg_gen_atomic_xchg_i32(cpu_regs[a->rd], addr, cpu_regs[a->rd],
148
0, mi_to_mop(a->mi));
149
- tcg_temp_free(mem);
150
return true;
151
}
152
153
@@ -XXX,XX +XXX,XX @@ static inline void stcond(TCGCond cond, int rd, int imm)
154
_imm = tcg_const_i32(imm);
155
tcg_gen_movcond_i32(cond, cpu_regs[rd], cpu_psw_z, z,
156
_imm, cpu_regs[rd]);
157
- tcg_temp_free(z);
158
- tcg_temp_free(_imm);
159
}
160
161
/* stz #imm,rd */
162
@@ -XXX,XX +XXX,XX @@ static bool trans_SCCnd(DisasContext *ctx, arg_SCCnd *a)
163
tcg_gen_setcondi_i32(dc.cond, val, dc.value, 0);
164
addr = rx_index_addr(ctx, mem, a->sz, a->ld, a->rd);
165
rx_gen_st(a->sz, val, addr);
166
- tcg_temp_free(val);
167
- tcg_temp_free(mem);
168
} else {
169
tcg_gen_setcondi_i32(dc.cond, cpu_regs[a->rd], dc.value, 0);
170
}
171
- tcg_temp_free(dc.temp);
172
return true;
173
}
174
175
@@ -XXX,XX +XXX,XX @@ static inline void rx_gen_op_irr(op3fn opr, int dst, int src, uint32_t src2)
176
{
177
TCGv imm = tcg_const_i32(src2);
178
opr(cpu_regs[dst], cpu_regs[src], imm);
179
- tcg_temp_free(imm);
180
}
181
182
static inline void rx_gen_op_mr(op3fn opr, DisasContext *ctx,
183
@@ -XXX,XX +XXX,XX @@ static inline void rx_gen_op_mr(op3fn opr, DisasContext *ctx,
184
mem = tcg_temp_new();
185
val = rx_load_source(ctx, mem, ld, mi, src);
186
opr(cpu_regs[dst], cpu_regs[dst], val);
187
- tcg_temp_free(mem);
188
}
189
190
static void rx_and(TCGv ret, TCGv arg1, TCGv arg2)
191
@@ -XXX,XX +XXX,XX @@ static void rx_adc(TCGv ret, TCGv arg1, TCGv arg2)
192
tcg_gen_xor_i32(z, arg1, arg2);
193
tcg_gen_andc_i32(cpu_psw_o, cpu_psw_o, z);
194
tcg_gen_mov_i32(ret, cpu_psw_s);
195
- tcg_temp_free(z);
196
}
197
198
/* adc #imm, rd */
199
@@ -XXX,XX +XXX,XX @@ static void rx_add(TCGv ret, TCGv arg1, TCGv arg2)
200
tcg_gen_xor_i32(z, arg1, arg2);
201
tcg_gen_andc_i32(cpu_psw_o, cpu_psw_o, z);
202
tcg_gen_mov_i32(ret, cpu_psw_s);
203
- tcg_temp_free(z);
204
}
205
206
/* add #uimm4, rd */
207
@@ -XXX,XX +XXX,XX @@ static void rx_sub(TCGv ret, TCGv arg1, TCGv arg2)
208
temp = tcg_temp_new_i32();
209
tcg_gen_xor_i32(temp, arg1, arg2);
210
tcg_gen_and_i32(cpu_psw_o, cpu_psw_o, temp);
211
- tcg_temp_free_i32(temp);
212
/* CMP not required return */
213
if (ret) {
214
tcg_gen_mov_i32(ret, cpu_psw_s);
215
@@ -XXX,XX +XXX,XX @@ static void rx_sbb(TCGv ret, TCGv arg1, TCGv arg2)
216
temp = tcg_temp_new();
217
tcg_gen_not_i32(temp, arg2);
218
rx_adc(ret, arg1, temp);
219
- tcg_temp_free(temp);
220
}
221
222
/* cmp #imm4, rs2 */
223
@@ -XXX,XX +XXX,XX @@ static void rx_abs(TCGv ret, TCGv arg1)
224
zero = tcg_const_i32(0);
225
tcg_gen_neg_i32(neg, arg1);
226
tcg_gen_movcond_i32(TCG_COND_LT, ret, arg1, zero, neg, arg1);
227
- tcg_temp_free(neg);
228
- tcg_temp_free(zero);
229
}
230
231
/* abs rd */
232
@@ -XXX,XX +XXX,XX @@ static bool trans_EMUL_ir(DisasContext *ctx, arg_EMUL_ir *a)
233
}
234
tcg_gen_muls2_i32(cpu_regs[a->rd], cpu_regs[(a->rd + 1) & 15],
235
cpu_regs[a->rd], imm);
236
- tcg_temp_free(imm);
237
return true;
238
}
239
240
@@ -XXX,XX +XXX,XX @@ static bool trans_EMUL_mr(DisasContext *ctx, arg_EMUL_mr *a)
241
val = rx_load_source(ctx, mem, a->ld, a->mi, a->rs);
242
tcg_gen_muls2_i32(cpu_regs[a->rd], cpu_regs[(a->rd + 1) & 15],
243
cpu_regs[a->rd], val);
244
- tcg_temp_free(mem);
245
return true;
246
}
247
248
@@ -XXX,XX +XXX,XX @@ static bool trans_EMULU_ir(DisasContext *ctx, arg_EMULU_ir *a)
249
}
250
tcg_gen_mulu2_i32(cpu_regs[a->rd], cpu_regs[(a->rd + 1) & 15],
251
cpu_regs[a->rd], imm);
252
- tcg_temp_free(imm);
253
return true;
254
}
255
256
@@ -XXX,XX +XXX,XX @@ static bool trans_EMULU_mr(DisasContext *ctx, arg_EMULU_mr *a)
257
val = rx_load_source(ctx, mem, a->ld, a->mi, a->rs);
258
tcg_gen_mulu2_i32(cpu_regs[a->rd], cpu_regs[(a->rd + 1) & 15],
259
cpu_regs[a->rd], val);
260
- tcg_temp_free(mem);
261
return true;
262
}
263
264
@@ -XXX,XX +XXX,XX @@ static bool trans_SHLL_rr(DisasContext *ctx, arg_SHLL_rr *a)
265
gen_set_label(done);
266
tcg_gen_mov_i32(cpu_psw_z, cpu_regs[a->rd]);
267
tcg_gen_mov_i32(cpu_psw_s, cpu_regs[a->rd]);
268
- tcg_temp_free(count);
269
- tcg_temp_free(tmp);
270
return true;
271
}
272
273
@@ -XXX,XX +XXX,XX @@ static inline void shiftr_reg(uint32_t rd, uint32_t rs, unsigned int alith)
274
tcg_gen_movi_i32(cpu_psw_o, 0);
275
tcg_gen_mov_i32(cpu_psw_z, cpu_regs[rd]);
276
tcg_gen_mov_i32(cpu_psw_s, cpu_regs[rd]);
277
- tcg_temp_free(count);
278
}
279
280
/* shar #imm:5, rd */
281
@@ -XXX,XX +XXX,XX @@ static bool trans_ROLC(DisasContext *ctx, arg_ROLC *a)
282
tcg_gen_mov_i32(cpu_psw_c, tmp);
283
tcg_gen_mov_i32(cpu_psw_z, cpu_regs[a->rd]);
284
tcg_gen_mov_i32(cpu_psw_s, cpu_regs[a->rd]);
285
- tcg_temp_free(tmp);
286
return true;
287
}
288
289
@@ -XXX,XX +XXX,XX @@ static bool trans_REVW(DisasContext *ctx, arg_REVW *a)
290
tcg_gen_shri_i32(cpu_regs[a->rd], cpu_regs[a->rs], 8);
291
tcg_gen_andi_i32(cpu_regs[a->rd], cpu_regs[a->rd], 0x00ff00ff);
292
tcg_gen_or_i32(cpu_regs[a->rd], cpu_regs[a->rd], tmp);
293
- tcg_temp_free(tmp);
294
return true;
295
}
296
297
@@ -XXX,XX +XXX,XX @@ static void rx_bcnd_main(DisasContext *ctx, int cd, int dst)
298
gen_set_label(t);
299
gen_goto_tb(ctx, 1, ctx->pc + dst);
300
gen_set_label(done);
301
- tcg_temp_free(dc.temp);
302
break;
303
case 14:
304
/* always true case */
305
@@ -XXX,XX +XXX,XX @@ static inline void rx_save_pc(DisasContext *ctx)
306
{
307
TCGv pc = tcg_const_i32(ctx->base.pc_next);
308
push(pc);
309
- tcg_temp_free(pc);
310
}
311
312
/* jmp rs */
313
@@ -XXX,XX +XXX,XX @@ static bool trans_SMOVB(DisasContext *ctx, arg_SMOVB *a)
314
do { \
315
TCGv size = tcg_const_i32(a->sz); \
316
gen_helper_##op(cpu_env, size); \
317
- tcg_temp_free(size); \
318
} while (0)
319
320
/* suntile.<bwl> */
321
@@ -XXX,XX +XXX,XX @@ static void rx_mul64hi(TCGv_i64 ret, int rs, int rs2)
322
tcg_gen_sari_i64(tmp1, tmp1, 16);
323
tcg_gen_mul_i64(ret, tmp0, tmp1);
324
tcg_gen_shli_i64(ret, ret, 16);
325
- tcg_temp_free_i64(tmp0);
326
- tcg_temp_free_i64(tmp1);
327
}
328
329
static void rx_mul64lo(TCGv_i64 ret, int rs, int rs2)
330
@@ -XXX,XX +XXX,XX @@ static void rx_mul64lo(TCGv_i64 ret, int rs, int rs2)
331
tcg_gen_ext16s_i64(tmp1, tmp1);
332
tcg_gen_mul_i64(ret, tmp0, tmp1);
333
tcg_gen_shli_i64(ret, ret, 16);
334
- tcg_temp_free_i64(tmp0);
335
- tcg_temp_free_i64(tmp1);
336
}
337
338
/* mulhi rs,rs2 */
339
@@ -XXX,XX +XXX,XX @@ static bool trans_MACHI(DisasContext *ctx, arg_MACHI *a)
340
tmp = tcg_temp_new_i64();
341
rx_mul64hi(tmp, a->rs, a->rs2);
342
tcg_gen_add_i64(cpu_acc, cpu_acc, tmp);
343
- tcg_temp_free_i64(tmp);
344
return true;
345
}
346
347
@@ -XXX,XX +XXX,XX @@ static bool trans_MACLO(DisasContext *ctx, arg_MACLO *a)
348
tmp = tcg_temp_new_i64();
349
rx_mul64lo(tmp, a->rs, a->rs2);
350
tcg_gen_add_i64(cpu_acc, cpu_acc, tmp);
351
- tcg_temp_free_i64(tmp);
352
return true;
353
}
354
355
@@ -XXX,XX +XXX,XX @@ static bool trans_MVFACMI(DisasContext *ctx, arg_MVFACMI *a)
356
rd64 = tcg_temp_new_i64();
357
tcg_gen_extract_i64(rd64, cpu_acc, 16, 32);
358
tcg_gen_extrl_i64_i32(cpu_regs[a->rd], rd64);
359
- tcg_temp_free_i64(rd64);
360
return true;
361
}
362
363
@@ -XXX,XX +XXX,XX @@ static bool trans_MVTACHI(DisasContext *ctx, arg_MVTACHI *a)
364
rs64 = tcg_temp_new_i64();
365
tcg_gen_extu_i32_i64(rs64, cpu_regs[a->rs]);
366
tcg_gen_deposit_i64(cpu_acc, cpu_acc, rs64, 32, 32);
367
- tcg_temp_free_i64(rs64);
368
return true;
369
}
370
371
@@ -XXX,XX +XXX,XX @@ static bool trans_MVTACLO(DisasContext *ctx, arg_MVTACLO *a)
372
rs64 = tcg_temp_new_i64();
373
tcg_gen_extu_i32_i64(rs64, cpu_regs[a->rs]);
374
tcg_gen_deposit_i64(cpu_acc, cpu_acc, rs64, 0, 32);
375
- tcg_temp_free_i64(rs64);
376
return true;
377
}
378
379
@@ -XXX,XX +XXX,XX @@ static bool trans_RACW(DisasContext *ctx, arg_RACW *a)
380
{
381
TCGv imm = tcg_const_i32(a->imm + 1);
382
gen_helper_racw(cpu_env, imm);
383
- tcg_temp_free(imm);
384
return true;
385
}
386
387
@@ -XXX,XX +XXX,XX @@ static bool trans_SAT(DisasContext *ctx, arg_SAT *a)
388
tcg_gen_xori_i32(tmp, tmp, 0x80000000);
389
tcg_gen_movcond_i32(TCG_COND_LT, cpu_regs[a->rd],
390
cpu_psw_o, z, tmp, cpu_regs[a->rd]);
391
- tcg_temp_free(tmp);
392
- tcg_temp_free(z);
393
return true;
394
}
395
396
@@ -XXX,XX +XXX,XX @@ static bool trans_SATR(DisasContext *ctx, arg_SATR *a)
397
TCGv imm = tcg_const_i32(li(ctx, 0)); \
398
gen_helper_##op(cpu_regs[a->rd], cpu_env, \
399
cpu_regs[a->rd], imm); \
400
- tcg_temp_free(imm); \
401
return true; \
402
} \
403
static bool cat3(trans_, name, _mr)(DisasContext *ctx, \
404
@@ -XXX,XX +XXX,XX @@ static bool trans_SATR(DisasContext *ctx, arg_SATR *a)
405
val = rx_load_source(ctx, mem, a->ld, MO_32, a->rs); \
406
gen_helper_##op(cpu_regs[a->rd], cpu_env, \
407
cpu_regs[a->rd], val); \
408
- tcg_temp_free(mem); \
409
return true; \
410
}
411
412
@@ -XXX,XX +XXX,XX @@ static bool trans_SATR(DisasContext *ctx, arg_SATR *a)
413
mem = tcg_temp_new(); \
414
val = rx_load_source(ctx, mem, a->ld, MO_32, a->rs); \
415
gen_helper_##op(cpu_regs[a->rd], cpu_env, val); \
416
- tcg_temp_free(mem); \
417
return true; \
418
}
419
420
@@ -XXX,XX +XXX,XX @@ static bool trans_FCMP_ir(DisasContext *ctx, arg_FCMP_ir * a)
421
{
422
TCGv imm = tcg_const_i32(li(ctx, 0));
423
gen_helper_fcmp(cpu_env, cpu_regs[a->rd], imm);
424
- tcg_temp_free(imm);
425
return true;
426
}
427
428
@@ -XXX,XX +XXX,XX @@ static bool trans_FCMP_mr(DisasContext *ctx, arg_FCMP_mr *a)
429
mem = tcg_temp_new();
430
val = rx_load_source(ctx, mem, a->ld, MO_32, a->rs);
431
gen_helper_fcmp(cpu_env, cpu_regs[a->rd], val);
432
- tcg_temp_free(mem);
433
return true;
434
}
435
436
@@ -XXX,XX +XXX,XX @@ static bool trans_ITOF(DisasContext *ctx, arg_ITOF * a)
437
mem = tcg_temp_new();
438
val = rx_load_source(ctx, mem, a->ld, a->mi, a->rs);
439
gen_helper_itof(cpu_regs[a->rd], cpu_env, val);
440
- tcg_temp_free(mem);
441
return true;
442
}
443
444
@@ -XXX,XX +XXX,XX @@ static void rx_bsetm(TCGv mem, TCGv mask)
445
rx_gen_ld(MO_8, val, mem);
446
tcg_gen_or_i32(val, val, mask);
447
rx_gen_st(MO_8, val, mem);
448
- tcg_temp_free(val);
449
}
450
451
static void rx_bclrm(TCGv mem, TCGv mask)
452
@@ -XXX,XX +XXX,XX @@ static void rx_bclrm(TCGv mem, TCGv mask)
453
rx_gen_ld(MO_8, val, mem);
454
tcg_gen_andc_i32(val, val, mask);
455
rx_gen_st(MO_8, val, mem);
456
- tcg_temp_free(val);
457
}
458
459
static void rx_btstm(TCGv mem, TCGv mask)
460
@@ -XXX,XX +XXX,XX @@ static void rx_btstm(TCGv mem, TCGv mask)
461
tcg_gen_and_i32(val, val, mask);
462
tcg_gen_setcondi_i32(TCG_COND_NE, cpu_psw_c, val, 0);
463
tcg_gen_mov_i32(cpu_psw_z, cpu_psw_c);
464
- tcg_temp_free(val);
465
}
466
467
static void rx_bnotm(TCGv mem, TCGv mask)
468
@@ -XXX,XX +XXX,XX @@ static void rx_bnotm(TCGv mem, TCGv mask)
469
rx_gen_ld(MO_8, val, mem);
470
tcg_gen_xor_i32(val, val, mask);
471
rx_gen_st(MO_8, val, mem);
472
- tcg_temp_free(val);
473
}
474
475
static void rx_bsetr(TCGv reg, TCGv mask)
476
@@ -XXX,XX +XXX,XX @@ static inline void rx_btstr(TCGv reg, TCGv mask)
477
tcg_gen_and_i32(t0, reg, mask);
478
tcg_gen_setcondi_i32(TCG_COND_NE, cpu_psw_c, t0, 0);
479
tcg_gen_mov_i32(cpu_psw_z, cpu_psw_c);
480
- tcg_temp_free(t0);
481
}
482
483
static inline void rx_bnotr(TCGv reg, TCGv mask)
484
@@ -XXX,XX +XXX,XX @@ static inline void rx_bnotr(TCGv reg, TCGv mask)
485
mask = tcg_const_i32(1 << a->imm); \
486
addr = rx_index_addr(ctx, mem, a->ld, MO_8, a->rs); \
487
cat3(rx_, op, m)(addr, mask); \
488
- tcg_temp_free(mask); \
489
- tcg_temp_free(mem); \
490
return true; \
491
} \
492
static bool cat3(trans_, name, _ir)(DisasContext *ctx, \
493
@@ -XXX,XX +XXX,XX @@ static inline void rx_bnotr(TCGv reg, TCGv mask)
494
TCGv mask; \
495
mask = tcg_const_i32(1 << a->imm); \
496
cat3(rx_, op, r)(cpu_regs[a->rd], mask); \
497
- tcg_temp_free(mask); \
498
return true; \
499
} \
500
static bool cat3(trans_, name, _rr)(DisasContext *ctx, \
501
@@ -XXX,XX +XXX,XX @@ static inline void rx_bnotr(TCGv reg, TCGv mask)
502
tcg_gen_andi_i32(b, cpu_regs[a->rs], 31); \
503
tcg_gen_shl_i32(mask, mask, b); \
504
cat3(rx_, op, r)(cpu_regs[a->rd], mask); \
505
- tcg_temp_free(mask); \
506
- tcg_temp_free(b); \
507
return true; \
508
} \
509
static bool cat3(trans_, name, _rm)(DisasContext *ctx, \
510
@@ -XXX,XX +XXX,XX @@ static inline void rx_bnotr(TCGv reg, TCGv mask)
511
mem = tcg_temp_new(); \
512
addr = rx_index_addr(ctx, mem, a->ld, MO_8, a->rs); \
513
cat3(rx_, op, m)(addr, mask); \
514
- tcg_temp_free(mem); \
515
- tcg_temp_free(mask); \
516
- tcg_temp_free(b); \
517
return true; \
518
}
519
520
@@ -XXX,XX +XXX,XX @@ static inline void bmcnd_op(TCGv val, TCGCond cond, int pos)
521
tcg_gen_andi_i32(val, val, ~(1 << pos));
522
tcg_gen_setcondi_i32(dc.cond, bit, dc.value, 0);
523
tcg_gen_deposit_i32(val, val, bit, pos, 1);
524
- tcg_temp_free(bit);
525
- tcg_temp_free(dc.temp);
526
}
527
528
/* bmcnd #imm, dsp[rd] */
529
@@ -XXX,XX +XXX,XX @@ static bool trans_BMCnd_im(DisasContext *ctx, arg_BMCnd_im *a)
530
rx_gen_ld(MO_8, val, addr);
531
bmcnd_op(val, a->cd, a->imm);
532
rx_gen_st(MO_8, val, addr);
533
- tcg_temp_free(val);
534
- tcg_temp_free(mem);
535
return true;
536
}
537
538
@@ -XXX,XX +XXX,XX @@ static bool trans_MVTC_i(DisasContext *ctx, arg_MVTC_i *a)
539
540
imm = tcg_const_i32(a->imm);
541
move_to_cr(ctx, imm, a->cr);
542
- tcg_temp_free(imm);
543
return true;
544
}
545
546
@@ -XXX,XX +XXX,XX @@ static bool trans_RTFI(DisasContext *ctx, arg_RTFI *a)
547
tcg_gen_mov_i32(psw, cpu_bpsw);
548
gen_helper_set_psw_rte(cpu_env, psw);
549
ctx->base.is_jmp = DISAS_EXIT;
550
- tcg_temp_free(psw);
551
}
552
return true;
553
}
554
@@ -XXX,XX +XXX,XX @@ static bool trans_RTE(DisasContext *ctx, arg_RTE *a)
555
pop(psw);
556
gen_helper_set_psw_rte(cpu_env, psw);
557
ctx->base.is_jmp = DISAS_EXIT;
558
- tcg_temp_free(psw);
559
}
560
return true;
561
}
562
@@ -XXX,XX +XXX,XX @@ static bool trans_INT(DisasContext *ctx, arg_INT *a)
563
vec = tcg_const_i32(a->imm);
564
tcg_gen_movi_i32(cpu_pc, ctx->base.pc_next);
565
gen_helper_rxint(cpu_env, vec);
566
- tcg_temp_free(vec);
567
ctx->base.is_jmp = DISAS_NORETURN;
568
return true;
569
}
570
--
571
2.34.1
diff view generated by jsdifflib
Deleted patch
1
Translators are no longer required to free tcg temporaries.
2
1
3
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
5
---
6
target/sh4/translate.c | 110 -----------------------------------------
7
1 file changed, 110 deletions(-)
8
9
diff --git a/target/sh4/translate.c b/target/sh4/translate.c
10
index XXXXXXX..XXXXXXX 100644
11
--- a/target/sh4/translate.c
12
+++ b/target/sh4/translate.c
13
@@ -XXX,XX +XXX,XX @@ static void gen_read_sr(TCGv dst)
14
tcg_gen_or_i32(dst, dst, t0);
15
tcg_gen_shli_i32(t0, cpu_sr_t, SR_T);
16
tcg_gen_or_i32(dst, cpu_sr, t0);
17
- tcg_temp_free_i32(t0);
18
}
19
20
static void gen_write_sr(TCGv src)
21
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
22
     tcg_gen_addi_i32(addr, REG(B11_8), B3_0 * 4);
23
tcg_gen_qemu_st_i32(REG(B7_4), addr, ctx->memidx,
24
MO_TEUL | UNALIGN(ctx));
25
-     tcg_temp_free(addr);
26
    }
27
    return;
28
case 0x5000:        /* mov.l @(disp,Rm),Rn */
29
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
30
     tcg_gen_addi_i32(addr, REG(B7_4), B3_0 * 4);
31
tcg_gen_qemu_ld_i32(REG(B11_8), addr, ctx->memidx,
32
MO_TESL | UNALIGN(ctx));
33
-     tcg_temp_free(addr);
34
    }
35
    return;
36
case 0xe000:        /* mov #imm,Rn */
37
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
38
    {
39
TCGv addr = tcg_const_i32(ctx->base.pc_next + 4 + B7_0 * 2);
40
tcg_gen_qemu_ld_i32(REG(B11_8), addr, ctx->memidx, MO_TESW);
41
-     tcg_temp_free(addr);
42
    }
43
    return;
44
case 0xd000:        /* mov.l @(disp,PC),Rn */
45
    {
46
TCGv addr = tcg_const_i32((ctx->base.pc_next + 4 + B7_0 * 4) & ~3);
47
tcg_gen_qemu_ld_i32(REG(B11_8), addr, ctx->memidx, MO_TESL);
48
-     tcg_temp_free(addr);
49
    }
50
    return;
51
case 0x7000:        /* add #imm,Rn */
52
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
53
/* might cause re-execution */
54
tcg_gen_qemu_st_i32(REG(B7_4), addr, ctx->memidx, MO_UB);
55
     tcg_gen_mov_i32(REG(B11_8), addr);            /* modify register status */
56
-     tcg_temp_free(addr);
57
    }
58
    return;
59
case 0x2005:        /* mov.w Rm,@-Rn */
60
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
61
tcg_gen_qemu_st_i32(REG(B7_4), addr, ctx->memidx,
62
MO_TEUW | UNALIGN(ctx));
63
     tcg_gen_mov_i32(REG(B11_8), addr);
64
-     tcg_temp_free(addr);
65
    }
66
    return;
67
case 0x2006:        /* mov.l Rm,@-Rn */
68
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
69
tcg_gen_qemu_st_i32(REG(B7_4), addr, ctx->memidx,
70
MO_TEUL | UNALIGN(ctx));
71
     tcg_gen_mov_i32(REG(B11_8), addr);
72
- tcg_temp_free(addr);
73
    }
74
    return;
75
case 0x6004:        /* mov.b @Rm+,Rn */
76
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
77
     TCGv addr = tcg_temp_new();
78
     tcg_gen_add_i32(addr, REG(B11_8), REG(0));
79
tcg_gen_qemu_st_i32(REG(B7_4), addr, ctx->memidx, MO_UB);
80
-     tcg_temp_free(addr);
81
    }
82
    return;
83
case 0x0005:        /* mov.w Rm,@(R0,Rn) */
84
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
85
     tcg_gen_add_i32(addr, REG(B11_8), REG(0));
86
tcg_gen_qemu_st_i32(REG(B7_4), addr, ctx->memidx,
87
MO_TEUW | UNALIGN(ctx));
88
-     tcg_temp_free(addr);
89
    }
90
    return;
91
case 0x0006:        /* mov.l Rm,@(R0,Rn) */
92
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
93
     tcg_gen_add_i32(addr, REG(B11_8), REG(0));
94
tcg_gen_qemu_st_i32(REG(B7_4), addr, ctx->memidx,
95
MO_TEUL | UNALIGN(ctx));
96
-     tcg_temp_free(addr);
97
    }
98
    return;
99
case 0x000c:        /* mov.b @(R0,Rm),Rn */
100
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
101
     TCGv addr = tcg_temp_new();
102
     tcg_gen_add_i32(addr, REG(B7_4), REG(0));
103
tcg_gen_qemu_ld_i32(REG(B11_8), addr, ctx->memidx, MO_SB);
104
-     tcg_temp_free(addr);
105
    }
106
    return;
107
case 0x000d:        /* mov.w @(R0,Rm),Rn */
108
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
109
     tcg_gen_add_i32(addr, REG(B7_4), REG(0));
110
tcg_gen_qemu_ld_i32(REG(B11_8), addr, ctx->memidx,
111
MO_TESW | UNALIGN(ctx));
112
-     tcg_temp_free(addr);
113
    }
114
    return;
115
case 0x000e:        /* mov.l @(R0,Rm),Rn */
116
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
117
     tcg_gen_add_i32(addr, REG(B7_4), REG(0));
118
tcg_gen_qemu_ld_i32(REG(B11_8), addr, ctx->memidx,
119
MO_TESL | UNALIGN(ctx));
120
-     tcg_temp_free(addr);
121
    }
122
    return;
123
case 0x6008:        /* swap.b Rm,Rn */
124
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
125
TCGv low = tcg_temp_new();
126
tcg_gen_bswap16_i32(low, REG(B7_4), 0);
127
tcg_gen_deposit_i32(REG(B11_8), REG(B7_4), low, 0, 16);
128
-     tcg_temp_free(low);
129
    }
130
    return;
131
case 0x6009:        /* swap.w Rm,Rn */
132
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
133
     low = tcg_temp_new();
134
     tcg_gen_shri_i32(low, REG(B11_8), 16);
135
     tcg_gen_or_i32(REG(B11_8), high, low);
136
-     tcg_temp_free(low);
137
-     tcg_temp_free(high);
138
    }
139
    return;
140
case 0x300c:        /* add Rm,Rn */
141
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
142
tcg_gen_add2_i32(t1, cpu_sr_t, cpu_sr_t, t0, REG(B7_4), t0);
143
tcg_gen_add2_i32(REG(B11_8), cpu_sr_t,
144
REG(B11_8), t0, t1, cpu_sr_t);
145
- tcg_temp_free(t0);
146
- tcg_temp_free(t1);
147
}
148
    return;
149
case 0x300f:        /* addv Rm,Rn */
150
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
151
t2 = tcg_temp_new();
152
tcg_gen_xor_i32(t2, REG(B7_4), REG(B11_8));
153
tcg_gen_andc_i32(cpu_sr_t, t1, t2);
154
- tcg_temp_free(t2);
155
tcg_gen_shri_i32(cpu_sr_t, cpu_sr_t, 31);
156
- tcg_temp_free(t1);
157
tcg_gen_mov_i32(REG(B7_4), t0);
158
- tcg_temp_free(t0);
159
}
160
    return;
161
case 0x2009:        /* and Rm,Rn */
162
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
163
tcg_gen_andc_i32(cmp1, cmp1, cmp2);
164
tcg_gen_andi_i32(cmp1, cmp1, 0x80808080);
165
tcg_gen_setcondi_i32(TCG_COND_NE, cpu_sr_t, cmp1, 0);
166
-     tcg_temp_free(cmp2);
167
-     tcg_temp_free(cmp1);
168
    }
169
    return;
170
case 0x2007:        /* div0s Rm,Rn */
171
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
172
tcg_gen_xor_i32(t1, t1, t0);
173
tcg_gen_xori_i32(cpu_sr_t, t1, 1);
174
tcg_gen_xor_i32(cpu_sr_q, cpu_sr_m, t1);
175
-
176
- tcg_temp_free(zero);
177
- tcg_temp_free(t2);
178
- tcg_temp_free(t1);
179
- tcg_temp_free(t0);
180
}
181
    return;
182
case 0x300d:        /* dmuls.l Rm,Rn */
183
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
184
     arg1 = tcg_temp_new();
185
tcg_gen_qemu_ld_i32(arg1, REG(B11_8), ctx->memidx, MO_TESL);
186
gen_helper_macl(cpu_env, arg0, arg1);
187
-     tcg_temp_free(arg1);
188
-     tcg_temp_free(arg0);
189
     tcg_gen_addi_i32(REG(B7_4), REG(B7_4), 4);
190
     tcg_gen_addi_i32(REG(B11_8), REG(B11_8), 4);
191
    }
192
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
193
     arg1 = tcg_temp_new();
194
tcg_gen_qemu_ld_i32(arg1, REG(B11_8), ctx->memidx, MO_TESL);
195
gen_helper_macw(cpu_env, arg0, arg1);
196
-     tcg_temp_free(arg1);
197
-     tcg_temp_free(arg0);
198
     tcg_gen_addi_i32(REG(B11_8), REG(B11_8), 2);
199
     tcg_gen_addi_i32(REG(B7_4), REG(B7_4), 2);
200
    }
201
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
202
     arg1 = tcg_temp_new();
203
     tcg_gen_ext16s_i32(arg1, REG(B11_8));
204
     tcg_gen_mul_i32(cpu_macl, arg0, arg1);
205
-     tcg_temp_free(arg1);
206
-     tcg_temp_free(arg0);
207
    }
208
    return;
209
case 0x200e:        /* mulu.w Rm,Rn */
210
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
211
     arg1 = tcg_temp_new();
212
     tcg_gen_ext16u_i32(arg1, REG(B11_8));
213
     tcg_gen_mul_i32(cpu_macl, arg0, arg1);
214
-     tcg_temp_free(arg1);
215
-     tcg_temp_free(arg0);
216
    }
217
    return;
218
case 0x600b:        /* neg Rm,Rn */
219
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
220
tcg_gen_sub2_i32(REG(B11_8), cpu_sr_t,
221
t0, t0, REG(B11_8), cpu_sr_t);
222
tcg_gen_andi_i32(cpu_sr_t, cpu_sr_t, 1);
223
- tcg_temp_free(t0);
224
}
225
    return;
226
case 0x6007:        /* not Rm,Rn */
227
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
228
/* select between the two cases */
229
tcg_gen_movi_i32(t0, 0);
230
tcg_gen_movcond_i32(TCG_COND_GE, REG(B11_8), REG(B7_4), t0, t1, t2);
231
-
232
- tcg_temp_free(t0);
233
- tcg_temp_free(t1);
234
- tcg_temp_free(t2);
235
    }
236
    return;
237
case 0x400d:        /* shld Rm,Rn */
238
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
239
/* select between the two cases */
240
tcg_gen_movi_i32(t0, 0);
241
tcg_gen_movcond_i32(TCG_COND_GE, REG(B11_8), REG(B7_4), t0, t1, t2);
242
-
243
- tcg_temp_free(t0);
244
- tcg_temp_free(t1);
245
- tcg_temp_free(t2);
246
    }
247
    return;
248
case 0x3008:        /* sub Rm,Rn */
249
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
250
tcg_gen_sub2_i32(REG(B11_8), cpu_sr_t,
251
REG(B11_8), t0, t1, cpu_sr_t);
252
tcg_gen_andi_i32(cpu_sr_t, cpu_sr_t, 1);
253
- tcg_temp_free(t0);
254
- tcg_temp_free(t1);
255
}
256
    return;
257
case 0x300b:        /* subv Rm,Rn */
258
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
259
t2 = tcg_temp_new();
260
tcg_gen_xor_i32(t2, REG(B11_8), REG(B7_4));
261
tcg_gen_and_i32(t1, t1, t2);
262
- tcg_temp_free(t2);
263
tcg_gen_shri_i32(cpu_sr_t, t1, 31);
264
- tcg_temp_free(t1);
265
tcg_gen_mov_i32(REG(B11_8), t0);
266
- tcg_temp_free(t0);
267
}
268
    return;
269
case 0x2008:        /* tst Rm,Rn */
270
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
271
     TCGv val = tcg_temp_new();
272
     tcg_gen_and_i32(val, REG(B7_4), REG(B11_8));
273
tcg_gen_setcondi_i32(TCG_COND_EQ, cpu_sr_t, val, 0);
274
-     tcg_temp_free(val);
275
    }
276
    return;
277
case 0x200a:        /* xor Rm,Rn */
278
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
279
TCGv_i64 fp = tcg_temp_new_i64();
280
gen_load_fpr64(ctx, fp, XHACK(B7_4));
281
tcg_gen_qemu_st_i64(fp, REG(B11_8), ctx->memidx, MO_TEUQ);
282
- tcg_temp_free_i64(fp);
283
    } else {
284
tcg_gen_qemu_st_i32(FREG(B7_4), REG(B11_8), ctx->memidx, MO_TEUL);
285
    }
286
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
287
TCGv_i64 fp = tcg_temp_new_i64();
288
tcg_gen_qemu_ld_i64(fp, REG(B7_4), ctx->memidx, MO_TEUQ);
289
gen_store_fpr64(ctx, fp, XHACK(B11_8));
290
- tcg_temp_free_i64(fp);
291
    } else {
292
tcg_gen_qemu_ld_i32(FREG(B11_8), REG(B7_4), ctx->memidx, MO_TEUL);
293
    }
294
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
295
TCGv_i64 fp = tcg_temp_new_i64();
296
tcg_gen_qemu_ld_i64(fp, REG(B7_4), ctx->memidx, MO_TEUQ);
297
gen_store_fpr64(ctx, fp, XHACK(B11_8));
298
- tcg_temp_free_i64(fp);
299
tcg_gen_addi_i32(REG(B7_4), REG(B7_4), 8);
300
    } else {
301
tcg_gen_qemu_ld_i32(FREG(B11_8), REG(B7_4), ctx->memidx, MO_TEUL);
302
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
303
gen_load_fpr64(ctx, fp, XHACK(B7_4));
304
tcg_gen_subi_i32(addr, REG(B11_8), 8);
305
tcg_gen_qemu_st_i64(fp, addr, ctx->memidx, MO_TEUQ);
306
- tcg_temp_free_i64(fp);
307
} else {
308
tcg_gen_subi_i32(addr, REG(B11_8), 4);
309
tcg_gen_qemu_st_i32(FREG(B7_4), addr, ctx->memidx, MO_TEUL);
310
}
311
tcg_gen_mov_i32(REG(B11_8), addr);
312
- tcg_temp_free(addr);
313
}
314
    return;
315
case 0xf006: /* fmov @(R0,Rm),{F,D,X}Rm - FPSCR: Nothing */
316
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
317
TCGv_i64 fp = tcg_temp_new_i64();
318
tcg_gen_qemu_ld_i64(fp, addr, ctx->memidx, MO_TEUQ);
319
gen_store_fpr64(ctx, fp, XHACK(B11_8));
320
- tcg_temp_free_i64(fp);
321
     } else {
322
tcg_gen_qemu_ld_i32(FREG(B11_8), addr, ctx->memidx, MO_TEUL);
323
     }
324
-     tcg_temp_free(addr);
325
    }
326
    return;
327
case 0xf007: /* fmov {F,D,X}Rn,@(R0,Rn) - FPSCR: Nothing */
328
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
329
TCGv_i64 fp = tcg_temp_new_i64();
330
gen_load_fpr64(ctx, fp, XHACK(B7_4));
331
tcg_gen_qemu_st_i64(fp, addr, ctx->memidx, MO_TEUQ);
332
- tcg_temp_free_i64(fp);
333
     } else {
334
tcg_gen_qemu_st_i32(FREG(B7_4), addr, ctx->memidx, MO_TEUL);
335
     }
336
-     tcg_temp_free(addr);
337
    }
338
    return;
339
case 0xf000: /* fadd Rm,Rn - FPSCR: R[PR,Enable.O/U/I]/W[Cause,Flag] */
340
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
341
return;
342
}
343
gen_store_fpr64(ctx, fp0, B11_8);
344
- tcg_temp_free_i64(fp0);
345
- tcg_temp_free_i64(fp1);
346
     } else {
347
switch (ctx->opcode & 0xf00f) {
348
case 0xf000:        /* fadd Rm,Rn */
349
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
350
tcg_gen_qemu_ld_i32(val, addr, ctx->memidx, MO_UB);
351
     tcg_gen_andi_i32(val, val, B7_0);
352
tcg_gen_qemu_st_i32(val, addr, ctx->memidx, MO_UB);
353
-     tcg_temp_free(val);
354
-     tcg_temp_free(addr);
355
    }
356
    return;
357
case 0x8b00:        /* bf label */
358
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
359
     TCGv addr = tcg_temp_new();
360
     tcg_gen_addi_i32(addr, cpu_gbr, B7_0);
361
tcg_gen_qemu_ld_i32(REG(0), addr, ctx->memidx, MO_SB);
362
-     tcg_temp_free(addr);
363
    }
364
    return;
365
case 0xc500:        /* mov.w @(disp,GBR),R0 */
366
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
367
     TCGv addr = tcg_temp_new();
368
     tcg_gen_addi_i32(addr, cpu_gbr, B7_0 * 2);
369
tcg_gen_qemu_ld_i32(REG(0), addr, ctx->memidx, MO_TESW);
370
-     tcg_temp_free(addr);
371
    }
372
    return;
373
case 0xc600:        /* mov.l @(disp,GBR),R0 */
374
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
375
     TCGv addr = tcg_temp_new();
376
     tcg_gen_addi_i32(addr, cpu_gbr, B7_0 * 4);
377
tcg_gen_qemu_ld_i32(REG(0), addr, ctx->memidx, MO_TESL);
378
-     tcg_temp_free(addr);
379
    }
380
    return;
381
case 0xc000:        /* mov.b R0,@(disp,GBR) */
382
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
383
     TCGv addr = tcg_temp_new();
384
     tcg_gen_addi_i32(addr, cpu_gbr, B7_0);
385
tcg_gen_qemu_st_i32(REG(0), addr, ctx->memidx, MO_UB);
386
-     tcg_temp_free(addr);
387
    }
388
    return;
389
case 0xc100:        /* mov.w R0,@(disp,GBR) */
390
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
391
     TCGv addr = tcg_temp_new();
392
     tcg_gen_addi_i32(addr, cpu_gbr, B7_0 * 2);
393
tcg_gen_qemu_st_i32(REG(0), addr, ctx->memidx, MO_TEUW);
394
-     tcg_temp_free(addr);
395
    }
396
    return;
397
case 0xc200:        /* mov.l R0,@(disp,GBR) */
398
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
399
     TCGv addr = tcg_temp_new();
400
     tcg_gen_addi_i32(addr, cpu_gbr, B7_0 * 4);
401
tcg_gen_qemu_st_i32(REG(0), addr, ctx->memidx, MO_TEUL);
402
-     tcg_temp_free(addr);
403
    }
404
    return;
405
case 0x8000:        /* mov.b R0,@(disp,Rn) */
406
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
407
     TCGv addr = tcg_temp_new();
408
     tcg_gen_addi_i32(addr, REG(B7_4), B3_0);
409
tcg_gen_qemu_st_i32(REG(0), addr, ctx->memidx, MO_UB);
410
-     tcg_temp_free(addr);
411
    }
412
    return;
413
case 0x8100:        /* mov.w R0,@(disp,Rn) */
414
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
415
     tcg_gen_addi_i32(addr, REG(B7_4), B3_0 * 2);
416
tcg_gen_qemu_st_i32(REG(0), addr, ctx->memidx,
417
MO_TEUW | UNALIGN(ctx));
418
-     tcg_temp_free(addr);
419
    }
420
    return;
421
case 0x8400:        /* mov.b @(disp,Rn),R0 */
422
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
423
     TCGv addr = tcg_temp_new();
424
     tcg_gen_addi_i32(addr, REG(B7_4), B3_0);
425
tcg_gen_qemu_ld_i32(REG(0), addr, ctx->memidx, MO_SB);
426
-     tcg_temp_free(addr);
427
    }
428
    return;
429
case 0x8500:        /* mov.w @(disp,Rn),R0 */
430
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
431
     tcg_gen_addi_i32(addr, REG(B7_4), B3_0 * 2);
432
tcg_gen_qemu_ld_i32(REG(0), addr, ctx->memidx,
433
MO_TESW | UNALIGN(ctx));
434
-     tcg_temp_free(addr);
435
    }
436
    return;
437
case 0xc700:        /* mova @(disp,PC),R0 */
438
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
439
tcg_gen_qemu_ld_i32(val, addr, ctx->memidx, MO_UB);
440
     tcg_gen_ori_i32(val, val, B7_0);
441
tcg_gen_qemu_st_i32(val, addr, ctx->memidx, MO_UB);
442
-     tcg_temp_free(val);
443
-     tcg_temp_free(addr);
444
    }
445
    return;
446
case 0xc300:        /* trapa #imm */
447
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
448
gen_save_cpu_state(ctx, true);
449
     imm = tcg_const_i32(B7_0);
450
gen_helper_trapa(cpu_env, imm);
451
-     tcg_temp_free(imm);
452
ctx->base.is_jmp = DISAS_NORETURN;
453
    }
454
    return;
455
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
456
     TCGv val = tcg_temp_new();
457
     tcg_gen_andi_i32(val, REG(0), B7_0);
458
tcg_gen_setcondi_i32(TCG_COND_EQ, cpu_sr_t, val, 0);
459
-     tcg_temp_free(val);
460
    }
461
    return;
462
case 0xcc00:        /* tst.b #imm,@(R0,GBR) */
463
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
464
tcg_gen_qemu_ld_i32(val, val, ctx->memidx, MO_UB);
465
     tcg_gen_andi_i32(val, val, B7_0);
466
tcg_gen_setcondi_i32(TCG_COND_EQ, cpu_sr_t, val, 0);
467
-     tcg_temp_free(val);
468
    }
469
    return;
470
case 0xca00:        /* xor #imm,R0 */
471
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
472
tcg_gen_qemu_ld_i32(val, addr, ctx->memidx, MO_UB);
473
     tcg_gen_xori_i32(val, val, B7_0);
474
tcg_gen_qemu_st_i32(val, addr, ctx->memidx, MO_UB);
475
-     tcg_temp_free(val);
476
-     tcg_temp_free(addr);
477
    }
478
    return;
479
}
480
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
481
     tcg_gen_subi_i32(addr, REG(B11_8), 4);
482
tcg_gen_qemu_st_i32(ALTREG(B6_4), addr, ctx->memidx, MO_TEUL);
483
     tcg_gen_mov_i32(REG(B11_8), addr);
484
-     tcg_temp_free(addr);
485
    }
486
    return;
487
}
488
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
489
TCGv val = tcg_temp_new();
490
tcg_gen_andi_i32(val, REG(B11_8), 0x700083f3);
491
gen_write_sr(val);
492
- tcg_temp_free(val);
493
ctx->base.is_jmp = DISAS_STOP;
494
}
495
    return;
496
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
497
tcg_gen_qemu_ld_i32(val, REG(B11_8), ctx->memidx, MO_TESL);
498
tcg_gen_andi_i32(val, val, 0x700083f3);
499
gen_write_sr(val);
500
-     tcg_temp_free(val);
501
     tcg_gen_addi_i32(REG(B11_8), REG(B11_8), 4);
502
ctx->base.is_jmp = DISAS_STOP;
503
    }
504
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
505
gen_read_sr(val);
506
tcg_gen_qemu_st_i32(val, addr, ctx->memidx, MO_TEUL);
507
     tcg_gen_mov_i32(REG(B11_8), addr);
508
- tcg_temp_free(val);
509
-     tcg_temp_free(addr);
510
    }
511
    return;
512
#define LD(reg,ldnum,ldpnum,prechk)        \
513
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
514
    tcg_gen_subi_i32(addr, REG(B11_8), 4);            \
515
tcg_gen_qemu_st_i32(cpu_##reg, addr, ctx->memidx, MO_TEUL); \
516
    tcg_gen_mov_i32(REG(B11_8), addr);            \
517
-    tcg_temp_free(addr);                    \
518
}                                \
519
return;
520
#define LDST(reg,ldnum,ldpnum,stnum,stpnum,prechk)        \
521
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
522
tcg_gen_qemu_ld_i32(addr, REG(B11_8), ctx->memidx, MO_TESL);
523
     tcg_gen_addi_i32(REG(B11_8), REG(B11_8), 4);
524
gen_helper_ld_fpscr(cpu_env, addr);
525
-     tcg_temp_free(addr);
526
ctx->base.is_jmp = DISAS_STOP;
527
    }
528
    return;
529
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
530
     tcg_gen_subi_i32(addr, REG(B11_8), 4);
531
tcg_gen_qemu_st_i32(val, addr, ctx->memidx, MO_TEUL);
532
     tcg_gen_mov_i32(REG(B11_8), addr);
533
-     tcg_temp_free(addr);
534
-     tcg_temp_free(val);
535
    }
536
    return;
537
case 0x00c3:        /* movca.l R0,@Rm */
538
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
539
tcg_gen_qemu_ld_i32(val, REG(B11_8), ctx->memidx, MO_TEUL);
540
gen_helper_movcal(cpu_env, REG(B11_8), val);
541
tcg_gen_qemu_st_i32(REG(0), REG(B11_8), ctx->memidx, MO_TEUL);
542
- tcg_temp_free(val);
543
}
544
ctx->has_movcal = 1;
545
    return;
546
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
547
tcg_gen_atomic_cmpxchg_i32(tmp, REG(B11_8), cpu_lock_value,
548
REG(0), ctx->memidx, MO_TEUL);
549
tcg_gen_setcond_i32(TCG_COND_EQ, cpu_sr_t, tmp, cpu_lock_value);
550
- tcg_temp_free(tmp);
551
} else {
552
tcg_gen_brcondi_i32(TCG_COND_EQ, cpu_lock_addr, -1, fail);
553
tcg_gen_qemu_st_i32(REG(0), REG(B11_8), ctx->memidx, MO_TEUL);
554
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
555
tcg_gen_qemu_ld_i32(REG(0), REG(B11_8), ctx->memidx, MO_TESL);
556
tcg_gen_mov_i32(cpu_lock_value, REG(0));
557
tcg_gen_mov_i32(cpu_lock_addr, tmp);
558
- tcg_temp_free(tmp);
559
} else {
560
tcg_gen_qemu_ld_i32(REG(0), REG(B11_8), ctx->memidx, MO_TESL);
561
tcg_gen_movi_i32(cpu_lock_addr, 0);
562
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
563
tcg_gen_shri_i32(cpu_sr_t, REG(B11_8), 31);
564
     tcg_gen_shli_i32(REG(B11_8), REG(B11_8), 1);
565
tcg_gen_or_i32(REG(B11_8), REG(B11_8), tmp);
566
-     tcg_temp_free(tmp);
567
    }
568
    return;
569
case 0x4025:        /* rotcr Rn */
570
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
571
tcg_gen_andi_i32(cpu_sr_t, REG(B11_8), 1);
572
     tcg_gen_shri_i32(REG(B11_8), REG(B11_8), 1);
573
tcg_gen_or_i32(REG(B11_8), REG(B11_8), tmp);
574
-     tcg_temp_free(tmp);
575
    }
576
    return;
577
case 0x4004:        /* rotl Rn */
578
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
579
tcg_gen_atomic_fetch_or_i32(val, REG(B11_8), val,
580
ctx->memidx, MO_UB);
581
tcg_gen_setcondi_i32(TCG_COND_EQ, cpu_sr_t, val, 0);
582
- tcg_temp_free(val);
583
}
584
return;
585
case 0xf00d: /* fsts FPUL,FRn - FPSCR: Nothing */
586
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
587
     fp = tcg_temp_new_i64();
588
gen_helper_float_DT(fp, cpu_env, cpu_fpul);
589
gen_store_fpr64(ctx, fp, B11_8);
590
-     tcg_temp_free_i64(fp);
591
    }
592
    else {
593
gen_helper_float_FT(FREG(B11_8), cpu_env, cpu_fpul);
594
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
595
     fp = tcg_temp_new_i64();
596
gen_load_fpr64(ctx, fp, B11_8);
597
gen_helper_ftrc_DT(cpu_fpul, cpu_env, fp);
598
-     tcg_temp_free_i64(fp);
599
    }
600
    else {
601
gen_helper_ftrc_FT(cpu_fpul, cpu_env, FREG(B11_8));
602
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
603
gen_load_fpr64(ctx, fp, B11_8);
604
gen_helper_fsqrt_DT(fp, cpu_env, fp);
605
gen_store_fpr64(ctx, fp, B11_8);
606
-     tcg_temp_free_i64(fp);
607
    } else {
608
gen_helper_fsqrt_FT(FREG(B11_8), cpu_env, FREG(B11_8));
609
    }
610
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
611
     TCGv_i64 fp = tcg_temp_new_i64();
612
gen_helper_fcnvsd_FT_DT(fp, cpu_env, cpu_fpul);
613
gen_store_fpr64(ctx, fp, B11_8);
614
-     tcg_temp_free_i64(fp);
615
    }
616
    return;
617
case 0xf0bd: /* fcnvds DRn,FPUL */
618
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
619
     TCGv_i64 fp = tcg_temp_new_i64();
620
gen_load_fpr64(ctx, fp, B11_8);
621
gen_helper_fcnvds_DT_FT(cpu_fpul, cpu_env, fp);
622
-     tcg_temp_free_i64(fp);
623
    }
624
    return;
625
case 0xf0ed: /* fipr FVm,FVn */
626
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
627
TCGv m = tcg_const_i32((ctx->opcode >> 8) & 3);
628
TCGv n = tcg_const_i32((ctx->opcode >> 10) & 3);
629
gen_helper_fipr(cpu_env, m, n);
630
- tcg_temp_free(m);
631
- tcg_temp_free(n);
632
return;
633
}
634
break;
635
@@ -XXX,XX +XXX,XX @@ static void _decode_opc(DisasContext * ctx)
636
}
637
TCGv n = tcg_const_i32((ctx->opcode >> 10) & 3);
638
gen_helper_ftrv(cpu_env, n);
639
- tcg_temp_free(n);
640
return;
641
}
642
break;
643
@@ -XXX,XX +XXX,XX @@ static void decode_gusa(DisasContext *ctx, CPUSH4State *env)
644
g_assert_not_reached();
645
}
646
647
- /* If op_src is not a valid register, then op_arg was a constant. */
648
- if (op_src < 0 && op_arg) {
649
- tcg_temp_free_i32(op_arg);
650
- }
651
-
652
/* The entire region has been translated. */
653
ctx->envflags &= ~TB_FLAG_GUSA_MASK;
654
ctx->base.pc_next = pc_end;
655
--
656
2.34.1
diff view generated by jsdifflib
Deleted patch
1
Translators are no longer required to free tcg temporaries,
2
therefore there's no need to record temps for later freeing.
3
Replace the few uses with tcg_temp_new.
4
1
5
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
6
Acked-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
7
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
8
---
9
target/sparc/translate.c | 53 ++++++++++++++--------------------------
10
1 file changed, 18 insertions(+), 35 deletions(-)
11
12
diff --git a/target/sparc/translate.c b/target/sparc/translate.c
13
index XXXXXXX..XXXXXXX 100644
14
--- a/target/sparc/translate.c
15
+++ b/target/sparc/translate.c
16
@@ -XXX,XX +XXX,XX @@ typedef struct DisasContext {
17
uint32_t cc_op; /* current CC operation */
18
sparc_def_t *def;
19
TCGv_i32 t32[3];
20
- TCGv ttl[5];
21
int n_t32;
22
- int n_ttl;
23
#ifdef TARGET_SPARC64
24
int fprs_dirty;
25
int asi;
26
@@ -XXX,XX +XXX,XX @@ static inline TCGv_i32 get_temp_i32(DisasContext *dc)
27
return t;
28
}
29
30
-static inline TCGv get_temp_tl(DisasContext *dc)
31
-{
32
- TCGv t;
33
- assert(dc->n_ttl < ARRAY_SIZE(dc->ttl));
34
- dc->ttl[dc->n_ttl++] = t = tcg_temp_new();
35
- return t;
36
-}
37
-
38
static inline void gen_update_fprs_dirty(DisasContext *dc, int rd)
39
{
40
#if defined(TARGET_SPARC64)
41
@@ -XXX,XX +XXX,XX @@ static inline TCGv gen_load_gpr(DisasContext *dc, int reg)
42
assert(reg < 32);
43
return cpu_regs[reg];
44
} else {
45
- TCGv t = get_temp_tl(dc);
46
+ TCGv t = tcg_temp_new();
47
tcg_gen_movi_tl(t, 0);
48
return t;
49
}
50
@@ -XXX,XX +XXX,XX @@ static inline TCGv gen_dest_gpr(DisasContext *dc, int reg)
51
assert(reg < 32);
52
return cpu_regs[reg];
53
} else {
54
- return get_temp_tl(dc);
55
+ return tcg_temp_new();
56
}
57
}
58
59
@@ -XXX,XX +XXX,XX @@ static TCGv get_src2(DisasContext *dc, unsigned int insn)
60
{
61
if (IS_IMM) { /* immediate */
62
target_long simm = GET_FIELDs(insn, 19, 31);
63
- TCGv t = get_temp_tl(dc);
64
+ TCGv t = tcg_temp_new();
65
tcg_gen_movi_tl(t, simm);
66
return t;
67
} else { /* register */
68
@@ -XXX,XX +XXX,XX @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
69
case 2: /* FPU & Logical Operations */
70
{
71
unsigned int xop = GET_FIELD(insn, 7, 12);
72
- TCGv cpu_dst = get_temp_tl(dc);
73
+ TCGv cpu_dst = tcg_temp_new();
74
TCGv cpu_tmp0;
75
76
if (xop == 0x3a) { /* generate trap */
77
@@ -XXX,XX +XXX,XX @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
78
if (!supervisor(dc)) {
79
goto priv_insn;
80
}
81
- cpu_tmp0 = get_temp_tl(dc);
82
+ cpu_tmp0 = tcg_temp_new();
83
#ifdef TARGET_SPARC64
84
rs1 = GET_FIELD(insn, 13, 17);
85
switch (rs1) {
86
@@ -XXX,XX +XXX,XX @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
87
} else { /* register */
88
rs2 = GET_FIELD(insn, 27, 31);
89
cpu_src2 = gen_load_gpr(dc, rs2);
90
- cpu_tmp0 = get_temp_tl(dc);
91
+ cpu_tmp0 = tcg_temp_new();
92
if (insn & (1 << 12)) {
93
tcg_gen_andi_i64(cpu_tmp0, cpu_src2, 0x3f);
94
} else {
95
@@ -XXX,XX +XXX,XX @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
96
} else { /* register */
97
rs2 = GET_FIELD(insn, 27, 31);
98
cpu_src2 = gen_load_gpr(dc, rs2);
99
- cpu_tmp0 = get_temp_tl(dc);
100
+ cpu_tmp0 = tcg_temp_new();
101
if (insn & (1 << 12)) {
102
tcg_gen_andi_i64(cpu_tmp0, cpu_src2, 0x3f);
103
tcg_gen_shr_i64(cpu_dst, cpu_src1, cpu_tmp0);
104
@@ -XXX,XX +XXX,XX @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
105
} else { /* register */
106
rs2 = GET_FIELD(insn, 27, 31);
107
cpu_src2 = gen_load_gpr(dc, rs2);
108
- cpu_tmp0 = get_temp_tl(dc);
109
+ cpu_tmp0 = tcg_temp_new();
110
if (insn & (1 << 12)) {
111
tcg_gen_andi_i64(cpu_tmp0, cpu_src2, 0x3f);
112
tcg_gen_sar_i64(cpu_dst, cpu_src1, cpu_tmp0);
113
@@ -XXX,XX +XXX,XX @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
114
simm = GET_FIELDs(insn, 20, 31);
115
tcg_gen_shli_tl(cpu_dst, cpu_src1, simm & 0x1f);
116
} else { /* register */
117
- cpu_tmp0 = get_temp_tl(dc);
118
+ cpu_tmp0 = tcg_temp_new();
119
tcg_gen_andi_tl(cpu_tmp0, cpu_src2, 0x1f);
120
tcg_gen_shl_tl(cpu_dst, cpu_src1, cpu_tmp0);
121
}
122
@@ -XXX,XX +XXX,XX @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
123
simm = GET_FIELDs(insn, 20, 31);
124
tcg_gen_shri_tl(cpu_dst, cpu_src1, simm & 0x1f);
125
} else { /* register */
126
- cpu_tmp0 = get_temp_tl(dc);
127
+ cpu_tmp0 = tcg_temp_new();
128
tcg_gen_andi_tl(cpu_tmp0, cpu_src2, 0x1f);
129
tcg_gen_shr_tl(cpu_dst, cpu_src1, cpu_tmp0);
130
}
131
@@ -XXX,XX +XXX,XX @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
132
simm = GET_FIELDs(insn, 20, 31);
133
tcg_gen_sari_tl(cpu_dst, cpu_src1, simm & 0x1f);
134
} else { /* register */
135
- cpu_tmp0 = get_temp_tl(dc);
136
+ cpu_tmp0 = tcg_temp_new();
137
tcg_gen_andi_tl(cpu_tmp0, cpu_src2, 0x1f);
138
tcg_gen_sar_tl(cpu_dst, cpu_src1, cpu_tmp0);
139
}
140
@@ -XXX,XX +XXX,XX @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
141
#endif
142
case 0x30:
143
{
144
- cpu_tmp0 = get_temp_tl(dc);
145
+ cpu_tmp0 = tcg_temp_new();
146
switch(rd) {
147
case 0: /* wry */
148
tcg_gen_xor_tl(cpu_tmp0, cpu_src1, cpu_src2);
149
@@ -XXX,XX +XXX,XX @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
150
goto illegal_insn;
151
}
152
#else
153
- cpu_tmp0 = get_temp_tl(dc);
154
+ cpu_tmp0 = tcg_temp_new();
155
tcg_gen_xor_tl(cpu_tmp0, cpu_src1, cpu_src2);
156
gen_helper_wrpsr(cpu_env, cpu_tmp0);
157
tcg_gen_movi_i32(cpu_cc_op, CC_OP_FLAGS);
158
@@ -XXX,XX +XXX,XX @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
159
{
160
if (!supervisor(dc))
161
goto priv_insn;
162
- cpu_tmp0 = get_temp_tl(dc);
163
+ cpu_tmp0 = tcg_temp_new();
164
tcg_gen_xor_tl(cpu_tmp0, cpu_src1, cpu_src2);
165
#ifdef TARGET_SPARC64
166
switch (rd) {
167
@@ -XXX,XX +XXX,XX @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
168
CHECK_IU_FEATURE(dc, HYPV);
169
if (!hypervisor(dc))
170
goto priv_insn;
171
- cpu_tmp0 = get_temp_tl(dc);
172
+ cpu_tmp0 = tcg_temp_new();
173
tcg_gen_xor_tl(cpu_tmp0, cpu_src1, cpu_src2);
174
switch (rd) {
175
case 0: // hpstate
176
@@ -XXX,XX +XXX,XX @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
177
} else if (xop == 0x39) { /* V9 return */
178
save_state(dc);
179
cpu_src1 = get_src1(dc, insn);
180
- cpu_tmp0 = get_temp_tl(dc);
181
+ cpu_tmp0 = tcg_temp_new();
182
if (IS_IMM) { /* immediate */
183
simm = GET_FIELDs(insn, 19, 31);
184
tcg_gen_addi_tl(cpu_tmp0, cpu_src1, simm);
185
@@ -XXX,XX +XXX,XX @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
186
#endif
187
} else {
188
cpu_src1 = get_src1(dc, insn);
189
- cpu_tmp0 = get_temp_tl(dc);
190
+ cpu_tmp0 = tcg_temp_new();
191
if (IS_IMM) { /* immediate */
192
simm = GET_FIELDs(insn, 19, 31);
193
tcg_gen_addi_tl(cpu_tmp0, cpu_src1, simm);
194
@@ -XXX,XX +XXX,XX @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
195
unsigned int xop = GET_FIELD(insn, 7, 12);
196
/* ??? gen_address_mask prevents us from using a source
197
register directly. Always generate a temporary. */
198
- TCGv cpu_addr = get_temp_tl(dc);
199
+ TCGv cpu_addr = tcg_temp_new();
200
201
tcg_gen_mov_tl(cpu_addr, get_src1(dc, insn));
202
if (xop == 0x3c || xop == 0x3e) {
203
@@ -XXX,XX +XXX,XX @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
204
}
205
dc->n_t32 = 0;
206
}
207
- if (dc->n_ttl != 0) {
208
- int i;
209
- for (i = dc->n_ttl - 1; i >= 0; --i) {
210
- tcg_temp_free(dc->ttl[i]);
211
- }
212
- dc->n_ttl = 0;
213
- }
214
}
215
216
static void sparc_tr_init_disas_context(DisasContextBase *dcbase, CPUState *cs)
217
--
218
2.34.1
diff view generated by jsdifflib
Deleted patch
1
Translators are no longer required to free tcg temporaries,
2
therefore there's no need to record temps for later freeing.
3
Replace the few uses with tcg_temp_new_i32.
4
1
5
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
6
Acked-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
7
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
8
---
9
target/sparc/translate.c | 23 +++--------------------
10
1 file changed, 3 insertions(+), 20 deletions(-)
11
12
diff --git a/target/sparc/translate.c b/target/sparc/translate.c
13
index XXXXXXX..XXXXXXX 100644
14
--- a/target/sparc/translate.c
15
+++ b/target/sparc/translate.c
16
@@ -XXX,XX +XXX,XX @@ typedef struct DisasContext {
17
18
uint32_t cc_op; /* current CC operation */
19
sparc_def_t *def;
20
- TCGv_i32 t32[3];
21
- int n_t32;
22
#ifdef TARGET_SPARC64
23
int fprs_dirty;
24
int asi;
25
@@ -XXX,XX +XXX,XX @@ static int sign_extend(int x, int len)
26
27
#define IS_IMM (insn & (1<<13))
28
29
-static inline TCGv_i32 get_temp_i32(DisasContext *dc)
30
-{
31
- TCGv_i32 t;
32
- assert(dc->n_t32 < ARRAY_SIZE(dc->t32));
33
- dc->t32[dc->n_t32++] = t = tcg_temp_new_i32();
34
- return t;
35
-}
36
-
37
static inline void gen_update_fprs_dirty(DisasContext *dc, int rd)
38
{
39
#if defined(TARGET_SPARC64)
40
@@ -XXX,XX +XXX,XX @@ static inline void gen_update_fprs_dirty(DisasContext *dc, int rd)
41
/* floating point registers moves */
42
static TCGv_i32 gen_load_fpr_F(DisasContext *dc, unsigned int src)
43
{
44
- TCGv_i32 ret = get_temp_i32(dc);
45
+ TCGv_i32 ret = tcg_temp_new_i32();
46
if (src & 1) {
47
tcg_gen_extrl_i64_i32(ret, cpu_fpr[src / 2]);
48
} else {
49
@@ -XXX,XX +XXX,XX @@ static void gen_store_fpr_F(DisasContext *dc, unsigned int dst, TCGv_i32 v)
50
51
static TCGv_i32 gen_dest_fpr_F(DisasContext *dc)
52
{
53
- return get_temp_i32(dc);
54
+ return tcg_temp_new_i32();
55
}
56
57
static TCGv_i64 gen_load_fpr_D(DisasContext *dc, unsigned int src)
58
@@ -XXX,XX +XXX,XX @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
59
break;
60
}
61
#endif
62
- cpu_dst_32 = get_temp_i32(dc);
63
+ cpu_dst_32 = tcg_temp_new_i32();
64
tcg_gen_qemu_ld_i32(cpu_dst_32, cpu_addr,
65
dc->mem_idx, MO_TEUL);
66
gen_helper_ldfsr(cpu_fsr, cpu_env, cpu_fsr, cpu_dst_32);
67
@@ -XXX,XX +XXX,XX @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
68
goto egress;
69
#endif
70
egress:
71
- if (dc->n_t32 != 0) {
72
- int i;
73
- for (i = dc->n_t32 - 1; i >= 0; --i) {
74
- tcg_temp_free_i32(dc->t32[i]);
75
- }
76
- dc->n_t32 = 0;
77
- }
78
}
79
80
static void sparc_tr_init_disas_context(DisasContextBase *dcbase, CPUState *cs)
81
--
82
2.34.1
diff view generated by jsdifflib
Deleted patch
1
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
2
Acked-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
3
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4
---
5
target/sparc/translate.c | 15 +++++++--------
6
1 file changed, 7 insertions(+), 8 deletions(-)
7
1
8
diff --git a/target/sparc/translate.c b/target/sparc/translate.c
9
index XXXXXXX..XXXXXXX 100644
10
--- a/target/sparc/translate.c
11
+++ b/target/sparc/translate.c
12
@@ -XXX,XX +XXX,XX @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
13
dc->npc = dc->npc + 4;
14
}
15
jmp_insn:
16
- goto egress;
17
+ return;
18
illegal_insn:
19
gen_exception(dc, TT_ILL_INSN);
20
- goto egress;
21
+ return;
22
unimp_flush:
23
gen_exception(dc, TT_UNIMP_FLUSH);
24
- goto egress;
25
+ return;
26
#if !defined(CONFIG_USER_ONLY)
27
priv_insn:
28
gen_exception(dc, TT_PRIV_INSN);
29
- goto egress;
30
+ return;
31
#endif
32
nfpu_insn:
33
gen_op_fpexception_im(dc, FSR_FTT_UNIMPFPOP);
34
- goto egress;
35
+ return;
36
#if !defined(CONFIG_USER_ONLY) && !defined(TARGET_SPARC64)
37
nfq_insn:
38
gen_op_fpexception_im(dc, FSR_FTT_SEQ_ERROR);
39
- goto egress;
40
+ return;
41
#endif
42
#ifndef TARGET_SPARC64
43
ncp_insn:
44
gen_exception(dc, TT_NCP_INSN);
45
- goto egress;
46
+ return;
47
#endif
48
- egress:
49
}
50
51
static void sparc_tr_init_disas_context(DisasContextBase *dcbase, CPUState *cs)
52
--
53
2.34.1
diff view generated by jsdifflib
Deleted patch
1
Translators are no longer required to free tcg temporaries.
2
Remove the g1 and g2 members of DisasCompare, as they were
3
used to track which temps needed to be freed.
4
1
5
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
6
Acked-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
7
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
8
---
9
target/sparc/translate.c | 32 --------------------------------
10
1 file changed, 32 deletions(-)
11
12
diff --git a/target/sparc/translate.c b/target/sparc/translate.c
13
index XXXXXXX..XXXXXXX 100644
14
--- a/target/sparc/translate.c
15
+++ b/target/sparc/translate.c
16
@@ -XXX,XX +XXX,XX @@ typedef struct DisasContext {
17
typedef struct {
18
TCGCond cond;
19
bool is_bool;
20
- bool g1, g2;
21
TCGv c1, c2;
22
} DisasCompare;
23
24
@@ -XXX,XX +XXX,XX @@ static inline void gen_op_next_insn(void)
25
tcg_gen_addi_tl(cpu_npc, cpu_npc, 4);
26
}
27
28
-static void free_compare(DisasCompare *cmp)
29
-{
30
- if (!cmp->g1) {
31
- tcg_temp_free(cmp->c1);
32
- }
33
- if (!cmp->g2) {
34
- tcg_temp_free(cmp->c2);
35
- }
36
-}
37
-
38
static void gen_compare(DisasCompare *cmp, bool xcc, unsigned int cond,
39
DisasContext *dc)
40
{
41
@@ -XXX,XX +XXX,XX @@ static void gen_compare(DisasCompare *cmp, bool xcc, unsigned int cond,
42
cmp->cond = logic_cond[cond];
43
do_compare_dst_0:
44
cmp->is_bool = false;
45
- cmp->g2 = false;
46
cmp->c2 = tcg_const_tl(0);
47
#ifdef TARGET_SPARC64
48
if (!xcc) {
49
- cmp->g1 = false;
50
cmp->c1 = tcg_temp_new();
51
tcg_gen_ext32s_tl(cmp->c1, cpu_cc_dst);
52
break;
53
}
54
#endif
55
- cmp->g1 = true;
56
cmp->c1 = cpu_cc_dst;
57
break;
58
59
@@ -XXX,XX +XXX,XX @@ static void gen_compare(DisasCompare *cmp, bool xcc, unsigned int cond,
60
if (!xcc) {
61
/* Note that sign-extension works for unsigned compares as
62
long as both operands are sign-extended. */
63
- cmp->g1 = cmp->g2 = false;
64
cmp->c1 = tcg_temp_new();
65
cmp->c2 = tcg_temp_new();
66
tcg_gen_ext32s_tl(cmp->c1, cpu_cc_src);
67
@@ -XXX,XX +XXX,XX @@ static void gen_compare(DisasCompare *cmp, bool xcc, unsigned int cond,
68
break;
69
}
70
#endif
71
- cmp->g1 = cmp->g2 = true;
72
cmp->c1 = cpu_cc_src;
73
cmp->c2 = cpu_cc_src2;
74
break;
75
@@ -XXX,XX +XXX,XX @@ static void gen_compare(DisasCompare *cmp, bool xcc, unsigned int cond,
76
/* We're going to generate a boolean result. */
77
cmp->cond = TCG_COND_NE;
78
cmp->is_bool = true;
79
- cmp->g1 = cmp->g2 = false;
80
cmp->c1 = r_dst = tcg_temp_new();
81
cmp->c2 = tcg_const_tl(0);
82
83
@@ -XXX,XX +XXX,XX @@ static void gen_fcompare(DisasCompare *cmp, unsigned int cc, unsigned int cond)
84
/* For now we still generate a straight boolean result. */
85
cmp->cond = TCG_COND_NE;
86
cmp->is_bool = true;
87
- cmp->g1 = cmp->g2 = false;
88
cmp->c1 = r_dst = tcg_temp_new();
89
cmp->c2 = tcg_const_tl(0);
90
91
@@ -XXX,XX +XXX,XX @@ static void gen_cond(TCGv r_dst, unsigned int cc, unsigned int cond,
92
} else {
93
tcg_gen_setcond_tl(cmp.cond, r_dst, cmp.c1, cmp.c2);
94
}
95
-
96
- free_compare(&cmp);
97
}
98
99
static void gen_fcond(TCGv r_dst, unsigned int cc, unsigned int cond)
100
@@ -XXX,XX +XXX,XX @@ static void gen_fcond(TCGv r_dst, unsigned int cc, unsigned int cond)
101
} else {
102
tcg_gen_setcond_tl(cmp.cond, r_dst, cmp.c1, cmp.c2);
103
}
104
-
105
- free_compare(&cmp);
106
}
107
108
#ifdef TARGET_SPARC64
109
@@ -XXX,XX +XXX,XX @@ static void gen_compare_reg(DisasCompare *cmp, int cond, TCGv r_src)
110
{
111
cmp->cond = tcg_invert_cond(gen_tcg_cond_reg[cond]);
112
cmp->is_bool = false;
113
- cmp->g1 = true;
114
- cmp->g2 = false;
115
cmp->c1 = r_src;
116
cmp->c2 = tcg_const_tl(0);
117
}
118
@@ -XXX,XX +XXX,XX @@ static inline void gen_cond_reg(TCGv r_dst, int cond, TCGv r_src)
119
120
/* The interface is to return a boolean in r_dst. */
121
tcg_gen_setcond_tl(cmp.cond, r_dst, cmp.c1, cmp.c2);
122
-
123
- free_compare(&cmp);
124
}
125
#endif
126
127
@@ -XXX,XX +XXX,XX @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
128
l1 = gen_new_label();
129
tcg_gen_brcond_tl(tcg_invert_cond(cmp.cond),
130
cmp.c1, cmp.c2, l1);
131
- free_compare(&cmp);
132
}
133
134
mask = ((dc->def->features & CPU_FEATURE_HYPV) && supervisor(dc)
135
@@ -XXX,XX +XXX,XX @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
136
cpu_src1 = get_src1(dc, insn); \
137
gen_compare_reg(&cmp, cond, cpu_src1); \
138
gen_fmov##sz(dc, &cmp, rd, rs2); \
139
- free_compare(&cmp); \
140
} while (0)
141
142
if ((xop & 0x11f) == 0x005) { /* V9 fmovsr */
143
@@ -XXX,XX +XXX,XX @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
144
cond = GET_FIELD_SP(insn, 14, 17); \
145
gen_fcompare(&cmp, fcc, cond); \
146
gen_fmov##sz(dc, &cmp, rd, rs2); \
147
- free_compare(&cmp); \
148
} while (0)
149
150
case 0x001: /* V9 fmovscc %fcc0 */
151
@@ -XXX,XX +XXX,XX @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
152
cond = GET_FIELD_SP(insn, 14, 17); \
153
gen_compare(&cmp, xcc, cond, dc); \
154
gen_fmov##sz(dc, &cmp, rd, rs2); \
155
- free_compare(&cmp); \
156
} while (0)
157
158
case 0x101: /* V9 fmovscc %icc */
159
@@ -XXX,XX +XXX,XX @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
160
tcg_gen_movcond_tl(cmp.cond, dst,
161
cmp.c1, cmp.c2,
162
cpu_src2, dst);
163
- free_compare(&cmp);
164
gen_store_gpr(dc, rd, dst);
165
break;
166
}
167
@@ -XXX,XX +XXX,XX @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
168
tcg_gen_movcond_tl(cmp.cond, dst,
169
cmp.c1, cmp.c2,
170
cpu_src2, dst);
171
- free_compare(&cmp);
172
gen_store_gpr(dc, rd, dst);
173
break;
174
}
175
--
176
2.34.1
diff view generated by jsdifflib
Deleted patch
1
Translators are no longer required to free tcg temporaries.
2
1
3
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
4
Acked-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
5
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
6
---
7
target/sparc/translate.c | 136 ---------------------------------------
8
1 file changed, 136 deletions(-)
9
10
diff --git a/target/sparc/translate.c b/target/sparc/translate.c
11
index XXXXXXX..XXXXXXX 100644
12
--- a/target/sparc/translate.c
13
+++ b/target/sparc/translate.c
14
@@ -XXX,XX +XXX,XX @@ static void gen_store_fpr_F(DisasContext *dc, unsigned int dst, TCGv_i32 v)
15
tcg_gen_extu_i32_i64(t, v);
16
tcg_gen_deposit_i64(cpu_fpr[dst / 2], cpu_fpr[dst / 2], t,
17
(dst & 1 ? 0 : 32), 32);
18
- tcg_temp_free_i64(t);
19
gen_update_fprs_dirty(dc, dst);
20
}
21
22
@@ -XXX,XX +XXX,XX @@ static TCGv_i32 gen_add32_carry32(void)
23
carry_32 = tcg_temp_new_i32();
24
tcg_gen_setcond_i32(TCG_COND_LTU, carry_32, cc_src1_32, cc_src2_32);
25
26
-#if TARGET_LONG_BITS == 64
27
- tcg_temp_free_i32(cc_src1_32);
28
- tcg_temp_free_i32(cc_src2_32);
29
-#endif
30
-
31
return carry_32;
32
}
33
34
@@ -XXX,XX +XXX,XX @@ static TCGv_i32 gen_sub32_carry32(void)
35
carry_32 = tcg_temp_new_i32();
36
tcg_gen_setcond_i32(TCG_COND_LTU, carry_32, cc_src1_32, cc_src2_32);
37
38
-#if TARGET_LONG_BITS == 64
39
- tcg_temp_free_i32(cc_src1_32);
40
- tcg_temp_free_i32(cc_src2_32);
41
-#endif
42
-
43
return carry_32;
44
}
45
46
@@ -XXX,XX +XXX,XX @@ static void gen_op_addx_int(DisasContext *dc, TCGv dst, TCGv src1,
47
generated the carry in the first place. */
48
carry = tcg_temp_new();
49
tcg_gen_add2_tl(carry, dst, cpu_cc_src, src1, cpu_cc_src2, src2);
50
- tcg_temp_free(carry);
51
goto add_done;
52
}
53
carry_32 = gen_add32_carry32();
54
@@ -XXX,XX +XXX,XX @@ static void gen_op_addx_int(DisasContext *dc, TCGv dst, TCGv src1,
55
tcg_gen_add_tl(dst, src1, src2);
56
tcg_gen_add_tl(dst, dst, carry);
57
58
- tcg_temp_free_i32(carry_32);
59
-#if TARGET_LONG_BITS == 64
60
- tcg_temp_free(carry);
61
-#endif
62
-
63
add_done:
64
if (update_cc) {
65
tcg_gen_mov_tl(cpu_cc_src, src1);
66
@@ -XXX,XX +XXX,XX @@ static void gen_op_subx_int(DisasContext *dc, TCGv dst, TCGv src1,
67
generated the carry in the first place. */
68
carry = tcg_temp_new();
69
tcg_gen_sub2_tl(carry, dst, cpu_cc_src, src1, cpu_cc_src2, src2);
70
- tcg_temp_free(carry);
71
goto sub_done;
72
}
73
carry_32 = gen_sub32_carry32();
74
@@ -XXX,XX +XXX,XX @@ static void gen_op_subx_int(DisasContext *dc, TCGv dst, TCGv src1,
75
tcg_gen_sub_tl(dst, src1, src2);
76
tcg_gen_sub_tl(dst, dst, carry);
77
78
- tcg_temp_free_i32(carry_32);
79
-#if TARGET_LONG_BITS == 64
80
- tcg_temp_free(carry);
81
-#endif
82
-
83
sub_done:
84
if (update_cc) {
85
tcg_gen_mov_tl(cpu_cc_src, src1);
86
@@ -XXX,XX +XXX,XX @@ static inline void gen_op_mulscc(TCGv dst, TCGv src1, TCGv src2)
87
tcg_gen_andi_tl(cpu_cc_src2, src2, 0xffffffff);
88
tcg_gen_movcond_tl(TCG_COND_EQ, cpu_cc_src2, r_temp, zero,
89
zero, cpu_cc_src2);
90
- tcg_temp_free(zero);
91
92
// b2 = T0 & 1;
93
// env->y = (b2 << 31) | (env->y >> 1);
94
@@ -XXX,XX +XXX,XX @@ static inline void gen_op_mulscc(TCGv dst, TCGv src1, TCGv src2)
95
gen_mov_reg_N(t0, cpu_psr);
96
gen_mov_reg_V(r_temp, cpu_psr);
97
tcg_gen_xor_tl(t0, t0, r_temp);
98
- tcg_temp_free(r_temp);
99
100
// T0 = (b1 << 31) | (T0 >> 1);
101
// src1 = T0;
102
tcg_gen_shli_tl(t0, t0, 31);
103
tcg_gen_shri_tl(cpu_cc_src, cpu_cc_src, 1);
104
tcg_gen_or_tl(cpu_cc_src, cpu_cc_src, t0);
105
- tcg_temp_free(t0);
106
107
tcg_gen_add_tl(cpu_cc_dst, cpu_cc_src, cpu_cc_src2);
108
109
@@ -XXX,XX +XXX,XX @@ static inline void gen_op_multiply(TCGv dst, TCGv src1, TCGv src2, int sign_ext)
110
}
111
112
tcg_gen_mul_i64(dst, t0, t1);
113
- tcg_temp_free(t0);
114
- tcg_temp_free(t1);
115
-
116
tcg_gen_shri_i64(cpu_y, dst, 32);
117
#endif
118
}
119
@@ -XXX,XX +XXX,XX @@ static inline void gen_op_eval_ble(TCGv dst, TCGv_i32 src)
120
tcg_gen_xor_tl(dst, dst, t0);
121
gen_mov_reg_Z(t0, src);
122
tcg_gen_or_tl(dst, dst, t0);
123
- tcg_temp_free(t0);
124
}
125
126
// N ^ V
127
@@ -XXX,XX +XXX,XX @@ static inline void gen_op_eval_bl(TCGv dst, TCGv_i32 src)
128
gen_mov_reg_V(t0, src);
129
gen_mov_reg_N(dst, src);
130
tcg_gen_xor_tl(dst, dst, t0);
131
- tcg_temp_free(t0);
132
}
133
134
// C | Z
135
@@ -XXX,XX +XXX,XX @@ static inline void gen_op_eval_bleu(TCGv dst, TCGv_i32 src)
136
gen_mov_reg_Z(t0, src);
137
gen_mov_reg_C(dst, src);
138
tcg_gen_or_tl(dst, dst, t0);
139
- tcg_temp_free(t0);
140
}
141
142
// C
143
@@ -XXX,XX +XXX,XX @@ static inline void gen_op_eval_fbne(TCGv dst, TCGv src,
144
gen_mov_reg_FCC0(dst, src, fcc_offset);
145
gen_mov_reg_FCC1(t0, src, fcc_offset);
146
tcg_gen_or_tl(dst, dst, t0);
147
- tcg_temp_free(t0);
148
}
149
150
// 1 or 2: FCC0 ^ FCC1
151
@@ -XXX,XX +XXX,XX @@ static inline void gen_op_eval_fblg(TCGv dst, TCGv src,
152
gen_mov_reg_FCC0(dst, src, fcc_offset);
153
gen_mov_reg_FCC1(t0, src, fcc_offset);
154
tcg_gen_xor_tl(dst, dst, t0);
155
- tcg_temp_free(t0);
156
}
157
158
// 1 or 3: FCC0
159
@@ -XXX,XX +XXX,XX @@ static inline void gen_op_eval_fbl(TCGv dst, TCGv src,
160
gen_mov_reg_FCC0(dst, src, fcc_offset);
161
gen_mov_reg_FCC1(t0, src, fcc_offset);
162
tcg_gen_andc_tl(dst, dst, t0);
163
- tcg_temp_free(t0);
164
}
165
166
// 2 or 3: FCC1
167
@@ -XXX,XX +XXX,XX @@ static inline void gen_op_eval_fbg(TCGv dst, TCGv src,
168
gen_mov_reg_FCC0(dst, src, fcc_offset);
169
gen_mov_reg_FCC1(t0, src, fcc_offset);
170
tcg_gen_andc_tl(dst, t0, dst);
171
- tcg_temp_free(t0);
172
}
173
174
// 3: FCC0 & FCC1
175
@@ -XXX,XX +XXX,XX @@ static inline void gen_op_eval_fbu(TCGv dst, TCGv src,
176
gen_mov_reg_FCC0(dst, src, fcc_offset);
177
gen_mov_reg_FCC1(t0, src, fcc_offset);
178
tcg_gen_and_tl(dst, dst, t0);
179
- tcg_temp_free(t0);
180
}
181
182
// 0: !(FCC0 | FCC1)
183
@@ -XXX,XX +XXX,XX @@ static inline void gen_op_eval_fbe(TCGv dst, TCGv src,
184
gen_mov_reg_FCC1(t0, src, fcc_offset);
185
tcg_gen_or_tl(dst, dst, t0);
186
tcg_gen_xori_tl(dst, dst, 0x1);
187
- tcg_temp_free(t0);
188
}
189
190
// 0 or 3: !(FCC0 ^ FCC1)
191
@@ -XXX,XX +XXX,XX @@ static inline void gen_op_eval_fbue(TCGv dst, TCGv src,
192
gen_mov_reg_FCC1(t0, src, fcc_offset);
193
tcg_gen_xor_tl(dst, dst, t0);
194
tcg_gen_xori_tl(dst, dst, 0x1);
195
- tcg_temp_free(t0);
196
}
197
198
// 0 or 2: !FCC0
199
@@ -XXX,XX +XXX,XX @@ static inline void gen_op_eval_fbuge(TCGv dst, TCGv src,
200
gen_mov_reg_FCC1(t0, src, fcc_offset);
201
tcg_gen_andc_tl(dst, dst, t0);
202
tcg_gen_xori_tl(dst, dst, 0x1);
203
- tcg_temp_free(t0);
204
}
205
206
// 0 or 1: !FCC1
207
@@ -XXX,XX +XXX,XX @@ static inline void gen_op_eval_fbule(TCGv dst, TCGv src,
208
gen_mov_reg_FCC1(t0, src, fcc_offset);
209
tcg_gen_andc_tl(dst, t0, dst);
210
tcg_gen_xori_tl(dst, dst, 0x1);
211
- tcg_temp_free(t0);
212
}
213
214
// !3: !(FCC0 & FCC1)
215
@@ -XXX,XX +XXX,XX @@ static inline void gen_op_eval_fbo(TCGv dst, TCGv src,
216
gen_mov_reg_FCC1(t0, src, fcc_offset);
217
tcg_gen_and_tl(dst, dst, t0);
218
tcg_gen_xori_tl(dst, dst, 0x1);
219
- tcg_temp_free(t0);
220
}
221
222
static inline void gen_branch2(DisasContext *dc, target_ulong pc1,
223
@@ -XXX,XX +XXX,XX @@ static void gen_branch_n(DisasContext *dc, target_ulong pc1)
224
t = tcg_const_tl(pc1);
225
z = tcg_const_tl(0);
226
tcg_gen_movcond_tl(TCG_COND_NE, cpu_npc, cpu_cond, z, t, cpu_npc);
227
- tcg_temp_free(t);
228
- tcg_temp_free(z);
229
230
dc->pc = DYNAMIC_PC;
231
}
232
@@ -XXX,XX +XXX,XX @@ static inline void gen_generic_branch(DisasContext *dc)
233
TCGv zero = tcg_const_tl(0);
234
235
tcg_gen_movcond_tl(TCG_COND_NE, cpu_npc, cpu_cond, zero, npc0, npc1);
236
-
237
- tcg_temp_free(npc0);
238
- tcg_temp_free(npc1);
239
- tcg_temp_free(zero);
240
}
241
242
/* call this function before using the condition register as it may
243
@@ -XXX,XX +XXX,XX @@ static void gen_exception(DisasContext *dc, int which)
244
save_state(dc);
245
t = tcg_const_i32(which);
246
gen_helper_raise_exception(cpu_env, t);
247
- tcg_temp_free_i32(t);
248
dc->base.is_jmp = DISAS_NORETURN;
249
}
250
251
@@ -XXX,XX +XXX,XX @@ static void gen_check_align(TCGv addr, int mask)
252
{
253
TCGv_i32 r_mask = tcg_const_i32(mask);
254
gen_helper_check_align(cpu_env, addr, r_mask);
255
- tcg_temp_free_i32(r_mask);
256
}
257
258
static inline void gen_mov_pc_npc(DisasContext *dc)
259
@@ -XXX,XX +XXX,XX @@ static void gen_ldstub(DisasContext *dc, TCGv dst, TCGv addr, int mmu_idx)
260
TCGv m1 = tcg_const_tl(0xff);
261
gen_address_mask(dc, addr);
262
tcg_gen_atomic_xchg_tl(dst, addr, m1, mmu_idx, MO_UB);
263
- tcg_temp_free(m1);
264
}
265
266
/* asi moves */
267
@@ -XXX,XX +XXX,XX @@ static void gen_ld_asi(DisasContext *dc, TCGv dst, TCGv addr,
268
TCGv_i64 t64 = tcg_temp_new_i64();
269
gen_helper_ld_asi(t64, cpu_env, addr, r_asi, r_mop);
270
tcg_gen_trunc_i64_tl(dst, t64);
271
- tcg_temp_free_i64(t64);
272
}
273
#endif
274
- tcg_temp_free_i32(r_mop);
275
- tcg_temp_free_i32(r_asi);
276
}
277
break;
278
}
279
@@ -XXX,XX +XXX,XX @@ static void gen_st_asi(DisasContext *dc, TCGv src, TCGv addr,
280
tcg_gen_add_tl(saddr, saddr, four);
281
tcg_gen_add_tl(daddr, daddr, four);
282
}
283
-
284
- tcg_temp_free(saddr);
285
- tcg_temp_free(daddr);
286
- tcg_temp_free(four);
287
- tcg_temp_free_i32(tmp);
288
}
289
break;
290
#endif
291
@@ -XXX,XX +XXX,XX @@ static void gen_st_asi(DisasContext *dc, TCGv src, TCGv addr,
292
TCGv_i64 t64 = tcg_temp_new_i64();
293
tcg_gen_extu_tl_i64(t64, src);
294
gen_helper_st_asi(cpu_env, addr, t64, r_asi, r_mop);
295
- tcg_temp_free_i64(t64);
296
}
297
#endif
298
- tcg_temp_free_i32(r_mop);
299
- tcg_temp_free_i32(r_asi);
300
301
/* A write to a TLB register may alter page maps. End the TB. */
302
dc->npc = DYNAMIC_PC;
303
@@ -XXX,XX +XXX,XX @@ static void gen_cas_asi(DisasContext *dc, TCGv addr, TCGv cmpv,
304
tcg_gen_atomic_cmpxchg_tl(oldv, addr, cmpv, gen_load_gpr(dc, rd),
305
da.mem_idx, da.memop);
306
gen_store_gpr(dc, rd, oldv);
307
- tcg_temp_free(oldv);
308
break;
309
default:
310
/* ??? Should be DAE_invalid_asi. */
311
@@ -XXX,XX +XXX,XX @@ static void gen_ldstub_asi(DisasContext *dc, TCGv dst, TCGv addr, int insn)
312
313
s64 = tcg_const_i64(0xff);
314
gen_helper_st_asi(cpu_env, addr, s64, r_asi, r_mop);
315
- tcg_temp_free_i64(s64);
316
- tcg_temp_free_i32(r_mop);
317
- tcg_temp_free_i32(r_asi);
318
319
tcg_gen_trunc_i64_tl(dst, t64);
320
- tcg_temp_free_i64(t64);
321
322
/* End the TB. */
323
dc->npc = DYNAMIC_PC;
324
@@ -XXX,XX +XXX,XX @@ static void gen_ldf_asi(DisasContext *dc, TCGv addr,
325
tcg_gen_qemu_ld_i64(cpu_fpr[rd/2+1], addr, da.mem_idx,
326
da.memop | MO_ALIGN_4);
327
tcg_gen_mov_i64(cpu_fpr[rd / 2], d64);
328
- tcg_temp_free_i64(d64);
329
break;
330
default:
331
g_assert_not_reached();
332
@@ -XXX,XX +XXX,XX @@ static void gen_ldf_asi(DisasContext *dc, TCGv addr,
333
tcg_gen_add_tl(addr, addr, eight);
334
memop = da.memop;
335
}
336
- tcg_temp_free(eight);
337
} else {
338
gen_exception(dc, TT_ILL_INSN);
339
}
340
@@ -XXX,XX +XXX,XX @@ static void gen_ldf_asi(DisasContext *dc, TCGv addr,
341
gen_helper_ld_asi(d64, cpu_env, addr, r_asi, r_mop);
342
d32 = gen_dest_fpr_F(dc);
343
tcg_gen_extrl_i64_i32(d32, d64);
344
- tcg_temp_free_i64(d64);
345
gen_store_fpr_F(dc, rd, d32);
346
break;
347
case 8:
348
@@ -XXX,XX +XXX,XX @@ static void gen_ldf_asi(DisasContext *dc, TCGv addr,
349
tcg_gen_addi_tl(addr, addr, 8);
350
gen_helper_ld_asi(cpu_fpr[rd/2+1], cpu_env, addr, r_asi, r_mop);
351
tcg_gen_mov_i64(cpu_fpr[rd / 2], d64);
352
- tcg_temp_free_i64(d64);
353
break;
354
default:
355
g_assert_not_reached();
356
}
357
- tcg_temp_free_i32(r_mop);
358
- tcg_temp_free_i32(r_asi);
359
}
360
break;
361
}
362
@@ -XXX,XX +XXX,XX @@ static void gen_stf_asi(DisasContext *dc, TCGv addr,
363
tcg_gen_add_tl(addr, addr, eight);
364
memop = da.memop;
365
}
366
- tcg_temp_free(eight);
367
} else {
368
gen_exception(dc, TT_ILL_INSN);
369
}
370
@@ -XXX,XX +XXX,XX @@ static void gen_ldda_asi(DisasContext *dc, TCGv addr, int insn, int rd)
371
} else {
372
tcg_gen_extr32_i64(hi, lo, tmp);
373
}
374
- tcg_temp_free_i64(tmp);
375
}
376
break;
377
378
@@ -XXX,XX +XXX,XX @@ static void gen_ldda_asi(DisasContext *dc, TCGv addr, int insn, int rd)
379
380
save_state(dc);
381
gen_helper_ld_asi(tmp, cpu_env, addr, r_asi, r_mop);
382
- tcg_temp_free_i32(r_asi);
383
- tcg_temp_free_i32(r_mop);
384
385
/* See above. */
386
if ((da.memop & MO_BSWAP) == MO_TE) {
387
@@ -XXX,XX +XXX,XX @@ static void gen_ldda_asi(DisasContext *dc, TCGv addr, int insn, int rd)
388
} else {
389
tcg_gen_extr32_i64(hi, lo, tmp);
390
}
391
- tcg_temp_free_i64(tmp);
392
}
393
break;
394
}
395
@@ -XXX,XX +XXX,XX @@ static void gen_stda_asi(DisasContext *dc, TCGv hi, TCGv addr,
396
}
397
gen_address_mask(dc, addr);
398
tcg_gen_qemu_st_i64(t64, addr, da.mem_idx, da.memop);
399
- tcg_temp_free_i64(t64);
400
}
401
break;
402
403
@@ -XXX,XX +XXX,XX @@ static void gen_stda_asi(DisasContext *dc, TCGv hi, TCGv addr,
404
405
save_state(dc);
406
gen_helper_st_asi(cpu_env, addr, t64, r_asi, r_mop);
407
- tcg_temp_free_i32(r_mop);
408
- tcg_temp_free_i32(r_asi);
409
- tcg_temp_free_i64(t64);
410
}
411
break;
412
}
413
@@ -XXX,XX +XXX,XX @@ static void gen_casx_asi(DisasContext *dc, TCGv addr, TCGv cmpv,
414
tcg_gen_atomic_cmpxchg_tl(oldv, addr, cmpv, gen_load_gpr(dc, rd),
415
da.mem_idx, da.memop);
416
gen_store_gpr(dc, rd, oldv);
417
- tcg_temp_free(oldv);
418
break;
419
default:
420
/* ??? Should be DAE_invalid_asi. */
421
@@ -XXX,XX +XXX,XX @@ static void gen_ldda_asi(DisasContext *dc, TCGv addr, int insn, int rd)
422
423
switch (da.type) {
424
case GET_ASI_EXCP:
425
- tcg_temp_free_i64(t64);
426
return;
427
case GET_ASI_DIRECT:
428
gen_address_mask(dc, addr);
429
@@ -XXX,XX +XXX,XX @@ static void gen_ldda_asi(DisasContext *dc, TCGv addr, int insn, int rd)
430
431
save_state(dc);
432
gen_helper_ld_asi(t64, cpu_env, addr, r_asi, r_mop);
433
- tcg_temp_free_i32(r_mop);
434
- tcg_temp_free_i32(r_asi);
435
}
436
break;
437
}
438
439
tcg_gen_extr_i64_i32(lo, hi, t64);
440
- tcg_temp_free_i64(t64);
441
gen_store_gpr(dc, rd | 1, lo);
442
gen_store_gpr(dc, rd, hi);
443
}
444
@@ -XXX,XX +XXX,XX @@ static void gen_stda_asi(DisasContext *dc, TCGv hi, TCGv addr,
445
tcg_gen_qemu_st_i64(t64, d_addr, da.mem_idx, da.memop);
446
tcg_gen_add_tl(d_addr, d_addr, eight);
447
}
448
-
449
- tcg_temp_free(d_addr);
450
- tcg_temp_free(eight);
451
}
452
break;
453
default:
454
@@ -XXX,XX +XXX,XX @@ static void gen_stda_asi(DisasContext *dc, TCGv hi, TCGv addr,
455
456
save_state(dc);
457
gen_helper_st_asi(cpu_env, addr, t64, r_asi, r_mop);
458
- tcg_temp_free_i32(r_mop);
459
- tcg_temp_free_i32(r_asi);
460
}
461
break;
462
}
463
-
464
- tcg_temp_free_i64(t64);
465
}
466
#endif
467
468
@@ -XXX,XX +XXX,XX @@ static void gen_fmovs(DisasContext *dc, DisasCompare *cmp, int rd, int rs)
469
TCGv_i64 c64 = tcg_temp_new_i64();
470
tcg_gen_setcond_i64(cmp->cond, c64, cmp->c1, cmp->c2);
471
tcg_gen_extrl_i64_i32(c32, c64);
472
- tcg_temp_free_i64(c64);
473
}
474
475
s1 = gen_load_fpr_F(dc, rs);
476
@@ -XXX,XX +XXX,XX @@ static void gen_fmovs(DisasContext *dc, DisasCompare *cmp, int rd, int rs)
477
478
tcg_gen_movcond_i32(TCG_COND_NE, dst, c32, zero, s1, s2);
479
480
- tcg_temp_free_i32(c32);
481
- tcg_temp_free_i32(zero);
482
gen_store_fpr_F(dc, rd, dst);
483
}
484
485
@@ -XXX,XX +XXX,XX @@ static inline void gen_load_trap_state_at_tl(TCGv_ptr r_tsptr, TCGv_env cpu_env)
486
TCGv_ptr r_tl_tmp = tcg_temp_new_ptr();
487
tcg_gen_ext_i32_ptr(r_tl_tmp, r_tl);
488
tcg_gen_add_ptr(r_tsptr, r_tsptr, r_tl_tmp);
489
- tcg_temp_free_ptr(r_tl_tmp);
490
}
491
-
492
- tcg_temp_free_i32(r_tl);
493
}
494
#endif
495
496
@@ -XXX,XX +XXX,XX @@ static void gen_edge(DisasContext *dc, TCGv dst, TCGv s1, TCGv s2,
497
tcg_gen_neg_tl(t1, t1);
498
tcg_gen_or_tl(lo2, lo2, t1);
499
tcg_gen_and_tl(dst, dst, lo2);
500
-
501
- tcg_temp_free(lo1);
502
- tcg_temp_free(lo2);
503
- tcg_temp_free(t1);
504
- tcg_temp_free(t2);
505
}
506
507
static void gen_alignaddr(TCGv dst, TCGv s1, TCGv s2, bool left)
508
@@ -XXX,XX +XXX,XX @@ static void gen_alignaddr(TCGv dst, TCGv s1, TCGv s2, bool left)
509
tcg_gen_neg_tl(tmp, tmp);
510
}
511
tcg_gen_deposit_tl(cpu_gsr, cpu_gsr, tmp, 0, 3);
512
-
513
- tcg_temp_free(tmp);
514
}
515
516
static void gen_faligndata(TCGv dst, TCGv gsr, TCGv s1, TCGv s2)
517
@@ -XXX,XX +XXX,XX @@ static void gen_faligndata(TCGv dst, TCGv gsr, TCGv s1, TCGv s2)
518
tcg_gen_shri_tl(t2, t2, 1);
519
520
tcg_gen_or_tl(dst, t1, t2);
521
-
522
- tcg_temp_free(t1);
523
- tcg_temp_free(t2);
524
- tcg_temp_free(shift);
525
}
526
#endif
527
528
@@ -XXX,XX +XXX,XX @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
529
}
530
531
gen_helper_raise_exception(cpu_env, trap);
532
- tcg_temp_free_i32(trap);
533
534
if (cond == 8) {
535
/* An unconditional trap ends the TB. */
536
@@ -XXX,XX +XXX,XX @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
537
}
538
gen_helper_tick_get_count(cpu_dst, cpu_env, r_tickptr,
539
r_const);
540
- tcg_temp_free_ptr(r_tickptr);
541
- tcg_temp_free_i32(r_const);
542
gen_store_gpr(dc, rd, cpu_dst);
543
if (tb_cflags(dc->base.tb) & CF_USE_ICOUNT) {
544
/* I/O operations in icount mode must end the TB */
545
@@ -XXX,XX +XXX,XX @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
546
}
547
gen_helper_tick_get_count(cpu_dst, cpu_env, r_tickptr,
548
r_const);
549
- tcg_temp_free_ptr(r_tickptr);
550
- tcg_temp_free_i32(r_const);
551
gen_store_gpr(dc, rd, cpu_dst);
552
if (tb_cflags(dc->base.tb) & CF_USE_ICOUNT) {
553
/* I/O operations in icount mode must end the TB */
554
@@ -XXX,XX +XXX,XX @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
555
gen_load_trap_state_at_tl(r_tsptr, cpu_env);
556
tcg_gen_ld_tl(cpu_tmp0, r_tsptr,
557
offsetof(trap_state, tpc));
558
- tcg_temp_free_ptr(r_tsptr);
559
}
560
break;
561
case 1: // tnpc
562
@@ -XXX,XX +XXX,XX @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
563
gen_load_trap_state_at_tl(r_tsptr, cpu_env);
564
tcg_gen_ld_tl(cpu_tmp0, r_tsptr,
565
offsetof(trap_state, tnpc));
566
- tcg_temp_free_ptr(r_tsptr);
567
}
568
break;
569
case 2: // tstate
570
@@ -XXX,XX +XXX,XX @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
571
gen_load_trap_state_at_tl(r_tsptr, cpu_env);
572
tcg_gen_ld_tl(cpu_tmp0, r_tsptr,
573
offsetof(trap_state, tstate));
574
- tcg_temp_free_ptr(r_tsptr);
575
}
576
break;
577
case 3: // tt
578
@@ -XXX,XX +XXX,XX @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
579
gen_load_trap_state_at_tl(r_tsptr, cpu_env);
580
tcg_gen_ld32s_tl(cpu_tmp0, r_tsptr,
581
offsetof(trap_state, tt));
582
- tcg_temp_free_ptr(r_tsptr);
583
}
584
break;
585
case 4: // tick
586
@@ -XXX,XX +XXX,XX @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
587
}
588
gen_helper_tick_get_count(cpu_tmp0, cpu_env,
589
r_tickptr, r_const);
590
- tcg_temp_free_ptr(r_tickptr);
591
- tcg_temp_free_i32(r_const);
592
if (tb_cflags(dc->base.tb) & CF_USE_ICOUNT) {
593
/* I/O operations in icount mode must end the TB */
594
dc->base.is_jmp = DISAS_EXIT;
595
@@ -XXX,XX +XXX,XX @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
596
}
597
gen_helper_tick_set_limit(r_tickptr,
598
cpu_tick_cmpr);
599
- tcg_temp_free_ptr(r_tickptr);
600
/* End TB to handle timer interrupt */
601
dc->base.is_jmp = DISAS_EXIT;
602
}
603
@@ -XXX,XX +XXX,XX @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
604
}
605
gen_helper_tick_set_count(r_tickptr,
606
cpu_tmp0);
607
- tcg_temp_free_ptr(r_tickptr);
608
/* End TB to handle timer interrupt */
609
dc->base.is_jmp = DISAS_EXIT;
610
}
611
@@ -XXX,XX +XXX,XX @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
612
}
613
gen_helper_tick_set_limit(r_tickptr,
614
cpu_stick_cmpr);
615
- tcg_temp_free_ptr(r_tickptr);
616
/* End TB to handle timer interrupt */
617
dc->base.is_jmp = DISAS_EXIT;
618
}
619
@@ -XXX,XX +XXX,XX @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
620
gen_load_trap_state_at_tl(r_tsptr, cpu_env);
621
tcg_gen_st_tl(cpu_tmp0, r_tsptr,
622
offsetof(trap_state, tpc));
623
- tcg_temp_free_ptr(r_tsptr);
624
}
625
break;
626
case 1: // tnpc
627
@@ -XXX,XX +XXX,XX @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
628
gen_load_trap_state_at_tl(r_tsptr, cpu_env);
629
tcg_gen_st_tl(cpu_tmp0, r_tsptr,
630
offsetof(trap_state, tnpc));
631
- tcg_temp_free_ptr(r_tsptr);
632
}
633
break;
634
case 2: // tstate
635
@@ -XXX,XX +XXX,XX @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
636
tcg_gen_st_tl(cpu_tmp0, r_tsptr,
637
offsetof(trap_state,
638
tstate));
639
- tcg_temp_free_ptr(r_tsptr);
640
}
641
break;
642
case 3: // tt
643
@@ -XXX,XX +XXX,XX @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
644
gen_load_trap_state_at_tl(r_tsptr, cpu_env);
645
tcg_gen_st32_tl(cpu_tmp0, r_tsptr,
646
offsetof(trap_state, tt));
647
- tcg_temp_free_ptr(r_tsptr);
648
}
649
break;
650
case 4: // tick
651
@@ -XXX,XX +XXX,XX @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
652
}
653
gen_helper_tick_set_count(r_tickptr,
654
cpu_tmp0);
655
- tcg_temp_free_ptr(r_tickptr);
656
/* End TB to handle timer interrupt */
657
dc->base.is_jmp = DISAS_EXIT;
658
}
659
@@ -XXX,XX +XXX,XX @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
660
}
661
gen_helper_tick_set_limit(r_tickptr,
662
cpu_hstick_cmpr);
663
- tcg_temp_free_ptr(r_tickptr);
664
/* End TB to handle timer interrupt */
665
dc->base.is_jmp = DISAS_EXIT;
666
}
667
@@ -XXX,XX +XXX,XX @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
668
gen_store_gpr(dc, rd + 1, cpu_val);
669
tcg_gen_shri_i64(t64, t64, 32);
670
tcg_gen_trunc_i64_tl(cpu_val, t64);
671
- tcg_temp_free_i64(t64);
672
tcg_gen_ext32u_tl(cpu_val, cpu_val);
673
}
674
break;
675
@@ -XXX,XX +XXX,XX @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
676
tcg_gen_qemu_ld_i64(t64, cpu_addr,
677
dc->mem_idx, MO_TEUQ);
678
gen_helper_ldxfsr(cpu_fsr, cpu_env, cpu_fsr, t64);
679
- tcg_temp_free_i64(t64);
680
break;
681
}
682
#endif
683
@@ -XXX,XX +XXX,XX @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
684
tcg_gen_qemu_ld_i64(cpu_src2_64, cpu_addr, dc->mem_idx,
685
MO_TEUQ | MO_ALIGN_4);
686
gen_store_fpr_Q(dc, rd, cpu_src1_64, cpu_src2_64);
687
- tcg_temp_free_i64(cpu_src1_64);
688
- tcg_temp_free_i64(cpu_src2_64);
689
break;
690
case 0x23: /* lddf, load double fpreg */
691
gen_address_mask(dc, cpu_addr);
692
@@ -XXX,XX +XXX,XX @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
693
t64 = tcg_temp_new_i64();
694
tcg_gen_concat_tl_i64(t64, lo, cpu_val);
695
tcg_gen_qemu_st64(t64, cpu_addr, dc->mem_idx);
696
- tcg_temp_free_i64(t64);
697
}
698
break;
699
#if !defined(CONFIG_USER_ONLY) || defined(TARGET_SPARC64)
700
--
701
2.34.1
diff view generated by jsdifflib
Deleted patch
1
Translators are no longer required to free tcg temporaries.
2
Remove sar_m32_allocated, as sar_m32 non-null is equivalent.
3
1
4
Reviewed-by: Max Filippov <jcmvbkbc@gmail.com>
5
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
6
---
7
target/xtensa/translate.c | 14 ++------------
8
1 file changed, 2 insertions(+), 12 deletions(-)
9
10
diff --git a/target/xtensa/translate.c b/target/xtensa/translate.c
11
index XXXXXXX..XXXXXXX 100644
12
--- a/target/xtensa/translate.c
13
+++ b/target/xtensa/translate.c
14
@@ -XXX,XX +XXX,XX @@ struct DisasContext {
15
16
bool sar_5bit;
17
bool sar_m32_5bit;
18
- bool sar_m32_allocated;
19
TCGv_i32 sar_m32;
20
21
unsigned window;
22
@@ -XXX,XX +XXX,XX @@ static void init_sar_tracker(DisasContext *dc)
23
{
24
dc->sar_5bit = false;
25
dc->sar_m32_5bit = false;
26
- dc->sar_m32_allocated = false;
27
-}
28
-
29
-static void reset_sar_tracker(DisasContext *dc)
30
-{
31
- if (dc->sar_m32_allocated) {
32
- tcg_temp_free(dc->sar_m32);
33
- }
34
+ dc->sar_m32 = NULL;
35
}
36
37
static void gen_right_shift_sar(DisasContext *dc, TCGv_i32 sa)
38
@@ -XXX,XX +XXX,XX @@ static void gen_right_shift_sar(DisasContext *dc, TCGv_i32 sa)
39
40
static void gen_left_shift_sar(DisasContext *dc, TCGv_i32 sa)
41
{
42
- if (!dc->sar_m32_allocated) {
43
+ if (!dc->sar_m32) {
44
dc->sar_m32 = tcg_temp_new_i32();
45
- dc->sar_m32_allocated = true;
46
}
47
tcg_gen_andi_i32(dc->sar_m32, sa, 0x1f);
48
tcg_gen_sub_i32(cpu_SR[SAR], tcg_constant_i32(32), dc->sar_m32);
49
@@ -XXX,XX +XXX,XX @@ static void xtensa_tr_tb_stop(DisasContextBase *dcbase, CPUState *cpu)
50
{
51
DisasContext *dc = container_of(dcbase, DisasContext, base);
52
53
- reset_sar_tracker(dc);
54
if (dc->icount) {
55
tcg_temp_free(dc->next_icount);
56
}
57
--
58
2.34.1
diff view generated by jsdifflib
Deleted patch
1
Translators are no longer required to free tcg temporaries.
2
1
3
Reviewed-by: Max Filippov <jcmvbkbc@gmail.com>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
5
---
6
target/xtensa/translate.c | 107 --------------------------------------
7
1 file changed, 107 deletions(-)
8
9
diff --git a/target/xtensa/translate.c b/target/xtensa/translate.c
10
index XXXXXXX..XXXXXXX 100644
11
--- a/target/xtensa/translate.c
12
+++ b/target/xtensa/translate.c
13
@@ -XXX,XX +XXX,XX @@ static void disas_xtensa_insn(CPUXtensaState *env, DisasContext *dc)
14
ops->translate(dc, pslot->arg, ops->par);
15
}
16
17
- for (i = 0; i < n_arg_copy; ++i) {
18
- if (arg_copy[i].arg->num_bits <= 32) {
19
- tcg_temp_free_i32(arg_copy[i].temp);
20
- } else if (arg_copy[i].arg->num_bits <= 64) {
21
- tcg_temp_free_i64(arg_copy[i].temp);
22
- } else {
23
- g_assert_not_reached();
24
- }
25
- }
26
-
27
if (dc->base.is_jmp == DISAS_NEXT) {
28
gen_postprocess(dc, 0);
29
dc->op_flags = 0;
30
@@ -XXX,XX +XXX,XX @@ static void xtensa_tr_tb_stop(DisasContextBase *dcbase, CPUState *cpu)
31
{
32
DisasContext *dc = container_of(dcbase, DisasContext, base);
33
34
- if (dc->icount) {
35
- tcg_temp_free(dc->next_icount);
36
- }
37
-
38
switch (dc->base.is_jmp) {
39
case DISAS_NORETURN:
40
break;
41
@@ -XXX,XX +XXX,XX @@ static void translate_addx(DisasContext *dc, const OpcodeArg arg[],
42
TCGv_i32 tmp = tcg_temp_new_i32();
43
tcg_gen_shli_i32(tmp, arg[1].in, par[0]);
44
tcg_gen_add_i32(arg[0].out, tmp, arg[2].in);
45
- tcg_temp_free(tmp);
46
}
47
48
static void translate_all(DisasContext *dc, const OpcodeArg arg[],
49
@@ -XXX,XX +XXX,XX @@ static void translate_all(DisasContext *dc, const OpcodeArg arg[],
50
tcg_gen_shri_i32(tmp, tmp, arg[1].imm + shift);
51
tcg_gen_deposit_i32(arg[0].out, arg[0].out,
52
tmp, arg[0].imm, 1);
53
- tcg_temp_free(mask);
54
- tcg_temp_free(tmp);
55
}
56
57
static void translate_and(DisasContext *dc, const OpcodeArg arg[],
58
@@ -XXX,XX +XXX,XX @@ static void translate_ball(DisasContext *dc, const OpcodeArg arg[],
59
TCGv_i32 tmp = tcg_temp_new_i32();
60
tcg_gen_and_i32(tmp, arg[0].in, arg[1].in);
61
gen_brcond(dc, par[0], tmp, arg[1].in, arg[2].imm);
62
- tcg_temp_free(tmp);
63
}
64
65
static void translate_bany(DisasContext *dc, const OpcodeArg arg[],
66
@@ -XXX,XX +XXX,XX @@ static void translate_bany(DisasContext *dc, const OpcodeArg arg[],
67
TCGv_i32 tmp = tcg_temp_new_i32();
68
tcg_gen_and_i32(tmp, arg[0].in, arg[1].in);
69
gen_brcondi(dc, par[0], tmp, 0, arg[2].imm);
70
- tcg_temp_free(tmp);
71
}
72
73
static void translate_b(DisasContext *dc, const OpcodeArg arg[],
74
@@ -XXX,XX +XXX,XX @@ static void translate_bb(DisasContext *dc, const OpcodeArg arg[],
75
#endif
76
tcg_gen_and_i32(tmp, arg[0].in, bit);
77
gen_brcondi(dc, par[0], tmp, 0, arg[2].imm);
78
- tcg_temp_free(tmp);
79
- tcg_temp_free(bit);
80
}
81
82
static void translate_bbi(DisasContext *dc, const OpcodeArg arg[],
83
@@ -XXX,XX +XXX,XX @@ static void translate_bbi(DisasContext *dc, const OpcodeArg arg[],
84
tcg_gen_andi_i32(tmp, arg[0].in, 0x00000001u << arg[1].imm);
85
#endif
86
gen_brcondi(dc, par[0], tmp, 0, arg[2].imm);
87
- tcg_temp_free(tmp);
88
}
89
90
static void translate_bi(DisasContext *dc, const OpcodeArg arg[],
91
@@ -XXX,XX +XXX,XX @@ static void translate_boolean(DisasContext *dc, const OpcodeArg arg[],
92
tcg_gen_shri_i32(tmp2, arg[2].in, arg[2].imm);
93
op[par[0]](tmp1, tmp1, tmp2);
94
tcg_gen_deposit_i32(arg[0].out, arg[0].out, tmp1, arg[0].imm, 1);
95
- tcg_temp_free(tmp1);
96
- tcg_temp_free(tmp2);
97
}
98
99
static void translate_bp(DisasContext *dc, const OpcodeArg arg[],
100
@@ -XXX,XX +XXX,XX @@ static void translate_bp(DisasContext *dc, const OpcodeArg arg[],
101
102
tcg_gen_andi_i32(tmp, arg[0].in, 1 << arg[0].imm);
103
gen_brcondi(dc, par[0], tmp, 0, arg[1].imm);
104
- tcg_temp_free(tmp);
105
}
106
107
static void translate_call0(DisasContext *dc, const OpcodeArg arg[],
108
@@ -XXX,XX +XXX,XX @@ static void translate_callw(DisasContext *dc, const OpcodeArg arg[],
109
{
110
TCGv_i32 tmp = tcg_const_i32(arg[0].imm);
111
gen_callw_slot(dc, par[0], tmp, adjust_jump_slot(dc, arg[0].imm, 0));
112
- tcg_temp_free(tmp);
113
}
114
115
static void translate_callx0(DisasContext *dc, const OpcodeArg arg[],
116
@@ -XXX,XX +XXX,XX @@ static void translate_callx0(DisasContext *dc, const OpcodeArg arg[],
117
tcg_gen_mov_i32(tmp, arg[0].in);
118
tcg_gen_movi_i32(cpu_R[0], dc->base.pc_next);
119
gen_jump(dc, tmp);
120
- tcg_temp_free(tmp);
121
}
122
123
static void translate_callxw(DisasContext *dc, const OpcodeArg arg[],
124
@@ -XXX,XX +XXX,XX @@ static void translate_callxw(DisasContext *dc, const OpcodeArg arg[],
125
126
tcg_gen_mov_i32(tmp, arg[0].in);
127
gen_callw_slot(dc, par[0], tmp, -1);
128
- tcg_temp_free(tmp);
129
}
130
131
static void translate_clamps(DisasContext *dc, const OpcodeArg arg[],
132
@@ -XXX,XX +XXX,XX @@ static void translate_clamps(DisasContext *dc, const OpcodeArg arg[],
133
134
tcg_gen_smax_i32(tmp1, tmp1, arg[1].in);
135
tcg_gen_smin_i32(arg[0].out, tmp1, tmp2);
136
- tcg_temp_free(tmp1);
137
- tcg_temp_free(tmp2);
138
}
139
140
static void translate_clrb_expstate(DisasContext *dc, const OpcodeArg arg[],
141
@@ -XXX,XX +XXX,XX @@ static void translate_const16(DisasContext *dc, const OpcodeArg arg[],
142
TCGv_i32 c = tcg_const_i32(arg[1].imm);
143
144
tcg_gen_deposit_i32(arg[0].out, c, arg[0].in, 16, 16);
145
- tcg_temp_free(c);
146
}
147
148
static void translate_dcache(DisasContext *dc, const OpcodeArg arg[],
149
@@ -XXX,XX +XXX,XX @@ static void translate_dcache(DisasContext *dc, const OpcodeArg arg[],
150
151
tcg_gen_addi_i32(addr, arg[0].in, arg[1].imm);
152
tcg_gen_qemu_ld8u(res, addr, dc->cring);
153
- tcg_temp_free(addr);
154
- tcg_temp_free(res);
155
}
156
157
static void translate_depbits(DisasContext *dc, const OpcodeArg arg[],
158
@@ -XXX,XX +XXX,XX @@ static void translate_extui(DisasContext *dc, const OpcodeArg arg[],
159
TCGv_i32 tmp = tcg_temp_new_i32();
160
tcg_gen_shri_i32(tmp, arg[1].in, arg[2].imm);
161
tcg_gen_andi_i32(arg[0].out, tmp, maskimm);
162
- tcg_temp_free(tmp);
163
}
164
165
static void translate_getex(DisasContext *dc, const OpcodeArg arg[],
166
@@ -XXX,XX +XXX,XX @@ static void translate_getex(DisasContext *dc, const OpcodeArg arg[],
167
tcg_gen_extract_i32(tmp, cpu_SR[ATOMCTL], 8, 1);
168
tcg_gen_deposit_i32(cpu_SR[ATOMCTL], cpu_SR[ATOMCTL], arg[0].in, 8, 1);
169
tcg_gen_mov_i32(arg[0].out, tmp);
170
- tcg_temp_free(tmp);
171
}
172
173
static void translate_icache(DisasContext *dc, const OpcodeArg arg[],
174
@@ -XXX,XX +XXX,XX @@ static void translate_icache(DisasContext *dc, const OpcodeArg arg[],
175
tcg_gen_movi_i32(cpu_pc, dc->pc);
176
tcg_gen_addi_i32(addr, arg[0].in, arg[1].imm);
177
gen_helper_itlb_hit_test(cpu_env, addr);
178
- tcg_temp_free(addr);
179
#endif
180
}
181
182
@@ -XXX,XX +XXX,XX @@ static void translate_l32e(DisasContext *dc, const OpcodeArg arg[],
183
tcg_gen_addi_i32(addr, arg[1].in, arg[2].imm);
184
mop = gen_load_store_alignment(dc, MO_TEUL, addr);
185
tcg_gen_qemu_ld_tl(arg[0].out, addr, dc->ring, mop);
186
- tcg_temp_free(addr);
187
}
188
189
#ifdef CONFIG_USER_ONLY
190
@@ -XXX,XX +XXX,XX @@ static void translate_l32ex(DisasContext *dc, const OpcodeArg arg[],
191
tcg_gen_qemu_ld_i32(arg[0].out, addr, dc->cring, mop);
192
tcg_gen_mov_i32(cpu_exclusive_addr, addr);
193
tcg_gen_mov_i32(cpu_exclusive_val, arg[0].out);
194
- tcg_temp_free(addr);
195
}
196
197
static void translate_ldst(DisasContext *dc, const OpcodeArg arg[],
198
@@ -XXX,XX +XXX,XX @@ static void translate_ldst(DisasContext *dc, const OpcodeArg arg[],
199
tcg_gen_mb(TCG_BAR_LDAQ | TCG_MO_ALL);
200
}
201
}
202
- tcg_temp_free(addr);
203
}
204
205
static void translate_lct(DisasContext *dc, const OpcodeArg arg[],
206
@@ -XXX,XX +XXX,XX @@ static void translate_l32r(DisasContext *dc, const OpcodeArg arg[],
207
tmp = tcg_const_i32(arg[1].imm);
208
}
209
tcg_gen_qemu_ld32u(arg[0].out, tmp, dc->cring);
210
- tcg_temp_free(tmp);
211
}
212
213
static void translate_loop(DisasContext *dc, const OpcodeArg arg[],
214
@@ -XXX,XX +XXX,XX @@ static void translate_mac16(DisasContext *dc, const OpcodeArg arg[],
215
lo, hi);
216
}
217
tcg_gen_ext8s_i32(cpu_SR[ACCHI], cpu_SR[ACCHI]);
218
-
219
- tcg_temp_free_i32(lo);
220
- tcg_temp_free_i32(hi);
221
}
222
- tcg_temp_free(m1);
223
- tcg_temp_free(m2);
224
}
225
if (ld_offset) {
226
tcg_gen_mov_i32(arg[1].out, vaddr);
227
tcg_gen_mov_i32(cpu_SR[MR + arg[0].imm], mem32);
228
}
229
- tcg_temp_free(vaddr);
230
- tcg_temp_free(mem32);
231
}
232
233
static void translate_memw(DisasContext *dc, const OpcodeArg arg[],
234
@@ -XXX,XX +XXX,XX @@ static void translate_movp(DisasContext *dc, const OpcodeArg arg[],
235
tcg_gen_movcond_i32(par[0],
236
arg[0].out, tmp, zero,
237
arg[1].in, arg[0].in);
238
- tcg_temp_free(tmp);
239
}
240
241
static void translate_movsp(DisasContext *dc, const OpcodeArg arg[],
242
@@ -XXX,XX +XXX,XX @@ static void translate_mul16(DisasContext *dc, const OpcodeArg arg[],
243
tcg_gen_ext16u_i32(v2, arg[2].in);
244
}
245
tcg_gen_mul_i32(arg[0].out, v1, v2);
246
- tcg_temp_free(v2);
247
- tcg_temp_free(v1);
248
}
249
250
static void translate_mull(DisasContext *dc, const OpcodeArg arg[],
251
@@ -XXX,XX +XXX,XX @@ static void translate_mulh(DisasContext *dc, const OpcodeArg arg[],
252
} else {
253
tcg_gen_mulu2_i32(lo, arg[0].out, arg[1].in, arg[2].in);
254
}
255
- tcg_temp_free(lo);
256
}
257
258
static void translate_neg(DisasContext *dc, const OpcodeArg arg[],
259
@@ -XXX,XX +XXX,XX @@ static void translate_retw(DisasContext *dc, const OpcodeArg arg[],
260
tcg_gen_deposit_i32(tmp, tmp, cpu_R[0], 0, 30);
261
gen_helper_retw(cpu_env, cpu_R[0]);
262
gen_jump(dc, tmp);
263
- tcg_temp_free(tmp);
264
}
265
266
static void translate_rfde(DisasContext *dc, const OpcodeArg arg[],
267
@@ -XXX,XX +XXX,XX @@ static void translate_rfw(DisasContext *dc, const OpcodeArg arg[],
268
cpu_SR[WINDOW_START], tmp);
269
}
270
271
- tcg_temp_free(tmp);
272
gen_helper_restore_owb(cpu_env);
273
gen_jump(dc, cpu_SR[EPC1]);
274
}
275
@@ -XXX,XX +XXX,XX @@ static void translate_rsr_ptevaddr(DisasContext *dc, const OpcodeArg arg[],
276
tcg_gen_shri_i32(tmp, cpu_SR[EXCVADDR], 10);
277
tcg_gen_or_i32(tmp, tmp, cpu_SR[PTEVADDR]);
278
tcg_gen_andi_i32(arg[0].out, tmp, 0xfffffffc);
279
- tcg_temp_free(tmp);
280
#endif
281
}
282
283
@@ -XXX,XX +XXX,XX @@ static void translate_s32c1i(DisasContext *dc, const OpcodeArg arg[],
284
gen_check_atomctl(dc, addr);
285
tcg_gen_atomic_cmpxchg_i32(arg[0].out, addr, cpu_SR[SCOMPARE1],
286
tmp, dc->cring, mop);
287
- tcg_temp_free(addr);
288
- tcg_temp_free(tmp);
289
}
290
291
static void translate_s32e(DisasContext *dc, const OpcodeArg arg[],
292
@@ -XXX,XX +XXX,XX @@ static void translate_s32e(DisasContext *dc, const OpcodeArg arg[],
293
tcg_gen_addi_i32(addr, arg[1].in, arg[2].imm);
294
mop = gen_load_store_alignment(dc, MO_TEUL, addr);
295
tcg_gen_qemu_st_tl(arg[0].in, addr, dc->ring, mop);
296
- tcg_temp_free(addr);
297
}
298
299
static void translate_s32ex(DisasContext *dc, const OpcodeArg arg[],
300
@@ -XXX,XX +XXX,XX @@ static void translate_s32ex(DisasContext *dc, const OpcodeArg arg[],
301
gen_set_label(label);
302
tcg_gen_extract_i32(arg[0].out, cpu_SR[ATOMCTL], 8, 1);
303
tcg_gen_deposit_i32(cpu_SR[ATOMCTL], cpu_SR[ATOMCTL], res, 8, 1);
304
- tcg_temp_free(prev);
305
- tcg_temp_free(addr);
306
- tcg_temp_free(res);
307
}
308
309
static void translate_salt(DisasContext *dc, const OpcodeArg arg[],
310
@@ -XXX,XX +XXX,XX @@ static void translate_sext(DisasContext *dc, const OpcodeArg arg[],
311
TCGv_i32 tmp = tcg_temp_new_i32();
312
tcg_gen_shli_i32(tmp, arg[1].in, shift);
313
tcg_gen_sari_i32(arg[0].out, tmp, shift);
314
- tcg_temp_free(tmp);
315
}
316
}
317
318
@@ -XXX,XX +XXX,XX @@ static void translate_simcall(DisasContext *dc, const OpcodeArg arg[],
319
tcg_gen_extu_i32_i64(tmp, reg); \
320
tcg_gen_##cmd##_i64(v, v, tmp); \
321
tcg_gen_extrl_i64_i32(arg[0].out, v); \
322
- tcg_temp_free_i64(v); \
323
- tcg_temp_free_i64(tmp); \
324
} while (0)
325
326
#define gen_shift(cmd) gen_shift_reg(cmd, cpu_SR[SAR])
327
@@ -XXX,XX +XXX,XX @@ static void translate_sll(DisasContext *dc, const OpcodeArg arg[],
328
tcg_gen_andi_i32(s, s, 0x3f);
329
tcg_gen_extu_i32_i64(v, arg[1].in);
330
gen_shift_reg(shl, s);
331
- tcg_temp_free(s);
332
}
333
}
334
335
@@ -XXX,XX +XXX,XX @@ static void translate_ssa8b(DisasContext *dc, const OpcodeArg arg[],
336
TCGv_i32 tmp = tcg_temp_new_i32();
337
tcg_gen_shli_i32(tmp, arg[0].in, 3);
338
gen_left_shift_sar(dc, tmp);
339
- tcg_temp_free(tmp);
340
}
341
342
static void translate_ssa8l(DisasContext *dc, const OpcodeArg arg[],
343
@@ -XXX,XX +XXX,XX @@ static void translate_ssa8l(DisasContext *dc, const OpcodeArg arg[],
344
TCGv_i32 tmp = tcg_temp_new_i32();
345
tcg_gen_shli_i32(tmp, arg[0].in, 3);
346
gen_right_shift_sar(dc, tmp);
347
- tcg_temp_free(tmp);
348
}
349
350
static void translate_ssai(DisasContext *dc, const OpcodeArg arg[],
351
@@ -XXX,XX +XXX,XX @@ static void translate_subx(DisasContext *dc, const OpcodeArg arg[],
352
TCGv_i32 tmp = tcg_temp_new_i32();
353
tcg_gen_shli_i32(tmp, arg[1].in, par[0]);
354
tcg_gen_sub_i32(arg[0].out, tmp, arg[2].in);
355
- tcg_temp_free(tmp);
356
}
357
358
static void translate_waiti(DisasContext *dc, const OpcodeArg arg[],
359
@@ -XXX,XX +XXX,XX @@ static void translate_xsr(DisasContext *dc, const OpcodeArg arg[],
360
tcg_gen_mov_i32(tmp, arg[0].in);
361
tcg_gen_mov_i32(arg[0].out, cpu_SR[par[0]]);
362
tcg_gen_mov_i32(cpu_SR[par[0]], tmp);
363
- tcg_temp_free(tmp);
364
} else {
365
tcg_gen_movi_i32(arg[0].out, 0);
366
}
367
@@ -XXX,XX +XXX,XX @@ static void translate_xsr_mask(DisasContext *dc, const OpcodeArg arg[],
368
tcg_gen_mov_i32(tmp, arg[0].in);
369
tcg_gen_mov_i32(arg[0].out, cpu_SR[par[0]]);
370
tcg_gen_andi_i32(cpu_SR[par[0]], tmp, par[2]);
371
- tcg_temp_free(tmp);
372
} else {
373
tcg_gen_movi_i32(arg[0].out, 0);
374
}
375
@@ -XXX,XX +XXX,XX @@ static void translate_xsr_ccount(DisasContext *dc, const OpcodeArg arg[],
376
tcg_gen_mov_i32(tmp, cpu_SR[par[0]]);
377
gen_helper_wsr_ccount(cpu_env, arg[0].in);
378
tcg_gen_mov_i32(arg[0].out, tmp);
379
- tcg_temp_free(tmp);
380
381
#endif
382
}
383
@@ -XXX,XX +XXX,XX @@ static void translate_xsr_ccount(DisasContext *dc, const OpcodeArg arg[],
384
} \
385
translate_wsr_##name(dc, arg, par); \
386
tcg_gen_mov_i32(arg[0].out, tmp); \
387
- tcg_temp_free(tmp); \
388
}
389
390
gen_translate_xsr(acchi)
391
@@ -XXX,XX +XXX,XX @@ static inline void put_f32_o1_i3(const OpcodeArg *arg, const OpcodeArg *arg32,
392
(o0 >= 0 && arg[o0].num_bits == 64)) {
393
if (o0 >= 0) {
394
tcg_gen_extu_i32_i64(arg[o0].out, arg32[o0].out);
395
- tcg_temp_free_i32(arg32[o0].out);
396
- }
397
- if (i0 >= 0) {
398
- tcg_temp_free_i32(arg32[i0].in);
399
- }
400
- if (i1 >= 0) {
401
- tcg_temp_free_i32(arg32[i1].in);
402
- }
403
- if (i2 >= 0) {
404
- tcg_temp_free_i32(arg32[i2].in);
405
}
406
}
407
}
408
@@ -XXX,XX +XXX,XX @@ static void translate_compare_d(DisasContext *dc, const OpcodeArg arg[],
409
tcg_gen_movcond_i32(TCG_COND_NE,
410
arg[0].out, res, zero,
411
set_br, clr_br);
412
- tcg_temp_free(res);
413
- tcg_temp_free(set_br);
414
- tcg_temp_free(clr_br);
415
}
416
417
static void translate_compare_s(DisasContext *dc, const OpcodeArg arg[],
418
@@ -XXX,XX +XXX,XX @@ static void translate_compare_s(DisasContext *dc, const OpcodeArg arg[],
419
arg[0].out, res, zero,
420
set_br, clr_br);
421
put_f32_i2(arg, arg32, 1, 2);
422
- tcg_temp_free(res);
423
- tcg_temp_free(set_br);
424
- tcg_temp_free(clr_br);
425
}
426
427
static void translate_const_d(DisasContext *dc, const OpcodeArg arg[],
428
@@ -XXX,XX +XXX,XX @@ static void translate_ldsti(DisasContext *dc, const OpcodeArg arg[],
429
if (par[1]) {
430
tcg_gen_mov_i32(arg[1].out, addr);
431
}
432
- tcg_temp_free(addr);
433
}
434
435
static void translate_ldstx(DisasContext *dc, const OpcodeArg arg[],
436
@@ -XXX,XX +XXX,XX @@ static void translate_ldstx(DisasContext *dc, const OpcodeArg arg[],
437
if (par[1]) {
438
tcg_gen_mov_i32(arg[1].out, addr);
439
}
440
- tcg_temp_free(addr);
441
}
442
443
static void translate_fpu2k_madd_s(DisasContext *dc, const OpcodeArg arg[],
444
@@ -XXX,XX +XXX,XX @@ static void translate_movcond_d(DisasContext *dc, const OpcodeArg arg[],
445
tcg_gen_movcond_i64(par[0], arg[0].out,
446
arg2, zero,
447
arg[1].in, arg[0].in);
448
- tcg_temp_free_i64(arg2);
449
}
450
451
static void translate_movcond_s(DisasContext *dc, const OpcodeArg arg[],
452
@@ -XXX,XX +XXX,XX @@ static void translate_movp_d(DisasContext *dc, const OpcodeArg arg[],
453
tcg_gen_movcond_i64(par[0],
454
arg[0].out, tmp2, zero,
455
arg[1].in, arg[0].in);
456
- tcg_temp_free_i32(tmp1);
457
- tcg_temp_free_i64(tmp2);
458
}
459
460
static void translate_movp_s(DisasContext *dc, const OpcodeArg arg[],
461
@@ -XXX,XX +XXX,XX @@ static void translate_movp_s(DisasContext *dc, const OpcodeArg arg[],
462
tcg_gen_movcond_i32(par[0],
463
arg[0].out, tmp, zero,
464
arg[1].in, arg[0].in);
465
- tcg_temp_free(tmp);
466
} else {
467
translate_movp_d(dc, arg, par);
468
}
469
@@ -XXX,XX +XXX,XX @@ static void translate_cvtd_s(DisasContext *dc, const OpcodeArg arg[],
470
471
tcg_gen_extrl_i64_i32(v, arg[1].in);
472
gen_helper_cvtd_s(arg[0].out, cpu_env, v);
473
- tcg_temp_free_i32(v);
474
}
475
476
static void translate_cvts_d(DisasContext *dc, const OpcodeArg arg[],
477
@@ -XXX,XX +XXX,XX @@ static void translate_cvts_d(DisasContext *dc, const OpcodeArg arg[],
478
479
gen_helper_cvts_d(v, cpu_env, arg[1].in);
480
tcg_gen_extu_i32_i64(arg[0].out, v);
481
- tcg_temp_free_i32(v);
482
}
483
484
static void translate_ldsti_d(DisasContext *dc, const OpcodeArg arg[],
485
@@ -XXX,XX +XXX,XX @@ static void translate_ldsti_d(DisasContext *dc, const OpcodeArg arg[],
486
tcg_gen_addi_i32(arg[1].out, arg[1].in, arg[2].imm);
487
}
488
}
489
- if (par[1]) {
490
- tcg_temp_free(addr);
491
- }
492
}
493
494
static void translate_ldsti_s(DisasContext *dc, const OpcodeArg arg[],
495
@@ -XXX,XX +XXX,XX @@ static void translate_ldsti_s(DisasContext *dc, const OpcodeArg arg[],
496
tcg_gen_addi_i32(arg[1].out, arg[1].in, arg[2].imm);
497
}
498
}
499
- if (par[1]) {
500
- tcg_temp_free(addr);
501
- }
502
}
503
504
static void translate_ldstx_d(DisasContext *dc, const OpcodeArg arg[],
505
@@ -XXX,XX +XXX,XX @@ static void translate_ldstx_d(DisasContext *dc, const OpcodeArg arg[],
506
tcg_gen_add_i32(arg[1].out, arg[1].in, arg[2].in);
507
}
508
}
509
- if (par[1]) {
510
- tcg_temp_free(addr);
511
- }
512
}
513
514
static void translate_ldstx_s(DisasContext *dc, const OpcodeArg arg[],
515
@@ -XXX,XX +XXX,XX @@ static void translate_ldstx_s(DisasContext *dc, const OpcodeArg arg[],
516
tcg_gen_add_i32(arg[1].out, arg[1].in, arg[2].in);
517
}
518
}
519
- if (par[1]) {
520
- tcg_temp_free(addr);
521
- }
522
}
523
524
static void translate_madd_d(DisasContext *dc, const OpcodeArg arg[],
525
--
526
2.34.1
diff view generated by jsdifflib
1
All uses are strictly read-only.
1
Replace target-specific 'Z' with generic 'z'.
2
2
3
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
3
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
5
---
5
---
6
target/microblaze/translate.c | 35 +++++++++++++++--------------------
6
tcg/riscv/tcg-target-con-set.h | 10 +++++-----
7
1 file changed, 15 insertions(+), 20 deletions(-)
7
tcg/riscv/tcg-target-con-str.h | 1 -
8
tcg/riscv/tcg-target.c.inc | 28 ++++++++++++----------------
9
3 files changed, 17 insertions(+), 22 deletions(-)
8
10
9
diff --git a/target/microblaze/translate.c b/target/microblaze/translate.c
11
diff --git a/tcg/riscv/tcg-target-con-set.h b/tcg/riscv/tcg-target-con-set.h
10
index XXXXXXX..XXXXXXX 100644
12
index XXXXXXX..XXXXXXX 100644
11
--- a/target/microblaze/translate.c
13
--- a/tcg/riscv/tcg-target-con-set.h
12
+++ b/target/microblaze/translate.c
14
+++ b/tcg/riscv/tcg-target-con-set.h
13
@@ -XXX,XX +XXX,XX @@ static void t_sync_flags(DisasContext *dc)
15
@@ -XXX,XX +XXX,XX @@
14
16
* tcg-target-con-str.h; the constraint combination is inclusive or.
15
static void gen_raise_exception(DisasContext *dc, uint32_t index)
17
*/
16
{
18
C_O0_I1(r)
17
- TCGv_i32 tmp = tcg_const_i32(index);
19
-C_O0_I2(rZ, r)
18
-
20
-C_O0_I2(rZ, rZ)
19
- gen_helper_raise_exception(cpu_env, tmp);
21
+C_O0_I2(rz, r)
20
+ gen_helper_raise_exception(cpu_env, tcg_constant_i32(index));
22
+C_O0_I2(rz, rz)
21
dc->base.is_jmp = DISAS_NORETURN;
23
C_O1_I1(r, r)
24
C_O1_I2(r, r, ri)
25
C_O1_I2(r, r, rI)
26
C_O1_I2(r, r, rJ)
27
-C_O1_I2(r, rZ, rN)
28
-C_O1_I2(r, rZ, rZ)
29
+C_O1_I2(r, rz, rN)
30
+C_O1_I2(r, rz, rz)
31
C_N1_I2(r, r, rM)
32
C_O1_I4(r, r, rI, rM, rM)
33
-C_O2_I4(r, r, rZ, rZ, rM, rM)
34
+C_O2_I4(r, r, rz, rz, rM, rM)
35
C_O0_I2(v, r)
36
C_O1_I1(v, r)
37
C_O1_I1(v, v)
38
diff --git a/tcg/riscv/tcg-target-con-str.h b/tcg/riscv/tcg-target-con-str.h
39
index XXXXXXX..XXXXXXX 100644
40
--- a/tcg/riscv/tcg-target-con-str.h
41
+++ b/tcg/riscv/tcg-target-con-str.h
42
@@ -XXX,XX +XXX,XX @@ CONST('K', TCG_CT_CONST_S5)
43
CONST('L', TCG_CT_CONST_CMP_VI)
44
CONST('N', TCG_CT_CONST_N12)
45
CONST('M', TCG_CT_CONST_M12)
46
-CONST('Z', TCG_CT_CONST_ZERO)
47
diff --git a/tcg/riscv/tcg-target.c.inc b/tcg/riscv/tcg-target.c.inc
48
index XXXXXXX..XXXXXXX 100644
49
--- a/tcg/riscv/tcg-target.c.inc
50
+++ b/tcg/riscv/tcg-target.c.inc
51
@@ -XXX,XX +XXX,XX @@ static TCGReg tcg_target_call_oarg_reg(TCGCallReturnKind kind, int slot)
52
return TCG_REG_A0 + slot;
22
}
53
}
23
54
24
@@ -XXX,XX +XXX,XX @@ static void gen_raise_exception_sync(DisasContext *dc, uint32_t index)
55
-#define TCG_CT_CONST_ZERO 0x100
25
56
-#define TCG_CT_CONST_S12 0x200
26
static void gen_raise_hw_excp(DisasContext *dc, uint32_t esr_ec)
57
-#define TCG_CT_CONST_N12 0x400
27
{
58
-#define TCG_CT_CONST_M12 0x800
28
- TCGv_i32 tmp = tcg_const_i32(esr_ec);
59
-#define TCG_CT_CONST_J12 0x1000
29
+ TCGv_i32 tmp = tcg_constant_i32(esr_ec);
60
-#define TCG_CT_CONST_S5 0x2000
30
tcg_gen_st_i32(tmp, cpu_env, offsetof(CPUMBState, esr));
61
-#define TCG_CT_CONST_CMP_VI 0x4000
31
62
+#define TCG_CT_CONST_S12 0x100
32
gen_raise_exception_sync(dc, EXCP_HW_EXCP);
63
+#define TCG_CT_CONST_N12 0x200
33
@@ -XXX,XX +XXX,XX @@ static bool do_typeb_val(DisasContext *dc, arg_typeb *arg, bool side_effects,
64
+#define TCG_CT_CONST_M12 0x400
34
65
+#define TCG_CT_CONST_J12 0x800
35
rd = reg_for_write(dc, arg->rd);
66
+#define TCG_CT_CONST_S5 0x1000
36
ra = reg_for_read(dc, arg->ra);
67
+#define TCG_CT_CONST_CMP_VI 0x2000
37
- imm = tcg_const_i32(arg->imm);
68
38
+ imm = tcg_constant_i32(arg->imm);
69
#define ALL_GENERAL_REGS MAKE_64BIT_MASK(0, 32)
39
70
#define ALL_VECTOR_REGS MAKE_64BIT_MASK(32, 32)
40
fn(rd, ra, imm);
71
@@ -XXX,XX +XXX,XX @@ static bool tcg_target_const_match(int64_t val, int ct,
41
return true;
72
if (ct & TCG_CT_CONST) {
42
@@ -XXX,XX +XXX,XX @@ static bool do_typeb_val(DisasContext *dc, arg_typeb *arg, bool side_effects,
73
return 1;
43
/* No input carry, but output carry. */
44
static void gen_add(TCGv_i32 out, TCGv_i32 ina, TCGv_i32 inb)
45
{
46
- TCGv_i32 zero = tcg_const_i32(0);
47
+ TCGv_i32 zero = tcg_constant_i32(0);
48
49
tcg_gen_add2_i32(out, cpu_msr_c, ina, zero, inb, zero);
50
}
51
@@ -XXX,XX +XXX,XX @@ static void gen_add(TCGv_i32 out, TCGv_i32 ina, TCGv_i32 inb)
52
/* Input and output carry. */
53
static void gen_addc(TCGv_i32 out, TCGv_i32 ina, TCGv_i32 inb)
54
{
55
- TCGv_i32 zero = tcg_const_i32(0);
56
+ TCGv_i32 zero = tcg_constant_i32(0);
57
TCGv_i32 tmp = tcg_temp_new_i32();
58
59
tcg_gen_add2_i32(tmp, cpu_msr_c, ina, zero, cpu_msr_c, zero);
60
@@ -XXX,XX +XXX,XX @@ static void gen_rsub(TCGv_i32 out, TCGv_i32 ina, TCGv_i32 inb)
61
/* Input and output carry. */
62
static void gen_rsubc(TCGv_i32 out, TCGv_i32 ina, TCGv_i32 inb)
63
{
64
- TCGv_i32 zero = tcg_const_i32(0);
65
+ TCGv_i32 zero = tcg_constant_i32(0);
66
TCGv_i32 tmp = tcg_temp_new_i32();
67
68
tcg_gen_not_i32(tmp, ina);
69
@@ -XXX,XX +XXX,XX @@ static bool do_bcc(DisasContext *dc, int dest_rb, int dest_imm,
70
}
74
}
71
75
- if ((ct & TCG_CT_CONST_ZERO) && val == 0) {
72
/* Compute the final destination into btarget. */
76
- return 1;
73
- zero = tcg_const_i32(0);
77
- }
74
- next = tcg_const_i32(dc->base.pc_next + (delay + 1) * 4);
78
if (type >= TCG_TYPE_V64) {
75
+ zero = tcg_constant_i32(0);
79
/* Val is replicated by VECE; extract the highest element. */
76
+ next = tcg_constant_i32(dc->base.pc_next + (delay + 1) * 4);
80
val >>= (-8 << vece) & 63;
77
tcg_gen_movcond_i32(dc->jmp_cond, cpu_btarget,
81
@@ -XXX,XX +XXX,XX @@ tcg_target_op_def(TCGOpcode op, TCGType type, unsigned flags)
78
reg_for_read(dc, ra), zero,
82
case INDEX_op_st16_i64:
79
cpu_btarget, next);
83
case INDEX_op_st32_i64:
80
@@ -XXX,XX +XXX,XX @@ static bool trans_mbar(DisasContext *dc, arg_mbar *arg)
84
case INDEX_op_st_i64:
81
85
- return C_O0_I2(rZ, r);
82
/* Sleep. */
86
+ return C_O0_I2(rz, r);
83
if (mbar_imm & 16) {
87
84
- TCGv_i32 tmp_1;
88
case INDEX_op_add_i32:
85
-
89
case INDEX_op_and_i32:
86
if (trap_userspace(dc, true)) {
90
@@ -XXX,XX +XXX,XX @@ tcg_target_op_def(TCGOpcode op, TCGType type, unsigned flags)
87
/* Sleep is a privileged instruction. */
91
88
return true;
92
case INDEX_op_sub_i32:
89
@@ -XXX,XX +XXX,XX @@ static bool trans_mbar(DisasContext *dc, arg_mbar *arg)
93
case INDEX_op_sub_i64:
90
94
- return C_O1_I2(r, rZ, rN);
91
t_sync_flags(dc);
95
+ return C_O1_I2(r, rz, rN);
92
96
93
- tmp_1 = tcg_const_i32(1);
97
case INDEX_op_mul_i32:
94
- tcg_gen_st_i32(tmp_1, cpu_env,
98
case INDEX_op_mulsh_i32:
95
+ tcg_gen_st_i32(tcg_constant_i32(1), cpu_env,
99
@@ -XXX,XX +XXX,XX @@ tcg_target_op_def(TCGOpcode op, TCGType type, unsigned flags)
96
-offsetof(MicroBlazeCPU, env)
100
case INDEX_op_divu_i64:
97
+offsetof(CPUState, halted));
101
case INDEX_op_rem_i64:
98
102
case INDEX_op_remu_i64:
99
@@ -XXX,XX +XXX,XX @@ static bool trans_mts(DisasContext *dc, arg_mts *arg)
103
- return C_O1_I2(r, rZ, rZ);
100
case 0x1004: /* TLBHI */
104
+ return C_O1_I2(r, rz, rz);
101
case 0x1005: /* TLBSX */
105
102
{
106
case INDEX_op_shl_i32:
103
- TCGv_i32 tmp_ext = tcg_const_i32(arg->e);
107
case INDEX_op_shr_i32:
104
- TCGv_i32 tmp_reg = tcg_const_i32(arg->rs & 7);
108
@@ -XXX,XX +XXX,XX @@ tcg_target_op_def(TCGOpcode op, TCGType type, unsigned flags)
105
+ TCGv_i32 tmp_ext = tcg_constant_i32(arg->e);
109
106
+ TCGv_i32 tmp_reg = tcg_constant_i32(arg->rs & 7);
110
case INDEX_op_brcond_i32:
107
111
case INDEX_op_brcond_i64:
108
gen_helper_mmu_write(cpu_env, tmp_ext, tmp_reg, src);
112
- return C_O0_I2(rZ, rZ);
109
}
113
+ return C_O0_I2(rz, rz);
110
@@ -XXX,XX +XXX,XX @@ static bool trans_mfs(DisasContext *dc, arg_mfs *arg)
114
111
case 0x1004: /* TLBHI */
115
case INDEX_op_movcond_i32:
112
case 0x1005: /* TLBSX */
116
case INDEX_op_movcond_i64:
113
{
117
@@ -XXX,XX +XXX,XX @@ tcg_target_op_def(TCGOpcode op, TCGType type, unsigned flags)
114
- TCGv_i32 tmp_ext = tcg_const_i32(arg->e);
118
case INDEX_op_add2_i64:
115
- TCGv_i32 tmp_reg = tcg_const_i32(arg->rs & 7);
119
case INDEX_op_sub2_i32:
116
+ TCGv_i32 tmp_ext = tcg_constant_i32(arg->e);
120
case INDEX_op_sub2_i64:
117
+ TCGv_i32 tmp_reg = tcg_constant_i32(arg->rs & 7);
121
- return C_O2_I4(r, r, rZ, rZ, rM, rM);
118
122
+ return C_O2_I4(r, r, rz, rz, rM, rM);
119
gen_helper_mmu_read(dest, cpu_env, tmp_ext, tmp_reg);
123
120
}
124
case INDEX_op_qemu_ld_i32:
121
@@ -XXX,XX +XXX,XX @@ static bool do_get(DisasContext *dc, int rd, int rb, int imm, int ctrl)
125
case INDEX_op_qemu_ld_i64:
122
tcg_gen_movi_i32(t_id, imm);
126
return C_O1_I1(r, r);
123
}
127
case INDEX_op_qemu_st_i32:
124
128
case INDEX_op_qemu_st_i64:
125
- t_ctrl = tcg_const_i32(ctrl);
129
- return C_O0_I2(rZ, r);
126
+ t_ctrl = tcg_constant_i32(ctrl);
130
+ return C_O0_I2(rz, r);
127
gen_helper_get(reg_for_write(dc, rd), t_id, t_ctrl);
131
128
return true;
132
case INDEX_op_st_vec:
129
}
133
return C_O0_I2(v, r);
130
@@ -XXX,XX +XXX,XX @@ static bool do_put(DisasContext *dc, int ra, int rb, int imm, int ctrl)
131
tcg_gen_movi_i32(t_id, imm);
132
}
133
134
- t_ctrl = tcg_const_i32(ctrl);
135
+ t_ctrl = tcg_constant_i32(ctrl);
136
gen_helper_put(t_id, t_ctrl, reg_for_read(dc, ra));
137
return true;
138
}
139
--
134
--
140
2.34.1
135
2.43.0
141
136
142
137
diff view generated by jsdifflib
1
Use tcg_constant_i64. Adjust in2_mri2_* to allocate a new
1
Replace target-specific 'Z' with generic 'z'.
2
temporary for the output, using gen_ri2 for the address.
3
2
4
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
3
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
5
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
6
---
5
---
7
target/s390x/tcg/translate.c | 23 ++++++++++++++---------
6
tcg/sparc64/tcg-target-con-set.h | 12 ++++++------
8
1 file changed, 14 insertions(+), 9 deletions(-)
7
tcg/sparc64/tcg-target-con-str.h | 1 -
8
tcg/sparc64/tcg-target.c.inc | 17 +++++++----------
9
3 files changed, 13 insertions(+), 17 deletions(-)
9
10
10
diff --git a/target/s390x/tcg/translate.c b/target/s390x/tcg/translate.c
11
diff --git a/tcg/sparc64/tcg-target-con-set.h b/tcg/sparc64/tcg-target-con-set.h
11
index XXXXXXX..XXXXXXX 100644
12
index XXXXXXX..XXXXXXX 100644
12
--- a/target/s390x/tcg/translate.c
13
--- a/tcg/sparc64/tcg-target-con-set.h
13
+++ b/target/s390x/tcg/translate.c
14
+++ b/tcg/sparc64/tcg-target-con-set.h
14
@@ -XXX,XX +XXX,XX @@ static void in2_a2(DisasContext *s, DisasOps *o)
15
@@ -XXX,XX +XXX,XX @@
15
}
16
* tcg-target-con-str.h; the constraint combination is inclusive or.
16
#define SPEC_in2_a2 0
17
*/
17
18
C_O0_I1(r)
18
+static TCGv gen_ri2(DisasContext *s)
19
-C_O0_I2(rZ, r)
19
+{
20
-C_O0_I2(rZ, rJ)
20
+ return tcg_constant_i64(s->base.pc_next + (int64_t)get_field(s, i2) * 2);
21
+C_O0_I2(rz, r)
21
+}
22
+C_O0_I2(rz, rJ)
22
+
23
C_O1_I1(r, r)
23
static void in2_ri2(DisasContext *s, DisasOps *o)
24
C_O1_I2(r, r, r)
24
{
25
-C_O1_I2(r, rZ, rJ)
25
- o->in2 = tcg_const_i64(s->base.pc_next + (int64_t)get_field(s, i2) * 2);
26
-C_O1_I4(r, rZ, rJ, rI, 0)
26
+ o->in2 = gen_ri2(s);
27
-C_O2_I2(r, r, rZ, rJ)
27
}
28
-C_O2_I4(r, r, rZ, rZ, rJ, rJ)
28
#define SPEC_in2_ri2 0
29
+C_O1_I2(r, rz, rJ)
29
30
+C_O1_I4(r, rz, rJ, rI, 0)
30
@@ -XXX,XX +XXX,XX @@ static void in2_m2_64a(DisasContext *s, DisasOps *o)
31
+C_O2_I2(r, r, rz, rJ)
31
32
+C_O2_I4(r, r, rz, rz, rJ, rJ)
32
static void in2_mri2_16u(DisasContext *s, DisasOps *o)
33
diff --git a/tcg/sparc64/tcg-target-con-str.h b/tcg/sparc64/tcg-target-con-str.h
33
{
34
index XXXXXXX..XXXXXXX 100644
34
- in2_ri2(s, o);
35
--- a/tcg/sparc64/tcg-target-con-str.h
35
- tcg_gen_qemu_ld16u(o->in2, o->in2, get_mem_index(s));
36
+++ b/tcg/sparc64/tcg-target-con-str.h
36
+ o->in2 = tcg_temp_new_i64();
37
@@ -XXX,XX +XXX,XX @@ REGS('r', ALL_GENERAL_REGS)
37
+ tcg_gen_qemu_ld16u(o->in2, gen_ri2(s), get_mem_index(s));
38
*/
38
}
39
CONST('I', TCG_CT_CONST_S11)
39
#define SPEC_in2_mri2_16u 0
40
CONST('J', TCG_CT_CONST_S13)
40
41
-CONST('Z', TCG_CT_CONST_ZERO)
41
static void in2_mri2_32s(DisasContext *s, DisasOps *o)
42
diff --git a/tcg/sparc64/tcg-target.c.inc b/tcg/sparc64/tcg-target.c.inc
42
{
43
index XXXXXXX..XXXXXXX 100644
43
- in2_ri2(s, o);
44
--- a/tcg/sparc64/tcg-target.c.inc
44
- tcg_gen_qemu_ld32s(o->in2, o->in2, get_mem_index(s));
45
+++ b/tcg/sparc64/tcg-target.c.inc
45
+ o->in2 = tcg_temp_new_i64();
46
@@ -XXX,XX +XXX,XX @@ static const char * const tcg_target_reg_names[TCG_TARGET_NB_REGS] = {
46
+ tcg_gen_qemu_ld32s(o->in2, gen_ri2(s), get_mem_index(s));
47
47
}
48
#define TCG_CT_CONST_S11 0x100
48
#define SPEC_in2_mri2_32s 0
49
#define TCG_CT_CONST_S13 0x200
49
50
-#define TCG_CT_CONST_ZERO 0x400
50
static void in2_mri2_32u(DisasContext *s, DisasOps *o)
51
51
{
52
#define ALL_GENERAL_REGS MAKE_64BIT_MASK(0, 32)
52
- in2_ri2(s, o);
53
53
- tcg_gen_qemu_ld32u(o->in2, o->in2, get_mem_index(s));
54
@@ -XXX,XX +XXX,XX @@ static bool tcg_target_const_match(int64_t val, int ct,
54
+ o->in2 = tcg_temp_new_i64();
55
val = (int32_t)val;
55
+ tcg_gen_qemu_ld32u(o->in2, gen_ri2(s), get_mem_index(s));
56
}
56
}
57
57
#define SPEC_in2_mri2_32u 0
58
- if ((ct & TCG_CT_CONST_ZERO) && val == 0) {
58
59
- return 1;
59
static void in2_mri2_64(DisasContext *s, DisasOps *o)
60
- } else if ((ct & TCG_CT_CONST_S11) && check_fit_tl(val, 11)) {
60
{
61
+ if ((ct & TCG_CT_CONST_S11) && check_fit_tl(val, 11)) {
61
- in2_ri2(s, o);
62
return 1;
62
- tcg_gen_qemu_ld64(o->in2, o->in2, get_mem_index(s));
63
} else if ((ct & TCG_CT_CONST_S13) && check_fit_tl(val, 13)) {
63
+ o->in2 = tcg_temp_new_i64();
64
return 1;
64
+ tcg_gen_qemu_ld64(o->in2, gen_ri2(s), get_mem_index(s));
65
@@ -XXX,XX +XXX,XX @@ tcg_target_op_def(TCGOpcode op, TCGType type, unsigned flags)
65
}
66
case INDEX_op_st_i64:
66
#define SPEC_in2_mri2_64 0
67
case INDEX_op_qemu_st_i32:
68
case INDEX_op_qemu_st_i64:
69
- return C_O0_I2(rZ, r);
70
+ return C_O0_I2(rz, r);
71
72
case INDEX_op_add_i32:
73
case INDEX_op_add_i64:
74
@@ -XXX,XX +XXX,XX @@ tcg_target_op_def(TCGOpcode op, TCGType type, unsigned flags)
75
case INDEX_op_setcond_i64:
76
case INDEX_op_negsetcond_i32:
77
case INDEX_op_negsetcond_i64:
78
- return C_O1_I2(r, rZ, rJ);
79
+ return C_O1_I2(r, rz, rJ);
80
81
case INDEX_op_brcond_i32:
82
case INDEX_op_brcond_i64:
83
- return C_O0_I2(rZ, rJ);
84
+ return C_O0_I2(rz, rJ);
85
case INDEX_op_movcond_i32:
86
case INDEX_op_movcond_i64:
87
- return C_O1_I4(r, rZ, rJ, rI, 0);
88
+ return C_O1_I4(r, rz, rJ, rI, 0);
89
case INDEX_op_add2_i32:
90
case INDEX_op_add2_i64:
91
case INDEX_op_sub2_i32:
92
case INDEX_op_sub2_i64:
93
- return C_O2_I4(r, r, rZ, rZ, rJ, rJ);
94
+ return C_O2_I4(r, r, rz, rz, rJ, rJ);
95
case INDEX_op_mulu2_i32:
96
case INDEX_op_muls2_i32:
97
- return C_O2_I2(r, r, rZ, rJ);
98
+ return C_O2_I2(r, r, rz, rJ);
99
case INDEX_op_muluh_i64:
100
return C_O1_I2(r, r, r);
67
101
68
--
102
--
69
2.34.1
103
2.43.0
70
104
71
105
diff view generated by jsdifflib
1
Reviewed-by: Max Filippov <jcmvbkbc@gmail.com>
1
From: Fabiano Rosas <farosas@suse.de>
2
3
When complying with the alignment requested in the ELF and unmapping
4
the excess reservation, having align_end not aligned to the guest page
5
causes the unmap to be rejected by the alignment check at
6
target_munmap and later brk adjustments hit an EEXIST.
7
8
Fix by aligning the start of region to be unmapped.
9
10
Fixes: c81d1fafa6 ("linux-user: Honor elf alignment when placing images")
11
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1913
12
Signed-off-by: Fabiano Rosas <farosas@suse.de>
13
[rth: Align load_end as well.]
2
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
14
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
15
Message-ID: <20250213143558.10504-1-farosas@suse.de>
3
---
16
---
4
target/xtensa/translate.c | 4 ++--
17
linux-user/elfload.c | 4 ++--
5
1 file changed, 2 insertions(+), 2 deletions(-)
18
1 file changed, 2 insertions(+), 2 deletions(-)
6
19
7
diff --git a/target/xtensa/translate.c b/target/xtensa/translate.c
20
diff --git a/linux-user/elfload.c b/linux-user/elfload.c
8
index XXXXXXX..XXXXXXX 100644
21
index XXXXXXX..XXXXXXX 100644
9
--- a/target/xtensa/translate.c
22
--- a/linux-user/elfload.c
10
+++ b/target/xtensa/translate.c
23
+++ b/linux-user/elfload.c
11
@@ -XXX,XX +XXX,XX @@ static void translate_sll(DisasContext *dc, const OpcodeArg arg[],
24
@@ -XXX,XX +XXX,XX @@ static void load_elf_image(const char *image_name, const ImageSource *src,
12
tcg_gen_shl_i32(arg[0].out, arg[1].in, dc->sar_m32);
25
13
} else {
26
if (align_size != reserve_size) {
14
TCGv_i64 v = tcg_temp_new_i64();
27
abi_ulong align_addr = ROUND_UP(load_addr, align);
15
- TCGv_i32 s = tcg_const_i32(32);
28
- abi_ulong align_end = align_addr + reserve_size;
16
- tcg_gen_sub_i32(s, s, cpu_SR[SAR]);
29
- abi_ulong load_end = load_addr + align_size;
17
+ TCGv_i32 s = tcg_temp_new();
30
+ abi_ulong align_end = TARGET_PAGE_ALIGN(align_addr + reserve_size);
18
+ tcg_gen_subfi_i32(s, 32, cpu_SR[SAR]);
31
+ abi_ulong load_end = TARGET_PAGE_ALIGN(load_addr + align_size);
19
tcg_gen_andi_i32(s, s, 0x3f);
32
20
tcg_gen_extu_i32_i64(v, arg[1].in);
33
if (align_addr != load_addr) {
21
gen_shift_reg(shl, s);
34
target_munmap(load_addr, align_addr - load_addr);
22
--
35
--
23
2.34.1
36
2.43.0
diff view generated by jsdifflib
1
This file, and a couple of uses, got left behind when the
1
From: Andreas Schwab <schwab@suse.de>
2
tcg stuff was removed from tracetool.
3
2
4
Fixes: 126d4123c50a ("tracing: excise the tcg related from tracetool")
3
SA_RESTORER and the associated sa_restorer field of struct sigaction are
5
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
4
an obsolete feature, not expected to be used by future architectures.
5
They are also absent on RISC-V, LoongArch, Hexagon and OpenRISC, but
6
defined due to their use of generic/signal.h. This leads to corrupted
7
data and out-of-bounds accesses.
8
9
Move the definition of TARGET_SA_RESTORER out of generic/signal.h into the
10
target_signal.h files that need it. Note that m68k has the sa_restorer
11
field, but does not use it and does not define SA_RESTORER.
12
13
Reported-by: Thomas Weißschuh <thomas@t-8ch.de>
14
Signed-off-by: Andreas Schwab <schwab@suse.de>
15
Reviewed-by: Thomas Weißschuh <thomas@t-8ch.de>
16
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
6
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
17
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
18
Message-ID: <mvmed060xc9.fsf@suse.de>
7
---
19
---
8
meson.build | 1 -
20
linux-user/aarch64/target_signal.h | 2 ++
9
scripts/tracetool/__init__.py | 23 -----
21
linux-user/arm/target_signal.h | 2 ++
10
scripts/tracetool/transform.py | 168 ---------------------------------
22
linux-user/generic/signal.h | 1 -
11
3 files changed, 192 deletions(-)
23
linux-user/i386/target_signal.h | 2 ++
12
delete mode 100644 scripts/tracetool/transform.py
24
linux-user/m68k/target_signal.h | 1 +
25
linux-user/microblaze/target_signal.h | 2 ++
26
linux-user/ppc/target_signal.h | 2 ++
27
linux-user/s390x/target_signal.h | 2 ++
28
linux-user/sh4/target_signal.h | 2 ++
29
linux-user/x86_64/target_signal.h | 2 ++
30
linux-user/xtensa/target_signal.h | 2 ++
31
11 files changed, 19 insertions(+), 1 deletion(-)
13
32
14
diff --git a/meson.build b/meson.build
33
diff --git a/linux-user/aarch64/target_signal.h b/linux-user/aarch64/target_signal.h
15
index XXXXXXX..XXXXXXX 100644
34
index XXXXXXX..XXXXXXX 100644
16
--- a/meson.build
35
--- a/linux-user/aarch64/target_signal.h
17
+++ b/meson.build
36
+++ b/linux-user/aarch64/target_signal.h
18
@@ -XXX,XX +XXX,XX @@ tracetool_depends = files(
37
@@ -XXX,XX +XXX,XX @@
19
'scripts/tracetool/format/log_stap.py',
38
20
'scripts/tracetool/format/stap.py',
39
#include "../generic/signal.h"
21
'scripts/tracetool/__init__.py',
40
22
- 'scripts/tracetool/transform.py',
41
+#define TARGET_SA_RESTORER 0x04000000
23
'scripts/tracetool/vcpu.py'
42
+
24
)
43
#define TARGET_SEGV_MTEAERR 8 /* Asynchronous ARM MTE error */
25
44
#define TARGET_SEGV_MTESERR 9 /* Synchronous ARM MTE exception */
26
diff --git a/scripts/tracetool/__init__.py b/scripts/tracetool/__init__.py
45
46
diff --git a/linux-user/arm/target_signal.h b/linux-user/arm/target_signal.h
27
index XXXXXXX..XXXXXXX 100644
47
index XXXXXXX..XXXXXXX 100644
28
--- a/scripts/tracetool/__init__.py
48
--- a/linux-user/arm/target_signal.h
29
+++ b/scripts/tracetool/__init__.py
49
+++ b/linux-user/arm/target_signal.h
30
@@ -XXX,XX +XXX,XX @@
50
@@ -XXX,XX +XXX,XX @@
31
51
32
import tracetool.format
52
#include "../generic/signal.h"
33
import tracetool.backend
53
34
-import tracetool.transform
54
+#define TARGET_SA_RESTORER 0x04000000
35
55
+
36
56
#define TARGET_ARCH_HAS_SETUP_FRAME
37
def error_write(*lines):
57
#define TARGET_ARCH_HAS_SIGTRAMP_PAGE 1
38
@@ -XXX,XX +XXX,XX @@ def casted(self):
58
39
"""List of argument names casted to their type."""
59
diff --git a/linux-user/generic/signal.h b/linux-user/generic/signal.h
40
return ["(%s)%s" % (type_, name) for type_, name in self._args]
60
index XXXXXXX..XXXXXXX 100644
41
61
--- a/linux-user/generic/signal.h
42
- def transform(self, *trans):
62
+++ b/linux-user/generic/signal.h
43
- """Return a new Arguments instance with transformed types.
44
-
45
- The types in the resulting Arguments instance are transformed according
46
- to tracetool.transform.transform_type.
47
- """
48
- res = []
49
- for type_, name in self._args:
50
- res.append((tracetool.transform.transform_type(type_, *trans),
51
- name))
52
- return Arguments(res)
53
-
54
55
class Event(object):
56
"""Event description.
57
@@ -XXX,XX +XXX,XX @@ def api(self, fmt=None):
58
fmt = Event.QEMU_TRACE
59
return fmt % {"name": self.name, "NAME": self.name.upper()}
60
61
- def transform(self, *trans):
62
- """Return a new Event with transformed Arguments."""
63
- return Event(self.name,
64
- list(self.properties),
65
- self.fmt,
66
- self.args.transform(*trans),
67
- self.lineno,
68
- self.filename,
69
- self)
70
-
71
72
def read_events(fobj, fname):
73
"""Generate the output for the given (format, backends) pair.
74
diff --git a/scripts/tracetool/transform.py b/scripts/tracetool/transform.py
75
deleted file mode 100644
76
index XXXXXXX..XXXXXXX
77
--- a/scripts/tracetool/transform.py
78
+++ /dev/null
79
@@ -XXX,XX +XXX,XX @@
63
@@ -XXX,XX +XXX,XX @@
80
-# -*- coding: utf-8 -*-
64
#define TARGET_SA_RESTART 0x10000000
81
-
65
#define TARGET_SA_NODEFER 0x40000000
82
-"""
66
#define TARGET_SA_RESETHAND 0x80000000
83
-Type-transformation rules.
67
-#define TARGET_SA_RESTORER 0x04000000
84
-"""
68
85
-
69
#define TARGET_SIGHUP 1
86
-__author__ = "Lluís Vilanova <vilanova@ac.upc.edu>"
70
#define TARGET_SIGINT 2
87
-__copyright__ = "Copyright 2012-2016, Lluís Vilanova <vilanova@ac.upc.edu>"
71
diff --git a/linux-user/i386/target_signal.h b/linux-user/i386/target_signal.h
88
-__license__ = "GPL version 2 or (at your option) any later version"
72
index XXXXXXX..XXXXXXX 100644
89
-
73
--- a/linux-user/i386/target_signal.h
90
-__maintainer__ = "Stefan Hajnoczi"
74
+++ b/linux-user/i386/target_signal.h
91
-__email__ = "stefanha@redhat.com"
75
@@ -XXX,XX +XXX,XX @@
92
-
76
93
-
77
#include "../generic/signal.h"
94
-def _transform_type(type_, trans):
78
95
- if isinstance(trans, str):
79
+#define TARGET_SA_RESTORER 0x04000000
96
- return trans
80
+
97
- elif isinstance(trans, dict):
81
#define TARGET_ARCH_HAS_SETUP_FRAME
98
- if type_ in trans:
82
#define TARGET_ARCH_HAS_SIGTRAMP_PAGE 1
99
- return _transform_type(type_, trans[type_])
83
100
- elif None in trans:
84
diff --git a/linux-user/m68k/target_signal.h b/linux-user/m68k/target_signal.h
101
- return _transform_type(type_, trans[None])
85
index XXXXXXX..XXXXXXX 100644
102
- else:
86
--- a/linux-user/m68k/target_signal.h
103
- return type_
87
+++ b/linux-user/m68k/target_signal.h
104
- elif callable(trans):
88
@@ -XXX,XX +XXX,XX @@
105
- return trans(type_)
89
106
- else:
90
#include "../generic/signal.h"
107
- raise ValueError("Invalid type transformation rule: %s" % trans)
91
108
-
92
+#define TARGET_ARCH_HAS_SA_RESTORER 1
109
-
93
#define TARGET_ARCH_HAS_SETUP_FRAME
110
-def transform_type(type_, *trans):
94
#define TARGET_ARCH_HAS_SIGTRAMP_PAGE 1
111
- """Return a new type transformed according to the given rules.
95
112
-
96
diff --git a/linux-user/microblaze/target_signal.h b/linux-user/microblaze/target_signal.h
113
- Applies each of the transformation rules in trans in order.
97
index XXXXXXX..XXXXXXX 100644
114
-
98
--- a/linux-user/microblaze/target_signal.h
115
- If an element of trans is a string, return it.
99
+++ b/linux-user/microblaze/target_signal.h
116
-
100
@@ -XXX,XX +XXX,XX @@
117
- If an element of trans is a function, call it with type_ as its only
101
118
- argument.
102
#include "../generic/signal.h"
119
-
103
120
- If an element of trans is a dict, search type_ in its keys. If type_ is
104
+#define TARGET_SA_RESTORER 0x04000000
121
- a key, use the value as a transformation rule for type_. Otherwise, if
105
+
122
- None is a key use the value as a transformation rule for type_.
106
#define TARGET_ARCH_HAS_SIGTRAMP_PAGE 1
123
-
107
124
- Otherwise, return type_.
108
#endif /* MICROBLAZE_TARGET_SIGNAL_H */
125
-
109
diff --git a/linux-user/ppc/target_signal.h b/linux-user/ppc/target_signal.h
126
- Parameters
110
index XXXXXXX..XXXXXXX 100644
127
- ----------
111
--- a/linux-user/ppc/target_signal.h
128
- type_ : str
112
+++ b/linux-user/ppc/target_signal.h
129
- Type to transform.
113
@@ -XXX,XX +XXX,XX @@
130
- trans : list of function or dict
114
131
- Type transformation rules.
115
#include "../generic/signal.h"
132
- """
116
133
- if len(trans) == 0:
117
+#define TARGET_SA_RESTORER 0x04000000
134
- raise ValueError
118
+
135
- res = type_
119
#if !defined(TARGET_PPC64)
136
- for t in trans:
120
#define TARGET_ARCH_HAS_SETUP_FRAME
137
- res = _transform_type(res, t)
121
#endif
138
- return res
122
diff --git a/linux-user/s390x/target_signal.h b/linux-user/s390x/target_signal.h
139
-
123
index XXXXXXX..XXXXXXX 100644
140
-
124
--- a/linux-user/s390x/target_signal.h
141
-##################################################
125
+++ b/linux-user/s390x/target_signal.h
142
-# tcg -> host
126
@@ -XXX,XX +XXX,XX @@
143
-
127
144
-def _tcg_2_host(type_):
128
#include "../generic/signal.h"
145
- if type_ == "TCGv":
129
146
- # force a fixed-size type (target-independent)
130
+#define TARGET_SA_RESTORER 0x04000000
147
- return "uint64_t"
131
+
148
- else:
132
#define TARGET_ARCH_HAS_SETUP_FRAME
149
- return type_
133
#define TARGET_ARCH_HAS_SIGTRAMP_PAGE 1
150
-
134
151
-TCG_2_HOST = {
135
diff --git a/linux-user/sh4/target_signal.h b/linux-user/sh4/target_signal.h
152
- "TCGv_i32": "uint32_t",
136
index XXXXXXX..XXXXXXX 100644
153
- "TCGv_i64": "uint64_t",
137
--- a/linux-user/sh4/target_signal.h
154
- "TCGv_ptr": "void *",
138
+++ b/linux-user/sh4/target_signal.h
155
- None: _tcg_2_host,
139
@@ -XXX,XX +XXX,XX @@
156
- }
140
157
-
141
#include "../generic/signal.h"
158
-
142
159
-##################################################
143
+#define TARGET_SA_RESTORER 0x04000000
160
-# host -> host compatible with tcg sizes
144
+
161
-
145
#define TARGET_ARCH_HAS_SETUP_FRAME
162
-HOST_2_TCG_COMPAT = {
146
#define TARGET_ARCH_HAS_SIGTRAMP_PAGE 1
163
- "uint8_t": "uint32_t",
147
164
- "uint16_t": "uint32_t",
148
diff --git a/linux-user/x86_64/target_signal.h b/linux-user/x86_64/target_signal.h
165
- }
149
index XXXXXXX..XXXXXXX 100644
166
-
150
--- a/linux-user/x86_64/target_signal.h
167
-
151
+++ b/linux-user/x86_64/target_signal.h
168
-##################################################
152
@@ -XXX,XX +XXX,XX @@
169
-# host/tcg -> tcg
153
170
-
154
#include "../generic/signal.h"
171
-def _host_2_tcg(type_):
155
172
- if type_.startswith("TCGv"):
156
+#define TARGET_SA_RESTORER 0x04000000
173
- return type_
157
+
174
- raise ValueError("Don't know how to translate '%s' into a TCG type\n" % type_)
158
/* For x86_64, use of SA_RESTORER is mandatory. */
175
-
159
#define TARGET_ARCH_HAS_SIGTRAMP_PAGE 0
176
-HOST_2_TCG = {
160
177
- "uint32_t": "TCGv_i32",
161
diff --git a/linux-user/xtensa/target_signal.h b/linux-user/xtensa/target_signal.h
178
- "uint64_t": "TCGv_i64",
162
index XXXXXXX..XXXXXXX 100644
179
- "void *" : "TCGv_ptr",
163
--- a/linux-user/xtensa/target_signal.h
180
- "CPUArchState *": "TCGv_env",
164
+++ b/linux-user/xtensa/target_signal.h
181
- None: _host_2_tcg,
165
@@ -XXX,XX +XXX,XX @@
182
- }
166
183
-
167
#include "../generic/signal.h"
184
-
168
185
-##################################################
169
+#define TARGET_SA_RESTORER 0x04000000
186
-# tcg -> tcg helper definition
170
+
187
-
171
#define TARGET_ARCH_HAS_SIGTRAMP_PAGE 1
188
-def _tcg_2_helper_def(type_):
172
189
- if type_ == "TCGv":
173
#endif
190
- return "target_ulong"
191
- else:
192
- return type_
193
-
194
-TCG_2_TCG_HELPER_DEF = {
195
- "TCGv_i32": "uint32_t",
196
- "TCGv_i64": "uint64_t",
197
- "TCGv_ptr": "void *",
198
- None: _tcg_2_helper_def,
199
- }
200
-
201
-
202
-##################################################
203
-# tcg -> tcg helper declaration
204
-
205
-def _tcg_2_tcg_helper_decl_error(type_):
206
- raise ValueError("Don't know how to translate type '%s' into a TCG helper declaration type\n" % type_)
207
-
208
-TCG_2_TCG_HELPER_DECL = {
209
- "TCGv" : "tl",
210
- "TCGv_ptr": "ptr",
211
- "TCGv_i32": "i32",
212
- "TCGv_i64": "i64",
213
- "TCGv_env": "env",
214
- None: _tcg_2_tcg_helper_decl_error,
215
- }
216
-
217
-
218
-##################################################
219
-# host/tcg -> tcg temporal constant allocation
220
-
221
-def _host_2_tcg_tmp_new(type_):
222
- if type_.startswith("TCGv"):
223
- return "tcg_temp_new_nop"
224
- raise ValueError("Don't know how to translate type '%s' into a TCG temporal allocation" % type_)
225
-
226
-HOST_2_TCG_TMP_NEW = {
227
- "uint32_t": "tcg_const_i32",
228
- "uint64_t": "tcg_const_i64",
229
- "void *" : "tcg_const_ptr",
230
- None: _host_2_tcg_tmp_new,
231
- }
232
-
233
-
234
-##################################################
235
-# host/tcg -> tcg temporal constant deallocation
236
-
237
-def _host_2_tcg_tmp_free(type_):
238
- if type_.startswith("TCGv"):
239
- return "tcg_temp_free_nop"
240
- raise ValueError("Don't know how to translate type '%s' into a TCG temporal deallocation" % type_)
241
-
242
-HOST_2_TCG_TMP_FREE = {
243
- "uint32_t": "tcg_temp_free_i32",
244
- "uint64_t": "tcg_temp_free_i64",
245
- "void *" : "tcg_temp_free_ptr",
246
- None: _host_2_tcg_tmp_free,
247
- }
248
--
174
--
249
2.34.1
175
2.43.0
250
176
251
177
diff view generated by jsdifflib
1
All remaining uses are strictly read-only.
1
From: Mikael Szreder <git@miszr.win>
2
2
3
Reviewed-by: Max Filippov <jcmvbkbc@gmail.com>
3
A bug was introduced in commit 0bba7572d40d which causes the fdtox
4
and fqtox instructions to incorrectly select the destination registers.
5
More information and a test program can be found in issue #2802.
6
7
Fixes: 0bba7572d40d ("target/sparc: Perform DFPREG/QFPREG in decodetree")
8
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2802
9
Signed-off-by: Mikael Szreder <git@miszr.win>
10
Acked-by: Artyom Tarasenko <atar4qemu@gmail.com>
11
[rth: Squash patches together, since the second fixes a typo in the first.]
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
12
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
13
Message-ID: <20250205090333.19626-3-git@miszr.win>
5
---
14
---
6
target/xtensa/translate.c | 6 +++---
15
target/sparc/insns.decode | 12 ++++++------
7
1 file changed, 3 insertions(+), 3 deletions(-)
16
1 file changed, 6 insertions(+), 6 deletions(-)
8
17
9
diff --git a/target/xtensa/translate.c b/target/xtensa/translate.c
18
diff --git a/target/sparc/insns.decode b/target/sparc/insns.decode
10
index XXXXXXX..XXXXXXX 100644
19
index XXXXXXX..XXXXXXX 100644
11
--- a/target/xtensa/translate.c
20
--- a/target/sparc/insns.decode
12
+++ b/target/xtensa/translate.c
21
+++ b/target/sparc/insns.decode
13
@@ -XXX,XX +XXX,XX @@ static void translate_all(DisasContext *dc, const OpcodeArg arg[],
22
@@ -XXX,XX +XXX,XX @@ FdMULq 10 ..... 110100 ..... 0 0110 1110 ..... @q_d_d
14
const uint32_t par[])
23
FNHADDs 10 ..... 110100 ..... 0 0111 0001 ..... @r_r_r
15
{
24
FNHADDd 10 ..... 110100 ..... 0 0111 0010 ..... @d_d_d
16
uint32_t shift = par[1];
25
FNsMULd 10 ..... 110100 ..... 0 0111 1001 ..... @d_r_r
17
- TCGv_i32 mask = tcg_const_i32(((1 << shift) - 1) << arg[1].imm);
26
-FsTOx 10 ..... 110100 00000 0 1000 0001 ..... @r_r2
18
+ TCGv_i32 mask = tcg_constant_i32(((1 << shift) - 1) << arg[1].imm);
27
-FdTOx 10 ..... 110100 00000 0 1000 0010 ..... @r_d2
19
TCGv_i32 tmp = tcg_temp_new_i32();
28
-FqTOx 10 ..... 110100 00000 0 1000 0011 ..... @r_q2
20
29
-FxTOs 10 ..... 110100 00000 0 1000 0100 ..... @r_r2
21
tcg_gen_and_i32(tmp, arg[1].in, mask);
30
-FxTOd 10 ..... 110100 00000 0 1000 1000 ..... @d_r2
22
@@ -XXX,XX +XXX,XX @@ static void translate_call0(DisasContext *dc, const OpcodeArg arg[],
31
-FxTOq 10 ..... 110100 00000 0 1000 1100 ..... @q_r2
23
static void translate_callw(DisasContext *dc, const OpcodeArg arg[],
32
+FsTOx 10 ..... 110100 00000 0 1000 0001 ..... @d_r2
24
const uint32_t par[])
33
+FdTOx 10 ..... 110100 00000 0 1000 0010 ..... @d_d2
25
{
34
+FqTOx 10 ..... 110100 00000 0 1000 0011 ..... @d_q2
26
- TCGv_i32 tmp = tcg_const_i32(arg[0].imm);
35
+FxTOs 10 ..... 110100 00000 0 1000 0100 ..... @r_d2
27
+ TCGv_i32 tmp = tcg_constant_i32(arg[0].imm);
36
+FxTOd 10 ..... 110100 00000 0 1000 1000 ..... @d_d2
28
gen_callw_slot(dc, par[0], tmp, adjust_jump_slot(dc, arg[0].imm, 0));
37
+FxTOq 10 ..... 110100 00000 0 1000 1100 ..... @q_d2
29
}
38
FiTOs 10 ..... 110100 00000 0 1100 0100 ..... @r_r2
30
39
FdTOs 10 ..... 110100 00000 0 1100 0110 ..... @r_d2
31
@@ -XXX,XX +XXX,XX @@ static void translate_clrex(DisasContext *dc, const OpcodeArg arg[],
40
FqTOs 10 ..... 110100 00000 0 1100 0111 ..... @r_q2
32
static void translate_const16(DisasContext *dc, const OpcodeArg arg[],
33
const uint32_t par[])
34
{
35
- TCGv_i32 c = tcg_const_i32(arg[1].imm);
36
+ TCGv_i32 c = tcg_constant_i32(arg[1].imm);
37
38
tcg_gen_deposit_i32(arg[0].out, c, arg[0].in, 16, 16);
39
}
40
--
41
--
41
2.34.1
42
2.43.0
diff view generated by jsdifflib
1
Translators are no longer required to free tcg temporaries.
1
From: Mikael Szreder <git@miszr.win>
2
2
3
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
3
The gdbstub implementation for the Sparc architecture would
4
incorrectly calculate the the floating point register offset.
5
This resulted in, for example, registers f32 and f34 to point to
6
the same value.
7
8
The issue was caused by the confusion between even register numbers
9
and even register indexes. For example, the register index of f32 is 64
10
and f34 is 65.
11
12
Fixes: 30038fd81808 ("target-sparc: Change fpr representation to doubles.")
13
Signed-off-by: Mikael Szreder <git@miszr.win>
14
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
15
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
16
Message-ID: <20250214070343.11501-1-git@miszr.win>
5
---
17
---
6
target/i386/tcg/translate.c | 41 --------------------------------
18
target/sparc/gdbstub.c | 18 ++++++++++++++----
7
target/i386/tcg/decode-new.c.inc | 15 ------------
19
1 file changed, 14 insertions(+), 4 deletions(-)
8
target/i386/tcg/emit.c.inc | 6 -----
9
3 files changed, 62 deletions(-)
10
20
11
diff --git a/target/i386/tcg/translate.c b/target/i386/tcg/translate.c
21
diff --git a/target/sparc/gdbstub.c b/target/sparc/gdbstub.c
12
index XXXXXXX..XXXXXXX 100644
22
index XXXXXXX..XXXXXXX 100644
13
--- a/target/i386/tcg/translate.c
23
--- a/target/sparc/gdbstub.c
14
+++ b/target/i386/tcg/translate.c
24
+++ b/target/sparc/gdbstub.c
15
@@ -XXX,XX +XXX,XX @@ static void gen_compute_eflags(DisasContext *s)
25
@@ -XXX,XX +XXX,XX @@ int sparc_cpu_gdb_read_register(CPUState *cs, GByteArray *mem_buf, int n)
16
gen_update_cc_op(s);
17
gen_helper_cc_compute_all(cpu_cc_src, dst, src1, src2, cpu_cc_op);
18
set_cc_op(s, CC_OP_EFLAGS);
19
-
20
- if (dead) {
21
- tcg_temp_free(zero);
22
- }
23
}
24
25
typedef struct CCPrepare {
26
@@ -XXX,XX +XXX,XX @@ static void gen_shift_flags(DisasContext *s, MemOp ot, TCGv result,
27
} else {
28
tcg_gen_mov_tl(cpu_cc_src, shm1);
29
}
30
- tcg_temp_free(z_tl);
31
32
/* Get the two potential CC_OP values into temporaries. */
33
tcg_gen_movi_i32(s->tmp2_i32, (is_right ? CC_OP_SARB : CC_OP_SHLB) + ot);
34
@@ -XXX,XX +XXX,XX @@ static void gen_shift_flags(DisasContext *s, MemOp ot, TCGv result,
35
s32 = tcg_temp_new_i32();
36
tcg_gen_trunc_tl_i32(s32, count);
37
tcg_gen_movcond_i32(TCG_COND_NE, cpu_cc_op, s32, z32, s->tmp2_i32, oldop);
38
- tcg_temp_free_i32(z32);
39
- tcg_temp_free_i32(s32);
40
41
/* The CC_OP value is no longer predictable. */
42
set_cc_op(s, CC_OP_DYNAMIC);
43
@@ -XXX,XX +XXX,XX @@ static void gen_rot_rm_T1(DisasContext *s, MemOp ot, int op1, int is_right)
44
tcg_gen_movi_i32(s->tmp3_i32, CC_OP_EFLAGS);
45
tcg_gen_movcond_i32(TCG_COND_NE, cpu_cc_op, t1, t0,
46
s->tmp2_i32, s->tmp3_i32);
47
- tcg_temp_free_i32(t0);
48
- tcg_temp_free_i32(t1);
49
50
/* The CC_OP value is no longer predictable. */
51
set_cc_op(s, CC_OP_DYNAMIC);
52
@@ -XXX,XX +XXX,XX @@ static void gen_shiftd_rm_T1(DisasContext *s, MemOp ot, int op1,
53
gen_op_st_rm_T0_A0(s, ot, op1);
54
55
gen_shift_flags(s, ot, s->T0, s->tmp0, count, is_right);
56
- tcg_temp_free(count);
57
}
58
59
static void gen_shift(DisasContext *s1, int op, MemOp ot, int d, int s)
60
@@ -XXX,XX +XXX,XX @@ static void gen_cmovcc1(CPUX86State *env, DisasContext *s, MemOp ot, int b,
61
tcg_gen_movcond_tl(cc.cond, s->T0, cc.reg, cc.reg2,
62
s->T0, cpu_regs[reg]);
63
gen_op_mov_reg_v(s, ot, reg, s->T0);
64
-
65
- if (cc.mask != -1) {
66
- tcg_temp_free(cc.reg);
67
- }
68
- if (!cc.use_reg2) {
69
- tcg_temp_free(cc.reg2);
70
- }
71
}
72
73
static inline void gen_op_movl_T0_seg(DisasContext *s, X86Seg seg_reg)
74
@@ -XXX,XX +XXX,XX @@ static void gen_set_hflag(DisasContext *s, uint32_t mask)
75
tcg_gen_ld_i32(t, cpu_env, offsetof(CPUX86State, hflags));
76
tcg_gen_ori_i32(t, t, mask);
77
tcg_gen_st_i32(t, cpu_env, offsetof(CPUX86State, hflags));
78
- tcg_temp_free_i32(t);
79
s->flags |= mask;
80
}
81
}
82
@@ -XXX,XX +XXX,XX @@ static void gen_reset_hflag(DisasContext *s, uint32_t mask)
83
tcg_gen_ld_i32(t, cpu_env, offsetof(CPUX86State, hflags));
84
tcg_gen_andi_i32(t, t, ~mask);
85
tcg_gen_st_i32(t, cpu_env, offsetof(CPUX86State, hflags));
86
- tcg_temp_free_i32(t);
87
s->flags &= ~mask;
88
}
89
}
90
@@ -XXX,XX +XXX,XX @@ static void gen_set_eflags(DisasContext *s, target_ulong mask)
91
tcg_gen_ld_tl(t, cpu_env, offsetof(CPUX86State, eflags));
92
tcg_gen_ori_tl(t, t, mask);
93
tcg_gen_st_tl(t, cpu_env, offsetof(CPUX86State, eflags));
94
- tcg_temp_free(t);
95
}
96
97
static void gen_reset_eflags(DisasContext *s, target_ulong mask)
98
@@ -XXX,XX +XXX,XX @@ static void gen_reset_eflags(DisasContext *s, target_ulong mask)
99
tcg_gen_ld_tl(t, cpu_env, offsetof(CPUX86State, eflags));
100
tcg_gen_andi_tl(t, t, ~mask);
101
tcg_gen_st_tl(t, cpu_env, offsetof(CPUX86State, eflags));
102
- tcg_temp_free(t);
103
}
104
105
/* Clear BND registers during legacy branches. */
106
@@ -XXX,XX +XXX,XX @@ static void gen_cmpxchg8b(DisasContext *s, CPUX86State *env, int modrm)
107
tcg_gen_nonatomic_cmpxchg_i64(old, s->A0, cmp, val,
108
s->mem_index, MO_TEUQ);
109
}
110
- tcg_temp_free_i64(val);
111
112
/* Set tmp0 to match the required value of Z. */
113
tcg_gen_setcond_i64(TCG_COND_EQ, cmp, old, cmp);
114
Z = tcg_temp_new();
115
tcg_gen_trunc_i64_tl(Z, cmp);
116
- tcg_temp_free_i64(cmp);
117
118
/*
119
* Extract the result values for the register pair.
120
@@ -XXX,XX +XXX,XX @@ static void gen_cmpxchg8b(DisasContext *s, CPUX86State *env, int modrm)
121
tcg_gen_movcond_tl(TCG_COND_EQ, cpu_regs[R_EDX], Z, zero,
122
s->T1, cpu_regs[R_EDX]);
123
}
124
- tcg_temp_free_i64(old);
125
126
/* Update Z. */
127
gen_compute_eflags(s);
128
tcg_gen_deposit_tl(cpu_cc_src, cpu_cc_src, Z, ctz32(CC_Z), 1);
129
- tcg_temp_free(Z);
130
}
131
132
#ifdef TARGET_X86_64
133
@@ -XXX,XX +XXX,XX @@ static void gen_cmpxchg16b(DisasContext *s, CPUX86State *env, int modrm)
134
}
135
136
tcg_gen_extr_i128_i64(s->T0, s->T1, val);
137
- tcg_temp_free_i128(cmp);
138
- tcg_temp_free_i128(val);
139
140
/* Determine success after the fact. */
141
t0 = tcg_temp_new_i64();
142
@@ -XXX,XX +XXX,XX @@ static void gen_cmpxchg16b(DisasContext *s, CPUX86State *env, int modrm)
143
tcg_gen_xor_i64(t0, s->T0, cpu_regs[R_EAX]);
144
tcg_gen_xor_i64(t1, s->T1, cpu_regs[R_EDX]);
145
tcg_gen_or_i64(t0, t0, t1);
146
- tcg_temp_free_i64(t1);
147
148
/* Update Z. */
149
gen_compute_eflags(s);
150
tcg_gen_setcondi_i64(TCG_COND_EQ, t0, t0, 0);
151
tcg_gen_deposit_tl(cpu_cc_src, cpu_cc_src, t0, ctz32(CC_Z), 1);
152
- tcg_temp_free_i64(t0);
153
154
/*
155
* Extract the result values for the register pair. We may do this
156
@@ -XXX,XX +XXX,XX @@ static bool disas_insn(DisasContext *s, CPUState *cpu)
157
tcg_gen_neg_tl(t1, t0);
158
tcg_gen_atomic_cmpxchg_tl(t0, a0, t0, t1,
159
s->mem_index, ot | MO_LE);
160
- tcg_temp_free(t1);
161
tcg_gen_brcond_tl(TCG_COND_NE, t0, t2, label1);
162
163
- tcg_temp_free(t2);
164
tcg_gen_neg_tl(s->T0, t0);
165
} else {
166
tcg_gen_neg_tl(s->T0, s->T0);
167
@@ -XXX,XX +XXX,XX @@ static bool disas_insn(DisasContext *s, CPUState *cpu)
168
tcg_gen_mov_tl(s->cc_srcT, cmpv);
169
tcg_gen_sub_tl(cpu_cc_dst, cmpv, oldv);
170
set_cc_op(s, CC_OP_SUBB + ot);
171
- tcg_temp_free(oldv);
172
- tcg_temp_free(newv);
173
- tcg_temp_free(cmpv);
174
}
175
break;
176
case 0x1c7: /* cmpxchg8b */
177
@@ -XXX,XX +XXX,XX @@ static bool disas_insn(DisasContext *s, CPUState *cpu)
178
if (shift) {
179
TCGv imm = tcg_const_tl(x86_ldub_code(env, s));
180
gen_shiftd_rm_T1(s, ot, opreg, op, imm);
181
- tcg_temp_free(imm);
182
} else {
183
gen_shiftd_rm_T1(s, ot, opreg, op, cpu_regs[R_ECX]);
184
}
185
@@ -XXX,XX +XXX,XX @@ static bool disas_insn(DisasContext *s, CPUState *cpu)
186
tcg_gen_st_tl(last_addr, cpu_env,
187
offsetof(CPUX86State, fpdp));
188
}
189
- tcg_temp_free(last_addr);
190
} else {
191
/* register float ops */
192
opreg = rm;
193
@@ -XXX,XX +XXX,XX @@ static bool disas_insn(DisasContext *s, CPUState *cpu)
194
gen_compute_eflags(s);
195
tcg_gen_andi_tl(cpu_cc_src, cpu_cc_src, ~CC_Z);
196
tcg_gen_or_tl(cpu_cc_src, cpu_cc_src, t2);
197
- tcg_temp_free(t0);
198
- tcg_temp_free(t1);
199
- tcg_temp_free(t2);
200
}
201
break;
202
case 0x102: /* lar */
203
@@ -XXX,XX +XXX,XX @@ static bool disas_insn(DisasContext *s, CPUState *cpu)
204
gen_op_mov_reg_v(s, ot, reg, t0);
205
gen_set_label(label1);
206
set_cc_op(s, CC_OP_EFLAGS);
207
- tcg_temp_free(t0);
208
}
209
break;
210
case 0x118:
211
@@ -XXX,XX +XXX,XX @@ static bool disas_insn(DisasContext *s, CPUState *cpu)
212
TCGv_i64 notu = tcg_temp_new_i64();
213
tcg_gen_not_i64(notu, cpu_bndu[reg]);
214
gen_bndck(env, s, modrm, TCG_COND_GTU, notu);
215
- tcg_temp_free_i64(notu);
216
} else if (prefixes & PREFIX_DATA) {
217
/* bndmov -- from reg/mem */
218
if (reg >= 4 || s->aflag == MO_16) {
219
diff --git a/target/i386/tcg/decode-new.c.inc b/target/i386/tcg/decode-new.c.inc
220
index XXXXXXX..XXXXXXX 100644
221
--- a/target/i386/tcg/decode-new.c.inc
222
+++ b/target/i386/tcg/decode-new.c.inc
223
@@ -XXX,XX +XXX,XX @@ illegal:
224
return false;
225
}
226
227
-static void decode_temp_free(X86DecodedOp *op)
228
-{
229
- if (op->v_ptr) {
230
- tcg_temp_free_ptr(op->v_ptr);
231
- }
232
-}
233
-
234
-static void decode_temps_free(X86DecodedInsn *decode)
235
-{
236
- decode_temp_free(&decode->op[0]);
237
- decode_temp_free(&decode->op[1]);
238
- decode_temp_free(&decode->op[2]);
239
-}
240
-
241
/*
242
* Convert one instruction. s->base.is_jmp is set if the translation must
243
* be stopped.
244
@@ -XXX,XX +XXX,XX @@ static void disas_insn_new(DisasContext *s, CPUState *cpu, int b)
245
decode.e.gen(s, env, &decode);
246
gen_writeback(s, &decode, 0, s->T0);
247
}
248
- decode_temps_free(&decode);
249
return;
250
illegal_op:
251
gen_illegal_opcode(s);
252
diff --git a/target/i386/tcg/emit.c.inc b/target/i386/tcg/emit.c.inc
253
index XXXXXXX..XXXXXXX 100644
254
--- a/target/i386/tcg/emit.c.inc
255
+++ b/target/i386/tcg/emit.c.inc
256
@@ -XXX,XX +XXX,XX @@ static inline void gen_ternary_sse(DisasContext *s, CPUX86State *env, X86Decoded
257
/* The format of the fourth input is Lx */
258
tcg_gen_addi_ptr(ptr3, cpu_env, ZMM_OFFSET(op3));
259
fn(cpu_env, OP_PTR0, OP_PTR1, OP_PTR2, ptr3);
260
- tcg_temp_free_ptr(ptr3);
261
}
262
#define TERNARY_SSE(uname, uvname, lname) \
263
static void gen_##uvname(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode) \
264
@@ -XXX,XX +XXX,XX @@ static inline void gen_vsib_avx(DisasContext *s, CPUX86State *env, X86DecodedIns
265
int ymmh_ofs = vector_elem_offset(&decode->op[1], MO_128, 1);
266
tcg_gen_gvec_dup_imm(MO_64, ymmh_ofs, 16, 16, 0);
267
}
268
- tcg_temp_free_ptr(index);
269
}
270
#define VSIB_AVX(uname, lname) \
271
static void gen_##uname(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode) \
272
@@ -XXX,XX +XXX,XX @@ static void gen_PMOVMSKB(DisasContext *s, CPUX86State *env, X86DecodedInsn *deco
273
tcg_gen_deposit_tl(s->T0, t, s->T0, 8, TARGET_LONG_BITS - 8);
274
}
26
}
275
}
27
}
276
- tcg_temp_free(t);
28
if (n < 80) {
277
}
29
- /* f32-f62 (double width, even numbers only) */
278
30
- return gdb_get_reg64(mem_buf, env->fpr[(n - 32) / 2].ll);
279
static void gen_PSHUFW(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode)
31
+ /* f32-f62 (16 double width registers, even register numbers only)
280
@@ -XXX,XX +XXX,XX @@ static void gen_PSRLDQ_i(DisasContext *s, CPUX86State *env, X86DecodedInsn *deco
32
+ * n == 64: f32 : env->fpr[16]
33
+ * n == 65: f34 : env->fpr[17]
34
+ * etc...
35
+ * n == 79: f62 : env->fpr[31]
36
+ */
37
+ return gdb_get_reg64(mem_buf, env->fpr[(n - 64) + 16].ll);
38
}
39
switch (n) {
40
case 80:
41
@@ -XXX,XX +XXX,XX @@ int sparc_cpu_gdb_write_register(CPUState *cs, uint8_t *mem_buf, int n)
42
}
43
return 4;
44
} else if (n < 80) {
45
- /* f32-f62 (double width, even numbers only) */
46
- env->fpr[(n - 32) / 2].ll = tmp;
47
+ /* f32-f62 (16 double width registers, even register numbers only)
48
+ * n == 64: f32 : env->fpr[16]
49
+ * n == 65: f34 : env->fpr[17]
50
+ * etc...
51
+ * n == 79: f62 : env->fpr[31]
52
+ */
53
+ env->fpr[(n - 64) + 16].ll = tmp;
281
} else {
54
} else {
282
gen_helper_psrldq_xmm(cpu_env, OP_PTR0, OP_PTR1, imm_vec);
55
switch (n) {
283
}
56
case 80:
284
- tcg_temp_free_ptr(imm_vec);
285
}
286
287
static void gen_PSLLDQ_i(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode)
288
@@ -XXX,XX +XXX,XX @@ static void gen_PSLLDQ_i(DisasContext *s, CPUX86State *env, X86DecodedInsn *deco
289
} else {
290
gen_helper_pslldq_xmm(cpu_env, OP_PTR0, OP_PTR1, imm_vec);
291
}
292
- tcg_temp_free_ptr(imm_vec);
293
}
294
295
static void gen_RORX(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode)
296
@@ -XXX,XX +XXX,XX @@ static void gen_VZEROALL(DisasContext *s, CPUX86State *env, X86DecodedInsn *deco
297
tcg_gen_addi_ptr(ptr, cpu_env, offsetof(CPUX86State, xmm_t0));
298
gen_helper_memset(ptr, ptr, tcg_constant_i32(0),
299
tcg_constant_ptr(CPU_NB_REGS * sizeof(ZMMReg)));
300
- tcg_temp_free_ptr(ptr);
301
}
302
303
static void gen_VZEROUPPER(DisasContext *s, CPUX86State *env, X86DecodedInsn *decode)
304
--
57
--
305
2.34.1
58
2.43.0
diff view generated by jsdifflib
Deleted patch
1
Translators are no longer required to free tcg temporaries.
2
1
3
Reviewed-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
5
---
6
target/mips/tcg/mips16e_translate.c.inc | 6 ------
7
1 file changed, 6 deletions(-)
8
9
diff --git a/target/mips/tcg/mips16e_translate.c.inc b/target/mips/tcg/mips16e_translate.c.inc
10
index XXXXXXX..XXXXXXX 100644
11
--- a/target/mips/tcg/mips16e_translate.c.inc
12
+++ b/target/mips/tcg/mips16e_translate.c.inc
13
@@ -XXX,XX +XXX,XX @@ static void gen_mips16_save(DisasContext *ctx,
14
15
tcg_gen_movi_tl(t2, -framesize);
16
gen_op_addr_add(ctx, cpu_gpr[29], cpu_gpr[29], t2);
17
- tcg_temp_free(t0);
18
- tcg_temp_free(t1);
19
- tcg_temp_free(t2);
20
}
21
22
static void gen_mips16_restore(DisasContext *ctx,
23
@@ -XXX,XX +XXX,XX @@ static void gen_mips16_restore(DisasContext *ctx,
24
25
tcg_gen_movi_tl(t2, framesize);
26
gen_op_addr_add(ctx, cpu_gpr[29], cpu_gpr[29], t2);
27
- tcg_temp_free(t0);
28
- tcg_temp_free(t1);
29
- tcg_temp_free(t2);
30
}
31
32
#if defined(TARGET_MIPS64)
33
--
34
2.34.1
diff view generated by jsdifflib
Deleted patch
1
Translators are no longer required to free tcg temporaries.
2
1
3
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
5
---
6
target/tricore/translate.c | 540 +------------------------------------
7
1 file changed, 4 insertions(+), 536 deletions(-)
8
9
diff --git a/target/tricore/translate.c b/target/tricore/translate.c
10
index XXXXXXX..XXXXXXX 100644
11
--- a/target/tricore/translate.c
12
+++ b/target/tricore/translate.c
13
@@ -XXX,XX +XXX,XX @@ void tricore_cpu_dump_state(CPUState *cs, FILE *f, int flags)
14
#define gen_helper_1arg(name, arg) do { \
15
TCGv_i32 helper_tmp = tcg_const_i32(arg); \
16
gen_helper_##name(cpu_env, helper_tmp); \
17
- tcg_temp_free_i32(helper_tmp); \
18
} while (0)
19
20
#define GEN_HELPER_LL(name, ret, arg0, arg1, n) do { \
21
@@ -XXX,XX +XXX,XX @@ void tricore_cpu_dump_state(CPUState *cs, FILE *f, int flags)
22
tcg_gen_ext16s_tl(arg01, arg0); \
23
tcg_gen_ext16s_tl(arg11, arg1); \
24
gen_helper_##name(ret, arg00, arg01, arg11, arg11, n); \
25
- tcg_temp_free(arg00); \
26
- tcg_temp_free(arg01); \
27
- tcg_temp_free(arg11); \
28
} while (0)
29
30
#define GEN_HELPER_LU(name, ret, arg0, arg1, n) do { \
31
@@ -XXX,XX +XXX,XX @@ void tricore_cpu_dump_state(CPUState *cs, FILE *f, int flags)
32
tcg_gen_sari_tl(arg11, arg1, 16); \
33
tcg_gen_ext16s_tl(arg10, arg1); \
34
gen_helper_##name(ret, arg00, arg01, arg10, arg11, n); \
35
- tcg_temp_free(arg00); \
36
- tcg_temp_free(arg01); \
37
- tcg_temp_free(arg10); \
38
- tcg_temp_free(arg11); \
39
} while (0)
40
41
#define GEN_HELPER_UL(name, ret, arg0, arg1, n) do { \
42
@@ -XXX,XX +XXX,XX @@ void tricore_cpu_dump_state(CPUState *cs, FILE *f, int flags)
43
tcg_gen_sari_tl(arg10, arg1, 16); \
44
tcg_gen_ext16s_tl(arg11, arg1); \
45
gen_helper_##name(ret, arg00, arg01, arg10, arg11, n); \
46
- tcg_temp_free(arg00); \
47
- tcg_temp_free(arg01); \
48
- tcg_temp_free(arg10); \
49
- tcg_temp_free(arg11); \
50
} while (0)
51
52
#define GEN_HELPER_UU(name, ret, arg0, arg1, n) do { \
53
@@ -XXX,XX +XXX,XX @@ void tricore_cpu_dump_state(CPUState *cs, FILE *f, int flags)
54
tcg_gen_ext16s_tl(arg00, arg0); \
55
tcg_gen_sari_tl(arg11, arg1, 16); \
56
gen_helper_##name(ret, arg00, arg01, arg11, arg11, n); \
57
- tcg_temp_free(arg00); \
58
- tcg_temp_free(arg01); \
59
- tcg_temp_free(arg11); \
60
} while (0)
61
62
#define GEN_HELPER_RRR(name, rl, rh, al1, ah1, arg2) do { \
63
@@ -XXX,XX +XXX,XX @@ void tricore_cpu_dump_state(CPUState *cs, FILE *f, int flags)
64
tcg_gen_concat_i32_i64(arg1, al1, ah1); \
65
gen_helper_##name(ret, arg1, arg2); \
66
tcg_gen_extr_i64_i32(rl, rh, ret); \
67
- \
68
- tcg_temp_free_i64(ret); \
69
- tcg_temp_free_i64(arg1); \
70
} while (0)
71
72
#define GEN_HELPER_RR(name, rl, rh, arg1, arg2) do { \
73
@@ -XXX,XX +XXX,XX @@ void tricore_cpu_dump_state(CPUState *cs, FILE *f, int flags)
74
\
75
gen_helper_##name(ret, cpu_env, arg1, arg2); \
76
tcg_gen_extr_i64_i32(rl, rh, ret); \
77
- \
78
- tcg_temp_free_i64(ret); \
79
} while (0)
80
81
#define EA_ABS_FORMAT(con) (((con & 0x3C000) << 14) + (con & 0x3FFF))
82
@@ -XXX,XX +XXX,XX @@ static inline void gen_offset_ld(DisasContext *ctx, TCGv r1, TCGv r2,
83
TCGv temp = tcg_temp_new();
84
tcg_gen_addi_tl(temp, r2, con);
85
tcg_gen_qemu_ld_tl(r1, temp, ctx->mem_idx, mop);
86
- tcg_temp_free(temp);
87
}
88
89
static inline void gen_offset_st(DisasContext *ctx, TCGv r1, TCGv r2,
90
@@ -XXX,XX +XXX,XX @@ static inline void gen_offset_st(DisasContext *ctx, TCGv r1, TCGv r2,
91
TCGv temp = tcg_temp_new();
92
tcg_gen_addi_tl(temp, r2, con);
93
tcg_gen_qemu_st_tl(r1, temp, ctx->mem_idx, mop);
94
- tcg_temp_free(temp);
95
}
96
97
static void gen_st_2regs_64(TCGv rh, TCGv rl, TCGv address, DisasContext *ctx)
98
@@ -XXX,XX +XXX,XX @@ static void gen_st_2regs_64(TCGv rh, TCGv rl, TCGv address, DisasContext *ctx)
99
100
tcg_gen_concat_i32_i64(temp, rl, rh);
101
tcg_gen_qemu_st_i64(temp, address, ctx->mem_idx, MO_LEUQ);
102
-
103
- tcg_temp_free_i64(temp);
104
}
105
106
static void gen_offset_st_2regs(TCGv rh, TCGv rl, TCGv base, int16_t con,
107
@@ -XXX,XX +XXX,XX @@ static void gen_offset_st_2regs(TCGv rh, TCGv rl, TCGv base, int16_t con,
108
TCGv temp = tcg_temp_new();
109
tcg_gen_addi_tl(temp, base, con);
110
gen_st_2regs_64(rh, rl, temp, ctx);
111
- tcg_temp_free(temp);
112
}
113
114
static void gen_ld_2regs_64(TCGv rh, TCGv rl, TCGv address, DisasContext *ctx)
115
@@ -XXX,XX +XXX,XX @@ static void gen_ld_2regs_64(TCGv rh, TCGv rl, TCGv address, DisasContext *ctx)
116
tcg_gen_qemu_ld_i64(temp, address, ctx->mem_idx, MO_LEUQ);
117
/* write back to two 32 bit regs */
118
tcg_gen_extr_i64_i32(rl, rh, temp);
119
-
120
- tcg_temp_free_i64(temp);
121
}
122
123
static void gen_offset_ld_2regs(TCGv rh, TCGv rl, TCGv base, int16_t con,
124
@@ -XXX,XX +XXX,XX @@ static void gen_offset_ld_2regs(TCGv rh, TCGv rl, TCGv base, int16_t con,
125
TCGv temp = tcg_temp_new();
126
tcg_gen_addi_tl(temp, base, con);
127
gen_ld_2regs_64(rh, rl, temp, ctx);
128
- tcg_temp_free(temp);
129
}
130
131
static void gen_st_preincr(DisasContext *ctx, TCGv r1, TCGv r2, int16_t off,
132
@@ -XXX,XX +XXX,XX @@ static void gen_st_preincr(DisasContext *ctx, TCGv r1, TCGv r2, int16_t off,
133
tcg_gen_addi_tl(temp, r2, off);
134
tcg_gen_qemu_st_tl(r1, temp, ctx->mem_idx, mop);
135
tcg_gen_mov_tl(r2, temp);
136
- tcg_temp_free(temp);
137
}
138
139
static void gen_ld_preincr(DisasContext *ctx, TCGv r1, TCGv r2, int16_t off,
140
@@ -XXX,XX +XXX,XX @@ static void gen_ld_preincr(DisasContext *ctx, TCGv r1, TCGv r2, int16_t off,
141
tcg_gen_addi_tl(temp, r2, off);
142
tcg_gen_qemu_ld_tl(r1, temp, ctx->mem_idx, mop);
143
tcg_gen_mov_tl(r2, temp);
144
- tcg_temp_free(temp);
145
}
146
147
/* M(EA, word) = (M(EA, word) & ~E[a][63:32]) | (E[a][31:0] & E[a][63:32]); */
148
@@ -XXX,XX +XXX,XX @@ static void gen_ldmst(DisasContext *ctx, int ereg, TCGv ea)
149
tcg_gen_or_tl(temp, temp, temp2);
150
/* M(EA, word) = temp; */
151
tcg_gen_qemu_st_tl(temp, ea, ctx->mem_idx, MO_LEUL);
152
-
153
- tcg_temp_free(temp);
154
- tcg_temp_free(temp2);
155
}
156
157
/* tmp = M(EA, word);
158
@@ -XXX,XX +XXX,XX @@ static void gen_swap(DisasContext *ctx, int reg, TCGv ea)
159
tcg_gen_qemu_ld_tl(temp, ea, ctx->mem_idx, MO_LEUL);
160
tcg_gen_qemu_st_tl(cpu_gpr_d[reg], ea, ctx->mem_idx, MO_LEUL);
161
tcg_gen_mov_tl(cpu_gpr_d[reg], temp);
162
-
163
- tcg_temp_free(temp);
164
}
165
166
static void gen_cmpswap(DisasContext *ctx, int reg, TCGv ea)
167
@@ -XXX,XX +XXX,XX @@ static void gen_cmpswap(DisasContext *ctx, int reg, TCGv ea)
168
cpu_gpr_d[reg], temp);
169
tcg_gen_qemu_st_tl(temp2, ea, ctx->mem_idx, MO_LEUL);
170
tcg_gen_mov_tl(cpu_gpr_d[reg], temp);
171
-
172
- tcg_temp_free(temp);
173
- tcg_temp_free(temp2);
174
}
175
176
static void gen_swapmsk(DisasContext *ctx, int reg, TCGv ea)
177
@@ -XXX,XX +XXX,XX @@ static void gen_swapmsk(DisasContext *ctx, int reg, TCGv ea)
178
tcg_gen_or_tl(temp2, temp2, temp3);
179
tcg_gen_qemu_st_tl(temp2, ea, ctx->mem_idx, MO_LEUL);
180
tcg_gen_mov_tl(cpu_gpr_d[reg], temp);
181
-
182
- tcg_temp_free(temp);
183
- tcg_temp_free(temp2);
184
- tcg_temp_free(temp3);
185
}
186
187
188
@@ -XXX,XX +XXX,XX @@ static inline void gen_add_d(TCGv ret, TCGv r1, TCGv r2)
189
tcg_gen_or_tl(cpu_PSW_SAV, cpu_PSW_SAV, cpu_PSW_AV);
190
/* write back result */
191
tcg_gen_mov_tl(ret, result);
192
-
193
- tcg_temp_free(result);
194
- tcg_temp_free(t0);
195
}
196
197
static inline void
198
@@ -XXX,XX +XXX,XX @@ gen_add64_d(TCGv_i64 ret, TCGv_i64 r1, TCGv_i64 r2)
199
tcg_gen_or_tl(cpu_PSW_SAV, cpu_PSW_SAV, cpu_PSW_AV);
200
/* write back result */
201
tcg_gen_mov_i64(ret, result);
202
-
203
- tcg_temp_free(temp);
204
- tcg_temp_free_i64(result);
205
- tcg_temp_free_i64(t0);
206
- tcg_temp_free_i64(t1);
207
}
208
209
static inline void
210
@@ -XXX,XX +XXX,XX @@ gen_addsub64_h(TCGv ret_low, TCGv ret_high, TCGv r1_low, TCGv r1_high, TCGv r2,
211
tcg_gen_or_tl(cpu_PSW_AV, cpu_PSW_AV, temp);
212
/* calc SAV bit */
213
tcg_gen_or_tl(cpu_PSW_SAV, cpu_PSW_SAV, cpu_PSW_AV);
214
-
215
- tcg_temp_free(temp);
216
- tcg_temp_free(temp2);
217
- tcg_temp_free(temp3);
218
- tcg_temp_free(temp4);
219
}
220
221
/* ret = r2 + (r1 * r3); */
222
@@ -XXX,XX +XXX,XX @@ static inline void gen_madd32_d(TCGv ret, TCGv r1, TCGv r2, TCGv r3)
223
tcg_gen_xor_tl(cpu_PSW_AV, ret, cpu_PSW_AV);
224
/* calc SAV */
225
tcg_gen_or_tl(cpu_PSW_SAV, cpu_PSW_SAV, cpu_PSW_AV);
226
-
227
- tcg_temp_free_i64(t1);
228
- tcg_temp_free_i64(t2);
229
- tcg_temp_free_i64(t3);
230
}
231
232
static inline void gen_maddi32_d(TCGv ret, TCGv r1, TCGv r2, int32_t con)
233
{
234
TCGv temp = tcg_const_i32(con);
235
gen_madd32_d(ret, r1, r2, temp);
236
- tcg_temp_free(temp);
237
}
238
239
static inline void
240
@@ -XXX,XX +XXX,XX @@ gen_madd64_d(TCGv ret_low, TCGv ret_high, TCGv r1, TCGv r2_low, TCGv r2_high,
241
/* write back the result */
242
tcg_gen_mov_tl(ret_low, t3);
243
tcg_gen_mov_tl(ret_high, t4);
244
-
245
- tcg_temp_free(t1);
246
- tcg_temp_free(t2);
247
- tcg_temp_free(t3);
248
- tcg_temp_free(t4);
249
}
250
251
static inline void
252
@@ -XXX,XX +XXX,XX @@ gen_maddu64_d(TCGv ret_low, TCGv ret_high, TCGv r1, TCGv r2_low, TCGv r2_high,
253
tcg_gen_xor_tl(cpu_PSW_AV, ret_high, cpu_PSW_AV);
254
/* calc SAV */
255
tcg_gen_or_tl(cpu_PSW_SAV, cpu_PSW_SAV, cpu_PSW_AV);
256
-
257
- tcg_temp_free_i64(t1);
258
- tcg_temp_free_i64(t2);
259
- tcg_temp_free_i64(t3);
260
}
261
262
static inline void
263
@@ -XXX,XX +XXX,XX @@ gen_maddi64_d(TCGv ret_low, TCGv ret_high, TCGv r1, TCGv r2_low, TCGv r2_high,
264
{
265
TCGv temp = tcg_const_i32(con);
266
gen_madd64_d(ret_low, ret_high, r1, r2_low, r2_high, temp);
267
- tcg_temp_free(temp);
268
}
269
270
static inline void
271
@@ -XXX,XX +XXX,XX @@ gen_maddui64_d(TCGv ret_low, TCGv ret_high, TCGv r1, TCGv r2_low, TCGv r2_high,
272
{
273
TCGv temp = tcg_const_i32(con);
274
gen_maddu64_d(ret_low, ret_high, r1, r2_low, r2_high, temp);
275
- tcg_temp_free(temp);
276
}
277
278
static inline void
279
@@ -XXX,XX +XXX,XX @@ gen_madd_h(TCGv ret_low, TCGv ret_high, TCGv r1_low, TCGv r1_high, TCGv r2,
280
tcg_gen_extr_i64_i32(temp, temp2, temp64);
281
gen_addsub64_h(ret_low, ret_high, r1_low, r1_high, temp, temp2,
282
tcg_gen_add_tl, tcg_gen_add_tl);
283
- tcg_temp_free(temp);
284
- tcg_temp_free(temp2);
285
- tcg_temp_free_i64(temp64);
286
}
287
288
static inline void
289
@@ -XXX,XX +XXX,XX @@ gen_maddsu_h(TCGv ret_low, TCGv ret_high, TCGv r1_low, TCGv r1_high, TCGv r2,
290
tcg_gen_extr_i64_i32(temp, temp2, temp64);
291
gen_addsub64_h(ret_low, ret_high, r1_low, r1_high, temp, temp2,
292
tcg_gen_sub_tl, tcg_gen_add_tl);
293
- tcg_temp_free(temp);
294
- tcg_temp_free(temp2);
295
- tcg_temp_free_i64(temp64);
296
}
297
298
static inline void
299
@@ -XXX,XX +XXX,XX @@ gen_maddsum_h(TCGv ret_low, TCGv ret_high, TCGv r1_low, TCGv r1_high, TCGv r2,
300
gen_add64_d(temp64_2, temp64_3, temp64);
301
/* write back result */
302
tcg_gen_extr_i64_i32(ret_low, ret_high, temp64_2);
303
-
304
- tcg_temp_free(temp);
305
- tcg_temp_free_i64(temp64);
306
- tcg_temp_free_i64(temp64_2);
307
- tcg_temp_free_i64(temp64_3);
308
}
309
310
static inline void gen_adds(TCGv ret, TCGv r1, TCGv r2);
311
@@ -XXX,XX +XXX,XX @@ gen_madds_h(TCGv ret_low, TCGv ret_high, TCGv r1_low, TCGv r1_high, TCGv r2,
312
tcg_gen_or_tl(cpu_PSW_V, cpu_PSW_V, temp);
313
/* combine av bits */
314
tcg_gen_or_tl(cpu_PSW_AV, cpu_PSW_AV, temp3);
315
-
316
- tcg_temp_free(temp);
317
- tcg_temp_free(temp2);
318
- tcg_temp_free(temp3);
319
- tcg_temp_free_i64(temp64);
320
-
321
}
322
323
static inline void gen_subs(TCGv ret, TCGv r1, TCGv r2);
324
@@ -XXX,XX +XXX,XX @@ gen_maddsus_h(TCGv ret_low, TCGv ret_high, TCGv r1_low, TCGv r1_high, TCGv r2,
325
tcg_gen_or_tl(cpu_PSW_V, cpu_PSW_V, temp);
326
/* combine av bits */
327
tcg_gen_or_tl(cpu_PSW_AV, cpu_PSW_AV, temp3);
328
-
329
- tcg_temp_free(temp);
330
- tcg_temp_free(temp2);
331
- tcg_temp_free(temp3);
332
- tcg_temp_free_i64(temp64);
333
-
334
}
335
336
static inline void
337
@@ -XXX,XX +XXX,XX @@ gen_maddsums_h(TCGv ret_low, TCGv ret_high, TCGv r1_low, TCGv r1_high, TCGv r2,
338
339
gen_helper_add64_ssov(temp64, cpu_env, temp64_2, temp64);
340
tcg_gen_extr_i64_i32(ret_low, ret_high, temp64);
341
-
342
- tcg_temp_free(temp);
343
- tcg_temp_free_i64(temp64);
344
- tcg_temp_free_i64(temp64_2);
345
}
346
347
348
@@ -XXX,XX +XXX,XX @@ gen_maddm_h(TCGv ret_low, TCGv ret_high, TCGv r1_low, TCGv r1_high, TCGv r2,
349
gen_add64_d(temp64_3, temp64_2, temp64);
350
/* write back result */
351
tcg_gen_extr_i64_i32(ret_low, ret_high, temp64_3);
352
-
353
- tcg_temp_free(temp);
354
- tcg_temp_free_i64(temp64);
355
- tcg_temp_free_i64(temp64_2);
356
- tcg_temp_free_i64(temp64_3);
357
}
358
359
static inline void
360
@@ -XXX,XX +XXX,XX @@ gen_maddms_h(TCGv ret_low, TCGv ret_high, TCGv r1_low, TCGv r1_high, TCGv r2,
361
tcg_gen_concat_i32_i64(temp64_2, r1_low, r1_high);
362
gen_helper_add64_ssov(temp64, cpu_env, temp64_2, temp64);
363
tcg_gen_extr_i64_i32(ret_low, ret_high, temp64);
364
-
365
- tcg_temp_free(temp);
366
- tcg_temp_free_i64(temp64);
367
- tcg_temp_free_i64(temp64_2);
368
}
369
370
static inline void
371
@@ -XXX,XX +XXX,XX @@ gen_maddr64_h(TCGv ret, TCGv r1_low, TCGv r1_high, TCGv r2, TCGv r3, uint32_t n,
372
break;
373
}
374
gen_helper_addr_h(ret, cpu_env, temp64, r1_low, r1_high);
375
-
376
- tcg_temp_free(temp);
377
- tcg_temp_free_i64(temp64);
378
}
379
380
static inline void
381
@@ -XXX,XX +XXX,XX @@ gen_maddr32_h(TCGv ret, TCGv r1, TCGv r2, TCGv r3, uint32_t n, uint32_t mode)
382
tcg_gen_andi_tl(temp2, r1, 0xffff0000);
383
tcg_gen_shli_tl(temp, r1, 16);
384
gen_maddr64_h(ret, temp, temp2, r2, r3, n, mode);
385
-
386
- tcg_temp_free(temp);
387
- tcg_temp_free(temp2);
388
}
389
390
static inline void
391
@@ -XXX,XX +XXX,XX @@ gen_maddsur32_h(TCGv ret, TCGv r1, TCGv r2, TCGv r3, uint32_t n, uint32_t mode)
392
tcg_gen_andi_tl(temp2, r1, 0xffff0000);
393
tcg_gen_shli_tl(temp, r1, 16);
394
gen_helper_addsur_h(ret, cpu_env, temp64, temp, temp2);
395
-
396
- tcg_temp_free(temp);
397
- tcg_temp_free(temp2);
398
- tcg_temp_free_i64(temp64);
399
}
400
401
402
@@ -XXX,XX +XXX,XX @@ gen_maddr64s_h(TCGv ret, TCGv r1_low, TCGv r1_high, TCGv r2, TCGv r3,
403
break;
404
}
405
gen_helper_addr_h_ssov(ret, cpu_env, temp64, r1_low, r1_high);
406
-
407
- tcg_temp_free(temp);
408
- tcg_temp_free_i64(temp64);
409
}
410
411
static inline void
412
@@ -XXX,XX +XXX,XX @@ gen_maddr32s_h(TCGv ret, TCGv r1, TCGv r2, TCGv r3, uint32_t n, uint32_t mode)
413
tcg_gen_andi_tl(temp2, r1, 0xffff0000);
414
tcg_gen_shli_tl(temp, r1, 16);
415
gen_maddr64s_h(ret, temp, temp2, r2, r3, n, mode);
416
-
417
- tcg_temp_free(temp);
418
- tcg_temp_free(temp2);
419
}
420
421
static inline void
422
@@ -XXX,XX +XXX,XX @@ gen_maddsur32s_h(TCGv ret, TCGv r1, TCGv r2, TCGv r3, uint32_t n, uint32_t mode)
423
tcg_gen_andi_tl(temp2, r1, 0xffff0000);
424
tcg_gen_shli_tl(temp, r1, 16);
425
gen_helper_addsur_h_ssov(ret, cpu_env, temp64, temp, temp2);
426
-
427
- tcg_temp_free(temp);
428
- tcg_temp_free(temp2);
429
- tcg_temp_free_i64(temp64);
430
}
431
432
static inline void
433
@@ -XXX,XX +XXX,XX @@ gen_maddr_q(TCGv ret, TCGv r1, TCGv r2, TCGv r3, uint32_t n)
434
{
435
TCGv temp = tcg_const_i32(n);
436
gen_helper_maddr_q(ret, cpu_env, r1, r2, r3, temp);
437
- tcg_temp_free(temp);
438
}
439
440
static inline void
441
@@ -XXX,XX +XXX,XX @@ gen_maddrs_q(TCGv ret, TCGv r1, TCGv r2, TCGv r3, uint32_t n)
442
{
443
TCGv temp = tcg_const_i32(n);
444
gen_helper_maddr_q_ssov(ret, cpu_env, r1, r2, r3, temp);
445
- tcg_temp_free(temp);
446
}
447
448
static inline void
449
@@ -XXX,XX +XXX,XX @@ gen_madd32_q(TCGv ret, TCGv arg1, TCGv arg2, TCGv arg3, uint32_t n,
450
tcg_gen_or_tl(cpu_PSW_SAV, cpu_PSW_SAV, cpu_PSW_AV);
451
/* write back result */
452
tcg_gen_mov_tl(ret, temp3);
453
-
454
- tcg_temp_free(temp);
455
- tcg_temp_free(temp2);
456
- tcg_temp_free(temp3);
457
- tcg_temp_free_i64(t1);
458
- tcg_temp_free_i64(t2);
459
- tcg_temp_free_i64(t3);
460
}
461
462
static inline void
463
@@ -XXX,XX +XXX,XX @@ gen_m16add32_q(TCGv ret, TCGv arg1, TCGv arg2, TCGv arg3, uint32_t n)
464
tcg_gen_sub_tl(temp, temp, temp2);
465
}
466
gen_add_d(ret, arg1, temp);
467
-
468
- tcg_temp_free(temp);
469
- tcg_temp_free(temp2);
470
}
471
472
static inline void
473
@@ -XXX,XX +XXX,XX @@ gen_m16adds32_q(TCGv ret, TCGv arg1, TCGv arg2, TCGv arg3, uint32_t n)
474
tcg_gen_sub_tl(temp, temp, temp2);
475
}
476
gen_adds(ret, arg1, temp);
477
-
478
- tcg_temp_free(temp);
479
- tcg_temp_free(temp2);
480
}
481
482
static inline void
483
@@ -XXX,XX +XXX,XX @@ gen_m16add64_q(TCGv rl, TCGv rh, TCGv arg1_low, TCGv arg1_high, TCGv arg2,
484
gen_add64_d(t3, t1, t2);
485
/* write back result */
486
tcg_gen_extr_i64_i32(rl, rh, t3);
487
-
488
- tcg_temp_free_i64(t1);
489
- tcg_temp_free_i64(t2);
490
- tcg_temp_free_i64(t3);
491
- tcg_temp_free(temp);
492
- tcg_temp_free(temp2);
493
}
494
495
static inline void
496
@@ -XXX,XX +XXX,XX @@ gen_m16adds64_q(TCGv rl, TCGv rh, TCGv arg1_low, TCGv arg1_high, TCGv arg2,
497
498
gen_helper_add64_ssov(t1, cpu_env, t1, t2);
499
tcg_gen_extr_i64_i32(rl, rh, t1);
500
-
501
- tcg_temp_free(temp);
502
- tcg_temp_free(temp2);
503
- tcg_temp_free_i64(t1);
504
- tcg_temp_free_i64(t2);
505
}
506
507
static inline void
508
@@ -XXX,XX +XXX,XX @@ gen_madd64_q(TCGv rl, TCGv rh, TCGv arg1_low, TCGv arg1_high, TCGv arg2,
509
tcg_gen_shli_tl(temp, temp, 31);
510
/* negate v bit, if special condition */
511
tcg_gen_xor_tl(cpu_PSW_V, cpu_PSW_V, temp);
512
-
513
- tcg_temp_free(temp);
514
- tcg_temp_free(temp2);
515
}
516
/* write back result */
517
tcg_gen_extr_i64_i32(rl, rh, t4);
518
@@ -XXX,XX +XXX,XX @@ gen_madd64_q(TCGv rl, TCGv rh, TCGv arg1_low, TCGv arg1_high, TCGv arg2,
519
tcg_gen_xor_tl(cpu_PSW_AV, rh, cpu_PSW_AV);
520
/* calc SAV */
521
tcg_gen_or_tl(cpu_PSW_SAV, cpu_PSW_SAV, cpu_PSW_AV);
522
-
523
- tcg_temp_free_i64(t1);
524
- tcg_temp_free_i64(t2);
525
- tcg_temp_free_i64(t3);
526
- tcg_temp_free_i64(t4);
527
}
528
529
static inline void
530
@@ -XXX,XX +XXX,XX @@ gen_madds32_q(TCGv ret, TCGv arg1, TCGv arg2, TCGv arg3, uint32_t n,
531
tcg_gen_sari_i64(t2, t2, up_shift - n);
532
533
gen_helper_madd32_q_add_ssov(ret, cpu_env, t1, t2);
534
-
535
- tcg_temp_free_i64(t1);
536
- tcg_temp_free_i64(t2);
537
- tcg_temp_free_i64(t3);
538
}
539
540
static inline void
541
@@ -XXX,XX +XXX,XX @@ gen_madds64_q(TCGv rl, TCGv rh, TCGv arg1_low, TCGv arg1_high, TCGv arg2,
542
tcg_gen_concat_i32_i64(r1, arg1_low, arg1_high);
543
gen_helper_madd64_q_ssov(r1, cpu_env, r1, arg2, arg3, temp);
544
tcg_gen_extr_i64_i32(rl, rh, r1);
545
-
546
- tcg_temp_free_i64(r1);
547
- tcg_temp_free(temp);
548
}
549
+
550
/* ret = r2 - (r1 * r3); */
551
static inline void gen_msub32_d(TCGv ret, TCGv r1, TCGv r2, TCGv r3)
552
{
553
@@ -XXX,XX +XXX,XX @@ static inline void gen_msub32_d(TCGv ret, TCGv r1, TCGv r2, TCGv r3)
554
tcg_gen_xor_tl(cpu_PSW_AV, ret, cpu_PSW_AV);
555
/* calc SAV */
556
tcg_gen_or_tl(cpu_PSW_SAV, cpu_PSW_SAV, cpu_PSW_AV);
557
-
558
- tcg_temp_free_i64(t1);
559
- tcg_temp_free_i64(t2);
560
- tcg_temp_free_i64(t3);
561
}
562
563
static inline void gen_msubi32_d(TCGv ret, TCGv r1, TCGv r2, int32_t con)
564
{
565
TCGv temp = tcg_const_i32(con);
566
gen_msub32_d(ret, r1, r2, temp);
567
- tcg_temp_free(temp);
568
}
569
570
static inline void
571
@@ -XXX,XX +XXX,XX @@ gen_msub64_d(TCGv ret_low, TCGv ret_high, TCGv r1, TCGv r2_low, TCGv r2_high,
572
/* write back the result */
573
tcg_gen_mov_tl(ret_low, t3);
574
tcg_gen_mov_tl(ret_high, t4);
575
-
576
- tcg_temp_free(t1);
577
- tcg_temp_free(t2);
578
- tcg_temp_free(t3);
579
- tcg_temp_free(t4);
580
}
581
582
static inline void
583
@@ -XXX,XX +XXX,XX @@ gen_msubi64_d(TCGv ret_low, TCGv ret_high, TCGv r1, TCGv r2_low, TCGv r2_high,
584
{
585
TCGv temp = tcg_const_i32(con);
586
gen_msub64_d(ret_low, ret_high, r1, r2_low, r2_high, temp);
587
- tcg_temp_free(temp);
588
}
589
590
static inline void
591
@@ -XXX,XX +XXX,XX @@ gen_msubu64_d(TCGv ret_low, TCGv ret_high, TCGv r1, TCGv r2_low, TCGv r2_high,
592
tcg_gen_xor_tl(cpu_PSW_AV, ret_high, cpu_PSW_AV);
593
/* calc SAV */
594
tcg_gen_or_tl(cpu_PSW_SAV, cpu_PSW_SAV, cpu_PSW_AV);
595
-
596
- tcg_temp_free_i64(t1);
597
- tcg_temp_free_i64(t2);
598
- tcg_temp_free_i64(t3);
599
}
600
601
static inline void
602
@@ -XXX,XX +XXX,XX @@ gen_msubui64_d(TCGv ret_low, TCGv ret_high, TCGv r1, TCGv r2_low, TCGv r2_high,
603
{
604
TCGv temp = tcg_const_i32(con);
605
gen_msubu64_d(ret_low, ret_high, r1, r2_low, r2_high, temp);
606
- tcg_temp_free(temp);
607
}
608
609
static inline void gen_addi_d(TCGv ret, TCGv r1, target_ulong r2)
610
{
611
TCGv temp = tcg_const_i32(r2);
612
gen_add_d(ret, r1, temp);
613
- tcg_temp_free(temp);
614
}
615
+
616
/* calculate the carry bit too */
617
static inline void gen_add_CC(TCGv ret, TCGv r1, TCGv r2)
618
{
619
@@ -XXX,XX +XXX,XX @@ static inline void gen_add_CC(TCGv ret, TCGv r1, TCGv r2)
620
tcg_gen_or_tl(cpu_PSW_SAV, cpu_PSW_SAV, cpu_PSW_AV);
621
/* write back result */
622
tcg_gen_mov_tl(ret, result);
623
-
624
- tcg_temp_free(result);
625
- tcg_temp_free(t0);
626
}
627
628
static inline void gen_addi_CC(TCGv ret, TCGv r1, int32_t con)
629
{
630
TCGv temp = tcg_const_i32(con);
631
gen_add_CC(ret, r1, temp);
632
- tcg_temp_free(temp);
633
}
634
635
static inline void gen_addc_CC(TCGv ret, TCGv r1, TCGv r2)
636
@@ -XXX,XX +XXX,XX @@ static inline void gen_addc_CC(TCGv ret, TCGv r1, TCGv r2)
637
tcg_gen_or_tl(cpu_PSW_SAV, cpu_PSW_SAV, cpu_PSW_AV);
638
/* write back result */
639
tcg_gen_mov_tl(ret, result);
640
-
641
- tcg_temp_free(result);
642
- tcg_temp_free(t0);
643
- tcg_temp_free(carry);
644
}
645
646
static inline void gen_addci_CC(TCGv ret, TCGv r1, int32_t con)
647
{
648
TCGv temp = tcg_const_i32(con);
649
gen_addc_CC(ret, r1, temp);
650
- tcg_temp_free(temp);
651
}
652
653
static inline void gen_cond_add(TCGCond cond, TCGv r1, TCGv r2, TCGv r3,
654
@@ -XXX,XX +XXX,XX @@ static inline void gen_cond_add(TCGCond cond, TCGv r1, TCGv r2, TCGv r3,
655
tcg_gen_or_tl(cpu_PSW_SAV, temp, cpu_PSW_SAV);
656
/* write back result */
657
tcg_gen_movcond_tl(cond, r3, r4, t0, result, r1);
658
-
659
- tcg_temp_free(t0);
660
- tcg_temp_free(temp);
661
- tcg_temp_free(temp2);
662
- tcg_temp_free(result);
663
- tcg_temp_free(mask);
664
}
665
666
static inline void gen_condi_add(TCGCond cond, TCGv r1, int32_t r2,
667
@@ -XXX,XX +XXX,XX @@ static inline void gen_condi_add(TCGCond cond, TCGv r1, int32_t r2,
668
{
669
TCGv temp = tcg_const_i32(r2);
670
gen_cond_add(cond, r1, temp, r3, r4);
671
- tcg_temp_free(temp);
672
}
673
674
static inline void gen_sub_d(TCGv ret, TCGv r1, TCGv r2)
675
@@ -XXX,XX +XXX,XX @@ static inline void gen_sub_d(TCGv ret, TCGv r1, TCGv r2)
676
tcg_gen_or_tl(cpu_PSW_SAV, cpu_PSW_SAV, cpu_PSW_AV);
677
/* write back result */
678
tcg_gen_mov_tl(ret, result);
679
-
680
- tcg_temp_free(temp);
681
- tcg_temp_free(result);
682
}
683
684
static inline void
685
@@ -XXX,XX +XXX,XX @@ gen_sub64_d(TCGv_i64 ret, TCGv_i64 r1, TCGv_i64 r2)
686
tcg_gen_or_tl(cpu_PSW_SAV, cpu_PSW_SAV, cpu_PSW_AV);
687
/* write back result */
688
tcg_gen_mov_i64(ret, result);
689
-
690
- tcg_temp_free(temp);
691
- tcg_temp_free_i64(result);
692
- tcg_temp_free_i64(t0);
693
- tcg_temp_free_i64(t1);
694
}
695
696
static inline void gen_sub_CC(TCGv ret, TCGv r1, TCGv r2)
697
@@ -XXX,XX +XXX,XX @@ static inline void gen_sub_CC(TCGv ret, TCGv r1, TCGv r2)
698
tcg_gen_or_tl(cpu_PSW_SAV, cpu_PSW_SAV, cpu_PSW_AV);
699
/* write back result */
700
tcg_gen_mov_tl(ret, result);
701
-
702
- tcg_temp_free(result);
703
- tcg_temp_free(temp);
704
}
705
706
static inline void gen_subc_CC(TCGv ret, TCGv r1, TCGv r2)
707
@@ -XXX,XX +XXX,XX @@ static inline void gen_subc_CC(TCGv ret, TCGv r1, TCGv r2)
708
TCGv temp = tcg_temp_new();
709
tcg_gen_not_tl(temp, r2);
710
gen_addc_CC(ret, r1, temp);
711
- tcg_temp_free(temp);
712
}
713
714
static inline void gen_cond_sub(TCGCond cond, TCGv r1, TCGv r2, TCGv r3,
715
@@ -XXX,XX +XXX,XX @@ static inline void gen_cond_sub(TCGCond cond, TCGv r1, TCGv r2, TCGv r3,
716
tcg_gen_or_tl(cpu_PSW_SAV, temp, cpu_PSW_SAV);
717
/* write back result */
718
tcg_gen_movcond_tl(cond, r3, r4, t0, result, r1);
719
-
720
- tcg_temp_free(t0);
721
- tcg_temp_free(temp);
722
- tcg_temp_free(temp2);
723
- tcg_temp_free(result);
724
- tcg_temp_free(mask);
725
}
726
727
static inline void
728
@@ -XXX,XX +XXX,XX @@ gen_msub_h(TCGv ret_low, TCGv ret_high, TCGv r1_low, TCGv r1_high, TCGv r2,
729
tcg_gen_extr_i64_i32(temp, temp2, temp64);
730
gen_addsub64_h(ret_low, ret_high, r1_low, r1_high, temp, temp2,
731
tcg_gen_sub_tl, tcg_gen_sub_tl);
732
- tcg_temp_free(temp);
733
- tcg_temp_free(temp2);
734
- tcg_temp_free_i64(temp64);
735
}
736
737
static inline void
738
@@ -XXX,XX +XXX,XX @@ gen_msubs_h(TCGv ret_low, TCGv ret_high, TCGv r1_low, TCGv r1_high, TCGv r2,
739
tcg_gen_or_tl(cpu_PSW_V, cpu_PSW_V, temp);
740
/* combine av bits */
741
tcg_gen_or_tl(cpu_PSW_AV, cpu_PSW_AV, temp3);
742
-
743
- tcg_temp_free(temp);
744
- tcg_temp_free(temp2);
745
- tcg_temp_free(temp3);
746
- tcg_temp_free_i64(temp64);
747
}
748
749
static inline void
750
@@ -XXX,XX +XXX,XX @@ gen_msubm_h(TCGv ret_low, TCGv ret_high, TCGv r1_low, TCGv r1_high, TCGv r2,
751
gen_sub64_d(temp64_3, temp64_2, temp64);
752
/* write back result */
753
tcg_gen_extr_i64_i32(ret_low, ret_high, temp64_3);
754
-
755
- tcg_temp_free(temp);
756
- tcg_temp_free_i64(temp64);
757
- tcg_temp_free_i64(temp64_2);
758
- tcg_temp_free_i64(temp64_3);
759
}
760
761
static inline void
762
@@ -XXX,XX +XXX,XX @@ gen_msubms_h(TCGv ret_low, TCGv ret_high, TCGv r1_low, TCGv r1_high, TCGv r2,
763
tcg_gen_concat_i32_i64(temp64_2, r1_low, r1_high);
764
gen_helper_sub64_ssov(temp64, cpu_env, temp64_2, temp64);
765
tcg_gen_extr_i64_i32(ret_low, ret_high, temp64);
766
-
767
- tcg_temp_free(temp);
768
- tcg_temp_free_i64(temp64);
769
- tcg_temp_free_i64(temp64_2);
770
}
771
772
static inline void
773
@@ -XXX,XX +XXX,XX @@ gen_msubr64_h(TCGv ret, TCGv r1_low, TCGv r1_high, TCGv r2, TCGv r3, uint32_t n,
774
break;
775
}
776
gen_helper_subr_h(ret, cpu_env, temp64, r1_low, r1_high);
777
-
778
- tcg_temp_free(temp);
779
- tcg_temp_free_i64(temp64);
780
}
781
782
static inline void
783
@@ -XXX,XX +XXX,XX @@ gen_msubr32_h(TCGv ret, TCGv r1, TCGv r2, TCGv r3, uint32_t n, uint32_t mode)
784
tcg_gen_andi_tl(temp2, r1, 0xffff0000);
785
tcg_gen_shli_tl(temp, r1, 16);
786
gen_msubr64_h(ret, temp, temp2, r2, r3, n, mode);
787
-
788
- tcg_temp_free(temp);
789
- tcg_temp_free(temp2);
790
}
791
792
static inline void
793
@@ -XXX,XX +XXX,XX @@ gen_msubr64s_h(TCGv ret, TCGv r1_low, TCGv r1_high, TCGv r2, TCGv r3,
794
break;
795
}
796
gen_helper_subr_h_ssov(ret, cpu_env, temp64, r1_low, r1_high);
797
-
798
- tcg_temp_free(temp);
799
- tcg_temp_free_i64(temp64);
800
}
801
802
static inline void
803
@@ -XXX,XX +XXX,XX @@ gen_msubr32s_h(TCGv ret, TCGv r1, TCGv r2, TCGv r3, uint32_t n, uint32_t mode)
804
tcg_gen_andi_tl(temp2, r1, 0xffff0000);
805
tcg_gen_shli_tl(temp, r1, 16);
806
gen_msubr64s_h(ret, temp, temp2, r2, r3, n, mode);
807
-
808
- tcg_temp_free(temp);
809
- tcg_temp_free(temp2);
810
}
811
812
static inline void
813
@@ -XXX,XX +XXX,XX @@ gen_msubr_q(TCGv ret, TCGv r1, TCGv r2, TCGv r3, uint32_t n)
814
{
815
TCGv temp = tcg_const_i32(n);
816
gen_helper_msubr_q(ret, cpu_env, r1, r2, r3, temp);
817
- tcg_temp_free(temp);
818
}
819
820
static inline void
821
@@ -XXX,XX +XXX,XX @@ gen_msubrs_q(TCGv ret, TCGv r1, TCGv r2, TCGv r3, uint32_t n)
822
{
823
TCGv temp = tcg_const_i32(n);
824
gen_helper_msubr_q_ssov(ret, cpu_env, r1, r2, r3, temp);
825
- tcg_temp_free(temp);
826
}
827
828
static inline void
829
gen_msub32_q(TCGv ret, TCGv arg1, TCGv arg2, TCGv arg3, uint32_t n,
830
uint32_t up_shift)
831
{
832
- TCGv temp = tcg_temp_new();
833
- TCGv temp2 = tcg_temp_new();
834
TCGv temp3 = tcg_temp_new();
835
TCGv_i64 t1 = tcg_temp_new_i64();
836
TCGv_i64 t2 = tcg_temp_new_i64();
837
@@ -XXX,XX +XXX,XX @@ gen_msub32_q(TCGv ret, TCGv arg1, TCGv arg2, TCGv arg3, uint32_t n,
838
tcg_gen_or_tl(cpu_PSW_SAV, cpu_PSW_SAV, cpu_PSW_AV);
839
/* write back result */
840
tcg_gen_mov_tl(ret, temp3);
841
-
842
- tcg_temp_free(temp);
843
- tcg_temp_free(temp2);
844
- tcg_temp_free(temp3);
845
- tcg_temp_free_i64(t1);
846
- tcg_temp_free_i64(t2);
847
- tcg_temp_free_i64(t3);
848
- tcg_temp_free_i64(t4);
849
}
850
851
static inline void
852
@@ -XXX,XX +XXX,XX @@ gen_m16sub32_q(TCGv ret, TCGv arg1, TCGv arg2, TCGv arg3, uint32_t n)
853
tcg_gen_sub_tl(temp, temp, temp2);
854
}
855
gen_sub_d(ret, arg1, temp);
856
-
857
- tcg_temp_free(temp);
858
- tcg_temp_free(temp2);
859
}
860
861
static inline void
862
@@ -XXX,XX +XXX,XX @@ gen_m16subs32_q(TCGv ret, TCGv arg1, TCGv arg2, TCGv arg3, uint32_t n)
863
tcg_gen_sub_tl(temp, temp, temp2);
864
}
865
gen_subs(ret, arg1, temp);
866
-
867
- tcg_temp_free(temp);
868
- tcg_temp_free(temp2);
869
}
870
871
static inline void
872
@@ -XXX,XX +XXX,XX @@ gen_m16sub64_q(TCGv rl, TCGv rh, TCGv arg1_low, TCGv arg1_high, TCGv arg2,
873
gen_sub64_d(t3, t1, t2);
874
/* write back result */
875
tcg_gen_extr_i64_i32(rl, rh, t3);
876
-
877
- tcg_temp_free_i64(t1);
878
- tcg_temp_free_i64(t2);
879
- tcg_temp_free_i64(t3);
880
- tcg_temp_free(temp);
881
- tcg_temp_free(temp2);
882
}
883
884
static inline void
885
@@ -XXX,XX +XXX,XX @@ gen_m16subs64_q(TCGv rl, TCGv rh, TCGv arg1_low, TCGv arg1_high, TCGv arg2,
886
887
gen_helper_sub64_ssov(t1, cpu_env, t1, t2);
888
tcg_gen_extr_i64_i32(rl, rh, t1);
889
-
890
- tcg_temp_free(temp);
891
- tcg_temp_free(temp2);
892
- tcg_temp_free_i64(t1);
893
- tcg_temp_free_i64(t2);
894
}
895
896
static inline void
897
@@ -XXX,XX +XXX,XX @@ gen_msub64_q(TCGv rl, TCGv rh, TCGv arg1_low, TCGv arg1_high, TCGv arg2,
898
tcg_gen_shli_tl(temp, temp, 31);
899
/* negate v bit, if special condition */
900
tcg_gen_xor_tl(cpu_PSW_V, cpu_PSW_V, temp);
901
-
902
- tcg_temp_free(temp);
903
- tcg_temp_free(temp2);
904
}
905
/* write back result */
906
tcg_gen_extr_i64_i32(rl, rh, t4);
907
@@ -XXX,XX +XXX,XX @@ gen_msub64_q(TCGv rl, TCGv rh, TCGv arg1_low, TCGv arg1_high, TCGv arg2,
908
tcg_gen_xor_tl(cpu_PSW_AV, rh, cpu_PSW_AV);
909
/* calc SAV */
910
tcg_gen_or_tl(cpu_PSW_SAV, cpu_PSW_SAV, cpu_PSW_AV);
911
-
912
- tcg_temp_free_i64(t1);
913
- tcg_temp_free_i64(t2);
914
- tcg_temp_free_i64(t3);
915
- tcg_temp_free_i64(t4);
916
}
917
918
static inline void
919
@@ -XXX,XX +XXX,XX @@ gen_msubs32_q(TCGv ret, TCGv arg1, TCGv arg2, TCGv arg3, uint32_t n,
920
tcg_gen_add_i64(t3, t3, t4);
921
922
gen_helper_msub32_q_sub_ssov(ret, cpu_env, t1, t3);
923
-
924
- tcg_temp_free_i64(t1);
925
- tcg_temp_free_i64(t2);
926
- tcg_temp_free_i64(t3);
927
- tcg_temp_free_i64(t4);
928
}
929
930
static inline void
931
@@ -XXX,XX +XXX,XX @@ gen_msubs64_q(TCGv rl, TCGv rh, TCGv arg1_low, TCGv arg1_high, TCGv arg2,
932
tcg_gen_concat_i32_i64(r1, arg1_low, arg1_high);
933
gen_helper_msub64_q_ssov(r1, cpu_env, r1, arg2, arg3, temp);
934
tcg_gen_extr_i64_i32(rl, rh, r1);
935
-
936
- tcg_temp_free_i64(r1);
937
- tcg_temp_free(temp);
938
}
939
940
static inline void
941
@@ -XXX,XX +XXX,XX @@ gen_msubad_h(TCGv ret_low, TCGv ret_high, TCGv r1_low, TCGv r1_high, TCGv r2,
942
tcg_gen_extr_i64_i32(temp, temp2, temp64);
943
gen_addsub64_h(ret_low, ret_high, r1_low, r1_high, temp, temp2,
944
tcg_gen_add_tl, tcg_gen_sub_tl);
945
- tcg_temp_free(temp);
946
- tcg_temp_free(temp2);
947
- tcg_temp_free_i64(temp64);
948
}
949
950
static inline void
951
@@ -XXX,XX +XXX,XX @@ gen_msubadm_h(TCGv ret_low, TCGv ret_high, TCGv r1_low, TCGv r1_high, TCGv r2,
952
gen_sub64_d(temp64_2, temp64_3, temp64);
953
/* write back result */
954
tcg_gen_extr_i64_i32(ret_low, ret_high, temp64_2);
955
-
956
- tcg_temp_free(temp);
957
- tcg_temp_free_i64(temp64);
958
- tcg_temp_free_i64(temp64_2);
959
- tcg_temp_free_i64(temp64_3);
960
}
961
962
static inline void
963
@@ -XXX,XX +XXX,XX @@ gen_msubadr32_h(TCGv ret, TCGv r1, TCGv r2, TCGv r3, uint32_t n, uint32_t mode)
964
tcg_gen_andi_tl(temp2, r1, 0xffff0000);
965
tcg_gen_shli_tl(temp, r1, 16);
966
gen_helper_subadr_h(ret, cpu_env, temp64, temp, temp2);
967
-
968
- tcg_temp_free(temp);
969
- tcg_temp_free(temp2);
970
- tcg_temp_free_i64(temp64);
971
}
972
973
static inline void
974
@@ -XXX,XX +XXX,XX @@ gen_msubads_h(TCGv ret_low, TCGv ret_high, TCGv r1_low, TCGv r1_high, TCGv r2,
975
tcg_gen_or_tl(cpu_PSW_V, cpu_PSW_V, temp);
976
/* combine av bits */
977
tcg_gen_or_tl(cpu_PSW_AV, cpu_PSW_AV, temp3);
978
-
979
- tcg_temp_free(temp);
980
- tcg_temp_free(temp2);
981
- tcg_temp_free(temp3);
982
- tcg_temp_free_i64(temp64);
983
}
984
985
static inline void
986
@@ -XXX,XX +XXX,XX @@ gen_msubadms_h(TCGv ret_low, TCGv ret_high, TCGv r1_low, TCGv r1_high, TCGv r2,
987
988
gen_helper_sub64_ssov(temp64, cpu_env, temp64_2, temp64);
989
tcg_gen_extr_i64_i32(ret_low, ret_high, temp64);
990
-
991
- tcg_temp_free(temp);
992
- tcg_temp_free_i64(temp64);
993
- tcg_temp_free_i64(temp64_2);
994
}
995
996
static inline void
997
@@ -XXX,XX +XXX,XX @@ gen_msubadr32s_h(TCGv ret, TCGv r1, TCGv r2, TCGv r3, uint32_t n, uint32_t mode)
998
tcg_gen_andi_tl(temp2, r1, 0xffff0000);
999
tcg_gen_shli_tl(temp, r1, 16);
1000
gen_helper_subadr_h_ssov(ret, cpu_env, temp64, temp, temp2);
1001
-
1002
- tcg_temp_free(temp);
1003
- tcg_temp_free(temp2);
1004
- tcg_temp_free_i64(temp64);
1005
}
1006
1007
static inline void gen_abs(TCGv ret, TCGv r1)
1008
@@ -XXX,XX +XXX,XX @@ static inline void gen_absdif(TCGv ret, TCGv r1, TCGv r2)
1009
tcg_gen_or_tl(cpu_PSW_SAV, cpu_PSW_SAV, cpu_PSW_AV);
1010
/* write back result */
1011
tcg_gen_mov_tl(ret, result);
1012
-
1013
- tcg_temp_free(temp);
1014
- tcg_temp_free(result);
1015
}
1016
1017
static inline void gen_absdifi(TCGv ret, TCGv r1, int32_t con)
1018
{
1019
TCGv temp = tcg_const_i32(con);
1020
gen_absdif(ret, r1, temp);
1021
- tcg_temp_free(temp);
1022
}
1023
1024
static inline void gen_absdifsi(TCGv ret, TCGv r1, int32_t con)
1025
{
1026
TCGv temp = tcg_const_i32(con);
1027
gen_helper_absdif_ssov(ret, cpu_env, r1, temp);
1028
- tcg_temp_free(temp);
1029
}
1030
1031
static inline void gen_mul_i32s(TCGv ret, TCGv r1, TCGv r2)
1032
@@ -XXX,XX +XXX,XX @@ static inline void gen_mul_i32s(TCGv ret, TCGv r1, TCGv r2)
1033
tcg_gen_xor_tl(cpu_PSW_AV, ret, cpu_PSW_AV);
1034
/* calc SAV bit */
1035
tcg_gen_or_tl(cpu_PSW_SAV, cpu_PSW_SAV, cpu_PSW_AV);
1036
-
1037
- tcg_temp_free(high);
1038
- tcg_temp_free(low);
1039
}
1040
1041
static inline void gen_muli_i32s(TCGv ret, TCGv r1, int32_t con)
1042
{
1043
TCGv temp = tcg_const_i32(con);
1044
gen_mul_i32s(ret, r1, temp);
1045
- tcg_temp_free(temp);
1046
}
1047
1048
static inline void gen_mul_i64s(TCGv ret_low, TCGv ret_high, TCGv r1, TCGv r2)
1049
@@ -XXX,XX +XXX,XX @@ static inline void gen_muli_i64s(TCGv ret_low, TCGv ret_high, TCGv r1,
1050
{
1051
TCGv temp = tcg_const_i32(con);
1052
gen_mul_i64s(ret_low, ret_high, r1, temp);
1053
- tcg_temp_free(temp);
1054
}
1055
1056
static inline void gen_mul_i64u(TCGv ret_low, TCGv ret_high, TCGv r1, TCGv r2)
1057
@@ -XXX,XX +XXX,XX @@ static inline void gen_muli_i64u(TCGv ret_low, TCGv ret_high, TCGv r1,
1058
{
1059
TCGv temp = tcg_const_i32(con);
1060
gen_mul_i64u(ret_low, ret_high, r1, temp);
1061
- tcg_temp_free(temp);
1062
}
1063
1064
static inline void gen_mulsi_i32(TCGv ret, TCGv r1, int32_t con)
1065
{
1066
TCGv temp = tcg_const_i32(con);
1067
gen_helper_mul_ssov(ret, cpu_env, r1, temp);
1068
- tcg_temp_free(temp);
1069
}
1070
1071
static inline void gen_mulsui_i32(TCGv ret, TCGv r1, int32_t con)
1072
{
1073
TCGv temp = tcg_const_i32(con);
1074
gen_helper_mul_suov(ret, cpu_env, r1, temp);
1075
- tcg_temp_free(temp);
1076
}
1077
/* gen_maddsi_32(cpu_gpr_d[r4], cpu_gpr_d[r1], cpu_gpr_d[r3], const9); */
1078
static inline void gen_maddsi_32(TCGv ret, TCGv r1, TCGv r2, int32_t con)
1079
{
1080
TCGv temp = tcg_const_i32(con);
1081
gen_helper_madd32_ssov(ret, cpu_env, r1, r2, temp);
1082
- tcg_temp_free(temp);
1083
}
1084
1085
static inline void gen_maddsui_32(TCGv ret, TCGv r1, TCGv r2, int32_t con)
1086
{
1087
TCGv temp = tcg_const_i32(con);
1088
gen_helper_madd32_suov(ret, cpu_env, r1, r2, temp);
1089
- tcg_temp_free(temp);
1090
}
1091
1092
static void
1093
gen_mul_q(TCGv rl, TCGv rh, TCGv arg1, TCGv arg2, uint32_t n, uint32_t up_shift)
1094
{
1095
- TCGv temp = tcg_temp_new();
1096
TCGv_i64 temp_64 = tcg_temp_new_i64();
1097
TCGv_i64 temp2_64 = tcg_temp_new_i64();
1098
1099
@@ -XXX,XX +XXX,XX @@ gen_mul_q(TCGv rl, TCGv rh, TCGv arg1, TCGv arg2, uint32_t n, uint32_t up_shift)
1100
}
1101
/* calc sav overflow bit */
1102
tcg_gen_or_tl(cpu_PSW_SAV, cpu_PSW_SAV, cpu_PSW_AV);
1103
- tcg_temp_free(temp);
1104
- tcg_temp_free_i64(temp_64);
1105
- tcg_temp_free_i64(temp2_64);
1106
}
1107
1108
static void
1109
@@ -XXX,XX +XXX,XX @@ gen_mul_q_16(TCGv ret, TCGv arg1, TCGv arg2, uint32_t n)
1110
tcg_gen_xor_tl(cpu_PSW_AV, ret, cpu_PSW_AV);
1111
/* calc sav overflow bit */
1112
tcg_gen_or_tl(cpu_PSW_SAV, cpu_PSW_SAV, cpu_PSW_AV);
1113
-
1114
- tcg_temp_free(temp);
1115
}
1116
1117
static void gen_mulr_q(TCGv ret, TCGv arg1, TCGv arg2, uint32_t n)
1118
@@ -XXX,XX +XXX,XX @@ static void gen_mulr_q(TCGv ret, TCGv arg1, TCGv arg2, uint32_t n)
1119
tcg_gen_or_tl(cpu_PSW_SAV, cpu_PSW_SAV, cpu_PSW_AV);
1120
/* cut halfword off */
1121
tcg_gen_andi_tl(ret, ret, 0xffff0000);
1122
-
1123
- tcg_temp_free(temp);
1124
}
1125
1126
static inline void
1127
@@ -XXX,XX +XXX,XX @@ gen_madds_64(TCGv ret_low, TCGv ret_high, TCGv r1, TCGv r2_low, TCGv r2_high,
1128
tcg_gen_concat_i32_i64(temp64, r2_low, r2_high);
1129
gen_helper_madd64_ssov(temp64, cpu_env, r1, temp64, r3);
1130
tcg_gen_extr_i64_i32(ret_low, ret_high, temp64);
1131
- tcg_temp_free_i64(temp64);
1132
}
1133
1134
static inline void
1135
@@ -XXX,XX +XXX,XX @@ gen_maddsi_64(TCGv ret_low, TCGv ret_high, TCGv r1, TCGv r2_low, TCGv r2_high,
1136
{
1137
TCGv temp = tcg_const_i32(con);
1138
gen_madds_64(ret_low, ret_high, r1, r2_low, r2_high, temp);
1139
- tcg_temp_free(temp);
1140
}
1141
1142
static inline void
1143
@@ -XXX,XX +XXX,XX @@ gen_maddsu_64(TCGv ret_low, TCGv ret_high, TCGv r1, TCGv r2_low, TCGv r2_high,
1144
tcg_gen_concat_i32_i64(temp64, r2_low, r2_high);
1145
gen_helper_madd64_suov(temp64, cpu_env, r1, temp64, r3);
1146
tcg_gen_extr_i64_i32(ret_low, ret_high, temp64);
1147
- tcg_temp_free_i64(temp64);
1148
}
1149
1150
static inline void
1151
@@ -XXX,XX +XXX,XX @@ gen_maddsui_64(TCGv ret_low, TCGv ret_high, TCGv r1, TCGv r2_low, TCGv r2_high,
1152
{
1153
TCGv temp = tcg_const_i32(con);
1154
gen_maddsu_64(ret_low, ret_high, r1, r2_low, r2_high, temp);
1155
- tcg_temp_free(temp);
1156
}
1157
1158
static inline void gen_msubsi_32(TCGv ret, TCGv r1, TCGv r2, int32_t con)
1159
{
1160
TCGv temp = tcg_const_i32(con);
1161
gen_helper_msub32_ssov(ret, cpu_env, r1, r2, temp);
1162
- tcg_temp_free(temp);
1163
}
1164
1165
static inline void gen_msubsui_32(TCGv ret, TCGv r1, TCGv r2, int32_t con)
1166
{
1167
TCGv temp = tcg_const_i32(con);
1168
gen_helper_msub32_suov(ret, cpu_env, r1, r2, temp);
1169
- tcg_temp_free(temp);
1170
}
1171
1172
static inline void
1173
@@ -XXX,XX +XXX,XX @@ gen_msubs_64(TCGv ret_low, TCGv ret_high, TCGv r1, TCGv r2_low, TCGv r2_high,
1174
tcg_gen_concat_i32_i64(temp64, r2_low, r2_high);
1175
gen_helper_msub64_ssov(temp64, cpu_env, r1, temp64, r3);
1176
tcg_gen_extr_i64_i32(ret_low, ret_high, temp64);
1177
- tcg_temp_free_i64(temp64);
1178
}
1179
1180
static inline void
1181
@@ -XXX,XX +XXX,XX @@ gen_msubsi_64(TCGv ret_low, TCGv ret_high, TCGv r1, TCGv r2_low, TCGv r2_high,
1182
{
1183
TCGv temp = tcg_const_i32(con);
1184
gen_msubs_64(ret_low, ret_high, r1, r2_low, r2_high, temp);
1185
- tcg_temp_free(temp);
1186
}
1187
1188
static inline void
1189
@@ -XXX,XX +XXX,XX @@ gen_msubsu_64(TCGv ret_low, TCGv ret_high, TCGv r1, TCGv r2_low, TCGv r2_high,
1190
tcg_gen_concat_i32_i64(temp64, r2_low, r2_high);
1191
gen_helper_msub64_suov(temp64, cpu_env, r1, temp64, r3);
1192
tcg_gen_extr_i64_i32(ret_low, ret_high, temp64);
1193
- tcg_temp_free_i64(temp64);
1194
}
1195
1196
static inline void
1197
@@ -XXX,XX +XXX,XX @@ gen_msubsui_64(TCGv ret_low, TCGv ret_high, TCGv r1, TCGv r2_low, TCGv r2_high,
1198
{
1199
TCGv temp = tcg_const_i32(con);
1200
gen_msubsu_64(ret_low, ret_high, r1, r2_low, r2_high, temp);
1201
- tcg_temp_free(temp);
1202
}
1203
1204
static void gen_saturate(TCGv ret, TCGv arg, int32_t up, int32_t low)
1205
@@ -XXX,XX +XXX,XX @@ static void gen_saturate(TCGv ret, TCGv arg, int32_t up, int32_t low)
1206
1207
/* ret = (sat_neg > up ) ? up : sat_neg; */
1208
tcg_gen_movcond_tl(TCG_COND_GT, ret, sat_neg, temp, temp, sat_neg);
1209
-
1210
- tcg_temp_free(sat_neg);
1211
- tcg_temp_free(temp);
1212
}
1213
1214
static void gen_saturate_u(TCGv ret, TCGv arg, int32_t up)
1215
@@ -XXX,XX +XXX,XX @@ static void gen_saturate_u(TCGv ret, TCGv arg, int32_t up)
1216
TCGv temp = tcg_const_i32(up);
1217
/* sat_neg = (arg > up ) ? up : arg; */
1218
tcg_gen_movcond_tl(TCG_COND_GTU, ret, arg, temp, temp, arg);
1219
- tcg_temp_free(temp);
1220
}
1221
1222
static void gen_shi(TCGv ret, TCGv r1, int32_t shift_count)
1223
@@ -XXX,XX +XXX,XX @@ static void gen_sh_hi(TCGv ret, TCGv r1, int32_t shiftcount)
1224
gen_shi(temp_low, temp_low, shiftcount);
1225
gen_shi(ret, temp_high, shiftcount);
1226
tcg_gen_deposit_tl(ret, ret, temp_low, 0, 16);
1227
-
1228
- tcg_temp_free(temp_low);
1229
- tcg_temp_free(temp_high);
1230
}
1231
}
1232
1233
@@ -XXX,XX +XXX,XX @@ static void gen_shaci(TCGv ret, TCGv r1, int32_t shift_count)
1234
uint32_t msk, msk_start;
1235
TCGv temp = tcg_temp_new();
1236
TCGv temp2 = tcg_temp_new();
1237
- TCGv t_0 = tcg_const_i32(0);
1238
1239
if (shift_count == 0) {
1240
/* Clear PSW.C and PSW.V */
1241
@@ -XXX,XX +XXX,XX @@ static void gen_shaci(TCGv ret, TCGv r1, int32_t shift_count)
1242
tcg_gen_or_tl(cpu_PSW_SV, cpu_PSW_V, cpu_PSW_SV);
1243
/* do shift */
1244
tcg_gen_shli_tl(ret, r1, shift_count);
1245
-
1246
- tcg_temp_free(t_max);
1247
- tcg_temp_free(t_min);
1248
} else {
1249
/* clear PSW.V */
1250
tcg_gen_movi_tl(cpu_PSW_V, 0);
1251
@@ -XXX,XX +XXX,XX @@ static void gen_shaci(TCGv ret, TCGv r1, int32_t shift_count)
1252
tcg_gen_xor_tl(cpu_PSW_AV, ret, cpu_PSW_AV);
1253
/* calc sav overflow bit */
1254
tcg_gen_or_tl(cpu_PSW_SAV, cpu_PSW_SAV, cpu_PSW_AV);
1255
-
1256
- tcg_temp_free(temp);
1257
- tcg_temp_free(temp2);
1258
- tcg_temp_free(t_0);
1259
}
1260
1261
static void gen_shas(TCGv ret, TCGv r1, TCGv r2)
1262
@@ -XXX,XX +XXX,XX @@ static void gen_shasi(TCGv ret, TCGv r1, int32_t con)
1263
{
1264
TCGv temp = tcg_const_i32(con);
1265
gen_shas(ret, r1, temp);
1266
- tcg_temp_free(temp);
1267
}
1268
1269
static void gen_sha_hi(TCGv ret, TCGv r1, int32_t shift_count)
1270
@@ -XXX,XX +XXX,XX @@ static void gen_sha_hi(TCGv ret, TCGv r1, int32_t shift_count)
1271
tcg_gen_shli_tl(low, r1, shift_count);
1272
tcg_gen_shli_tl(ret, high, shift_count);
1273
tcg_gen_deposit_tl(ret, ret, low, 0, 16);
1274
-
1275
- tcg_temp_free(low);
1276
- tcg_temp_free(high);
1277
} else {
1278
low = tcg_temp_new();
1279
high = tcg_temp_new();
1280
@@ -XXX,XX +XXX,XX @@ static void gen_sha_hi(TCGv ret, TCGv r1, int32_t shift_count)
1281
tcg_gen_sari_tl(low, low, -shift_count);
1282
tcg_gen_sari_tl(ret, r1, -shift_count);
1283
tcg_gen_deposit_tl(ret, ret, low, 0, 16);
1284
-
1285
- tcg_temp_free(low);
1286
- tcg_temp_free(high);
1287
}
1288
-
1289
}
1290
1291
/* ret = {ret[30:0], (r1 cond r2)}; */
1292
@@ -XXX,XX +XXX,XX @@ static void gen_sh_cond(int cond, TCGv ret, TCGv r1, TCGv r2)
1293
tcg_gen_shli_tl(temp, ret, 1);
1294
tcg_gen_setcond_tl(cond, temp2, r1, r2);
1295
tcg_gen_or_tl(ret, temp, temp2);
1296
-
1297
- tcg_temp_free(temp);
1298
- tcg_temp_free(temp2);
1299
}
1300
1301
static void gen_sh_condi(int cond, TCGv ret, TCGv r1, int32_t con)
1302
{
1303
TCGv temp = tcg_const_i32(con);
1304
gen_sh_cond(cond, ret, r1, temp);
1305
- tcg_temp_free(temp);
1306
}
1307
1308
static inline void gen_adds(TCGv ret, TCGv r1, TCGv r2)
1309
@@ -XXX,XX +XXX,XX @@ static inline void gen_addsi(TCGv ret, TCGv r1, int32_t con)
1310
{
1311
TCGv temp = tcg_const_i32(con);
1312
gen_helper_add_ssov(ret, cpu_env, r1, temp);
1313
- tcg_temp_free(temp);
1314
}
1315
1316
static inline void gen_addsui(TCGv ret, TCGv r1, int32_t con)
1317
{
1318
TCGv temp = tcg_const_i32(con);
1319
gen_helper_add_suov(ret, cpu_env, r1, temp);
1320
- tcg_temp_free(temp);
1321
}
1322
1323
static inline void gen_subs(TCGv ret, TCGv r1, TCGv r2)
1324
@@ -XXX,XX +XXX,XX @@ static inline void gen_bit_2op(TCGv ret, TCGv r1, TCGv r2,
1325
(*op2)(temp1 , ret, temp1);
1326
1327
tcg_gen_deposit_tl(ret, ret, temp1, 0, 1);
1328
-
1329
- tcg_temp_free(temp1);
1330
- tcg_temp_free(temp2);
1331
}
1332
1333
/* ret = r1[pos1] op1 r2[pos2]; */
1334
@@ -XXX,XX +XXX,XX @@ static inline void gen_bit_1op(TCGv ret, TCGv r1, TCGv r2,
1335
(*op1)(ret, temp1, temp2);
1336
1337
tcg_gen_andi_tl(ret, ret, 0x1);
1338
-
1339
- tcg_temp_free(temp1);
1340
- tcg_temp_free(temp2);
1341
}
1342
1343
static inline void gen_accumulating_cond(int cond, TCGv ret, TCGv r1, TCGv r2,
1344
@@ -XXX,XX +XXX,XX @@ static inline void gen_accumulating_cond(int cond, TCGv ret, TCGv r1, TCGv r2,
1345
(*op)(temp, temp, temp2);
1346
/* ret = {ret[31:1], temp} */
1347
tcg_gen_deposit_tl(ret, ret, temp, 0, 1);
1348
-
1349
- tcg_temp_free(temp);
1350
- tcg_temp_free(temp2);
1351
}
1352
1353
static inline void
1354
@@ -XXX,XX +XXX,XX @@ gen_accumulating_condi(int cond, TCGv ret, TCGv r1, int32_t con,
1355
{
1356
TCGv temp = tcg_const_i32(con);
1357
gen_accumulating_cond(cond, ret, r1, temp, op);
1358
- tcg_temp_free(temp);
1359
}
1360
1361
/* ret = (r1 cond r2) ? 0xFFFFFFFF ? 0x00000000;*/
1362
@@ -XXX,XX +XXX,XX @@ static inline void gen_eqany_bi(TCGv ret, TCGv r1, int32_t con)
1363
tcg_gen_or_tl(ret, b0, b1);
1364
tcg_gen_or_tl(ret, ret, b2);
1365
tcg_gen_or_tl(ret, ret, b3);
1366
-
1367
- tcg_temp_free(b0);
1368
- tcg_temp_free(b1);
1369
- tcg_temp_free(b2);
1370
- tcg_temp_free(b3);
1371
}
1372
1373
static inline void gen_eqany_hi(TCGv ret, TCGv r1, int32_t con)
1374
@@ -XXX,XX +XXX,XX @@ static inline void gen_eqany_hi(TCGv ret, TCGv r1, int32_t con)
1375
1376
/* combine them */
1377
tcg_gen_or_tl(ret, h0, h1);
1378
-
1379
- tcg_temp_free(h0);
1380
- tcg_temp_free(h1);
1381
}
1382
+
1383
/* mask = ((1 << width) -1) << pos;
1384
ret = (r1 & ~mask) | (r2 << pos) & mask); */
1385
static inline void gen_insert(TCGv ret, TCGv r1, TCGv r2, TCGv width, TCGv pos)
1386
@@ -XXX,XX +XXX,XX @@ static inline void gen_insert(TCGv ret, TCGv r1, TCGv r2, TCGv width, TCGv pos)
1387
tcg_gen_and_tl(temp, temp, mask);
1388
tcg_gen_andc_tl(temp2, r1, mask);
1389
tcg_gen_or_tl(ret, temp, temp2);
1390
-
1391
- tcg_temp_free(mask);
1392
- tcg_temp_free(temp);
1393
- tcg_temp_free(temp2);
1394
}
1395
1396
static inline void gen_bsplit(TCGv rl, TCGv rh, TCGv r1)
1397
@@ -XXX,XX +XXX,XX @@ static inline void gen_bsplit(TCGv rl, TCGv rh, TCGv r1)
1398
1399
gen_helper_bsplit(temp, r1);
1400
tcg_gen_extr_i64_i32(rl, rh, temp);
1401
-
1402
- tcg_temp_free_i64(temp);
1403
}
1404
1405
static inline void gen_unpack(TCGv rl, TCGv rh, TCGv r1)
1406
@@ -XXX,XX +XXX,XX @@ static inline void gen_unpack(TCGv rl, TCGv rh, TCGv r1)
1407
1408
gen_helper_unpack(temp, r1);
1409
tcg_gen_extr_i64_i32(rl, rh, temp);
1410
-
1411
- tcg_temp_free_i64(temp);
1412
}
1413
1414
static inline void
1415
@@ -XXX,XX +XXX,XX @@ gen_dvinit_b(DisasContext *ctx, TCGv rl, TCGv rh, TCGv r1, TCGv r2)
1416
gen_helper_dvinit_b_131(ret, cpu_env, r1, r2);
1417
}
1418
tcg_gen_extr_i64_i32(rl, rh, ret);
1419
-
1420
- tcg_temp_free_i64(ret);
1421
}
1422
1423
static inline void
1424
@@ -XXX,XX +XXX,XX @@ gen_dvinit_h(DisasContext *ctx, TCGv rl, TCGv rh, TCGv r1, TCGv r2)
1425
gen_helper_dvinit_h_131(ret, cpu_env, r1, r2);
1426
}
1427
tcg_gen_extr_i64_i32(rl, rh, ret);
1428
-
1429
- tcg_temp_free_i64(ret);
1430
}
1431
1432
static void gen_calc_usb_mul_h(TCGv arg_low, TCGv arg_high)
1433
@@ -XXX,XX +XXX,XX @@ static void gen_calc_usb_mul_h(TCGv arg_low, TCGv arg_high)
1434
/* calc SAV bit */
1435
tcg_gen_or_tl(cpu_PSW_SAV, cpu_PSW_SAV, cpu_PSW_AV);
1436
tcg_gen_movi_tl(cpu_PSW_V, 0);
1437
- tcg_temp_free(temp);
1438
}
1439
1440
static void gen_calc_usb_mulr_h(TCGv arg)
1441
@@ -XXX,XX +XXX,XX @@ static void gen_calc_usb_mulr_h(TCGv arg)
1442
tcg_gen_or_tl(cpu_PSW_SAV, cpu_PSW_SAV, cpu_PSW_AV);
1443
/* clear V bit */
1444
tcg_gen_movi_tl(cpu_PSW_V, 0);
1445
- tcg_temp_free(temp);
1446
}
1447
1448
/* helpers for generating program flow micro-ops */
1449
@@ -XXX,XX +XXX,XX @@ static void generate_trap(DisasContext *ctx, int class, int tin)
1450
gen_save_pc(ctx->base.pc_next);
1451
gen_helper_raise_exception_sync(cpu_env, classtemp, tintemp);
1452
ctx->base.is_jmp = DISAS_NORETURN;
1453
-
1454
- tcg_temp_free(classtemp);
1455
- tcg_temp_free(tintemp);
1456
}
1457
1458
static inline void gen_branch_cond(DisasContext *ctx, TCGCond cond, TCGv r1,
1459
@@ -XXX,XX +XXX,XX @@ static inline void gen_branch_condi(DisasContext *ctx, TCGCond cond, TCGv r1,
1460
{
1461
TCGv temp = tcg_const_i32(r2);
1462
gen_branch_cond(ctx, cond, r1, temp, address);
1463
- tcg_temp_free(temp);
1464
}
1465
1466
static void gen_loop(DisasContext *ctx, int r1, int32_t offset)
1467
@@ -XXX,XX +XXX,XX @@ static void gen_fcall_save_ctx(DisasContext *ctx)
1468
tcg_gen_qemu_st_tl(cpu_gpr_a[11], temp, ctx->mem_idx, MO_LESL);
1469
tcg_gen_movi_tl(cpu_gpr_a[11], ctx->pc_succ_insn);
1470
tcg_gen_mov_tl(cpu_gpr_a[10], temp);
1471
-
1472
- tcg_temp_free(temp);
1473
}
1474
1475
static void gen_fret(DisasContext *ctx)
1476
@@ -XXX,XX +XXX,XX @@ static void gen_fret(DisasContext *ctx)
1477
tcg_gen_mov_tl(cpu_PC, temp);
1478
tcg_gen_exit_tb(NULL, 0);
1479
ctx->base.is_jmp = DISAS_NORETURN;
1480
-
1481
- tcg_temp_free(temp);
1482
}
1483
1484
static void gen_compute_branch(DisasContext *ctx, uint32_t opc, int r1,
1485
@@ -XXX,XX +XXX,XX @@ static void gen_compute_branch(DisasContext *ctx, uint32_t opc, int r1,
1486
temp = tcg_temp_new();
1487
tcg_gen_andi_tl(temp, cpu_gpr_d[15], 0x1u << constant);
1488
gen_branch_condi(ctx, TCG_COND_EQ, temp, 0, offset);
1489
- tcg_temp_free(temp);
1490
break;
1491
case OPC1_16_SBRN_JNZ_T:
1492
temp = tcg_temp_new();
1493
tcg_gen_andi_tl(temp, cpu_gpr_d[15], 0x1u << constant);
1494
gen_branch_condi(ctx, TCG_COND_NE, temp, 0, offset);
1495
- tcg_temp_free(temp);
1496
break;
1497
/* SBR-format jumps */
1498
case OPC1_16_SBR_JEQ:
1499
@@ -XXX,XX +XXX,XX @@ static void gen_compute_branch(DisasContext *ctx, uint32_t opc, int r1,
1500
tcg_gen_addi_tl(cpu_gpr_d[r1], cpu_gpr_d[r1], 1);
1501
gen_branch_condi(ctx, TCG_COND_NE, temp, constant, offset);
1502
}
1503
- tcg_temp_free(temp);
1504
break;
1505
/* BRN format */
1506
case OPCM_32_BRN_JTT:
1507
@@ -XXX,XX +XXX,XX @@ static void gen_compute_branch(DisasContext *ctx, uint32_t opc, int r1,
1508
} else {
1509
gen_branch_condi(ctx, TCG_COND_EQ, temp, 0, offset);
1510
}
1511
- tcg_temp_free(temp);
1512
break;
1513
/* BRR Format */
1514
case OPCM_32_BRR_EQ_NEQ:
1515
@@ -XXX,XX +XXX,XX @@ static void gen_compute_branch(DisasContext *ctx, uint32_t opc, int r1,
1516
tcg_gen_addi_tl(cpu_gpr_d[r1], cpu_gpr_d[r1], 1);
1517
gen_branch_cond(ctx, TCG_COND_NE, temp, temp2, offset);
1518
}
1519
- tcg_temp_free(temp);
1520
- tcg_temp_free(temp2);
1521
break;
1522
case OPCM_32_BRR_JNZ:
1523
if (MASK_OP_BRR_OP2(ctx->opcode) == OPC2_32_BRR_JNZ_A) {
1524
@@ -XXX,XX +XXX,XX @@ static void decode_src_opc(DisasContext *ctx, int op1)
1525
temp2 = tcg_const_tl(const4);
1526
tcg_gen_movcond_tl(TCG_COND_NE, cpu_gpr_d[r1], cpu_gpr_d[15], temp,
1527
temp2, cpu_gpr_d[r1]);
1528
- tcg_temp_free(temp);
1529
- tcg_temp_free(temp2);
1530
break;
1531
case OPC1_16_SRC_CMOVN:
1532
temp = tcg_const_tl(0);
1533
temp2 = tcg_const_tl(const4);
1534
tcg_gen_movcond_tl(TCG_COND_EQ, cpu_gpr_d[r1], cpu_gpr_d[15], temp,
1535
temp2, cpu_gpr_d[r1]);
1536
- tcg_temp_free(temp);
1537
- tcg_temp_free(temp2);
1538
break;
1539
case OPC1_16_SRC_EQ:
1540
tcg_gen_setcondi_tl(TCG_COND_EQ, cpu_gpr_d[15], cpu_gpr_d[r1],
1541
@@ -XXX,XX +XXX,XX @@ static void decode_srr_opc(DisasContext *ctx, int op1)
1542
temp = tcg_const_tl(0);
1543
tcg_gen_movcond_tl(TCG_COND_NE, cpu_gpr_d[r1], cpu_gpr_d[15], temp,
1544
cpu_gpr_d[r2], cpu_gpr_d[r1]);
1545
- tcg_temp_free(temp);
1546
break;
1547
case OPC1_16_SRR_CMOVN:
1548
temp = tcg_const_tl(0);
1549
tcg_gen_movcond_tl(TCG_COND_EQ, cpu_gpr_d[r1], cpu_gpr_d[15], temp,
1550
cpu_gpr_d[r2], cpu_gpr_d[r1]);
1551
- tcg_temp_free(temp);
1552
break;
1553
case OPC1_16_SRR_EQ:
1554
tcg_gen_setcond_tl(TCG_COND_EQ, cpu_gpr_d[15], cpu_gpr_d[r1],
1555
@@ -XXX,XX +XXX,XX @@ static void decode_sr_accu(DisasContext *ctx)
1556
tcg_gen_xor_tl(cpu_PSW_AV, cpu_gpr_d[r1], cpu_PSW_AV);
1557
/* calc sav */
1558
tcg_gen_or_tl(cpu_PSW_SAV, cpu_PSW_SAV, cpu_PSW_AV);
1559
- tcg_temp_free(temp);
1560
break;
1561
case OPC2_16_SR_SAT_B:
1562
gen_saturate(cpu_gpr_d[r1], cpu_gpr_d[r1], 0x7f, -0x80);
1563
@@ -XXX,XX +XXX,XX @@ static void decode_16Bit_opc(DisasContext *ctx)
1564
temp = tcg_temp_new();
1565
tcg_gen_shli_tl(temp, cpu_gpr_d[15], const16);
1566
tcg_gen_add_tl(cpu_gpr_a[r1], cpu_gpr_a[r2], temp);
1567
- tcg_temp_free(temp);
1568
break;
1569
/* SLRO-format */
1570
case OPC1_16_SLRO_LD_A:
1571
@@ -XXX,XX +XXX,XX @@ static void decode_abs_ldw(DisasContext *ctx)
1572
default:
1573
generate_trap(ctx, TRAPC_INSN_ERR, TIN2_IOPC);
1574
}
1575
-
1576
- tcg_temp_free(temp);
1577
}
1578
1579
static void decode_abs_ldb(DisasContext *ctx)
1580
@@ -XXX,XX +XXX,XX @@ static void decode_abs_ldb(DisasContext *ctx)
1581
default:
1582
generate_trap(ctx, TRAPC_INSN_ERR, TIN2_IOPC);
1583
}
1584
-
1585
- tcg_temp_free(temp);
1586
}
1587
1588
static void decode_abs_ldst_swap(DisasContext *ctx)
1589
@@ -XXX,XX +XXX,XX @@ static void decode_abs_ldst_swap(DisasContext *ctx)
1590
default:
1591
generate_trap(ctx, TRAPC_INSN_ERR, TIN2_IOPC);
1592
}
1593
-
1594
- tcg_temp_free(temp);
1595
}
1596
1597
static void decode_abs_ldst_context(DisasContext *ctx)
1598
@@ -XXX,XX +XXX,XX @@ static void decode_abs_store(DisasContext *ctx)
1599
default:
1600
generate_trap(ctx, TRAPC_INSN_ERR, TIN2_IOPC);
1601
}
1602
- tcg_temp_free(temp);
1603
}
1604
1605
static void decode_abs_storeb_h(DisasContext *ctx)
1606
@@ -XXX,XX +XXX,XX @@ static void decode_abs_storeb_h(DisasContext *ctx)
1607
default:
1608
generate_trap(ctx, TRAPC_INSN_ERR, TIN2_IOPC);
1609
}
1610
- tcg_temp_free(temp);
1611
}
1612
1613
/* Bit-format */
1614
@@ -XXX,XX +XXX,XX @@ static void decode_bit_insert(DisasContext *ctx)
1615
tcg_gen_not_tl(temp, temp);
1616
}
1617
tcg_gen_deposit_tl(cpu_gpr_d[r3], cpu_gpr_d[r1], temp, pos1, 1);
1618
- tcg_temp_free(temp);
1619
}
1620
1621
static void decode_bit_logical_t2(DisasContext *ctx)
1622
@@ -XXX,XX +XXX,XX @@ static void decode_bit_sh_logic1(DisasContext *ctx)
1623
}
1624
tcg_gen_shli_tl(cpu_gpr_d[r3], cpu_gpr_d[r3], 1);
1625
tcg_gen_add_tl(cpu_gpr_d[r3], cpu_gpr_d[r3], temp);
1626
- tcg_temp_free(temp);
1627
}
1628
1629
static void decode_bit_sh_logic2(DisasContext *ctx)
1630
@@ -XXX,XX +XXX,XX @@ static void decode_bit_sh_logic2(DisasContext *ctx)
1631
}
1632
tcg_gen_shli_tl(cpu_gpr_d[r3], cpu_gpr_d[r3], 1);
1633
tcg_gen_add_tl(cpu_gpr_d[r3], cpu_gpr_d[r3], temp);
1634
- tcg_temp_free(temp);
1635
}
1636
1637
/* BO-format */
1638
@@ -XXX,XX +XXX,XX @@ static void decode_bo_addrmode_post_pre_base(DisasContext *ctx)
1639
tcg_gen_addi_tl(temp, cpu_gpr_a[r2], off10);
1640
gen_st_2regs_64(cpu_gpr_d[r1+1], cpu_gpr_d[r1], temp, ctx);
1641
tcg_gen_mov_tl(cpu_gpr_a[r2], temp);
1642
- tcg_temp_free(temp);
1643
break;
1644
case OPC2_32_BO_ST_DA_SHORTOFF:
1645
CHECK_REG_PAIR(r1);
1646
@@ -XXX,XX +XXX,XX @@ static void decode_bo_addrmode_post_pre_base(DisasContext *ctx)
1647
tcg_gen_addi_tl(temp, cpu_gpr_a[r2], off10);
1648
gen_st_2regs_64(cpu_gpr_a[r1+1], cpu_gpr_a[r1], temp, ctx);
1649
tcg_gen_mov_tl(cpu_gpr_a[r2], temp);
1650
- tcg_temp_free(temp);
1651
break;
1652
case OPC2_32_BO_ST_H_SHORTOFF:
1653
gen_offset_st(ctx, cpu_gpr_d[r1], cpu_gpr_a[r2], off10, MO_LEUW);
1654
@@ -XXX,XX +XXX,XX @@ static void decode_bo_addrmode_post_pre_base(DisasContext *ctx)
1655
temp = tcg_temp_new();
1656
tcg_gen_shri_tl(temp, cpu_gpr_d[r1], 16);
1657
gen_offset_st(ctx, temp, cpu_gpr_a[r2], off10, MO_LEUW);
1658
- tcg_temp_free(temp);
1659
break;
1660
case OPC2_32_BO_ST_Q_POSTINC:
1661
temp = tcg_temp_new();
1662
@@ -XXX,XX +XXX,XX @@ static void decode_bo_addrmode_post_pre_base(DisasContext *ctx)
1663
tcg_gen_qemu_st_tl(temp, cpu_gpr_a[r2], ctx->mem_idx,
1664
MO_LEUW);
1665
tcg_gen_addi_tl(cpu_gpr_a[r2], cpu_gpr_a[r2], off10);
1666
- tcg_temp_free(temp);
1667
break;
1668
case OPC2_32_BO_ST_Q_PREINC:
1669
temp = tcg_temp_new();
1670
tcg_gen_shri_tl(temp, cpu_gpr_d[r1], 16);
1671
gen_st_preincr(ctx, temp, cpu_gpr_a[r2], off10, MO_LEUW);
1672
- tcg_temp_free(temp);
1673
break;
1674
case OPC2_32_BO_ST_W_SHORTOFF:
1675
gen_offset_st(ctx, cpu_gpr_d[r1], cpu_gpr_a[r2], off10, MO_LEUL);
1676
@@ -XXX,XX +XXX,XX @@ static void decode_bo_addrmode_bitreverse_circular(DisasContext *ctx)
1677
default:
1678
generate_trap(ctx, TRAPC_INSN_ERR, TIN2_IOPC);
1679
}
1680
- tcg_temp_free(temp);
1681
- tcg_temp_free(temp2);
1682
- tcg_temp_free(temp3);
1683
}
1684
1685
static void decode_bo_addrmode_ld_post_pre_base(DisasContext *ctx)
1686
@@ -XXX,XX +XXX,XX @@ static void decode_bo_addrmode_ld_post_pre_base(DisasContext *ctx)
1687
tcg_gen_addi_tl(temp, cpu_gpr_a[r2], off10);
1688
gen_ld_2regs_64(cpu_gpr_d[r1+1], cpu_gpr_d[r1], temp, ctx);
1689
tcg_gen_mov_tl(cpu_gpr_a[r2], temp);
1690
- tcg_temp_free(temp);
1691
break;
1692
case OPC2_32_BO_LD_DA_SHORTOFF:
1693
CHECK_REG_PAIR(r1);
1694
@@ -XXX,XX +XXX,XX @@ static void decode_bo_addrmode_ld_post_pre_base(DisasContext *ctx)
1695
tcg_gen_addi_tl(temp, cpu_gpr_a[r2], off10);
1696
gen_ld_2regs_64(cpu_gpr_a[r1+1], cpu_gpr_a[r1], temp, ctx);
1697
tcg_gen_mov_tl(cpu_gpr_a[r2], temp);
1698
- tcg_temp_free(temp);
1699
break;
1700
case OPC2_32_BO_LD_H_SHORTOFF:
1701
gen_offset_ld(ctx, cpu_gpr_d[r1], cpu_gpr_a[r2], off10, MO_LESW);
1702
@@ -XXX,XX +XXX,XX @@ static void decode_bo_addrmode_ld_bitreverse_circular(DisasContext *ctx)
1703
default:
1704
generate_trap(ctx, TRAPC_INSN_ERR, TIN2_IOPC);
1705
}
1706
- tcg_temp_free(temp);
1707
- tcg_temp_free(temp2);
1708
- tcg_temp_free(temp3);
1709
}
1710
1711
static void decode_bo_addrmode_stctx_post_pre_base(DisasContext *ctx)
1712
@@ -XXX,XX +XXX,XX @@ static void decode_bo_addrmode_stctx_post_pre_base(DisasContext *ctx)
1713
uint32_t off10;
1714
int r1, r2;
1715
1716
- TCGv temp, temp2;
1717
+ TCGv temp;
1718
1719
r1 = MASK_OP_BO_S1D(ctx->opcode);
1720
r2 = MASK_OP_BO_S2(ctx->opcode);
1721
@@ -XXX,XX +XXX,XX @@ static void decode_bo_addrmode_stctx_post_pre_base(DisasContext *ctx)
1722
1723
1724
temp = tcg_temp_new();
1725
- temp2 = tcg_temp_new();
1726
1727
switch (op2) {
1728
case OPC2_32_BO_LDLCX_SHORTOFF:
1729
@@ -XXX,XX +XXX,XX @@ static void decode_bo_addrmode_stctx_post_pre_base(DisasContext *ctx)
1730
default:
1731
generate_trap(ctx, TRAPC_INSN_ERR, TIN2_IOPC);
1732
}
1733
- tcg_temp_free(temp);
1734
- tcg_temp_free(temp2);
1735
}
1736
1737
static void decode_bo_addrmode_ldmst_bitreverse_circular(DisasContext *ctx)
1738
@@ -XXX,XX +XXX,XX @@ static void decode_bo_addrmode_ldmst_bitreverse_circular(DisasContext *ctx)
1739
default:
1740
generate_trap(ctx, TRAPC_INSN_ERR, TIN2_IOPC);
1741
}
1742
-
1743
- tcg_temp_free(temp);
1744
- tcg_temp_free(temp2);
1745
- tcg_temp_free(temp3);
1746
}
1747
1748
static void decode_bol_opc(DisasContext *ctx, int32_t op1)
1749
@@ -XXX,XX +XXX,XX @@ static void decode_bol_opc(DisasContext *ctx, int32_t op1)
1750
temp = tcg_temp_new();
1751
tcg_gen_addi_tl(temp, cpu_gpr_a[r2], address);
1752
tcg_gen_qemu_ld_tl(cpu_gpr_a[r1], temp, ctx->mem_idx, MO_LEUL);
1753
- tcg_temp_free(temp);
1754
break;
1755
case OPC1_32_BOL_LD_W_LONGOFF:
1756
temp = tcg_temp_new();
1757
tcg_gen_addi_tl(temp, cpu_gpr_a[r2], address);
1758
tcg_gen_qemu_ld_tl(cpu_gpr_d[r1], temp, ctx->mem_idx, MO_LEUL);
1759
- tcg_temp_free(temp);
1760
break;
1761
case OPC1_32_BOL_LEA_LONGOFF:
1762
tcg_gen_addi_tl(cpu_gpr_a[r1], cpu_gpr_a[r2], address);
1763
@@ -XXX,XX +XXX,XX @@ static void decode_rc_logical_shift(DisasContext *ctx)
1764
default:
1765
generate_trap(ctx, TRAPC_INSN_ERR, TIN2_IOPC);
1766
}
1767
- tcg_temp_free(temp);
1768
}
1769
1770
static void decode_rc_accumulator(DisasContext *ctx)
1771
@@ -XXX,XX +XXX,XX @@ static void decode_rc_accumulator(DisasContext *ctx)
1772
default:
1773
generate_trap(ctx, TRAPC_INSN_ERR, TIN2_IOPC);
1774
}
1775
- tcg_temp_free(temp);
1776
}
1777
1778
static void decode_rc_serviceroutine(DisasContext *ctx)
1779
@@ -XXX,XX +XXX,XX @@ static void decode_rcpw_insert(DisasContext *ctx)
1780
if (pos + width <= 32) {
1781
temp = tcg_const_i32(const4);
1782
tcg_gen_deposit_tl(cpu_gpr_d[r2], cpu_gpr_d[r1], temp, pos, width);
1783
- tcg_temp_free(temp);
1784
}
1785
break;
1786
default:
1787
@@ -XXX,XX +XXX,XX @@ static void decode_rcrw_insert(DisasContext *ctx)
1788
tcg_gen_movi_tl(temp2, const4);
1789
tcg_gen_andi_tl(temp3, cpu_gpr_d[r3], 0x1f);
1790
gen_insert(cpu_gpr_d[r4], cpu_gpr_d[r1], temp2, temp, temp3);
1791
-
1792
- tcg_temp_free(temp3);
1793
break;
1794
default:
1795
generate_trap(ctx, TRAPC_INSN_ERR, TIN2_IOPC);
1796
}
1797
- tcg_temp_free(temp);
1798
- tcg_temp_free(temp2);
1799
}
1800
1801
/* RCR format */
1802
@@ -XXX,XX +XXX,XX @@ static void decode_rcr_cond_select(DisasContext *ctx)
1803
temp2 = tcg_const_i32(const9);
1804
tcg_gen_movcond_tl(TCG_COND_NE, cpu_gpr_d[r4], cpu_gpr_d[r3], temp,
1805
cpu_gpr_d[r1], temp2);
1806
- tcg_temp_free(temp);
1807
- tcg_temp_free(temp2);
1808
break;
1809
case OPC2_32_RCR_SELN:
1810
temp = tcg_const_i32(0);
1811
temp2 = tcg_const_i32(const9);
1812
tcg_gen_movcond_tl(TCG_COND_EQ, cpu_gpr_d[r4], cpu_gpr_d[r3], temp,
1813
cpu_gpr_d[r1], temp2);
1814
- tcg_temp_free(temp);
1815
- tcg_temp_free(temp2);
1816
break;
1817
default:
1818
generate_trap(ctx, TRAPC_INSN_ERR, TIN2_IOPC);
1819
@@ -XXX,XX +XXX,XX @@ static void decode_rr_accumulator(DisasContext *ctx)
1820
tcg_gen_mov_tl(temp, cpu_gpr_d[r1]);
1821
tcg_gen_mov_tl(cpu_gpr_d[r3], cpu_gpr_d[r2]);
1822
tcg_gen_mov_tl(cpu_gpr_d[r3 + 1], temp);
1823
-
1824
- tcg_temp_free(temp);
1825
} else {
1826
generate_trap(ctx, TRAPC_INSN_ERR, TIN2_IOPC);
1827
}
1828
@@ -XXX,XX +XXX,XX @@ static void decode_rr_logical_shift(DisasContext *ctx)
1829
{
1830
uint32_t op2;
1831
int r3, r2, r1;
1832
- TCGv temp;
1833
1834
r3 = MASK_OP_RR_D(ctx->opcode);
1835
r2 = MASK_OP_RR_S2(ctx->opcode);
1836
r1 = MASK_OP_RR_S1(ctx->opcode);
1837
-
1838
- temp = tcg_temp_new();
1839
op2 = MASK_OP_RR_OP2(ctx->opcode);
1840
1841
switch (op2) {
1842
@@ -XXX,XX +XXX,XX @@ static void decode_rr_logical_shift(DisasContext *ctx)
1843
default:
1844
generate_trap(ctx, TRAPC_INSN_ERR, TIN2_IOPC);
1845
}
1846
- tcg_temp_free(temp);
1847
}
1848
1849
static void decode_rr_address(DisasContext *ctx)
1850
@@ -XXX,XX +XXX,XX @@ static void decode_rr_address(DisasContext *ctx)
1851
temp = tcg_temp_new();
1852
tcg_gen_shli_tl(temp, cpu_gpr_d[r1], n);
1853
tcg_gen_add_tl(cpu_gpr_a[r3], cpu_gpr_a[r2], temp);
1854
- tcg_temp_free(temp);
1855
break;
1856
case OPC2_32_RR_ADDSC_AT:
1857
temp = tcg_temp_new();
1858
tcg_gen_sari_tl(temp, cpu_gpr_d[r1], 3);
1859
tcg_gen_add_tl(temp, cpu_gpr_a[r2], temp);
1860
tcg_gen_andi_tl(cpu_gpr_a[r3], temp, 0xFFFFFFFC);
1861
- tcg_temp_free(temp);
1862
break;
1863
case OPC2_32_RR_EQ_A:
1864
tcg_gen_setcond_tl(TCG_COND_EQ, cpu_gpr_d[r3], cpu_gpr_a[r1],
1865
@@ -XXX,XX +XXX,XX @@ static void decode_rr_divide(DisasContext *ctx)
1866
/* write result */
1867
tcg_gen_shli_tl(cpu_gpr_d[r3], cpu_gpr_d[r1], 24);
1868
tcg_gen_mov_tl(cpu_gpr_d[r3+1], temp3);
1869
-
1870
- tcg_temp_free(temp);
1871
- tcg_temp_free(temp2);
1872
- tcg_temp_free(temp3);
1873
break;
1874
case OPC2_32_RR_DVINIT_H:
1875
CHECK_REG_PAIR(r3);
1876
@@ -XXX,XX +XXX,XX @@ static void decode_rr_divide(DisasContext *ctx)
1877
/* write result */
1878
tcg_gen_shli_tl(cpu_gpr_d[r3], cpu_gpr_d[r1], 16);
1879
tcg_gen_mov_tl(cpu_gpr_d[r3+1], temp3);
1880
- tcg_temp_free(temp);
1881
- tcg_temp_free(temp2);
1882
- tcg_temp_free(temp3);
1883
break;
1884
case OPC2_32_RR_DVINIT:
1885
temp = tcg_temp_new();
1886
@@ -XXX,XX +XXX,XX @@ static void decode_rr_divide(DisasContext *ctx)
1887
tcg_gen_mov_tl(cpu_gpr_d[r3], cpu_gpr_d[r1]);
1888
/* sign extend to high reg */
1889
tcg_gen_sari_tl(cpu_gpr_d[r3+1], cpu_gpr_d[r1], 31);
1890
- tcg_temp_free(temp);
1891
- tcg_temp_free(temp2);
1892
break;
1893
case OPC2_32_RR_DVINIT_U:
1894
/* overflow = (D[b] == 0) */
1895
@@ -XXX,XX +XXX,XX @@ static void decode_rr1_mul(DisasContext *ctx)
1896
GEN_HELPER_LL(mul_h, temp64, cpu_gpr_d[r1], cpu_gpr_d[r2], n);
1897
tcg_gen_extr_i64_i32(cpu_gpr_d[r3], cpu_gpr_d[r3+1], temp64);
1898
gen_calc_usb_mul_h(cpu_gpr_d[r3], cpu_gpr_d[r3+1]);
1899
- tcg_temp_free_i64(temp64);
1900
break;
1901
case OPC2_32_RR1_MUL_H_32_LU:
1902
temp64 = tcg_temp_new_i64();
1903
@@ -XXX,XX +XXX,XX @@ static void decode_rr1_mul(DisasContext *ctx)
1904
GEN_HELPER_LU(mul_h, temp64, cpu_gpr_d[r1], cpu_gpr_d[r2], n);
1905
tcg_gen_extr_i64_i32(cpu_gpr_d[r3], cpu_gpr_d[r3+1], temp64);
1906
gen_calc_usb_mul_h(cpu_gpr_d[r3], cpu_gpr_d[r3+1]);
1907
- tcg_temp_free_i64(temp64);
1908
break;
1909
case OPC2_32_RR1_MUL_H_32_UL:
1910
temp64 = tcg_temp_new_i64();
1911
@@ -XXX,XX +XXX,XX @@ static void decode_rr1_mul(DisasContext *ctx)
1912
GEN_HELPER_UL(mul_h, temp64, cpu_gpr_d[r1], cpu_gpr_d[r2], n);
1913
tcg_gen_extr_i64_i32(cpu_gpr_d[r3], cpu_gpr_d[r3+1], temp64);
1914
gen_calc_usb_mul_h(cpu_gpr_d[r3], cpu_gpr_d[r3+1]);
1915
- tcg_temp_free_i64(temp64);
1916
break;
1917
case OPC2_32_RR1_MUL_H_32_UU:
1918
temp64 = tcg_temp_new_i64();
1919
@@ -XXX,XX +XXX,XX @@ static void decode_rr1_mul(DisasContext *ctx)
1920
GEN_HELPER_UU(mul_h, temp64, cpu_gpr_d[r1], cpu_gpr_d[r2], n);
1921
tcg_gen_extr_i64_i32(cpu_gpr_d[r3], cpu_gpr_d[r3+1], temp64);
1922
gen_calc_usb_mul_h(cpu_gpr_d[r3], cpu_gpr_d[r3+1]);
1923
- tcg_temp_free_i64(temp64);
1924
break;
1925
case OPC2_32_RR1_MULM_H_64_LL:
1926
temp64 = tcg_temp_new_i64();
1927
@@ -XXX,XX +XXX,XX @@ static void decode_rr1_mul(DisasContext *ctx)
1928
tcg_gen_movi_tl(cpu_PSW_V, 0);
1929
/* reset AV bit */
1930
tcg_gen_mov_tl(cpu_PSW_AV, cpu_PSW_V);
1931
- tcg_temp_free_i64(temp64);
1932
break;
1933
case OPC2_32_RR1_MULM_H_64_LU:
1934
temp64 = tcg_temp_new_i64();
1935
@@ -XXX,XX +XXX,XX @@ static void decode_rr1_mul(DisasContext *ctx)
1936
tcg_gen_movi_tl(cpu_PSW_V, 0);
1937
/* reset AV bit */
1938
tcg_gen_mov_tl(cpu_PSW_AV, cpu_PSW_V);
1939
- tcg_temp_free_i64(temp64);
1940
break;
1941
case OPC2_32_RR1_MULM_H_64_UL:
1942
temp64 = tcg_temp_new_i64();
1943
@@ -XXX,XX +XXX,XX @@ static void decode_rr1_mul(DisasContext *ctx)
1944
tcg_gen_movi_tl(cpu_PSW_V, 0);
1945
/* reset AV bit */
1946
tcg_gen_mov_tl(cpu_PSW_AV, cpu_PSW_V);
1947
- tcg_temp_free_i64(temp64);
1948
break;
1949
case OPC2_32_RR1_MULM_H_64_UU:
1950
temp64 = tcg_temp_new_i64();
1951
@@ -XXX,XX +XXX,XX @@ static void decode_rr1_mul(DisasContext *ctx)
1952
tcg_gen_movi_tl(cpu_PSW_V, 0);
1953
/* reset AV bit */
1954
tcg_gen_mov_tl(cpu_PSW_AV, cpu_PSW_V);
1955
- tcg_temp_free_i64(temp64);
1956
-
1957
break;
1958
case OPC2_32_RR1_MULR_H_16_LL:
1959
GEN_HELPER_LL(mulr_h, cpu_gpr_d[r3], cpu_gpr_d[r1], cpu_gpr_d[r2], n);
1960
@@ -XXX,XX +XXX,XX @@ static void decode_rr1_mul(DisasContext *ctx)
1961
default:
1962
generate_trap(ctx, TRAPC_INSN_ERR, TIN2_IOPC);
1963
}
1964
- tcg_temp_free(n);
1965
}
1966
1967
static void decode_rr1_mulq(DisasContext *ctx)
1968
@@ -XXX,XX +XXX,XX @@ static void decode_rr1_mulq(DisasContext *ctx)
1969
default:
1970
generate_trap(ctx, TRAPC_INSN_ERR, TIN2_IOPC);
1971
}
1972
- tcg_temp_free(temp);
1973
- tcg_temp_free(temp2);
1974
}
1975
1976
/* RR2 format */
1977
@@ -XXX,XX +XXX,XX @@ static void decode_rrpw_extract_insert(DisasContext *ctx)
1978
tcg_gen_movi_tl(temp, ((1u << width) - 1) << pos);
1979
tcg_gen_shli_tl(cpu_gpr_d[r3], cpu_gpr_d[r2], pos);
1980
tcg_gen_mov_tl(cpu_gpr_d[r3 + 1], temp);
1981
- tcg_temp_free(temp);
1982
}
1983
1984
break;
1985
@@ -XXX,XX +XXX,XX @@ static void decode_rrr_cond_select(DisasContext *ctx)
1986
temp = tcg_const_i32(0);
1987
tcg_gen_movcond_tl(TCG_COND_NE, cpu_gpr_d[r4], cpu_gpr_d[r3], temp,
1988
cpu_gpr_d[r1], cpu_gpr_d[r2]);
1989
- tcg_temp_free(temp);
1990
break;
1991
case OPC2_32_RRR_SELN:
1992
temp = tcg_const_i32(0);
1993
tcg_gen_movcond_tl(TCG_COND_EQ, cpu_gpr_d[r4], cpu_gpr_d[r3], temp,
1994
cpu_gpr_d[r1], cpu_gpr_d[r2]);
1995
- tcg_temp_free(temp);
1996
break;
1997
default:
1998
generate_trap(ctx, TRAPC_INSN_ERR, TIN2_IOPC);
1999
@@ -XXX,XX +XXX,XX @@ static void decode_rrr1_maddq_h(DisasContext *ctx)
2000
default:
2001
generate_trap(ctx, TRAPC_INSN_ERR, TIN2_IOPC);
2002
}
2003
- tcg_temp_free(temp);
2004
- tcg_temp_free(temp2);
2005
}
2006
2007
static void decode_rrr1_maddsu_h(DisasContext *ctx)
2008
@@ -XXX,XX +XXX,XX @@ static void decode_rrr1_msubq_h(DisasContext *ctx)
2009
default:
2010
generate_trap(ctx, TRAPC_INSN_ERR, TIN2_IOPC);
2011
}
2012
- tcg_temp_free(temp);
2013
- tcg_temp_free(temp2);
2014
}
2015
2016
static void decode_rrr1_msubad_h(DisasContext *ctx)
2017
@@ -XXX,XX +XXX,XX @@ static void decode_rrrr_extract_insert(DisasContext *ctx)
2018
*/
2019
tcg_gen_movcond_tl(TCG_COND_EQ, msw, tmp_pos, zero, zero, msw);
2020
tcg_gen_or_tl(cpu_gpr_d[r4], tmp_width, msw);
2021
- tcg_temp_free(msw);
2022
}
2023
break;
2024
case OPC2_32_RRRR_EXTR:
2025
@@ -XXX,XX +XXX,XX @@ static void decode_rrrr_extract_insert(DisasContext *ctx)
2026
default:
2027
generate_trap(ctx, TRAPC_INSN_ERR, TIN2_IOPC);
2028
}
2029
- tcg_temp_free(tmp_pos);
2030
- tcg_temp_free(tmp_width);
2031
}
2032
2033
/* RRRW format */
2034
@@ -XXX,XX +XXX,XX @@ static void decode_rrrw_extract_insert(DisasContext *ctx)
2035
tcg_gen_shl_tl(temp2, temp2, temp);
2036
tcg_gen_shl_tl(cpu_gpr_d[r4], cpu_gpr_d[r2], temp);
2037
tcg_gen_mov_tl(cpu_gpr_d[r4+1], temp2);
2038
-
2039
- tcg_temp_free(temp2);
2040
break;
2041
case OPC2_32_RRRW_INSERT:
2042
temp2 = tcg_temp_new();
2043
@@ -XXX,XX +XXX,XX @@ static void decode_rrrw_extract_insert(DisasContext *ctx)
2044
tcg_gen_movi_tl(temp, width);
2045
tcg_gen_andi_tl(temp2, cpu_gpr_d[r3], 0x1f);
2046
gen_insert(cpu_gpr_d[r4], cpu_gpr_d[r1], cpu_gpr_d[r2], temp, temp2);
2047
-
2048
- tcg_temp_free(temp2);
2049
break;
2050
default:
2051
generate_trap(ctx, TRAPC_INSN_ERR, TIN2_IOPC);
2052
}
2053
- tcg_temp_free(temp);
2054
}
2055
2056
/* SYS Format*/
2057
@@ -XXX,XX +XXX,XX @@ static void decode_sys_interrupts(DisasContext *ctx)
2058
gen_set_label(l1);
2059
tcg_gen_exit_tb(NULL, 0);
2060
ctx->base.is_jmp = DISAS_NORETURN;
2061
- tcg_temp_free(tmp);
2062
} else {
2063
/* generate privilege trap */
2064
}
2065
@@ -XXX,XX +XXX,XX @@ static void decode_32Bit_opc(DisasContext *ctx)
2066
2067
tcg_gen_shri_tl(temp2, cpu_gpr_d[r1], 16);
2068
tcg_gen_qemu_st_tl(temp2, temp, ctx->mem_idx, MO_LEUW);
2069
-
2070
- tcg_temp_free(temp2);
2071
- tcg_temp_free(temp);
2072
break;
2073
case OPC1_32_ABS_LD_Q:
2074
address = MASK_OP_ABS_OFF18(ctx->opcode);
2075
@@ -XXX,XX +XXX,XX @@ static void decode_32Bit_opc(DisasContext *ctx)
2076
2077
tcg_gen_qemu_ld_tl(cpu_gpr_d[r1], temp, ctx->mem_idx, MO_LEUW);
2078
tcg_gen_shli_tl(cpu_gpr_d[r1], cpu_gpr_d[r1], 16);
2079
-
2080
- tcg_temp_free(temp);
2081
break;
2082
case OPC1_32_ABS_LEA:
2083
address = MASK_OP_ABS_OFF18(ctx->opcode);
2084
@@ -XXX,XX +XXX,XX @@ static void decode_32Bit_opc(DisasContext *ctx)
2085
tcg_gen_andi_tl(temp2, temp2, ~(0x1u << bpos));
2086
tcg_gen_ori_tl(temp2, temp2, (b << bpos));
2087
tcg_gen_qemu_st_tl(temp2, temp, ctx->mem_idx, MO_UB);
2088
-
2089
- tcg_temp_free(temp);
2090
- tcg_temp_free(temp2);
2091
break;
2092
/* B-format */
2093
case OPC1_32_B_CALL:
2094
@@ -XXX,XX +XXX,XX @@ static void decode_32Bit_opc(DisasContext *ctx)
2095
tcg_gen_andi_tl(temp3, cpu_gpr_d[r3], 0x1f);
2096
2097
gen_insert(cpu_gpr_d[r2], cpu_gpr_d[r1], temp, temp2, temp3);
2098
-
2099
- tcg_temp_free(temp);
2100
- tcg_temp_free(temp2);
2101
- tcg_temp_free(temp3);
2102
break;
2103
/* RCRW Format */
2104
case OPCM_32_RCRW_MASK_INSERT:
2105
--
2106
2.34.1
diff view generated by jsdifflib
Deleted patch
1
Translators are no longer required to free tcg temporaries.
2
1
3
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
5
---
6
include/exec/gen-icount.h | 2 --
7
1 file changed, 2 deletions(-)
8
9
diff --git a/include/exec/gen-icount.h b/include/exec/gen-icount.h
10
index XXXXXXX..XXXXXXX 100644
11
--- a/include/exec/gen-icount.h
12
+++ b/include/exec/gen-icount.h
13
@@ -XXX,XX +XXX,XX @@ static inline void gen_tb_start(const TranslationBlock *tb)
14
offsetof(ArchCPU, parent_obj.can_do_io) -
15
offsetof(ArchCPU, env));
16
}
17
-
18
- tcg_temp_free_i32(count);
19
}
20
21
static inline void gen_tb_end(const TranslationBlock *tb, int num_insns)
22
--
23
2.34.1
diff view generated by jsdifflib
Deleted patch
1
Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
2
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
3
---
4
docs/devel/tcg-ops.rst | 4 ----
5
1 file changed, 4 deletions(-)
6
1
7
diff --git a/docs/devel/tcg-ops.rst b/docs/devel/tcg-ops.rst
8
index XXXXXXX..XXXXXXX 100644
9
--- a/docs/devel/tcg-ops.rst
10
+++ b/docs/devel/tcg-ops.rst
11
@@ -XXX,XX +XXX,XX @@ Recommended coding rules for best performance
12
often modified, e.g. the integer registers and the condition
13
codes. TCG will be able to use host registers to store them.
14
15
-- Free temporaries when they are no longer used (``tcg_temp_free``).
16
- Since ``tcg_const_x`` also creates a temporary, you should free it
17
- after it is used.
18
-
19
- Don't hesitate to use helpers for complicated or seldom used guest
20
instructions. There is little performance advantage in using TCG to
21
implement guest instructions taking more than about twenty TCG
22
--
23
2.34.1
diff view generated by jsdifflib
Deleted patch
1
Rename from gen_tmp_value_from_imm to match gen_constant vs gen_tmp.
2
1
3
Reviewed-by: Taylor Simpson <tsimpson@quicinc.com>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
5
---
6
target/hexagon/idef-parser/parser-helpers.c | 15 +++++++--------
7
1 file changed, 7 insertions(+), 8 deletions(-)
8
9
diff --git a/target/hexagon/idef-parser/parser-helpers.c b/target/hexagon/idef-parser/parser-helpers.c
10
index XXXXXXX..XXXXXXX 100644
11
--- a/target/hexagon/idef-parser/parser-helpers.c
12
+++ b/target/hexagon/idef-parser/parser-helpers.c
13
@@ -XXX,XX +XXX,XX @@ HexValue gen_tmp_value(Context *c,
14
return rvalue;
15
}
16
17
-static HexValue gen_tmp_value_from_imm(Context *c,
18
- YYLTYPE *locp,
19
- HexValue *value)
20
+static HexValue gen_constant_from_imm(Context *c,
21
+ YYLTYPE *locp,
22
+ HexValue *value)
23
{
24
HexValue rvalue;
25
assert(value->type == IMMEDIATE);
26
@@ -XXX,XX +XXX,XX @@ static HexValue gen_tmp_value_from_imm(Context *c,
27
rvalue.is_dotnew = false;
28
rvalue.tmp.index = c->inst.tmp_count;
29
/*
30
- * Here we output the call to `tcg_const_i<width>` in
31
+ * Here we output the call to `tcg_constant_i<width>` in
32
* order to create the temporary value. Note, that we
33
* add a cast
34
*
35
- * `tcg_const_i<width>`((int<width>_t) ...)`
36
+ * `tcg_constant_i<width>`((int<width>_t) ...)`
37
*
38
* This cast is required to avoid implicit integer
39
* conversion warnings since all immediates are
40
@@ -XXX,XX +XXX,XX @@ static HexValue gen_tmp_value_from_imm(Context *c,
41
* integer is 32-bit.
42
*/
43
OUT(c, locp, "TCGv_i", &rvalue.bit_width, " tmp_", &c->inst.tmp_count);
44
- OUT(c, locp, " = tcg_const_i", &rvalue.bit_width,
45
+ OUT(c, locp, " = tcg_constant_i", &rvalue.bit_width,
46
"((int", &rvalue.bit_width, "_t) (", value, "));\n");
47
48
c->inst.tmp_count++;
49
@@ -XXX,XX +XXX,XX @@ HexValue gen_imm_qemu_tmp(Context *c, YYLTYPE *locp, unsigned bit_width,
50
HexValue rvalue_materialize(Context *c, YYLTYPE *locp, HexValue *rvalue)
51
{
52
if (rvalue->type == IMMEDIATE) {
53
- HexValue res = gen_tmp_value_from_imm(c, locp, rvalue);
54
- return res;
55
+ return gen_constant_from_imm(c, locp, rvalue);
56
}
57
return *rvalue;
58
}
59
--
60
2.34.1
diff view generated by jsdifflib
Deleted patch
1
The GET_USR_FIELD macro initializes the output, so the initial assignment
2
of zero is discarded. This is the only use of get_tmp_value outside of
3
parser-helper.c, so make it static.
4
1
5
Reviewed-by: Taylor Simpson <tsimpson@quicinc.com>
6
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
7
---
8
target/hexagon/idef-parser/parser-helpers.h | 6 ------
9
target/hexagon/idef-parser/parser-helpers.c | 2 +-
10
target/hexagon/idef-parser/idef-parser.y | 2 +-
11
3 files changed, 2 insertions(+), 8 deletions(-)
12
13
diff --git a/target/hexagon/idef-parser/parser-helpers.h b/target/hexagon/idef-parser/parser-helpers.h
14
index XXXXXXX..XXXXXXX 100644
15
--- a/target/hexagon/idef-parser/parser-helpers.h
16
+++ b/target/hexagon/idef-parser/parser-helpers.h
17
@@ -XXX,XX +XXX,XX @@ HexValue gen_tmp(Context *c,
18
unsigned bit_width,
19
HexSignedness signedness);
20
21
-HexValue gen_tmp_value(Context *c,
22
- YYLTYPE *locp,
23
- const char *value,
24
- unsigned bit_width,
25
- HexSignedness signedness);
26
-
27
HexValue gen_imm_value(Context *c __attribute__((unused)),
28
YYLTYPE *locp,
29
int value,
30
diff --git a/target/hexagon/idef-parser/parser-helpers.c b/target/hexagon/idef-parser/parser-helpers.c
31
index XXXXXXX..XXXXXXX 100644
32
--- a/target/hexagon/idef-parser/parser-helpers.c
33
+++ b/target/hexagon/idef-parser/parser-helpers.c
34
@@ -XXX,XX +XXX,XX @@ HexValue gen_tmp(Context *c,
35
return rvalue;
36
}
37
38
-HexValue gen_tmp_value(Context *c,
39
+static HexValue gen_tmp_value(Context *c,
40
YYLTYPE *locp,
41
const char *value,
42
unsigned bit_width,
43
diff --git a/target/hexagon/idef-parser/idef-parser.y b/target/hexagon/idef-parser/idef-parser.y
44
index XXXXXXX..XXXXXXX 100644
45
--- a/target/hexagon/idef-parser/idef-parser.y
46
+++ b/target/hexagon/idef-parser/idef-parser.y
47
@@ -XXX,XX +XXX,XX @@ rvalue : FAIL
48
}
49
| LPCFG
50
{
51
- $$ = gen_tmp_value(c, &@1, "0", 32, UNSIGNED);
52
+ $$ = gen_tmp(c, &@1, 32, UNSIGNED);
53
OUT(c, &@1, "GET_USR_FIELD(USR_LPCFG, ", &$$, ");\n");
54
}
55
| EXTRACT '(' rvalue ',' rvalue ')'
56
--
57
2.34.1
diff view generated by jsdifflib
Deleted patch
1
The allocation is immediately followed by tcg_gen_mov_i32,
2
so the initial assignment of zero is discarded.
3
1
4
Reviewed-by: Taylor Simpson <tsimpson@quicinc.com>
5
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
6
---
7
target/hexagon/idef-parser/parser-helpers.c | 2 +-
8
1 file changed, 1 insertion(+), 1 deletion(-)
9
10
diff --git a/target/hexagon/idef-parser/parser-helpers.c b/target/hexagon/idef-parser/parser-helpers.c
11
index XXXXXXX..XXXXXXX 100644
12
--- a/target/hexagon/idef-parser/parser-helpers.c
13
+++ b/target/hexagon/idef-parser/parser-helpers.c
14
@@ -XXX,XX +XXX,XX @@ void gen_pred_assign(Context *c, YYLTYPE *locp, HexValue *left_pred,
15
"Predicate assign not allowed in ternary!");
16
/* Extract predicate TCGv */
17
if (is_direct) {
18
- *left_pred = gen_tmp_value(c, locp, "0", 32, UNSIGNED);
19
+ *left_pred = gen_tmp(c, locp, 32, UNSIGNED);
20
}
21
/* Extract first 8 bits, and store new predicate value */
22
OUT(c, locp, "tcg_gen_mov_i32(", left_pred, ", ", &r, ");\n");
23
--
24
2.34.1
diff view generated by jsdifflib
Deleted patch
1
The allocation is immediately followed by either tcg_gen_mov_i32
2
or gen_read_preg (which contains tcg_gen_mov_i32), so the zero
3
initialization is immediately discarded.
4
1
5
Reviewed-by: Taylor Simpson <tsimpson@quicinc.com>
6
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
7
---
8
target/hexagon/idef-parser/parser-helpers.c | 2 +-
9
1 file changed, 1 insertion(+), 1 deletion(-)
10
11
diff --git a/target/hexagon/idef-parser/parser-helpers.c b/target/hexagon/idef-parser/parser-helpers.c
12
index XXXXXXX..XXXXXXX 100644
13
--- a/target/hexagon/idef-parser/parser-helpers.c
14
+++ b/target/hexagon/idef-parser/parser-helpers.c
15
@@ -XXX,XX +XXX,XX @@ HexValue gen_rvalue_pred(Context *c, YYLTYPE *locp, HexValue *pred)
16
bool is_dotnew = pred->is_dotnew;
17
char predicate_id[2] = { pred->pred.id, '\0' };
18
char *pred_str = (char *) &predicate_id;
19
- *pred = gen_tmp_value(c, locp, "0", 32, UNSIGNED);
20
+ *pred = gen_tmp(c, locp, 32, UNSIGNED);
21
if (is_dotnew) {
22
OUT(c, locp, "tcg_gen_mov_i32(", pred,
23
", hex_new_pred_value[");
24
--
25
2.34.1
diff view generated by jsdifflib
Deleted patch
1
We already have a temporary, res, which we can use for the intermediate
2
shift result. Simplify the constant to -1 instead of 0xf*f.
3
This was the last use of gen_tmp_value, so remove it.
4
1
5
Reviewed-by: Taylor Simpson <tsimpson@quicinc.com>
6
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
7
---
8
target/hexagon/idef-parser/parser-helpers.c | 30 +++------------------
9
1 file changed, 3 insertions(+), 27 deletions(-)
10
11
diff --git a/target/hexagon/idef-parser/parser-helpers.c b/target/hexagon/idef-parser/parser-helpers.c
12
index XXXXXXX..XXXXXXX 100644
13
--- a/target/hexagon/idef-parser/parser-helpers.c
14
+++ b/target/hexagon/idef-parser/parser-helpers.c
15
@@ -XXX,XX +XXX,XX @@ HexValue gen_tmp(Context *c,
16
return rvalue;
17
}
18
19
-static HexValue gen_tmp_value(Context *c,
20
- YYLTYPE *locp,
21
- const char *value,
22
- unsigned bit_width,
23
- HexSignedness signedness)
24
-{
25
- HexValue rvalue;
26
- assert(bit_width == 32 || bit_width == 64);
27
- memset(&rvalue, 0, sizeof(HexValue));
28
- rvalue.type = TEMP;
29
- rvalue.bit_width = bit_width;
30
- rvalue.signedness = signedness;
31
- rvalue.is_dotnew = false;
32
- rvalue.tmp.index = c->inst.tmp_count;
33
- OUT(c, locp, "TCGv_i", &bit_width, " tmp_", &c->inst.tmp_count,
34
- " = tcg_const_i", &bit_width, "(", value, ");\n");
35
- c->inst.tmp_count++;
36
- return rvalue;
37
-}
38
-
39
static HexValue gen_constant_from_imm(Context *c,
40
YYLTYPE *locp,
41
HexValue *value)
42
@@ -XXX,XX +XXX,XX @@ static HexValue gen_extend_tcg_width_op(Context *c,
43
OUT(c, locp, "tcg_gen_subfi_i", &dst_width);
44
OUT(c, locp, "(", &shift, ", ", &dst_width, ", ", &src_width_m, ");\n");
45
if (signedness == UNSIGNED) {
46
- const char *mask_str = (dst_width == 32)
47
- ? "0xffffffff"
48
- : "0xffffffffffffffff";
49
- HexValue mask = gen_tmp_value(c, locp, mask_str,
50
- dst_width, UNSIGNED);
51
+ HexValue mask = gen_constant(c, locp, "-1", dst_width, UNSIGNED);
52
OUT(c, locp, "tcg_gen_shr_i", &dst_width, "(",
53
- &mask, ", ", &mask, ", ", &shift, ");\n");
54
+ &res, ", ", &mask, ", ", &shift, ");\n");
55
OUT(c, locp, "tcg_gen_and_i", &dst_width, "(",
56
- &res, ", ", value, ", ", &mask, ");\n");
57
+ &res, ", ", &res, ", ", value, ");\n");
58
} else {
59
OUT(c, locp, "tcg_gen_shl_i", &dst_width, "(",
60
&res, ", ", value, ", ", &shift, ");\n");
61
--
62
2.34.1
diff view generated by jsdifflib
1
All remaining uses are strictly read-only.
1
From: Artyom Tarasenko <atar4qemu@gmail.com>
2
2
3
Reviewed-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
3
Fake access to
4
PCR Performance Control Register
5
and
6
PIC Performance Instrumentation Counter.
7
8
Ignore writes in privileged mode, and return 0 on reads.
9
10
This allows booting Tribblix, MilaX and v9os under Niagara target.
11
12
Signed-off-by: Artyom Tarasenko <atar4qemu@gmail.com>
13
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
14
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
15
Message-ID: <20250209211248.50383-1-atar4qemu@gmail.com>
5
---
16
---
6
target/sparc/translate.c | 80 +++++++++++++++++++---------------------
17
target/sparc/translate.c | 19 +++++++++++++++++++
7
1 file changed, 38 insertions(+), 42 deletions(-)
18
target/sparc/insns.decode | 7 ++++++-
19
2 files changed, 25 insertions(+), 1 deletion(-)
8
20
9
diff --git a/target/sparc/translate.c b/target/sparc/translate.c
21
diff --git a/target/sparc/translate.c b/target/sparc/translate.c
10
index XXXXXXX..XXXXXXX 100644
22
index XXXXXXX..XXXXXXX 100644
11
--- a/target/sparc/translate.c
23
--- a/target/sparc/translate.c
12
+++ b/target/sparc/translate.c
24
+++ b/target/sparc/translate.c
13
@@ -XXX,XX +XXX,XX @@ static inline void gen_op_mulscc(TCGv dst, TCGv src1, TCGv src2)
25
@@ -XXX,XX +XXX,XX @@ static TCGv do_rd_leon3_config(DisasContext *dc, TCGv dst)
14
if (!(env->y & 1))
26
15
T1 = 0;
27
TRANS(RDASR17, ASR17, do_rd_special, true, a->rd, do_rd_leon3_config)
16
*/
28
17
- zero = tcg_const_tl(0);
29
+static TCGv do_rdpic(DisasContext *dc, TCGv dst)
18
+ zero = tcg_constant_tl(0);
30
+{
19
tcg_gen_andi_tl(cpu_cc_src, src1, 0xffffffff);
31
+ return tcg_constant_tl(0);
20
tcg_gen_andi_tl(r_temp, cpu_y, 0x1);
32
+}
21
tcg_gen_andi_tl(cpu_cc_src2, src2, 0xffffffff);
33
+
22
@@ -XXX,XX +XXX,XX @@ static void gen_branch_n(DisasContext *dc, target_ulong pc1)
34
+TRANS(RDPIC, HYPV, do_rd_special, supervisor(dc), a->rd, do_rdpic)
23
tcg_gen_mov_tl(cpu_pc, cpu_npc);
35
+
24
36
+
25
tcg_gen_addi_tl(cpu_npc, cpu_npc, 4);
37
static TCGv do_rdccr(DisasContext *dc, TCGv dst)
26
- t = tcg_const_tl(pc1);
27
- z = tcg_const_tl(0);
28
+ t = tcg_constant_tl(pc1);
29
+ z = tcg_constant_tl(0);
30
tcg_gen_movcond_tl(TCG_COND_NE, cpu_npc, cpu_cond, z, t, cpu_npc);
31
32
dc->pc = DYNAMIC_PC;
33
@@ -XXX,XX +XXX,XX @@ static void gen_branch_n(DisasContext *dc, target_ulong pc1)
34
35
static inline void gen_generic_branch(DisasContext *dc)
36
{
38
{
37
- TCGv npc0 = tcg_const_tl(dc->jump_pc[0]);
39
gen_helper_rdccr(dst, tcg_env);
38
- TCGv npc1 = tcg_const_tl(dc->jump_pc[1]);
40
@@ -XXX,XX +XXX,XX @@ static void do_wrfprs(DisasContext *dc, TCGv src)
39
- TCGv zero = tcg_const_tl(0);
41
40
+ TCGv npc0 = tcg_constant_tl(dc->jump_pc[0]);
42
TRANS(WRFPRS, 64, do_wr_special, a, true, do_wrfprs)
41
+ TCGv npc1 = tcg_constant_tl(dc->jump_pc[1]);
43
42
+ TCGv zero = tcg_constant_tl(0);
44
+static bool do_priv_nop(DisasContext *dc, bool priv)
43
45
+{
44
tcg_gen_movcond_tl(TCG_COND_NE, cpu_npc, cpu_cond, zero, npc0, npc1);
46
+ if (!priv) {
45
}
47
+ return raise_priv(dc);
46
@@ -XXX,XX +XXX,XX @@ static inline void save_state(DisasContext *dc)
48
+ }
47
49
+ return advance_pc(dc);
48
static void gen_exception(DisasContext *dc, int which)
50
+}
51
+
52
+TRANS(WRPCR, HYPV, do_priv_nop, supervisor(dc))
53
+TRANS(WRPIC, HYPV, do_priv_nop, supervisor(dc))
54
+
55
static void do_wrgsr(DisasContext *dc, TCGv src)
49
{
56
{
50
- TCGv_i32 t;
57
gen_trap_ifnofpu(dc);
51
-
58
diff --git a/target/sparc/insns.decode b/target/sparc/insns.decode
52
save_state(dc);
59
index XXXXXXX..XXXXXXX 100644
53
- t = tcg_const_i32(which);
60
--- a/target/sparc/insns.decode
54
- gen_helper_raise_exception(cpu_env, t);
61
+++ b/target/sparc/insns.decode
55
+ gen_helper_raise_exception(cpu_env, tcg_constant_i32(which));
62
@@ -XXX,XX +XXX,XX @@ CALL 01 i:s30
56
dc->base.is_jmp = DISAS_NORETURN;
63
RDTICK 10 rd:5 101000 00100 0 0000000000000
57
}
64
RDPC 10 rd:5 101000 00101 0 0000000000000
58
65
RDFPRS 10 rd:5 101000 00110 0 0000000000000
59
static void gen_check_align(TCGv addr, int mask)
66
- RDASR17 10 rd:5 101000 10001 0 0000000000000
60
{
67
+ {
61
- TCGv_i32 r_mask = tcg_const_i32(mask);
68
+ RDASR17 10 rd:5 101000 10001 0 0000000000000
62
- gen_helper_check_align(cpu_env, addr, r_mask);
69
+ RDPIC 10 rd:5 101000 10001 0 0000000000000
63
+ gen_helper_check_align(cpu_env, addr, tcg_constant_i32(mask));
70
+ }
64
}
71
RDGSR 10 rd:5 101000 10011 0 0000000000000
65
72
RDSOFTINT 10 rd:5 101000 10110 0 0000000000000
66
static inline void gen_mov_pc_npc(DisasContext *dc)
73
RDTICK_CMPR 10 rd:5 101000 10111 0 0000000000000
67
@@ -XXX,XX +XXX,XX @@ static void gen_compare(DisasCompare *cmp, bool xcc, unsigned int cond,
74
@@ -XXX,XX +XXX,XX @@ CALL 01 i:s30
68
cmp->cond = logic_cond[cond];
75
WRCCR 10 00010 110000 ..... . ............. @n_r_ri
69
do_compare_dst_0:
76
WRASI 10 00011 110000 ..... . ............. @n_r_ri
70
cmp->is_bool = false;
77
WRFPRS 10 00110 110000 ..... . ............. @n_r_ri
71
- cmp->c2 = tcg_const_tl(0);
78
+ WRPCR 10 10000 110000 01000 0 0000000000000
72
+ cmp->c2 = tcg_constant_tl(0);
79
+ WRPIC 10 10001 110000 01000 0 0000000000000
73
#ifdef TARGET_SPARC64
80
{
74
if (!xcc) {
81
WRGSR 10 10011 110000 ..... . ............. @n_r_ri
75
cmp->c1 = tcg_temp_new();
82
WRPOWERDOWN 10 10011 110000 ..... . ............. @n_r_ri
76
@@ -XXX,XX +XXX,XX @@ static void gen_compare(DisasCompare *cmp, bool xcc, unsigned int cond,
77
cmp->cond = TCG_COND_NE;
78
cmp->is_bool = true;
79
cmp->c1 = r_dst = tcg_temp_new();
80
- cmp->c2 = tcg_const_tl(0);
81
+ cmp->c2 = tcg_constant_tl(0);
82
83
switch (cond) {
84
case 0x0:
85
@@ -XXX,XX +XXX,XX @@ static void gen_fcompare(DisasCompare *cmp, unsigned int cc, unsigned int cond)
86
cmp->cond = TCG_COND_NE;
87
cmp->is_bool = true;
88
cmp->c1 = r_dst = tcg_temp_new();
89
- cmp->c2 = tcg_const_tl(0);
90
+ cmp->c2 = tcg_constant_tl(0);
91
92
switch (cc) {
93
default:
94
@@ -XXX,XX +XXX,XX @@ static void gen_compare_reg(DisasCompare *cmp, int cond, TCGv r_src)
95
cmp->cond = tcg_invert_cond(gen_tcg_cond_reg[cond]);
96
cmp->is_bool = false;
97
cmp->c1 = r_src;
98
- cmp->c2 = tcg_const_tl(0);
99
+ cmp->c2 = tcg_constant_tl(0);
100
}
101
102
static inline void gen_cond_reg(TCGv r_dst, int cond, TCGv r_src)
103
@@ -XXX,XX +XXX,XX @@ static void gen_swap(DisasContext *dc, TCGv dst, TCGv src,
104
105
static void gen_ldstub(DisasContext *dc, TCGv dst, TCGv addr, int mmu_idx)
106
{
107
- TCGv m1 = tcg_const_tl(0xff);
108
+ TCGv m1 = tcg_constant_tl(0xff);
109
gen_address_mask(dc, addr);
110
tcg_gen_atomic_xchg_tl(dst, addr, m1, mmu_idx, MO_UB);
111
}
112
@@ -XXX,XX +XXX,XX @@ static void gen_ld_asi(DisasContext *dc, TCGv dst, TCGv addr,
113
break;
114
default:
115
{
116
- TCGv_i32 r_asi = tcg_const_i32(da.asi);
117
- TCGv_i32 r_mop = tcg_const_i32(memop);
118
+ TCGv_i32 r_asi = tcg_constant_i32(da.asi);
119
+ TCGv_i32 r_mop = tcg_constant_i32(memop);
120
121
save_state(dc);
122
#ifdef TARGET_SPARC64
123
@@ -XXX,XX +XXX,XX @@ static void gen_st_asi(DisasContext *dc, TCGv src, TCGv addr,
124
{
125
TCGv saddr = tcg_temp_new();
126
TCGv daddr = tcg_temp_new();
127
- TCGv four = tcg_const_tl(4);
128
+ TCGv four = tcg_constant_tl(4);
129
TCGv_i32 tmp = tcg_temp_new_i32();
130
int i;
131
132
@@ -XXX,XX +XXX,XX @@ static void gen_st_asi(DisasContext *dc, TCGv src, TCGv addr,
133
#endif
134
default:
135
{
136
- TCGv_i32 r_asi = tcg_const_i32(da.asi);
137
- TCGv_i32 r_mop = tcg_const_i32(memop & MO_SIZE);
138
+ TCGv_i32 r_asi = tcg_constant_i32(da.asi);
139
+ TCGv_i32 r_mop = tcg_constant_i32(memop & MO_SIZE);
140
141
save_state(dc);
142
#ifdef TARGET_SPARC64
143
@@ -XXX,XX +XXX,XX @@ static void gen_ldstub_asi(DisasContext *dc, TCGv dst, TCGv addr, int insn)
144
if (tb_cflags(dc->base.tb) & CF_PARALLEL) {
145
gen_helper_exit_atomic(cpu_env);
146
} else {
147
- TCGv_i32 r_asi = tcg_const_i32(da.asi);
148
- TCGv_i32 r_mop = tcg_const_i32(MO_UB);
149
+ TCGv_i32 r_asi = tcg_constant_i32(da.asi);
150
+ TCGv_i32 r_mop = tcg_constant_i32(MO_UB);
151
TCGv_i64 s64, t64;
152
153
save_state(dc);
154
t64 = tcg_temp_new_i64();
155
gen_helper_ld_asi(t64, cpu_env, addr, r_asi, r_mop);
156
157
- s64 = tcg_const_i64(0xff);
158
+ s64 = tcg_constant_i64(0xff);
159
gen_helper_st_asi(cpu_env, addr, s64, r_asi, r_mop);
160
161
tcg_gen_trunc_i64_tl(dst, t64);
162
@@ -XXX,XX +XXX,XX @@ static void gen_ldf_asi(DisasContext *dc, TCGv addr,
163
164
/* The first operation checks required alignment. */
165
memop = da.memop | MO_ALIGN_64;
166
- eight = tcg_const_tl(8);
167
+ eight = tcg_constant_tl(8);
168
for (i = 0; ; ++i) {
169
tcg_gen_qemu_ld_i64(cpu_fpr[rd / 2 + i], addr,
170
da.mem_idx, memop);
171
@@ -XXX,XX +XXX,XX @@ static void gen_ldf_asi(DisasContext *dc, TCGv addr,
172
173
default:
174
{
175
- TCGv_i32 r_asi = tcg_const_i32(da.asi);
176
- TCGv_i32 r_mop = tcg_const_i32(da.memop);
177
+ TCGv_i32 r_asi = tcg_constant_i32(da.asi);
178
+ TCGv_i32 r_mop = tcg_constant_i32(da.memop);
179
180
save_state(dc);
181
/* According to the table in the UA2011 manual, the only
182
@@ -XXX,XX +XXX,XX @@ static void gen_stf_asi(DisasContext *dc, TCGv addr,
183
184
/* The first operation checks required alignment. */
185
memop = da.memop | MO_ALIGN_64;
186
- eight = tcg_const_tl(8);
187
+ eight = tcg_constant_tl(8);
188
for (i = 0; ; ++i) {
189
tcg_gen_qemu_st_i64(cpu_fpr[rd / 2 + i], addr,
190
da.mem_idx, memop);
191
@@ -XXX,XX +XXX,XX @@ static void gen_ldda_asi(DisasContext *dc, TCGv addr, int insn, int rd)
192
real hardware allows others. This can be seen with e.g.
193
FreeBSD 10.3 wrt ASI_IC_TAG. */
194
{
195
- TCGv_i32 r_asi = tcg_const_i32(da.asi);
196
- TCGv_i32 r_mop = tcg_const_i32(da.memop);
197
+ TCGv_i32 r_asi = tcg_constant_i32(da.asi);
198
+ TCGv_i32 r_mop = tcg_constant_i32(da.memop);
199
TCGv_i64 tmp = tcg_temp_new_i64();
200
201
save_state(dc);
202
@@ -XXX,XX +XXX,XX @@ static void gen_stda_asi(DisasContext *dc, TCGv hi, TCGv addr,
203
/* ??? In theory we've handled all of the ASIs that are valid
204
for stda, and this should raise DAE_invalid_asi. */
205
{
206
- TCGv_i32 r_asi = tcg_const_i32(da.asi);
207
- TCGv_i32 r_mop = tcg_const_i32(da.memop);
208
+ TCGv_i32 r_asi = tcg_constant_i32(da.asi);
209
+ TCGv_i32 r_mop = tcg_constant_i32(da.memop);
210
TCGv_i64 t64 = tcg_temp_new_i64();
211
212
/* See above. */
213
@@ -XXX,XX +XXX,XX @@ static void gen_ldda_asi(DisasContext *dc, TCGv addr, int insn, int rd)
214
break;
215
default:
216
{
217
- TCGv_i32 r_asi = tcg_const_i32(da.asi);
218
- TCGv_i32 r_mop = tcg_const_i32(MO_UQ);
219
+ TCGv_i32 r_asi = tcg_constant_i32(da.asi);
220
+ TCGv_i32 r_mop = tcg_constant_i32(MO_UQ);
221
222
save_state(dc);
223
gen_helper_ld_asi(t64, cpu_env, addr, r_asi, r_mop);
224
@@ -XXX,XX +XXX,XX @@ static void gen_stda_asi(DisasContext *dc, TCGv hi, TCGv addr,
225
as a cacheline-style operation. */
226
{
227
TCGv d_addr = tcg_temp_new();
228
- TCGv eight = tcg_const_tl(8);
229
+ TCGv eight = tcg_constant_tl(8);
230
int i;
231
232
tcg_gen_andi_tl(d_addr, addr, -8);
233
@@ -XXX,XX +XXX,XX @@ static void gen_stda_asi(DisasContext *dc, TCGv hi, TCGv addr,
234
break;
235
default:
236
{
237
- TCGv_i32 r_asi = tcg_const_i32(da.asi);
238
- TCGv_i32 r_mop = tcg_const_i32(MO_UQ);
239
+ TCGv_i32 r_asi = tcg_constant_i32(da.asi);
240
+ TCGv_i32 r_mop = tcg_constant_i32(MO_UQ);
241
242
save_state(dc);
243
gen_helper_st_asi(cpu_env, addr, t64, r_asi, r_mop);
244
@@ -XXX,XX +XXX,XX @@ static void gen_fmovs(DisasContext *dc, DisasCompare *cmp, int rd, int rs)
245
s1 = gen_load_fpr_F(dc, rs);
246
s2 = gen_load_fpr_F(dc, rd);
247
dst = gen_dest_fpr_F(dc);
248
- zero = tcg_const_i32(0);
249
+ zero = tcg_constant_i32(0);
250
251
tcg_gen_movcond_i32(TCG_COND_NE, dst, c32, zero, s1, s2);
252
253
@@ -XXX,XX +XXX,XX @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
254
TCGv_i32 r_const;
255
256
r_tickptr = tcg_temp_new_ptr();
257
- r_const = tcg_const_i32(dc->mem_idx);
258
+ r_const = tcg_constant_i32(dc->mem_idx);
259
tcg_gen_ld_ptr(r_tickptr, cpu_env,
260
offsetof(CPUSPARCState, tick));
261
if (tb_cflags(dc->base.tb) & CF_USE_ICOUNT) {
262
@@ -XXX,XX +XXX,XX @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
263
TCGv_i32 r_const;
264
265
r_tickptr = tcg_temp_new_ptr();
266
- r_const = tcg_const_i32(dc->mem_idx);
267
+ r_const = tcg_constant_i32(dc->mem_idx);
268
tcg_gen_ld_ptr(r_tickptr, cpu_env,
269
offsetof(CPUSPARCState, stick));
270
if (tb_cflags(dc->base.tb) & CF_USE_ICOUNT) {
271
@@ -XXX,XX +XXX,XX @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
272
TCGv_i32 r_const;
273
274
r_tickptr = tcg_temp_new_ptr();
275
- r_const = tcg_const_i32(dc->mem_idx);
276
+ r_const = tcg_constant_i32(dc->mem_idx);
277
tcg_gen_ld_ptr(r_tickptr, cpu_env,
278
offsetof(CPUSPARCState, tick));
279
if (tb_cflags(dc->base.tb) & CF_USE_ICOUNT) {
280
--
83
--
281
2.34.1
84
2.43.0
diff view generated by jsdifflib
Deleted patch
1
Replace ifdefs with C, tcg_const_i32 with tcg_constant_i32.
2
We only need a single temporary for this.
3
1
4
Reviewed-by: Max Filippov <jcmvbkbc@gmail.com>
5
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
6
---
7
target/xtensa/translate.c | 18 +++++++-----------
8
1 file changed, 7 insertions(+), 11 deletions(-)
9
10
diff --git a/target/xtensa/translate.c b/target/xtensa/translate.c
11
index XXXXXXX..XXXXXXX 100644
12
--- a/target/xtensa/translate.c
13
+++ b/target/xtensa/translate.c
14
@@ -XXX,XX +XXX,XX @@ static void translate_b(DisasContext *dc, const OpcodeArg arg[],
15
static void translate_bb(DisasContext *dc, const OpcodeArg arg[],
16
const uint32_t par[])
17
{
18
-#if TARGET_BIG_ENDIAN
19
- TCGv_i32 bit = tcg_const_i32(0x80000000u);
20
-#else
21
- TCGv_i32 bit = tcg_const_i32(0x00000001u);
22
-#endif
23
TCGv_i32 tmp = tcg_temp_new_i32();
24
+
25
tcg_gen_andi_i32(tmp, arg[1].in, 0x1f);
26
-#if TARGET_BIG_ENDIAN
27
- tcg_gen_shr_i32(bit, bit, tmp);
28
-#else
29
- tcg_gen_shl_i32(bit, bit, tmp);
30
-#endif
31
- tcg_gen_and_i32(tmp, arg[0].in, bit);
32
+ if (TARGET_BIG_ENDIAN) {
33
+ tcg_gen_shr_i32(tmp, tcg_constant_i32(0x80000000u), tmp);
34
+ } else {
35
+ tcg_gen_shl_i32(tmp, tcg_constant_i32(0x00000001u), tmp);
36
+ }
37
+ tcg_gen_and_i32(tmp, arg[0].in, tmp);
38
gen_brcondi(dc, par[0], tmp, 0, arg[2].imm);
39
}
40
41
--
42
2.34.1
diff view generated by jsdifflib
Deleted patch
1
All writes to arg[0].out; use tcg_constant_i32.
2
1
3
Reviewed-by: Max Filippov <jcmvbkbc@gmail.com>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
5
---
6
target/xtensa/translate.c | 8 ++++----
7
1 file changed, 4 insertions(+), 4 deletions(-)
8
9
diff --git a/target/xtensa/translate.c b/target/xtensa/translate.c
10
index XXXXXXX..XXXXXXX 100644
11
--- a/target/xtensa/translate.c
12
+++ b/target/xtensa/translate.c
13
@@ -XXX,XX +XXX,XX @@ static void translate_callxw(DisasContext *dc, const OpcodeArg arg[],
14
static void translate_clamps(DisasContext *dc, const OpcodeArg arg[],
15
const uint32_t par[])
16
{
17
- TCGv_i32 tmp1 = tcg_const_i32(-1u << arg[2].imm);
18
- TCGv_i32 tmp2 = tcg_const_i32((1 << arg[2].imm) - 1);
19
+ TCGv_i32 tmp1 = tcg_constant_i32(-1u << arg[2].imm);
20
+ TCGv_i32 tmp2 = tcg_constant_i32((1 << arg[2].imm) - 1);
21
22
- tcg_gen_smax_i32(tmp1, tmp1, arg[1].in);
23
- tcg_gen_smin_i32(arg[0].out, tmp1, tmp2);
24
+ tcg_gen_smax_i32(arg[0].out, tmp1, arg[1].in);
25
+ tcg_gen_smin_i32(arg[0].out, arg[0].out, tmp2);
26
}
27
28
static void translate_clrb_expstate(DisasContext *dc, const OpcodeArg arg[],
29
--
30
2.34.1
diff view generated by jsdifflib
Deleted patch
1
Use addi on the addition side and tcg_constant_i32 on the other.
2
1
3
Reviewed-by: Max Filippov <jcmvbkbc@gmail.com>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
5
---
6
target/xtensa/translate.c | 6 +++---
7
1 file changed, 3 insertions(+), 3 deletions(-)
8
9
diff --git a/target/xtensa/translate.c b/target/xtensa/translate.c
10
index XXXXXXX..XXXXXXX 100644
11
--- a/target/xtensa/translate.c
12
+++ b/target/xtensa/translate.c
13
@@ -XXX,XX +XXX,XX @@ static void translate_l32r(DisasContext *dc, const OpcodeArg arg[],
14
TCGv_i32 tmp;
15
16
if (dc->base.tb->flags & XTENSA_TBFLAG_LITBASE) {
17
- tmp = tcg_const_i32(arg[1].raw_imm - 1);
18
- tcg_gen_add_i32(tmp, cpu_SR[LITBASE], tmp);
19
+ tmp = tcg_temp_new();
20
+ tcg_gen_addi_i32(tmp, cpu_SR[LITBASE], arg[1].raw_imm - 1);
21
} else {
22
- tmp = tcg_const_i32(arg[1].imm);
23
+ tmp = tcg_constant_i32(arg[1].imm);
24
}
25
tcg_gen_qemu_ld32u(arg[0].out, tmp, dc->cring);
26
}
27
--
28
2.34.1
diff view generated by jsdifflib
Deleted patch
1
Reviewed-by: Max Filippov <jcmvbkbc@gmail.com>
2
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
3
---
4
target/xtensa/translate.c | 8 ++++----
5
1 file changed, 4 insertions(+), 4 deletions(-)
6
1
7
diff --git a/target/xtensa/translate.c b/target/xtensa/translate.c
8
index XXXXXXX..XXXXXXX 100644
9
--- a/target/xtensa/translate.c
10
+++ b/target/xtensa/translate.c
11
@@ -XXX,XX +XXX,XX @@ static uint32_t test_exceptions_retw(DisasContext *dc, const OpcodeArg arg[],
12
static void translate_retw(DisasContext *dc, const OpcodeArg arg[],
13
const uint32_t par[])
14
{
15
- TCGv_i32 tmp = tcg_const_i32(1);
16
- tcg_gen_shl_i32(tmp, tmp, cpu_SR[WINDOW_BASE]);
17
+ TCGv_i32 tmp = tcg_temp_new();
18
+ tcg_gen_shl_i32(tmp, tcg_constant_i32(1), cpu_SR[WINDOW_BASE]);
19
tcg_gen_andc_i32(cpu_SR[WINDOW_START],
20
cpu_SR[WINDOW_START], tmp);
21
tcg_gen_movi_i32(tmp, dc->pc);
22
@@ -XXX,XX +XXX,XX @@ static void translate_rfi(DisasContext *dc, const OpcodeArg arg[],
23
static void translate_rfw(DisasContext *dc, const OpcodeArg arg[],
24
const uint32_t par[])
25
{
26
- TCGv_i32 tmp = tcg_const_i32(1);
27
+ TCGv_i32 tmp = tcg_temp_new();
28
29
tcg_gen_andi_i32(cpu_SR[PS], cpu_SR[PS], ~PS_EXCM);
30
- tcg_gen_shl_i32(tmp, tmp, cpu_SR[WINDOW_BASE]);
31
+ tcg_gen_shl_i32(tmp, tcg_constant_i32(1), cpu_SR[WINDOW_BASE]);
32
33
if (par[0]) {
34
tcg_gen_andc_i32(cpu_SR[WINDOW_START],
35
--
36
2.34.1
diff view generated by jsdifflib