Change implementation of vqdmull{_high}{_lane} and vqrdmulh_lane

This commit is contained in:
sayantn
2026-05-09 05:03:26 +05:30
parent 63d8cef02f
commit 1404a1e5b0
4 changed files with 83 additions and 153 deletions
@@ -14837,11 +14837,9 @@ pub fn vqdmulhs_laneq_s32<const N: i32>(a: i32, b: int32x4_t) -> i32 {
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
pub fn vqdmull_high_lane_s16<const N: i32>(a: int16x8_t, b: int16x4_t) -> int32x4_t {
static_assert_uimm_bits!(N, 2);
unsafe {
let a: int16x4_t = simd_shuffle!(a, a, [4, 5, 6, 7]);
let b: int16x4_t = simd_shuffle!(b, b, [N as u32, N as u32, N as u32, N as u32]);
vqdmull_s16(a, b)
}
let a = vget_high_s16(a);
let b = vdup_lane_s16::<N>(b);
vqdmull_s16(a, b)
}
#[doc = "Signed saturating doubling multiply long"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vqdmull_high_laneq_s32)"]
@@ -14852,11 +14850,9 @@ pub fn vqdmull_high_lane_s16<const N: i32>(a: int16x8_t, b: int16x4_t) -> int32x
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
pub fn vqdmull_high_laneq_s32<const N: i32>(a: int32x4_t, b: int32x4_t) -> int64x2_t {
static_assert_uimm_bits!(N, 2);
unsafe {
let a: int32x2_t = simd_shuffle!(a, a, [2, 3]);
let b: int32x2_t = simd_shuffle!(b, b, [N as u32, N as u32]);
vqdmull_s32(a, b)
}
let a = vget_high_s32(a);
let b = vdup_laneq_s32::<N>(b);
vqdmull_s32(a, b)
}
#[doc = "Signed saturating doubling multiply long"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vqdmull_high_lane_s32)"]
@@ -14867,11 +14863,9 @@ pub fn vqdmull_high_laneq_s32<const N: i32>(a: int32x4_t, b: int32x4_t) -> int64
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
pub fn vqdmull_high_lane_s32<const N: i32>(a: int32x4_t, b: int32x2_t) -> int64x2_t {
static_assert_uimm_bits!(N, 1);
unsafe {
let a: int32x2_t = simd_shuffle!(a, a, [2, 3]);
let b: int32x2_t = simd_shuffle!(b, b, [N as u32, N as u32]);
vqdmull_s32(a, b)
}
let a = vget_high_s32(a);
let b = vdup_lane_s32::<N>(b);
vqdmull_s32(a, b)
}
#[doc = "Signed saturating doubling multiply long"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vqdmull_high_laneq_s16)"]
@@ -14882,11 +14876,9 @@ pub fn vqdmull_high_lane_s32<const N: i32>(a: int32x4_t, b: int32x2_t) -> int64x
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
pub fn vqdmull_high_laneq_s16<const N: i32>(a: int16x8_t, b: int16x8_t) -> int32x4_t {
static_assert_uimm_bits!(N, 3);
unsafe {
let a: int16x4_t = simd_shuffle!(a, a, [4, 5, 6, 7]);
let b: int16x4_t = simd_shuffle!(b, b, [N as u32, N as u32, N as u32, N as u32]);
vqdmull_s16(a, b)
}
let a = vget_high_s16(a);
let b = vdup_laneq_s16::<N>(b);
vqdmull_s16(a, b)
}
#[doc = "Signed saturating doubling multiply long"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vqdmull_high_n_s16)"]
@@ -14895,11 +14887,9 @@ pub fn vqdmull_high_laneq_s16<const N: i32>(a: int16x8_t, b: int16x8_t) -> int32
#[cfg_attr(all(test, target_endian = "little"), assert_instr(sqdmull2))]
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
pub fn vqdmull_high_n_s16(a: int16x8_t, b: i16) -> int32x4_t {
unsafe {
let a: int16x4_t = simd_shuffle!(a, a, [4, 5, 6, 7]);
let b: int16x4_t = vdup_n_s16(b);
vqdmull_s16(a, b)
}
let a = vget_high_s16(a);
let b = vdup_n_s16(b);
vqdmull_s16(a, b)
}
#[doc = "Signed saturating doubling multiply long"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vqdmull_high_n_s32)"]
@@ -14908,11 +14898,9 @@ pub fn vqdmull_high_n_s16(a: int16x8_t, b: i16) -> int32x4_t {
#[cfg_attr(all(test, target_endian = "little"), assert_instr(sqdmull2))]
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
pub fn vqdmull_high_n_s32(a: int32x4_t, b: i32) -> int64x2_t {
unsafe {
let a: int32x2_t = simd_shuffle!(a, a, [2, 3]);
let b: int32x2_t = vdup_n_s32(b);
vqdmull_s32(a, b)
}
let a = vget_high_s32(a);
let b = vdup_n_s32(b);
vqdmull_s32(a, b)
}
#[doc = "Signed saturating doubling multiply long"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vqdmull_high_s16)"]
@@ -14921,11 +14909,9 @@ pub fn vqdmull_high_n_s32(a: int32x4_t, b: i32) -> int64x2_t {
#[cfg_attr(all(test, target_endian = "little"), assert_instr(sqdmull2))]
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
pub fn vqdmull_high_s16(a: int16x8_t, b: int16x8_t) -> int32x4_t {
unsafe {
let a: int16x4_t = simd_shuffle!(a, a, [4, 5, 6, 7]);
let b: int16x4_t = simd_shuffle!(b, b, [4, 5, 6, 7]);
vqdmull_s16(a, b)
}
let a = vget_high_s16(a);
let b = vget_high_s16(b);
vqdmull_s16(a, b)
}
#[doc = "Signed saturating doubling multiply long"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vqdmull_high_s32)"]
@@ -14934,11 +14920,9 @@ pub fn vqdmull_high_s16(a: int16x8_t, b: int16x8_t) -> int32x4_t {
#[cfg_attr(all(test, target_endian = "little"), assert_instr(sqdmull2))]
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
pub fn vqdmull_high_s32(a: int32x4_t, b: int32x4_t) -> int64x2_t {
unsafe {
let a: int32x2_t = simd_shuffle!(a, a, [2, 3]);
let b: int32x2_t = simd_shuffle!(b, b, [2, 3]);
vqdmull_s32(a, b)
}
let a = vget_high_s32(a);
let b = vget_high_s32(b);
vqdmull_s32(a, b)
}
#[doc = "Vector saturating doubling long multiply by scalar"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vqdmull_laneq_s16)"]
@@ -14949,10 +14933,8 @@ pub fn vqdmull_high_s32(a: int32x4_t, b: int32x4_t) -> int64x2_t {
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
pub fn vqdmull_laneq_s16<const N: i32>(a: int16x4_t, b: int16x8_t) -> int32x4_t {
static_assert_uimm_bits!(N, 3);
unsafe {
let b: int16x4_t = simd_shuffle!(b, b, [N as u32, N as u32, N as u32, N as u32]);
vqdmull_s16(a, b)
}
let b = vdup_laneq_s16::<N>(b);
vqdmull_s16(a, b)
}
#[doc = "Vector saturating doubling long multiply by scalar"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vqdmull_laneq_s32)"]
@@ -14963,10 +14945,8 @@ pub fn vqdmull_laneq_s16<const N: i32>(a: int16x4_t, b: int16x8_t) -> int32x4_t
#[stable(feature = "neon_intrinsics", since = "1.59.0")]
pub fn vqdmull_laneq_s32<const N: i32>(a: int32x2_t, b: int32x4_t) -> int64x2_t {
static_assert_uimm_bits!(N, 2);
unsafe {
let b: int32x2_t = simd_shuffle!(b, b, [N as u32, N as u32]);
vqdmull_s32(a, b)
}
let b = vdup_laneq_s32::<N>(b);
vqdmull_s32(a, b)
}
#[doc = "Signed saturating doubling multiply long"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vqdmullh_lane_s16)"]
@@ -35001,10 +35001,8 @@ pub fn vqdmulhq_s32(a: int32x4_t, b: int32x4_t) -> int32x4_t {
)]
pub fn vqdmull_lane_s16<const N: i32>(a: int16x4_t, b: int16x4_t) -> int32x4_t {
static_assert_uimm_bits!(N, 2);
unsafe {
let b: int16x4_t = simd_shuffle!(b, b, [N as u32; 4]);
vqdmull_s16(a, b)
}
let b = vdup_lane_s16::<N>(b);
vqdmull_s16(a, b)
}
#[doc = "Vector saturating doubling long multiply by scalar"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vqdmull_lane_s32)"]
@@ -35027,10 +35025,8 @@ pub fn vqdmull_lane_s16<const N: i32>(a: int16x4_t, b: int16x4_t) -> int32x4_t {
)]
pub fn vqdmull_lane_s32<const N: i32>(a: int32x2_t, b: int32x2_t) -> int64x2_t {
static_assert_uimm_bits!(N, 1);
unsafe {
let b: int32x2_t = simd_shuffle!(b, b, [N as u32; 2]);
vqdmull_s32(a, b)
}
let b = vdup_lane_s32::<N>(b);
vqdmull_s32(a, b)
}
#[doc = "Vector saturating doubling long multiply with scalar"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vqdmull_n_s16)"]
@@ -35588,11 +35584,8 @@ pub fn vqnegq_s32(a: int32x4_t) -> int32x4_t {
)]
pub fn vqrdmulh_lane_s16<const LANE: i32>(a: int16x4_t, b: int16x4_t) -> int16x4_t {
static_assert_uimm_bits!(LANE, 2);
unsafe {
let b: int16x4_t =
simd_shuffle!(b, b, [LANE as u32, LANE as u32, LANE as u32, LANE as u32]);
vqrdmulh_s16(a, b)
}
let b = vdup_lane_s16::<LANE>(b);
vqrdmulh_s16(a, b)
}
#[doc = "Vector rounding saturating doubling multiply high by scalar"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vqrdmulh_lane_s32)"]
@@ -35615,10 +35608,8 @@ pub fn vqrdmulh_lane_s16<const LANE: i32>(a: int16x4_t, b: int16x4_t) -> int16x4
)]
pub fn vqrdmulh_lane_s32<const LANE: i32>(a: int32x2_t, b: int32x2_t) -> int32x2_t {
static_assert_uimm_bits!(LANE, 1);
unsafe {
let b: int32x2_t = simd_shuffle!(b, b, [LANE as u32, LANE as u32]);
vqrdmulh_s32(a, b)
}
let b = vdup_lane_s32::<LANE>(b);
vqrdmulh_s32(a, b)
}
#[doc = "Vector rounding saturating doubling multiply high by scalar"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vqrdmulh_laneq_s16)"]
@@ -35641,11 +35632,8 @@ pub fn vqrdmulh_lane_s32<const LANE: i32>(a: int32x2_t, b: int32x2_t) -> int32x2
)]
pub fn vqrdmulh_laneq_s16<const LANE: i32>(a: int16x4_t, b: int16x8_t) -> int16x4_t {
static_assert_uimm_bits!(LANE, 3);
unsafe {
let b: int16x4_t =
simd_shuffle!(b, b, [LANE as u32, LANE as u32, LANE as u32, LANE as u32]);
vqrdmulh_s16(a, b)
}
let b = vdup_laneq_s16::<LANE>(b);
vqrdmulh_s16(a, b)
}
#[doc = "Vector rounding saturating doubling multiply high by scalar"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vqrdmulh_laneq_s32)"]
@@ -35668,10 +35656,8 @@ pub fn vqrdmulh_laneq_s16<const LANE: i32>(a: int16x4_t, b: int16x8_t) -> int16x
)]
pub fn vqrdmulh_laneq_s32<const LANE: i32>(a: int32x2_t, b: int32x4_t) -> int32x2_t {
static_assert_uimm_bits!(LANE, 2);
unsafe {
let b: int32x2_t = simd_shuffle!(b, b, [LANE as u32, LANE as u32]);
vqrdmulh_s32(a, b)
}
let b = vdup_laneq_s32::<LANE>(b);
vqrdmulh_s32(a, b)
}
#[doc = "Vector rounding saturating doubling multiply high by scalar"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vqrdmulhq_lane_s16)"]
@@ -35694,23 +35680,8 @@ pub fn vqrdmulh_laneq_s32<const LANE: i32>(a: int32x2_t, b: int32x4_t) -> int32x
)]
pub fn vqrdmulhq_lane_s16<const LANE: i32>(a: int16x8_t, b: int16x4_t) -> int16x8_t {
static_assert_uimm_bits!(LANE, 2);
unsafe {
let b: int16x8_t = simd_shuffle!(
b,
b,
[
LANE as u32,
LANE as u32,
LANE as u32,
LANE as u32,
LANE as u32,
LANE as u32,
LANE as u32,
LANE as u32
]
);
vqrdmulhq_s16(a, b)
}
let b = vdupq_lane_s16::<LANE>(b);
vqrdmulhq_s16(a, b)
}
#[doc = "Vector rounding saturating doubling multiply high by scalar"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vqrdmulhq_lane_s32)"]
@@ -35733,11 +35704,8 @@ pub fn vqrdmulhq_lane_s16<const LANE: i32>(a: int16x8_t, b: int16x4_t) -> int16x
)]
pub fn vqrdmulhq_lane_s32<const LANE: i32>(a: int32x4_t, b: int32x2_t) -> int32x4_t {
static_assert_uimm_bits!(LANE, 1);
unsafe {
let b: int32x4_t =
simd_shuffle!(b, b, [LANE as u32, LANE as u32, LANE as u32, LANE as u32]);
vqrdmulhq_s32(a, b)
}
let b = vdupq_lane_s32::<LANE>(b);
vqrdmulhq_s32(a, b)
}
#[doc = "Vector rounding saturating doubling multiply high by scalar"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vqrdmulhq_laneq_s16)"]
@@ -35760,23 +35728,8 @@ pub fn vqrdmulhq_lane_s32<const LANE: i32>(a: int32x4_t, b: int32x2_t) -> int32x
)]
pub fn vqrdmulhq_laneq_s16<const LANE: i32>(a: int16x8_t, b: int16x8_t) -> int16x8_t {
static_assert_uimm_bits!(LANE, 3);
unsafe {
let b: int16x8_t = simd_shuffle!(
b,
b,
[
LANE as u32,
LANE as u32,
LANE as u32,
LANE as u32,
LANE as u32,
LANE as u32,
LANE as u32,
LANE as u32
]
);
vqrdmulhq_s16(a, b)
}
let b = vdupq_laneq_s16::<LANE>(b);
vqrdmulhq_s16(a, b)
}
#[doc = "Vector rounding saturating doubling multiply high by scalar"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vqrdmulhq_laneq_s32)"]
@@ -35799,11 +35752,8 @@ pub fn vqrdmulhq_laneq_s16<const LANE: i32>(a: int16x8_t, b: int16x8_t) -> int16
)]
pub fn vqrdmulhq_laneq_s32<const LANE: i32>(a: int32x4_t, b: int32x4_t) -> int32x4_t {
static_assert_uimm_bits!(LANE, 2);
unsafe {
let b: int32x4_t =
simd_shuffle!(b, b, [LANE as u32, LANE as u32, LANE as u32, LANE as u32]);
vqrdmulhq_s32(a, b)
}
let b = vdupq_laneq_s32::<LANE>(b);
vqrdmulhq_s32(a, b)
}
#[doc = "Vector saturating rounding doubling multiply high with scalar"]
#[doc = "[Arm's documentation](https://developer.arm.com/architectures/instruction-sets/intrinsics/vqrdmulh_n_s16)"]
@@ -6963,11 +6963,11 @@ intrinsics:
- *neon-stable
safety: safe
types:
- [int16x8_t, int32x4_t, int16x4_t, '[4, 5, 6, 7]']
- [int32x4_t, int64x2_t, int32x2_t, '[2, 3]']
- [int16x8_t, int32x4_t]
- [int32x4_t, int64x2_t]
compose:
- Let: [a, "{neon_type[2]}", {FnCall: [simd_shuffle!, [a, a, '{type[3]}']]}]
- Let: [b, "{neon_type[2]}", {FnCall: [simd_shuffle!, [b, b, '{type[3]}']]}]
- Let: [a, {FnCall: ['vget_high_{neon_type[0]}', [a]]}]
- Let: [b, {FnCall: ['vget_high_{neon_type[0]}', [b]]}]
- FnCall: ["vqdmull{neon_type[0].noq}", [a, b]]
- name: "vqdmull_high_n_{type[1]}"
@@ -6979,11 +6979,11 @@ intrinsics:
- *neon-stable
safety: safe
types:
- [int16x8_t, "i16", int32x4_t, int16x4_t, '[4, 5, 6, 7]']
- [int32x4_t, "i32", int64x2_t, int32x2_t, '[2, 3]']
- [int16x8_t, "i16", int32x4_t]
- [int32x4_t, "i32", int64x2_t]
compose:
- Let: [a, "{neon_type[3]}", {FnCall: [simd_shuffle!, [a, a, "{type[4]}"]]}]
- Let: [b, "{neon_type[3]}", {FnCall: ["vdup_n{neon_type[0].noq}", [b]]}]
- Let: [a, {FnCall: ['vget_high_{neon_type[0]}', [a]]}]
- Let: [b, {FnCall: ["vdup_n{neon_type[0].noq}", [b]]}]
- FnCall: ["vqdmull{neon_type[0].noq}", [a, b]]
- name: "vqdmull{type[3]}"
@@ -7038,7 +7038,7 @@ intrinsics:
- Let: [b, "{type[0]}", {FnCall: ['vget{neon_type[1].lane_nox}', [b], [N]]}]
- FnCall: ["vqdmulls_s32", [a, b]]
- name: "vqdmull{type[6]}"
- name: "vqdmull{type[3]}"
doc: "Signed saturating doubling multiply long"
arguments: ["a: {neon_type[0]}", "b: {neon_type[1]}"]
return_type: "{neon_type[2]}"
@@ -7049,12 +7049,12 @@ intrinsics:
static_defs: ['const N: i32']
safety: safe
types:
- [int16x8_t, int16x4_t, int32x4_t, int16x4_t, '[4, 5, 6, 7]', '[N as u32, N as u32, N as u32, N as u32]', '_high_lane_s16']
- [int32x4_t, int32x4_t, int64x2_t, int32x2_t, '[2, 3]', '[N as u32, N as u32]', '_high_laneq_s32']
- [int16x8_t, int16x4_t, int32x4_t, '_high_lane_s16']
- [int32x4_t, int32x4_t, int64x2_t, '_high_laneq_s32']
compose:
- FnCall: [static_assert_uimm_bits!, [N, '2']]
- Let: [a, "{neon_type[3]}", {FnCall: [simd_shuffle!, [a, a, "{type[4]}"]]}]
- Let: [b, "{neon_type[3]}", {FnCall: [simd_shuffle!, [b, b, "{type[5]}"]]}]
- Let: [a, {FnCall: ['vget_high_{neon_type[0]}', [a]]}]
- Let: [b, {FnCall: ['vdup_lane{neon_type[1].nox}', [b], [N]]}]
- FnCall: ["vqdmull{neon_type[0].noq}", [a, b]]
- name: "vqdmull_high_lane_s32"
@@ -7068,11 +7068,11 @@ intrinsics:
static_defs: ['const N: i32']
safety: safe
types:
- [int32x4_t, int32x2_t, int64x2_t, int32x2_t, '[2, 3]', '[N as u32, N as u32]']
- [int32x4_t, int32x2_t, int64x2_t]
compose:
- FnCall: [static_assert_uimm_bits!, [N, '1']]
- Let: [a, "{neon_type[3]}", {FnCall: [simd_shuffle!, [a, a, "{type[4]}"]]}]
- Let: [b, "{neon_type[3]}", {FnCall: [simd_shuffle!, [b, b, "{type[5]}"]]}]
- Let: [a, {FnCall: ['vget_high_{neon_type[0]}', [a]]}]
- Let: [b, {FnCall: ['vdup_lane{neon_type[1].nox}', [b], [N]]}]
- FnCall: ["vqdmull{neon_type[0].noq}", [a, b]]
- name: "vqdmull_high_laneq_s16"
@@ -7086,11 +7086,11 @@ intrinsics:
static_defs: ['const N: i32']
safety: safe
types:
- [int16x8_t, int16x8_t, int32x4_t, int16x4_t, '[4, 5, 6, 7]', '[N as u32, N as u32, N as u32, N as u32]']
- [int16x8_t, int16x8_t, int32x4_t]
compose:
- FnCall: [static_assert_uimm_bits!, [N, '3']]
- Let: [a, "{neon_type[3]}", {FnCall: [simd_shuffle!, [a, a, "{type[4]}"]]}]
- Let: [b, "{neon_type[3]}", {FnCall: [simd_shuffle!, [b, b, "{type[5]}"]]}]
- Let: [a, {FnCall: ['vget_high_{neon_type[0]}', [a]]}]
- Let: [b, {FnCall: ['vdup_lane{neon_type[1].nox}', [b], [N]]}]
- FnCall: ["vqdmull{neon_type[0].noq}", [a, b]]
- name: "vqdmull_laneq_s16"
@@ -7104,10 +7104,10 @@ intrinsics:
static_defs: ['const N: i32']
safety: safe
types:
- [int16x4_t, int16x8_t, int32x4_t, '[N as u32, N as u32, N as u32, N as u32]']
- [int16x4_t, int16x8_t, int32x4_t]
compose:
- FnCall: [static_assert_uimm_bits!, [N, '3']]
- Let: [b, "{neon_type[0]}", {FnCall: [simd_shuffle!, [b, b, "{type[3]}"]]}]
- Let: [b, {FnCall: ['vdup_lane{neon_type[1].nox}', [b], [N]]}]
- FnCall: [vqdmull_s16, [a, b]]
- name: "vqdmull_laneq_s32"
@@ -7121,10 +7121,10 @@ intrinsics:
static_defs: ['const N: i32']
safety: safe
types:
- [int32x2_t, int32x4_t, int64x2_t, '[N as u32, N as u32]']
- [int32x2_t, int32x4_t, int64x2_t]
compose:
- FnCall: [static_assert_uimm_bits!, [N, '2']]
- Let: [b, "{neon_type[0]}", {FnCall: [simd_shuffle!, [b, b, "{type[3]}"]]}]
- Let: [b, {FnCall: ['vdup_lane{neon_type[1].nox}', [b], [N]]}]
- FnCall: [vqdmull_s32, [a, b]]
- name: "vqdmlal{type[4]}"
@@ -7590,7 +7590,7 @@ intrinsics:
- [int16x4_t, int16x4_t, int32x4_t, '[N as u32; 4]']
compose:
- FnCall: [static_assert_uimm_bits!, [N, '2']]
- Let: [b, "{neon_type[0]}", {FnCall: [simd_shuffle!, [b, b, "{type[3]}"]]}]
- Let: [b, {FnCall: ['vdup{neon_type[0].lane_nox}', [b], [N]]}]
- FnCall: [vqdmull_s16, [a, b]]
- name: "vqdmull_lane_s32"
@@ -7607,10 +7607,10 @@ intrinsics:
static_defs: ['const N: i32']
safety: safe
types:
- [int32x2_t, int32x2_t, int64x2_t, '[N as u32; 2]']
- [int32x2_t, int32x2_t, int64x2_t]
compose:
- FnCall: [static_assert_uimm_bits!, [N, '1']]
- Let: [b, "{neon_type[0]}", {FnCall: [simd_shuffle!, [b, b, "{type[3]}"]]}]
- Let: [b, {FnCall: ['vdup{neon_type[0].lane_nox}', [b], [N]]}]
- FnCall: [vqdmull_s32, [a, b]]
- name: "vqdmlal{neon_type[1].noq}"
@@ -11230,17 +11230,17 @@ intrinsics:
static_defs: ['const LANE: i32']
safety: safe
types:
- [_lane_s16, int16x4_t, int16x4_t, '2', '[LANE as u32, LANE as u32, LANE as u32, LANE as u32]']
- [_laneq_s16, int16x4_t, int16x8_t, '3', '[LANE as u32, LANE as u32, LANE as u32, LANE as u32]']
- [q_lane_s16, int16x8_t, int16x4_t, '2', '[LANE as u32, LANE as u32, LANE as u32, LANE as u32, LANE as u32, LANE as u32, LANE as u32, LANE as u32]']
- [q_laneq_s16, int16x8_t, int16x8_t, '3', '[LANE as u32, LANE as u32, LANE as u32, LANE as u32, LANE as u32, LANE as u32, LANE as u32, LANE as u32]']
- [_lane_s32, int32x2_t, int32x2_t, '1', '[LANE as u32, LANE as u32]']
- [_laneq_s32, int32x2_t, int32x4_t, '2', '[LANE as u32, LANE as u32]']
- [q_lane_s32, int32x4_t, int32x2_t, '1', '[LANE as u32, LANE as u32, LANE as u32, LANE as u32]']
- [q_laneq_s32, int32x4_t, int32x4_t, '2', '[LANE as u32, LANE as u32, LANE as u32, LANE as u32]']
- [_lane_s16, int16x4_t, int16x4_t, '2']
- [_laneq_s16, int16x4_t, int16x8_t, '3']
- [q_lane_s16, int16x8_t, int16x4_t, '2']
- [q_laneq_s16, int16x8_t, int16x8_t, '3']
- [_lane_s32, int32x2_t, int32x2_t, '1']
- [_laneq_s32, int32x2_t, int32x4_t, '2']
- [q_lane_s32, int32x4_t, int32x2_t, '1']
- [q_laneq_s32, int32x4_t, int32x4_t, '2']
compose:
- FnCall: [static_assert_uimm_bits!, [LANE, "{type[3]}"]]
- Let: [b, "{neon_type[1]}", {FnCall: [simd_shuffle!, [b, b, '{type[4]}']]}]
- Let: [b, {FnCall: ['vdup{type[0]}', [b], [LANE]]}]
- FnCall: ["vqrdmulh{neon_type[1].no}", [a, b]]
- name: "vqrdmulh{neon_type[0].N}"