Commit ccf00ccdf7

Eric Milliken <11590808+mllken@users.noreply.github.com>
2023-03-06 23:28:11
crypto.25519.field: de-inline mul for small builds (#14775)
1 parent 6ab04b5
Changed files (1)
lib
std
crypto
25519
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;