1# This file is generated from a similarly-named Perl script in the BoringSSL 2# source tree. Do not edit by hand. 3 4#if defined(__has_feature) 5#if __has_feature(memory_sanitizer) && !defined(OPENSSL_NO_ASM) 6#define OPENSSL_NO_ASM 7#endif 8#endif 9 10#if defined(__x86_64__) && !defined(OPENSSL_NO_ASM) 11#if defined(BORINGSSL_PREFIX) 12#include <boringssl_prefix_symbols_asm.h> 13#endif 14.text 15 16 17.private_extern _beeu_mod_inverse_vartime 18.globl _beeu_mod_inverse_vartime 19.private_extern _beeu_mod_inverse_vartime 20.p2align 5 21_beeu_mod_inverse_vartime: 22 23 pushq %rbp 24 25 pushq %r12 26 27 pushq %r13 28 29 pushq %r14 30 31 pushq %r15 32 33 pushq %rbx 34 35 pushq %rsi 36 37 38 subq $80,%rsp 39 40 movq %rdi,0(%rsp) 41 42 43 movq $1,%r8 44 xorq %r9,%r9 45 xorq %r10,%r10 46 xorq %r11,%r11 47 xorq %rdi,%rdi 48 49 xorq %r12,%r12 50 xorq %r13,%r13 51 xorq %r14,%r14 52 xorq %r15,%r15 53 xorq %rbp,%rbp 54 55 56 vmovdqu 0(%rsi),%xmm0 57 vmovdqu 16(%rsi),%xmm1 58 vmovdqu %xmm0,48(%rsp) 59 vmovdqu %xmm1,64(%rsp) 60 61 vmovdqu 0(%rdx),%xmm0 62 vmovdqu 16(%rdx),%xmm1 63 vmovdqu %xmm0,16(%rsp) 64 vmovdqu %xmm1,32(%rsp) 65 66L$beeu_loop: 67 xorq %rbx,%rbx 68 orq 48(%rsp),%rbx 69 orq 56(%rsp),%rbx 70 orq 64(%rsp),%rbx 71 orq 72(%rsp),%rbx 72 jz L$beeu_loop_end 73 74 75 76 77 78 79 80 81 82 83 movq $1,%rcx 84 85 86L$beeu_shift_loop_XB: 87 movq %rcx,%rbx 88 andq 48(%rsp),%rbx 89 jnz L$beeu_shift_loop_end_XB 90 91 92 movq $1,%rbx 93 andq %r8,%rbx 94 jz L$shift1_0 95 addq 0(%rdx),%r8 96 adcq 8(%rdx),%r9 97 adcq 16(%rdx),%r10 98 adcq 24(%rdx),%r11 99 adcq $0,%rdi 100 101L$shift1_0: 102 shrdq $1,%r9,%r8 103 shrdq $1,%r10,%r9 104 shrdq $1,%r11,%r10 105 shrdq $1,%rdi,%r11 106 shrq $1,%rdi 107 108 shlq $1,%rcx 109 110 111 112 113 114 cmpq $0x8000000,%rcx 115 jne L$beeu_shift_loop_XB 116 117L$beeu_shift_loop_end_XB: 118 bsfq %rcx,%rcx 119 testq %rcx,%rcx 120 jz L$beeu_no_shift_XB 121 122 123 124 movq 8+48(%rsp),%rax 125 movq 16+48(%rsp),%rbx 126 movq 24+48(%rsp),%rsi 127 128 shrdq %cl,%rax,0+48(%rsp) 129 shrdq %cl,%rbx,8+48(%rsp) 130 shrdq %cl,%rsi,16+48(%rsp) 131 132 shrq %cl,%rsi 133 movq %rsi,24+48(%rsp) 134 135 136L$beeu_no_shift_XB: 137 138 movq $1,%rcx 139 140 141L$beeu_shift_loop_YA: 142 movq %rcx,%rbx 143 andq 16(%rsp),%rbx 144 jnz L$beeu_shift_loop_end_YA 145 146 147 movq $1,%rbx 148 andq %r12,%rbx 149 jz L$shift1_1 150 addq 0(%rdx),%r12 151 adcq 8(%rdx),%r13 152 adcq 16(%rdx),%r14 153 adcq 24(%rdx),%r15 154 adcq $0,%rbp 155 156L$shift1_1: 157 shrdq $1,%r13,%r12 158 shrdq $1,%r14,%r13 159 shrdq $1,%r15,%r14 160 shrdq $1,%rbp,%r15 161 shrq $1,%rbp 162 163 shlq $1,%rcx 164 165 166 167 168 169 cmpq $0x8000000,%rcx 170 jne L$beeu_shift_loop_YA 171 172L$beeu_shift_loop_end_YA: 173 bsfq %rcx,%rcx 174 testq %rcx,%rcx 175 jz L$beeu_no_shift_YA 176 177 178 179 movq 8+16(%rsp),%rax 180 movq 16+16(%rsp),%rbx 181 movq 24+16(%rsp),%rsi 182 183 shrdq %cl,%rax,0+16(%rsp) 184 shrdq %cl,%rbx,8+16(%rsp) 185 shrdq %cl,%rsi,16+16(%rsp) 186 187 shrq %cl,%rsi 188 movq %rsi,24+16(%rsp) 189 190 191L$beeu_no_shift_YA: 192 193 movq 48(%rsp),%rax 194 movq 56(%rsp),%rbx 195 movq 64(%rsp),%rsi 196 movq 72(%rsp),%rcx 197 subq 16(%rsp),%rax 198 sbbq 24(%rsp),%rbx 199 sbbq 32(%rsp),%rsi 200 sbbq 40(%rsp),%rcx 201 jnc L$beeu_B_bigger_than_A 202 203 204 movq 16(%rsp),%rax 205 movq 24(%rsp),%rbx 206 movq 32(%rsp),%rsi 207 movq 40(%rsp),%rcx 208 subq 48(%rsp),%rax 209 sbbq 56(%rsp),%rbx 210 sbbq 64(%rsp),%rsi 211 sbbq 72(%rsp),%rcx 212 movq %rax,16(%rsp) 213 movq %rbx,24(%rsp) 214 movq %rsi,32(%rsp) 215 movq %rcx,40(%rsp) 216 217 218 addq %r8,%r12 219 adcq %r9,%r13 220 adcq %r10,%r14 221 adcq %r11,%r15 222 adcq %rdi,%rbp 223 jmp L$beeu_loop 224 225L$beeu_B_bigger_than_A: 226 227 movq %rax,48(%rsp) 228 movq %rbx,56(%rsp) 229 movq %rsi,64(%rsp) 230 movq %rcx,72(%rsp) 231 232 233 addq %r12,%r8 234 adcq %r13,%r9 235 adcq %r14,%r10 236 adcq %r15,%r11 237 adcq %rbp,%rdi 238 239 jmp L$beeu_loop 240 241L$beeu_loop_end: 242 243 244 245 246 movq 16(%rsp),%rbx 247 subq $1,%rbx 248 orq 24(%rsp),%rbx 249 orq 32(%rsp),%rbx 250 orq 40(%rsp),%rbx 251 252 jnz L$beeu_err 253 254 255 256 257 movq 0(%rdx),%r8 258 movq 8(%rdx),%r9 259 movq 16(%rdx),%r10 260 movq 24(%rdx),%r11 261 xorq %rdi,%rdi 262 263L$beeu_reduction_loop: 264 movq %r12,16(%rsp) 265 movq %r13,24(%rsp) 266 movq %r14,32(%rsp) 267 movq %r15,40(%rsp) 268 movq %rbp,48(%rsp) 269 270 271 subq %r8,%r12 272 sbbq %r9,%r13 273 sbbq %r10,%r14 274 sbbq %r11,%r15 275 sbbq $0,%rbp 276 277 278 cmovcq 16(%rsp),%r12 279 cmovcq 24(%rsp),%r13 280 cmovcq 32(%rsp),%r14 281 cmovcq 40(%rsp),%r15 282 jnc L$beeu_reduction_loop 283 284 285 subq %r12,%r8 286 sbbq %r13,%r9 287 sbbq %r14,%r10 288 sbbq %r15,%r11 289 290L$beeu_save: 291 292 movq 0(%rsp),%rdi 293 294 movq %r8,0(%rdi) 295 movq %r9,8(%rdi) 296 movq %r10,16(%rdi) 297 movq %r11,24(%rdi) 298 299 300 movq $1,%rax 301 jmp L$beeu_finish 302 303L$beeu_err: 304 305 xorq %rax,%rax 306 307L$beeu_finish: 308 addq $80,%rsp 309 310 popq %rsi 311 312 popq %rbx 313 314 popq %r15 315 316 popq %r14 317 318 popq %r13 319 320 popq %r12 321 322 popq %rbp 323 324 .byte 0xf3,0xc3 325 326 327 328#endif 329