1f741a1aab5fd7892927208ca37eb86b9ea85784aNicolas Pitre/*
2f741a1aab5fd7892927208ca37eb86b9ea85784aNicolas Pitre *  linux/arch/arm/lib/muldi3.S
3f741a1aab5fd7892927208ca37eb86b9ea85784aNicolas Pitre *
4f741a1aab5fd7892927208ca37eb86b9ea85784aNicolas Pitre *  Author:     Nicolas Pitre
5f741a1aab5fd7892927208ca37eb86b9ea85784aNicolas Pitre *  Created:    Oct 19, 2005
6f741a1aab5fd7892927208ca37eb86b9ea85784aNicolas Pitre *  Copyright:  Monta Vista Software, Inc.
7f741a1aab5fd7892927208ca37eb86b9ea85784aNicolas Pitre *
8f741a1aab5fd7892927208ca37eb86b9ea85784aNicolas Pitre *  This program is free software; you can redistribute it and/or modify
9f741a1aab5fd7892927208ca37eb86b9ea85784aNicolas Pitre *  it under the terms of the GNU General Public License version 2 as
10f741a1aab5fd7892927208ca37eb86b9ea85784aNicolas Pitre *  published by the Free Software Foundation.
11f741a1aab5fd7892927208ca37eb86b9ea85784aNicolas Pitre */
12f741a1aab5fd7892927208ca37eb86b9ea85784aNicolas Pitre
13f741a1aab5fd7892927208ca37eb86b9ea85784aNicolas Pitre#include <linux/linkage.h>
14f741a1aab5fd7892927208ca37eb86b9ea85784aNicolas Pitre
15f741a1aab5fd7892927208ca37eb86b9ea85784aNicolas Pitre#ifdef __ARMEB__
16f741a1aab5fd7892927208ca37eb86b9ea85784aNicolas Pitre#define xh r0
17f741a1aab5fd7892927208ca37eb86b9ea85784aNicolas Pitre#define xl r1
18f741a1aab5fd7892927208ca37eb86b9ea85784aNicolas Pitre#define yh r2
19f741a1aab5fd7892927208ca37eb86b9ea85784aNicolas Pitre#define yl r3
20f741a1aab5fd7892927208ca37eb86b9ea85784aNicolas Pitre#else
21f741a1aab5fd7892927208ca37eb86b9ea85784aNicolas Pitre#define xl r0
22f741a1aab5fd7892927208ca37eb86b9ea85784aNicolas Pitre#define xh r1
23f741a1aab5fd7892927208ca37eb86b9ea85784aNicolas Pitre#define yl r2
24f741a1aab5fd7892927208ca37eb86b9ea85784aNicolas Pitre#define yh r3
25f741a1aab5fd7892927208ca37eb86b9ea85784aNicolas Pitre#endif
26f741a1aab5fd7892927208ca37eb86b9ea85784aNicolas Pitre
27f741a1aab5fd7892927208ca37eb86b9ea85784aNicolas PitreENTRY(__muldi3)
28ba95e4e4a0a8a3c6aba363d45f78d5f2e2d111ebNicolas PitreENTRY(__aeabi_lmul)
29f741a1aab5fd7892927208ca37eb86b9ea85784aNicolas Pitre
30f741a1aab5fd7892927208ca37eb86b9ea85784aNicolas Pitre	mul	xh, yl, xh
31f741a1aab5fd7892927208ca37eb86b9ea85784aNicolas Pitre	mla	xh, xl, yh, xh
323c8fdae78cf5d73c6739912a1ff087c0f23b2a47Russell King	mov	ip, xl, lsr #16
333c8fdae78cf5d73c6739912a1ff087c0f23b2a47Russell King	mov	yh, yl, lsr #16
34f741a1aab5fd7892927208ca37eb86b9ea85784aNicolas Pitre	bic	xl, xl, ip, lsl #16
35f741a1aab5fd7892927208ca37eb86b9ea85784aNicolas Pitre	bic	yl, yl, yh, lsl #16
36f741a1aab5fd7892927208ca37eb86b9ea85784aNicolas Pitre	mla	xh, yh, ip, xh
37f741a1aab5fd7892927208ca37eb86b9ea85784aNicolas Pitre	mul	yh, xl, yh
38f741a1aab5fd7892927208ca37eb86b9ea85784aNicolas Pitre	mul	xl, yl, xl
39f741a1aab5fd7892927208ca37eb86b9ea85784aNicolas Pitre	mul	ip, yl, ip
40f741a1aab5fd7892927208ca37eb86b9ea85784aNicolas Pitre	adds	xl, xl, yh, lsl #16
41f741a1aab5fd7892927208ca37eb86b9ea85784aNicolas Pitre	adc	xh, xh, yh, lsr #16
42f741a1aab5fd7892927208ca37eb86b9ea85784aNicolas Pitre	adds	xl, xl, ip, lsl #16
43f741a1aab5fd7892927208ca37eb86b9ea85784aNicolas Pitre	adc	xh, xh, ip, lsr #16
44f741a1aab5fd7892927208ca37eb86b9ea85784aNicolas Pitre	mov	pc, lr
45f741a1aab5fd7892927208ca37eb86b9ea85784aNicolas Pitre
4693ed3970114983543bbebd195bef65db84444ea2Catalin MarinasENDPROC(__muldi3)
4793ed3970114983543bbebd195bef65db84444ea2Catalin MarinasENDPROC(__aeabi_lmul)
48