9 #ifndef BOTAN_MP_ASM_INTERNAL_H__    10 #define BOTAN_MP_ASM_INTERNAL_H__    12 #include <botan/internal/mp_asm.h>    22   #define ASM(x) x "\n\t"    25 #define ADDSUB2_OP(OPERATION, INDEX)                     \    26         ASM("movl 4*" #INDEX "(%[y]), %[carry]")         \    27         ASM(OPERATION " %[carry], 4*" #INDEX "(%[x])")   \    29 #define ADDSUB3_OP(OPERATION, INDEX)                     \    30         ASM("movl 4*" #INDEX "(%[x]), %[carry]")         \    31         ASM(OPERATION " 4*" #INDEX "(%[y]), %[carry]")   \    32         ASM("movl %[carry], 4*" #INDEX "(%[z])")         \    34 #define LINMUL_OP(WRITE_TO, INDEX)                       \    35         ASM("movl 4*" #INDEX "(%[x]),%%eax")             \    37         ASM("addl %[carry],%%eax")                       \    38         ASM("adcl $0,%%edx")                             \    39         ASM("movl %%edx,%[carry]")                       \    40         ASM("movl %%eax, 4*" #INDEX "(%[" WRITE_TO "])")    42 #define MULADD_OP(IGNORED, INDEX)                        \    43         ASM("movl 4*" #INDEX "(%[x]),%%eax")             \    45         ASM("addl %[carry],%%eax")                       \    46         ASM("adcl $0,%%edx")                             \    47         ASM("addl 4*" #INDEX "(%[z]),%%eax")             \    48         ASM("adcl $0,%%edx")                             \    49         ASM("movl %%edx,%[carry]")                       \    50         ASM("movl %%eax, 4*" #INDEX " (%[z])")    52 #define DO_8_TIMES(MACRO, ARG) \    62 #define ADD_OR_SUBTRACT(CORE_CODE)     \    63         ASM("rorl %[carry]")           \    65         ASM("sbbl %[carry],%[carry]")  \    71 inline word 
word_add(word x, word y, word* carry)
    75       : [x]
"=r"(x), [carry]
"=r"(*carry)
    76       : 
"0"(x), [y]
"rm"(y), 
"1"(*carry)
    84 inline word 
word8_add2(word x[8], 
const word y[8], word carry)
    89       : [x]
"r"(x), [y]
"r"(y), 
"0"(carry)
    97 inline word 
word8_add3(word z[8], 
const word x[8], 
const word y[8], word carry)
   102       : [x]
"r"(x), [y]
"r"(y), [z]
"r"(z), 
"0"(carry)
   110 inline word 
word_sub(word x, word y, word* carry)
   114       : [x]
"=r"(x), [carry]
"=r"(*carry)
   115       : 
"0"(x), [y]
"rm"(y), 
"1"(*carry)
   123 inline word 
word8_sub2(word x[8], 
const word y[8], word carry)
   128       : [x]
"r"(x), [y]
"r"(y), 
"0"(carry)
   136 inline word 
word8_sub2_rev(word x[8], 
const word y[8], word carry)
   141       : [x]
"r"(y), [y]
"r"(x), [z]
"r"(x), 
"0"(carry)
   149 inline word 
word8_sub3(word z[8], 
const word x[8], 
const word y[8], word carry)
   154       : [x]
"r"(x), [y]
"r"(y), [z]
"r"(z), 
"0"(carry)
   167       : [x]
"r"(x), [y]
"rm"(y), 
"0"(carry)
   168       : 
"cc", 
"%eax", 
"%edx");
   175 inline word 
word8_linmul3(word z[8], 
const word x[8], word y, word carry)
   180       : [z]
"r"(z), [x]
"r"(x), [y]
"rm"(y), 
"0"(carry)
   181       : 
"cc", 
"%eax", 
"%edx");
   188 inline word 
word8_madd3(word z[8], 
const word x[8], word y, word carry)
   193       : [z]
"r"(z), [x]
"r"(x), [y]
"rm"(y), 
"0"(carry)
   194       : 
"cc", 
"%eax", 
"%edx");
   201 inline void word3_muladd(word* w2, word* w1, word* w0, word x, word y)
   206       ASM(
"addl %[x],%[w0]")
   207       ASM(
"adcl %[y],%[w1]")
   210       : [w0]
"=r"(*w0), [w1]
"=r"(*w1), [w2]
"=r"(*w2)
   211       : [x]
"a"(x), [y]
"d"(y), 
"0"(*w0), 
"1"(*w1), 
"2"(*w2)
   218 inline void word3_muladd_2(word* w2, word* w1, word* w0, word x, word y)
   223       ASM(
"addl %[x],%[w0]")
   224       ASM(
"adcl %[y],%[w1]")
   227       ASM(
"addl %[x],%[w0]")
   228       ASM(
"adcl %[y],%[w1]")
   231       : [w0]
"=r"(*w0), [w1]
"=r"(*w1), [w2]
"=r"(*w2)
   232       : [x]
"a"(x), [y]
"d"(y), 
"0"(*w0), 
"1"(*w1), 
"2"(*w2)
 word word8_sub2_rev(word x[8], const word y[8], word carry)
word word8_add2(word x[8], const word y[8], word carry)
#define DO_8_TIMES(MACRO, ARG)
word word8_linmul3(word z[8], const word x[8], word y, word carry)
#define ADDSUB2_OP(OPERATION, INDEX)
word word8_sub2(word x[8], const word y[8], word carry)
#define LINMUL_OP(WRITE_TO, INDEX)
word word8_madd3(word z[8], const word x[8], word y, word carry)
word word8_linmul2(word x[8], word y, word carry)
void word3_muladd(word *w2, word *w1, word *w0, word a, word b)
word word8_add3(word z[8], const word x[8], const word y[8], word carry)
word word_sub(word x, word y, word *carry)
void word3_muladd_2(word *w2, word *w1, word *w0, word a, word b)
word word_add(word x, word y, word *carry)
#define MULADD_OP(IGNORED, INDEX)
word word8_sub3(word z[8], const word x[8], const word y[8], word carry)
#define ADDSUB3_OP(OPERATION, INDEX)
#define ADD_OR_SUBTRACT(CORE_CODE)