52 long_long_int_width=8*8;
56 long_double_width=16*8;
57 char_is_unsigned=
false;
58 wchar_t_is_unsigned=
false;
61 memory_operand_size=int_width/8;
76 long_long_int_width=8*8;
80 long_double_width=8*8;
81 char_is_unsigned=
false;
82 wchar_t_is_unsigned=
false;
85 memory_operand_size=int_width/8;
96 long_long_int_width=8*8;
100 long_double_width=8*8;
101 char_is_unsigned=
false;
102 wchar_t_is_unsigned=
false;
105 memory_operand_size=int_width/8;
116 long_long_int_width=8*8;
120 long_double_width=12*8;
121 char_is_unsigned=
false;
122 wchar_t_is_unsigned=
false;
125 memory_operand_size=int_width/8;
136 long_long_int_width=8*8;
140 long_double_width=8*8;
141 char_is_unsigned=
false;
142 wchar_t_is_unsigned=
false;
145 memory_operand_size=int_width/8;
151 endianness=endiannesst::IS_LITTLE_ENDIAN;
152 char_is_unsigned=
false;
158 case flavourt::CLANG:
159 defines.push_back(
"i386");
160 defines.push_back(
"__i386");
161 defines.push_back(
"__i386__");
162 if(mode == flavourt::CLANG)
163 defines.push_back(
"__LITTLE_ENDIAN__");
166 case flavourt::VISUAL_STUDIO:
167 defines.push_back(
"_M_IX86");
170 case flavourt::CODEWARRIOR:
183 endianness=endiannesst::IS_LITTLE_ENDIAN;
184 long_double_width=16*8;
185 char_is_unsigned=
false;
191 case flavourt::CLANG:
192 defines.push_back(
"__LP64__");
193 defines.push_back(
"__x86_64");
194 defines.push_back(
"__x86_64__");
195 defines.push_back(
"_LP64");
196 defines.push_back(
"__amd64__");
197 defines.push_back(
"__amd64");
199 if(os == ost::OS_MACOS)
200 defines.push_back(
"__LITTLE_ENDIAN__");
203 case flavourt::VISUAL_STUDIO:
204 defines.push_back(
"_M_X64");
205 defines.push_back(
"_M_AMD64");
208 case flavourt::CODEWARRIOR:
220 if(subarch==
"powerpc")
225 if(subarch==
"ppc64le")
226 endianness=endiannesst::IS_LITTLE_ENDIAN;
228 endianness=endiannesst::IS_BIG_ENDIAN;
230 long_double_width=16*8;
231 char_is_unsigned=
true;
237 case flavourt::CLANG:
238 defines.push_back(
"__powerpc");
239 defines.push_back(
"__powerpc__");
240 defines.push_back(
"__POWERPC__");
241 defines.push_back(
"__ppc__");
243 if(os == ost::OS_MACOS)
244 defines.push_back(
"__BIG_ENDIAN__");
246 if(subarch!=
"powerpc")
248 defines.push_back(
"__powerpc64");
249 defines.push_back(
"__powerpc64__");
250 defines.push_back(
"__PPC64__");
251 defines.push_back(
"__ppc64__");
252 if(subarch==
"ppc64le")
254 defines.push_back(
"_CALL_ELF=2");
255 defines.push_back(
"__LITTLE_ENDIAN__");
259 defines.push_back(
"_CALL_ELF=1");
260 defines.push_back(
"__BIG_ENDIAN__");
265 case flavourt::VISUAL_STUDIO:
266 defines.push_back(
"_M_PPC");
269 case flavourt::CODEWARRIOR:
284 long_double_width=16*8;
289 long_double_width=8*8;
292 endianness=endiannesst::IS_LITTLE_ENDIAN;
293 char_is_unsigned=
true;
299 case flavourt::CLANG:
301 defines.push_back(
"__aarch64__");
303 defines.push_back(
"__arm__");
305 defines.push_back(
"__ARM_PCS_VFP");
308 case flavourt::VISUAL_STUDIO:
309 defines.push_back(
"_M_ARM");
312 case flavourt::CODEWARRIOR:
325 endianness=endiannesst::IS_LITTLE_ENDIAN;
326 long_double_width=16*8;
327 char_is_unsigned=
false;
333 defines.push_back(
"__alpha__");
336 case flavourt::VISUAL_STUDIO:
337 defines.push_back(
"_M_ALPHA");
340 case flavourt::CLANG:
341 case flavourt::CODEWARRIOR:
353 if(subarch==
"mipsel" ||
355 subarch==
"mipsn32el" ||
359 long_double_width=8*8;
364 long_double_width=16*8;
367 if(subarch==
"mipsel" ||
368 subarch==
"mipsn32el" ||
370 endianness=endiannesst::IS_LITTLE_ENDIAN;
372 endianness=endiannesst::IS_BIG_ENDIAN;
374 char_is_unsigned=
false;
380 defines.push_back(
"__mips__");
381 defines.push_back(
"mips");
386 case flavourt::VISUAL_STUDIO:
390 case flavourt::CLANG:
391 case flavourt::CODEWARRIOR:
404 endianness=endiannesst::IS_BIG_ENDIAN;
405 long_double_width=16*8;
406 char_is_unsigned=
true;
412 defines.push_back(
"__s390__");
415 case flavourt::VISUAL_STUDIO:
419 case flavourt::CLANG:
420 case flavourt::CODEWARRIOR:
433 endianness=endiannesst::IS_BIG_ENDIAN;
434 char_is_unsigned=
true;
440 defines.push_back(
"__s390x__");
443 case flavourt::VISUAL_STUDIO:
447 case flavourt::CLANG:
448 case flavourt::CODEWARRIOR:
460 if(subarch==
"sparc64")
463 long_double_width=16*8;
468 long_double_width=16*8;
471 endianness=endiannesst::IS_BIG_ENDIAN;
472 char_is_unsigned=
false;
478 defines.push_back(
"__sparc__");
479 if(subarch==
"sparc64")
480 defines.push_back(
"__arch64__");
483 case flavourt::VISUAL_STUDIO:
487 case flavourt::CLANG:
488 case flavourt::CODEWARRIOR:
501 long_double_width=16*8;
502 endianness=endiannesst::IS_LITTLE_ENDIAN;
503 char_is_unsigned=
false;
509 defines.push_back(
"__ia64__");
510 defines.push_back(
"_IA64");
511 defines.push_back(
"__IA64__");
514 case flavourt::VISUAL_STUDIO:
515 defines.push_back(
"_M_IA64");
518 case flavourt::CLANG:
519 case flavourt::CODEWARRIOR:
534 long_double_width=16*8;
535 endianness=endiannesst::IS_LITTLE_ENDIAN;
536 char_is_unsigned=
false;
542 defines.push_back(
"__ILP32__");
543 defines.push_back(
"__x86_64");
544 defines.push_back(
"__x86_64__");
545 defines.push_back(
"__amd64__");
546 defines.push_back(
"__amd64");
549 case flavourt::VISUAL_STUDIO:
553 case flavourt::CLANG:
554 case flavourt::CODEWARRIOR:
579 long_double_width=8*8;
580 endianness=endiannesst::IS_LITTLE_ENDIAN;
583 char_is_unsigned=
false;
592 long_double_width=8*8;
593 endianness=endiannesst::IS_BIG_ENDIAN;
594 char_is_unsigned=
false;
600 defines.push_back(
"__hppa__");
603 case flavourt::VISUAL_STUDIO:
607 case flavourt::CLANG:
608 case flavourt::CODEWARRIOR:
621 long_double_width=8*8;
622 endianness=endiannesst::IS_LITTLE_ENDIAN;
623 char_is_unsigned=
false;
629 defines.push_back(
"__sh__");
630 defines.push_back(
"__SH4__");
633 case flavourt::VISUAL_STUDIO:
637 case flavourt::CLANG:
638 case flavourt::CODEWARRIOR:
650 #if defined(__APPLE__) 652 return c_standardt::C11;
653 #elif defined(__FreeBSD__) 655 return c_standardt::C99;
658 return c_standardt::C11;
668 return cpp_standardt::CPP14;
670 return cpp_standardt::CPP98;
685 if(
sizeof(
long int)==8)
690 else if(arch==
"alpha")
692 else if(arch==
"arm64" ||
697 else if(arch==
"mips64el" ||
704 else if(arch==
"powerpc" ||
708 else if(arch==
"sparc" ||
711 else if(arch==
"ia64")
713 else if(arch==
"s390x")
715 else if(arch==
"s390")
719 else if(arch==
"v850")
721 else if(arch==
"hppa")
725 else if(arch==
"x86_64")
727 else if(arch==
"i386")
766 if(cmdline.
isset(
"function"))
769 if(cmdline.
isset(
'D'))
772 if(cmdline.
isset(
'I'))
775 if(cmdline.
isset(
"classpath"))
781 else if(cmdline.
isset(
"cp"))
790 const char *CLASSPATH=getenv(
"CLASSPATH");
791 if(CLASSPATH!=
nullptr)
797 if(cmdline.
isset(
"main-class"))
800 if(cmdline.
isset(
"include"))
812 if(cmdline.
isset(
"i386-linux"))
817 else if(cmdline.
isset(
"i386-win32") ||
818 cmdline.
isset(
"win32"))
823 else if(cmdline.
isset(
"winx64"))
828 else if(cmdline.
isset(
"i386-macos"))
833 else if(cmdline.
isset(
"ppc-macos"))
839 if(cmdline.
isset(
"arch"))
844 if(cmdline.
isset(
"os"))
856 if(cmdline.
isset(
"gcc"))
897 else if(os==
"linux" || os==
"solaris")
904 else if(os==
"freebsd")
938 if(arch==
"x64_64" && cmdline.
isset(
"gcc"))
946 if(arch==this_arch && os==this_os)
967 if(cmdline.
isset(
"16"))
970 if(cmdline.
isset(
"32"))
973 if(cmdline.
isset(
"64"))
976 if(cmdline.
isset(
"LP64"))
979 if(cmdline.
isset(
"ILP64"))
982 if(cmdline.
isset(
"LLP64"))
985 if(cmdline.
isset(
"ILP32"))
988 if(cmdline.
isset(
"LP32"))
991 if(cmdline.
isset(
"string-abstraction"))
996 if(cmdline.
isset(
"no-library"))
999 if(cmdline.
isset(
"little-endian"))
1002 if(cmdline.
isset(
"big-endian"))
1005 if(cmdline.
isset(
"little-endian") &&
1006 cmdline.
isset(
"big-endian"))
1009 if(cmdline.
isset(
"unsigned-char"))
1012 if(cmdline.
isset(
"round-to-even") ||
1013 cmdline.
isset(
"round-to-nearest"))
1016 if(cmdline.
isset(
"round-to-plus-inf"))
1019 if(cmdline.
isset(
"round-to-minus-inf"))
1022 if(cmdline.
isset(
"round-to-zero"))
1025 if(cmdline.
isset(
"object-bits"))
1034 throw "object-bits must be positive and less than the pointer width ("+
1046 case ost::OS_LINUX:
return "linux";
1047 case ost::OS_MACOS:
return "macos";
1048 case ost::OS_WIN:
return "win";
1049 default:
return "none";
1056 return ost::OS_LINUX;
1057 else if(os==
"macos")
1058 return ost::OS_MACOS;
1067 const std::string &what)
1072 if(ns.
lookup(
id, symbol))
1077 if(tmp.
id()!=ID_address_of ||
1079 tmp.
op0().
id()!=ID_index ||
1081 tmp.
op0().
op0().
id()!=ID_string_constant)
1084 "symbol table configuration entry `"+
id2string(
id)+
1085 "' is not a string constant";
1093 const std::string &what)
1098 if(ns.
lookup(
id, symbol))
1104 if(tmp.
id()!=ID_constant)
1106 "symbol table configuration entry `"+
id2string(
id)+
"' is not a constant";
1112 "failed to convert symbol table configuration entry `"+
id2string(
id)+
"'";
1189 const symbolt &entry_point_symbol=*maybe_symbol;
1191 if(entry_point_symbol.
mode==ID_java)
1193 else if(entry_point_symbol.
mode==ID_C)
1195 else if(entry_point_symbol.
mode==ID_cpp)
1199 "object_bits should fit into pointer width");
1221 #elif defined(__armel__) 1223 #elif defined(__aarch64__) 1225 #elif defined(__arm__) 1226 #ifdef __ARM_PCS_VFP 1231 #elif defined(__mipsel__) 1232 #if _MIPS_SIM==_ABIO32 1234 #elif _MIPS_SIM==_ABIN32 1235 this_arch=
"mipsn32el";
1237 this_arch=
"mips64el";
1239 #elif defined(__mips__) 1240 #if _MIPS_SIM==_ABIO32 1242 #elif _MIPS_SIM==_ABIN32 1243 this_arch=
"mipsn32";
1247 #elif defined(__powerpc__) 1248 #if defined(__ppc64__) || defined(__PPC64__) || \ 1249 defined(__powerpc64__) || defined(__POWERPC64__) 1250 #ifdef __LITTLE_ENDIAN__ 1251 this_arch=
"ppc64le";
1256 this_arch=
"powerpc";
1258 #elif defined(__sparc__) 1260 this_arch=
"sparc64";
1264 #elif defined(__ia64__) 1266 #elif defined(__s390x__) 1268 #elif defined(__s390__) 1270 #elif defined(__x86_64__) 1276 #elif defined(__i386__) 1278 #elif defined(_WIN64) 1280 #elif defined(_WIN32) 1282 #elif defined(__hppa__) 1284 #elif defined(__sh__) 1288 this_arch=
"unknown";
1299 const char cp_separator =
';';
1301 const char cp_separator =
':';
1304 std::vector<std::string> class_path;
1307 java.
classpath.end(), class_path.begin(), class_path.end());
void set_arch_spec_arm(const irep_idt &subarch)
const std::list< std::string > & get_values(const std::string &option) const
void set_LP32()
int=16, long=32, pointer=32
struct configt::ansi_ct ansi_c
const std::string & id2string(const irep_idt &d)
void set_arch_spec_power(const irep_idt &subarch)
Globally accessible architectural configuration.
irep_idt mode
Language mode.
void set_classpath(const std::string &cp)
std::string object_bits_info()
static std::string os_to_string(ost)
unsigned unsafe_string2unsigned(const std::string &str, int base)
bool single_precision_constant
void set_arch_spec_v850()
Sets up the widths of variables for the Renesas V850.
std::list< std::string > defines
static irep_idt string_from_ns(const namespacet &ns, const std::string &what)
exprt value
Initial value of symbol.
std::string get_value(char option) const
void set_LP64()
int=32, long=64, pointer=64
void set_arch_spec_ia64()
Symbol table entry.This is a symbol in the symbol table, stored in an object of type symbol_tablet...
static const std::size_t default_object_bits
void set_arch_spec_mips(const irep_idt &subarch)
static const std::size_t default_object_bits
struct configt::bv_encodingt bv_encoding
preprocessort preprocessor
bool set(const cmdlinet &cmdline)
const irep_idt & id() const
std::list< std::string > include_files
std::size_t long_long_int_width
virtual bool isset(char option) const
void set_arch_spec_sparc(const irep_idt &subarch)
void set_arch_spec_x86_64()
static unsigned unsigned_from_ns(const namespacet &ns, const std::string &what)
static const std::size_t default_object_bits
void set_arch(const irep_idt &)
API to expression classes.
mp_integer alignment(const typet &type, const namespacet &ns)
const irep_idt & get(const irep_namet &name) const
void set_arch_spec_alpha()
enum configt::cppt::cpp_standardt cpp_standard
void set_ILP32()
int=32, long=32, pointer=32
struct configt::javat java
dstringt has one field, an unsigned integer no which is an index into a static table of strings...
void set_arch_spec_s390()
std::size_t pointer_width
const constant_exprt & to_constant_expr(const exprt &expr)
Cast a generic exprt to a constant_exprt.
void set_from_symbol_table(const symbol_tablet &)
enum configt::ansi_ct::c_standardt c_standard
unsigned integer2unsigned(const mp_integer &n)
static c_standardt default_c_standard()
std::size_t wchar_t_width
static irep_idt this_operating_system()
ieee_floatt::rounding_modet rounding_mode
void split_string(const std::string &s, char delim, std::vector< std::string > &result, bool strip, bool remove_empty)
Given a string s, split into a sequence of substrings when separated by specified delimiter...
bool is_object_bits_default
Base class for all expressions.
void set_arch_spec_hppa()
void set_arch_spec_i386()
std::string to_string(const string_constraintt &expr)
Used for debug printing.
void set_LLP64()
int=32, long=32, pointer=64
static ost string_to_os(const std::string &)
std::size_t memory_operand_size
#define DATA_INVARIANT(CONDITION, REASON)
std::size_t long_int_width
const symbolt * lookup(const irep_idt &name) const
Find a symbol in the symbol table for read-only access.
static cpp_standardt default_cpp_standard()
bool ts_18661_3_Floatn_types
static const std::size_t default_object_bits
bool lookup(const irep_idt &name, const symbolt *&symbol) const override
See namespace_baset::lookup().
static irep_idt this_architecture()
std::size_t short_int_width
void set_arch_spec_s390x()
std::size_t long_double_width
void set_object_bits_from_symbol_table(const symbol_tablet &)
Sets the number of bits used for object addresses.
bool simplify(exprt &expr, const namespacet &ns)
void set_ILP64()
int=64, long=64, pointer=64
std::list< std::string > include_paths