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