target-sparc.c 1.6 KB

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