fplib.hh revision 13118
110037SARM gem5 Developers/* 213118SEdmund.Grimley-Evans@arm.com * Copyright (c) 2012-2013, 2017-2018 ARM Limited 310037SARM gem5 Developers * All rights reserved 410037SARM gem5 Developers * 510037SARM gem5 Developers * The license below extends only to copyright in the software and shall 610037SARM gem5 Developers * not be construed as granting a license to any other intellectual 710037SARM gem5 Developers * property including but not limited to intellectual property relating 810037SARM gem5 Developers * to a hardware implementation of the functionality of the software 910037SARM gem5 Developers * licensed hereunder. You may use the software subject to the license 1010037SARM gem5 Developers * terms below provided that you ensure that this notice is replicated 1110037SARM gem5 Developers * unmodified and in its entirety in all distributions of the software, 1210037SARM gem5 Developers * modified or unmodified, in source code or in binary form. 1310037SARM gem5 Developers * 1410037SARM gem5 Developers * Redistribution and use in source and binary forms, with or without 1510037SARM gem5 Developers * modification, are permitted provided that the following conditions are 1610037SARM gem5 Developers * met: redistributions of source code must retain the above copyright 1710037SARM gem5 Developers * notice, this list of conditions and the following disclaimer; 1810037SARM gem5 Developers * redistributions in binary form must reproduce the above copyright 1910037SARM gem5 Developers * notice, this list of conditions and the following disclaimer in the 2010037SARM gem5 Developers * documentation and/or other materials provided with the distribution; 2110037SARM gem5 Developers * neither the name of the copyright holders nor the names of its 2210037SARM gem5 Developers * contributors may be used to endorse or promote products derived from 2310037SARM gem5 Developers * this software without specific prior written permission. 2410037SARM gem5 Developers * 2510037SARM gem5 Developers * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 2610037SARM gem5 Developers * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 2710037SARM gem5 Developers * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2810037SARM gem5 Developers * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2910037SARM gem5 Developers * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 3010037SARM gem5 Developers * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 3110037SARM gem5 Developers * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 3210037SARM gem5 Developers * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 3310037SARM gem5 Developers * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 3410037SARM gem5 Developers * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 3510037SARM gem5 Developers * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 3610037SARM gem5 Developers * 3710037SARM gem5 Developers * Authors: Edmund Grimley Evans 3810037SARM gem5 Developers * Thomas Grocutt 3910037SARM gem5 Developers */ 4010037SARM gem5 Developers 4110037SARM gem5 Developers/** 4210037SARM gem5 Developers * @file 4310037SARM gem5 Developers * Floating-point library code, which will gradually replace vfp.hh. For 4410037SARM gem5 Developers * portability, this library does not use floating-point data types. Currently, 4510037SARM gem5 Developers * C's standard integer types are used in the API, though this could be changed 4610037SARM gem5 Developers * to something like class Fp32 { uint32_t x; }, etc. 4710037SARM gem5 Developers */ 4810037SARM gem5 Developers 4910037SARM gem5 Developers#ifndef __ARCH_ARM_INSTS_FPLIB_HH__ 5010037SARM gem5 Developers#define __ARCH_ARM_INSTS_FPLIB_HH__ 5110037SARM gem5 Developers 5210037SARM gem5 Developers#include <stdint.h> 5310037SARM gem5 Developers 5410037SARM gem5 Developers#include "arch/arm/miscregs.hh" 5510037SARM gem5 Developers 5610037SARM gem5 Developersnamespace ArmISA 5710037SARM gem5 Developers{ 5810037SARM gem5 Developers 5910037SARM gem5 Developersenum FPRounding { 6010037SARM gem5 Developers FPRounding_TIEEVEN = 0, 6110037SARM gem5 Developers FPRounding_POSINF = 1, 6210037SARM gem5 Developers FPRounding_NEGINF = 2, 6310037SARM gem5 Developers FPRounding_ZERO = 3, 6410037SARM gem5 Developers FPRounding_TIEAWAY = 4, 6510037SARM gem5 Developers FPRounding_ODD = 5 6610037SARM gem5 Developers}; 6710037SARM gem5 Developers 6810037SARM gem5 Developersstatic inline FPRounding 6910037SARM gem5 DevelopersFPCRRounding(FPSCR &fpscr) 7010037SARM gem5 Developers{ 7110037SARM gem5 Developers return (FPRounding)((uint32_t)fpscr >> 22 & 3); 7210037SARM gem5 Developers} 7310037SARM gem5 Developers 7410037SARM gem5 Developers/** Floating-point absolute value. */ 7510037SARM gem5 Developerstemplate <class T> 7610037SARM gem5 DevelopersT fplibAbs(T op); 7710037SARM gem5 Developers/** Floating-point add. */ 7810037SARM gem5 Developerstemplate <class T> 7910037SARM gem5 DevelopersT fplibAdd(T op1, T op2, FPSCR &fpscr); 8010037SARM gem5 Developers/** Floating-point compare (quiet and signaling). */ 8110037SARM gem5 Developerstemplate <class T> 8210037SARM gem5 Developersint fplibCompare(T op1, T op2, bool signal_nans, FPSCR &fpscr); 8310037SARM gem5 Developers/** Floating-point compare equal. */ 8410037SARM gem5 Developerstemplate <class T> 8510037SARM gem5 Developersbool fplibCompareEQ(T op1, T op2, FPSCR &fpscr); 8610037SARM gem5 Developers/** Floating-point compare greater than or equal. */ 8710037SARM gem5 Developerstemplate <class T> 8810037SARM gem5 Developersbool fplibCompareGE(T op1, T op2, FPSCR &fpscr); 8910037SARM gem5 Developers/** Floating-point compare greater than. */ 9010037SARM gem5 Developerstemplate <class T> 9110037SARM gem5 Developersbool fplibCompareGT(T op1, T op2, FPSCR &fpscr); 9213118SEdmund.Grimley-Evans@arm.com/** Floating-point compare unordered. */ 9313118SEdmund.Grimley-Evans@arm.comtemplate <class T> 9413118SEdmund.Grimley-Evans@arm.combool fplibCompareUN(T op1, T op2, FPSCR &fpscr); 9510037SARM gem5 Developers/** Floating-point convert precision. */ 9610037SARM gem5 Developerstemplate <class T1, class T2> 9710037SARM gem5 DevelopersT2 fplibConvert(T1 op, FPRounding rounding, FPSCR &fpscr); 9810037SARM gem5 Developers/** Floating-point division. */ 9910037SARM gem5 Developerstemplate <class T> 10010037SARM gem5 DevelopersT fplibDiv(T op1, T op2, FPSCR &fpscr); 10113118SEdmund.Grimley-Evans@arm.com/** Floating-point exponential accelerator. */ 10213118SEdmund.Grimley-Evans@arm.comtemplate <class T> 10313118SEdmund.Grimley-Evans@arm.comT fplibExpA(T op); 10410037SARM gem5 Developers/** Floating-point maximum. */ 10510037SARM gem5 Developerstemplate <class T> 10610037SARM gem5 DevelopersT fplibMax(T op1, T op2, FPSCR &fpscr); 10710037SARM gem5 Developers/** Floating-point maximum number. */ 10810037SARM gem5 Developerstemplate <class T> 10910037SARM gem5 DevelopersT fplibMaxNum(T op1, T op2, FPSCR &fpscr); 11010037SARM gem5 Developers/** Floating-point minimum. */ 11110037SARM gem5 Developerstemplate <class T> 11210037SARM gem5 DevelopersT fplibMin(T op1, T op2, FPSCR &fpscr); 11310037SARM gem5 Developers/** Floating-point minimum number. */ 11410037SARM gem5 Developerstemplate <class T> 11510037SARM gem5 DevelopersT fplibMinNum(T op1, T op2, FPSCR &fpscr); 11610037SARM gem5 Developers/** Floating-point multiply. */ 11710037SARM gem5 Developerstemplate <class T> 11810037SARM gem5 DevelopersT fplibMul(T op1, T op2, FPSCR &fpscr); 11910037SARM gem5 Developers/** Floating-point multiply-add. */ 12010037SARM gem5 Developerstemplate <class T> 12110037SARM gem5 DevelopersT fplibMulAdd(T addend, T op1, T op2, FPSCR &fpscr); 12210037SARM gem5 Developers/** Floating-point multiply extended. */ 12310037SARM gem5 Developerstemplate <class T> 12410037SARM gem5 DevelopersT fplibMulX(T op1, T op2, FPSCR &fpscr); 12510037SARM gem5 Developers/** Floating-point negate. */ 12610037SARM gem5 Developerstemplate <class T> 12710037SARM gem5 DevelopersT fplibNeg(T op); 12810037SARM gem5 Developers/** Floating-point reciprocal square root estimate. */ 12910037SARM gem5 Developerstemplate <class T> 13010037SARM gem5 DevelopersT fplibRSqrtEstimate(T op, FPSCR &fpscr); 13110037SARM gem5 Developers/** Floating-point reciprocal square root step. */ 13210037SARM gem5 Developerstemplate <class T> 13310037SARM gem5 DevelopersT fplibRSqrtStepFused(T op1, T op2, FPSCR &fpscr); 13410037SARM gem5 Developers/** Floating-point reciprocal estimate. */ 13510037SARM gem5 Developerstemplate <class T> 13610037SARM gem5 DevelopersT fplibRecipEstimate(T op, FPSCR &fpscr); 13710037SARM gem5 Developers/** Floating-point reciprocal step. */ 13810037SARM gem5 Developerstemplate <class T> 13910037SARM gem5 DevelopersT fplibRecipStepFused(T op1, T op2, FPSCR &fpscr); 14010037SARM gem5 Developers/** Floating-point reciprocal exponent. */ 14110037SARM gem5 Developerstemplate <class T> 14210037SARM gem5 DevelopersT fplibRecpX(T op, FPSCR &fpscr); 14310037SARM gem5 Developers/** Floating-point convert to integer. */ 14410037SARM gem5 Developerstemplate <class T> 14510037SARM gem5 DevelopersT fplibRoundInt(T op, FPRounding rounding, bool exact, FPSCR &fpscr); 14613118SEdmund.Grimley-Evans@arm.com/** Floating-point adjust exponent. */ 14713118SEdmund.Grimley-Evans@arm.comtemplate <class T> 14813118SEdmund.Grimley-Evans@arm.comT fplibScale(T op1, T op2, FPSCR &fpscr); 14910037SARM gem5 Developers/** Floating-point square root. */ 15010037SARM gem5 Developerstemplate <class T> 15110037SARM gem5 DevelopersT fplibSqrt(T op, FPSCR &fpscr); 15210037SARM gem5 Developers/** Floating-point subtract. */ 15310037SARM gem5 Developerstemplate <class T> 15410037SARM gem5 DevelopersT fplibSub(T op1, T op2, FPSCR &fpscr); 15513118SEdmund.Grimley-Evans@arm.com/** Floating-point trigonometric multiply-add coefficient. */ 15613118SEdmund.Grimley-Evans@arm.comtemplate <class T> 15713118SEdmund.Grimley-Evans@arm.comT fplibTrigMulAdd(uint8_t coeff_index, T op1, T op2, FPSCR &fpscr); 15813118SEdmund.Grimley-Evans@arm.com/** Floating-point trigonometric starting value. */ 15913118SEdmund.Grimley-Evans@arm.comtemplate <class T> 16013118SEdmund.Grimley-Evans@arm.comT fplibTrigSMul(T op1, T op2, FPSCR &fpscr); 16113118SEdmund.Grimley-Evans@arm.com/** Floating-point trigonometric select coefficient. */ 16213118SEdmund.Grimley-Evans@arm.comtemplate <class T> 16313118SEdmund.Grimley-Evans@arm.comT fplibTrigSSel(T op1, T op2, FPSCR &fpscr); 16410037SARM gem5 Developers/** Floating-point convert to fixed-point. */ 16510037SARM gem5 Developerstemplate <class T1, class T2> 16610037SARM gem5 DevelopersT2 fplibFPToFixed(T1 op, int fbits, bool u, FPRounding rounding, FPSCR &fpscr); 16710037SARM gem5 Developers/** Floating-point convert from fixed-point. */ 16810037SARM gem5 Developerstemplate <class T> 16910037SARM gem5 DevelopersT fplibFixedToFP(uint64_t op, int fbits, bool u, FPRounding rounding, 17010037SARM gem5 Developers FPSCR &fpscr); 17113118SEdmund.Grimley-Evans@arm.com/** Floating-point value for +/- infinity. */ 17213118SEdmund.Grimley-Evans@arm.comtemplate <class T> 17313118SEdmund.Grimley-Evans@arm.comT fplibInfinity(int sgn); 17413118SEdmund.Grimley-Evans@arm.com/** Foating-point value for default NaN. */ 17513118SEdmund.Grimley-Evans@arm.comtemplate <class T> 17613118SEdmund.Grimley-Evans@arm.comT fplibDefaultNaN(); 17710037SARM gem5 Developers 17810037SARM gem5 Developers/* Function specializations... */ 17910037SARM gem5 Developerstemplate <> 18013118SEdmund.Grimley-Evans@arm.comuint16_t fplibAbs(uint16_t op); 18113118SEdmund.Grimley-Evans@arm.comtemplate <> 18210037SARM gem5 Developersuint32_t fplibAbs(uint32_t op); 18310037SARM gem5 Developerstemplate <> 18410037SARM gem5 Developersuint64_t fplibAbs(uint64_t op); 18510037SARM gem5 Developerstemplate <> 18613118SEdmund.Grimley-Evans@arm.comuint16_t fplibAdd(uint16_t op1, uint16_t op2, FPSCR &fpscr); 18713118SEdmund.Grimley-Evans@arm.comtemplate <> 18810037SARM gem5 Developersuint32_t fplibAdd(uint32_t op1, uint32_t op2, FPSCR &fpscr); 18910037SARM gem5 Developerstemplate <> 19010037SARM gem5 Developersuint64_t fplibAdd(uint64_t op1, uint64_t op2, FPSCR &fpscr); 19110037SARM gem5 Developerstemplate <> 19213118SEdmund.Grimley-Evans@arm.comint fplibCompare(uint16_t op1, uint16_t op2, bool signal_nans, FPSCR &fpscr); 19313118SEdmund.Grimley-Evans@arm.comtemplate <> 19410037SARM gem5 Developersint fplibCompare(uint32_t op1, uint32_t op2, bool signal_nans, FPSCR &fpscr); 19510037SARM gem5 Developerstemplate <> 19610037SARM gem5 Developersint fplibCompare(uint64_t op1, uint64_t op2, bool signal_nans, FPSCR &fpscr); 19710037SARM gem5 Developerstemplate <> 19813118SEdmund.Grimley-Evans@arm.combool fplibCompareEQ(uint16_t op1, uint16_t op2, FPSCR &fpscr); 19913118SEdmund.Grimley-Evans@arm.comtemplate <> 20010037SARM gem5 Developersbool fplibCompareEQ(uint32_t op1, uint32_t op2, FPSCR &fpscr); 20110037SARM gem5 Developerstemplate <> 20210037SARM gem5 Developersbool fplibCompareEQ(uint64_t op1, uint64_t op2, FPSCR &fpscr); 20310037SARM gem5 Developerstemplate <> 20413118SEdmund.Grimley-Evans@arm.combool fplibCompareGE(uint16_t op1, uint16_t op2, FPSCR &fpscr); 20513118SEdmund.Grimley-Evans@arm.comtemplate <> 20610037SARM gem5 Developersbool fplibCompareGE(uint32_t op1, uint32_t op2, FPSCR &fpscr); 20710037SARM gem5 Developerstemplate <> 20810037SARM gem5 Developersbool fplibCompareGE(uint64_t op1, uint64_t op2, FPSCR &fpscr); 20910037SARM gem5 Developerstemplate <> 21013118SEdmund.Grimley-Evans@arm.combool fplibCompareGT(uint16_t op1, uint16_t op2, FPSCR &fpscr); 21113118SEdmund.Grimley-Evans@arm.comtemplate <> 21210037SARM gem5 Developersbool fplibCompareGT(uint32_t op1, uint32_t op2, FPSCR &fpscr); 21310037SARM gem5 Developerstemplate <> 21410037SARM gem5 Developersbool fplibCompareGT(uint64_t op1, uint64_t op2, FPSCR &fpscr); 21510037SARM gem5 Developerstemplate <> 21613118SEdmund.Grimley-Evans@arm.combool fplibCompareUN(uint16_t op1, uint16_t op2, FPSCR &fpscr); 21713118SEdmund.Grimley-Evans@arm.comtemplate <> 21813118SEdmund.Grimley-Evans@arm.combool fplibCompareUN(uint32_t op1, uint32_t op2, FPSCR &fpscr); 21913118SEdmund.Grimley-Evans@arm.comtemplate <> 22013118SEdmund.Grimley-Evans@arm.combool fplibCompareUN(uint64_t op1, uint64_t op2, FPSCR &fpscr); 22113118SEdmund.Grimley-Evans@arm.comtemplate <> 22210037SARM gem5 Developersuint16_t fplibConvert(uint32_t op, FPRounding rounding, FPSCR &fpscr); 22310037SARM gem5 Developerstemplate <> 22410037SARM gem5 Developersuint16_t fplibConvert(uint64_t op, FPRounding rounding, FPSCR &fpscr); 22510037SARM gem5 Developerstemplate <> 22610037SARM gem5 Developersuint32_t fplibConvert(uint16_t op, FPRounding rounding, FPSCR &fpscr); 22710037SARM gem5 Developerstemplate <> 22810037SARM gem5 Developersuint32_t fplibConvert(uint64_t op, FPRounding rounding, FPSCR &fpscr); 22910037SARM gem5 Developerstemplate <> 23010037SARM gem5 Developersuint64_t fplibConvert(uint16_t op, FPRounding rounding, FPSCR &fpscr); 23110037SARM gem5 Developerstemplate <> 23210037SARM gem5 Developersuint64_t fplibConvert(uint32_t op, FPRounding rounding, FPSCR &fpscr); 23310037SARM gem5 Developerstemplate <> 23413118SEdmund.Grimley-Evans@arm.comuint16_t fplibDiv(uint16_t op1, uint16_t op2, FPSCR &fpscr); 23513118SEdmund.Grimley-Evans@arm.comtemplate <> 23610037SARM gem5 Developersuint32_t fplibDiv(uint32_t op1, uint32_t op2, FPSCR &fpscr); 23710037SARM gem5 Developerstemplate <> 23810037SARM gem5 Developersuint64_t fplibDiv(uint64_t op1, uint64_t op2, FPSCR &fpscr); 23910037SARM gem5 Developerstemplate <> 24013118SEdmund.Grimley-Evans@arm.comuint16_t fplibExpA(uint16_t op); 24113118SEdmund.Grimley-Evans@arm.comtemplate <> 24213118SEdmund.Grimley-Evans@arm.comuint32_t fplibExpA(uint32_t op); 24313118SEdmund.Grimley-Evans@arm.comtemplate <> 24413118SEdmund.Grimley-Evans@arm.comuint64_t fplibExpA(uint64_t op); 24513118SEdmund.Grimley-Evans@arm.comtemplate <> 24613118SEdmund.Grimley-Evans@arm.comuint16_t fplibMax(uint16_t op1, uint16_t op2, FPSCR &fpscr); 24713118SEdmund.Grimley-Evans@arm.comtemplate <> 24810037SARM gem5 Developersuint32_t fplibMax(uint32_t op1, uint32_t op2, FPSCR &fpscr); 24910037SARM gem5 Developerstemplate <> 25010037SARM gem5 Developersuint64_t fplibMax(uint64_t op1, uint64_t op2, FPSCR &fpscr); 25110037SARM gem5 Developerstemplate <> 25213118SEdmund.Grimley-Evans@arm.comuint16_t fplibMaxNum(uint16_t op1, uint16_t op2, FPSCR &fpscr); 25313118SEdmund.Grimley-Evans@arm.comtemplate <> 25410037SARM gem5 Developersuint32_t fplibMaxNum(uint32_t op1, uint32_t op2, FPSCR &fpscr); 25510037SARM gem5 Developerstemplate <> 25610037SARM gem5 Developersuint64_t fplibMaxNum(uint64_t op1, uint64_t op2, FPSCR &fpscr); 25710037SARM gem5 Developerstemplate <> 25813118SEdmund.Grimley-Evans@arm.comuint16_t fplibMin(uint16_t op1, uint16_t op2, FPSCR &fpscr); 25913118SEdmund.Grimley-Evans@arm.comtemplate <> 26010037SARM gem5 Developersuint32_t fplibMin(uint32_t op1, uint32_t op2, FPSCR &fpscr); 26110037SARM gem5 Developerstemplate <> 26210037SARM gem5 Developersuint64_t fplibMin(uint64_t op1, uint64_t op2, FPSCR &fpscr); 26310037SARM gem5 Developerstemplate <> 26413118SEdmund.Grimley-Evans@arm.comuint16_t fplibMinNum(uint16_t op1, uint16_t op2, FPSCR &fpscr); 26513118SEdmund.Grimley-Evans@arm.comtemplate <> 26610037SARM gem5 Developersuint32_t fplibMinNum(uint32_t op1, uint32_t op2, FPSCR &fpscr); 26710037SARM gem5 Developerstemplate <> 26810037SARM gem5 Developersuint64_t fplibMinNum(uint64_t op1, uint64_t op2, FPSCR &fpscr); 26910037SARM gem5 Developerstemplate <> 27013118SEdmund.Grimley-Evans@arm.comuint16_t fplibMul(uint16_t op1, uint16_t op2, FPSCR &fpscr); 27113118SEdmund.Grimley-Evans@arm.comtemplate <> 27210037SARM gem5 Developersuint32_t fplibMul(uint32_t op1, uint32_t op2, FPSCR &fpscr); 27310037SARM gem5 Developerstemplate <> 27410037SARM gem5 Developersuint64_t fplibMul(uint64_t op1, uint64_t op2, FPSCR &fpscr); 27510037SARM gem5 Developerstemplate <> 27613118SEdmund.Grimley-Evans@arm.comuint16_t fplibMulAdd(uint16_t addend, uint16_t op1, uint16_t op2, 27713118SEdmund.Grimley-Evans@arm.com FPSCR &fpscr); 27813118SEdmund.Grimley-Evans@arm.comtemplate <> 27910037SARM gem5 Developersuint32_t fplibMulAdd(uint32_t addend, uint32_t op1, uint32_t op2, 28010037SARM gem5 Developers FPSCR &fpscr); 28110037SARM gem5 Developerstemplate <> 28210037SARM gem5 Developersuint64_t fplibMulAdd(uint64_t addend, uint64_t op1, uint64_t op2, 28310037SARM gem5 Developers FPSCR &fpscr); 28410037SARM gem5 Developerstemplate <> 28513118SEdmund.Grimley-Evans@arm.comuint16_t fplibMulX(uint16_t op1, uint16_t op2, FPSCR &fpscr); 28613118SEdmund.Grimley-Evans@arm.comtemplate <> 28710037SARM gem5 Developersuint32_t fplibMulX(uint32_t op1, uint32_t op2, FPSCR &fpscr); 28810037SARM gem5 Developerstemplate <> 28910037SARM gem5 Developersuint64_t fplibMulX(uint64_t op1, uint64_t op2, FPSCR &fpscr); 29010037SARM gem5 Developerstemplate <> 29113118SEdmund.Grimley-Evans@arm.comuint16_t fplibNeg(uint16_t op); 29213118SEdmund.Grimley-Evans@arm.comtemplate <> 29310037SARM gem5 Developersuint32_t fplibNeg(uint32_t op); 29410037SARM gem5 Developerstemplate <> 29510037SARM gem5 Developersuint64_t fplibNeg(uint64_t op); 29610037SARM gem5 Developerstemplate <> 29713118SEdmund.Grimley-Evans@arm.comuint16_t fplibRSqrtEstimate(uint16_t op, FPSCR &fpscr); 29813118SEdmund.Grimley-Evans@arm.comtemplate <> 29910037SARM gem5 Developersuint32_t fplibRSqrtEstimate(uint32_t op, FPSCR &fpscr); 30010037SARM gem5 Developerstemplate<> 30110037SARM gem5 Developersuint64_t fplibRSqrtEstimate(uint64_t op, FPSCR &fpscr); 30210037SARM gem5 Developerstemplate <> 30313118SEdmund.Grimley-Evans@arm.comuint16_t fplibRSqrtStepFused(uint16_t op1, uint16_t op2, FPSCR &fpscr); 30413118SEdmund.Grimley-Evans@arm.comtemplate <> 30510037SARM gem5 Developersuint32_t fplibRSqrtStepFused(uint32_t op1, uint32_t op2, FPSCR &fpscr); 30610037SARM gem5 Developerstemplate <> 30710037SARM gem5 Developersuint64_t fplibRSqrtStepFused(uint64_t op1, uint64_t op2, FPSCR &fpscr); 30810037SARM gem5 Developerstemplate <> 30913118SEdmund.Grimley-Evans@arm.comuint16_t fplibRecipEstimate(uint16_t op, FPSCR &fpscr); 31013118SEdmund.Grimley-Evans@arm.comtemplate <> 31110037SARM gem5 Developersuint32_t fplibRecipEstimate(uint32_t op, FPSCR &fpscr); 31210037SARM gem5 Developerstemplate <> 31310037SARM gem5 Developersuint64_t fplibRecipEstimate(uint64_t op, FPSCR &fpscr); 31410037SARM gem5 Developerstemplate <> 31513118SEdmund.Grimley-Evans@arm.comuint16_t fplibRecipStepFused(uint16_t op1, uint16_t op2, FPSCR &fpscr); 31613118SEdmund.Grimley-Evans@arm.comtemplate <> 31710037SARM gem5 Developersuint32_t fplibRecipStepFused(uint32_t op1, uint32_t op2, FPSCR &fpscr); 31810037SARM gem5 Developerstemplate <> 31910037SARM gem5 Developersuint64_t fplibRecipStepFused(uint64_t op1, uint64_t op2, FPSCR &fpscr); 32010037SARM gem5 Developerstemplate <> 32113118SEdmund.Grimley-Evans@arm.comuint16_t fplibRecpX(uint16_t op, FPSCR &fpscr); 32213118SEdmund.Grimley-Evans@arm.comtemplate <> 32310037SARM gem5 Developersuint32_t fplibRecpX(uint32_t op, FPSCR &fpscr); 32410037SARM gem5 Developerstemplate <> 32510037SARM gem5 Developersuint64_t fplibRecpX(uint64_t op, FPSCR &fpscr); 32610037SARM gem5 Developerstemplate <> 32713118SEdmund.Grimley-Evans@arm.comuint16_t fplibRoundInt(uint16_t op, FPRounding rounding, bool exact, 32813118SEdmund.Grimley-Evans@arm.com FPSCR &fpscr); 32913118SEdmund.Grimley-Evans@arm.comtemplate <> 33010037SARM gem5 Developersuint32_t fplibRoundInt(uint32_t op, FPRounding rounding, bool exact, 33110037SARM gem5 Developers FPSCR &fpscr); 33210037SARM gem5 Developerstemplate <> 33310037SARM gem5 Developersuint64_t fplibRoundInt(uint64_t op, FPRounding rounding, bool exact, 33410037SARM gem5 Developers FPSCR &fpscr); 33510037SARM gem5 Developerstemplate <> 33613118SEdmund.Grimley-Evans@arm.comuint16_t fplibScale(uint16_t op1, uint16_t op2, FPSCR &fpscr); 33713118SEdmund.Grimley-Evans@arm.comtemplate <> 33813118SEdmund.Grimley-Evans@arm.comuint32_t fplibScale(uint32_t op1, uint32_t op2, FPSCR &fpscr); 33913118SEdmund.Grimley-Evans@arm.comtemplate <> 34013118SEdmund.Grimley-Evans@arm.comuint64_t fplibScale(uint64_t op1, uint64_t op2, FPSCR &fpscr); 34113118SEdmund.Grimley-Evans@arm.comtemplate <> 34213118SEdmund.Grimley-Evans@arm.comuint16_t fplibSqrt(uint16_t op, FPSCR &fpscr); 34313118SEdmund.Grimley-Evans@arm.comtemplate <> 34410037SARM gem5 Developersuint32_t fplibSqrt(uint32_t op, FPSCR &fpscr); 34510037SARM gem5 Developerstemplate <> 34610037SARM gem5 Developersuint64_t fplibSqrt(uint64_t op, FPSCR &fpscr); 34710037SARM gem5 Developerstemplate <> 34813118SEdmund.Grimley-Evans@arm.comuint16_t fplibSub(uint16_t op1, uint16_t op2, FPSCR &fpscr); 34913118SEdmund.Grimley-Evans@arm.comtemplate <> 35010037SARM gem5 Developersuint32_t fplibSub(uint32_t op1, uint32_t op2, FPSCR &fpscr); 35110037SARM gem5 Developerstemplate <> 35210037SARM gem5 Developersuint64_t fplibSub(uint64_t op1, uint64_t op2, FPSCR &fpscr); 35310037SARM gem5 Developerstemplate <> 35413118SEdmund.Grimley-Evans@arm.comuint16_t fplibTrigMulAdd(uint8_t coeff_index, uint16_t op1, uint16_t op2, 35513118SEdmund.Grimley-Evans@arm.com FPSCR &fpscr); 35613118SEdmund.Grimley-Evans@arm.comtemplate <> 35713118SEdmund.Grimley-Evans@arm.comuint32_t fplibTrigMulAdd(uint8_t coeff_index, uint32_t op1, uint32_t op2, 35813118SEdmund.Grimley-Evans@arm.com FPSCR &fpscr); 35913118SEdmund.Grimley-Evans@arm.comtemplate <> 36013118SEdmund.Grimley-Evans@arm.comuint64_t fplibTrigMulAdd(uint8_t coeff_index, uint64_t op1, uint64_t op2, 36113118SEdmund.Grimley-Evans@arm.com FPSCR &fpscr); 36213118SEdmund.Grimley-Evans@arm.comtemplate <> 36313118SEdmund.Grimley-Evans@arm.comuint16_t fplibTrigSMul(uint16_t op1, uint16_t op2, FPSCR &fpscr); 36413118SEdmund.Grimley-Evans@arm.comtemplate <> 36513118SEdmund.Grimley-Evans@arm.comuint32_t fplibTrigSMul(uint32_t op1, uint32_t op2, FPSCR &fpscr); 36613118SEdmund.Grimley-Evans@arm.comtemplate <> 36713118SEdmund.Grimley-Evans@arm.comuint64_t fplibTrigSMul(uint64_t op1, uint64_t op2, FPSCR &fpscr); 36813118SEdmund.Grimley-Evans@arm.comtemplate <> 36913118SEdmund.Grimley-Evans@arm.comuint16_t fplibTrigSSel(uint16_t op1, uint16_t op2, FPSCR &fpscr); 37013118SEdmund.Grimley-Evans@arm.comtemplate <> 37113118SEdmund.Grimley-Evans@arm.comuint32_t fplibTrigSSel(uint32_t op1, uint32_t op2, FPSCR &fpscr); 37213118SEdmund.Grimley-Evans@arm.comtemplate <> 37313118SEdmund.Grimley-Evans@arm.comuint64_t fplibTrigSSel(uint64_t op1, uint64_t op2, FPSCR &fpscr); 37413118SEdmund.Grimley-Evans@arm.comtemplate <> 37513118SEdmund.Grimley-Evans@arm.comuint16_t fplibFPToFixed(uint16_t op, int fbits, bool u, FPRounding rounding, 37613118SEdmund.Grimley-Evans@arm.com FPSCR &fpscr); 37713118SEdmund.Grimley-Evans@arm.comtemplate <> 37813118SEdmund.Grimley-Evans@arm.comuint32_t fplibFPToFixed(uint16_t op, int fbits, bool u, FPRounding rounding, 37913118SEdmund.Grimley-Evans@arm.com FPSCR &fpscr); 38013118SEdmund.Grimley-Evans@arm.comtemplate <> 38110037SARM gem5 Developersuint32_t fplibFPToFixed(uint32_t op, int fbits, bool u, FPRounding rounding, 38210037SARM gem5 Developers FPSCR &fpscr); 38310037SARM gem5 Developerstemplate <> 38410037SARM gem5 Developersuint32_t fplibFPToFixed(uint64_t op, int fbits, bool u, FPRounding rounding, 38510037SARM gem5 Developers FPSCR &fpscr); 38610037SARM gem5 Developerstemplate <> 38713118SEdmund.Grimley-Evans@arm.comuint64_t fplibFPToFixed(uint16_t op, int fbits, bool u, FPRounding rounding, 38813118SEdmund.Grimley-Evans@arm.com FPSCR &fpscr); 38913118SEdmund.Grimley-Evans@arm.comtemplate <> 39010037SARM gem5 Developersuint64_t fplibFPToFixed(uint32_t op, int fbits, bool u, FPRounding rounding, 39110037SARM gem5 Developers FPSCR &fpscr); 39210037SARM gem5 Developerstemplate <> 39310037SARM gem5 Developersuint64_t fplibFPToFixed(uint64_t op, int fbits, bool u, FPRounding rounding, 39410037SARM gem5 Developers FPSCR &fpscr); 39510037SARM gem5 Developerstemplate <> 39613118SEdmund.Grimley-Evans@arm.comuint16_t fplibFixedToFP(uint64_t op, int fbits, bool u, FPRounding rounding, 39713118SEdmund.Grimley-Evans@arm.com FPSCR &fpscr); 39813118SEdmund.Grimley-Evans@arm.comtemplate <> 39910037SARM gem5 Developersuint32_t fplibFixedToFP(uint64_t op, int fbits, bool u, FPRounding rounding, 40010037SARM gem5 Developers FPSCR &fpscr); 40110037SARM gem5 Developerstemplate <> 40210037SARM gem5 Developersuint64_t fplibFixedToFP(uint64_t op, int fbits, bool u, FPRounding rounding, 40310037SARM gem5 Developers FPSCR &fpscr); 40413118SEdmund.Grimley-Evans@arm.comtemplate <> 40513118SEdmund.Grimley-Evans@arm.comuint16_t fplibInfinity(int sgn); 40613118SEdmund.Grimley-Evans@arm.comtemplate <> 40713118SEdmund.Grimley-Evans@arm.comuint32_t fplibInfinity(int sgn); 40813118SEdmund.Grimley-Evans@arm.comtemplate <> 40913118SEdmund.Grimley-Evans@arm.comuint64_t fplibInfinity(int sgn); 41013118SEdmund.Grimley-Evans@arm.comtemplate <> 41113118SEdmund.Grimley-Evans@arm.comuint16_t fplibDefaultNaN(); 41213118SEdmund.Grimley-Evans@arm.comtemplate <> 41313118SEdmund.Grimley-Evans@arm.comuint32_t fplibDefaultNaN(); 41413118SEdmund.Grimley-Evans@arm.comtemplate <> 41513118SEdmund.Grimley-Evans@arm.comuint64_t fplibDefaultNaN(); 41610037SARM gem5 Developers} 41710037SARM gem5 Developers 41810037SARM gem5 Developers#endif 419