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::APPLE:
159 defines.push_back(
"i386");
160 defines.push_back(
"__i386");
161 defines.push_back(
"__i386__");
162 if(mode==flavourt::APPLE)
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::APPLE:
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");
198 if(mode==flavourt::APPLE)
199 defines.push_back(
"__LITTLE_ENDIAN__");
202 case flavourt::VISUAL_STUDIO:
203 defines.push_back(
"_M_X64");
204 defines.push_back(
"_M_AMD64");
207 case flavourt::CODEWARRIOR:
219 if(subarch==
"powerpc")
224 if(subarch==
"ppc64le")
225 endianness=endiannesst::IS_LITTLE_ENDIAN;
227 endianness=endiannesst::IS_BIG_ENDIAN;
229 long_double_width=16*8;
230 char_is_unsigned=
true;
236 case flavourt::APPLE:
237 defines.push_back(
"__powerpc");
238 defines.push_back(
"__powerpc__");
239 defines.push_back(
"__POWERPC__");
240 defines.push_back(
"__ppc__");
242 if(mode==flavourt::APPLE)
243 defines.push_back(
"__BIG_ENDIAN__");
245 if(subarch!=
"powerpc")
247 defines.push_back(
"__powerpc64");
248 defines.push_back(
"__powerpc64__");
249 defines.push_back(
"__PPC64__");
250 defines.push_back(
"__ppc64__");
251 if(subarch==
"ppc64le")
253 defines.push_back(
"_CALL_ELF=2");
254 defines.push_back(
"__LITTLE_ENDIAN__");
258 defines.push_back(
"_CALL_ELF=1");
259 defines.push_back(
"__BIG_ENDIAN__");
264 case flavourt::VISUAL_STUDIO:
265 defines.push_back(
"_M_PPC");
268 case flavourt::CODEWARRIOR:
283 long_double_width=16*8;
288 long_double_width=8*8;
291 endianness=endiannesst::IS_LITTLE_ENDIAN;
292 char_is_unsigned=
true;
298 case flavourt::APPLE:
300 defines.push_back(
"__aarch64__");
302 defines.push_back(
"__arm__");
304 defines.push_back(
"__ARM_PCS_VFP");
307 case flavourt::VISUAL_STUDIO:
308 defines.push_back(
"_M_ARM");
311 case flavourt::CODEWARRIOR:
324 endianness=endiannesst::IS_LITTLE_ENDIAN;
325 long_double_width=16*8;
326 char_is_unsigned=
false;
332 defines.push_back(
"__alpha__");
335 case flavourt::VISUAL_STUDIO:
336 defines.push_back(
"_M_ALPHA");
339 case flavourt::APPLE:
340 case flavourt::CODEWARRIOR:
352 if(subarch==
"mipsel" ||
354 subarch==
"mipsn32el" ||
358 long_double_width=8*8;
363 long_double_width=16*8;
366 if(subarch==
"mipsel" ||
367 subarch==
"mipsn32el" ||
369 endianness=endiannesst::IS_LITTLE_ENDIAN;
371 endianness=endiannesst::IS_BIG_ENDIAN;
373 char_is_unsigned=
false;
379 defines.push_back(
"__mips__");
380 defines.push_back(
"mips");
385 case flavourt::VISUAL_STUDIO:
389 case flavourt::APPLE:
390 case flavourt::CODEWARRIOR:
403 endianness=endiannesst::IS_BIG_ENDIAN;
404 long_double_width=16*8;
405 char_is_unsigned=
true;
411 defines.push_back(
"__s390__");
414 case flavourt::VISUAL_STUDIO:
418 case flavourt::APPLE:
419 case flavourt::CODEWARRIOR:
432 endianness=endiannesst::IS_BIG_ENDIAN;
433 char_is_unsigned=
true;
439 defines.push_back(
"__s390x__");
442 case flavourt::VISUAL_STUDIO:
446 case flavourt::APPLE:
447 case flavourt::CODEWARRIOR:
459 if(subarch==
"sparc64")
462 long_double_width=16*8;
467 long_double_width=16*8;
470 endianness=endiannesst::IS_BIG_ENDIAN;
471 char_is_unsigned=
false;
477 defines.push_back(
"__sparc__");
478 if(subarch==
"sparc64")
479 defines.push_back(
"__arch64__");
482 case flavourt::VISUAL_STUDIO:
486 case flavourt::APPLE:
487 case flavourt::CODEWARRIOR:
500 long_double_width=16*8;
501 endianness=endiannesst::IS_LITTLE_ENDIAN;
502 char_is_unsigned=
false;
508 defines.push_back(
"__ia64__");
509 defines.push_back(
"_IA64");
510 defines.push_back(
"__IA64__");
513 case flavourt::VISUAL_STUDIO:
514 defines.push_back(
"_M_IA64");
517 case flavourt::APPLE:
518 case flavourt::CODEWARRIOR:
533 long_double_width=16*8;
534 endianness=endiannesst::IS_LITTLE_ENDIAN;
535 char_is_unsigned=
false;
541 defines.push_back(
"__ILP32__");
542 defines.push_back(
"__x86_64");
543 defines.push_back(
"__x86_64__");
544 defines.push_back(
"__amd64__");
545 defines.push_back(
"__amd64");
548 case flavourt::VISUAL_STUDIO:
552 case flavourt::APPLE:
553 case flavourt::CODEWARRIOR:
578 long_double_width=8*8;
579 endianness=endiannesst::IS_LITTLE_ENDIAN;
582 char_is_unsigned=
false;
591 long_double_width=8*8;
592 endianness=endiannesst::IS_BIG_ENDIAN;
593 char_is_unsigned=
false;
599 defines.push_back(
"__hppa__");
602 case flavourt::VISUAL_STUDIO:
606 case flavourt::APPLE:
607 case flavourt::CODEWARRIOR:
620 long_double_width=8*8;
621 endianness=endiannesst::IS_LITTLE_ENDIAN;
622 char_is_unsigned=
false;
628 defines.push_back(
"__sh__");
629 defines.push_back(
"__SH4__");
632 case flavourt::VISUAL_STUDIO:
636 case flavourt::APPLE:
637 case flavourt::CODEWARRIOR:
649 #if defined(__APPLE__) 651 return c_standardt::C11;
652 #elif defined(__FreeBSD__) 654 return c_standardt::C99;
657 return c_standardt::C11;
667 return cpp_standardt::CPP14;
669 return cpp_standardt::CPP98;
684 if(
sizeof(
long int)==8)
689 else if(arch==
"alpha")
691 else if(arch==
"arm64" ||
696 else if(arch==
"mips64el" ||
703 else if(arch==
"powerpc" ||
707 else if(arch==
"sparc" ||
710 else if(arch==
"ia64")
712 else if(arch==
"s390x")
714 else if(arch==
"s390")
718 else if(arch==
"v850")
720 else if(arch==
"hppa")
724 else if(arch==
"x86_64")
726 else if(arch==
"i386")
765 if(cmdline.
isset(
"function"))
768 if(cmdline.
isset(
'D'))
771 if(cmdline.
isset(
'I'))
774 if(cmdline.
isset(
"classpath"))
780 else if(cmdline.
isset(
"cp"))
789 const char *CLASSPATH=getenv(
"CLASSPATH");
790 if(CLASSPATH!=
nullptr)
796 if(cmdline.
isset(
"main-class"))
799 if(cmdline.
isset(
"include"))
811 if(cmdline.
isset(
"i386-linux"))
816 else if(cmdline.
isset(
"i386-win32") ||
817 cmdline.
isset(
"win32"))
822 else if(cmdline.
isset(
"winx64"))
827 else if(cmdline.
isset(
"i386-macos"))
832 else if(cmdline.
isset(
"ppc-macos"))
838 if(cmdline.
isset(
"arch"))
843 if(cmdline.
isset(
"os"))
855 if(cmdline.
isset(
"gcc"))
896 else if(os==
"linux" || os==
"solaris")
903 else if(os==
"freebsd")
937 if(arch==
"x64_64" && cmdline.
isset(
"gcc"))
945 if(arch==this_arch && os==this_os)
966 if(cmdline.
isset(
"16"))
969 if(cmdline.
isset(
"32"))
972 if(cmdline.
isset(
"64"))
975 if(cmdline.
isset(
"LP64"))
978 if(cmdline.
isset(
"ILP64"))
981 if(cmdline.
isset(
"LLP64"))
984 if(cmdline.
isset(
"ILP32"))
987 if(cmdline.
isset(
"LP32"))
990 if(cmdline.
isset(
"string-abstraction"))
995 if(cmdline.
isset(
"no-library"))
998 if(cmdline.
isset(
"little-endian"))
1001 if(cmdline.
isset(
"big-endian"))
1004 if(cmdline.
isset(
"little-endian") &&
1005 cmdline.
isset(
"big-endian"))
1008 if(cmdline.
isset(
"unsigned-char"))
1011 if(cmdline.
isset(
"round-to-even") ||
1012 cmdline.
isset(
"round-to-nearest"))
1015 if(cmdline.
isset(
"round-to-plus-inf"))
1018 if(cmdline.
isset(
"round-to-minus-inf"))
1021 if(cmdline.
isset(
"round-to-zero"))
1024 if(cmdline.
isset(
"object-bits"))
1033 throw "object-bits must be positive and less than the pointer width ("+
1045 case ost::OS_LINUX:
return "linux";
1046 case ost::OS_MACOS:
return "macos";
1047 case ost::OS_WIN:
return "win";
1048 default:
return "none";
1055 return ost::OS_LINUX;
1056 else if(os==
"macos")
1057 return ost::OS_MACOS;
1066 const std::string &what)
1071 if(ns.
lookup(
id, symbol))
1076 if(tmp.
id()!=ID_address_of ||
1078 tmp.
op0().
id()!=ID_index ||
1080 tmp.
op0().
op0().
id()!=ID_string_constant)
1083 "symbol table configuration entry `"+
id2string(
id)+
1084 "' is not a string constant";
1092 const std::string &what)
1097 if(ns.
lookup(
id, symbol))
1103 if(tmp.
id()!=ID_constant)
1105 "symbol table configuration entry `"+
id2string(
id)+
"' is not a constant";
1111 "failed to convert symbol table configuration entry `"+
id2string(
id)+
"'";
1188 const symbolt &entry_point_symbol=*maybe_symbol;
1190 if(entry_point_symbol.
mode==ID_java)
1192 else if(entry_point_symbol.
mode==ID_C)
1194 else if(entry_point_symbol.
mode==ID_cpp)
1198 "object_bits should fit into pointer width");
1225 #ifdef __ARM_PCS_VFP 1231 #if _MIPS_SIM==_ABIO32 1233 #elif _MIPS_SIM==_ABIN32 1234 this_arch=
"mipsn32el";
1236 this_arch=
"mips64el";
1239 #if _MIPS_SIM==_ABIO32 1241 #elif _MIPS_SIM==_ABIN32 1242 this_arch=
"mipsn32";
1247 #if defined(__ppc64__) || defined(__PPC64__) || \ 1248 defined(__powerpc64__) || defined(__POWERPC64__) 1249 #ifdef __LITTLE_ENDIAN__ 1250 this_arch=
"ppc64le";
1255 this_arch=
"powerpc";
1259 this_arch=
"sparc64";
1287 this_arch=
"unknown";
1298 const char cp_separator =
';';
1300 const char cp_separator =
':';
1303 std::vector<std::string> class_path;
1306 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
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