include/number/SSEPlus_number_REF.h

Go to the documentation of this file.
00001 //
00002 // Copyright (c) 2006-2008 Advanced Micro Devices, Inc. All Rights Reserved.
00003 // This software is subject to the Apache v2.0 License.
00004 //
00005 #ifndef __SSEPLUS_NUMBER_REF_H__
00006 #define __SSEPLUS_NUMBER_REF_H__
00007 
00008 #include <math.h>
00009 
00015 SSP_FORCEINLINE int ssp_number_isValidNumber_F32_REF( ssp_s32* val )//TODO: move into utility collection
00016 {
00017     // Check for NAN, +infin, or -infin (exponent: 111 1111 1)
00018     // Are the exponent bits all 1's?
00019     if( (*val & 0x7F800000) == 0x7F800000 )
00020     {
00021         return 0;
00022     }
00023     return 1;
00024 }
00025 SSP_FORCEINLINE int ssp_number_isValidNumber_F64_REF( ssp_s64* val )   //TODO: move into utility collection
00026 {
00027     // Check for NAN, +infin, or -infin (exponent: 1111 1111)
00028     // Are the exponent bits all 1's?
00029     if( (*val & 0x7FF0000000000000ll) == 0x7FF0000000000000ll )
00030     {
00031         return 0;
00032     }
00033     return 1;
00034 }
00035 
00036 SSP_FORCEINLINE ssp_f32 ssp_number_changeSNanToQNaN_F32_REF( ssp_s32* val )//TODO: move into utility collection
00037 {
00038     ssp_f32* retVal = (ssp_f32*)val;
00039     // Check if the value is already a QNaN
00040     if( (*val & 0x00400000) != 0x00400000 )
00041     {
00042         // Check if the value is + or - infinitie
00043         if( (*val | 0x7F800000) != 0x7F800000 )
00044         {
00045             // Convert SNan To QNaN
00046             *retVal = (ssp_f32)( *val | 0x00400000 );
00047         }
00048     }
00049     return *retVal;
00050 }
00051 
00052 SSP_FORCEINLINE ssp_f64 ssp_number_changeSNanToQNaN_F64_REF( ssp_s64* val )//TODO: move into utility collection
00053 {
00054     ssp_f64* retVal = (ssp_f64*)val;
00055     // Check if the value is already a QNaN
00056     if( (*val & 0x0008000000000000ll) != 0x0008000000000000ll )
00057     {
00058         // Check if the value is + or - infinitie
00059         if( (*val | 0x7FF0000000000000ll) != 0x7FF0000000000000ll )
00060         {
00061             // Convert SNan To QNaN
00062             *retVal = (ssp_f64)( *val | 0x0008000000000000ll );
00063         }
00064     }
00065     return *retVal;
00066 }
00067 
00072 #endif // __SSEPLUS_NUMBER_REF_H__

Generated on Wed May 21 13:44:11 2008 for "SSEPlus" by  doxygen 1.5.4