diff options
author | David Crocker <dcrocker@eschertech.com> | 2020-05-28 12:35:54 +0300 |
---|---|---|
committer | David Crocker <dcrocker@eschertech.com> | 2020-05-28 12:35:54 +0300 |
commit | 94a36fa9c95748323666929984972af08ab18335 (patch) | |
tree | c3b01c9bf5daa50fbe9cbf58ce2784736e00e72e /src/ecv.h | |
parent | abb62a3aee28addfce053d6f0d9c82d85160c595 (diff) |
Added Duet5LC configuration
Diffstat (limited to 'src/ecv.h')
-rw-r--r-- | src/ecv.h | 217 |
1 files changed, 217 insertions, 0 deletions
diff --git a/src/ecv.h b/src/ecv.h new file mode 100644 index 00000000..efb6f7bf --- /dev/null +++ b/src/ecv.h @@ -0,0 +1,217 @@ +/* Header file for supporting Escher C Verifier annotations in C and C++ files + * Copyright(c) 2016 Escher Technologies Limited + * Escher Technologies Limited permits free use and distribution of this file for the purpose of annotating C and C++ programs + * in a manner compatible with Escher C Verifier, subject to the following conditions: + * 1. If you make any alterations to this file, you must make this clear by adding additional comments, + * and you must reproduce these conditions and copyright notice in full. + * 2. No warranty or support is provided except in accordance with the terms of a paid-up support & maintenance agreement + * between the user and Escher Technologies Limited. + * + * For documentation of the eCv keywords, see the eCv Reference Manual at http://eschertech.com/support/perfect_developer_self_help.php + * For examples of their use, see http://eschertech.com/articles/index.php + */ + +#if !defined(__ECV_H_INCLUDED__) + +#define __ECV_H_INCLUDED__ + +#ifdef __ECV__ +#pragma ECV noverify +#endif + +/* Define the "normal" versions of the eCv keywords. + * If any of these clash with identifiers in the user program, you can #undef them after including this file. */ + +#define any _ecv_any +#define array _ecv_array +#define assert _ecv_assert +#define assume _ecv_assume +#define decrease _ecv_decrease +#define disjoint _ecv_disjoint +#define exists _ecv_exists +#define forall _ecv_forall +#define ghost _ecv_ghost +#define holds _ecv_holds +#define idiv _ecv_idiv +#define imod _ecv_imod +#define in _ecv_in +#define integer _ecv_integer +#define invariant _ecv_invariant +#define keep _ecv_keep +#define let _ecv_let +#define maxof _ecv_maxof +#define minof _ecv_minof +#define min_sizeof _ecv_min_sizeof +#define not_null _ecv_not_null +#define null _ecv_null +#define old _ecv_old +#define out _ecv_out +#define over _ecv_over +#define post _ecv_post +#define pre _ecv_pre +#define result _ecv_result +#define returns _ecv_returns +#define some _ecv_some +#define spec _ecv_spec +#define that _ecv_that +#define those _ecv_those +#define value _ecv_value +#define writes _ecv_writes +#define yield _ecv_yield +#define zero_init _ecv_zero_init + +#if defined(__ECV__) || !defined(__STDC_VERSION__) || (__STDC_VERSION__ < 19901L) +# define restrict _ecv_restrict +#endif + +#if defined(__cplusplus) +# define early _ecv_early +# define from _ecv_from +# if defined(__ECV__) || (__cplusplus < 201103L) +// The C++'11 final, nullptr and override keywords are available whenever processing C++ with eCv +# define final _ecv_final +# define nullptr _ecv_nullptr +# define override _ecv_override +# endif +#endif + +#if defined(__ECV__) + +/************************ The following definitions are only active when running eCv **********************/ + +#if defined(_MSC_VER) + +/******************** Definitions for Microsoft compilers *********************/ + +/* Define Microsoft compiler-specific keywords as expanding to nothing */ +#define __declspec(_x) +#define __w64 +#define __inline inline +#define __cdecl +#define __fastcall +#define __stdcall + +#if _MSC_VER >= 1400 + +/ * Microsoft file crtdefs.h (which is included by nearly everything else) contains some references to types not defined there. + * To avoid problems, we include crtdefs.h here along with the files that define the missing types. */ +#define __STDC_WANT_SECURE_LIB__ (0) /* need this to undo some inline declarations that don't compile in eCv */ +#define _CRT_SECURE_NO_WARNINGS (1) +#include "crtdefs.h" +#include "locale.h" /* defines "struct lconv" */ +struct __lc_time_data { int _x; }; /* this is defined only in the CRT source */ +struct threadmbcinfostruct { int _x; }; /* this is defined only in the CRT source */ +#endif + +#endif /* end Microsoft compiler specific */ + +#if defined(__GNUC__) + +/*********************** Definitions for Gnu Compiler Collection C and C++ compilers ********************/ + +#define __inline__ inline +#define __restrict__ _ecv_restrict + +/* Hide gcc __attribute__ keyword from eCv. + * WARNING: some header files (e.g. _mingw.h) may "#undef __attribute__", which undoes this. */ +#define __attribute__(_x) + +/* The following are needed to handle gcc's implementation of variable argument lists */ +typedef struct __builtin_va_list__ { int x; } __builtin_va_list; +extern void __builtin_va_start(__builtin_va_list, const char*); +extern void __builtin_va_end(__builtin_va_list); + +#endif /* end gcc specific */ + +#if defined HI_TECH_C + +/****************************** Definitions for HiTech C compilers ********************************/ + +#define bit bool /* define HiTech bit type as equivalent to bool */ + +/* Define the HiTech C extra type qualifiers */ +#define interrupt _ecv_interrupt /* functions may be flagged as interrupt routines */ +#define persistent +#define near +#define bank0 +#define bank1 +#define bank2 +#define bank3 +#define eeprom +#define __interrupt _ecv_interrupt /* functions may be flagged as interrupt routines */ +#define __persistent +#define __near +#define __bank0 +#define __bank1 +#define __bank2 +#define __bank3 +#define __eeprom + +#define asm(_x) /* hide assembler from eCv */ + +#endif /* end HiTech compiler specific */ + +#if defined __IAR_SYSTEMS_ICC__ + +/****************************** Definitions for IAR C/C++ compilers ********************************/ + +/* Define the IAR extra keywords */ +#define __cc_version1 +#define __cc_version2 +#define __data16 +#define __data20 +#define __interrupt _ecv_interrupt /* functions may be flagged as interrupt routines */ +#define __intrinsic +#define __monitor +#define __no_init +#define __no_pic +#define __noreturn +#define __persistent +#define __ramfunc +#define __raw +#define __regvar +#define __root +#define __ro_placement +#define __save_reg20 +#define __task + +#endif /* end IAR compiler specific */ + +/**************************** End of compiler-specific definitions ***************************/ + +#else /* not running eCv */ + +/* Define eCv macros as expanding to nothing */ +#define _ecv_array +#define _ecv_assert(_x) ((void)0) +#define _ecv_assume(_x) +#define _ecv_change(_x) +#define _ecv_decrease(_x) +#define _ecv_ghost(_x) +#define _ecv_interrupt +#define _ecv_invariant(_x) +#define _ecv_keep(_x) +#define _ecv_not_null(_x) (_x) +#define _ecv_null +#define _ecv_out +#define _ecv_pass ((void)0) +#define _ecv_post(_x) +#define _ecv_pre(_x) +#define _ecv_restrict +#define _ecv_returns(_x) +#define _ecv_spec +#define _ecv_writes(_x) + +#if defined(__cplusplus) +#define _ecv_early +#define _ecv_final +#define _ecv_from +#define _ecv_nullptr (0) +#define _ecv_override +#endif + +#endif /* end "if defined(__ECV__) ... else ..." */ + +#endif /* end header guard */ + +/* End of file */ |