@@ -17,7 +17,6 @@ const Endian = std.builtin.Endian;
17
17
const Signedness = std .builtin .Signedness ;
18
18
const native_endian = builtin .cpu .arch .endian ();
19
19
20
- const debug_safety = false ;
21
20
22
21
/// Returns the number of limbs needed to store `scalar`, which must be a
23
22
/// primitive integer value.
@@ -92,8 +91,6 @@ pub fn calcTwosCompLimbCount(bit_count: usize) usize {
92
91
93
92
/// a + b * c + *carry, sets carry to the overflow bits
94
93
pub fn addMulLimbWithCarry (a : Limb , b : Limb , c : Limb , carry : * Limb ) Limb {
95
- @setRuntimeSafety (debug_safety );
96
-
97
94
// ov1[0] = a + *carry
98
95
const ov1 = @addWithOverflow (a , carry .* );
99
96
@@ -3277,7 +3274,6 @@ const AccOp = enum {
3277
3274
///
3278
3275
/// The result is computed modulo `r.len`. When `r.len >= a.len + b.len`, no overflow occurs.
3279
3276
fn llmulacc (comptime op : AccOp , opt_allocator : ? Allocator , r : []Limb , a : []const Limb , b : []const Limb ) void {
3280
- @setRuntimeSafety (debug_safety );
3281
3277
assert (r .len >= a .len );
3282
3278
assert (r .len >= b .len );
3283
3279
@@ -3316,7 +3312,6 @@ fn llmulaccKaratsuba(
3316
3312
a : []const Limb ,
3317
3313
b : []const Limb ,
3318
3314
) error {OutOfMemory }! void {
3319
- @setRuntimeSafety (debug_safety );
3320
3315
assert (r .len >= a .len );
3321
3316
assert (a .len >= b .len );
3322
3317
@@ -3479,7 +3474,6 @@ fn llmulaccKaratsuba(
3479
3474
/// r = r (op) a.
3480
3475
/// The result is computed modulo `r.len`.
3481
3476
fn llaccum (comptime op : AccOp , r : []Limb , a : []const Limb ) void {
3482
- @setRuntimeSafety (debug_safety );
3483
3477
if (op == .sub ) {
3484
3478
_ = llsubcarry (r , r , a );
3485
3479
return ;
@@ -3508,7 +3502,6 @@ fn llaccum(comptime op: AccOp, r: []Limb, a: []const Limb) void {
3508
3502
3509
3503
/// Returns -1, 0, 1 if |a| < |b|, |a| == |b| or |a| > |b| respectively for limbs.
3510
3504
pub fn llcmp (a : []const Limb , b : []const Limb ) i8 {
3511
- @setRuntimeSafety (debug_safety );
3512
3505
const a_len = llnormalize (a );
3513
3506
const b_len = llnormalize (b );
3514
3507
if (a_len < b_len ) {
@@ -3537,7 +3530,6 @@ pub fn llcmp(a: []const Limb, b: []const Limb) i8 {
3537
3530
/// r = r (op) y * xi
3538
3531
/// The result is computed modulo `r.len`. When `r.len >= a.len + b.len`, no overflow occurs.
3539
3532
fn llmulaccLong (comptime op : AccOp , r : []Limb , a : []const Limb , b : []const Limb ) void {
3540
- @setRuntimeSafety (debug_safety );
3541
3533
assert (r .len >= a .len );
3542
3534
assert (a .len >= b .len );
3543
3535
@@ -3551,7 +3543,6 @@ fn llmulaccLong(comptime op: AccOp, r: []Limb, a: []const Limb, b: []const Limb)
3551
3543
/// The result is computed modulo `r.len`.
3552
3544
/// Returns whether the operation overflowed.
3553
3545
fn llmulLimb (comptime op : AccOp , acc : []Limb , y : []const Limb , xi : Limb ) bool {
3554
- @setRuntimeSafety (debug_safety );
3555
3546
if (xi == 0 ) {
3556
3547
return false ;
3557
3548
}
@@ -3598,7 +3589,6 @@ fn llmulLimb(comptime op: AccOp, acc: []Limb, y: []const Limb, xi: Limb) bool {
3598
3589
3599
3590
/// returns the min length the limb could be.
3600
3591
fn llnormalize (a : []const Limb ) usize {
3601
- @setRuntimeSafety (debug_safety );
3602
3592
var j = a .len ;
3603
3593
while (j > 0 ) : (j -= 1 ) {
3604
3594
if (a [j - 1 ] != 0 ) {
@@ -3612,7 +3602,6 @@ fn llnormalize(a: []const Limb) usize {
3612
3602
3613
3603
/// Knuth 4.3.1, Algorithm S.
3614
3604
fn llsubcarry (r : []Limb , a : []const Limb , b : []const Limb ) Limb {
3615
- @setRuntimeSafety (debug_safety );
3616
3605
assert (a .len != 0 and b .len != 0 );
3617
3606
assert (a .len >= b .len );
3618
3607
assert (r .len >= a .len );
@@ -3638,14 +3627,12 @@ fn llsubcarry(r: []Limb, a: []const Limb, b: []const Limb) Limb {
3638
3627
}
3639
3628
3640
3629
fn llsub (r : []Limb , a : []const Limb , b : []const Limb ) void {
3641
- @setRuntimeSafety (debug_safety );
3642
3630
assert (a .len > b .len or (a .len == b .len and a [a .len - 1 ] >= b [b .len - 1 ]));
3643
3631
assert (llsubcarry (r , a , b ) == 0 );
3644
3632
}
3645
3633
3646
3634
/// Knuth 4.3.1, Algorithm A.
3647
3635
fn lladdcarry (r : []Limb , a : []const Limb , b : []const Limb ) Limb {
3648
- @setRuntimeSafety (debug_safety );
3649
3636
assert (a .len != 0 and b .len != 0 );
3650
3637
assert (a .len >= b .len );
3651
3638
assert (r .len >= a .len );
@@ -3671,14 +3658,12 @@ fn lladdcarry(r: []Limb, a: []const Limb, b: []const Limb) Limb {
3671
3658
}
3672
3659
3673
3660
fn lladd (r : []Limb , a : []const Limb , b : []const Limb ) void {
3674
- @setRuntimeSafety (debug_safety );
3675
3661
assert (r .len >= a .len + 1 );
3676
3662
r [a .len ] = lladdcarry (r , a , b );
3677
3663
}
3678
3664
3679
3665
/// Knuth 4.3.1, Exercise 16.
3680
3666
fn lldiv1 (quo : []Limb , rem : * Limb , a : []const Limb , b : Limb ) void {
3681
- @setRuntimeSafety (debug_safety );
3682
3667
assert (a .len > 1 or a [0 ] >= b );
3683
3668
assert (quo .len >= a .len );
3684
3669
@@ -3704,7 +3689,6 @@ fn lldiv1(quo: []Limb, rem: *Limb, a: []const Limb, b: Limb) void {
3704
3689
}
3705
3690
3706
3691
fn lldiv0p5 (quo : []Limb , rem : * Limb , a : []const Limb , b : HalfLimb ) void {
3707
- @setRuntimeSafety (debug_safety );
3708
3692
assert (a .len > 1 or a [0 ] >= b );
3709
3693
assert (quo .len >= a .len );
3710
3694
@@ -3788,7 +3772,6 @@ fn llshr(r: []Limb, a: []const Limb, shift: usize) void {
3788
3772
3789
3773
// r = ~r
3790
3774
fn llnot (r : []Limb ) void {
3791
- @setRuntimeSafety (debug_safety );
3792
3775
3793
3776
for (r ) | * elem | {
3794
3777
elem .* = ~ elem .* ;
@@ -3802,7 +3785,6 @@ fn llnot(r: []Limb) void {
3802
3785
// When b is positive, r requires at least `a.len` limbs of storage.
3803
3786
// When b is negative, r requires at least `b.len` limbs of storage.
3804
3787
fn llsignedor (r : []Limb , a : []const Limb , a_positive : bool , b : []const Limb , b_positive : bool ) bool {
3805
- @setRuntimeSafety (debug_safety );
3806
3788
assert (r .len >= a .len );
3807
3789
assert (a .len >= b .len );
3808
3790
@@ -3933,7 +3915,6 @@ fn llsignedor(r: []Limb, a: []const Limb, a_positive: bool, b: []const Limb, b_p
3933
3915
// 2. when b is negative but a is positive, r requires at least `a.len` limbs of storage,
3934
3916
// 3. when both a and b are negative, r requires at least `a.len + 1` limbs of storage.
3935
3917
fn llsignedand (r : []Limb , a : []const Limb , a_positive : bool , b : []const Limb , b_positive : bool ) bool {
3936
- @setRuntimeSafety (debug_safety );
3937
3918
assert (a .len != 0 and b .len != 0 );
3938
3919
assert (a .len >= b .len );
3939
3920
assert (r .len >= if (b_positive ) b .len else if (a_positive ) a .len else a .len + 1 );
@@ -4043,7 +4024,6 @@ fn llsignedand(r: []Limb, a: []const Limb, a_positive: bool, b: []const Limb, b_
4043
4024
// If the sign of a and b is equal, then r requires at least `@max(a.len, b.len)` limbs are required.
4044
4025
// Otherwise, r requires at least `@max(a.len, b.len) + 1` limbs.
4045
4026
fn llsignedxor (r : []Limb , a : []const Limb , a_positive : bool , b : []const Limb , b_positive : bool ) bool {
4046
- @setRuntimeSafety (debug_safety );
4047
4027
assert (a .len != 0 and b .len != 0 );
4048
4028
assert (r .len >= a .len );
4049
4029
assert (a .len >= b .len );
@@ -4102,8 +4082,6 @@ fn llsignedxor(r: []Limb, a: []const Limb, a_positive: bool, b: []const Limb, b_
4102
4082
4103
4083
/// r MUST NOT alias x.
4104
4084
fn llsquareBasecase (r : []Limb , x : []const Limb ) void {
4105
- @setRuntimeSafety (debug_safety );
4106
-
4107
4085
const x_norm = x ;
4108
4086
assert (r .len >= 2 * x_norm .len + 1 );
4109
4087
0 commit comments