From: Mohamed Ali <[email protected]>
gcc/testsuite/ChangeLog:
* rust/execute/torture/ctlz_i16.rs: New test.
* rust/execute/torture/ctlz_i32.rs: New test.
* rust/execute/torture/ctlz_i64.rs: New test.
* rust/execute/torture/ctlz_i8.rs: New test.
* rust/execute/torture/ctlz_nonzero_i16.rs: New test.
* rust/execute/torture/ctlz_nonzero_i32.rs: New test.
* rust/execute/torture/ctlz_nonzero_i64.rs: New test.
* rust/execute/torture/ctlz_nonzero_i8.rs: New test.
* rust/execute/torture/ctlz_nonzero_u16.rs: New test.
* rust/execute/torture/ctlz_nonzero_u32.rs: New test.
* rust/execute/torture/ctlz_nonzero_u64.rs: New test.
* rust/execute/torture/ctlz_nonzero_u8.rs: New test.
* rust/execute/torture/ctlz_u16.rs: New test.
* rust/execute/torture/ctlz_u32.rs: New test.
* rust/execute/torture/ctlz_u64.rs: New test.
* rust/execute/torture/ctlz_u8.rs: New test.
Signed-off-by: Mohamed Ali <[email protected]>
---
.../rust/execute/torture/ctlz_i16.rs | 28 ++++++++++++++++++
.../rust/execute/torture/ctlz_i32.rs | 28 ++++++++++++++++++
.../rust/execute/torture/ctlz_i64.rs | 28 ++++++++++++++++++
gcc/testsuite/rust/execute/torture/ctlz_i8.rs | 29 +++++++++++++++++++
.../rust/execute/torture/ctlz_nonzero_i16.rs | 27 +++++++++++++++++
.../rust/execute/torture/ctlz_nonzero_i32.rs | 27 +++++++++++++++++
.../rust/execute/torture/ctlz_nonzero_i64.rs | 27 +++++++++++++++++
.../rust/execute/torture/ctlz_nonzero_i8.rs | 27 +++++++++++++++++
.../rust/execute/torture/ctlz_nonzero_u16.rs | 25 ++++++++++++++++
.../rust/execute/torture/ctlz_nonzero_u32.rs | 25 ++++++++++++++++
.../rust/execute/torture/ctlz_nonzero_u64.rs | 25 ++++++++++++++++
.../rust/execute/torture/ctlz_nonzero_u8.rs | 25 ++++++++++++++++
.../rust/execute/torture/ctlz_u16.rs | 26 +++++++++++++++++
.../rust/execute/torture/ctlz_u32.rs | 26 +++++++++++++++++
.../rust/execute/torture/ctlz_u64.rs | 26 +++++++++++++++++
gcc/testsuite/rust/execute/torture/ctlz_u8.rs | 26 +++++++++++++++++
16 files changed, 425 insertions(+)
create mode 100644 gcc/testsuite/rust/execute/torture/ctlz_i16.rs
create mode 100644 gcc/testsuite/rust/execute/torture/ctlz_i32.rs
create mode 100644 gcc/testsuite/rust/execute/torture/ctlz_i64.rs
create mode 100644 gcc/testsuite/rust/execute/torture/ctlz_i8.rs
create mode 100644 gcc/testsuite/rust/execute/torture/ctlz_nonzero_i16.rs
create mode 100644 gcc/testsuite/rust/execute/torture/ctlz_nonzero_i32.rs
create mode 100644 gcc/testsuite/rust/execute/torture/ctlz_nonzero_i64.rs
create mode 100644 gcc/testsuite/rust/execute/torture/ctlz_nonzero_i8.rs
create mode 100644 gcc/testsuite/rust/execute/torture/ctlz_nonzero_u16.rs
create mode 100644 gcc/testsuite/rust/execute/torture/ctlz_nonzero_u32.rs
create mode 100644 gcc/testsuite/rust/execute/torture/ctlz_nonzero_u64.rs
create mode 100644 gcc/testsuite/rust/execute/torture/ctlz_nonzero_u8.rs
create mode 100644 gcc/testsuite/rust/execute/torture/ctlz_u16.rs
create mode 100644 gcc/testsuite/rust/execute/torture/ctlz_u32.rs
create mode 100644 gcc/testsuite/rust/execute/torture/ctlz_u64.rs
create mode 100644 gcc/testsuite/rust/execute/torture/ctlz_u8.rs
diff --git a/gcc/testsuite/rust/execute/torture/ctlz_i16.rs
b/gcc/testsuite/rust/execute/torture/ctlz_i16.rs
new file mode 100644
index 00000000000..90db2e531eb
--- /dev/null
+++ b/gcc/testsuite/rust/execute/torture/ctlz_i16.rs
@@ -0,0 +1,28 @@
+#![feature(no_core)]
+#![no_core]
+#![feature(intrinsics)]
+#![feature(lang_items)]
+
+#[lang = "sized"]
+pub trait Sized {}
+
+extern "rust-intrinsic" {
+ pub fn ctlz<T>(x: T) -> u32;
+ pub fn abort() -> !;
+}
+
+fn main() -> i32 {
+ if ctlz(0i16) != 16 {
+ abort();
+ }
+ // 1i16 = 0x0001: 15 leading zeros
+ if ctlz(1i16) != 15 {
+ abort();
+ }
+ // -1i16 = 0xFFFF: 0 leading zeros
+ if ctlz(-1i16) != 0 {
+ abort();
+ }
+
+ 0
+}
diff --git a/gcc/testsuite/rust/execute/torture/ctlz_i32.rs
b/gcc/testsuite/rust/execute/torture/ctlz_i32.rs
new file mode 100644
index 00000000000..d49668751aa
--- /dev/null
+++ b/gcc/testsuite/rust/execute/torture/ctlz_i32.rs
@@ -0,0 +1,28 @@
+#![feature(no_core)]
+#![no_core]
+#![feature(intrinsics)]
+#![feature(lang_items)]
+
+#[lang = "sized"]
+pub trait Sized {}
+
+extern "rust-intrinsic" {
+ pub fn ctlz<T>(x: T) -> u32;
+ pub fn abort() -> !;
+}
+
+fn main() -> i32 {
+ if ctlz(0i32) != 32 {
+ abort();
+ }
+ // 1i32 = 0x00000001: 31 leading zeros
+ if ctlz(1i32) != 31 {
+ abort();
+ }
+ // -1i32 = 0xFFFFFFFF: 0 leading zeros
+ if ctlz(-1i32) != 0 {
+ abort();
+ }
+
+ 0
+}
diff --git a/gcc/testsuite/rust/execute/torture/ctlz_i64.rs
b/gcc/testsuite/rust/execute/torture/ctlz_i64.rs
new file mode 100644
index 00000000000..feb4694d080
--- /dev/null
+++ b/gcc/testsuite/rust/execute/torture/ctlz_i64.rs
@@ -0,0 +1,28 @@
+#![feature(no_core)]
+#![no_core]
+#![feature(intrinsics)]
+#![feature(lang_items)]
+
+#[lang = "sized"]
+pub trait Sized {}
+
+extern "rust-intrinsic" {
+ pub fn ctlz<T>(x: T) -> u32;
+ pub fn abort() -> !;
+}
+
+fn main() -> i32 {
+ if ctlz(0i64) != 64 {
+ abort();
+ }
+ // 1i64 = 0x0000000000000001: 63 leading zeros
+ if ctlz(1i64) != 63 {
+ abort();
+ }
+ // -1i64 = 0xFFFFFFFFFFFFFFFF: 0 leading zeros
+ if ctlz(-1i64) != 0 {
+ abort();
+ }
+
+ 0
+}
diff --git a/gcc/testsuite/rust/execute/torture/ctlz_i8.rs
b/gcc/testsuite/rust/execute/torture/ctlz_i8.rs
new file mode 100644
index 00000000000..204999f6078
--- /dev/null
+++ b/gcc/testsuite/rust/execute/torture/ctlz_i8.rs
@@ -0,0 +1,29 @@
+#![feature(no_core)]
+#![no_core]
+#![feature(intrinsics)]
+#![feature(lang_items)]
+
+#[lang = "sized"]
+pub trait Sized {}
+
+extern "rust-intrinsic" {
+ pub fn ctlz<T>(x: T) -> u32;
+ pub fn abort() -> !;
+}
+
+fn main() -> i32 {
+ // 0i8 has all 8 bits zero
+ if ctlz(0i8) != 8 {
+ abort();
+ }
+ // 1i8 = 0x01: 7 leading zeros
+ if ctlz(1i8) != 7 {
+ abort();
+ }
+ // -1i8 = 0xFF in two's complement: all bits set, 0 leading zeros
+ if ctlz(-1i8) != 0 {
+ abort();
+ }
+
+ 0
+}
diff --git a/gcc/testsuite/rust/execute/torture/ctlz_nonzero_i16.rs
b/gcc/testsuite/rust/execute/torture/ctlz_nonzero_i16.rs
new file mode 100644
index 00000000000..e8593ab22f5
--- /dev/null
+++ b/gcc/testsuite/rust/execute/torture/ctlz_nonzero_i16.rs
@@ -0,0 +1,27 @@
+#![feature(no_core)]
+#![no_core]
+#![feature(intrinsics)]
+#![feature(lang_items)]
+
+#[lang = "sized"]
+pub trait Sized {}
+
+extern "rust-intrinsic" {
+ pub fn ctlz_nonzero<T>(x: T) -> u32;
+ pub fn abort() -> !;
+}
+
+fn main() -> i32 {
+ unsafe {
+ // 1i16 = 0x0001: 15 leading zeros
+ if ctlz_nonzero(1i16) != 15 {
+ abort();
+ }
+ // -1i16 = 0xFFFF: 0 leading zeros
+ if ctlz_nonzero(-1i16) != 0 {
+ abort();
+ }
+ }
+
+ 0
+}
diff --git a/gcc/testsuite/rust/execute/torture/ctlz_nonzero_i32.rs
b/gcc/testsuite/rust/execute/torture/ctlz_nonzero_i32.rs
new file mode 100644
index 00000000000..2c5afd3c1b7
--- /dev/null
+++ b/gcc/testsuite/rust/execute/torture/ctlz_nonzero_i32.rs
@@ -0,0 +1,27 @@
+#![feature(no_core)]
+#![no_core]
+#![feature(intrinsics)]
+#![feature(lang_items)]
+
+#[lang = "sized"]
+pub trait Sized {}
+
+extern "rust-intrinsic" {
+ pub fn ctlz_nonzero<T>(x: T) -> u32;
+ pub fn abort() -> !;
+}
+
+fn main() -> i32 {
+ unsafe {
+ // 1i32 = 0x00000001: 31 leading zeros
+ if ctlz_nonzero(1i32) != 31 {
+ abort();
+ }
+ // -1i32 = 0xFFFFFFFF: 0 leading zeros
+ if ctlz_nonzero(-1i32) != 0 {
+ abort();
+ }
+ }
+
+ 0
+}
diff --git a/gcc/testsuite/rust/execute/torture/ctlz_nonzero_i64.rs
b/gcc/testsuite/rust/execute/torture/ctlz_nonzero_i64.rs
new file mode 100644
index 00000000000..b34f4ca1662
--- /dev/null
+++ b/gcc/testsuite/rust/execute/torture/ctlz_nonzero_i64.rs
@@ -0,0 +1,27 @@
+#![feature(no_core)]
+#![no_core]
+#![feature(intrinsics)]
+#![feature(lang_items)]
+
+#[lang = "sized"]
+pub trait Sized {}
+
+extern "rust-intrinsic" {
+ pub fn ctlz_nonzero<T>(x: T) -> u32;
+ pub fn abort() -> !;
+}
+
+fn main() -> i32 {
+ unsafe {
+ // 1i64 = 0x0000000000000001: 63 leading zeros
+ if ctlz_nonzero(1i64) != 63 {
+ abort();
+ }
+ // -1i64 = 0xFFFFFFFFFFFFFFFF: 0 leading zeros
+ if ctlz_nonzero(-1i64) != 0 {
+ abort();
+ }
+ }
+
+ 0
+}
diff --git a/gcc/testsuite/rust/execute/torture/ctlz_nonzero_i8.rs
b/gcc/testsuite/rust/execute/torture/ctlz_nonzero_i8.rs
new file mode 100644
index 00000000000..0f6c7f0c918
--- /dev/null
+++ b/gcc/testsuite/rust/execute/torture/ctlz_nonzero_i8.rs
@@ -0,0 +1,27 @@
+#![feature(no_core)]
+#![no_core]
+#![feature(intrinsics)]
+#![feature(lang_items)]
+
+#[lang = "sized"]
+pub trait Sized {}
+
+extern "rust-intrinsic" {
+ pub fn ctlz_nonzero<T>(x: T) -> u32;
+ pub fn abort() -> !;
+}
+
+fn main() -> i32 {
+ unsafe {
+ // 1i8 = 0x01: 7 leading zeros
+ if ctlz_nonzero(1i8) != 7 {
+ abort();
+ }
+ // -1i8 = 0xFF: 0 leading zeros
+ if ctlz_nonzero(-1i8) != 0 {
+ abort();
+ }
+ }
+
+ 0
+}
diff --git a/gcc/testsuite/rust/execute/torture/ctlz_nonzero_u16.rs
b/gcc/testsuite/rust/execute/torture/ctlz_nonzero_u16.rs
new file mode 100644
index 00000000000..da0521c1cf6
--- /dev/null
+++ b/gcc/testsuite/rust/execute/torture/ctlz_nonzero_u16.rs
@@ -0,0 +1,25 @@
+#![feature(no_core)]
+#![no_core]
+#![feature(intrinsics)]
+#![feature(lang_items)]
+
+#[lang = "sized"]
+pub trait Sized {}
+
+extern "rust-intrinsic" {
+ pub fn ctlz_nonzero<T>(x: T) -> u32;
+ pub fn abort() -> !;
+}
+
+fn main() -> i32 {
+ unsafe {
+ if ctlz_nonzero(1u16) != 15 {
+ abort();
+ }
+ if ctlz_nonzero(0xFFFFu16) != 0 {
+ abort();
+ }
+ }
+
+ 0
+}
diff --git a/gcc/testsuite/rust/execute/torture/ctlz_nonzero_u32.rs
b/gcc/testsuite/rust/execute/torture/ctlz_nonzero_u32.rs
new file mode 100644
index 00000000000..b1224067b6e
--- /dev/null
+++ b/gcc/testsuite/rust/execute/torture/ctlz_nonzero_u32.rs
@@ -0,0 +1,25 @@
+#![feature(no_core)]
+#![no_core]
+#![feature(intrinsics)]
+#![feature(lang_items)]
+
+#[lang = "sized"]
+pub trait Sized {}
+
+extern "rust-intrinsic" {
+ pub fn ctlz_nonzero<T>(x: T) -> u32;
+ pub fn abort() -> !;
+}
+
+fn main() -> i32 {
+ unsafe {
+ if ctlz_nonzero(1u32) != 31 {
+ abort();
+ }
+ if ctlz_nonzero(0xFFFFFFFFu32) != 0 {
+ abort();
+ }
+ }
+
+ 0
+}
diff --git a/gcc/testsuite/rust/execute/torture/ctlz_nonzero_u64.rs
b/gcc/testsuite/rust/execute/torture/ctlz_nonzero_u64.rs
new file mode 100644
index 00000000000..9297c9d508f
--- /dev/null
+++ b/gcc/testsuite/rust/execute/torture/ctlz_nonzero_u64.rs
@@ -0,0 +1,25 @@
+#![feature(no_core)]
+#![no_core]
+#![feature(intrinsics)]
+#![feature(lang_items)]
+
+#[lang = "sized"]
+pub trait Sized {}
+
+extern "rust-intrinsic" {
+ pub fn ctlz_nonzero<T>(x: T) -> u32;
+ pub fn abort() -> !;
+}
+
+fn main() -> i32 {
+ unsafe {
+ if ctlz_nonzero(1u64) != 63 {
+ abort();
+ }
+ if ctlz_nonzero(!0u64) != 0 {
+ abort();
+ }
+ }
+
+ 0
+}
diff --git a/gcc/testsuite/rust/execute/torture/ctlz_nonzero_u8.rs
b/gcc/testsuite/rust/execute/torture/ctlz_nonzero_u8.rs
new file mode 100644
index 00000000000..d7baa555a56
--- /dev/null
+++ b/gcc/testsuite/rust/execute/torture/ctlz_nonzero_u8.rs
@@ -0,0 +1,25 @@
+#![feature(no_core)]
+#![no_core]
+#![feature(intrinsics)]
+#![feature(lang_items)]
+
+#[lang = "sized"]
+pub trait Sized {}
+
+extern "rust-intrinsic" {
+ pub fn ctlz_nonzero<T>(x: T) -> u32;
+ pub fn abort() -> !;
+}
+
+fn main() -> i32 {
+ unsafe {
+ if ctlz_nonzero(1u8) != 7 {
+ abort();
+ }
+ if ctlz_nonzero(255u8) != 0 {
+ abort();
+ }
+ }
+
+ 0
+}
diff --git a/gcc/testsuite/rust/execute/torture/ctlz_u16.rs
b/gcc/testsuite/rust/execute/torture/ctlz_u16.rs
new file mode 100644
index 00000000000..ded1b7458ef
--- /dev/null
+++ b/gcc/testsuite/rust/execute/torture/ctlz_u16.rs
@@ -0,0 +1,26 @@
+#![feature(no_core)]
+#![no_core]
+#![feature(intrinsics)]
+#![feature(lang_items)]
+
+#[lang = "sized"]
+pub trait Sized {}
+
+extern "rust-intrinsic" {
+ pub fn ctlz<T>(x: T) -> u32;
+ pub fn abort() -> !;
+}
+
+fn main() -> i32 {
+ if ctlz(0u16) != 16 {
+ abort();
+ }
+ if ctlz(1u16) != 15 {
+ abort();
+ }
+ if ctlz(0xFFFFu16) != 0 {
+ abort();
+ }
+
+ 0
+}
diff --git a/gcc/testsuite/rust/execute/torture/ctlz_u32.rs
b/gcc/testsuite/rust/execute/torture/ctlz_u32.rs
new file mode 100644
index 00000000000..cb0b20cb386
--- /dev/null
+++ b/gcc/testsuite/rust/execute/torture/ctlz_u32.rs
@@ -0,0 +1,26 @@
+#![feature(no_core)]
+#![no_core]
+#![feature(intrinsics)]
+#![feature(lang_items)]
+
+#[lang = "sized"]
+pub trait Sized {}
+
+extern "rust-intrinsic" {
+ pub fn ctlz<T>(x: T) -> u32;
+ pub fn abort() -> !;
+}
+
+fn main() -> i32 {
+ if ctlz(0u32) != 32 {
+ abort();
+ }
+ if ctlz(1u32) != 31 {
+ abort();
+ }
+ if ctlz(0xFFFFFFFFu32) != 0 {
+ abort();
+ }
+
+ 0
+}
diff --git a/gcc/testsuite/rust/execute/torture/ctlz_u64.rs
b/gcc/testsuite/rust/execute/torture/ctlz_u64.rs
new file mode 100644
index 00000000000..bcf478e735c
--- /dev/null
+++ b/gcc/testsuite/rust/execute/torture/ctlz_u64.rs
@@ -0,0 +1,26 @@
+#![feature(no_core)]
+#![no_core]
+#![feature(intrinsics)]
+#![feature(lang_items)]
+
+#[lang = "sized"]
+pub trait Sized {}
+
+extern "rust-intrinsic" {
+ pub fn ctlz<T>(x: T) -> u32;
+ pub fn abort() -> !;
+}
+
+fn main() -> i32 {
+ if ctlz(0u64) != 64 {
+ abort();
+ }
+ if ctlz(1u64) != 63 {
+ abort();
+ }
+ if ctlz(!0u64) != 0 {
+ abort();
+ }
+
+ 0
+}
diff --git a/gcc/testsuite/rust/execute/torture/ctlz_u8.rs
b/gcc/testsuite/rust/execute/torture/ctlz_u8.rs
new file mode 100644
index 00000000000..8907a86cb39
--- /dev/null
+++ b/gcc/testsuite/rust/execute/torture/ctlz_u8.rs
@@ -0,0 +1,26 @@
+#![feature(no_core)]
+#![no_core]
+#![feature(intrinsics)]
+#![feature(lang_items)]
+
+#[lang = "sized"]
+pub trait Sized {}
+
+extern "rust-intrinsic" {
+ pub fn ctlz<T>(x: T) -> u32;
+ pub fn abort() -> !;
+}
+
+fn main() -> i32 {
+ if ctlz(0u8) != 8 {
+ abort();
+ }
+ if ctlz(1u8) != 7 {
+ abort();
+ }
+ if ctlz(255u8) != 0 {
+ abort();
+ }
+
+ 0
+}
--
2.50.1