Skip to content

Commit fd9ca71

Browse files
committed
Auto merge of #143473 - workingjubilee:rollup-bxie7zg, r=scottmcm
Rollup of 11 pull requests Successful merges: - #142440 (`tests/ui`: A New Order [14/N]) - #143040 (Add `const Rem`) - #143086 (Update poison.rs to fix the typo (sys->sync)) - #143202 (`tests/ui`: A New Order [18/N]) - #143296 (`tests/ui`: A New Order [21/N]) - #143297 (`tests/ui`: A New Order [22/N]) - #143299 (`tests/ui`: A New Order [24/N]) - #143300 (`tests/ui`: A New Order [25/N]) - #143397 (test passing a `VaList` from rust to C) - #143410 (Block SIMD in transmute_immediate; delete `OperandValueKind`) - #143452 (Fix CLI completion check in `tidy`) r? `@ghost` `@rustbot` modify labels: rollup
2 parents f0b67dd + 77ae270 commit fd9ca71

File tree

134 files changed

+1256
-948
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

134 files changed

+1256
-948
lines changed

compiler/rustc_codegen_ssa/src/mir/operand.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use rustc_session::config::OptLevel;
1313
use tracing::{debug, instrument};
1414

1515
use super::place::{PlaceRef, PlaceValue};
16-
use super::rvalue::transmute_immediate;
16+
use super::rvalue::transmute_scalar;
1717
use super::{FunctionCx, LocalRef};
1818
use crate::common::IntPredicate;
1919
use crate::traits::*;
@@ -346,14 +346,16 @@ impl<'a, 'tcx, V: CodegenObject> OperandRef<'tcx, V> {
346346

347347
let val = if field.is_zst() {
348348
OperandValue::ZeroSized
349+
} else if let BackendRepr::SimdVector { .. } = self.layout.backend_repr {
350+
// codegen_transmute_operand doesn't support SIMD, but since the previous
351+
// check handled ZSTs, the only possible field access into something SIMD
352+
// is to the `non_1zst_field` that's the same SIMD. (Other things, even
353+
// just padding, would change the wrapper's representation type.)
354+
assert_eq!(field.size, self.layout.size);
355+
self.val
349356
} else if field.size == self.layout.size {
350357
assert_eq!(offset.bytes(), 0);
351-
fx.codegen_transmute_operand(bx, *self, field).unwrap_or_else(|| {
352-
bug!(
353-
"Expected `codegen_transmute_operand` to handle equal-size \
354-
field {i:?} projection from {self:?} to {field:?}"
355-
)
356-
})
358+
fx.codegen_transmute_operand(bx, *self, field)
357359
} else {
358360
let (in_scalar, imm) = match (self.val, self.layout.backend_repr) {
359361
// Extract a scalar component from a pair.
@@ -613,10 +615,8 @@ impl<'a, 'tcx, V: CodegenObject> OperandRef<'tcx, Result<V, abi::Scalar>> {
613615
};
614616

615617
let mut update = |tgt: &mut Result<V, abi::Scalar>, src, from_scalar| {
616-
let from_bty = bx.cx().type_from_scalar(from_scalar);
617618
let to_scalar = tgt.unwrap_err();
618-
let to_bty = bx.cx().type_from_scalar(to_scalar);
619-
let imm = transmute_immediate(bx, src, from_scalar, from_bty, to_scalar, to_bty);
619+
let imm = transmute_scalar(bx, src, from_scalar, to_scalar);
620620
*tgt = Ok(imm);
621621
};
622622

compiler/rustc_codegen_ssa/src/mir/rvalue.rs

Lines changed: 101 additions & 155 deletions
Large diffs are not rendered by default.

library/core/src/ops/arith.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -627,7 +627,7 @@ macro_rules! rem_impl_float {
627627
/// ```
628628
#[stable(feature = "rust1", since = "1.0.0")]
629629
#[rustc_const_unstable(feature = "const_ops", issue = "90080")]
630-
impl Rem for $t {
630+
impl const Rem for $t {
631631
type Output = $t;
632632

633633
#[inline]

library/std/src/sync/poison.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
//! depend on the primitive. See [#Overview] bellow.
1414
//!
1515
//! For the alternative implementations that do not employ poisoning,
16-
//! see `std::sys::nonpoisoning`.
16+
//! see `std::sync::nonpoisoning`.
1717
//!
1818
//! # Overview
1919
//!

src/bootstrap/src/core/build_steps/run.rs

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
66
use std::path::PathBuf;
77

8+
use clap_complete::{Generator, shells};
9+
810
use crate::core::build_steps::dist::distdir;
911
use crate::core::build_steps::test;
1012
use crate::core::build_steps::tool::{self, SourceType, Tool};
@@ -285,36 +287,35 @@ impl Step for GenerateWindowsSys {
285287
}
286288
}
287289

290+
/// Return tuples of (shell, file containing completions).
291+
pub fn get_completion_paths(builder: &Builder<'_>) -> Vec<(&'static dyn Generator, PathBuf)> {
292+
vec![
293+
(&shells::Bash as &'static dyn Generator, builder.src.join("src/etc/completions/x.py.sh")),
294+
(&shells::Zsh, builder.src.join("src/etc/completions/x.py.zsh")),
295+
(&shells::Fish, builder.src.join("src/etc/completions/x.py.fish")),
296+
(&shells::PowerShell, builder.src.join("src/etc/completions/x.py.ps1")),
297+
(&shells::Bash, builder.src.join("src/etc/completions/x.sh")),
298+
(&shells::Zsh, builder.src.join("src/etc/completions/x.zsh")),
299+
(&shells::Fish, builder.src.join("src/etc/completions/x.fish")),
300+
(&shells::PowerShell, builder.src.join("src/etc/completions/x.ps1")),
301+
]
302+
}
303+
288304
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
289305
pub struct GenerateCompletions;
290306

291-
macro_rules! generate_completions {
292-
( $( ( $shell:ident, $filename:expr ) ),* ) => {
293-
$(
294-
if let Some(comp) = get_completion($shell, &$filename) {
295-
std::fs::write(&$filename, comp).expect(&format!("writing {} completion", stringify!($shell)));
296-
}
297-
)*
298-
};
299-
}
300-
301307
impl Step for GenerateCompletions {
302308
type Output = ();
303309

304310
/// Uses `clap_complete` to generate shell completions.
305311
fn run(self, builder: &Builder<'_>) {
306-
use clap_complete::shells::{Bash, Fish, PowerShell, Zsh};
307-
308-
generate_completions!(
309-
(Bash, builder.src.join("src/etc/completions/x.py.sh")),
310-
(Zsh, builder.src.join("src/etc/completions/x.py.zsh")),
311-
(Fish, builder.src.join("src/etc/completions/x.py.fish")),
312-
(PowerShell, builder.src.join("src/etc/completions/x.py.ps1")),
313-
(Bash, builder.src.join("src/etc/completions/x.sh")),
314-
(Zsh, builder.src.join("src/etc/completions/x.zsh")),
315-
(Fish, builder.src.join("src/etc/completions/x.fish")),
316-
(PowerShell, builder.src.join("src/etc/completions/x.ps1"))
317-
);
312+
for (shell, path) in get_completion_paths(builder) {
313+
if let Some(comp) = get_completion(shell, &path) {
314+
std::fs::write(&path, comp).unwrap_or_else(|e| {
315+
panic!("writing completion into {} failed: {e:?}", path.display())
316+
});
317+
}
318+
}
318319
}
319320

320321
fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_> {

src/bootstrap/src/core/build_steps/test.rs

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,11 @@ use std::ffi::{OsStr, OsString};
88
use std::path::{Path, PathBuf};
99
use std::{env, fs, iter};
1010

11-
use clap_complete::shells;
12-
1311
use crate::core::build_steps::compile::{Std, run_cargo};
1412
use crate::core::build_steps::doc::DocumentationFormat;
1513
use crate::core::build_steps::gcc::{Gcc, add_cg_gcc_cargo_flags};
1614
use crate::core::build_steps::llvm::get_llvm_version;
15+
use crate::core::build_steps::run::get_completion_paths;
1716
use crate::core::build_steps::synthetic_targets::MirOptPanicAbortSyntheticTarget;
1817
use crate::core::build_steps::tool::{self, COMPILETEST_ALLOW_FEATURES, SourceType, Tool};
1918
use crate::core::build_steps::toolstate::ToolState;
@@ -1153,14 +1152,12 @@ HELP: to skip test's attempt to check tidiness, pass `--skip src/tools/tidy` to
11531152
cmd.delay_failure().run(builder);
11541153

11551154
builder.info("x.py completions check");
1156-
let [bash, zsh, fish, powershell] = ["x.py.sh", "x.py.zsh", "x.py.fish", "x.py.ps1"]
1157-
.map(|filename| builder.src.join("src/etc/completions").join(filename));
1155+
let completion_paths = get_completion_paths(builder);
11581156
if builder.config.cmd.bless() {
11591157
builder.ensure(crate::core::build_steps::run::GenerateCompletions);
1160-
} else if get_completion(shells::Bash, &bash).is_some()
1161-
|| get_completion(shells::Fish, &fish).is_some()
1162-
|| get_completion(shells::PowerShell, &powershell).is_some()
1163-
|| crate::flags::get_completion(shells::Zsh, &zsh).is_some()
1158+
} else if completion_paths
1159+
.into_iter()
1160+
.any(|(shell, path)| get_completion(shell, &path).is_some())
11641161
{
11651162
eprintln!(
11661163
"x.py completions were changed; run `x.py run generate-completions` to update them"

src/bootstrap/src/core/config/flags.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use std::path::{Path, PathBuf};
77

88
use clap::{CommandFactory, Parser, ValueEnum};
9+
use clap_complete::Generator;
910
#[cfg(feature = "tracing")]
1011
use tracing::instrument;
1112

@@ -644,7 +645,7 @@ impl Subcommand {
644645

645646
/// Returns the shell completion for a given shell, if the result differs from the current
646647
/// content of `path`. If `path` does not exist, always returns `Some`.
647-
pub fn get_completion<G: clap_complete::Generator>(shell: G, path: &Path) -> Option<String> {
648+
pub fn get_completion(shell: &dyn Generator, path: &Path) -> Option<String> {
648649
let mut cmd = Flags::command();
649650
let current = if !path.exists() {
650651
String::new()
@@ -662,7 +663,12 @@ pub fn get_completion<G: clap_complete::Generator>(shell: G, path: &Path) -> Opt
662663
.expect("file name should be UTF-8")
663664
.rsplit_once('.')
664665
.expect("file name should have an extension");
665-
clap_complete::generate(shell, &mut cmd, bin_name, &mut buf);
666+
667+
// We sort of replicate `clap_complete::generate` here, because we want to call it with
668+
// `&dyn Generator`, but that function requires `G: Generator` instead.
669+
cmd.set_bin_name(bin_name);
670+
cmd.build();
671+
shell.generate(&cmd, &mut buf);
666672
if buf == current.as_bytes() {
667673
return None;
668674
}

src/etc/completions/x.fish

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,7 @@ complete -c x -n "__fish_x_using_subcommand doc" -l skip-std-check-if-no-downloa
293293
complete -c x -n "__fish_x_using_subcommand doc" -s h -l help -d 'Print help (see more with \'--help\')'
294294
complete -c x -n "__fish_x_using_subcommand test" -l test-args -d 'extra arguments to be passed for the test tool being used (e.g. libtest, compiletest or rustdoc)' -r
295295
complete -c x -n "__fish_x_using_subcommand test" -l compiletest-rustc-args -d 'extra options to pass the compiler when running compiletest tests' -r
296-
complete -c x -n "__fish_x_using_subcommand test" -l extra-checks -d 'comma-separated list of other files types to check (accepts py, py:lint, py:fmt, shell)' -r
296+
complete -c x -n "__fish_x_using_subcommand test" -l extra-checks -d 'comma-separated list of other files types to check (accepts py, py:lint, py:fmt, shell, shell:lint, cpp, cpp:fmt, spellcheck, spellcheck:fix)' -r
297297
complete -c x -n "__fish_x_using_subcommand test" -l compare-mode -d 'mode describing what file the actual ui output will be compared to' -r
298298
complete -c x -n "__fish_x_using_subcommand test" -l pass -d 'force {check,build,run}-pass tests to this mode' -r
299299
complete -c x -n "__fish_x_using_subcommand test" -l run -d 'whether to execute run-* tests' -r

src/etc/completions/x.ps1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -339,7 +339,7 @@ Register-ArgumentCompleter -Native -CommandName 'x' -ScriptBlock {
339339
'x;test' {
340340
[CompletionResult]::new('--test-args', '--test-args', [CompletionResultType]::ParameterName, 'extra arguments to be passed for the test tool being used (e.g. libtest, compiletest or rustdoc)')
341341
[CompletionResult]::new('--compiletest-rustc-args', '--compiletest-rustc-args', [CompletionResultType]::ParameterName, 'extra options to pass the compiler when running compiletest tests')
342-
[CompletionResult]::new('--extra-checks', '--extra-checks', [CompletionResultType]::ParameterName, 'comma-separated list of other files types to check (accepts py, py:lint, py:fmt, shell)')
342+
[CompletionResult]::new('--extra-checks', '--extra-checks', [CompletionResultType]::ParameterName, 'comma-separated list of other files types to check (accepts py, py:lint, py:fmt, shell, shell:lint, cpp, cpp:fmt, spellcheck, spellcheck:fix)')
343343
[CompletionResult]::new('--compare-mode', '--compare-mode', [CompletionResultType]::ParameterName, 'mode describing what file the actual ui output will be compared to')
344344
[CompletionResult]::new('--pass', '--pass', [CompletionResultType]::ParameterName, 'force {check,build,run}-pass tests to this mode')
345345
[CompletionResult]::new('--run', '--run', [CompletionResultType]::ParameterName, 'whether to execute run-* tests')

src/etc/completions/x.zsh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -338,7 +338,7 @@ _arguments "${_arguments_options[@]}" : \
338338
_arguments "${_arguments_options[@]}" : \
339339
'*--test-args=[extra arguments to be passed for the test tool being used (e.g. libtest, compiletest or rustdoc)]:ARGS:_default' \
340340
'*--compiletest-rustc-args=[extra options to pass the compiler when running compiletest tests]:ARGS:_default' \
341-
'--extra-checks=[comma-separated list of other files types to check (accepts py, py\:lint, py\:fmt, shell)]:EXTRA_CHECKS:_default' \
341+
'--extra-checks=[comma-separated list of other files types to check (accepts py, py\:lint, py\:fmt, shell, shell\:lint, cpp, cpp\:fmt, spellcheck, spellcheck\:fix)]:EXTRA_CHECKS:_default' \
342342
'--compare-mode=[mode describing what file the actual ui output will be compared to]:COMPARE MODE:_default' \
343343
'--pass=[force {check,build,run}-pass tests to this mode]:check | build | run:_default' \
344344
'--run=[whether to execute run-* tests]:auto | always | never:_default' \

src/tools/tidy/src/issues.txt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,6 @@ ui/auto-traits/issue-23080-2.rs
276276
ui/auto-traits/issue-23080.rs
277277
ui/auto-traits/issue-83857-ub.rs
278278
ui/auto-traits/issue-84075.rs
279-
ui/auxiliary/issue-16822.rs
280279
ui/bench/issue-32062.rs
281280
ui/binding/issue-40402-1.rs
282281
ui/binding/issue-40402-2.rs
@@ -1367,9 +1366,6 @@ ui/infinite/issue-41731-infinite-macro-println.rs
13671366
ui/intrinsics/issue-28575.rs
13681367
ui/intrinsics/issue-84297-reifying-copy.rs
13691368
ui/invalid/issue-114435-layout-type-err.rs
1370-
ui/issue-15924.rs
1371-
ui/issue-16822.rs
1372-
ui/issues-71798.rs
13731369
ui/issues/auxiliary/issue-11224.rs
13741370
ui/issues/auxiliary/issue-11508.rs
13751371
ui/issues/auxiliary/issue-11529.rs

tests/codegen/intrinsics/transmute-x64.rs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,20 @@ use std::mem::transmute;
99
// CHECK-LABEL: @check_sse_pair_to_avx(
1010
#[no_mangle]
1111
pub unsafe fn check_sse_pair_to_avx(x: (__m128i, __m128i)) -> __m256i {
12+
// CHECK: start:
1213
// CHECK-NOT: alloca
13-
// CHECK: %0 = load <4 x i64>, ptr %x, align 16
14-
// CHECK: store <4 x i64> %0, ptr %_0, align 32
14+
// CHECK-NEXT: call void @llvm.memcpy.p0.p0.i64(ptr align 32 %_0, ptr align 16 %x, i64 32, i1 false)
15+
// CHECK-NEXT: ret void
1516
transmute(x)
1617
}
1718

1819
// CHECK-LABEL: @check_sse_pair_from_avx(
1920
#[no_mangle]
2021
pub unsafe fn check_sse_pair_from_avx(x: __m256i) -> (__m128i, __m128i) {
22+
// CHECK: start:
2123
// CHECK-NOT: alloca
22-
// CHECK: %0 = load <4 x i64>, ptr %x, align 32
23-
// CHECK: store <4 x i64> %0, ptr %_0, align 16
24+
// CHECK-NEXT: %[[TEMP:.+]] = load <4 x i64>, ptr %x, align 32
25+
// CHECK-NEXT: store <4 x i64> %[[TEMP]], ptr %_0, align 16
26+
// CHECK-NEXT: ret void
2427
transmute(x)
2528
}

tests/codegen/intrinsics/transmute.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,28 +29,28 @@ pub struct Aggregate8(u8);
2929
// CHECK-LABEL: @check_bigger_size(
3030
#[no_mangle]
3131
pub unsafe fn check_bigger_size(x: u16) -> u32 {
32-
// CHECK: call void @llvm.trap
32+
// CHECK: call void @llvm.assume(i1 false)
3333
transmute_unchecked(x)
3434
}
3535

3636
// CHECK-LABEL: @check_smaller_size(
3737
#[no_mangle]
3838
pub unsafe fn check_smaller_size(x: u32) -> u16 {
39-
// CHECK: call void @llvm.trap
39+
// CHECK: call void @llvm.assume(i1 false)
4040
transmute_unchecked(x)
4141
}
4242

4343
// CHECK-LABEL: @check_smaller_array(
4444
#[no_mangle]
4545
pub unsafe fn check_smaller_array(x: [u32; 7]) -> [u32; 3] {
46-
// CHECK: call void @llvm.trap
46+
// CHECK: call void @llvm.assume(i1 false)
4747
transmute_unchecked(x)
4848
}
4949

5050
// CHECK-LABEL: @check_bigger_array(
5151
#[no_mangle]
5252
pub unsafe fn check_bigger_array(x: [u32; 3]) -> [u32; 7] {
53-
// CHECK: call void @llvm.trap
53+
// CHECK: call void @llvm.assume(i1 false)
5454
transmute_unchecked(x)
5555
}
5656

@@ -73,9 +73,9 @@ pub unsafe fn check_to_empty_array(x: [u32; 5]) -> [u32; 0] {
7373
#[no_mangle]
7474
#[custom_mir(dialect = "runtime", phase = "optimized")]
7575
pub unsafe fn check_from_empty_array(x: [u32; 0]) -> [u32; 5] {
76-
// CHECK-NOT: trap
77-
// CHECK: call void @llvm.trap
78-
// CHECK-NOT: trap
76+
// CHECK-NOT: call
77+
// CHECK: call void @llvm.assume(i1 false)
78+
// CHECK-NOT: call
7979
mir! {
8080
{
8181
RET = CastTransmute(x);

tests/codegen/simd-intrinsic/simd-intrinsic-transmute-array.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,7 @@ pub fn build_array_s(x: [f32; 4]) -> S<4> {
4040
// CHECK-LABEL: @build_array_transmute_s
4141
#[no_mangle]
4242
pub fn build_array_transmute_s(x: [f32; 4]) -> S<4> {
43-
// CHECK: %[[VAL:.+]] = load <4 x float>, ptr %x, align [[ARRAY_ALIGN]]
44-
// CHECK: store <4 x float> %[[VAL:.+]], ptr %_0, align [[VECTOR_ALIGN]]
43+
// CHECK: call void @llvm.memcpy.{{.+}}({{.*}} align [[VECTOR_ALIGN]] {{.*}} align [[ARRAY_ALIGN]] {{.*}}, [[USIZE]] 16, i1 false)
4544
unsafe { std::mem::transmute(x) }
4645
}
4746

@@ -55,7 +54,6 @@ pub fn build_array_t(x: [f32; 4]) -> T {
5554
// CHECK-LABEL: @build_array_transmute_t
5655
#[no_mangle]
5756
pub fn build_array_transmute_t(x: [f32; 4]) -> T {
58-
// CHECK: %[[VAL:.+]] = load <4 x float>, ptr %x, align [[ARRAY_ALIGN]]
59-
// CHECK: store <4 x float> %[[VAL:.+]], ptr %_0, align [[VECTOR_ALIGN]]
57+
// CHECK: call void @llvm.memcpy.{{.+}}({{.*}} align [[VECTOR_ALIGN]] {{.*}} align [[ARRAY_ALIGN]] {{.*}}, [[USIZE]] 16, i1 false)
6058
unsafe { std::mem::transmute(x) }
6159
}

tests/codegen/transmute-scalar.rs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -111,8 +111,11 @@ pub fn fake_bool_unsigned_to_bool(b: FakeBoolUnsigned) -> bool {
111111
struct S([i64; 1]);
112112

113113
// CHECK-LABEL: define{{.*}}i64 @single_element_simd_to_scalar(<1 x i64> %b)
114-
// CHECK: bitcast <1 x i64> %b to i64
115-
// CHECK: ret i64
114+
// CHECK-NEXT: start:
115+
// CHECK-NEXT: %[[RET:.+]] = alloca [8 x i8]
116+
// CHECK-NEXT: store <1 x i64> %b, ptr %[[RET]]
117+
// CHECK-NEXT: %[[TEMP:.+]] = load i64, ptr %[[RET]]
118+
// CHECK-NEXT: ret i64 %[[TEMP]]
116119
#[no_mangle]
117120
#[cfg_attr(target_family = "wasm", target_feature(enable = "simd128"))]
118121
#[cfg_attr(target_arch = "arm", target_feature(enable = "neon"))]
@@ -124,8 +127,11 @@ pub extern "C" fn single_element_simd_to_scalar(b: S) -> i64 {
124127
}
125128

126129
// CHECK-LABEL: define{{.*}}<1 x i64> @scalar_to_single_element_simd(i64 %b)
127-
// CHECK: bitcast i64 %b to <1 x i64>
128-
// CHECK: ret <1 x i64>
130+
// CHECK-NEXT: start:
131+
// CHECK-NEXT: %[[RET:.+]] = alloca [8 x i8]
132+
// CHECK-NEXT: store i64 %b, ptr %[[RET]]
133+
// CHECK-NEXT: %[[TEMP:.+]] = load <1 x i64>, ptr %[[RET]]
134+
// CHECK-NEXT: ret <1 x i64> %[[TEMP]]
129135
#[no_mangle]
130136
#[cfg_attr(target_family = "wasm", target_feature(enable = "simd128"))]
131137
#[cfg_attr(target_arch = "arm", target_feature(enable = "neon"))]

0 commit comments

Comments
 (0)