50 long_long_int_width=8*8;
54 long_double_width=16*8;
55 char_is_unsigned=
false;
56 wchar_t_is_unsigned=
false;
59 memory_operand_size=int_width/8;
74 long_long_int_width=8*8;
78 long_double_width=8*8;
79 char_is_unsigned=
false;
80 wchar_t_is_unsigned=
false;
83 memory_operand_size=int_width/8;
94 long_long_int_width=8*8;
98 long_double_width=8*8;
99 char_is_unsigned=
false;
100 wchar_t_is_unsigned=
false;
103 memory_operand_size=int_width/8;
114 long_long_int_width=8*8;
118 long_double_width=12*8;
119 char_is_unsigned=
false;
120 wchar_t_is_unsigned=
false;
123 memory_operand_size=int_width/8;
134 long_long_int_width=8*8;
138 long_double_width=8*8;
139 char_is_unsigned=
false;
140 wchar_t_is_unsigned=
false;
143 memory_operand_size=int_width/8;
149 endianness=endiannesst::IS_LITTLE_ENDIAN;
150 char_is_unsigned=
false;
156 case flavourt::APPLE:
157 defines.push_back(
"i386");
158 defines.push_back(
"__i386");
159 defines.push_back(
"__i386__");
160 if(mode==flavourt::APPLE)
161 defines.push_back(
"__LITTLE_ENDIAN__");
164 case flavourt::VISUAL_STUDIO:
165 defines.push_back(
"_M_IX86");
168 case flavourt::CODEWARRIOR:
181 endianness=endiannesst::IS_LITTLE_ENDIAN;
182 long_double_width=16*8;
183 char_is_unsigned=
false;
189 case flavourt::APPLE:
190 defines.push_back(
"__LP64__");
191 defines.push_back(
"__x86_64");
192 defines.push_back(
"__x86_64__");
193 defines.push_back(
"_LP64");
194 defines.push_back(
"__amd64__");
195 defines.push_back(
"__amd64");
196 if(mode==flavourt::APPLE)
197 defines.push_back(
"__LITTLE_ENDIAN__");
200 case flavourt::VISUAL_STUDIO:
201 defines.push_back(
"_M_X64");
202 defines.push_back(
"_M_AMD64");
205 case flavourt::CODEWARRIOR:
217 if(subarch==
"powerpc")
222 if(subarch==
"ppc64le")
223 endianness=endiannesst::IS_LITTLE_ENDIAN;
225 endianness=endiannesst::IS_BIG_ENDIAN;
227 long_double_width=16*8;
228 char_is_unsigned=
true;
234 case flavourt::APPLE:
235 defines.push_back(
"__powerpc");
236 defines.push_back(
"__powerpc__");
237 defines.push_back(
"__POWERPC__");
238 defines.push_back(
"__ppc__");
240 if(mode==flavourt::APPLE)
241 defines.push_back(
"__BIG_ENDIAN__");
243 if(subarch!=
"powerpc")
245 defines.push_back(
"__powerpc64");
246 defines.push_back(
"__powerpc64__");
247 defines.push_back(
"__PPC64__");
248 defines.push_back(
"__ppc64__");
249 if(subarch==
"ppc64le")
251 defines.push_back(
"_CALL_ELF=2");
252 defines.push_back(
"__LITTLE_ENDIAN__");
256 defines.push_back(
"_CALL_ELF=1");
257 defines.push_back(
"__BIG_ENDIAN__");
262 case flavourt::VISUAL_STUDIO:
263 defines.push_back(
"_M_PPC");
266 case flavourt::CODEWARRIOR:
281 long_double_width=16*8;
286 long_double_width=8*8;
289 endianness=endiannesst::IS_LITTLE_ENDIAN;
290 char_is_unsigned=
true;
296 case flavourt::APPLE:
298 defines.push_back(
"__aarch64__");
300 defines.push_back(
"__arm__");
302 defines.push_back(
"__ARM_PCS_VFP");
305 case flavourt::VISUAL_STUDIO:
306 defines.push_back(
"_M_ARM");
309 case flavourt::CODEWARRIOR:
322 endianness=endiannesst::IS_LITTLE_ENDIAN;
323 long_double_width=16*8;
324 char_is_unsigned=
false;
330 defines.push_back(
"__alpha__");
333 case flavourt::VISUAL_STUDIO:
334 defines.push_back(
"_M_ALPHA");
337 case flavourt::APPLE:
338 case flavourt::CODEWARRIOR:
350 if(subarch==
"mipsel" ||
352 subarch==
"mipsn32el" ||
356 long_double_width=8*8;
361 long_double_width=16*8;
364 if(subarch==
"mipsel" ||
365 subarch==
"mipsn32el" ||
367 endianness=endiannesst::IS_LITTLE_ENDIAN;
369 endianness=endiannesst::IS_BIG_ENDIAN;
371 char_is_unsigned=
false;
377 defines.push_back(
"__mips__");
378 defines.push_back(
"mips");
383 case flavourt::VISUAL_STUDIO:
387 case flavourt::APPLE:
388 case flavourt::CODEWARRIOR:
401 endianness=endiannesst::IS_BIG_ENDIAN;
402 long_double_width=16*8;
403 char_is_unsigned=
true;
409 defines.push_back(
"__s390__");
412 case flavourt::VISUAL_STUDIO:
416 case flavourt::APPLE:
417 case flavourt::CODEWARRIOR:
430 endianness=endiannesst::IS_BIG_ENDIAN;
431 char_is_unsigned=
true;
437 defines.push_back(
"__s390x__");
440 case flavourt::VISUAL_STUDIO:
444 case flavourt::APPLE:
445 case flavourt::CODEWARRIOR:
457 if(subarch==
"sparc64")
460 long_double_width=16*8;
465 long_double_width=16*8;
468 endianness=endiannesst::IS_BIG_ENDIAN;
469 char_is_unsigned=
false;
475 defines.push_back(
"__sparc__");
476 if(subarch==
"sparc64")
477 defines.push_back(
"__arch64__");
480 case flavourt::VISUAL_STUDIO:
484 case flavourt::APPLE:
485 case flavourt::CODEWARRIOR:
498 long_double_width=16*8;
499 endianness=endiannesst::IS_LITTLE_ENDIAN;
500 char_is_unsigned=
false;
506 defines.push_back(
"__ia64__");
507 defines.push_back(
"_IA64");
508 defines.push_back(
"__IA64__");
511 case flavourt::VISUAL_STUDIO:
512 defines.push_back(
"_M_IA64");
515 case flavourt::APPLE:
516 case flavourt::CODEWARRIOR:
531 long_double_width=16*8;
532 endianness=endiannesst::IS_LITTLE_ENDIAN;
533 char_is_unsigned=
false;
539 defines.push_back(
"__ILP32__");
540 defines.push_back(
"__x86_64");
541 defines.push_back(
"__x86_64__");
542 defines.push_back(
"__amd64__");
543 defines.push_back(
"__amd64");
546 case flavourt::VISUAL_STUDIO:
550 case flavourt::APPLE:
551 case flavourt::CODEWARRIOR:
576 long_double_width=8*8;
577 endianness=endiannesst::IS_LITTLE_ENDIAN;
580 char_is_unsigned=
false;
589 long_double_width=8*8;
590 endianness=endiannesst::IS_BIG_ENDIAN;
591 char_is_unsigned=
false;
597 defines.push_back(
"__hppa__");
600 case flavourt::VISUAL_STUDIO:
604 case flavourt::APPLE:
605 case flavourt::CODEWARRIOR:
618 long_double_width=8*8;
619 endianness=endiannesst::IS_LITTLE_ENDIAN;
620 char_is_unsigned=
false;
626 defines.push_back(
"__sh__");
627 defines.push_back(
"__SH4__");
630 case flavourt::VISUAL_STUDIO:
634 case flavourt::APPLE:
635 case flavourt::CODEWARRIOR:
647 #if defined(__APPLE__) 649 return c_standardt::C11;
650 #elif defined(__FreeBSD__) 652 return c_standardt::C99;
654 return c_standardt::C99;
660 return cpp_standardt::CPP98;
674 if(
sizeof(
long int)==8)
679 else if(arch==
"alpha")
681 else if(arch==
"arm64" ||
686 else if(arch==
"mips64el" ||
693 else if(arch==
"powerpc" ||
697 else if(arch==
"sparc" ||
700 else if(arch==
"ia64")
702 else if(arch==
"s390x")
704 else if(arch==
"s390")
708 else if(arch==
"v850")
710 else if(arch==
"hppa")
714 else if(arch==
"x86_64")
716 else if(arch==
"i386")
751 if(cmdline.
isset(
"function"))
754 if(cmdline.
isset(
'D'))
757 if(cmdline.
isset(
'I'))
760 if(cmdline.
isset(
"classpath"))
766 else if(cmdline.
isset(
"cp"))
775 const char *CLASSPATH=getenv(
"CLASSPATH");
776 if(CLASSPATH!=
nullptr)
782 if(cmdline.
isset(
"main-class"))
785 if(cmdline.
isset(
"include"))
788 if(cmdline.
isset(
"floatbv"))
791 if(cmdline.
isset(
"fixedbv"))
803 if(cmdline.
isset(
"i386-linux"))
808 else if(cmdline.
isset(
"i386-win32") ||
809 cmdline.
isset(
"win32"))
814 else if(cmdline.
isset(
"winx64"))
819 else if(cmdline.
isset(
"i386-macos"))
824 else if(cmdline.
isset(
"ppc-macos"))
830 if(cmdline.
isset(
"arch"))
835 if(cmdline.
isset(
"os"))
847 if(cmdline.
isset(
"gcc"))
888 else if(os==
"linux" || os==
"solaris")
895 else if(os==
"freebsd")
926 if(arch==
"x64_64" && cmdline.
isset(
"gcc"))
934 if(arch==this_arch && os==this_os)
955 if(cmdline.
isset(
"16"))
958 if(cmdline.
isset(
"32"))
961 if(cmdline.
isset(
"64"))
964 if(cmdline.
isset(
"LP64"))
967 if(cmdline.
isset(
"ILP64"))
970 if(cmdline.
isset(
"LLP64"))
973 if(cmdline.
isset(
"ILP32"))
976 if(cmdline.
isset(
"LP32"))
979 if(cmdline.
isset(
"string-abstraction"))
984 if(cmdline.
isset(
"no-library"))
987 if(cmdline.
isset(
"little-endian"))
990 if(cmdline.
isset(
"big-endian"))
993 if(cmdline.
isset(
"little-endian") &&
994 cmdline.
isset(
"big-endian"))
997 if(cmdline.
isset(
"unsigned-char"))
1000 if(cmdline.
isset(
"round-to-even") ||
1001 cmdline.
isset(
"round-to-nearest"))
1004 if(cmdline.
isset(
"round-to-plus-inf"))
1007 if(cmdline.
isset(
"round-to-minus-inf"))
1010 if(cmdline.
isset(
"round-to-zero"))
1020 case ost::OS_LINUX:
return "linux";
1021 case ost::OS_MACOS:
return "macos";
1022 case ost::OS_WIN:
return "win";
1023 default:
return "none";
1030 return ost::OS_LINUX;
1031 else if(os==
"macos")
1032 return ost::OS_MACOS;
1041 const std::string &what)
1046 if(ns.
lookup(
id, symbol))
1051 if(tmp.
id()!=ID_address_of ||
1053 tmp.
op0().
id()!=ID_index ||
1055 tmp.
op0().
op0().
id()!=ID_string_constant)
1058 "symbol table configuration entry `"+
id2string(
id)+
1059 "' is not a string constant";
1067 const std::string &what)
1072 if(ns.
lookup(
id, symbol))
1078 if(tmp.
id()!=ID_constant)
1080 "symbol table configuration entry `"+
id2string(
id)+
"' is not a constant";
1086 "failed to convert symbol table configuration entry `"+
id2string(
id)+
"'";
1161 #ifdef __ARM_PCS_VFP 1167 #if _MIPS_SIM==_ABIO32 1169 #elif _MIPS_SIM==_ABIN32 1170 this_arch=
"mipsn32el";
1172 this_arch=
"mips64el";
1175 #if _MIPS_SIM==_ABIO32 1177 #elif _MIPS_SIM==_ABIN32 1178 this_arch=
"mipsn32";
1183 #if defined(__ppc64__) || defined(__PPC64__) || \ 1184 defined(__powerpc64__) || defined(__POWERPC64__) 1185 #ifdef __LITTLE_ENDIAN__ 1186 this_arch=
"ppc64le";
1191 this_arch=
"powerpc";
1195 this_arch=
"sparc64";
1223 this_arch=
"unknown";
1231 std::string current;
1232 for(std::size_t
pos=0;
pos<cp.size();
pos++)
1237 const char cp_separator=
';';
1239 const char cp_separator=
':';
1242 if(cp[
pos]==cp_separator)
1244 if(!current.empty())
1254 if(!current.empty())
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
virtual bool lookup(const irep_idt &name, const symbolt *&symbol) const
const std::string & id2string(const irep_idt &d)
void set_arch_spec_power(const irep_idt &subarch)
Globally accessible architectural configuration.
void set_classpath(const std::string &cp)
static std::string os_to_string(ost)
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...
void set_arch_spec_mips(const irep_idt &subarch)
preprocessort preprocessor
bool set(const cmdlinet &cmdline)
const irep_idt & id() const
std::list< std::string > include_files
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)
unsigned long_long_int_width
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
unsigned memory_operand_size
struct configt::javat java
void set_arch_spec_s390()
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()
static irep_idt this_operating_system()
ieee_floatt::rounding_modet rounding_mode
Base class for all expressions.
void set_arch_spec_hppa()
void set_arch_spec_i386()
unsigned long_double_width
void set_LLP64()
int=32, long=32, pointer=64
static ost string_to_os(const std::string &)
const constant_exprt & to_constant_expr(const exprt &expr)
Cast a generic exprt to a constant_exprt.
static cpp_standardt default_cpp_standard()
static irep_idt this_architecture()
void set_arch_spec_s390x()
bool simplify(exprt &expr, const namespacet &ns)
void set_ILP64()
int=64, long=64, pointer=64
std::list< std::string > include_paths