Skip to content

Commit a80240c

Browse files
committed
intrinsic: Add separated tests for each type
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>
1 parent 349fba1 commit a80240c

16 files changed

+425
-0
lines changed
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
#![feature(no_core)]
2+
#![no_core]
3+
#![feature(intrinsics)]
4+
#![feature(lang_items)]
5+
6+
#[lang = "sized"]
7+
pub trait Sized {}
8+
9+
extern "rust-intrinsic" {
10+
pub fn ctlz<T>(x: T) -> u32;
11+
pub fn abort() -> !;
12+
}
13+
14+
fn main() -> i32 {
15+
if ctlz(0i16) != 16 {
16+
abort();
17+
}
18+
// 1i16 = 0x0001: 15 leading zeros
19+
if ctlz(1i16) != 15 {
20+
abort();
21+
}
22+
// -1i16 = 0xFFFF: 0 leading zeros
23+
if ctlz(-1i16) != 0 {
24+
abort();
25+
}
26+
27+
0
28+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
#![feature(no_core)]
2+
#![no_core]
3+
#![feature(intrinsics)]
4+
#![feature(lang_items)]
5+
6+
#[lang = "sized"]
7+
pub trait Sized {}
8+
9+
extern "rust-intrinsic" {
10+
pub fn ctlz<T>(x: T) -> u32;
11+
pub fn abort() -> !;
12+
}
13+
14+
fn main() -> i32 {
15+
if ctlz(0i32) != 32 {
16+
abort();
17+
}
18+
// 1i32 = 0x00000001: 31 leading zeros
19+
if ctlz(1i32) != 31 {
20+
abort();
21+
}
22+
// -1i32 = 0xFFFFFFFF: 0 leading zeros
23+
if ctlz(-1i32) != 0 {
24+
abort();
25+
}
26+
27+
0
28+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
#![feature(no_core)]
2+
#![no_core]
3+
#![feature(intrinsics)]
4+
#![feature(lang_items)]
5+
6+
#[lang = "sized"]
7+
pub trait Sized {}
8+
9+
extern "rust-intrinsic" {
10+
pub fn ctlz<T>(x: T) -> u32;
11+
pub fn abort() -> !;
12+
}
13+
14+
fn main() -> i32 {
15+
if ctlz(0i64) != 64 {
16+
abort();
17+
}
18+
// 1i64 = 0x0000000000000001: 63 leading zeros
19+
if ctlz(1i64) != 63 {
20+
abort();
21+
}
22+
// -1i64 = 0xFFFFFFFFFFFFFFFF: 0 leading zeros
23+
if ctlz(-1i64) != 0 {
24+
abort();
25+
}
26+
27+
0
28+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#![feature(no_core)]
2+
#![no_core]
3+
#![feature(intrinsics)]
4+
#![feature(lang_items)]
5+
6+
#[lang = "sized"]
7+
pub trait Sized {}
8+
9+
extern "rust-intrinsic" {
10+
pub fn ctlz<T>(x: T) -> u32;
11+
pub fn abort() -> !;
12+
}
13+
14+
fn main() -> i32 {
15+
// 0i8 has all 8 bits zero
16+
if ctlz(0i8) != 8 {
17+
abort();
18+
}
19+
// 1i8 = 0x01: 7 leading zeros
20+
if ctlz(1i8) != 7 {
21+
abort();
22+
}
23+
// -1i8 = 0xFF in two's complement: all bits set, 0 leading zeros
24+
if ctlz(-1i8) != 0 {
25+
abort();
26+
}
27+
28+
0
29+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#![feature(no_core)]
2+
#![no_core]
3+
#![feature(intrinsics)]
4+
#![feature(lang_items)]
5+
6+
#[lang = "sized"]
7+
pub trait Sized {}
8+
9+
extern "rust-intrinsic" {
10+
pub fn ctlz_nonzero<T>(x: T) -> u32;
11+
pub fn abort() -> !;
12+
}
13+
14+
fn main() -> i32 {
15+
unsafe {
16+
// 1i16 = 0x0001: 15 leading zeros
17+
if ctlz_nonzero(1i16) != 15 {
18+
abort();
19+
}
20+
// -1i16 = 0xFFFF: 0 leading zeros
21+
if ctlz_nonzero(-1i16) != 0 {
22+
abort();
23+
}
24+
}
25+
26+
0
27+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#![feature(no_core)]
2+
#![no_core]
3+
#![feature(intrinsics)]
4+
#![feature(lang_items)]
5+
6+
#[lang = "sized"]
7+
pub trait Sized {}
8+
9+
extern "rust-intrinsic" {
10+
pub fn ctlz_nonzero<T>(x: T) -> u32;
11+
pub fn abort() -> !;
12+
}
13+
14+
fn main() -> i32 {
15+
unsafe {
16+
// 1i32 = 0x00000001: 31 leading zeros
17+
if ctlz_nonzero(1i32) != 31 {
18+
abort();
19+
}
20+
// -1i32 = 0xFFFFFFFF: 0 leading zeros
21+
if ctlz_nonzero(-1i32) != 0 {
22+
abort();
23+
}
24+
}
25+
26+
0
27+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#![feature(no_core)]
2+
#![no_core]
3+
#![feature(intrinsics)]
4+
#![feature(lang_items)]
5+
6+
#[lang = "sized"]
7+
pub trait Sized {}
8+
9+
extern "rust-intrinsic" {
10+
pub fn ctlz_nonzero<T>(x: T) -> u32;
11+
pub fn abort() -> !;
12+
}
13+
14+
fn main() -> i32 {
15+
unsafe {
16+
// 1i64 = 0x0000000000000001: 63 leading zeros
17+
if ctlz_nonzero(1i64) != 63 {
18+
abort();
19+
}
20+
// -1i64 = 0xFFFFFFFFFFFFFFFF: 0 leading zeros
21+
if ctlz_nonzero(-1i64) != 0 {
22+
abort();
23+
}
24+
}
25+
26+
0
27+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#![feature(no_core)]
2+
#![no_core]
3+
#![feature(intrinsics)]
4+
#![feature(lang_items)]
5+
6+
#[lang = "sized"]
7+
pub trait Sized {}
8+
9+
extern "rust-intrinsic" {
10+
pub fn ctlz_nonzero<T>(x: T) -> u32;
11+
pub fn abort() -> !;
12+
}
13+
14+
fn main() -> i32 {
15+
unsafe {
16+
// 1i8 = 0x01: 7 leading zeros
17+
if ctlz_nonzero(1i8) != 7 {
18+
abort();
19+
}
20+
// -1i8 = 0xFF: 0 leading zeros
21+
if ctlz_nonzero(-1i8) != 0 {
22+
abort();
23+
}
24+
}
25+
26+
0
27+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
#![feature(no_core)]
2+
#![no_core]
3+
#![feature(intrinsics)]
4+
#![feature(lang_items)]
5+
6+
#[lang = "sized"]
7+
pub trait Sized {}
8+
9+
extern "rust-intrinsic" {
10+
pub fn ctlz_nonzero<T>(x: T) -> u32;
11+
pub fn abort() -> !;
12+
}
13+
14+
fn main() -> i32 {
15+
unsafe {
16+
if ctlz_nonzero(1u16) != 15 {
17+
abort();
18+
}
19+
if ctlz_nonzero(0xFFFFu16) != 0 {
20+
abort();
21+
}
22+
}
23+
24+
0
25+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
#![feature(no_core)]
2+
#![no_core]
3+
#![feature(intrinsics)]
4+
#![feature(lang_items)]
5+
6+
#[lang = "sized"]
7+
pub trait Sized {}
8+
9+
extern "rust-intrinsic" {
10+
pub fn ctlz_nonzero<T>(x: T) -> u32;
11+
pub fn abort() -> !;
12+
}
13+
14+
fn main() -> i32 {
15+
unsafe {
16+
if ctlz_nonzero(1u32) != 31 {
17+
abort();
18+
}
19+
if ctlz_nonzero(0xFFFFFFFFu32) != 0 {
20+
abort();
21+
}
22+
}
23+
24+
0
25+
}

0 commit comments

Comments
 (0)