@@ -184,17 +184,32 @@ private static unsafe void ReplacePlusWithSpaceCore(Span<char> buffer, IntPtr st
184
184
var i = ( nint ) 0 ;
185
185
var n = ( nint ) ( uint ) buffer . Length ;
186
186
187
- if ( Sse41 . IsSupported && n >= Vector128 < ushort > . Count )
187
+ if ( Vector256 . IsHardwareAccelerated && n >= Vector256 < ushort > . Count )
188
+ {
189
+ var vecPlus = Vector256 . Create ( ( ushort ) '+' ) ;
190
+ var vecSpace = Vector256 . Create ( ( ushort ) ' ' ) ;
191
+
192
+ do
193
+ {
194
+ var vec = Vector256 . Load ( input + i ) ;
195
+ var mask = Vector256 . Equals ( vec , vecPlus ) ;
196
+ var res = Vector256 . ConditionalSelect ( mask , vecSpace , vec ) ;
197
+ res . Store ( output + i ) ;
198
+ i += Vector256 < ushort > . Count ;
199
+ } while ( i <= n - Vector256 < ushort > . Count ) ;
200
+ }
201
+
202
+ if ( Vector128 . IsHardwareAccelerated && n - i >= Vector128 < ushort > . Count )
188
203
{
189
204
var vecPlus = Vector128 . Create ( ( ushort ) '+' ) ;
190
205
var vecSpace = Vector128 . Create ( ( ushort ) ' ' ) ;
191
206
192
207
do
193
208
{
194
- var vec = Sse2 . LoadVector128 ( input + i ) ;
195
- var mask = Sse2 . CompareEqual ( vec , vecPlus ) ;
196
- var res = Sse41 . BlendVariable ( vec , vecSpace , mask ) ;
197
- Sse2 . Store ( output + i , res ) ;
209
+ var vec = Vector128 . Load ( input + i ) ;
210
+ var mask = Vector128 . Equals ( vec , vecPlus ) ;
211
+ var res = Vector128 . ConditionalSelect ( mask , vecSpace , vec ) ;
212
+ res . Store ( output + i ) ;
198
213
i += Vector128 < ushort > . Count ;
199
214
} while ( i <= n - Vector128 < ushort > . Count ) ;
200
215
}
0 commit comments