--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/kerneltest/e32test/math/t_vfp.h Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,112 @@
+// Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// e32test\math\t_vfp.h
+//
+//
+
+#ifndef __T_VFP_H__
+#define __T_VFP_H__
+#include <e32std.h>
+#include <arm_vfp.h>
+
+#define ARCH_VERSION_VFPV2 1
+#define ARCH_VERSION_VFPV3_SUBARCH_V2 2
+#define ARCH_VERSION_VFPV3_SUBARCH_NULL 3
+#define ARCH_VERSION_VFPV3_SUBARCH_V3 4
+
+class Vfp
+ {
+public:
+ static TUint32 Fpscr();
+ static void SetFpscr(TUint32 aVal);
+
+ static TReal32 SReg(TInt aReg);
+ static void SetSReg(TReal32 aVal, TInt aReg);
+ static TInt32 SRegInt(TInt aReg);
+ static void SetSReg(TInt32 aVal, TInt aReg);
+
+ static void AbsS(); // S0 = ABS(S1)
+ static void AddS(); // S0 = S1 + S2
+ static void CmpS(); // compare S0, S1
+ static void CmpES(); // compare S0, S1
+ static void CmpEZS(); // compare S0, 0
+ static void CmpZS(); // compare S0, 0
+ static void Cpy0S(TInt aReg); // S0 = Sn
+ static void CpyS0(TInt aReg); // Sn = S0
+ static void DivS(); // S0 = S1 / S2
+ static void MacS(); // S0 += S1 * S2
+ static void MscS(); // S0 = S1 * S2 - S0
+ static void MulS(); // S0 = S1 * S2
+ static void NegS(); // S0 = -S1
+ static void NMacS(); // S0 -= S1 * S2
+ static void NMscS(); // S0 = -S0 - S1 * S2
+ static void NMulS(); // S0 = -S1 * S2
+ static void SqrtS(); // S0 = sqrt(S1)
+ static void SubS(); // S0 = S1 - S2
+
+ static TReal64 DReg(TInt aReg);
+ static void SetDReg(TReal64 aVal, TInt aReg);
+ static TInt64 DRegInt(TInt aReg);
+ static void SetDReg(TInt64 aVal, TInt aReg);
+ static void AbsD(); // D0 = ABS(D1)
+ static void AddD(); // D0 = D1 + D2
+ static void CmpD(); // compare D0, D1
+ static void CmpED(); // compare D0, D1
+ static void CmpEZD(); // compare D0, 0
+ static void CmpZD(); // compare D0, 0
+ static void Cpy0D(TInt aReg); // D0 = Dn
+ static void CpyD0(TInt aReg); // Dn = D0
+ static void DivD(); // D0 = D1 / D2
+ static void MacD(); // D0 += D1 * D2
+ static void MscD(); // D0 = D1 * D2 - D0
+ static void MulD(); // D0 = D1 * D2
+ static void NegD(); // D0 = -D1
+ static void NMacD(); // D0 -= D1 * D2
+ static void NMscD(); // D0 = -D0 - D1 * D2
+ static void NMulD(); // D0 = -D1 * D2
+ static void SqrtD(); // D0 = sqrt(D1)
+ static void SubD(); // D0 = D1 - D2
+
+ static void CvtDS(); // D0 = S2
+ static void CvtSD(); // S0 = D1
+ static void SitoD(); // D0 = IS2
+ static void SitoS(); // S0 = IS2
+ static void TosiD(); // IS0 = D1
+ static void TosiZD(); // IS0 = D1 round towards 0
+ static void TosiS(); // IS0 = S2
+ static void TosiZS(); // IS0 = S2 round towards 0
+ static void UitoD(); // D0 = US2
+ static void UitoS(); // S0 = US2
+ static void TouiD(); // US0 = D1
+ static void TouiZD(); // US0 = D1 round towards 0
+ static void TouiS(); // US0 = S2
+ static void TouiZS(); // US0 = S2 round towards 0
+
+ // VFPv3 support
+ static void ToFixedS(TInt aBits); // Convert to fixed (aBits) precision
+ static void FromFixedS(TInt aBits); // Convert from fixed (aBits) precision
+ static void TconstS2(); // S0=2
+ static void TconstS2_8(); // S0=2.875
+ static void TconstD2(); // D0=2
+ static void TconstD2_8(); // D0=2.875
+
+ };
+
+GLREF_C TInt NeonWithF2(TAny*);
+GLREF_C TInt NeonWithF3(TAny*);
+GLREF_C TInt NeonWithF4x(TAny*);
+GLREF_C TInt ThumbMode(TAny*);
+
+#endif
+