1 /* SPDX-License-Identifier: GPL-2.0-only */ !! 1 /* SPDX-License-Identifier: GPL-2.0-or-later */ 2 /* !! 2 /* Copyright (C) 1989, 1992, 1993, 1994, 1995 Free Software Foundation, Inc. 3 * linux/arch/arm/lib/muldi3.S << 4 * << 5 * Author: Nicolas Pitre << 6 * Created: Oct 19, 2005 << 7 * Copyright: Monta Vista Software, Inc. << 8 */ << 9 << 10 #include <linux/linkage.h> << 11 #include <asm/assembler.h> << 12 3 13 #ifdef __ARMEB__ !! 4 This file is part of GNU CC. 14 #define xh r0 << 15 #define xl r1 << 16 #define yh r2 << 17 #define yl r3 << 18 #else << 19 #define xl r0 << 20 #define xh r1 << 21 #define yl r2 << 22 #define yh r3 << 23 #endif << 24 5 25 ENTRY(__muldi3) !! 6 */ 26 ENTRY(__aeabi_lmul) << 27 << 28 mul xh, yl, xh << 29 mla xh, xl, yh, xh << 30 mov ip, xl, lsr #16 << 31 mov yh, yl, lsr #16 << 32 bic xl, xl, ip, lsl #16 << 33 bic yl, yl, yh, lsl #16 << 34 mla xh, yh, ip, xh << 35 mul yh, xl, yh << 36 mul xl, yl, xl << 37 mul ip, yl, ip << 38 adds xl, xl, yh, lsl #16 << 39 adc xh, xh, yh, lsr #16 << 40 adds xl, xl, ip, lsl #16 << 41 adc xh, xh, ip, lsr #16 << 42 ret lr << 43 7 44 ENDPROC(__muldi3) !! 8 #include <linux/export.h> 45 ENDPROC(__aeabi_lmul) !! 9 .text >> 10 .align 4 >> 11 .globl __muldi3 >> 12 __muldi3: >> 13 save %sp, -104, %sp >> 14 wr %g0, %i1, %y >> 15 sra %i3, 0x1f, %g2 >> 16 and %i1, %g2, %g2 >> 17 andcc %g0, 0, %g1 >> 18 mulscc %g1, %i3, %g1 >> 19 mulscc %g1, %i3, %g1 >> 20 mulscc %g1, %i3, %g1 >> 21 mulscc %g1, %i3, %g1 >> 22 mulscc %g1, %i3, %g1 >> 23 mulscc %g1, %i3, %g1 >> 24 mulscc %g1, %i3, %g1 >> 25 mulscc %g1, %i3, %g1 >> 26 mulscc %g1, %i3, %g1 >> 27 mulscc %g1, %i3, %g1 >> 28 mulscc %g1, %i3, %g1 >> 29 mulscc %g1, %i3, %g1 >> 30 mulscc %g1, %i3, %g1 >> 31 mulscc %g1, %i3, %g1 >> 32 mulscc %g1, %i3, %g1 >> 33 mulscc %g1, %i3, %g1 >> 34 mulscc %g1, %i3, %g1 >> 35 mulscc %g1, %i3, %g1 >> 36 mulscc %g1, %i3, %g1 >> 37 mulscc %g1, %i3, %g1 >> 38 mulscc %g1, %i3, %g1 >> 39 mulscc %g1, %i3, %g1 >> 40 mulscc %g1, %i3, %g1 >> 41 mulscc %g1, %i3, %g1 >> 42 mulscc %g1, %i3, %g1 >> 43 mulscc %g1, %i3, %g1 >> 44 mulscc %g1, %i3, %g1 >> 45 mulscc %g1, %i3, %g1 >> 46 mulscc %g1, %i3, %g1 >> 47 mulscc %g1, %i3, %g1 >> 48 mulscc %g1, %i3, %g1 >> 49 mulscc %g1, %i3, %g1 >> 50 mulscc %g1, 0, %g1 >> 51 add %g1, %g2, %l2 >> 52 rd %y, %o1 >> 53 mov %o1, %l3 >> 54 mov %i1, %o0 >> 55 mov %i2, %o1 >> 56 umul %o0, %o1, %o0 >> 57 mov %o0, %l0 >> 58 mov %i0, %o0 >> 59 mov %i3, %o1 >> 60 umul %o0, %o1, %o0 >> 61 add %l0, %o0, %l0 >> 62 mov %l2, %i0 >> 63 add %l2, %l0, %i0 >> 64 ret >> 65 restore %g0, %l3, %o1 >> 66 EXPORT_SYMBOL(__muldi3)
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.