%if !EXISTS("RemoveFixptWordSizeChecks")
%assign RemoveFixptWordSizeChecks = 0
%endif
%if !RemoveFixptWordSizeChecks
%if !ISFIELD(CTargetSpecific,"PreprocMaxBitsSint")
%addtorecord CTargetSpecific PreprocMaxBitsSint 128
%endif
%if !ISFIELD(CTargetSpecific,"PreprocMaxBitsUint")
%addtorecord CTargetSpecific PreprocMaxBitsUint 128
%endif
%assign UsesFixedPointMath = TLC_FALSE
%with ::CompiledModel.DataTypes
%foreach i=NumDataTypes
%if DataType[i].IsFixedPoint == 1
%assign UsesFixedPointMath = TLC_TRUE
%break
%endif
%endforeach
%endwith
%if UsesFixedPointMath == TLC_TRUE
%openfile buffer
%assign signedYes = 1
%assign signedNo = 0
%assign ENABLE_PORTABLE_WORDSIZES = ::CompiledModel.ConfigSet.PortableWordSizes
%if ENABLE_PORTABLE_WORDSIZES == 1
#ifndef PORTABLE_WORDSIZES
%endif
#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
%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
%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
%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
%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
%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
%endif
%if ENABLE_PORTABLE_WORDSIZES == 1
#endif /* PORTABLE_WORDSIZES */
%endif
%closefile buffer
%<LibCacheDefine(buffer)>/
%endif
%endif