Fix TDivisor type

Hooray! It works!
This commit is contained in:
Alex Page 2023-06-22 01:39:25 -04:00
parent ecce5e797f
commit 932a11679d

View file

@ -16,8 +16,8 @@ type size_t = u64;
#[derive(Copy, Clone)] #[derive(Copy, Clone)]
#[repr(C)] #[repr(C)]
struct TDivisor { struct TDivisor {
u: [u16; 2], u: [u64; 2],
v: [u16; 2], v: [u64; 2],
} }
#[derive(Copy, Clone)] #[derive(Copy, Clone)]
#[repr(C)] #[repr(C)]
@ -297,8 +297,8 @@ unsafe fn find_divisor_v(mut d: *mut TDivisor) -> i32 {
residue_add(f1, residue_mul(u1, residue_mul(v1, v1))), residue_add(f1, residue_mul(u1, residue_mul(v1, v1))),
residue_inv(residue_add(v1, v1)), residue_inv(residue_add(v1, v1)),
); );
(*d).v[0_i32 as usize] = v0 as u16; (*d).v[0_i32 as usize] = v0;
(*d).v[1_i32 as usize] = v1 as u16; (*d).v[1_i32 as usize] = v1;
1_i32 1_i32
} }
@ -750,32 +750,32 @@ unsafe fn divisor_add(src1: *const TDivisor, src2: *const TDivisor, mut dst: *mu
); );
} }
if udeg == 2_i32 { if udeg == 2_i32 {
(*dst).u[0_i32 as usize] = u[0_i32 as usize] as u16; (*dst).u[0_i32 as usize] = u[0_i32 as usize];
(*dst).u[1_i32 as usize] = u[1_i32 as usize] as u16; (*dst).u[1_i32 as usize] = u[1_i32 as usize];
(*dst).v[0_i32 as usize] = (if vdeg >= 0_i32 { (*dst).v[0_i32 as usize] = (if vdeg >= 0_i32 {
v[0_i32 as usize] v[0_i32 as usize]
} else { } else {
0_i32 as u64 0_i32 as u64
}) as u16; });
(*dst).v[1_i32 as usize] = (if vdeg >= 1_i32 { (*dst).v[1_i32 as usize] = (if vdeg >= 1_i32 {
v[1_i32 as usize] v[1_i32 as usize]
} else { } else {
0_i32 as u64 0_i32 as u64
}) as u16; });
} else if udeg == 1_i32 { } else if udeg == 1_i32 {
(*dst).u[0_i32 as usize] = u[0_i32 as usize] as u16; (*dst).u[0_i32 as usize] = u[0_i32 as usize];
(*dst).u[1_i32 as usize] = BAD as u16; (*dst).u[1_i32 as usize] = BAD;
(*dst).v[0_i32 as usize] = (if vdeg >= 0_i32 { (*dst).v[0_i32 as usize] = (if vdeg >= 0_i32 {
v[0_i32 as usize] v[0_i32 as usize]
} else { } else {
0_i32 as u64 0_i32 as u64
}) as u16; });
(*dst).v[1_i32 as usize] = BAD as u16; (*dst).v[1_i32 as usize] = BAD;
} else { } else {
(*dst).u[0_i32 as usize] = BAD as u16; (*dst).u[0_i32 as usize] = BAD;
(*dst).u[1_i32 as usize] = BAD as u16; (*dst).u[1_i32 as usize] = BAD;
(*dst).v[0_i32 as usize] = BAD as u16; (*dst).v[0_i32 as usize] = BAD;
(*dst).v[1_i32 as usize] = BAD as u16; (*dst).v[1_i32 as usize] = BAD;
}; };
} }
@ -786,10 +786,10 @@ unsafe fn divisor_mul128(
mut dst: *mut TDivisor, mut dst: *mut TDivisor,
) { ) {
if mult_lo == 0_i32 as u64 && mult_hi == 0_i32 as u64 { if mult_lo == 0_i32 as u64 && mult_hi == 0_i32 as u64 {
(*dst).u[0_i32 as usize] = BAD as u16; (*dst).u[0_i32 as usize] = BAD;
(*dst).u[1_i32 as usize] = BAD as u16; (*dst).u[1_i32 as usize] = BAD;
(*dst).v[0_i32 as usize] = BAD as u16; (*dst).v[0_i32 as usize] = BAD;
(*dst).v[1_i32 as usize] = BAD as u16; (*dst).v[1_i32 as usize] = BAD;
return; return;
} }
let mut cur: TDivisor = *src; let mut cur: TDivisor = *src;
@ -1179,8 +1179,8 @@ unsafe fn Generate(installation_id_str: *const i8, confirmation_id: *mut i8) ->
d_0.u[0_i32 as usize] = residue_sub( d_0.u[0_i32 as usize] = residue_sub(
residue_mul(x1, x1), residue_mul(x1, x1),
residue_mul(43_i32 as u64, residue_mul(x2, x2)), residue_mul(43_i32 as u64, residue_mul(x2, x2)),
) as u16; );
d_0.u[1_i32 as usize] = residue_add(x1, x1) as u16; d_0.u[1_i32 as usize] = residue_add(x1, x1);
if find_divisor_v(&mut d_0) != 0 { if find_divisor_v(&mut d_0) != 0 {
break; break;
} }