--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/kernel/eka/euser/epoc/arm/uc_realx.cpp Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,180 @@
+// Copyright (c) 1997-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:
+// e32\euser\epoc\arm\uc_realx.cpp
+//
+//
+
+#include "u32std.h"
+#include <e32math.h>
+
+GLDEF_C void PanicOverUnderflowDividebyZero(const TInt aErr)
+//
+// Panics if there is an overflow or underflow or divide by zero
+//
+ {
+// if (aErr==KErrOverflow)
+// Panic(EMathOverflow);
+// if (aErr==KErrUnderflow)
+// Panic(EMathUnderflow);
+// if (aErr==KErrDivideByZero)
+// Panic(EMathDivideByZero);
+// if (aErr==KErrArgument)
+// Panic(EMathBadOperand);
+ User::Panic(_L("MATHX"),aErr);
+ }
+
+#ifdef __REALS_MACHINE_CODED__
+extern "C" void __math_exception(TInt aErrType)
+//
+// Decides on type of maths exception according to error and raises exception.
+// Added by AnnW, December 1996
+//
+ {
+
+ TExcType excType=EExcGeneral;
+
+ switch (aErrType)
+ {
+ case KErrArgument: // error due to invalid operation
+ excType=EExcFloatInvalidOperation;
+ break;
+ case KErrDivideByZero:
+ excType=EExcFloatDivideByZero;
+ break;
+ case KErrOverflow:
+ excType=EExcFloatOverflow;
+ break;
+ case KErrUnderflow:
+ excType=EExcFloatUnderflow;
+ break;
+/*
+ // also errors due to inexact result
+ case KErrInexact: // const not defined yet
+ excType=EExcFloatInexact;
+ break;
+*/
+
+ default:
+ // Unknown error
+// Panic(EMathUnknownError);
+ User::Panic(_L("MATHX"),KErrGeneral);
+ }
+
+ User::RaiseException(excType);
+ }
+#endif
+
+
+
+
+#ifdef __EABI_CTORS__
+EXPORT_C TRealX::TRealX()
+/**
+Constructs a default extended precision object.
+
+This sets the value to zero.
+*/
+ {
+ // Be Brutal (this should be as efficient as the naked versions)
+ TUint * me = (TUint *)this;
+ me[0]=me[1]=me[2]=0;
+ }
+
+
+
+
+EXPORT_C TRealX::TRealX(TUint anExp, TUint aMantHi, TUint aMantLo)
+/**
+Constructs an extended precision object from an explicit exponent and
+a 64 bit mantissa.
+
+@param anExp The exponent
+@param aMantHi The high order 32 bits of the 64 bit mantissa
+@param aMantLo The low order 32 bits of the 64 bit mantissa
+*/
+ {
+ // Be Brutal (this should be as efficient as the naked versions)
+ TUint * me = (TUint *)this;
+ me[0]=aMantLo;
+ me[1]=aMantHi;
+ me[2]=anExp;
+ }
+
+
+
+
+EXPORT_C TRealX::TRealX(TInt anInt)
+/**
+Constructs an extended precision object from a signed integer value.
+
+@param anInt The signed integer value.
+*/
+ {
+ TRealX::operator=(anInt);
+ }
+
+
+
+
+EXPORT_C TRealX::TRealX(const TInt64& anInt)
+/**
+Constructs an extended precision object from a 64 bit integer.
+
+@param anInt A reference to a 64 bit integer.
+*/
+ {
+ TRealX::operator=(anInt);
+ }
+
+
+
+
+EXPORT_C TRealX::TRealX(TUint anInt)
+/**
+Constructs an extended precision object from an unsigned integer value.
+
+@param anInt The unsigned integer value.
+*/
+ {
+ TRealX::operator=(anInt);
+ }
+
+
+
+
+EXPORT_C TRealX::TRealX(TReal32 aReal)__SOFTFP
+/**
+Constructs an extended precision object from
+a single precision floating point number.
+
+@param aReal The single precision floating point value.
+*/
+ {
+ TRealX::operator=(aReal);
+ }
+
+
+
+
+EXPORT_C TRealX::TRealX(TReal64 aReal)__SOFTFP
+/**
+Constructs an extended precision object from
+a double precision floating point number.
+
+@param aReal The double precision floating point value.
+*/
+ {
+ TRealX::operator=(aReal);
+ }
+#endif