diff options
Diffstat (limited to 'scripts/conf-w32brg/mpi/nasm586/mpih-lshift.asm')
-rw-r--r-- | scripts/conf-w32brg/mpi/nasm586/mpih-lshift.asm | 185 |
1 files changed, 185 insertions, 0 deletions
diff --git a/scripts/conf-w32brg/mpi/nasm586/mpih-lshift.asm b/scripts/conf-w32brg/mpi/nasm586/mpih-lshift.asm new file mode 100644 index 000000000..4915176c6 --- /dev/null +++ b/scripts/conf-w32brg/mpi/nasm586/mpih-lshift.asm @@ -0,0 +1,185 @@ + +; 80586 lshift +; +; Copyright (C) 1992, 1994, 1995, 1996, 1998, +; 2001 Free Software Foundation, Inc. +; +; This file is part of GnuPG. +; +; GnuPG is free software; you can redistribute it and/or modify +; it under the terms of the GNU General Public License as published by +; the Free Software Foundation; either version 2 of the License, or +; (at your option) any later version. +; +; GnuPG is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU General Public License +; along with this program; if not, write to the Free Software +; Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA +; +; Modified versions of the GPG i586 assembler for use with NASM. This +; file is part of a native port of Gnu PG for use with Microsoft Visual +; Studio .net. Ported by Brian Gladman <[email protected]> March 2002. + + global _mpihelp_lshift + + section .text + align 8 + +_mpihelp_lshift: + push edi + push esi + push ebx + push ebp + mov edi,[20+esp] + mov esi,[24+esp] + mov ebp,[28+esp] + mov ecx,[32+esp] + cmp ecx,1 + jne short .1 + lea eax,[4+esi] + cmp eax,edi + jnc .6 + lea eax,[esi+ebp*4] + cmp edi,eax + jnc .6 + +.1: lea edi,[-4+edi+ebp*4] + lea esi,[-4+esi+ebp*4] + + mov edx,[esi] + sub esi, 4 + xor eax,eax + shld eax,edx,cl + push eax + dec ebp + push ebp + shr ebp,3 + jz short .3 + mov eax, [edi] + + align 4 +.2: mov eax,[-28+edi] + mov ebx,edx + mov eax,[esi] + mov edx,[-4+esi] + shld ebx,eax,cl + shld eax,edx,cl + mov [edi],ebx + mov [-4+edi],eax + mov ebx,[-8+esi] + mov eax,[-12+esi] + shld edx,ebx,cl + shld ebx,eax,cl + mov [-8+edi],edx + mov [-12+edi],ebx + mov edx,[-16+esi] + mov ebx,[-20+esi] + shld eax,edx,cl + shld edx,ebx,cl + mov [-16+edi],eax + mov [-20+edi],edx + mov eax,[-24+esi] + mov edx,[-28+esi] + shld ebx,eax,cl + shld eax,edx,cl + mov [-24+edi],ebx + mov [-28+edi],eax + sub esi,32 + sub edi,32 + dec ebp + jnz short .2 + +.3: pop ebp + and ebp,7 + jz short .5 +.4: mov eax,[esi] + shld edx,eax,cl + mov [edi],edx + mov edx,eax + sub esi,4 + sub edi,4 + dec ebp + jnz short .4 + +.5: shl edx,cl + mov [edi],edx + pop eax + pop ebp + pop ebx + pop esi + pop edi + ret + +.6: mov edx,[esi] + add esi,4 + dec ebp + push ebp + shr ebp,3 + add edx,edx + inc ebp + dec ebp + jz short .8 + mov eax, [edi] + + align 4 +.7: mov eax,[28+edi] + mov ebx,edx + mov eax,[esi] + mov edx,[4+esi] + adc eax,eax + mov [edi],ebx + adc edx,edx + mov [4+edi],eax + mov ebx,[8+esi] + mov eax,[12+esi] + adc ebx,ebx + mov [8+edi],edx + adc eax,eax + mov [12+edi],ebx + mov edx,[16+esi] + mov ebx,[20+esi] + adc edx,edx + mov [16+edi],eax + adc ebx,ebx + mov [20+edi],edx + mov eax,[24+esi] + mov edx,[28+esi] + adc eax,eax + mov [24+edi],ebx + adc edx,edx + mov [28+edi],eax + lea esi,[32+esi] + lea edi,[32+edi] + dec ebp + jnz short .7 + +.8: pop ebp + sbb eax,eax + and ebp,7 + jz short .10 + add eax,eax +.9: mov ebx,edx + mov edx,[esi] + adc edx,edx + mov [edi],ebx + lea esi,[4+esi] + lea edi,[4+edi] + dec ebp + jnz short .9 + jmp short .11 +.10:add eax,eax +.11:mov [edi],edx + sbb eax,eax + neg eax + + pop ebp + pop ebx + pop esi + pop edi + ret + + end |