diff options
Diffstat (limited to 'ecdsa_fpga_microcode.cpp')
-rw-r--r-- | ecdsa_fpga_microcode.cpp | 49 |
1 files changed, 24 insertions, 25 deletions
diff --git a/ecdsa_fpga_microcode.cpp b/ecdsa_fpga_microcode.cpp index f02dc8a..2171ac2 100644 --- a/ecdsa_fpga_microcode.cpp +++ b/ecdsa_fpga_microcode.cpp @@ -59,10 +59,8 @@ FPGA_BUFFER BUF_HI[ECDSA_UOP_OPERAND_COUNT]; //------------------------------------------------------------------------------ // Global Flags //------------------------------------------------------------------------------ -bool uop_flagz_sz; -bool uop_flagz_rz; -bool uop_flagz_e; -bool uop_flagz_f; +bool uop_flagz_r0z; +bool uop_flagz_r1z; //------------------------------------------------------------------------------ @@ -96,17 +94,11 @@ void uop_cmpz(UOP_BANK src, int s_op) switch (s_op) { - case CYCLE_SZ: - uop_flagz_sz = flagz; + case CYCLE_R0Z: + uop_flagz_r0z = flagz; break; - case CYCLE_RZ: - uop_flagz_rz = flagz; - break; - case CYCLE_E: - uop_flagz_e = flagz; - break; - case CYCLE_F: - uop_flagz_f = flagz; + case CYCLE_R1Z: + uop_flagz_r1z = flagz; break; } } @@ -141,6 +133,13 @@ void uop_calc(UOP_MATH math, if (math == ADD) fpga_modular_add(s_ptr1, s_ptr2, d_ptr); if (math == SUB) fpga_modular_sub(s_ptr1, s_ptr2, d_ptr); if (math == MUL) fpga_modular_mul(s_ptr1, s_ptr2, d_ptr); + +#ifdef DUMP_UOP_OUTPUTS + if (math == ADD) dump_uop_output("ADD", d_ptr); + if (math == SUB) dump_uop_output("SUB", d_ptr); + if (math == MUL) dump_uop_output("MUL", d_ptr); +#endif + } @@ -201,16 +200,16 @@ void fpga_modular_inv23_p256_microcode() // first obtain intermediate helper quantities (X#) // mirror X1 to HI bank (don't waste time copying to X1, just use RZ) - uop_move(BANK_LO, CYCLE_RZ, BANK_HI, CYCLE_RZ); + uop_move(BANK_LO, CYCLE_R0Z, BANK_HI, CYCLE_R0Z); // compute X2 and mirror to the other bank - uop_calc(MUL, BANK_LO, CYCLE_RZ, CYCLE_RZ, BANK_HI, INVERT_R1); - uop_calc(MUL, BANK_HI, CYCLE_RZ, INVERT_R1, BANK_LO, INVERT_X2); + uop_calc(MUL, BANK_LO, CYCLE_R0Z, CYCLE_R0Z, BANK_HI, INVERT_R1); + uop_calc(MUL, BANK_HI, CYCLE_R0Z, INVERT_R1, BANK_LO, INVERT_X2); uop_move(BANK_LO, INVERT_X2, BANK_HI, INVERT_X2); // compute X3 and mirror to the other bank uop_calc(MUL, BANK_LO, INVERT_X2, INVERT_X2, BANK_HI, INVERT_R1); - uop_calc(MUL, BANK_HI, INVERT_R1, CYCLE_RZ, BANK_LO, INVERT_X3); + uop_calc(MUL, BANK_HI, INVERT_R1, CYCLE_R0Z, BANK_LO, INVERT_X3); uop_move(BANK_LO, INVERT_X3, BANK_HI, INVERT_X3); // compute X6 (stored in the lower bank) @@ -257,7 +256,7 @@ void fpga_modular_inv23_p256_microcode() uop_calc_if_odd (MUL, BANK_LO, INVERT_R2, INVERT_R2, BANK_HI, INVERT_R1); uop_repeat(); - uop_calc(MUL, BANK_LO, INVERT_R2, CYCLE_RZ, BANK_HI, INVERT_R1); + uop_calc(MUL, BANK_LO, INVERT_R2, CYCLE_R0Z, BANK_HI, INVERT_R1); uop_cycle(128); uop_calc_if_even(MUL, BANK_HI, INVERT_R1, INVERT_R1, BANK_LO, INVERT_R2); @@ -287,7 +286,7 @@ void fpga_modular_inv23_p256_microcode() // A3 ends up in the upper bank by itself uop_calc(MUL, BANK_HI, INVERT_A2, INVERT_A2, BANK_LO, INVERT_R1); - uop_calc(MUL, BANK_LO, INVERT_R1, CYCLE_RZ, BANK_HI, INVERT_A3); + uop_calc(MUL, BANK_LO, INVERT_R1, CYCLE_R0Z, BANK_HI, INVERT_A3); /* END_MICROCODE */ } @@ -322,16 +321,16 @@ void fpga_modular_inv23_p384_microcode() // first obtain intermediate helper quantities (X#) // mirror X1 to HI bank (don't waste time copying to X1, just use RZ) - uop_move(BANK_LO, CYCLE_RZ, BANK_HI, CYCLE_RZ); + uop_move(BANK_LO, CYCLE_R0Z, BANK_HI, CYCLE_R0Z); // compute X2 and mirror to the other bank - uop_calc(MUL, BANK_LO, CYCLE_RZ, CYCLE_RZ, BANK_HI, INVERT_R1); - uop_calc(MUL, BANK_HI, CYCLE_RZ, INVERT_R1, BANK_LO, INVERT_X2); + uop_calc(MUL, BANK_LO, CYCLE_R0Z, CYCLE_R0Z, BANK_HI, INVERT_R1); + uop_calc(MUL, BANK_HI, CYCLE_R0Z, INVERT_R1, BANK_LO, INVERT_X2); uop_move(BANK_LO, INVERT_X2, BANK_HI, INVERT_X2); // compute X3 and mirror to the other bank uop_calc(MUL, BANK_LO, INVERT_X2, INVERT_X2, BANK_HI, INVERT_R1); - uop_calc(MUL, BANK_HI, INVERT_R1, CYCLE_RZ, BANK_LO, INVERT_X3); + uop_calc(MUL, BANK_HI, INVERT_R1, CYCLE_R0Z, BANK_LO, INVERT_X3); uop_move(BANK_LO, INVERT_X3, BANK_HI, INVERT_X3); // compute X6 (stored in the lower bank) @@ -421,7 +420,7 @@ void fpga_modular_inv23_p384_microcode() // A3 ends up in the upper bank by itself uop_calc(MUL, BANK_HI, INVERT_A2, INVERT_A2, BANK_LO, INVERT_R1); - uop_calc(MUL, BANK_LO, INVERT_R1, CYCLE_RZ, BANK_HI, INVERT_A3); + uop_calc(MUL, BANK_LO, INVERT_R1, CYCLE_R0Z, BANK_HI, INVERT_A3); /* END_MICROCODE */ } |