]> git.ipfire.org Git - thirdparty/glibc.git/blame - sysdeps/i386/i586/mul_1.S
(pthread_mutex_timedlock): Document restrictions of mutex types.
[thirdparty/glibc.git] / sysdeps / i386 / i586 / mul_1.S
CommitLineData
8f5ca04b
RM
1/* Pentium __mpn_mul_1 -- Multiply a limb vector with a limb and store
2 the result in a second limb vector.
ae828bc6 3 Copyright (C) 1992, 94, 96, 97, 98 Free Software Foundation, Inc.
5929563f 4 This file is part of the GNU MP Library.
8f5ca04b 5
5929563f
UD
6 The GNU MP Library is free software; you can redistribute it and/or modify
7 it under the terms of the GNU Library General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or (at your
9 option) any later version.
8f5ca04b 10
5929563f
UD
11 The GNU MP Library is distributed in the hope that it will be useful, but
12 WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
14 License for more details.
8f5ca04b 15
5929563f
UD
16 You should have received a copy of the GNU Library General Public License
17 along with the GNU MP Library; see the file COPYING.LIB. If not, write to
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
19 MA 02111-1307, USA. */
8f5ca04b
RM
20
21/*
22 INPUT PARAMETERS
23 res_ptr (sp + 4)
24 s1_ptr (sp + 8)
25 size (sp + 12)
26 s2_limb (sp + 16)
27*/
28
29#include "sysdep.h"
30#include "asm-syntax.h"
31
32#define res_ptr edi
33#define s1_ptr esi
34#define size ecx
35#define s2_limb ebp
36
ae828bc6
UD
37 .text
38ENTRY(__mpn_mul_1)
8f5ca04b
RM
39
40 INSN1(push,l ,R(edi))
41 INSN1(push,l ,R(esi))
42 INSN1(push,l ,R(ebx))
43 INSN1(push,l ,R(ebp))
44
45 INSN2(mov,l ,R(res_ptr),MEM_DISP(esp,20))
46 INSN2(mov,l ,R(s1_ptr),MEM_DISP(esp,24))
47 INSN2(mov,l ,R(size),MEM_DISP(esp,28))
48 INSN2(mov,l ,R(s2_limb),MEM_DISP(esp,32))
49
50 INSN2(lea,l ,R(res_ptr),MEM_INDEX(res_ptr,size,4))
51 INSN2(lea,l ,R(s1_ptr),MEM_INDEX(s1_ptr,size,4))
52 INSN1(neg,l ,R(size))
6b628d36 53 INSN2(xor,l ,R(ebx),R(ebx))
8f5ca04b 54 ALIGN (3)
6b628d36 55
5929563f 56L(oop): INSN2(adc,l ,R(ebx),$0)
8f5ca04b
RM
57 INSN2(mov,l ,R(eax),MEM_INDEX(s1_ptr,size,4))
58
59 INSN1(mul,l ,R(s2_limb))
60
6b628d36 61 INSN2(add,l ,R(ebx),R(eax))
8f5ca04b 62
6b628d36 63 INSN2(mov,l ,MEM_INDEX(res_ptr,size,4),R(ebx))
8f5ca04b 64 INSN1(inc,l ,R(size))
8f5ca04b 65
6b628d36 66 INSN2(mov,l ,R(ebx),R(edx))
5929563f 67 INSN1(jnz, ,L(oop))
8f5ca04b 68
6b628d36
RM
69 INSN2(adc,l ,R(ebx),$0)
70 INSN2(mov,l ,R(eax),R(ebx))
8f5ca04b
RM
71 INSN1(pop,l ,R(ebp))
72 INSN1(pop,l ,R(ebx))
73 INSN1(pop,l ,R(esi))
74 INSN1(pop,l ,R(edi))
75 ret
ae828bc6
UD
76#undef size
77END(__mpn_mul_1)