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