commit ccf00ccdf71fae7ecd25d9b1bf11dc7eb52d5d1d (tree)
parent 6ab04b59417eb9c7fff81ea26424c2340dc72097
Author: Eric Milliken <11590808+mllken@users.noreply.github.com>
Date: Mon, 6 Mar 2023 22:28:11 +0000
crypto.25519.field: de-inline mul for small builds (#14775)
Diffstat:
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/lib/std/crypto/25519/field.zig b/lib/std/crypto/25519/field.zig
@@ -1,4 +1,5 @@
const std = @import("std");
+const builtin = @import("builtin");
const crypto = std.crypto;
const readIntLittle = std.mem.readIntLittle;
const writeIntLittle = std.mem.writeIntLittle;
@@ -6,6 +7,12 @@ const writeIntLittle = std.mem.writeIntLittle;
const NonCanonicalError = crypto.errors.NonCanonicalError;
const NotSquareError = crypto.errors.NotSquareError;
+// Inline conditionally, when it can result in large code generation.
+const bloaty_inline = switch (builtin.mode) {
+ .ReleaseSafe, .ReleaseFast => .Inline,
+ .Debug, .ReleaseSmall => .Unspecified,
+};
+
pub const Fe = struct {
limbs: [5]u64,
@@ -264,7 +271,7 @@ pub const Fe = struct {
}
/// Multiply two field elements
- pub inline fn mul(a: Fe, b: Fe) Fe {
+ pub fn mul(a: Fe, b: Fe) callconv(bloaty_inline) Fe {
var ax: [5]u128 = undefined;
var bx: [5]u128 = undefined;
var a19: [5]u128 = undefined;