github.com/aergoio/aergo@v1.3.1/libtool/src/gmp-6.1.2/mpn/m88k/mc88110/mul_1.s (about) 1 ; mc88110 __gmpn_mul_1 -- Multiply a limb vector with a single limb and 2 ; store the product in a second limb vector. 3 4 ; Copyright 1992, 1994, 1995, 2000 Free Software Foundation, Inc. 5 6 ; This file is part of the GNU MP Library. 7 ; 8 ; The GNU MP Library is free software; you can redistribute it and/or modify 9 ; it under the terms of either: 10 ; 11 ; * the GNU Lesser General Public License as published by the Free 12 ; Software Foundation; either version 3 of the License, or (at your 13 ; option) any later version. 14 ; 15 ; or 16 ; 17 ; * the GNU General Public License as published by the Free Software 18 ; Foundation; either version 2 of the License, or (at your option) any 19 ; later version. 20 ; 21 ; or both in parallel, as here. 22 ; 23 ; The GNU MP Library is distributed in the hope that it will be useful, but 24 ; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 25 ; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 26 ; for more details. 27 ; 28 ; You should have received copies of the GNU General Public License and the 29 ; GNU Lesser General Public License along with the GNU MP Library. If not, 30 ; see https://www.gnu.org/licenses/. 31 32 33 ; INPUT PARAMETERS 34 ; res_ptr r2 35 ; s1_ptr r3 36 ; size r4 37 ; s2_limb r5 38 39 text 40 align 16 41 global ___gmpn_mul_1 42 ___gmpn_mul_1: 43 ; Make S1_PTR and RES_PTR point at the end of their blocks 44 ; and negate SIZE. 45 lda r3,r3[r4] 46 lda r8,r2[r4] ; RES_PTR in r8 since r2 is retval 47 subu r4,r0,r4 48 49 addu.co r2,r0,r0 ; r2 = cy = 0 50 51 ld r6,r3[r4] 52 addu r4,r4,1 53 mulu.d r10,r6,r5 54 bcnd.n eq0,r4,Lend 55 subu r8,r8,8 56 57 Loop: ld r6,r3[r4] 58 addu.cio r9,r11,r2 59 or r2,r10,r0 ; could be avoided if unrolled 60 addu r4,r4,1 61 mulu.d r10,r6,r5 62 bcnd.n ne0,r4,Loop 63 st r9,r8[r4] 64 65 Lend: addu.cio r9,r11,r2 66 st r9,r8,4 67 jmp.n r1 68 addu.ci r2,r10,r0