[binutils-gdb] arm: Add missing vcvt for FP16
Andre Simoes Dias Vieira
avieira@sourceware.org
Fri Sep 11 11:58:37 GMT 2026
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=0855b93cfb911a4feab76a31bb1914982b3e6979
commit 0855b93cfb911a4feab76a31bb1914982b3e6979
Author: Andre Vieira <andre.simoesdiasvieira@arm.com>
Date: Fri Sep 11 12:48:52 2026 +0100
arm: Add missing vcvt for FP16
Add missing VCVT (between floating-point and fixed-point, floating- point) for
FP16.
This was implemented in the same way the other FP16 instructions were added, by
mapping them to existing FPv3 Half Precision instructions.
These new instructions are guarded in the same way as the other Armv8.2- A and
Armv8.1-m.main FP16 instructions, the flavour to encoding mapping in the 'BSN'
field of the CVT_FLAVOUR_VAR list is only used in do_vfp_nsyn_cvt. The newly
mapped flavours are guarded against in that function, to prevent them being
used with different set of operands other than the 'HHI' combination.
gas/
* config/tc-arm.c (NEON_ENC_TAB): Add NS_HHI entry.
(CVT_FLAVOUR_VAR): Map f16<->[us]16 flavours to legacy FP16 instruction
encoding.
(do_vfp_nsyn_cvt): Check for use of NS_HHI with the flavours mapped in
this patch in CVT_FLAVOUR_VAR, and check for correctness of immediate
operand.
(do_neon_cvt_1): Accept NS_HHI.
opcodes/
* arm-dis.c (coprocessor_opcodes): Add opcode entries for added VCVT
variants.
gas/testsuite/
* gas/arm/armv8-2-fp16-scalar-ext.d: Check added VCVT variants.
* gas/arm/armv8-2-fp16-scalar-thumb-ext.d: Likewise.
* gas/arm/armv8-2-fp16-scalar-thumb.d: Likewise.
* gas/arm/armv8-2-fp16-scalar.d: Likewise.
* gas/arm/armv8-2-fp16-scalar.s: Likewise.
* gas/arm/armv8.1-m.main-hp.d: Likewise.
Diff:
---
gas/config/tc-arm.c | 34 +++++++++++++++-----
gas/testsuite/gas/arm/armv8-2-fp16-scalar-ext.d | 36 ++++++++++++++++++++++
.../gas/arm/armv8-2-fp16-scalar-thumb-ext.d | 36 ++++++++++++++++++++++
gas/testsuite/gas/arm/armv8-2-fp16-scalar-thumb.d | 36 ++++++++++++++++++++++
gas/testsuite/gas/arm/armv8-2-fp16-scalar.d | 36 ++++++++++++++++++++++
gas/testsuite/gas/arm/armv8-2-fp16-scalar.s | 15 +++++++++
gas/testsuite/gas/arm/armv8.1-m.main-hp.d | 36 ++++++++++++++++++++++
opcodes/arm-dis.c | 4 +++
8 files changed, 226 insertions(+), 7 deletions(-)
diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c
index c02d3101cc1..ac351bfc8df 100644
--- a/gas/config/tc-arm.c
+++ b/gas/config/tc-arm.c
@@ -14672,6 +14672,7 @@ NEON_ENC_TAB
/* Used for MVE tail predicated loop instructions. */\
X(2, (R, R), QUAD), \
/* Half float shape supported so far. */\
+ X (3, (H, H, I), HALF), \
X (2, (H, D), MIXED), \
X (2, (D, H), MIXED), \
X (2, (H, F), MIXED), \
@@ -18634,10 +18635,10 @@ do_neon_shll (void)
CVT_VAR (f32_s32, N_F32, N_S32, whole_reg, "fsltos", "fsitos", NULL) \
CVT_VAR (f32_u32, N_F32, N_U32, whole_reg, "fultos", "fuitos", NULL) \
/* Half-precision conversions. */ \
- CVT_VAR (s16_f16, N_S16, N_F16 | N_KEY, whole_reg, NULL, NULL, NULL) \
- CVT_VAR (u16_f16, N_U16, N_F16 | N_KEY, whole_reg, NULL, NULL, NULL) \
- CVT_VAR (f16_s16, N_F16 | N_KEY, N_S16, whole_reg, NULL, NULL, NULL) \
- CVT_VAR (f16_u16, N_F16 | N_KEY, N_U16, whole_reg, NULL, NULL, NULL) \
+ CVT_VAR (s16_f16, N_S16, N_F16 | N_KEY, whole_reg, "ftoshs", NULL, NULL) \
+ CVT_VAR (u16_f16, N_U16, N_F16 | N_KEY, whole_reg, "ftouhs", NULL, NULL) \
+ CVT_VAR (f16_s16, N_F16 | N_KEY, N_S16, whole_reg, "fshtos", NULL, NULL) \
+ CVT_VAR (f16_u16, N_F16 | N_KEY, N_U16, whole_reg, "fuhtos", NULL, NULL) \
CVT_VAR (f32_f16, N_F32, N_F16, whole_reg, NULL, NULL, NULL) \
CVT_VAR (f16_f32, N_F16, N_F32, whole_reg, NULL, NULL, NULL) \
/* New VCVT instructions introduced by ARMv8.2 fp16 extension. \
@@ -18723,7 +18724,7 @@ do_vfp_nsyn_cvt (enum neon_shape rs, enum neon_cvt_flavour flavour)
const char *opname = 0;
if (rs == NS_DDI || rs == NS_QQI || rs == NS_FFI
- || rs == NS_FHI || rs == NS_HFI)
+ || rs == NS_FHI || rs == NS_HFI || rs == NS_HHI)
{
/* Conversions with immediate bitshift. */
const char *enc[] =
@@ -18741,6 +18742,16 @@ do_vfp_nsyn_cvt (enum neon_shape rs, enum neon_cvt_flavour flavour)
_("operands 0 and 1 must be the same register"));
inst.operands[1] = inst.operands[2];
memset (&inst.operands[2], '\0', sizeof (inst.operands[2]));
+ if (rs == NS_HHI)
+ {
+ constraint (!(flavour == neon_cvt_flavour_f16_s16
+ || flavour == neon_cvt_flavour_s16_f16
+ || flavour == neon_cvt_flavour_f16_u16
+ || flavour == neon_cvt_flavour_u16_f16),
+ _("invalid suffix"));
+ constraint (inst.operands[2].imm < 0 || inst.operands[2].imm > 16,
+ _("immediate value out of range"));
+ }
}
}
else
@@ -18753,6 +18764,11 @@ do_vfp_nsyn_cvt (enum neon_shape rs, enum neon_cvt_flavour flavour)
NULL
#undef CVT_VAR
};
+ constraint ((flavour == neon_cvt_flavour_f16_s16
+ || flavour == neon_cvt_flavour_s16_f16
+ || flavour == neon_cvt_flavour_f16_u16
+ || flavour == neon_cvt_flavour_u16_f16),
+ _("invalid suffix"));
if (flavour < (int) ARRAY_SIZE (enc))
opname = enc[flavour];
@@ -18764,8 +18780,12 @@ do_vfp_nsyn_cvt (enum neon_shape rs, enum neon_cvt_flavour flavour)
/* ARMv8.2 fp16 VCVT instruction. */
if (flavour == neon_cvt_flavour_s32_f16
|| flavour == neon_cvt_flavour_u32_f16
+ || flavour == neon_cvt_flavour_s16_f16
+ || flavour == neon_cvt_flavour_u16_f16
|| flavour == neon_cvt_flavour_f16_u32
- || flavour == neon_cvt_flavour_f16_s32)
+ || flavour == neon_cvt_flavour_f16_s32
+ || flavour == neon_cvt_flavour_f16_s16
+ || flavour == neon_cvt_flavour_f16_u16)
do_scalar_fp16_v82_encode ();
}
@@ -18865,7 +18885,7 @@ do_vfp_nsyn_cvt_fpv8 (enum neon_cvt_flavour flavour,
static void
do_neon_cvt_1 (enum neon_cvt_mode mode)
{
- enum neon_shape rs = neon_select_shape (NS_DDI, NS_QQI, NS_FFI, NS_DD, NS_QQ,
+ enum neon_shape rs = neon_select_shape (NS_DDI, NS_QQI, NS_FFI, NS_HHI, NS_DD, NS_QQ,
NS_FD, NS_DF, NS_FF, NS_QD, NS_DQ,
NS_FH, NS_HF, NS_FHI, NS_HFI,
NS_NULL);
diff --git a/gas/testsuite/gas/arm/armv8-2-fp16-scalar-ext.d b/gas/testsuite/gas/arm/armv8-2-fp16-scalar-ext.d
index df506eb61e4..31730c7f7ba 100644
--- a/gas/testsuite/gas/arm/armv8-2-fp16-scalar-ext.d
+++ b/gas/testsuite/gas/arm/armv8-2-fp16-scalar-ext.d
@@ -73,3 +73,39 @@ Disassembly of section .text:
f0: eef619e5 vrintz.f16 s3, s11
f4: fef02ae4 vins.f16 s5, s9
f8: fef02a64 vmovx.f16 s5, s9
+ fc: eeba0948 vcvt.f16.s16 s0, s0, #0
+ 100: eebb0948 vcvt.f16.u16 s0, s0, #0
+ 104: eebe0948 vcvt.s16.f16 s0, s0, #0
+ 108: eebf0948 vcvt.u16.f16 s0, s0, #0
+ 10c: eeba0946 vcvt.f16.s16 s0, s0, #4
+ 110: eebb0946 vcvt.f16.u16 s0, s0, #4
+ 114: eebe0946 vcvt.s16.f16 s0, s0, #4
+ 118: eebf0946 vcvt.u16.f16 s0, s0, #4
+ 11c: eeba0940 vcvt.f16.s16 s0, s0, #16
+ 120: eebb0940 vcvt.f16.u16 s0, s0, #16
+ 124: eebe0940 vcvt.s16.f16 s0, s0, #16
+ 128: eebf0940 vcvt.u16.f16 s0, s0, #16
+ 12c: eefa2948 vcvt.f16.s16 s5, s5, #0
+ 130: eefb2948 vcvt.f16.u16 s5, s5, #0
+ 134: eefe2948 vcvt.s16.f16 s5, s5, #0
+ 138: eeff2948 vcvt.u16.f16 s5, s5, #0
+ 13c: eeba3946 vcvt.f16.s16 s6, s6, #4
+ 140: eebb3946 vcvt.f16.u16 s6, s6, #4
+ 144: eebe3946 vcvt.s16.f16 s6, s6, #4
+ 148: eebf3946 vcvt.u16.f16 s6, s6, #4
+ 14c: eefa3940 vcvt.f16.s16 s7, s7, #16
+ 150: eefb3940 vcvt.f16.u16 s7, s7, #16
+ 154: eefe3940 vcvt.s16.f16 s7, s7, #16
+ 158: eeff3940 vcvt.u16.f16 s7, s7, #16
+ 15c: eefa7948 vcvt.f16.s16 s15, s15, #0
+ 160: eefb7948 vcvt.f16.u16 s15, s15, #0
+ 164: eefe7948 vcvt.s16.f16 s15, s15, #0
+ 168: eeff7948 vcvt.u16.f16 s15, s15, #0
+ 16c: eefa7946 vcvt.f16.s16 s15, s15, #4
+ 170: eefb7946 vcvt.f16.u16 s15, s15, #4
+ 174: eefe7946 vcvt.s16.f16 s15, s15, #4
+ 178: eeff7946 vcvt.u16.f16 s15, s15, #4
+ 17c: eefa7940 vcvt.f16.s16 s15, s15, #16
+ 180: eefb7940 vcvt.f16.u16 s15, s15, #16
+ 184: eefe7940 vcvt.s16.f16 s15, s15, #16
+ 188: eeff7940 vcvt.u16.f16 s15, s15, #16
diff --git a/gas/testsuite/gas/arm/armv8-2-fp16-scalar-thumb-ext.d b/gas/testsuite/gas/arm/armv8-2-fp16-scalar-thumb-ext.d
index 665dc4cbfbd..f581bc4c7e0 100644
--- a/gas/testsuite/gas/arm/armv8-2-fp16-scalar-thumb-ext.d
+++ b/gas/testsuite/gas/arm/armv8-2-fp16-scalar-thumb-ext.d
@@ -73,3 +73,39 @@ Disassembly of section .text:
f0: eef6 19e5 vrintz.f16 s3, s11
f4: fef0 2ae4 vins.f16 s5, s9
f8: fef0 2a64 vmovx.f16 s5, s9
+ fc: eeba 0948 vcvt.f16.s16 s0, s0, #0
+ 100: eebb 0948 vcvt.f16.u16 s0, s0, #0
+ 104: eebe 0948 vcvt.s16.f16 s0, s0, #0
+ 108: eebf 0948 vcvt.u16.f16 s0, s0, #0
+ 10c: eeba 0946 vcvt.f16.s16 s0, s0, #4
+ 110: eebb 0946 vcvt.f16.u16 s0, s0, #4
+ 114: eebe 0946 vcvt.s16.f16 s0, s0, #4
+ 118: eebf 0946 vcvt.u16.f16 s0, s0, #4
+ 11c: eeba 0940 vcvt.f16.s16 s0, s0, #16
+ 120: eebb 0940 vcvt.f16.u16 s0, s0, #16
+ 124: eebe 0940 vcvt.s16.f16 s0, s0, #16
+ 128: eebf 0940 vcvt.u16.f16 s0, s0, #16
+ 12c: eefa 2948 vcvt.f16.s16 s5, s5, #0
+ 130: eefb 2948 vcvt.f16.u16 s5, s5, #0
+ 134: eefe 2948 vcvt.s16.f16 s5, s5, #0
+ 138: eeff 2948 vcvt.u16.f16 s5, s5, #0
+ 13c: eeba 3946 vcvt.f16.s16 s6, s6, #4
+ 140: eebb 3946 vcvt.f16.u16 s6, s6, #4
+ 144: eebe 3946 vcvt.s16.f16 s6, s6, #4
+ 148: eebf 3946 vcvt.u16.f16 s6, s6, #4
+ 14c: eefa 3940 vcvt.f16.s16 s7, s7, #16
+ 150: eefb 3940 vcvt.f16.u16 s7, s7, #16
+ 154: eefe 3940 vcvt.s16.f16 s7, s7, #16
+ 158: eeff 3940 vcvt.u16.f16 s7, s7, #16
+ 15c: eefa 7948 vcvt.f16.s16 s15, s15, #0
+ 160: eefb 7948 vcvt.f16.u16 s15, s15, #0
+ 164: eefe 7948 vcvt.s16.f16 s15, s15, #0
+ 168: eeff 7948 vcvt.u16.f16 s15, s15, #0
+ 16c: eefa 7946 vcvt.f16.s16 s15, s15, #4
+ 170: eefb 7946 vcvt.f16.u16 s15, s15, #4
+ 174: eefe 7946 vcvt.s16.f16 s15, s15, #4
+ 178: eeff 7946 vcvt.u16.f16 s15, s15, #4
+ 17c: eefa 7940 vcvt.f16.s16 s15, s15, #16
+ 180: eefb 7940 vcvt.f16.u16 s15, s15, #16
+ 184: eefe 7940 vcvt.s16.f16 s15, s15, #16
+ 188: eeff 7940 vcvt.u16.f16 s15, s15, #16
diff --git a/gas/testsuite/gas/arm/armv8-2-fp16-scalar-thumb.d b/gas/testsuite/gas/arm/armv8-2-fp16-scalar-thumb.d
index b41893373fa..e0403acd82a 100644
--- a/gas/testsuite/gas/arm/armv8-2-fp16-scalar-thumb.d
+++ b/gas/testsuite/gas/arm/armv8-2-fp16-scalar-thumb.d
@@ -73,3 +73,39 @@ Disassembly of section .text:
f0: eef6 19e5 vrintz.f16 s3, s11
f4: fef0 2ae4 vins.f16 s5, s9
f8: fef0 2a64 vmovx.f16 s5, s9
+ fc: eeba 0948 vcvt.f16.s16 s0, s0, #0
+ 100: eebb 0948 vcvt.f16.u16 s0, s0, #0
+ 104: eebe 0948 vcvt.s16.f16 s0, s0, #0
+ 108: eebf 0948 vcvt.u16.f16 s0, s0, #0
+ 10c: eeba 0946 vcvt.f16.s16 s0, s0, #4
+ 110: eebb 0946 vcvt.f16.u16 s0, s0, #4
+ 114: eebe 0946 vcvt.s16.f16 s0, s0, #4
+ 118: eebf 0946 vcvt.u16.f16 s0, s0, #4
+ 11c: eeba 0940 vcvt.f16.s16 s0, s0, #16
+ 120: eebb 0940 vcvt.f16.u16 s0, s0, #16
+ 124: eebe 0940 vcvt.s16.f16 s0, s0, #16
+ 128: eebf 0940 vcvt.u16.f16 s0, s0, #16
+ 12c: eefa 2948 vcvt.f16.s16 s5, s5, #0
+ 130: eefb 2948 vcvt.f16.u16 s5, s5, #0
+ 134: eefe 2948 vcvt.s16.f16 s5, s5, #0
+ 138: eeff 2948 vcvt.u16.f16 s5, s5, #0
+ 13c: eeba 3946 vcvt.f16.s16 s6, s6, #4
+ 140: eebb 3946 vcvt.f16.u16 s6, s6, #4
+ 144: eebe 3946 vcvt.s16.f16 s6, s6, #4
+ 148: eebf 3946 vcvt.u16.f16 s6, s6, #4
+ 14c: eefa 3940 vcvt.f16.s16 s7, s7, #16
+ 150: eefb 3940 vcvt.f16.u16 s7, s7, #16
+ 154: eefe 3940 vcvt.s16.f16 s7, s7, #16
+ 158: eeff 3940 vcvt.u16.f16 s7, s7, #16
+ 15c: eefa 7948 vcvt.f16.s16 s15, s15, #0
+ 160: eefb 7948 vcvt.f16.u16 s15, s15, #0
+ 164: eefe 7948 vcvt.s16.f16 s15, s15, #0
+ 168: eeff 7948 vcvt.u16.f16 s15, s15, #0
+ 16c: eefa 7946 vcvt.f16.s16 s15, s15, #4
+ 170: eefb 7946 vcvt.f16.u16 s15, s15, #4
+ 174: eefe 7946 vcvt.s16.f16 s15, s15, #4
+ 178: eeff 7946 vcvt.u16.f16 s15, s15, #4
+ 17c: eefa 7940 vcvt.f16.s16 s15, s15, #16
+ 180: eefb 7940 vcvt.f16.u16 s15, s15, #16
+ 184: eefe 7940 vcvt.s16.f16 s15, s15, #16
+ 188: eeff 7940 vcvt.u16.f16 s15, s15, #16
diff --git a/gas/testsuite/gas/arm/armv8-2-fp16-scalar.d b/gas/testsuite/gas/arm/armv8-2-fp16-scalar.d
index 3111ee4bc25..4c818f8aa8d 100644
--- a/gas/testsuite/gas/arm/armv8-2-fp16-scalar.d
+++ b/gas/testsuite/gas/arm/armv8-2-fp16-scalar.d
@@ -73,3 +73,39 @@ Disassembly of section .text:
f0: eef619e5 vrintz.f16 s3, s11
f4: fef02ae4 vins.f16 s5, s9
f8: fef02a64 vmovx.f16 s5, s9
+ fc: eeba0948 vcvt.f16.s16 s0, s0, #0
+ 100: eebb0948 vcvt.f16.u16 s0, s0, #0
+ 104: eebe0948 vcvt.s16.f16 s0, s0, #0
+ 108: eebf0948 vcvt.u16.f16 s0, s0, #0
+ 10c: eeba0946 vcvt.f16.s16 s0, s0, #4
+ 110: eebb0946 vcvt.f16.u16 s0, s0, #4
+ 114: eebe0946 vcvt.s16.f16 s0, s0, #4
+ 118: eebf0946 vcvt.u16.f16 s0, s0, #4
+ 11c: eeba0940 vcvt.f16.s16 s0, s0, #16
+ 120: eebb0940 vcvt.f16.u16 s0, s0, #16
+ 124: eebe0940 vcvt.s16.f16 s0, s0, #16
+ 128: eebf0940 vcvt.u16.f16 s0, s0, #16
+ 12c: eefa2948 vcvt.f16.s16 s5, s5, #0
+ 130: eefb2948 vcvt.f16.u16 s5, s5, #0
+ 134: eefe2948 vcvt.s16.f16 s5, s5, #0
+ 138: eeff2948 vcvt.u16.f16 s5, s5, #0
+ 13c: eeba3946 vcvt.f16.s16 s6, s6, #4
+ 140: eebb3946 vcvt.f16.u16 s6, s6, #4
+ 144: eebe3946 vcvt.s16.f16 s6, s6, #4
+ 148: eebf3946 vcvt.u16.f16 s6, s6, #4
+ 14c: eefa3940 vcvt.f16.s16 s7, s7, #16
+ 150: eefb3940 vcvt.f16.u16 s7, s7, #16
+ 154: eefe3940 vcvt.s16.f16 s7, s7, #16
+ 158: eeff3940 vcvt.u16.f16 s7, s7, #16
+ 15c: eefa7948 vcvt.f16.s16 s15, s15, #0
+ 160: eefb7948 vcvt.f16.u16 s15, s15, #0
+ 164: eefe7948 vcvt.s16.f16 s15, s15, #0
+ 168: eeff7948 vcvt.u16.f16 s15, s15, #0
+ 16c: eefa7946 vcvt.f16.s16 s15, s15, #4
+ 170: eefb7946 vcvt.f16.u16 s15, s15, #4
+ 174: eefe7946 vcvt.s16.f16 s15, s15, #4
+ 178: eeff7946 vcvt.u16.f16 s15, s15, #4
+ 17c: eefa7940 vcvt.f16.s16 s15, s15, #16
+ 180: eefb7940 vcvt.f16.u16 s15, s15, #16
+ 184: eefe7940 vcvt.s16.f16 s15, s15, #16
+ 188: eeff7940 vcvt.u16.f16 s15, s15, #16
diff --git a/gas/testsuite/gas/arm/armv8-2-fp16-scalar.s b/gas/testsuite/gas/arm/armv8-2-fp16-scalar.s
index fbb788607fb..096545e504d 100644
--- a/gas/testsuite/gas/arm/armv8-2-fp16-scalar.s
+++ b/gas/testsuite/gas/arm/armv8-2-fp16-scalar.s
@@ -58,6 +58,12 @@
.endr
.endm
+ .macro f16_ssi_cvt_imm16 reg0, reg1, imm
+ .irp op, vcvt.f16.s16, vcvt.f16.u16, vcvt.s16.f16, vcvt.u16.f16
+ \op s\reg0, s\reg1, \imm
+ .endr
+ .endm
+
.text
vmov.f16 s0, r1
@@ -84,3 +90,12 @@
f16_ss_cvt_amnpr 5, 10
f16_ss_vrint 3, 11
f16_ss_mov 5, 9
+ f16_ssi_cvt_imm16 0, 0, #0
+ f16_ssi_cvt_imm16 0, 0, #4
+ f16_ssi_cvt_imm16 0, 0, #16
+ f16_ssi_cvt_imm16 5, 5, #0
+ f16_ssi_cvt_imm16 6, 6, #4
+ f16_ssi_cvt_imm16 7, 7, #16
+ f16_ssi_cvt_imm16 15, 15, #0
+ f16_ssi_cvt_imm16 15, 15, #4
+ f16_ssi_cvt_imm16 15, 15, #16
diff --git a/gas/testsuite/gas/arm/armv8.1-m.main-hp.d b/gas/testsuite/gas/arm/armv8.1-m.main-hp.d
index 41ebb842f1d..aa045eed6b8 100644
--- a/gas/testsuite/gas/arm/armv8.1-m.main-hp.d
+++ b/gas/testsuite/gas/arm/armv8.1-m.main-hp.d
@@ -73,3 +73,39 @@ Disassembly of section .text:
f0: eef6 19e5 vrintz.f16 s3, s11
f4: fef0 2ae4 vins.f16 s5, s9
f8: fef0 2a64 vmovx.f16 s5, s9
+ fc: eeba 0948 vcvt.f16.s16 s0, s0, #0
+ 100: eebb 0948 vcvt.f16.u16 s0, s0, #0
+ 104: eebe 0948 vcvt.s16.f16 s0, s0, #0
+ 108: eebf 0948 vcvt.u16.f16 s0, s0, #0
+ 10c: eeba 0946 vcvt.f16.s16 s0, s0, #4
+ 110: eebb 0946 vcvt.f16.u16 s0, s0, #4
+ 114: eebe 0946 vcvt.s16.f16 s0, s0, #4
+ 118: eebf 0946 vcvt.u16.f16 s0, s0, #4
+ 11c: eeba 0940 vcvt.f16.s16 s0, s0, #16
+ 120: eebb 0940 vcvt.f16.u16 s0, s0, #16
+ 124: eebe 0940 vcvt.s16.f16 s0, s0, #16
+ 128: eebf 0940 vcvt.u16.f16 s0, s0, #16
+ 12c: eefa 2948 vcvt.f16.s16 s5, s5, #0
+ 130: eefb 2948 vcvt.f16.u16 s5, s5, #0
+ 134: eefe 2948 vcvt.s16.f16 s5, s5, #0
+ 138: eeff 2948 vcvt.u16.f16 s5, s5, #0
+ 13c: eeba 3946 vcvt.f16.s16 s6, s6, #4
+ 140: eebb 3946 vcvt.f16.u16 s6, s6, #4
+ 144: eebe 3946 vcvt.s16.f16 s6, s6, #4
+ 148: eebf 3946 vcvt.u16.f16 s6, s6, #4
+ 14c: eefa 3940 vcvt.f16.s16 s7, s7, #16
+ 150: eefb 3940 vcvt.f16.u16 s7, s7, #16
+ 154: eefe 3940 vcvt.s16.f16 s7, s7, #16
+ 158: eeff 3940 vcvt.u16.f16 s7, s7, #16
+ 15c: eefa 7948 vcvt.f16.s16 s15, s15, #0
+ 160: eefb 7948 vcvt.f16.u16 s15, s15, #0
+ 164: eefe 7948 vcvt.s16.f16 s15, s15, #0
+ 168: eeff 7948 vcvt.u16.f16 s15, s15, #0
+ 16c: eefa 7946 vcvt.f16.s16 s15, s15, #4
+ 170: eefb 7946 vcvt.f16.u16 s15, s15, #4
+ 174: eefe 7946 vcvt.s16.f16 s15, s15, #4
+ 178: eeff 7946 vcvt.u16.f16 s15, s15, #4
+ 17c: eefa 7940 vcvt.f16.s16 s15, s15, #16
+ 180: eefb 7940 vcvt.f16.u16 s15, s15, #16
+ 184: eefe 7940 vcvt.s16.f16 s15, s15, #16
+ 188: eeff 7940 vcvt.u16.f16 s15, s15, #16
diff --git a/opcodes/arm-dis.c b/opcodes/arm-dis.c
index ef4d3835d95..872d9f1f5ec 100644
--- a/opcodes/arm-dis.c
+++ b/opcodes/arm-dis.c
@@ -885,6 +885,8 @@ static const struct sopcode32 coprocessor_opcodes[] =
0x0eb40a40, 0x0fbf0f50, "vcmp%7'e%c.f32\t%y1, %y0"},
{ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1),
0x0eb40b40, 0x0fbf0f50, "vcmp%7'e%c.f64\t%z1, %z0"},
+ {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST | ARM_EXT2_V8_2A),
+ 0x0eba0940, 0x0fbe0f50, "vcvt%c.f16.%16?us%7?31%7?26\t%y1, %y1, %{I:#%5,0-3k%}"},
{ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V3xD),
0x0eba0a40, 0x0fbe0f50, "vcvt%c.f32.%16?us%7?31%7?26\t%y1, %y1, %{I:#%5,0-3k%}"},
{ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V3),
@@ -893,6 +895,8 @@ static const struct sopcode32 coprocessor_opcodes[] =
0x0ebc0a40, 0x0fbe0f50, "vcvt%7`r%c.%16?su32.f32\t%y1, %y0"},
{ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V1),
0x0ebc0b40, 0x0fbe0f50, "vcvt%7`r%c.%16?su32.f64\t%y1, %z0"},
+ {ANY, ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST | ARM_EXT2_V8_2A),
+ 0x0ebe0940, 0x0fbe0f50, "vcvt%c.%16?us%7?31%7?26.f16\t%y1, %y1, %{I:#%5,0-3k%}"},
{ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V3xD),
0x0ebe0a40, 0x0fbe0f50, "vcvt%c.%16?us%7?31%7?26.f32\t%y1, %y1, %{I:#%5,0-3k%}"},
{ANY, ARM_FEATURE_COPROC (FPU_VFP_EXT_V3),
More information about the Binutils-cvs
mailing list