[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:
parent
41664b45ab
commit
c604a79ad4
|
@ -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.
|
||||
|
|
|
@ -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)),
|
||||
|
|
|
@ -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},
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
#as: -march=armv8.2-a+dotprod -mfpu=neon-fp-armv8
|
||||
#error-output: dotprod-illegal.l
|
|
@ -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\]'
|
|
@ -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]
|
|
@ -0,0 +1,3 @@
|
|||
#as: -march=armv8.1-a+dotprod -mfpu=neon-fp-armv8
|
||||
#source: dotprod.s
|
||||
#error-output: dotprod-legacy-arch.l
|
|
@ -0,0 +1,3 @@
|
|||
Assembler messages:
|
||||
[^:]*: extension does not apply to the base architecture
|
||||
[^:]*: unrecognized option -march=armv8.1-a\+dotprod
|
|
@ -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\]
|
|
@ -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\]
|
|
@ -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
|
|
@ -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>
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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"},
|
||||
|
|
Loading…
Reference in New Issue