Rollup merge of #131664 - taiki-e:s390x-asm-vreg-inout, r=Amanieu
Support input/output in vector registers of s390x inline assembly (under asm_experimental_reg feature) This extends currently clobber-only vector registers (`vreg`) support to allow passing `#[repr(simd)]` types, floats (f32/f64/f128), and integers (i32/i64/i128) as input/output. This is unstable and gated under new `#![feature(asm_experimental_reg)]` (tracking issue: https://github.com/rust-lang/rust/issues/133416). If the feature is not enabled, only clober is supported as before. | Architecture | Register class | Target feature | Allowed types | | ------------ | -------------- | -------------- | -------------- | | s390x | `vreg` | `vector` | `i32`, `f32`, `i64`, `f64`, `i128`, `f128`, `i8x16`, `i16x8`, `i32x4`, `i64x2`, `f32x4`, `f64x2` | This matches the list of types that are supported by the vector registers in LLVM: https://github.com/llvm/llvm-project/blob/llvmorg-19.1.0/llvm/lib/Target/SystemZ/SystemZRegisterInfo.td#L301-L313 In addition to `core::simd` types and floats listed above, custom `#[repr(simd)]` types of the same size and type are also allowed. All allowed types other than i32/f32/i64/f64/i128, and relevant target features are currently unstable. Currently there is no SIMD type for s390x in `core::arch`, but this is tracked in https://github.com/rust-lang/rust/issues/130869. cc https://github.com/rust-lang/rust/issues/130869 about vector facility support in s390x cc https://github.com/rust-lang/rust/issues/125398 & https://github.com/rust-lang/rust/issues/116909 about f128 support in asm `@rustbot` label +O-SystemZ +A-inline-assembly
This commit is contained in:
commit
3f86eddf83
22 changed files with 1382 additions and 146 deletions
|
@ -1,19 +1,31 @@
|
|||
//@ add-core-stubs
|
||||
//@ needs-asm-support
|
||||
//@ revisions: s390x
|
||||
//@ revisions: s390x s390x_vector s390x_vector_stable
|
||||
//@[s390x] compile-flags: --target s390x-unknown-linux-gnu
|
||||
//@[s390x] needs-llvm-components: systemz
|
||||
//@[s390x_vector] compile-flags: --target s390x-unknown-linux-gnu -C target-feature=+vector
|
||||
//@[s390x_vector] needs-llvm-components: systemz
|
||||
//@[s390x_vector_stable] compile-flags: --target s390x-unknown-linux-gnu -C target-feature=+vector
|
||||
//@[s390x_vector_stable] needs-llvm-components: systemz
|
||||
|
||||
#![crate_type = "rlib"]
|
||||
#![feature(no_core, rustc_attrs)]
|
||||
#![feature(asm_experimental_arch)]
|
||||
#![feature(no_core, rustc_attrs, repr_simd)]
|
||||
#![cfg_attr(not(s390x_vector_stable), feature(asm_experimental_reg))]
|
||||
#![no_core]
|
||||
#![allow(non_camel_case_types)]
|
||||
|
||||
extern crate minicore;
|
||||
use minicore::*;
|
||||
|
||||
#[repr(simd)]
|
||||
pub struct i64x2([i64; 2]);
|
||||
|
||||
impl Copy for i64x2 {}
|
||||
|
||||
fn f() {
|
||||
let mut x = 0;
|
||||
let mut b = 0u8;
|
||||
let mut v = i64x2([0; 2]);
|
||||
unsafe {
|
||||
// Unsupported registers
|
||||
asm!("", out("r11") _);
|
||||
|
@ -57,6 +69,51 @@ fn f() {
|
|||
asm!("", out("a1") _);
|
||||
//~^ ERROR invalid register `a1`: a0 and a1 are reserved for system use and cannot be used as operands for inline asm
|
||||
|
||||
// vreg
|
||||
asm!("", out("v0") _); // always ok
|
||||
asm!("", in("v0") v); // requires vector & asm_experimental_reg
|
||||
//[s390x]~^ ERROR register class `vreg` requires the `vector` target feature
|
||||
//[s390x_vector_stable]~^^ ERROR register class `vreg` can only be used as a clobber in stable [E0658]
|
||||
//[s390x_vector_stable]~| ERROR type `i64x2` cannot be used with this register class in stable [E0658]
|
||||
asm!("", out("v0") v); // requires vector & asm_experimental_reg
|
||||
//[s390x]~^ ERROR register class `vreg` requires the `vector` target feature
|
||||
//[s390x_vector_stable]~^^ ERROR register class `vreg` can only be used as a clobber in stable [E0658]
|
||||
//[s390x_vector_stable]~| ERROR type `i64x2` cannot be used with this register class in stable [E0658]
|
||||
asm!("", in("v0") x); // requires vector & asm_experimental_reg
|
||||
//[s390x]~^ ERROR register class `vreg` requires the `vector` target feature
|
||||
//[s390x_vector_stable]~^^ ERROR register class `vreg` can only be used as a clobber in stable [E0658]
|
||||
//[s390x_vector_stable]~| ERROR type `i32` cannot be used with this register class in stable [E0658]
|
||||
asm!("", out("v0") x); // requires vector & asm_experimental_reg
|
||||
//[s390x]~^ ERROR register class `vreg` requires the `vector` target feature
|
||||
//[s390x_vector_stable]~^^ ERROR register class `vreg` can only be used as a clobber in stable [E0658]
|
||||
//[s390x_vector_stable]~| ERROR type `i32` cannot be used with this register class in stable [E0658]
|
||||
asm!("", in("v0") b);
|
||||
//[s390x]~^ ERROR register class `vreg` requires the `vector` target feature
|
||||
//[s390x_vector]~^^ ERROR type `u8` cannot be used with this register class
|
||||
//[s390x_vector_stable]~^^^ ERROR register class `vreg` can only be used as a clobber in stable [E0658]
|
||||
//[s390x_vector_stable]~| ERROR type `u8` cannot be used with this register class
|
||||
asm!("", out("v0") b);
|
||||
//[s390x]~^ ERROR register class `vreg` requires the `vector` target feature
|
||||
//[s390x_vector]~^^ ERROR type `u8` cannot be used with this register class
|
||||
//[s390x_vector_stable]~^^^ ERROR register class `vreg` can only be used as a clobber in stable [E0658]
|
||||
//[s390x_vector_stable]~| ERROR type `u8` cannot be used with this register class
|
||||
asm!("/* {} */", in(vreg) v); // requires vector & asm_experimental_reg
|
||||
//[s390x]~^ ERROR register class `vreg` requires the `vector` target feature
|
||||
//[s390x_vector_stable]~^^ ERROR register class `vreg` can only be used as a clobber in stable [E0658]
|
||||
//[s390x_vector_stable]~| ERROR type `i64x2` cannot be used with this register class in stable [E0658]
|
||||
asm!("/* {} */", in(vreg) x); // requires vector & asm_experimental_reg
|
||||
//[s390x]~^ ERROR register class `vreg` requires the `vector` target feature
|
||||
//[s390x_vector_stable]~^^ ERROR register class `vreg` can only be used as a clobber in stable [E0658]
|
||||
//[s390x_vector_stable]~| ERROR type `i32` cannot be used with this register class in stable [E0658]
|
||||
asm!("/* {} */", in(vreg) b);
|
||||
//[s390x]~^ ERROR register class `vreg` requires the `vector` target feature
|
||||
//[s390x_vector]~^^ ERROR type `u8` cannot be used with this register class
|
||||
//[s390x_vector_stable]~^^^ ERROR register class `vreg` can only be used as a clobber in stable [E0658]
|
||||
//[s390x_vector_stable]~| ERROR type `u8` cannot be used with this register class
|
||||
asm!("/* {} */", out(vreg) _); // requires vector & asm_experimental_reg
|
||||
//[s390x]~^ ERROR register class `vreg` requires the `vector` target feature
|
||||
//[s390x_vector_stable]~^^ ERROR register class `vreg` can only be used as a clobber in stable [E0658]
|
||||
|
||||
// Clobber-only registers
|
||||
// areg
|
||||
asm!("", out("a2") _); // ok
|
||||
|
@ -72,21 +129,6 @@ fn f() {
|
|||
asm!("/* {} */", out(areg) _);
|
||||
//~^ ERROR can only be used as a clobber
|
||||
|
||||
// vreg
|
||||
asm!("", out("v0") _); // ok
|
||||
// FIXME: will be supported in https://github.com/rust-lang/rust/pull/131664
|
||||
asm!("", in("v0") x);
|
||||
//~^ ERROR can only be used as a clobber
|
||||
//~| ERROR type `i32` cannot be used with this register class
|
||||
asm!("", out("v0") x);
|
||||
//~^ ERROR can only be used as a clobber
|
||||
//~| ERROR type `i32` cannot be used with this register class
|
||||
asm!("/* {} */", in(vreg) x);
|
||||
//~^ ERROR can only be used as a clobber
|
||||
//~| ERROR type `i32` cannot be used with this register class
|
||||
asm!("/* {} */", out(vreg) _);
|
||||
//~^ ERROR can only be used as a clobber
|
||||
|
||||
// Overlapping registers
|
||||
// vreg/freg
|
||||
asm!("", out("v0") _, out("f0") _);
|
||||
|
|
|
@ -1,173 +1,149 @@
|
|||
error: invalid register `r11`: The frame pointer cannot be used as an operand for inline asm
|
||||
--> $DIR/bad-reg.rs:19:18
|
||||
--> $DIR/bad-reg.rs:31:18
|
||||
|
|
||||
LL | asm!("", out("r11") _);
|
||||
| ^^^^^^^^^^^^
|
||||
|
||||
error: invalid register `r15`: The stack pointer cannot be used as an operand for inline asm
|
||||
--> $DIR/bad-reg.rs:21:18
|
||||
--> $DIR/bad-reg.rs:33:18
|
||||
|
|
||||
LL | asm!("", out("r15") _);
|
||||
| ^^^^^^^^^^^^
|
||||
|
||||
error: invalid register `c0`: control registers are reserved by the kernel and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:23:18
|
||||
--> $DIR/bad-reg.rs:35:18
|
||||
|
|
||||
LL | asm!("", out("c0") _);
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: invalid register `c1`: control registers are reserved by the kernel and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:25:18
|
||||
--> $DIR/bad-reg.rs:37:18
|
||||
|
|
||||
LL | asm!("", out("c1") _);
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: invalid register `c2`: control registers are reserved by the kernel and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:27:18
|
||||
--> $DIR/bad-reg.rs:39:18
|
||||
|
|
||||
LL | asm!("", out("c2") _);
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: invalid register `c3`: control registers are reserved by the kernel and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:29:18
|
||||
--> $DIR/bad-reg.rs:41:18
|
||||
|
|
||||
LL | asm!("", out("c3") _);
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: invalid register `c4`: control registers are reserved by the kernel and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:31:18
|
||||
--> $DIR/bad-reg.rs:43:18
|
||||
|
|
||||
LL | asm!("", out("c4") _);
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: invalid register `c5`: control registers are reserved by the kernel and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:33:18
|
||||
--> $DIR/bad-reg.rs:45:18
|
||||
|
|
||||
LL | asm!("", out("c5") _);
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: invalid register `c6`: control registers are reserved by the kernel and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:35:18
|
||||
--> $DIR/bad-reg.rs:47:18
|
||||
|
|
||||
LL | asm!("", out("c6") _);
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: invalid register `c7`: control registers are reserved by the kernel and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:37:18
|
||||
--> $DIR/bad-reg.rs:49:18
|
||||
|
|
||||
LL | asm!("", out("c7") _);
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: invalid register `c8`: control registers are reserved by the kernel and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:39:18
|
||||
--> $DIR/bad-reg.rs:51:18
|
||||
|
|
||||
LL | asm!("", out("c8") _);
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: invalid register `c9`: control registers are reserved by the kernel and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:41:18
|
||||
--> $DIR/bad-reg.rs:53:18
|
||||
|
|
||||
LL | asm!("", out("c9") _);
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: invalid register `c10`: control registers are reserved by the kernel and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:43:18
|
||||
--> $DIR/bad-reg.rs:55:18
|
||||
|
|
||||
LL | asm!("", out("c10") _);
|
||||
| ^^^^^^^^^^^^
|
||||
|
||||
error: invalid register `c11`: control registers are reserved by the kernel and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:45:18
|
||||
--> $DIR/bad-reg.rs:57:18
|
||||
|
|
||||
LL | asm!("", out("c11") _);
|
||||
| ^^^^^^^^^^^^
|
||||
|
||||
error: invalid register `c12`: control registers are reserved by the kernel and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:47:18
|
||||
--> $DIR/bad-reg.rs:59:18
|
||||
|
|
||||
LL | asm!("", out("c12") _);
|
||||
| ^^^^^^^^^^^^
|
||||
|
||||
error: invalid register `c13`: control registers are reserved by the kernel and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:49:18
|
||||
--> $DIR/bad-reg.rs:61:18
|
||||
|
|
||||
LL | asm!("", out("c13") _);
|
||||
| ^^^^^^^^^^^^
|
||||
|
||||
error: invalid register `c14`: control registers are reserved by the kernel and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:51:18
|
||||
--> $DIR/bad-reg.rs:63:18
|
||||
|
|
||||
LL | asm!("", out("c14") _);
|
||||
| ^^^^^^^^^^^^
|
||||
|
||||
error: invalid register `c15`: control registers are reserved by the kernel and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:53:18
|
||||
--> $DIR/bad-reg.rs:65:18
|
||||
|
|
||||
LL | asm!("", out("c15") _);
|
||||
| ^^^^^^^^^^^^
|
||||
|
||||
error: invalid register `a0`: a0 and a1 are reserved for system use and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:55:18
|
||||
--> $DIR/bad-reg.rs:67:18
|
||||
|
|
||||
LL | asm!("", out("a0") _);
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: invalid register `a1`: a0 and a1 are reserved for system use and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:57:18
|
||||
--> $DIR/bad-reg.rs:69:18
|
||||
|
|
||||
LL | asm!("", out("a1") _);
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: register class `areg` can only be used as a clobber, not as an input or output
|
||||
--> $DIR/bad-reg.rs:63:18
|
||||
--> $DIR/bad-reg.rs:120:18
|
||||
|
|
||||
LL | asm!("", in("a2") x);
|
||||
| ^^^^^^^^^^
|
||||
|
||||
error: register class `areg` can only be used as a clobber, not as an input or output
|
||||
--> $DIR/bad-reg.rs:66:18
|
||||
--> $DIR/bad-reg.rs:123:18
|
||||
|
|
||||
LL | asm!("", out("a2") x);
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: register class `areg` can only be used as a clobber, not as an input or output
|
||||
--> $DIR/bad-reg.rs:69:26
|
||||
--> $DIR/bad-reg.rs:126:26
|
||||
|
|
||||
LL | asm!("/* {} */", in(areg) x);
|
||||
| ^^^^^^^^^^
|
||||
|
||||
error: register class `areg` can only be used as a clobber, not as an input or output
|
||||
--> $DIR/bad-reg.rs:72:26
|
||||
--> $DIR/bad-reg.rs:129:26
|
||||
|
|
||||
LL | asm!("/* {} */", out(areg) _);
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: register class `vreg` can only be used as a clobber, not as an input or output
|
||||
--> $DIR/bad-reg.rs:78:18
|
||||
|
|
||||
LL | asm!("", in("v0") x);
|
||||
| ^^^^^^^^^^
|
||||
|
||||
error: register class `vreg` can only be used as a clobber, not as an input or output
|
||||
--> $DIR/bad-reg.rs:81:18
|
||||
|
|
||||
LL | asm!("", out("v0") x);
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: register class `vreg` can only be used as a clobber, not as an input or output
|
||||
--> $DIR/bad-reg.rs:84:26
|
||||
|
|
||||
LL | asm!("/* {} */", in(vreg) x);
|
||||
| ^^^^^^^^^^
|
||||
|
||||
error: register class `vreg` can only be used as a clobber, not as an input or output
|
||||
--> $DIR/bad-reg.rs:87:26
|
||||
|
|
||||
LL | asm!("/* {} */", out(vreg) _);
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: register `f0` conflicts with register `v0`
|
||||
--> $DIR/bad-reg.rs:92:31
|
||||
--> $DIR/bad-reg.rs:134:31
|
||||
|
|
||||
LL | asm!("", out("v0") _, out("f0") _);
|
||||
| ----------- ^^^^^^^^^^^ register `f0`
|
||||
|
@ -175,7 +151,7 @@ LL | asm!("", out("v0") _, out("f0") _);
|
|||
| register `v0`
|
||||
|
||||
error: register `f1` conflicts with register `v1`
|
||||
--> $DIR/bad-reg.rs:94:31
|
||||
--> $DIR/bad-reg.rs:136:31
|
||||
|
|
||||
LL | asm!("", out("v1") _, out("f1") _);
|
||||
| ----------- ^^^^^^^^^^^ register `f1`
|
||||
|
@ -183,7 +159,7 @@ LL | asm!("", out("v1") _, out("f1") _);
|
|||
| register `v1`
|
||||
|
||||
error: register `f2` conflicts with register `v2`
|
||||
--> $DIR/bad-reg.rs:96:31
|
||||
--> $DIR/bad-reg.rs:138:31
|
||||
|
|
||||
LL | asm!("", out("v2") _, out("f2") _);
|
||||
| ----------- ^^^^^^^^^^^ register `f2`
|
||||
|
@ -191,7 +167,7 @@ LL | asm!("", out("v2") _, out("f2") _);
|
|||
| register `v2`
|
||||
|
||||
error: register `f3` conflicts with register `v3`
|
||||
--> $DIR/bad-reg.rs:98:31
|
||||
--> $DIR/bad-reg.rs:140:31
|
||||
|
|
||||
LL | asm!("", out("v3") _, out("f3") _);
|
||||
| ----------- ^^^^^^^^^^^ register `f3`
|
||||
|
@ -199,7 +175,7 @@ LL | asm!("", out("v3") _, out("f3") _);
|
|||
| register `v3`
|
||||
|
||||
error: register `f4` conflicts with register `v4`
|
||||
--> $DIR/bad-reg.rs:100:31
|
||||
--> $DIR/bad-reg.rs:142:31
|
||||
|
|
||||
LL | asm!("", out("v4") _, out("f4") _);
|
||||
| ----------- ^^^^^^^^^^^ register `f4`
|
||||
|
@ -207,7 +183,7 @@ LL | asm!("", out("v4") _, out("f4") _);
|
|||
| register `v4`
|
||||
|
||||
error: register `f5` conflicts with register `v5`
|
||||
--> $DIR/bad-reg.rs:102:31
|
||||
--> $DIR/bad-reg.rs:144:31
|
||||
|
|
||||
LL | asm!("", out("v5") _, out("f5") _);
|
||||
| ----------- ^^^^^^^^^^^ register `f5`
|
||||
|
@ -215,7 +191,7 @@ LL | asm!("", out("v5") _, out("f5") _);
|
|||
| register `v5`
|
||||
|
||||
error: register `f6` conflicts with register `v6`
|
||||
--> $DIR/bad-reg.rs:104:31
|
||||
--> $DIR/bad-reg.rs:146:31
|
||||
|
|
||||
LL | asm!("", out("v6") _, out("f6") _);
|
||||
| ----------- ^^^^^^^^^^^ register `f6`
|
||||
|
@ -223,7 +199,7 @@ LL | asm!("", out("v6") _, out("f6") _);
|
|||
| register `v6`
|
||||
|
||||
error: register `f7` conflicts with register `v7`
|
||||
--> $DIR/bad-reg.rs:106:31
|
||||
--> $DIR/bad-reg.rs:148:31
|
||||
|
|
||||
LL | asm!("", out("v7") _, out("f7") _);
|
||||
| ----------- ^^^^^^^^^^^ register `f7`
|
||||
|
@ -231,7 +207,7 @@ LL | asm!("", out("v7") _, out("f7") _);
|
|||
| register `v7`
|
||||
|
||||
error: register `f8` conflicts with register `v8`
|
||||
--> $DIR/bad-reg.rs:108:31
|
||||
--> $DIR/bad-reg.rs:150:31
|
||||
|
|
||||
LL | asm!("", out("v8") _, out("f8") _);
|
||||
| ----------- ^^^^^^^^^^^ register `f8`
|
||||
|
@ -239,7 +215,7 @@ LL | asm!("", out("v8") _, out("f8") _);
|
|||
| register `v8`
|
||||
|
||||
error: register `f9` conflicts with register `v9`
|
||||
--> $DIR/bad-reg.rs:110:31
|
||||
--> $DIR/bad-reg.rs:152:31
|
||||
|
|
||||
LL | asm!("", out("v9") _, out("f9") _);
|
||||
| ----------- ^^^^^^^^^^^ register `f9`
|
||||
|
@ -247,7 +223,7 @@ LL | asm!("", out("v9") _, out("f9") _);
|
|||
| register `v9`
|
||||
|
||||
error: register `f10` conflicts with register `v10`
|
||||
--> $DIR/bad-reg.rs:112:32
|
||||
--> $DIR/bad-reg.rs:154:32
|
||||
|
|
||||
LL | asm!("", out("v10") _, out("f10") _);
|
||||
| ------------ ^^^^^^^^^^^^ register `f10`
|
||||
|
@ -255,7 +231,7 @@ LL | asm!("", out("v10") _, out("f10") _);
|
|||
| register `v10`
|
||||
|
||||
error: register `f11` conflicts with register `v11`
|
||||
--> $DIR/bad-reg.rs:114:32
|
||||
--> $DIR/bad-reg.rs:156:32
|
||||
|
|
||||
LL | asm!("", out("v11") _, out("f11") _);
|
||||
| ------------ ^^^^^^^^^^^^ register `f11`
|
||||
|
@ -263,7 +239,7 @@ LL | asm!("", out("v11") _, out("f11") _);
|
|||
| register `v11`
|
||||
|
||||
error: register `f12` conflicts with register `v12`
|
||||
--> $DIR/bad-reg.rs:116:32
|
||||
--> $DIR/bad-reg.rs:158:32
|
||||
|
|
||||
LL | asm!("", out("v12") _, out("f12") _);
|
||||
| ------------ ^^^^^^^^^^^^ register `f12`
|
||||
|
@ -271,7 +247,7 @@ LL | asm!("", out("v12") _, out("f12") _);
|
|||
| register `v12`
|
||||
|
||||
error: register `f13` conflicts with register `v13`
|
||||
--> $DIR/bad-reg.rs:118:32
|
||||
--> $DIR/bad-reg.rs:160:32
|
||||
|
|
||||
LL | asm!("", out("v13") _, out("f13") _);
|
||||
| ------------ ^^^^^^^^^^^^ register `f13`
|
||||
|
@ -279,7 +255,7 @@ LL | asm!("", out("v13") _, out("f13") _);
|
|||
| register `v13`
|
||||
|
||||
error: register `f14` conflicts with register `v14`
|
||||
--> $DIR/bad-reg.rs:120:32
|
||||
--> $DIR/bad-reg.rs:162:32
|
||||
|
|
||||
LL | asm!("", out("v14") _, out("f14") _);
|
||||
| ------------ ^^^^^^^^^^^^ register `f14`
|
||||
|
@ -287,7 +263,7 @@ LL | asm!("", out("v14") _, out("f14") _);
|
|||
| register `v14`
|
||||
|
||||
error: register `f15` conflicts with register `v15`
|
||||
--> $DIR/bad-reg.rs:122:32
|
||||
--> $DIR/bad-reg.rs:164:32
|
||||
|
|
||||
LL | asm!("", out("v15") _, out("f15") _);
|
||||
| ------------ ^^^^^^^^^^^^ register `f15`
|
||||
|
@ -295,13 +271,73 @@ LL | asm!("", out("v15") _, out("f15") _);
|
|||
| register `v15`
|
||||
|
||||
error: invalid register `f16`: unknown register
|
||||
--> $DIR/bad-reg.rs:125:32
|
||||
--> $DIR/bad-reg.rs:167:32
|
||||
|
|
||||
LL | asm!("", out("v16") _, out("f16") _);
|
||||
| ^^^^^^^^^^^^
|
||||
|
||||
error: register class `vreg` requires the `vector` target feature
|
||||
--> $DIR/bad-reg.rs:74:18
|
||||
|
|
||||
LL | asm!("", in("v0") v); // requires vector & asm_experimental_reg
|
||||
| ^^^^^^^^^^
|
||||
|
||||
error: register class `vreg` requires the `vector` target feature
|
||||
--> $DIR/bad-reg.rs:78:18
|
||||
|
|
||||
LL | asm!("", out("v0") v); // requires vector & asm_experimental_reg
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: register class `vreg` requires the `vector` target feature
|
||||
--> $DIR/bad-reg.rs:82:18
|
||||
|
|
||||
LL | asm!("", in("v0") x); // requires vector & asm_experimental_reg
|
||||
| ^^^^^^^^^^
|
||||
|
||||
error: register class `vreg` requires the `vector` target feature
|
||||
--> $DIR/bad-reg.rs:86:18
|
||||
|
|
||||
LL | asm!("", out("v0") x); // requires vector & asm_experimental_reg
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: register class `vreg` requires the `vector` target feature
|
||||
--> $DIR/bad-reg.rs:90:18
|
||||
|
|
||||
LL | asm!("", in("v0") b);
|
||||
| ^^^^^^^^^^
|
||||
|
||||
error: register class `vreg` requires the `vector` target feature
|
||||
--> $DIR/bad-reg.rs:95:18
|
||||
|
|
||||
LL | asm!("", out("v0") b);
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: register class `vreg` requires the `vector` target feature
|
||||
--> $DIR/bad-reg.rs:100:26
|
||||
|
|
||||
LL | asm!("/* {} */", in(vreg) v); // requires vector & asm_experimental_reg
|
||||
| ^^^^^^^^^^
|
||||
|
||||
error: register class `vreg` requires the `vector` target feature
|
||||
--> $DIR/bad-reg.rs:104:26
|
||||
|
|
||||
LL | asm!("/* {} */", in(vreg) x); // requires vector & asm_experimental_reg
|
||||
| ^^^^^^^^^^
|
||||
|
||||
error: register class `vreg` requires the `vector` target feature
|
||||
--> $DIR/bad-reg.rs:108:26
|
||||
|
|
||||
LL | asm!("/* {} */", in(vreg) b);
|
||||
| ^^^^^^^^^^
|
||||
|
||||
error: register class `vreg` requires the `vector` target feature
|
||||
--> $DIR/bad-reg.rs:113:26
|
||||
|
|
||||
LL | asm!("/* {} */", out(vreg) _); // requires vector & asm_experimental_reg
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: type `i32` cannot be used with this register class
|
||||
--> $DIR/bad-reg.rs:63:27
|
||||
--> $DIR/bad-reg.rs:120:27
|
||||
|
|
||||
LL | asm!("", in("a2") x);
|
||||
| ^
|
||||
|
@ -309,7 +345,7 @@ LL | asm!("", in("a2") x);
|
|||
= note: register class `areg` supports these types:
|
||||
|
||||
error: type `i32` cannot be used with this register class
|
||||
--> $DIR/bad-reg.rs:66:28
|
||||
--> $DIR/bad-reg.rs:123:28
|
||||
|
|
||||
LL | asm!("", out("a2") x);
|
||||
| ^
|
||||
|
@ -317,36 +353,12 @@ LL | asm!("", out("a2") x);
|
|||
= note: register class `areg` supports these types:
|
||||
|
||||
error: type `i32` cannot be used with this register class
|
||||
--> $DIR/bad-reg.rs:69:35
|
||||
--> $DIR/bad-reg.rs:126:35
|
||||
|
|
||||
LL | asm!("/* {} */", in(areg) x);
|
||||
| ^
|
||||
|
|
||||
= note: register class `areg` supports these types:
|
||||
|
||||
error: type `i32` cannot be used with this register class
|
||||
--> $DIR/bad-reg.rs:78:27
|
||||
|
|
||||
LL | asm!("", in("v0") x);
|
||||
| ^
|
||||
|
|
||||
= note: register class `vreg` supports these types:
|
||||
|
||||
error: type `i32` cannot be used with this register class
|
||||
--> $DIR/bad-reg.rs:81:28
|
||||
|
|
||||
LL | asm!("", out("v0") x);
|
||||
| ^
|
||||
|
|
||||
= note: register class `vreg` supports these types:
|
||||
|
||||
error: type `i32` cannot be used with this register class
|
||||
--> $DIR/bad-reg.rs:84:35
|
||||
|
|
||||
LL | asm!("/* {} */", in(vreg) x);
|
||||
| ^
|
||||
|
|
||||
= note: register class `vreg` supports these types:
|
||||
|
||||
error: aborting due to 51 previous errors
|
||||
error: aborting due to 54 previous errors
|
||||
|
||||
|
|
328
tests/ui/asm/s390x/bad-reg.s390x_vector.stderr
Normal file
328
tests/ui/asm/s390x/bad-reg.s390x_vector.stderr
Normal file
|
@ -0,0 +1,328 @@
|
|||
error: invalid register `r11`: The frame pointer cannot be used as an operand for inline asm
|
||||
--> $DIR/bad-reg.rs:31:18
|
||||
|
|
||||
LL | asm!("", out("r11") _);
|
||||
| ^^^^^^^^^^^^
|
||||
|
||||
error: invalid register `r15`: The stack pointer cannot be used as an operand for inline asm
|
||||
--> $DIR/bad-reg.rs:33:18
|
||||
|
|
||||
LL | asm!("", out("r15") _);
|
||||
| ^^^^^^^^^^^^
|
||||
|
||||
error: invalid register `c0`: control registers are reserved by the kernel and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:35:18
|
||||
|
|
||||
LL | asm!("", out("c0") _);
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: invalid register `c1`: control registers are reserved by the kernel and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:37:18
|
||||
|
|
||||
LL | asm!("", out("c1") _);
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: invalid register `c2`: control registers are reserved by the kernel and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:39:18
|
||||
|
|
||||
LL | asm!("", out("c2") _);
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: invalid register `c3`: control registers are reserved by the kernel and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:41:18
|
||||
|
|
||||
LL | asm!("", out("c3") _);
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: invalid register `c4`: control registers are reserved by the kernel and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:43:18
|
||||
|
|
||||
LL | asm!("", out("c4") _);
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: invalid register `c5`: control registers are reserved by the kernel and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:45:18
|
||||
|
|
||||
LL | asm!("", out("c5") _);
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: invalid register `c6`: control registers are reserved by the kernel and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:47:18
|
||||
|
|
||||
LL | asm!("", out("c6") _);
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: invalid register `c7`: control registers are reserved by the kernel and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:49:18
|
||||
|
|
||||
LL | asm!("", out("c7") _);
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: invalid register `c8`: control registers are reserved by the kernel and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:51:18
|
||||
|
|
||||
LL | asm!("", out("c8") _);
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: invalid register `c9`: control registers are reserved by the kernel and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:53:18
|
||||
|
|
||||
LL | asm!("", out("c9") _);
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: invalid register `c10`: control registers are reserved by the kernel and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:55:18
|
||||
|
|
||||
LL | asm!("", out("c10") _);
|
||||
| ^^^^^^^^^^^^
|
||||
|
||||
error: invalid register `c11`: control registers are reserved by the kernel and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:57:18
|
||||
|
|
||||
LL | asm!("", out("c11") _);
|
||||
| ^^^^^^^^^^^^
|
||||
|
||||
error: invalid register `c12`: control registers are reserved by the kernel and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:59:18
|
||||
|
|
||||
LL | asm!("", out("c12") _);
|
||||
| ^^^^^^^^^^^^
|
||||
|
||||
error: invalid register `c13`: control registers are reserved by the kernel and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:61:18
|
||||
|
|
||||
LL | asm!("", out("c13") _);
|
||||
| ^^^^^^^^^^^^
|
||||
|
||||
error: invalid register `c14`: control registers are reserved by the kernel and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:63:18
|
||||
|
|
||||
LL | asm!("", out("c14") _);
|
||||
| ^^^^^^^^^^^^
|
||||
|
||||
error: invalid register `c15`: control registers are reserved by the kernel and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:65:18
|
||||
|
|
||||
LL | asm!("", out("c15") _);
|
||||
| ^^^^^^^^^^^^
|
||||
|
||||
error: invalid register `a0`: a0 and a1 are reserved for system use and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:67:18
|
||||
|
|
||||
LL | asm!("", out("a0") _);
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: invalid register `a1`: a0 and a1 are reserved for system use and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:69:18
|
||||
|
|
||||
LL | asm!("", out("a1") _);
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: register class `areg` can only be used as a clobber, not as an input or output
|
||||
--> $DIR/bad-reg.rs:120:18
|
||||
|
|
||||
LL | asm!("", in("a2") x);
|
||||
| ^^^^^^^^^^
|
||||
|
||||
error: register class `areg` can only be used as a clobber, not as an input or output
|
||||
--> $DIR/bad-reg.rs:123:18
|
||||
|
|
||||
LL | asm!("", out("a2") x);
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: register class `areg` can only be used as a clobber, not as an input or output
|
||||
--> $DIR/bad-reg.rs:126:26
|
||||
|
|
||||
LL | asm!("/* {} */", in(areg) x);
|
||||
| ^^^^^^^^^^
|
||||
|
||||
error: register class `areg` can only be used as a clobber, not as an input or output
|
||||
--> $DIR/bad-reg.rs:129:26
|
||||
|
|
||||
LL | asm!("/* {} */", out(areg) _);
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: register `f0` conflicts with register `v0`
|
||||
--> $DIR/bad-reg.rs:134:31
|
||||
|
|
||||
LL | asm!("", out("v0") _, out("f0") _);
|
||||
| ----------- ^^^^^^^^^^^ register `f0`
|
||||
| |
|
||||
| register `v0`
|
||||
|
||||
error: register `f1` conflicts with register `v1`
|
||||
--> $DIR/bad-reg.rs:136:31
|
||||
|
|
||||
LL | asm!("", out("v1") _, out("f1") _);
|
||||
| ----------- ^^^^^^^^^^^ register `f1`
|
||||
| |
|
||||
| register `v1`
|
||||
|
||||
error: register `f2` conflicts with register `v2`
|
||||
--> $DIR/bad-reg.rs:138:31
|
||||
|
|
||||
LL | asm!("", out("v2") _, out("f2") _);
|
||||
| ----------- ^^^^^^^^^^^ register `f2`
|
||||
| |
|
||||
| register `v2`
|
||||
|
||||
error: register `f3` conflicts with register `v3`
|
||||
--> $DIR/bad-reg.rs:140:31
|
||||
|
|
||||
LL | asm!("", out("v3") _, out("f3") _);
|
||||
| ----------- ^^^^^^^^^^^ register `f3`
|
||||
| |
|
||||
| register `v3`
|
||||
|
||||
error: register `f4` conflicts with register `v4`
|
||||
--> $DIR/bad-reg.rs:142:31
|
||||
|
|
||||
LL | asm!("", out("v4") _, out("f4") _);
|
||||
| ----------- ^^^^^^^^^^^ register `f4`
|
||||
| |
|
||||
| register `v4`
|
||||
|
||||
error: register `f5` conflicts with register `v5`
|
||||
--> $DIR/bad-reg.rs:144:31
|
||||
|
|
||||
LL | asm!("", out("v5") _, out("f5") _);
|
||||
| ----------- ^^^^^^^^^^^ register `f5`
|
||||
| |
|
||||
| register `v5`
|
||||
|
||||
error: register `f6` conflicts with register `v6`
|
||||
--> $DIR/bad-reg.rs:146:31
|
||||
|
|
||||
LL | asm!("", out("v6") _, out("f6") _);
|
||||
| ----------- ^^^^^^^^^^^ register `f6`
|
||||
| |
|
||||
| register `v6`
|
||||
|
||||
error: register `f7` conflicts with register `v7`
|
||||
--> $DIR/bad-reg.rs:148:31
|
||||
|
|
||||
LL | asm!("", out("v7") _, out("f7") _);
|
||||
| ----------- ^^^^^^^^^^^ register `f7`
|
||||
| |
|
||||
| register `v7`
|
||||
|
||||
error: register `f8` conflicts with register `v8`
|
||||
--> $DIR/bad-reg.rs:150:31
|
||||
|
|
||||
LL | asm!("", out("v8") _, out("f8") _);
|
||||
| ----------- ^^^^^^^^^^^ register `f8`
|
||||
| |
|
||||
| register `v8`
|
||||
|
||||
error: register `f9` conflicts with register `v9`
|
||||
--> $DIR/bad-reg.rs:152:31
|
||||
|
|
||||
LL | asm!("", out("v9") _, out("f9") _);
|
||||
| ----------- ^^^^^^^^^^^ register `f9`
|
||||
| |
|
||||
| register `v9`
|
||||
|
||||
error: register `f10` conflicts with register `v10`
|
||||
--> $DIR/bad-reg.rs:154:32
|
||||
|
|
||||
LL | asm!("", out("v10") _, out("f10") _);
|
||||
| ------------ ^^^^^^^^^^^^ register `f10`
|
||||
| |
|
||||
| register `v10`
|
||||
|
||||
error: register `f11` conflicts with register `v11`
|
||||
--> $DIR/bad-reg.rs:156:32
|
||||
|
|
||||
LL | asm!("", out("v11") _, out("f11") _);
|
||||
| ------------ ^^^^^^^^^^^^ register `f11`
|
||||
| |
|
||||
| register `v11`
|
||||
|
||||
error: register `f12` conflicts with register `v12`
|
||||
--> $DIR/bad-reg.rs:158:32
|
||||
|
|
||||
LL | asm!("", out("v12") _, out("f12") _);
|
||||
| ------------ ^^^^^^^^^^^^ register `f12`
|
||||
| |
|
||||
| register `v12`
|
||||
|
||||
error: register `f13` conflicts with register `v13`
|
||||
--> $DIR/bad-reg.rs:160:32
|
||||
|
|
||||
LL | asm!("", out("v13") _, out("f13") _);
|
||||
| ------------ ^^^^^^^^^^^^ register `f13`
|
||||
| |
|
||||
| register `v13`
|
||||
|
||||
error: register `f14` conflicts with register `v14`
|
||||
--> $DIR/bad-reg.rs:162:32
|
||||
|
|
||||
LL | asm!("", out("v14") _, out("f14") _);
|
||||
| ------------ ^^^^^^^^^^^^ register `f14`
|
||||
| |
|
||||
| register `v14`
|
||||
|
||||
error: register `f15` conflicts with register `v15`
|
||||
--> $DIR/bad-reg.rs:164:32
|
||||
|
|
||||
LL | asm!("", out("v15") _, out("f15") _);
|
||||
| ------------ ^^^^^^^^^^^^ register `f15`
|
||||
| |
|
||||
| register `v15`
|
||||
|
||||
error: invalid register `f16`: unknown register
|
||||
--> $DIR/bad-reg.rs:167:32
|
||||
|
|
||||
LL | asm!("", out("v16") _, out("f16") _);
|
||||
| ^^^^^^^^^^^^
|
||||
|
||||
error: type `u8` cannot be used with this register class
|
||||
--> $DIR/bad-reg.rs:90:27
|
||||
|
|
||||
LL | asm!("", in("v0") b);
|
||||
| ^
|
||||
|
|
||||
= note: register class `vreg` supports these types: i32, f32, i64, f64, i128, f128, i8x16, i16x8, i32x4, i64x2, f32x4, f64x2
|
||||
|
||||
error: type `u8` cannot be used with this register class
|
||||
--> $DIR/bad-reg.rs:95:28
|
||||
|
|
||||
LL | asm!("", out("v0") b);
|
||||
| ^
|
||||
|
|
||||
= note: register class `vreg` supports these types: i32, f32, i64, f64, i128, f128, i8x16, i16x8, i32x4, i64x2, f32x4, f64x2
|
||||
|
||||
error: type `u8` cannot be used with this register class
|
||||
--> $DIR/bad-reg.rs:108:35
|
||||
|
|
||||
LL | asm!("/* {} */", in(vreg) b);
|
||||
| ^
|
||||
|
|
||||
= note: register class `vreg` supports these types: i32, f32, i64, f64, i128, f128, i8x16, i16x8, i32x4, i64x2, f32x4, f64x2
|
||||
|
||||
error: type `i32` cannot be used with this register class
|
||||
--> $DIR/bad-reg.rs:120:27
|
||||
|
|
||||
LL | asm!("", in("a2") x);
|
||||
| ^
|
||||
|
|
||||
= note: register class `areg` supports these types:
|
||||
|
||||
error: type `i32` cannot be used with this register class
|
||||
--> $DIR/bad-reg.rs:123:28
|
||||
|
|
||||
LL | asm!("", out("a2") x);
|
||||
| ^
|
||||
|
|
||||
= note: register class `areg` supports these types:
|
||||
|
||||
error: type `i32` cannot be used with this register class
|
||||
--> $DIR/bad-reg.rs:126:35
|
||||
|
|
||||
LL | asm!("/* {} */", in(areg) x);
|
||||
| ^
|
||||
|
|
||||
= note: register class `areg` supports these types:
|
||||
|
||||
error: aborting due to 47 previous errors
|
||||
|
489
tests/ui/asm/s390x/bad-reg.s390x_vector_stable.stderr
Normal file
489
tests/ui/asm/s390x/bad-reg.s390x_vector_stable.stderr
Normal file
|
@ -0,0 +1,489 @@
|
|||
error: invalid register `r11`: The frame pointer cannot be used as an operand for inline asm
|
||||
--> $DIR/bad-reg.rs:31:18
|
||||
|
|
||||
LL | asm!("", out("r11") _);
|
||||
| ^^^^^^^^^^^^
|
||||
|
||||
error: invalid register `r15`: The stack pointer cannot be used as an operand for inline asm
|
||||
--> $DIR/bad-reg.rs:33:18
|
||||
|
|
||||
LL | asm!("", out("r15") _);
|
||||
| ^^^^^^^^^^^^
|
||||
|
||||
error: invalid register `c0`: control registers are reserved by the kernel and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:35:18
|
||||
|
|
||||
LL | asm!("", out("c0") _);
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: invalid register `c1`: control registers are reserved by the kernel and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:37:18
|
||||
|
|
||||
LL | asm!("", out("c1") _);
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: invalid register `c2`: control registers are reserved by the kernel and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:39:18
|
||||
|
|
||||
LL | asm!("", out("c2") _);
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: invalid register `c3`: control registers are reserved by the kernel and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:41:18
|
||||
|
|
||||
LL | asm!("", out("c3") _);
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: invalid register `c4`: control registers are reserved by the kernel and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:43:18
|
||||
|
|
||||
LL | asm!("", out("c4") _);
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: invalid register `c5`: control registers are reserved by the kernel and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:45:18
|
||||
|
|
||||
LL | asm!("", out("c5") _);
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: invalid register `c6`: control registers are reserved by the kernel and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:47:18
|
||||
|
|
||||
LL | asm!("", out("c6") _);
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: invalid register `c7`: control registers are reserved by the kernel and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:49:18
|
||||
|
|
||||
LL | asm!("", out("c7") _);
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: invalid register `c8`: control registers are reserved by the kernel and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:51:18
|
||||
|
|
||||
LL | asm!("", out("c8") _);
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: invalid register `c9`: control registers are reserved by the kernel and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:53:18
|
||||
|
|
||||
LL | asm!("", out("c9") _);
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: invalid register `c10`: control registers are reserved by the kernel and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:55:18
|
||||
|
|
||||
LL | asm!("", out("c10") _);
|
||||
| ^^^^^^^^^^^^
|
||||
|
||||
error: invalid register `c11`: control registers are reserved by the kernel and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:57:18
|
||||
|
|
||||
LL | asm!("", out("c11") _);
|
||||
| ^^^^^^^^^^^^
|
||||
|
||||
error: invalid register `c12`: control registers are reserved by the kernel and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:59:18
|
||||
|
|
||||
LL | asm!("", out("c12") _);
|
||||
| ^^^^^^^^^^^^
|
||||
|
||||
error: invalid register `c13`: control registers are reserved by the kernel and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:61:18
|
||||
|
|
||||
LL | asm!("", out("c13") _);
|
||||
| ^^^^^^^^^^^^
|
||||
|
||||
error: invalid register `c14`: control registers are reserved by the kernel and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:63:18
|
||||
|
|
||||
LL | asm!("", out("c14") _);
|
||||
| ^^^^^^^^^^^^
|
||||
|
||||
error: invalid register `c15`: control registers are reserved by the kernel and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:65:18
|
||||
|
|
||||
LL | asm!("", out("c15") _);
|
||||
| ^^^^^^^^^^^^
|
||||
|
||||
error: invalid register `a0`: a0 and a1 are reserved for system use and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:67:18
|
||||
|
|
||||
LL | asm!("", out("a0") _);
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: invalid register `a1`: a0 and a1 are reserved for system use and cannot be used as operands for inline asm
|
||||
--> $DIR/bad-reg.rs:69:18
|
||||
|
|
||||
LL | asm!("", out("a1") _);
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error[E0658]: register class `vreg` can only be used as a clobber in stable
|
||||
--> $DIR/bad-reg.rs:74:18
|
||||
|
|
||||
LL | asm!("", in("v0") v); // requires vector & asm_experimental_reg
|
||||
| ^^^^^^^^^^
|
||||
|
|
||||
= note: see issue #133416 <https://github.com/rust-lang/rust/issues/133416> for more information
|
||||
= help: add `#![feature(asm_experimental_reg)]` to the crate attributes to enable
|
||||
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
|
||||
|
||||
error[E0658]: register class `vreg` can only be used as a clobber in stable
|
||||
--> $DIR/bad-reg.rs:78:18
|
||||
|
|
||||
LL | asm!("", out("v0") v); // requires vector & asm_experimental_reg
|
||||
| ^^^^^^^^^^^
|
||||
|
|
||||
= note: see issue #133416 <https://github.com/rust-lang/rust/issues/133416> for more information
|
||||
= help: add `#![feature(asm_experimental_reg)]` to the crate attributes to enable
|
||||
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
|
||||
|
||||
error[E0658]: register class `vreg` can only be used as a clobber in stable
|
||||
--> $DIR/bad-reg.rs:82:18
|
||||
|
|
||||
LL | asm!("", in("v0") x); // requires vector & asm_experimental_reg
|
||||
| ^^^^^^^^^^
|
||||
|
|
||||
= note: see issue #133416 <https://github.com/rust-lang/rust/issues/133416> for more information
|
||||
= help: add `#![feature(asm_experimental_reg)]` to the crate attributes to enable
|
||||
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
|
||||
|
||||
error[E0658]: register class `vreg` can only be used as a clobber in stable
|
||||
--> $DIR/bad-reg.rs:86:18
|
||||
|
|
||||
LL | asm!("", out("v0") x); // requires vector & asm_experimental_reg
|
||||
| ^^^^^^^^^^^
|
||||
|
|
||||
= note: see issue #133416 <https://github.com/rust-lang/rust/issues/133416> for more information
|
||||
= help: add `#![feature(asm_experimental_reg)]` to the crate attributes to enable
|
||||
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
|
||||
|
||||
error[E0658]: register class `vreg` can only be used as a clobber in stable
|
||||
--> $DIR/bad-reg.rs:90:18
|
||||
|
|
||||
LL | asm!("", in("v0") b);
|
||||
| ^^^^^^^^^^
|
||||
|
|
||||
= note: see issue #133416 <https://github.com/rust-lang/rust/issues/133416> for more information
|
||||
= help: add `#![feature(asm_experimental_reg)]` to the crate attributes to enable
|
||||
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
|
||||
|
||||
error[E0658]: register class `vreg` can only be used as a clobber in stable
|
||||
--> $DIR/bad-reg.rs:95:18
|
||||
|
|
||||
LL | asm!("", out("v0") b);
|
||||
| ^^^^^^^^^^^
|
||||
|
|
||||
= note: see issue #133416 <https://github.com/rust-lang/rust/issues/133416> for more information
|
||||
= help: add `#![feature(asm_experimental_reg)]` to the crate attributes to enable
|
||||
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
|
||||
|
||||
error[E0658]: register class `vreg` can only be used as a clobber in stable
|
||||
--> $DIR/bad-reg.rs:100:26
|
||||
|
|
||||
LL | asm!("/* {} */", in(vreg) v); // requires vector & asm_experimental_reg
|
||||
| ^^^^^^^^^^
|
||||
|
|
||||
= note: see issue #133416 <https://github.com/rust-lang/rust/issues/133416> for more information
|
||||
= help: add `#![feature(asm_experimental_reg)]` to the crate attributes to enable
|
||||
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
|
||||
|
||||
error[E0658]: register class `vreg` can only be used as a clobber in stable
|
||||
--> $DIR/bad-reg.rs:104:26
|
||||
|
|
||||
LL | asm!("/* {} */", in(vreg) x); // requires vector & asm_experimental_reg
|
||||
| ^^^^^^^^^^
|
||||
|
|
||||
= note: see issue #133416 <https://github.com/rust-lang/rust/issues/133416> for more information
|
||||
= help: add `#![feature(asm_experimental_reg)]` to the crate attributes to enable
|
||||
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
|
||||
|
||||
error[E0658]: register class `vreg` can only be used as a clobber in stable
|
||||
--> $DIR/bad-reg.rs:108:26
|
||||
|
|
||||
LL | asm!("/* {} */", in(vreg) b);
|
||||
| ^^^^^^^^^^
|
||||
|
|
||||
= note: see issue #133416 <https://github.com/rust-lang/rust/issues/133416> for more information
|
||||
= help: add `#![feature(asm_experimental_reg)]` to the crate attributes to enable
|
||||
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
|
||||
|
||||
error[E0658]: register class `vreg` can only be used as a clobber in stable
|
||||
--> $DIR/bad-reg.rs:113:26
|
||||
|
|
||||
LL | asm!("/* {} */", out(vreg) _); // requires vector & asm_experimental_reg
|
||||
| ^^^^^^^^^^^
|
||||
|
|
||||
= note: see issue #133416 <https://github.com/rust-lang/rust/issues/133416> for more information
|
||||
= help: add `#![feature(asm_experimental_reg)]` to the crate attributes to enable
|
||||
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
|
||||
|
||||
error: register class `areg` can only be used as a clobber, not as an input or output
|
||||
--> $DIR/bad-reg.rs:120:18
|
||||
|
|
||||
LL | asm!("", in("a2") x);
|
||||
| ^^^^^^^^^^
|
||||
|
||||
error: register class `areg` can only be used as a clobber, not as an input or output
|
||||
--> $DIR/bad-reg.rs:123:18
|
||||
|
|
||||
LL | asm!("", out("a2") x);
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: register class `areg` can only be used as a clobber, not as an input or output
|
||||
--> $DIR/bad-reg.rs:126:26
|
||||
|
|
||||
LL | asm!("/* {} */", in(areg) x);
|
||||
| ^^^^^^^^^^
|
||||
|
||||
error: register class `areg` can only be used as a clobber, not as an input or output
|
||||
--> $DIR/bad-reg.rs:129:26
|
||||
|
|
||||
LL | asm!("/* {} */", out(areg) _);
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: register `f0` conflicts with register `v0`
|
||||
--> $DIR/bad-reg.rs:134:31
|
||||
|
|
||||
LL | asm!("", out("v0") _, out("f0") _);
|
||||
| ----------- ^^^^^^^^^^^ register `f0`
|
||||
| |
|
||||
| register `v0`
|
||||
|
||||
error: register `f1` conflicts with register `v1`
|
||||
--> $DIR/bad-reg.rs:136:31
|
||||
|
|
||||
LL | asm!("", out("v1") _, out("f1") _);
|
||||
| ----------- ^^^^^^^^^^^ register `f1`
|
||||
| |
|
||||
| register `v1`
|
||||
|
||||
error: register `f2` conflicts with register `v2`
|
||||
--> $DIR/bad-reg.rs:138:31
|
||||
|
|
||||
LL | asm!("", out("v2") _, out("f2") _);
|
||||
| ----------- ^^^^^^^^^^^ register `f2`
|
||||
| |
|
||||
| register `v2`
|
||||
|
||||
error: register `f3` conflicts with register `v3`
|
||||
--> $DIR/bad-reg.rs:140:31
|
||||
|
|
||||
LL | asm!("", out("v3") _, out("f3") _);
|
||||
| ----------- ^^^^^^^^^^^ register `f3`
|
||||
| |
|
||||
| register `v3`
|
||||
|
||||
error: register `f4` conflicts with register `v4`
|
||||
--> $DIR/bad-reg.rs:142:31
|
||||
|
|
||||
LL | asm!("", out("v4") _, out("f4") _);
|
||||
| ----------- ^^^^^^^^^^^ register `f4`
|
||||
| |
|
||||
| register `v4`
|
||||
|
||||
error: register `f5` conflicts with register `v5`
|
||||
--> $DIR/bad-reg.rs:144:31
|
||||
|
|
||||
LL | asm!("", out("v5") _, out("f5") _);
|
||||
| ----------- ^^^^^^^^^^^ register `f5`
|
||||
| |
|
||||
| register `v5`
|
||||
|
||||
error: register `f6` conflicts with register `v6`
|
||||
--> $DIR/bad-reg.rs:146:31
|
||||
|
|
||||
LL | asm!("", out("v6") _, out("f6") _);
|
||||
| ----------- ^^^^^^^^^^^ register `f6`
|
||||
| |
|
||||
| register `v6`
|
||||
|
||||
error: register `f7` conflicts with register `v7`
|
||||
--> $DIR/bad-reg.rs:148:31
|
||||
|
|
||||
LL | asm!("", out("v7") _, out("f7") _);
|
||||
| ----------- ^^^^^^^^^^^ register `f7`
|
||||
| |
|
||||
| register `v7`
|
||||
|
||||
error: register `f8` conflicts with register `v8`
|
||||
--> $DIR/bad-reg.rs:150:31
|
||||
|
|
||||
LL | asm!("", out("v8") _, out("f8") _);
|
||||
| ----------- ^^^^^^^^^^^ register `f8`
|
||||
| |
|
||||
| register `v8`
|
||||
|
||||
error: register `f9` conflicts with register `v9`
|
||||
--> $DIR/bad-reg.rs:152:31
|
||||
|
|
||||
LL | asm!("", out("v9") _, out("f9") _);
|
||||
| ----------- ^^^^^^^^^^^ register `f9`
|
||||
| |
|
||||
| register `v9`
|
||||
|
||||
error: register `f10` conflicts with register `v10`
|
||||
--> $DIR/bad-reg.rs:154:32
|
||||
|
|
||||
LL | asm!("", out("v10") _, out("f10") _);
|
||||
| ------------ ^^^^^^^^^^^^ register `f10`
|
||||
| |
|
||||
| register `v10`
|
||||
|
||||
error: register `f11` conflicts with register `v11`
|
||||
--> $DIR/bad-reg.rs:156:32
|
||||
|
|
||||
LL | asm!("", out("v11") _, out("f11") _);
|
||||
| ------------ ^^^^^^^^^^^^ register `f11`
|
||||
| |
|
||||
| register `v11`
|
||||
|
||||
error: register `f12` conflicts with register `v12`
|
||||
--> $DIR/bad-reg.rs:158:32
|
||||
|
|
||||
LL | asm!("", out("v12") _, out("f12") _);
|
||||
| ------------ ^^^^^^^^^^^^ register `f12`
|
||||
| |
|
||||
| register `v12`
|
||||
|
||||
error: register `f13` conflicts with register `v13`
|
||||
--> $DIR/bad-reg.rs:160:32
|
||||
|
|
||||
LL | asm!("", out("v13") _, out("f13") _);
|
||||
| ------------ ^^^^^^^^^^^^ register `f13`
|
||||
| |
|
||||
| register `v13`
|
||||
|
||||
error: register `f14` conflicts with register `v14`
|
||||
--> $DIR/bad-reg.rs:162:32
|
||||
|
|
||||
LL | asm!("", out("v14") _, out("f14") _);
|
||||
| ------------ ^^^^^^^^^^^^ register `f14`
|
||||
| |
|
||||
| register `v14`
|
||||
|
||||
error: register `f15` conflicts with register `v15`
|
||||
--> $DIR/bad-reg.rs:164:32
|
||||
|
|
||||
LL | asm!("", out("v15") _, out("f15") _);
|
||||
| ------------ ^^^^^^^^^^^^ register `f15`
|
||||
| |
|
||||
| register `v15`
|
||||
|
||||
error: invalid register `f16`: unknown register
|
||||
--> $DIR/bad-reg.rs:167:32
|
||||
|
|
||||
LL | asm!("", out("v16") _, out("f16") _);
|
||||
| ^^^^^^^^^^^^
|
||||
|
||||
error[E0658]: type `i64x2` cannot be used with this register class in stable
|
||||
--> $DIR/bad-reg.rs:74:27
|
||||
|
|
||||
LL | asm!("", in("v0") v); // requires vector & asm_experimental_reg
|
||||
| ^
|
||||
|
|
||||
= note: see issue #133416 <https://github.com/rust-lang/rust/issues/133416> for more information
|
||||
= help: add `#![feature(asm_experimental_reg)]` to the crate attributes to enable
|
||||
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
|
||||
|
||||
error[E0658]: type `i64x2` cannot be used with this register class in stable
|
||||
--> $DIR/bad-reg.rs:78:28
|
||||
|
|
||||
LL | asm!("", out("v0") v); // requires vector & asm_experimental_reg
|
||||
| ^
|
||||
|
|
||||
= note: see issue #133416 <https://github.com/rust-lang/rust/issues/133416> for more information
|
||||
= help: add `#![feature(asm_experimental_reg)]` to the crate attributes to enable
|
||||
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
|
||||
|
||||
error[E0658]: type `i32` cannot be used with this register class in stable
|
||||
--> $DIR/bad-reg.rs:82:27
|
||||
|
|
||||
LL | asm!("", in("v0") x); // requires vector & asm_experimental_reg
|
||||
| ^
|
||||
|
|
||||
= note: see issue #133416 <https://github.com/rust-lang/rust/issues/133416> for more information
|
||||
= help: add `#![feature(asm_experimental_reg)]` to the crate attributes to enable
|
||||
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
|
||||
|
||||
error[E0658]: type `i32` cannot be used with this register class in stable
|
||||
--> $DIR/bad-reg.rs:86:28
|
||||
|
|
||||
LL | asm!("", out("v0") x); // requires vector & asm_experimental_reg
|
||||
| ^
|
||||
|
|
||||
= note: see issue #133416 <https://github.com/rust-lang/rust/issues/133416> for more information
|
||||
= help: add `#![feature(asm_experimental_reg)]` to the crate attributes to enable
|
||||
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
|
||||
|
||||
error: type `u8` cannot be used with this register class
|
||||
--> $DIR/bad-reg.rs:90:27
|
||||
|
|
||||
LL | asm!("", in("v0") b);
|
||||
| ^
|
||||
|
|
||||
= note: register class `vreg` supports these types:
|
||||
|
||||
error: type `u8` cannot be used with this register class
|
||||
--> $DIR/bad-reg.rs:95:28
|
||||
|
|
||||
LL | asm!("", out("v0") b);
|
||||
| ^
|
||||
|
|
||||
= note: register class `vreg` supports these types:
|
||||
|
||||
error[E0658]: type `i64x2` cannot be used with this register class in stable
|
||||
--> $DIR/bad-reg.rs:100:35
|
||||
|
|
||||
LL | asm!("/* {} */", in(vreg) v); // requires vector & asm_experimental_reg
|
||||
| ^
|
||||
|
|
||||
= note: see issue #133416 <https://github.com/rust-lang/rust/issues/133416> for more information
|
||||
= help: add `#![feature(asm_experimental_reg)]` to the crate attributes to enable
|
||||
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
|
||||
|
||||
error[E0658]: type `i32` cannot be used with this register class in stable
|
||||
--> $DIR/bad-reg.rs:104:35
|
||||
|
|
||||
LL | asm!("/* {} */", in(vreg) x); // requires vector & asm_experimental_reg
|
||||
| ^
|
||||
|
|
||||
= note: see issue #133416 <https://github.com/rust-lang/rust/issues/133416> for more information
|
||||
= help: add `#![feature(asm_experimental_reg)]` to the crate attributes to enable
|
||||
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
|
||||
|
||||
error: type `u8` cannot be used with this register class
|
||||
--> $DIR/bad-reg.rs:108:35
|
||||
|
|
||||
LL | asm!("/* {} */", in(vreg) b);
|
||||
| ^
|
||||
|
|
||||
= note: register class `vreg` supports these types:
|
||||
|
||||
error: type `i32` cannot be used with this register class
|
||||
--> $DIR/bad-reg.rs:120:27
|
||||
|
|
||||
LL | asm!("", in("a2") x);
|
||||
| ^
|
||||
|
|
||||
= note: register class `areg` supports these types:
|
||||
|
||||
error: type `i32` cannot be used with this register class
|
||||
--> $DIR/bad-reg.rs:123:28
|
||||
|
|
||||
LL | asm!("", out("a2") x);
|
||||
| ^
|
||||
|
|
||||
= note: register class `areg` supports these types:
|
||||
|
||||
error: type `i32` cannot be used with this register class
|
||||
--> $DIR/bad-reg.rs:126:35
|
||||
|
|
||||
LL | asm!("/* {} */", in(areg) x);
|
||||
| ^
|
||||
|
|
||||
= note: register class `areg` supports these types:
|
||||
|
||||
error: aborting due to 63 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0658`.
|
Loading…
Add table
Add a link
Reference in a new issue