18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci#include <linux/linkage.h>
38c2ecf20Sopenharmony_ci#include <asm/export.h>
48c2ecf20Sopenharmony_ci
58c2ecf20Sopenharmony_ci	.text
68c2ecf20Sopenharmony_ci	.align	4
78c2ecf20Sopenharmony_ciENTRY(__multi3) /* %o0 = u, %o1 = v */
88c2ecf20Sopenharmony_ci	mov	%o1, %g1
98c2ecf20Sopenharmony_ci	srl	%o3, 0, %o4
108c2ecf20Sopenharmony_ci	mulx	%o4, %g1, %o1
118c2ecf20Sopenharmony_ci	srlx	%g1, 0x20, %g3
128c2ecf20Sopenharmony_ci	mulx	%g3, %o4, %g7
138c2ecf20Sopenharmony_ci	sllx	%g7, 0x20, %o5
148c2ecf20Sopenharmony_ci	srl	%g1, 0, %o4
158c2ecf20Sopenharmony_ci	sub	%o1, %o5, %o5
168c2ecf20Sopenharmony_ci	srlx	%o5, 0x20, %o5
178c2ecf20Sopenharmony_ci	addcc	%g7, %o5, %g7
188c2ecf20Sopenharmony_ci	srlx	%o3, 0x20, %o5
198c2ecf20Sopenharmony_ci	mulx	%o4, %o5, %o4
208c2ecf20Sopenharmony_ci	mulx	%g3, %o5, %o5
218c2ecf20Sopenharmony_ci	sethi	%hi(0x80000000), %g3
228c2ecf20Sopenharmony_ci	addcc	%g7, %o4, %g7
238c2ecf20Sopenharmony_ci	srlx	%g7, 0x20, %g7
248c2ecf20Sopenharmony_ci	add	%g3, %g3, %g3
258c2ecf20Sopenharmony_ci	movcc	%xcc, %g0, %g3
268c2ecf20Sopenharmony_ci	addcc	%o5, %g7, %o5
278c2ecf20Sopenharmony_ci	sllx	%o4, 0x20, %o4
288c2ecf20Sopenharmony_ci	add	%o1, %o4, %o1
298c2ecf20Sopenharmony_ci	add	%o5, %g3, %g2
308c2ecf20Sopenharmony_ci	mulx	%g1, %o2, %g1
318c2ecf20Sopenharmony_ci	add	%g1, %g2, %g1
328c2ecf20Sopenharmony_ci	mulx	%o0, %o3, %o0
338c2ecf20Sopenharmony_ci	retl
348c2ecf20Sopenharmony_ci	 add	%g1, %o0, %o0
358c2ecf20Sopenharmony_ciENDPROC(__multi3)
368c2ecf20Sopenharmony_ciEXPORT_SYMBOL(__multi3)
37