diff options
Diffstat (limited to 'linden/indra/libgcrypt/libgcrypt-1.2.2/mpi/m68k/mc68020/mpih-mul3.S')
-rw-r--r--[-rwxr-xr-x] | linden/indra/libgcrypt/libgcrypt-1.2.2/mpi/m68k/mc68020/mpih-mul3.S | 194 |
1 files changed, 97 insertions, 97 deletions
diff --git a/linden/indra/libgcrypt/libgcrypt-1.2.2/mpi/m68k/mc68020/mpih-mul3.S b/linden/indra/libgcrypt/libgcrypt-1.2.2/mpi/m68k/mc68020/mpih-mul3.S index b1cc0f0..e958ef6 100755..100644 --- a/linden/indra/libgcrypt/libgcrypt-1.2.2/mpi/m68k/mc68020/mpih-mul3.S +++ b/linden/indra/libgcrypt/libgcrypt-1.2.2/mpi/m68k/mc68020/mpih-mul3.S | |||
@@ -1,97 +1,97 @@ | |||
1 | /* mc68020 __mpn_submul_1 -- Multiply a limb vector with a limb and subtract | 1 | /* mc68020 __mpn_submul_1 -- Multiply a limb vector with a limb and subtract |
2 | * the result from a second limb vector. | 2 | * the result from 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 | 31 | ||
32 | 32 | ||
33 | #include "sysdep.h" | 33 | #include "sysdep.h" |
34 | #include "asm-syntax.h" | 34 | #include "asm-syntax.h" |
35 | 35 | ||
36 | /******************* | 36 | /******************* |
37 | * mpi_limb_t | 37 | * mpi_limb_t |
38 | * _gcry_mpih_submul_1( mpi_ptr_t res_ptr, (sp + 4) | 38 | * _gcry_mpih_submul_1( mpi_ptr_t res_ptr, (sp + 4) |
39 | * mpi_ptr_t s1_ptr, (sp + 8) | 39 | * mpi_ptr_t s1_ptr, (sp + 8) |
40 | * mpi_size_t s1_size, (sp + 12) | 40 | * mpi_size_t s1_size, (sp + 12) |
41 | * mpi_limb_t s2_limb) (sp + 16) | 41 | * mpi_limb_t s2_limb) (sp + 16) |
42 | */ | 42 | */ |
43 | 43 | ||
44 | 44 | ||
45 | TEXT | 45 | TEXT |
46 | ALIGN | 46 | ALIGN |
47 | GLOBL C_SYMBOL_NAME(_gcry_mpih_submul_1) | 47 | GLOBL C_SYMBOL_NAME(_gcry_mpih_submul_1) |
48 | 48 | ||
49 | C_SYMBOL_NAME(_gcry_mpih_submul_1:) | 49 | C_SYMBOL_NAME(_gcry_mpih_submul_1:) |
50 | PROLOG(_gcry_mpih_submul_1) | 50 | PROLOG(_gcry_mpih_submul_1) |
51 | 51 | ||
52 | #define res_ptr a0 | 52 | #define res_ptr a0 |
53 | #define s1_ptr a1 | 53 | #define s1_ptr a1 |
54 | #define s1_size d2 | 54 | #define s1_size d2 |
55 | #define s2_limb d4 | 55 | #define s2_limb d4 |
56 | 56 | ||
57 | /* Save used registers on the stack. */ | 57 | /* Save used registers on the stack. */ |
58 | moveml R(d2)-R(d5),MEM_PREDEC(sp) | 58 | moveml R(d2)-R(d5),MEM_PREDEC(sp) |
59 | 59 | ||
60 | /* Copy the arguments to registers. Better use movem? */ | 60 | /* Copy the arguments to registers. Better use movem? */ |
61 | movel MEM_DISP(sp,20),R(res_ptr) | 61 | movel MEM_DISP(sp,20),R(res_ptr) |
62 | movel MEM_DISP(sp,24),R(s1_ptr) | 62 | movel MEM_DISP(sp,24),R(s1_ptr) |
63 | movel MEM_DISP(sp,28),R(s1_size) | 63 | movel MEM_DISP(sp,28),R(s1_size) |
64 | movel MEM_DISP(sp,32),R(s2_limb) | 64 | movel MEM_DISP(sp,32),R(s2_limb) |
65 | 65 | ||
66 | eorw #1,R(s1_size) | 66 | eorw #1,R(s1_size) |
67 | clrl R(d1) | 67 | clrl R(d1) |
68 | clrl R(d5) | 68 | clrl R(d5) |
69 | lsrl #1,R(s1_size) | 69 | lsrl #1,R(s1_size) |
70 | bcc L(L1) | 70 | bcc L(L1) |
71 | subql #1,R(s1_size) | 71 | subql #1,R(s1_size) |
72 | subl R(d0),R(d0) /* (d0,cy) <= (0,0) */ | 72 | subl R(d0),R(d0) /* (d0,cy) <= (0,0) */ |
73 | 73 | ||
74 | L(Loop:) | 74 | L(Loop:) |
75 | movel MEM_POSTINC(s1_ptr),R(d3) | 75 | movel MEM_POSTINC(s1_ptr),R(d3) |
76 | mulul R(s2_limb),R(d1):R(d3) | 76 | mulul R(s2_limb),R(d1):R(d3) |
77 | addxl R(d0),R(d3) | 77 | addxl R(d0),R(d3) |
78 | addxl R(d5),R(d1) | 78 | addxl R(d5),R(d1) |
79 | subl R(d3),MEM_POSTINC(res_ptr) | 79 | subl R(d3),MEM_POSTINC(res_ptr) |
80 | L(L1:) movel MEM_POSTINC(s1_ptr),R(d3) | 80 | L(L1:) movel MEM_POSTINC(s1_ptr),R(d3) |
81 | mulul R(s2_limb),R(d0):R(d3) | 81 | mulul R(s2_limb),R(d0):R(d3) |
82 | addxl R(d1),R(d3) | 82 | addxl R(d1),R(d3) |
83 | addxl R(d5),R(d0) | 83 | addxl R(d5),R(d0) |
84 | subl R(d3),MEM_POSTINC(res_ptr) | 84 | subl R(d3),MEM_POSTINC(res_ptr) |
85 | 85 | ||
86 | dbf R(s1_size),L(Loop) | 86 | dbf R(s1_size),L(Loop) |
87 | addxl R(d5),R(d0) | 87 | addxl R(d5),R(d0) |
88 | subl #0x10000,R(s1_size) | 88 | subl #0x10000,R(s1_size) |
89 | bcc L(Loop) | 89 | bcc L(Loop) |
90 | 90 | ||
91 | /* Restore used registers from stack frame. */ | 91 | /* Restore used registers from stack frame. */ |
92 | moveml MEM_POSTINC(sp),R(d2)-R(d5) | 92 | moveml MEM_POSTINC(sp),R(d2)-R(d5) |
93 | 93 | ||
94 | rts | 94 | rts |
95 | EPILOG(_gcry_mpih_submul_1) | 95 | EPILOG(_gcry_mpih_submul_1) |
96 | 96 | ||
97 | 97 | ||