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

Reply via email to