1 | Finish the conversion of all aarch64 instructions to decodetree. | 1 | Finish the conversion of all aarch64 instructions to decodetree. |
---|---|---|---|
2 | |||
3 | Changes for v3: | ||
4 | - Fix decode for f16 fsqrt (vector) in patch 23, prior to conversion. | ||
5 | This is the only patch without R-B. | ||
6 | |||
2 | 7 | ||
3 | r~ | 8 | r~ |
4 | 9 | ||
5 | Richard Henderson (67): | 10 | |
6 | target/arm: Use ### to separate 3rd-level sections in a64.decode | 11 | Richard Henderson (69): |
12 | target/arm: Add section labels for "Data Processing (register)" | ||
7 | target/arm: Convert UDIV, SDIV to decodetree | 13 | target/arm: Convert UDIV, SDIV to decodetree |
8 | target/arm: Convert LSLV, LSRV, ASRV, RORV to decodetree | 14 | target/arm: Convert LSLV, LSRV, ASRV, RORV to decodetree |
9 | target/arm: Convert CRC32, CRC32C to decodetree | 15 | target/arm: Convert CRC32, CRC32C to decodetree |
10 | target/arm: Convert SUBP, IRG, GMI to decodetree | 16 | target/arm: Convert SUBP, IRG, GMI to decodetree |
11 | target/arm: Convert PACGA to decodetree | 17 | target/arm: Convert PACGA to decodetree |
... | ... | ||
23 | target/arm: Convert CCMP, CCMN to decodetree | 29 | target/arm: Convert CCMP, CCMN to decodetree |
24 | target/arm: Convert disas_cond_select to decodetree | 30 | target/arm: Convert disas_cond_select to decodetree |
25 | target/arm: Introduce fp_access_check_scalar_hsd | 31 | target/arm: Introduce fp_access_check_scalar_hsd |
26 | target/arm: Introduce fp_access_check_vector_hsd | 32 | target/arm: Introduce fp_access_check_vector_hsd |
27 | target/arm: Convert FCMP, FCMPE, FCCMP, FCCMPE to decodetree | 33 | target/arm: Convert FCMP, FCMPE, FCCMP, FCCMPE to decodetree |
34 | target/arm: Fix decode of fp16 vector fabs, fneg, fsqrt | ||
28 | target/arm: Convert FMOV, FABS, FNEG (scalar) to decodetree | 35 | target/arm: Convert FMOV, FABS, FNEG (scalar) to decodetree |
29 | target/arm: Pass fpstatus to vfp_sqrt* | 36 | target/arm: Pass fpstatus to vfp_sqrt* |
30 | target/arm: Remove helper_sqrt_f16 | 37 | target/arm: Remove helper_sqrt_f16 |
31 | target/arm: Convert FSQRT (scalar) to decodetree | 38 | target/arm: Convert FSQRT (scalar) to decodetree |
32 | target/arm: Convert FRINT[NPMSAXI] (scalar) to decodetree | 39 | target/arm: Convert FRINT[NPMSAXI] (scalar) to decodetree |
... | ... | ||
52 | target/arm: Introduce clear_vec | 59 | target/arm: Introduce clear_vec |
53 | target/arm: Convert XTN, SQXTUN, SQXTN, UQXTN to decodetree | 60 | target/arm: Convert XTN, SQXTUN, SQXTN, UQXTN to decodetree |
54 | target/arm: Convert FCVTN, BFCVTN to decodetree | 61 | target/arm: Convert FCVTN, BFCVTN to decodetree |
55 | target/arm: Convert FCVTXN to decodetree | 62 | target/arm: Convert FCVTXN to decodetree |
56 | target/arm: Convert SHLL to decodetree | 63 | target/arm: Convert SHLL to decodetree |
64 | target/arm: Implement gen_gvec_fabs, gen_gvec_fneg | ||
57 | target/arm: Convert FABS, FNEG (vector) to decodetree | 65 | target/arm: Convert FABS, FNEG (vector) to decodetree |
58 | target/arm: Convert FSQRT (vector) to decodetree | 66 | target/arm: Convert FSQRT (vector) to decodetree |
59 | target/arm: Convert FRINT* (vector) to decodetree | 67 | target/arm: Convert FRINT* (vector) to decodetree |
60 | target/arm: Convert FCVT* (vector, integer) scalar to decodetree | 68 | target/arm: Convert FCVT* (vector, integer) scalar to decodetree |
61 | target/arm: Convert FCVT* (vector, fixed-point) scalar to decodetree | 69 | target/arm: Convert FCVT* (vector, fixed-point) scalar to decodetree |
... | ... | ||
72 | target/arm: Convert URECPE and URSQRTE to decodetree | 80 | target/arm: Convert URECPE and URSQRTE to decodetree |
73 | target/arm: Convert FCVTL to decodetree | 81 | target/arm: Convert FCVTL to decodetree |
74 | 82 | ||
75 | target/arm/helper.h | 43 +- | 83 | target/arm/helper.h | 43 +- |
76 | target/arm/tcg/helper-a64.h | 7 - | 84 | target/arm/tcg/helper-a64.h | 7 - |
77 | target/arm/tcg/translate.h | 29 + | 85 | target/arm/tcg/translate.h | 35 + |
78 | target/arm/tcg/gengvec.c | 355 ++ | 86 | target/arm/tcg/gengvec.c | 369 ++ |
79 | target/arm/tcg/helper-a64.c | 104 - | 87 | target/arm/tcg/helper-a64.c | 104 - |
80 | target/arm/tcg/neon_helper.c | 106 +- | 88 | target/arm/tcg/neon_helper.c | 106 +- |
81 | target/arm/tcg/translate-a64.c | 5674 ++++++++++--------------------- | 89 | target/arm/tcg/translate-a64.c | 5670 ++++++++++--------------------- |
82 | target/arm/tcg/translate-neon.c | 317 +- | 90 | target/arm/tcg/translate-neon.c | 337 +- |
83 | target/arm/tcg/translate-vfp.c | 6 +- | 91 | target/arm/tcg/translate-vfp.c | 6 +- |
84 | target/arm/tcg/vec_helper.c | 65 +- | 92 | target/arm/tcg/vec_helper.c | 65 +- |
85 | target/arm/vfp_helper.c | 16 +- | 93 | target/arm/vfp_helper.c | 16 +- |
86 | target/arm/tcg/a64.decode | 502 ++- | 94 | target/arm/tcg/a64.decode | 502 ++- |
87 | 12 files changed, 2874 insertions(+), 4350 deletions(-) | 95 | 12 files changed, 2888 insertions(+), 4372 deletions(-) |
88 | 96 | ||
89 | -- | 97 | -- |
90 | 2.43.0 | 98 | 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 | 6 +++--- | ||
9 | 1 file changed, 3 insertions(+), 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 | + break; | ||
24 | case 0x7f: /* FSQRT (vector) */ | ||
25 | + only_in_vector = true; | ||
26 | break; | ||
27 | default: | ||
28 | unallocated_encoding(s); | ||
29 | @@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc_fp16(DisasContext *s, uint32_t insn) | ||
30 | case 0x7b: /* FCVTZU */ | ||
31 | gen_helper_advsimd_f16touinth(tcg_res, tcg_op, tcg_fpstatus); | ||
32 | break; | ||
33 | - case 0x6f: /* FNEG */ | ||
34 | - tcg_gen_xori_i32(tcg_res, tcg_op, 0x8000); | ||
35 | - break; | ||
36 | case 0x7d: /* FRSQRTE */ | ||
37 | gen_helper_rsqrte_f16(tcg_res, tcg_op, tcg_fpstatus); | ||
38 | break; | ||
39 | -- | ||
40 | 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 | 104 ++++++++++++++++++++++----------- | 4 | target/arm/tcg/translate-a64.c | 105 +++++++++++++++++++++++---------- |
4 | target/arm/tcg/a64.decode | 7 +++ | 5 | target/arm/tcg/a64.decode | 7 +++ |
5 | 2 files changed, 78 insertions(+), 33 deletions(-) | 6 | 2 files changed, 81 insertions(+), 31 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 |
... | ... | ||
159 | + case 0x1: /* FABS */ | 160 | + case 0x1: /* FABS */ |
160 | + case 0x2: /* FNEG */ | 161 | + case 0x2: /* FNEG */ |
161 | g_assert_not_reached(); | 162 | g_assert_not_reached(); |
162 | } | 163 | } |
163 | 164 | ||
164 | @@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc_fp16(DisasContext *s, uint32_t insn) | 165 | @@ -XXX,XX +XXX,XX @@ static void disas_fp_1src(DisasContext *s, uint32_t insn) |
165 | case 0x7b: /* FCVTZU */ | 166 | 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 | } | 167 | } |
178 | 168 | /* fall through */ | |
169 | - case 0x0 ... 0x3: | ||
170 | + case 0x3: | ||
171 | case 0x8 ... 0xc: | ||
172 | case 0xe ... 0xf: | ||
173 | /* 32-to-32 and 64-to-64 ops */ | ||
174 | @@ -XXX,XX +XXX,XX @@ static void disas_fp_1src(DisasContext *s, uint32_t insn) | ||
175 | |||
176 | default: | ||
177 | do_unallocated: | ||
178 | + case 0x0: /* FMOV */ | ||
179 | + case 0x1: /* FABS */ | ||
180 | + case 0x2: /* FNEG */ | ||
181 | unallocated_encoding(s); | ||
182 | break; | ||
183 | } | ||
179 | diff --git a/target/arm/tcg/a64.decode b/target/arm/tcg/a64.decode | 184 | diff --git a/target/arm/tcg/a64.decode b/target/arm/tcg/a64.decode |
180 | index XXXXXXX..XXXXXXX 100644 | 185 | index XXXXXXX..XXXXXXX 100644 |
181 | --- a/target/arm/tcg/a64.decode | 186 | --- a/target/arm/tcg/a64.decode |
182 | +++ b/target/arm/tcg/a64.decode | 187 | +++ b/target/arm/tcg/a64.decode |
183 | @@ -XXX,XX +XXX,XX @@ | 188 | @@ -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 | 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 | 24 ++++++------------------ | 4 | target/arm/tcg/translate-a64.c | 26 +++++++------------------- |
4 | target/arm/tcg/a64.decode | 3 +++ | 5 | target/arm/tcg/a64.decode | 3 +++ |
5 | 2 files changed, 9 insertions(+), 18 deletions(-) | 6 | 2 files changed, 10 insertions(+), 19 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 |
... | ... | ||
37 | + case 0x6: /* BFCVT */ | 38 | + case 0x6: /* BFCVT */ |
38 | case 0x8: /* FRINTN */ | 39 | case 0x8: /* FRINTN */ |
39 | case 0x9: /* FRINTP */ | 40 | case 0x9: /* FRINTP */ |
40 | case 0xa: /* FRINTM */ | 41 | case 0xa: /* FRINTM */ |
41 | @@ -XXX,XX +XXX,XX @@ static void disas_fp_1src(DisasContext *s, uint32_t insn) | 42 | @@ -XXX,XX +XXX,XX @@ static void disas_fp_1src(DisasContext *s, uint32_t insn) |
43 | } | ||
42 | break; | 44 | break; |
43 | 45 | ||
44 | case 0x6: | 46 | - case 0x6: |
45 | - switch (type) { | 47 | - switch (type) { |
46 | - case 1: /* BFCVT */ | 48 | - case 1: /* BFCVT */ |
47 | - if (!dc_isar_feature(aa64_bf16, s)) { | 49 | - if (!dc_isar_feature(aa64_bf16, s)) { |
48 | - goto do_unallocated; | 50 | - goto do_unallocated; |
49 | - } | 51 | - } |
... | ... | ||
57 | - } | 59 | - } |
58 | - break; | 60 | - break; |
59 | - | 61 | - |
60 | default: | 62 | default: |
61 | do_unallocated: | 63 | do_unallocated: |
62 | unallocated_encoding(s); | 64 | case 0x0: /* FMOV */ |
65 | case 0x1: /* FABS */ | ||
66 | case 0x2: /* FNEG */ | ||
67 | case 0x3: /* FSQRT */ | ||
68 | + case 0x6: /* BFCVT */ | ||
69 | case 0x8: /* FRINTN */ | ||
70 | case 0x9: /* FRINTP */ | ||
71 | case 0xa: /* FRINTM */ | ||
63 | diff --git a/target/arm/tcg/a64.decode b/target/arm/tcg/a64.decode | 72 | diff --git a/target/arm/tcg/a64.decode b/target/arm/tcg/a64.decode |
64 | index XXXXXXX..XXXXXXX 100644 | 73 | index XXXXXXX..XXXXXXX 100644 |
65 | --- a/target/arm/tcg/a64.decode | 74 | --- a/target/arm/tcg/a64.decode |
66 | +++ b/target/arm/tcg/a64.decode | 75 | +++ b/target/arm/tcg/a64.decode |
67 | @@ -XXX,XX +XXX,XX @@ | 76 | @@ -XXX,XX +XXX,XX @@ |
... | ... | ||
74 | @rr_hsd ........ ... ..... ...... rn:5 rd:5 &rr_e esz=%esz_hsd | 83 | @rr_hsd ........ ... ..... ...... rn:5 rd:5 &rr_e esz=%esz_hsd |
75 | @@ -XXX,XX +XXX,XX @@ FRINTA_s 00011110 .. 1 001100 10000 ..... ..... @rr_hsd | 84 | @@ -XXX,XX +XXX,XX @@ FRINTA_s 00011110 .. 1 001100 10000 ..... ..... @rr_hsd |
76 | FRINTX_s 00011110 .. 1 001110 10000 ..... ..... @rr_hsd | 85 | FRINTX_s 00011110 .. 1 001110 10000 ..... ..... @rr_hsd |
77 | FRINTI_s 00011110 .. 1 001111 10000 ..... ..... @rr_hsd | 86 | FRINTI_s 00011110 .. 1 001111 10000 ..... ..... @rr_hsd |
78 | 87 | ||
79 | +BFCVT_s 00011110 10 1 000110 10000 ..... ..... @rr_s | 88 | +BFCVT_s 00011110 01 1 000110 10000 ..... ..... @rr_s |
80 | + | 89 | + |
81 | # Floating-point Immediate | 90 | # Floating-point Immediate |
82 | 91 | ||
83 | FMOVI_s 0001 1110 .. 1 imm:8 100 00000 rd:5 esz=%esz_hsd | 92 | FMOVI_s 0001 1110 .. 1 imm:8 100 00000 rd:5 esz=%esz_hsd |
84 | -- | 93 | -- |
85 | 2.43.0 | 94 | 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 |
1 | This includes REV16, REV32, REV64. | 1 | This includes REV16, REV32, REV64. |
---|---|---|---|
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 | 79 +++------------------------------- | 6 | target/arm/tcg/translate-a64.c | 79 +++------------------------------- |
6 | target/arm/tcg/a64.decode | 5 +++ | 7 | target/arm/tcg/a64.decode | 5 +++ |
7 | 2 files changed, 10 insertions(+), 74 deletions(-) | 8 | 2 files changed, 10 insertions(+), 74 deletions(-) |
... | ... | ||
117 | if (size == 3) { | 118 | if (size == 3) { |
118 | @@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc(DisasContext *s, uint32_t insn) | 119 | @@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc(DisasContext *s, uint32_t insn) |
119 | break; | 120 | break; |
120 | } | 121 | } |
121 | default: | 122 | default: |
122 | + case 0x0: /* REV64 */ | 123 | + case 0x0: /* REV64, REV32 */ |
123 | + case 0x1: /* REV16, REV32 */ | 124 | + case 0x1: /* REV16 */ |
124 | case 0x3: /* SUQADD, USQADD */ | 125 | case 0x3: /* SUQADD, USQADD */ |
125 | case 0x4: /* CLS, CLZ */ | 126 | case 0x4: /* CLS, CLZ */ |
126 | case 0x5: /* CNT, NOT, RBIT */ | 127 | case 0x5: /* CNT, NOT, RBIT */ |
127 | diff --git a/target/arm/tcg/a64.decode b/target/arm/tcg/a64.decode | 128 | diff --git a/target/arm/tcg/a64.decode b/target/arm/tcg/a64.decode |
128 | index XXXXXXX..XXXXXXX 100644 | 129 | index XXXXXXX..XXXXXXX 100644 |
... | ... | ||
140 | CMEQ0_v 0.00 1110 ..1 00000 10011 0 ..... ..... @qrr_e | 141 | CMEQ0_v 0.00 1110 ..1 00000 10011 0 ..... ..... @qrr_e |
141 | CMLE0_v 0.10 1110 ..1 00000 10011 0 ..... ..... @qrr_e | 142 | CMLE0_v 0.10 1110 ..1 00000 10011 0 ..... ..... @qrr_e |
142 | CMLT0_v 0.00 1110 ..1 00000 10101 0 ..... ..... @qrr_e | 143 | CMLT0_v 0.00 1110 ..1 00000 10101 0 ..... ..... @qrr_e |
143 | + | 144 | + |
144 | +REV16_v 0.00 1110 001 00000 00011 0 ..... ..... @qrr_b | 145 | +REV16_v 0.00 1110 001 00000 00011 0 ..... ..... @qrr_b |
145 | +REV32_v 0.10 1110 0.1 00000 00011 0 ..... ..... @qrr_bh | 146 | +REV32_v 0.10 1110 0.1 00000 00001 0 ..... ..... @qrr_bh |
146 | +REV64_v 0.00 1110 ..1 00000 00001 0 ..... ..... @qrr_e | 147 | +REV64_v 0.00 1110 ..1 00000 00001 0 ..... ..... @qrr_e |
147 | -- | 148 | -- |
148 | 2.43.0 | 149 | 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 | Reviewed-by: Peter Maydell <peter.maydell@linaro.org> | ||
5 | Signed-off-by: Richard Henderson <richard.henderson@linaro.org> | ||
6 | --- | ||
7 | target/arm/tcg/translate.h | 6 ++++++ | ||
8 | target/arm/tcg/gengvec.c | 14 ++++++++++++++ | ||
9 | target/arm/tcg/translate-neon.c | 20 ++------------------ | ||
10 | 3 files changed, 22 insertions(+), 18 deletions(-) | ||
11 | |||
12 | diff --git a/target/arm/tcg/translate.h b/target/arm/tcg/translate.h | ||
13 | index XXXXXXX..XXXXXXX 100644 | ||
14 | --- a/target/arm/tcg/translate.h | ||
15 | +++ b/target/arm/tcg/translate.h | ||
16 | @@ -XXX,XX +XXX,XX @@ void gen_gvec_uaddlp(unsigned vece, uint32_t rd_ofs, uint32_t rn_ofs, | ||
17 | void gen_gvec_uadalp(unsigned vece, uint32_t rd_ofs, uint32_t rn_ofs, | ||
18 | uint32_t opr_sz, uint32_t max_sz); | ||
19 | |||
20 | +/* These exclusively manipulate the sign bit. */ | ||
21 | +void gen_gvec_fabs(unsigned vece, uint32_t dofs, uint32_t aofs, | ||
22 | + uint32_t oprsz, uint32_t maxsz); | ||
23 | +void gen_gvec_fneg(unsigned vece, uint32_t dofs, uint32_t aofs, | ||
24 | + uint32_t oprsz, uint32_t maxsz); | ||
25 | + | ||
26 | /* | ||
27 | * Forward to the isar_feature_* tests given a DisasContext pointer. | ||
28 | */ | ||
29 | diff --git a/target/arm/tcg/gengvec.c b/target/arm/tcg/gengvec.c | ||
30 | index XXXXXXX..XXXXXXX 100644 | ||
31 | --- a/target/arm/tcg/gengvec.c | ||
32 | +++ b/target/arm/tcg/gengvec.c | ||
33 | @@ -XXX,XX +XXX,XX @@ void gen_gvec_uadalp(unsigned vece, uint32_t rd_ofs, uint32_t rn_ofs, | ||
34 | assert(vece <= MO_32); | ||
35 | tcg_gen_gvec_2(rd_ofs, rn_ofs, opr_sz, max_sz, &g[vece]); | ||
36 | } | ||
37 | + | ||
38 | +void gen_gvec_fabs(unsigned vece, uint32_t dofs, uint32_t aofs, | ||
39 | + uint32_t oprsz, uint32_t maxsz) | ||
40 | +{ | ||
41 | + uint64_t s_bit = 1ull << ((8 << vece) - 1); | ||
42 | + tcg_gen_gvec_andi(vece, dofs, aofs, s_bit - 1, oprsz, maxsz); | ||
43 | +} | ||
44 | + | ||
45 | +void gen_gvec_fneg(unsigned vece, uint32_t dofs, uint32_t aofs, | ||
46 | + uint32_t oprsz, uint32_t maxsz) | ||
47 | +{ | ||
48 | + uint64_t s_bit = 1ull << ((8 << vece) - 1); | ||
49 | + tcg_gen_gvec_xori(vece, dofs, aofs, s_bit, oprsz, maxsz); | ||
50 | +} | ||
51 | diff --git a/target/arm/tcg/translate-neon.c b/target/arm/tcg/translate-neon.c | ||
52 | index XXXXXXX..XXXXXXX 100644 | ||
53 | --- a/target/arm/tcg/translate-neon.c | ||
54 | +++ b/target/arm/tcg/translate-neon.c | ||
55 | @@ -XXX,XX +XXX,XX @@ static bool do_2misc(DisasContext *s, arg_2misc *a, NeonGenOneOpFn *fn) | ||
56 | return true; | ||
57 | } | ||
58 | |||
59 | -static void gen_VABS_F(unsigned vece, uint32_t rd_ofs, uint32_t rm_ofs, | ||
60 | - uint32_t oprsz, uint32_t maxsz) | ||
61 | -{ | ||
62 | - tcg_gen_gvec_andi(vece, rd_ofs, rm_ofs, | ||
63 | - vece == MO_16 ? 0x7fff : 0x7fffffff, | ||
64 | - oprsz, maxsz); | ||
65 | -} | ||
66 | - | ||
67 | static bool trans_VABS_F(DisasContext *s, arg_2misc *a) | ||
68 | { | ||
69 | if (a->size == MO_16) { | ||
70 | @@ -XXX,XX +XXX,XX @@ static bool trans_VABS_F(DisasContext *s, arg_2misc *a) | ||
71 | } else if (a->size != MO_32) { | ||
72 | return false; | ||
73 | } | ||
74 | - return do_2misc_vec(s, a, gen_VABS_F); | ||
75 | -} | ||
76 | - | ||
77 | -static void gen_VNEG_F(unsigned vece, uint32_t rd_ofs, uint32_t rm_ofs, | ||
78 | - uint32_t oprsz, uint32_t maxsz) | ||
79 | -{ | ||
80 | - tcg_gen_gvec_xori(vece, rd_ofs, rm_ofs, | ||
81 | - vece == MO_16 ? 0x8000 : 0x80000000, | ||
82 | - oprsz, maxsz); | ||
83 | + return do_2misc_vec(s, a, gen_gvec_fabs); | ||
84 | } | ||
85 | |||
86 | static bool trans_VNEG_F(DisasContext *s, arg_2misc *a) | ||
87 | @@ -XXX,XX +XXX,XX @@ static bool trans_VNEG_F(DisasContext *s, arg_2misc *a) | ||
88 | } else if (a->size != MO_32) { | ||
89 | return false; | ||
90 | } | ||
91 | - return do_2misc_vec(s, a, gen_VNEG_F); | ||
92 | + return do_2misc_vec(s, a, gen_gvec_fneg); | ||
93 | } | ||
94 | |||
95 | static bool trans_VRECPE(DisasContext *s, arg_2misc *a) | ||
96 | -- | ||
97 | 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 */ |
110 | break; | ||
116 | case 0x7f: /* FSQRT (vector) */ | 111 | case 0x7f: /* FSQRT (vector) */ |
112 | only_in_vector = true; | ||
117 | break; | 113 | break; |
118 | default: | 114 | default: |
119 | + case 0x2f: /* FABS */ | 115 | + case 0x2f: /* FABS */ |
120 | + case 0x6f: /* FNEG */ | 116 | + case 0x6f: /* FNEG */ |
121 | unallocated_encoding(s); | 117 | unallocated_encoding(s); |
... | ... | 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 | 69 ++++++++++++++++++++++++---------- |
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(+), 19 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; |
... | ... | ||
117 | + case 0x7f: /* FSQRT */ | 118 | + case 0x7f: /* FSQRT */ |
118 | g_assert_not_reached(); | 119 | g_assert_not_reached(); |
119 | } | 120 | } |
120 | } | 121 | } |
121 | @@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc_fp16(DisasContext *s, uint32_t insn) | 122 | @@ -XXX,XX +XXX,XX @@ static void disas_simd_two_reg_misc_fp16(DisasContext *s, uint32_t insn) |
122 | rmode = FPROUNDING_ZERO; | ||
123 | break; | 123 | break; |
124 | case 0x7d: /* FRSQRTE */ | 124 | case 0x7d: /* FRSQRTE */ |
125 | break; | ||
125 | - case 0x7f: /* FSQRT (vector) */ | 126 | - case 0x7f: /* FSQRT (vector) */ |
126 | break; | 127 | - only_in_vector = true; |
128 | - break; | ||
127 | default: | 129 | default: |
128 | case 0x2f: /* FABS */ | 130 | case 0x2f: /* FABS */ |
129 | case 0x6f: /* FNEG */ | 131 | case 0x6f: /* FNEG */ |
130 | + case 0x7f: /* FSQRT (vector) */ | 132 | + case 0x7f: /* FSQRT (vector) */ |
131 | unallocated_encoding(s); | 133 | unallocated_encoding(s); |
... | ... | 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 | 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 | 135 ++++++++++++++------------------- | 8 | target/arm/tcg/translate-a64.c | 133 ++++++++++++++------------------- |
8 | target/arm/tcg/a64.decode | 30 ++++++++ | 9 | target/arm/tcg/a64.decode | 30 ++++++++ |
9 | 2 files changed, 87 insertions(+), 78 deletions(-) | 10 | 2 files changed, 86 insertions(+), 77 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 |
... | ... | ||
175 | gen_helper_recpe_f16(tcg_res, tcg_op, tcg_fpstatus); | 176 | gen_helper_recpe_f16(tcg_res, tcg_op, tcg_fpstatus); |
176 | break; | 177 | break; |
177 | case 0x3f: /* FRECPX */ | 178 | case 0x3f: /* FRECPX */ |
178 | gen_helper_frecpx_f16(tcg_res, tcg_op, tcg_fpstatus); | 179 | gen_helper_frecpx_f16(tcg_res, tcg_op, tcg_fpstatus); |
179 | break; | 180 | break; |
180 | - case 0x5a: /* FCVTNU */ | 181 | + case 0x7d: /* FRSQRTE */ |
181 | - case 0x5b: /* FCVTMU */ | 182 | + gen_helper_rsqrte_f16(tcg_res, tcg_op, tcg_fpstatus); |
182 | - case 0x5c: /* FCVTAU */ | 183 | + break; |
183 | - case 0x7a: /* FCVTPU */ | 184 | + 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 */ | 185 | + case 0x1a: /* FCVTNS */ |
193 | + case 0x1b: /* FCVTMS */ | 186 | + case 0x1b: /* FCVTMS */ |
194 | + case 0x1c: /* FCVTAS */ | 187 | + case 0x1c: /* FCVTAS */ |
195 | + case 0x3a: /* FCVTPS */ | 188 | + case 0x3a: /* FCVTPS */ |
196 | + case 0x3b: /* FCVTZS */ | 189 | + case 0x3b: /* FCVTZS */ |
197 | + case 0x5a: /* FCVTNU */ | 190 | case 0x5a: /* FCVTNU */ |
198 | + case 0x5b: /* FCVTMU */ | 191 | case 0x5b: /* FCVTMU */ |
199 | + case 0x5c: /* FCVTAU */ | 192 | case 0x5c: /* FCVTAU */ |
200 | + case 0x7a: /* FCVTPU */ | 193 | case 0x7a: /* FCVTPU */ |
201 | + case 0x7b: /* FCVTZU */ | 194 | case 0x7b: /* FCVTZU */ |
195 | - gen_helper_advsimd_f16touinth(tcg_res, tcg_op, tcg_fpstatus); | ||
196 | - break; | ||
197 | - case 0x7d: /* FRSQRTE */ | ||
198 | - gen_helper_rsqrte_f16(tcg_res, tcg_op, tcg_fpstatus); | ||
199 | - break; | ||
200 | - default: | ||
202 | g_assert_not_reached(); | 201 | g_assert_not_reached(); |
203 | } | 202 | } |
204 | 203 | ||
205 | diff --git a/target/arm/tcg/a64.decode b/target/arm/tcg/a64.decode | 204 | diff --git a/target/arm/tcg/a64.decode b/target/arm/tcg/a64.decode |
206 | index XXXXXXX..XXXXXXX 100644 | 205 | index XXXXXXX..XXXXXXX 100644 |
... | ... | 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 | 4 +--- | 4 | target/arm/tcg/translate-a64.c | 4 +--- |
4 | target/arm/tcg/a64.decode | 19 +++++++++++++++++++ | 5 | target/arm/tcg/a64.decode | 19 +++++++++++++++++++ |
5 | 2 files changed, 20 insertions(+), 3 deletions(-) | 6 | 2 files changed, 20 insertions(+), 3 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 | 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 | 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 | 47 ---------------------------------- | 7 | target/arm/tcg/translate-a64.c | 47 ---------------------------------- |
7 | target/arm/tcg/a64.decode | 8 ++++++ | 8 | target/arm/tcg/a64.decode | 8 ++++++ |
8 | 2 files changed, 8 insertions(+), 47 deletions(-) | 9 | 2 files changed, 8 insertions(+), 47 deletions(-) |
... | ... | 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 | 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 | 3 + | 7 | target/arm/helper.h | 3 + |
7 | target/arm/tcg/translate-a64.c | 201 ++++++--------------------------- | 8 | target/arm/tcg/translate-a64.c | 201 ++++++--------------------------- |
8 | target/arm/tcg/vec_helper.c | 7 +- | 9 | target/arm/tcg/vec_helper.c | 7 +- |
... | ... | 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 | 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-a64.c | 160 +++------------------------------ | 8 | target/arm/tcg/translate-a64.c | 160 +++------------------------------ |
8 | target/arm/tcg/vec_helper.c | 2 + | 9 | target/arm/tcg/vec_helper.c | 2 + |
... | ... | 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 | 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/helper.h | 2 + | 9 | target/arm/helper.h | 2 + |
9 | target/arm/tcg/helper-a64.h | 2 - | 10 | target/arm/tcg/helper-a64.h | 2 - |
10 | target/arm/tcg/helper-a64.c | 32 ----- | 11 | target/arm/tcg/helper-a64.c | 32 ----- |
... | ... | 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 |
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/helper.h | 3 +++ | 4 | target/arm/helper.h | 3 +++ |
4 | target/arm/tcg/translate.h | 5 +++++ | 5 | target/arm/tcg/translate.h | 5 +++++ |
5 | target/arm/tcg/gengvec.c | 16 ++++++++++++++++ | 6 | target/arm/tcg/gengvec.c | 16 ++++++++++++++++ |
... | ... | ||
23 | #include "tcg/helper-sve.h" | 24 | #include "tcg/helper-sve.h" |
24 | diff --git a/target/arm/tcg/translate.h b/target/arm/tcg/translate.h | 25 | diff --git a/target/arm/tcg/translate.h b/target/arm/tcg/translate.h |
25 | index XXXXXXX..XXXXXXX 100644 | 26 | index XXXXXXX..XXXXXXX 100644 |
26 | --- a/target/arm/tcg/translate.h | 27 | --- a/target/arm/tcg/translate.h |
27 | +++ b/target/arm/tcg/translate.h | 28 | +++ 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, | 29 | @@ -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, | 30 | void gen_gvec_fneg(unsigned vece, uint32_t dofs, uint32_t aofs, |
30 | uint32_t opr_sz, uint32_t max_sz); | 31 | uint32_t oprsz, uint32_t maxsz); |
31 | 32 | ||
32 | +void gen_gvec_urecpe(unsigned vece, uint32_t rd_ofs, uint32_t rn_ofs, | 33 | +void gen_gvec_urecpe(unsigned vece, uint32_t rd_ofs, uint32_t rn_ofs, |
33 | + uint32_t opr_sz, uint32_t max_sz); | 34 | + uint32_t opr_sz, uint32_t max_sz); |
34 | +void gen_gvec_ursqrte(unsigned vece, uint32_t rd_ofs, uint32_t rn_ofs, | 35 | +void gen_gvec_ursqrte(unsigned vece, uint32_t rd_ofs, uint32_t rn_ofs, |
35 | + uint32_t opr_sz, uint32_t max_sz); | 36 | + uint32_t opr_sz, uint32_t max_sz); |
... | ... | ||
39 | */ | 40 | */ |
40 | diff --git a/target/arm/tcg/gengvec.c b/target/arm/tcg/gengvec.c | 41 | diff --git a/target/arm/tcg/gengvec.c b/target/arm/tcg/gengvec.c |
41 | index XXXXXXX..XXXXXXX 100644 | 42 | index XXXXXXX..XXXXXXX 100644 |
42 | --- a/target/arm/tcg/gengvec.c | 43 | --- a/target/arm/tcg/gengvec.c |
43 | +++ b/target/arm/tcg/gengvec.c | 44 | +++ 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, | 45 | @@ -XXX,XX +XXX,XX @@ void gen_gvec_fneg(unsigned vece, uint32_t dofs, uint32_t aofs, |
45 | assert(vece <= MO_32); | 46 | uint64_t s_bit = 1ull << ((8 << vece) - 1); |
46 | tcg_gen_gvec_2(rd_ofs, rn_ofs, opr_sz, max_sz, &g[vece]); | 47 | tcg_gen_gvec_xori(vece, dofs, aofs, s_bit, oprsz, maxsz); |
47 | } | 48 | } |
48 | + | 49 | + |
49 | +void gen_gvec_urecpe(unsigned vece, uint32_t rd_ofs, uint32_t rn_ofs, | 50 | +void gen_gvec_urecpe(unsigned vece, uint32_t rd_ofs, uint32_t rn_ofs, |
50 | + uint32_t opr_sz, uint32_t max_sz) | 51 | + uint32_t opr_sz, uint32_t max_sz) |
51 | +{ | 52 | +{ |
... | ... | 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 | 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 | 139 ++------------------------------- | 7 | target/arm/tcg/translate-a64.c | 139 ++------------------------------- |
7 | target/arm/tcg/a64.decode | 3 + | 8 | target/arm/tcg/a64.decode | 3 + |
8 | 2 files changed, 8 insertions(+), 134 deletions(-) | 9 | 2 files changed, 8 insertions(+), 134 deletions(-) |
... | ... | 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 |