@@ -3,7 +3,6 @@ use core::mem;
3
3
use core:: num:: NonZeroU16 ;
4
4
5
5
use core:: arch:: loongarch64:: * ;
6
- use mem:: transmute;
7
6
8
7
pub ( crate ) type BitMaskWord = u16 ;
9
8
pub ( crate ) type NonZeroBitMaskWord = NonZeroU16 ;
@@ -16,7 +15,7 @@ pub(crate) const BITMASK_ITER_MASK: BitMaskWord = !0;
16
15
///
17
16
/// This implementation uses a 128-bit LSX value.
18
17
#[ derive( Copy , Clone ) ]
19
- pub ( crate ) struct Group ( v16i8 ) ;
18
+ pub ( crate ) struct Group ( m128i ) ;
20
19
21
20
// FIXME: https://github.com/rust-lang/rust-clippy/issues/3859
22
21
#[ allow( clippy:: use_self) ]
@@ -72,42 +71,38 @@ impl Group {
72
71
/// the given value.
73
72
#[ inline]
74
73
pub ( crate ) fn match_tag ( self , tag : Tag ) -> BitMask {
75
- #[ allow( clippy:: missing_transmute_annotations) ]
76
74
unsafe {
77
75
let cmp = lsx_vseq_b ( self . 0 , lsx_vreplgr2vr_b ( tag. 0 as i32 ) ) ;
78
- BitMask ( lsx_vpickve2gr_hu :: < 0 > ( transmute ( lsx_vmskltz_b ( cmp) ) ) as u16 )
76
+ BitMask ( lsx_vpickve2gr_hu :: < 0 > ( lsx_vmskltz_b ( cmp) ) as u16 )
79
77
}
80
78
}
81
79
82
80
/// Returns a `BitMask` indicating all tags in the group which are
83
81
/// `EMPTY`.
84
82
#[ inline]
85
83
pub ( crate ) fn match_empty ( self ) -> BitMask {
86
- #[ allow( clippy:: missing_transmute_annotations) ]
87
84
unsafe {
88
85
let cmp = lsx_vseqi_b :: < { Tag :: EMPTY . 0 as i8 as i32 } > ( self . 0 ) ;
89
- BitMask ( lsx_vpickve2gr_hu :: < 0 > ( transmute ( lsx_vmskltz_b ( cmp) ) ) as u16 )
86
+ BitMask ( lsx_vpickve2gr_hu :: < 0 > ( lsx_vmskltz_b ( cmp) ) as u16 )
90
87
}
91
88
}
92
89
93
90
/// Returns a `BitMask` indicating all tags in the group which are
94
91
/// `EMPTY` or `DELETED`.
95
92
#[ inline]
96
93
pub ( crate ) fn match_empty_or_deleted ( self ) -> BitMask {
97
- #[ allow( clippy:: missing_transmute_annotations) ]
98
94
unsafe {
99
95
// A tag is EMPTY or DELETED iff the high bit is set
100
- BitMask ( lsx_vpickve2gr_hu :: < 0 > ( transmute ( lsx_vmskltz_b ( self . 0 ) ) ) as u16 )
96
+ BitMask ( lsx_vpickve2gr_hu :: < 0 > ( lsx_vmskltz_b ( self . 0 ) ) as u16 )
101
97
}
102
98
}
103
99
104
100
/// Returns a `BitMask` indicating all tags in the group which are full.
105
101
#[ inline]
106
102
pub ( crate ) fn match_full ( & self ) -> BitMask {
107
- #[ allow( clippy:: missing_transmute_annotations) ]
108
103
unsafe {
109
104
// A tag is EMPTY or DELETED iff the high bit is set
110
- BitMask ( lsx_vpickve2gr_hu :: < 0 > ( transmute ( lsx_vmskgez_b ( self . 0 ) ) ) as u16 )
105
+ BitMask ( lsx_vpickve2gr_hu :: < 0 > ( lsx_vmskgez_b ( self . 0 ) ) as u16 )
111
106
}
112
107
}
113
108
@@ -124,14 +119,10 @@ impl Group {
124
119
// let special = 0 > tag = 1111_1111 (true) or 0000_0000 (false)
125
120
// 1111_1111 | 1000_0000 = 1111_1111
126
121
// 0000_0000 | 1000_0000 = 1000_0000
127
- #[ allow( clippy:: missing_transmute_annotations) ]
128
122
unsafe {
129
123
let zero = lsx_vreplgr2vr_b ( 0 ) ;
130
124
let special = lsx_vslt_b ( self . 0 , zero) ;
131
- Group ( transmute ( lsx_vor_v (
132
- transmute ( special) ,
133
- transmute ( lsx_vreplgr2vr_b ( Tag :: DELETED . 0 as i32 ) ) ,
134
- ) ) )
125
+ Group ( lsx_vor_v ( special, lsx_vreplgr2vr_b ( Tag :: DELETED . 0 as i32 ) ) )
135
126
}
136
127
}
137
128
}
0 commit comments