1116680a4aac90f2aa7413d9095a592090648e557Ben MurdochOPTION DOTNAME 25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles).text$ SEGMENT ALIGN(256) 'CODE' 3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 4116680a4aac90f2aa7413d9095a592090648e557Ben MurdochEXTERN OPENSSL_ia32cap_P:NEAR 5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 6116680a4aac90f2aa7413d9095a592090648e557Ben MurdochPUBLIC bn_mul_mont 7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 8116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN 16 9116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbn_mul_mont PROC PUBLIC 10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[8+rsp],rdi ;WIN64 prologue 11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[16+rsp],rsi 12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,rsp 13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$SEH_begin_bn_mul_mont:: 14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rdi,rcx 15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rsi,rdx 16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rdx,r8 17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rcx,r9 18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r8,QWORD PTR[40+rsp] 19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r9,QWORD PTR[48+rsp] 20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch test r9d,3 23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch jnz $L$mul_enter 24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp r9d,8 25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch jb $L$mul_enter 26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp rdx,rsi 27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch jne $L$mul4x_enter 28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch test r9d,7 29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch jz $L$sqr8x_enter 30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch jmp $L$mul4x_enter 31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 32116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN 16 33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$mul_enter:: 34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch push rbx 35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch push rbp 36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch push r12 37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch push r13 38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch push r14 39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch push r15 40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r9d,r9d 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch lea r10,QWORD PTR[2+r9] 43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r11,rsp 44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch neg r10 45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch lea rsp,QWORD PTR[r10*8+rsp] 46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and rsp,-1024 47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[8+r9*8+rsp],r11 49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$mul_body:: 50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r12,rdx 51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r8,QWORD PTR[r8] 52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rbx,QWORD PTR[r12] 53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[rsi] 54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch xor r14,r14 56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch xor r15,r15 57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rbp,r8 59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mul rbx 60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r10,rax 61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[rcx] 62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch imul rbp,r10 64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r11,rdx 65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mul rbp 67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,rax 68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[8+rsi] 69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r13,rdx 71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch lea r15,QWORD PTR[1+r15] 73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch jmp $L$1st_enter 74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 75116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN 16 76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$1st:: 77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r13,rax 78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[r15*8+rsi] 79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r13,r11 81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r11,r10 82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[((-16))+r15*8+rsp],r13 84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r13,rdx 85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$1st_enter:: 87116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mul rbx 88116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,rax 89116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[r15*8+rcx] 90116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 91116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch lea r15,QWORD PTR[1+r15] 92116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r10,rdx 93116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 94116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mul rbp 95116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp r15,r9 96116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch jne $L$1st 97116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 98116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r13,rax 99116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[rsi] 100116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 101116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r13,r11 102116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[((-16))+r15*8+rsp],r13 104116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r13,rdx 105116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r11,r10 106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 107116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch xor rdx,rdx 108116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r13,r11 109116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[((-8))+r9*8+rsp],r13 111116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[r9*8+rsp],rdx 112116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 113116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch lea r14,QWORD PTR[1+r14] 114116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch jmp $L$outer 115116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN 16 116116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$outer:: 117116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rbx,QWORD PTR[r14*8+r12] 118116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch xor r15,r15 119116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rbp,r8 120116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r10,QWORD PTR[rsp] 121116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mul rbx 122116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,rax 123116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[rcx] 124116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 125116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 126116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch imul rbp,r10 127116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r11,rdx 128116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 129116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mul rbp 130116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,rax 131116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[8+rsi] 132116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 133116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r10,QWORD PTR[8+rsp] 134116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r13,rdx 135116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 136116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch lea r15,QWORD PTR[1+r15] 137116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch jmp $L$inner_enter 138116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 139116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN 16 140116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$inner:: 141116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r13,rax 142116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[r15*8+rsi] 143116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 144116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r13,r10 145116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r10,QWORD PTR[r15*8+rsp] 146116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 147116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[((-16))+r15*8+rsp],r13 148116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r13,rdx 149116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 150116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$inner_enter:: 151116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mul rbx 152116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,rax 153116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[r15*8+rcx] 154116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 155116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r11 156116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r11,rdx 157116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc r11,0 158116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch lea r15,QWORD PTR[1+r15] 159116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 160116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mul rbp 161116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp r15,r9 162116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch jne $L$inner 163116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 164116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r13,rax 165116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[rsi] 166116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 167116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r13,r10 168116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r10,QWORD PTR[r15*8+rsp] 169116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 170116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[((-16))+r15*8+rsp],r13 171116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r13,rdx 172116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 173116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch xor rdx,rdx 174116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r13,r11 175116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 176116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r13,r10 177116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 178116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[((-8))+r9*8+rsp],r13 179116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[r9*8+rsp],rdx 180116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 181116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch lea r14,QWORD PTR[1+r14] 182116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp r14,r9 183116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch jb $L$outer 184116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 185116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch xor r14,r14 186116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[rsp] 187116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch lea rsi,QWORD PTR[rsp] 188116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r15,r9 189116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch jmp $L$sub 190116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN 16 191116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$sub:: sbb rax,QWORD PTR[r14*8+rcx] 192116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[r14*8+rdi],rax 193116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[8+r14*8+rsi] 194116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch lea r14,QWORD PTR[1+r14] 195116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch dec r15 196116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch jnz $L$sub 197116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 198116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sbb rax,0 199116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch xor r14,r14 200116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r15,r9 201116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN 16 202116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$copy:: 203116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rsi,QWORD PTR[r14*8+rsp] 204116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rcx,QWORD PTR[r14*8+rdi] 205116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch xor rsi,rcx 206116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and rsi,rax 207116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch xor rsi,rcx 208116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[r14*8+rsp],r14 209116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[r14*8+rdi],rsi 210116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch lea r14,QWORD PTR[1+r14] 211116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sub r15,1 212116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch jnz $L$copy 213116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 214116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rsi,QWORD PTR[8+r9*8+rsp] 215116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,1 216116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r15,QWORD PTR[rsi] 217116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r14,QWORD PTR[8+rsi] 218116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r13,QWORD PTR[16+rsi] 219116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r12,QWORD PTR[24+rsi] 220116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rbp,QWORD PTR[32+rsi] 221116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rbx,QWORD PTR[40+rsi] 222116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch lea rsp,QWORD PTR[48+rsi] 223116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$mul_epilogue:: 224116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue 225116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rsi,QWORD PTR[16+rsp] 226116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DB 0F3h,0C3h ;repret 227116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$SEH_end_bn_mul_mont:: 228116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbn_mul_mont ENDP 229116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 230116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN 16 231116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbn_mul4x_mont PROC PRIVATE 232116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[8+rsp],rdi ;WIN64 prologue 233116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[16+rsp],rsi 234116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,rsp 235116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$SEH_begin_bn_mul4x_mont:: 236116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rdi,rcx 237116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rsi,rdx 238116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rdx,r8 239116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rcx,r9 240116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r8,QWORD PTR[40+rsp] 241116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r9,QWORD PTR[48+rsp] 242116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 243116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 244116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$mul4x_enter:: 245116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch push rbx 246116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch push rbp 247116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch push r12 248116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch push r13 249116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch push r14 250116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch push r15 251116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 252116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r9d,r9d 253116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch lea r10,QWORD PTR[4+r9] 254116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r11,rsp 255116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch neg r10 256116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch lea rsp,QWORD PTR[r10*8+rsp] 257116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and rsp,-1024 258116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 259116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[8+r9*8+rsp],r11 260116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$mul4x_body:: 261116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[16+r9*8+rsp],rdi 262116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r12,rdx 263116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r8,QWORD PTR[r8] 264116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rbx,QWORD PTR[r12] 265116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[rsi] 266116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 267116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch xor r14,r14 268116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch xor r15,r15 269116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 270116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rbp,r8 271116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mul rbx 272116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r10,rax 273116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[rcx] 274116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 275116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch imul rbp,r10 276116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r11,rdx 277116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 278116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mul rbp 279116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,rax 280116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[8+rsi] 281116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 282116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rdi,rdx 283116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 284116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mul rbx 285116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,rax 286116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[8+rcx] 287116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 288116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r10,rdx 289116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 290116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mul rbp 291116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add rdi,rax 292116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[16+rsi] 293116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 294116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add rdi,r11 295116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch lea r15,QWORD PTR[4+r15] 296116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 297116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[rsp],rdi 298116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r13,rdx 299116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch jmp $L$1st4x 300116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN 16 301116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$1st4x:: 302116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mul rbx 303116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,rax 304116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[((-16))+r15*8+rcx] 305116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 306116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r11,rdx 307116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 308116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mul rbp 309116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r13,rax 310116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[((-8))+r15*8+rsi] 311116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 312116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r13,r10 313116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 314116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[((-24))+r15*8+rsp],r13 315116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rdi,rdx 316116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 317116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mul rbx 318116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,rax 319116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[((-8))+r15*8+rcx] 320116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 321116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r10,rdx 322116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 323116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mul rbp 324116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add rdi,rax 325116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[r15*8+rsi] 326116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 327116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add rdi,r11 328116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 329116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[((-16))+r15*8+rsp],rdi 330116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r13,rdx 331116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 332116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mul rbx 333116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,rax 334116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[r15*8+rcx] 335116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 336116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r11,rdx 337116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 338116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mul rbp 339116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r13,rax 340116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[8+r15*8+rsi] 341116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 342116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r13,r10 343116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 344116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[((-8))+r15*8+rsp],r13 345116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rdi,rdx 346116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 347116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mul rbx 348116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,rax 349116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[8+r15*8+rcx] 350116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 351116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch lea r15,QWORD PTR[4+r15] 352116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r10,rdx 353116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 354116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mul rbp 355116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add rdi,rax 356116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[((-16))+r15*8+rsi] 357116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 358116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add rdi,r11 359116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 360116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[((-32))+r15*8+rsp],rdi 361116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r13,rdx 362116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp r15,r9 363116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch jb $L$1st4x 364116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 365116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mul rbx 366116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,rax 367116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[((-16))+r15*8+rcx] 368116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 369116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r11,rdx 370116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 371116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mul rbp 372116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r13,rax 373116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[((-8))+r15*8+rsi] 374116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 375116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r13,r10 376116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 377116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[((-24))+r15*8+rsp],r13 378116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rdi,rdx 379116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 380116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mul rbx 381116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,rax 382116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[((-8))+r15*8+rcx] 383116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 384116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r10,rdx 385116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 386116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mul rbp 387116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add rdi,rax 388116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[rsi] 389116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 390116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add rdi,r11 391116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 392116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[((-16))+r15*8+rsp],rdi 393116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r13,rdx 394116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 395116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch xor rdi,rdi 396116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r13,r10 397116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdi,0 398116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[((-8))+r15*8+rsp],r13 399116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[r15*8+rsp],rdi 400116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 401116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch lea r14,QWORD PTR[1+r14] 402116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN 4 403116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$outer4x:: 404116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rbx,QWORD PTR[r14*8+r12] 405116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch xor r15,r15 406116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r10,QWORD PTR[rsp] 407116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rbp,r8 408116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mul rbx 409116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,rax 410116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[rcx] 411116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 412116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 413116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch imul rbp,r10 414116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r11,rdx 415116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 416116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mul rbp 417116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,rax 418116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[8+rsi] 419116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 420116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rdi,rdx 421116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 422116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mul rbx 423116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,rax 424116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[8+rcx] 425116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 426116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,QWORD PTR[8+rsp] 427116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 428116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r10,rdx 429116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 430116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mul rbp 431116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add rdi,rax 432116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[16+rsi] 433116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 434116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add rdi,r11 435116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch lea r15,QWORD PTR[4+r15] 436116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 437116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[rsp],rdi 438116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r13,rdx 439116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch jmp $L$inner4x 440116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN 16 441116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$inner4x:: 442116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mul rbx 443116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,rax 444116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[((-16))+r15*8+rcx] 445116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 446116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,QWORD PTR[((-16))+r15*8+rsp] 447116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 448116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r11,rdx 449116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 450116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mul rbp 451116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r13,rax 452116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[((-8))+r15*8+rsi] 453116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 454116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r13,r10 455116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 456116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[((-24))+r15*8+rsp],r13 457116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rdi,rdx 458116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 459116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mul rbx 460116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,rax 461116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[((-8))+r15*8+rcx] 462116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 463116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,QWORD PTR[((-8))+r15*8+rsp] 464116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 465116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r10,rdx 466116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 467116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mul rbp 468116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add rdi,rax 469116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[r15*8+rsi] 470116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 471116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add rdi,r11 472116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 473116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[((-16))+r15*8+rsp],rdi 474116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r13,rdx 475116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 476116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mul rbx 477116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,rax 478116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[r15*8+rcx] 479116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 480116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,QWORD PTR[r15*8+rsp] 481116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 482116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r11,rdx 483116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 484116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mul rbp 485116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r13,rax 486116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[8+r15*8+rsi] 487116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 488116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r13,r10 489116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 490116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[((-8))+r15*8+rsp],r13 491116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rdi,rdx 492116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 493116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mul rbx 494116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,rax 495116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[8+r15*8+rcx] 496116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 497116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,QWORD PTR[8+r15*8+rsp] 498116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 499116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch lea r15,QWORD PTR[4+r15] 500116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r10,rdx 501116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 502116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mul rbp 503116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add rdi,rax 504116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[((-16))+r15*8+rsi] 505116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 506116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add rdi,r11 507116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 508116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[((-32))+r15*8+rsp],rdi 509116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r13,rdx 510116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp r15,r9 511116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch jb $L$inner4x 512116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 513116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mul rbx 514116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,rax 515116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[((-16))+r15*8+rcx] 516116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 517116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,QWORD PTR[((-16))+r15*8+rsp] 518116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 519116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r11,rdx 520116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 521116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mul rbp 522116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r13,rax 523116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[((-8))+r15*8+rsi] 524116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 525116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r13,r10 526116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 527116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[((-24))+r15*8+rsp],r13 528116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rdi,rdx 529116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 530116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mul rbx 531116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,rax 532116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[((-8))+r15*8+rcx] 533116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 534116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,QWORD PTR[((-8))+r15*8+rsp] 535116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 536116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch lea r14,QWORD PTR[1+r14] 537116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r10,rdx 538116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 539116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mul rbp 540116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add rdi,rax 541116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[rsi] 542116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 543116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add rdi,r11 544116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdx,0 545116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[((-16))+r15*8+rsp],rdi 546116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r13,rdx 547116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 548116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch xor rdi,rdi 549116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r13,r10 550116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdi,0 551116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r13,QWORD PTR[r9*8+rsp] 552116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adc rdi,0 553116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[((-8))+r15*8+rsp],r13 554116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[r15*8+rsp],rdi 555116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 556116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp r14,r9 557116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch jb $L$outer4x 558116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rdi,QWORD PTR[16+r9*8+rsp] 559116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[rsp] 560116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rdx,QWORD PTR[8+rsp] 561116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch shr r9,2 562116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch lea rsi,QWORD PTR[rsp] 563116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch xor r14,r14 564116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 565116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sub rax,QWORD PTR[rcx] 566116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rbx,QWORD PTR[16+rsi] 567116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rbp,QWORD PTR[24+rsi] 568116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sbb rdx,QWORD PTR[8+rcx] 569116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch lea r15,QWORD PTR[((-1))+r9] 570116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch jmp $L$sub4x 571116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN 16 572116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$sub4x:: 573116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[r14*8+rdi],rax 574116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[8+r14*8+rdi],rdx 575116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sbb rbx,QWORD PTR[16+r14*8+rcx] 576116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[32+r14*8+rsi] 577116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rdx,QWORD PTR[40+r14*8+rsi] 578116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sbb rbp,QWORD PTR[24+r14*8+rcx] 579116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[16+r14*8+rdi],rbx 580116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[24+r14*8+rdi],rbp 581116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sbb rax,QWORD PTR[32+r14*8+rcx] 582116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rbx,QWORD PTR[48+r14*8+rsi] 583116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rbp,QWORD PTR[56+r14*8+rsi] 584116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sbb rdx,QWORD PTR[40+r14*8+rcx] 585116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch lea r14,QWORD PTR[4+r14] 586116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch dec r15 587116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch jnz $L$sub4x 588116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 589116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[r14*8+rdi],rax 590116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[32+r14*8+rsi] 591116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sbb rbx,QWORD PTR[16+r14*8+rcx] 592116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[8+r14*8+rdi],rdx 593116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sbb rbp,QWORD PTR[24+r14*8+rcx] 594116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[16+r14*8+rdi],rbx 595116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 596116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sbb rax,0 59703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)DB 66h, 48h, 0fh, 6eh, 0c0h 598116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch punpcklqdq xmm0,xmm0 599116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[24+r14*8+rdi],rbp 600116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch xor r14,r14 601116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 602116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r15,r9 603116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch pxor xmm5,xmm5 604116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch jmp $L$copy4x 605116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN 16 606116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$copy4x:: 607116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch movdqu xmm2,XMMWORD PTR[r14*1+rsp] 608116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch movdqu xmm4,XMMWORD PTR[16+r14*1+rsp] 609116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch movdqu xmm1,XMMWORD PTR[r14*1+rdi] 610116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch movdqu xmm3,XMMWORD PTR[16+r14*1+rdi] 611116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch pxor xmm2,xmm1 612116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch pxor xmm4,xmm3 613116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch pand xmm2,xmm0 614116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch pand xmm4,xmm0 615116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch pxor xmm2,xmm1 616116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch pxor xmm4,xmm3 617116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch movdqu XMMWORD PTR[r14*1+rdi],xmm2 618116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch movdqu XMMWORD PTR[16+r14*1+rdi],xmm4 619116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch movdqa XMMWORD PTR[r14*1+rsp],xmm5 620116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch movdqa XMMWORD PTR[16+r14*1+rsp],xmm5 621116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 622116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch lea r14,QWORD PTR[32+r14] 623116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch dec r15 624116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch jnz $L$copy4x 625116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 626116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch shl r9,2 627116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rsi,QWORD PTR[8+r9*8+rsp] 628116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,1 629116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r15,QWORD PTR[rsi] 630116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r14,QWORD PTR[8+rsi] 631116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r13,QWORD PTR[16+rsi] 632116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r12,QWORD PTR[24+rsi] 633116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rbp,QWORD PTR[32+rsi] 634116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rbx,QWORD PTR[40+rsi] 635116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch lea rsp,QWORD PTR[48+rsi] 636116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$mul4x_epilogue:: 637116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue 638116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rsi,QWORD PTR[16+rsp] 639116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DB 0F3h,0C3h ;repret 640116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$SEH_end_bn_mul4x_mont:: 641116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbn_mul4x_mont ENDP 642116680a4aac90f2aa7413d9095a592090648e557Ben MurdochEXTERN bn_sqr8x_internal:NEAR 643116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 644116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 645116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN 32 646116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbn_sqr8x_mont PROC PRIVATE 647116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[8+rsp],rdi ;WIN64 prologue 648116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[16+rsp],rsi 649116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,rsp 650116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$SEH_begin_bn_sqr8x_mont:: 651116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rdi,rcx 652116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rsi,rdx 653116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rdx,r8 654116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rcx,r9 655116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r8,QWORD PTR[40+rsp] 656116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r9,QWORD PTR[48+rsp] 657116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 658116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 659116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$sqr8x_enter:: 660116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,rsp 661116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch push rbx 662116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch push rbp 663116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch push r12 664116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch push r13 665116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch push r14 666116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch push r15 667116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 668116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r10d,r9d 669116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch shl r9d,3 670116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch shl r10,3+2 671116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch neg r9 672116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 673116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 674116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 675116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 676116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 677116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 678116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch lea r11,QWORD PTR[((-64))+r9*4+rsp] 679116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r8,QWORD PTR[r8] 680116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sub r11,rsi 681116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r11,4095 682116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp r10,r11 683116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch jb $L$sqr8x_sp_alt 684116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sub rsp,r11 685116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch lea rsp,QWORD PTR[((-64))+r9*4+rsp] 686116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch jmp $L$sqr8x_sp_done 687116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 688116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN 32 689116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$sqr8x_sp_alt:: 690116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch lea r10,QWORD PTR[((4096-64))+r9*4] 691116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch lea rsp,QWORD PTR[((-64))+r9*4+rsp] 692116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sub r11,r10 693116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r10,0 694116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmovc r11,r10 695116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sub rsp,r11 696116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$sqr8x_sp_done:: 697116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and rsp,-64 698116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r10,r9 699116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch neg r9 700116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 701116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch lea r11,QWORD PTR[64+r9*2+rsp] 702116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[32+rsp],r8 703116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[40+rsp],rax 704116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$sqr8x_body:: 705116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 706116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rbp,r9 707116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB 102,73,15,110,211 708116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch shr rbp,3+2 709116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov eax,DWORD PTR[((OPENSSL_ia32cap_P+8))] 710116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch jmp $L$sqr8x_copy_n 711116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 712116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN 32 713116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$sqr8x_copy_n:: 714116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch movq xmm0,QWORD PTR[rcx] 715116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch movq xmm1,QWORD PTR[8+rcx] 716116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch movq xmm3,QWORD PTR[16+rcx] 717116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch movq xmm4,QWORD PTR[24+rcx] 718116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch lea rcx,QWORD PTR[32+rcx] 719116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch movdqa XMMWORD PTR[r11],xmm0 720116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch movdqa XMMWORD PTR[16+r11],xmm1 721116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch movdqa XMMWORD PTR[32+r11],xmm3 722116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch movdqa XMMWORD PTR[48+r11],xmm4 723116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch lea r11,QWORD PTR[64+r11] 724116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch dec rbp 725116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch jnz $L$sqr8x_copy_n 726116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 727116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch pxor xmm0,xmm0 728116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB 102,72,15,110,207 729116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB 102,73,15,110,218 730116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch call bn_sqr8x_internal 731116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 732116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch pxor xmm0,xmm0 733116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch lea rax,QWORD PTR[48+rsp] 734116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch lea rdx,QWORD PTR[64+r9*2+rsp] 735116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch shr r9,3+2 736116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rsi,QWORD PTR[40+rsp] 737116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch jmp $L$sqr8x_zero 738116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 739116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN 32 740116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$sqr8x_zero:: 741116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch movdqa XMMWORD PTR[rax],xmm0 742116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch movdqa XMMWORD PTR[16+rax],xmm0 743116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch movdqa XMMWORD PTR[32+rax],xmm0 744116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch movdqa XMMWORD PTR[48+rax],xmm0 745116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch lea rax,QWORD PTR[64+rax] 746116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch movdqa XMMWORD PTR[rdx],xmm0 747116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch movdqa XMMWORD PTR[16+rdx],xmm0 748116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch movdqa XMMWORD PTR[32+rdx],xmm0 749116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch movdqa XMMWORD PTR[48+rdx],xmm0 750116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch lea rdx,QWORD PTR[64+rdx] 751116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch dec r9 752116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch jnz $L$sqr8x_zero 753116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 754116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,1 755116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r15,QWORD PTR[((-48))+rsi] 756116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r14,QWORD PTR[((-40))+rsi] 757116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r13,QWORD PTR[((-32))+rsi] 758116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r12,QWORD PTR[((-24))+rsi] 759116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rbp,QWORD PTR[((-16))+rsi] 760116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rbx,QWORD PTR[((-8))+rsi] 761116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch lea rsp,QWORD PTR[rsi] 762116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$sqr8x_epilogue:: 763116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rdi,QWORD PTR[8+rsp] ;WIN64 epilogue 764116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rsi,QWORD PTR[16+rsp] 765116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DB 0F3h,0C3h ;repret 766116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$SEH_end_bn_sqr8x_mont:: 767116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbn_sqr8x_mont ENDP 768116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB 77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105 769116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB 112,108,105,99,97,116,105,111,110,32,102,111,114,32,120,56 770116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB 54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83 771116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB 32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115 772116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB 115,108,46,111,114,103,62,0 773116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN 16 774116680a4aac90f2aa7413d9095a592090648e557Ben MurdochEXTERN __imp_RtlVirtualUnwind:NEAR 775116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 776116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN 16 777116680a4aac90f2aa7413d9095a592090648e557Ben Murdochmul_handler PROC PRIVATE 778116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch push rsi 779116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch push rdi 780116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch push rbx 781116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch push rbp 782116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch push r12 783116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch push r13 784116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch push r14 785116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch push r15 786116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch pushfq 787116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sub rsp,64 788116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 789116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[120+r8] 790116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rbx,QWORD PTR[248+r8] 791116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 792116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rsi,QWORD PTR[8+r9] 793116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r11,QWORD PTR[56+r9] 794116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 795116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r10d,DWORD PTR[r11] 796116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch lea r10,QWORD PTR[r10*1+rsi] 797116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp rbx,r10 798116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch jb $L$common_seh_tail 799116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 800116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[152+r8] 801116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 802116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r10d,DWORD PTR[4+r11] 803116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch lea r10,QWORD PTR[r10*1+rsi] 804116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp rbx,r10 805116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch jae $L$common_seh_tail 806116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 807116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r10,QWORD PTR[192+r8] 808116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[8+r10*8+rax] 809116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch lea rax,QWORD PTR[48+rax] 810116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 811116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rbx,QWORD PTR[((-8))+rax] 812116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rbp,QWORD PTR[((-16))+rax] 813116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r12,QWORD PTR[((-24))+rax] 814116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r13,QWORD PTR[((-32))+rax] 815116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r14,QWORD PTR[((-40))+rax] 816116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r15,QWORD PTR[((-48))+rax] 817116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[144+r8],rbx 818116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[160+r8],rbp 819116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[216+r8],r12 820116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[224+r8],r13 821116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[232+r8],r14 822116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[240+r8],r15 823116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 824116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch jmp $L$common_seh_tail 825116680a4aac90f2aa7413d9095a592090648e557Ben Murdochmul_handler ENDP 826116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 827116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 828116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN 16 829116680a4aac90f2aa7413d9095a592090648e557Ben Murdochsqr_handler PROC PRIVATE 830116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch push rsi 831116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch push rdi 832116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch push rbx 833116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch push rbp 834116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch push r12 835116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch push r13 836116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch push r14 837116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch push r15 838116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch pushfq 839116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sub rsp,64 840116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 841116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[120+r8] 842116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rbx,QWORD PTR[248+r8] 843116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 844116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rsi,QWORD PTR[8+r9] 845116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r11,QWORD PTR[56+r9] 846116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 847116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r10d,DWORD PTR[r11] 848116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch lea r10,QWORD PTR[r10*1+rsi] 849116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp rbx,r10 850116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch jb $L$common_seh_tail 851116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 852116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[152+r8] 853116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 854116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r10d,DWORD PTR[4+r11] 855116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch lea r10,QWORD PTR[r10*1+rsi] 856116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp rbx,r10 857116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch jae $L$common_seh_tail 858116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 859116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rax,QWORD PTR[40+rax] 860116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 861116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rbx,QWORD PTR[((-8))+rax] 862116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rbp,QWORD PTR[((-16))+rax] 863116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r12,QWORD PTR[((-24))+rax] 864116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r13,QWORD PTR[((-32))+rax] 865116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r14,QWORD PTR[((-40))+rax] 866116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r15,QWORD PTR[((-48))+rax] 867116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[144+r8],rbx 868116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[160+r8],rbp 869116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[216+r8],r12 870116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[224+r8],r13 871116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[232+r8],r14 872116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[240+r8],r15 873116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 874116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$common_seh_tail:: 875116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rdi,QWORD PTR[8+rax] 876116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rsi,QWORD PTR[16+rax] 877116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[152+r8],rax 878116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[168+r8],rsi 879116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[176+r8],rdi 880116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 881116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rdi,QWORD PTR[40+r9] 882116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rsi,r8 883116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov ecx,154 884116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DD 0a548f3fch 885116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 886116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rsi,r9 887116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch xor rcx,rcx 888116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov rdx,QWORD PTR[8+rsi] 889116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r8,QWORD PTR[rsi] 890116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r9,QWORD PTR[16+rsi] 891116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r10,QWORD PTR[40+rsi] 892116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch lea r11,QWORD PTR[56+rsi] 893116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch lea r12,QWORD PTR[24+rsi] 894116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[32+rsp],r10 895116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[40+rsp],r11 896116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[48+rsp],r12 897116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov QWORD PTR[56+rsp],rcx 898116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch call QWORD PTR[__imp_RtlVirtualUnwind] 899116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 900116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov eax,1 901116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add rsp,64 902116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch popfq 903116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch pop r15 904116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch pop r14 905116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch pop r13 906116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch pop r12 907116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch pop rbp 908116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch pop rbx 909116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch pop rdi 910116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch pop rsi 911116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DB 0F3h,0C3h ;repret 912116680a4aac90f2aa7413d9095a592090648e557Ben Murdochsqr_handler ENDP 913116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 914116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.text$ ENDS 915116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.pdata SEGMENT READONLY ALIGN(4) 916116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN 4 917116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DD imagerel $L$SEH_begin_bn_mul_mont 918116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DD imagerel $L$SEH_end_bn_mul_mont 919116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DD imagerel $L$SEH_info_bn_mul_mont 920116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 921116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DD imagerel $L$SEH_begin_bn_mul4x_mont 922116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DD imagerel $L$SEH_end_bn_mul4x_mont 923116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DD imagerel $L$SEH_info_bn_mul4x_mont 924116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 925116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DD imagerel $L$SEH_begin_bn_sqr8x_mont 926116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DD imagerel $L$SEH_end_bn_sqr8x_mont 927116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DD imagerel $L$SEH_info_bn_sqr8x_mont 928116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.pdata ENDS 929116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.xdata SEGMENT READONLY ALIGN(8) 930116680a4aac90f2aa7413d9095a592090648e557Ben MurdochALIGN 8 931116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$SEH_info_bn_mul_mont:: 932116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB 9,0,0,0 933116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DD imagerel mul_handler 934116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DD imagerel $L$mul_body,imagerel $L$mul_epilogue 935116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$SEH_info_bn_mul4x_mont:: 936116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB 9,0,0,0 937116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DD imagerel mul_handler 938116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DD imagerel $L$mul4x_body,imagerel $L$mul4x_epilogue 939116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch$L$SEH_info_bn_sqr8x_mont:: 940116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDB 9,0,0,0 941116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DD imagerel sqr_handler 942116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DD imagerel $L$sqr8x_body,imagerel $L$sqr8x_epilogue 943116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 944116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.xdata ENDS 945116680a4aac90f2aa7413d9095a592090648e557Ben MurdochEND 946