1#ifdef IN_SANDY2X 2 3/* 4 This file is basically amd64-51/fe25519_mul.s. 5*/ 6#include "fe51_namespace.h" 7#include "consts_namespace.h" 8.text 9.p2align 5 10#ifdef ASM_HIDE_SYMBOL 11ASM_HIDE_SYMBOL fe51_mul 12ASM_HIDE_SYMBOL _fe51_mul 13#endif 14.globl fe51_mul 15.globl _fe51_mul 16#ifdef __ELF__ 17.type fe51_mul, @function 18.type _fe51_mul, @function 19#endif 20fe51_mul: 21_fe51_mul: 22mov %rsp,%r11 23and $31,%r11 24add $96,%r11 25sub %r11,%rsp 26movq %r11,0(%rsp) 27movq %r12,8(%rsp) 28movq %r13,16(%rsp) 29movq %r14,24(%rsp) 30movq %r15,32(%rsp) 31movq %rbx,40(%rsp) 32movq %rbp,48(%rsp) 33movq %rdi,56(%rsp) 34mov %rdx,%rcx 35movq 24(%rsi),%rdx 36imulq $19,%rdx,%rax 37movq %rax,64(%rsp) 38mulq 16(%rcx) 39mov %rax,%r8 40mov %rdx,%r9 41movq 32(%rsi),%rdx 42imulq $19,%rdx,%rax 43movq %rax,72(%rsp) 44mulq 8(%rcx) 45add %rax,%r8 46adc %rdx,%r9 47movq 0(%rsi),%rax 48mulq 0(%rcx) 49add %rax,%r8 50adc %rdx,%r9 51movq 0(%rsi),%rax 52mulq 8(%rcx) 53mov %rax,%r10 54mov %rdx,%r11 55movq 0(%rsi),%rax 56mulq 16(%rcx) 57mov %rax,%r12 58mov %rdx,%r13 59movq 0(%rsi),%rax 60mulq 24(%rcx) 61mov %rax,%r14 62mov %rdx,%r15 63movq 0(%rsi),%rax 64mulq 32(%rcx) 65mov %rax,%rbx 66mov %rdx,%rbp 67movq 8(%rsi),%rax 68mulq 0(%rcx) 69add %rax,%r10 70adc %rdx,%r11 71movq 8(%rsi),%rax 72mulq 8(%rcx) 73add %rax,%r12 74adc %rdx,%r13 75movq 8(%rsi),%rax 76mulq 16(%rcx) 77add %rax,%r14 78adc %rdx,%r15 79movq 8(%rsi),%rax 80mulq 24(%rcx) 81add %rax,%rbx 82adc %rdx,%rbp 83movq 8(%rsi),%rdx 84imulq $19,%rdx,%rax 85mulq 32(%rcx) 86add %rax,%r8 87adc %rdx,%r9 88movq 16(%rsi),%rax 89mulq 0(%rcx) 90add %rax,%r12 91adc %rdx,%r13 92movq 16(%rsi),%rax 93mulq 8(%rcx) 94add %rax,%r14 95adc %rdx,%r15 96movq 16(%rsi),%rax 97mulq 16(%rcx) 98add %rax,%rbx 99adc %rdx,%rbp 100movq 16(%rsi),%rdx 101imulq $19,%rdx,%rax 102mulq 24(%rcx) 103add %rax,%r8 104adc %rdx,%r9 105movq 16(%rsi),%rdx 106imulq $19,%rdx,%rax 107mulq 32(%rcx) 108add %rax,%r10 109adc %rdx,%r11 110movq 24(%rsi),%rax 111mulq 0(%rcx) 112add %rax,%r14 113adc %rdx,%r15 114movq 24(%rsi),%rax 115mulq 8(%rcx) 116add %rax,%rbx 117adc %rdx,%rbp 118movq 64(%rsp),%rax 119mulq 24(%rcx) 120add %rax,%r10 121adc %rdx,%r11 122movq 64(%rsp),%rax 123mulq 32(%rcx) 124add %rax,%r12 125adc %rdx,%r13 126movq 32(%rsi),%rax 127mulq 0(%rcx) 128add %rax,%rbx 129adc %rdx,%rbp 130movq 72(%rsp),%rax 131mulq 16(%rcx) 132add %rax,%r10 133adc %rdx,%r11 134movq 72(%rsp),%rax 135mulq 24(%rcx) 136add %rax,%r12 137adc %rdx,%r13 138movq 72(%rsp),%rax 139mulq 32(%rcx) 140add %rax,%r14 141adc %rdx,%r15 142movq REDMASK51(%rip),%rsi 143shld $13,%r8,%r9 144and %rsi,%r8 145shld $13,%r10,%r11 146and %rsi,%r10 147add %r9,%r10 148shld $13,%r12,%r13 149and %rsi,%r12 150add %r11,%r12 151shld $13,%r14,%r15 152and %rsi,%r14 153add %r13,%r14 154shld $13,%rbx,%rbp 155and %rsi,%rbx 156add %r15,%rbx 157imulq $19,%rbp,%rdx 158add %rdx,%r8 159mov %r8,%rdx 160shr $51,%rdx 161add %r10,%rdx 162mov %rdx,%rcx 163shr $51,%rdx 164and %rsi,%r8 165add %r12,%rdx 166mov %rdx,%r9 167shr $51,%rdx 168and %rsi,%rcx 169add %r14,%rdx 170mov %rdx,%rax 171shr $51,%rdx 172and %rsi,%r9 173add %rbx,%rdx 174mov %rdx,%r10 175shr $51,%rdx 176and %rsi,%rax 177imulq $19,%rdx,%rdx 178add %rdx,%r8 179and %rsi,%r10 180movq %r8,0(%rdi) 181movq %rcx,8(%rdi) 182movq %r9,16(%rdi) 183movq %rax,24(%rdi) 184movq %r10,32(%rdi) 185movq 0(%rsp),%r11 186movq 8(%rsp),%r12 187movq 16(%rsp),%r13 188movq 24(%rsp),%r14 189movq 32(%rsp),%r15 190movq 40(%rsp),%rbx 191movq 48(%rsp),%rbp 192add %r11,%rsp 193mov %rdi,%rax 194mov %rsi,%rdx 195ret 196 197#endif 198