//
// sha1.S
//
// i386+ implementation of the SHA (Secure Hash Algorithm)
// Code generated by chnhash/genscrmb/sha/inasm.cxx,
// see there for credits.
// Copyright (C) 1996-7 by Leonard Janke (janke@unixg.ubc.ca)
//
// originally implemented on an i486
// maybe there is room for Pentium optimizations?

#include <lmisc/config.h>

.align 4

#if #LC_OS (linux)
.globl LC_SHA1_Scramble
LC_SHA1_Scramble:	
#elif #LC_OS (winnt)
.globl _LC_SHA1_Scramble
_LC_SHA1_Scramble:	
#else
#warning Library not tested on this O/S. Take your chances!
.globl _LC_SHA1_Scramble
_LC_SHA1_Scramble:	
#endif

	pushl %ebp
	movl %esp, %ebp

	pushl %esi
	pushl %edi
	pushl %edx
	pushl %ecx
	pushl %ebx
	pushl %eax

	movl 8(%ebp), %eax
	movl (%eax), %eax
	movl 12(%ebp), %ebx
	movl (%ebx), %ebx
	movl 16(%ebp), %ecx
	movl (%ecx), %ecx
	movl 20(%ebp), %edx
	movl (%edx), %edx
	movl 24(%ebp), %edi
	movl (%edi), %edi
	movl 28(%ebp), %esi

	pushl %ebp
	pushl $0

	// i=0
	movl %ecx, %ebp
	xorl %edx, %ebp
	andl %ebx, %ebp
	xorl %edx, %ebp
	movl %ebp, (%esp) 

	movl %eax, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %edi, %ebp
	addl 0(%esi), %ebp
	addl $1518500249, %ebp
	movl %ebp, %edi

	roll $30, %ebx

	// i=1
	movl %ebx, %ebp
	xorl %ecx, %ebp
	andl %eax, %ebp
	xorl %ecx, %ebp
	movl %ebp, (%esp) 

	movl %edi, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %edx, %ebp
	addl 4(%esi), %ebp
	addl $1518500249, %ebp
	movl %ebp, %edx

	roll $30, %eax

	// i=2
	movl %eax, %ebp
	xorl %ebx, %ebp
	andl %edi, %ebp
	xorl %ebx, %ebp
	movl %ebp, (%esp) 

	movl %edx, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %ecx, %ebp
	addl 8(%esi), %ebp
	addl $1518500249, %ebp
	movl %ebp, %ecx

	roll $30, %edi

	// i=3
	movl %edi, %ebp
	xorl %eax, %ebp
	andl %edx, %ebp
	xorl %eax, %ebp
	movl %ebp, (%esp) 

	movl %ecx, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %ebx, %ebp
	addl 12(%esi), %ebp
	addl $1518500249, %ebp
	movl %ebp, %ebx

	roll $30, %edx

	// i=4
	movl %edx, %ebp
	xorl %edi, %ebp
	andl %ecx, %ebp
	xorl %edi, %ebp
	movl %ebp, (%esp) 

	movl %ebx, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %eax, %ebp
	addl 16(%esi), %ebp
	addl $1518500249, %ebp
	movl %ebp, %eax

	roll $30, %ecx

	// i=5
	movl %ecx, %ebp
	xorl %edx, %ebp
	andl %ebx, %ebp
	xorl %edx, %ebp
	movl %ebp, (%esp) 

	movl %eax, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %edi, %ebp
	addl 20(%esi), %ebp
	addl $1518500249, %ebp
	movl %ebp, %edi

	roll $30, %ebx

	// i=6
	movl %ebx, %ebp
	xorl %ecx, %ebp
	andl %eax, %ebp
	xorl %ecx, %ebp
	movl %ebp, (%esp) 

	movl %edi, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %edx, %ebp
	addl 24(%esi), %ebp
	addl $1518500249, %ebp
	movl %ebp, %edx

	roll $30, %eax

	// i=7
	movl %eax, %ebp
	xorl %ebx, %ebp
	andl %edi, %ebp
	xorl %ebx, %ebp
	movl %ebp, (%esp) 

	movl %edx, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %ecx, %ebp
	addl 28(%esi), %ebp
	addl $1518500249, %ebp
	movl %ebp, %ecx

	roll $30, %edi

	// i=8
	movl %edi, %ebp
	xorl %eax, %ebp
	andl %edx, %ebp
	xorl %eax, %ebp
	movl %ebp, (%esp) 

	movl %ecx, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %ebx, %ebp
	addl 32(%esi), %ebp
	addl $1518500249, %ebp
	movl %ebp, %ebx

	roll $30, %edx

	// i=9
	movl %edx, %ebp
	xorl %edi, %ebp
	andl %ecx, %ebp
	xorl %edi, %ebp
	movl %ebp, (%esp) 

	movl %ebx, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %eax, %ebp
	addl 36(%esi), %ebp
	addl $1518500249, %ebp
	movl %ebp, %eax

	roll $30, %ecx

	// i=10
	movl %ecx, %ebp
	xorl %edx, %ebp
	andl %ebx, %ebp
	xorl %edx, %ebp
	movl %ebp, (%esp) 

	movl %eax, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %edi, %ebp
	addl 40(%esi), %ebp
	addl $1518500249, %ebp
	movl %ebp, %edi

	roll $30, %ebx

	// i=11
	movl %ebx, %ebp
	xorl %ecx, %ebp
	andl %eax, %ebp
	xorl %ecx, %ebp
	movl %ebp, (%esp) 

	movl %edi, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %edx, %ebp
	addl 44(%esi), %ebp
	addl $1518500249, %ebp
	movl %ebp, %edx

	roll $30, %eax

	// i=12
	movl %eax, %ebp
	xorl %ebx, %ebp
	andl %edi, %ebp
	xorl %ebx, %ebp
	movl %ebp, (%esp) 

	movl %edx, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %ecx, %ebp
	addl 48(%esi), %ebp
	addl $1518500249, %ebp
	movl %ebp, %ecx

	roll $30, %edi

	// i=13
	movl %edi, %ebp
	xorl %eax, %ebp
	andl %edx, %ebp
	xorl %eax, %ebp
	movl %ebp, (%esp) 

	movl %ecx, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %ebx, %ebp
	addl 52(%esi), %ebp
	addl $1518500249, %ebp
	movl %ebp, %ebx

	roll $30, %edx

	// i=14
	movl %edx, %ebp
	xorl %edi, %ebp
	andl %ecx, %ebp
	xorl %edi, %ebp
	movl %ebp, (%esp) 

	movl %ebx, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %eax, %ebp
	addl 56(%esi), %ebp
	addl $1518500249, %ebp
	movl %ebp, %eax

	roll $30, %ecx

	// i=15
	movl %ecx, %ebp
	xorl %edx, %ebp
	andl %ebx, %ebp
	xorl %edx, %ebp
	movl %ebp, (%esp) 

	movl %eax, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %edi, %ebp
	addl 60(%esi), %ebp
	addl $1518500249, %ebp
	movl %ebp, %edi

	roll $30, %ebx

	// i=16
	movl %ebx, %ebp
	xorl %ecx, %ebp
	andl %eax, %ebp
	xorl %ecx, %ebp
	movl %ebp, (%esp) 

	movl 0(%esi), %ebp
	xorl 8(%esi), %ebp
	xorl 32(%esi), %ebp
	xorl 52(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 0(%esi)

	movl %edi, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %edx, %ebp
	addl 0(%esi), %ebp
	addl $1518500249, %ebp
	movl %ebp, %edx

	roll $30, %eax

	// i=17
	movl %eax, %ebp
	xorl %ebx, %ebp
	andl %edi, %ebp
	xorl %ebx, %ebp
	movl %ebp, (%esp) 

	movl 4(%esi), %ebp
	xorl 12(%esi), %ebp
	xorl 36(%esi), %ebp
	xorl 56(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 4(%esi)

	movl %edx, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %ecx, %ebp
	addl 4(%esi), %ebp
	addl $1518500249, %ebp
	movl %ebp, %ecx

	roll $30, %edi

	// i=18
	movl %edi, %ebp
	xorl %eax, %ebp
	andl %edx, %ebp
	xorl %eax, %ebp
	movl %ebp, (%esp) 

	movl 8(%esi), %ebp
	xorl 16(%esi), %ebp
	xorl 40(%esi), %ebp
	xorl 60(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 8(%esi)

	movl %ecx, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %ebx, %ebp
	addl 8(%esi), %ebp
	addl $1518500249, %ebp
	movl %ebp, %ebx

	roll $30, %edx

	// i=19
	movl %edx, %ebp
	xorl %edi, %ebp
	andl %ecx, %ebp
	xorl %edi, %ebp
	movl %ebp, (%esp) 

	movl 12(%esi), %ebp
	xorl 20(%esi), %ebp
	xorl 44(%esi), %ebp
	xorl 0(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 12(%esi)

	movl %ebx, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %eax, %ebp
	addl 12(%esi), %ebp
	addl $1518500249, %ebp
	movl %ebp, %eax

	roll $30, %ecx

	// i=20
	movl %ebx, %ebp
	xorl %ecx, %ebp
	xorl %edx, %ebp
	movl %ebp, (%esp)

	movl 16(%esi), %ebp
	xorl 24(%esi), %ebp
	xorl 48(%esi), %ebp
	xorl 4(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 16(%esi)

	movl %eax, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %edi, %ebp
	addl 16(%esi), %ebp
	addl $1859775393, %ebp
	movl %ebp, %edi

	roll $30, %ebx

	// i=21
	movl %eax, %ebp
	xorl %ebx, %ebp
	xorl %ecx, %ebp
	movl %ebp, (%esp)

	movl 20(%esi), %ebp
	xorl 28(%esi), %ebp
	xorl 52(%esi), %ebp
	xorl 8(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 20(%esi)

	movl %edi, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %edx, %ebp
	addl 20(%esi), %ebp
	addl $1859775393, %ebp
	movl %ebp, %edx

	roll $30, %eax

	// i=22
	movl %edi, %ebp
	xorl %eax, %ebp
	xorl %ebx, %ebp
	movl %ebp, (%esp)

	movl 24(%esi), %ebp
	xorl 32(%esi), %ebp
	xorl 56(%esi), %ebp
	xorl 12(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 24(%esi)

	movl %edx, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %ecx, %ebp
	addl 24(%esi), %ebp
	addl $1859775393, %ebp
	movl %ebp, %ecx

	roll $30, %edi

	// i=23
	movl %edx, %ebp
	xorl %edi, %ebp
	xorl %eax, %ebp
	movl %ebp, (%esp)

	movl 28(%esi), %ebp
	xorl 36(%esi), %ebp
	xorl 60(%esi), %ebp
	xorl 16(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 28(%esi)

	movl %ecx, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %ebx, %ebp
	addl 28(%esi), %ebp
	addl $1859775393, %ebp
	movl %ebp, %ebx

	roll $30, %edx

	// i=24
	movl %ecx, %ebp
	xorl %edx, %ebp
	xorl %edi, %ebp
	movl %ebp, (%esp)

	movl 32(%esi), %ebp
	xorl 40(%esi), %ebp
	xorl 0(%esi), %ebp
	xorl 20(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 32(%esi)

	movl %ebx, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %eax, %ebp
	addl 32(%esi), %ebp
	addl $1859775393, %ebp
	movl %ebp, %eax

	roll $30, %ecx

	// i=25
	movl %ebx, %ebp
	xorl %ecx, %ebp
	xorl %edx, %ebp
	movl %ebp, (%esp)

	movl 36(%esi), %ebp
	xorl 44(%esi), %ebp
	xorl 4(%esi), %ebp
	xorl 24(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 36(%esi)

	movl %eax, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %edi, %ebp
	addl 36(%esi), %ebp
	addl $1859775393, %ebp
	movl %ebp, %edi

	roll $30, %ebx

	// i=26
	movl %eax, %ebp
	xorl %ebx, %ebp
	xorl %ecx, %ebp
	movl %ebp, (%esp)

	movl 40(%esi), %ebp
	xorl 48(%esi), %ebp
	xorl 8(%esi), %ebp
	xorl 28(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 40(%esi)

	movl %edi, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %edx, %ebp
	addl 40(%esi), %ebp
	addl $1859775393, %ebp
	movl %ebp, %edx

	roll $30, %eax

	// i=27
	movl %edi, %ebp
	xorl %eax, %ebp
	xorl %ebx, %ebp
	movl %ebp, (%esp)

	movl 44(%esi), %ebp
	xorl 52(%esi), %ebp
	xorl 12(%esi), %ebp
	xorl 32(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 44(%esi)

	movl %edx, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %ecx, %ebp
	addl 44(%esi), %ebp
	addl $1859775393, %ebp
	movl %ebp, %ecx

	roll $30, %edi

	// i=28
	movl %edx, %ebp
	xorl %edi, %ebp
	xorl %eax, %ebp
	movl %ebp, (%esp)

	movl 48(%esi), %ebp
	xorl 56(%esi), %ebp
	xorl 16(%esi), %ebp
	xorl 36(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 48(%esi)

	movl %ecx, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %ebx, %ebp
	addl 48(%esi), %ebp
	addl $1859775393, %ebp
	movl %ebp, %ebx

	roll $30, %edx

	// i=29
	movl %ecx, %ebp
	xorl %edx, %ebp
	xorl %edi, %ebp
	movl %ebp, (%esp)

	movl 52(%esi), %ebp
	xorl 60(%esi), %ebp
	xorl 20(%esi), %ebp
	xorl 40(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 52(%esi)

	movl %ebx, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %eax, %ebp
	addl 52(%esi), %ebp
	addl $1859775393, %ebp
	movl %ebp, %eax

	roll $30, %ecx

	// i=30
	movl %ebx, %ebp
	xorl %ecx, %ebp
	xorl %edx, %ebp
	movl %ebp, (%esp)

	movl 56(%esi), %ebp
	xorl 0(%esi), %ebp
	xorl 24(%esi), %ebp
	xorl 44(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 56(%esi)

	movl %eax, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %edi, %ebp
	addl 56(%esi), %ebp
	addl $1859775393, %ebp
	movl %ebp, %edi

	roll $30, %ebx

	// i=31
	movl %eax, %ebp
	xorl %ebx, %ebp
	xorl %ecx, %ebp
	movl %ebp, (%esp)

	movl 60(%esi), %ebp
	xorl 4(%esi), %ebp
	xorl 28(%esi), %ebp
	xorl 48(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 60(%esi)

	movl %edi, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %edx, %ebp
	addl 60(%esi), %ebp
	addl $1859775393, %ebp
	movl %ebp, %edx

	roll $30, %eax

	// i=32
	movl %edi, %ebp
	xorl %eax, %ebp
	xorl %ebx, %ebp
	movl %ebp, (%esp)

	movl 0(%esi), %ebp
	xorl 8(%esi), %ebp
	xorl 32(%esi), %ebp
	xorl 52(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 0(%esi)

	movl %edx, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %ecx, %ebp
	addl 0(%esi), %ebp
	addl $1859775393, %ebp
	movl %ebp, %ecx

	roll $30, %edi

	// i=33
	movl %edx, %ebp
	xorl %edi, %ebp
	xorl %eax, %ebp
	movl %ebp, (%esp)

	movl 4(%esi), %ebp
	xorl 12(%esi), %ebp
	xorl 36(%esi), %ebp
	xorl 56(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 4(%esi)

	movl %ecx, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %ebx, %ebp
	addl 4(%esi), %ebp
	addl $1859775393, %ebp
	movl %ebp, %ebx

	roll $30, %edx

	// i=34
	movl %ecx, %ebp
	xorl %edx, %ebp
	xorl %edi, %ebp
	movl %ebp, (%esp)

	movl 8(%esi), %ebp
	xorl 16(%esi), %ebp
	xorl 40(%esi), %ebp
	xorl 60(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 8(%esi)

	movl %ebx, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %eax, %ebp
	addl 8(%esi), %ebp
	addl $1859775393, %ebp
	movl %ebp, %eax

	roll $30, %ecx

	// i=35
	movl %ebx, %ebp
	xorl %ecx, %ebp
	xorl %edx, %ebp
	movl %ebp, (%esp)

	movl 12(%esi), %ebp
	xorl 20(%esi), %ebp
	xorl 44(%esi), %ebp
	xorl 0(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 12(%esi)

	movl %eax, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %edi, %ebp
	addl 12(%esi), %ebp
	addl $1859775393, %ebp
	movl %ebp, %edi

	roll $30, %ebx

	// i=36
	movl %eax, %ebp
	xorl %ebx, %ebp
	xorl %ecx, %ebp
	movl %ebp, (%esp)

	movl 16(%esi), %ebp
	xorl 24(%esi), %ebp
	xorl 48(%esi), %ebp
	xorl 4(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 16(%esi)

	movl %edi, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %edx, %ebp
	addl 16(%esi), %ebp
	addl $1859775393, %ebp
	movl %ebp, %edx

	roll $30, %eax

	// i=37
	movl %edi, %ebp
	xorl %eax, %ebp
	xorl %ebx, %ebp
	movl %ebp, (%esp)

	movl 20(%esi), %ebp
	xorl 28(%esi), %ebp
	xorl 52(%esi), %ebp
	xorl 8(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 20(%esi)

	movl %edx, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %ecx, %ebp
	addl 20(%esi), %ebp
	addl $1859775393, %ebp
	movl %ebp, %ecx

	roll $30, %edi

	// i=38
	movl %edx, %ebp
	xorl %edi, %ebp
	xorl %eax, %ebp
	movl %ebp, (%esp)

	movl 24(%esi), %ebp
	xorl 32(%esi), %ebp
	xorl 56(%esi), %ebp
	xorl 12(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 24(%esi)

	movl %ecx, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %ebx, %ebp
	addl 24(%esi), %ebp
	addl $1859775393, %ebp
	movl %ebp, %ebx

	roll $30, %edx

	// i=39
	movl %ecx, %ebp
	xorl %edx, %ebp
	xorl %edi, %ebp
	movl %ebp, (%esp)

	movl 28(%esi), %ebp
	xorl 36(%esi), %ebp
	xorl 60(%esi), %ebp
	xorl 16(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 28(%esi)

	movl %ebx, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %eax, %ebp
	addl 28(%esi), %ebp
	addl $1859775393, %ebp
	movl %ebp, %eax

	roll $30, %ecx

	// i=40
	movl %ebx, %ebp
	orl %ecx, %ebp
	andl %edx, %ebp
	movl %ebp, (%esp)
	movl %ebx, %ebp
	andl %ecx, %ebp
	orl (%esp), %ebp
	movl %ebp, (%esp)

	movl 32(%esi), %ebp
	xorl 40(%esi), %ebp
	xorl 0(%esi), %ebp
	xorl 20(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 32(%esi)

	movl %eax, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %edi, %ebp
	addl 32(%esi), %ebp
	addl $-1894007588, %ebp
	movl %ebp, %edi

	roll $30, %ebx

	// i=41
	movl %eax, %ebp
	orl %ebx, %ebp
	andl %ecx, %ebp
	movl %ebp, (%esp)
	movl %eax, %ebp
	andl %ebx, %ebp
	orl (%esp), %ebp
	movl %ebp, (%esp)

	movl 36(%esi), %ebp
	xorl 44(%esi), %ebp
	xorl 4(%esi), %ebp
	xorl 24(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 36(%esi)

	movl %edi, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %edx, %ebp
	addl 36(%esi), %ebp
	addl $-1894007588, %ebp
	movl %ebp, %edx

	roll $30, %eax

	// i=42
	movl %edi, %ebp
	orl %eax, %ebp
	andl %ebx, %ebp
	movl %ebp, (%esp)
	movl %edi, %ebp
	andl %eax, %ebp
	orl (%esp), %ebp
	movl %ebp, (%esp)

	movl 40(%esi), %ebp
	xorl 48(%esi), %ebp
	xorl 8(%esi), %ebp
	xorl 28(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 40(%esi)

	movl %edx, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %ecx, %ebp
	addl 40(%esi), %ebp
	addl $-1894007588, %ebp
	movl %ebp, %ecx

	roll $30, %edi

	// i=43
	movl %edx, %ebp
	orl %edi, %ebp
	andl %eax, %ebp
	movl %ebp, (%esp)
	movl %edx, %ebp
	andl %edi, %ebp
	orl (%esp), %ebp
	movl %ebp, (%esp)

	movl 44(%esi), %ebp
	xorl 52(%esi), %ebp
	xorl 12(%esi), %ebp
	xorl 32(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 44(%esi)

	movl %ecx, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %ebx, %ebp
	addl 44(%esi), %ebp
	addl $-1894007588, %ebp
	movl %ebp, %ebx

	roll $30, %edx

	// i=44
	movl %ecx, %ebp
	orl %edx, %ebp
	andl %edi, %ebp
	movl %ebp, (%esp)
	movl %ecx, %ebp
	andl %edx, %ebp
	orl (%esp), %ebp
	movl %ebp, (%esp)

	movl 48(%esi), %ebp
	xorl 56(%esi), %ebp
	xorl 16(%esi), %ebp
	xorl 36(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 48(%esi)

	movl %ebx, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %eax, %ebp
	addl 48(%esi), %ebp
	addl $-1894007588, %ebp
	movl %ebp, %eax

	roll $30, %ecx

	// i=45
	movl %ebx, %ebp
	orl %ecx, %ebp
	andl %edx, %ebp
	movl %ebp, (%esp)
	movl %ebx, %ebp
	andl %ecx, %ebp
	orl (%esp), %ebp
	movl %ebp, (%esp)

	movl 52(%esi), %ebp
	xorl 60(%esi), %ebp
	xorl 20(%esi), %ebp
	xorl 40(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 52(%esi)

	movl %eax, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %edi, %ebp
	addl 52(%esi), %ebp
	addl $-1894007588, %ebp
	movl %ebp, %edi

	roll $30, %ebx

	// i=46
	movl %eax, %ebp
	orl %ebx, %ebp
	andl %ecx, %ebp
	movl %ebp, (%esp)
	movl %eax, %ebp
	andl %ebx, %ebp
	orl (%esp), %ebp
	movl %ebp, (%esp)

	movl 56(%esi), %ebp
	xorl 0(%esi), %ebp
	xorl 24(%esi), %ebp
	xorl 44(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 56(%esi)

	movl %edi, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %edx, %ebp
	addl 56(%esi), %ebp
	addl $-1894007588, %ebp
	movl %ebp, %edx

	roll $30, %eax

	// i=47
	movl %edi, %ebp
	orl %eax, %ebp
	andl %ebx, %ebp
	movl %ebp, (%esp)
	movl %edi, %ebp
	andl %eax, %ebp
	orl (%esp), %ebp
	movl %ebp, (%esp)

	movl 60(%esi), %ebp
	xorl 4(%esi), %ebp
	xorl 28(%esi), %ebp
	xorl 48(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 60(%esi)

	movl %edx, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %ecx, %ebp
	addl 60(%esi), %ebp
	addl $-1894007588, %ebp
	movl %ebp, %ecx

	roll $30, %edi

	// i=48
	movl %edx, %ebp
	orl %edi, %ebp
	andl %eax, %ebp
	movl %ebp, (%esp)
	movl %edx, %ebp
	andl %edi, %ebp
	orl (%esp), %ebp
	movl %ebp, (%esp)

	movl 0(%esi), %ebp
	xorl 8(%esi), %ebp
	xorl 32(%esi), %ebp
	xorl 52(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 0(%esi)

	movl %ecx, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %ebx, %ebp
	addl 0(%esi), %ebp
	addl $-1894007588, %ebp
	movl %ebp, %ebx

	roll $30, %edx

	// i=49
	movl %ecx, %ebp
	orl %edx, %ebp
	andl %edi, %ebp
	movl %ebp, (%esp)
	movl %ecx, %ebp
	andl %edx, %ebp
	orl (%esp), %ebp
	movl %ebp, (%esp)

	movl 4(%esi), %ebp
	xorl 12(%esi), %ebp
	xorl 36(%esi), %ebp
	xorl 56(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 4(%esi)

	movl %ebx, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %eax, %ebp
	addl 4(%esi), %ebp
	addl $-1894007588, %ebp
	movl %ebp, %eax

	roll $30, %ecx

	// i=50
	movl %ebx, %ebp
	orl %ecx, %ebp
	andl %edx, %ebp
	movl %ebp, (%esp)
	movl %ebx, %ebp
	andl %ecx, %ebp
	orl (%esp), %ebp
	movl %ebp, (%esp)

	movl 8(%esi), %ebp
	xorl 16(%esi), %ebp
	xorl 40(%esi), %ebp
	xorl 60(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 8(%esi)

	movl %eax, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %edi, %ebp
	addl 8(%esi), %ebp
	addl $-1894007588, %ebp
	movl %ebp, %edi

	roll $30, %ebx

	// i=51
	movl %eax, %ebp
	orl %ebx, %ebp
	andl %ecx, %ebp
	movl %ebp, (%esp)
	movl %eax, %ebp
	andl %ebx, %ebp
	orl (%esp), %ebp
	movl %ebp, (%esp)

	movl 12(%esi), %ebp
	xorl 20(%esi), %ebp
	xorl 44(%esi), %ebp
	xorl 0(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 12(%esi)

	movl %edi, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %edx, %ebp
	addl 12(%esi), %ebp
	addl $-1894007588, %ebp
	movl %ebp, %edx

	roll $30, %eax

	// i=52
	movl %edi, %ebp
	orl %eax, %ebp
	andl %ebx, %ebp
	movl %ebp, (%esp)
	movl %edi, %ebp
	andl %eax, %ebp
	orl (%esp), %ebp
	movl %ebp, (%esp)

	movl 16(%esi), %ebp
	xorl 24(%esi), %ebp
	xorl 48(%esi), %ebp
	xorl 4(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 16(%esi)

	movl %edx, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %ecx, %ebp
	addl 16(%esi), %ebp
	addl $-1894007588, %ebp
	movl %ebp, %ecx

	roll $30, %edi

	// i=53
	movl %edx, %ebp
	orl %edi, %ebp
	andl %eax, %ebp
	movl %ebp, (%esp)
	movl %edx, %ebp
	andl %edi, %ebp
	orl (%esp), %ebp
	movl %ebp, (%esp)

	movl 20(%esi), %ebp
	xorl 28(%esi), %ebp
	xorl 52(%esi), %ebp
	xorl 8(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 20(%esi)

	movl %ecx, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %ebx, %ebp
	addl 20(%esi), %ebp
	addl $-1894007588, %ebp
	movl %ebp, %ebx

	roll $30, %edx

	// i=54
	movl %ecx, %ebp
	orl %edx, %ebp
	andl %edi, %ebp
	movl %ebp, (%esp)
	movl %ecx, %ebp
	andl %edx, %ebp
	orl (%esp), %ebp
	movl %ebp, (%esp)

	movl 24(%esi), %ebp
	xorl 32(%esi), %ebp
	xorl 56(%esi), %ebp
	xorl 12(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 24(%esi)

	movl %ebx, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %eax, %ebp
	addl 24(%esi), %ebp
	addl $-1894007588, %ebp
	movl %ebp, %eax

	roll $30, %ecx

	// i=55
	movl %ebx, %ebp
	orl %ecx, %ebp
	andl %edx, %ebp
	movl %ebp, (%esp)
	movl %ebx, %ebp
	andl %ecx, %ebp
	orl (%esp), %ebp
	movl %ebp, (%esp)

	movl 28(%esi), %ebp
	xorl 36(%esi), %ebp
	xorl 60(%esi), %ebp
	xorl 16(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 28(%esi)

	movl %eax, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %edi, %ebp
	addl 28(%esi), %ebp
	addl $-1894007588, %ebp
	movl %ebp, %edi

	roll $30, %ebx

	// i=56
	movl %eax, %ebp
	orl %ebx, %ebp
	andl %ecx, %ebp
	movl %ebp, (%esp)
	movl %eax, %ebp
	andl %ebx, %ebp
	orl (%esp), %ebp
	movl %ebp, (%esp)

	movl 32(%esi), %ebp
	xorl 40(%esi), %ebp
	xorl 0(%esi), %ebp
	xorl 20(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 32(%esi)

	movl %edi, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %edx, %ebp
	addl 32(%esi), %ebp
	addl $-1894007588, %ebp
	movl %ebp, %edx

	roll $30, %eax

	// i=57
	movl %edi, %ebp
	orl %eax, %ebp
	andl %ebx, %ebp
	movl %ebp, (%esp)
	movl %edi, %ebp
	andl %eax, %ebp
	orl (%esp), %ebp
	movl %ebp, (%esp)

	movl 36(%esi), %ebp
	xorl 44(%esi), %ebp
	xorl 4(%esi), %ebp
	xorl 24(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 36(%esi)

	movl %edx, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %ecx, %ebp
	addl 36(%esi), %ebp
	addl $-1894007588, %ebp
	movl %ebp, %ecx

	roll $30, %edi

	// i=58
	movl %edx, %ebp
	orl %edi, %ebp
	andl %eax, %ebp
	movl %ebp, (%esp)
	movl %edx, %ebp
	andl %edi, %ebp
	orl (%esp), %ebp
	movl %ebp, (%esp)

	movl 40(%esi), %ebp
	xorl 48(%esi), %ebp
	xorl 8(%esi), %ebp
	xorl 28(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 40(%esi)

	movl %ecx, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %ebx, %ebp
	addl 40(%esi), %ebp
	addl $-1894007588, %ebp
	movl %ebp, %ebx

	roll $30, %edx

	// i=59
	movl %ecx, %ebp
	orl %edx, %ebp
	andl %edi, %ebp
	movl %ebp, (%esp)
	movl %ecx, %ebp
	andl %edx, %ebp
	orl (%esp), %ebp
	movl %ebp, (%esp)

	movl 44(%esi), %ebp
	xorl 52(%esi), %ebp
	xorl 12(%esi), %ebp
	xorl 32(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 44(%esi)

	movl %ebx, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %eax, %ebp
	addl 44(%esi), %ebp
	addl $-1894007588, %ebp
	movl %ebp, %eax

	roll $30, %ecx

	// i=60
	movl %ebx, %ebp
	xorl %ecx, %ebp
	xorl %edx, %ebp
	movl %ebp, (%esp)

	movl 48(%esi), %ebp
	xorl 56(%esi), %ebp
	xorl 16(%esi), %ebp
	xorl 36(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 48(%esi)

	movl %eax, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %edi, %ebp
	addl 48(%esi), %ebp
	addl $-899497514, %ebp
	movl %ebp, %edi

	roll $30, %ebx

	// i=61
	movl %eax, %ebp
	xorl %ebx, %ebp
	xorl %ecx, %ebp
	movl %ebp, (%esp)

	movl 52(%esi), %ebp
	xorl 60(%esi), %ebp
	xorl 20(%esi), %ebp
	xorl 40(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 52(%esi)

	movl %edi, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %edx, %ebp
	addl 52(%esi), %ebp
	addl $-899497514, %ebp
	movl %ebp, %edx

	roll $30, %eax

	// i=62
	movl %edi, %ebp
	xorl %eax, %ebp
	xorl %ebx, %ebp
	movl %ebp, (%esp)

	movl 56(%esi), %ebp
	xorl 0(%esi), %ebp
	xorl 24(%esi), %ebp
	xorl 44(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 56(%esi)

	movl %edx, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %ecx, %ebp
	addl 56(%esi), %ebp
	addl $-899497514, %ebp
	movl %ebp, %ecx

	roll $30, %edi

	// i=63
	movl %edx, %ebp
	xorl %edi, %ebp
	xorl %eax, %ebp
	movl %ebp, (%esp)

	movl 60(%esi), %ebp
	xorl 4(%esi), %ebp
	xorl 28(%esi), %ebp
	xorl 48(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 60(%esi)

	movl %ecx, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %ebx, %ebp
	addl 60(%esi), %ebp
	addl $-899497514, %ebp
	movl %ebp, %ebx

	roll $30, %edx

	// i=64
	movl %ecx, %ebp
	xorl %edx, %ebp
	xorl %edi, %ebp
	movl %ebp, (%esp)

	movl 0(%esi), %ebp
	xorl 8(%esi), %ebp
	xorl 32(%esi), %ebp
	xorl 52(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 0(%esi)

	movl %ebx, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %eax, %ebp
	addl 0(%esi), %ebp
	addl $-899497514, %ebp
	movl %ebp, %eax

	roll $30, %ecx

	// i=65
	movl %ebx, %ebp
	xorl %ecx, %ebp
	xorl %edx, %ebp
	movl %ebp, (%esp)

	movl 4(%esi), %ebp
	xorl 12(%esi), %ebp
	xorl 36(%esi), %ebp
	xorl 56(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 4(%esi)

	movl %eax, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %edi, %ebp
	addl 4(%esi), %ebp
	addl $-899497514, %ebp
	movl %ebp, %edi

	roll $30, %ebx

	// i=66
	movl %eax, %ebp
	xorl %ebx, %ebp
	xorl %ecx, %ebp
	movl %ebp, (%esp)

	movl 8(%esi), %ebp
	xorl 16(%esi), %ebp
	xorl 40(%esi), %ebp
	xorl 60(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 8(%esi)

	movl %edi, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %edx, %ebp
	addl 8(%esi), %ebp
	addl $-899497514, %ebp
	movl %ebp, %edx

	roll $30, %eax

	// i=67
	movl %edi, %ebp
	xorl %eax, %ebp
	xorl %ebx, %ebp
	movl %ebp, (%esp)

	movl 12(%esi), %ebp
	xorl 20(%esi), %ebp
	xorl 44(%esi), %ebp
	xorl 0(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 12(%esi)

	movl %edx, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %ecx, %ebp
	addl 12(%esi), %ebp
	addl $-899497514, %ebp
	movl %ebp, %ecx

	roll $30, %edi

	// i=68
	movl %edx, %ebp
	xorl %edi, %ebp
	xorl %eax, %ebp
	movl %ebp, (%esp)

	movl 16(%esi), %ebp
	xorl 24(%esi), %ebp
	xorl 48(%esi), %ebp
	xorl 4(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 16(%esi)

	movl %ecx, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %ebx, %ebp
	addl 16(%esi), %ebp
	addl $-899497514, %ebp
	movl %ebp, %ebx

	roll $30, %edx

	// i=69
	movl %ecx, %ebp
	xorl %edx, %ebp
	xorl %edi, %ebp
	movl %ebp, (%esp)

	movl 20(%esi), %ebp
	xorl 28(%esi), %ebp
	xorl 52(%esi), %ebp
	xorl 8(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 20(%esi)

	movl %ebx, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %eax, %ebp
	addl 20(%esi), %ebp
	addl $-899497514, %ebp
	movl %ebp, %eax

	roll $30, %ecx

	// i=70
	movl %ebx, %ebp
	xorl %ecx, %ebp
	xorl %edx, %ebp
	movl %ebp, (%esp)

	movl 24(%esi), %ebp
	xorl 32(%esi), %ebp
	xorl 56(%esi), %ebp
	xorl 12(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 24(%esi)

	movl %eax, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %edi, %ebp
	addl 24(%esi), %ebp
	addl $-899497514, %ebp
	movl %ebp, %edi

	roll $30, %ebx

	// i=71
	movl %eax, %ebp
	xorl %ebx, %ebp
	xorl %ecx, %ebp
	movl %ebp, (%esp)

	movl 28(%esi), %ebp
	xorl 36(%esi), %ebp
	xorl 60(%esi), %ebp
	xorl 16(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 28(%esi)

	movl %edi, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %edx, %ebp
	addl 28(%esi), %ebp
	addl $-899497514, %ebp
	movl %ebp, %edx

	roll $30, %eax

	// i=72
	movl %edi, %ebp
	xorl %eax, %ebp
	xorl %ebx, %ebp
	movl %ebp, (%esp)

	movl 32(%esi), %ebp
	xorl 40(%esi), %ebp
	xorl 0(%esi), %ebp
	xorl 20(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 32(%esi)

	movl %edx, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %ecx, %ebp
	addl 32(%esi), %ebp
	addl $-899497514, %ebp
	movl %ebp, %ecx

	roll $30, %edi

	// i=73
	movl %edx, %ebp
	xorl %edi, %ebp
	xorl %eax, %ebp
	movl %ebp, (%esp)

	movl 36(%esi), %ebp
	xorl 44(%esi), %ebp
	xorl 4(%esi), %ebp
	xorl 24(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 36(%esi)

	movl %ecx, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %ebx, %ebp
	addl 36(%esi), %ebp
	addl $-899497514, %ebp
	movl %ebp, %ebx

	roll $30, %edx

	// i=74
	movl %ecx, %ebp
	xorl %edx, %ebp
	xorl %edi, %ebp
	movl %ebp, (%esp)

	movl 40(%esi), %ebp
	xorl 48(%esi), %ebp
	xorl 8(%esi), %ebp
	xorl 28(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 40(%esi)

	movl %ebx, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %eax, %ebp
	addl 40(%esi), %ebp
	addl $-899497514, %ebp
	movl %ebp, %eax

	roll $30, %ecx

	// i=75
	movl %ebx, %ebp
	xorl %ecx, %ebp
	xorl %edx, %ebp
	movl %ebp, (%esp)

	movl 44(%esi), %ebp
	xorl 52(%esi), %ebp
	xorl 12(%esi), %ebp
	xorl 32(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 44(%esi)

	movl %eax, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %edi, %ebp
	addl 44(%esi), %ebp
	addl $-899497514, %ebp
	movl %ebp, %edi

	roll $30, %ebx

	// i=76
	movl %eax, %ebp
	xorl %ebx, %ebp
	xorl %ecx, %ebp
	movl %ebp, (%esp)

	movl 48(%esi), %ebp
	xorl 56(%esi), %ebp
	xorl 16(%esi), %ebp
	xorl 36(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 48(%esi)

	movl %edi, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %edx, %ebp
	addl 48(%esi), %ebp
	addl $-899497514, %ebp
	movl %ebp, %edx

	roll $30, %eax

	// i=77
	movl %edi, %ebp
	xorl %eax, %ebp
	xorl %ebx, %ebp
	movl %ebp, (%esp)

	movl 52(%esi), %ebp
	xorl 60(%esi), %ebp
	xorl 20(%esi), %ebp
	xorl 40(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 52(%esi)

	movl %edx, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %ecx, %ebp
	addl 52(%esi), %ebp
	addl $-899497514, %ebp
	movl %ebp, %ecx

	roll $30, %edi

	// i=78
	movl %edx, %ebp
	xorl %edi, %ebp
	xorl %eax, %ebp
	movl %ebp, (%esp)

	movl 56(%esi), %ebp
	xorl 0(%esi), %ebp
	xorl 24(%esi), %ebp
	xorl 44(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 56(%esi)

	movl %ecx, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %ebx, %ebp
	addl 56(%esi), %ebp
	addl $-899497514, %ebp
	movl %ebp, %ebx

	roll $30, %edx

	// i=79
	movl %ecx, %ebp
	xorl %edx, %ebp
	xorl %edi, %ebp
	movl %ebp, (%esp)

	movl 60(%esi), %ebp
	xorl 4(%esi), %ebp
	xorl 28(%esi), %ebp
	xorl 48(%esi), %ebp
	roll $1, %ebp
	movl %ebp, 60(%esi)

	movl %ebx, %ebp
	roll $5, %ebp
	addl (%esp), %ebp
	addl %eax, %ebp
	addl 60(%esi), %ebp
	addl $-899497514, %ebp
	movl %ebp, %eax

	roll $30, %ecx



	popl %ebp
	popl %ebp
	
	movl 8(%ebp), %esi
	movl %eax, (%esi)
	movl 12(%ebp), %esi
	movl %ebx, (%esi)
	movl 16(%ebp), %esi
	movl %ecx, (%esi)
	movl 20(%ebp), %esi
	movl %edx, (%esi)
	movl 24(%ebp), %esi
	movl %edi, (%esi)
	
	popl %eax
	popl %ebx
	popl %ecx
	popl %edx
	popl %edi
	popl %esi

	popl %ebp

	ret
