1
Finish the conversion of all aarch64 instructions to decodetree.
1
Finish the conversion of all aarch64 instructions to decodetree.
2
3
Changes for v2:
4
- Apply review nits as appropriate.
5
- Split out gen_gvec_fabs, gen_gvec_fneg and share with a32 neon.
6
7
Patches lacking review:
8
23-target-arm-Fix-decode-of-fp16-vector-fabs-fneg.patch
9
24-target-arm-Convert-FMOV-FABS-FNEG-scalar-to-decod.patch
10
29-target-arm-Convert-BFCVT-to-decodetree.patch
11
43-target-arm-Convert-handle_rev-to-decodetree.patch
12
53-target-arm-Implement-gen_gvec_fabs-gen_gvec_fneg.patch
13
57-target-arm-Convert-FCVT-vector-integer-scalar-to-.patch
14
58-target-arm-Convert-FCVT-vector-fixed-point-scalar.patch
15
60-target-arm-Convert-US-CVTF-vector-fixed-point-sca.patch
16
62-target-arm-Convert-US-CVTF-vector-to-decodetree.patch
17
63-target-arm-Convert-FCVTZ-SU-vector-fixed-point-to.patch
18
64-target-arm-Convert-FCVT-vector-integer-to-decodet.patch
19
67-target-arm-Introduce-gen_gvec_urecpe-gen_gvec_urs.patch
20
68-target-arm-Convert-URECPE-and-URSQRTE-to-decodetr.patch
21
2
22
3
r~
23
r~
4
24
5
Richard Henderson (67):
25
6
target/arm: Use ### to separate 3rd-level sections in a64.decode
26
Richard Henderson (69):
27
target/arm: Add section labels for "Data Processing (register)"
7
target/arm: Convert UDIV, SDIV to decodetree
28
target/arm: Convert UDIV, SDIV to decodetree
8
target/arm: Convert LSLV, LSRV, ASRV, RORV to decodetree
29
target/arm: Convert LSLV, LSRV, ASRV, RORV to decodetree
9
target/arm: Convert CRC32, CRC32C to decodetree
30
target/arm: Convert CRC32, CRC32C to decodetree
10
target/arm: Convert SUBP, IRG, GMI to decodetree
31
target/arm: Convert SUBP, IRG, GMI to decodetree
11
target/arm: Convert PACGA to decodetree
32
target/arm: Convert PACGA to decodetree
...
...
23
target/arm: Convert CCMP, CCMN to decodetree
44
target/arm: Convert CCMP, CCMN to decodetree
24
target/arm: Convert disas_cond_select to decodetree
45
target/arm: Convert disas_cond_select to decodetree
25
target/arm: Introduce fp_access_check_scalar_hsd
46
target/arm: Introduce fp_access_check_scalar_hsd
26
target/arm: Introduce fp_access_check_vector_hsd
47
target/arm: Introduce fp_access_check_vector_hsd
27
target/arm: Convert FCMP, FCMPE, FCCMP, FCCMPE to decodetree
48
target/arm: Convert FCMP, FCMPE, FCCMP, FCCMPE to decodetree
49
target/arm: Fix decode of fp16 vector fabs, fneg
28
target/arm: Convert FMOV, FABS, FNEG (scalar) to decodetree
50
target/arm: Convert FMOV, FABS, FNEG (scalar) to decodetree
29
target/arm: Pass fpstatus to vfp_sqrt*
51
target/arm: Pass fpstatus to vfp_sqrt*
30
target/arm: Remove helper_sqrt_f16
52
target/arm: Remove helper_sqrt_f16
31
target/arm: Convert FSQRT (scalar) to decodetree
53
target/arm: Convert FSQRT (scalar) to decodetree
32
target/arm: Convert FRINT[NPMSAXI] (scalar) to decodetree
54
target/arm: Convert FRINT[NPMSAXI] (scalar) to decodetree
...
...
52
target/arm: Introduce clear_vec
74
target/arm: Introduce clear_vec
53
target/arm: Convert XTN, SQXTUN, SQXTN, UQXTN to decodetree
75
target/arm: Convert XTN, SQXTUN, SQXTN, UQXTN to decodetree
54
target/arm: Convert FCVTN, BFCVTN to decodetree
76
target/arm: Convert FCVTN, BFCVTN to decodetree
55
target/arm: Convert FCVTXN to decodetree
77
target/arm: Convert FCVTXN to decodetree
56
target/arm: Convert SHLL to decodetree
78
target/arm: Convert SHLL to decodetree
79
target/arm: Implement gen_gvec_fabs, gen_gvec_fneg
57
target/arm: Convert FABS, FNEG (vector) to decodetree
80
target/arm: Convert FABS, FNEG (vector) to decodetree
58
target/arm: Convert FSQRT (vector) to decodetree
81
target/arm: Convert FSQRT (vector) to decodetree
59
target/arm: Convert FRINT* (vector) to decodetree
82
target/arm: Convert FRINT* (vector) to decodetree
60
target/arm: Convert FCVT* (vector, integer) scalar to decodetree
83
target/arm: Convert FCVT* (vector, integer) scalar to decodetree
61
target/arm: Convert FCVT* (vector, fixed-point) scalar to decodetree
84
target/arm: Convert FCVT* (vector, fixed-point) scalar to decodetree
...
...
72
target/arm: Convert URECPE and URSQRTE to decodetree
95
target/arm: Convert URECPE and URSQRTE to decodetree
73
target/arm: Convert FCVTL to decodetree
96
target/arm: Convert FCVTL to decodetree
74
97
75
target/arm/helper.h | 43 +-
98
target/arm/helper.h | 43 +-
76
target/arm/tcg/helper-a64.h | 7 -
99
target/arm/tcg/helper-a64.h | 7 -
77
target/arm/tcg/translate.h | 29 +
100
target/arm/tcg/translate.h | 35 +
78
target/arm/tcg/gengvec.c | 355 ++
101
target/arm/tcg/gengvec.c | 369 ++
79
target/arm/tcg/helper-a64.c | 104 -
102
target/arm/tcg/helper-a64.c | 104 -
80
target/arm/tcg/neon_helper.c | 106 +-
103
target/arm/tcg/neon_helper.c | 106 +-
81
target/arm/tcg/translate-a64.c | 5674 ++++++++++---------------------
104
target/arm/tcg/translate-a64.c | 5670 ++++++++++---------------------
82
target/arm/tcg/translate-neon.c | 317 +-
105
target/arm/tcg/translate-neon.c | 337 +-
83
target/arm/tcg/translate-vfp.c | 6 +-
106
target/arm/tcg/translate-vfp.c | 6 +-
84
target/arm/tcg/vec_helper.c | 65 +-
107
target/arm/tcg/vec_helper.c | 65 +-
85
target/arm/vfp_helper.c | 16 +-
108
target/arm/vfp_helper.c | 16 +-
86
target/arm/tcg/a64.decode | 502 ++-
109
target/arm/tcg/a64.decode | 502 ++-
87
12 files changed, 2874 insertions(+), 4350 deletions(-)
110
12 files changed, 2888 insertions(+), 4372 deletions(-)
88
111
89
--
112
--
90
2.43.0
113
2.43.0
diff view generated by jsdifflib
1
At the same time, use ### to separate 3rd-level sections.
1
We already use ### for 4.1.92 Data Processing (immediate),
2
We already use ### for 4.1.92 Data Processing (immediate),
2
but not the two following two third-level sections:
3
but not the two following two third-level sections:
3
4.1.93 Branches, and 4.1.94 Loads and stores.
4
4.1.93 Branches, and 4.1.94 Loads and stores.
4
5
6
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
5
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
7
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
6
---
8
---
7
target/arm/tcg/a64.decode | 4 ++--
9
target/arm/tcg/a64.decode | 19 +++++++++++++++++--
8
1 file changed, 2 insertions(+), 2 deletions(-)
10
1 file changed, 17 insertions(+), 2 deletions(-)
9
11
10
diff --git a/target/arm/tcg/a64.decode b/target/arm/tcg/a64.decode
12
diff --git a/target/arm/tcg/a64.decode b/target/arm/tcg/a64.decode
11
index XXXXXXX..XXXXXXX 100644
13
index XXXXXXX..XXXXXXX 100644
12
--- a/target/arm/tcg/a64.decode
14
--- a/target/arm/tcg/a64.decode
13
+++ b/target/arm/tcg/a64.decode
15
+++ b/target/arm/tcg/a64.decode
...
...
27
-# Loads and stores
29
-# Loads and stores
28
+### Loads and stores
30
+### Loads and stores
29
31
30
&stxr rn rt rt2 rs sz lasr
32
&stxr rn rt rt2 rs sz lasr
31
&stlr rn rt sz lasr
33
&stlr rn rt sz lasr
34
@@ -XXX,XX +XXX,XX @@ CPYP 00 011 1 01000 ..... .... 01 ..... ..... @cpy
35
CPYM 00 011 1 01010 ..... .... 01 ..... ..... @cpy
36
CPYE 00 011 1 01100 ..... .... 01 ..... ..... @cpy
37
38
+### Data Processing (register)
39
+
40
+# Data Processing (2-source)
41
+# Data Processing (1-source)
42
+# Logical (shifted reg)
43
+# Add/subtract (shifted reg)
44
+# Add/subtract (extended reg)
45
+# Add/subtract (carry)
46
+# Rotate right into flags
47
+# Evaluate into flags
48
+# Conditional compare (regster)
49
+# Conditional compare (immediate)
50
+# Conditional select
51
+# Data Processing (3-source)
52
+
53
### Cryptographic AES
54
55
AESE 01001110 00 10100 00100 10 ..... ..... @r2r_q1e0
32
--
56
--
33
2.43.0
57
2.43.0
58
59
diff view generated by jsdifflib
1
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
1
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
---
3
---
3
target/arm/tcg/translate-a64.c | 64 +++++++++++++++++-----------------
4
target/arm/tcg/translate-a64.c | 64 +++++++++++++++++-----------------
4
target/arm/tcg/a64.decode | 22 ++++++++++++
5
target/arm/tcg/a64.decode | 7 ++++
5
2 files changed, 54 insertions(+), 32 deletions(-)
6
2 files changed, 39 insertions(+), 32 deletions(-)
6
7
7
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
8
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
8
index XXXXXXX..XXXXXXX 100644
9
index XXXXXXX..XXXXXXX 100644
9
--- a/target/arm/tcg/translate-a64.c
10
--- a/target/arm/tcg/translate-a64.c
10
+++ b/target/arm/tcg/translate-a64.c
11
+++ b/target/arm/tcg/translate-a64.c
...
...
110
&rri_sf rd rn imm sf
111
&rri_sf rd rn imm sf
111
+&rrr_sf rd rn rm sf
112
+&rrr_sf rd rn rm sf
112
&i imm
113
&i imm
113
&rr_e rd rn esz
114
&rr_e rd rn esz
114
&rri_e rd rn imm esz
115
&rri_e rd rn imm esz
115
@@ -XXX,XX +XXX,XX @@ CPYP 00 011 1 01000 ..... .... 01 ..... ..... @cpy
116
@@ -XXX,XX +XXX,XX @@ CPYE 00 011 1 01100 ..... .... 01 ..... ..... @cpy
116
CPYM 00 011 1 01010 ..... .... 01 ..... ..... @cpy
117
### Data Processing (register)
117
CPYE 00 011 1 01100 ..... .... 01 ..... ..... @cpy
118
118
119
# Data Processing (2-source)
119
+### Data Processing (register)
120
+
121
+# Data Processing (2-source)
122
+
120
+
123
+@rrr_sf sf:1 .......... rm:5 ...... rn:5 rd:5 &rrr_sf
121
+@rrr_sf sf:1 .......... rm:5 ...... rn:5 rd:5 &rrr_sf
124
+
122
+
125
+UDIV . 00 11010110 ..... 00001 0 ..... ..... @rrr_sf
123
+UDIV . 00 11010110 ..... 00001 0 ..... ..... @rrr_sf
126
+SDIV . 00 11010110 ..... 00001 1 ..... ..... @rrr_sf
124
+SDIV . 00 11010110 ..... 00001 1 ..... ..... @rrr_sf
127
+
125
+
128
+# Data Processing (1-source)
126
# Data Processing (1-source)
129
+# Logical (shifted reg)
127
# Logical (shifted reg)
130
+# Add/subtract (shifted reg)
128
# Add/subtract (shifted reg)
131
+# Add/subtract (extended reg)
132
+# Add/subtract (carry)
133
+# Rotate right into flags
134
+# Evaluate into flags
135
+# Conditional compare (regster)
136
+# Conditional compare (immediate)
137
+# Conditional select
138
+# Data Processing (3-source)
139
+
140
### Cryptographic AES
141
142
AESE 01001110 00 10100 00100 10 ..... ..... @r2r_q1e0
143
--
129
--
144
2.43.0
130
2.43.0
131
132
diff view generated by jsdifflib
1
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
1
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
---
3
---
3
target/arm/tcg/translate-a64.c | 46 ++++++++++++++++------------------
4
target/arm/tcg/translate-a64.c | 46 ++++++++++++++++------------------
4
target/arm/tcg/a64.decode | 4 +++
5
target/arm/tcg/a64.decode | 4 +++
5
2 files changed, 25 insertions(+), 25 deletions(-)
6
2 files changed, 25 insertions(+), 25 deletions(-)
...
...
97
98
98
# Data Processing (1-source)
99
# Data Processing (1-source)
99
# Logical (shifted reg)
100
# Logical (shifted reg)
100
--
101
--
101
2.43.0
102
2.43.0
103
104
diff view generated by jsdifflib
1
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
1
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
---
3
---
3
target/arm/tcg/translate-a64.c | 101 +++++++++++++--------------------
4
target/arm/tcg/translate-a64.c | 101 +++++++++++++--------------------
4
target/arm/tcg/a64.decode | 12 ++++
5
target/arm/tcg/a64.decode | 12 ++++
5
2 files changed, 53 insertions(+), 60 deletions(-)
6
2 files changed, 53 insertions(+), 60 deletions(-)
...
...
168
# Data Processing (1-source)
169
# Data Processing (1-source)
169
# Logical (shifted reg)
170
# Logical (shifted reg)
170
# Add/subtract (shifted reg)
171
# Add/subtract (shifted reg)
171
--
172
--
172
2.43.0
173
2.43.0
174
175
diff view generated by jsdifflib
1
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
1
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
---
3
---
3
target/arm/tcg/translate-a64.c | 94 +++++++++++++++++++---------------
4
target/arm/tcg/translate-a64.c | 94 +++++++++++++++++++---------------
4
target/arm/tcg/a64.decode | 7 +++
5
target/arm/tcg/a64.decode | 7 +++
5
2 files changed, 59 insertions(+), 42 deletions(-)
6
2 files changed, 59 insertions(+), 42 deletions(-)
...
...
157
# Data Processing (1-source)
158
# Data Processing (1-source)
158
# Logical (shifted reg)
159
# Logical (shifted reg)
159
# Add/subtract (shifted reg)
160
# Add/subtract (shifted reg)
160
--
161
--
161
2.43.0
162
2.43.0
163
164
diff view generated by jsdifflib
1
Remove disas_data_proc_2src, as this was the last insn
1
Remove disas_data_proc_2src, as this was the last insn
2
decoded by that function.
2
decoded by that function.
3
3
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/arm/tcg/translate-a64.c | 65 ++++++----------------------------
7
target/arm/tcg/translate-a64.c | 65 ++++++----------------------------
7
target/arm/tcg/a64.decode | 2 ++
8
target/arm/tcg/a64.decode | 2 ++
8
2 files changed, 13 insertions(+), 54 deletions(-)
9
2 files changed, 13 insertions(+), 54 deletions(-)
...
...
110
# Data Processing (1-source)
111
# Data Processing (1-source)
111
# Logical (shifted reg)
112
# Logical (shifted reg)
112
# Add/subtract (shifted reg)
113
# Add/subtract (shifted reg)
113
--
114
--
114
2.43.0
115
2.43.0
116
117
diff view generated by jsdifflib
1
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
1
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
---
3
---
3
target/arm/tcg/translate-a64.c | 137 +++++++++++++++------------------
4
target/arm/tcg/translate-a64.c | 137 +++++++++++++++------------------
4
target/arm/tcg/a64.decode | 11 +++
5
target/arm/tcg/a64.decode | 11 +++
5
2 files changed, 72 insertions(+), 76 deletions(-)
6
2 files changed, 72 insertions(+), 76 deletions(-)
...
...
diff view generated by jsdifflib
1
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
1
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
---
3
---
3
target/arm/tcg/translate-a64.c | 72 ++++++++++++++--------------------
4
target/arm/tcg/translate-a64.c | 72 ++++++++++++++--------------------
4
target/arm/tcg/a64.decode | 3 ++
5
target/arm/tcg/a64.decode | 3 ++
5
2 files changed, 33 insertions(+), 42 deletions(-)
6
2 files changed, 33 insertions(+), 42 deletions(-)
...
...
122
# Logical (shifted reg)
123
# Logical (shifted reg)
123
# Add/subtract (shifted reg)
124
# Add/subtract (shifted reg)
124
# Add/subtract (extended reg)
125
# Add/subtract (extended reg)
125
--
126
--
126
2.43.0
127
2.43.0
128
129
diff view generated by jsdifflib
1
This includes PACIA, PACIZA, PACIB, PACIZB, PACDA, PACDZA, PACDB,
1
This includes PACIA, PACIZA, PACIB, PACIZB, PACDA, PACDZA, PACDB,
2
PACDZB, AUTIA, AUTIZA, AUTIB, AUTIZB, AUTDA, AUTDZA, AUTDB, AUTDZB.
2
PACDZB, AUTIA, AUTIZA, AUTIB, AUTIZB, AUTDA, AUTDZA, AUTDB, AUTDZB.
3
3
4
Reviewed-by: Peter Maydell <peter.maydell@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/arm/tcg/translate-a64.c | 173 +++++++++------------------------
7
target/arm/tcg/translate-a64.c | 173 +++++++++------------------------
7
target/arm/tcg/a64.decode | 13 +++
8
target/arm/tcg/a64.decode | 13 +++
8
2 files changed, 58 insertions(+), 128 deletions(-)
9
2 files changed, 58 insertions(+), 128 deletions(-)
...
...
diff view generated by jsdifflib
1
Remove disas_data_proc_1src, as these were the last insns
1
Remove disas_data_proc_1src, as these were the last insns
2
decoded by that function.
2
decoded by that function.
3
3
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/arm/tcg/translate-a64.c | 99 +++++-----------------------------
7
target/arm/tcg/translate-a64.c | 99 +++++-----------------------------
7
target/arm/tcg/a64.decode | 3 ++
8
target/arm/tcg/a64.decode | 3 ++
8
2 files changed, 16 insertions(+), 86 deletions(-)
9
2 files changed, 16 insertions(+), 86 deletions(-)
...
...
158
# Logical (shifted reg)
159
# Logical (shifted reg)
159
# Add/subtract (shifted reg)
160
# Add/subtract (shifted reg)
160
# Add/subtract (extended reg)
161
# Add/subtract (extended reg)
161
--
162
--
162
2.43.0
163
2.43.0
164
165
diff view generated by jsdifflib
1
This includes AND, BIC, ORR, ORN, EOR, EON, ANDS, BICS (shifted reg).
1
This includes AND, BIC, ORR, ORN, EOR, EON, ANDS, BICS (shifted reg).
2
2
3
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
3
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4
---
5
---
5
target/arm/tcg/translate-a64.c | 117 ++++++++++++---------------------
6
target/arm/tcg/translate-a64.c | 117 ++++++++++++---------------------
6
target/arm/tcg/a64.decode | 9 +++
7
target/arm/tcg/a64.decode | 9 +++
7
2 files changed, 51 insertions(+), 75 deletions(-)
8
2 files changed, 51 insertions(+), 75 deletions(-)
...
...
169
XPACD 1 10 11010110 00001 010001 11111 rd:5
170
XPACD 1 10 11010110 00001 010001 11111 rd:5
170
171
171
# Logical (shifted reg)
172
# Logical (shifted reg)
172
+
173
+
173
+&logic_shift rd rn rm sf sa st n
174
+&logic_shift rd rn rm sf sa st n
174
+@logic_shift sf:1 .. ..... st:2 n:1 rm:5 sa:6 rn:5 rd:5
175
+@logic_shift sf:1 .. ..... st:2 n:1 rm:5 sa:6 rn:5 rd:5 &logic_shift
175
+
176
+
176
+AND_r . 00 01010 .. . ..... ...... ..... ..... @logic_shift
177
+AND_r . 00 01010 .. . ..... ...... ..... ..... @logic_shift
177
+ORR_r . 01 01010 .. . ..... ...... ..... ..... @logic_shift
178
+ORR_r . 01 01010 .. . ..... ...... ..... ..... @logic_shift
178
+EOR_r . 10 01010 .. . ..... ...... ..... ..... @logic_shift
179
+EOR_r . 10 01010 .. . ..... ...... ..... ..... @logic_shift
179
+ANDS_r . 11 01010 .. . ..... ...... ..... ..... @logic_shift
180
+ANDS_r . 11 01010 .. . ..... ...... ..... ..... @logic_shift
180
+
181
+
181
# Add/subtract (shifted reg)
182
# Add/subtract (shifted reg)
182
# Add/subtract (extended reg)
183
# Add/subtract (extended reg)
183
# Add/subtract (carry)
184
# Add/subtract (carry)
184
--
185
--
185
2.43.0
186
2.43.0
diff view generated by jsdifflib
1
This includes ADD, SUB, ADDS, SUBS (extended register).
1
This includes ADD, SUB, ADDS, SUBS (extended register).
2
2
3
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
3
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4
---
5
---
5
target/arm/tcg/translate-a64.c | 65 +++++++++++-----------------------
6
target/arm/tcg/translate-a64.c | 65 +++++++++++-----------------------
6
target/arm/tcg/a64.decode | 9 +++++
7
target/arm/tcg/a64.decode | 9 +++++
7
2 files changed, 29 insertions(+), 45 deletions(-)
8
2 files changed, 29 insertions(+), 45 deletions(-)
...
...
119
disas_add_sub_reg(s, insn);
120
disas_add_sub_reg(s, insn);
120
diff --git a/target/arm/tcg/a64.decode b/target/arm/tcg/a64.decode
121
diff --git a/target/arm/tcg/a64.decode b/target/arm/tcg/a64.decode
121
index XXXXXXX..XXXXXXX 100644
122
index XXXXXXX..XXXXXXX 100644
122
--- a/target/arm/tcg/a64.decode
123
--- a/target/arm/tcg/a64.decode
123
+++ b/target/arm/tcg/a64.decode
124
+++ b/target/arm/tcg/a64.decode
124
@@ -XXX,XX +XXX,XX @@ ANDS_r . 11 01010 .. . ..... ...... ..... ..... @logic_shift
125
@@ -XXX,XX +XXX,XX @@ ANDS_r . 11 01010 .. . ..... ...... ..... ..... @logic_shift
125
126
126
# Add/subtract (shifted reg)
127
# Add/subtract (shifted reg)
127
# Add/subtract (extended reg)
128
# Add/subtract (extended reg)
128
+
129
+
129
+&addsub_ext rd rn rm sf sa st
130
+&addsub_ext rd rn rm sf sa st
130
+@addsub_ext sf:1 .. ........ rm:5 st:3 sa:3 rn:5 rd:5 &addsub_ext
131
+@addsub_ext sf:1 .. ........ rm:5 st:3 sa:3 rn:5 rd:5 &addsub_ext
131
+
132
+
132
+ADD_ext . 00 01011001 ..... ... ... ..... ..... @addsub_ext
133
+ADD_ext . 00 01011001 ..... ... ... ..... ..... @addsub_ext
133
+SUB_ext . 10 01011001 ..... ... ... ..... ..... @addsub_ext
134
+SUB_ext . 10 01011001 ..... ... ... ..... ..... @addsub_ext
134
+ADDS_ext . 01 01011001 ..... ... ... ..... ..... @addsub_ext
135
+ADDS_ext . 01 01011001 ..... ... ... ..... ..... @addsub_ext
135
+SUBS_ext . 11 01011001 ..... ... ... ..... ..... @addsub_ext
136
+SUBS_ext . 11 01011001 ..... ... ... ..... ..... @addsub_ext
136
+
137
+
137
# Add/subtract (carry)
138
# Add/subtract (carry)
138
# Rotate right into flags
139
# Rotate right into flags
139
# Evaluate into flags
140
# Evaluate into flags
140
--
141
--
141
2.43.0
142
2.43.0
diff view generated by jsdifflib
1
This includes ADD, SUB, ADDS, SUBS (shifted register).
1
This includes ADD, SUB, ADDS, SUBS (shifted register).
2
2
3
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
3
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4
---
5
---
5
target/arm/tcg/translate-a64.c | 64 ++++++++++------------------------
6
target/arm/tcg/translate-a64.c | 64 ++++++++++------------------------
6
target/arm/tcg/a64.decode | 11 +++++-
7
target/arm/tcg/a64.decode | 9 +++++
7
2 files changed, 28 insertions(+), 47 deletions(-)
8
2 files changed, 27 insertions(+), 46 deletions(-)
8
9
9
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
10
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
10
index XXXXXXX..XXXXXXX 100644
11
index XXXXXXX..XXXXXXX 100644
11
--- a/target/arm/tcg/translate-a64.c
12
--- a/target/arm/tcg/translate-a64.c
12
+++ b/target/arm/tcg/translate-a64.c
13
+++ b/target/arm/tcg/translate-a64.c
...
...
114
115
115
diff --git a/target/arm/tcg/a64.decode b/target/arm/tcg/a64.decode
116
diff --git a/target/arm/tcg/a64.decode b/target/arm/tcg/a64.decode
116
index XXXXXXX..XXXXXXX 100644
117
index XXXXXXX..XXXXXXX 100644
117
--- a/target/arm/tcg/a64.decode
118
--- a/target/arm/tcg/a64.decode
118
+++ b/target/arm/tcg/a64.decode
119
+++ b/target/arm/tcg/a64.decode
119
@@ -XXX,XX +XXX,XX @@ XPACD 1 10 11010110 00001 010001 11111 rd:5
120
@@ -XXX,XX +XXX,XX @@ EOR_r . 10 01010 .. . ..... ...... ..... ..... @logic_shift
120
# Logical (shifted reg)
121
ANDS_r . 11 01010 .. . ..... ...... ..... ..... @logic_shift
121
122
&logic_shift rd rn rm sf sa st n
123
-@logic_shift sf:1 .. ..... st:2 n:1 rm:5 sa:6 rn:5 rd:5
124
+@logic_shift sf:1 .. ..... st:2 n:1 rm:5 sa:6 rn:5 rd:5 &logic_shift
125
126
AND_r . 00 01010 .. . ..... ...... ..... ..... @logic_shift
127
ORR_r . 01 01010 .. . ..... ...... ..... ..... @logic_shift
128
@@ -XXX,XX +XXX,XX @@ EOR_r . 10 01010 .. . ..... ...... ..... ..... @logic_shift
129
ANDS_r . 11 01010 .. . ..... ...... ..... ..... @logic_shift
130
122
131
# Add/subtract (shifted reg)
123
# Add/subtract (shifted reg)
132
+
124
+
133
+&addsub_shift rd rn rm sf sa st
125
+&addsub_shift rd rn rm sf sa st
134
+@addsub_shift sf:1 .. ..... st:2 . rm:5 sa:6 rn:5 rd:5 &addsub_shift
126
+@addsub_shift sf:1 .. ..... st:2 . rm:5 sa:6 rn:5 rd:5 &addsub_shift
135
+
127
+
136
+ADD_r . 00 01011 .. 0 ..... ...... ..... ..... @addsub_shift
128
+ADD_r . 00 01011 .. 0 ..... ...... ..... ..... @addsub_shift
137
+SUB_r . 10 01011 .. 0 ..... ...... ..... ..... @addsub_shift
129
+SUB_r . 10 01011 .. 0 ..... ...... ..... ..... @addsub_shift
138
+ADDS_r . 01 01011 .. 0 ..... ...... ..... ..... @addsub_shift
130
+ADDS_r . 01 01011 .. 0 ..... ...... ..... ..... @addsub_shift
139
+SUBS_r . 11 01011 .. 0 ..... ...... ..... ..... @addsub_shift
131
+SUBS_r . 11 01011 .. 0 ..... ...... ..... ..... @addsub_shift
140
+
132
+
141
# Add/subtract (extended reg)
133
# Add/subtract (extended reg)
142
134
143
&addsub_ext rd rn rm sf sa st
135
&addsub_ext rd rn rm sf sa st
144
--
136
--
145
2.43.0
137
2.43.0
diff view generated by jsdifflib
1
This includes MADD, MSUB, SMADDL, SMSUBL, UMADDL, UMSUBL, SMULH, UMULH.
1
This includes MADD, MSUB, SMADDL, SMSUBL, UMADDL, UMSUBL, SMULH, UMULH.
2
2
3
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
3
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4
---
5
---
5
target/arm/tcg/translate-a64.c | 119 ++++++++++++---------------------
6
target/arm/tcg/translate-a64.c | 119 ++++++++++++---------------------
6
target/arm/tcg/a64.decode | 16 +++++
7
target/arm/tcg/a64.decode | 16 +++++
7
2 files changed, 59 insertions(+), 76 deletions(-)
8
2 files changed, 59 insertions(+), 76 deletions(-)
...
...
168
}
169
}
169
diff --git a/target/arm/tcg/a64.decode b/target/arm/tcg/a64.decode
170
diff --git a/target/arm/tcg/a64.decode b/target/arm/tcg/a64.decode
170
index XXXXXXX..XXXXXXX 100644
171
index XXXXXXX..XXXXXXX 100644
171
--- a/target/arm/tcg/a64.decode
172
--- a/target/arm/tcg/a64.decode
172
+++ b/target/arm/tcg/a64.decode
173
+++ b/target/arm/tcg/a64.decode
173
@@ -XXX,XX +XXX,XX @@ SUBS_ext . 11 01011001 ..... ... ... ..... ..... @addsub_ext
174
@@ -XXX,XX +XXX,XX @@ SUBS_ext . 11 01011001 ..... ... ... ..... ..... @addsub_ext
174
# Conditional select
175
# Conditional select
175
# Data Processing (3-source)
176
# Data Processing (3-source)
176
177
177
+&rrrr rd rn rm ra
178
+&rrrr rd rn rm ra
178
+@rrrr . .. ........ rm:5 . ra:5 rn:5 rd:5 &rrrr
179
+@rrrr . .. ........ rm:5 . ra:5 rn:5 rd:5 &rrrr
...
...
diff view generated by jsdifflib
1
This includes ADC, SBC, ADCS, SBCS.
1
This includes ADC, SBC, ADCS, SBCS.
2
2
3
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
3
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4
---
5
---
5
target/arm/tcg/translate-a64.c | 43 +++++++++++++---------------------
6
target/arm/tcg/translate-a64.c | 43 +++++++++++++---------------------
6
target/arm/tcg/a64.decode | 6 +++++
7
target/arm/tcg/a64.decode | 6 +++++
7
2 files changed, 22 insertions(+), 27 deletions(-)
8
2 files changed, 22 insertions(+), 27 deletions(-)
...
...
89
break;
90
break;
90
diff --git a/target/arm/tcg/a64.decode b/target/arm/tcg/a64.decode
91
diff --git a/target/arm/tcg/a64.decode b/target/arm/tcg/a64.decode
91
index XXXXXXX..XXXXXXX 100644
92
index XXXXXXX..XXXXXXX 100644
92
--- a/target/arm/tcg/a64.decode
93
--- a/target/arm/tcg/a64.decode
93
+++ b/target/arm/tcg/a64.decode
94
+++ b/target/arm/tcg/a64.decode
94
@@ -XXX,XX +XXX,XX @@ ADDS_ext . 01 01011001 ..... ... ... ..... ..... @addsub_ext
95
@@ -XXX,XX +XXX,XX @@ ADDS_ext . 01 01011001 ..... ... ... ..... ..... @addsub_ext
95
SUBS_ext . 11 01011001 ..... ... ... ..... ..... @addsub_ext
96
SUBS_ext . 11 01011001 ..... ... ... ..... ..... @addsub_ext
96
97
97
# Add/subtract (carry)
98
# Add/subtract (carry)
98
+
99
+
99
+ADC . 00 11010000 ..... 000000 ..... ..... @rrr_sf
100
+ADC . 00 11010000 ..... 000000 ..... ..... @rrr_sf
100
+ADCS . 01 11010000 ..... 000000 ..... ..... @rrr_sf
101
+ADCS . 01 11010000 ..... 000000 ..... ..... @rrr_sf
...
...
diff view generated by jsdifflib
1
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
1
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
---
3
---
3
target/arm/tcg/translate-a64.c | 32 +++++++++-----------------------
4
target/arm/tcg/translate-a64.c | 32 +++++++++-----------------------
4
target/arm/tcg/a64.decode | 3 +++
5
target/arm/tcg/a64.decode | 3 +++
5
2 files changed, 12 insertions(+), 23 deletions(-)
6
2 files changed, 12 insertions(+), 23 deletions(-)
...
...
88
# Evaluate into flags
89
# Evaluate into flags
89
# Conditional compare (regster)
90
# Conditional compare (regster)
90
# Conditional compare (immediate)
91
# Conditional compare (immediate)
91
--
92
--
92
2.43.0
93
2.43.0
94
95
diff view generated by jsdifflib
1
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
1
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
---
3
---
3
target/arm/tcg/translate-a64.c | 48 +++++-----------------------------
4
target/arm/tcg/translate-a64.c | 48 +++++-----------------------------
4
target/arm/tcg/a64.decode | 4 +++
5
target/arm/tcg/a64.decode | 4 +++
5
2 files changed, 11 insertions(+), 41 deletions(-)
6
2 files changed, 11 insertions(+), 41 deletions(-)
...
...
diff view generated by jsdifflib
1
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
1
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
---
3
---
3
target/arm/tcg/translate-a64.c | 66 +++++++++++-----------------------
4
target/arm/tcg/translate-a64.c | 66 +++++++++++-----------------------
4
target/arm/tcg/a64.decode | 6 ++--
5
target/arm/tcg/a64.decode | 6 ++--
5
2 files changed, 25 insertions(+), 47 deletions(-)
6
2 files changed, 25 insertions(+), 47 deletions(-)
...
...
diff view generated by jsdifflib
1
This includes CSEL, CSINC, CSINV, CSNEG. Remove disas_data_proc_reg,
1
This includes CSEL, CSINC, CSINV, CSNEG. Remove disas_data_proc_reg,
2
as these were the last insns decoded by that function.
2
as these were the last insns decoded by that function.
3
3
4
Reviewed-by: Peter Maydell <peter.maydell@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/arm/tcg/translate-a64.c | 84 ++++++----------------------------
7
target/arm/tcg/translate-a64.c | 84 ++++++----------------------------
7
target/arm/tcg/a64.decode | 3 ++
8
target/arm/tcg/a64.decode | 3 ++
8
2 files changed, 17 insertions(+), 70 deletions(-)
9
2 files changed, 17 insertions(+), 70 deletions(-)
...
...
diff view generated by jsdifflib
1
Provide a simple way to check for float64, float32,
1
Provide a simple way to check for float64, float32,
2
and float16 support, as well as the fpu enabled.
2
and float16 support, as well as the fpu enabled.
3
3
4
Reviewed-by: Peter Maydell <peter.maydell@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/arm/tcg/translate-a64.c | 62 ++++++++++++++++++----------------
7
target/arm/tcg/translate-a64.c | 62 ++++++++++++++++++----------------
7
1 file changed, 32 insertions(+), 30 deletions(-)
8
1 file changed, 32 insertions(+), 30 deletions(-)
8
9
...
...
diff view generated by jsdifflib
1
Provide a simple way to check for float64, float32, and float16
1
Provide a simple way to check for float64, float32, and float16
2
support vs vector width, as well as the fpu enabled.
2
support vs vector width, as well as the fpu enabled.
3
3
4
Reviewed-by: Peter Maydell <peter.maydell@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/arm/tcg/translate-a64.c | 135 +++++++++++++--------------------
7
target/arm/tcg/translate-a64.c | 135 +++++++++++++--------------------
7
1 file changed, 54 insertions(+), 81 deletions(-)
8
1 file changed, 54 insertions(+), 81 deletions(-)
8
9
...
...
diff view generated by jsdifflib
1
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
1
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
---
3
---
3
target/arm/tcg/translate-a64.c | 287 +++++++++++++--------------------
4
target/arm/tcg/translate-a64.c | 283 ++++++++++++---------------------
4
target/arm/tcg/a64.decode | 8 +
5
target/arm/tcg/a64.decode | 8 +
5
2 files changed, 116 insertions(+), 179 deletions(-)
6
2 files changed, 112 insertions(+), 179 deletions(-)
6
7
7
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
8
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
8
index XXXXXXX..XXXXXXX 100644
9
index XXXXXXX..XXXXXXX 100644
9
--- a/target/arm/tcg/translate-a64.c
10
--- a/target/arm/tcg/translate-a64.c
10
+++ b/target/arm/tcg/translate-a64.c
11
+++ b/target/arm/tcg/translate-a64.c
...
...
72
+}
73
+}
73
+
74
+
74
+/* FCMP, FCMPE */
75
+/* FCMP, FCMPE */
75
+static bool trans_FCMP(DisasContext *s, arg_FCMP *a)
76
+static bool trans_FCMP(DisasContext *s, arg_FCMP *a)
76
+{
77
+{
77
+ int check;
78
+ int check = fp_access_check_scalar_hsd(s, a->esz);
78
+
79
+
79
+ if (a->z && a->rm != 0) {
80
+ return false;
81
+ }
82
+ check = fp_access_check_scalar_hsd(s, a->esz);
83
+ if (check <= 0) {
80
+ if (check <= 0) {
84
+ return check == 0;
81
+ return check == 0;
85
+ }
82
+ }
86
+
83
+
87
+ handle_fp_compare(s, a->esz, a->rn, a->rm, a->z, a->e);
84
+ handle_fp_compare(s, a->esz, a->rn, a->rm, a->z, a->e);
...
...
diff view generated by jsdifflib
New patch
1
These opcodes are only supported as vector operations,
2
not as advsimd scalar. Set only_in_vector, and remove
3
the unreachable implementation of scalar fneg.
1
4
5
Reported-by: Peter Maydell <peter.maydell@linaro.org>
6
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
7
---
8
target/arm/tcg/translate-a64.c | 4 +---
9
1 file changed, 1 insertion(+), 3 deletions(-)
10
11
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
12
index XXXXXXX..XXXXXXX 100644
13
--- a/target/arm/tcg/translate-a64.c
14
+++ b/target/arm/tcg/translate-a64.c
15
@@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc_fp16(DisasContext *s, uint32_t insn)
16
break;
17
case 0x2f: /* FABS */
18
case 0x6f: /* FNEG */
19
+ only_in_vector = true;
20
need_fpst = false;
21
break;
22
case 0x7d: /* FRSQRTE */
23
@@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc_fp16(DisasContext *s, uint32_t insn)
24
case 0x7b: /* FCVTZU */
25
gen_helper_advsimd_f16touinth(tcg_res, tcg_op, tcg_fpstatus);
26
break;
27
- case 0x6f: /* FNEG */
28
- tcg_gen_xori_i32(tcg_res, tcg_op, 0x8000);
29
- break;
30
case 0x7d: /* FRSQRTE */
31
gen_helper_rsqrte_f16(tcg_res, tcg_op, tcg_fpstatus);
32
break;
33
--
34
2.43.0
diff view generated by jsdifflib
1
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
1
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
---
2
---
3
target/arm/tcg/translate-a64.c | 104 ++++++++++++++++++++++-----------
3
target/arm/tcg/translate-a64.c | 105 +++++++++++++++++++++++----------
4
target/arm/tcg/a64.decode | 7 +++
4
target/arm/tcg/a64.decode | 7 +++
5
2 files changed, 78 insertions(+), 33 deletions(-)
5
2 files changed, 81 insertions(+), 31 deletions(-)
6
6
7
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
7
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
8
index XXXXXXX..XXXXXXX 100644
8
index XXXXXXX..XXXXXXX 100644
9
--- a/target/arm/tcg/translate-a64.c
9
--- a/target/arm/tcg/translate-a64.c
10
+++ b/target/arm/tcg/translate-a64.c
10
+++ b/target/arm/tcg/translate-a64.c
...
...
159
+ case 0x1: /* FABS */
159
+ case 0x1: /* FABS */
160
+ case 0x2: /* FNEG */
160
+ case 0x2: /* FNEG */
161
g_assert_not_reached();
161
g_assert_not_reached();
162
}
162
}
163
163
164
@@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc_fp16(DisasContext *s, uint32_t insn)
164
@@ -XXX,XX +XXX,XX @@ static void disas_fp_1src(DisasContext *s, uint32_t insn)
165
case 0x7b: /* FCVTZU */
165
goto do_unallocated;
166
gen_helper_advsimd_f16touinth(tcg_res, tcg_op, tcg_fpstatus);
167
break;
168
- case 0x6f: /* FNEG */
169
- tcg_gen_xori_i32(tcg_res, tcg_op, 0x8000);
170
- break;
171
case 0x7d: /* FRSQRTE */
172
gen_helper_rsqrte_f16(tcg_res, tcg_op, tcg_fpstatus);
173
break;
174
default:
175
+ case 0x6f: /* FNEG */
176
g_assert_not_reached();
177
}
166
}
178
167
/* fall through */
168
- case 0x0 ... 0x3:
169
+ case 0x3:
170
case 0x8 ... 0xc:
171
case 0xe ... 0xf:
172
/* 32-to-32 and 64-to-64 ops */
173
@@ -XXX,XX +XXX,XX @@ static void disas_fp_1src(DisasContext *s, uint32_t insn)
174
175
default:
176
do_unallocated:
177
+ case 0x0: /* FMOV */
178
+ case 0x1: /* FABS */
179
+ case 0x2: /* FNEG */
180
unallocated_encoding(s);
181
break;
182
}
179
diff --git a/target/arm/tcg/a64.decode b/target/arm/tcg/a64.decode
183
diff --git a/target/arm/tcg/a64.decode b/target/arm/tcg/a64.decode
180
index XXXXXXX..XXXXXXX 100644
184
index XXXXXXX..XXXXXXX 100644
181
--- a/target/arm/tcg/a64.decode
185
--- a/target/arm/tcg/a64.decode
182
+++ b/target/arm/tcg/a64.decode
186
+++ b/target/arm/tcg/a64.decode
183
@@ -XXX,XX +XXX,XX @@
187
@@ -XXX,XX +XXX,XX @@
...
...
diff view generated by jsdifflib
1
Pass fpstatus not env, like most other fp helpers.
1
Pass fpstatus not env, like most other fp helpers.
2
2
3
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
3
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4
---
5
---
5
target/arm/helper.h | 6 +++---
6
target/arm/helper.h | 6 +++---
6
target/arm/tcg/translate-a64.c | 15 +++++++--------
7
target/arm/tcg/translate-a64.c | 15 +++++++--------
7
target/arm/tcg/translate-vfp.c | 6 +++---
8
target/arm/tcg/translate-vfp.c | 6 +++---
...
...
diff view generated by jsdifflib
1
This function is identical with helper_vfp_sqrth.
1
This function is identical with helper_vfp_sqrth.
2
Replace all uses.
2
Replace all uses.
3
3
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/arm/tcg/helper-a64.h | 1 -
7
target/arm/tcg/helper-a64.h | 1 -
7
target/arm/tcg/helper-a64.c | 11 -----------
8
target/arm/tcg/helper-a64.c | 11 -----------
8
target/arm/tcg/translate-a64.c | 4 ++--
9
target/arm/tcg/translate-a64.c | 4 ++--
...
...
64
break;
65
break;
65
default:
66
default:
66
g_assert_not_reached();
67
g_assert_not_reached();
67
--
68
--
68
2.43.0
69
2.43.0
70
71
diff view generated by jsdifflib
1
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
1
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
---
3
---
3
target/arm/tcg/translate-a64.c | 70 +++++++++++++++++++++++++++++-----
4
target/arm/tcg/translate-a64.c | 72 ++++++++++++++++++++++++++++------
4
target/arm/tcg/a64.decode | 1 +
5
target/arm/tcg/a64.decode | 1 +
5
2 files changed, 61 insertions(+), 10 deletions(-)
6
2 files changed, 62 insertions(+), 11 deletions(-)
6
7
7
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
8
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
8
index XXXXXXX..XXXXXXX 100644
9
index XXXXXXX..XXXXXXX 100644
9
--- a/target/arm/tcg/translate-a64.c
10
--- a/target/arm/tcg/translate-a64.c
10
+++ b/target/arm/tcg/translate-a64.c
11
+++ b/target/arm/tcg/translate-a64.c
...
...
125
case 0x2: /* FNEG */
126
case 0x2: /* FNEG */
126
+ case 0x3: /* FSQRT */
127
+ case 0x3: /* FSQRT */
127
g_assert_not_reached();
128
g_assert_not_reached();
128
}
129
}
129
130
131
@@ -XXX,XX +XXX,XX @@ static void disas_fp_1src(DisasContext *s, uint32_t insn)
132
goto do_unallocated;
133
}
134
/* fall through */
135
- case 0x3:
136
case 0x8 ... 0xc:
137
case 0xe ... 0xf:
138
/* 32-to-32 and 64-to-64 ops */
139
@@ -XXX,XX +XXX,XX @@ static void disas_fp_1src(DisasContext *s, uint32_t insn)
140
case 0x0: /* FMOV */
141
case 0x1: /* FABS */
142
case 0x2: /* FNEG */
143
+ case 0x3: /* FSQRT */
144
unallocated_encoding(s);
145
break;
146
}
130
diff --git a/target/arm/tcg/a64.decode b/target/arm/tcg/a64.decode
147
diff --git a/target/arm/tcg/a64.decode b/target/arm/tcg/a64.decode
131
index XXXXXXX..XXXXXXX 100644
148
index XXXXXXX..XXXXXXX 100644
132
--- a/target/arm/tcg/a64.decode
149
--- a/target/arm/tcg/a64.decode
133
+++ b/target/arm/tcg/a64.decode
150
+++ b/target/arm/tcg/a64.decode
134
@@ -XXX,XX +XXX,XX @@ FMINV_s 0110 1110 10 11000 01111 10 ..... ..... @rr_q1e2
151
@@ -XXX,XX +XXX,XX @@ FMINV_s 0110 1110 10 11000 01111 10 ..... ..... @rr_q1e2
...
...
diff view generated by jsdifflib
1
Remove handle_fp_1src_half as these were the last insns
1
Remove handle_fp_1src_half as these were the last insns
2
decoded by that function.
2
decoded by that function.
3
3
4
Reviewed-by: Peter Maydell <peter.maydell@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/arm/tcg/translate-a64.c | 107 ++++++++++-----------------------
7
target/arm/tcg/translate-a64.c | 117 +++++++++++----------------------
7
target/arm/tcg/a64.decode | 8 +++
8
target/arm/tcg/a64.decode | 8 +++
8
2 files changed, 39 insertions(+), 76 deletions(-)
9
2 files changed, 46 insertions(+), 79 deletions(-)
9
10
10
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
11
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
11
index XXXXXXX..XXXXXXX 100644
12
index XXXXXXX..XXXXXXX 100644
12
--- a/target/arm/tcg/translate-a64.c
13
--- a/target/arm/tcg/translate-a64.c
13
+++ b/target/arm/tcg/translate-a64.c
14
+++ b/target/arm/tcg/translate-a64.c
...
...
103
+ case 0x8: /* FRINTN */
104
+ case 0x8: /* FRINTN */
104
+ case 0x9: /* FRINTP */
105
+ case 0x9: /* FRINTP */
105
+ case 0xa: /* FRINTM */
106
+ case 0xa: /* FRINTM */
106
+ case 0xb: /* FRINTZ */
107
+ case 0xb: /* FRINTZ */
107
+ case 0xc: /* FRINTA */
108
+ case 0xc: /* FRINTA */
109
+ case 0xe: /* FRINTX */
108
+ case 0xf: /* FRINTI */
110
+ case 0xf: /* FRINTI */
109
+ case 0xe: /* FRINTX */
110
g_assert_not_reached();
111
g_assert_not_reached();
111
}
112
}
112
113
113
@@ -XXX,XX +XXX,XX @@ static void handle_fp_1src_double(DisasContext *s, int opcode, int rd, int rn)
114
@@ -XXX,XX +XXX,XX @@ static void handle_fp_1src_double(DisasContext *s, int opcode, int rd, int rn)
114
tcg_res = tcg_temp_new_i64();
115
tcg_res = tcg_temp_new_i64();
...
...
138
+ case 0x8: /* FRINTN */
139
+ case 0x8: /* FRINTN */
139
+ case 0x9: /* FRINTP */
140
+ case 0x9: /* FRINTP */
140
+ case 0xa: /* FRINTM */
141
+ case 0xa: /* FRINTM */
141
+ case 0xb: /* FRINTZ */
142
+ case 0xb: /* FRINTZ */
142
+ case 0xc: /* FRINTA */
143
+ case 0xc: /* FRINTA */
144
+ case 0xe: /* FRINTX */
143
+ case 0xf: /* FRINTI */
145
+ case 0xf: /* FRINTI */
144
+ case 0xe: /* FRINTX */
145
g_assert_not_reached();
146
g_assert_not_reached();
146
}
147
}
147
148
149
@@ -XXX,XX +XXX,XX @@ static void disas_fp_1src(DisasContext *s, uint32_t insn)
150
if (type > 1 || !dc_isar_feature(aa64_frint, s)) {
151
goto do_unallocated;
152
}
153
- /* fall through */
154
- case 0x8 ... 0xc:
155
- case 0xe ... 0xf:
156
/* 32-to-32 and 64-to-64 ops */
157
switch (type) {
158
case 0:
148
@@ -XXX,XX +XXX,XX @@ static void disas_fp_1src(DisasContext *s, uint32_t insn)
159
@@ -XXX,XX +XXX,XX @@ static void disas_fp_1src(DisasContext *s, uint32_t insn)
149
handle_fp_1src_double(s, opcode, rd, rn);
160
handle_fp_1src_double(s, opcode, rd, rn);
150
break;
161
break;
151
case 3:
162
case 3:
152
- if (!dc_isar_feature(aa64_fp16, s)) {
163
- if (!dc_isar_feature(aa64_fp16, s)) {
...
...
159
- handle_fp_1src_half(s, opcode, rd, rn);
170
- handle_fp_1src_half(s, opcode, rd, rn);
160
- break;
171
- break;
161
default:
172
default:
162
goto do_unallocated;
173
goto do_unallocated;
163
}
174
}
175
@@ -XXX,XX +XXX,XX @@ static void disas_fp_1src(DisasContext *s, uint32_t insn)
176
case 0x1: /* FABS */
177
case 0x2: /* FNEG */
178
case 0x3: /* FSQRT */
179
+ case 0x8: /* FRINTN */
180
+ case 0x9: /* FRINTP */
181
+ case 0xa: /* FRINTM */
182
+ case 0xb: /* FRINTZ */
183
+ case 0xc: /* FRINTA */
184
+ case 0xe: /* FRINTX */
185
+ case 0xf: /* FRINTI */
186
unallocated_encoding(s);
187
break;
188
}
164
diff --git a/target/arm/tcg/a64.decode b/target/arm/tcg/a64.decode
189
diff --git a/target/arm/tcg/a64.decode b/target/arm/tcg/a64.decode
165
index XXXXXXX..XXXXXXX 100644
190
index XXXXXXX..XXXXXXX 100644
166
--- a/target/arm/tcg/a64.decode
191
--- a/target/arm/tcg/a64.decode
167
+++ b/target/arm/tcg/a64.decode
192
+++ b/target/arm/tcg/a64.decode
168
@@ -XXX,XX +XXX,XX @@ FABS_s 00011110 .. 1 000001 10000 ..... ..... @rr_hsd
193
@@ -XXX,XX +XXX,XX @@ FABS_s 00011110 .. 1 000001 10000 ..... ..... @rr_hsd
...
...
diff view generated by jsdifflib
1
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
1
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
---
2
---
3
target/arm/tcg/translate-a64.c | 24 ++++++------------------
3
target/arm/tcg/translate-a64.c | 26 +++++++-------------------
4
target/arm/tcg/a64.decode | 3 +++
4
target/arm/tcg/a64.decode | 3 +++
5
2 files changed, 9 insertions(+), 18 deletions(-)
5
2 files changed, 10 insertions(+), 19 deletions(-)
6
6
7
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
7
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
8
index XXXXXXX..XXXXXXX 100644
8
index XXXXXXX..XXXXXXX 100644
9
--- a/target/arm/tcg/translate-a64.c
9
--- a/target/arm/tcg/translate-a64.c
10
+++ b/target/arm/tcg/translate-a64.c
10
+++ b/target/arm/tcg/translate-a64.c
...
...
37
+ case 0x6: /* BFCVT */
37
+ case 0x6: /* BFCVT */
38
case 0x8: /* FRINTN */
38
case 0x8: /* FRINTN */
39
case 0x9: /* FRINTP */
39
case 0x9: /* FRINTP */
40
case 0xa: /* FRINTM */
40
case 0xa: /* FRINTM */
41
@@ -XXX,XX +XXX,XX @@ static void disas_fp_1src(DisasContext *s, uint32_t insn)
41
@@ -XXX,XX +XXX,XX @@ static void disas_fp_1src(DisasContext *s, uint32_t insn)
42
}
42
break;
43
break;
43
44
44
case 0x6:
45
- case 0x6:
45
- switch (type) {
46
- switch (type) {
46
- case 1: /* BFCVT */
47
- case 1: /* BFCVT */
47
- if (!dc_isar_feature(aa64_bf16, s)) {
48
- if (!dc_isar_feature(aa64_bf16, s)) {
48
- goto do_unallocated;
49
- goto do_unallocated;
49
- }
50
- }
...
...
57
- }
58
- }
58
- break;
59
- break;
59
-
60
-
60
default:
61
default:
61
do_unallocated:
62
do_unallocated:
62
unallocated_encoding(s);
63
case 0x0: /* FMOV */
64
case 0x1: /* FABS */
65
case 0x2: /* FNEG */
66
case 0x3: /* FSQRT */
67
+ case 0x6: /* BFCVT */
68
case 0x8: /* FRINTN */
69
case 0x9: /* FRINTP */
70
case 0xa: /* FRINTM */
63
diff --git a/target/arm/tcg/a64.decode b/target/arm/tcg/a64.decode
71
diff --git a/target/arm/tcg/a64.decode b/target/arm/tcg/a64.decode
64
index XXXXXXX..XXXXXXX 100644
72
index XXXXXXX..XXXXXXX 100644
65
--- a/target/arm/tcg/a64.decode
73
--- a/target/arm/tcg/a64.decode
66
+++ b/target/arm/tcg/a64.decode
74
+++ b/target/arm/tcg/a64.decode
67
@@ -XXX,XX +XXX,XX @@
75
@@ -XXX,XX +XXX,XX @@
...
...
74
@rr_hsd ........ ... ..... ...... rn:5 rd:5 &rr_e esz=%esz_hsd
82
@rr_hsd ........ ... ..... ...... rn:5 rd:5 &rr_e esz=%esz_hsd
75
@@ -XXX,XX +XXX,XX @@ FRINTA_s 00011110 .. 1 001100 10000 ..... ..... @rr_hsd
83
@@ -XXX,XX +XXX,XX @@ FRINTA_s 00011110 .. 1 001100 10000 ..... ..... @rr_hsd
76
FRINTX_s 00011110 .. 1 001110 10000 ..... ..... @rr_hsd
84
FRINTX_s 00011110 .. 1 001110 10000 ..... ..... @rr_hsd
77
FRINTI_s 00011110 .. 1 001111 10000 ..... ..... @rr_hsd
85
FRINTI_s 00011110 .. 1 001111 10000 ..... ..... @rr_hsd
78
86
79
+BFCVT_s 00011110 10 1 000110 10000 ..... ..... @rr_s
87
+BFCVT_s 00011110 01 1 000110 10000 ..... ..... @rr_s
80
+
88
+
81
# Floating-point Immediate
89
# Floating-point Immediate
82
90
83
FMOVI_s 0001 1110 .. 1 imm:8 100 00000 rd:5 esz=%esz_hsd
91
FMOVI_s 0001 1110 .. 1 imm:8 100 00000 rd:5 esz=%esz_hsd
84
--
92
--
85
2.43.0
93
2.43.0
diff view generated by jsdifflib
1
Remove handle_fp_1src_single and handle_fp_1src_double as
1
Remove handle_fp_1src_single and handle_fp_1src_double as
2
these were the last insns decoded by those functions.
2
these were the last insns decoded by those functions.
3
3
4
Reviewed-by: Peter Maydell <peter.maydell@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/arm/tcg/translate-a64.c | 150 ++++-----------------------------
7
target/arm/tcg/translate-a64.c | 146 ++++-----------------------------
7
target/arm/tcg/a64.decode | 5 ++
8
target/arm/tcg/a64.decode | 5 ++
8
2 files changed, 21 insertions(+), 134 deletions(-)
9
2 files changed, 22 insertions(+), 129 deletions(-)
9
10
10
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
11
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
11
index XXXXXXX..XXXXXXX 100644
12
index XXXXXXX..XXXXXXX 100644
12
--- a/target/arm/tcg/translate-a64.c
13
--- a/target/arm/tcg/translate-a64.c
13
+++ b/target/arm/tcg/translate-a64.c
14
+++ b/target/arm/tcg/translate-a64.c
...
...
58
- case 0x8: /* FRINTN */
59
- case 0x8: /* FRINTN */
59
- case 0x9: /* FRINTP */
60
- case 0x9: /* FRINTP */
60
- case 0xa: /* FRINTM */
61
- case 0xa: /* FRINTM */
61
- case 0xb: /* FRINTZ */
62
- case 0xb: /* FRINTZ */
62
- case 0xc: /* FRINTA */
63
- case 0xc: /* FRINTA */
64
- case 0xe: /* FRINTX */
63
- case 0xf: /* FRINTI */
65
- case 0xf: /* FRINTI */
64
- case 0xe: /* FRINTX */
65
- g_assert_not_reached();
66
- g_assert_not_reached();
66
- }
67
- }
67
-
68
-
68
- fpst = fpstatus_ptr(FPST_FPCR);
69
- fpst = fpstatus_ptr(FPST_FPCR);
69
- if (rmode >= 0) {
70
- if (rmode >= 0) {
...
...
111
- case 0x8: /* FRINTN */
112
- case 0x8: /* FRINTN */
112
- case 0x9: /* FRINTP */
113
- case 0x9: /* FRINTP */
113
- case 0xa: /* FRINTM */
114
- case 0xa: /* FRINTM */
114
- case 0xb: /* FRINTZ */
115
- case 0xb: /* FRINTZ */
115
- case 0xc: /* FRINTA */
116
- case 0xc: /* FRINTA */
117
- case 0xe: /* FRINTX */
116
- case 0xf: /* FRINTI */
118
- case 0xf: /* FRINTI */
117
- case 0xe: /* FRINTX */
118
- g_assert_not_reached();
119
- g_assert_not_reached();
119
- }
120
- }
120
-
121
-
121
- fpst = fpstatus_ptr(FPST_FPCR);
122
- fpst = fpstatus_ptr(FPST_FPCR);
122
- if (rmode >= 0) {
123
- if (rmode >= 0) {
...
...
146
147
147
- case 0x10 ... 0x13: /* FRINT{32,64}{X,Z} */
148
- case 0x10 ... 0x13: /* FRINT{32,64}{X,Z} */
148
- if (type > 1 || !dc_isar_feature(aa64_frint, s)) {
149
- if (type > 1 || !dc_isar_feature(aa64_frint, s)) {
149
- goto do_unallocated;
150
- goto do_unallocated;
150
- }
151
- }
151
- /* fall through */
152
- case 0x0 ... 0x3:
153
- case 0x8 ... 0xc:
154
- case 0xe ... 0xf:
155
- /* 32-to-32 and 64-to-64 ops */
152
- /* 32-to-32 and 64-to-64 ops */
156
- switch (type) {
153
- switch (type) {
157
- case 0:
154
- case 0:
158
- if (!fp_access_check(s)) {
155
- if (!fp_access_check(s)) {
159
- return;
156
- return;
...
...
170
- default:
167
- default:
171
- goto do_unallocated;
168
- goto do_unallocated;
172
- }
169
- }
173
- break;
170
- break;
174
-
171
-
175
- case 0x6:
176
default:
172
default:
177
do_unallocated:
173
do_unallocated:
174
case 0x0: /* FMOV */
175
@@ -XXX,XX +XXX,XX @@ static void disas_fp_1src(DisasContext *s, uint32_t insn)
176
case 0xc: /* FRINTA */
177
case 0xe: /* FRINTX */
178
case 0xf: /* FRINTI */
179
+ case 0x10 ... 0x13: /* FRINT{32,64}{X,Z} */
178
unallocated_encoding(s);
180
unallocated_encoding(s);
181
break;
182
}
179
diff --git a/target/arm/tcg/a64.decode b/target/arm/tcg/a64.decode
183
diff --git a/target/arm/tcg/a64.decode b/target/arm/tcg/a64.decode
180
index XXXXXXX..XXXXXXX 100644
184
index XXXXXXX..XXXXXXX 100644
181
--- a/target/arm/tcg/a64.decode
185
--- a/target/arm/tcg/a64.decode
182
+++ b/target/arm/tcg/a64.decode
186
+++ b/target/arm/tcg/a64.decode
183
@@ -XXX,XX +XXX,XX @@ FRINTI_s 00011110 .. 1 001111 10000 ..... ..... @rr_hsd
187
@@ -XXX,XX +XXX,XX @@ FRINTI_s 00011110 .. 1 001111 10000 ..... ..... @rr_hsd
184
188
185
BFCVT_s 00011110 10 1 000110 10000 ..... ..... @rr_s
189
BFCVT_s 00011110 01 1 000110 10000 ..... ..... @rr_s
186
190
187
+FRINT32Z_s 00011110 0. 1 010000 10000 ..... ..... @rr_sd
191
+FRINT32Z_s 00011110 0. 1 010000 10000 ..... ..... @rr_sd
188
+FRINT32X_s 00011110 0. 1 010001 10000 ..... ..... @rr_sd
192
+FRINT32X_s 00011110 0. 1 010001 10000 ..... ..... @rr_sd
189
+FRINT64Z_s 00011110 0. 1 010010 10000 ..... ..... @rr_sd
193
+FRINT64Z_s 00011110 0. 1 010010 10000 ..... ..... @rr_sd
190
+FRINT64X_s 00011110 0. 1 010011 10000 ..... ..... @rr_sd
194
+FRINT64X_s 00011110 0. 1 010011 10000 ..... ..... @rr_sd
191
+
195
+
192
# Floating-point Immediate
196
# Floating-point Immediate
193
197
194
FMOVI_s 0001 1110 .. 1 imm:8 100 00000 rd:5 esz=%esz_hsd
198
FMOVI_s 0001 1110 .. 1 imm:8 100 00000 rd:5 esz=%esz_hsd
195
--
199
--
196
2.43.0
200
2.43.0
diff view generated by jsdifflib
1
Remove handle_fp_fcvt and disas_fp_1src as these were
1
Remove handle_fp_fcvt and disas_fp_1src as these were
2
the last insns decoded by those functions.
2
the last insns decoded by those functions.
3
3
4
Reviewed-by: Peter Maydell <peter.maydell@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/arm/tcg/translate-a64.c | 159 ++++++++++++++-------------------
7
target/arm/tcg/translate-a64.c | 172 +++++++++++++--------------------
7
target/arm/tcg/a64.decode | 7 ++
8
target/arm/tcg/a64.decode | 7 ++
8
2 files changed, 74 insertions(+), 92 deletions(-)
9
2 files changed, 74 insertions(+), 105 deletions(-)
9
10
10
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
11
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
11
index XXXXXXX..XXXXXXX 100644
12
index XXXXXXX..XXXXXXX 100644
12
--- a/target/arm/tcg/translate-a64.c
13
--- a/target/arm/tcg/translate-a64.c
13
+++ b/target/arm/tcg/translate-a64.c
14
+++ b/target/arm/tcg/translate-a64.c
...
...
140
+ return true;
141
+ return true;
141
+}
142
+}
142
143
143
- default:
144
- default:
144
- do_unallocated:
145
- do_unallocated:
146
- case 0x0: /* FMOV */
147
- case 0x1: /* FABS */
148
- case 0x2: /* FNEG */
149
- case 0x3: /* FSQRT */
150
- case 0x6: /* BFCVT */
151
- case 0x8: /* FRINTN */
152
- case 0x9: /* FRINTP */
153
- case 0xa: /* FRINTM */
154
- case 0xb: /* FRINTZ */
155
- case 0xc: /* FRINTA */
156
- case 0xe: /* FRINTX */
157
- case 0xf: /* FRINTI */
158
- case 0x10 ... 0x13: /* FRINT{32,64}{X,Z} */
145
- unallocated_encoding(s);
159
- unallocated_encoding(s);
146
- break;
160
- break;
147
+static bool trans_FCVT_s_hd(DisasContext *s, arg_rr *a)
161
+static bool trans_FCVT_s_hd(DisasContext *s, arg_rr *a)
148
+{
162
+{
149
+ if (fp_access_check(s)) {
163
+ if (fp_access_check(s)) {
...
...
diff view generated by jsdifflib
1
This includes SCVTF, UCVTF, FCVT{N,P,M,Z,A}{S,U}.
1
This includes SCVTF, UCVTF, FCVT{N,P,M,Z,A}{S,U}.
2
Remove disas_fp_fixed_conv as those were the last insns
2
Remove disas_fp_fixed_conv as those were the last insns
3
decoded by that function.
3
decoded by that function.
4
4
5
Reviewed-by: Peter Maydell <peter.maydell@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/arm/tcg/translate-a64.c | 391 ++++++++++++++-------------------
8
target/arm/tcg/translate-a64.c | 391 ++++++++++++++-------------------
8
target/arm/tcg/a64.decode | 40 ++++
9
target/arm/tcg/a64.decode | 40 ++++
9
2 files changed, 209 insertions(+), 222 deletions(-)
10
2 files changed, 209 insertions(+), 222 deletions(-)
...
...
diff view generated by jsdifflib
1
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
1
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
---
3
---
3
target/arm/tcg/translate-a64.c | 41 +++++++++++++++++-----------------
4
target/arm/tcg/translate-a64.c | 41 +++++++++++++++++-----------------
4
target/arm/tcg/a64.decode | 2 ++
5
target/arm/tcg/a64.decode | 2 ++
5
2 files changed, 22 insertions(+), 21 deletions(-)
6
2 files changed, 22 insertions(+), 21 deletions(-)
...
...
diff view generated by jsdifflib
1
Remove disas_fp_int_conv and disas_data_proc_fp as these
1
Remove disas_fp_int_conv and disas_data_proc_fp as these
2
were the last insns decoded by those functions.
2
were the last insns decoded by those functions.
3
3
4
Reviewed-by: Peter Maydell <peter.maydell@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/arm/tcg/translate-a64.c | 232 ++++++++++-----------------------
7
target/arm/tcg/translate-a64.c | 232 ++++++++++-----------------------
7
target/arm/tcg/a64.decode | 14 ++
8
target/arm/tcg/a64.decode | 14 ++
8
2 files changed, 86 insertions(+), 160 deletions(-)
9
2 files changed, 86 insertions(+), 160 deletions(-)
...
...
diff view generated by jsdifflib
1
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
1
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
---
3
---
3
target/arm/tcg/translate-a64.c | 123 +++++++++++++++++++++------------
4
target/arm/tcg/translate-a64.c | 123 +++++++++++++++++++++------------
4
target/arm/tcg/a64.decode | 11 +++
5
target/arm/tcg/a64.decode | 11 +++
5
2 files changed, 89 insertions(+), 45 deletions(-)
6
2 files changed, 89 insertions(+), 45 deletions(-)
...
...
diff view generated by jsdifflib
1
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
1
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
---
3
---
3
target/arm/tcg/translate-a64.c | 46 +++++++++++++++++++++++-----------
4
target/arm/tcg/translate-a64.c | 46 +++++++++++++++++++++++-----------
4
target/arm/tcg/a64.decode | 4 +++
5
target/arm/tcg/a64.decode | 4 +++
5
2 files changed, 35 insertions(+), 15 deletions(-)
6
2 files changed, 35 insertions(+), 15 deletions(-)
...
...
diff view generated by jsdifflib
1
Add gvec interfaces for CLS and CLZ operations.
1
Add gvec interfaces for CLS and CLZ operations.
2
2
3
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
3
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4
---
5
---
5
target/arm/tcg/translate.h | 5 +++++
6
target/arm/tcg/translate.h | 5 +++++
6
target/arm/tcg/gengvec.c | 35 +++++++++++++++++++++++++++++++++
7
target/arm/tcg/gengvec.c | 35 +++++++++++++++++++++++++++++++++
7
target/arm/tcg/translate-a64.c | 29 +++++++--------------------
8
target/arm/tcg/translate-a64.c | 29 +++++++--------------------
...
...
168
static bool trans_VCNT(DisasContext *s, arg_2misc *a)
169
static bool trans_VCNT(DisasContext *s, arg_2misc *a)
169
{
170
{
170
if (a->size != 0) {
171
if (a->size != 0) {
171
--
172
--
172
2.43.0
173
2.43.0
174
175
diff view generated by jsdifflib
1
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
1
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
---
3
---
3
target/arm/tcg/translate-a64.c | 37 ++++++++++++++++------------------
4
target/arm/tcg/translate-a64.c | 37 ++++++++++++++++------------------
4
target/arm/tcg/a64.decode | 2 ++
5
target/arm/tcg/a64.decode | 2 ++
5
2 files changed, 19 insertions(+), 20 deletions(-)
6
2 files changed, 19 insertions(+), 20 deletions(-)
...
...
diff view generated by jsdifflib
1
Add gvec interfaces for CNT and RBIT operations.
1
Add gvec interfaces for CNT and RBIT operations.
2
Use ctpop8 for CNT and revbit+bswap for RBIT.
2
Use ctpop8 for CNT and revbit+bswap for RBIT.
3
3
4
Reviewed-by: Peter Maydell <peter.maydell@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/arm/helper.h | 4 ++--
7
target/arm/helper.h | 4 ++--
7
target/arm/tcg/translate.h | 4 ++++
8
target/arm/tcg/translate.h | 4 ++++
8
target/arm/tcg/gengvec.c | 16 ++++++++++++++++
9
target/arm/tcg/gengvec.c | 16 ++++++++++++++++
...
...
diff view generated by jsdifflib
1
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
1
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
---
3
---
3
target/arm/tcg/translate-a64.c | 34 ++++++----------------------------
4
target/arm/tcg/translate-a64.c | 34 ++++++----------------------------
4
target/arm/tcg/a64.decode | 4 ++++
5
target/arm/tcg/a64.decode | 4 ++++
5
2 files changed, 10 insertions(+), 28 deletions(-)
6
2 files changed, 10 insertions(+), 28 deletions(-)
...
...
diff view generated by jsdifflib
1
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
1
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
---
3
---
3
target/arm/tcg/translate-a64.c | 94 +++++++++++-----------------------
4
target/arm/tcg/translate-a64.c | 94 +++++++++++-----------------------
4
target/arm/tcg/a64.decode | 10 ++++
5
target/arm/tcg/a64.decode | 10 ++++
5
2 files changed, 40 insertions(+), 64 deletions(-)
6
2 files changed, 40 insertions(+), 64 deletions(-)
...
...
diff view generated by jsdifflib
1
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
1
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
---
3
---
3
target/arm/tcg/translate.h | 6 +++
4
target/arm/tcg/translate.h | 6 +++
4
target/arm/tcg/gengvec.c | 58 ++++++++++++++++++++++
5
target/arm/tcg/gengvec.c | 58 ++++++++++++++++++++++
5
target/arm/tcg/translate-neon.c | 88 +++++++--------------------------
6
target/arm/tcg/translate-neon.c | 88 +++++++--------------------------
...
...
diff view generated by jsdifflib
...
...
117
if (size == 3) {
117
if (size == 3) {
118
@@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc(DisasContext *s, uint32_t insn)
118
@@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc(DisasContext *s, uint32_t insn)
119
break;
119
break;
120
}
120
}
121
default:
121
default:
122
+ case 0x0: /* REV64 */
122
+ case 0x0: /* REV64, REV32 */
123
+ case 0x1: /* REV16, REV32 */
123
+ case 0x1: /* REV16 */
124
case 0x3: /* SUQADD, USQADD */
124
case 0x3: /* SUQADD, USQADD */
125
case 0x4: /* CLS, CLZ */
125
case 0x4: /* CLS, CLZ */
126
case 0x5: /* CNT, NOT, RBIT */
126
case 0x5: /* CNT, NOT, RBIT */
127
diff --git a/target/arm/tcg/a64.decode b/target/arm/tcg/a64.decode
127
diff --git a/target/arm/tcg/a64.decode b/target/arm/tcg/a64.decode
128
index XXXXXXX..XXXXXXX 100644
128
index XXXXXXX..XXXXXXX 100644
...
...
140
CMEQ0_v 0.00 1110 ..1 00000 10011 0 ..... ..... @qrr_e
140
CMEQ0_v 0.00 1110 ..1 00000 10011 0 ..... ..... @qrr_e
141
CMLE0_v 0.10 1110 ..1 00000 10011 0 ..... ..... @qrr_e
141
CMLE0_v 0.10 1110 ..1 00000 10011 0 ..... ..... @qrr_e
142
CMLT0_v 0.00 1110 ..1 00000 10101 0 ..... ..... @qrr_e
142
CMLT0_v 0.00 1110 ..1 00000 10101 0 ..... ..... @qrr_e
143
+
143
+
144
+REV16_v 0.00 1110 001 00000 00011 0 ..... ..... @qrr_b
144
+REV16_v 0.00 1110 001 00000 00011 0 ..... ..... @qrr_b
145
+REV32_v 0.10 1110 0.1 00000 00011 0 ..... ..... @qrr_bh
145
+REV32_v 0.10 1110 0.1 00000 00001 0 ..... ..... @qrr_bh
146
+REV64_v 0.00 1110 ..1 00000 00001 0 ..... ..... @qrr_e
146
+REV64_v 0.00 1110 ..1 00000 00001 0 ..... ..... @qrr_e
147
--
147
--
148
2.43.0
148
2.43.0
diff view generated by jsdifflib
1
Move from helper-a64.c to neon_helper.c so that these
1
Move from helper-a64.c to neon_helper.c so that these
2
functions are available for arm32 code as well.
2
functions are available for arm32 code as well.
3
3
4
Reviewed-by: Peter Maydell <peter.maydell@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/arm/helper.h | 2 ++
7
target/arm/helper.h | 2 ++
7
target/arm/tcg/helper-a64.h | 2 --
8
target/arm/tcg/helper-a64.h | 2 --
8
target/arm/tcg/helper-a64.c | 43 ------------------------------------
9
target/arm/tcg/helper-a64.c | 43 ------------------------------------
...
...
diff view generated by jsdifflib
1
Pairwise addition with and without accumulation.
1
Pairwise addition with and without accumulation.
2
2
3
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
3
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4
---
5
---
5
target/arm/helper.h | 2 -
6
target/arm/helper.h | 2 -
6
target/arm/tcg/translate.h | 9 ++
7
target/arm/tcg/translate.h | 9 ++
7
target/arm/tcg/gengvec.c | 230 ++++++++++++++++++++++++++++++++
8
target/arm/tcg/gengvec.c | 230 ++++++++++++++++++++++++++++++++
...
...
diff view generated by jsdifflib
1
This includes SADDLP, UADDLP, SADALP, UADALP.
1
This includes SADDLP, UADDLP, SADALP, UADALP.
2
2
3
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
3
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4
---
5
---
5
target/arm/tcg/helper-a64.h | 2 -
6
target/arm/tcg/helper-a64.h | 2 -
6
target/arm/tcg/helper-a64.c | 18 --------
7
target/arm/tcg/helper-a64.c | 18 --------
7
target/arm/tcg/translate-a64.c | 84 +++-------------------------------
8
target/arm/tcg/translate-a64.c | 84 +++-------------------------------
...
...
157
case 0x13: /* SHLL, SHLL2 */
158
case 0x13: /* SHLL, SHLL2 */
158
if (u == 0 || size == 3) {
159
if (u == 0 || size == 3) {
159
unallocated_encoding(s);
160
unallocated_encoding(s);
160
@@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc(DisasContext *s, uint32_t insn)
161
@@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc(DisasContext *s, uint32_t insn)
161
default:
162
default:
162
case 0x0: /* REV64 */
163
case 0x0: /* REV64, REV32 */
163
case 0x1: /* REV16, REV32 */
164
case 0x1: /* REV16 */
164
+ case 0x2: /* SADDLP, UADDLP */
165
+ case 0x2: /* SADDLP, UADDLP */
165
case 0x3: /* SUQADD, USQADD */
166
case 0x3: /* SUQADD, USQADD */
166
case 0x4: /* CLS, CLZ */
167
case 0x4: /* CLS, CLZ */
167
case 0x5: /* CNT, NOT, RBIT */
168
case 0x5: /* CNT, NOT, RBIT */
168
+ case 0x6: /* SADALP, UADALP */
169
+ case 0x6: /* SADALP, UADALP */
...
...
173
index XXXXXXX..XXXXXXX 100644
174
index XXXXXXX..XXXXXXX 100644
174
--- a/target/arm/tcg/a64.decode
175
--- a/target/arm/tcg/a64.decode
175
+++ b/target/arm/tcg/a64.decode
176
+++ b/target/arm/tcg/a64.decode
176
@@ -XXX,XX +XXX,XX @@ CMLT0_v 0.00 1110 ..1 00000 10101 0 ..... ..... @qrr_e
177
@@ -XXX,XX +XXX,XX @@ CMLT0_v 0.00 1110 ..1 00000 10101 0 ..... ..... @qrr_e
177
REV16_v 0.00 1110 001 00000 00011 0 ..... ..... @qrr_b
178
REV16_v 0.00 1110 001 00000 00011 0 ..... ..... @qrr_b
178
REV32_v 0.10 1110 0.1 00000 00011 0 ..... ..... @qrr_bh
179
REV32_v 0.10 1110 0.1 00000 00001 0 ..... ..... @qrr_bh
179
REV64_v 0.00 1110 ..1 00000 00001 0 ..... ..... @qrr_e
180
REV64_v 0.00 1110 ..1 00000 00001 0 ..... ..... @qrr_e
180
+
181
+
181
+SADDLP_v 0.00 1110 ..1 00000 00101 0 ..... ..... @qrr_e
182
+SADDLP_v 0.00 1110 ..1 00000 00101 0 ..... ..... @qrr_e
182
+UADDLP_v 0.10 1110 ..1 00000 00101 0 ..... ..... @qrr_e
183
+UADDLP_v 0.10 1110 ..1 00000 00101 0 ..... ..... @qrr_e
183
+SADALP_v 0.00 1110 ..1 00000 01101 0 ..... ..... @qrr_e
184
+SADALP_v 0.00 1110 ..1 00000 01101 0 ..... ..... @qrr_e
184
+UADALP_v 0.10 1110 ..1 00000 01101 0 ..... ..... @qrr_e
185
+UADALP_v 0.10 1110 ..1 00000 01101 0 ..... ..... @qrr_e
185
--
186
--
186
2.43.0
187
2.43.0
diff view generated by jsdifflib
1
These have generic equivalents: tcg_gen_vec_{add,sub}{16,32}_i64.
1
These have generic equivalents: tcg_gen_vec_{add,sub}{16,32}_i64.
2
2
3
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
3
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4
---
5
---
5
target/arm/helper.h | 4 ----
6
target/arm/helper.h | 4 ----
6
target/arm/tcg/neon_helper.c | 36 ---------------------------------
7
target/arm/tcg/neon_helper.c | 36 ---------------------------------
7
target/arm/tcg/translate-neon.c | 22 ++++++++++----------
8
target/arm/tcg/translate-neon.c | 22 ++++++++++----------
...
...
diff view generated by jsdifflib
1
In a couple of places, clearing the entire vector before storing one
1
In a couple of places, clearing the entire vector before storing one
2
element is the easiest solution. Wrap that into a helper function.
2
element is the easiest solution. Wrap that into a helper function.
3
3
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/arm/tcg/translate-a64.c | 21 ++++++++++++---------
7
target/arm/tcg/translate-a64.c | 21 ++++++++++++---------
7
1 file changed, 12 insertions(+), 9 deletions(-)
8
1 file changed, 12 insertions(+), 9 deletions(-)
8
9
...
...
66
write_vec_element(s, t0, a->rd, 0, a->esz + 1);
67
write_vec_element(s, t0, a->rd, 0, a->esz + 1);
67
}
68
}
68
return true;
69
return true;
69
--
70
--
70
2.43.0
71
2.43.0
72
73
diff view generated by jsdifflib
1
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
1
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
---
3
---
3
target/arm/tcg/translate-a64.c | 153 ++++++++++++++++++++-------------
4
target/arm/tcg/translate-a64.c | 153 ++++++++++++++++++++-------------
4
target/arm/tcg/a64.decode | 9 ++
5
target/arm/tcg/a64.decode | 9 ++
5
2 files changed, 102 insertions(+), 60 deletions(-)
6
2 files changed, 102 insertions(+), 60 deletions(-)
...
...
diff view generated by jsdifflib
1
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
1
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
---
3
---
3
target/arm/tcg/translate-a64.c | 89 ++++++++++++++++++----------------
4
target/arm/tcg/translate-a64.c | 89 ++++++++++++++++++----------------
4
target/arm/tcg/a64.decode | 5 ++
5
target/arm/tcg/a64.decode | 5 ++
5
2 files changed, 52 insertions(+), 42 deletions(-)
6
2 files changed, 52 insertions(+), 42 deletions(-)
...
...
diff view generated by jsdifflib
1
Remove handle_2misc_narrow as this was the last insn decoded
1
Remove handle_2misc_narrow as this was the last insn decoded
2
by that function.
2
by that function.
3
3
4
Reviewed-by: Peter Maydell <peter.maydell@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/arm/tcg/translate-a64.c | 101 +++++++--------------------------
7
target/arm/tcg/translate-a64.c | 101 +++++++--------------------------
7
target/arm/tcg/a64.decode | 4 ++
8
target/arm/tcg/a64.decode | 4 ++
8
2 files changed, 24 insertions(+), 81 deletions(-)
9
2 files changed, 24 insertions(+), 81 deletions(-)
...
...
diff view generated by jsdifflib
1
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
1
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
---
3
---
3
target/arm/tcg/translate-a64.c | 75 +++++++++++++++++-----------------
4
target/arm/tcg/translate-a64.c | 75 +++++++++++++++++-----------------
4
target/arm/tcg/a64.decode | 2 +
5
target/arm/tcg/a64.decode | 2 +
5
2 files changed, 40 insertions(+), 37 deletions(-)
6
2 files changed, 40 insertions(+), 37 deletions(-)
...
...
diff view generated by jsdifflib
New patch
1
Move the current implementation out of translate-neon.c,
2
and extend to handle all element sizes.
1
3
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
5
---
6
target/arm/tcg/translate.h | 6 ++++++
7
target/arm/tcg/gengvec.c | 14 ++++++++++++++
8
target/arm/tcg/translate-neon.c | 20 ++------------------
9
3 files changed, 22 insertions(+), 18 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 @@ void gen_gvec_uaddlp(unsigned vece, uint32_t rd_ofs, uint32_t rn_ofs,
16
void gen_gvec_uadalp(unsigned vece, uint32_t rd_ofs, uint32_t rn_ofs,
17
uint32_t opr_sz, uint32_t max_sz);
18
19
+/* These exclusively manipulate the sign bit. */
20
+void gen_gvec_fabs(unsigned vece, uint32_t dofs, uint32_t aofs,
21
+ uint32_t oprsz, uint32_t maxsz);
22
+void gen_gvec_fneg(unsigned vece, uint32_t dofs, uint32_t aofs,
23
+ uint32_t oprsz, uint32_t maxsz);
24
+
25
/*
26
* Forward to the isar_feature_* tests given a DisasContext pointer.
27
*/
28
diff --git a/target/arm/tcg/gengvec.c b/target/arm/tcg/gengvec.c
29
index XXXXXXX..XXXXXXX 100644
30
--- a/target/arm/tcg/gengvec.c
31
+++ b/target/arm/tcg/gengvec.c
32
@@ -XXX,XX +XXX,XX @@ void gen_gvec_uadalp(unsigned vece, uint32_t rd_ofs, uint32_t rn_ofs,
33
assert(vece <= MO_32);
34
tcg_gen_gvec_2(rd_ofs, rn_ofs, opr_sz, max_sz, &g[vece]);
35
}
36
+
37
+void gen_gvec_fabs(unsigned vece, uint32_t dofs, uint32_t aofs,
38
+ uint32_t oprsz, uint32_t maxsz)
39
+{
40
+ uint64_t s_bit = 1ull << ((8 << vece) - 1);
41
+ tcg_gen_gvec_andi(vece, dofs, aofs, s_bit - 1, oprsz, maxsz);
42
+}
43
+
44
+void gen_gvec_fneg(unsigned vece, uint32_t dofs, uint32_t aofs,
45
+ uint32_t oprsz, uint32_t maxsz)
46
+{
47
+ uint64_t s_bit = 1ull << ((8 << vece) - 1);
48
+ tcg_gen_gvec_xori(vece, dofs, aofs, s_bit, oprsz, maxsz);
49
+}
50
diff --git a/target/arm/tcg/translate-neon.c b/target/arm/tcg/translate-neon.c
51
index XXXXXXX..XXXXXXX 100644
52
--- a/target/arm/tcg/translate-neon.c
53
+++ b/target/arm/tcg/translate-neon.c
54
@@ -XXX,XX +XXX,XX @@ static bool do_2misc(DisasContext *s, arg_2misc *a, NeonGenOneOpFn *fn)
55
return true;
56
}
57
58
-static void gen_VABS_F(unsigned vece, uint32_t rd_ofs, uint32_t rm_ofs,
59
- uint32_t oprsz, uint32_t maxsz)
60
-{
61
- tcg_gen_gvec_andi(vece, rd_ofs, rm_ofs,
62
- vece == MO_16 ? 0x7fff : 0x7fffffff,
63
- oprsz, maxsz);
64
-}
65
-
66
static bool trans_VABS_F(DisasContext *s, arg_2misc *a)
67
{
68
if (a->size == MO_16) {
69
@@ -XXX,XX +XXX,XX @@ static bool trans_VABS_F(DisasContext *s, arg_2misc *a)
70
} else if (a->size != MO_32) {
71
return false;
72
}
73
- return do_2misc_vec(s, a, gen_VABS_F);
74
-}
75
-
76
-static void gen_VNEG_F(unsigned vece, uint32_t rd_ofs, uint32_t rm_ofs,
77
- uint32_t oprsz, uint32_t maxsz)
78
-{
79
- tcg_gen_gvec_xori(vece, rd_ofs, rm_ofs,
80
- vece == MO_16 ? 0x8000 : 0x80000000,
81
- oprsz, maxsz);
82
+ return do_2misc_vec(s, a, gen_gvec_fabs);
83
}
84
85
static bool trans_VNEG_F(DisasContext *s, arg_2misc *a)
86
@@ -XXX,XX +XXX,XX @@ static bool trans_VNEG_F(DisasContext *s, arg_2misc *a)
87
} else if (a->size != MO_32) {
88
return false;
89
}
90
- return do_2misc_vec(s, a, gen_VNEG_F);
91
+ return do_2misc_vec(s, a, gen_gvec_fneg);
92
}
93
94
static bool trans_VRECPE(DisasContext *s, arg_2misc *a)
95
--
96
2.43.0
diff view generated by jsdifflib
1
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
1
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
---
3
---
3
target/arm/tcg/translate-a64.c | 61 ++++++++++++++++++----------------
4
target/arm/tcg/translate-a64.c | 54 +++++++++++++++-------------------
4
target/arm/tcg/a64.decode | 7 ++++
5
target/arm/tcg/a64.decode | 7 +++++
5
2 files changed, 39 insertions(+), 29 deletions(-)
6
2 files changed, 31 insertions(+), 30 deletions(-)
6
7
7
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
8
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
8
index XXXXXXX..XXXXXXX 100644
9
index XXXXXXX..XXXXXXX 100644
9
--- a/target/arm/tcg/translate-a64.c
10
--- a/target/arm/tcg/translate-a64.c
10
+++ b/target/arm/tcg/translate-a64.c
11
+++ b/target/arm/tcg/translate-a64.c
11
@@ -XXX,XX +XXX,XX @@ static bool trans_SHLL_v(DisasContext *s, arg_qrr_e *a)
12
@@ -XXX,XX +XXX,XX @@ static bool trans_SHLL_v(DisasContext *s, arg_qrr_e *a)
12
return true;
13
return true;
13
}
14
}
14
15
15
+static bool do_fabs_fneg_v(DisasContext *s, arg_qrr_e *a, bool neg)
16
+static bool do_fabs_fneg_v(DisasContext *s, arg_qrr_e *a, GVecGen2Fn *fn)
16
+{
17
+{
17
+ int check = fp_access_check_vector_hsd(s, a->q, a->esz);
18
+ int check = fp_access_check_vector_hsd(s, a->q, a->esz);
18
+ uint64_t sign;
19
+
19
+
20
+ if (check <= 0) {
20
+ if (check <= 0) {
21
+ return check == 0;
21
+ return check == 0;
22
+ }
22
+ }
23
+
23
+
24
+ sign = 1ull << ((8 << a->esz) - 1);
24
+ gen_gvec_fn2(s, a->q, a->rd, a->rn, fn, a->esz);
25
+ if (neg) {
26
+ gen_gvec_fn2i(s, a->q, a->rd, a->rn, sign,
27
+ tcg_gen_gvec_xori, a->esz);
28
+ } else {
29
+ gen_gvec_fn2i(s, a->q, a->rd, a->rn, sign - 1,
30
+ tcg_gen_gvec_andi, a->esz);
31
+ }
32
+ return true;
25
+ return true;
33
+}
26
+}
34
+
27
+
35
+TRANS(FABS_v, do_fabs_fneg_v, a, false)
28
+TRANS(FABS_v, do_fabs_fneg_v, a, gen_gvec_fabs)
36
+TRANS(FNEG_v, do_fabs_fneg_v, a, true)
29
+TRANS(FNEG_v, do_fabs_fneg_v, a, gen_gvec_fneg)
37
30
38
/* Common vector code for handling integer to FP conversion */
31
/* Common vector code for handling integer to FP conversion */
39
static void handle_simd_intfp_conv(DisasContext *s, int rd, int rn,
32
static void handle_simd_intfp_conv(DisasContext *s, int rd, int rn,
40
@@ -XXX,XX +XXX,XX @@ static void handle_2misc_64(DisasContext *s, int opcode, bool u,
33
@@ -XXX,XX +XXX,XX @@ static void handle_2misc_64(DisasContext *s, int opcode, bool u,
41
* requires them.
34
* requires them.
...
...
108
case 0x7b: /* FCVTZU */
101
case 0x7b: /* FCVTZU */
109
rmode = FPROUNDING_ZERO;
102
rmode = FPROUNDING_ZERO;
110
break;
103
break;
111
- case 0x2f: /* FABS */
104
- case 0x2f: /* FABS */
112
- case 0x6f: /* FNEG */
105
- case 0x6f: /* FNEG */
106
- only_in_vector = true;
113
- need_fpst = false;
107
- need_fpst = false;
114
- break;
108
- break;
115
case 0x7d: /* FRSQRTE */
109
case 0x7d: /* FRSQRTE */
116
case 0x7f: /* FSQRT (vector) */
110
case 0x7f: /* FSQRT (vector) */
117
break;
111
break;
...
...
diff view generated by jsdifflib
1
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
1
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
---
3
---
3
target/arm/tcg/translate-a64.c | 67 +++++++++++++++++++++++++---------
4
target/arm/tcg/translate-a64.c | 67 +++++++++++++++++++++++++---------
4
target/arm/tcg/a64.decode | 3 ++
5
target/arm/tcg/a64.decode | 3 ++
5
2 files changed, 53 insertions(+), 17 deletions(-)
6
2 files changed, 53 insertions(+), 17 deletions(-)
6
7
7
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
8
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
8
index XXXXXXX..XXXXXXX 100644
9
index XXXXXXX..XXXXXXX 100644
9
--- a/target/arm/tcg/translate-a64.c
10
--- a/target/arm/tcg/translate-a64.c
10
+++ b/target/arm/tcg/translate-a64.c
11
+++ b/target/arm/tcg/translate-a64.c
11
@@ -XXX,XX +XXX,XX @@ static bool do_fabs_fneg_v(DisasContext *s, arg_qrr_e *a, bool neg)
12
@@ -XXX,XX +XXX,XX @@ static bool do_fabs_fneg_v(DisasContext *s, arg_qrr_e *a, GVecGen2Fn *fn)
12
TRANS(FABS_v, do_fabs_fneg_v, a, false)
13
TRANS(FABS_v, do_fabs_fneg_v, a, gen_gvec_fabs)
13
TRANS(FNEG_v, do_fabs_fneg_v, a, true)
14
TRANS(FNEG_v, do_fabs_fneg_v, a, gen_gvec_fneg)
14
15
15
+static bool do_fp1_vector(DisasContext *s, arg_qrr_e *a,
16
+static bool do_fp1_vector(DisasContext *s, arg_qrr_e *a,
16
+ const FPScalar1 *f, int rmode)
17
+ const FPScalar1 *f, int rmode)
17
+{
18
+{
18
+ TCGv_i32 tcg_rmode = NULL;
19
+ TCGv_i32 tcg_rmode = NULL;
...
...
diff view generated by jsdifflib
1
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
1
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
---
3
---
3
target/arm/tcg/translate-a64.c | 176 ++++++++++++---------------------
4
target/arm/tcg/translate-a64.c | 176 ++++++++++++---------------------
4
target/arm/tcg/a64.decode | 26 +++++
5
target/arm/tcg/a64.decode | 26 +++++
5
2 files changed, 88 insertions(+), 114 deletions(-)
6
2 files changed, 88 insertions(+), 114 deletions(-)
...
...
diff view generated by jsdifflib
1
Arm silliness with naming, the scalar insns described
1
Arm silliness with naming, the scalar insns described
2
as part of the vector instructions, as separate from
2
as part of the vector instructions, as separate from
3
the "regular" scalar insns which output to general registers.
3
the "regular" scalar insns which output to general registers.
4
4
5
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
5
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
6
---
6
---
7
target/arm/tcg/translate-a64.c | 135 ++++++++++++++-------------------
7
target/arm/tcg/translate-a64.c | 133 ++++++++++++++-------------------
8
target/arm/tcg/a64.decode | 30 ++++++++
8
target/arm/tcg/a64.decode | 30 ++++++++
9
2 files changed, 87 insertions(+), 78 deletions(-)
9
2 files changed, 86 insertions(+), 77 deletions(-)
10
10
11
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
11
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
12
index XXXXXXX..XXXXXXX 100644
12
index XXXXXXX..XXXXXXX 100644
13
--- a/target/arm/tcg/translate-a64.c
13
--- a/target/arm/tcg/translate-a64.c
14
+++ b/target/arm/tcg/translate-a64.c
14
+++ b/target/arm/tcg/translate-a64.c
...
...
175
gen_helper_recpe_f16(tcg_res, tcg_op, tcg_fpstatus);
175
gen_helper_recpe_f16(tcg_res, tcg_op, tcg_fpstatus);
176
break;
176
break;
177
case 0x3f: /* FRECPX */
177
case 0x3f: /* FRECPX */
178
gen_helper_frecpx_f16(tcg_res, tcg_op, tcg_fpstatus);
178
gen_helper_frecpx_f16(tcg_res, tcg_op, tcg_fpstatus);
179
break;
179
break;
180
- case 0x5a: /* FCVTNU */
180
+ case 0x7d: /* FRSQRTE */
181
- case 0x5b: /* FCVTMU */
181
+ gen_helper_rsqrte_f16(tcg_res, tcg_op, tcg_fpstatus);
182
- case 0x5c: /* FCVTAU */
182
+ break;
183
- case 0x7a: /* FCVTPU */
183
+ default:
184
- case 0x7b: /* FCVTZU */
185
- gen_helper_advsimd_f16touinth(tcg_res, tcg_op, tcg_fpstatus);
186
- break;
187
case 0x7d: /* FRSQRTE */
188
gen_helper_rsqrte_f16(tcg_res, tcg_op, tcg_fpstatus);
189
break;
190
default:
191
case 0x6f: /* FNEG */
192
+ case 0x1a: /* FCVTNS */
184
+ case 0x1a: /* FCVTNS */
193
+ case 0x1b: /* FCVTMS */
185
+ case 0x1b: /* FCVTMS */
194
+ case 0x1c: /* FCVTAS */
186
+ case 0x1c: /* FCVTAS */
195
+ case 0x3a: /* FCVTPS */
187
+ case 0x3a: /* FCVTPS */
196
+ case 0x3b: /* FCVTZS */
188
+ case 0x3b: /* FCVTZS */
197
+ case 0x5a: /* FCVTNU */
189
case 0x5a: /* FCVTNU */
198
+ case 0x5b: /* FCVTMU */
190
case 0x5b: /* FCVTMU */
199
+ case 0x5c: /* FCVTAU */
191
case 0x5c: /* FCVTAU */
200
+ case 0x7a: /* FCVTPU */
192
case 0x7a: /* FCVTPU */
201
+ case 0x7b: /* FCVTZU */
193
case 0x7b: /* FCVTZU */
194
- gen_helper_advsimd_f16touinth(tcg_res, tcg_op, tcg_fpstatus);
195
- break;
196
- case 0x7d: /* FRSQRTE */
197
- gen_helper_rsqrte_f16(tcg_res, tcg_op, tcg_fpstatus);
198
- break;
199
- default:
202
g_assert_not_reached();
200
g_assert_not_reached();
203
}
201
}
204
202
205
diff --git a/target/arm/tcg/a64.decode b/target/arm/tcg/a64.decode
203
diff --git a/target/arm/tcg/a64.decode b/target/arm/tcg/a64.decode
206
index XXXXXXX..XXXXXXX 100644
204
index XXXXXXX..XXXXXXX 100644
...
...
diff view generated by jsdifflib
1
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
1
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
---
2
---
3
target/arm/tcg/translate-a64.c | 4 +---
3
target/arm/tcg/translate-a64.c | 4 +---
4
target/arm/tcg/a64.decode | 19 +++++++++++++++++++
4
target/arm/tcg/a64.decode | 19 +++++++++++++++++++
5
2 files changed, 20 insertions(+), 3 deletions(-)
5
2 files changed, 20 insertions(+), 3 deletions(-)
6
6
7
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
7
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
8
index XXXXXXX..XXXXXXX 100644
8
index XXXXXXX..XXXXXXX 100644
9
--- a/target/arm/tcg/translate-a64.c
9
--- a/target/arm/tcg/translate-a64.c
10
+++ b/target/arm/tcg/translate-a64.c
10
+++ b/target/arm/tcg/translate-a64.c
11
@@ -XXX,XX +XXX,XX @@ static void disas_simd_scalar_shift_imm(DisasContext *s, uint32_t insn)
11
@@ -XXX,XX +XXX,XX @@ static void disas_simd_scalar_shift_imm(DisasContext *s, uint32_t insn)
12
handle_simd_shift_intfp_conv(s, true, false, is_u, immh, immb,
12
handle_simd_shift_intfp_conv(s, true, false, is_u, immh, immb,
13
opcode, rn, rd);
13
opcode, rn, rd);
14
break;
14
break;
15
- case 0x1f: /* FCVTZS, FCVTZU */
15
- case 0x1f: /* FCVTZS, FCVTZU */
16
- handle_simd_shift_fpint_conv(s, true, false, is_u, immh, immb, rn, rd);
16
- handle_simd_shift_fpint_conv(s, true, false, is_u, immh, immb, rn, rd);
17
- break;
17
- break;
18
default:
18
default:
19
case 0x00: /* SSHR / USHR */
19
case 0x00: /* SSHR / USHR */
20
case 0x02: /* SSRA / USRA */
20
case 0x02: /* SSRA / USRA */
21
@@ -XXX,XX +XXX,XX @@ static void disas_simd_scalar_shift_imm(DisasContext *s, uint32_t insn)
21
@@ -XXX,XX +XXX,XX @@ static void disas_simd_scalar_shift_imm(DisasContext *s, uint32_t insn)
22
case 0x11: /* SQRSHRUN */
22
case 0x11: /* SQRSHRUN */
23
case 0x12: /* SQSHRN, UQSHRN */
23
case 0x12: /* SQSHRN, UQSHRN */
24
case 0x13: /* SQRSHRN, UQRSHRN */
24
case 0x13: /* SQRSHRN, UQRSHRN */
25
+ case 0x1f: /* FCVTZS, FCVTZU */
25
+ case 0x1f: /* FCVTZS, FCVTZU */
26
unallocated_encoding(s);
26
unallocated_encoding(s);
27
break;
27
break;
28
}
28
}
29
diff --git a/target/arm/tcg/a64.decode b/target/arm/tcg/a64.decode
29
diff --git a/target/arm/tcg/a64.decode b/target/arm/tcg/a64.decode
30
index XXXXXXX..XXXXXXX 100644
30
index XXXXXXX..XXXXXXX 100644
31
--- a/target/arm/tcg/a64.decode
31
--- a/target/arm/tcg/a64.decode
32
+++ b/target/arm/tcg/a64.decode
32
+++ b/target/arm/tcg/a64.decode
33
@@ -XXX,XX +XXX,XX @@ FCVTAS_f 0101 1110 0.1 00001 11001 0 ..... ..... @icvt_sd
33
@@ -XXX,XX +XXX,XX @@ FCVTAS_f 0101 1110 0.1 00001 11001 0 ..... ..... @icvt_sd
34
FCVTAU_f 0111 1110 011 11001 11001 0 ..... ..... @icvt_h
34
FCVTAU_f 0111 1110 011 11001 11001 0 ..... ..... @icvt_h
35
FCVTAU_f 0111 1110 0.1 00001 11001 0 ..... ..... @icvt_sd
35
FCVTAU_f 0111 1110 0.1 00001 11001 0 ..... ..... @icvt_sd
36
36
37
+%fcvt_f_sh_h 16:4 !function=rsub_16
37
+%fcvt_f_sh_h 16:4 !function=rsub_16
38
+%fcvt_f_sh_s 16:5 !function=rsub_32
38
+%fcvt_f_sh_s 16:5 !function=rsub_32
39
+%fcvt_f_sh_d 16:6 !function=rsub_64
39
+%fcvt_f_sh_d 16:6 !function=rsub_64
40
+
40
+
41
+@fcvt_fixed_h .... .... . 001 .... ...... rn:5 rd:5 \
41
+@fcvt_fixed_h .... .... . 001 .... ...... rn:5 rd:5 \
42
+ &fcvt sf=0 esz=1 shift=%fcvt_f_sh_h
42
+ &fcvt sf=0 esz=1 shift=%fcvt_f_sh_h
43
+@fcvt_fixed_s .... .... . 01 ..... ...... rn:5 rd:5 \
43
+@fcvt_fixed_s .... .... . 01 ..... ...... rn:5 rd:5 \
44
+ &fcvt sf=0 esz=2 shift=%fcvt_f_sh_s
44
+ &fcvt sf=0 esz=2 shift=%fcvt_f_sh_s
45
+@fcvt_fixed_d .... .... . 1 ...... ...... rn:5 rd:5 \
45
+@fcvt_fixed_d .... .... . 1 ...... ...... rn:5 rd:5 \
46
+ &fcvt sf=0 esz=3 shift=%fcvt_f_sh_d
46
+ &fcvt sf=0 esz=3 shift=%fcvt_f_sh_d
47
+
47
+
48
+FCVTZS_f 0101 1111 0 ....... 111111 ..... ..... @fcvt_fixed_h
48
+FCVTZS_f 0101 1111 0 ....... 111111 ..... ..... @fcvt_fixed_h
49
+FCVTZS_f 0101 1111 0 ....... 111111 ..... ..... @fcvt_fixed_s
49
+FCVTZS_f 0101 1111 0 ....... 111111 ..... ..... @fcvt_fixed_s
50
+FCVTZS_f 0101 1111 0 ....... 111111 ..... ..... @fcvt_fixed_d
50
+FCVTZS_f 0101 1111 0 ....... 111111 ..... ..... @fcvt_fixed_d
51
+
51
+
52
+FCVTZU_f 0111 1111 0 ....... 111111 ..... ..... @fcvt_fixed_h
52
+FCVTZU_f 0111 1111 0 ....... 111111 ..... ..... @fcvt_fixed_h
53
+FCVTZU_f 0111 1111 0 ....... 111111 ..... ..... @fcvt_fixed_s
53
+FCVTZU_f 0111 1111 0 ....... 111111 ..... ..... @fcvt_fixed_s
54
+FCVTZU_f 0111 1111 0 ....... 111111 ..... ..... @fcvt_fixed_d
54
+FCVTZU_f 0111 1111 0 ....... 111111 ..... ..... @fcvt_fixed_d
55
+
55
+
56
# Advanced SIMD two-register miscellaneous
56
# Advanced SIMD two-register miscellaneous
57
57
58
SQABS_v 0.00 1110 ..1 00000 01111 0 ..... ..... @qrr_e
58
SQABS_v 0.00 1110 ..1 00000 01111 0 ..... ..... @qrr_e
59
--
59
--
60
2.43.0
60
2.43.0
diff view generated by jsdifflib
1
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
1
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
2
---
3
---
3
target/arm/tcg/translate-a64.c | 35 ++++++++++++++++++++++++----------
4
target/arm/tcg/translate-a64.c | 35 ++++++++++++++++++++++++----------
4
target/arm/tcg/a64.decode | 6 ++++++
5
target/arm/tcg/a64.decode | 6 ++++++
5
2 files changed, 31 insertions(+), 10 deletions(-)
6
2 files changed, 31 insertions(+), 10 deletions(-)
...
...
diff view generated by jsdifflib
1
Remove disas_simd_scalar_shift_imm as these were the
1
Remove disas_simd_scalar_shift_imm as these were the
2
last insns decoded by that function.
2
last insns decoded by that function.
3
3
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-a64.c | 47 ----------------------------------
6
target/arm/tcg/translate-a64.c | 47 ----------------------------------
7
target/arm/tcg/a64.decode | 8 ++++++
7
target/arm/tcg/a64.decode | 8 ++++++
8
2 files changed, 8 insertions(+), 47 deletions(-)
8
2 files changed, 8 insertions(+), 47 deletions(-)
9
9
10
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
10
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
11
index XXXXXXX..XXXXXXX 100644
11
index XXXXXXX..XXXXXXX 100644
12
--- a/target/arm/tcg/translate-a64.c
12
--- a/target/arm/tcg/translate-a64.c
13
+++ b/target/arm/tcg/translate-a64.c
13
+++ b/target/arm/tcg/translate-a64.c
14
@@ -XXX,XX +XXX,XX @@ static void handle_simd_shift_fpint_conv(DisasContext *s, bool is_scalar,
14
@@ -XXX,XX +XXX,XX @@ static void handle_simd_shift_fpint_conv(DisasContext *s, bool is_scalar,
15
gen_restore_rmode(tcg_rmode, tcg_fpstatus);
15
gen_restore_rmode(tcg_rmode, tcg_fpstatus);
16
}
16
}
17
17
18
-/* AdvSIMD scalar shift by immediate
18
-/* AdvSIMD scalar shift by immediate
19
- * 31 30 29 28 23 22 19 18 16 15 11 10 9 5 4 0
19
- * 31 30 29 28 23 22 19 18 16 15 11 10 9 5 4 0
20
- * +-----+---+-------------+------+------+--------+---+------+------+
20
- * +-----+---+-------------+------+------+--------+---+------+------+
21
- * | 0 1 | U | 1 1 1 1 1 0 | immh | immb | opcode | 1 | Rn | Rd |
21
- * | 0 1 | U | 1 1 1 1 1 0 | immh | immb | opcode | 1 | Rn | Rd |
22
- * +-----+---+-------------+------+------+--------+---+------+------+
22
- * +-----+---+-------------+------+------+--------+---+------+------+
23
- *
23
- *
24
- * This is the scalar version so it works on a fixed sized registers
24
- * This is the scalar version so it works on a fixed sized registers
25
- */
25
- */
26
-static void disas_simd_scalar_shift_imm(DisasContext *s, uint32_t insn)
26
-static void disas_simd_scalar_shift_imm(DisasContext *s, uint32_t insn)
27
-{
27
-{
28
- int rd = extract32(insn, 0, 5);
28
- int rd = extract32(insn, 0, 5);
29
- int rn = extract32(insn, 5, 5);
29
- int rn = extract32(insn, 5, 5);
30
- int opcode = extract32(insn, 11, 5);
30
- int opcode = extract32(insn, 11, 5);
31
- int immb = extract32(insn, 16, 3);
31
- int immb = extract32(insn, 16, 3);
32
- int immh = extract32(insn, 19, 4);
32
- int immh = extract32(insn, 19, 4);
33
- bool is_u = extract32(insn, 29, 1);
33
- bool is_u = extract32(insn, 29, 1);
34
-
34
-
35
- if (immh == 0) {
35
- if (immh == 0) {
36
- unallocated_encoding(s);
36
- unallocated_encoding(s);
37
- return;
37
- return;
38
- }
38
- }
39
-
39
-
40
- switch (opcode) {
40
- switch (opcode) {
41
- case 0x1c: /* SCVTF, UCVTF */
41
- case 0x1c: /* SCVTF, UCVTF */
42
- handle_simd_shift_intfp_conv(s, true, false, is_u, immh, immb,
42
- handle_simd_shift_intfp_conv(s, true, false, is_u, immh, immb,
43
- opcode, rn, rd);
43
- opcode, rn, rd);
44
- break;
44
- break;
45
- default:
45
- default:
46
- case 0x00: /* SSHR / USHR */
46
- case 0x00: /* SSHR / USHR */
47
- case 0x02: /* SSRA / USRA */
47
- case 0x02: /* SSRA / USRA */
48
- case 0x04: /* SRSHR / URSHR */
48
- case 0x04: /* SRSHR / URSHR */
49
- case 0x06: /* SRSRA / URSRA */
49
- case 0x06: /* SRSRA / URSRA */
50
- case 0x08: /* SRI */
50
- case 0x08: /* SRI */
51
- case 0x0a: /* SHL / SLI */
51
- case 0x0a: /* SHL / SLI */
52
- case 0x0c: /* SQSHLU */
52
- case 0x0c: /* SQSHLU */
53
- case 0x0e: /* SQSHL, UQSHL */
53
- case 0x0e: /* SQSHL, UQSHL */
54
- case 0x10: /* SQSHRUN */
54
- case 0x10: /* SQSHRUN */
55
- case 0x11: /* SQRSHRUN */
55
- case 0x11: /* SQRSHRUN */
56
- case 0x12: /* SQSHRN, UQSHRN */
56
- case 0x12: /* SQSHRN, UQSHRN */
57
- case 0x13: /* SQRSHRN, UQRSHRN */
57
- case 0x13: /* SQRSHRN, UQRSHRN */
58
- case 0x1f: /* FCVTZS, FCVTZU */
58
- case 0x1f: /* FCVTZS, FCVTZU */
59
- unallocated_encoding(s);
59
- unallocated_encoding(s);
60
- break;
60
- break;
61
- }
61
- }
62
-}
62
-}
63
-
63
-
64
static void handle_2misc_64(DisasContext *s, int opcode, bool u,
64
static void handle_2misc_64(DisasContext *s, int opcode, bool u,
65
TCGv_i64 tcg_rd, TCGv_i64 tcg_rn,
65
TCGv_i64 tcg_rd, TCGv_i64 tcg_rn,
66
TCGv_i32 tcg_rmode, TCGv_ptr tcg_fpstatus)
66
TCGv_i32 tcg_rmode, TCGv_ptr tcg_fpstatus)
67
@@ -XXX,XX +XXX,XX @@ static const AArch64DecodeTable data_proc_simd[] = {
67
@@ -XXX,XX +XXX,XX @@ static const AArch64DecodeTable data_proc_simd[] = {
68
{ 0x0e200800, 0x9f3e0c00, disas_simd_two_reg_misc },
68
{ 0x0e200800, 0x9f3e0c00, disas_simd_two_reg_misc },
69
{ 0x0f000400, 0x9f800400, disas_simd_shift_imm },
69
{ 0x0f000400, 0x9f800400, disas_simd_shift_imm },
70
{ 0x5e200800, 0xdf3e0c00, disas_simd_scalar_two_reg_misc },
70
{ 0x5e200800, 0xdf3e0c00, disas_simd_scalar_two_reg_misc },
71
- { 0x5f000400, 0xdf800400, disas_simd_scalar_shift_imm },
71
- { 0x5f000400, 0xdf800400, disas_simd_scalar_shift_imm },
72
{ 0x0e780800, 0x8f7e0c00, disas_simd_two_reg_misc_fp16 },
72
{ 0x0e780800, 0x8f7e0c00, disas_simd_two_reg_misc_fp16 },
73
{ 0x00000000, 0x00000000, NULL }
73
{ 0x00000000, 0x00000000, NULL }
74
};
74
};
75
diff --git a/target/arm/tcg/a64.decode b/target/arm/tcg/a64.decode
75
diff --git a/target/arm/tcg/a64.decode b/target/arm/tcg/a64.decode
76
index XXXXXXX..XXXXXXX 100644
76
index XXXXXXX..XXXXXXX 100644
77
--- a/target/arm/tcg/a64.decode
77
--- a/target/arm/tcg/a64.decode
78
+++ b/target/arm/tcg/a64.decode
78
+++ b/target/arm/tcg/a64.decode
79
@@ -XXX,XX +XXX,XX @@ FCVTAU_f 0111 1110 0.1 00001 11001 0 ..... ..... @icvt_sd
79
@@ -XXX,XX +XXX,XX @@ FCVTAU_f 0111 1110 0.1 00001 11001 0 ..... ..... @icvt_sd
80
@fcvt_fixed_d .... .... . 1 ...... ...... rn:5 rd:5 \
80
@fcvt_fixed_d .... .... . 1 ...... ...... rn:5 rd:5 \
81
&fcvt sf=0 esz=3 shift=%fcvt_f_sh_d
81
&fcvt sf=0 esz=3 shift=%fcvt_f_sh_d
82
82
83
+SCVTF_f 0101 1111 0 ....... 111001 ..... ..... @fcvt_fixed_h
83
+SCVTF_f 0101 1111 0 ....... 111001 ..... ..... @fcvt_fixed_h
84
+SCVTF_f 0101 1111 0 ....... 111001 ..... ..... @fcvt_fixed_s
84
+SCVTF_f 0101 1111 0 ....... 111001 ..... ..... @fcvt_fixed_s
85
+SCVTF_f 0101 1111 0 ....... 111001 ..... ..... @fcvt_fixed_d
85
+SCVTF_f 0101 1111 0 ....... 111001 ..... ..... @fcvt_fixed_d
86
+
86
+
87
+UCVTF_f 0111 1111 0 ....... 111001 ..... ..... @fcvt_fixed_h
87
+UCVTF_f 0111 1111 0 ....... 111001 ..... ..... @fcvt_fixed_h
88
+UCVTF_f 0111 1111 0 ....... 111001 ..... ..... @fcvt_fixed_s
88
+UCVTF_f 0111 1111 0 ....... 111001 ..... ..... @fcvt_fixed_s
89
+UCVTF_f 0111 1111 0 ....... 111001 ..... ..... @fcvt_fixed_d
89
+UCVTF_f 0111 1111 0 ....... 111001 ..... ..... @fcvt_fixed_d
90
+
90
+
91
FCVTZS_f 0101 1111 0 ....... 111111 ..... ..... @fcvt_fixed_h
91
FCVTZS_f 0101 1111 0 ....... 111111 ..... ..... @fcvt_fixed_h
92
FCVTZS_f 0101 1111 0 ....... 111111 ..... ..... @fcvt_fixed_s
92
FCVTZS_f 0101 1111 0 ....... 111111 ..... ..... @fcvt_fixed_s
93
FCVTZS_f 0101 1111 0 ....... 111111 ..... ..... @fcvt_fixed_d
93
FCVTZS_f 0101 1111 0 ....... 111111 ..... ..... @fcvt_fixed_d
94
--
94
--
95
2.43.0
95
2.43.0
diff view generated by jsdifflib
1
Emphasize that these functions use round-to-zero mode.
1
Emphasize that these functions use round-to-zero mode.
2
2
3
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
3
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4
---
5
---
5
target/arm/helper.h | 8 ++++----
6
target/arm/helper.h | 8 ++++----
6
target/arm/tcg/translate-neon.c | 8 ++++----
7
target/arm/tcg/translate-neon.c | 8 ++++----
7
target/arm/tcg/vec_helper.c | 8 ++++----
8
target/arm/tcg/vec_helper.c | 8 ++++----
...
...
diff view generated by jsdifflib
1
Remove handle_simd_intfp_conv and handle_simd_shift_intfp_conv
1
Remove handle_simd_intfp_conv and handle_simd_shift_intfp_conv
2
as these were the last insns decoded by those functions.
2
as these were the last insns decoded by those functions.
3
3
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/helper.h | 3 +
6
target/arm/helper.h | 3 +
7
target/arm/tcg/translate-a64.c | 201 ++++++---------------------------
7
target/arm/tcg/translate-a64.c | 201 ++++++---------------------------
8
target/arm/tcg/vec_helper.c | 7 +-
8
target/arm/tcg/vec_helper.c | 7 +-
9
target/arm/tcg/a64.decode | 22 ++++
9
target/arm/tcg/a64.decode | 22 ++++
10
4 files changed, 66 insertions(+), 167 deletions(-)
10
4 files changed, 66 insertions(+), 167 deletions(-)
11
11
12
diff --git a/target/arm/helper.h b/target/arm/helper.h
12
diff --git a/target/arm/helper.h b/target/arm/helper.h
13
index XXXXXXX..XXXXXXX 100644
13
index XXXXXXX..XXXXXXX 100644
14
--- a/target/arm/helper.h
14
--- a/target/arm/helper.h
15
+++ b/target/arm/helper.h
15
+++ b/target/arm/helper.h
16
@@ -XXX,XX +XXX,XX @@ DEF_HELPER_FLAGS_4(gvec_vcvt_uh, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
16
@@ -XXX,XX +XXX,XX @@ DEF_HELPER_FLAGS_4(gvec_vcvt_uh, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
17
DEF_HELPER_FLAGS_4(gvec_vcvt_rz_hs, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
17
DEF_HELPER_FLAGS_4(gvec_vcvt_rz_hs, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
18
DEF_HELPER_FLAGS_4(gvec_vcvt_rz_hu, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
18
DEF_HELPER_FLAGS_4(gvec_vcvt_rz_hu, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
19
19
20
+DEF_HELPER_FLAGS_4(gvec_vcvt_sd, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
20
+DEF_HELPER_FLAGS_4(gvec_vcvt_sd, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
21
+DEF_HELPER_FLAGS_4(gvec_vcvt_ud, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
21
+DEF_HELPER_FLAGS_4(gvec_vcvt_ud, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
22
+
22
+
23
DEF_HELPER_FLAGS_4(gvec_vcvt_rm_ss, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
23
DEF_HELPER_FLAGS_4(gvec_vcvt_rm_ss, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
24
DEF_HELPER_FLAGS_4(gvec_vcvt_rm_us, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
24
DEF_HELPER_FLAGS_4(gvec_vcvt_rm_us, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
25
DEF_HELPER_FLAGS_4(gvec_vcvt_rm_sh, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
25
DEF_HELPER_FLAGS_4(gvec_vcvt_rm_sh, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
26
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
26
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
27
index XXXXXXX..XXXXXXX 100644
27
index XXXXXXX..XXXXXXX 100644
28
--- a/target/arm/tcg/translate-a64.c
28
--- a/target/arm/tcg/translate-a64.c
29
+++ b/target/arm/tcg/translate-a64.c
29
+++ b/target/arm/tcg/translate-a64.c
30
@@ -XXX,XX +XXX,XX @@ TRANS_FEAT(FRINT64Z_v, aa64_frint, do_fp1_vector, a,
30
@@ -XXX,XX +XXX,XX @@ TRANS_FEAT(FRINT64Z_v, aa64_frint, do_fp1_vector, a,
31
&f_scalar_frint64, FPROUNDING_ZERO)
31
&f_scalar_frint64, FPROUNDING_ZERO)
32
TRANS_FEAT(FRINT64X_v, aa64_frint, do_fp1_vector, a, &f_scalar_frint64, -1)
32
TRANS_FEAT(FRINT64X_v, aa64_frint, do_fp1_vector, a, &f_scalar_frint64, -1)
33
33
34
-/* Common vector code for handling integer to FP conversion */
34
-/* Common vector code for handling integer to FP conversion */
35
-static void handle_simd_intfp_conv(DisasContext *s, int rd, int rn,
35
-static void handle_simd_intfp_conv(DisasContext *s, int rd, int rn,
36
- int elements, int is_signed,
36
- int elements, int is_signed,
37
- int fracbits, int size)
37
- int fracbits, int size)
38
+static bool do_gvec_op2_fpst(DisasContext *s, MemOp esz, bool is_q,
38
+static bool do_gvec_op2_fpst(DisasContext *s, MemOp esz, bool is_q,
39
+ int rd, int rn, int data,
39
+ int rd, int rn, int data,
40
+ gen_helper_gvec_2_ptr * const fns[3])
40
+ gen_helper_gvec_2_ptr * const fns[3])
41
{
41
{
42
- TCGv_ptr tcg_fpst = fpstatus_ptr(size == MO_16 ? FPST_FPCR_F16 : FPST_FPCR);
42
- TCGv_ptr tcg_fpst = fpstatus_ptr(size == MO_16 ? FPST_FPCR_F16 : FPST_FPCR);
43
- TCGv_i32 tcg_shift = NULL;
43
- TCGv_i32 tcg_shift = NULL;
44
+ int check = fp_access_check_vector_hsd(s, is_q, esz);
44
+ int check = fp_access_check_vector_hsd(s, is_q, esz);
45
+ TCGv_ptr fpst;
45
+ TCGv_ptr fpst;
46
46
47
- MemOp mop = size | (is_signed ? MO_SIGN : 0);
47
- MemOp mop = size | (is_signed ? MO_SIGN : 0);
48
- int pass;
48
- int pass;
49
-
49
-
50
- if (fracbits || size == MO_64) {
50
- if (fracbits || size == MO_64) {
51
- tcg_shift = tcg_constant_i32(fracbits);
51
- tcg_shift = tcg_constant_i32(fracbits);
52
+ if (check <= 0) {
52
+ if (check <= 0) {
53
+ return check == 0;
53
+ return check == 0;
54
}
54
}
55
55
56
- if (size == MO_64) {
56
- if (size == MO_64) {
57
- TCGv_i64 tcg_int64 = tcg_temp_new_i64();
57
- TCGv_i64 tcg_int64 = tcg_temp_new_i64();
58
- TCGv_i64 tcg_double = tcg_temp_new_i64();
58
- TCGv_i64 tcg_double = tcg_temp_new_i64();
59
-
59
-
60
- for (pass = 0; pass < elements; pass++) {
60
- for (pass = 0; pass < elements; pass++) {
61
- read_vec_element(s, tcg_int64, rn, pass, mop);
61
- read_vec_element(s, tcg_int64, rn, pass, mop);
62
-
62
-
63
- if (is_signed) {
63
- if (is_signed) {
64
- gen_helper_vfp_sqtod(tcg_double, tcg_int64,
64
- gen_helper_vfp_sqtod(tcg_double, tcg_int64,
65
- tcg_shift, tcg_fpst);
65
- tcg_shift, tcg_fpst);
66
- } else {
66
- } else {
67
- gen_helper_vfp_uqtod(tcg_double, tcg_int64,
67
- gen_helper_vfp_uqtod(tcg_double, tcg_int64,
68
- tcg_shift, tcg_fpst);
68
- tcg_shift, tcg_fpst);
69
- }
69
- }
70
- if (elements == 1) {
70
- if (elements == 1) {
71
- write_fp_dreg(s, rd, tcg_double);
71
- write_fp_dreg(s, rd, tcg_double);
72
- } else {
72
- } else {
73
- write_vec_element(s, tcg_double, rd, pass, MO_64);
73
- write_vec_element(s, tcg_double, rd, pass, MO_64);
74
- }
74
- }
75
- }
75
- }
76
- } else {
76
- } else {
77
- TCGv_i32 tcg_int32 = tcg_temp_new_i32();
77
- TCGv_i32 tcg_int32 = tcg_temp_new_i32();
78
- TCGv_i32 tcg_float = tcg_temp_new_i32();
78
- TCGv_i32 tcg_float = tcg_temp_new_i32();
79
-
79
-
80
- for (pass = 0; pass < elements; pass++) {
80
- for (pass = 0; pass < elements; pass++) {
81
- read_vec_element_i32(s, tcg_int32, rn, pass, mop);
81
- read_vec_element_i32(s, tcg_int32, rn, pass, mop);
82
-
82
-
83
- switch (size) {
83
- switch (size) {
84
- case MO_32:
84
- case MO_32:
85
- if (fracbits) {
85
- if (fracbits) {
86
- if (is_signed) {
86
- if (is_signed) {
87
- gen_helper_vfp_sltos(tcg_float, tcg_int32,
87
- gen_helper_vfp_sltos(tcg_float, tcg_int32,
88
- tcg_shift, tcg_fpst);
88
- tcg_shift, tcg_fpst);
89
- } else {
89
- } else {
90
- gen_helper_vfp_ultos(tcg_float, tcg_int32,
90
- gen_helper_vfp_ultos(tcg_float, tcg_int32,
91
- tcg_shift, tcg_fpst);
91
- tcg_shift, tcg_fpst);
92
- }
92
- }
93
- } else {
93
- } else {
94
- if (is_signed) {
94
- if (is_signed) {
95
- gen_helper_vfp_sitos(tcg_float, tcg_int32, tcg_fpst);
95
- gen_helper_vfp_sitos(tcg_float, tcg_int32, tcg_fpst);
96
- } else {
96
- } else {
97
- gen_helper_vfp_uitos(tcg_float, tcg_int32, tcg_fpst);
97
- gen_helper_vfp_uitos(tcg_float, tcg_int32, tcg_fpst);
98
- }
98
- }
99
- }
99
- }
100
- break;
100
- break;
101
- case MO_16:
101
- case MO_16:
102
- if (fracbits) {
102
- if (fracbits) {
103
- if (is_signed) {
103
- if (is_signed) {
104
- gen_helper_vfp_sltoh(tcg_float, tcg_int32,
104
- gen_helper_vfp_sltoh(tcg_float, tcg_int32,
105
- tcg_shift, tcg_fpst);
105
- tcg_shift, tcg_fpst);
106
- } else {
106
- } else {
107
- gen_helper_vfp_ultoh(tcg_float, tcg_int32,
107
- gen_helper_vfp_ultoh(tcg_float, tcg_int32,
108
- tcg_shift, tcg_fpst);
108
- tcg_shift, tcg_fpst);
109
- }
109
- }
110
- } else {
110
- } else {
111
- if (is_signed) {
111
- if (is_signed) {
112
- gen_helper_vfp_sitoh(tcg_float, tcg_int32, tcg_fpst);
112
- gen_helper_vfp_sitoh(tcg_float, tcg_int32, tcg_fpst);
113
- } else {
113
- } else {
114
- gen_helper_vfp_uitoh(tcg_float, tcg_int32, tcg_fpst);
114
- gen_helper_vfp_uitoh(tcg_float, tcg_int32, tcg_fpst);
115
- }
115
- }
116
- }
116
- }
117
- break;
117
- break;
118
- default:
118
- default:
119
- g_assert_not_reached();
119
- g_assert_not_reached();
120
- }
120
- }
121
-
121
-
122
- if (elements == 1) {
122
- if (elements == 1) {
123
- write_fp_sreg(s, rd, tcg_float);
123
- write_fp_sreg(s, rd, tcg_float);
124
- } else {
124
- } else {
125
- write_vec_element_i32(s, tcg_float, rd, pass, size);
125
- write_vec_element_i32(s, tcg_float, rd, pass, size);
126
- }
126
- }
127
- }
127
- }
128
- }
128
- }
129
-
129
-
130
- clear_vec_high(s, elements << size == 16, rd);
130
- clear_vec_high(s, elements << size == 16, rd);
131
+ fpst = fpstatus_ptr(esz == MO_16 ? FPST_FPCR_F16 : FPST_FPCR);
131
+ fpst = fpstatus_ptr(esz == MO_16 ? FPST_FPCR_F16 : FPST_FPCR);
132
+ tcg_gen_gvec_2_ptr(vec_full_reg_offset(s, rd),
132
+ tcg_gen_gvec_2_ptr(vec_full_reg_offset(s, rd),
133
+ vec_full_reg_offset(s, rn), fpst,
133
+ vec_full_reg_offset(s, rn), fpst,
134
+ is_q ? 16 : 8, vec_full_reg_size(s),
134
+ is_q ? 16 : 8, vec_full_reg_size(s),
135
+ data, fns[esz - 1]);
135
+ data, fns[esz - 1]);
136
+ return true;
136
+ return true;
137
}
137
}
138
138
139
-/* UCVTF/SCVTF - Integer to FP conversion */
139
-/* UCVTF/SCVTF - Integer to FP conversion */
140
-static void handle_simd_shift_intfp_conv(DisasContext *s, bool is_scalar,
140
-static void handle_simd_shift_intfp_conv(DisasContext *s, bool is_scalar,
141
- bool is_q, bool is_u,
141
- bool is_q, bool is_u,
142
- int immh, int immb, int opcode,
142
- int immh, int immb, int opcode,
143
- int rn, int rd)
143
- int rn, int rd)
144
-{
144
-{
145
- int size, elements, fracbits;
145
- int size, elements, fracbits;
146
- int immhb = immh << 3 | immb;
146
- int immhb = immh << 3 | immb;
147
+static gen_helper_gvec_2_ptr * const f_scvtf_v[] = {
147
+static gen_helper_gvec_2_ptr * const f_scvtf_v[] = {
148
+ gen_helper_gvec_vcvt_sh,
148
+ gen_helper_gvec_vcvt_sh,
149
+ gen_helper_gvec_vcvt_sf,
149
+ gen_helper_gvec_vcvt_sf,
150
+ gen_helper_gvec_vcvt_sd,
150
+ gen_helper_gvec_vcvt_sd,
151
+};
151
+};
152
+TRANS(SCVTF_vi, do_gvec_op2_fpst,
152
+TRANS(SCVTF_vi, do_gvec_op2_fpst,
153
+ a->esz, a->q, a->rd, a->rn, 0, f_scvtf_v)
153
+ a->esz, a->q, a->rd, a->rn, 0, f_scvtf_v)
154
+TRANS(SCVTF_vf, do_gvec_op2_fpst,
154
+TRANS(SCVTF_vf, do_gvec_op2_fpst,
155
+ a->esz, a->q, a->rd, a->rn, a->shift, f_scvtf_v)
155
+ a->esz, a->q, a->rd, a->rn, a->shift, f_scvtf_v)
156
156
157
- if (immh & 8) {
157
- if (immh & 8) {
158
- size = MO_64;
158
- size = MO_64;
159
- if (!is_scalar && !is_q) {
159
- if (!is_scalar && !is_q) {
160
- unallocated_encoding(s);
160
- unallocated_encoding(s);
161
- return;
161
- return;
162
- }
162
- }
163
- } else if (immh & 4) {
163
- } else if (immh & 4) {
164
- size = MO_32;
164
- size = MO_32;
165
- } else if (immh & 2) {
165
- } else if (immh & 2) {
166
- size = MO_16;
166
- size = MO_16;
167
- if (!dc_isar_feature(aa64_fp16, s)) {
167
- if (!dc_isar_feature(aa64_fp16, s)) {
168
- unallocated_encoding(s);
168
- unallocated_encoding(s);
169
- return;
169
- return;
170
- }
170
- }
171
- } else {
171
- } else {
172
- /* immh == 0 would be a failure of the decode logic */
172
- /* immh == 0 would be a failure of the decode logic */
173
- g_assert(immh == 1);
173
- g_assert(immh == 1);
174
- unallocated_encoding(s);
174
- unallocated_encoding(s);
175
- return;
175
- return;
176
- }
176
- }
177
-
177
-
178
- if (is_scalar) {
178
- if (is_scalar) {
179
- elements = 1;
179
- elements = 1;
180
- } else {
180
- } else {
181
- elements = (8 << is_q) >> size;
181
- elements = (8 << is_q) >> size;
182
- }
182
- }
183
- fracbits = (16 << size) - immhb;
183
- fracbits = (16 << size) - immhb;
184
-
184
-
185
- if (!fp_access_check(s)) {
185
- if (!fp_access_check(s)) {
186
- return;
186
- return;
187
- }
187
- }
188
-
188
-
189
- handle_simd_intfp_conv(s, rd, rn, elements, !is_u, fracbits, size);
189
- handle_simd_intfp_conv(s, rd, rn, elements, !is_u, fracbits, size);
190
-}
190
-}
191
+static gen_helper_gvec_2_ptr * const f_ucvtf_v[] = {
191
+static gen_helper_gvec_2_ptr * const f_ucvtf_v[] = {
192
+ gen_helper_gvec_vcvt_uh,
192
+ gen_helper_gvec_vcvt_uh,
193
+ gen_helper_gvec_vcvt_uf,
193
+ gen_helper_gvec_vcvt_uf,
194
+ gen_helper_gvec_vcvt_ud,
194
+ gen_helper_gvec_vcvt_ud,
195
+};
195
+};
196
+TRANS(UCVTF_vi, do_gvec_op2_fpst,
196
+TRANS(UCVTF_vi, do_gvec_op2_fpst,
197
+ a->esz, a->q, a->rd, a->rn, 0, f_ucvtf_v)
197
+ a->esz, a->q, a->rd, a->rn, 0, f_ucvtf_v)
198
+TRANS(UCVTF_vf, do_gvec_op2_fpst,
198
+TRANS(UCVTF_vf, do_gvec_op2_fpst,
199
+ a->esz, a->q, a->rd, a->rn, a->shift, f_ucvtf_v)
199
+ a->esz, a->q, a->rd, a->rn, a->shift, f_ucvtf_v)
200
200
201
/* FCVTZS, FVCVTZU - FP to fixedpoint conversion */
201
/* FCVTZS, FVCVTZU - FP to fixedpoint conversion */
202
static void handle_simd_shift_fpint_conv(DisasContext *s, bool is_scalar,
202
static void handle_simd_shift_fpint_conv(DisasContext *s, bool is_scalar,
203
@@ -XXX,XX +XXX,XX @@ static void disas_simd_shift_imm(DisasContext *s, uint32_t insn)
203
@@ -XXX,XX +XXX,XX @@ static void disas_simd_shift_imm(DisasContext *s, uint32_t insn)
204
}
204
}
205
205
206
switch (opcode) {
206
switch (opcode) {
207
- case 0x1c: /* SCVTF / UCVTF */
207
- case 0x1c: /* SCVTF / UCVTF */
208
- handle_simd_shift_intfp_conv(s, false, is_q, is_u, immh, immb,
208
- handle_simd_shift_intfp_conv(s, false, is_q, is_u, immh, immb,
209
- opcode, rn, rd);
209
- opcode, rn, rd);
210
- break;
210
- break;
211
case 0x1f: /* FCVTZS/ FCVTZU */
211
case 0x1f: /* FCVTZS/ FCVTZU */
212
handle_simd_shift_fpint_conv(s, false, is_q, is_u, immh, immb, rn, rd);
212
handle_simd_shift_fpint_conv(s, false, is_q, is_u, immh, immb, rn, rd);
213
return;
213
return;
214
@@ -XXX,XX +XXX,XX @@ static void disas_simd_shift_imm(DisasContext *s, uint32_t insn)
214
@@ -XXX,XX +XXX,XX @@ static void disas_simd_shift_imm(DisasContext *s, uint32_t insn)
215
case 0x12: /* SQSHRN / UQSHRN */
215
case 0x12: /* SQSHRN / UQSHRN */
216
case 0x13: /* SQRSHRN / UQRSHRN */
216
case 0x13: /* SQRSHRN / UQRSHRN */
217
case 0x14: /* SSHLL / USHLL */
217
case 0x14: /* SSHLL / USHLL */
218
+ case 0x1c: /* SCVTF / UCVTF */
218
+ case 0x1c: /* SCVTF / UCVTF */
219
unallocated_encoding(s);
219
unallocated_encoding(s);
220
return;
220
return;
221
}
221
}
222
@@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc(DisasContext *s, uint32_t insn)
222
@@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc(DisasContext *s, uint32_t insn)
223
opcode |= (extract32(size, 1, 1) << 5) | (u << 6);
223
opcode |= (extract32(size, 1, 1) << 5) | (u << 6);
224
size = is_double ? 3 : 2;
224
size = is_double ? 3 : 2;
225
switch (opcode) {
225
switch (opcode) {
226
- case 0x1d: /* SCVTF */
226
- case 0x1d: /* SCVTF */
227
- case 0x5d: /* UCVTF */
227
- case 0x5d: /* UCVTF */
228
- {
228
- {
229
- bool is_signed = (opcode == 0x1d) ? true : false;
229
- bool is_signed = (opcode == 0x1d) ? true : false;
230
- int elements = is_double ? 2 : is_q ? 4 : 2;
230
- int elements = is_double ? 2 : is_q ? 4 : 2;
231
- if (is_double && !is_q) {
231
- if (is_double && !is_q) {
232
- unallocated_encoding(s);
232
- unallocated_encoding(s);
233
- return;
233
- return;
234
- }
234
- }
235
- if (!fp_access_check(s)) {
235
- if (!fp_access_check(s)) {
236
- return;
236
- return;
237
- }
237
- }
238
- handle_simd_intfp_conv(s, rd, rn, elements, is_signed, 0, size);
238
- handle_simd_intfp_conv(s, rd, rn, elements, is_signed, 0, size);
239
- return;
239
- return;
240
- }
240
- }
241
case 0x2c: /* FCMGT (zero) */
241
case 0x2c: /* FCMGT (zero) */
242
case 0x2d: /* FCMEQ (zero) */
242
case 0x2d: /* FCMEQ (zero) */
243
case 0x2e: /* FCMLT (zero) */
243
case 0x2e: /* FCMLT (zero) */
244
@@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc(DisasContext *s, uint32_t insn)
244
@@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc(DisasContext *s, uint32_t insn)
245
case 0x1f: /* FRINT64Z */
245
case 0x1f: /* FRINT64Z */
246
case 0x5e: /* FRINT32X */
246
case 0x5e: /* FRINT32X */
247
case 0x5f: /* FRINT64X */
247
case 0x5f: /* FRINT64X */
248
+ case 0x1d: /* SCVTF */
248
+ case 0x1d: /* SCVTF */
249
+ case 0x5d: /* UCVTF */
249
+ case 0x5d: /* UCVTF */
250
unallocated_encoding(s);
250
unallocated_encoding(s);
251
return;
251
return;
252
}
252
}
253
@@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc_fp16(DisasContext *s, uint32_t insn)
253
@@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc_fp16(DisasContext *s, uint32_t insn)
254
fpop = deposit32(fpop, 6, 1, u);
254
fpop = deposit32(fpop, 6, 1, u);
255
255
256
switch (fpop) {
256
switch (fpop) {
257
- case 0x1d: /* SCVTF */
257
- case 0x1d: /* SCVTF */
258
- case 0x5d: /* UCVTF */
258
- case 0x5d: /* UCVTF */
259
- {
259
- {
260
- int elements;
260
- int elements;
261
-
261
-
262
- if (is_scalar) {
262
- if (is_scalar) {
263
- elements = 1;
263
- elements = 1;
264
- } else {
264
- } else {
265
- elements = (is_q ? 8 : 4);
265
- elements = (is_q ? 8 : 4);
266
- }
266
- }
267
-
267
-
268
- if (!fp_access_check(s)) {
268
- if (!fp_access_check(s)) {
269
- return;
269
- return;
270
- }
270
- }
271
- handle_simd_intfp_conv(s, rd, rn, elements, !u, 0, MO_16);
271
- handle_simd_intfp_conv(s, rd, rn, elements, !u, 0, MO_16);
272
- return;
272
- return;
273
- }
273
- }
274
- break;
274
- break;
275
case 0x2c: /* FCMGT (zero) */
275
case 0x2c: /* FCMGT (zero) */
276
case 0x2d: /* FCMEQ (zero) */
276
case 0x2d: /* FCMEQ (zero) */
277
case 0x2e: /* FCMLT (zero) */
277
case 0x2e: /* FCMLT (zero) */
278
@@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc_fp16(DisasContext *s, uint32_t insn)
278
@@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc_fp16(DisasContext *s, uint32_t insn)
279
case 0x58: /* FRINTA */
279
case 0x58: /* FRINTA */
280
case 0x59: /* FRINTX */
280
case 0x59: /* FRINTX */
281
case 0x79: /* FRINTI */
281
case 0x79: /* FRINTI */
282
+ case 0x1d: /* SCVTF */
282
+ case 0x1d: /* SCVTF */
283
+ case 0x5d: /* UCVTF */
283
+ case 0x5d: /* UCVTF */
284
unallocated_encoding(s);
284
unallocated_encoding(s);
285
return;
285
return;
286
}
286
}
287
diff --git a/target/arm/tcg/vec_helper.c b/target/arm/tcg/vec_helper.c
287
diff --git a/target/arm/tcg/vec_helper.c b/target/arm/tcg/vec_helper.c
288
index XXXXXXX..XXXXXXX 100644
288
index XXXXXXX..XXXXXXX 100644
289
--- a/target/arm/tcg/vec_helper.c
289
--- a/target/arm/tcg/vec_helper.c
290
+++ b/target/arm/tcg/vec_helper.c
290
+++ b/target/arm/tcg/vec_helper.c
291
@@ -XXX,XX +XXX,XX @@ DO_3OP_PAIR(gvec_uminp_s, MIN, uint32_t, H4)
291
@@ -XXX,XX +XXX,XX @@ DO_3OP_PAIR(gvec_uminp_s, MIN, uint32_t, H4)
292
clear_tail(d, oprsz, simd_maxsz(desc)); \
292
clear_tail(d, oprsz, simd_maxsz(desc)); \
293
}
293
}
294
294
295
+DO_VCVT_FIXED(gvec_vcvt_sd, helper_vfp_sqtod, uint64_t)
295
+DO_VCVT_FIXED(gvec_vcvt_sd, helper_vfp_sqtod, uint64_t)
296
+DO_VCVT_FIXED(gvec_vcvt_ud, helper_vfp_uqtod, uint64_t)
296
+DO_VCVT_FIXED(gvec_vcvt_ud, helper_vfp_uqtod, uint64_t)
297
DO_VCVT_FIXED(gvec_vcvt_sf, helper_vfp_sltos, uint32_t)
297
DO_VCVT_FIXED(gvec_vcvt_sf, helper_vfp_sltos, uint32_t)
298
DO_VCVT_FIXED(gvec_vcvt_uf, helper_vfp_ultos, uint32_t)
298
DO_VCVT_FIXED(gvec_vcvt_uf, helper_vfp_ultos, uint32_t)
299
-DO_VCVT_FIXED(gvec_vcvt_rz_fs, helper_vfp_tosls_round_to_zero, uint32_t)
299
-DO_VCVT_FIXED(gvec_vcvt_rz_fs, helper_vfp_tosls_round_to_zero, uint32_t)
300
-DO_VCVT_FIXED(gvec_vcvt_rz_fu, helper_vfp_touls_round_to_zero, uint32_t)
300
-DO_VCVT_FIXED(gvec_vcvt_rz_fu, helper_vfp_touls_round_to_zero, uint32_t)
301
DO_VCVT_FIXED(gvec_vcvt_sh, helper_vfp_shtoh, uint16_t)
301
DO_VCVT_FIXED(gvec_vcvt_sh, helper_vfp_shtoh, uint16_t)
302
DO_VCVT_FIXED(gvec_vcvt_uh, helper_vfp_uhtoh, uint16_t)
302
DO_VCVT_FIXED(gvec_vcvt_uh, helper_vfp_uhtoh, uint16_t)
303
+
303
+
304
+DO_VCVT_FIXED(gvec_vcvt_rz_fs, helper_vfp_tosls_round_to_zero, uint32_t)
304
+DO_VCVT_FIXED(gvec_vcvt_rz_fs, helper_vfp_tosls_round_to_zero, uint32_t)
305
+DO_VCVT_FIXED(gvec_vcvt_rz_fu, helper_vfp_touls_round_to_zero, uint32_t)
305
+DO_VCVT_FIXED(gvec_vcvt_rz_fu, helper_vfp_touls_round_to_zero, uint32_t)
306
DO_VCVT_FIXED(gvec_vcvt_rz_hs, helper_vfp_toshh_round_to_zero, uint16_t)
306
DO_VCVT_FIXED(gvec_vcvt_rz_hs, helper_vfp_toshh_round_to_zero, uint16_t)
307
DO_VCVT_FIXED(gvec_vcvt_rz_hu, helper_vfp_touhh_round_to_zero, uint16_t)
307
DO_VCVT_FIXED(gvec_vcvt_rz_hu, helper_vfp_touhh_round_to_zero, uint16_t)
308
308
309
diff --git a/target/arm/tcg/a64.decode b/target/arm/tcg/a64.decode
309
diff --git a/target/arm/tcg/a64.decode b/target/arm/tcg/a64.decode
310
index XXXXXXX..XXXXXXX 100644
310
index XXXXXXX..XXXXXXX 100644
311
--- a/target/arm/tcg/a64.decode
311
--- a/target/arm/tcg/a64.decode
312
+++ b/target/arm/tcg/a64.decode
312
+++ b/target/arm/tcg/a64.decode
313
@@ -XXX,XX +XXX,XX @@ FRINT32Z_v 0.00 1110 0.1 00001 11101 0 ..... ..... @qrr_sd
313
@@ -XXX,XX +XXX,XX @@ FRINT32Z_v 0.00 1110 0.1 00001 11101 0 ..... ..... @qrr_sd
314
FRINT32X_v 0.10 1110 0.1 00001 11101 0 ..... ..... @qrr_sd
314
FRINT32X_v 0.10 1110 0.1 00001 11101 0 ..... ..... @qrr_sd
315
FRINT64Z_v 0.00 1110 0.1 00001 11111 0 ..... ..... @qrr_sd
315
FRINT64Z_v 0.00 1110 0.1 00001 11111 0 ..... ..... @qrr_sd
316
FRINT64X_v 0.10 1110 0.1 00001 11111 0 ..... ..... @qrr_sd
316
FRINT64X_v 0.10 1110 0.1 00001 11111 0 ..... ..... @qrr_sd
317
+
317
+
318
+SCVTF_vi 0.00 1110 011 11001 11011 0 ..... ..... @qrr_h
318
+SCVTF_vi 0.00 1110 011 11001 11011 0 ..... ..... @qrr_h
319
+SCVTF_vi 0.00 1110 0.1 00001 11011 0 ..... ..... @qrr_sd
319
+SCVTF_vi 0.00 1110 0.1 00001 11011 0 ..... ..... @qrr_sd
320
+
320
+
321
+UCVTF_vi 0.10 1110 011 11001 11011 0 ..... ..... @qrr_h
321
+UCVTF_vi 0.10 1110 011 11001 11011 0 ..... ..... @qrr_h
322
+UCVTF_vi 0.10 1110 0.1 00001 11011 0 ..... ..... @qrr_sd
322
+UCVTF_vi 0.10 1110 0.1 00001 11011 0 ..... ..... @qrr_sd
323
+
323
+
324
+&fcvt_q rd rn esz q shift
324
+&fcvt_q rd rn esz q shift
325
+@fcvtq_h . q:1 . ...... 001 .... ...... rn:5 rd:5 \
325
+@fcvtq_h . q:1 . ...... 001 .... ...... rn:5 rd:5 \
326
+ &fcvt_q esz=1 shift=%fcvt_f_sh_h
326
+ &fcvt_q esz=1 shift=%fcvt_f_sh_h
327
+@fcvtq_s . q:1 . ...... 01 ..... ...... rn:5 rd:5 \
327
+@fcvtq_s . q:1 . ...... 01 ..... ...... rn:5 rd:5 \
328
+ &fcvt_q esz=2 shift=%fcvt_f_sh_s
328
+ &fcvt_q esz=2 shift=%fcvt_f_sh_s
329
+@fcvtq_d . q:1 . ...... 1 ...... ...... rn:5 rd:5 \
329
+@fcvtq_d . q:1 . ...... 1 ...... ...... rn:5 rd:5 \
330
+ &fcvt_q esz=3 shift=%fcvt_f_sh_d
330
+ &fcvt_q esz=3 shift=%fcvt_f_sh_d
331
+
331
+
332
+SCVTF_vf 0.00 11110 ....... 111001 ..... ..... @fcvtq_h
332
+SCVTF_vf 0.00 11110 ....... 111001 ..... ..... @fcvtq_h
333
+SCVTF_vf 0.00 11110 ....... 111001 ..... ..... @fcvtq_s
333
+SCVTF_vf 0.00 11110 ....... 111001 ..... ..... @fcvtq_s
334
+SCVTF_vf 0.00 11110 ....... 111001 ..... ..... @fcvtq_d
334
+SCVTF_vf 0.00 11110 ....... 111001 ..... ..... @fcvtq_d
335
+
335
+
336
+UCVTF_vf 0.10 11110 ....... 111001 ..... ..... @fcvtq_h
336
+UCVTF_vf 0.10 11110 ....... 111001 ..... ..... @fcvtq_h
337
+UCVTF_vf 0.10 11110 ....... 111001 ..... ..... @fcvtq_s
337
+UCVTF_vf 0.10 11110 ....... 111001 ..... ..... @fcvtq_s
338
+UCVTF_vf 0.10 11110 ....... 111001 ..... ..... @fcvtq_d
338
+UCVTF_vf 0.10 11110 ....... 111001 ..... ..... @fcvtq_d
339
--
339
--
340
2.43.0
340
2.43.0
diff view generated by jsdifflib
1
Remove handle_simd_shift_fpint_conv and disas_simd_shift_imm
1
Remove handle_simd_shift_fpint_conv and disas_simd_shift_imm
2
as these were the last insns decoded by those functions.
2
as these were the last insns decoded by those functions.
3
3
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/helper.h | 4 +
6
target/arm/helper.h | 4 +
7
target/arm/tcg/translate-a64.c | 160 +++------------------------------
7
target/arm/tcg/translate-a64.c | 160 +++------------------------------
8
target/arm/tcg/vec_helper.c | 2 +
8
target/arm/tcg/vec_helper.c | 2 +
9
target/arm/vfp_helper.c | 4 +
9
target/arm/vfp_helper.c | 4 +
10
target/arm/tcg/a64.decode | 8 ++
10
target/arm/tcg/a64.decode | 8 ++
11
5 files changed, 32 insertions(+), 146 deletions(-)
11
5 files changed, 32 insertions(+), 146 deletions(-)
12
12
13
diff --git a/target/arm/helper.h b/target/arm/helper.h
13
diff --git a/target/arm/helper.h b/target/arm/helper.h
14
index XXXXXXX..XXXXXXX 100644
14
index XXXXXXX..XXXXXXX 100644
15
--- a/target/arm/helper.h
15
--- a/target/arm/helper.h
16
+++ b/target/arm/helper.h
16
+++ b/target/arm/helper.h
17
@@ -XXX,XX +XXX,XX @@ DEF_HELPER_3(vfp_touhs_round_to_zero, i32, f32, i32, ptr)
17
@@ -XXX,XX +XXX,XX @@ DEF_HELPER_3(vfp_touhs_round_to_zero, i32, f32, i32, ptr)
18
DEF_HELPER_3(vfp_touls_round_to_zero, i32, f32, i32, ptr)
18
DEF_HELPER_3(vfp_touls_round_to_zero, i32, f32, i32, ptr)
19
DEF_HELPER_3(vfp_toshd_round_to_zero, i64, f64, i32, ptr)
19
DEF_HELPER_3(vfp_toshd_round_to_zero, i64, f64, i32, ptr)
20
DEF_HELPER_3(vfp_tosld_round_to_zero, i64, f64, i32, ptr)
20
DEF_HELPER_3(vfp_tosld_round_to_zero, i64, f64, i32, ptr)
21
+DEF_HELPER_3(vfp_tosqd_round_to_zero, i64, f64, i32, ptr)
21
+DEF_HELPER_3(vfp_tosqd_round_to_zero, i64, f64, i32, ptr)
22
DEF_HELPER_3(vfp_touhd_round_to_zero, i64, f64, i32, ptr)
22
DEF_HELPER_3(vfp_touhd_round_to_zero, i64, f64, i32, ptr)
23
DEF_HELPER_3(vfp_tould_round_to_zero, i64, f64, i32, ptr)
23
DEF_HELPER_3(vfp_tould_round_to_zero, i64, f64, i32, ptr)
24
+DEF_HELPER_3(vfp_touqd_round_to_zero, i64, f64, i32, ptr)
24
+DEF_HELPER_3(vfp_touqd_round_to_zero, i64, f64, i32, ptr)
25
DEF_HELPER_3(vfp_touhh, i32, f16, i32, ptr)
25
DEF_HELPER_3(vfp_touhh, i32, f16, i32, ptr)
26
DEF_HELPER_3(vfp_toshh, i32, f16, i32, ptr)
26
DEF_HELPER_3(vfp_toshh, i32, f16, i32, ptr)
27
DEF_HELPER_3(vfp_toulh, i32, f16, i32, ptr)
27
DEF_HELPER_3(vfp_toulh, i32, f16, i32, ptr)
28
@@ -XXX,XX +XXX,XX @@ DEF_HELPER_FLAGS_4(gvec_vcvt_rz_hu, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
28
@@ -XXX,XX +XXX,XX @@ DEF_HELPER_FLAGS_4(gvec_vcvt_rz_hu, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
29
29
30
DEF_HELPER_FLAGS_4(gvec_vcvt_sd, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
30
DEF_HELPER_FLAGS_4(gvec_vcvt_sd, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
31
DEF_HELPER_FLAGS_4(gvec_vcvt_ud, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
31
DEF_HELPER_FLAGS_4(gvec_vcvt_ud, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
32
+DEF_HELPER_FLAGS_4(gvec_vcvt_rz_ds, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
32
+DEF_HELPER_FLAGS_4(gvec_vcvt_rz_ds, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
33
+DEF_HELPER_FLAGS_4(gvec_vcvt_rz_du, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
33
+DEF_HELPER_FLAGS_4(gvec_vcvt_rz_du, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
34
34
35
DEF_HELPER_FLAGS_4(gvec_vcvt_rm_ss, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
35
DEF_HELPER_FLAGS_4(gvec_vcvt_rm_ss, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
36
DEF_HELPER_FLAGS_4(gvec_vcvt_rm_us, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
36
DEF_HELPER_FLAGS_4(gvec_vcvt_rm_us, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
37
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
37
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
38
index XXXXXXX..XXXXXXX 100644
38
index XXXXXXX..XXXXXXX 100644
39
--- a/target/arm/tcg/translate-a64.c
39
--- a/target/arm/tcg/translate-a64.c
40
+++ b/target/arm/tcg/translate-a64.c
40
+++ b/target/arm/tcg/translate-a64.c
41
@@ -XXX,XX +XXX,XX @@ TRANS(UCVTF_vi, do_gvec_op2_fpst,
41
@@ -XXX,XX +XXX,XX @@ TRANS(UCVTF_vi, do_gvec_op2_fpst,
42
TRANS(UCVTF_vf, do_gvec_op2_fpst,
42
TRANS(UCVTF_vf, do_gvec_op2_fpst,
43
a->esz, a->q, a->rd, a->rn, a->shift, f_ucvtf_v)
43
a->esz, a->q, a->rd, a->rn, a->shift, f_ucvtf_v)
44
44
45
-/* FCVTZS, FVCVTZU - FP to fixedpoint conversion */
45
-/* FCVTZS, FVCVTZU - FP to fixedpoint conversion */
46
-static void handle_simd_shift_fpint_conv(DisasContext *s, bool is_scalar,
46
-static void handle_simd_shift_fpint_conv(DisasContext *s, bool is_scalar,
47
- bool is_q, bool is_u,
47
- bool is_q, bool is_u,
48
- int immh, int immb, int rn, int rd)
48
- int immh, int immb, int rn, int rd)
49
-{
49
-{
50
- int immhb = immh << 3 | immb;
50
- int immhb = immh << 3 | immb;
51
- int pass, size, fracbits;
51
- int pass, size, fracbits;
52
- TCGv_ptr tcg_fpstatus;
52
- TCGv_ptr tcg_fpstatus;
53
- TCGv_i32 tcg_rmode, tcg_shift;
53
- TCGv_i32 tcg_rmode, tcg_shift;
54
+static gen_helper_gvec_2_ptr * const f_fcvtzs_vf[] = {
54
+static gen_helper_gvec_2_ptr * const f_fcvtzs_vf[] = {
55
+ gen_helper_gvec_vcvt_rz_hs,
55
+ gen_helper_gvec_vcvt_rz_hs,
56
+ gen_helper_gvec_vcvt_rz_fs,
56
+ gen_helper_gvec_vcvt_rz_fs,
57
+ gen_helper_gvec_vcvt_rz_ds,
57
+ gen_helper_gvec_vcvt_rz_ds,
58
+};
58
+};
59
+TRANS(FCVTZS_vf, do_gvec_op2_fpst,
59
+TRANS(FCVTZS_vf, do_gvec_op2_fpst,
60
+ a->esz, a->q, a->rd, a->rn, a->shift, f_fcvtzs_vf)
60
+ a->esz, a->q, a->rd, a->rn, a->shift, f_fcvtzs_vf)
61
61
62
- if (immh & 0x8) {
62
- if (immh & 0x8) {
63
- size = MO_64;
63
- size = MO_64;
64
- if (!is_scalar && !is_q) {
64
- if (!is_scalar && !is_q) {
65
- unallocated_encoding(s);
65
- unallocated_encoding(s);
66
- return;
66
- return;
67
- }
67
- }
68
- } else if (immh & 0x4) {
68
- } else if (immh & 0x4) {
69
- size = MO_32;
69
- size = MO_32;
70
- } else if (immh & 0x2) {
70
- } else if (immh & 0x2) {
71
- size = MO_16;
71
- size = MO_16;
72
- if (!dc_isar_feature(aa64_fp16, s)) {
72
- if (!dc_isar_feature(aa64_fp16, s)) {
73
- unallocated_encoding(s);
73
- unallocated_encoding(s);
74
- return;
74
- return;
75
- }
75
- }
76
- } else {
76
- } else {
77
- /* Should have split out AdvSIMD modified immediate earlier. */
77
- /* Should have split out AdvSIMD modified immediate earlier. */
78
- assert(immh == 1);
78
- assert(immh == 1);
79
- unallocated_encoding(s);
79
- unallocated_encoding(s);
80
- return;
80
- return;
81
- }
81
- }
82
-
82
-
83
- if (!fp_access_check(s)) {
83
- if (!fp_access_check(s)) {
84
- return;
84
- return;
85
- }
85
- }
86
-
86
-
87
- assert(!(is_scalar && is_q));
87
- assert(!(is_scalar && is_q));
88
-
88
-
89
- tcg_fpstatus = fpstatus_ptr(size == MO_16 ? FPST_FPCR_F16 : FPST_FPCR);
89
- tcg_fpstatus = fpstatus_ptr(size == MO_16 ? FPST_FPCR_F16 : FPST_FPCR);
90
- tcg_rmode = gen_set_rmode(FPROUNDING_ZERO, tcg_fpstatus);
90
- tcg_rmode = gen_set_rmode(FPROUNDING_ZERO, tcg_fpstatus);
91
- fracbits = (16 << size) - immhb;
91
- fracbits = (16 << size) - immhb;
92
- tcg_shift = tcg_constant_i32(fracbits);
92
- tcg_shift = tcg_constant_i32(fracbits);
93
-
93
-
94
- if (size == MO_64) {
94
- if (size == MO_64) {
95
- int maxpass = is_scalar ? 1 : 2;
95
- int maxpass = is_scalar ? 1 : 2;
96
-
96
-
97
- for (pass = 0; pass < maxpass; pass++) {
97
- for (pass = 0; pass < maxpass; pass++) {
98
- TCGv_i64 tcg_op = tcg_temp_new_i64();
98
- TCGv_i64 tcg_op = tcg_temp_new_i64();
99
-
99
-
100
- read_vec_element(s, tcg_op, rn, pass, MO_64);
100
- read_vec_element(s, tcg_op, rn, pass, MO_64);
101
- if (is_u) {
101
- if (is_u) {
102
- gen_helper_vfp_touqd(tcg_op, tcg_op, tcg_shift, tcg_fpstatus);
102
- gen_helper_vfp_touqd(tcg_op, tcg_op, tcg_shift, tcg_fpstatus);
103
- } else {
103
- } else {
104
- gen_helper_vfp_tosqd(tcg_op, tcg_op, tcg_shift, tcg_fpstatus);
104
- gen_helper_vfp_tosqd(tcg_op, tcg_op, tcg_shift, tcg_fpstatus);
105
- }
105
- }
106
- write_vec_element(s, tcg_op, rd, pass, MO_64);
106
- write_vec_element(s, tcg_op, rd, pass, MO_64);
107
- }
107
- }
108
- clear_vec_high(s, is_q, rd);
108
- clear_vec_high(s, is_q, rd);
109
- } else {
109
- } else {
110
- void (*fn)(TCGv_i32, TCGv_i32, TCGv_i32, TCGv_ptr);
110
- void (*fn)(TCGv_i32, TCGv_i32, TCGv_i32, TCGv_ptr);
111
- int maxpass = is_scalar ? 1 : ((8 << is_q) >> size);
111
- int maxpass = is_scalar ? 1 : ((8 << is_q) >> size);
112
-
112
-
113
- switch (size) {
113
- switch (size) {
114
- case MO_16:
114
- case MO_16:
115
- if (is_u) {
115
- if (is_u) {
116
- fn = gen_helper_vfp_touhh;
116
- fn = gen_helper_vfp_touhh;
117
- } else {
117
- } else {
118
- fn = gen_helper_vfp_toshh;
118
- fn = gen_helper_vfp_toshh;
119
- }
119
- }
120
- break;
120
- break;
121
- case MO_32:
121
- case MO_32:
122
- if (is_u) {
122
- if (is_u) {
123
- fn = gen_helper_vfp_touls;
123
- fn = gen_helper_vfp_touls;
124
- } else {
124
- } else {
125
- fn = gen_helper_vfp_tosls;
125
- fn = gen_helper_vfp_tosls;
126
- }
126
- }
127
- break;
127
- break;
128
- default:
128
- default:
129
- g_assert_not_reached();
129
- g_assert_not_reached();
130
- }
130
- }
131
-
131
-
132
- for (pass = 0; pass < maxpass; pass++) {
132
- for (pass = 0; pass < maxpass; pass++) {
133
- TCGv_i32 tcg_op = tcg_temp_new_i32();
133
- TCGv_i32 tcg_op = tcg_temp_new_i32();
134
-
134
-
135
- read_vec_element_i32(s, tcg_op, rn, pass, size);
135
- read_vec_element_i32(s, tcg_op, rn, pass, size);
136
- fn(tcg_op, tcg_op, tcg_shift, tcg_fpstatus);
136
- fn(tcg_op, tcg_op, tcg_shift, tcg_fpstatus);
137
- if (is_scalar) {
137
- if (is_scalar) {
138
- if (size == MO_16 && !is_u) {
138
- if (size == MO_16 && !is_u) {
139
- tcg_gen_ext16u_i32(tcg_op, tcg_op);
139
- tcg_gen_ext16u_i32(tcg_op, tcg_op);
140
- }
140
- }
141
- write_fp_sreg(s, rd, tcg_op);
141
- write_fp_sreg(s, rd, tcg_op);
142
- } else {
142
- } else {
143
- write_vec_element_i32(s, tcg_op, rd, pass, size);
143
- write_vec_element_i32(s, tcg_op, rd, pass, size);
144
- }
144
- }
145
- }
145
- }
146
- if (!is_scalar) {
146
- if (!is_scalar) {
147
- clear_vec_high(s, is_q, rd);
147
- clear_vec_high(s, is_q, rd);
148
- }
148
- }
149
- }
149
- }
150
-
150
-
151
- gen_restore_rmode(tcg_rmode, tcg_fpstatus);
151
- gen_restore_rmode(tcg_rmode, tcg_fpstatus);
152
-}
152
-}
153
+static gen_helper_gvec_2_ptr * const f_fcvtzu_vf[] = {
153
+static gen_helper_gvec_2_ptr * const f_fcvtzu_vf[] = {
154
+ gen_helper_gvec_vcvt_rz_hu,
154
+ gen_helper_gvec_vcvt_rz_hu,
155
+ gen_helper_gvec_vcvt_rz_fu,
155
+ gen_helper_gvec_vcvt_rz_fu,
156
+ gen_helper_gvec_vcvt_rz_du,
156
+ gen_helper_gvec_vcvt_rz_du,
157
+};
157
+};
158
+TRANS(FCVTZU_vf, do_gvec_op2_fpst,
158
+TRANS(FCVTZU_vf, do_gvec_op2_fpst,
159
+ a->esz, a->q, a->rd, a->rn, a->shift, f_fcvtzu_vf)
159
+ a->esz, a->q, a->rd, a->rn, a->shift, f_fcvtzu_vf)
160
160
161
static void handle_2misc_64(DisasContext *s, int opcode, bool u,
161
static void handle_2misc_64(DisasContext *s, int opcode, bool u,
162
TCGv_i64 tcg_rd, TCGv_i64 tcg_rn,
162
TCGv_i64 tcg_rd, TCGv_i64 tcg_rn,
163
@@ -XXX,XX +XXX,XX @@ static void disas_simd_scalar_two_reg_misc(DisasContext *s, uint32_t insn)
163
@@ -XXX,XX +XXX,XX @@ static void disas_simd_scalar_two_reg_misc(DisasContext *s, uint32_t insn)
164
g_assert_not_reached();
164
g_assert_not_reached();
165
}
165
}
166
166
167
-/* AdvSIMD shift by immediate
167
-/* AdvSIMD shift by immediate
168
- * 31 30 29 28 23 22 19 18 16 15 11 10 9 5 4 0
168
- * 31 30 29 28 23 22 19 18 16 15 11 10 9 5 4 0
169
- * +---+---+---+-------------+------+------+--------+---+------+------+
169
- * +---+---+---+-------------+------+------+--------+---+------+------+
170
- * | 0 | Q | U | 0 1 1 1 1 0 | immh | immb | opcode | 1 | Rn | Rd |
170
- * | 0 | Q | U | 0 1 1 1 1 0 | immh | immb | opcode | 1 | Rn | Rd |
171
- * +---+---+---+-------------+------+------+--------+---+------+------+
171
- * +---+---+---+-------------+------+------+--------+---+------+------+
172
- */
172
- */
173
-static void disas_simd_shift_imm(DisasContext *s, uint32_t insn)
173
-static void disas_simd_shift_imm(DisasContext *s, uint32_t insn)
174
-{
174
-{
175
- int rd = extract32(insn, 0, 5);
175
- int rd = extract32(insn, 0, 5);
176
- int rn = extract32(insn, 5, 5);
176
- int rn = extract32(insn, 5, 5);
177
- int opcode = extract32(insn, 11, 5);
177
- int opcode = extract32(insn, 11, 5);
178
- int immb = extract32(insn, 16, 3);
178
- int immb = extract32(insn, 16, 3);
179
- int immh = extract32(insn, 19, 4);
179
- int immh = extract32(insn, 19, 4);
180
- bool is_u = extract32(insn, 29, 1);
180
- bool is_u = extract32(insn, 29, 1);
181
- bool is_q = extract32(insn, 30, 1);
181
- bool is_q = extract32(insn, 30, 1);
182
-
182
-
183
- if (immh == 0) {
183
- if (immh == 0) {
184
- unallocated_encoding(s);
184
- unallocated_encoding(s);
185
- return;
185
- return;
186
- }
186
- }
187
-
187
-
188
- switch (opcode) {
188
- switch (opcode) {
189
- case 0x1f: /* FCVTZS/ FCVTZU */
189
- case 0x1f: /* FCVTZS/ FCVTZU */
190
- handle_simd_shift_fpint_conv(s, false, is_q, is_u, immh, immb, rn, rd);
190
- handle_simd_shift_fpint_conv(s, false, is_q, is_u, immh, immb, rn, rd);
191
- return;
191
- return;
192
- default:
192
- default:
193
- case 0x00: /* SSHR / USHR */
193
- case 0x00: /* SSHR / USHR */
194
- case 0x02: /* SSRA / USRA (accumulate) */
194
- case 0x02: /* SSRA / USRA (accumulate) */
195
- case 0x04: /* SRSHR / URSHR (rounding) */
195
- case 0x04: /* SRSHR / URSHR (rounding) */
196
- case 0x06: /* SRSRA / URSRA (accum + rounding) */
196
- case 0x06: /* SRSRA / URSRA (accum + rounding) */
197
- case 0x08: /* SRI */
197
- case 0x08: /* SRI */
198
- case 0x0a: /* SHL / SLI */
198
- case 0x0a: /* SHL / SLI */
199
- case 0x0c: /* SQSHLU */
199
- case 0x0c: /* SQSHLU */
200
- case 0x0e: /* SQSHL, UQSHL */
200
- case 0x0e: /* SQSHL, UQSHL */
201
- case 0x10: /* SHRN / SQSHRUN */
201
- case 0x10: /* SHRN / SQSHRUN */
202
- case 0x11: /* RSHRN / SQRSHRUN */
202
- case 0x11: /* RSHRN / SQRSHRUN */
203
- case 0x12: /* SQSHRN / UQSHRN */
203
- case 0x12: /* SQSHRN / UQSHRN */
204
- case 0x13: /* SQRSHRN / UQRSHRN */
204
- case 0x13: /* SQRSHRN / UQRSHRN */
205
- case 0x14: /* SSHLL / USHLL */
205
- case 0x14: /* SSHLL / USHLL */
206
- case 0x1c: /* SCVTF / UCVTF */
206
- case 0x1c: /* SCVTF / UCVTF */
207
- unallocated_encoding(s);
207
- unallocated_encoding(s);
208
- return;
208
- return;
209
- }
209
- }
210
-}
210
-}
211
-
211
-
212
static void handle_2misc_widening(DisasContext *s, int opcode, bool is_q,
212
static void handle_2misc_widening(DisasContext *s, int opcode, bool is_q,
213
int size, int rn, int rd)
213
int size, int rn, int rd)
214
{
214
{
215
@@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc_fp16(DisasContext *s, uint32_t insn)
215
@@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc_fp16(DisasContext *s, uint32_t insn)
216
static const AArch64DecodeTable data_proc_simd[] = {
216
static const AArch64DecodeTable data_proc_simd[] = {
217
/* pattern , mask , fn */
217
/* pattern , mask , fn */
218
{ 0x0e200800, 0x9f3e0c00, disas_simd_two_reg_misc },
218
{ 0x0e200800, 0x9f3e0c00, disas_simd_two_reg_misc },
219
- { 0x0f000400, 0x9f800400, disas_simd_shift_imm },
219
- { 0x0f000400, 0x9f800400, disas_simd_shift_imm },
220
{ 0x5e200800, 0xdf3e0c00, disas_simd_scalar_two_reg_misc },
220
{ 0x5e200800, 0xdf3e0c00, disas_simd_scalar_two_reg_misc },
221
{ 0x0e780800, 0x8f7e0c00, disas_simd_two_reg_misc_fp16 },
221
{ 0x0e780800, 0x8f7e0c00, disas_simd_two_reg_misc_fp16 },
222
{ 0x00000000, 0x00000000, NULL }
222
{ 0x00000000, 0x00000000, NULL }
223
diff --git a/target/arm/tcg/vec_helper.c b/target/arm/tcg/vec_helper.c
223
diff --git a/target/arm/tcg/vec_helper.c b/target/arm/tcg/vec_helper.c
224
index XXXXXXX..XXXXXXX 100644
224
index XXXXXXX..XXXXXXX 100644
225
--- a/target/arm/tcg/vec_helper.c
225
--- a/target/arm/tcg/vec_helper.c
226
+++ b/target/arm/tcg/vec_helper.c
226
+++ b/target/arm/tcg/vec_helper.c
227
@@ -XXX,XX +XXX,XX @@ DO_VCVT_FIXED(gvec_vcvt_uf, helper_vfp_ultos, uint32_t)
227
@@ -XXX,XX +XXX,XX @@ DO_VCVT_FIXED(gvec_vcvt_uf, helper_vfp_ultos, uint32_t)
228
DO_VCVT_FIXED(gvec_vcvt_sh, helper_vfp_shtoh, uint16_t)
228
DO_VCVT_FIXED(gvec_vcvt_sh, helper_vfp_shtoh, uint16_t)
229
DO_VCVT_FIXED(gvec_vcvt_uh, helper_vfp_uhtoh, uint16_t)
229
DO_VCVT_FIXED(gvec_vcvt_uh, helper_vfp_uhtoh, uint16_t)
230
230
231
+DO_VCVT_FIXED(gvec_vcvt_rz_ds, helper_vfp_tosqd_round_to_zero, uint64_t)
231
+DO_VCVT_FIXED(gvec_vcvt_rz_ds, helper_vfp_tosqd_round_to_zero, uint64_t)
232
+DO_VCVT_FIXED(gvec_vcvt_rz_du, helper_vfp_touqd_round_to_zero, uint64_t)
232
+DO_VCVT_FIXED(gvec_vcvt_rz_du, helper_vfp_touqd_round_to_zero, uint64_t)
233
DO_VCVT_FIXED(gvec_vcvt_rz_fs, helper_vfp_tosls_round_to_zero, uint32_t)
233
DO_VCVT_FIXED(gvec_vcvt_rz_fs, helper_vfp_tosls_round_to_zero, uint32_t)
234
DO_VCVT_FIXED(gvec_vcvt_rz_fu, helper_vfp_touls_round_to_zero, uint32_t)
234
DO_VCVT_FIXED(gvec_vcvt_rz_fu, helper_vfp_touls_round_to_zero, uint32_t)
235
DO_VCVT_FIXED(gvec_vcvt_rz_hs, helper_vfp_toshh_round_to_zero, uint16_t)
235
DO_VCVT_FIXED(gvec_vcvt_rz_hs, helper_vfp_toshh_round_to_zero, uint16_t)
236
diff --git a/target/arm/vfp_helper.c b/target/arm/vfp_helper.c
236
diff --git a/target/arm/vfp_helper.c b/target/arm/vfp_helper.c
237
index XXXXXXX..XXXXXXX 100644
237
index XXXXXXX..XXXXXXX 100644
238
--- a/target/arm/vfp_helper.c
238
--- a/target/arm/vfp_helper.c
239
+++ b/target/arm/vfp_helper.c
239
+++ b/target/arm/vfp_helper.c
240
@@ -XXX,XX +XXX,XX @@ VFP_CONV_FIX_A64(sq, h, 16, dh_ctype_f16, 64, int64)
240
@@ -XXX,XX +XXX,XX @@ VFP_CONV_FIX_A64(sq, h, 16, dh_ctype_f16, 64, int64)
241
VFP_CONV_FIX(uh, h, 16, dh_ctype_f16, 32, uint16)
241
VFP_CONV_FIX(uh, h, 16, dh_ctype_f16, 32, uint16)
242
VFP_CONV_FIX(ul, h, 16, dh_ctype_f16, 32, uint32)
242
VFP_CONV_FIX(ul, h, 16, dh_ctype_f16, 32, uint32)
243
VFP_CONV_FIX_A64(uq, h, 16, dh_ctype_f16, 64, uint64)
243
VFP_CONV_FIX_A64(uq, h, 16, dh_ctype_f16, 64, uint64)
244
+VFP_CONV_FLOAT_FIX_ROUND(sq, d, 64, float64, 64, int64,
244
+VFP_CONV_FLOAT_FIX_ROUND(sq, d, 64, float64, 64, int64,
245
+ float_round_to_zero, _round_to_zero)
245
+ float_round_to_zero, _round_to_zero)
246
+VFP_CONV_FLOAT_FIX_ROUND(uq, d, 64, float64, 64, uint64,
246
+VFP_CONV_FLOAT_FIX_ROUND(uq, d, 64, float64, 64, uint64,
247
+ float_round_to_zero, _round_to_zero)
247
+ float_round_to_zero, _round_to_zero)
248
248
249
#undef VFP_CONV_FIX
249
#undef VFP_CONV_FIX
250
#undef VFP_CONV_FIX_FLOAT
250
#undef VFP_CONV_FIX_FLOAT
251
diff --git a/target/arm/tcg/a64.decode b/target/arm/tcg/a64.decode
251
diff --git a/target/arm/tcg/a64.decode b/target/arm/tcg/a64.decode
252
index XXXXXXX..XXXXXXX 100644
252
index XXXXXXX..XXXXXXX 100644
253
--- a/target/arm/tcg/a64.decode
253
--- a/target/arm/tcg/a64.decode
254
+++ b/target/arm/tcg/a64.decode
254
+++ b/target/arm/tcg/a64.decode
255
@@ -XXX,XX +XXX,XX @@ SCVTF_vf 0.00 11110 ....... 111001 ..... ..... @fcvtq_d
255
@@ -XXX,XX +XXX,XX @@ SCVTF_vf 0.00 11110 ....... 111001 ..... ..... @fcvtq_d
256
UCVTF_vf 0.10 11110 ....... 111001 ..... ..... @fcvtq_h
256
UCVTF_vf 0.10 11110 ....... 111001 ..... ..... @fcvtq_h
257
UCVTF_vf 0.10 11110 ....... 111001 ..... ..... @fcvtq_s
257
UCVTF_vf 0.10 11110 ....... 111001 ..... ..... @fcvtq_s
258
UCVTF_vf 0.10 11110 ....... 111001 ..... ..... @fcvtq_d
258
UCVTF_vf 0.10 11110 ....... 111001 ..... ..... @fcvtq_d
259
+
259
+
260
+FCVTZS_vf 0.00 11110 ....... 111111 ..... ..... @fcvtq_h
260
+FCVTZS_vf 0.00 11110 ....... 111111 ..... ..... @fcvtq_h
261
+FCVTZS_vf 0.00 11110 ....... 111111 ..... ..... @fcvtq_s
261
+FCVTZS_vf 0.00 11110 ....... 111111 ..... ..... @fcvtq_s
262
+FCVTZS_vf 0.00 11110 ....... 111111 ..... ..... @fcvtq_d
262
+FCVTZS_vf 0.00 11110 ....... 111111 ..... ..... @fcvtq_d
263
+
263
+
264
+FCVTZU_vf 0.10 11110 ....... 111111 ..... ..... @fcvtq_h
264
+FCVTZU_vf 0.10 11110 ....... 111111 ..... ..... @fcvtq_h
265
+FCVTZU_vf 0.10 11110 ....... 111111 ..... ..... @fcvtq_s
265
+FCVTZU_vf 0.10 11110 ....... 111111 ..... ..... @fcvtq_s
266
+FCVTZU_vf 0.10 11110 ....... 111111 ..... ..... @fcvtq_d
266
+FCVTZU_vf 0.10 11110 ....... 111111 ..... ..... @fcvtq_d
267
--
267
--
268
2.43.0
268
2.43.0
diff view generated by jsdifflib
1
Remove handle_2misc_64 as these were the last insns decoded
1
Remove handle_2misc_64 as these were the last insns decoded
2
by that function. Remove helper_advsimd_f16to[su]inth as unused;
2
by that function. Remove helper_advsimd_f16to[su]inth as unused;
3
we now always go through helper_vfp_to[su]hh or a specialized
3
we now always go through helper_vfp_to[su]hh or a specialized
4
vector function instead.
4
vector function instead.
5
5
6
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
6
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
7
---
7
---
8
target/arm/helper.h | 2 +
8
target/arm/helper.h | 2 +
9
target/arm/tcg/helper-a64.h | 2 -
9
target/arm/tcg/helper-a64.h | 2 -
10
target/arm/tcg/helper-a64.c | 32 -----
10
target/arm/tcg/helper-a64.c | 32 -----
11
target/arm/tcg/translate-a64.c | 227 +++++++++++----------------------
11
target/arm/tcg/translate-a64.c | 227 +++++++++++----------------------
12
target/arm/tcg/vec_helper.c | 2 +
12
target/arm/tcg/vec_helper.c | 2 +
13
target/arm/tcg/a64.decode | 25 ++++
13
target/arm/tcg/a64.decode | 25 ++++
14
6 files changed, 102 insertions(+), 188 deletions(-)
14
6 files changed, 102 insertions(+), 188 deletions(-)
15
15
16
diff --git a/target/arm/helper.h b/target/arm/helper.h
16
diff --git a/target/arm/helper.h b/target/arm/helper.h
17
index XXXXXXX..XXXXXXX 100644
17
index XXXXXXX..XXXXXXX 100644
18
--- a/target/arm/helper.h
18
--- a/target/arm/helper.h
19
+++ b/target/arm/helper.h
19
+++ b/target/arm/helper.h
20
@@ -XXX,XX +XXX,XX @@ DEF_HELPER_FLAGS_4(gvec_vcvt_ud, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
20
@@ -XXX,XX +XXX,XX @@ DEF_HELPER_FLAGS_4(gvec_vcvt_ud, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
21
DEF_HELPER_FLAGS_4(gvec_vcvt_rz_ds, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
21
DEF_HELPER_FLAGS_4(gvec_vcvt_rz_ds, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
22
DEF_HELPER_FLAGS_4(gvec_vcvt_rz_du, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
22
DEF_HELPER_FLAGS_4(gvec_vcvt_rz_du, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
23
23
24
+DEF_HELPER_FLAGS_4(gvec_vcvt_rm_sd, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
24
+DEF_HELPER_FLAGS_4(gvec_vcvt_rm_sd, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
25
+DEF_HELPER_FLAGS_4(gvec_vcvt_rm_ud, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
25
+DEF_HELPER_FLAGS_4(gvec_vcvt_rm_ud, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
26
DEF_HELPER_FLAGS_4(gvec_vcvt_rm_ss, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
26
DEF_HELPER_FLAGS_4(gvec_vcvt_rm_ss, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
27
DEF_HELPER_FLAGS_4(gvec_vcvt_rm_us, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
27
DEF_HELPER_FLAGS_4(gvec_vcvt_rm_us, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
28
DEF_HELPER_FLAGS_4(gvec_vcvt_rm_sh, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
28
DEF_HELPER_FLAGS_4(gvec_vcvt_rm_sh, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32)
29
diff --git a/target/arm/tcg/helper-a64.h b/target/arm/tcg/helper-a64.h
29
diff --git a/target/arm/tcg/helper-a64.h b/target/arm/tcg/helper-a64.h
30
index XXXXXXX..XXXXXXX 100644
30
index XXXXXXX..XXXXXXX 100644
31
--- a/target/arm/tcg/helper-a64.h
31
--- a/target/arm/tcg/helper-a64.h
32
+++ b/target/arm/tcg/helper-a64.h
32
+++ b/target/arm/tcg/helper-a64.h
33
@@ -XXX,XX +XXX,XX @@ DEF_HELPER_3(advsimd_mulx2h, i32, i32, i32, ptr)
33
@@ -XXX,XX +XXX,XX @@ DEF_HELPER_3(advsimd_mulx2h, i32, i32, i32, ptr)
34
DEF_HELPER_4(advsimd_muladd2h, i32, i32, i32, i32, ptr)
34
DEF_HELPER_4(advsimd_muladd2h, i32, i32, i32, i32, ptr)
35
DEF_HELPER_2(advsimd_rinth_exact, f16, f16, ptr)
35
DEF_HELPER_2(advsimd_rinth_exact, f16, f16, ptr)
36
DEF_HELPER_2(advsimd_rinth, f16, f16, ptr)
36
DEF_HELPER_2(advsimd_rinth, f16, f16, ptr)
37
-DEF_HELPER_2(advsimd_f16tosinth, i32, f16, ptr)
37
-DEF_HELPER_2(advsimd_f16tosinth, i32, f16, ptr)
38
-DEF_HELPER_2(advsimd_f16touinth, i32, f16, ptr)
38
-DEF_HELPER_2(advsimd_f16touinth, i32, f16, ptr)
39
39
40
DEF_HELPER_2(exception_return, void, env, i64)
40
DEF_HELPER_2(exception_return, void, env, i64)
41
DEF_HELPER_FLAGS_2(dc_zva, TCG_CALL_NO_WG, void, env, i64)
41
DEF_HELPER_FLAGS_2(dc_zva, TCG_CALL_NO_WG, void, env, i64)
42
diff --git a/target/arm/tcg/helper-a64.c b/target/arm/tcg/helper-a64.c
42
diff --git a/target/arm/tcg/helper-a64.c b/target/arm/tcg/helper-a64.c
43
index XXXXXXX..XXXXXXX 100644
43
index XXXXXXX..XXXXXXX 100644
44
--- a/target/arm/tcg/helper-a64.c
44
--- a/target/arm/tcg/helper-a64.c
45
+++ b/target/arm/tcg/helper-a64.c
45
+++ b/target/arm/tcg/helper-a64.c
46
@@ -XXX,XX +XXX,XX @@ uint32_t HELPER(advsimd_rinth)(uint32_t x, void *fp_status)
46
@@ -XXX,XX +XXX,XX @@ uint32_t HELPER(advsimd_rinth)(uint32_t x, void *fp_status)
47
return ret;
47
return ret;
48
}
48
}
49
49
50
-/*
50
-/*
51
- * Half-precision floating point conversion functions
51
- * Half-precision floating point conversion functions
52
- *
52
- *
53
- * There are a multitude of conversion functions with various
53
- * There are a multitude of conversion functions with various
54
- * different rounding modes. This is dealt with by the calling code
54
- * different rounding modes. This is dealt with by the calling code
55
- * setting the mode appropriately before calling the helper.
55
- * setting the mode appropriately before calling the helper.
56
- */
56
- */
57
-
57
-
58
-uint32_t HELPER(advsimd_f16tosinth)(uint32_t a, void *fpstp)
58
-uint32_t HELPER(advsimd_f16tosinth)(uint32_t a, void *fpstp)
59
-{
59
-{
60
- float_status *fpst = fpstp;
60
- float_status *fpst = fpstp;
61
-
61
-
62
- /* Invalid if we are passed a NaN */
62
- /* Invalid if we are passed a NaN */
63
- if (float16_is_any_nan(a)) {
63
- if (float16_is_any_nan(a)) {
64
- float_raise(float_flag_invalid, fpst);
64
- float_raise(float_flag_invalid, fpst);
65
- return 0;
65
- return 0;
66
- }
66
- }
67
- return float16_to_int16(a, fpst);
67
- return float16_to_int16(a, fpst);
68
-}
68
-}
69
-
69
-
70
-uint32_t HELPER(advsimd_f16touinth)(uint32_t a, void *fpstp)
70
-uint32_t HELPER(advsimd_f16touinth)(uint32_t a, void *fpstp)
71
-{
71
-{
72
- float_status *fpst = fpstp;
72
- float_status *fpst = fpstp;
73
-
73
-
74
- /* Invalid if we are passed a NaN */
74
- /* Invalid if we are passed a NaN */
75
- if (float16_is_any_nan(a)) {
75
- if (float16_is_any_nan(a)) {
76
- float_raise(float_flag_invalid, fpst);
76
- float_raise(float_flag_invalid, fpst);
77
- return 0;
77
- return 0;
78
- }
78
- }
79
- return float16_to_uint16(a, fpst);
79
- return float16_to_uint16(a, fpst);
80
-}
80
-}
81
-
81
-
82
static int el_from_spsr(uint32_t spsr)
82
static int el_from_spsr(uint32_t spsr)
83
{
83
{
84
/* Return the exception level that this SPSR is requesting a return to,
84
/* Return the exception level that this SPSR is requesting a return to,
85
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
85
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
86
index XXXXXXX..XXXXXXX 100644
86
index XXXXXXX..XXXXXXX 100644
87
--- a/target/arm/tcg/translate-a64.c
87
--- a/target/arm/tcg/translate-a64.c
88
+++ b/target/arm/tcg/translate-a64.c
88
+++ b/target/arm/tcg/translate-a64.c
89
@@ -XXX,XX +XXX,XX @@ static gen_helper_gvec_2_ptr * const f_fcvtzu_vf[] = {
89
@@ -XXX,XX +XXX,XX @@ static gen_helper_gvec_2_ptr * const f_fcvtzu_vf[] = {
90
TRANS(FCVTZU_vf, do_gvec_op2_fpst,
90
TRANS(FCVTZU_vf, do_gvec_op2_fpst,
91
a->esz, a->q, a->rd, a->rn, a->shift, f_fcvtzu_vf)
91
a->esz, a->q, a->rd, a->rn, a->shift, f_fcvtzu_vf)
92
92
93
-static void handle_2misc_64(DisasContext *s, int opcode, bool u,
93
-static void handle_2misc_64(DisasContext *s, int opcode, bool u,
94
- TCGv_i64 tcg_rd, TCGv_i64 tcg_rn,
94
- TCGv_i64 tcg_rd, TCGv_i64 tcg_rn,
95
- TCGv_i32 tcg_rmode, TCGv_ptr tcg_fpstatus)
95
- TCGv_i32 tcg_rmode, TCGv_ptr tcg_fpstatus)
96
-{
96
-{
97
- /* Handle 64->64 opcodes which are shared between the scalar and
97
- /* Handle 64->64 opcodes which are shared between the scalar and
98
- * vector 2-reg-misc groups. We cover every integer opcode where size == 3
98
- * vector 2-reg-misc groups. We cover every integer opcode where size == 3
99
- * is valid in either group and also the double-precision fp ops.
99
- * is valid in either group and also the double-precision fp ops.
100
- * The caller only need provide tcg_rmode and tcg_fpstatus if the op
100
- * The caller only need provide tcg_rmode and tcg_fpstatus if the op
101
- * requires them.
101
- * requires them.
102
- */
102
- */
103
- switch (opcode) {
103
- switch (opcode) {
104
- case 0x1a: /* FCVTNS */
104
- case 0x1a: /* FCVTNS */
105
- case 0x1b: /* FCVTMS */
105
- case 0x1b: /* FCVTMS */
106
- case 0x1c: /* FCVTAS */
106
- case 0x1c: /* FCVTAS */
107
- case 0x3a: /* FCVTPS */
107
- case 0x3a: /* FCVTPS */
108
- case 0x3b: /* FCVTZS */
108
- case 0x3b: /* FCVTZS */
109
- gen_helper_vfp_tosqd(tcg_rd, tcg_rn, tcg_constant_i32(0), tcg_fpstatus);
109
- gen_helper_vfp_tosqd(tcg_rd, tcg_rn, tcg_constant_i32(0), tcg_fpstatus);
110
- break;
110
- break;
111
- case 0x5a: /* FCVTNU */
111
- case 0x5a: /* FCVTNU */
112
- case 0x5b: /* FCVTMU */
112
- case 0x5b: /* FCVTMU */
113
- case 0x5c: /* FCVTAU */
113
- case 0x5c: /* FCVTAU */
114
- case 0x7a: /* FCVTPU */
114
- case 0x7a: /* FCVTPU */
115
- case 0x7b: /* FCVTZU */
115
- case 0x7b: /* FCVTZU */
116
- gen_helper_vfp_touqd(tcg_rd, tcg_rn, tcg_constant_i32(0), tcg_fpstatus);
116
- gen_helper_vfp_touqd(tcg_rd, tcg_rn, tcg_constant_i32(0), tcg_fpstatus);
117
- break;
117
- break;
118
- default:
118
- default:
119
- case 0x4: /* CLS, CLZ */
119
- case 0x4: /* CLS, CLZ */
120
- case 0x5: /* NOT */
120
- case 0x5: /* NOT */
121
- case 0x7: /* SQABS, SQNEG */
121
- case 0x7: /* SQABS, SQNEG */
122
- case 0x8: /* CMGT, CMGE */
122
- case 0x8: /* CMGT, CMGE */
123
- case 0x9: /* CMEQ, CMLE */
123
- case 0x9: /* CMEQ, CMLE */
124
- case 0xa: /* CMLT */
124
- case 0xa: /* CMLT */
125
- case 0xb: /* ABS, NEG */
125
- case 0xb: /* ABS, NEG */
126
- case 0x2f: /* FABS */
126
- case 0x2f: /* FABS */
127
- case 0x6f: /* FNEG */
127
- case 0x6f: /* FNEG */
128
- case 0x7f: /* FSQRT */
128
- case 0x7f: /* FSQRT */
129
- case 0x18: /* FRINTN */
129
- case 0x18: /* FRINTN */
130
- case 0x19: /* FRINTM */
130
- case 0x19: /* FRINTM */
131
- case 0x38: /* FRINTP */
131
- case 0x38: /* FRINTP */
132
- case 0x39: /* FRINTZ */
132
- case 0x39: /* FRINTZ */
133
- case 0x58: /* FRINTA */
133
- case 0x58: /* FRINTA */
134
- case 0x79: /* FRINTI */
134
- case 0x79: /* FRINTI */
135
- case 0x59: /* FRINTX */
135
- case 0x59: /* FRINTX */
136
- case 0x1e: /* FRINT32Z */
136
- case 0x1e: /* FRINT32Z */
137
- case 0x5e: /* FRINT32X */
137
- case 0x5e: /* FRINT32X */
138
- case 0x1f: /* FRINT64Z */
138
- case 0x1f: /* FRINT64Z */
139
- case 0x5f: /* FRINT64X */
139
- case 0x5f: /* FRINT64X */
140
- g_assert_not_reached();
140
- g_assert_not_reached();
141
- }
141
- }
142
-}
142
-}
143
+static gen_helper_gvec_2_ptr * const f_fcvt_s_vi[] = {
143
+static gen_helper_gvec_2_ptr * const f_fcvt_s_vi[] = {
144
+ gen_helper_gvec_vcvt_rm_sh,
144
+ gen_helper_gvec_vcvt_rm_sh,
145
+ gen_helper_gvec_vcvt_rm_ss,
145
+ gen_helper_gvec_vcvt_rm_ss,
146
+ gen_helper_gvec_vcvt_rm_sd,
146
+ gen_helper_gvec_vcvt_rm_sd,
147
+};
147
+};
148
+
148
+
149
+static gen_helper_gvec_2_ptr * const f_fcvt_u_vi[] = {
149
+static gen_helper_gvec_2_ptr * const f_fcvt_u_vi[] = {
150
+ gen_helper_gvec_vcvt_rm_uh,
150
+ gen_helper_gvec_vcvt_rm_uh,
151
+ gen_helper_gvec_vcvt_rm_us,
151
+ gen_helper_gvec_vcvt_rm_us,
152
+ gen_helper_gvec_vcvt_rm_ud,
152
+ gen_helper_gvec_vcvt_rm_ud,
153
+};
153
+};
154
+
154
+
155
+TRANS(FCVTNS_vi, do_gvec_op2_fpst,
155
+TRANS(FCVTNS_vi, do_gvec_op2_fpst,
156
+ a->esz, a->q, a->rd, a->rn, float_round_nearest_even, f_fcvt_s_vi)
156
+ a->esz, a->q, a->rd, a->rn, float_round_nearest_even, f_fcvt_s_vi)
157
+TRANS(FCVTNU_vi, do_gvec_op2_fpst,
157
+TRANS(FCVTNU_vi, do_gvec_op2_fpst,
158
+ a->esz, a->q, a->rd, a->rn, float_round_nearest_even, f_fcvt_u_vi)
158
+ a->esz, a->q, a->rd, a->rn, float_round_nearest_even, f_fcvt_u_vi)
159
+TRANS(FCVTPS_vi, do_gvec_op2_fpst,
159
+TRANS(FCVTPS_vi, do_gvec_op2_fpst,
160
+ a->esz, a->q, a->rd, a->rn, float_round_up, f_fcvt_s_vi)
160
+ a->esz, a->q, a->rd, a->rn, float_round_up, f_fcvt_s_vi)
161
+TRANS(FCVTPU_vi, do_gvec_op2_fpst,
161
+TRANS(FCVTPU_vi, do_gvec_op2_fpst,
162
+ a->esz, a->q, a->rd, a->rn, float_round_up, f_fcvt_u_vi)
162
+ a->esz, a->q, a->rd, a->rn, float_round_up, f_fcvt_u_vi)
163
+TRANS(FCVTMS_vi, do_gvec_op2_fpst,
163
+TRANS(FCVTMS_vi, do_gvec_op2_fpst,
164
+ a->esz, a->q, a->rd, a->rn, float_round_down, f_fcvt_s_vi)
164
+ a->esz, a->q, a->rd, a->rn, float_round_down, f_fcvt_s_vi)
165
+TRANS(FCVTMU_vi, do_gvec_op2_fpst,
165
+TRANS(FCVTMU_vi, do_gvec_op2_fpst,
166
+ a->esz, a->q, a->rd, a->rn, float_round_down, f_fcvt_u_vi)
166
+ a->esz, a->q, a->rd, a->rn, float_round_down, f_fcvt_u_vi)
167
+TRANS(FCVTZS_vi, do_gvec_op2_fpst,
167
+TRANS(FCVTZS_vi, do_gvec_op2_fpst,
168
+ a->esz, a->q, a->rd, a->rn, float_round_to_zero, f_fcvt_s_vi)
168
+ a->esz, a->q, a->rd, a->rn, float_round_to_zero, f_fcvt_s_vi)
169
+TRANS(FCVTZU_vi, do_gvec_op2_fpst,
169
+TRANS(FCVTZU_vi, do_gvec_op2_fpst,
170
+ a->esz, a->q, a->rd, a->rn, float_round_to_zero, f_fcvt_u_vi)
170
+ a->esz, a->q, a->rd, a->rn, float_round_to_zero, f_fcvt_u_vi)
171
+TRANS(FCVTAS_vi, do_gvec_op2_fpst,
171
+TRANS(FCVTAS_vi, do_gvec_op2_fpst,
172
+ a->esz, a->q, a->rd, a->rn, float_round_ties_away, f_fcvt_s_vi)
172
+ a->esz, a->q, a->rd, a->rn, float_round_ties_away, f_fcvt_s_vi)
173
+TRANS(FCVTAU_vi, do_gvec_op2_fpst,
173
+TRANS(FCVTAU_vi, do_gvec_op2_fpst,
174
+ a->esz, a->q, a->rd, a->rn, float_round_ties_away, f_fcvt_u_vi)
174
+ a->esz, a->q, a->rd, a->rn, float_round_ties_away, f_fcvt_u_vi)
175
175
176
static void handle_2misc_fcmp_zero(DisasContext *s, int opcode,
176
static void handle_2misc_fcmp_zero(DisasContext *s, int opcode,
177
bool is_scalar, bool is_u, bool is_q,
177
bool is_scalar, bool is_u, bool is_q,
178
@@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc(DisasContext *s, uint32_t insn)
178
@@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc(DisasContext *s, uint32_t insn)
179
}
179
}
180
handle_2misc_fcmp_zero(s, opcode, false, u, is_q, size, rn, rd);
180
handle_2misc_fcmp_zero(s, opcode, false, u, is_q, size, rn, rd);
181
return;
181
return;
182
- case 0x1a: /* FCVTNS */
182
- case 0x1a: /* FCVTNS */
183
- case 0x1b: /* FCVTMS */
183
- case 0x1b: /* FCVTMS */
184
- case 0x3a: /* FCVTPS */
184
- case 0x3a: /* FCVTPS */
185
- case 0x3b: /* FCVTZS */
185
- case 0x3b: /* FCVTZS */
186
- case 0x5a: /* FCVTNU */
186
- case 0x5a: /* FCVTNU */
187
- case 0x5b: /* FCVTMU */
187
- case 0x5b: /* FCVTMU */
188
- case 0x7a: /* FCVTPU */
188
- case 0x7a: /* FCVTPU */
189
- case 0x7b: /* FCVTZU */
189
- case 0x7b: /* FCVTZU */
190
- need_fpstatus = true;
190
- need_fpstatus = true;
191
- rmode = extract32(opcode, 5, 1) | (extract32(opcode, 0, 1) << 1);
191
- rmode = extract32(opcode, 5, 1) | (extract32(opcode, 0, 1) << 1);
192
- if (size == 3 && !is_q) {
192
- if (size == 3 && !is_q) {
193
- unallocated_encoding(s);
193
- unallocated_encoding(s);
194
- return;
194
- return;
195
- }
195
- }
196
- break;
196
- break;
197
- case 0x5c: /* FCVTAU */
197
- case 0x5c: /* FCVTAU */
198
- case 0x1c: /* FCVTAS */
198
- case 0x1c: /* FCVTAS */
199
- need_fpstatus = true;
199
- need_fpstatus = true;
200
- rmode = FPROUNDING_TIEAWAY;
200
- rmode = FPROUNDING_TIEAWAY;
201
- if (size == 3 && !is_q) {
201
- if (size == 3 && !is_q) {
202
- unallocated_encoding(s);
202
- unallocated_encoding(s);
203
- return;
203
- return;
204
- }
204
- }
205
- break;
205
- break;
206
case 0x3c: /* URECPE */
206
case 0x3c: /* URECPE */
207
if (size == 3) {
207
if (size == 3) {
208
unallocated_encoding(s);
208
unallocated_encoding(s);
209
@@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc(DisasContext *s, uint32_t insn)
209
@@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc(DisasContext *s, uint32_t insn)
210
case 0x5f: /* FRINT64X */
210
case 0x5f: /* FRINT64X */
211
case 0x1d: /* SCVTF */
211
case 0x1d: /* SCVTF */
212
case 0x5d: /* UCVTF */
212
case 0x5d: /* UCVTF */
213
+ case 0x1a: /* FCVTNS */
213
+ case 0x1a: /* FCVTNS */
214
+ case 0x1b: /* FCVTMS */
214
+ case 0x1b: /* FCVTMS */
215
+ case 0x3a: /* FCVTPS */
215
+ case 0x3a: /* FCVTPS */
216
+ case 0x3b: /* FCVTZS */
216
+ case 0x3b: /* FCVTZS */
217
+ case 0x5a: /* FCVTNU */
217
+ case 0x5a: /* FCVTNU */
218
+ case 0x5b: /* FCVTMU */
218
+ case 0x5b: /* FCVTMU */
219
+ case 0x7a: /* FCVTPU */
219
+ case 0x7a: /* FCVTPU */
220
+ case 0x7b: /* FCVTZU */
220
+ case 0x7b: /* FCVTZU */
221
+ case 0x5c: /* FCVTAU */
221
+ case 0x5c: /* FCVTAU */
222
+ case 0x1c: /* FCVTAS */
222
+ case 0x1c: /* FCVTAS */
223
unallocated_encoding(s);
223
unallocated_encoding(s);
224
return;
224
return;
225
}
225
}
226
@@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc(DisasContext *s, uint32_t insn)
226
@@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc(DisasContext *s, uint32_t insn)
227
tcg_rmode = NULL;
227
tcg_rmode = NULL;
228
}
228
}
229
229
230
- if (size == 3) {
230
- if (size == 3) {
231
- /* All 64-bit element operations can be shared with scalar 2misc */
231
- /* All 64-bit element operations can be shared with scalar 2misc */
232
- int pass;
232
- int pass;
233
-
233
-
234
- /* Coverity claims (size == 3 && !is_q) has been eliminated
234
- /* Coverity claims (size == 3 && !is_q) has been eliminated
235
- * from all paths leading to here.
235
- * from all paths leading to here.
236
- */
236
- */
237
- tcg_debug_assert(is_q);
237
- tcg_debug_assert(is_q);
238
- for (pass = 0; pass < 2; pass++) {
238
- for (pass = 0; pass < 2; pass++) {
239
- TCGv_i64 tcg_op = tcg_temp_new_i64();
239
- TCGv_i64 tcg_op = tcg_temp_new_i64();
240
- TCGv_i64 tcg_res = tcg_temp_new_i64();
240
- TCGv_i64 tcg_res = tcg_temp_new_i64();
241
-
241
-
242
- read_vec_element(s, tcg_op, rn, pass, MO_64);
242
- read_vec_element(s, tcg_op, rn, pass, MO_64);
243
-
243
-
244
- handle_2misc_64(s, opcode, u, tcg_res, tcg_op,
244
- handle_2misc_64(s, opcode, u, tcg_res, tcg_op,
245
- tcg_rmode, tcg_fpstatus);
245
- tcg_rmode, tcg_fpstatus);
246
-
246
-
247
- write_vec_element(s, tcg_res, rd, pass, MO_64);
247
- write_vec_element(s, tcg_res, rd, pass, MO_64);
248
- }
248
- }
249
- } else {
249
- } else {
250
+ {
250
+ {
251
int pass;
251
int pass;
252
252
253
assert(size == 2);
253
assert(size == 2);
254
@@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc(DisasContext *s, uint32_t insn)
254
@@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc(DisasContext *s, uint32_t insn)
255
{
255
{
256
/* Special cases for 32 bit elements */
256
/* Special cases for 32 bit elements */
257
switch (opcode) {
257
switch (opcode) {
258
- case 0x1a: /* FCVTNS */
258
- case 0x1a: /* FCVTNS */
259
- case 0x1b: /* FCVTMS */
259
- case 0x1b: /* FCVTMS */
260
- case 0x1c: /* FCVTAS */
260
- case 0x1c: /* FCVTAS */
261
- case 0x3a: /* FCVTPS */
261
- case 0x3a: /* FCVTPS */
262
- case 0x3b: /* FCVTZS */
262
- case 0x3b: /* FCVTZS */
263
- gen_helper_vfp_tosls(tcg_res, tcg_op,
263
- gen_helper_vfp_tosls(tcg_res, tcg_op,
264
- tcg_constant_i32(0), tcg_fpstatus);
264
- tcg_constant_i32(0), tcg_fpstatus);
265
- break;
265
- break;
266
- case 0x5a: /* FCVTNU */
266
- case 0x5a: /* FCVTNU */
267
- case 0x5b: /* FCVTMU */
267
- case 0x5b: /* FCVTMU */
268
- case 0x5c: /* FCVTAU */
268
- case 0x5c: /* FCVTAU */
269
- case 0x7a: /* FCVTPU */
269
- case 0x7a: /* FCVTPU */
270
- case 0x7b: /* FCVTZU */
270
- case 0x7b: /* FCVTZU */
271
- gen_helper_vfp_touls(tcg_res, tcg_op,
271
- gen_helper_vfp_touls(tcg_res, tcg_op,
272
- tcg_constant_i32(0), tcg_fpstatus);
272
- tcg_constant_i32(0), tcg_fpstatus);
273
- break;
273
- break;
274
case 0x7c: /* URSQRTE */
274
case 0x7c: /* URSQRTE */
275
gen_helper_rsqrte_u32(tcg_res, tcg_op);
275
gen_helper_rsqrte_u32(tcg_res, tcg_op);
276
break;
276
break;
277
@@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc(DisasContext *s, uint32_t insn)
277
@@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc(DisasContext *s, uint32_t insn)
278
case 0x5e: /* FRINT32X */
278
case 0x5e: /* FRINT32X */
279
case 0x1f: /* FRINT64Z */
279
case 0x1f: /* FRINT64Z */
280
case 0x5f: /* FRINT64X */
280
case 0x5f: /* FRINT64X */
281
+ case 0x1a: /* FCVTNS */
281
+ case 0x1a: /* FCVTNS */
282
+ case 0x1b: /* FCVTMS */
282
+ case 0x1b: /* FCVTMS */
283
+ case 0x1c: /* FCVTAS */
283
+ case 0x1c: /* FCVTAS */
284
+ case 0x3a: /* FCVTPS */
284
+ case 0x3a: /* FCVTPS */
285
+ case 0x3b: /* FCVTZS */
285
+ case 0x3b: /* FCVTZS */
286
+ case 0x5a: /* FCVTNU */
286
+ case 0x5a: /* FCVTNU */
287
+ case 0x5b: /* FCVTMU */
287
+ case 0x5b: /* FCVTMU */
288
+ case 0x5c: /* FCVTAU */
288
+ case 0x5c: /* FCVTAU */
289
+ case 0x7a: /* FCVTPU */
289
+ case 0x7a: /* FCVTPU */
290
+ case 0x7b: /* FCVTZU */
290
+ case 0x7b: /* FCVTZU */
291
g_assert_not_reached();
291
g_assert_not_reached();
292
}
292
}
293
}
293
}
294
@@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc_fp16(DisasContext *s, uint32_t insn)
294
@@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc_fp16(DisasContext *s, uint32_t insn)
295
case 0x3d: /* FRECPE */
295
case 0x3d: /* FRECPE */
296
case 0x3f: /* FRECPX */
296
case 0x3f: /* FRECPX */
297
break;
297
break;
298
- case 0x1a: /* FCVTNS */
298
- case 0x1a: /* FCVTNS */
299
- rmode = FPROUNDING_TIEEVEN;
299
- rmode = FPROUNDING_TIEEVEN;
300
- break;
300
- break;
301
- case 0x1b: /* FCVTMS */
301
- case 0x1b: /* FCVTMS */
302
- rmode = FPROUNDING_NEGINF;
302
- rmode = FPROUNDING_NEGINF;
303
- break;
303
- break;
304
- case 0x1c: /* FCVTAS */
304
- case 0x1c: /* FCVTAS */
305
- rmode = FPROUNDING_TIEAWAY;
305
- rmode = FPROUNDING_TIEAWAY;
306
- break;
306
- break;
307
- case 0x3a: /* FCVTPS */
307
- case 0x3a: /* FCVTPS */
308
- rmode = FPROUNDING_POSINF;
308
- rmode = FPROUNDING_POSINF;
309
- break;
309
- break;
310
- case 0x3b: /* FCVTZS */
310
- case 0x3b: /* FCVTZS */
311
- rmode = FPROUNDING_ZERO;
311
- rmode = FPROUNDING_ZERO;
312
- break;
312
- break;
313
- case 0x5a: /* FCVTNU */
313
- case 0x5a: /* FCVTNU */
314
- rmode = FPROUNDING_TIEEVEN;
314
- rmode = FPROUNDING_TIEEVEN;
315
- break;
315
- break;
316
- case 0x5b: /* FCVTMU */
316
- case 0x5b: /* FCVTMU */
317
- rmode = FPROUNDING_NEGINF;
317
- rmode = FPROUNDING_NEGINF;
318
- break;
318
- break;
319
- case 0x5c: /* FCVTAU */
319
- case 0x5c: /* FCVTAU */
320
- rmode = FPROUNDING_TIEAWAY;
320
- rmode = FPROUNDING_TIEAWAY;
321
- break;
321
- break;
322
- case 0x7a: /* FCVTPU */
322
- case 0x7a: /* FCVTPU */
323
- rmode = FPROUNDING_POSINF;
323
- rmode = FPROUNDING_POSINF;
324
- break;
324
- break;
325
- case 0x7b: /* FCVTZU */
325
- case 0x7b: /* FCVTZU */
326
- rmode = FPROUNDING_ZERO;
326
- rmode = FPROUNDING_ZERO;
327
- break;
327
- break;
328
case 0x7d: /* FRSQRTE */
328
case 0x7d: /* FRSQRTE */
329
break;
329
break;
330
default:
330
default:
331
@@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc_fp16(DisasContext *s, uint32_t insn)
331
@@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc_fp16(DisasContext *s, uint32_t insn)
332
case 0x79: /* FRINTI */
332
case 0x79: /* FRINTI */
333
case 0x1d: /* SCVTF */
333
case 0x1d: /* SCVTF */
334
case 0x5d: /* UCVTF */
334
case 0x5d: /* UCVTF */
335
+ case 0x1a: /* FCVTNS */
335
+ case 0x1a: /* FCVTNS */
336
+ case 0x1b: /* FCVTMS */
336
+ case 0x1b: /* FCVTMS */
337
+ case 0x1c: /* FCVTAS */
337
+ case 0x1c: /* FCVTAS */
338
+ case 0x3a: /* FCVTPS */
338
+ case 0x3a: /* FCVTPS */
339
+ case 0x3b: /* FCVTZS */
339
+ case 0x3b: /* FCVTZS */
340
+ case 0x5a: /* FCVTNU */
340
+ case 0x5a: /* FCVTNU */
341
+ case 0x5b: /* FCVTMU */
341
+ case 0x5b: /* FCVTMU */
342
+ case 0x5c: /* FCVTAU */
342
+ case 0x5c: /* FCVTAU */
343
+ case 0x7a: /* FCVTPU */
343
+ case 0x7a: /* FCVTPU */
344
+ case 0x7b: /* FCVTZU */
344
+ case 0x7b: /* FCVTZU */
345
unallocated_encoding(s);
345
unallocated_encoding(s);
346
return;
346
return;
347
}
347
}
348
@@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc_fp16(DisasContext *s, uint32_t insn)
348
@@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc_fp16(DisasContext *s, uint32_t insn)
349
read_vec_element_i32(s, tcg_op, rn, pass, MO_16);
349
read_vec_element_i32(s, tcg_op, rn, pass, MO_16);
350
350
351
switch (fpop) {
351
switch (fpop) {
352
- case 0x1a: /* FCVTNS */
352
- case 0x1a: /* FCVTNS */
353
- case 0x1b: /* FCVTMS */
353
- case 0x1b: /* FCVTMS */
354
- case 0x1c: /* FCVTAS */
354
- case 0x1c: /* FCVTAS */
355
- case 0x3a: /* FCVTPS */
355
- case 0x3a: /* FCVTPS */
356
- case 0x3b: /* FCVTZS */
356
- case 0x3b: /* FCVTZS */
357
- gen_helper_advsimd_f16tosinth(tcg_res, tcg_op, tcg_fpstatus);
357
- gen_helper_advsimd_f16tosinth(tcg_res, tcg_op, tcg_fpstatus);
358
- break;
358
- break;
359
case 0x3d: /* FRECPE */
359
case 0x3d: /* FRECPE */
360
gen_helper_recpe_f16(tcg_res, tcg_op, tcg_fpstatus);
360
gen_helper_recpe_f16(tcg_res, tcg_op, tcg_fpstatus);
361
break;
361
break;
362
- case 0x5a: /* FCVTNU */
362
- case 0x5a: /* FCVTNU */
363
- case 0x5b: /* FCVTMU */
363
- case 0x5b: /* FCVTMU */
364
- case 0x5c: /* FCVTAU */
364
- case 0x5c: /* FCVTAU */
365
- case 0x7a: /* FCVTPU */
365
- case 0x7a: /* FCVTPU */
366
- case 0x7b: /* FCVTZU */
366
- case 0x7b: /* FCVTZU */
367
- gen_helper_advsimd_f16touinth(tcg_res, tcg_op, tcg_fpstatus);
367
- gen_helper_advsimd_f16touinth(tcg_res, tcg_op, tcg_fpstatus);
368
- break;
368
- break;
369
case 0x7d: /* FRSQRTE */
369
case 0x7d: /* FRSQRTE */
370
gen_helper_rsqrte_f16(tcg_res, tcg_op, tcg_fpstatus);
370
gen_helper_rsqrte_f16(tcg_res, tcg_op, tcg_fpstatus);
371
break;
371
break;
372
@@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc_fp16(DisasContext *s, uint32_t insn)
372
@@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc_fp16(DisasContext *s, uint32_t insn)
373
case 0x58: /* FRINTA */
373
case 0x58: /* FRINTA */
374
case 0x79: /* FRINTI */
374
case 0x79: /* FRINTI */
375
case 0x59: /* FRINTX */
375
case 0x59: /* FRINTX */
376
+ case 0x1a: /* FCVTNS */
376
+ case 0x1a: /* FCVTNS */
377
+ case 0x1b: /* FCVTMS */
377
+ case 0x1b: /* FCVTMS */
378
+ case 0x1c: /* FCVTAS */
378
+ case 0x1c: /* FCVTAS */
379
+ case 0x3a: /* FCVTPS */
379
+ case 0x3a: /* FCVTPS */
380
+ case 0x3b: /* FCVTZS */
380
+ case 0x3b: /* FCVTZS */
381
+ case 0x5a: /* FCVTNU */
381
+ case 0x5a: /* FCVTNU */
382
+ case 0x5b: /* FCVTMU */
382
+ case 0x5b: /* FCVTMU */
383
+ case 0x5c: /* FCVTAU */
383
+ case 0x5c: /* FCVTAU */
384
+ case 0x7a: /* FCVTPU */
384
+ case 0x7a: /* FCVTPU */
385
+ case 0x7b: /* FCVTZU */
385
+ case 0x7b: /* FCVTZU */
386
g_assert_not_reached();
386
g_assert_not_reached();
387
}
387
}
388
388
389
diff --git a/target/arm/tcg/vec_helper.c b/target/arm/tcg/vec_helper.c
389
diff --git a/target/arm/tcg/vec_helper.c b/target/arm/tcg/vec_helper.c
390
index XXXXXXX..XXXXXXX 100644
390
index XXXXXXX..XXXXXXX 100644
391
--- a/target/arm/tcg/vec_helper.c
391
--- a/target/arm/tcg/vec_helper.c
392
+++ b/target/arm/tcg/vec_helper.c
392
+++ b/target/arm/tcg/vec_helper.c
393
@@ -XXX,XX +XXX,XX @@ DO_VCVT_FIXED(gvec_vcvt_rz_hu, helper_vfp_touhh_round_to_zero, uint16_t)
393
@@ -XXX,XX +XXX,XX @@ DO_VCVT_FIXED(gvec_vcvt_rz_hu, helper_vfp_touhh_round_to_zero, uint16_t)
394
clear_tail(d, oprsz, simd_maxsz(desc)); \
394
clear_tail(d, oprsz, simd_maxsz(desc)); \
395
}
395
}
396
396
397
+DO_VCVT_RMODE(gvec_vcvt_rm_sd, helper_vfp_tosqd, uint64_t)
397
+DO_VCVT_RMODE(gvec_vcvt_rm_sd, helper_vfp_tosqd, uint64_t)
398
+DO_VCVT_RMODE(gvec_vcvt_rm_ud, helper_vfp_touqd, uint64_t)
398
+DO_VCVT_RMODE(gvec_vcvt_rm_ud, helper_vfp_touqd, uint64_t)
399
DO_VCVT_RMODE(gvec_vcvt_rm_ss, helper_vfp_tosls, uint32_t)
399
DO_VCVT_RMODE(gvec_vcvt_rm_ss, helper_vfp_tosls, uint32_t)
400
DO_VCVT_RMODE(gvec_vcvt_rm_us, helper_vfp_touls, uint32_t)
400
DO_VCVT_RMODE(gvec_vcvt_rm_us, helper_vfp_touls, uint32_t)
401
DO_VCVT_RMODE(gvec_vcvt_rm_sh, helper_vfp_toshh, uint16_t)
401
DO_VCVT_RMODE(gvec_vcvt_rm_sh, helper_vfp_toshh, uint16_t)
402
diff --git a/target/arm/tcg/a64.decode b/target/arm/tcg/a64.decode
402
diff --git a/target/arm/tcg/a64.decode b/target/arm/tcg/a64.decode
403
index XXXXXXX..XXXXXXX 100644
403
index XXXXXXX..XXXXXXX 100644
404
--- a/target/arm/tcg/a64.decode
404
--- a/target/arm/tcg/a64.decode
405
+++ b/target/arm/tcg/a64.decode
405
+++ b/target/arm/tcg/a64.decode
406
@@ -XXX,XX +XXX,XX @@ SCVTF_vi 0.00 1110 0.1 00001 11011 0 ..... ..... @qrr_sd
406
@@ -XXX,XX +XXX,XX @@ SCVTF_vi 0.00 1110 0.1 00001 11011 0 ..... ..... @qrr_sd
407
UCVTF_vi 0.10 1110 011 11001 11011 0 ..... ..... @qrr_h
407
UCVTF_vi 0.10 1110 011 11001 11011 0 ..... ..... @qrr_h
408
UCVTF_vi 0.10 1110 0.1 00001 11011 0 ..... ..... @qrr_sd
408
UCVTF_vi 0.10 1110 0.1 00001 11011 0 ..... ..... @qrr_sd
409
409
410
+FCVTNS_vi 0.00 1110 011 11001 10101 0 ..... ..... @qrr_h
410
+FCVTNS_vi 0.00 1110 011 11001 10101 0 ..... ..... @qrr_h
411
+FCVTNS_vi 0.00 1110 0.1 00001 10101 0 ..... ..... @qrr_sd
411
+FCVTNS_vi 0.00 1110 0.1 00001 10101 0 ..... ..... @qrr_sd
412
+FCVTNU_vi 0.10 1110 011 11001 10101 0 ..... ..... @qrr_h
412
+FCVTNU_vi 0.10 1110 011 11001 10101 0 ..... ..... @qrr_h
413
+FCVTNU_vi 0.10 1110 0.1 00001 10101 0 ..... ..... @qrr_sd
413
+FCVTNU_vi 0.10 1110 0.1 00001 10101 0 ..... ..... @qrr_sd
414
+
414
+
415
+FCVTPS_vi 0.00 1110 111 11001 10101 0 ..... ..... @qrr_h
415
+FCVTPS_vi 0.00 1110 111 11001 10101 0 ..... ..... @qrr_h
416
+FCVTPS_vi 0.00 1110 1.1 00001 10101 0 ..... ..... @qrr_sd
416
+FCVTPS_vi 0.00 1110 1.1 00001 10101 0 ..... ..... @qrr_sd
417
+FCVTPU_vi 0.10 1110 111 11001 10101 0 ..... ..... @qrr_h
417
+FCVTPU_vi 0.10 1110 111 11001 10101 0 ..... ..... @qrr_h
418
+FCVTPU_vi 0.10 1110 1.1 00001 10101 0 ..... ..... @qrr_sd
418
+FCVTPU_vi 0.10 1110 1.1 00001 10101 0 ..... ..... @qrr_sd
419
+
419
+
420
+FCVTMS_vi 0.00 1110 011 11001 10111 0 ..... ..... @qrr_h
420
+FCVTMS_vi 0.00 1110 011 11001 10111 0 ..... ..... @qrr_h
421
+FCVTMS_vi 0.00 1110 0.1 00001 10111 0 ..... ..... @qrr_sd
421
+FCVTMS_vi 0.00 1110 0.1 00001 10111 0 ..... ..... @qrr_sd
422
+FCVTMU_vi 0.10 1110 011 11001 10111 0 ..... ..... @qrr_h
422
+FCVTMU_vi 0.10 1110 011 11001 10111 0 ..... ..... @qrr_h
423
+FCVTMU_vi 0.10 1110 0.1 00001 10111 0 ..... ..... @qrr_sd
423
+FCVTMU_vi 0.10 1110 0.1 00001 10111 0 ..... ..... @qrr_sd
424
+
424
+
425
+FCVTZS_vi 0.00 1110 111 11001 10111 0 ..... ..... @qrr_h
425
+FCVTZS_vi 0.00 1110 111 11001 10111 0 ..... ..... @qrr_h
426
+FCVTZS_vi 0.00 1110 1.1 00001 10111 0 ..... ..... @qrr_sd
426
+FCVTZS_vi 0.00 1110 1.1 00001 10111 0 ..... ..... @qrr_sd
427
+FCVTZU_vi 0.10 1110 111 11001 10111 0 ..... ..... @qrr_h
427
+FCVTZU_vi 0.10 1110 111 11001 10111 0 ..... ..... @qrr_h
428
+FCVTZU_vi 0.10 1110 1.1 00001 10111 0 ..... ..... @qrr_sd
428
+FCVTZU_vi 0.10 1110 1.1 00001 10111 0 ..... ..... @qrr_sd
429
+
429
+
430
+FCVTAS_vi 0.00 1110 011 11001 11001 0 ..... ..... @qrr_h
430
+FCVTAS_vi 0.00 1110 011 11001 11001 0 ..... ..... @qrr_h
431
+FCVTAS_vi 0.00 1110 0.1 00001 11001 0 ..... ..... @qrr_sd
431
+FCVTAS_vi 0.00 1110 0.1 00001 11001 0 ..... ..... @qrr_sd
432
+FCVTAU_vi 0.10 1110 011 11001 11001 0 ..... ..... @qrr_h
432
+FCVTAU_vi 0.10 1110 011 11001 11001 0 ..... ..... @qrr_h
433
+FCVTAU_vi 0.10 1110 0.1 00001 11001 0 ..... ..... @qrr_sd
433
+FCVTAU_vi 0.10 1110 0.1 00001 11001 0 ..... ..... @qrr_sd
434
+
434
+
435
&fcvt_q rd rn esz q shift
435
&fcvt_q rd rn esz q shift
436
@fcvtq_h . q:1 . ...... 001 .... ...... rn:5 rd:5 \
436
@fcvtq_h . q:1 . ...... 001 .... ...... rn:5 rd:5 \
437
&fcvt_q esz=1 shift=%fcvt_f_sh_h
437
&fcvt_q esz=1 shift=%fcvt_f_sh_h
438
--
438
--
439
2.43.0
439
2.43.0
diff view generated by jsdifflib
1
This includes FCMEQ, FCMGT, FCMGE, FCMLT, FCMLE.
1
This includes FCMEQ, FCMGT, FCMGE, FCMLT, FCMLE.
2
2
3
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
3
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
4
---
5
---
5
target/arm/helper.h | 5 +
6
target/arm/helper.h | 5 +
6
target/arm/tcg/translate-a64.c | 249 +++++++++++++--------------------
7
target/arm/tcg/translate-a64.c | 249 +++++++++++++--------------------
7
target/arm/tcg/vec_helper.c | 4 +-
8
target/arm/tcg/vec_helper.c | 4 +-
...
...
diff view generated by jsdifflib
1
Remove disas_simd_scalar_two_reg_misc and
1
Remove disas_simd_scalar_two_reg_misc and
2
disas_simd_two_reg_misc_fp16 as these were the
2
disas_simd_two_reg_misc_fp16 as these were the
3
last insns decoded by those functions.
3
last insns decoded by those functions.
4
4
5
Reviewed-by: Peter Maydell <peter.maydell@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/arm/tcg/translate-a64.c | 330 ++++-----------------------------
8
target/arm/tcg/translate-a64.c | 329 ++++-----------------------------
8
target/arm/tcg/a64.decode | 15 ++
9
target/arm/tcg/a64.decode | 15 ++
9
2 files changed, 53 insertions(+), 292 deletions(-)
10
2 files changed, 53 insertions(+), 291 deletions(-)
10
11
11
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
12
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
12
index XXXXXXX..XXXXXXX 100644
13
index XXXXXXX..XXXXXXX 100644
13
--- a/target/arm/tcg/translate-a64.c
14
--- a/target/arm/tcg/translate-a64.c
14
+++ b/target/arm/tcg/translate-a64.c
15
+++ b/target/arm/tcg/translate-a64.c
...
...
327
- break;
328
- break;
328
- case 0x7d: /* FRSQRTE */
329
- case 0x7d: /* FRSQRTE */
329
- gen_helper_rsqrte_f16(tcg_res, tcg_op, tcg_fpstatus);
330
- gen_helper_rsqrte_f16(tcg_res, tcg_op, tcg_fpstatus);
330
- break;
331
- break;
331
- default:
332
- default:
332
- case 0x6f: /* FNEG */
333
- case 0x1a: /* FCVTNS */
333
- case 0x1a: /* FCVTNS */
334
- case 0x1b: /* FCVTMS */
334
- case 0x1b: /* FCVTMS */
335
- case 0x1c: /* FCVTAS */
335
- case 0x1c: /* FCVTAS */
336
- case 0x3a: /* FCVTPS */
336
- case 0x3a: /* FCVTPS */
337
- case 0x3b: /* FCVTZS */
337
- case 0x3b: /* FCVTZS */
...
...
diff view generated by jsdifflib
...
...
23
#include "tcg/helper-sve.h"
23
#include "tcg/helper-sve.h"
24
diff --git a/target/arm/tcg/translate.h b/target/arm/tcg/translate.h
24
diff --git a/target/arm/tcg/translate.h b/target/arm/tcg/translate.h
25
index XXXXXXX..XXXXXXX 100644
25
index XXXXXXX..XXXXXXX 100644
26
--- a/target/arm/tcg/translate.h
26
--- a/target/arm/tcg/translate.h
27
+++ b/target/arm/tcg/translate.h
27
+++ b/target/arm/tcg/translate.h
28
@@ -XXX,XX +XXX,XX @@ void gen_gvec_uaddlp(unsigned vece, uint32_t rd_ofs, uint32_t rn_ofs,
28
@@ -XXX,XX +XXX,XX @@ void gen_gvec_fabs(unsigned vece, uint32_t dofs, uint32_t aofs,
29
void gen_gvec_uadalp(unsigned vece, uint32_t rd_ofs, uint32_t rn_ofs,
29
void gen_gvec_fneg(unsigned vece, uint32_t dofs, uint32_t aofs,
30
uint32_t opr_sz, uint32_t max_sz);
30
uint32_t oprsz, uint32_t maxsz);
31
31
32
+void gen_gvec_urecpe(unsigned vece, uint32_t rd_ofs, uint32_t rn_ofs,
32
+void gen_gvec_urecpe(unsigned vece, uint32_t rd_ofs, uint32_t rn_ofs,
33
+ uint32_t opr_sz, uint32_t max_sz);
33
+ uint32_t opr_sz, uint32_t max_sz);
34
+void gen_gvec_ursqrte(unsigned vece, uint32_t rd_ofs, uint32_t rn_ofs,
34
+void gen_gvec_ursqrte(unsigned vece, uint32_t rd_ofs, uint32_t rn_ofs,
35
+ uint32_t opr_sz, uint32_t max_sz);
35
+ uint32_t opr_sz, uint32_t max_sz);
...
...
39
*/
39
*/
40
diff --git a/target/arm/tcg/gengvec.c b/target/arm/tcg/gengvec.c
40
diff --git a/target/arm/tcg/gengvec.c b/target/arm/tcg/gengvec.c
41
index XXXXXXX..XXXXXXX 100644
41
index XXXXXXX..XXXXXXX 100644
42
--- a/target/arm/tcg/gengvec.c
42
--- a/target/arm/tcg/gengvec.c
43
+++ b/target/arm/tcg/gengvec.c
43
+++ b/target/arm/tcg/gengvec.c
44
@@ -XXX,XX +XXX,XX @@ void gen_gvec_uadalp(unsigned vece, uint32_t rd_ofs, uint32_t rn_ofs,
44
@@ -XXX,XX +XXX,XX @@ void gen_gvec_fneg(unsigned vece, uint32_t dofs, uint32_t aofs,
45
assert(vece <= MO_32);
45
uint64_t s_bit = 1ull << ((8 << vece) - 1);
46
tcg_gen_gvec_2(rd_ofs, rn_ofs, opr_sz, max_sz, &g[vece]);
46
tcg_gen_gvec_xori(vece, dofs, aofs, s_bit, oprsz, maxsz);
47
}
47
}
48
+
48
+
49
+void gen_gvec_urecpe(unsigned vece, uint32_t rd_ofs, uint32_t rn_ofs,
49
+void gen_gvec_urecpe(unsigned vece, uint32_t rd_ofs, uint32_t rn_ofs,
50
+ uint32_t opr_sz, uint32_t max_sz)
50
+ uint32_t opr_sz, uint32_t max_sz)
51
+{
51
+{
...
...
diff view generated by jsdifflib
1
Remove handle_2misc_reciprocal as these were the last
1
Remove handle_2misc_reciprocal as these were the last
2
insns decoded by that function.
2
insns decoded by that function.
3
3
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-a64.c | 139 ++-------------------------------
6
target/arm/tcg/translate-a64.c | 139 ++-------------------------------
7
target/arm/tcg/a64.decode | 3 +
7
target/arm/tcg/a64.decode | 3 +
8
2 files changed, 8 insertions(+), 134 deletions(-)
8
2 files changed, 8 insertions(+), 134 deletions(-)
9
9
10
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
10
diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c
11
index XXXXXXX..XXXXXXX 100644
11
index XXXXXXX..XXXXXXX 100644
12
--- a/target/arm/tcg/translate-a64.c
12
--- a/target/arm/tcg/translate-a64.c
13
+++ b/target/arm/tcg/translate-a64.c
13
+++ b/target/arm/tcg/translate-a64.c
14
@@ -XXX,XX +XXX,XX @@ TRANS(CMLE0_v, do_gvec_fn2, a, gen_gvec_cle0)
14
@@ -XXX,XX +XXX,XX @@ TRANS(CMLE0_v, do_gvec_fn2, a, gen_gvec_cle0)
15
TRANS(CMEQ0_v, do_gvec_fn2, a, gen_gvec_ceq0)
15
TRANS(CMEQ0_v, do_gvec_fn2, a, gen_gvec_ceq0)
16
TRANS(REV16_v, do_gvec_fn2, a, gen_gvec_rev16)
16
TRANS(REV16_v, do_gvec_fn2, a, gen_gvec_rev16)
17
TRANS(REV32_v, do_gvec_fn2, a, gen_gvec_rev32)
17
TRANS(REV32_v, do_gvec_fn2, a, gen_gvec_rev32)
18
+TRANS(URECPE_v, do_gvec_fn2, a, gen_gvec_urecpe)
18
+TRANS(URECPE_v, do_gvec_fn2, a, gen_gvec_urecpe)
19
+TRANS(URSQRTE_v, do_gvec_fn2, a, gen_gvec_ursqrte)
19
+TRANS(URSQRTE_v, do_gvec_fn2, a, gen_gvec_ursqrte)
20
20
21
static bool do_gvec_fn2_bhs(DisasContext *s, arg_qrr_e *a, GVecGen2Fn *fn)
21
static bool do_gvec_fn2_bhs(DisasContext *s, arg_qrr_e *a, GVecGen2Fn *fn)
22
{
22
{
23
@@ -XXX,XX +XXX,XX @@ static gen_helper_gvec_2_ptr * const f_frsqrte[] = {
23
@@ -XXX,XX +XXX,XX @@ static gen_helper_gvec_2_ptr * const f_frsqrte[] = {
24
};
24
};
25
TRANS(FRSQRTE_v, do_gvec_op2_fpst, a->esz, a->q, a->rd, a->rn, 0, f_frsqrte)
25
TRANS(FRSQRTE_v, do_gvec_op2_fpst, a->esz, a->q, a->rd, a->rn, 0, f_frsqrte)
26
26
27
-static void handle_2misc_reciprocal(DisasContext *s, int opcode,
27
-static void handle_2misc_reciprocal(DisasContext *s, int opcode,
28
- bool is_scalar, bool is_u, bool is_q,
28
- bool is_scalar, bool is_u, bool is_q,
29
- int size, int rn, int rd)
29
- int size, int rn, int rd)
30
-{
30
-{
31
- bool is_double = (size == 3);
31
- bool is_double = (size == 3);
32
-
32
-
33
- if (is_double) {
33
- if (is_double) {
34
- g_assert_not_reached();
34
- g_assert_not_reached();
35
- } else {
35
- } else {
36
- TCGv_i32 tcg_op = tcg_temp_new_i32();
36
- TCGv_i32 tcg_op = tcg_temp_new_i32();
37
- TCGv_i32 tcg_res = tcg_temp_new_i32();
37
- TCGv_i32 tcg_res = tcg_temp_new_i32();
38
- int pass, maxpasses;
38
- int pass, maxpasses;
39
-
39
-
40
- if (is_scalar) {
40
- if (is_scalar) {
41
- maxpasses = 1;
41
- maxpasses = 1;
42
- } else {
42
- } else {
43
- maxpasses = is_q ? 4 : 2;
43
- maxpasses = is_q ? 4 : 2;
44
- }
44
- }
45
-
45
-
46
- for (pass = 0; pass < maxpasses; pass++) {
46
- for (pass = 0; pass < maxpasses; pass++) {
47
- read_vec_element_i32(s, tcg_op, rn, pass, MO_32);
47
- read_vec_element_i32(s, tcg_op, rn, pass, MO_32);
48
-
48
-
49
- switch (opcode) {
49
- switch (opcode) {
50
- case 0x3c: /* URECPE */
50
- case 0x3c: /* URECPE */
51
- gen_helper_recpe_u32(tcg_res, tcg_op);
51
- gen_helper_recpe_u32(tcg_res, tcg_op);
52
- break;
52
- break;
53
- case 0x3d: /* FRECPE */
53
- case 0x3d: /* FRECPE */
54
- case 0x3f: /* FRECPX */
54
- case 0x3f: /* FRECPX */
55
- case 0x7d: /* FRSQRTE */
55
- case 0x7d: /* FRSQRTE */
56
- default:
56
- default:
57
- g_assert_not_reached();
57
- g_assert_not_reached();
58
- }
58
- }
59
-
59
-
60
- if (is_scalar) {
60
- if (is_scalar) {
61
- write_fp_sreg(s, rd, tcg_res);
61
- write_fp_sreg(s, rd, tcg_res);
62
- } else {
62
- } else {
63
- write_vec_element_i32(s, tcg_res, rd, pass, MO_32);
63
- write_vec_element_i32(s, tcg_res, rd, pass, MO_32);
64
- }
64
- }
65
- }
65
- }
66
- if (!is_scalar) {
66
- if (!is_scalar) {
67
- clear_vec_high(s, is_q, rd);
67
- clear_vec_high(s, is_q, rd);
68
- }
68
- }
69
- }
69
- }
70
-}
70
-}
71
-
71
-
72
static void handle_2misc_widening(DisasContext *s, int opcode, bool is_q,
72
static void handle_2misc_widening(DisasContext *s, int opcode, bool is_q,
73
int size, int rn, int rd)
73
int size, int rn, int rd)
74
{
74
{
75
@@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc(DisasContext *s, uint32_t insn)
75
@@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc(DisasContext *s, uint32_t insn)
76
bool is_q = extract32(insn, 30, 1);
76
bool is_q = extract32(insn, 30, 1);
77
int rn = extract32(insn, 5, 5);
77
int rn = extract32(insn, 5, 5);
78
int rd = extract32(insn, 0, 5);
78
int rd = extract32(insn, 0, 5);
79
- bool need_fpstatus = false;
79
- bool need_fpstatus = false;
80
- int rmode = -1;
80
- int rmode = -1;
81
- TCGv_i32 tcg_rmode;
81
- TCGv_i32 tcg_rmode;
82
- TCGv_ptr tcg_fpstatus;
82
- TCGv_ptr tcg_fpstatus;
83
83
84
switch (opcode) {
84
switch (opcode) {
85
case 0xc ... 0xf:
85
case 0xc ... 0xf:
86
@@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc(DisasContext *s, uint32_t insn)
86
@@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc(DisasContext *s, uint32_t insn)
87
opcode |= (extract32(size, 1, 1) << 5) | (u << 6);
87
opcode |= (extract32(size, 1, 1) << 5) | (u << 6);
88
size = is_double ? 3 : 2;
88
size = is_double ? 3 : 2;
89
switch (opcode) {
89
switch (opcode) {
90
- case 0x3c: /* URECPE */
90
- case 0x3c: /* URECPE */
91
- if (size == 3) {
91
- if (size == 3) {
92
- unallocated_encoding(s);
92
- unallocated_encoding(s);
93
- return;
93
- return;
94
- }
94
- }
95
- if (!fp_access_check(s)) {
95
- if (!fp_access_check(s)) {
96
- return;
96
- return;
97
- }
97
- }
98
- handle_2misc_reciprocal(s, opcode, false, u, is_q, size, rn, rd);
98
- handle_2misc_reciprocal(s, opcode, false, u, is_q, size, rn, rd);
99
- return;
99
- return;
100
case 0x17: /* FCVTL, FCVTL2 */
100
case 0x17: /* FCVTL, FCVTL2 */
101
if (!fp_access_check(s)) {
101
if (!fp_access_check(s)) {
102
return;
102
return;
103
}
103
}
104
handle_2misc_widening(s, opcode, is_q, size, rn, rd);
104
handle_2misc_widening(s, opcode, is_q, size, rn, rd);
105
return;
105
return;
106
- case 0x7c: /* URSQRTE */
106
- case 0x7c: /* URSQRTE */
107
- if (size == 3) {
107
- if (size == 3) {
108
- unallocated_encoding(s);
108
- unallocated_encoding(s);
109
- return;
109
- return;
110
- }
110
- }
111
- break;
111
- break;
112
default:
112
default:
113
case 0x16: /* FCVTN, FCVTN2 */
113
case 0x16: /* FCVTN, FCVTN2 */
114
case 0x36: /* BFCVTN, BFCVTN2 */
114
case 0x36: /* BFCVTN, BFCVTN2 */
115
@@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc(DisasContext *s, uint32_t insn)
115
@@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc(DisasContext *s, uint32_t insn)
116
case 0x6d: /* FCMLE (zero) */
116
case 0x6d: /* FCMLE (zero) */
117
case 0x3d: /* FRECPE */
117
case 0x3d: /* FRECPE */
118
case 0x7d: /* FRSQRTE */
118
case 0x7d: /* FRSQRTE */
119
+ case 0x3c: /* URECPE */
119
+ case 0x3c: /* URECPE */
120
+ case 0x7c: /* URSQRTE */
120
+ case 0x7c: /* URSQRTE */
121
unallocated_encoding(s);
121
unallocated_encoding(s);
122
return;
122
return;
123
}
123
}
124
@@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc(DisasContext *s, uint32_t insn)
124
@@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc(DisasContext *s, uint32_t insn)
125
unallocated_encoding(s);
125
unallocated_encoding(s);
126
return;
126
return;
127
}
127
}
128
-
128
-
129
- if (!fp_access_check(s)) {
129
- if (!fp_access_check(s)) {
130
- return;
130
- return;
131
- }
131
- }
132
-
132
-
133
- if (need_fpstatus || rmode >= 0) {
133
- if (need_fpstatus || rmode >= 0) {
134
- tcg_fpstatus = fpstatus_ptr(FPST_FPCR);
134
- tcg_fpstatus = fpstatus_ptr(FPST_FPCR);
135
- } else {
135
- } else {
136
- tcg_fpstatus = NULL;
136
- tcg_fpstatus = NULL;
137
- }
137
- }
138
- if (rmode >= 0) {
138
- if (rmode >= 0) {
139
- tcg_rmode = gen_set_rmode(rmode, tcg_fpstatus);
139
- tcg_rmode = gen_set_rmode(rmode, tcg_fpstatus);
140
- } else {
140
- } else {
141
- tcg_rmode = NULL;
141
- tcg_rmode = NULL;
142
- }
142
- }
143
-
143
-
144
- {
144
- {
145
- int pass;
145
- int pass;
146
-
146
-
147
- assert(size == 2);
147
- assert(size == 2);
148
- for (pass = 0; pass < (is_q ? 4 : 2); pass++) {
148
- for (pass = 0; pass < (is_q ? 4 : 2); pass++) {
149
- TCGv_i32 tcg_op = tcg_temp_new_i32();
149
- TCGv_i32 tcg_op = tcg_temp_new_i32();
150
- TCGv_i32 tcg_res = tcg_temp_new_i32();
150
- TCGv_i32 tcg_res = tcg_temp_new_i32();
151
-
151
-
152
- read_vec_element_i32(s, tcg_op, rn, pass, MO_32);
152
- read_vec_element_i32(s, tcg_op, rn, pass, MO_32);
153
-
153
-
154
- {
154
- {
155
- /* Special cases for 32 bit elements */
155
- /* Special cases for 32 bit elements */
156
- switch (opcode) {
156
- switch (opcode) {
157
- case 0x7c: /* URSQRTE */
157
- case 0x7c: /* URSQRTE */
158
- gen_helper_rsqrte_u32(tcg_res, tcg_op);
158
- gen_helper_rsqrte_u32(tcg_res, tcg_op);
159
- break;
159
- break;
160
- default:
160
- default:
161
- case 0x7: /* SQABS, SQNEG */
161
- case 0x7: /* SQABS, SQNEG */
162
- case 0x2f: /* FABS */
162
- case 0x2f: /* FABS */
163
- case 0x6f: /* FNEG */
163
- case 0x6f: /* FNEG */
164
- case 0x7f: /* FSQRT */
164
- case 0x7f: /* FSQRT */
165
- case 0x18: /* FRINTN */
165
- case 0x18: /* FRINTN */
166
- case 0x19: /* FRINTM */
166
- case 0x19: /* FRINTM */
167
- case 0x38: /* FRINTP */
167
- case 0x38: /* FRINTP */
168
- case 0x39: /* FRINTZ */
168
- case 0x39: /* FRINTZ */
169
- case 0x58: /* FRINTA */
169
- case 0x58: /* FRINTA */
170
- case 0x79: /* FRINTI */
170
- case 0x79: /* FRINTI */
171
- case 0x59: /* FRINTX */
171
- case 0x59: /* FRINTX */
172
- case 0x1e: /* FRINT32Z */
172
- case 0x1e: /* FRINT32Z */
173
- case 0x5e: /* FRINT32X */
173
- case 0x5e: /* FRINT32X */
174
- case 0x1f: /* FRINT64Z */
174
- case 0x1f: /* FRINT64Z */
175
- case 0x5f: /* FRINT64X */
175
- case 0x5f: /* FRINT64X */
176
- case 0x1a: /* FCVTNS */
176
- case 0x1a: /* FCVTNS */
177
- case 0x1b: /* FCVTMS */
177
- case 0x1b: /* FCVTMS */
178
- case 0x1c: /* FCVTAS */
178
- case 0x1c: /* FCVTAS */
179
- case 0x3a: /* FCVTPS */
179
- case 0x3a: /* FCVTPS */
180
- case 0x3b: /* FCVTZS */
180
- case 0x3b: /* FCVTZS */
181
- case 0x5a: /* FCVTNU */
181
- case 0x5a: /* FCVTNU */
182
- case 0x5b: /* FCVTMU */
182
- case 0x5b: /* FCVTMU */
183
- case 0x5c: /* FCVTAU */
183
- case 0x5c: /* FCVTAU */
184
- case 0x7a: /* FCVTPU */
184
- case 0x7a: /* FCVTPU */
185
- case 0x7b: /* FCVTZU */
185
- case 0x7b: /* FCVTZU */
186
- g_assert_not_reached();
186
- g_assert_not_reached();
187
- }
187
- }
188
- }
188
- }
189
- write_vec_element_i32(s, tcg_res, rd, pass, MO_32);
189
- write_vec_element_i32(s, tcg_res, rd, pass, MO_32);
190
- }
190
- }
191
- }
191
- }
192
- clear_vec_high(s, is_q, rd);
192
- clear_vec_high(s, is_q, rd);
193
-
193
-
194
- if (tcg_rmode) {
194
- if (tcg_rmode) {
195
- gen_restore_rmode(tcg_rmode, tcg_fpstatus);
195
- gen_restore_rmode(tcg_rmode, tcg_fpstatus);
196
- }
196
- }
197
+ g_assert_not_reached();
197
+ g_assert_not_reached();
198
}
198
}
199
199
200
/* C3.6 Data processing - SIMD, inc Crypto
200
/* C3.6 Data processing - SIMD, inc Crypto
201
diff --git a/target/arm/tcg/a64.decode b/target/arm/tcg/a64.decode
201
diff --git a/target/arm/tcg/a64.decode b/target/arm/tcg/a64.decode
202
index XXXXXXX..XXXXXXX 100644
202
index XXXXXXX..XXXXXXX 100644
203
--- a/target/arm/tcg/a64.decode
203
--- a/target/arm/tcg/a64.decode
204
+++ b/target/arm/tcg/a64.decode
204
+++ b/target/arm/tcg/a64.decode
205
@@ -XXX,XX +XXX,XX @@ FRECPE_v 0.00 1110 1.1 00001 11011 0 ..... ..... @qrr_sd
205
@@ -XXX,XX +XXX,XX @@ FRECPE_v 0.00 1110 1.1 00001 11011 0 ..... ..... @qrr_sd
206
FRSQRTE_v 0.10 1110 111 11001 11011 0 ..... ..... @qrr_h
206
FRSQRTE_v 0.10 1110 111 11001 11011 0 ..... ..... @qrr_h
207
FRSQRTE_v 0.10 1110 1.1 00001 11011 0 ..... ..... @qrr_sd
207
FRSQRTE_v 0.10 1110 1.1 00001 11011 0 ..... ..... @qrr_sd
208
208
209
+URECPE_v 0.00 1110 101 00001 11001 0 ..... ..... @qrr_s
209
+URECPE_v 0.00 1110 101 00001 11001 0 ..... ..... @qrr_s
210
+URSQRTE_v 0.10 1110 101 00001 11001 0 ..... ..... @qrr_s
210
+URSQRTE_v 0.10 1110 101 00001 11001 0 ..... ..... @qrr_s
211
+
211
+
212
&fcvt_q rd rn esz q shift
212
&fcvt_q rd rn esz q shift
213
@fcvtq_h . q:1 . ...... 001 .... ...... rn:5 rd:5 \
213
@fcvtq_h . q:1 . ...... 001 .... ...... rn:5 rd:5 \
214
&fcvt_q esz=1 shift=%fcvt_f_sh_h
214
&fcvt_q esz=1 shift=%fcvt_f_sh_h
215
--
215
--
216
2.43.0
216
2.43.0
diff view generated by jsdifflib
1
Remove lookup_disas_fn, handle_2misc_widening,
1
Remove lookup_disas_fn, handle_2misc_widening,
2
disas_simd_two_reg_misc, disas_data_proc_simd,
2
disas_simd_two_reg_misc, disas_data_proc_simd,
3
disas_data_proc_simd_fp, disas_a64_legacy, as
3
disas_data_proc_simd_fp, disas_a64_legacy, as
4
this is the final insn to be converted.
4
this is the final insn to be converted.
5
5
6
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
6
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
7
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
7
---
8
---
8
target/arm/tcg/translate-a64.c | 202 +++------------------------------
9
target/arm/tcg/translate-a64.c | 202 +++------------------------------
9
target/arm/tcg/a64.decode | 2 +
10
target/arm/tcg/a64.decode | 2 +
10
2 files changed, 18 insertions(+), 186 deletions(-)
11
2 files changed, 18 insertions(+), 186 deletions(-)
...
...
181
- return;
182
- return;
182
- }
183
- }
183
- break;
184
- break;
184
- }
185
- }
185
- default:
186
- default:
186
- case 0x0: /* REV64 */
187
- case 0x0: /* REV64, REV32 */
187
- case 0x1: /* REV16, REV32 */
188
- case 0x1: /* REV16 */
188
- case 0x2: /* SADDLP, UADDLP */
189
- case 0x2: /* SADDLP, UADDLP */
189
- case 0x3: /* SUQADD, USQADD */
190
- case 0x3: /* SUQADD, USQADD */
190
- case 0x4: /* CLS, CLZ */
191
- case 0x4: /* CLS, CLZ */
191
- case 0x5: /* CNT, NOT, RBIT */
192
- case 0x5: /* CNT, NOT, RBIT */
192
- case 0x6: /* SADALP, UADALP */
193
- case 0x6: /* SADALP, UADALP */
...
...
diff view generated by jsdifflib