1
The following changes since commit ad1b4ec39caa5b3f17cbd8160283a03a3dcfe2ae:
1
Last few changes before rc0: a few bug fixes, but mostly
2
docs stuff.
2
3
3
Merge remote-tracking branch 'remotes/kraxel/tags/input-20180515-pull-request' into staging (2018-05-15 12:50:06 +0100)
4
-- PMM
5
6
The following changes since commit a97fca4ceb9d9b10aa8b582e817a5ee6c42ffbaf:
7
8
Merge remote-tracking branch 'remotes/mst/tags/for_upstream3' into staging (2021-07-16 16:34:42 +0100)
4
9
5
are available in the Git repository at:
10
are available in the Git repository at:
6
11
7
git://git.linaro.org/people/pmaydell/qemu-arm.git tags/pull-target-arm-20180515
12
https://git.linaro.org/people/pmaydell/qemu-arm.git tags/pull-target-arm-20210718
8
13
9
for you to fetch changes up to ae7651804748c6b479d5ae09aeac4edb9c44f76e:
14
for you to fetch changes up to 8fe612a183dec4c63afdc57537079bc742d024ca:
10
15
11
tcg: Optionally log FPU state in TCG -d cpu logging (2018-05-15 14:58:44 +0100)
16
target/arm: Remove duplicate 'plus1' function from Neon and SVE decode (2021-07-18 10:59:47 +0100)
12
17
13
----------------------------------------------------------------
18
----------------------------------------------------------------
14
target-arm queue:
19
target-arm queue:
15
* Fix coverity nit in int_to_float code
20
* Remove duplicate 'plus1' function from Neon and SVE decode
16
* Don't set Invalid for float-to-int(MAXINT)
21
* Fix offsets for TTBCR for big-endian hosts
17
* Fix fp_status_f16 tininess before rounding
22
* docs: fix copyright date
18
* Add various missing insns from the v8.2-FP16 extension
23
* docs: add license/version info to HTML footers
19
* Fix sqrt_f16 exception raising
24
* docs: add an About section
20
* sdcard: Correct CRC16 offset in sd_function_switch()
25
* docs: document some more arm boards
21
* tcg: Optionally log FPU state in TCG -d cpu logging
22
26
23
----------------------------------------------------------------
27
----------------------------------------------------------------
24
Alex Bennée (5):
28
Peter Maydell (11):
25
fpu/softfloat: int_to_float ensure r fully initialised
29
docs: Fix documentation Copyright date
26
target/arm: Implement FCMP for fp16
30
docs: Stop calling the top level subsections of our manual 'manuals'
27
target/arm: Implement FCSEL for fp16
31
docs: Remove "Contents:" lines from top-level subsections
28
target/arm: Implement FMOV (immediate) for fp16
32
docs: Move deprecation, build and license info out of system/
29
target/arm: Fix sqrt_f16 exception raising
33
docs: Add some actual About text to about/index.rst
34
docs: Add license note to the HTML page footer
35
docs: Add QEMU version information to HTML footer
36
docs: Add skeletal documentation of cubieboard
37
docs: Add skeletal documentation of the emcraft-sf2
38
docs: Add skeletal documentation of highbank and midway
39
target/arm: Remove duplicate 'plus1' function from Neon and SVE decode
30
40
31
Peter Maydell (3):
41
Richard Henderson (1):
32
fpu/softfloat: Don't set Invalid for float-to-int(MAXINT)
42
target/arm: Fix offsets for TTBCR
33
target/arm: Fix fp_status_f16 tininess before rounding
34
tcg: Optionally log FPU state in TCG -d cpu logging
35
43
36
Philippe Mathieu-Daudé (1):
44
docs/_templates/footer.html | 14 ++++++++++++++
37
sdcard: Correct CRC16 offset in sd_function_switch()
45
docs/{system => about}/build-platforms.rst | 0
46
docs/{system => about}/deprecated.rst | 0
47
docs/about/index.rst | 27 +++++++++++++++++++++++++++
48
docs/{system => about}/license.rst | 0
49
docs/{system => about}/removed-features.rst | 0
50
docs/conf.py | 2 +-
51
docs/devel/index.rst | 7 +------
52
docs/index.rst | 1 +
53
docs/interop/index.rst | 9 ++-------
54
docs/meson.build | 3 ++-
55
docs/specs/index.rst | 7 ++-----
56
docs/system/arm/cubieboard.rst | 16 ++++++++++++++++
57
docs/system/arm/emcraft-sf2.rst | 15 +++++++++++++++
58
docs/system/arm/highbank.rst | 19 +++++++++++++++++++
59
docs/system/index.rst | 11 +----------
60
docs/system/target-arm.rst | 3 +++
61
docs/tools/index.rst | 7 ++-----
62
docs/user/index.rst | 7 +------
63
target/arm/neon-ls.decode | 4 ++--
64
target/arm/neon-shared.decode | 2 +-
65
target/arm/sve.decode | 2 +-
66
target/arm/helper.c | 11 +++++++----
67
target/arm/translate-neon.c | 5 -----
68
target/arm/translate-sve.c | 5 -----
69
MAINTAINERS | 4 ++++
70
26 files changed, 122 insertions(+), 59 deletions(-)
71
create mode 100644 docs/_templates/footer.html
72
rename docs/{system => about}/build-platforms.rst (100%)
73
rename docs/{system => about}/deprecated.rst (100%)
74
create mode 100644 docs/about/index.rst
75
rename docs/{system => about}/license.rst (100%)
76
rename docs/{system => about}/removed-features.rst (100%)
77
create mode 100644 docs/system/arm/cubieboard.rst
78
create mode 100644 docs/system/arm/emcraft-sf2.rst
79
create mode 100644 docs/system/arm/highbank.rst
38
80
39
Richard Henderson (7):
40
target/arm: Implement FMOV (general) for fp16
41
target/arm: Early exit after unallocated_encoding in disas_fp_int_conv
42
target/arm: Implement FCVT (scalar, integer) for fp16
43
target/arm: Implement FCVT (scalar, fixed-point) for fp16
44
target/arm: Introduce and use read_fp_hreg
45
target/arm: Implement FP data-processing (2 source) for fp16
46
target/arm: Implement FP data-processing (3 source) for fp16
47
48
include/qemu/log.h | 1 +
49
target/arm/helper-a64.h | 2 +
50
target/arm/helper.h | 6 +
51
accel/tcg/cpu-exec.c | 9 +-
52
fpu/softfloat.c | 6 +-
53
hw/sd/sd.c | 2 +-
54
target/arm/cpu.c | 2 +
55
target/arm/helper-a64.c | 10 ++
56
target/arm/helper.c | 38 +++-
57
target/arm/translate-a64.c | 421 ++++++++++++++++++++++++++++++++++++++-------
58
util/log.c | 2 +
59
11 files changed, 428 insertions(+), 71 deletions(-)
60
diff view generated by jsdifflib
Deleted patch
1
From: Alex Bennée <alex.bennee@linaro.org>
2
1
3
Reported by Coverity (CID1390635). We ensure this for uint_to_float
4
later on so we might as well mirror that.
5
6
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
7
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
8
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
9
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
10
---
11
fpu/softfloat.c | 2 +-
12
1 file changed, 1 insertion(+), 1 deletion(-)
13
14
diff --git a/fpu/softfloat.c b/fpu/softfloat.c
15
index XXXXXXX..XXXXXXX 100644
16
--- a/fpu/softfloat.c
17
+++ b/fpu/softfloat.c
18
@@ -XXX,XX +XXX,XX @@ FLOAT_TO_UINT(64, 64)
19
20
static FloatParts int_to_float(int64_t a, float_status *status)
21
{
22
- FloatParts r;
23
+ FloatParts r = {};
24
if (a == 0) {
25
r.cls = float_class_zero;
26
r.sign = false;
27
--
28
2.17.0
29
30
diff view generated by jsdifflib
1
From: Richard Henderson <richard.henderson@linaro.org>
1
From: Richard Henderson <richard.henderson@linaro.org>
2
2
3
Cc: qemu-stable@nongnu.org
3
The functions vmsa_ttbcr_write and vmsa_ttbcr_raw_write expect
4
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
4
the offset to be for the complete TCR structure, not the offset
5
to the low 32-bits of a uint64_t. Using offsetoflow32 in this
6
case breaks big-endian hosts.
7
8
For TTBCR2, we do want the high 32-bits of a uint64_t.
9
Use cp15.tcr_el[*].raw_tcr as the offsetofhigh32 argument to
10
clarify this.
11
12
Buglink: https://gitlab.com/qemu-project/qemu/-/issues/187
5
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
13
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
6
Tested-by: Alex Bennée <alex.bennee@linaro.org>
14
Message-id: 20210709230621.938821-2-richard.henderson@linaro.org
7
Message-id: 20180512003217.9105-4-richard.henderson@linaro.org
15
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
8
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
16
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
9
---
17
---
10
target/arm/helper.h | 6 +++
18
target/arm/helper.c | 11 +++++++----
11
target/arm/helper.c | 38 ++++++++++++++-
19
1 file changed, 7 insertions(+), 4 deletions(-)
12
target/arm/translate-a64.c | 96 +++++++++++++++++++++++++++++++-------
13
3 files changed, 122 insertions(+), 18 deletions(-)
14
20
15
diff --git a/target/arm/helper.h b/target/arm/helper.h
16
index XXXXXXX..XXXXXXX 100644
17
--- a/target/arm/helper.h
18
+++ b/target/arm/helper.h
19
@@ -XXX,XX +XXX,XX @@ DEF_HELPER_3(vfp_touhd_round_to_zero, i64, f64, i32, ptr)
20
DEF_HELPER_3(vfp_tould_round_to_zero, i64, f64, i32, ptr)
21
DEF_HELPER_3(vfp_touhh, i32, f16, i32, ptr)
22
DEF_HELPER_3(vfp_toshh, i32, f16, i32, ptr)
23
+DEF_HELPER_3(vfp_toulh, i32, f16, i32, ptr)
24
+DEF_HELPER_3(vfp_toslh, i32, f16, i32, ptr)
25
+DEF_HELPER_3(vfp_touqh, i64, f16, i32, ptr)
26
+DEF_HELPER_3(vfp_tosqh, i64, f16, i32, ptr)
27
DEF_HELPER_3(vfp_toshs, i32, f32, i32, ptr)
28
DEF_HELPER_3(vfp_tosls, i32, f32, i32, ptr)
29
DEF_HELPER_3(vfp_tosqs, i64, f32, i32, ptr)
30
@@ -XXX,XX +XXX,XX @@ DEF_HELPER_3(vfp_ultod, f64, i64, i32, ptr)
31
DEF_HELPER_3(vfp_uqtod, f64, i64, i32, ptr)
32
DEF_HELPER_3(vfp_sltoh, f16, i32, i32, ptr)
33
DEF_HELPER_3(vfp_ultoh, f16, i32, i32, ptr)
34
+DEF_HELPER_3(vfp_sqtoh, f16, i64, i32, ptr)
35
+DEF_HELPER_3(vfp_uqtoh, f16, i64, i32, ptr)
36
37
DEF_HELPER_FLAGS_2(set_rmode, TCG_CALL_NO_RWG, i32, i32, ptr)
38
DEF_HELPER_FLAGS_2(set_neon_rmode, TCG_CALL_NO_RWG, i32, i32, env)
39
diff --git a/target/arm/helper.c b/target/arm/helper.c
21
diff --git a/target/arm/helper.c b/target/arm/helper.c
40
index XXXXXXX..XXXXXXX 100644
22
index XXXXXXX..XXXXXXX 100644
41
--- a/target/arm/helper.c
23
--- a/target/arm/helper.c
42
+++ b/target/arm/helper.c
24
+++ b/target/arm/helper.c
43
@@ -XXX,XX +XXX,XX @@ VFP_CONV_FIX_A64(uq, s, 32, 64, uint64)
25
@@ -XXX,XX +XXX,XX @@ static const ARMCPRegInfo vmsa_cp_reginfo[] = {
44
#undef VFP_CONV_FIX_A64
26
.access = PL1_RW, .accessfn = access_tvm_trvm,
45
27
.type = ARM_CP_ALIAS, .writefn = vmsa_ttbcr_write,
46
/* Conversion to/from f16 can overflow to infinity before/after scaling.
28
.raw_writefn = vmsa_ttbcr_raw_write,
47
- * Therefore we convert to f64 (which does not round), scale,
29
- .bank_fieldoffsets = { offsetoflow32(CPUARMState, cp15.tcr_el[3]),
48
- * and then convert f64 to f16 (which may round).
30
- offsetoflow32(CPUARMState, cp15.tcr_el[1])} },
49
+ * Therefore we convert to f64, scale, and then convert f64 to f16; or
31
+ /* No offsetoflow32 -- pass the entire TCR to writefn/raw_writefn. */
50
+ * vice versa for conversion to integer.
32
+ .bank_fieldoffsets = { offsetof(CPUARMState, cp15.tcr_el[3]),
51
+ *
33
+ offsetof(CPUARMState, cp15.tcr_el[1])} },
52
+ * For 16- and 32-bit integers, the conversion to f64 never rounds.
34
REGINFO_SENTINEL
53
+ * For 64-bit integers, any integer that would cause rounding will also
35
};
54
+ * overflow to f16 infinity, so there is no double rounding problem.
36
55
*/
37
@@ -XXX,XX +XXX,XX @@ static const ARMCPRegInfo ttbcr2_reginfo = {
56
38
.name = "TTBCR2", .cp = 15, .opc1 = 0, .crn = 2, .crm = 0, .opc2 = 3,
57
static float16 do_postscale_fp16(float64 f, int shift, float_status *fpst)
39
.access = PL1_RW, .accessfn = access_tvm_trvm,
58
@@ -XXX,XX +XXX,XX @@ float16 HELPER(vfp_ultoh)(uint32_t x, uint32_t shift, void *fpst)
40
.type = ARM_CP_ALIAS,
59
return do_postscale_fp16(uint32_to_float64(x, fpst), shift, fpst);
41
- .bank_fieldoffsets = { offsetofhigh32(CPUARMState, cp15.tcr_el[3]),
60
}
42
- offsetofhigh32(CPUARMState, cp15.tcr_el[1]) },
61
43
+ .bank_fieldoffsets = {
62
+float16 HELPER(vfp_sqtoh)(uint64_t x, uint32_t shift, void *fpst)
44
+ offsetofhigh32(CPUARMState, cp15.tcr_el[3].raw_tcr),
63
+{
45
+ offsetofhigh32(CPUARMState, cp15.tcr_el[1].raw_tcr),
64
+ return do_postscale_fp16(int64_to_float64(x, fpst), shift, fpst);
46
+ },
65
+}
47
};
66
+
48
67
+float16 HELPER(vfp_uqtoh)(uint64_t x, uint32_t shift, void *fpst)
49
static void omap_ticonfig_write(CPUARMState *env, const ARMCPRegInfo *ri,
68
+{
69
+ return do_postscale_fp16(uint64_to_float64(x, fpst), shift, fpst);
70
+}
71
+
72
static float64 do_prescale_fp16(float16 f, int shift, float_status *fpst)
73
{
74
if (unlikely(float16_is_any_nan(f))) {
75
@@ -XXX,XX +XXX,XX @@ uint32_t HELPER(vfp_touhh)(float16 x, uint32_t shift, void *fpst)
76
return float64_to_uint16(do_prescale_fp16(x, shift, fpst), fpst);
77
}
78
79
+uint32_t HELPER(vfp_toslh)(float16 x, uint32_t shift, void *fpst)
80
+{
81
+ return float64_to_int32(do_prescale_fp16(x, shift, fpst), fpst);
82
+}
83
+
84
+uint32_t HELPER(vfp_toulh)(float16 x, uint32_t shift, void *fpst)
85
+{
86
+ return float64_to_uint32(do_prescale_fp16(x, shift, fpst), fpst);
87
+}
88
+
89
+uint64_t HELPER(vfp_tosqh)(float16 x, uint32_t shift, void *fpst)
90
+{
91
+ return float64_to_int64(do_prescale_fp16(x, shift, fpst), fpst);
92
+}
93
+
94
+uint64_t HELPER(vfp_touqh)(float16 x, uint32_t shift, void *fpst)
95
+{
96
+ return float64_to_uint64(do_prescale_fp16(x, shift, fpst), fpst);
97
+}
98
+
99
/* Set the current fp rounding mode and return the old one.
100
* The argument is a softfloat float_round_ value.
101
*/
102
diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c
103
index XXXXXXX..XXXXXXX 100644
104
--- a/target/arm/translate-a64.c
105
+++ b/target/arm/translate-a64.c
106
@@ -XXX,XX +XXX,XX @@ static void handle_fpfpcvt(DisasContext *s, int rd, int rn, int opcode,
107
bool itof, int rmode, int scale, int sf, int type)
108
{
109
bool is_signed = !(opcode & 1);
110
- bool is_double = type;
111
TCGv_ptr tcg_fpstatus;
112
- TCGv_i32 tcg_shift;
113
+ TCGv_i32 tcg_shift, tcg_single;
114
+ TCGv_i64 tcg_double;
115
116
- tcg_fpstatus = get_fpstatus_ptr(false);
117
+ tcg_fpstatus = get_fpstatus_ptr(type == 3);
118
119
tcg_shift = tcg_const_i32(64 - scale);
120
121
@@ -XXX,XX +XXX,XX @@ static void handle_fpfpcvt(DisasContext *s, int rd, int rn, int opcode,
122
tcg_int = tcg_extend;
123
}
124
125
- if (is_double) {
126
- TCGv_i64 tcg_double = tcg_temp_new_i64();
127
+ switch (type) {
128
+ case 1: /* float64 */
129
+ tcg_double = tcg_temp_new_i64();
130
if (is_signed) {
131
gen_helper_vfp_sqtod(tcg_double, tcg_int,
132
tcg_shift, tcg_fpstatus);
133
@@ -XXX,XX +XXX,XX @@ static void handle_fpfpcvt(DisasContext *s, int rd, int rn, int opcode,
134
}
135
write_fp_dreg(s, rd, tcg_double);
136
tcg_temp_free_i64(tcg_double);
137
- } else {
138
- TCGv_i32 tcg_single = tcg_temp_new_i32();
139
+ break;
140
+
141
+ case 0: /* float32 */
142
+ tcg_single = tcg_temp_new_i32();
143
if (is_signed) {
144
gen_helper_vfp_sqtos(tcg_single, tcg_int,
145
tcg_shift, tcg_fpstatus);
146
@@ -XXX,XX +XXX,XX @@ static void handle_fpfpcvt(DisasContext *s, int rd, int rn, int opcode,
147
}
148
write_fp_sreg(s, rd, tcg_single);
149
tcg_temp_free_i32(tcg_single);
150
+ break;
151
+
152
+ case 3: /* float16 */
153
+ tcg_single = tcg_temp_new_i32();
154
+ if (is_signed) {
155
+ gen_helper_vfp_sqtoh(tcg_single, tcg_int,
156
+ tcg_shift, tcg_fpstatus);
157
+ } else {
158
+ gen_helper_vfp_uqtoh(tcg_single, tcg_int,
159
+ tcg_shift, tcg_fpstatus);
160
+ }
161
+ write_fp_sreg(s, rd, tcg_single);
162
+ tcg_temp_free_i32(tcg_single);
163
+ break;
164
+
165
+ default:
166
+ g_assert_not_reached();
167
}
168
} else {
169
TCGv_i64 tcg_int = cpu_reg(s, rd);
170
@@ -XXX,XX +XXX,XX @@ static void handle_fpfpcvt(DisasContext *s, int rd, int rn, int opcode,
171
172
gen_helper_set_rmode(tcg_rmode, tcg_rmode, tcg_fpstatus);
173
174
- if (is_double) {
175
- TCGv_i64 tcg_double = read_fp_dreg(s, rn);
176
+ switch (type) {
177
+ case 1: /* float64 */
178
+ tcg_double = read_fp_dreg(s, rn);
179
if (is_signed) {
180
if (!sf) {
181
gen_helper_vfp_tosld(tcg_int, tcg_double,
182
@@ -XXX,XX +XXX,XX @@ static void handle_fpfpcvt(DisasContext *s, int rd, int rn, int opcode,
183
tcg_shift, tcg_fpstatus);
184
}
185
}
186
+ if (!sf) {
187
+ tcg_gen_ext32u_i64(tcg_int, tcg_int);
188
+ }
189
tcg_temp_free_i64(tcg_double);
190
- } else {
191
- TCGv_i32 tcg_single = read_fp_sreg(s, rn);
192
+ break;
193
+
194
+ case 0: /* float32 */
195
+ tcg_single = read_fp_sreg(s, rn);
196
if (sf) {
197
if (is_signed) {
198
gen_helper_vfp_tosqs(tcg_int, tcg_single,
199
@@ -XXX,XX +XXX,XX @@ static void handle_fpfpcvt(DisasContext *s, int rd, int rn, int opcode,
200
tcg_temp_free_i32(tcg_dest);
201
}
202
tcg_temp_free_i32(tcg_single);
203
+ break;
204
+
205
+ case 3: /* float16 */
206
+ tcg_single = read_fp_sreg(s, rn);
207
+ if (sf) {
208
+ if (is_signed) {
209
+ gen_helper_vfp_tosqh(tcg_int, tcg_single,
210
+ tcg_shift, tcg_fpstatus);
211
+ } else {
212
+ gen_helper_vfp_touqh(tcg_int, tcg_single,
213
+ tcg_shift, tcg_fpstatus);
214
+ }
215
+ } else {
216
+ TCGv_i32 tcg_dest = tcg_temp_new_i32();
217
+ if (is_signed) {
218
+ gen_helper_vfp_toslh(tcg_dest, tcg_single,
219
+ tcg_shift, tcg_fpstatus);
220
+ } else {
221
+ gen_helper_vfp_toulh(tcg_dest, tcg_single,
222
+ tcg_shift, tcg_fpstatus);
223
+ }
224
+ tcg_gen_extu_i32_i64(tcg_int, tcg_dest);
225
+ tcg_temp_free_i32(tcg_dest);
226
+ }
227
+ tcg_temp_free_i32(tcg_single);
228
+ break;
229
+
230
+ default:
231
+ g_assert_not_reached();
232
}
233
234
gen_helper_set_rmode(tcg_rmode, tcg_rmode, tcg_fpstatus);
235
tcg_temp_free_i32(tcg_rmode);
236
-
237
- if (!sf) {
238
- tcg_gen_ext32u_i64(tcg_int, tcg_int);
239
- }
240
}
241
242
tcg_temp_free_ptr(tcg_fpstatus);
243
@@ -XXX,XX +XXX,XX @@ static void disas_fp_int_conv(DisasContext *s, uint32_t insn)
244
/* actual FP conversions */
245
bool itof = extract32(opcode, 1, 1);
246
247
- if (type > 1 || (rmode != 0 && opcode > 1)) {
248
+ if (rmode != 0 && opcode > 1) {
249
+ unallocated_encoding(s);
250
+ return;
251
+ }
252
+ switch (type) {
253
+ case 0: /* float32 */
254
+ case 1: /* float64 */
255
+ break;
256
+ case 3: /* float16 */
257
+ if (arm_dc_feature(s, ARM_FEATURE_V8_FP16)) {
258
+ break;
259
+ }
260
+ /* fallthru */
261
+ default:
262
unallocated_encoding(s);
263
return;
264
}
265
--
50
--
266
2.17.0
51
2.20.1
267
52
268
53
diff view generated by jsdifflib
1
From: Philippe Mathieu-Daudé <f4bug@amsat.org>
1
In commit 6d8980a38fa we updated the copyright string we present to
2
the user in -version output, About dialogs, etc, but we forgot that
3
the Sphinx manuals have a separate copyright string setting. Update
4
that one too.
2
5
3
Per the Physical Layer Simplified Spec. "4.3.10.4 Switch Function Status":
4
5
The block length is predefined to 512 bits
6
7
and "4.10.2 SD Status":
8
9
The SD Status contains status bits that are related to the SD Memory Card
10
proprietary features and may be used for future application-specific usage.
11
The size of the SD Status is one data block of 512 bit. The content of this
12
register is transmitted to the Host over the DAT bus along with a 16-bit CRC.
13
14
Thus the 16-bit CRC goes at offset 64.
15
16
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
17
Message-id: 20180509060104.4458-3-f4bug@amsat.org
18
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
19
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
6
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
7
Acked-by: Markus Armbruster <armbru@redhat.com>
8
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
9
Message-id: 20210705095547.15790-2-peter.maydell@linaro.org
20
---
10
---
21
hw/sd/sd.c | 2 +-
11
docs/conf.py | 2 +-
22
1 file changed, 1 insertion(+), 1 deletion(-)
12
1 file changed, 1 insertion(+), 1 deletion(-)
23
13
24
diff --git a/hw/sd/sd.c b/hw/sd/sd.c
14
diff --git a/docs/conf.py b/docs/conf.py
25
index XXXXXXX..XXXXXXX 100644
15
index XXXXXXX..XXXXXXX 100644
26
--- a/hw/sd/sd.c
16
--- a/docs/conf.py
27
+++ b/hw/sd/sd.c
17
+++ b/docs/conf.py
28
@@ -XXX,XX +XXX,XX @@ static void sd_function_switch(SDState *sd, uint32_t arg)
18
@@ -XXX,XX +XXX,XX @@
29
sd->data[14 + (i >> 1)] = new_func << ((i * 4) & 4);
19
30
}
20
# General information about the project.
31
memset(&sd->data[17], 0, 47);
21
project = u'QEMU'
32
- stw_be_p(sd->data + 65, sd_crc16(sd->data, 64));
22
-copyright = u'2020, The QEMU Project Developers'
33
+ stw_be_p(sd->data + 64, sd_crc16(sd->data, 64));
23
+copyright = u'2021, The QEMU Project Developers'
34
}
24
author = u'The QEMU Project Developers'
35
25
36
static inline bool sd_wp_addr(SDState *sd, uint64_t addr)
26
# The version info for the project you're documenting, acts as replacement for
37
--
27
--
38
2.17.0
28
2.20.1
39
29
40
30
diff view generated by jsdifflib
1
From: Richard Henderson <richard.henderson@linaro.org>
1
We merged our previous multiple-manual setup into a single Sphinx
2
manual, but we left some text in the various index.rst lines that
3
still calls the top level subsections separate 'manuals'. Update
4
them to talk about "this section of the manual" instead, and remove
5
now-obsolete comments about how the index.rst files are the "top
6
level page for the 'foo' manual".
2
7
3
No sense in emitting code after the exception.
8
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
9
Acked-by: Markus Armbruster <armbru@redhat.com>
10
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
11
Message-id: 20210705095547.15790-3-peter.maydell@linaro.org
12
---
13
docs/devel/index.rst | 5 +----
14
docs/interop/index.rst | 7 ++-----
15
docs/specs/index.rst | 5 ++---
16
docs/system/index.rst | 5 +----
17
docs/tools/index.rst | 5 ++---
18
docs/user/index.rst | 5 +----
19
6 files changed, 9 insertions(+), 23 deletions(-)
4
20
5
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
21
diff --git a/docs/devel/index.rst b/docs/devel/index.rst
6
Tested-by: Alex Bennée <alex.bennee@linaro.org>
7
Message-id: 20180512003217.9105-3-richard.henderson@linaro.org
8
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
9
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
10
---
11
target/arm/translate-a64.c | 2 +-
12
1 file changed, 1 insertion(+), 1 deletion(-)
13
14
diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c
15
index XXXXXXX..XXXXXXX 100644
22
index XXXXXXX..XXXXXXX 100644
16
--- a/target/arm/translate-a64.c
23
--- a/docs/devel/index.rst
17
+++ b/target/arm/translate-a64.c
24
+++ b/docs/devel/index.rst
18
@@ -XXX,XX +XXX,XX @@ static void disas_fp_int_conv(DisasContext *s, uint32_t insn)
25
@@ -XXX,XX +XXX,XX @@
19
default:
26
-.. This is the top level page for the 'devel' manual.
20
/* all other sf/type/rmode combinations are invalid */
27
-
21
unallocated_encoding(s);
28
-
22
- break;
29
Developer Information
23
+ return;
30
=====================
24
}
31
25
32
-This manual documents various parts of the internals of QEMU.
26
if (!fp_access_check(s)) {
33
+This section of the manual documents various parts of the internals of QEMU.
34
You only need to read it if you are interested in reading or
35
modifying QEMU's source code.
36
37
diff --git a/docs/interop/index.rst b/docs/interop/index.rst
38
index XXXXXXX..XXXXXXX 100644
39
--- a/docs/interop/index.rst
40
+++ b/docs/interop/index.rst
41
@@ -XXX,XX +XXX,XX @@
42
-.. This is the top level page for the 'interop' manual.
43
-
44
-
45
System Emulation Management and Interoperability
46
================================================
47
48
-This manual contains documents and specifications that are useful
49
-for making QEMU interoperate with other software.
50
+This section of the manual contains documents and specifications that
51
+are useful for making QEMU interoperate with other software.
52
53
Contents:
54
55
diff --git a/docs/specs/index.rst b/docs/specs/index.rst
56
index XXXXXXX..XXXXXXX 100644
57
--- a/docs/specs/index.rst
58
+++ b/docs/specs/index.rst
59
@@ -XXX,XX +XXX,XX @@
60
-.. This is the top level page for the 'specs' manual
61
-
62
-
63
System Emulation Guest Hardware Specifications
64
==============================================
65
66
+This section of the manual contains specifications of
67
+guest hardware that is specific to QEMU.
68
69
Contents:
70
71
diff --git a/docs/system/index.rst b/docs/system/index.rst
72
index XXXXXXX..XXXXXXX 100644
73
--- a/docs/system/index.rst
74
+++ b/docs/system/index.rst
75
@@ -XXX,XX +XXX,XX @@
76
-.. This is the top level page for the 'system' manual.
77
-
78
-
79
System Emulation
80
================
81
82
-This manual is the overall guide for users using QEMU
83
+This section of the manual is the overall guide for users using QEMU
84
for full system emulation (as opposed to user-mode emulation).
85
This includes working with hypervisors such as KVM, Xen, Hax
86
or Hypervisor.Framework.
87
diff --git a/docs/tools/index.rst b/docs/tools/index.rst
88
index XXXXXXX..XXXXXXX 100644
89
--- a/docs/tools/index.rst
90
+++ b/docs/tools/index.rst
91
@@ -XXX,XX +XXX,XX @@
92
-.. This is the top level page for the 'tools' manual
93
-
94
-
95
Tools
96
=====
97
98
+This section of the manual documents QEMU's "tools": its
99
+command line utilities and other standalone programs.
100
101
Contents:
102
103
diff --git a/docs/user/index.rst b/docs/user/index.rst
104
index XXXXXXX..XXXXXXX 100644
105
--- a/docs/user/index.rst
106
+++ b/docs/user/index.rst
107
@@ -XXX,XX +XXX,XX @@
108
-.. This is the top level page for the 'user' manual.
109
-
110
-
111
User Mode Emulation
112
===================
113
114
-This manual is the overall guide for users using QEMU
115
+This section of the manual is the overall guide for users using QEMU
116
for user-mode emulation. In this mode, QEMU can launch
117
processes compiled for one CPU on another CPU.
118
27
--
119
--
28
2.17.0
120
2.20.1
29
121
30
122
diff view generated by jsdifflib
1
From: Alex Bennée <alex.bennee@linaro.org>
1
Since the top-level subsections aren't self-contained manuals
2
any more, the "Contents:" lines at the top of each of their
3
index pages look a bit odd; remove them.
2
4
3
We are meant to explicitly pass fpst, not cpu_env.
5
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
6
Acked-by: Markus Armbruster <armbru@redhat.com>
7
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
8
Message-id: 20210705095547.15790-4-peter.maydell@linaro.org
9
---
10
docs/devel/index.rst | 2 --
11
docs/interop/index.rst | 2 --
12
docs/specs/index.rst | 2 --
13
docs/system/index.rst | 2 --
14
docs/tools/index.rst | 2 --
15
docs/user/index.rst | 2 --
16
6 files changed, 12 deletions(-)
4
17
5
Cc: qemu-stable@nongnu.org
18
diff --git a/docs/devel/index.rst b/docs/devel/index.rst
6
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
7
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
8
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
9
Tested-by: Alex Bennée <alex.bennee@linaro.org>
10
Message-id: 20180512003217.9105-12-richard.henderson@linaro.org
11
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
12
---
13
target/arm/translate-a64.c | 3 ++-
14
1 file changed, 2 insertions(+), 1 deletion(-)
15
16
diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c
17
index XXXXXXX..XXXXXXX 100644
19
index XXXXXXX..XXXXXXX 100644
18
--- a/target/arm/translate-a64.c
20
--- a/docs/devel/index.rst
19
+++ b/target/arm/translate-a64.c
21
+++ b/docs/devel/index.rst
20
@@ -XXX,XX +XXX,XX @@ static void handle_fp_1src_half(DisasContext *s, int opcode, int rd, int rn)
22
@@ -XXX,XX +XXX,XX @@ This section of the manual documents various parts of the internals of QEMU.
21
tcg_gen_xori_i32(tcg_res, tcg_op, 0x8000);
23
You only need to read it if you are interested in reading or
22
break;
24
modifying QEMU's source code.
23
case 0x3: /* FSQRT */
25
24
- gen_helper_sqrt_f16(tcg_res, tcg_op, cpu_env);
26
-Contents:
25
+ fpst = get_fpstatus_ptr(true);
27
-
26
+ gen_helper_sqrt_f16(tcg_res, tcg_op, fpst);
28
.. toctree::
27
break;
29
:maxdepth: 2
28
case 0x8: /* FRINTN */
30
:includehidden:
29
case 0x9: /* FRINTP */
31
diff --git a/docs/interop/index.rst b/docs/interop/index.rst
32
index XXXXXXX..XXXXXXX 100644
33
--- a/docs/interop/index.rst
34
+++ b/docs/interop/index.rst
35
@@ -XXX,XX +XXX,XX @@ System Emulation Management and Interoperability
36
This section of the manual contains documents and specifications that
37
are useful for making QEMU interoperate with other software.
38
39
-Contents:
40
-
41
.. toctree::
42
:maxdepth: 2
43
44
diff --git a/docs/specs/index.rst b/docs/specs/index.rst
45
index XXXXXXX..XXXXXXX 100644
46
--- a/docs/specs/index.rst
47
+++ b/docs/specs/index.rst
48
@@ -XXX,XX +XXX,XX @@ System Emulation Guest Hardware Specifications
49
This section of the manual contains specifications of
50
guest hardware that is specific to QEMU.
51
52
-Contents:
53
-
54
.. toctree::
55
:maxdepth: 2
56
57
diff --git a/docs/system/index.rst b/docs/system/index.rst
58
index XXXXXXX..XXXXXXX 100644
59
--- a/docs/system/index.rst
60
+++ b/docs/system/index.rst
61
@@ -XXX,XX +XXX,XX @@ for full system emulation (as opposed to user-mode emulation).
62
This includes working with hypervisors such as KVM, Xen, Hax
63
or Hypervisor.Framework.
64
65
-Contents:
66
-
67
.. toctree::
68
:maxdepth: 3
69
70
diff --git a/docs/tools/index.rst b/docs/tools/index.rst
71
index XXXXXXX..XXXXXXX 100644
72
--- a/docs/tools/index.rst
73
+++ b/docs/tools/index.rst
74
@@ -XXX,XX +XXX,XX @@ Tools
75
This section of the manual documents QEMU's "tools": its
76
command line utilities and other standalone programs.
77
78
-Contents:
79
-
80
.. toctree::
81
:maxdepth: 2
82
83
diff --git a/docs/user/index.rst b/docs/user/index.rst
84
index XXXXXXX..XXXXXXX 100644
85
--- a/docs/user/index.rst
86
+++ b/docs/user/index.rst
87
@@ -XXX,XX +XXX,XX @@ This section of the manual is the overall guide for users using QEMU
88
for user-mode emulation. In this mode, QEMU can launch
89
processes compiled for one CPU on another CPU.
90
91
-Contents:
92
-
93
.. toctree::
94
:maxdepth: 2
95
30
--
96
--
31
2.17.0
97
2.20.1
32
98
33
99
diff view generated by jsdifflib
1
From: Alex Bennée <alex.bennee@linaro.org>
1
Now that we have a single Sphinx manual rather than multiple manuals,
2
we can provide a better place for "common to all of QEMU" information
3
like the deprecation notices, build platforms, license information,
4
which we currently have in the system/ manual even though it applies
5
to all of QEMU.
2
6
3
All the hard work is already done by vfp_expand_imm, we just need to
7
Create a new directory about/ on the same level as system/, user/,
4
make sure we pick up the correct size.
8
etc, and move these documents there.
5
9
6
Cc: qemu-stable@nongnu.org
7
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
8
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
9
Tested-by: Alex Bennée <alex.bennee@linaro.org>
10
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
11
Message-id: 20180512003217.9105-11-richard.henderson@linaro.org
12
[rth: Merge unallocated_encoding check with TCGMemOp conversion.]
13
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
14
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
10
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
11
Acked-by: Markus Armbruster <armbru@redhat.com>
12
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
13
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
14
Message-id: 20210705095547.15790-5-peter.maydell@linaro.org
15
---
15
---
16
target/arm/translate-a64.c | 20 +++++++++++++++++---
16
docs/{system => about}/build-platforms.rst | 0
17
1 file changed, 17 insertions(+), 3 deletions(-)
17
docs/{system => about}/deprecated.rst | 0
18
docs/about/index.rst | 10 ++++++++++
19
docs/{system => about}/license.rst | 0
20
docs/{system => about}/removed-features.rst | 0
21
docs/index.rst | 1 +
22
docs/system/index.rst | 4 ----
23
7 files changed, 11 insertions(+), 4 deletions(-)
24
rename docs/{system => about}/build-platforms.rst (100%)
25
rename docs/{system => about}/deprecated.rst (100%)
26
create mode 100644 docs/about/index.rst
27
rename docs/{system => about}/license.rst (100%)
28
rename docs/{system => about}/removed-features.rst (100%)
18
29
19
diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c
30
diff --git a/docs/system/build-platforms.rst b/docs/about/build-platforms.rst
31
similarity index 100%
32
rename from docs/system/build-platforms.rst
33
rename to docs/about/build-platforms.rst
34
diff --git a/docs/system/deprecated.rst b/docs/about/deprecated.rst
35
similarity index 100%
36
rename from docs/system/deprecated.rst
37
rename to docs/about/deprecated.rst
38
diff --git a/docs/about/index.rst b/docs/about/index.rst
39
new file mode 100644
40
index XXXXXXX..XXXXXXX
41
--- /dev/null
42
+++ b/docs/about/index.rst
43
@@ -XXX,XX +XXX,XX @@
44
+About QEMU
45
+==========
46
+
47
+.. toctree::
48
+ :maxdepth: 2
49
+
50
+ build-platforms
51
+ deprecated
52
+ removed-features
53
+ license
54
diff --git a/docs/system/license.rst b/docs/about/license.rst
55
similarity index 100%
56
rename from docs/system/license.rst
57
rename to docs/about/license.rst
58
diff --git a/docs/system/removed-features.rst b/docs/about/removed-features.rst
59
similarity index 100%
60
rename from docs/system/removed-features.rst
61
rename to docs/about/removed-features.rst
62
diff --git a/docs/index.rst b/docs/index.rst
20
index XXXXXXX..XXXXXXX 100644
63
index XXXXXXX..XXXXXXX 100644
21
--- a/target/arm/translate-a64.c
64
--- a/docs/index.rst
22
+++ b/target/arm/translate-a64.c
65
+++ b/docs/index.rst
23
@@ -XXX,XX +XXX,XX @@ static void disas_fp_imm(DisasContext *s, uint32_t insn)
66
@@ -XXX,XX +XXX,XX @@ Welcome to QEMU's documentation!
24
{
67
:maxdepth: 2
25
int rd = extract32(insn, 0, 5);
68
:caption: Contents:
26
int imm8 = extract32(insn, 13, 8);
69
27
- int is_double = extract32(insn, 22, 2);
70
+ about/index
28
+ int type = extract32(insn, 22, 2);
71
system/index
29
uint64_t imm;
72
user/index
30
TCGv_i64 tcg_res;
73
tools/index
31
+ TCGMemOp sz;
74
diff --git a/docs/system/index.rst b/docs/system/index.rst
32
75
index XXXXXXX..XXXXXXX 100644
33
- if (is_double > 1) {
76
--- a/docs/system/index.rst
34
+ switch (type) {
77
+++ b/docs/system/index.rst
35
+ case 0:
78
@@ -XXX,XX +XXX,XX @@ or Hypervisor.Framework.
36
+ sz = MO_32;
79
targets
37
+ break;
80
security
38
+ case 1:
81
multi-process
39
+ sz = MO_64;
82
- deprecated
40
+ break;
83
- removed-features
41
+ case 3:
84
- build-platforms
42
+ sz = MO_16;
85
- license
43
+ if (arm_dc_feature(s, ARM_FEATURE_V8_FP16)) {
44
+ break;
45
+ }
46
+ /* fallthru */
47
+ default:
48
unallocated_encoding(s);
49
return;
50
}
51
@@ -XXX,XX +XXX,XX @@ static void disas_fp_imm(DisasContext *s, uint32_t insn)
52
return;
53
}
54
55
- imm = vfp_expand_imm(MO_32 + is_double, imm8);
56
+ imm = vfp_expand_imm(sz, imm8);
57
58
tcg_res = tcg_const_i64(imm);
59
write_fp_dreg(s, rd, tcg_res);
60
--
86
--
61
2.17.0
87
2.20.1
62
88
63
89
diff view generated by jsdifflib
1
From: Alex Bennée <alex.bennee@linaro.org>
1
Add some text to About to act as a brief introduction to the QEMU
2
manual and to make the about page a bit less of an abrupt start to
3
it.
2
4
3
These were missed out from the rest of the half-precision work.
5
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
6
Acked-by: Markus Armbruster <armbru@redhat.com>
7
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
8
Message-id: 20210705095547.15790-6-peter.maydell@linaro.org
9
---
10
docs/about/index.rst | 17 +++++++++++++++++
11
1 file changed, 17 insertions(+)
4
12
5
Cc: qemu-stable@nongnu.org
13
diff --git a/docs/about/index.rst b/docs/about/index.rst
6
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
7
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
8
Tested-by: Alex Bennée <alex.bennee@linaro.org>
9
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
10
Message-id: 20180512003217.9105-10-richard.henderson@linaro.org
11
[rth: Fix erroneous check vs type]
12
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
13
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
14
---
15
target/arm/translate-a64.c | 31 +++++++++++++++++++++++++------
16
1 file changed, 25 insertions(+), 6 deletions(-)
17
18
diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c
19
index XXXXXXX..XXXXXXX 100644
14
index XXXXXXX..XXXXXXX 100644
20
--- a/target/arm/translate-a64.c
15
--- a/docs/about/index.rst
21
+++ b/target/arm/translate-a64.c
16
+++ b/docs/about/index.rst
22
@@ -XXX,XX +XXX,XX @@ static void disas_fp_csel(DisasContext *s, uint32_t insn)
17
@@ -XXX,XX +XXX,XX @@
23
unsigned int mos, type, rm, cond, rn, rd;
18
About QEMU
24
TCGv_i64 t_true, t_false, t_zero;
19
==========
25
DisasCompare64 c;
20
26
+ TCGMemOp sz;
21
+QEMU is a generic and open source machine emulator and virtualizer.
27
28
mos = extract32(insn, 29, 3);
29
- type = extract32(insn, 22, 2); /* 0 = single, 1 = double */
30
+ type = extract32(insn, 22, 2);
31
rm = extract32(insn, 16, 5);
32
cond = extract32(insn, 12, 4);
33
rn = extract32(insn, 5, 5);
34
rd = extract32(insn, 0, 5);
35
36
- if (mos || type > 1) {
37
+ if (mos) {
38
+ unallocated_encoding(s);
39
+ return;
40
+ }
41
+
22
+
42
+ switch (type) {
23
+QEMU can be used in several different ways. The most common is for
43
+ case 0:
24
+"system emulation", where it provides a virtual model of an
44
+ sz = MO_32;
25
+entire machine (CPU, memory and emulated devices) to run a guest OS.
45
+ break;
26
+In this mode the CPU may be fully emulated, or it may work with
46
+ case 1:
27
+a hypervisor such as KVM, Xen, Hax or Hypervisor.Framework to
47
+ sz = MO_64;
28
+allow the guest to run directly on the host CPU.
48
+ break;
29
+
49
+ case 3:
30
+The second supported way to use QEMU is "user mode emulation",
50
+ sz = MO_16;
31
+where QEMU can launch processes compiled for one CPU on another CPU.
51
+ if (arm_dc_feature(s, ARM_FEATURE_V8_FP16)) {
32
+In this mode the CPU is always emulated.
52
+ break;
33
+
53
+ }
34
+QEMU also provides a number of standalone commandline utilities,
54
+ /* fallthru */
35
+such as the `qemu-img` disk image utility that allows you to create,
55
+ default:
36
+convert and modify disk images.
56
unallocated_encoding(s);
37
+
57
return;
38
.. toctree::
58
}
39
:maxdepth: 2
59
@@ -XXX,XX +XXX,XX @@ static void disas_fp_csel(DisasContext *s, uint32_t insn)
40
60
return;
61
}
62
63
- /* Zero extend sreg inputs to 64 bits now. */
64
+ /* Zero extend sreg & hreg inputs to 64 bits now. */
65
t_true = tcg_temp_new_i64();
66
t_false = tcg_temp_new_i64();
67
- read_vec_element(s, t_true, rn, 0, type ? MO_64 : MO_32);
68
- read_vec_element(s, t_false, rm, 0, type ? MO_64 : MO_32);
69
+ read_vec_element(s, t_true, rn, 0, sz);
70
+ read_vec_element(s, t_false, rm, 0, sz);
71
72
a64_test_cc(&c, cond);
73
t_zero = tcg_const_i64(0);
74
@@ -XXX,XX +XXX,XX @@ static void disas_fp_csel(DisasContext *s, uint32_t insn)
75
tcg_temp_free_i64(t_false);
76
a64_free_cc(&c);
77
78
- /* Note that sregs write back zeros to the high bits,
79
+ /* Note that sregs & hregs write back zeros to the high bits,
80
and we've already done the zero-extension. */
81
write_fp_dreg(s, rd, t_true);
82
tcg_temp_free_i64(t_true);
83
--
41
--
84
2.17.0
42
2.20.1
85
43
86
44
diff view generated by jsdifflib
1
From: Alex Bennée <alex.bennee@linaro.org>
1
The standard Sphinx/RTD HTML page footer gives a copyright line
2
(based on the 'copyright' variable set in conf.py) and a line "Built
3
with Sphinx using a theme provided by Read the Docs" (which can be
4
disabled via the html_show_sphinx variable, but we leave it enabled).
5
As a free software project, we'd like to also mention the license
6
QEMU and its manual are released under.
2
7
3
These where missed out from the rest of the half-precision work.
8
Add a template footer.html which defines the 'extrafooter' block that
9
the RtD theme provides for this purpose. The new line of text will
10
go below the existing copyright and sphinx-acknowledgement lines.
11
(Unfortunately the RTD footer template does not permit putting it
12
after the copyright but before the sphinx-acknowledgement.)
4
13
5
Cc: qemu-stable@nongnu.org
14
We use the templating functionality to make the new text also be a
6
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
15
hyperlink to the about/license.html page of the manual.
7
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
16
8
Tested-by: Alex Bennée <alex.bennee@linaro.org>
17
Unlike rst files, HTML template files are not reported to our depfile
9
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
18
plugin, so we maintain a manual list in meson.build. New template
10
Message-id: 20180512003217.9105-9-richard.henderson@linaro.org
19
files should be rare, so not being able to auto-generate the
11
[rth: Diagnose lack of FP16 before fp_access_check]
20
dependency info is not too awkward.
12
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
21
13
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
22
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
23
Acked-by: Markus Armbruster <armbru@redhat.com>
24
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
25
Message-id: 20210705095547.15790-7-peter.maydell@linaro.org
14
---
26
---
15
target/arm/helper-a64.h | 2 +
27
docs/_templates/footer.html | 12 ++++++++++++
16
target/arm/helper-a64.c | 10 +++++
28
docs/meson.build | 3 ++-
17
target/arm/translate-a64.c | 88 ++++++++++++++++++++++++++++++--------
29
MAINTAINERS | 1 +
18
3 files changed, 83 insertions(+), 17 deletions(-)
30
3 files changed, 15 insertions(+), 1 deletion(-)
31
create mode 100644 docs/_templates/footer.html
19
32
20
diff --git a/target/arm/helper-a64.h b/target/arm/helper-a64.h
33
diff --git a/docs/_templates/footer.html b/docs/_templates/footer.html
34
new file mode 100644
35
index XXXXXXX..XXXXXXX
36
--- /dev/null
37
+++ b/docs/_templates/footer.html
38
@@ -XXX,XX +XXX,XX @@
39
+{% extends "!footer.html" %}
40
+{% block extrafooter %}
41
+
42
+<!-- Empty para to force a blank line after "Built with Sphinx ..." -->
43
+<p></p>
44
+
45
+{% trans path=pathto('about/license') %}
46
+<p><a href="{{ path }}">QEMU and this manual are released under the
47
+GNU General Public License, version 2.</a></p>
48
+{% endtrans %}
49
+{{ super() }}
50
+{% endblock %}
51
diff --git a/docs/meson.build b/docs/meson.build
21
index XXXXXXX..XXXXXXX 100644
52
index XXXXXXX..XXXXXXX 100644
22
--- a/target/arm/helper-a64.h
53
--- a/docs/meson.build
23
+++ b/target/arm/helper-a64.h
54
+++ b/docs/meson.build
24
@@ -XXX,XX +XXX,XX @@
55
@@ -XXX,XX +XXX,XX @@ if build_docs
25
DEF_HELPER_FLAGS_2(udiv64, TCG_CALL_NO_RWG_SE, i64, i64, i64)
56
meson.source_root() / 'docs/sphinx/qapidoc.py',
26
DEF_HELPER_FLAGS_2(sdiv64, TCG_CALL_NO_RWG_SE, s64, s64, s64)
57
meson.source_root() / 'docs/sphinx/qmp_lexer.py',
27
DEF_HELPER_FLAGS_1(rbit64, TCG_CALL_NO_RWG_SE, i64, i64)
58
qapi_gen_depends ]
28
+DEF_HELPER_3(vfp_cmph_a64, i64, f16, f16, ptr)
59
+ sphinx_template_files = [ meson.source_root() / 'docs/_templates/footer.html' ]
29
+DEF_HELPER_3(vfp_cmpeh_a64, i64, f16, f16, ptr)
60
30
DEF_HELPER_3(vfp_cmps_a64, i64, f32, f32, ptr)
61
have_ga = have_tools and config_host.has_key('CONFIG_GUEST_AGENT')
31
DEF_HELPER_3(vfp_cmpes_a64, i64, f32, f32, ptr)
62
32
DEF_HELPER_3(vfp_cmpd_a64, i64, f64, f64, ptr)
63
@@ -XXX,XX +XXX,XX @@ if build_docs
33
diff --git a/target/arm/helper-a64.c b/target/arm/helper-a64.c
64
output: 'docs.stamp',
65
input: files('conf.py'),
66
depfile: 'docs.d',
67
- depend_files: sphinx_extn_depends,
68
+ depend_files: [ sphinx_extn_depends, sphinx_template_files ],
69
command: [SPHINX_ARGS, '-Ddepfile=@DEPFILE@',
70
'-Ddepfile_stamp=@OUTPUT0@',
71
'-b', 'html', '-d', private_dir,
72
diff --git a/MAINTAINERS b/MAINTAINERS
34
index XXXXXXX..XXXXXXX 100644
73
index XXXXXXX..XXXXXXX 100644
35
--- a/target/arm/helper-a64.c
74
--- a/MAINTAINERS
36
+++ b/target/arm/helper-a64.c
75
+++ b/MAINTAINERS
37
@@ -XXX,XX +XXX,XX @@ static inline uint32_t float_rel_to_flags(int res)
76
@@ -XXX,XX +XXX,XX @@ S: Maintained
38
return flags;
77
F: docs/conf.py
39
}
78
F: docs/*/conf.py
40
79
F: docs/sphinx/
41
+uint64_t HELPER(vfp_cmph_a64)(float16 x, float16 y, void *fp_status)
80
+F: docs/_templates/
42
+{
81
43
+ return float_rel_to_flags(float16_compare_quiet(x, y, fp_status));
82
Miscellaneous
44
+}
83
-------------
45
+
46
+uint64_t HELPER(vfp_cmpeh_a64)(float16 x, float16 y, void *fp_status)
47
+{
48
+ return float_rel_to_flags(float16_compare(x, y, fp_status));
49
+}
50
+
51
uint64_t HELPER(vfp_cmps_a64)(float32 x, float32 y, void *fp_status)
52
{
53
return float_rel_to_flags(float32_compare_quiet(x, y, fp_status));
54
diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c
55
index XXXXXXX..XXXXXXX 100644
56
--- a/target/arm/translate-a64.c
57
+++ b/target/arm/translate-a64.c
58
@@ -XXX,XX +XXX,XX @@ static void disas_data_proc_reg(DisasContext *s, uint32_t insn)
59
}
60
}
61
62
-static void handle_fp_compare(DisasContext *s, bool is_double,
63
+static void handle_fp_compare(DisasContext *s, int size,
64
unsigned int rn, unsigned int rm,
65
bool cmp_with_zero, bool signal_all_nans)
66
{
67
TCGv_i64 tcg_flags = tcg_temp_new_i64();
68
- TCGv_ptr fpst = get_fpstatus_ptr(false);
69
+ TCGv_ptr fpst = get_fpstatus_ptr(size == MO_16);
70
71
- if (is_double) {
72
+ if (size == MO_64) {
73
TCGv_i64 tcg_vn, tcg_vm;
74
75
tcg_vn = read_fp_dreg(s, rn);
76
@@ -XXX,XX +XXX,XX @@ static void handle_fp_compare(DisasContext *s, bool is_double,
77
tcg_temp_free_i64(tcg_vn);
78
tcg_temp_free_i64(tcg_vm);
79
} else {
80
- TCGv_i32 tcg_vn, tcg_vm;
81
+ TCGv_i32 tcg_vn = tcg_temp_new_i32();
82
+ TCGv_i32 tcg_vm = tcg_temp_new_i32();
83
84
- tcg_vn = read_fp_sreg(s, rn);
85
+ read_vec_element_i32(s, tcg_vn, rn, 0, size);
86
if (cmp_with_zero) {
87
- tcg_vm = tcg_const_i32(0);
88
+ tcg_gen_movi_i32(tcg_vm, 0);
89
} else {
90
- tcg_vm = read_fp_sreg(s, rm);
91
+ read_vec_element_i32(s, tcg_vm, rm, 0, size);
92
}
93
- if (signal_all_nans) {
94
- gen_helper_vfp_cmpes_a64(tcg_flags, tcg_vn, tcg_vm, fpst);
95
- } else {
96
- gen_helper_vfp_cmps_a64(tcg_flags, tcg_vn, tcg_vm, fpst);
97
+
98
+ switch (size) {
99
+ case MO_32:
100
+ if (signal_all_nans) {
101
+ gen_helper_vfp_cmpes_a64(tcg_flags, tcg_vn, tcg_vm, fpst);
102
+ } else {
103
+ gen_helper_vfp_cmps_a64(tcg_flags, tcg_vn, tcg_vm, fpst);
104
+ }
105
+ break;
106
+ case MO_16:
107
+ if (signal_all_nans) {
108
+ gen_helper_vfp_cmpeh_a64(tcg_flags, tcg_vn, tcg_vm, fpst);
109
+ } else {
110
+ gen_helper_vfp_cmph_a64(tcg_flags, tcg_vn, tcg_vm, fpst);
111
+ }
112
+ break;
113
+ default:
114
+ g_assert_not_reached();
115
}
116
+
117
tcg_temp_free_i32(tcg_vn);
118
tcg_temp_free_i32(tcg_vm);
119
}
120
@@ -XXX,XX +XXX,XX @@ static void handle_fp_compare(DisasContext *s, bool is_double,
121
static void disas_fp_compare(DisasContext *s, uint32_t insn)
122
{
123
unsigned int mos, type, rm, op, rn, opc, op2r;
124
+ int size;
125
126
mos = extract32(insn, 29, 3);
127
- type = extract32(insn, 22, 2); /* 0 = single, 1 = double */
128
+ type = extract32(insn, 22, 2);
129
rm = extract32(insn, 16, 5);
130
op = extract32(insn, 14, 2);
131
rn = extract32(insn, 5, 5);
132
opc = extract32(insn, 3, 2);
133
op2r = extract32(insn, 0, 3);
134
135
- if (mos || op || op2r || type > 1) {
136
+ if (mos || op || op2r) {
137
+ unallocated_encoding(s);
138
+ return;
139
+ }
140
+
141
+ switch (type) {
142
+ case 0:
143
+ size = MO_32;
144
+ break;
145
+ case 1:
146
+ size = MO_64;
147
+ break;
148
+ case 3:
149
+ size = MO_16;
150
+ if (arm_dc_feature(s, ARM_FEATURE_V8_FP16)) {
151
+ break;
152
+ }
153
+ /* fallthru */
154
+ default:
155
unallocated_encoding(s);
156
return;
157
}
158
@@ -XXX,XX +XXX,XX @@ static void disas_fp_compare(DisasContext *s, uint32_t insn)
159
return;
160
}
161
162
- handle_fp_compare(s, type, rn, rm, opc & 1, opc & 2);
163
+ handle_fp_compare(s, size, rn, rm, opc & 1, opc & 2);
164
}
165
166
/* Floating point conditional compare
167
@@ -XXX,XX +XXX,XX @@ static void disas_fp_ccomp(DisasContext *s, uint32_t insn)
168
unsigned int mos, type, rm, cond, rn, op, nzcv;
169
TCGv_i64 tcg_flags;
170
TCGLabel *label_continue = NULL;
171
+ int size;
172
173
mos = extract32(insn, 29, 3);
174
- type = extract32(insn, 22, 2); /* 0 = single, 1 = double */
175
+ type = extract32(insn, 22, 2);
176
rm = extract32(insn, 16, 5);
177
cond = extract32(insn, 12, 4);
178
rn = extract32(insn, 5, 5);
179
op = extract32(insn, 4, 1);
180
nzcv = extract32(insn, 0, 4);
181
182
- if (mos || type > 1) {
183
+ if (mos) {
184
+ unallocated_encoding(s);
185
+ return;
186
+ }
187
+
188
+ switch (type) {
189
+ case 0:
190
+ size = MO_32;
191
+ break;
192
+ case 1:
193
+ size = MO_64;
194
+ break;
195
+ case 3:
196
+ size = MO_16;
197
+ if (arm_dc_feature(s, ARM_FEATURE_V8_FP16)) {
198
+ break;
199
+ }
200
+ /* fallthru */
201
+ default:
202
unallocated_encoding(s);
203
return;
204
}
205
@@ -XXX,XX +XXX,XX @@ static void disas_fp_ccomp(DisasContext *s, uint32_t insn)
206
gen_set_label(label_match);
207
}
208
209
- handle_fp_compare(s, type, rn, rm, false, op);
210
+ handle_fp_compare(s, size, rn, rm, false, op);
211
212
if (cond < 0x0e) {
213
gen_set_label(label_continue);
214
--
84
--
215
2.17.0
85
2.20.1
216
86
217
87
diff view generated by jsdifflib
1
In commit d81ce0ef2c4f105 we added an extra float_status field
1
Add a line to the HTML document footer mentioning the QEMU version.
2
fp_status_fp16 for Arm, but forgot to initialize it correctly
2
The version information is already provided in very faint text below
3
by setting it to float_tininess_before_rounding. This currently
3
the QEMU logo in the sidebar, but that is rather inconspicious, so
4
will only cause problems for the new V8_FP16 feature, since the
4
repeating it in the footer seems useful.
5
float-to-float conversion code doesn't use it yet. The effect
6
would be that we failed to set the Underflow IEEE exception flag
7
in all the cases where we should.
8
5
9
Add the missing initialization.
10
11
Fixes: d81ce0ef2c4f105
12
Cc: qemu-stable@nongnu.org
13
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
14
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
15
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
6
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
16
Message-id: 20180512004311.9299-16-richard.henderson@linaro.org
7
Acked-by: Markus Armbruster <armbru@redhat.com>
8
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
9
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
10
Message-id: 20210705095547.15790-8-peter.maydell@linaro.org
17
---
11
---
18
target/arm/cpu.c | 2 ++
12
docs/_templates/footer.html | 2 ++
19
1 file changed, 2 insertions(+)
13
1 file changed, 2 insertions(+)
20
14
21
diff --git a/target/arm/cpu.c b/target/arm/cpu.c
15
diff --git a/docs/_templates/footer.html b/docs/_templates/footer.html
22
index XXXXXXX..XXXXXXX 100644
16
index XXXXXXX..XXXXXXX 100644
23
--- a/target/arm/cpu.c
17
--- a/docs/_templates/footer.html
24
+++ b/target/arm/cpu.c
18
+++ b/docs/_templates/footer.html
25
@@ -XXX,XX +XXX,XX @@ static void arm_cpu_reset(CPUState *s)
19
@@ -XXX,XX +XXX,XX @@
26
&env->vfp.fp_status);
20
<!-- Empty para to force a blank line after "Built with Sphinx ..." -->
27
set_float_detect_tininess(float_tininess_before_rounding,
21
<p></p>
28
&env->vfp.standard_fp_status);
22
29
+ set_float_detect_tininess(float_tininess_before_rounding,
23
+<p>This documentation is for QEMU version {{ version }}.</p>
30
+ &env->vfp.fp_status_f16);
24
+
31
#ifndef CONFIG_USER_ONLY
25
{% trans path=pathto('about/license') %}
32
if (kvm_enabled()) {
26
<p><a href="{{ path }}">QEMU and this manual are released under the
33
kvm_arm_reset_vcpu(cpu);
27
GNU General Public License, version 2.</a></p>
34
--
28
--
35
2.17.0
29
2.20.1
36
30
37
31
diff view generated by jsdifflib
1
From: Richard Henderson <richard.henderson@linaro.org>
1
Add skeletal documentation of the cubieboard machine.
2
2
3
We missed all of the scalar fp16 fma operations.
3
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
4
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
5
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
6
Message-id: 20210713142226.19155-2-peter.maydell@linaro.org
7
---
8
docs/system/arm/cubieboard.rst | 16 ++++++++++++++++
9
docs/system/target-arm.rst | 1 +
10
MAINTAINERS | 1 +
11
3 files changed, 18 insertions(+)
12
create mode 100644 docs/system/arm/cubieboard.rst
4
13
5
Cc: qemu-stable@nongnu.org
14
diff --git a/docs/system/arm/cubieboard.rst b/docs/system/arm/cubieboard.rst
6
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
15
new file mode 100644
7
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
16
index XXXXXXX..XXXXXXX
8
Tested-by: Alex Bennée <alex.bennee@linaro.org>
17
--- /dev/null
9
Message-id: 20180512003217.9105-8-richard.henderson@linaro.org
18
+++ b/docs/system/arm/cubieboard.rst
10
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
19
@@ -XXX,XX +XXX,XX @@
11
---
20
+Cubietech Cubieboard (``cubieboard``)
12
target/arm/translate-a64.c | 48 ++++++++++++++++++++++++++++++++++++++
21
+=====================================
13
1 file changed, 48 insertions(+)
22
+
14
23
+The ``cubieboard`` model emulates the Cubietech Cubieboard,
15
diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c
24
+which is a Cortex-A8 based single-board computer using
25
+the AllWinner A10 SoC.
26
+
27
+Emulated devices:
28
+
29
+- Timer
30
+- UART
31
+- RTC
32
+- EMAC
33
+- SDHCI
34
+- USB controller
35
+- SATA controller
36
diff --git a/docs/system/target-arm.rst b/docs/system/target-arm.rst
16
index XXXXXXX..XXXXXXX 100644
37
index XXXXXXX..XXXXXXX 100644
17
--- a/target/arm/translate-a64.c
38
--- a/docs/system/target-arm.rst
18
+++ b/target/arm/translate-a64.c
39
+++ b/docs/system/target-arm.rst
19
@@ -XXX,XX +XXX,XX @@ static void handle_fp_3src_double(DisasContext *s, bool o0, bool o1,
40
@@ -XXX,XX +XXX,XX @@ undocumented; you can get a complete list by running
20
tcg_temp_free_i64(tcg_res);
41
arm/aspeed
21
}
42
arm/sabrelite
22
43
arm/digic
23
+/* Floating-point data-processing (3 source) - half precision */
44
+ arm/cubieboard
24
+static void handle_fp_3src_half(DisasContext *s, bool o0, bool o1,
45
arm/musicpal
25
+ int rd, int rn, int rm, int ra)
46
arm/gumstix
26
+{
47
arm/nrf
27
+ TCGv_i32 tcg_op1, tcg_op2, tcg_op3;
48
diff --git a/MAINTAINERS b/MAINTAINERS
28
+ TCGv_i32 tcg_res = tcg_temp_new_i32();
49
index XXXXXXX..XXXXXXX 100644
29
+ TCGv_ptr fpst = get_fpstatus_ptr(true);
50
--- a/MAINTAINERS
30
+
51
+++ b/MAINTAINERS
31
+ tcg_op1 = read_fp_hreg(s, rn);
52
@@ -XXX,XX +XXX,XX @@ S: Odd Fixes
32
+ tcg_op2 = read_fp_hreg(s, rm);
53
F: hw/*/allwinner*
33
+ tcg_op3 = read_fp_hreg(s, ra);
54
F: include/hw/*/allwinner*
34
+
55
F: hw/arm/cubieboard.c
35
+ /* These are fused multiply-add, and must be done as one
56
+F: docs/system/arm/cubieboard.rst
36
+ * floating point operation with no rounding between the
57
37
+ * multiplication and addition steps.
58
Allwinner-h3
38
+ * NB that doing the negations here as separate steps is
59
M: Niek Linnenbank <nieklinnenbank@gmail.com>
39
+ * correct : an input NaN should come out with its sign bit
40
+ * flipped if it is a negated-input.
41
+ */
42
+ if (o1 == true) {
43
+ tcg_gen_xori_i32(tcg_op3, tcg_op3, 0x8000);
44
+ }
45
+
46
+ if (o0 != o1) {
47
+ tcg_gen_xori_i32(tcg_op1, tcg_op1, 0x8000);
48
+ }
49
+
50
+ gen_helper_advsimd_muladdh(tcg_res, tcg_op1, tcg_op2, tcg_op3, fpst);
51
+
52
+ write_fp_sreg(s, rd, tcg_res);
53
+
54
+ tcg_temp_free_ptr(fpst);
55
+ tcg_temp_free_i32(tcg_op1);
56
+ tcg_temp_free_i32(tcg_op2);
57
+ tcg_temp_free_i32(tcg_op3);
58
+ tcg_temp_free_i32(tcg_res);
59
+}
60
+
61
/* Floating point data-processing (3 source)
62
* 31 30 29 28 24 23 22 21 20 16 15 14 10 9 5 4 0
63
* +---+---+---+-----------+------+----+------+----+------+------+------+
64
@@ -XXX,XX +XXX,XX @@ static void disas_fp_3src(DisasContext *s, uint32_t insn)
65
}
66
handle_fp_3src_double(s, o0, o1, rd, rn, rm, ra);
67
break;
68
+ case 3:
69
+ if (!arm_dc_feature(s, ARM_FEATURE_V8_FP16)) {
70
+ unallocated_encoding(s);
71
+ return;
72
+ }
73
+ if (!fp_access_check(s)) {
74
+ return;
75
+ }
76
+ handle_fp_3src_half(s, o0, o1, rd, rn, rm, ra);
77
+ break;
78
default:
79
unallocated_encoding(s);
80
}
81
--
60
--
82
2.17.0
61
2.20.1
83
62
84
63
diff view generated by jsdifflib
1
Usually the logging of the CPU state produced by -d cpu is sufficient
1
Add skeletal documentation of the emcraft-sf2 machine.
2
to diagnose problems, but sometimes you want to see the state of
3
the floating point registers as well. We don't want to enable that
4
by default as it adds a lot of extra data to the log; instead,
5
allow it to be optionally enabled via -d fpu.
6
2
7
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
3
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
8
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
4
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
9
Message-id: 20180510130024.31678-1-peter.maydell@linaro.org
5
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
6
Message-id: 20210713142226.19155-3-peter.maydell@linaro.org
10
---
7
---
11
include/qemu/log.h | 1 +
8
docs/system/arm/emcraft-sf2.rst | 15 +++++++++++++++
12
accel/tcg/cpu-exec.c | 9 ++++++---
9
docs/system/target-arm.rst | 1 +
13
util/log.c | 2 ++
10
MAINTAINERS | 1 +
14
3 files changed, 9 insertions(+), 3 deletions(-)
11
3 files changed, 17 insertions(+)
12
create mode 100644 docs/system/arm/emcraft-sf2.rst
15
13
16
diff --git a/include/qemu/log.h b/include/qemu/log.h
14
diff --git a/docs/system/arm/emcraft-sf2.rst b/docs/system/arm/emcraft-sf2.rst
15
new file mode 100644
16
index XXXXXXX..XXXXXXX
17
--- /dev/null
18
+++ b/docs/system/arm/emcraft-sf2.rst
19
@@ -XXX,XX +XXX,XX @@
20
+Emcraft SmartFusion2 SOM kit (``emcraft-sf2``)
21
+==============================================
22
+
23
+The ``emcraft-sf2`` board emulates the SmartFusion2 SOM kit from
24
+Emcraft (M2S010). This is a System-on-Module from EmCraft systems,
25
+based on the SmartFusion2 SoC FPGA from Microsemi Corporation.
26
+The SoC is based on a Cortex-M4 processor.
27
+
28
+Emulated devices:
29
+
30
+- System timer
31
+- System registers
32
+- SPI controller
33
+- UART
34
+- EMAC
35
diff --git a/docs/system/target-arm.rst b/docs/system/target-arm.rst
17
index XXXXXXX..XXXXXXX 100644
36
index XXXXXXX..XXXXXXX 100644
18
--- a/include/qemu/log.h
37
--- a/docs/system/target-arm.rst
19
+++ b/include/qemu/log.h
38
+++ b/docs/system/target-arm.rst
20
@@ -XXX,XX +XXX,XX @@ static inline bool qemu_log_separate(void)
39
@@ -XXX,XX +XXX,XX @@ undocumented; you can get a complete list by running
21
#define CPU_LOG_PAGE (1 << 14)
40
arm/sabrelite
22
/* LOG_TRACE (1 << 15) is defined in log-for-trace.h */
41
arm/digic
23
#define CPU_LOG_TB_OP_IND (1 << 16)
42
arm/cubieboard
24
+#define CPU_LOG_TB_FPU (1 << 17)
43
+ arm/emcraft-sf2
25
44
arm/musicpal
26
/* Lock output for a series of related logs. Since this is not needed
45
arm/gumstix
27
* for a single qemu_log / qemu_log_mask / qemu_log_mask_and_addr, we
46
arm/nrf
28
diff --git a/accel/tcg/cpu-exec.c b/accel/tcg/cpu-exec.c
47
diff --git a/MAINTAINERS b/MAINTAINERS
29
index XXXXXXX..XXXXXXX 100644
48
index XXXXXXX..XXXXXXX 100644
30
--- a/accel/tcg/cpu-exec.c
49
--- a/MAINTAINERS
31
+++ b/accel/tcg/cpu-exec.c
50
+++ b/MAINTAINERS
32
@@ -XXX,XX +XXX,XX @@ static inline tcg_target_ulong cpu_tb_exec(CPUState *cpu, TranslationBlock *itb)
51
@@ -XXX,XX +XXX,XX @@ M: Peter Maydell <peter.maydell@linaro.org>
33
if (qemu_loglevel_mask(CPU_LOG_TB_CPU)
52
L: qemu-arm@nongnu.org
34
&& qemu_log_in_addr_range(itb->pc)) {
53
S: Maintained
35
qemu_log_lock();
54
F: hw/arm/msf2-som.c
36
+ int flags = 0;
55
+F: docs/system/arm/emcraft-sf2.rst
37
+ if (qemu_loglevel_mask(CPU_LOG_TB_FPU)) {
56
38
+ flags |= CPU_DUMP_FPU;
57
ASPEED BMCs
39
+ }
58
M: Cédric Le Goater <clg@kaod.org>
40
#if defined(TARGET_I386)
41
- log_cpu_state(cpu, CPU_DUMP_CCOP);
42
-#else
43
- log_cpu_state(cpu, 0);
44
+ flags |= CPU_DUMP_CCOP;
45
#endif
46
+ log_cpu_state(cpu, flags);
47
qemu_log_unlock();
48
}
49
#endif /* DEBUG_DISAS */
50
diff --git a/util/log.c b/util/log.c
51
index XXXXXXX..XXXXXXX 100644
52
--- a/util/log.c
53
+++ b/util/log.c
54
@@ -XXX,XX +XXX,XX @@ const QEMULogItem qemu_log_items[] = {
55
"show trace before each executed TB (lots of logs)" },
56
{ CPU_LOG_TB_CPU, "cpu",
57
"show CPU registers before entering a TB (lots of logs)" },
58
+ { CPU_LOG_TB_FPU, "fpu",
59
+ "include FPU registers in the 'cpu' logging" },
60
{ CPU_LOG_MMU, "mmu",
61
"log MMU-related activities" },
62
{ CPU_LOG_PCALL, "pcall",
63
--
59
--
64
2.17.0
60
2.20.1
65
61
66
62
diff view generated by jsdifflib
1
In float-to-integer conversion, if the floating point input
1
Add skeletal documentation for the highbank and midway machines.
2
converts exactly to the largest or smallest integer that
3
fits in to the result type, this is not an overflow.
4
In this situation we were producing the correct result value,
5
but were incorrectly setting the Invalid flag.
6
For example for Arm A64, "FCVTAS w0, d0" on an input of
7
0x41dfffffffc00000 should produce 0x7fffffff and set no flags.
8
2
9
Fix the boundary case to take the right half of the if()
10
statements.
11
12
This fixes a regression from 2.11 introduced by the softfloat
13
refactoring.
14
15
Cc: qemu-stable@nongnu.org
16
Fixes: ab52f973a50
17
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
3
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
18
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
4
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
19
Message-id: 20180510140141.12120-1-peter.maydell@linaro.org
5
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
6
Message-id: 20210713142226.19155-4-peter.maydell@linaro.org
20
---
7
---
21
fpu/softfloat.c | 4 ++--
8
docs/system/arm/highbank.rst | 19 +++++++++++++++++++
22
1 file changed, 2 insertions(+), 2 deletions(-)
9
docs/system/target-arm.rst | 1 +
10
MAINTAINERS | 1 +
11
3 files changed, 21 insertions(+)
12
create mode 100644 docs/system/arm/highbank.rst
23
13
24
diff --git a/fpu/softfloat.c b/fpu/softfloat.c
14
diff --git a/docs/system/arm/highbank.rst b/docs/system/arm/highbank.rst
15
new file mode 100644
16
index XXXXXXX..XXXXXXX
17
--- /dev/null
18
+++ b/docs/system/arm/highbank.rst
19
@@ -XXX,XX +XXX,XX @@
20
+Calxeda Highbank and Midway (``highbank``, ``midway``)
21
+======================================================
22
+
23
+``highbank`` is a model of the Calxeda Highbank (ECX-1000) system,
24
+which has four Cortex-A9 cores.
25
+
26
+``midway`` is a model of the Calxeda Midway (ECX-2000) system,
27
+which has four Cortex-A15 cores.
28
+
29
+Emulated devices:
30
+
31
+- L2x0 cache controller
32
+- SP804 dual timer
33
+- PL011 UART
34
+- PL061 GPIOs
35
+- PL031 RTC
36
+- PL022 synchronous serial port controller
37
+- AHCI
38
+- XGMAC ethernet controllers
39
diff --git a/docs/system/target-arm.rst b/docs/system/target-arm.rst
25
index XXXXXXX..XXXXXXX 100644
40
index XXXXXXX..XXXXXXX 100644
26
--- a/fpu/softfloat.c
41
--- a/docs/system/target-arm.rst
27
+++ b/fpu/softfloat.c
42
+++ b/docs/system/target-arm.rst
28
@@ -XXX,XX +XXX,XX @@ static int64_t round_to_int_and_pack(FloatParts in, int rmode,
43
@@ -XXX,XX +XXX,XX @@ undocumented; you can get a complete list by running
29
r = UINT64_MAX;
44
arm/digic
30
}
45
arm/cubieboard
31
if (p.sign) {
46
arm/emcraft-sf2
32
- if (r < -(uint64_t) min) {
47
+ arm/highbank
33
+ if (r <= -(uint64_t) min) {
48
arm/musicpal
34
return -r;
49
arm/gumstix
35
} else {
50
arm/nrf
36
s->float_exception_flags = orig_flags | float_flag_invalid;
51
diff --git a/MAINTAINERS b/MAINTAINERS
37
return min;
52
index XXXXXXX..XXXXXXX 100644
38
}
53
--- a/MAINTAINERS
39
} else {
54
+++ b/MAINTAINERS
40
- if (r < max) {
55
@@ -XXX,XX +XXX,XX @@ L: qemu-arm@nongnu.org
41
+ if (r <= max) {
56
S: Odd Fixes
42
return r;
57
F: hw/arm/highbank.c
43
} else {
58
F: hw/net/xgmac.c
44
s->float_exception_flags = orig_flags | float_flag_invalid;
59
+F: docs/system/arm/highbank.rst
60
61
Canon DIGIC
62
M: Antony Pavlov <antonynpavlov@gmail.com>
45
--
63
--
46
2.17.0
64
2.20.1
47
65
48
66
diff view generated by jsdifflib
Deleted patch
1
From: Richard Henderson <richard.henderson@linaro.org>
2
1
3
Adding the fp16 moves to/from general registers.
4
5
Cc: qemu-stable@nongnu.org
6
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
7
Tested-by: Alex Bennée <alex.bennee@linaro.org>
8
Message-id: 20180512003217.9105-2-richard.henderson@linaro.org
9
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
10
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
11
---
12
target/arm/translate-a64.c | 21 +++++++++++++++++++++
13
1 file changed, 21 insertions(+)
14
15
diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c
16
index XXXXXXX..XXXXXXX 100644
17
--- a/target/arm/translate-a64.c
18
+++ b/target/arm/translate-a64.c
19
@@ -XXX,XX +XXX,XX @@ static void handle_fmov(DisasContext *s, int rd, int rn, int type, bool itof)
20
tcg_gen_st_i64(tcg_rn, cpu_env, fp_reg_hi_offset(s, rd));
21
clear_vec_high(s, true, rd);
22
break;
23
+ case 3:
24
+ /* 16 bit */
25
+ tmp = tcg_temp_new_i64();
26
+ tcg_gen_ext16u_i64(tmp, tcg_rn);
27
+ write_fp_dreg(s, rd, tmp);
28
+ tcg_temp_free_i64(tmp);
29
+ break;
30
+ default:
31
+ g_assert_not_reached();
32
}
33
} else {
34
TCGv_i64 tcg_rd = cpu_reg(s, rd);
35
@@ -XXX,XX +XXX,XX @@ static void handle_fmov(DisasContext *s, int rd, int rn, int type, bool itof)
36
/* 64 bits from top half */
37
tcg_gen_ld_i64(tcg_rd, cpu_env, fp_reg_hi_offset(s, rn));
38
break;
39
+ case 3:
40
+ /* 16 bit */
41
+ tcg_gen_ld16u_i64(tcg_rd, cpu_env, fp_reg_offset(s, rn, MO_16));
42
+ break;
43
+ default:
44
+ g_assert_not_reached();
45
}
46
}
47
}
48
@@ -XXX,XX +XXX,XX @@ static void disas_fp_int_conv(DisasContext *s, uint32_t insn)
49
case 0xa: /* 64 bit */
50
case 0xd: /* 64 bit to top half of quad */
51
break;
52
+ case 0x6: /* 16-bit float, 32-bit int */
53
+ case 0xe: /* 16-bit float, 64-bit int */
54
+ if (arm_dc_feature(s, ARM_FEATURE_V8_FP16)) {
55
+ break;
56
+ }
57
+ /* fallthru */
58
default:
59
/* all other sf/type/rmode combinations are invalid */
60
unallocated_encoding(s);
61
--
62
2.17.0
63
64
diff view generated by jsdifflib
Deleted patch
1
From: Richard Henderson <richard.henderson@linaro.org>
2
1
3
Cc: qemu-stable@nongnu.org
4
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
5
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
6
Tested-by: Alex Bennée <alex.bennee@linaro.org>
7
Message-id: 20180512003217.9105-5-richard.henderson@linaro.org
8
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
9
---
10
target/arm/translate-a64.c | 17 +++++++++++++++--
11
1 file changed, 15 insertions(+), 2 deletions(-)
12
13
diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c
14
index XXXXXXX..XXXXXXX 100644
15
--- a/target/arm/translate-a64.c
16
+++ b/target/arm/translate-a64.c
17
@@ -XXX,XX +XXX,XX @@ static void disas_fp_fixed_conv(DisasContext *s, uint32_t insn)
18
bool sf = extract32(insn, 31, 1);
19
bool itof;
20
21
- if (sbit || (type > 1)
22
- || (!sf && scale < 32)) {
23
+ if (sbit || (!sf && scale < 32)) {
24
+ unallocated_encoding(s);
25
+ return;
26
+ }
27
+
28
+ switch (type) {
29
+ case 0: /* float32 */
30
+ case 1: /* float64 */
31
+ break;
32
+ case 3: /* float16 */
33
+ if (arm_dc_feature(s, ARM_FEATURE_V8_FP16)) {
34
+ break;
35
+ }
36
+ /* fallthru */
37
+ default:
38
unallocated_encoding(s);
39
return;
40
}
41
--
42
2.17.0
43
44
diff view generated by jsdifflib
Deleted patch
1
From: Richard Henderson <richard.henderson@linaro.org>
2
1
3
Cc: qemu-stable@nongnu.org
4
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
5
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
6
Tested-by: Alex Bennée <alex.bennee@linaro.org>
7
Message-id: 20180512003217.9105-6-richard.henderson@linaro.org
8
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
9
---
10
target/arm/translate-a64.c | 30 ++++++++++++++----------------
11
1 file changed, 14 insertions(+), 16 deletions(-)
12
13
diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c
14
index XXXXXXX..XXXXXXX 100644
15
--- a/target/arm/translate-a64.c
16
+++ b/target/arm/translate-a64.c
17
@@ -XXX,XX +XXX,XX @@ static TCGv_i32 read_fp_sreg(DisasContext *s, int reg)
18
return v;
19
}
20
21
+static TCGv_i32 read_fp_hreg(DisasContext *s, int reg)
22
+{
23
+ TCGv_i32 v = tcg_temp_new_i32();
24
+
25
+ tcg_gen_ld16u_i32(v, cpu_env, fp_reg_offset(s, reg, MO_16));
26
+ return v;
27
+}
28
+
29
/* Clear the bits above an N-bit vector, for N = (is_q ? 128 : 64).
30
* If SVE is not enabled, then there are only 128 bits in the vector.
31
*/
32
@@ -XXX,XX +XXX,XX @@ static void disas_fp_csel(DisasContext *s, uint32_t insn)
33
static void handle_fp_1src_half(DisasContext *s, int opcode, int rd, int rn)
34
{
35
TCGv_ptr fpst = NULL;
36
- TCGv_i32 tcg_op = tcg_temp_new_i32();
37
+ TCGv_i32 tcg_op = read_fp_hreg(s, rn);
38
TCGv_i32 tcg_res = tcg_temp_new_i32();
39
40
- read_vec_element_i32(s, tcg_op, rn, 0, MO_16);
41
-
42
switch (opcode) {
43
case 0x0: /* FMOV */
44
tcg_gen_mov_i32(tcg_res, tcg_op);
45
@@ -XXX,XX +XXX,XX @@ static void disas_simd_scalar_three_reg_diff(DisasContext *s, uint32_t insn)
46
tcg_temp_free_i64(tcg_op2);
47
tcg_temp_free_i64(tcg_res);
48
} else {
49
- TCGv_i32 tcg_op1 = tcg_temp_new_i32();
50
- TCGv_i32 tcg_op2 = tcg_temp_new_i32();
51
+ TCGv_i32 tcg_op1 = read_fp_hreg(s, rn);
52
+ TCGv_i32 tcg_op2 = read_fp_hreg(s, rm);
53
TCGv_i64 tcg_res = tcg_temp_new_i64();
54
55
- read_vec_element_i32(s, tcg_op1, rn, 0, MO_16);
56
- read_vec_element_i32(s, tcg_op2, rm, 0, MO_16);
57
-
58
gen_helper_neon_mull_s16(tcg_res, tcg_op1, tcg_op2);
59
gen_helper_neon_addl_saturate_s32(tcg_res, cpu_env, tcg_res, tcg_res);
60
61
@@ -XXX,XX +XXX,XX @@ static void disas_simd_scalar_three_reg_same_fp16(DisasContext *s,
62
63
fpst = get_fpstatus_ptr(true);
64
65
- tcg_op1 = tcg_temp_new_i32();
66
- tcg_op2 = tcg_temp_new_i32();
67
+ tcg_op1 = read_fp_hreg(s, rn);
68
+ tcg_op2 = read_fp_hreg(s, rm);
69
tcg_res = tcg_temp_new_i32();
70
71
- read_vec_element_i32(s, tcg_op1, rn, 0, MO_16);
72
- read_vec_element_i32(s, tcg_op2, rm, 0, MO_16);
73
-
74
switch (fpopcode) {
75
case 0x03: /* FMULX */
76
gen_helper_advsimd_mulxh(tcg_res, tcg_op1, tcg_op2, fpst);
77
@@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc_fp16(DisasContext *s, uint32_t insn)
78
}
79
80
if (is_scalar) {
81
- TCGv_i32 tcg_op = tcg_temp_new_i32();
82
+ TCGv_i32 tcg_op = read_fp_hreg(s, rn);
83
TCGv_i32 tcg_res = tcg_temp_new_i32();
84
85
- read_vec_element_i32(s, tcg_op, rn, 0, MO_16);
86
-
87
switch (fpop) {
88
case 0x1a: /* FCVTNS */
89
case 0x1b: /* FCVTMS */
90
--
91
2.17.0
92
93
diff view generated by jsdifflib
1
From: Richard Henderson <richard.henderson@linaro.org>
1
The Neon and SVE decoders use private 'plus1' functions to implement
2
"add one" for the !function decoder syntax. We have a generic
3
"plus_1" function in translate.h, so use that instead.
2
4
3
We missed all of the scalar fp16 binary operations.
5
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
6
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
7
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
8
Message-id: 20210715095341.701-1-peter.maydell@linaro.org
9
---
10
target/arm/neon-ls.decode | 4 ++--
11
target/arm/neon-shared.decode | 2 +-
12
target/arm/sve.decode | 2 +-
13
target/arm/translate-neon.c | 5 -----
14
target/arm/translate-sve.c | 5 -----
15
5 files changed, 4 insertions(+), 14 deletions(-)
4
16
5
Cc: qemu-stable@nongnu.org
17
diff --git a/target/arm/neon-ls.decode b/target/arm/neon-ls.decode
6
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
7
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
8
Tested-by: Alex Bennée <alex.bennee@linaro.org>
9
Message-id: 20180512003217.9105-7-richard.henderson@linaro.org
10
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
11
---
12
target/arm/translate-a64.c | 65 ++++++++++++++++++++++++++++++++++++++
13
1 file changed, 65 insertions(+)
14
15
diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c
16
index XXXXXXX..XXXXXXX 100644
18
index XXXXXXX..XXXXXXX 100644
17
--- a/target/arm/translate-a64.c
19
--- a/target/arm/neon-ls.decode
18
+++ b/target/arm/translate-a64.c
20
+++ b/target/arm/neon-ls.decode
19
@@ -XXX,XX +XXX,XX @@ static void handle_fp_2src_double(DisasContext *s, int opcode,
21
@@ -XXX,XX +XXX,XX @@ VLD_all_lanes 1111 0100 1 . 1 0 rn:4 .... 11 n:2 size:2 t:1 a:1 rm:4 \
20
tcg_temp_free_i64(tcg_res);
22
vd=%vd_dp
23
24
# Neon load/store single structure to one lane
25
-%imm1_5_p1 5:1 !function=plus1
26
-%imm1_6_p1 6:1 !function=plus1
27
+%imm1_5_p1 5:1 !function=plus_1
28
+%imm1_6_p1 6:1 !function=plus_1
29
30
VLDST_single 1111 0100 1 . l:1 0 rn:4 .... 00 n:2 reg_idx:3 align:1 rm:4 \
31
vd=%vd_dp size=0 stride=1
32
diff --git a/target/arm/neon-shared.decode b/target/arm/neon-shared.decode
33
index XXXXXXX..XXXXXXX 100644
34
--- a/target/arm/neon-shared.decode
35
+++ b/target/arm/neon-shared.decode
36
@@ -XXX,XX +XXX,XX @@
37
# which is 0 for fp16 and 1 for fp32 into a MO_* constant.
38
# (Note that this is the reverse of the sense of the 1-bit size
39
# field in the 3same_fp Neon insns.)
40
-%vcadd_size 20:1 !function=plus1
41
+%vcadd_size 20:1 !function=plus_1
42
43
VCMLA 1111 110 rot:2 . 1 . .... .... 1000 . q:1 . 0 .... \
44
vm=%vm_dp vn=%vn_dp vd=%vd_dp size=%vcadd_size
45
diff --git a/target/arm/sve.decode b/target/arm/sve.decode
46
index XXXXXXX..XXXXXXX 100644
47
--- a/target/arm/sve.decode
48
+++ b/target/arm/sve.decode
49
@@ -XXX,XX +XXX,XX @@
50
###########################################################################
51
# Named fields. These are primarily for disjoint fields.
52
53
-%imm4_16_p1 16:4 !function=plus1
54
+%imm4_16_p1 16:4 !function=plus_1
55
%imm6_22_5 22:1 5:5
56
%imm7_22_16 22:2 16:5
57
%imm8_16_10 16:5 10:3
58
diff --git a/target/arm/translate-neon.c b/target/arm/translate-neon.c
59
index XXXXXXX..XXXXXXX 100644
60
--- a/target/arm/translate-neon.c
61
+++ b/target/arm/translate-neon.c
62
@@ -XXX,XX +XXX,XX @@
63
#include "translate.h"
64
#include "translate-a32.h"
65
66
-static inline int plus1(DisasContext *s, int x)
67
-{
68
- return x + 1;
69
-}
70
-
71
static inline int neon_3same_fp_size(DisasContext *s, int x)
72
{
73
/* Convert 0==fp32, 1==fp16 into a MO_* value */
74
diff --git a/target/arm/translate-sve.c b/target/arm/translate-sve.c
75
index XXXXXXX..XXXXXXX 100644
76
--- a/target/arm/translate-sve.c
77
+++ b/target/arm/translate-sve.c
78
@@ -XXX,XX +XXX,XX @@ static int tszimm_shl(DisasContext *s, int x)
79
return x - (8 << tszimm_esz(s, x));
21
}
80
}
22
81
23
+/* Floating-point data-processing (2 source) - half precision */
82
-static inline int plus1(DisasContext *s, int x)
24
+static void handle_fp_2src_half(DisasContext *s, int opcode,
83
-{
25
+ int rd, int rn, int rm)
84
- return x + 1;
26
+{
85
-}
27
+ TCGv_i32 tcg_op1;
86
-
28
+ TCGv_i32 tcg_op2;
87
/* The SH bit is in bit 8. Extract the low 8 and shift. */
29
+ TCGv_i32 tcg_res;
88
static inline int expand_imm_sh8s(DisasContext *s, int x)
30
+ TCGv_ptr fpst;
89
{
31
+
32
+ tcg_res = tcg_temp_new_i32();
33
+ fpst = get_fpstatus_ptr(true);
34
+ tcg_op1 = read_fp_hreg(s, rn);
35
+ tcg_op2 = read_fp_hreg(s, rm);
36
+
37
+ switch (opcode) {
38
+ case 0x0: /* FMUL */
39
+ gen_helper_advsimd_mulh(tcg_res, tcg_op1, tcg_op2, fpst);
40
+ break;
41
+ case 0x1: /* FDIV */
42
+ gen_helper_advsimd_divh(tcg_res, tcg_op1, tcg_op2, fpst);
43
+ break;
44
+ case 0x2: /* FADD */
45
+ gen_helper_advsimd_addh(tcg_res, tcg_op1, tcg_op2, fpst);
46
+ break;
47
+ case 0x3: /* FSUB */
48
+ gen_helper_advsimd_subh(tcg_res, tcg_op1, tcg_op2, fpst);
49
+ break;
50
+ case 0x4: /* FMAX */
51
+ gen_helper_advsimd_maxh(tcg_res, tcg_op1, tcg_op2, fpst);
52
+ break;
53
+ case 0x5: /* FMIN */
54
+ gen_helper_advsimd_minh(tcg_res, tcg_op1, tcg_op2, fpst);
55
+ break;
56
+ case 0x6: /* FMAXNM */
57
+ gen_helper_advsimd_maxnumh(tcg_res, tcg_op1, tcg_op2, fpst);
58
+ break;
59
+ case 0x7: /* FMINNM */
60
+ gen_helper_advsimd_minnumh(tcg_res, tcg_op1, tcg_op2, fpst);
61
+ break;
62
+ case 0x8: /* FNMUL */
63
+ gen_helper_advsimd_mulh(tcg_res, tcg_op1, tcg_op2, fpst);
64
+ tcg_gen_xori_i32(tcg_res, tcg_res, 0x8000);
65
+ break;
66
+ default:
67
+ g_assert_not_reached();
68
+ }
69
+
70
+ write_fp_sreg(s, rd, tcg_res);
71
+
72
+ tcg_temp_free_ptr(fpst);
73
+ tcg_temp_free_i32(tcg_op1);
74
+ tcg_temp_free_i32(tcg_op2);
75
+ tcg_temp_free_i32(tcg_res);
76
+}
77
+
78
/* Floating point data-processing (2 source)
79
* 31 30 29 28 24 23 22 21 20 16 15 12 11 10 9 5 4 0
80
* +---+---+---+-----------+------+---+------+--------+-----+------+------+
81
@@ -XXX,XX +XXX,XX @@ static void disas_fp_2src(DisasContext *s, uint32_t insn)
82
}
83
handle_fp_2src_double(s, opcode, rd, rn, rm);
84
break;
85
+ case 3:
86
+ if (!arm_dc_feature(s, ARM_FEATURE_V8_FP16)) {
87
+ unallocated_encoding(s);
88
+ return;
89
+ }
90
+ if (!fp_access_check(s)) {
91
+ return;
92
+ }
93
+ handle_fp_2src_half(s, opcode, rd, rn, rm);
94
+ break;
95
default:
96
unallocated_encoding(s);
97
}
98
--
90
--
99
2.17.0
91
2.20.1
100
92
101
93
diff view generated by jsdifflib