Use INTERNAL_SYSCALL.
[glibc.git] / sysdeps / z8000 / mul_1.s
blobe449dfacb049477f1d50c473d4c153e24d36ebd4
1 ! Z8000 __mpn_mul_1 -- Multiply a limb vector with a limb and store
2 ! the result in a second limb vector.
4 ! Copyright (C) 1993, 1994, 1995 Free Software Foundation, Inc.
6 ! This file is part of the GNU MP Library.
8 ! The GNU MP Library is free software; you can redistribute it and/or modify
9 ! it under the terms of the GNU Lesser General Public License as published by
10 ! the Free Software Foundation; either version 2.1 of the License, or (at your
11 ! option) any later version.
13 ! The GNU MP Library is distributed in the hope that it will be useful, but
14 ! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15 ! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
16 ! License for more details.
18 ! You should have received a copy of the GNU Lesser General Public License
19 ! along with the GNU MP Library; see the file COPYING.LIB. If not, write to
20 ! the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
21 ! MA 02111-1307, USA.
24 ! INPUT PARAMETERS
25 ! res_ptr r7
26 ! s1_ptr r6
27 ! size r5
28 ! s2_limb r4
30 unseg
31 .text
32 even
33 global ___mpn_mul_1
34 ___mpn_mul_1:
35 sub r2,r2 ! zero carry limb
36 and r4,r4
37 jr mi,Lneg
39 Lpos: pop r1,@r6
40 ld r9,r1
41 mult rr8,r4
42 and r1,r1 ! shift msb of loaded limb into cy
43 jr mi,Lp ! branch if loaded limb's msb is set
44 add r8,r4 ! hi_limb += sign_comp2
45 Lp: add r9,r2 ! lo_limb += cy_limb
46 xor r2,r2
47 adc r2,r8
48 ld @r7,r9
49 inc r7,#2
50 dec r5
51 jr ne,Lpos
52 ret t
54 Lneg: pop r1,@r6
55 ld r9,r1
56 mult rr8,r4
57 add r8,r1 ! hi_limb += sign_comp1
58 and r1,r1
59 jr mi,Ln
60 add r8,r4 ! hi_limb += sign_comp2
61 Ln: add r9,r2 ! lo_limb += cy_limb
62 xor r2,r2
63 adc r2,r8
64 ld @r7,r9
65 inc r7,#2
66 dec r5
67 jr ne,Lneg
68 ret t