1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/os/kernelhwsrv/kernel/eka/compsupp/rvct2_0/sftfpini.cpp Fri Jun 15 03:10:57 2012 +0200
1.3 @@ -0,0 +1,70 @@
1.4 +// Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
1.5 +// All rights reserved.
1.6 +// This component and the accompanying materials are made available
1.7 +// under the terms of the License "ARM EABI LICENCE.txt"
1.8 +// which accompanies this distribution, and is available
1.9 +// in kernel/eka/compsupp.
1.10 +//
1.11 +// Initial Contributors:
1.12 +// Nokia Corporation - initial contribution.
1.13 +//
1.14 +// Contributors:
1.15 +//
1.16 +// Description:
1.17 +//
1.18 +
1.19 +#include <e32std.h>
1.20 +#include <e32std_private.h>
1.21 +
1.22 +// support functions for ARM supplied softvfp compiler-helper functions
1.23 +
1.24 +extern "C" {
1.25 +
1.26 +//void __rt_fp_status_register_cleanup(TAny * aReg)
1.27 +// {
1.28 +// delete aReg;
1.29 +// }
1.30 +
1.31 +// set up the fp status register
1.32 +EXPORT_C void _fp_init(void)
1.33 + {
1.34 + TUint32 * aReg = (TUint32 *)User::AllocZ(sizeof(TUint32));
1.35 + if (aReg)
1.36 + {
1.37 + Dll::SetTls(aReg /*, __rt_fp_status_register_cleanup*/);
1.38 + }
1.39 + else
1.40 + {
1.41 + // This will force us to try again if we actually get an FP
1.42 + // exception later.
1.43 + Dll::SetTls(0 /*, __rt_fp_status_register_cleanup*/);
1.44 + }
1.45 + }
1.46 +
1.47 +EXPORT_C TAny * __rt_fp_status_addr(void)
1.48 + {
1.49 + //return &__fp_status_register;
1.50 + TAny* aTls = Dll::Tls();
1.51 + if (aTls)
1.52 + return aTls;
1.53 + // we obviously failed to set it up before. Try again, so we can
1.54 + // at least try to error meaningfully
1.55 + TUint32* aReg = (TUint32*)User::AllocZ(sizeof(TUint32));
1.56 + _LIT(KFpGeneralPanic, "FP Emulator");
1.57 + if (aReg)
1.58 + {
1.59 + TInt r = Dll::SetTls(aReg /*, __rt_fp_status_register_cleanup*/);
1.60 + if (r==KErrNone)
1.61 + return aReg;
1.62 + // if we get here we really in trouble. Just Panic.
1.63 + User::Panic(KFpGeneralPanic, KErrGeneral);
1.64 + }
1.65 + else
1.66 + {
1.67 + // If we get here, we're toast anyway....
1.68 + User::Panic(KFpGeneralPanic, KErrNoMemory);
1.69 + }
1.70 + return 0;
1.71 + }
1.72 +}
1.73 +