xref: /linux/arch/arm/lib/muldi3.S (revision 75bf465f0bc33e9b776a46d6a1b9b990f5fb7c37)
1*d2912cb1SThomas Gleixner/* SPDX-License-Identifier: GPL-2.0-only */
2f741a1aaSNicolas Pitre/*
3f741a1aaSNicolas Pitre *  linux/arch/arm/lib/muldi3.S
4f741a1aaSNicolas Pitre *
5f741a1aaSNicolas Pitre *  Author:     Nicolas Pitre
6f741a1aaSNicolas Pitre *  Created:    Oct 19, 2005
7f741a1aaSNicolas Pitre *  Copyright:  Monta Vista Software, Inc.
8f741a1aaSNicolas Pitre */
9f741a1aaSNicolas Pitre
10f741a1aaSNicolas Pitre#include <linux/linkage.h>
116ebbf2ceSRussell King#include <asm/assembler.h>
12f741a1aaSNicolas Pitre
13f741a1aaSNicolas Pitre#ifdef __ARMEB__
14f741a1aaSNicolas Pitre#define xh r0
15f741a1aaSNicolas Pitre#define xl r1
16f741a1aaSNicolas Pitre#define yh r2
17f741a1aaSNicolas Pitre#define yl r3
18f741a1aaSNicolas Pitre#else
19f741a1aaSNicolas Pitre#define xl r0
20f741a1aaSNicolas Pitre#define xh r1
21f741a1aaSNicolas Pitre#define yl r2
22f741a1aaSNicolas Pitre#define yh r3
23f741a1aaSNicolas Pitre#endif
24f741a1aaSNicolas Pitre
25f741a1aaSNicolas PitreENTRY(__muldi3)
26ba95e4e4SNicolas PitreENTRY(__aeabi_lmul)
27f741a1aaSNicolas Pitre
28f741a1aaSNicolas Pitre	mul	xh, yl, xh
29f741a1aaSNicolas Pitre	mla	xh, xl, yh, xh
303c8fdae7SRussell King	mov	ip, xl, lsr #16
313c8fdae7SRussell King	mov	yh, yl, lsr #16
32f741a1aaSNicolas Pitre	bic	xl, xl, ip, lsl #16
33f741a1aaSNicolas Pitre	bic	yl, yl, yh, lsl #16
34f741a1aaSNicolas Pitre	mla	xh, yh, ip, xh
35f741a1aaSNicolas Pitre	mul	yh, xl, yh
36f741a1aaSNicolas Pitre	mul	xl, yl, xl
37f741a1aaSNicolas Pitre	mul	ip, yl, ip
38f741a1aaSNicolas Pitre	adds	xl, xl, yh, lsl #16
39f741a1aaSNicolas Pitre	adc	xh, xh, yh, lsr #16
40f741a1aaSNicolas Pitre	adds	xl, xl, ip, lsl #16
41f741a1aaSNicolas Pitre	adc	xh, xh, ip, lsr #16
426ebbf2ceSRussell King	ret	lr
43f741a1aaSNicolas Pitre
4493ed3970SCatalin MarinasENDPROC(__muldi3)
4593ed3970SCatalin MarinasENDPROC(__aeabi_lmul)
46