| #include "symbol.h" |
| #include "target.h" |
| #include "machine.h" |
| #include "expression.h" |
| |
| |
| static void predefine_ppc(const struct target *self) |
| { |
| predefine("__powerpc__", 1, "1"); |
| predefine("__powerpc", 1, "1"); |
| predefine("__ppc__", 1, "1"); |
| predefine("__PPC__", 1, "1"); |
| predefine("__PPC", 1, "1"); |
| predefine("_ARCH_PPC", 1, "1"); |
| if (arch_big_endian) |
| predefine("_BIG_ENDIAN", 1, "1"); |
| if (ldouble_ctype.bit_size == 128) { |
| predefine("__LONGDOUBLE128", 1, "1"); |
| predefine("__LONG_DOUBLE_128__", 1, "1"); |
| } |
| } |
| |
| static const char *asm_constraint_ppc(struct asm_operand *op, int c, const char *str) |
| { |
| switch (c) { |
| case 'Z': |
| op->is_memory = true; |
| break; |
| } |
| return str; |
| } |
| |
| |
| static void init_ppc32(const struct target *self) |
| { |
| fast16_ctype = &int_ctype; |
| ufast16_ctype = &uint_ctype; |
| fast32_ctype = &int_ctype; |
| ufast32_ctype = &uint_ctype; |
| } |
| |
| static void predefine_ppc32(const struct target *self) |
| { |
| predefine_ppc(self); |
| } |
| |
| const struct target target_ppc32 = { |
| .mach = MACH_PPC32, |
| .bitness = ARCH_LP32, |
| .big_endian = 1, |
| .unsigned_char = 1, |
| |
| .wchar = &long_ctype, |
| |
| .target_64bit = &target_ppc64, |
| |
| .init = init_ppc32, |
| .predefine = predefine_ppc32, |
| .asm_constraint = asm_constraint_ppc, |
| }; |
| |
| |
| static void predefine_ppc64(const struct target *self) |
| { |
| predefine("__powerpc64__", 1, "1"); |
| predefine("__ppc64__", 1, "1"); |
| predefine("__PPC64__", 1, "1"); |
| predefine("_ARCH_PPC64", 1, "1"); |
| |
| predefine_ppc(self); |
| } |
| |
| const struct target target_ppc64 = { |
| .mach = MACH_PPC64, |
| .bitness = ARCH_LP64, |
| .big_endian = 1, |
| .unsigned_char = 1, |
| .has_int128 = 1, |
| |
| .target_32bit = &target_ppc32, |
| |
| .predefine = predefine_ppc64, |
| .asm_constraint = asm_constraint_ppc, |
| }; |