File: rtGetNaN.c

    1   /*
    2    * File: rtGetNaN.c
    3    *
    4    * Code generated for Simulink model 'bh_f14'.
    5    *
    6    * Model version                  : 1.18
    7    * Simulink Coder version         : 8.10 (R2016a) 10-Feb-2016
    8    * C/C++ source code generated on : Wed Jun 22 07:56:08 2016
    9    *
   10    * Target selection: ert.tlc
   11    * Embedded hardware selection: 32-bit Generic
   12    * Code generation objectives: Unspecified
   13    * Validation result: Not run
   14    */
   15   
   16   /*
   17    * Abstract:
   18    *      Function to intialize non-finite, NaN
   19    */
   20   #include "rtGetNaN.h"
   21   #define NumBitsPerChar                 8U
   22   
   23   /*
   24    * Initialize rtNaN needed by the generated code.
   25    * NaN is initialized as non-signaling. Assumes IEEE.
   26    */
   27   real_T rtGetNaN(void)
   28   {
   29     size_t bitsPerReal = sizeof(real_T) * (NumBitsPerChar);
   30     real_T nan = 0.0;
   31     if (bitsPerReal == 32U) {
   32       nan = rtGetNaNF();
   33     } else {
   34       uint16_T one = 1U;
   35       enum {
   36         LittleEndian,
   37         BigEndian
   38       } machByteOrder = (*((uint8_T *) &one) == 1U) ? LittleEndian : BigEndian;
   39       switch (machByteOrder) {
   40        case LittleEndian:
   41         {
   42           union {
   43             LittleEndianIEEEDouble bitVal;
   44             real_T fltVal;
   45           } tmpVal;
   46   
   47           tmpVal.bitVal.words.wordH = 0xFFF80000U;
   48           tmpVal.bitVal.words.wordL = 0x00000000U;
   49           nan = tmpVal.fltVal;
   50           break;
   51         }
   52   
   53        case BigEndian:
   54         {
   55           union {
   56             BigEndianIEEEDouble bitVal;
   57             real_T fltVal;
   58           } tmpVal;
   59   
   60           tmpVal.bitVal.words.wordH = 0x7FFFFFFFU;
   61           tmpVal.bitVal.words.wordL = 0xFFFFFFFFU;
   62           nan = tmpVal.fltVal;
   63           break;
   64         }
   65       }
   66     }
   67   
   68     return nan;
   69   }
   70   
   71   /*
   72    * Initialize rtNaNF needed by the generated code.
   73    * NaN is initialized as non-signaling. Assumes IEEE.
   74    */
   75   real32_T rtGetNaNF(void)
   76   {
   77     IEEESingle nanF = { { 0 } };
   78   
   79     uint16_T one = 1U;
   80     enum {
   81       LittleEndian,
   82       BigEndian
   83     } machByteOrder = (*((uint8_T *) &one) == 1U) ? LittleEndian : BigEndian;
   84     switch (machByteOrder) {
   85      case LittleEndian:
   86       {
   87         nanF.wordL.wordLuint = 0xFFC00000U;
   88         break;
   89       }
   90   
   91      case BigEndian:
   92       {
   93         nanF.wordL.wordLuint = 0x7FFFFFFFU;
   94         break;
   95       }
   96     }
   97   
   98     return nanF.wordL.wordLreal;
   99   }
  100   
  101   /*
  102    * File trailer for generated code.
  103    *
  104    * [EOF]
  105    */
  106