From patchwork Sat Apr 4 02:26:37 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: gerris.rs@gmail.com X-Patchwork-Id: 132679 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id 9A2C54BA23DC for ; Sat, 4 Apr 2026 02:28:48 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 9A2C54BA23DC Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=bsJMTdkU X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mail-qk1-f171.google.com (mail-qk1-f171.google.com [209.85.222.171]) by sourceware.org (Postfix) with ESMTPS id AFBEF4BA2E24 for ; Sat, 4 Apr 2026 02:26:43 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org AFBEF4BA2E24 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org AFBEF4BA2E24 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=209.85.222.171 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1775269603; cv=none; b=Xse0pOdWNz0oWnhDvSjtdqqhAJ+7pqHiFb0vN9QxZ45xripLAbZhg0p5VyiR8gwJS3btOzSukbxOgpcF3MbQ4rVOPHru3Uo0qqAjqHhbhc9Kxa93RCe4CfHB2IG9nsvS4bBPWIh97bubVjAb2PbF8h4NIFb0g2gVpV1x2lKj6bk= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1775269603; c=relaxed/simple; bh=qsDEnYqQFUeULkbT/oezvVvt59EHKm31Gt7Mcolpn54=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=hICx7u+SO3qJVjUtdvomnhUgxVx3Z2hd3L/o3zBj6fMeyA4SsdXSbcZ3ZN1tubS487LUBAumcA+P1X8A5S+u7PKJUgms9tcCOeV3zuszJA6hr8fXxj5PN20QhCGGvxq4JGCWR2fjfhL6WwVwqn8I1vzp3BWlWCounRqUNKeSzOQ= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org AFBEF4BA2E24 Received: by mail-qk1-f171.google.com with SMTP id af79cd13be357-8cfc497a604so276978385a.3 for ; Fri, 03 Apr 2026 19:26:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1775269603; x=1775874403; darn=gcc.gnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=uRFeYLA58vp/OvrwX8sS1FeWC3TT8+zdsTGqRfhHGmc=; b=bsJMTdkUWo1juOZroWdn73mdNUKlmLmFfM7G3MWuAMmJLdkm5oBqL0qPFrFno5idYr 9sRUux9VtaO7j8DUcNAMnEfco4AWz+HscCWFXjW0BVVYuIX8WUtPWoQPto7Q6qBKY0Tm yO4xw2LgFCcQ8npF8ljET3N7vDGG65QRVnKqhiBXjnFMViIyY7yzPCuD9TYilwsyfVCd Kk+aiFykdEeOLnDev/uI72M4u6Cmzssp6XxdduwQt42OvJ85Nb+9uJgn6cy1etDgJ31f FUzD1IZ94fbmVBI1hM9pOepzQEXZtcMN8lcrOkqI6gTrFvYPR4x9oM1FDcKohHho4q6D ij2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775269603; x=1775874403; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=uRFeYLA58vp/OvrwX8sS1FeWC3TT8+zdsTGqRfhHGmc=; b=Pw18aDnw5Ua8ZH665NwH+NhJfii4aFwr86NOPkxC6XTFSGZPsI45AnBU1MM/qyAGm4 MePsBVGAKsK75zMtbEz3BvoKNU7HqPpBdFcoCQNbzbaZXjaHf+DGmeOaZ/U1lonQk5qf 1JHULoE0Paj/llrFe6lbmdVLRdtF7ooBXO5WyJYdQiQ0d5P2oRpyjrWdfpKBPv3izrcP xDWGEatz3a0LdpwkbbANknPTj4seDBj2I2IHhv+u7CBvcWKdbqqACsMTCVZht7vnEfw+ q68bVDiLNav/bViatkDDH6scSVBkTZywuiems0G36+2a/AoXzh91uQ0X8aQfaQbn9yaw eAeQ== X-Gm-Message-State: AOJu0YyAnKJ8iMksX3qA1wtOFL6GlJu4TFhrCkUQJErVPPhbtCpkg6bZ YWWkCP3Cy3DnqZVzk2DXquhbkY3Z0TOsHRf1DDq4EWB79Vvy1cmlkI/zLNkoMSwj X-Gm-Gg: AeBDievwzN8EDT2yxCSsI7F7Pox+XvKnecRgcY4bcPNIbtH98xzu1H0gU1qpog7w0bB AOTwd28Ba4+OBLBgwLF2IijPB1NvqrptfoN8GXgWbqjsNaWtm0b2XaTYiSdsR9DanOyielcuYc7 358+zmGrKez9vdQS/iXQbPgraNBHy4CNFfAYT2dheE6F6P7dsCIi0IWphtJjJVOpCVUTa5TNqjg wQVJ8CumgUCkx4tBq/ZcVQ9pxkBrFOa4BP4dXbmO8T/ElXduAOCSP7yrqxCw3CJYi9xln8Fn0hT KkmCTVVVVZSt/cik82z6S9jsRb67N+OY4BqjwO/CLhB5UL7bTa6fLjsSrFiJKuPqctdmWoy0Y/L T7h6oQ8xFaiIgGdJhvbuYLfasfj0zpBorZoOwGapTB5Y/6AGlUXRPEUc7rEqbCihpQlfG7h9mUJ oG36tsP4prVlDwAw41Bm08pZIWzjrkaCsB56j6IiEGt9hRZTcbdn2WQHOUnvHEoH30OyRCYWIfx gP2QwHdShB9CNDtq1MBZg== X-Received: by 2002:a05:620a:1a11:b0:8cf:cfdf:7367 with SMTP id af79cd13be357-8d41b8dee31mr759686085a.1.1775269603012; Fri, 03 Apr 2026 19:26:43 -0700 (PDT) Received: from runnervm727z3.oyxxliiq5pgedpchvcbsaosj3d.bx.internal.cloudapp.net ([20.119.41.197]) by smtp.gmail.com with ESMTPSA id af79cd13be357-8d2a8647b4esm581945585a.32.2026.04.03.19.26.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Apr 2026 19:26:41 -0700 (PDT) From: gerris.rs@gmail.com To: gcc-patches@gcc.gnu.org, gcc-rust@gcc.gnu.org Cc: pierre-emmanuel.patry@embecosm.com, arthur.cohen@embecosm.com, dkm+gccrs@kataplop.net, Mohamed Ali Subject: [gccrs COMMIT 2/2] intrinsic: Add tests for cttz and cttz_nonzero Date: Sat, 4 Apr 2026 02:26:37 +0000 Message-ID: <20260404022637.3094-2-gerris.rs@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260404022637.3094-1-gerris.rs@gmail.com> References: <20260404022637.3094-1-gerris.rs@gmail.com> MIME-Version: 1.0 X-Spam-Status: No, score=-12.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces~patchwork=sourceware.org@gcc.gnu.org From: Mohamed Ali gcc/testsuite/ChangeLog: * rust/compile/cttz.rs: New test. * rust/compile/cttz_nonzero.rs: New test. * rust/execute/torture/cttz.rs: New test. * rust/execute/torture/cttz_nonzero.rs: New test. Signed-off-by: Mohamed Ali --- 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/5c0e4d2c59c681f5f22d31173bf9c17202f60c80 The commit has been mentioned in the following pull-request(s): - https://github.com/Rust-GCC/gccrs/pull/4511 gcc/testsuite/rust/compile/cttz.rs | 17 ++++ gcc/testsuite/rust/compile/cttz_nonzero.rs | 19 ++++ gcc/testsuite/rust/execute/torture/cttz.rs | 97 +++++++++++++++++++ .../rust/execute/torture/cttz_nonzero.rs | 74 ++++++++++++++ 4 files changed, 207 insertions(+) create mode 100644 gcc/testsuite/rust/compile/cttz.rs create mode 100644 gcc/testsuite/rust/compile/cttz_nonzero.rs create mode 100644 gcc/testsuite/rust/execute/torture/cttz.rs create mode 100644 gcc/testsuite/rust/execute/torture/cttz_nonzero.rs diff --git a/gcc/testsuite/rust/compile/cttz.rs b/gcc/testsuite/rust/compile/cttz.rs new file mode 100644 index 000000000..b072167ac --- /dev/null +++ b/gcc/testsuite/rust/compile/cttz.rs @@ -0,0 +1,17 @@ +// { dg-do compile } +#![feature(intrinsics, lang_items, no_core)] +#![no_core] + +#[lang = "sized"] +pub trait Sized {} + +#[lang = "copy"] +pub trait Copy {} + +extern "rust-intrinsic" { + pub fn cttz(x: T) -> u32; // { dg-error "cttz intrinsics can only be used with basic integer types .got 'bool'." } +} + +fn main() { + let _ = cttz(true); +} diff --git a/gcc/testsuite/rust/compile/cttz_nonzero.rs b/gcc/testsuite/rust/compile/cttz_nonzero.rs new file mode 100644 index 000000000..210bd8bd2 --- /dev/null +++ b/gcc/testsuite/rust/compile/cttz_nonzero.rs @@ -0,0 +1,19 @@ +// { dg-do compile } +#![feature(intrinsics, lang_items, no_core)] +#![no_core] + +#[lang = "sized"] +pub trait Sized {} + +#[lang = "copy"] +pub trait Copy {} + +extern "rust-intrinsic" { + pub fn cttz_nonzero(x: T) -> u32; // { dg-error "cttz intrinsics can only be used with basic integer types .got 'bool'." } +} + +fn main() { + unsafe { + let _ = cttz_nonzero(true); + } +} diff --git a/gcc/testsuite/rust/execute/torture/cttz.rs b/gcc/testsuite/rust/execute/torture/cttz.rs new file mode 100644 index 000000000..d9f4656de --- /dev/null +++ b/gcc/testsuite/rust/execute/torture/cttz.rs @@ -0,0 +1,97 @@ +#![feature(no_core)] +#![no_core] +#![feature(intrinsics)] +#![feature(lang_items)] + +#[lang = "sized"] +pub trait Sized {} + +extern "rust-intrinsic" { + pub fn cttz(x: T) -> u32; + pub fn abort() -> !; +} + +fn main() -> i32 { + // cttz(0) must return bit_size per the Rust reference + if cttz(0u8) != 8 { + abort(); + } + if cttz(1u8) != 0 { + abort(); + } + if cttz(0xFFu8) != 0 { + abort(); + } + + if cttz(0u16) != 16 { + abort(); + } + if cttz(1u16) != 0 { + abort(); + } + if cttz(0xFFFFu16) != 0 { + abort(); + } + + if cttz(0u32) != 32 { + abort(); + } + if cttz(1u32) != 0 { + abort(); + } + if cttz(0xFFFFFFFFu32) != 0 { + abort(); + } + + if cttz(0u64) != 64 { + abort(); + } + if cttz(1u64) != 0 { + abort(); + } + if cttz(!0u64) != 0 { + abort(); + } + + if cttz(0i8) != 8 { + abort(); + } + if cttz(1i8) != 0 { + abort(); + } + if cttz(-1i8) != 0 { + abort(); + } + + if cttz(0i16) != 16 { + abort(); + } + if cttz(1i16) != 0 { + abort(); + } + if cttz(-1i16) != 0 { + abort(); + } + + if cttz(0i32) != 32 { + abort(); + } + if cttz(1i32) != 0 { + abort(); + } + if cttz(-1i32) != 0 { + abort(); + } + + if cttz(0i64) != 64 { + abort(); + } + if cttz(1i64) != 0 { + abort(); + } + if cttz(-1i64) != 0 { + abort(); + } + + 0 +} diff --git a/gcc/testsuite/rust/execute/torture/cttz_nonzero.rs b/gcc/testsuite/rust/execute/torture/cttz_nonzero.rs new file mode 100644 index 000000000..749dffaf6 --- /dev/null +++ b/gcc/testsuite/rust/execute/torture/cttz_nonzero.rs @@ -0,0 +1,74 @@ +#![feature(no_core)] +#![no_core] +#![feature(intrinsics)] +#![feature(lang_items)] + +#[lang = "sized"] +pub trait Sized {} + +extern "rust-intrinsic" { + pub fn cttz_nonzero(x: T) -> u32; + pub fn abort() -> !; +} + +fn main() -> i32 { + unsafe { + if cttz_nonzero(1u8) != 0 { + abort(); + } + if cttz_nonzero(0xFFu8) != 0 { + abort(); + } + + if cttz_nonzero(1u16) != 0 { + abort(); + } + if cttz_nonzero(0xFFFFu16) != 0 { + abort(); + } + + if cttz_nonzero(1u32) != 0 { + abort(); + } + if cttz_nonzero(0xFFFFFFFFu32) != 0 { + abort(); + } + + if cttz_nonzero(1u64) != 0 { + abort(); + } + if cttz_nonzero(!0u64) != 0 { + abort(); + } + + if cttz_nonzero(1i8) != 0 { + abort(); + } + if cttz_nonzero(-1i8) != 0 { + abort(); + } + + if cttz_nonzero(1i16) != 0 { + abort(); + } + if cttz_nonzero(-1i16) != 0 { + abort(); + } + + if cttz_nonzero(1i32) != 0 { + abort(); + } + if cttz_nonzero(-1i32) != 0 { + abort(); + } + + if cttz_nonzero(1i64) != 0 { + abort(); + } + if cttz_nonzero(-1i64) != 0 { + abort(); + } + } + + 0 +}