diff options
Diffstat (limited to 'src/math/bigint/mp_asm.cpp')
-rw-r--r-- | src/math/bigint/mp_asm.cpp | 183 |
1 files changed, 0 insertions, 183 deletions
diff --git a/src/math/bigint/mp_asm.cpp b/src/math/bigint/mp_asm.cpp deleted file mode 100644 index 4fcdee7a4..000000000 --- a/src/math/bigint/mp_asm.cpp +++ /dev/null @@ -1,183 +0,0 @@ -/* -* Lowest Level MPI Algorithms -* (C) 1999-2010 Jack Lloyd -* 2006 Luca Piccarreta -* -* Distributed under the terms of the Botan license -*/ - -#include <botan/internal/mp_asm.h> -#include <botan/internal/mp_asmi.h> -#include <botan/internal/mp_core.h> -#include <botan/exceptn.h> -#include <botan/mem_ops.h> - -namespace Botan { - -extern "C" { - -/* -* Two Operand Addition, No Carry -*/ -word bigint_add2_nc(word x[], u32bit x_size, const word y[], u32bit y_size) - { - word carry = 0; - - const u32bit blocks = y_size - (y_size % 8); - - for(u32bit i = 0; i != blocks; i += 8) - carry = word8_add2(x + i, y + i, carry); - - for(u32bit i = blocks; i != y_size; ++i) - x[i] = word_add(x[i], y[i], &carry); - - for(u32bit i = y_size; i != x_size; ++i) - x[i] = word_add(x[i], 0, &carry); - - return carry; - } - -/* -* Three Operand Addition, No Carry -*/ -word bigint_add3_nc(word z[], const word x[], u32bit x_size, - const word y[], u32bit y_size) - { - if(x_size < y_size) - { return bigint_add3_nc(z, y, y_size, x, x_size); } - - word carry = 0; - - const u32bit blocks = y_size - (y_size % 8); - - for(u32bit i = 0; i != blocks; i += 8) - carry = word8_add3(z + i, x + i, y + i, carry); - - for(u32bit i = blocks; i != y_size; ++i) - z[i] = word_add(x[i], y[i], &carry); - - for(u32bit i = y_size; i != x_size; ++i) - z[i] = word_add(x[i], 0, &carry); - - return carry; - } - -/* -* Two Operand Addition -*/ -void bigint_add2(word x[], u32bit x_size, const word y[], u32bit y_size) - { - x[x_size] += bigint_add2_nc(x, x_size, y, y_size); - } - -/* -* Three Operand Addition -*/ -void bigint_add3(word z[], const word x[], u32bit x_size, - const word y[], u32bit y_size) - { - z[(x_size > y_size ? x_size : y_size)] += - bigint_add3_nc(z, x, x_size, y, y_size); - } - -/* -* Two Operand Subtraction -*/ -word bigint_sub2(word x[], u32bit x_size, const word y[], u32bit y_size) - { - word borrow = 0; - - const u32bit blocks = y_size - (y_size % 8); - - for(u32bit i = 0; i != blocks; i += 8) - borrow = word8_sub2(x + i, y + i, borrow); - - for(u32bit i = blocks; i != y_size; ++i) - x[i] = word_sub(x[i], y[i], &borrow); - - for(u32bit i = y_size; i != x_size; ++i) - x[i] = word_sub(x[i], 0, &borrow); - - return borrow; - } - -/* -* Two Operand Subtraction x = y - x -*/ -void bigint_sub2_rev(word x[], const word y[], u32bit y_size) - { - word borrow = 0; - - const u32bit blocks = y_size - (y_size % 8); - - for(u32bit i = 0; i != blocks; i += 8) - borrow = word8_sub2_rev(x + i, y + i, borrow); - - for(u32bit i = blocks; i != y_size; ++i) - x[i] = word_sub(y[i], x[i], &borrow); - - if(borrow) - throw Internal_Error("bigint_sub2_rev: x >= y"); - } - -/* -* Three Operand Subtraction -*/ -word bigint_sub3(word z[], const word x[], u32bit x_size, - const word y[], u32bit y_size) - { - word borrow = 0; - - const u32bit blocks = y_size - (y_size % 8); - - for(u32bit i = 0; i != blocks; i += 8) - borrow = word8_sub3(z + i, x + i, y + i, borrow); - - for(u32bit i = blocks; i != y_size; ++i) - z[i] = word_sub(x[i], y[i], &borrow); - - for(u32bit i = y_size; i != x_size; ++i) - z[i] = word_sub(x[i], 0, &borrow); - - return borrow; - } - -/* -* Two Operand Linear Multiply -*/ -void bigint_linmul2(word x[], u32bit x_size, word y) - { - const u32bit blocks = x_size - (x_size % 8); - - word carry = 0; - - for(u32bit i = 0; i != blocks; i += 8) - carry = word8_linmul2(x + i, y, carry); - - for(u32bit i = blocks; i != x_size; ++i) - x[i] = word_madd2(x[i], y, &carry); - - x[x_size] = carry; - } - -/* -* Three Operand Linear Multiply -*/ -void bigint_linmul3(word z[], const word x[], u32bit x_size, word y) - { - const u32bit blocks = x_size - (x_size % 8); - - word carry = 0; - - for(u32bit i = 0; i != blocks; i += 8) - carry = word8_linmul3(z + i, x + i, y, carry); - - for(u32bit i = blocks; i != x_size; ++i) - z[i] = word_madd2(x[i], y, &carry); - - z[x_size] = carry; - } - -} - -} |