[gccrs COMMIT 2/2] intrinsic: Add separated tests for each type
gerris.rs@gmail.com
gerris.rs@gmail.com
Tue Mar 24 23:14:18 GMT 2026
From: Mohamed Ali <mohmedali1462005@gmail.com>
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 <mohmedali1462005@gmail.com>
---
This change was merged into the gccrs repository and is posted here for
upstream visibility and potential drive-by review, as requested by GCC
release managers.
Each commit email contains a link to its details on github from where you can
find the Pull-Request and associated discussions.
Commit on github: https://github.com/Rust-GCC/gccrs/commit/2889c50e2031a865b5704ef60f3463d0f8b05c31
The commit has been mentioned in the following pull-request(s):
- https://github.com/Rust-GCC/gccrs/pull/4467
.../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 000000000..90db2e531
--- /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 000000000..d49668751
--- /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 000000000..feb4694d0
--- /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 000000000..204999f60
--- /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 000000000..e8593ab22
--- /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 000000000..2c5afd3c1
--- /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 000000000..b34f4ca16
--- /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 000000000..0f6c7f0c9
--- /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 000000000..da0521c1c
--- /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 000000000..b1224067b
--- /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 000000000..9297c9d50
--- /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 000000000..d7baa555a
--- /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 000000000..ded1b7458
--- /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 000000000..cb0b20cb3
--- /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 000000000..bcf478e73
--- /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 000000000..8907a86cb
--- /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.53.0
More information about the Gcc-rust
mailing list