Skip to content

Commit 96593bf

Browse files
committed
Fix shr using constify
1 parent bba6d40 commit 96593bf

File tree

2 files changed

+116
-22
lines changed

2 files changed

+116
-22
lines changed

crates/core_arch/src/arm/neon.rs

Lines changed: 72 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1657,33 +1657,83 @@ pub unsafe fn vextq_s8(a: int8x16_t, b: int8x16_t, n: i32) -> int8x16_t {
16571657
}
16581658
}
16591659

1660+
//immediate value: 0:16
1661+
#[allow(unused)]
1662+
macro_rules! constify_imm4 {
1663+
($imm8:expr, $expand:ident) => {
1664+
#[allow(overflowing_literals)]
1665+
match ($imm8) & 0b1111 {
1666+
0 => $expand!(0),
1667+
1 => $expand!(1),
1668+
2 => $expand!(2),
1669+
3 => $expand!(3),
1670+
4 => $expand!(4),
1671+
5 => $expand!(5),
1672+
6 => $expand!(6),
1673+
7 => $expand!(7),
1674+
8 => $expand!(8),
1675+
9 => $expand!(9),
1676+
10 => $expand!(10),
1677+
11 => $expand!(11),
1678+
12 => $expand!(12),
1679+
13 => $expand!(13),
1680+
14 => $expand!(14),
1681+
_ => $expand!(15),
1682+
}
1683+
};
1684+
}
1685+
1686+
//immediate value: 0:7
1687+
#[allow(unused)]
1688+
macro_rules! constify_imm3 {
1689+
($imm8:expr, $expand:ident) => {
1690+
#[allow(overflowing_literals)]
1691+
match ($imm8) & 0b111 {
1692+
0 => $expand!(0),
1693+
1 => $expand!(1),
1694+
2 => $expand!(2),
1695+
3 => $expand!(3),
1696+
4 => $expand!(4),
1697+
5 => $expand!(5),
1698+
6 => $expand!(6),
1699+
_ => $expand!(7),
1700+
}
1701+
};
1702+
}
1703+
16601704
//uint8x16_t vshrq_n_u8 (uint8x16_t a, const int n)
16611705
#[inline]
16621706
#[target_feature(enable = "neon")]
16631707
#[cfg_attr(target_arch = "arm", target_feature(enable = "v7"))]
16641708
#[cfg_attr(test, assert_instr(ushr))]
1665-
pub unsafe fn vshrq_n_u8(a: uint8x16_t, n: i32) -> uint8x16_t {
1666-
if n < 0 || n > 7 {
1667-
unreachable_unchecked();
1668-
};
1669-
uint8x16_t(
1670-
a.0 >> n,
1671-
a.1 >> n,
1672-
a.2 >> n,
1673-
a.3 >> n,
1674-
a.4 >> n,
1675-
a.5 >> n,
1676-
a.6 >> n,
1677-
a.7 >> n,
1678-
a.8 >> n,
1679-
a.9 >> n,
1680-
a.10 >> n,
1681-
a.11 >> n,
1682-
a.12 >> n,
1683-
a.13 >> n,
1684-
a.14 >> n,
1685-
a.15 >> n,
1686-
)
1709+
pub unsafe fn vshrq_n_u8(a: uint8x16_t, imm8: i32) -> uint8x16_t {
1710+
macro_rules! call {
1711+
($imm8:expr) => {
1712+
if $imm8 == 0 {
1713+
unreachable_unchecked();
1714+
} else {
1715+
uint8x16_t(
1716+
a.0 >> $imm8,
1717+
a.1 >> $imm8,
1718+
a.2 >> $imm8,
1719+
a.3 >> $imm8,
1720+
a.4 >> $imm8,
1721+
a.5 >> $imm8,
1722+
a.6 >> $imm8,
1723+
a.7 >> $imm8,
1724+
a.8 >> $imm8,
1725+
a.9 >> $imm8,
1726+
a.10 >> $imm8,
1727+
a.11 >> $imm8,
1728+
a.12 >> $imm8,
1729+
a.13 >> $imm8,
1730+
a.14 >> $imm8,
1731+
a.15 >> $imm8,
1732+
)
1733+
}
1734+
};
1735+
}
1736+
constify_imm3!(imm8, call)
16871737
}
16881738

16891739
//uint8x16_t vshlq_n_u8 (uint8x16_t a, const int n)

crates/core_arch/src/macros.rs

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -349,6 +349,50 @@ macro_rules! constify_imm5 {
349349
};
350350
}
351351

352+
//immediate value: 0:16
353+
#[allow(unused)]
354+
macro_rules! constify_imm4 {
355+
($imm8:expr, $expand:ident) => {
356+
#[allow(overflowing_literals)]
357+
match ($imm8) & 0b1111 {
358+
0 => $expand!(0),
359+
1 => $expand!(1),
360+
2 => $expand!(2),
361+
3 => $expand!(3),
362+
4 => $expand!(4),
363+
5 => $expand!(5),
364+
6 => $expand!(6),
365+
7 => $expand!(7),
366+
8 => $expand!(8),
367+
9 => $expand!(9),
368+
10 => $expand!(10),
369+
11 => $expand!(11),
370+
12 => $expand!(12),
371+
13 => $expand!(13),
372+
14 => $expand!(14),
373+
_ => $expand!(15),
374+
}
375+
};
376+
}
377+
378+
//immediate value: 0:7
379+
#[allow(unused)]
380+
macro_rules! constify_imm3 {
381+
($imm8:expr, $expand:ident) => {
382+
#[allow(overflowing_literals)]
383+
match ($imm8) & 0b111 {
384+
0 => $expand!(0),
385+
1 => $expand!(1),
386+
2 => $expand!(2),
387+
3 => $expand!(3),
388+
4 => $expand!(4),
389+
5 => $expand!(5),
390+
6 => $expand!(6),
391+
_ => $expand!(7),
392+
}
393+
};
394+
}
395+
352396
#[allow(unused)]
353397
macro_rules! types {
354398
($(

0 commit comments

Comments
 (0)