+++ /dev/null
-/* Copyright (c) 1998,2011,2014 Apple Inc. All Rights Reserved.
- *
- * NOTICE: USE OF THE MATERIALS ACCOMPANYING THIS NOTICE IS SUBJECT
- * TO THE TERMS OF THE SIGNED "FAST ELLIPTIC ENCRYPTION (FEE) REFERENCE
- * SOURCE CODE EVALUATION AGREEMENT" BETWEEN APPLE, INC. AND THE
- * ORIGINAL LICENSEE THAT OBTAINED THESE MATERIALS FROM APPLE,
- * INC. ANY USE OF THESE MATERIALS NOT PERMITTED BY SUCH AGREEMENT WILL
- * EXPOSE YOU TO LIABILITY.
- ***************************************************************************
- *
- * giantPorti486.h - OpenStep-dependent giant definitions.
- *
- * Revision History
- * ----------------
- * 06 Apr 1998 at Apple
- * Created.
- */
-
-#ifndef _CK_NSGIANT_PORT_I486_H_
-#define _CK_NSGIANT_PORT_I486_H_
-
-#include "giantIntegers.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * Add two digits, return sum. Carry bit returned as an out parameter.
- */
-static inline giantDigit giantAddDigits(
- giantDigit dig1,
- giantDigit dig2,
- giantDigit *carry) /* RETURNED, 0 or 1 */
-{
- giantDigit _sum; /* r/w %0 */
- asm volatile(
- "movl %2, %0 /* _sum = dig1 */ \n"
- "addl %3, %0 /* _sum += dig2 */ \n"
- "jc .+9 \n"
- "movl $0, %1 /* carry = 0 */ \n"
- "jmp .+7 \n"
- "movl $1, %1 /* carry = 1 */ \n"
- : "=&r" (_sum), "=&r" (*carry)
- : "r" (dig1), "r" (dig2));
- return _sum;
-}
-
-/*
- * Add a single digit value to a double digit accumulator in place.
- * Carry out of the MSD of the accumulator is not handled.
- */
-static inline void giantAddDouble(
- giantDigit *accLow, /* IN/OUT */
- giantDigit *accHigh, /* IN/OUT */
- giantDigit val)
-{
- asm volatile(
- "addl %4, %0 /* accLow += val */ \n"
- "jnc .+3 \n"
- "incl %1 /* accHigh++ */ \n"
- : "=&r" (*accLow), "=&r" (*accHigh)
- : "0" (*accLow), "1" (*accHigh), "r" (val));
-}
-
-/*
- * Subtract a - b, return difference. Borrow bit returned as an out parameter.
- */
-static inline giantDigit giantSubDigits(
- giantDigit a,
- giantDigit b,
- giantDigit *borrow) /* RETURNED, 0 or 1 */
-{
- giantDigit _diff; /* r/w %0 */
- asm volatile(
- "movl %2, %0 /* _diff = a */ \n"
- "subl %3, %0 /* _diff -= b */ \n"
- "jc .+9 \n"
- "movl $0, %1 /* borrow = 0 */ \n"
- "jmp .+7 \n"
- "movl $1, %1 /* borrow = 1 */ \n"
- : "=&r" (_diff), "=&r" (*borrow)
- : "r" (a), "r" (b));
- return _diff;
-}
-
-/*
- * Multiply two digits, return two digits.
- */
-static inline void giantMulDigits(
- giantDigit dig1,
- giantDigit dig2,
- giantDigit *lowProduct, // RETURNED, low digit
- giantDigit *hiProduct) // RETURNED, high digit
-
-{
- asm volatile(
- "movl %2, %%eax /* eax = dig1 */ \n"
- "movl %3, %%edx /* edx = dig2 */ \n"
- "mull %%edx /* eax *= dig2 */ \n"
- : "=&a" (*lowProduct), "=&d" (*hiProduct)
- : "r" (dig1), "r" (dig2)
- : "%eax", "%edx" );
-}
-
-/*
- * Multiply a vector of giantDigits, candVector, by a single giantDigit,
- * plierDigit, adding results into prodVector. Returns m.s. digit from
- * final multiply; only candLength digits of *prodVector will be written.
- *
- * This one's implemented in a .s file.
- */
-extern giantDigit vectorMult_x86(
- giantDigit plierDigit,
- giantDigit *candVector,
- unsigned candLength,
- giantDigit *prodVector);
-
-#define VectorMultiply(pd, cv, cl, pv) vectorMult_x86(pd, cv, cl, pv)
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif _CK_NSGIANT_PORT_I486_H_