/* IEEE754 floating point arithmetic
 * double precision: common utilities
 */
/*
 * MIPS floating point support
 * Copyright (C) 1994-2000 Algorithmics Ltd.
 *
 *  This program is free software; you can distribute it and/or modify it
 *  under the terms of the GNU General Public License (Version 2) as
 *  published by the Free Software Foundation.
 *
 *  This program is distributed in the hope it will be useful, but WITHOUT
 *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 *  for more details.
 *
 *  You should have received a copy of the GNU General Public License along
 *  with this program; if not, write to the Free Software Foundation, Inc.,
 *  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
 */

#include "ieee754dp.h"

union ieee754dp ieee754dp_neg(union ieee754dp x)
{
	union ieee754dp y;

	if (ieee754_csr.abs2008) {
		y = x;
		DPSIGN(y) = !DPSIGN(x);
	} else {
		unsigned int oldrm;

		oldrm = ieee754_csr.rm;
		ieee754_csr.rm = FPU_CSR_RD;
		y = ieee754dp_sub(ieee754dp_zero(0), x);
		ieee754_csr.rm = oldrm;
	}
	return y;
}

union ieee754dp ieee754dp_abs(union ieee754dp x)
{
	union ieee754dp y;

	if (ieee754_csr.abs2008) {
		y = x;
		DPSIGN(y) = 0;
	} else {
		unsigned int oldrm;

		oldrm = ieee754_csr.rm;
		ieee754_csr.rm = FPU_CSR_RD;
		if (DPSIGN(x))
			y = ieee754dp_sub(ieee754dp_zero(0), x);
		else
			y = ieee754dp_add(ieee754dp_zero(0), x);
		ieee754_csr.rm = oldrm;
	}
	return y;
}
