xref: /openbmc/linux/arch/sparc/lib/multi3.S (revision 4cdb71b6)
1b2441318SGreg Kroah-Hartman/* SPDX-License-Identifier: GPL-2.0 */
2*4cdb71b6SMasahiro Yamada#include <linux/export.h>
31b4af13fSDavid S. Miller#include <linux/linkage.h>
41b4af13fSDavid S. Miller
51b4af13fSDavid S. Miller	.text
61b4af13fSDavid S. Miller	.align	4
71b4af13fSDavid S. MillerENTRY(__multi3) /* %o0 = u, %o1 = v */
81b4af13fSDavid S. Miller	mov	%o1, %g1
979db7958SDavid S. Miller	srl	%o3, 0, %o4
1079db7958SDavid S. Miller	mulx	%o4, %g1, %o1
111b4af13fSDavid S. Miller	srlx	%g1, 0x20, %g3
1279db7958SDavid S. Miller	mulx	%g3, %o4, %g7
1379db7958SDavid S. Miller	sllx	%g7, 0x20, %o5
1479db7958SDavid S. Miller	srl	%g1, 0, %o4
151b4af13fSDavid S. Miller	sub	%o1, %o5, %o5
161b4af13fSDavid S. Miller	srlx	%o5, 0x20, %o5
1779db7958SDavid S. Miller	addcc	%g7, %o5, %g7
181b4af13fSDavid S. Miller	srlx	%o3, 0x20, %o5
1979db7958SDavid S. Miller	mulx	%o4, %o5, %o4
201b4af13fSDavid S. Miller	mulx	%g3, %o5, %o5
211b4af13fSDavid S. Miller	sethi	%hi(0x80000000), %g3
2279db7958SDavid S. Miller	addcc	%g7, %o4, %g7
2379db7958SDavid S. Miller	srlx	%g7, 0x20, %g7
241b4af13fSDavid S. Miller	add	%g3, %g3, %g3
251b4af13fSDavid S. Miller	movcc	%xcc, %g0, %g3
2679db7958SDavid S. Miller	addcc	%o5, %g7, %o5
2779db7958SDavid S. Miller	sllx	%o4, 0x20, %o4
2879db7958SDavid S. Miller	add	%o1, %o4, %o1
291b4af13fSDavid S. Miller	add	%o5, %g3, %g2
301b4af13fSDavid S. Miller	mulx	%g1, %o2, %g1
311b4af13fSDavid S. Miller	add	%g1, %g2, %g1
321b4af13fSDavid S. Miller	mulx	%o0, %o3, %o0
331b4af13fSDavid S. Miller	retl
341b4af13fSDavid S. Miller	 add	%g1, %o0, %o0
351b4af13fSDavid S. MillerENDPROC(__multi3)
361b4af13fSDavid S. MillerEXPORT_SYMBOL(__multi3)
37