/* SPDX-License-Identifier: GPL-2.0 */
/*
 * Copyright (C) 1999-2000 Hewlett-Packard Co
 * Copyright (C) 1999-2000 David Mosberger-Tang <davidm@hpl.hp.com>
 *
 * 64-bit integer division.
 *
 * This code is based on the application note entitled "Divide, Square Root
 * and Remainder Algorithms for the IA-64 Architecture".  This document
 * is available as Intel document number 248725-002 or via the web at
 * http://developer.intel.com/software/opensource/numerics/
 *
 * For more details on the theory behind these algorithms, see "IA-64
 * and Elementary Functions" by Peter Markstein; HP Professional Books
 * (http://www.goodreads.com/book/show/2019887.Ia_64_and_Elementary_Functions)
 */

#include <linux/export.h>
#include <asm/asmmacro.h>

#ifdef MODULO
# define OP	mod
#else
# define OP	div
#endif

#ifdef UNSIGNED
# define SGN	u
# define INT_TO_FP(a,b)	fcvt.xuf.s1 a=b
# define FP_TO_INT(a,b)	fcvt.fxu.trunc.s1 a=b
#else
# define SGN
# define INT_TO_FP(a,b)	fcvt.xf a=b
# define FP_TO_INT(a,b)	fcvt.fx.trunc.s1 a=b
#endif

#define PASTE1(a,b)	a##b
#define PASTE(a,b)	PASTE1(a,b)
#define NAME		PASTE(PASTE(__,SGN),PASTE(OP,di3))

GLOBAL_ENTRY(NAME)
	.regstk 2,0,0,0
	// Transfer inputs to FP registers.
	setf.sig f8 = in0
	setf.sig f9 = in1
	;;
	// Convert the inputs to FP, to avoid FP software-assist faults.
	INT_TO_FP(f8, f8)
	INT_TO_FP(f9, f9)
	;;
	frcpa.s1 f11, p6 = f8, f9	// y0 = frcpa(b)
	;;
(p6)	fmpy.s1 f7 = f8, f11		// q0 = a*y0
(p6)	fnma.s1 f6 = f9, f11, f1	// e0 = -b*y0 + 1
	;;
(p6)	fma.s1 f10 = f7, f6, f7		// q1 = q0*e0 + q0
(p6)	fmpy.s1 f7 = f6, f6		// e1 = e0*e0
	;;
#ifdef MODULO
	sub in1 = r0, in1		// in1 = -b
#endif
(p6)	fma.s1 f10 = f10, f7, f10	// q2 = q1*e1 + q1
(p6)	fma.s1 f6 = f11, f6, f11	// y1 = y0*e0 + y0
	;;
(p6)	fma.s1 f6 = f6, f7, f6		// y2 = y1*e1 + y1
(p6)	fnma.s1 f7 = f9, f10, f8	// r = -b*q2 + a
	;;
#ifdef MODULO
	setf.sig f8 = in0		// f8 = a
	setf.sig f9 = in1		// f9 = -b
#endif
(p6)	fma.s1 f11 = f7, f6, f10	// q3 = r*y2 + q2
	;;
	FP_TO_INT(f11, f11)		// q = trunc(q3)
	;;
#ifdef MODULO
	xma.l f11 = f11, f9, f8		// r = q*(-b) + a
	;;
#endif
	getf.sig r8 = f11		// transfer result to result register
	br.ret.sptk.many rp
END(NAME)
EXPORT_SYMBOL(NAME)
