From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 7905) id 913BD385841A; Wed, 21 Feb 2024 12:51:57 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 913BD385841A DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1708519917; bh=6QOnNOEKMmWJb/EgZ7qDzAzBkHLmxITn20kISA+0hsU=; h=From:To:Subject:Date:From; b=GOAA+3DzOIQD5Cm0bRqupAKJTU+w4NSDM5Xd3b40UeONY/q4B0gUAkH/ik4yDxW9p g3+HMVTaBtlPHcXrvu+2OXct3gVjzlI1yF+OeqHLd5SwtPKNx4h/3jyuhpa8w72hmc mODcJmbmjrapC4LTtHFFWt7Tq8+qOdo/rVbEKc6s= MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset="utf-8" From: Arthur Cohen To: gcc-cvs@gcc.gnu.org Subject: [gcc r14-9111] gccrs: add powi intrinsics X-Act-Checkin: gcc X-Git-Author: =?utf-8?q?Marc_Poulhi=C3=A8s?= X-Git-Refname: refs/heads/trunk X-Git-Oldrev: 6c6e357b17965d226c4d77188a9c1e6f89503ff5 X-Git-Newrev: d7dde4ba49da7947d800fd7ab8e5a0e747073ead Message-Id: <20240221125157.913BD385841A@sourceware.org> Date: Wed, 21 Feb 2024 12:51:57 +0000 (GMT) List-Id: https://gcc.gnu.org/g:d7dde4ba49da7947d800fd7ab8e5a0e747073ead commit r14-9111-gd7dde4ba49da7947d800fd7ab8e5a0e747073ead Author: Marc Poulhiès Date: Sun Oct 22 18:52:22 2023 +0200 gccrs: add powi intrinsics gcc/rust/ChangeLog: * backend/rust-builtins.cc (BuiltinsContext::register_rust_mappings): Add powi and reformat. * backend/rust-builtins.h: Add missing copyright header. gcc/testsuite/ChangeLog: * rust/compile/torture/intrinsics-math.rs: Adjust pow test, add test for powi. Signed-off-by: Marc Poulhiès Diff: --- gcc/rust/backend/rust-builtins.cc | 30 +++++++++++++++++++--- gcc/rust/backend/rust-builtins.h | 2 ++ .../rust/compile/torture/intrinsics-math.rs | 12 +++++++-- 3 files changed, 39 insertions(+), 5 deletions(-) diff --git a/gcc/rust/backend/rust-builtins.cc b/gcc/rust/backend/rust-builtins.cc index 1a87f869206c..282ecba70cbf 100644 --- a/gcc/rust/backend/rust-builtins.cc +++ b/gcc/rust/backend/rust-builtins.cc @@ -285,46 +285,70 @@ void BuiltinsContext::register_rust_mappings () { rust_intrinsic_to_gcc_builtin = { - {"sinf32", "__builtin_sinf"}, - {"sqrtf32", "__builtin_sqrtf"}, - {"sqrtf64", "__builtin_sqrt"}, {"unreachable", "__builtin_unreachable"}, {"abort", "__builtin_abort"}, + + // Math intrinsics + {"sqrtf32", "__builtin_sqrtf"}, + {"sqrtf64", "__builtin_sqrt"}, + + {"sinf32", "__builtin_sinf"}, {"sinf64", "__builtin_sin"}, + {"cosf32", "__builtin_cosf"}, {"cosf64", "__builtin_cos"}, + {"powf32", "__builtin_powf"}, {"powf64", "__builtin_pow"}, + + {"powif32", "__builtin_powif"}, + {"powif64", "__builtin_powi"}, + {"expf32", "__builtin_expf"}, {"expf64", "__builtin_exp"}, + {"exp2f32", "__builtin_exp2f"}, {"exp2f64", "__builtin_exp2"}, + {"logf32", "__builtin_logf"}, {"logf64", "__builtin_log"}, + {"log10f32", "__builtin_log10f"}, {"log10f64", "__builtin_log10"}, + {"log2f32", "__builtin_log2f"}, {"log2f64", "__builtin_log2"}, + {"fmaf32", "__builtin_fmaf"}, {"fmaf64", "__builtin_fma"}, + {"fabsf32", "__builtin_fabsf"}, {"fabsf64", "__builtin_fabs"}, + {"minnumf32", "__builtin_fminf"}, {"minnumf64", "__builtin_fmin"}, + {"maxnumf32", "__builtin_fmaxf"}, {"maxnumf64", "__builtin_fmax"}, + {"copysignf32", "__builtin_copysignf"}, {"copysignf64", "__builtin_copysign"}, + {"floorf32", "__builtin_floorf"}, {"floorf64", "__builtin_floor"}, + {"ceilf32", "__builtin_ceilf"}, {"ceilf64", "__builtin_ceil"}, + {"truncf32", "__builtin_truncf"}, {"truncf64", "__builtin_trunc"}, + {"rintf32", "__builtin_rintf"}, {"rintf64", "__builtin_rint"}, + {"nearbyintf32", "__builtin_nearbyintf"}, {"nearbyintf64", "__builtin_nearbyint"}, + {"roundf32", "__builtin_roundf"}, {"roundf64", "__builtin_round"}, }; diff --git a/gcc/rust/backend/rust-builtins.h b/gcc/rust/backend/rust-builtins.h index 5052edad51e9..65dd850e3c61 100644 --- a/gcc/rust/backend/rust-builtins.h +++ b/gcc/rust/backend/rust-builtins.h @@ -1,3 +1,5 @@ +// Copyright (C) 2020-2024 Free Software Foundation, Inc. + // This file is part of GCC. // GCC is free software; you can redistribute it and/or modify it under diff --git a/gcc/testsuite/rust/compile/torture/intrinsics-math.rs b/gcc/testsuite/rust/compile/torture/intrinsics-math.rs index 42acdde14945..e0d15f99d482 100644 --- a/gcc/testsuite/rust/compile/torture/intrinsics-math.rs +++ b/gcc/testsuite/rust/compile/torture/intrinsics-math.rs @@ -14,6 +14,9 @@ extern "rust-intrinsic" { pub fn powf32(a: f32, x: f32) -> f32; pub fn powf64(a: f64, x: f64) -> f64; + pub fn powif32(a: f32, x: i32) -> f32; + pub fn powif64(a: f64, x: i32) -> f64; + pub fn expf32(x: f32) -> f32; pub fn expf64(x: f64) -> f64; @@ -84,9 +87,14 @@ fn main() { // { dg-final { scan-tree-dump-times {(?n)f64 .* __builtin_cos.? \(.*6\.0e\+0\);$} 1 original } } f32 = powf32(7f32, 8f32); - // { dg-final { scan-tree-dump-times {(?n)f32 .* __builtin_pow. \(.*7\.0e\+0, .*8\.0e\+0\);$} 1 original } } + // { dg-final { scan-tree-dump-times {(?n)f32 .* __builtin_pow[^i] \(.*7\.0e\+0, .*8\.0e\+0\);$} 1 original } } f64 = powf64(9f64, 10f64); - // { dg-final { scan-tree-dump-times {(?n)f64 .* __builtin_pow.? \(.*9\.0e\+0, .*1\.0e\+1\);$} 1 original } } + // { dg-final { scan-tree-dump-times {(?n)f64 .* __builtin_pow[^i]? \(.*9\.0e\+0, .*1\.0e\+1\);$} 1 original } } + + f32 = powif32(7f32, 8i32); + // { dg-final { scan-tree-dump-times {(?n)f32 .* __builtin_powi. \(.*7\.0e\+0, .*8\);$} 1 original } } + f64 = powif64(9f64, 10i32); + // { dg-final { scan-tree-dump-times {(?n)f64 .* __builtin_powi.? \(.*9\.0e\+0, .*10\);$} 1 original } } f32 = expf32(11f32); // { dg-final { scan-tree-dump-times {(?n)f32 .* __builtin_exp. \(.*1\.1e\+1\);$} 1 original } }