Skip to content

Commit dd7ce7d

Browse files
committed
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 <dkm@kataplop.net>
1 parent 1d8f5d5 commit dd7ce7d

File tree

3 files changed

+39
-5
lines changed

3 files changed

+39
-5
lines changed

gcc/rust/backend/rust-builtins.cc

+27-3
Original file line numberDiff line numberDiff line change
@@ -285,46 +285,70 @@ void
285285
BuiltinsContext::register_rust_mappings ()
286286
{
287287
rust_intrinsic_to_gcc_builtin = {
288-
{"sinf32", "__builtin_sinf"},
289-
{"sqrtf32", "__builtin_sqrtf"},
290-
{"sqrtf64", "__builtin_sqrt"},
291288
{"unreachable", "__builtin_unreachable"},
292289
{"abort", "__builtin_abort"},
290+
291+
// Math intrinsics
292+
{"sqrtf32", "__builtin_sqrtf"},
293+
{"sqrtf64", "__builtin_sqrt"},
294+
295+
{"sinf32", "__builtin_sinf"},
293296
{"sinf64", "__builtin_sin"},
297+
294298
{"cosf32", "__builtin_cosf"},
295299
{"cosf64", "__builtin_cos"},
300+
296301
{"powf32", "__builtin_powf"},
297302
{"powf64", "__builtin_pow"},
303+
304+
{"powif32", "__builtin_powif"},
305+
{"powif64", "__builtin_powi"},
306+
298307
{"expf32", "__builtin_expf"},
299308
{"expf64", "__builtin_exp"},
309+
300310
{"exp2f32", "__builtin_exp2f"},
301311
{"exp2f64", "__builtin_exp2"},
312+
302313
{"logf32", "__builtin_logf"},
303314
{"logf64", "__builtin_log"},
315+
304316
{"log10f32", "__builtin_log10f"},
305317
{"log10f64", "__builtin_log10"},
318+
306319
{"log2f32", "__builtin_log2f"},
307320
{"log2f64", "__builtin_log2"},
321+
308322
{"fmaf32", "__builtin_fmaf"},
309323
{"fmaf64", "__builtin_fma"},
324+
310325
{"fabsf32", "__builtin_fabsf"},
311326
{"fabsf64", "__builtin_fabs"},
327+
312328
{"minnumf32", "__builtin_fminf"},
313329
{"minnumf64", "__builtin_fmin"},
330+
314331
{"maxnumf32", "__builtin_fmaxf"},
315332
{"maxnumf64", "__builtin_fmax"},
333+
316334
{"copysignf32", "__builtin_copysignf"},
317335
{"copysignf64", "__builtin_copysign"},
336+
318337
{"floorf32", "__builtin_floorf"},
319338
{"floorf64", "__builtin_floor"},
339+
320340
{"ceilf32", "__builtin_ceilf"},
321341
{"ceilf64", "__builtin_ceil"},
342+
322343
{"truncf32", "__builtin_truncf"},
323344
{"truncf64", "__builtin_trunc"},
345+
324346
{"rintf32", "__builtin_rintf"},
325347
{"rintf64", "__builtin_rint"},
348+
326349
{"nearbyintf32", "__builtin_nearbyintf"},
327350
{"nearbyintf64", "__builtin_nearbyint"},
351+
328352
{"roundf32", "__builtin_roundf"},
329353
{"roundf64", "__builtin_round"},
330354
};

gcc/rust/backend/rust-builtins.h

+2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
// Copyright (C) 2020-2024 Free Software Foundation, Inc.
2+
13
// This file is part of GCC.
24

35
// GCC is free software; you can redistribute it and/or modify it under

gcc/testsuite/rust/compile/torture/intrinsics-math.rs

+10-2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ extern "rust-intrinsic" {
1414
pub fn powf32(a: f32, x: f32) -> f32;
1515
pub fn powf64(a: f64, x: f64) -> f64;
1616

17+
pub fn powif32(a: f32, x: i32) -> f32;
18+
pub fn powif64(a: f64, x: i64) -> f64;
19+
1720
pub fn expf32(x: f32) -> f32;
1821
pub fn expf64(x: f64) -> f64;
1922

@@ -84,9 +87,14 @@ fn main() {
8487
// { dg-final { scan-tree-dump-times {(?n)f64 .* __builtin_cos.? \(.*6\.0e\+0\);$} 1 original } }
8588

8689
f32 = powf32(7f32, 8f32);
87-
// { dg-final { scan-tree-dump-times {(?n)f32 .* __builtin_pow. \(.*7\.0e\+0, .*8\.0e\+0\);$} 1 original } }
90+
// { dg-final { scan-tree-dump-times {(?n)f32 .* __builtin_pow[^i] \(.*7\.0e\+0, .*8\.0e\+0\);$} 1 original } }
8891
f64 = powf64(9f64, 10f64);
89-
// { dg-final { scan-tree-dump-times {(?n)f64 .* __builtin_pow.? \(.*9\.0e\+0, .*1\.0e\+1\);$} 1 original } }
92+
// { dg-final { scan-tree-dump-times {(?n)f64 .* __builtin_pow[^i]? \(.*9\.0e\+0, .*1\.0e\+1\);$} 1 original } }
93+
94+
f32 = powif32(7f32, 8i32);
95+
// { dg-final { scan-tree-dump-times {(?n)f32 .* __builtin_powi. \(.*7\.0e\+0, .*8\);$} 1 original } }
96+
f64 = powif64(9f64, 10i64);
97+
// { dg-final { scan-tree-dump-times {(?n)f64 .* __builtin_powi.? \(.*9\.0e\+0, .*10\);$} 1 original } }
9098

9199
f32 = expf32(11f32);
92100
// { dg-final { scan-tree-dump-times {(?n)f32 .* __builtin_exp. \(.*1\.1e\+1\);$} 1 original } }

0 commit comments

Comments
 (0)