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