; 1 "crypto/md5/md5-masm-x86_64.S.tmp"
; 1 "<built-in>" 1
; 1 "<built-in>" 3
; 343 "<built-in>" 3
; 1 "<command line>" 1
; 1 "<built-in>" 2
; 1 "crypto/md5/md5-masm-x86_64.S.tmp" 2
OPTION	DOTNAME

; 1 "./crypto/x86_arch.h" 1


; 16 "./crypto/x86_arch.h"









; 40 "./crypto/x86_arch.h"













































; 3 "crypto/md5/md5-masm-x86_64.S.tmp" 2
.text$	SEGMENT ALIGN(64) 'CODE'
ALIGN	16

PUBLIC	md5_block_asm_data_order

md5_block_asm_data_order	PROC PUBLIC
	mov	QWORD PTR[8+rsp],rdi	;WIN64 prologue
	mov	QWORD PTR[16+rsp],rsi
	mov	rax,rsp
$L$SEH_begin_md5_block_asm_data_order::
	mov	rdi,rcx
	mov	rsi,rdx
	mov	rdx,r8


	push	rbp
	push	rbx
	push	r12
	push	r14
	push	r15
$L$prologue::




	mov	rbp,rdi
	shl	rdx,6
	lea	rdi,QWORD PTR[rdx*1+rsi]
	mov	eax,DWORD PTR[rbp]
	mov	ebx,DWORD PTR[4+rbp]
	mov	ecx,DWORD PTR[8+rbp]
	mov	edx,DWORD PTR[12+rbp]







	cmp	rsi,rdi
	je	$L$end				


$L$loop::
	mov	r8d,eax
	mov	r9d,ebx
	mov	r14d,ecx
	mov	r15d,edx
	mov	r10d,DWORD PTR[rsi]
	mov	r11d,edx
	xor	r11d,ecx
	lea	eax,DWORD PTR[((-680876936))+r10*1+rax]
	and	r11d,ebx
	xor	r11d,edx
	mov	r10d,DWORD PTR[4+rsi]
	add	eax,r11d
	rol	eax,7
	mov	r11d,ecx
	add	eax,ebx
	xor	r11d,ebx
	lea	edx,DWORD PTR[((-389564586))+r10*1+rdx]
	and	r11d,eax
	xor	r11d,ecx
	mov	r10d,DWORD PTR[8+rsi]
	add	edx,r11d
	rol	edx,12
	mov	r11d,ebx
	add	edx,eax
	xor	r11d,eax
	lea	ecx,DWORD PTR[606105819+r10*1+rcx]
	and	r11d,edx
	xor	r11d,ebx
	mov	r10d,DWORD PTR[12+rsi]
	add	ecx,r11d
	rol	ecx,17
	mov	r11d,eax
	add	ecx,edx
	xor	r11d,edx
	lea	ebx,DWORD PTR[((-1044525330))+r10*1+rbx]
	and	r11d,ecx
	xor	r11d,eax
	mov	r10d,DWORD PTR[16+rsi]
	add	ebx,r11d
	rol	ebx,22
	mov	r11d,edx
	add	ebx,ecx
	xor	r11d,ecx
	lea	eax,DWORD PTR[((-176418897))+r10*1+rax]
	and	r11d,ebx
	xor	r11d,edx
	mov	r10d,DWORD PTR[20+rsi]
	add	eax,r11d
	rol	eax,7
	mov	r11d,ecx
	add	eax,ebx
	xor	r11d,ebx
	lea	edx,DWORD PTR[1200080426+r10*1+rdx]
	and	r11d,eax
	xor	r11d,ecx
	mov	r10d,DWORD PTR[24+rsi]
	add	edx,r11d
	rol	edx,12
	mov	r11d,ebx
	add	edx,eax
	xor	r11d,eax
	lea	ecx,DWORD PTR[((-1473231341))+r10*1+rcx]
	and	r11d,edx
	xor	r11d,ebx
	mov	r10d,DWORD PTR[28+rsi]
	add	ecx,r11d
	rol	ecx,17
	mov	r11d,eax
	add	ecx,edx
	xor	r11d,edx
	lea	ebx,DWORD PTR[((-45705983))+r10*1+rbx]
	and	r11d,ecx
	xor	r11d,eax
	mov	r10d,DWORD PTR[32+rsi]
	add	ebx,r11d
	rol	ebx,22
	mov	r11d,edx
	add	ebx,ecx
	xor	r11d,ecx
	lea	eax,DWORD PTR[1770035416+r10*1+rax]
	and	r11d,ebx
	xor	r11d,edx
	mov	r10d,DWORD PTR[36+rsi]
	add	eax,r11d
	rol	eax,7
	mov	r11d,ecx
	add	eax,ebx
	xor	r11d,ebx
	lea	edx,DWORD PTR[((-1958414417))+r10*1+rdx]
	and	r11d,eax
	xor	r11d,ecx
	mov	r10d,DWORD PTR[40+rsi]
	add	edx,r11d
	rol	edx,12
	mov	r11d,ebx
	add	edx,eax
	xor	r11d,eax
	lea	ecx,DWORD PTR[((-42063))+r10*1+rcx]
	and	r11d,edx
	xor	r11d,ebx
	mov	r10d,DWORD PTR[44+rsi]
	add	ecx,r11d
	rol	ecx,17
	mov	r11d,eax
	add	ecx,edx
	xor	r11d,edx
	lea	ebx,DWORD PTR[((-1990404162))+r10*1+rbx]
	and	r11d,ecx
	xor	r11d,eax
	mov	r10d,DWORD PTR[48+rsi]
	add	ebx,r11d
	rol	ebx,22
	mov	r11d,edx
	add	ebx,ecx
	xor	r11d,ecx
	lea	eax,DWORD PTR[1804603682+r10*1+rax]
	and	r11d,ebx
	xor	r11d,edx
	mov	r10d,DWORD PTR[52+rsi]
	add	eax,r11d
	rol	eax,7
	mov	r11d,ecx
	add	eax,ebx
	xor	r11d,ebx
	lea	edx,DWORD PTR[((-40341101))+r10*1+rdx]
	and	r11d,eax
	xor	r11d,ecx
	mov	r10d,DWORD PTR[56+rsi]
	add	edx,r11d
	rol	edx,12
	mov	r11d,ebx
	add	edx,eax
	xor	r11d,eax
	lea	ecx,DWORD PTR[((-1502002290))+r10*1+rcx]
	and	r11d,edx
	xor	r11d,ebx
	mov	r10d,DWORD PTR[60+rsi]
	add	ecx,r11d
	rol	ecx,17
	mov	r11d,eax
	add	ecx,edx
	xor	r11d,edx
	lea	ebx,DWORD PTR[1236535329+r10*1+rbx]
	and	r11d,ecx
	xor	r11d,eax
	mov	r10d,DWORD PTR[rsi]
	add	ebx,r11d
	rol	ebx,22
	mov	r11d,edx
	add	ebx,ecx
	mov	r10d,DWORD PTR[4+rsi]
	mov	r11d,edx
	mov	r12d,edx
	not	r11d
	lea	eax,DWORD PTR[((-165796510))+r10*1+rax]
	and	r12d,ebx
	and	r11d,ecx
	mov	r10d,DWORD PTR[24+rsi]
	or	r12d,r11d
	mov	r11d,ecx
	add	eax,r12d
	mov	r12d,ecx
	rol	eax,5
	add	eax,ebx
	not	r11d
	lea	edx,DWORD PTR[((-1069501632))+r10*1+rdx]
	and	r12d,eax
	and	r11d,ebx
	mov	r10d,DWORD PTR[44+rsi]
	or	r12d,r11d
	mov	r11d,ebx
	add	edx,r12d
	mov	r12d,ebx
	rol	edx,9
	add	edx,eax
	not	r11d
	lea	ecx,DWORD PTR[643717713+r10*1+rcx]
	and	r12d,edx
	and	r11d,eax
	mov	r10d,DWORD PTR[rsi]
	or	r12d,r11d
	mov	r11d,eax
	add	ecx,r12d
	mov	r12d,eax
	rol	ecx,14
	add	ecx,edx
	not	r11d
	lea	ebx,DWORD PTR[((-373897302))+r10*1+rbx]
	and	r12d,ecx
	and	r11d,edx
	mov	r10d,DWORD PTR[20+rsi]
	or	r12d,r11d
	mov	r11d,edx
	add	ebx,r12d
	mov	r12d,edx
	rol	ebx,20
	add	ebx,ecx
	not	r11d
	lea	eax,DWORD PTR[((-701558691))+r10*1+rax]
	and	r12d,ebx
	and	r11d,ecx
	mov	r10d,DWORD PTR[40+rsi]
	or	r12d,r11d
	mov	r11d,ecx
	add	eax,r12d
	mov	r12d,ecx
	rol	eax,5
	add	eax,ebx
	not	r11d
	lea	edx,DWORD PTR[38016083+r10*1+rdx]
	and	r12d,eax
	and	r11d,ebx
	mov	r10d,DWORD PTR[60+rsi]
	or	r12d,r11d
	mov	r11d,ebx
	add	edx,r12d
	mov	r12d,ebx
	rol	edx,9
	add	edx,eax
	not	r11d
	lea	ecx,DWORD PTR[((-660478335))+r10*1+rcx]
	and	r12d,edx
	and	r11d,eax
	mov	r10d,DWORD PTR[16+rsi]
	or	r12d,r11d
	mov	r11d,eax
	add	ecx,r12d
	mov	r12d,eax
	rol	ecx,14
	add	ecx,edx
	not	r11d
	lea	ebx,DWORD PTR[((-405537848))+r10*1+rbx]
	and	r12d,ecx
	and	r11d,edx
	mov	r10d,DWORD PTR[36+rsi]
	or	r12d,r11d
	mov	r11d,edx
	add	ebx,r12d
	mov	r12d,edx
	rol	ebx,20
	add	ebx,ecx
	not	r11d
	lea	eax,DWORD PTR[568446438+r10*1+rax]
	and	r12d,ebx
	and	r11d,ecx
	mov	r10d,DWORD PTR[56+rsi]
	or	r12d,r11d
	mov	r11d,ecx
	add	eax,r12d
	mov	r12d,ecx
	rol	eax,5
	add	eax,ebx
	not	r11d
	lea	edx,DWORD PTR[((-1019803690))+r10*1+rdx]
	and	r12d,eax
	and	r11d,ebx
	mov	r10d,DWORD PTR[12+rsi]
	or	r12d,r11d
	mov	r11d,ebx
	add	edx,r12d
	mov	r12d,ebx
	rol	edx,9
	add	edx,eax
	not	r11d
	lea	ecx,DWORD PTR[((-187363961))+r10*1+rcx]
	and	r12d,edx
	and	r11d,eax
	mov	r10d,DWORD PTR[32+rsi]
	or	r12d,r11d
	mov	r11d,eax
	add	ecx,r12d
	mov	r12d,eax
	rol	ecx,14
	add	ecx,edx
	not	r11d
	lea	ebx,DWORD PTR[1163531501+r10*1+rbx]
	and	r12d,ecx
	and	r11d,edx
	mov	r10d,DWORD PTR[52+rsi]
	or	r12d,r11d
	mov	r11d,edx
	add	ebx,r12d
	mov	r12d,edx
	rol	ebx,20
	add	ebx,ecx
	not	r11d
	lea	eax,DWORD PTR[((-1444681467))+r10*1+rax]
	and	r12d,ebx
	and	r11d,ecx
	mov	r10d,DWORD PTR[8+rsi]
	or	r12d,r11d
	mov	r11d,ecx
	add	eax,r12d
	mov	r12d,ecx
	rol	eax,5
	add	eax,ebx
	not	r11d
	lea	edx,DWORD PTR[((-51403784))+r10*1+rdx]
	and	r12d,eax
	and	r11d,ebx
	mov	r10d,DWORD PTR[28+rsi]
	or	r12d,r11d
	mov	r11d,ebx
	add	edx,r12d
	mov	r12d,ebx
	rol	edx,9
	add	edx,eax
	not	r11d
	lea	ecx,DWORD PTR[1735328473+r10*1+rcx]
	and	r12d,edx
	and	r11d,eax
	mov	r10d,DWORD PTR[48+rsi]
	or	r12d,r11d
	mov	r11d,eax
	add	ecx,r12d
	mov	r12d,eax
	rol	ecx,14
	add	ecx,edx
	not	r11d
	lea	ebx,DWORD PTR[((-1926607734))+r10*1+rbx]
	and	r12d,ecx
	and	r11d,edx
	mov	r10d,DWORD PTR[rsi]
	or	r12d,r11d
	mov	r11d,edx
	add	ebx,r12d
	mov	r12d,edx
	rol	ebx,20
	add	ebx,ecx
	mov	r10d,DWORD PTR[20+rsi]
	mov	r11d,ecx
	lea	eax,DWORD PTR[((-378558))+r10*1+rax]
	mov	r10d,DWORD PTR[32+rsi]
	xor	r11d,edx
	xor	r11d,ebx
	add	eax,r11d
	rol	eax,4
	mov	r11d,ebx
	add	eax,ebx
	lea	edx,DWORD PTR[((-2022574463))+r10*1+rdx]
	mov	r10d,DWORD PTR[44+rsi]
	xor	r11d,ecx
	xor	r11d,eax
	add	edx,r11d
	rol	edx,11
	mov	r11d,eax
	add	edx,eax
	lea	ecx,DWORD PTR[1839030562+r10*1+rcx]
	mov	r10d,DWORD PTR[56+rsi]
	xor	r11d,ebx
	xor	r11d,edx
	add	ecx,r11d
	rol	ecx,16
	mov	r11d,edx
	add	ecx,edx
	lea	ebx,DWORD PTR[((-35309556))+r10*1+rbx]
	mov	r10d,DWORD PTR[4+rsi]
	xor	r11d,eax
	xor	r11d,ecx
	add	ebx,r11d
	rol	ebx,23
	mov	r11d,ecx
	add	ebx,ecx
	lea	eax,DWORD PTR[((-1530992060))+r10*1+rax]
	mov	r10d,DWORD PTR[16+rsi]
	xor	r11d,edx
	xor	r11d,ebx
	add	eax,r11d
	rol	eax,4
	mov	r11d,ebx
	add	eax,ebx
	lea	edx,DWORD PTR[1272893353+r10*1+rdx]
	mov	r10d,DWORD PTR[28+rsi]
	xor	r11d,ecx
	xor	r11d,eax
	add	edx,r11d
	rol	edx,11
	mov	r11d,eax
	add	edx,eax
	lea	ecx,DWORD PTR[((-155497632))+r10*1+rcx]
	mov	r10d,DWORD PTR[40+rsi]
	xor	r11d,ebx
	xor	r11d,edx
	add	ecx,r11d
	rol	ecx,16
	mov	r11d,edx
	add	ecx,edx
	lea	ebx,DWORD PTR[((-1094730640))+r10*1+rbx]
	mov	r10d,DWORD PTR[52+rsi]
	xor	r11d,eax
	xor	r11d,ecx
	add	ebx,r11d
	rol	ebx,23
	mov	r11d,ecx
	add	ebx,ecx
	lea	eax,DWORD PTR[681279174+r10*1+rax]
	mov	r10d,DWORD PTR[rsi]
	xor	r11d,edx
	xor	r11d,ebx
	add	eax,r11d
	rol	eax,4
	mov	r11d,ebx
	add	eax,ebx
	lea	edx,DWORD PTR[((-358537222))+r10*1+rdx]
	mov	r10d,DWORD PTR[12+rsi]
	xor	r11d,ecx
	xor	r11d,eax
	add	edx,r11d
	rol	edx,11
	mov	r11d,eax
	add	edx,eax
	lea	ecx,DWORD PTR[((-722521979))+r10*1+rcx]
	mov	r10d,DWORD PTR[24+rsi]
	xor	r11d,ebx
	xor	r11d,edx
	add	ecx,r11d
	rol	ecx,16
	mov	r11d,edx
	add	ecx,edx
	lea	ebx,DWORD PTR[76029189+r10*1+rbx]
	mov	r10d,DWORD PTR[36+rsi]
	xor	r11d,eax
	xor	r11d,ecx
	add	ebx,r11d
	rol	ebx,23
	mov	r11d,ecx
	add	ebx,ecx
	lea	eax,DWORD PTR[((-640364487))+r10*1+rax]
	mov	r10d,DWORD PTR[48+rsi]
	xor	r11d,edx
	xor	r11d,ebx
	add	eax,r11d
	rol	eax,4
	mov	r11d,ebx
	add	eax,ebx
	lea	edx,DWORD PTR[((-421815835))+r10*1+rdx]
	mov	r10d,DWORD PTR[60+rsi]
	xor	r11d,ecx
	xor	r11d,eax
	add	edx,r11d
	rol	edx,11
	mov	r11d,eax
	add	edx,eax
	lea	ecx,DWORD PTR[530742520+r10*1+rcx]
	mov	r10d,DWORD PTR[8+rsi]
	xor	r11d,ebx
	xor	r11d,edx
	add	ecx,r11d
	rol	ecx,16
	mov	r11d,edx
	add	ecx,edx
	lea	ebx,DWORD PTR[((-995338651))+r10*1+rbx]
	mov	r10d,DWORD PTR[rsi]
	xor	r11d,eax
	xor	r11d,ecx
	add	ebx,r11d
	rol	ebx,23
	mov	r11d,ecx
	add	ebx,ecx
	mov	r10d,DWORD PTR[rsi]
	mov	r11d,0ffffffffh
	xor	r11d,edx
	lea	eax,DWORD PTR[((-198630844))+r10*1+rax]
	or	r11d,ebx
	xor	r11d,ecx
	add	eax,r11d
	mov	r10d,DWORD PTR[28+rsi]
	mov	r11d,0ffffffffh
	rol	eax,6
	xor	r11d,ecx
	add	eax,ebx
	lea	edx,DWORD PTR[1126891415+r10*1+rdx]
	or	r11d,eax
	xor	r11d,ebx
	add	edx,r11d
	mov	r10d,DWORD PTR[56+rsi]
	mov	r11d,0ffffffffh
	rol	edx,10
	xor	r11d,ebx
	add	edx,eax
	lea	ecx,DWORD PTR[((-1416354905))+r10*1+rcx]
	or	r11d,edx
	xor	r11d,eax
	add	ecx,r11d
	mov	r10d,DWORD PTR[20+rsi]
	mov	r11d,0ffffffffh
	rol	ecx,15
	xor	r11d,eax
	add	ecx,edx
	lea	ebx,DWORD PTR[((-57434055))+r10*1+rbx]
	or	r11d,ecx
	xor	r11d,edx
	add	ebx,r11d
	mov	r10d,DWORD PTR[48+rsi]
	mov	r11d,0ffffffffh
	rol	ebx,21
	xor	r11d,edx
	add	ebx,ecx
	lea	eax,DWORD PTR[1700485571+r10*1+rax]
	or	r11d,ebx
	xor	r11d,ecx
	add	eax,r11d
	mov	r10d,DWORD PTR[12+rsi]
	mov	r11d,0ffffffffh
	rol	eax,6
	xor	r11d,ecx
	add	eax,ebx
	lea	edx,DWORD PTR[((-1894986606))+r10*1+rdx]
	or	r11d,eax
	xor	r11d,ebx
	add	edx,r11d
	mov	r10d,DWORD PTR[40+rsi]
	mov	r11d,0ffffffffh
	rol	edx,10
	xor	r11d,ebx
	add	edx,eax
	lea	ecx,DWORD PTR[((-1051523))+r10*1+rcx]
	or	r11d,edx
	xor	r11d,eax
	add	ecx,r11d
	mov	r10d,DWORD PTR[4+rsi]
	mov	r11d,0ffffffffh
	rol	ecx,15
	xor	r11d,eax
	add	ecx,edx
	lea	ebx,DWORD PTR[((-2054922799))+r10*1+rbx]
	or	r11d,ecx
	xor	r11d,edx
	add	ebx,r11d
	mov	r10d,DWORD PTR[32+rsi]
	mov	r11d,0ffffffffh
	rol	ebx,21
	xor	r11d,edx
	add	ebx,ecx
	lea	eax,DWORD PTR[1873313359+r10*1+rax]
	or	r11d,ebx
	xor	r11d,ecx
	add	eax,r11d
	mov	r10d,DWORD PTR[60+rsi]
	mov	r11d,0ffffffffh
	rol	eax,6
	xor	r11d,ecx
	add	eax,ebx
	lea	edx,DWORD PTR[((-30611744))+r10*1+rdx]
	or	r11d,eax
	xor	r11d,ebx
	add	edx,r11d
	mov	r10d,DWORD PTR[24+rsi]
	mov	r11d,0ffffffffh
	rol	edx,10
	xor	r11d,ebx
	add	edx,eax
	lea	ecx,DWORD PTR[((-1560198380))+r10*1+rcx]
	or	r11d,edx
	xor	r11d,eax
	add	ecx,r11d
	mov	r10d,DWORD PTR[52+rsi]
	mov	r11d,0ffffffffh
	rol	ecx,15
	xor	r11d,eax
	add	ecx,edx
	lea	ebx,DWORD PTR[1309151649+r10*1+rbx]
	or	r11d,ecx
	xor	r11d,edx
	add	ebx,r11d
	mov	r10d,DWORD PTR[16+rsi]
	mov	r11d,0ffffffffh
	rol	ebx,21
	xor	r11d,edx
	add	ebx,ecx
	lea	eax,DWORD PTR[((-145523070))+r10*1+rax]
	or	r11d,ebx
	xor	r11d,ecx
	add	eax,r11d
	mov	r10d,DWORD PTR[44+rsi]
	mov	r11d,0ffffffffh
	rol	eax,6
	xor	r11d,ecx
	add	eax,ebx
	lea	edx,DWORD PTR[((-1120210379))+r10*1+rdx]
	or	r11d,eax
	xor	r11d,ebx
	add	edx,r11d
	mov	r10d,DWORD PTR[8+rsi]
	mov	r11d,0ffffffffh
	rol	edx,10
	xor	r11d,ebx
	add	edx,eax
	lea	ecx,DWORD PTR[718787259+r10*1+rcx]
	or	r11d,edx
	xor	r11d,eax
	add	ecx,r11d
	mov	r10d,DWORD PTR[36+rsi]
	mov	r11d,0ffffffffh
	rol	ecx,15
	xor	r11d,eax
	add	ecx,edx
	lea	ebx,DWORD PTR[((-343485551))+r10*1+rbx]
	or	r11d,ecx
	xor	r11d,edx
	add	ebx,r11d
	mov	r10d,DWORD PTR[rsi]
	mov	r11d,0ffffffffh
	rol	ebx,21
	xor	r11d,edx
	add	ebx,ecx

	add	eax,r8d
	add	ebx,r9d
	add	ecx,r14d
	add	edx,r15d


	add	rsi,64
	cmp	rsi,rdi
	jb	$L$loop				


$L$end::
	mov	DWORD PTR[rbp],eax
	mov	DWORD PTR[4+rbp],ebx
	mov	DWORD PTR[8+rbp],ecx
	mov	DWORD PTR[12+rbp],edx

	mov	r15,QWORD PTR[rsp]
	mov	r14,QWORD PTR[8+rsp]
	mov	r12,QWORD PTR[16+rsp]
	mov	rbx,QWORD PTR[24+rsp]
	mov	rbp,QWORD PTR[32+rsp]
	add	rsp,40
$L$epilogue::
	mov	rdi,QWORD PTR[8+rsp]	;WIN64 epilogue
	mov	rsi,QWORD PTR[16+rsp]
	DB	0F3h,0C3h		;repret
$L$SEH_end_md5_block_asm_data_order::
md5_block_asm_data_order	ENDP

.text$	ENDS
END

