diff options
Diffstat (limited to 'linden/indra/libgcrypt/libgcrypt-1.2.2/mpi/m68k/mc68020/mpih-mul2.S')
-rw-r--r--[-rwxr-xr-x] | linden/indra/libgcrypt/libgcrypt-1.2.2/mpi/m68k/mc68020/mpih-mul2.S | 188 |
1 files changed, 94 insertions, 94 deletions
diff --git a/linden/indra/libgcrypt/libgcrypt-1.2.2/mpi/m68k/mc68020/mpih-mul2.S b/linden/indra/libgcrypt/libgcrypt-1.2.2/mpi/m68k/mc68020/mpih-mul2.S index f550939..44baa8d 100755..100644 --- a/linden/indra/libgcrypt/libgcrypt-1.2.2/mpi/m68k/mc68020/mpih-mul2.S +++ b/linden/indra/libgcrypt/libgcrypt-1.2.2/mpi/m68k/mc68020/mpih-mul2.S | |||
@@ -1,94 +1,94 @@ | |||
1 | /* mc68020 __mpn_addmul_1 -- Multiply a limb vector with a limb and add | 1 | /* mc68020 __mpn_addmul_1 -- Multiply a limb vector with a limb and add |
2 | * the result to a second limb vector. | 2 | * the result to a second limb vector. |
3 | * | 3 | * |
4 | * Copyright (C) 1992, 1994, 1996, 1998, | 4 | * Copyright (C) 1992, 1994, 1996, 1998, |
5 | * 2001, 2002 Free Software Foundation, Inc. | 5 | * 2001, 2002 Free Software Foundation, Inc. |
6 | * | 6 | * |
7 | * This file is part of Libgcrypt. | 7 | * This file is part of Libgcrypt. |
8 | * | 8 | * |
9 | * Libgcrypt is free software; you can redistribute it and/or modify | 9 | * Libgcrypt is free software; you can redistribute it and/or modify |
10 | * it under the terms of the GNU Lesser General Public License as | 10 | * it under the terms of the GNU Lesser General Public License as |
11 | * published by the Free Software Foundation; either version 2.1 of | 11 | * published by the Free Software Foundation; either version 2.1 of |
12 | * the License, or (at your option) any later version. | 12 | * the License, or (at your option) any later version. |
13 | * | 13 | * |
14 | * Libgcrypt is distributed in the hope that it will be useful, | 14 | * Libgcrypt is distributed in the hope that it will be useful, |
15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | 15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
17 | * GNU Lesser General Public License for more details. | 17 | * GNU Lesser General Public License for more details. |
18 | * | 18 | * |
19 | * You should have received a copy of the GNU Lesser General Public | 19 | * You should have received a copy of the GNU Lesser General Public |
20 | * License along with this program; if not, write to the Free Software | 20 | * License along with this program; if not, write to the Free Software |
21 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA | 21 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA |
22 | * | 22 | * |
23 | * Note: This code is heavily based on the GNU MP Library. | 23 | * Note: This code is heavily based on the GNU MP Library. |
24 | * Actually it's the same code with only minor changes in the | 24 | * Actually it's the same code with only minor changes in the |
25 | * way the data is stored; this is to support the abstraction | 25 | * way the data is stored; this is to support the abstraction |
26 | * of an optional secure memory allocation which may be used | 26 | * of an optional secure memory allocation which may be used |
27 | * to avoid revealing of sensitive data due to paging etc. | 27 | * to avoid revealing of sensitive data due to paging etc. |
28 | */ | 28 | */ |
29 | 29 | ||
30 | 30 | ||
31 | #include "sysdep.h" | 31 | #include "sysdep.h" |
32 | #include "asm-syntax.h" | 32 | #include "asm-syntax.h" |
33 | 33 | ||
34 | /******************* | 34 | /******************* |
35 | * mpi_limb_t | 35 | * mpi_limb_t |
36 | * _gcry_mpih_addmul_1( mpi_ptr_t res_ptr, (sp + 4) | 36 | * _gcry_mpih_addmul_1( mpi_ptr_t res_ptr, (sp + 4) |
37 | * mpi_ptr_t s1_ptr, (sp + 8) | 37 | * mpi_ptr_t s1_ptr, (sp + 8) |
38 | * mpi_size_t s1_size, (sp + 12) | 38 | * mpi_size_t s1_size, (sp + 12) |
39 | * mpi_limb_t s2_limb) (sp + 16) | 39 | * mpi_limb_t s2_limb) (sp + 16) |
40 | */ | 40 | */ |
41 | 41 | ||
42 | 42 | ||
43 | TEXT | 43 | TEXT |
44 | ALIGN | 44 | ALIGN |
45 | GLOBL C_SYMBOL_NAME(_gcry_mpih_addmul_1) | 45 | GLOBL C_SYMBOL_NAME(_gcry_mpih_addmul_1) |
46 | 46 | ||
47 | C_SYMBOL_NAME(_gcry_mpih_addmul_1:) | 47 | C_SYMBOL_NAME(_gcry_mpih_addmul_1:) |
48 | PROLOG(_gcry_mpih_addmul_1) | 48 | PROLOG(_gcry_mpih_addmul_1) |
49 | 49 | ||
50 | #define res_ptr a0 | 50 | #define res_ptr a0 |
51 | #define s1_ptr a1 | 51 | #define s1_ptr a1 |
52 | #define s1_size d2 | 52 | #define s1_size d2 |
53 | #define s2_limb d4 | 53 | #define s2_limb d4 |
54 | 54 | ||
55 | /* Save used registers on the stack. */ | 55 | /* Save used registers on the stack. */ |
56 | moveml R(d2)-R(d5),MEM_PREDEC(sp) | 56 | moveml R(d2)-R(d5),MEM_PREDEC(sp) |
57 | 57 | ||
58 | /* Copy the arguments to registers. Better use movem? */ | 58 | /* Copy the arguments to registers. Better use movem? */ |
59 | movel MEM_DISP(sp,20),R(res_ptr) | 59 | movel MEM_DISP(sp,20),R(res_ptr) |
60 | movel MEM_DISP(sp,24),R(s1_ptr) | 60 | movel MEM_DISP(sp,24),R(s1_ptr) |
61 | movel MEM_DISP(sp,28),R(s1_size) | 61 | movel MEM_DISP(sp,28),R(s1_size) |
62 | movel MEM_DISP(sp,32),R(s2_limb) | 62 | movel MEM_DISP(sp,32),R(s2_limb) |
63 | 63 | ||
64 | eorw #1,R(s1_size) | 64 | eorw #1,R(s1_size) |
65 | clrl R(d1) | 65 | clrl R(d1) |
66 | clrl R(d5) | 66 | clrl R(d5) |
67 | lsrl #1,R(s1_size) | 67 | lsrl #1,R(s1_size) |
68 | bcc L(L1) | 68 | bcc L(L1) |
69 | subql #1,R(s1_size) | 69 | subql #1,R(s1_size) |
70 | subl R(d0),R(d0) /* (d0,cy) <= (0,0) */ | 70 | subl R(d0),R(d0) /* (d0,cy) <= (0,0) */ |
71 | 71 | ||
72 | L(Loop:) | 72 | L(Loop:) |
73 | movel MEM_POSTINC(s1_ptr),R(d3) | 73 | movel MEM_POSTINC(s1_ptr),R(d3) |
74 | mulul R(s2_limb),R(d1):R(d3) | 74 | mulul R(s2_limb),R(d1):R(d3) |
75 | addxl R(d0),R(d3) | 75 | addxl R(d0),R(d3) |
76 | addxl R(d5),R(d1) | 76 | addxl R(d5),R(d1) |
77 | addl R(d3),MEM_POSTINC(res_ptr) | 77 | addl R(d3),MEM_POSTINC(res_ptr) |
78 | L(L1:) movel MEM_POSTINC(s1_ptr),R(d3) | 78 | L(L1:) movel MEM_POSTINC(s1_ptr),R(d3) |
79 | mulul R(s2_limb),R(d0):R(d3) | 79 | mulul R(s2_limb),R(d0):R(d3) |
80 | addxl R(d1),R(d3) | 80 | addxl R(d1),R(d3) |
81 | addxl R(d5),R(d0) | 81 | addxl R(d5),R(d0) |
82 | addl R(d3),MEM_POSTINC(res_ptr) | 82 | addl R(d3),MEM_POSTINC(res_ptr) |
83 | 83 | ||
84 | dbf R(s1_size),L(Loop) | 84 | dbf R(s1_size),L(Loop) |
85 | addxl R(d5),R(d0) | 85 | addxl R(d5),R(d0) |
86 | subl #0x10000,R(s1_size) | 86 | subl #0x10000,R(s1_size) |
87 | bcc L(Loop) | 87 | bcc L(Loop) |
88 | 88 | ||
89 | /* Restore used registers from stack frame. */ | 89 | /* Restore used registers from stack frame. */ |
90 | moveml MEM_POSTINC(sp),R(d2)-R(d5) | 90 | moveml MEM_POSTINC(sp),R(d2)-R(d5) |
91 | 91 | ||
92 | rts | 92 | rts |
93 | EPILOG(_gcry_mpih_addmul_1) | 93 | EPILOG(_gcry_mpih_addmul_1) |
94 | 94 | ||