1#include "symbol.h" 2#include "target.h" 3#include "machine.h" 4 5 6static int sparc_version; 7 8static void predefine_sparc(const struct target *self) 9{ 10 predefine("__sparc__", 1, "1"); 11 predefine("__sparc", 1, "1"); 12 predefine_nostd("sparc"); 13 14 predefine_weak("__sparc_v%d__", sparc_version); 15 predefine_weak("__sparcv%d__", sparc_version); 16 predefine_weak("__sparcv%d", sparc_version); 17} 18 19 20static void init_sparc32(const struct target *target) 21{ 22 fast16_ctype = &int_ctype; 23 ufast16_ctype = &uint_ctype; 24 fast32_ctype = &int_ctype; 25 ufast32_ctype = &uint_ctype; 26 27 if (!sparc_version) 28 sparc_version = 8; 29 30 if (arch_os == OS_SUNOS) { 31 wint_ctype = &long_ctype; 32 wchar_ctype = &long_ctype; 33 34 bits_in_longdouble = 128; 35 max_fp_alignment = 16; 36 37 funsigned_char = 0; 38 } 39} 40 41static void predefine_sparc32(const struct target *self) 42{ 43 predefine_sparc(self); 44} 45 46const struct target target_sparc32 = { 47 .mach = MACH_SPARC32, 48 .bitness = ARCH_LP32, 49 .big_endian = 1, 50 .unsigned_char = 0, 51 52 .bits_in_longdouble = 64, 53 .max_fp_alignment = 8, 54 55 .init = init_sparc32, 56 .target_64bit = &target_sparc64, 57 58 .predefine = predefine_sparc32, 59}; 60 61 62static void init_sparc64(const struct target *target) 63{ 64 if (!sparc_version) 65 sparc_version = 9; 66} 67 68static void predefine_sparc64(const struct target *self) 69{ 70 predefine("__sparc64__", 1, "1"); 71 predefine("__arch64__", 1, "1"); 72 73 predefine_sparc(self); 74} 75 76const struct target target_sparc64 = { 77 .mach = MACH_SPARC64, 78 .bitness = ARCH_LP64, 79 .big_endian = 1, 80 .unsigned_char = 0, 81 .has_int128 = 1, 82 83 .target_32bit = &target_sparc32, 84 85 .init = init_sparc64, 86 .predefine = predefine_sparc64, 87}; 88