2
0

softmmu_exec.h 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. /*
  2. * Software MMU support
  3. *
  4. * Generate inline load/store functions for all MMU modes (typically
  5. * at least _user and _kernel) as well as _data versions, for all data
  6. * sizes.
  7. *
  8. * Used by target op helpers.
  9. *
  10. * MMU mode suffixes are defined in target cpu.h.
  11. */
  12. /* XXX: find something cleaner.
  13. * Furthermore, this is false for 64 bits targets
  14. */
  15. #define ldul_user ldl_user
  16. #define ldul_kernel ldl_kernel
  17. #define ldul_hypv ldl_hypv
  18. #define ldul_executive ldl_executive
  19. #define ldul_supervisor ldl_supervisor
  20. #include "softmmu_defs.h"
  21. #define ACCESS_TYPE 0
  22. #define MEMSUFFIX MMU_MODE0_SUFFIX
  23. #define DATA_SIZE 1
  24. #include "softmmu_header.h"
  25. #define DATA_SIZE 2
  26. #include "softmmu_header.h"
  27. #define DATA_SIZE 4
  28. #include "softmmu_header.h"
  29. #define DATA_SIZE 8
  30. #include "softmmu_header.h"
  31. #undef ACCESS_TYPE
  32. #undef MEMSUFFIX
  33. #define ACCESS_TYPE 1
  34. #define MEMSUFFIX MMU_MODE1_SUFFIX
  35. #define DATA_SIZE 1
  36. #include "softmmu_header.h"
  37. #define DATA_SIZE 2
  38. #include "softmmu_header.h"
  39. #define DATA_SIZE 4
  40. #include "softmmu_header.h"
  41. #define DATA_SIZE 8
  42. #include "softmmu_header.h"
  43. #undef ACCESS_TYPE
  44. #undef MEMSUFFIX
  45. #if (NB_MMU_MODES >= 3)
  46. #define ACCESS_TYPE 2
  47. #define MEMSUFFIX MMU_MODE2_SUFFIX
  48. #define DATA_SIZE 1
  49. #include "softmmu_header.h"
  50. #define DATA_SIZE 2
  51. #include "softmmu_header.h"
  52. #define DATA_SIZE 4
  53. #include "softmmu_header.h"
  54. #define DATA_SIZE 8
  55. #include "softmmu_header.h"
  56. #undef ACCESS_TYPE
  57. #undef MEMSUFFIX
  58. #endif /* (NB_MMU_MODES >= 3) */
  59. #if (NB_MMU_MODES >= 4)
  60. #define ACCESS_TYPE 3
  61. #define MEMSUFFIX MMU_MODE3_SUFFIX
  62. #define DATA_SIZE 1
  63. #include "softmmu_header.h"
  64. #define DATA_SIZE 2
  65. #include "softmmu_header.h"
  66. #define DATA_SIZE 4
  67. #include "softmmu_header.h"
  68. #define DATA_SIZE 8
  69. #include "softmmu_header.h"
  70. #undef ACCESS_TYPE
  71. #undef MEMSUFFIX
  72. #endif /* (NB_MMU_MODES >= 4) */
  73. #if (NB_MMU_MODES >= 5)
  74. #define ACCESS_TYPE 4
  75. #define MEMSUFFIX MMU_MODE4_SUFFIX
  76. #define DATA_SIZE 1
  77. #include "softmmu_header.h"
  78. #define DATA_SIZE 2
  79. #include "softmmu_header.h"
  80. #define DATA_SIZE 4
  81. #include "softmmu_header.h"
  82. #define DATA_SIZE 8
  83. #include "softmmu_header.h"
  84. #undef ACCESS_TYPE
  85. #undef MEMSUFFIX
  86. #endif /* (NB_MMU_MODES >= 5) */
  87. #if (NB_MMU_MODES >= 6)
  88. #define ACCESS_TYPE 5
  89. #define MEMSUFFIX MMU_MODE5_SUFFIX
  90. #define DATA_SIZE 1
  91. #include "softmmu_header.h"
  92. #define DATA_SIZE 2
  93. #include "softmmu_header.h"
  94. #define DATA_SIZE 4
  95. #include "softmmu_header.h"
  96. #define DATA_SIZE 8
  97. #include "softmmu_header.h"
  98. #undef ACCESS_TYPE
  99. #undef MEMSUFFIX
  100. #endif /* (NB_MMU_MODES >= 6) */
  101. #if (NB_MMU_MODES > 6)
  102. #error "NB_MMU_MODES > 6 is not supported for now"
  103. #endif /* (NB_MMU_MODES > 6) */
  104. /* these access are slower, they must be as rare as possible */
  105. #define ACCESS_TYPE (NB_MMU_MODES)
  106. #define MEMSUFFIX _data
  107. #define DATA_SIZE 1
  108. #include "softmmu_header.h"
  109. #define DATA_SIZE 2
  110. #include "softmmu_header.h"
  111. #define DATA_SIZE 4
  112. #include "softmmu_header.h"
  113. #define DATA_SIZE 8
  114. #include "softmmu_header.h"
  115. #undef ACCESS_TYPE
  116. #undef MEMSUFFIX
  117. #define ldub(p) ldub_data(p)
  118. #define ldsb(p) ldsb_data(p)
  119. #define lduw(p) lduw_data(p)
  120. #define ldsw(p) ldsw_data(p)
  121. #define ldl(p) ldl_data(p)
  122. #define ldq(p) ldq_data(p)
  123. #define stb(p, v) stb_data(p, v)
  124. #define stw(p, v) stw_data(p, v)
  125. #define stl(p, v) stl_data(p, v)
  126. #define stq(p, v) stq_data(p, v)