@@ -25,25 +25,34 @@ const MDS_CIRC_COL: [KoalaBear; 16] = KoalaBear::new_array([1, 3, 13, 22, 67, 2,
2525// Forward twiddles for 16-point FFT: W_k = omega^k
2626// =========================================================================
2727
28+ #[ cfg( all( target_arch = "aarch64" , target_feature = "neon" ) ) ]
2829const W1 : KoalaBear = KoalaBear :: new ( 0x08dbd69c ) ;
30+ #[ cfg( all( target_arch = "aarch64" , target_feature = "neon" ) ) ]
2931const W2 : KoalaBear = KoalaBear :: new ( 0x6832fe4a ) ;
32+ #[ cfg( all( target_arch = "aarch64" , target_feature = "neon" ) ) ]
3033const W3 : KoalaBear = KoalaBear :: new ( 0x27ae21e2 ) ;
34+ #[ cfg( all( target_arch = "aarch64" , target_feature = "neon" ) ) ]
3135const W4 : KoalaBear = KoalaBear :: new ( 0x7e010002 ) ;
36+ #[ cfg( all( target_arch = "aarch64" , target_feature = "neon" ) ) ]
3237const W5 : KoalaBear = KoalaBear :: new ( 0x3a89a025 ) ;
38+ #[ cfg( all( target_arch = "aarch64" , target_feature = "neon" ) ) ]
3339const W6 : KoalaBear = KoalaBear :: new ( 0x174e3650 ) ;
40+ #[ cfg( all( target_arch = "aarch64" , target_feature = "neon" ) ) ]
3441const W7 : KoalaBear = KoalaBear :: new ( 0x27dfce22 ) ;
3542
3643// =========================================================================
3744// 16-point FFT / IFFT (radix-2, fully unrolled, in-place)
3845// =========================================================================
3946
47+ #[ cfg( all( target_arch = "aarch64" , target_feature = "neon" ) ) ]
4048#[ inline( always) ]
4149fn bt < R : Algebra < KoalaBear > > ( v : & mut [ R ; 16 ] , lo : usize , hi : usize ) {
4250 let ( a, b) = ( v[ lo] , v[ hi] ) ;
4351 v[ lo] = a + b;
4452 v[ hi] = a - b;
4553}
4654
55+ #[ cfg( all( target_arch = "aarch64" , target_feature = "neon" ) ) ]
4756#[ inline( always) ]
4857fn dit < R : Algebra < KoalaBear > > ( v : & mut [ R ; 16 ] , lo : usize , hi : usize , t : KoalaBear ) {
4958 let a = v[ lo] ;
@@ -52,13 +61,15 @@ fn dit<R: Algebra<KoalaBear>>(v: &mut [R; 16], lo: usize, hi: usize, t: KoalaBea
5261 v[ hi] = a - tb;
5362}
5463
64+ #[ cfg( all( target_arch = "aarch64" , target_feature = "neon" ) ) ]
5565#[ inline( always) ]
5666fn neg_dif < R : Algebra < KoalaBear > > ( v : & mut [ R ; 16 ] , lo : usize , hi : usize , t : KoalaBear ) {
5767 let ( a, b) = ( v[ lo] , v[ hi] ) ;
5868 v[ lo] = a + b;
5969 v[ hi] = ( b - a) * t;
6070}
6171
72+ #[ cfg( all( target_arch = "aarch64" , target_feature = "neon" ) ) ]
6273#[ inline( always) ]
6374#[ cfg( all( target_arch = "aarch64" , target_feature = "neon" ) ) ]
6475fn dif_ifft_16_mut < R : Algebra < KoalaBear > > ( f : & mut [ R ; 16 ] ) {
@@ -96,6 +107,7 @@ fn dif_ifft_16_mut<R: Algebra<KoalaBear>>(f: &mut [R; 16]) {
96107 bt ( f, 14 , 15 ) ;
97108}
98109
110+ #[ cfg( all( target_arch = "aarch64" , target_feature = "neon" ) ) ]
99111#[ inline( always) ]
100112#[ cfg( all( target_arch = "aarch64" , target_feature = "neon" ) ) ]
101113fn dit_fft_16_mut < R : Algebra < KoalaBear > > ( f : & mut [ R ; 16 ] ) {
0 commit comments