%%
%%
%%
%%Copyright1994-2017TheMathWorks,Inc.
%%
%%insertCpreprocessorcodetocheckforagreementof
%%integersizes
%%
 
%%defaultistogeneratethechecksbutthiscanbesupressed
%%bysettingRemoveFixptWordSizeChecks=1,possiblyviathe
%%TLCOptionsparameter
%if !EXISTS("RemoveFixptWordSizeChecks")
   %assign RemoveFixptWordSizeChecks = 0
%endif
 
%%optionallyremovechecks
%if !RemoveFixptWordSizeChecks
 
%if !ISFIELD(CTargetSpecific,"PreprocMaxBitsSint")
  %%
  %addtorecord CTargetSpecific PreprocMaxBitsSint 128
  %%
%endif
 
%if !ISFIELD(CTargetSpecific,"PreprocMaxBitsUint")
  %%
  %addtorecord CTargetSpecific PreprocMaxBitsUint 128
  %%
%endif
%%
 
%%loopthroughthemodeldatatypesandsearchforfixedpointtypes
%assign UsesFixedPointMath = TLC_FALSE
%with ::CompiledModel.DataTypes
  %foreach i=NumDataTypes
    %if DataType[i].IsFixedPoint == 1
      %assign UsesFixedPointMath = TLC_TRUE
      %break
    %endif
  %endforeach
%endwith
%%onlyputthewordsizechecksiniffixedpointdatatypesareused
%if UsesFixedPointMath == TLC_TRUE
%openfile buffer
%%
%assign signedYes = 1
%assign signedNo = 0
 
%%
%%IfPORTABLE_WORDSIZESison,includetmwtypes.hinrtwtypes.hinsteadof
%%checkingwordlengthhere
%%
%assign ENABLE_PORTABLE_WORDSIZES = ::CompiledModel.ConfigSet.PortableWordSizes
%if ENABLE_PORTABLE_WORDSIZES == 1
#ifndef PORTABLE_WORDSIZES
%endif
 
%%
%%makesurelimits.hhasbeenincluded
%%
#ifndef UCHAR_MAX
#include
#endif
 
%function FcnGetWordSizeErrorMessage(type) void
  %assign str = ...
    "Code was generated for compiler with different sized " + type + ". ///n" ...
    "Consider adjusting Test hardware word size settings on the ///n" ...
    "Hardware Implementation pane to match your compiler word sizes as ///n" ...
    "defined in limits.h of the compiler. Alternatively, you can ///n" ...
    "select the Test hardware is the same as production hardware option and ///n" ...
    "select the Enable portable word sizes option on the Code Generation > ///n" ...
    "Verification pane for ERT based targets, which will disable the ///n" ...
    "preprocessor word size checks."
  %return str
%endfunction
 
%function FcnGetWordSizeSkipCheckMessage(type) void
  %assign str = ...
    "/* Skipping " + type + " check: insufficient preprocessor integer range. */"
  %return str
%endfunction
 
%%
%%
%%checkCHARS%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%assign umask = SetLSNBitsStr((IntegerSizes.CharNumBits),IntegerSizes.CharNumBits,signedNo)
%assign smask = SetLSNBitsStr((IntegerSizes.CharNumBits-1),IntegerSizes.CharNumBits,signedYes)
%assign typeStr = "uchar/char"
%if IntegerSizes.CharNumBits > CTargetSpecific.PreprocMaxBitsUint || ...
  IntegerSizes.CharNumBits > CTargetSpecific.PreprocMaxBitsSint
%<FcnGetWordSizeSkipCheckMessage(typeStr)>
%else
#if ( UCHAR_MAX != %<umask> ) || ( SCHAR_MAX != %<smask> )
#error %<FcnGetWordSizeErrorMessage(typeStr)>
#endif
%endif
 
%%
%%
%%checkSHORTS%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%assign umask = SetLSNBitsStr((IntegerSizes.ShortNumBits),IntegerSizes.ShortNumBits,signedNo)
%assign smask = SetLSNBitsStr((IntegerSizes.ShortNumBits-1),IntegerSizes.ShortNumBits,signedYes)
%assign typeStr = "ushort/short"
%if IntegerSizes.ShortNumBits > CTargetSpecific.PreprocMaxBitsUint || ...
  IntegerSizes.ShortNumBits > CTargetSpecific.PreprocMaxBitsSint
%<FcnGetWordSizeSkipCheckMessage(typeStr)>
%else
#if ( USHRT_MAX != %<umask> ) || ( SHRT_MAX != %<smask> )
#error %<FcnGetWordSizeErrorMessage(typeStr)>
#endif
%endif
 
%%
%%
%%checkINTS%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%assign umask = SetLSNBitsStr((IntegerSizes.IntNumBits),IntegerSizes.IntNumBits,signedNo)
%assign smask = SetLSNBitsStr((IntegerSizes.IntNumBits-1),IntegerSizes.IntNumBits,signedYes)
%assign typeStr = "uint/int"
%if IntegerSizes.IntNumBits > CTargetSpecific.PreprocMaxBitsUint || ...
  IntegerSizes.IntNumBits > CTargetSpecific.PreprocMaxBitsSint
%<FcnGetWordSizeSkipCheckMessage(typeStr)>
%else
#if ( UINT_MAX != %<umask> ) || ( INT_MAX != %<smask> )
#error %<FcnGetWordSizeErrorMessage(typeStr)>
#endif
%endif
 
%%
%%
%%checkLONGS%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%assign umask = SetLSNBitsStr((IntegerSizes.LongNumBits),IntegerSizes.LongNumBits,signedNo)
%assign smask = SetLSNBitsStr((IntegerSizes.LongNumBits-1),IntegerSizes.LongNumBits,signedYes)
%assign typeStr = "ulong/long"
%if IntegerSizes.LongNumBits > CTargetSpecific.PreprocMaxBitsUint || ...
  IntegerSizes.LongNumBits > CTargetSpecific.PreprocMaxBitsSint
%<FcnGetWordSizeSkipCheckMessage(typeStr)>
%else
#if ( ULONG_MAX != %<umask> ) || ( LONG_MAX != %<smask> )
#error %<FcnGetWordSizeErrorMessage(typeStr)>
#endif
%endif
 
%if IntegerSizes.LongLongMode == 1
%%
%%
%%checkLONGLONG%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%assign umask = SetLSNBitsStr((IntegerSizes.LongLongNumBits),IntegerSizes.LongLongNumBits,signedNo)
%assign smask = SetLSNBitsStr((IntegerSizes.LongLongNumBits-1),IntegerSizes.LongLongNumBits,signedYes)
%assign typeStr = "ulong_long/long_long"
%if IntegerSizes.LongLongNumBits > CTargetSpecific.PreprocMaxBitsUint || ...
IntegerSizes.LongLongNumBits > CTargetSpecific.PreprocMaxBitsSint
%<FcnGetWordSizeSkipCheckMessage(typeStr)>
%else
#if ( ULLONG_MAX != %<umask> ) || ( LLONG_MAX != %<smask> )
#error %<FcnGetWordSizeErrorMessage("typeStr")>
#endif
%endif
%%endof%ifIntegerSizes.LongLongMode==1
%endif
 
%%IfSIL_TESTINGison,includetmwtypes.hinrtwtypes.hinsteadof
%%definingwordlengthhere
%if ENABLE_PORTABLE_WORDSIZES == 1
#endif /* PORTABLE_WORDSIZES */
%endif
 
%%
%closefile buffer
%%
%%causedefinestobeincludedingeneratedcode
%%
%<LibCacheDefine(buffer)>/
%%
%%enddefineintegersizecheck
%%
%%endof%ifUsesFixedPointMath==TLC_TRUE
%%
%endif
%%endof%if!RemoveFixptWordSizeChecks
%endif