diff --git a/src/librustc_platform_intrinsics/nvptx.rs b/src/librustc_platform_intrinsics/nvptx.rs deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/src/librustc_platform_intrinsics/x86.rs b/src/librustc_platform_intrinsics/x86.rs index c223f719d3daf..7e987b9013dd9 100644 --- a/src/librustc_platform_intrinsics/x86.rs +++ b/src/librustc_platform_intrinsics/x86.rs @@ -44,5 +44,25 @@ pub fn find(name: &str) -> Option { output: &Type::Aggregate(false, &[&::U64, &::I32]), definition: Named("llvm.x86.rdseed.64") }, + "_addcarry_u32" => Intrinsic { + inputs: &[&::I8, &::I32, &::I32], + output: &Type::Aggregate(false, &[&::I8, &::I32]), + definition: Named("llvm.x86.addcarry.32"), + }, + "_addcarry_u64" => Intrinsic { + inputs: &[&::I8, &::I64, &::I64], + output: &Type::Aggregate(false, &[&::I8, &::I64]), + definition: Named("llvm.x86.addcarry.64"), + }, + "_subborrow_u32" => Intrinsic { + inputs: &[&::I8, &::I32, &::I32], + output: &Type::Aggregate(false, &[&::I8, &::I32]), + definition: Named("llvm.x86.subborrow.32"), + }, + "_subborrow_u64" => Intrinsic { + inputs: &[&::I8, &::I64, &::I64], + output: &Type::Aggregate(false, &[&::I8, &::I64]), + definition: Named("llvm.x86.subborrow.64"), + }, } } diff --git a/src/librustc_typeck/diagnostics.rs b/src/librustc_typeck/diagnostics.rs index a0dbaf5ad504b..0477016ff2c84 100644 --- a/src/librustc_typeck/diagnostics.rs +++ b/src/librustc_typeck/diagnostics.rs @@ -3379,180 +3379,6 @@ extern "platform-intrinsic" { ``` "##, -E0440: r##" -A platform-specific intrinsic function has the wrong number of type -parameters. Erroneous code example: - -```compile_fail,E0440 -#![feature(repr_simd)] -#![feature(platform_intrinsics)] - -#[repr(simd)] -struct f64x2(f64, f64); - -extern "platform-intrinsic" { - fn x86_mm_movemask_pd(x: f64x2) -> i32; - // error: platform-specific intrinsic has wrong number of type - // parameters -} -``` - -Please refer to the function declaration to see if it corresponds -with yours. Example: - -``` -#![feature(repr_simd)] -#![feature(platform_intrinsics)] - -#[repr(simd)] -struct f64x2(f64, f64); - -extern "platform-intrinsic" { - fn x86_mm_movemask_pd(x: f64x2) -> i32; -} -``` -"##, - -E0441: r##" -An unknown platform-specific intrinsic function was used. Erroneous -code example: - -```compile_fail,E0441 -#![feature(repr_simd)] -#![feature(platform_intrinsics)] - -#[repr(simd)] -struct i16x8(i16, i16, i16, i16, i16, i16, i16, i16); - -extern "platform-intrinsic" { - fn x86_mm_adds_ep16(x: i16x8, y: i16x8) -> i16x8; - // error: unrecognized platform-specific intrinsic function -} -``` - -Please verify that the function name wasn't misspelled, and ensure -that it is declared in the rust source code (in the file -src/librustc_platform_intrinsics/x86.rs). Example: - -``` -#![feature(repr_simd)] -#![feature(platform_intrinsics)] - -#[repr(simd)] -struct i16x8(i16, i16, i16, i16, i16, i16, i16, i16); - -extern "platform-intrinsic" { - fn x86_mm_adds_epi16(x: i16x8, y: i16x8) -> i16x8; // ok! -} -``` -"##, - -E0442: r##" -Intrinsic argument(s) and/or return value have the wrong type. -Erroneous code example: - -```compile_fail,E0442 -#![feature(repr_simd)] -#![feature(platform_intrinsics)] - -#[repr(simd)] -struct i8x16(i8, i8, i8, i8, i8, i8, i8, i8, - i8, i8, i8, i8, i8, i8, i8, i8); -#[repr(simd)] -struct i32x4(i32, i32, i32, i32); -#[repr(simd)] -struct i64x2(i64, i64); - -extern "platform-intrinsic" { - fn x86_mm_adds_epi16(x: i8x16, y: i32x4) -> i64x2; - // error: intrinsic arguments/return value have wrong type -} -``` - -To fix this error, please refer to the function declaration to give -it the awaited types. Example: - -``` -#![feature(repr_simd)] -#![feature(platform_intrinsics)] - -#[repr(simd)] -struct i16x8(i16, i16, i16, i16, i16, i16, i16, i16); - -extern "platform-intrinsic" { - fn x86_mm_adds_epi16(x: i16x8, y: i16x8) -> i16x8; // ok! -} -``` -"##, - -E0443: r##" -Intrinsic argument(s) and/or return value have the wrong type. -Erroneous code example: - -```compile_fail,E0443 -#![feature(repr_simd)] -#![feature(platform_intrinsics)] - -#[repr(simd)] -struct i16x8(i16, i16, i16, i16, i16, i16, i16, i16); -#[repr(simd)] -struct i64x8(i64, i64, i64, i64, i64, i64, i64, i64); - -extern "platform-intrinsic" { - fn x86_mm_adds_epi16(x: i16x8, y: i16x8) -> i64x8; - // error: intrinsic argument/return value has wrong type -} -``` - -To fix this error, please refer to the function declaration to give -it the awaited types. Example: - -``` -#![feature(repr_simd)] -#![feature(platform_intrinsics)] - -#[repr(simd)] -struct i16x8(i16, i16, i16, i16, i16, i16, i16, i16); - -extern "platform-intrinsic" { - fn x86_mm_adds_epi16(x: i16x8, y: i16x8) -> i16x8; // ok! -} -``` -"##, - -E0444: r##" -A platform-specific intrinsic function has wrong number of arguments. -Erroneous code example: - -```compile_fail,E0444 -#![feature(repr_simd)] -#![feature(platform_intrinsics)] - -#[repr(simd)] -struct f64x2(f64, f64); - -extern "platform-intrinsic" { - fn x86_mm_movemask_pd(x: f64x2, y: f64x2, z: f64x2) -> i32; - // error: platform-specific intrinsic has invalid number of arguments -} -``` - -Please refer to the function declaration to see if it corresponds -with yours. Example: - -``` -#![feature(repr_simd)] -#![feature(platform_intrinsics)] - -#[repr(simd)] -struct f64x2(f64, f64); - -extern "platform-intrinsic" { - fn x86_mm_movemask_pd(x: f64x2) -> i32; // ok! -} -``` -"##, - E0516: r##" The `typeof` keyword is currently reserved but unimplemented. Erroneous code example: @@ -4891,6 +4717,11 @@ register_diagnostics! { // E0372, // coherence not object safe E0377, // the trait `CoerceUnsized` may only be implemented for a coercion // between structures with the same definition + E0440, // errors associated with unstable platform intrinsics + E0441, // errors associated with unstable platform intrinsics + E0442, // errors associated with unstable platform intrinsics + E0443, // errors associated with unstable platform intrinsics + E0444, // errors associated with unstable platform intrinsics E0533, // `{}` does not name a unit variant, unit struct or a constant // E0563, // cannot determine a type for this `impl Trait`: {} // removed in 6383de15 E0564, // only named lifetimes are allowed in `impl Trait`, diff --git a/src/test/run-pass/simd/simd-upgraded.rs b/src/test/run-pass/simd/simd-upgraded.rs deleted file mode 100644 index e255c4d47a706..0000000000000 --- a/src/test/run-pass/simd/simd-upgraded.rs +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2016 The Rust Project Developers. See the COPYRIGHT -// file at the top-level directory of this distribution and at -// http://rust-lang.org/COPYRIGHT. -// -// Licensed under the Apache License, Version 2.0 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -// run-pass -#![allow(stable_features)] -#![allow(non_camel_case_types)] - -// Test that removed LLVM SIMD intrinsics continue -// to work via the "AutoUpgrade" mechanism. - -#![feature(cfg_target_feature, repr_simd)] -#![feature(platform_intrinsics, stmt_expr_attributes)] - -#[repr(simd)] -#[derive(PartialEq, Debug)] -struct i16x8(i16, i16, i16, i16, i16, i16, i16, i16); - -fn main() { - #[cfg(target_feature = "sse2")] unsafe { - extern "platform-intrinsic" { - fn x86_mm_min_epi16(x: i16x8, y: i16x8) -> i16x8; - } - assert_eq!(x86_mm_min_epi16(i16x8(0, 1, 2, 3, 4, 5, 6, 7), - i16x8(7, 6, 5, 4, 3, 2, 1, 0)), - i16x8(0, 1, 2, 3, 3, 2, 1, 0)); - }; -} diff --git a/src/test/ui/error-codes/E0440.rs b/src/test/ui/error-codes/E0440.rs index 04e7584008df9..ca58039d28782 100644 --- a/src/test/ui/error-codes/E0440.rs +++ b/src/test/ui/error-codes/E0440.rs @@ -15,7 +15,7 @@ struct f64x2(f64, f64); extern "platform-intrinsic" { - fn x86_mm_movemask_pd(x: f64x2) -> i32; //~ ERROR E0440 + fn x86_rdrand16_step(x: f64x2) -> i32; //~ ERROR E0440 } fn main () { diff --git a/src/test/ui/error-codes/E0440.stderr b/src/test/ui/error-codes/E0440.stderr index acaa948a33152..8fd3742fc53a9 100644 --- a/src/test/ui/error-codes/E0440.stderr +++ b/src/test/ui/error-codes/E0440.stderr @@ -1,8 +1,8 @@ error[E0440]: platform-specific intrinsic has wrong number of type parameters: found 1, expected 0 --> $DIR/E0440.rs:18:5 | -LL | fn x86_mm_movemask_pd(x: f64x2) -> i32; //~ ERROR E0440 - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +LL | fn x86_rdrand16_step(x: f64x2) -> i32; //~ ERROR E0440 + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ error: aborting due to previous error diff --git a/src/test/ui/error-codes/E0442.rs b/src/test/ui/error-codes/E0442.rs index ddd927054be1d..c13f239276f15 100644 --- a/src/test/ui/error-codes/E0442.rs +++ b/src/test/ui/error-codes/E0442.rs @@ -14,16 +14,10 @@ #[repr(simd)] struct i8x16(i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8); -#[repr(simd)] -struct i32x4(i32, i32, i32, i32); -#[repr(simd)] -struct i64x2(i64, i64); extern "platform-intrinsic" { - fn x86_mm_adds_epi16(x: i8x16, y: i32x4) -> i64x2; + fn aarch64_vld2_s8(x: *const i8) -> (i8x16, i8x16); //~^ ERROR E0442 - //~| ERROR E0442 - //~| ERROR E0442 } fn main() {} diff --git a/src/test/ui/error-codes/E0442.stderr b/src/test/ui/error-codes/E0442.stderr index 01881e1b5c38b..97e6b949a2922 100644 --- a/src/test/ui/error-codes/E0442.stderr +++ b/src/test/ui/error-codes/E0442.stderr @@ -1,21 +1,9 @@ -error[E0442]: intrinsic argument 1 has wrong type: found vector with length 16, expected length 8 - --> $DIR/E0442.rs:23:5 +error[E0442]: intrinsic return value has wrong type: found vector with length 16, expected length 8 + --> $DIR/E0442.rs:19:5 | -LL | fn x86_mm_adds_epi16(x: i8x16, y: i32x4) -> i64x2; - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +LL | fn aarch64_vld2_s8(x: *const i8) -> (i8x16, i8x16); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -error[E0442]: intrinsic argument 2 has wrong type: found vector with length 4, expected length 8 - --> $DIR/E0442.rs:23:5 - | -LL | fn x86_mm_adds_epi16(x: i8x16, y: i32x4) -> i64x2; - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -error[E0442]: intrinsic return value has wrong type: found vector with length 2, expected length 8 - --> $DIR/E0442.rs:23:5 - | -LL | fn x86_mm_adds_epi16(x: i8x16, y: i32x4) -> i64x2; - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -error: aborting due to 3 previous errors +error: aborting due to previous error For more information about this error, try `rustc --explain E0442`. diff --git a/src/test/ui/error-codes/E0443.rs b/src/test/ui/error-codes/E0443.rs index 24d1ee01dd46e..b4cfc0e2242a9 100644 --- a/src/test/ui/error-codes/E0443.rs +++ b/src/test/ui/error-codes/E0443.rs @@ -12,12 +12,13 @@ #![feature(platform_intrinsics)] #[repr(simd)] -struct i16x8(i16, i16, i16, i16, i16, i16, i16, i16); +struct i8x8(i8, i8, i8, i8, i8, i8, i8, i8); #[repr(simd)] struct i64x8(i64, i64, i64, i64, i64, i64, i64, i64); extern "platform-intrinsic" { - fn x86_mm_adds_epi16(x: i16x8, y: i16x8) -> i64x8; //~ ERROR E0443 + fn aarch64_vld2_s8(x: *const i8) -> (i8x8, i64x8); + //~^ ERROR E0443 } fn main() {} diff --git a/src/test/ui/error-codes/E0443.stderr b/src/test/ui/error-codes/E0443.stderr index b57c9423fce72..4bc42ceb3947b 100644 --- a/src/test/ui/error-codes/E0443.stderr +++ b/src/test/ui/error-codes/E0443.stderr @@ -1,7 +1,7 @@ -error[E0443]: intrinsic return value has wrong type: found `i64x8`, expected `i16x8` which was used for this vector type previously in this signature +error[E0443]: intrinsic return value has wrong type: found `i64x8`, expected `i8x8` which was used for this vector type previously in this signature --> $DIR/E0443.rs:20:5 | -LL | fn x86_mm_adds_epi16(x: i16x8, y: i16x8) -> i64x8; //~ ERROR E0443 +LL | fn aarch64_vld2_s8(x: *const i8) -> (i8x8, i64x8); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ error: aborting due to previous error diff --git a/src/test/ui/error-codes/E0444.rs b/src/test/ui/error-codes/E0444.rs index a424a3ca20ec0..987e94c85b528 100644 --- a/src/test/ui/error-codes/E0444.rs +++ b/src/test/ui/error-codes/E0444.rs @@ -15,7 +15,7 @@ struct f64x2(f64, f64); extern "platform-intrinsic" { - fn x86_mm_movemask_pd(x: f64x2, y: f64x2, z: f64x2) -> i32; //~ ERROR E0444 + fn x86_rdseed16_step(x: f64x2, y: f64x2, z: f64x2) -> i32; //~ ERROR E0444 } fn main() {} diff --git a/src/test/ui/error-codes/E0444.stderr b/src/test/ui/error-codes/E0444.stderr index 338c9dac75e32..2ae33125c9dcc 100644 --- a/src/test/ui/error-codes/E0444.stderr +++ b/src/test/ui/error-codes/E0444.stderr @@ -1,8 +1,8 @@ -error[E0444]: platform-specific intrinsic has invalid number of arguments: found 3, expected 1 +error[E0444]: platform-specific intrinsic has invalid number of arguments: found 3, expected 0 --> $DIR/E0444.rs:18:5 | -LL | fn x86_mm_movemask_pd(x: f64x2, y: f64x2, z: f64x2) -> i32; //~ ERROR E0444 - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +LL | fn x86_rdseed16_step(x: f64x2, y: f64x2, z: f64x2) -> i32; //~ ERROR E0444 + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ error: aborting due to previous error diff --git a/src/test/ui/intrinsic-invalid-number-of-arguments.stderr b/src/test/ui/intrinsic-invalid-number-of-arguments.stderr index af852b669c42c..00b6ddc992bf7 100644 --- a/src/test/ui/intrinsic-invalid-number-of-arguments.stderr +++ b/src/test/ui/intrinsic-invalid-number-of-arguments.stderr @@ -1,4 +1,4 @@ -error[E0444]: platform-specific intrinsic has invalid number of arguments: found 3, expected 1 +error[E0441]: unrecognized platform-specific intrinsic function: `x86_mm_movemask_pd` --> $DIR/intrinsic-invalid-number-of-arguments.rs:20:5 | LL | fn x86_mm_movemask_pd(x: f64x2, y: f64x2, z: f64x2) -> i32; //~ platform-specific intrinsic @@ -6,4 +6,4 @@ LL | fn x86_mm_movemask_pd(x: f64x2, y: f64x2, z: f64x2) -> i32; //~ platfor error: aborting due to previous error -For more information about this error, try `rustc --explain E0444`. +For more information about this error, try `rustc --explain E0441`. diff --git a/src/test/ui/platform-intrinsic-params.rs b/src/test/ui/platform-intrinsic-params.rs index e8a9031dba8db..829779f58df5b 100644 --- a/src/test/ui/platform-intrinsic-params.rs +++ b/src/test/ui/platform-intrinsic-params.rs @@ -9,8 +9,9 @@ // except according to those terms. #![feature(platform_intrinsics)] + extern "platform-intrinsic" { - fn x86_mm_movemask_ps() -> i32; //~ERROR found 0, expected 1 + fn aarch64_vld2_s8() -> i32; //~ERROR found 0, expected 1 } fn main() { } diff --git a/src/test/ui/platform-intrinsic-params.stderr b/src/test/ui/platform-intrinsic-params.stderr index e41de9fe02d7c..524bcf63d6930 100644 --- a/src/test/ui/platform-intrinsic-params.stderr +++ b/src/test/ui/platform-intrinsic-params.stderr @@ -1,8 +1,8 @@ error[E0444]: platform-specific intrinsic has invalid number of arguments: found 0, expected 1 - --> $DIR/platform-intrinsic-params.rs:13:5 + --> $DIR/platform-intrinsic-params.rs:14:5 | -LL | fn x86_mm_movemask_ps() -> i32; //~ERROR found 0, expected 1 - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +LL | fn aarch64_vld2_s8() -> i32; //~ERROR found 0, expected 1 + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ error: aborting due to previous error diff --git a/src/test/ui/simd-intrinsic/simd-intrinsic-declaration-type.rs b/src/test/ui/simd-intrinsic/simd-intrinsic-declaration-type.rs index ef1f4d6f230b3..32c89b5cec593 100644 --- a/src/test/ui/simd-intrinsic/simd-intrinsic-declaration-type.rs +++ b/src/test/ui/simd-intrinsic/simd-intrinsic-declaration-type.rs @@ -21,48 +21,38 @@ struct i8x16(i8, i8, i8, i8, i8, i8, i8, i8, #[repr(simd)] struct i32x4(i32, i32, i32, i32); #[repr(simd)] +struct i32x8(i32, i32, i32, i32, i32, i32, i32, i32); +#[repr(simd)] +struct u32x4(u32, u32, u32, u32); +#[repr(simd)] struct f32x4(f32, f32, f32, f32); #[repr(simd)] struct i64x2(i64, i64); -// correct signatures work well -mod right { - use {i16x8, u16x8}; - extern "platform-intrinsic" { - fn x86_mm_adds_epi16(x: i16x8, y: i16x8) -> i16x8; - fn x86_mm_adds_epu16(x: u16x8, y: u16x8) -> u16x8; - } -} -// but incorrect ones don't. - mod signedness { - use {i16x8, u16x8}; // signedness matters extern "platform-intrinsic" { - fn x86_mm_adds_epi16(x: u16x8, y: u16x8) -> u16x8; + fn aarch64_vld2q_dup_s32(x: *const u32) -> (::u32x4, ::u32x4); //~^ ERROR intrinsic argument 1 has wrong type - //~^^ ERROR intrinsic argument 2 has wrong type - //~^^^ ERROR intrinsic return value has wrong type - fn x86_mm_adds_epu16(x: i16x8, y: i16x8) -> i16x8; - //~^ ERROR intrinsic argument 1 has wrong type - //~^^ ERROR intrinsic argument 2 has wrong type - //~^^^ ERROR intrinsic return value has wrong type + //~| ERROR intrinsic return value has wrong type } } -// as do lengths -extern "platform-intrinsic" { - fn x86_mm_adds_epi16(x: i8x16, y: i32x4) -> i64x2; - //~^ ERROR intrinsic argument 1 has wrong type - //~^^ ERROR intrinsic argument 2 has wrong type - //~^^^ ERROR intrinsic return value has wrong type -} -// and so does int vs. float: -extern "platform-intrinsic" { - fn x86_mm_max_ps(x: i32x4, y: i32x4) -> i32x4; - //~^ ERROR intrinsic argument 1 has wrong type - //~^^ ERROR intrinsic argument 2 has wrong type - //~^^^ ERROR intrinsic return value has wrong type + +mod lengths { + // as do lengths + extern "platform-intrinsic" { + fn aarch64_vld2q_dup_s32(x: *const i32) -> (::i32x8, ::i32x4); + //~^ ERROR intrinsic return value has wrong type + } } +mod float_and_int { + // and so does int vs. float: + extern "platform-intrinsic" { + fn aarch64_vld2q_dup_s32(x: *const i32) -> (::f32x4, ::f32x4); + //~^ ERROR intrinsic return value has wrong type + } +} + fn main() {} diff --git a/src/test/ui/simd-intrinsic/simd-intrinsic-declaration-type.stderr b/src/test/ui/simd-intrinsic/simd-intrinsic-declaration-type.stderr index 4a8fd2d1befc2..ea1feedb23b3f 100644 --- a/src/test/ui/simd-intrinsic/simd-intrinsic-declaration-type.stderr +++ b/src/test/ui/simd-intrinsic/simd-intrinsic-declaration-type.stderr @@ -1,75 +1,27 @@ -error[E0442]: intrinsic argument 1 has wrong type: found `u16`, expected `i16` - --> $DIR/simd-intrinsic-declaration-type.rs:42:9 +error[E0442]: intrinsic argument 1 has wrong type: found `u32`, expected `i32` + --> $DIR/simd-intrinsic-declaration-type.rs:35:9 | -LL | fn x86_mm_adds_epi16(x: u16x8, y: u16x8) -> u16x8; - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +LL | fn aarch64_vld2q_dup_s32(x: *const u32) -> (::u32x4, ::u32x4); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -error[E0442]: intrinsic argument 2 has wrong type: found `u16`, expected `i16` - --> $DIR/simd-intrinsic-declaration-type.rs:42:9 +error[E0442]: intrinsic return value has wrong type: found `u32`, expected `i32` + --> $DIR/simd-intrinsic-declaration-type.rs:35:9 | -LL | fn x86_mm_adds_epi16(x: u16x8, y: u16x8) -> u16x8; - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +LL | fn aarch64_vld2q_dup_s32(x: *const u32) -> (::u32x4, ::u32x4); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -error[E0442]: intrinsic return value has wrong type: found `u16`, expected `i16` - --> $DIR/simd-intrinsic-declaration-type.rs:42:9 +error[E0442]: intrinsic return value has wrong type: found vector with length 8, expected length 4 + --> $DIR/simd-intrinsic-declaration-type.rs:44:9 | -LL | fn x86_mm_adds_epi16(x: u16x8, y: u16x8) -> u16x8; - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +LL | fn aarch64_vld2q_dup_s32(x: *const i32) -> (::i32x8, ::i32x4); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -error[E0442]: intrinsic argument 1 has wrong type: found `i16`, expected `u16` - --> $DIR/simd-intrinsic-declaration-type.rs:46:9 +error[E0442]: intrinsic return value has wrong type: found `f32`, expected `i32` + --> $DIR/simd-intrinsic-declaration-type.rs:53:9 | -LL | fn x86_mm_adds_epu16(x: i16x8, y: i16x8) -> i16x8; - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +LL | fn aarch64_vld2q_dup_s32(x: *const i32) -> (::f32x4, ::f32x4); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -error[E0442]: intrinsic argument 2 has wrong type: found `i16`, expected `u16` - --> $DIR/simd-intrinsic-declaration-type.rs:46:9 - | -LL | fn x86_mm_adds_epu16(x: i16x8, y: i16x8) -> i16x8; - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -error[E0442]: intrinsic return value has wrong type: found `i16`, expected `u16` - --> $DIR/simd-intrinsic-declaration-type.rs:46:9 - | -LL | fn x86_mm_adds_epu16(x: i16x8, y: i16x8) -> i16x8; - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -error[E0442]: intrinsic argument 1 has wrong type: found vector with length 16, expected length 8 - --> $DIR/simd-intrinsic-declaration-type.rs:54:5 - | -LL | fn x86_mm_adds_epi16(x: i8x16, y: i32x4) -> i64x2; - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -error[E0442]: intrinsic argument 2 has wrong type: found vector with length 4, expected length 8 - --> $DIR/simd-intrinsic-declaration-type.rs:54:5 - | -LL | fn x86_mm_adds_epi16(x: i8x16, y: i32x4) -> i64x2; - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -error[E0442]: intrinsic return value has wrong type: found vector with length 2, expected length 8 - --> $DIR/simd-intrinsic-declaration-type.rs:54:5 - | -LL | fn x86_mm_adds_epi16(x: i8x16, y: i32x4) -> i64x2; - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -error[E0442]: intrinsic argument 1 has wrong type: found `i32`, expected `f32` - --> $DIR/simd-intrinsic-declaration-type.rs:61:5 - | -LL | fn x86_mm_max_ps(x: i32x4, y: i32x4) -> i32x4; - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -error[E0442]: intrinsic argument 2 has wrong type: found `i32`, expected `f32` - --> $DIR/simd-intrinsic-declaration-type.rs:61:5 - | -LL | fn x86_mm_max_ps(x: i32x4, y: i32x4) -> i32x4; - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -error[E0442]: intrinsic return value has wrong type: found `i32`, expected `f32` - --> $DIR/simd-intrinsic-declaration-type.rs:61:5 - | -LL | fn x86_mm_max_ps(x: i32x4, y: i32x4) -> i32x4; - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -error: aborting due to 12 previous errors +error: aborting due to 4 previous errors For more information about this error, try `rustc --explain E0442`. diff --git a/src/test/ui/simd-intrinsic/simd-intrinsic-single-nominal-type.rs b/src/test/ui/simd-intrinsic/simd-intrinsic-single-nominal-type.rs deleted file mode 100644 index 5e009ea4431b7..0000000000000 --- a/src/test/ui/simd-intrinsic/simd-intrinsic-single-nominal-type.rs +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2015 The Rust Project Developers. See the COPYRIGHT -// file at the top-level directory of this distribution and at -// http://rust-lang.org/COPYRIGHT. -// -// Licensed under the Apache License, Version 2.0 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -#![feature(repr_simd, platform_intrinsics)] - -#[repr(simd)] -struct A(i16, i16, i16, i16, i16, i16, i16, i16); -#[repr(simd)] -struct B(i16, i16, i16, i16, i16, i16, i16, i16); - -// each intrinsic definition has to use the same nominal type for any -// vector structure throughout that declaration (i.e., every instance -// of i16x8 in each `fn ...;` needs to be either A or B) - -extern "platform-intrinsic" { - fn x86_mm_adds_epi16(x: A, y: A) -> B; - //~^ ERROR intrinsic return value has wrong type: found `B`, expected `A` - fn x86_mm_subs_epi16(x: A, y: B) -> A; - //~^ ERROR intrinsic argument 2 has wrong type: found `B`, expected `A` - - // ok: - fn x86_mm_max_epi16(x: B, y: B) -> B; - fn x86_mm_min_epi16(x: A, y: A) -> A; -} - -fn main() {} diff --git a/src/test/ui/simd-intrinsic/simd-intrinsic-single-nominal-type.stderr b/src/test/ui/simd-intrinsic/simd-intrinsic-single-nominal-type.stderr deleted file mode 100644 index 0692aa7275b3f..0000000000000 --- a/src/test/ui/simd-intrinsic/simd-intrinsic-single-nominal-type.stderr +++ /dev/null @@ -1,15 +0,0 @@ -error[E0443]: intrinsic return value has wrong type: found `B`, expected `A` which was used for this vector type previously in this signature - --> $DIR/simd-intrinsic-single-nominal-type.rs:23:5 - | -LL | fn x86_mm_adds_epi16(x: A, y: A) -> B; - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -error[E0443]: intrinsic argument 2 has wrong type: found `B`, expected `A` which was used for this vector type previously in this signature - --> $DIR/simd-intrinsic-single-nominal-type.rs:25:5 - | -LL | fn x86_mm_subs_epi16(x: A, y: B) -> A; - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -error: aborting due to 2 previous errors - -For more information about this error, try `rustc --explain E0443`.