[ARM] Assembler and disassembler support Dot Product Extension

This patch add assembler and disassembler support for new Dot Product
  Extension.

  The support can be enabled through the new "+dotprod" extension.

include/
	* opcode/arm.h (FPU_NEON_EXT_DOTPROD): New macro.
	(FPU_ARCH_DOTPROD_NEON_VFP_ARMV8): New macro.

gas/
	* config/tc-arm.c (fpu_neon_ext_dotprod): New variable.
	(neon_scalar_for_mul): Improve comments.
	(do_neon_dotproduct): New function to encode Dot Product instructions.
	(do_neon_dotproduct_s): Wrapper function for signed Dot Product
	instructions.
	(do_neon_dotproduct_u): Wrapper function for unsigned Dot Product
	instructions.
	(insns): New entries for vsdot and vudot.
	(arm_extensions): New entry for "dotprod".
	* doc/c-arm.texi: Document new "dotprod" extension.
	* testsuite/gas/arm/dotprod.s: New test source.
	* testsuite/gas/arm/dotprod-illegal.s: New test source.
	* testsuite/gas/arm/dotprod.d: New test.
	* testsuite/gas/arm/dotprod-thumb2.d: New test.
	* testsuite/gas/arm/dotprod-illegal.d: New test.
	* testsuite/gas/arm/dotprod-legacy-arch.d: New test.
	* testsuite/gas/arm/dotprod-illegal.l: New error file.
	* testsuite/gas/arm/dotprod-legacy-arch.l: New error file.

opcodes/
	* arm-dis.c (coprocessor_opcodes): New entries for vsdot and vudot.
This commit is contained in:
Jiong Wang 2017-06-28 11:00:55 +01:00
parent 41664b45ab
commit c604a79ad4
15 changed files with 806 additions and 2 deletions

View File

@ -1,3 +1,24 @@
2017-06-28 Jiong Wang <jiong.wang@arm.com>
* config/tc-arm.c (fpu_neon_ext_dotprod): New variable.
(neon_scalar_for_mul): Improve comments.
(do_neon_dotproduct): New function to encode Dot Product instructions.
(do_neon_dotproduct_s): Wrapper function for signed Dot Product
instructions.
(do_neon_dotproduct_u): Wrapper function for unsigned Dot Product
instructions.
(insns): New entries for vsdot and vudot.
(arm_extensions): New entry for "dotprod".
* doc/c-arm.texi: Document new "dotprod" extension.
* testsuite/gas/arm/dotprod.s: New test source.
* testsuite/gas/arm/dotprod-illegal.s: New test source.
* testsuite/gas/arm/dotprod.d: New test.
* testsuite/gas/arm/dotprod-thumb2.d: New test.
* testsuite/gas/arm/dotprod-illegal.d: New test.
* testsuite/gas/arm/dotprod-legacy-arch.d: New test.
* testsuite/gas/arm/dotprod-illegal.l: New error file.
* testsuite/gas/arm/dotprod-legacy-arch.l: New error file.
2017-06-28 Maciej W. Rozycki <macro@imgtec.com>
* testsuite/gas/mips/elf_mach_interaptiv-mr2.d: New test.

View File

@ -294,6 +294,8 @@ static const arm_feature_set crc_ext_armv8 =
ARM_FEATURE_COPROC (CRC_EXT_ARMV8);
static const arm_feature_set fpu_neon_ext_v8_1 =
ARM_FEATURE_COPROC (FPU_NEON_EXT_RDMA);
static const arm_feature_set fpu_neon_ext_dotprod =
ARM_FEATURE_COPROC (FPU_NEON_EXT_DOTPROD);
static int mfloat_abi_opt = -1;
/* Record user cpu selection for object attributes. */
@ -15023,7 +15025,14 @@ do_neon_ceq (void)
scalars, which are encoded in 5 bits, M : Rm.
For 16-bit scalars, the register is encoded in Rm[2:0] and the index in
M:Rm[3], and for 32-bit scalars, the register is encoded in Rm[3:0] and the
index in M. */
index in M.
Dot Product instructions are similar to multiply instructions except elsize
should always be 32.
This function translates SCALAR, which is GAS's internal encoding of indexed
scalar register, to raw encoding. There is also register and index range
check based on ELSIZE. */
static unsigned
neon_scalar_for_mul (unsigned scalar, unsigned elsize)
@ -17365,6 +17374,79 @@ do_vcadd (void)
inst.instruction |= (size == 32) << 20;
}
/* Dot Product instructions encoding support. */
static void
do_neon_dotproduct (int unsigned_p)
{
enum neon_shape rs;
unsigned scalar_oprd2 = 0;
int high8;
if (inst.cond != COND_ALWAYS)
as_warn (_("Dot Product instructions cannot be conditional, the behaviour "
"is UNPREDICTABLE"));
constraint (!ARM_CPU_HAS_FEATURE (cpu_variant, fpu_neon_ext_armv8),
_(BAD_FPU));
/* Dot Product instructions are in three-same D/Q register format or the third
operand can be a scalar index register. */
if (inst.operands[2].isscalar)
{
scalar_oprd2 = neon_scalar_for_mul (inst.operands[2].reg, 32);
high8 = 0xfe000000;
rs = neon_select_shape (NS_DDS, NS_QQS, NS_NULL);
}
else
{
high8 = 0xfc000000;
rs = neon_select_shape (NS_DDD, NS_QQQ, NS_NULL);
}
if (unsigned_p)
neon_check_type (3, rs, N_EQK, N_EQK, N_KEY | N_U8);
else
neon_check_type (3, rs, N_EQK, N_EQK, N_KEY | N_S8);
/* The "U" bit in traditional Three Same encoding is fixed to 0 for Dot
Product instruction, so we pass 0 as the "ubit" parameter. And the
"Size" field are fixed to 0x2, so we pass 32 as the "size" parameter. */
neon_three_same (neon_quad (rs), 0, 32);
/* Undo neon_dp_fixup. Dot Product instructions are using a slightly
different NEON three-same encoding. */
inst.instruction &= 0x00ffffff;
inst.instruction |= high8;
/* Encode 'U' bit which indicates signedness. */
inst.instruction |= (unsigned_p ? 1 : 0) << 4;
/* Re-encode operand2 if it's indexed scalar operand. What has been encoded
from inst.operand[2].reg in neon_three_same is GAS's internal encoding, not
the instruction encoding. */
if (inst.operands[2].isscalar)
{
inst.instruction &= 0xffffffd0;
inst.instruction |= LOW4 (scalar_oprd2);
inst.instruction |= HI1 (scalar_oprd2) << 5;
}
}
/* Dot Product instructions for signed integer. */
static void
do_neon_dotproduct_s (void)
{
return do_neon_dotproduct (0);
}
/* Dot Product instructions for unsigned integer. */
static void
do_neon_dotproduct_u (void)
{
return do_neon_dotproduct (1);
}
/* Crypto v1 instructions. */
static void
do_crypto_2op_1 (unsigned elttype, int op)
@ -19913,6 +19995,13 @@ static const struct asm_opcode insns[] =
NUF (vcmla, 0, 4, (RNDQ, RNDQ, RNDQ_RNSC, EXPi), vcmla),
NUF (vcadd, 0, 4, (RNDQ, RNDQ, RNDQ, EXPi), vcadd),
#undef ARM_VARIANT
#define ARM_VARIANT & fpu_neon_ext_dotprod
#undef THUMB_VARIANT
#define THUMB_VARIANT & fpu_neon_ext_dotprod
NUF (vsdot, d00, 3, (RNDQ, RNDQ, RNDQ_RNSC), neon_dotproduct_s),
NUF (vudot, d00, 3, (RNDQ, RNDQ, RNDQ_RNSC), neon_dotproduct_u),
#undef ARM_VARIANT
#define ARM_VARIANT & fpu_fpa_ext_v1 /* Core FPA instruction set (V1). */
#undef THUMB_VARIANT
@ -25950,6 +26039,9 @@ static const struct arm_option_extension_value_table arm_extensions[] =
ARM_EXT_OPT ("crypto", FPU_ARCH_CRYPTO_NEON_VFP_ARMV8,
ARM_FEATURE_COPROC (FPU_CRYPTO_ARMV8),
ARM_FEATURE_CORE_LOW (ARM_EXT_V8)),
ARM_EXT_OPT ("dotprod", FPU_ARCH_DOTPROD_NEON_VFP_ARMV8,
ARM_FEATURE_COPROC (FPU_NEON_EXT_DOTPROD),
ARM_ARCH_V8_2A),
ARM_EXT_OPT ("dsp", ARM_FEATURE_CORE_LOW (ARM_EXT_V5ExP | ARM_EXT_V6_DSP),
ARM_FEATURE_CORE_LOW (ARM_EXT_V5ExP | ARM_EXT_V6_DSP),
ARM_FEATURE_CORE (ARM_EXT_V7M, ARM_EXT2_V8M)),

View File

@ -174,6 +174,7 @@ been added, again in ascending alphabetical order. For example,
The following extensions are currently supported:
@code{crc}
@code{crypto} (Cryptography Extensions for v8-A architecture, implies @code{fp+simd}),
@code{dotprod} (Dot Product Extensions for v8.2-A architecture, implies @code{fp+simd}),
@code{fp} (Floating Point Extensions for v8-A architecture),
@code{idiv} (Integer Divide Extensions for v7-A and v7-R architectures),
@code{iwmmxt},

View File

@ -0,0 +1,2 @@
#as: -march=armv8.2-a+dotprod -mfpu=neon-fp-armv8
#error-output: dotprod-illegal.l

View File

@ -0,0 +1,10 @@
[^:]*: Assembler messages:
[^:]*:4: Error: bad type in Neon instruction -- `vudot.s8 d0,d2,d5'
[^:]*:6: Error: bad type in Neon instruction -- `vudot.u16 d0,d2,d5'
[^:]*:7: Error: bad type in Neon instruction -- `vsdot.s16 d1,d12,d18'
[^:]*:9: Error: bad type in Neon instruction -- `vudot.u32 d2,d22,d1'
[^:]*:10: Error: bad type in Neon instruction -- `vsdot.s32 d3,d30,d9'
[^:]*:12: Error: scalar out of range for multiply instruction -- `vudot.u8 d31,d2,d16\[0\]'
[^:]*:13: Error: scalar out of range for multiply instruction -- `vsdot.s8 q13,q14,d22\[1\]'
[^:]*:15: Error: scalar out of range for multiply instruction -- `vudot.u8 d1,d8,d15\[2\]'
[^:]*:16: Error: scalar out of range for multiply instruction -- `vsdot.s8 q14,q7,d15\[3\]'

View File

@ -0,0 +1,16 @@
.text
func:
# name and suffix mismatch.
vudot.s8 d0, d2, d5
# No .*16 suffix support.
vudot.u16 d0, d2, d5
vsdot.s16 d1, d12, d18
# No .*32 suffix support.
vudot.u32 d2, d22, d1
vsdot.s32 d3, d30, d9
# Scalar base register out of bound
vudot.u8 d31, d2, d16[0]
vsdot.s8 q13, q14, d22[1]
# Scalar index out of bound
vudot.u8 d1, d8, d15[2]
vsdot.s8 q14, q7, d15[3]

View File

@ -0,0 +1,3 @@
#as: -march=armv8.1-a+dotprod -mfpu=neon-fp-armv8
#source: dotprod.s
#error-output: dotprod-legacy-arch.l

View File

@ -0,0 +1,3 @@
Assembler messages:
[^:]*: extension does not apply to the base architecture
[^:]*: unrecognized option -march=armv8.1-a\+dotprod

View File

@ -0,0 +1,297 @@
#as: -march=armv8.2-a+dotprod -mfpu=neon-fp-armv8 -mthumb
#source: dotprod.s
#objdump: -d
.*: +file format .*arm.*
Disassembly of section .text:
.* <.*>:
.*: fc22 0d10 vudot.u8 d0, d2, d0
.*: fe22 0d10 vudot.u8 d0, d2, d0\[0\]
.*: fc22 0d18 vudot.u8 d0, d2, d8
.*: fe22 0d18 vudot.u8 d0, d2, d8\[0\]
.*: fc22 0d1f vudot.u8 d0, d2, d15
.*: fe22 0d1f vudot.u8 d0, d2, d15\[0\]
.*: fc2f 0d10 vudot.u8 d0, d15, d0
.*: fe2f 0d10 vudot.u8 d0, d15, d0\[0\]
.*: fc2f 0d18 vudot.u8 d0, d15, d8
.*: fe2f 0d18 vudot.u8 d0, d15, d8\[0\]
.*: fc2f 0d1f vudot.u8 d0, d15, d15
.*: fe2f 0d1f vudot.u8 d0, d15, d15\[0\]
.*: fc2e 0d90 vudot.u8 d0, d30, d0
.*: fe2e 0d90 vudot.u8 d0, d30, d0\[0\]
.*: fc2e 0d98 vudot.u8 d0, d30, d8
.*: fe2e 0d98 vudot.u8 d0, d30, d8\[0\]
.*: fc2e 0d9f vudot.u8 d0, d30, d15
.*: fe2e 0d9f vudot.u8 d0, d30, d15\[0\]
.*: fc22 7d10 vudot.u8 d7, d2, d0
.*: fe22 7d10 vudot.u8 d7, d2, d0\[0\]
.*: fc22 7d18 vudot.u8 d7, d2, d8
.*: fe22 7d18 vudot.u8 d7, d2, d8\[0\]
.*: fc22 7d1f vudot.u8 d7, d2, d15
.*: fe22 7d1f vudot.u8 d7, d2, d15\[0\]
.*: fc2f 7d10 vudot.u8 d7, d15, d0
.*: fe2f 7d10 vudot.u8 d7, d15, d0\[0\]
.*: fc2f 7d18 vudot.u8 d7, d15, d8
.*: fe2f 7d18 vudot.u8 d7, d15, d8\[0\]
.*: fc2f 7d1f vudot.u8 d7, d15, d15
.*: fe2f 7d1f vudot.u8 d7, d15, d15\[0\]
.*: fc2e 7d90 vudot.u8 d7, d30, d0
.*: fe2e 7d90 vudot.u8 d7, d30, d0\[0\]
.*: fc2e 7d98 vudot.u8 d7, d30, d8
.*: fe2e 7d98 vudot.u8 d7, d30, d8\[0\]
.*: fc2e 7d9f vudot.u8 d7, d30, d15
.*: fe2e 7d9f vudot.u8 d7, d30, d15\[0\]
.*: fc62 0d10 vudot.u8 d16, d2, d0
.*: fe62 0d10 vudot.u8 d16, d2, d0\[0\]
.*: fc62 0d18 vudot.u8 d16, d2, d8
.*: fe62 0d18 vudot.u8 d16, d2, d8\[0\]
.*: fc62 0d1f vudot.u8 d16, d2, d15
.*: fe62 0d1f vudot.u8 d16, d2, d15\[0\]
.*: fc6f 0d10 vudot.u8 d16, d15, d0
.*: fe6f 0d10 vudot.u8 d16, d15, d0\[0\]
.*: fc6f 0d18 vudot.u8 d16, d15, d8
.*: fe6f 0d18 vudot.u8 d16, d15, d8\[0\]
.*: fc6f 0d1f vudot.u8 d16, d15, d15
.*: fe6f 0d1f vudot.u8 d16, d15, d15\[0\]
.*: fc6e 0d90 vudot.u8 d16, d30, d0
.*: fe6e 0d90 vudot.u8 d16, d30, d0\[0\]
.*: fc6e 0d98 vudot.u8 d16, d30, d8
.*: fe6e 0d98 vudot.u8 d16, d30, d8\[0\]
.*: fc6e 0d9f vudot.u8 d16, d30, d15
.*: fe6e 0d9f vudot.u8 d16, d30, d15\[0\]
.*: fc62 fd10 vudot.u8 d31, d2, d0
.*: fe62 fd10 vudot.u8 d31, d2, d0\[0\]
.*: fc62 fd18 vudot.u8 d31, d2, d8
.*: fe62 fd18 vudot.u8 d31, d2, d8\[0\]
.*: fc62 fd1f vudot.u8 d31, d2, d15
.*: fe62 fd1f vudot.u8 d31, d2, d15\[0\]
.*: fc6f fd10 vudot.u8 d31, d15, d0
.*: fe6f fd10 vudot.u8 d31, d15, d0\[0\]
.*: fc6f fd18 vudot.u8 d31, d15, d8
.*: fe6f fd18 vudot.u8 d31, d15, d8\[0\]
.*: fc6f fd1f vudot.u8 d31, d15, d15
.*: fe6f fd1f vudot.u8 d31, d15, d15\[0\]
.*: fc6e fd90 vudot.u8 d31, d30, d0
.*: fe6e fd90 vudot.u8 d31, d30, d0\[0\]
.*: fc6e fd98 vudot.u8 d31, d30, d8
.*: fe6e fd98 vudot.u8 d31, d30, d8\[0\]
.*: fc6e fd9f vudot.u8 d31, d30, d15
.*: fe6e fd9f vudot.u8 d31, d30, d15\[0\]
.*: fc22 0d00 vsdot.s8 d0, d2, d0
.*: fe22 0d00 vsdot.s8 d0, d2, d0\[0\]
.*: fc22 0d08 vsdot.s8 d0, d2, d8
.*: fe22 0d08 vsdot.s8 d0, d2, d8\[0\]
.*: fc22 0d0f vsdot.s8 d0, d2, d15
.*: fe22 0d0f vsdot.s8 d0, d2, d15\[0\]
.*: fc2f 0d00 vsdot.s8 d0, d15, d0
.*: fe2f 0d00 vsdot.s8 d0, d15, d0\[0\]
.*: fc2f 0d08 vsdot.s8 d0, d15, d8
.*: fe2f 0d08 vsdot.s8 d0, d15, d8\[0\]
.*: fc2f 0d0f vsdot.s8 d0, d15, d15
.*: fe2f 0d0f vsdot.s8 d0, d15, d15\[0\]
.*: fc2e 0d80 vsdot.s8 d0, d30, d0
.*: fe2e 0d80 vsdot.s8 d0, d30, d0\[0\]
.*: fc2e 0d88 vsdot.s8 d0, d30, d8
.*: fe2e 0d88 vsdot.s8 d0, d30, d8\[0\]
.*: fc2e 0d8f vsdot.s8 d0, d30, d15
.*: fe2e 0d8f vsdot.s8 d0, d30, d15\[0\]
.*: fc22 7d00 vsdot.s8 d7, d2, d0
.*: fe22 7d00 vsdot.s8 d7, d2, d0\[0\]
.*: fc22 7d08 vsdot.s8 d7, d2, d8
.*: fe22 7d08 vsdot.s8 d7, d2, d8\[0\]
.*: fc22 7d0f vsdot.s8 d7, d2, d15
.*: fe22 7d0f vsdot.s8 d7, d2, d15\[0\]
.*: fc2f 7d00 vsdot.s8 d7, d15, d0
.*: fe2f 7d00 vsdot.s8 d7, d15, d0\[0\]
.*: fc2f 7d08 vsdot.s8 d7, d15, d8
.*: fe2f 7d08 vsdot.s8 d7, d15, d8\[0\]
.*: fc2f 7d0f vsdot.s8 d7, d15, d15
.*: fe2f 7d0f vsdot.s8 d7, d15, d15\[0\]
.*: fc2e 7d80 vsdot.s8 d7, d30, d0
.*: fe2e 7d80 vsdot.s8 d7, d30, d0\[0\]
.*: fc2e 7d88 vsdot.s8 d7, d30, d8
.*: fe2e 7d88 vsdot.s8 d7, d30, d8\[0\]
.*: fc2e 7d8f vsdot.s8 d7, d30, d15
.*: fe2e 7d8f vsdot.s8 d7, d30, d15\[0\]
.*: fc62 0d00 vsdot.s8 d16, d2, d0
.*: fe62 0d00 vsdot.s8 d16, d2, d0\[0\]
.*: fc62 0d08 vsdot.s8 d16, d2, d8
.*: fe62 0d08 vsdot.s8 d16, d2, d8\[0\]
.*: fc62 0d0f vsdot.s8 d16, d2, d15
.*: fe62 0d0f vsdot.s8 d16, d2, d15\[0\]
.*: fc6f 0d00 vsdot.s8 d16, d15, d0
.*: fe6f 0d00 vsdot.s8 d16, d15, d0\[0\]
.*: fc6f 0d08 vsdot.s8 d16, d15, d8
.*: fe6f 0d08 vsdot.s8 d16, d15, d8\[0\]
.*: fc6f 0d0f vsdot.s8 d16, d15, d15
.*: fe6f 0d0f vsdot.s8 d16, d15, d15\[0\]
.*: fc6e 0d80 vsdot.s8 d16, d30, d0
.*: fe6e 0d80 vsdot.s8 d16, d30, d0\[0\]
.*: fc6e 0d88 vsdot.s8 d16, d30, d8
.*: fe6e 0d88 vsdot.s8 d16, d30, d8\[0\]
.*: fc6e 0d8f vsdot.s8 d16, d30, d15
.*: fe6e 0d8f vsdot.s8 d16, d30, d15\[0\]
.*: fc62 fd00 vsdot.s8 d31, d2, d0
.*: fe62 fd00 vsdot.s8 d31, d2, d0\[0\]
.*: fc62 fd08 vsdot.s8 d31, d2, d8
.*: fe62 fd08 vsdot.s8 d31, d2, d8\[0\]
.*: fc62 fd0f vsdot.s8 d31, d2, d15
.*: fe62 fd0f vsdot.s8 d31, d2, d15\[0\]
.*: fc6f fd00 vsdot.s8 d31, d15, d0
.*: fe6f fd00 vsdot.s8 d31, d15, d0\[0\]
.*: fc6f fd08 vsdot.s8 d31, d15, d8
.*: fe6f fd08 vsdot.s8 d31, d15, d8\[0\]
.*: fc6f fd0f vsdot.s8 d31, d15, d15
.*: fe6f fd0f vsdot.s8 d31, d15, d15\[0\]
.*: fc6e fd80 vsdot.s8 d31, d30, d0
.*: fe6e fd80 vsdot.s8 d31, d30, d0\[0\]
.*: fc6e fd88 vsdot.s8 d31, d30, d8
.*: fe6e fd88 vsdot.s8 d31, d30, d8\[0\]
.*: fc6e fd8f vsdot.s8 d31, d30, d15
.*: fe6e fd8f vsdot.s8 d31, d30, d15\[0\]
.*: fc24 0d50 vudot.u8 q0, q2, q0
.*: fe24 0d70 vudot.u8 q0, q2, d0\[1\]
.*: fc24 0d5e vudot.u8 q0, q2, q7
.*: fe24 0d77 vudot.u8 q0, q2, d7\[1\]
.*: fc24 0d7e vudot.u8 q0, q2, q15
.*: fe24 0d7f vudot.u8 q0, q2, d15\[1\]
.*: fc26 0d50 vudot.u8 q0, q3, q0
.*: fe26 0d70 vudot.u8 q0, q3, d0\[1\]
.*: fc26 0d5e vudot.u8 q0, q3, q7
.*: fe26 0d77 vudot.u8 q0, q3, d7\[1\]
.*: fc26 0d7e vudot.u8 q0, q3, q15
.*: fe26 0d7f vudot.u8 q0, q3, d15\[1\]
.*: fc2c 0dd0 vudot.u8 q0, q14, q0
.*: fe2c 0df0 vudot.u8 q0, q14, d0\[1\]
.*: fc2c 0dde vudot.u8 q0, q14, q7
.*: fe2c 0df7 vudot.u8 q0, q14, d7\[1\]
.*: fc2c 0dfe vudot.u8 q0, q14, q15
.*: fe2c 0dff vudot.u8 q0, q14, d15\[1\]
.*: fc24 2d50 vudot.u8 q1, q2, q0
.*: fe24 2d70 vudot.u8 q1, q2, d0\[1\]
.*: fc24 2d5e vudot.u8 q1, q2, q7
.*: fe24 2d77 vudot.u8 q1, q2, d7\[1\]
.*: fc24 2d7e vudot.u8 q1, q2, q15
.*: fe24 2d7f vudot.u8 q1, q2, d15\[1\]
.*: fc26 2d50 vudot.u8 q1, q3, q0
.*: fe26 2d70 vudot.u8 q1, q3, d0\[1\]
.*: fc26 2d5e vudot.u8 q1, q3, q7
.*: fe26 2d77 vudot.u8 q1, q3, d7\[1\]
.*: fc26 2d7e vudot.u8 q1, q3, q15
.*: fe26 2d7f vudot.u8 q1, q3, d15\[1\]
.*: fc2c 2dd0 vudot.u8 q1, q14, q0
.*: fe2c 2df0 vudot.u8 q1, q14, d0\[1\]
.*: fc2c 2dde vudot.u8 q1, q14, q7
.*: fe2c 2df7 vudot.u8 q1, q14, d7\[1\]
.*: fc2c 2dfe vudot.u8 q1, q14, q15
.*: fe2c 2dff vudot.u8 q1, q14, d15\[1\]
.*: fc24 cd50 vudot.u8 q6, q2, q0
.*: fe24 cd70 vudot.u8 q6, q2, d0\[1\]
.*: fc24 cd5e vudot.u8 q6, q2, q7
.*: fe24 cd77 vudot.u8 q6, q2, d7\[1\]
.*: fc24 cd7e vudot.u8 q6, q2, q15
.*: fe24 cd7f vudot.u8 q6, q2, d15\[1\]
.*: fc26 cd50 vudot.u8 q6, q3, q0
.*: fe26 cd70 vudot.u8 q6, q3, d0\[1\]
.*: fc26 cd5e vudot.u8 q6, q3, q7
.*: fe26 cd77 vudot.u8 q6, q3, d7\[1\]
.*: fc26 cd7e vudot.u8 q6, q3, q15
.*: fe26 cd7f vudot.u8 q6, q3, d15\[1\]
.*: fc2c cdd0 vudot.u8 q6, q14, q0
.*: fe2c cdf0 vudot.u8 q6, q14, d0\[1\]
.*: fc2c cdde vudot.u8 q6, q14, q7
.*: fe2c cdf7 vudot.u8 q6, q14, d7\[1\]
.*: fc2c cdfe vudot.u8 q6, q14, q15
.*: fe2c cdff vudot.u8 q6, q14, d15\[1\]
.*: fc64 ad50 vudot.u8 q13, q2, q0
.*: fe64 ad70 vudot.u8 q13, q2, d0\[1\]
.*: fc64 ad5e vudot.u8 q13, q2, q7
.*: fe64 ad77 vudot.u8 q13, q2, d7\[1\]
.*: fc64 ad7e vudot.u8 q13, q2, q15
.*: fe64 ad7f vudot.u8 q13, q2, d15\[1\]
.*: fc66 ad50 vudot.u8 q13, q3, q0
.*: fe66 ad70 vudot.u8 q13, q3, d0\[1\]
.*: fc66 ad5e vudot.u8 q13, q3, q7
.*: fe66 ad77 vudot.u8 q13, q3, d7\[1\]
.*: fc66 ad7e vudot.u8 q13, q3, q15
.*: fe66 ad7f vudot.u8 q13, q3, d15\[1\]
.*: fc6c add0 vudot.u8 q13, q14, q0
.*: fe6c adf0 vudot.u8 q13, q14, d0\[1\]
.*: fc6c adde vudot.u8 q13, q14, q7
.*: fe6c adf7 vudot.u8 q13, q14, d7\[1\]
.*: fc6c adfe vudot.u8 q13, q14, q15
.*: fe6c adff vudot.u8 q13, q14, d15\[1\]
.*: fc24 0d40 vsdot.s8 q0, q2, q0
.*: fe24 0d60 vsdot.s8 q0, q2, d0\[1\]
.*: fc24 0d4e vsdot.s8 q0, q2, q7
.*: fe24 0d67 vsdot.s8 q0, q2, d7\[1\]
.*: fc24 0d6e vsdot.s8 q0, q2, q15
.*: fe24 0d6f vsdot.s8 q0, q2, d15\[1\]
.*: fc26 0d40 vsdot.s8 q0, q3, q0
.*: fe26 0d60 vsdot.s8 q0, q3, d0\[1\]
.*: fc26 0d4e vsdot.s8 q0, q3, q7
.*: fe26 0d67 vsdot.s8 q0, q3, d7\[1\]
.*: fc26 0d6e vsdot.s8 q0, q3, q15
.*: fe26 0d6f vsdot.s8 q0, q3, d15\[1\]
.*: fc2c 0dc0 vsdot.s8 q0, q14, q0
.*: fe2c 0de0 vsdot.s8 q0, q14, d0\[1\]
.*: fc2c 0dce vsdot.s8 q0, q14, q7
.*: fe2c 0de7 vsdot.s8 q0, q14, d7\[1\]
.*: fc2c 0dee vsdot.s8 q0, q14, q15
.*: fe2c 0def vsdot.s8 q0, q14, d15\[1\]
.*: fc24 2d40 vsdot.s8 q1, q2, q0
.*: fe24 2d60 vsdot.s8 q1, q2, d0\[1\]
.*: fc24 2d4e vsdot.s8 q1, q2, q7
.*: fe24 2d67 vsdot.s8 q1, q2, d7\[1\]
.*: fc24 2d6e vsdot.s8 q1, q2, q15
.*: fe24 2d6f vsdot.s8 q1, q2, d15\[1\]
.*: fc26 2d40 vsdot.s8 q1, q3, q0
.*: fe26 2d60 vsdot.s8 q1, q3, d0\[1\]
.*: fc26 2d4e vsdot.s8 q1, q3, q7
.*: fe26 2d67 vsdot.s8 q1, q3, d7\[1\]
.*: fc26 2d6e vsdot.s8 q1, q3, q15
.*: fe26 2d6f vsdot.s8 q1, q3, d15\[1\]
.*: fc2c 2dc0 vsdot.s8 q1, q14, q0
.*: fe2c 2de0 vsdot.s8 q1, q14, d0\[1\]
.*: fc2c 2dce vsdot.s8 q1, q14, q7
.*: fe2c 2de7 vsdot.s8 q1, q14, d7\[1\]
.*: fc2c 2dee vsdot.s8 q1, q14, q15
.*: fe2c 2def vsdot.s8 q1, q14, d15\[1\]
.*: fc24 cd40 vsdot.s8 q6, q2, q0
.*: fe24 cd60 vsdot.s8 q6, q2, d0\[1\]
.*: fc24 cd4e vsdot.s8 q6, q2, q7
.*: fe24 cd67 vsdot.s8 q6, q2, d7\[1\]
.*: fc24 cd6e vsdot.s8 q6, q2, q15
.*: fe24 cd6f vsdot.s8 q6, q2, d15\[1\]
.*: fc26 cd40 vsdot.s8 q6, q3, q0
.*: fe26 cd60 vsdot.s8 q6, q3, d0\[1\]
.*: fc26 cd4e vsdot.s8 q6, q3, q7
.*: fe26 cd67 vsdot.s8 q6, q3, d7\[1\]
.*: fc26 cd6e vsdot.s8 q6, q3, q15
.*: fe26 cd6f vsdot.s8 q6, q3, d15\[1\]
.*: fc2c cdc0 vsdot.s8 q6, q14, q0
.*: fe2c cde0 vsdot.s8 q6, q14, d0\[1\]
.*: fc2c cdce vsdot.s8 q6, q14, q7
.*: fe2c cde7 vsdot.s8 q6, q14, d7\[1\]
.*: fc2c cdee vsdot.s8 q6, q14, q15
.*: fe2c cdef vsdot.s8 q6, q14, d15\[1\]
.*: fc64 ad40 vsdot.s8 q13, q2, q0
.*: fe64 ad60 vsdot.s8 q13, q2, d0\[1\]
.*: fc64 ad4e vsdot.s8 q13, q2, q7
.*: fe64 ad67 vsdot.s8 q13, q2, d7\[1\]
.*: fc64 ad6e vsdot.s8 q13, q2, q15
.*: fe64 ad6f vsdot.s8 q13, q2, d15\[1\]
.*: fc66 ad40 vsdot.s8 q13, q3, q0
.*: fe66 ad60 vsdot.s8 q13, q3, d0\[1\]
.*: fc66 ad4e vsdot.s8 q13, q3, q7
.*: fe66 ad67 vsdot.s8 q13, q3, d7\[1\]
.*: fc66 ad6e vsdot.s8 q13, q3, q15
.*: fe66 ad6f vsdot.s8 q13, q3, d15\[1\]
.*: fc6c adc0 vsdot.s8 q13, q14, q0
.*: fe6c ade0 vsdot.s8 q13, q14, d0\[1\]
.*: fc6c adce vsdot.s8 q13, q14, q7
.*: fe6c ade7 vsdot.s8 q13, q14, d7\[1\]
.*: fc6c adee vsdot.s8 q13, q14, q15
.*: fe6c adef vsdot.s8 q13, q14, d15\[1\]

View File

@ -0,0 +1,297 @@
#no fpu options passed, we expect dotprod to imply simd+fp
#as: -march=armv8.2-a+dotprod
#objdump: -d
.*: +file format .*arm.*
Disassembly of section .text:
.* <.*>:
.*: fc220d10 vudot.u8 d0, d2, d0
.*: fe220d10 vudot.u8 d0, d2, d0\[0\]
.*: fc220d18 vudot.u8 d0, d2, d8
.*: fe220d18 vudot.u8 d0, d2, d8\[0\]
.*: fc220d1f vudot.u8 d0, d2, d15
.*: fe220d1f vudot.u8 d0, d2, d15\[0\]
.*: fc2f0d10 vudot.u8 d0, d15, d0
.*: fe2f0d10 vudot.u8 d0, d15, d0\[0\]
.*: fc2f0d18 vudot.u8 d0, d15, d8
.*: fe2f0d18 vudot.u8 d0, d15, d8\[0\]
.*: fc2f0d1f vudot.u8 d0, d15, d15
.*: fe2f0d1f vudot.u8 d0, d15, d15\[0\]
.*: fc2e0d90 vudot.u8 d0, d30, d0
.*: fe2e0d90 vudot.u8 d0, d30, d0\[0\]
.*: fc2e0d98 vudot.u8 d0, d30, d8
.*: fe2e0d98 vudot.u8 d0, d30, d8\[0\]
.*: fc2e0d9f vudot.u8 d0, d30, d15
.*: fe2e0d9f vudot.u8 d0, d30, d15\[0\]
.*: fc227d10 vudot.u8 d7, d2, d0
.*: fe227d10 vudot.u8 d7, d2, d0\[0\]
.*: fc227d18 vudot.u8 d7, d2, d8
.*: fe227d18 vudot.u8 d7, d2, d8\[0\]
.*: fc227d1f vudot.u8 d7, d2, d15
.*: fe227d1f vudot.u8 d7, d2, d15\[0\]
.*: fc2f7d10 vudot.u8 d7, d15, d0
.*: fe2f7d10 vudot.u8 d7, d15, d0\[0\]
.*: fc2f7d18 vudot.u8 d7, d15, d8
.*: fe2f7d18 vudot.u8 d7, d15, d8\[0\]
.*: fc2f7d1f vudot.u8 d7, d15, d15
.*: fe2f7d1f vudot.u8 d7, d15, d15\[0\]
.*: fc2e7d90 vudot.u8 d7, d30, d0
.*: fe2e7d90 vudot.u8 d7, d30, d0\[0\]
.*: fc2e7d98 vudot.u8 d7, d30, d8
.*: fe2e7d98 vudot.u8 d7, d30, d8\[0\]
.*: fc2e7d9f vudot.u8 d7, d30, d15
.*: fe2e7d9f vudot.u8 d7, d30, d15\[0\]
.*: fc620d10 vudot.u8 d16, d2, d0
.*: fe620d10 vudot.u8 d16, d2, d0\[0\]
.*: fc620d18 vudot.u8 d16, d2, d8
.*: fe620d18 vudot.u8 d16, d2, d8\[0\]
.*: fc620d1f vudot.u8 d16, d2, d15
.*: fe620d1f vudot.u8 d16, d2, d15\[0\]
.*: fc6f0d10 vudot.u8 d16, d15, d0
.*: fe6f0d10 vudot.u8 d16, d15, d0\[0\]
.*: fc6f0d18 vudot.u8 d16, d15, d8
.*: fe6f0d18 vudot.u8 d16, d15, d8\[0\]
.*: fc6f0d1f vudot.u8 d16, d15, d15
.*: fe6f0d1f vudot.u8 d16, d15, d15\[0\]
.*: fc6e0d90 vudot.u8 d16, d30, d0
.*: fe6e0d90 vudot.u8 d16, d30, d0\[0\]
.*: fc6e0d98 vudot.u8 d16, d30, d8
.*: fe6e0d98 vudot.u8 d16, d30, d8\[0\]
.*: fc6e0d9f vudot.u8 d16, d30, d15
.*: fe6e0d9f vudot.u8 d16, d30, d15\[0\]
.*: fc62fd10 vudot.u8 d31, d2, d0
.*: fe62fd10 vudot.u8 d31, d2, d0\[0\]
.*: fc62fd18 vudot.u8 d31, d2, d8
.*: fe62fd18 vudot.u8 d31, d2, d8\[0\]
.*: fc62fd1f vudot.u8 d31, d2, d15
.*: fe62fd1f vudot.u8 d31, d2, d15\[0\]
.*: fc6ffd10 vudot.u8 d31, d15, d0
.*: fe6ffd10 vudot.u8 d31, d15, d0\[0\]
.*: fc6ffd18 vudot.u8 d31, d15, d8
.*: fe6ffd18 vudot.u8 d31, d15, d8\[0\]
.*: fc6ffd1f vudot.u8 d31, d15, d15
.*: fe6ffd1f vudot.u8 d31, d15, d15\[0\]
.*: fc6efd90 vudot.u8 d31, d30, d0
.*: fe6efd90 vudot.u8 d31, d30, d0\[0\]
.*: fc6efd98 vudot.u8 d31, d30, d8
.*: fe6efd98 vudot.u8 d31, d30, d8\[0\]
.*: fc6efd9f vudot.u8 d31, d30, d15
.*: fe6efd9f vudot.u8 d31, d30, d15\[0\]
.*: fc220d00 vsdot.s8 d0, d2, d0
.*: fe220d00 vsdot.s8 d0, d2, d0\[0\]
.*: fc220d08 vsdot.s8 d0, d2, d8
.*: fe220d08 vsdot.s8 d0, d2, d8\[0\]
.*: fc220d0f vsdot.s8 d0, d2, d15
.*: fe220d0f vsdot.s8 d0, d2, d15\[0\]
.*: fc2f0d00 vsdot.s8 d0, d15, d0
.*: fe2f0d00 vsdot.s8 d0, d15, d0\[0\]
.*: fc2f0d08 vsdot.s8 d0, d15, d8
.*: fe2f0d08 vsdot.s8 d0, d15, d8\[0\]
.*: fc2f0d0f vsdot.s8 d0, d15, d15
.*: fe2f0d0f vsdot.s8 d0, d15, d15\[0\]
.*: fc2e0d80 vsdot.s8 d0, d30, d0
.*: fe2e0d80 vsdot.s8 d0, d30, d0\[0\]
.*: fc2e0d88 vsdot.s8 d0, d30, d8
.*: fe2e0d88 vsdot.s8 d0, d30, d8\[0\]
.*: fc2e0d8f vsdot.s8 d0, d30, d15
.*: fe2e0d8f vsdot.s8 d0, d30, d15\[0\]
.*: fc227d00 vsdot.s8 d7, d2, d0
.*: fe227d00 vsdot.s8 d7, d2, d0\[0\]
.*: fc227d08 vsdot.s8 d7, d2, d8
.*: fe227d08 vsdot.s8 d7, d2, d8\[0\]
.*: fc227d0f vsdot.s8 d7, d2, d15
.*: fe227d0f vsdot.s8 d7, d2, d15\[0\]
.*: fc2f7d00 vsdot.s8 d7, d15, d0
.*: fe2f7d00 vsdot.s8 d7, d15, d0\[0\]
.*: fc2f7d08 vsdot.s8 d7, d15, d8
.*: fe2f7d08 vsdot.s8 d7, d15, d8\[0\]
.*: fc2f7d0f vsdot.s8 d7, d15, d15
.*: fe2f7d0f vsdot.s8 d7, d15, d15\[0\]
.*: fc2e7d80 vsdot.s8 d7, d30, d0
.*: fe2e7d80 vsdot.s8 d7, d30, d0\[0\]
.*: fc2e7d88 vsdot.s8 d7, d30, d8
.*: fe2e7d88 vsdot.s8 d7, d30, d8\[0\]
.*: fc2e7d8f vsdot.s8 d7, d30, d15
.*: fe2e7d8f vsdot.s8 d7, d30, d15\[0\]
.*: fc620d00 vsdot.s8 d16, d2, d0
.*: fe620d00 vsdot.s8 d16, d2, d0\[0\]
.*: fc620d08 vsdot.s8 d16, d2, d8
.*: fe620d08 vsdot.s8 d16, d2, d8\[0\]
.*: fc620d0f vsdot.s8 d16, d2, d15
.*: fe620d0f vsdot.s8 d16, d2, d15\[0\]
.*: fc6f0d00 vsdot.s8 d16, d15, d0
.*: fe6f0d00 vsdot.s8 d16, d15, d0\[0\]
.*: fc6f0d08 vsdot.s8 d16, d15, d8
.*: fe6f0d08 vsdot.s8 d16, d15, d8\[0\]
.*: fc6f0d0f vsdot.s8 d16, d15, d15
.*: fe6f0d0f vsdot.s8 d16, d15, d15\[0\]
.*: fc6e0d80 vsdot.s8 d16, d30, d0
.*: fe6e0d80 vsdot.s8 d16, d30, d0\[0\]
.*: fc6e0d88 vsdot.s8 d16, d30, d8
.*: fe6e0d88 vsdot.s8 d16, d30, d8\[0\]
.*: fc6e0d8f vsdot.s8 d16, d30, d15
.*: fe6e0d8f vsdot.s8 d16, d30, d15\[0\]
.*: fc62fd00 vsdot.s8 d31, d2, d0
.*: fe62fd00 vsdot.s8 d31, d2, d0\[0\]
.*: fc62fd08 vsdot.s8 d31, d2, d8
.*: fe62fd08 vsdot.s8 d31, d2, d8\[0\]
.*: fc62fd0f vsdot.s8 d31, d2, d15
.*: fe62fd0f vsdot.s8 d31, d2, d15\[0\]
.*: fc6ffd00 vsdot.s8 d31, d15, d0
.*: fe6ffd00 vsdot.s8 d31, d15, d0\[0\]
.*: fc6ffd08 vsdot.s8 d31, d15, d8
.*: fe6ffd08 vsdot.s8 d31, d15, d8\[0\]
.*: fc6ffd0f vsdot.s8 d31, d15, d15
.*: fe6ffd0f vsdot.s8 d31, d15, d15\[0\]
.*: fc6efd80 vsdot.s8 d31, d30, d0
.*: fe6efd80 vsdot.s8 d31, d30, d0\[0\]
.*: fc6efd88 vsdot.s8 d31, d30, d8
.*: fe6efd88 vsdot.s8 d31, d30, d8\[0\]
.*: fc6efd8f vsdot.s8 d31, d30, d15
.*: fe6efd8f vsdot.s8 d31, d30, d15\[0\]
.*: fc240d50 vudot.u8 q0, q2, q0
.*: fe240d70 vudot.u8 q0, q2, d0\[1\]
.*: fc240d5e vudot.u8 q0, q2, q7
.*: fe240d77 vudot.u8 q0, q2, d7\[1\]
.*: fc240d7e vudot.u8 q0, q2, q15
.*: fe240d7f vudot.u8 q0, q2, d15\[1\]
.*: fc260d50 vudot.u8 q0, q3, q0
.*: fe260d70 vudot.u8 q0, q3, d0\[1\]
.*: fc260d5e vudot.u8 q0, q3, q7
.*: fe260d77 vudot.u8 q0, q3, d7\[1\]
.*: fc260d7e vudot.u8 q0, q3, q15
.*: fe260d7f vudot.u8 q0, q3, d15\[1\]
.*: fc2c0dd0 vudot.u8 q0, q14, q0
.*: fe2c0df0 vudot.u8 q0, q14, d0\[1\]
.*: fc2c0dde vudot.u8 q0, q14, q7
.*: fe2c0df7 vudot.u8 q0, q14, d7\[1\]
.*: fc2c0dfe vudot.u8 q0, q14, q15
.*: fe2c0dff vudot.u8 q0, q14, d15\[1\]
.*: fc242d50 vudot.u8 q1, q2, q0
.*: fe242d70 vudot.u8 q1, q2, d0\[1\]
.*: fc242d5e vudot.u8 q1, q2, q7
.*: fe242d77 vudot.u8 q1, q2, d7\[1\]
.*: fc242d7e vudot.u8 q1, q2, q15
.*: fe242d7f vudot.u8 q1, q2, d15\[1\]
.*: fc262d50 vudot.u8 q1, q3, q0
.*: fe262d70 vudot.u8 q1, q3, d0\[1\]
.*: fc262d5e vudot.u8 q1, q3, q7
.*: fe262d77 vudot.u8 q1, q3, d7\[1\]
.*: fc262d7e vudot.u8 q1, q3, q15
.*: fe262d7f vudot.u8 q1, q3, d15\[1\]
.*: fc2c2dd0 vudot.u8 q1, q14, q0
.*: fe2c2df0 vudot.u8 q1, q14, d0\[1\]
.*: fc2c2dde vudot.u8 q1, q14, q7
.*: fe2c2df7 vudot.u8 q1, q14, d7\[1\]
.*: fc2c2dfe vudot.u8 q1, q14, q15
.*: fe2c2dff vudot.u8 q1, q14, d15\[1\]
.*: fc24cd50 vudot.u8 q6, q2, q0
.*: fe24cd70 vudot.u8 q6, q2, d0\[1\]
.*: fc24cd5e vudot.u8 q6, q2, q7
.*: fe24cd77 vudot.u8 q6, q2, d7\[1\]
.*: fc24cd7e vudot.u8 q6, q2, q15
.*: fe24cd7f vudot.u8 q6, q2, d15\[1\]
.*: fc26cd50 vudot.u8 q6, q3, q0
.*: fe26cd70 vudot.u8 q6, q3, d0\[1\]
.*: fc26cd5e vudot.u8 q6, q3, q7
.*: fe26cd77 vudot.u8 q6, q3, d7\[1\]
.*: fc26cd7e vudot.u8 q6, q3, q15
.*: fe26cd7f vudot.u8 q6, q3, d15\[1\]
.*: fc2ccdd0 vudot.u8 q6, q14, q0
.*: fe2ccdf0 vudot.u8 q6, q14, d0\[1\]
.*: fc2ccdde vudot.u8 q6, q14, q7
.*: fe2ccdf7 vudot.u8 q6, q14, d7\[1\]
.*: fc2ccdfe vudot.u8 q6, q14, q15
.*: fe2ccdff vudot.u8 q6, q14, d15\[1\]
.*: fc64ad50 vudot.u8 q13, q2, q0
.*: fe64ad70 vudot.u8 q13, q2, d0\[1\]
.*: fc64ad5e vudot.u8 q13, q2, q7
.*: fe64ad77 vudot.u8 q13, q2, d7\[1\]
.*: fc64ad7e vudot.u8 q13, q2, q15
.*: fe64ad7f vudot.u8 q13, q2, d15\[1\]
.*: fc66ad50 vudot.u8 q13, q3, q0
.*: fe66ad70 vudot.u8 q13, q3, d0\[1\]
.*: fc66ad5e vudot.u8 q13, q3, q7
.*: fe66ad77 vudot.u8 q13, q3, d7\[1\]
.*: fc66ad7e vudot.u8 q13, q3, q15
.*: fe66ad7f vudot.u8 q13, q3, d15\[1\]
.*: fc6cadd0 vudot.u8 q13, q14, q0
.*: fe6cadf0 vudot.u8 q13, q14, d0\[1\]
.*: fc6cadde vudot.u8 q13, q14, q7
.*: fe6cadf7 vudot.u8 q13, q14, d7\[1\]
.*: fc6cadfe vudot.u8 q13, q14, q15
.*: fe6cadff vudot.u8 q13, q14, d15\[1\]
.*: fc240d40 vsdot.s8 q0, q2, q0
.*: fe240d60 vsdot.s8 q0, q2, d0\[1\]
.*: fc240d4e vsdot.s8 q0, q2, q7
.*: fe240d67 vsdot.s8 q0, q2, d7\[1\]
.*: fc240d6e vsdot.s8 q0, q2, q15
.*: fe240d6f vsdot.s8 q0, q2, d15\[1\]
.*: fc260d40 vsdot.s8 q0, q3, q0
.*: fe260d60 vsdot.s8 q0, q3, d0\[1\]
.*: fc260d4e vsdot.s8 q0, q3, q7
.*: fe260d67 vsdot.s8 q0, q3, d7\[1\]
.*: fc260d6e vsdot.s8 q0, q3, q15
.*: fe260d6f vsdot.s8 q0, q3, d15\[1\]
.*: fc2c0dc0 vsdot.s8 q0, q14, q0
.*: fe2c0de0 vsdot.s8 q0, q14, d0\[1\]
.*: fc2c0dce vsdot.s8 q0, q14, q7
.*: fe2c0de7 vsdot.s8 q0, q14, d7\[1\]
.*: fc2c0dee vsdot.s8 q0, q14, q15
.*: fe2c0def vsdot.s8 q0, q14, d15\[1\]
.*: fc242d40 vsdot.s8 q1, q2, q0
.*: fe242d60 vsdot.s8 q1, q2, d0\[1\]
.*: fc242d4e vsdot.s8 q1, q2, q7
.*: fe242d67 vsdot.s8 q1, q2, d7\[1\]
.*: fc242d6e vsdot.s8 q1, q2, q15
.*: fe242d6f vsdot.s8 q1, q2, d15\[1\]
.*: fc262d40 vsdot.s8 q1, q3, q0
.*: fe262d60 vsdot.s8 q1, q3, d0\[1\]
.*: fc262d4e vsdot.s8 q1, q3, q7
.*: fe262d67 vsdot.s8 q1, q3, d7\[1\]
.*: fc262d6e vsdot.s8 q1, q3, q15
.*: fe262d6f vsdot.s8 q1, q3, d15\[1\]
.*: fc2c2dc0 vsdot.s8 q1, q14, q0
.*: fe2c2de0 vsdot.s8 q1, q14, d0\[1\]
.*: fc2c2dce vsdot.s8 q1, q14, q7
.*: fe2c2de7 vsdot.s8 q1, q14, d7\[1\]
.*: fc2c2dee vsdot.s8 q1, q14, q15
.*: fe2c2def vsdot.s8 q1, q14, d15\[1\]
.*: fc24cd40 vsdot.s8 q6, q2, q0
.*: fe24cd60 vsdot.s8 q6, q2, d0\[1\]
.*: fc24cd4e vsdot.s8 q6, q2, q7
.*: fe24cd67 vsdot.s8 q6, q2, d7\[1\]
.*: fc24cd6e vsdot.s8 q6, q2, q15
.*: fe24cd6f vsdot.s8 q6, q2, d15\[1\]
.*: fc26cd40 vsdot.s8 q6, q3, q0
.*: fe26cd60 vsdot.s8 q6, q3, d0\[1\]
.*: fc26cd4e vsdot.s8 q6, q3, q7
.*: fe26cd67 vsdot.s8 q6, q3, d7\[1\]
.*: fc26cd6e vsdot.s8 q6, q3, q15
.*: fe26cd6f vsdot.s8 q6, q3, d15\[1\]
.*: fc2ccdc0 vsdot.s8 q6, q14, q0
.*: fe2ccde0 vsdot.s8 q6, q14, d0\[1\]
.*: fc2ccdce vsdot.s8 q6, q14, q7
.*: fe2ccde7 vsdot.s8 q6, q14, d7\[1\]
.*: fc2ccdee vsdot.s8 q6, q14, q15
.*: fe2ccdef vsdot.s8 q6, q14, d15\[1\]
.*: fc64ad40 vsdot.s8 q13, q2, q0
.*: fe64ad60 vsdot.s8 q13, q2, d0\[1\]
.*: fc64ad4e vsdot.s8 q13, q2, q7
.*: fe64ad67 vsdot.s8 q13, q2, d7\[1\]
.*: fc64ad6e vsdot.s8 q13, q2, q15
.*: fe64ad6f vsdot.s8 q13, q2, d15\[1\]
.*: fc66ad40 vsdot.s8 q13, q3, q0
.*: fe66ad60 vsdot.s8 q13, q3, d0\[1\]
.*: fc66ad4e vsdot.s8 q13, q3, q7
.*: fe66ad67 vsdot.s8 q13, q3, d7\[1\]
.*: fc66ad6e vsdot.s8 q13, q3, q15
.*: fe66ad6f vsdot.s8 q13, q3, d15\[1\]
.*: fc6cadc0 vsdot.s8 q13, q14, q0
.*: fe6cade0 vsdot.s8 q13, q14, d0\[1\]
.*: fc6cadce vsdot.s8 q13, q14, q7
.*: fe6cade7 vsdot.s8 q13, q14, d7\[1\]
.*: fc6cadee vsdot.s8 q13, q14, q15
.*: fe6cadef vsdot.s8 q13, q14, d15\[1\]

View File

@ -0,0 +1,44 @@
.macro dotprod_iter_d_n op, d, n
.irp m, 0, 8, 15
\op d\d, d\n, d\m
\op d\d, d\n, d\m[0]
.endr
.endm
.macro dotprod_iter_d op, d
.irp n, 2, 15, 30
dotprod_iter_d_n \op, \d, \n
.endr
.endm
.macro dotprod_iter op
.irp d, 0, 7, 16, 31
dotprod_iter_d \op, \d
.endr
.endm
.macro dotprod_q_iter_d_n op, d, n
.irp m, 0, 7, 15
\op q\d, q\n, q\m
\op q\d, q\n, d\m[1]
.endr
.endm
.macro dotprod_q_iter_d op, d
.irp n, 2, 3, 14
dotprod_q_iter_d_n \op, \d, \n
.endr
.endm
.macro dotprod_q_iter op
.irp d, 0, 1, 6, 13
dotprod_q_iter_d \op, \d
.endr
.endm
.text
func:
dotprod_iter vudot.u8
dotprod_iter vsdot.s8
dotprod_q_iter vudot.u8
dotprod_q_iter vsdot.s8

View File

@ -1,3 +1,8 @@
2017-06-28 Jiong Wang <jiong.wang@arm.com>
* opcode/arm.h (FPU_NEON_EXT_DOTPROD): New macro.
(FPU_ARCH_DOTPROD_NEON_VFP_ARMV8): New macro.
2017-06-28 Maciej W. Rozycki <macro@imgtec.com>
Matthew Fortune <matthew.fortune@imgtec.com>

View File

@ -93,7 +93,8 @@
#define FPU_CRYPTO_EXT_ARMV8 0x00008000 /* Crypto for ARMv8. */
#define CRC_EXT_ARMV8 0x00004000 /* CRC32 for ARMv8. */
#define FPU_VFP_EXT_ARMV8xD 0x00002000 /* Single-precision FP for ARMv8. */
#define FPU_NEON_EXT_RDMA 0x00001000 /* v8.1 Adv.SIMD extensions. */
#define FPU_NEON_EXT_RDMA 0x00001000 /* v8.1 Adv.SIMD extensions. */
#define FPU_NEON_EXT_DOTPROD 0x00000800 /* Dot Product extension. */
/* Architectures are the sum of the base and extensions. The ARM ARM (rev E)
defines the following: ARMv3, ARMv3M, ARMv4xM, ARMv4, ARMv4TxM, ARMv4T,
@ -234,6 +235,8 @@
#define FPU_ARCH_CRYPTO_NEON_VFP_ARMV8_1 \
ARM_FEATURE_COPROC (FPU_CRYPTO_ARMV8 | FPU_NEON_ARMV8 | FPU_VFP_ARMV8 \
| FPU_NEON_EXT_RDMA)
#define FPU_ARCH_DOTPROD_NEON_VFP_ARMV8 \
ARM_FEATURE_COPROC (FPU_NEON_EXT_DOTPROD | FPU_NEON_ARMV8 | FPU_VFP_ARMV8)
#define FPU_ARCH_ENDIAN_PURE ARM_FEATURE_COPROC (FPU_ENDIAN_PURE)

View File

@ -1,3 +1,7 @@
2017-06-28 Jiong Wang <jiong.wang@arm.com>
* arm-dis.c (coprocessor_opcodes): New entries for vsdot and vudot.
2017-06-28 Maciej W. Rozycki <macro@imgtec.com>
Matthew Fortune <matthew.fortune@imgtec.com>
Andrew Bennett <andrew.bennett@imgtec.com>

View File

@ -902,6 +902,12 @@ static const struct opcode32 coprocessor_opcodes[] =
{ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_3A),
0xfea00800, 0xffa00f10, "vcmla%c.f32\t%12-15,22V, %16-19,7V, %0-3,5D[0], #%20?21%20?780"},
/* Dot Product instructions in the space of coprocessor 13. */
{ARM_FEATURE_COPROC (FPU_NEON_EXT_DOTPROD),
0xfc200d00, 0xffb00f00, "v%4?usdot.%4?us8\t%12-15,22V, %16-19,7V, %0-3,5V"},
{ARM_FEATURE_COPROC (FPU_NEON_EXT_DOTPROD),
0xfe000d00, 0xff000f00, "v%4?usdot.%4?us8\t%12-15,22V, %16-19,7V, %0-3D[%5?10]"},
/* V5 coprocessor instructions. */
{ARM_FEATURE_CORE_LOW (ARM_EXT_V5),
0xfc100000, 0xfe100000, "ldc2%22'l%c\t%8-11d, cr%12-15d, %A"},