xref: /openbmc/u-boot/arch/arm/lib/muldi3.S (revision 83d290c56fab2d38cd1ab4c4cc7099559c1d5046)
1*83d290c5STom Rini/* SPDX-License-Identifier: GPL-2.0 */
20bf65c64SMarek Vasut/*
30bf65c64SMarek Vasut *  linux/arch/arm/lib/muldi3.S
40bf65c64SMarek Vasut *
50bf65c64SMarek Vasut *  Author:     Nicolas Pitre
60bf65c64SMarek Vasut *  Created:    Oct 19, 2005
70bf65c64SMarek Vasut *  Copyright:  Monta Vista Software, Inc.
80bf65c64SMarek Vasut */
90bf65c64SMarek Vasut
100bf65c64SMarek Vasut#include <linux/linkage.h>
110bf65c64SMarek Vasut#include <asm/assembler.h>
120bf65c64SMarek Vasut
130bf65c64SMarek Vasut#ifdef __ARMEB__
140bf65c64SMarek Vasut#define xh r0
150bf65c64SMarek Vasut#define xl r1
160bf65c64SMarek Vasut#define yh r2
170bf65c64SMarek Vasut#define yl r3
180bf65c64SMarek Vasut#else
190bf65c64SMarek Vasut#define xl r0
200bf65c64SMarek Vasut#define xh r1
210bf65c64SMarek Vasut#define yl r2
220bf65c64SMarek Vasut#define yh r3
230bf65c64SMarek Vasut#endif
240bf65c64SMarek Vasut
25b2f18584SStephen Warren.pushsection .text.__muldi3, "ax"
260bf65c64SMarek VasutENTRY(__muldi3)
270bf65c64SMarek VasutENTRY(__aeabi_lmul)
280bf65c64SMarek Vasut
290bf65c64SMarek Vasut	mul	xh, yl, xh
300bf65c64SMarek Vasut	mla	xh, xl, yh, xh
310bf65c64SMarek Vasut	mov	ip, xl, lsr #16
320bf65c64SMarek Vasut	mov	yh, yl, lsr #16
330bf65c64SMarek Vasut	bic	xl, xl, ip, lsl #16
340bf65c64SMarek Vasut	bic	yl, yl, yh, lsl #16
350bf65c64SMarek Vasut	mla	xh, yh, ip, xh
360bf65c64SMarek Vasut	mul	yh, xl, yh
370bf65c64SMarek Vasut	mul	xl, yl, xl
380bf65c64SMarek Vasut	mul	ip, yl, ip
390bf65c64SMarek Vasut	adds	xl, xl, yh, lsl #16
400bf65c64SMarek Vasut	adc	xh, xh, yh, lsr #16
410bf65c64SMarek Vasut	adds	xl, xl, ip, lsl #16
420bf65c64SMarek Vasut	adc	xh, xh, ip, lsr #16
430bf65c64SMarek Vasut	ret	lr
440bf65c64SMarek Vasut
450bf65c64SMarek VasutENDPROC(__muldi3)
460bf65c64SMarek VasutENDPROC(__aeabi_lmul)
47b2f18584SStephen Warren.popsection
48