2014-05-24 12:50:23 +00:00
|
|
|
// RUN: llvm-mc -triple=aarch64-none-linux-gnu -mattr=+crypto -mattr=+neon -show-encoding < %s | FileCheck %s
|
Implement aarch64 neon instruction set AdvSIMD (3V Diff), covering the following 26 instructions,
SADDL, UADDL, SADDW, UADDW, SSUBL, USUBL, SSUBW, USUBW, ADDHN, RADDHN, SABAL, UABAL, SUBHN, RSUBHN, SABDL, UABDL, SMLAL, UMLAL, SMLSL, UMLSL, SQDMLAL, SQDMLSL, SMULL, UMULL, SQDMULL, PMULL
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@190288 91177308-0d34-0410-b5e6-96231b3b80d8
2013-09-09 02:20:27 +00:00
|
|
|
|
|
|
|
// Check that the assembler can handle the documented syntax for AArch64
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
// Instructions with 3 different vector data types
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
// Long
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
// Long - Variant 1
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
saddl v0.8h, v1.8b, v2.8b
|
|
|
|
saddl v0.4s, v1.4h, v2.4h
|
|
|
|
saddl v0.2d, v1.2s, v2.2s
|
|
|
|
|
|
|
|
// CHECK: saddl v0.8h, v1.8b, v2.8b // encoding: [0x20,0x00,0x22,0x0e]
|
|
|
|
// CHECK: saddl v0.4s, v1.4h, v2.4h // encoding: [0x20,0x00,0x62,0x0e]
|
|
|
|
// CHECK: saddl v0.2d, v1.2s, v2.2s // encoding: [0x20,0x00,0xa2,0x0e]
|
|
|
|
|
|
|
|
saddl2 v0.4s, v1.8h, v2.8h
|
|
|
|
saddl2 v0.8h, v1.16b, v2.16b
|
|
|
|
saddl2 v0.2d, v1.4s, v2.4s
|
|
|
|
|
|
|
|
// CHECK: saddl2 v0.4s, v1.8h, v2.8h // encoding: [0x20,0x00,0x62,0x4e]
|
|
|
|
// CHECK: saddl2 v0.8h, v1.16b, v2.16b // encoding: [0x20,0x00,0x22,0x4e]
|
|
|
|
// CHECK: saddl2 v0.2d, v1.4s, v2.4s // encoding: [0x20,0x00,0xa2,0x4e]
|
|
|
|
|
|
|
|
uaddl v0.8h, v1.8b, v2.8b
|
|
|
|
uaddl v0.4s, v1.4h, v2.4h
|
|
|
|
uaddl v0.2d, v1.2s, v2.2s
|
|
|
|
|
|
|
|
// CHECK: uaddl v0.8h, v1.8b, v2.8b // encoding: [0x20,0x00,0x22,0x2e]
|
|
|
|
// CHECK: uaddl v0.4s, v1.4h, v2.4h // encoding: [0x20,0x00,0x62,0x2e]
|
|
|
|
// CHECK: uaddl v0.2d, v1.2s, v2.2s // encoding: [0x20,0x00,0xa2,0x2e]
|
|
|
|
|
|
|
|
uaddl2 v0.8h, v1.16b, v2.16b
|
|
|
|
uaddl2 v0.4s, v1.8h, v2.8h
|
|
|
|
uaddl2 v0.2d, v1.4s, v2.4s
|
|
|
|
|
|
|
|
// CHECK: uaddl2 v0.8h, v1.16b, v2.16b // encoding: [0x20,0x00,0x22,0x6e]
|
|
|
|
// CHECK: uaddl2 v0.4s, v1.8h, v2.8h // encoding: [0x20,0x00,0x62,0x6e]
|
|
|
|
// CHECK: uaddl2 v0.2d, v1.4s, v2.4s // encoding: [0x20,0x00,0xa2,0x6e]
|
|
|
|
|
|
|
|
ssubl v0.8h, v1.8b, v2.8b
|
|
|
|
ssubl v0.4s, v1.4h, v2.4h
|
|
|
|
ssubl v0.2d, v1.2s, v2.2s
|
|
|
|
|
|
|
|
// CHECK: ssubl v0.8h, v1.8b, v2.8b // encoding: [0x20,0x20,0x22,0x0e]
|
|
|
|
// CHECK: ssubl v0.4s, v1.4h, v2.4h // encoding: [0x20,0x20,0x62,0x0e]
|
|
|
|
// CHECK: ssubl v0.2d, v1.2s, v2.2s // encoding: [0x20,0x20,0xa2,0x0e]
|
|
|
|
|
|
|
|
ssubl2 v0.8h, v1.16b, v2.16b
|
|
|
|
ssubl2 v0.4s, v1.8h, v2.8h
|
|
|
|
ssubl2 v0.2d, v1.4s, v2.4s
|
|
|
|
|
|
|
|
// CHECK: ssubl2 v0.8h, v1.16b, v2.16b // encoding: [0x20,0x20,0x22,0x4e]
|
|
|
|
// CHECK: ssubl2 v0.4s, v1.8h, v2.8h // encoding: [0x20,0x20,0x62,0x4e]
|
|
|
|
// CHECK: ssubl2 v0.2d, v1.4s, v2.4s // encoding: [0x20,0x20,0xa2,0x4e]
|
|
|
|
|
|
|
|
usubl v0.8h, v1.8b, v2.8b
|
|
|
|
usubl v0.4s, v1.4h, v2.4h
|
|
|
|
usubl v0.2d, v1.2s, v2.2s
|
|
|
|
|
|
|
|
// CHECK: usubl v0.8h, v1.8b, v2.8b // encoding: [0x20,0x20,0x22,0x2e]
|
|
|
|
// CHECK: usubl v0.4s, v1.4h, v2.4h // encoding: [0x20,0x20,0x62,0x2e]
|
|
|
|
// CHECK: usubl v0.2d, v1.2s, v2.2s // encoding: [0x20,0x20,0xa2,0x2e]
|
|
|
|
|
|
|
|
usubl2 v0.8h, v1.16b, v2.16b
|
|
|
|
usubl2 v0.4s, v1.8h, v2.8h
|
|
|
|
usubl2 v0.2d, v1.4s, v2.4s
|
|
|
|
|
|
|
|
// CHECK: usubl2 v0.8h, v1.16b, v2.16b // encoding: [0x20,0x20,0x22,0x6e]
|
|
|
|
// CHECK: usubl2 v0.4s, v1.8h, v2.8h // encoding: [0x20,0x20,0x62,0x6e]
|
|
|
|
// CHECK: usubl2 v0.2d, v1.4s, v2.4s // encoding: [0x20,0x20,0xa2,0x6e]
|
|
|
|
|
|
|
|
sabal v0.8h, v1.8b, v2.8b
|
|
|
|
sabal v0.4s, v1.4h, v2.4h
|
|
|
|
sabal v0.2d, v1.2s, v2.2s
|
|
|
|
|
|
|
|
// CHECK: sabal v0.8h, v1.8b, v2.8b // encoding: [0x20,0x50,0x22,0x0e]
|
|
|
|
// CHECK: sabal v0.4s, v1.4h, v2.4h // encoding: [0x20,0x50,0x62,0x0e]
|
|
|
|
// CHECK: sabal v0.2d, v1.2s, v2.2s // encoding: [0x20,0x50,0xa2,0x0e]
|
|
|
|
|
|
|
|
sabal2 v0.8h, v1.16b, v2.16b
|
|
|
|
sabal2 v0.4s, v1.8h, v2.8h
|
|
|
|
sabal2 v0.2d, v1.4s, v2.4s
|
|
|
|
|
|
|
|
// CHECK: sabal2 v0.8h, v1.16b, v2.16b // encoding: [0x20,0x50,0x22,0x4e]
|
|
|
|
// CHECK: sabal2 v0.4s, v1.8h, v2.8h // encoding: [0x20,0x50,0x62,0x4e]
|
|
|
|
// CHECK: sabal2 v0.2d, v1.4s, v2.4s // encoding: [0x20,0x50,0xa2,0x4e]
|
|
|
|
|
|
|
|
uabal v0.8h, v1.8b, v2.8b
|
|
|
|
uabal v0.4s, v1.4h, v2.4h
|
|
|
|
uabal v0.2d, v1.2s, v2.2s
|
|
|
|
|
|
|
|
// CHECK: uabal v0.8h, v1.8b, v2.8b // encoding: [0x20,0x50,0x22,0x2e]
|
|
|
|
// CHECK: uabal v0.4s, v1.4h, v2.4h // encoding: [0x20,0x50,0x62,0x2e]
|
|
|
|
// CHECK: uabal v0.2d, v1.2s, v2.2s // encoding: [0x20,0x50,0xa2,0x2e]
|
|
|
|
|
|
|
|
uabal2 v0.8h, v1.16b, v2.16b
|
|
|
|
uabal2 v0.4s, v1.8h, v2.8h
|
|
|
|
uabal2 v0.2d, v1.4s, v2.4s
|
|
|
|
|
|
|
|
// CHECK: uabal2 v0.8h, v1.16b, v2.16b // encoding: [0x20,0x50,0x22,0x6e]
|
|
|
|
// CHECK: uabal2 v0.4s, v1.8h, v2.8h // encoding: [0x20,0x50,0x62,0x6e]
|
|
|
|
// CHECK: uabal2 v0.2d, v1.4s, v2.4s // encoding: [0x20,0x50,0xa2,0x6e]
|
|
|
|
|
|
|
|
sabdl v0.8h, v1.8b, v2.8b
|
|
|
|
sabdl v0.4s, v1.4h, v2.4h
|
|
|
|
sabdl v0.2d, v1.2s, v2.2s
|
|
|
|
|
|
|
|
// CHECK: sabdl v0.8h, v1.8b, v2.8b // encoding: [0x20,0x70,0x22,0x0e]
|
|
|
|
// CHECK: sabdl v0.4s, v1.4h, v2.4h // encoding: [0x20,0x70,0x62,0x0e]
|
|
|
|
// CHECK: sabdl v0.2d, v1.2s, v2.2s // encoding: [0x20,0x70,0xa2,0x0e]
|
|
|
|
|
|
|
|
sabdl2 v0.8h, v1.16b, v2.16b
|
|
|
|
sabdl2 v0.4s, v1.8h, v2.8h
|
|
|
|
sabdl2 v0.2d, v1.4s, v2.4s
|
|
|
|
|
|
|
|
// CHECK: sabdl2 v0.8h, v1.16b, v2.16b // encoding: [0x20,0x70,0x22,0x4e]
|
|
|
|
// CHECK: sabdl2 v0.4s, v1.8h, v2.8h // encoding: [0x20,0x70,0x62,0x4e]
|
|
|
|
// CHECK: sabdl2 v0.2d, v1.4s, v2.4s // encoding: [0x20,0x70,0xa2,0x4e]
|
|
|
|
|
|
|
|
uabdl v0.8h, v1.8b, v2.8b
|
|
|
|
uabdl v0.4s, v1.4h, v2.4h
|
|
|
|
uabdl v0.2d, v1.2s, v2.2s
|
|
|
|
|
|
|
|
// CHECK: uabdl v0.8h, v1.8b, v2.8b // encoding: [0x20,0x70,0x22,0x2e]
|
|
|
|
// CHECK: uabdl v0.4s, v1.4h, v2.4h // encoding: [0x20,0x70,0x62,0x2e]
|
|
|
|
// CHECK: uabdl v0.2d, v1.2s, v2.2s // encoding: [0x20,0x70,0xa2,0x2e]
|
|
|
|
|
|
|
|
uabdl2 v0.8h, v1.16b, v2.16b
|
|
|
|
uabdl2 v0.4s, v1.8h, v2.8h
|
|
|
|
uabdl2 v0.2d, v1.4s, v2.4s
|
|
|
|
|
|
|
|
// CHECK: uabdl2 v0.8h, v1.16b, v2.16b // encoding: [0x20,0x70,0x22,0x6e]
|
|
|
|
// CHECK: uabdl2 v0.4s, v1.8h, v2.8h // encoding: [0x20,0x70,0x62,0x6e]
|
|
|
|
// CHECK: uabdl2 v0.2d, v1.4s, v2.4s // encoding: [0x20,0x70,0xa2,0x6e]
|
|
|
|
|
|
|
|
smlal v0.8h, v1.8b, v2.8b
|
|
|
|
smlal v0.4s, v1.4h, v2.4h
|
|
|
|
smlal v0.2d, v1.2s, v2.2s
|
|
|
|
|
|
|
|
// CHECK: smlal v0.8h, v1.8b, v2.8b // encoding: [0x20,0x80,0x22,0x0e]
|
|
|
|
// CHECK: smlal v0.4s, v1.4h, v2.4h // encoding: [0x20,0x80,0x62,0x0e]
|
|
|
|
// CHECK: smlal v0.2d, v1.2s, v2.2s // encoding: [0x20,0x80,0xa2,0x0e]
|
|
|
|
|
|
|
|
smlal2 v0.8h, v1.16b, v2.16b
|
|
|
|
smlal2 v0.4s, v1.8h, v2.8h
|
|
|
|
smlal2 v0.2d, v1.4s, v2.4s
|
|
|
|
|
|
|
|
// CHECK: smlal2 v0.8h, v1.16b, v2.16b // encoding: [0x20,0x80,0x22,0x4e]
|
|
|
|
// CHECK: smlal2 v0.4s, v1.8h, v2.8h // encoding: [0x20,0x80,0x62,0x4e]
|
|
|
|
// CHECK: smlal2 v0.2d, v1.4s, v2.4s // encoding: [0x20,0x80,0xa2,0x4e]
|
|
|
|
|
|
|
|
umlal v0.8h, v1.8b, v2.8b
|
|
|
|
umlal v0.4s, v1.4h, v2.4h
|
|
|
|
umlal v0.2d, v1.2s, v2.2s
|
|
|
|
|
|
|
|
// CHECK: umlal v0.8h, v1.8b, v2.8b // encoding: [0x20,0x80,0x22,0x2e]
|
|
|
|
// CHECK: umlal v0.4s, v1.4h, v2.4h // encoding: [0x20,0x80,0x62,0x2e]
|
|
|
|
// CHECK: umlal v0.2d, v1.2s, v2.2s // encoding: [0x20,0x80,0xa2,0x2e]
|
|
|
|
|
|
|
|
umlal2 v0.8h, v1.16b, v2.16b
|
|
|
|
umlal2 v0.4s, v1.8h, v2.8h
|
|
|
|
umlal2 v0.2d, v1.4s, v2.4s
|
|
|
|
|
|
|
|
// CHECK: umlal2 v0.8h, v1.16b, v2.16b // encoding: [0x20,0x80,0x22,0x6e]
|
|
|
|
// CHECK: umlal2 v0.4s, v1.8h, v2.8h // encoding: [0x20,0x80,0x62,0x6e]
|
|
|
|
// CHECK: umlal2 v0.2d, v1.4s, v2.4s // encoding: [0x20,0x80,0xa2,0x6e]
|
|
|
|
|
|
|
|
smlsl v0.8h, v1.8b, v2.8b
|
|
|
|
smlsl v0.4s, v1.4h, v2.4h
|
|
|
|
smlsl v0.2d, v1.2s, v2.2s
|
|
|
|
|
|
|
|
// CHECK: smlsl v0.8h, v1.8b, v2.8b // encoding: [0x20,0xa0,0x22,0x0e]
|
|
|
|
// CHECK: smlsl v0.4s, v1.4h, v2.4h // encoding: [0x20,0xa0,0x62,0x0e]
|
|
|
|
// CHECK: smlsl v0.2d, v1.2s, v2.2s // encoding: [0x20,0xa0,0xa2,0x0e]
|
|
|
|
|
|
|
|
smlsl2 v0.8h, v1.16b, v2.16b
|
|
|
|
smlsl2 v0.4s, v1.8h, v2.8h
|
|
|
|
smlsl2 v0.2d, v1.4s, v2.4s
|
|
|
|
|
|
|
|
// CHECK: smlsl2 v0.8h, v1.16b, v2.16b // encoding: [0x20,0xa0,0x22,0x4e]
|
|
|
|
// CHECK: smlsl2 v0.4s, v1.8h, v2.8h // encoding: [0x20,0xa0,0x62,0x4e]
|
|
|
|
// CHECK: smlsl2 v0.2d, v1.4s, v2.4s // encoding: [0x20,0xa0,0xa2,0x4e]
|
|
|
|
|
|
|
|
umlsl v0.8h, v1.8b, v2.8b
|
|
|
|
umlsl v0.4s, v1.4h, v2.4h
|
|
|
|
umlsl v0.2d, v1.2s, v2.2s
|
|
|
|
|
|
|
|
// CHECK: umlsl v0.8h, v1.8b, v2.8b // encoding: [0x20,0xa0,0x22,0x2e]
|
|
|
|
// CHECK: umlsl v0.4s, v1.4h, v2.4h // encoding: [0x20,0xa0,0x62,0x2e]
|
|
|
|
// CHECK: umlsl v0.2d, v1.2s, v2.2s // encoding: [0x20,0xa0,0xa2,0x2e]
|
|
|
|
|
|
|
|
umlsl2 v0.8h, v1.16b, v2.16b
|
|
|
|
umlsl2 v0.4s, v1.8h, v2.8h
|
|
|
|
umlsl2 v0.2d, v1.4s, v2.4s
|
|
|
|
|
|
|
|
// CHECK: umlsl2 v0.8h, v1.16b, v2.16b // encoding: [0x20,0xa0,0x22,0x6e]
|
|
|
|
// CHECK: umlsl2 v0.4s, v1.8h, v2.8h // encoding: [0x20,0xa0,0x62,0x6e]
|
|
|
|
// CHECK: umlsl2 v0.2d, v1.4s, v2.4s // encoding: [0x20,0xa0,0xa2,0x6e]
|
|
|
|
|
|
|
|
smull v0.8h, v1.8b, v2.8b
|
|
|
|
smull v0.4s, v1.4h, v2.4h
|
|
|
|
smull v0.2d, v1.2s, v2.2s
|
|
|
|
|
|
|
|
// CHECK: smull v0.8h, v1.8b, v2.8b // encoding: [0x20,0xc0,0x22,0x0e]
|
|
|
|
// CHECK: smull v0.4s, v1.4h, v2.4h // encoding: [0x20,0xc0,0x62,0x0e]
|
|
|
|
// CHECK: smull v0.2d, v1.2s, v2.2s // encoding: [0x20,0xc0,0xa2,0x0e]
|
|
|
|
|
|
|
|
smull2 v0.8h, v1.16b, v2.16b
|
|
|
|
smull2 v0.4s, v1.8h, v2.8h
|
|
|
|
smull2 v0.2d, v1.4s, v2.4s
|
|
|
|
|
|
|
|
// CHECK: smull2 v0.8h, v1.16b, v2.16b // encoding: [0x20,0xc0,0x22,0x4e]
|
|
|
|
// CHECK: smull2 v0.4s, v1.8h, v2.8h // encoding: [0x20,0xc0,0x62,0x4e]
|
|
|
|
// CHECK: smull2 v0.2d, v1.4s, v2.4s // encoding: [0x20,0xc0,0xa2,0x4e]
|
|
|
|
|
|
|
|
umull v0.8h, v1.8b, v2.8b
|
|
|
|
umull v0.4s, v1.4h, v2.4h
|
|
|
|
umull v0.2d, v1.2s, v2.2s
|
|
|
|
|
|
|
|
// CHECK: umull v0.8h, v1.8b, v2.8b // encoding: [0x20,0xc0,0x22,0x2e]
|
|
|
|
// CHECK: umull v0.4s, v1.4h, v2.4h // encoding: [0x20,0xc0,0x62,0x2e]
|
|
|
|
// CHECK: umull v0.2d, v1.2s, v2.2s // encoding: [0x20,0xc0,0xa2,0x2e]
|
|
|
|
|
|
|
|
umull2 v0.8h, v1.16b, v2.16b
|
|
|
|
umull2 v0.4s, v1.8h, v2.8h
|
|
|
|
umull2 v0.2d, v1.4s, v2.4s
|
|
|
|
|
|
|
|
// CHECK: umull2 v0.8h, v1.16b, v2.16b // encoding: [0x20,0xc0,0x22,0x6e]
|
|
|
|
// CHECK: umull2 v0.4s, v1.8h, v2.8h // encoding: [0x20,0xc0,0x62,0x6e]
|
|
|
|
// CHECK: umull2 v0.2d, v1.4s, v2.4s // encoding: [0x20,0xc0,0xa2,0x6e]
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
// Long - Variant 2
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
sqdmlal v0.4s, v1.4h, v2.4h
|
|
|
|
sqdmlal v0.2d, v1.2s, v2.2s
|
|
|
|
|
|
|
|
// CHECK: sqdmlal v0.4s, v1.4h, v2.4h // encoding: [0x20,0x90,0x62,0x0e]
|
|
|
|
// CHECK: sqdmlal v0.2d, v1.2s, v2.2s // encoding: [0x20,0x90,0xa2,0x0e]
|
|
|
|
|
|
|
|
sqdmlal2 v0.4s, v1.8h, v2.8h
|
|
|
|
sqdmlal2 v0.2d, v1.4s, v2.4s
|
|
|
|
|
|
|
|
// CHECK: sqdmlal2 v0.4s, v1.8h, v2.8h // encoding: [0x20,0x90,0x62,0x4e]
|
|
|
|
// CHECK: sqdmlal2 v0.2d, v1.4s, v2.4s // encoding: [0x20,0x90,0xa2,0x4e]
|
|
|
|
|
|
|
|
sqdmlsl v0.4s, v1.4h, v2.4h
|
|
|
|
sqdmlsl v0.2d, v1.2s, v2.2s
|
|
|
|
|
|
|
|
// CHECK: sqdmlsl v0.4s, v1.4h, v2.4h // encoding: [0x20,0xb0,0x62,0x0e]
|
|
|
|
// CHECK: sqdmlsl v0.2d, v1.2s, v2.2s // encoding: [0x20,0xb0,0xa2,0x0e]
|
|
|
|
|
|
|
|
sqdmlsl2 v0.4s, v1.8h, v2.8h
|
|
|
|
sqdmlsl2 v0.2d, v1.4s, v2.4s
|
|
|
|
|
|
|
|
// CHECK: sqdmlsl2 v0.4s, v1.8h, v2.8h // encoding: [0x20,0xb0,0x62,0x4e]
|
|
|
|
// CHECK: sqdmlsl2 v0.2d, v1.4s, v2.4s // encoding: [0x20,0xb0,0xa2,0x4e]
|
|
|
|
|
|
|
|
sqdmull v0.4s, v1.4h, v2.4h
|
|
|
|
sqdmull v0.2d, v1.2s, v2.2s
|
|
|
|
|
|
|
|
// CHECK: sqdmull v0.4s, v1.4h, v2.4h // encoding: [0x20,0xd0,0x62,0x0e]
|
|
|
|
// CHECK: sqdmull v0.2d, v1.2s, v2.2s // encoding: [0x20,0xd0,0xa2,0x0e]
|
|
|
|
|
|
|
|
sqdmull2 v0.4s, v1.8h, v2.8h
|
|
|
|
sqdmull2 v0.2d, v1.4s, v2.4s
|
|
|
|
|
|
|
|
// CHECK: sqdmull2 v0.4s, v1.8h, v2.8h // encoding: [0x20,0xd0,0x62,0x4e]
|
|
|
|
// CHECK: sqdmull2 v0.2d, v1.4s, v2.4s // encoding: [0x20,0xd0,0xa2,0x4e]
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
// Long - Variant 3
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
pmull v0.8h, v1.8b, v2.8b
|
2013-11-19 01:40:25 +00:00
|
|
|
pmull v0.1q, v1.1d, v2.1d
|
Implement aarch64 neon instruction set AdvSIMD (3V Diff), covering the following 26 instructions,
SADDL, UADDL, SADDW, UADDW, SSUBL, USUBL, SSUBW, USUBW, ADDHN, RADDHN, SABAL, UABAL, SUBHN, RSUBHN, SABDL, UABDL, SMLAL, UMLAL, SMLSL, UMLSL, SQDMLAL, SQDMLSL, SMULL, UMULL, SQDMULL, PMULL
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@190288 91177308-0d34-0410-b5e6-96231b3b80d8
2013-09-09 02:20:27 +00:00
|
|
|
|
|
|
|
// CHECK: pmull v0.8h, v1.8b, v2.8b // encoding: [0x20,0xe0,0x22,0x0e]
|
2013-11-19 01:40:25 +00:00
|
|
|
// CHECK: pmull v0.1q, v1.1d, v2.1d // encoding: [0x20,0xe0,0xe2,0x0e]
|
Implement aarch64 neon instruction set AdvSIMD (3V Diff), covering the following 26 instructions,
SADDL, UADDL, SADDW, UADDW, SSUBL, USUBL, SSUBW, USUBW, ADDHN, RADDHN, SABAL, UABAL, SUBHN, RSUBHN, SABDL, UABDL, SMLAL, UMLAL, SMLSL, UMLSL, SQDMLAL, SQDMLSL, SMULL, UMULL, SQDMULL, PMULL
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@190288 91177308-0d34-0410-b5e6-96231b3b80d8
2013-09-09 02:20:27 +00:00
|
|
|
|
|
|
|
pmull2 v0.8h, v1.16b, v2.16b
|
2013-11-19 01:40:25 +00:00
|
|
|
pmull2 v0.1q, v1.2d, v2.2d
|
Implement aarch64 neon instruction set AdvSIMD (3V Diff), covering the following 26 instructions,
SADDL, UADDL, SADDW, UADDW, SSUBL, USUBL, SSUBW, USUBW, ADDHN, RADDHN, SABAL, UABAL, SUBHN, RSUBHN, SABDL, UABDL, SMLAL, UMLAL, SMLSL, UMLSL, SQDMLAL, SQDMLSL, SMULL, UMULL, SQDMULL, PMULL
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@190288 91177308-0d34-0410-b5e6-96231b3b80d8
2013-09-09 02:20:27 +00:00
|
|
|
|
|
|
|
// CHECK: pmull2 v0.8h, v1.16b, v2.16b // encoding: [0x20,0xe0,0x22,0x4e]
|
2013-11-19 01:40:25 +00:00
|
|
|
// CHECK: pmull2 v0.1q, v1.2d, v2.2d // encoding: [0x20,0xe0,0xe2,0x4e]
|
Implement aarch64 neon instruction set AdvSIMD (3V Diff), covering the following 26 instructions,
SADDL, UADDL, SADDW, UADDW, SSUBL, USUBL, SSUBW, USUBW, ADDHN, RADDHN, SABAL, UABAL, SUBHN, RSUBHN, SABDL, UABDL, SMLAL, UMLAL, SMLSL, UMLSL, SQDMLAL, SQDMLSL, SMULL, UMULL, SQDMULL, PMULL
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@190288 91177308-0d34-0410-b5e6-96231b3b80d8
2013-09-09 02:20:27 +00:00
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
// Widen
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
saddw v0.8h, v1.8h, v2.8b
|
|
|
|
saddw v0.4s, v1.4s, v2.4h
|
|
|
|
saddw v0.2d, v1.2d, v2.2s
|
|
|
|
|
|
|
|
// CHECK: saddw v0.8h, v1.8h, v2.8b // encoding: [0x20,0x10,0x22,0x0e]
|
|
|
|
// CHECK: saddw v0.4s, v1.4s, v2.4h // encoding: [0x20,0x10,0x62,0x0e]
|
|
|
|
// CHECK: saddw v0.2d, v1.2d, v2.2s // encoding: [0x20,0x10,0xa2,0x0e]
|
|
|
|
|
|
|
|
saddw2 v0.8h, v1.8h, v2.16b
|
|
|
|
saddw2 v0.4s, v1.4s, v2.8h
|
|
|
|
saddw2 v0.2d, v1.2d, v2.4s
|
|
|
|
|
|
|
|
// CHECK: saddw2 v0.8h, v1.8h, v2.16b // encoding: [0x20,0x10,0x22,0x4e]
|
|
|
|
// CHECK: saddw2 v0.4s, v1.4s, v2.8h // encoding: [0x20,0x10,0x62,0x4e]
|
|
|
|
// CHECK: saddw2 v0.2d, v1.2d, v2.4s // encoding: [0x20,0x10,0xa2,0x4e]
|
|
|
|
|
|
|
|
uaddw v0.8h, v1.8h, v2.8b
|
|
|
|
uaddw v0.4s, v1.4s, v2.4h
|
|
|
|
uaddw v0.2d, v1.2d, v2.2s
|
|
|
|
|
|
|
|
// CHECK: uaddw v0.8h, v1.8h, v2.8b // encoding: [0x20,0x10,0x22,0x2e]
|
|
|
|
// CHECK: uaddw v0.4s, v1.4s, v2.4h // encoding: [0x20,0x10,0x62,0x2e]
|
|
|
|
// CHECK: uaddw v0.2d, v1.2d, v2.2s // encoding: [0x20,0x10,0xa2,0x2e]
|
|
|
|
|
|
|
|
uaddw2 v0.8h, v1.8h, v2.16b
|
|
|
|
uaddw2 v0.4s, v1.4s, v2.8h
|
|
|
|
uaddw2 v0.2d, v1.2d, v2.4s
|
|
|
|
|
|
|
|
// CHECK: uaddw2 v0.8h, v1.8h, v2.16b // encoding: [0x20,0x10,0x22,0x6e]
|
|
|
|
// CHECK: uaddw2 v0.4s, v1.4s, v2.8h // encoding: [0x20,0x10,0x62,0x6e]
|
|
|
|
// CHECK: uaddw2 v0.2d, v1.2d, v2.4s // encoding: [0x20,0x10,0xa2,0x6e]
|
|
|
|
|
|
|
|
ssubw v0.8h, v1.8h, v2.8b
|
|
|
|
ssubw v0.4s, v1.4s, v2.4h
|
|
|
|
ssubw v0.2d, v1.2d, v2.2s
|
|
|
|
|
|
|
|
// CHECK: ssubw v0.8h, v1.8h, v2.8b // encoding: [0x20,0x30,0x22,0x0e]
|
|
|
|
// CHECK: ssubw v0.4s, v1.4s, v2.4h // encoding: [0x20,0x30,0x62,0x0e]
|
|
|
|
// CHECK: ssubw v0.2d, v1.2d, v2.2s // encoding: [0x20,0x30,0xa2,0x0e]
|
|
|
|
|
|
|
|
ssubw2 v0.8h, v1.8h, v2.16b
|
|
|
|
ssubw2 v0.4s, v1.4s, v2.8h
|
|
|
|
ssubw2 v0.2d, v1.2d, v2.4s
|
|
|
|
|
|
|
|
// CHECK: ssubw2 v0.8h, v1.8h, v2.16b // encoding: [0x20,0x30,0x22,0x4e]
|
|
|
|
// CHECK: ssubw2 v0.4s, v1.4s, v2.8h // encoding: [0x20,0x30,0x62,0x4e]
|
|
|
|
// CHECK: ssubw2 v0.2d, v1.2d, v2.4s // encoding: [0x20,0x30,0xa2,0x4e]
|
|
|
|
|
|
|
|
usubw v0.8h, v1.8h, v2.8b
|
|
|
|
usubw v0.4s, v1.4s, v2.4h
|
|
|
|
usubw v0.2d, v1.2d, v2.2s
|
|
|
|
|
|
|
|
// CHECK: usubw v0.8h, v1.8h, v2.8b // encoding: [0x20,0x30,0x22,0x2e]
|
|
|
|
// CHECK: usubw v0.4s, v1.4s, v2.4h // encoding: [0x20,0x30,0x62,0x2e]
|
|
|
|
// CHECK: usubw v0.2d, v1.2d, v2.2s // encoding: [0x20,0x30,0xa2,0x2e]
|
|
|
|
|
|
|
|
usubw2 v0.8h, v1.8h, v2.16b
|
|
|
|
usubw2 v0.4s, v1.4s, v2.8h
|
|
|
|
usubw2 v0.2d, v1.2d, v2.4s
|
|
|
|
|
|
|
|
// CHECK: usubw2 v0.8h, v1.8h, v2.16b // encoding: [0x20,0x30,0x22,0x6e]
|
|
|
|
// CHECK: usubw2 v0.4s, v1.4s, v2.8h // encoding: [0x20,0x30,0x62,0x6e]
|
|
|
|
// CHECK: usubw2 v0.2d, v1.2d, v2.4s // encoding: [0x20,0x30,0xa2,0x6e]
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
// Narrow
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
addhn v0.8b, v1.8h, v2.8h
|
|
|
|
addhn v0.4h, v1.4s, v2.4s
|
|
|
|
addhn v0.2s, v1.2d, v2.2d
|
|
|
|
|
|
|
|
// CHECK: addhn v0.8b, v1.8h, v2.8h // encoding: [0x20,0x40,0x22,0x0e]
|
|
|
|
// CHECK: addhn v0.4h, v1.4s, v2.4s // encoding: [0x20,0x40,0x62,0x0e]
|
|
|
|
// CHECK: addhn v0.2s, v1.2d, v2.2d // encoding: [0x20,0x40,0xa2,0x0e]
|
|
|
|
|
|
|
|
addhn2 v0.16b, v1.8h, v2.8h
|
|
|
|
addhn2 v0.8h, v1.4s, v2.4s
|
|
|
|
addhn2 v0.4s, v1.2d, v2.2d
|
|
|
|
|
|
|
|
// CHECK: addhn2 v0.16b, v1.8h, v2.8h // encoding: [0x20,0x40,0x22,0x4e]
|
|
|
|
// CHECK: addhn2 v0.8h, v1.4s, v2.4s // encoding: [0x20,0x40,0x62,0x4e]
|
|
|
|
// CHECK: addhn2 v0.4s, v1.2d, v2.2d // encoding: [0x20,0x40,0xa2,0x4e]
|
|
|
|
|
|
|
|
raddhn v0.8b, v1.8h, v2.8h
|
|
|
|
raddhn v0.4h, v1.4s, v2.4s
|
|
|
|
raddhn v0.2s, v1.2d, v2.2d
|
|
|
|
|
|
|
|
// CHECK: raddhn v0.8b, v1.8h, v2.8h // encoding: [0x20,0x40,0x22,0x2e]
|
|
|
|
// CHECK: raddhn v0.4h, v1.4s, v2.4s // encoding: [0x20,0x40,0x62,0x2e]
|
|
|
|
// CHECK: raddhn v0.2s, v1.2d, v2.2d // encoding: [0x20,0x40,0xa2,0x2e]
|
|
|
|
|
|
|
|
raddhn2 v0.16b, v1.8h, v2.8h
|
|
|
|
raddhn2 v0.8h, v1.4s, v2.4s
|
|
|
|
raddhn2 v0.4s, v1.2d, v2.2d
|
|
|
|
|
|
|
|
// CHECK: raddhn2 v0.16b, v1.8h, v2.8h // encoding: [0x20,0x40,0x22,0x6e]
|
|
|
|
// CHECK: raddhn2 v0.8h, v1.4s, v2.4s // encoding: [0x20,0x40,0x62,0x6e]
|
|
|
|
// CHECK: raddhn2 v0.4s, v1.2d, v2.2d // encoding: [0x20,0x40,0xa2,0x6e]
|
|
|
|
|
|
|
|
rsubhn v0.8b, v1.8h, v2.8h
|
|
|
|
rsubhn v0.4h, v1.4s, v2.4s
|
|
|
|
rsubhn v0.2s, v1.2d, v2.2d
|
|
|
|
|
|
|
|
// CHECK: rsubhn v0.8b, v1.8h, v2.8h // encoding: [0x20,0x60,0x22,0x2e]
|
|
|
|
// CHECK: rsubhn v0.4h, v1.4s, v2.4s // encoding: [0x20,0x60,0x62,0x2e]
|
|
|
|
// CHECK: rsubhn v0.2s, v1.2d, v2.2d // encoding: [0x20,0x60,0xa2,0x2e]
|
|
|
|
|
|
|
|
rsubhn2 v0.16b, v1.8h, v2.8h
|
|
|
|
rsubhn2 v0.8h, v1.4s, v2.4s
|
|
|
|
rsubhn2 v0.4s, v1.2d, v2.2d
|
|
|
|
|
|
|
|
// CHECK: rsubhn2 v0.16b, v1.8h, v2.8h // encoding: [0x20,0x60,0x22,0x6e]
|
|
|
|
// CHECK: rsubhn2 v0.8h, v1.4s, v2.4s // encoding: [0x20,0x60,0x62,0x6e]
|
|
|
|
// CHECK: rsubhn2 v0.4s, v1.2d, v2.2d // encoding: [0x20,0x60,0xa2,0x6e]
|