123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- /*
- * Software MMU support
- *
- * Generate inline load/store functions for all MMU modes (typically
- * at least _user and _kernel) as well as _data versions, for all data
- * sizes.
- *
- * Used by target op helpers.
- *
- * MMU mode suffixes are defined in target cpu.h.
- */
- /* XXX: find something cleaner.
- * Furthermore, this is false for 64 bits targets
- */
- #define ldul_user ldl_user
- #define ldul_kernel ldl_kernel
- #define ldul_hypv ldl_hypv
- #define ldul_executive ldl_executive
- #define ldul_supervisor ldl_supervisor
- #include "softmmu_defs.h"
- #define ACCESS_TYPE 0
- #define MEMSUFFIX MMU_MODE0_SUFFIX
- #define DATA_SIZE 1
- #include "softmmu_header.h"
- #define DATA_SIZE 2
- #include "softmmu_header.h"
- #define DATA_SIZE 4
- #include "softmmu_header.h"
- #define DATA_SIZE 8
- #include "softmmu_header.h"
- #undef ACCESS_TYPE
- #undef MEMSUFFIX
- #define ACCESS_TYPE 1
- #define MEMSUFFIX MMU_MODE1_SUFFIX
- #define DATA_SIZE 1
- #include "softmmu_header.h"
- #define DATA_SIZE 2
- #include "softmmu_header.h"
- #define DATA_SIZE 4
- #include "softmmu_header.h"
- #define DATA_SIZE 8
- #include "softmmu_header.h"
- #undef ACCESS_TYPE
- #undef MEMSUFFIX
- #if (NB_MMU_MODES >= 3)
- #define ACCESS_TYPE 2
- #define MEMSUFFIX MMU_MODE2_SUFFIX
- #define DATA_SIZE 1
- #include "softmmu_header.h"
- #define DATA_SIZE 2
- #include "softmmu_header.h"
- #define DATA_SIZE 4
- #include "softmmu_header.h"
- #define DATA_SIZE 8
- #include "softmmu_header.h"
- #undef ACCESS_TYPE
- #undef MEMSUFFIX
- #endif /* (NB_MMU_MODES >= 3) */
- #if (NB_MMU_MODES >= 4)
- #define ACCESS_TYPE 3
- #define MEMSUFFIX MMU_MODE3_SUFFIX
- #define DATA_SIZE 1
- #include "softmmu_header.h"
- #define DATA_SIZE 2
- #include "softmmu_header.h"
- #define DATA_SIZE 4
- #include "softmmu_header.h"
- #define DATA_SIZE 8
- #include "softmmu_header.h"
- #undef ACCESS_TYPE
- #undef MEMSUFFIX
- #endif /* (NB_MMU_MODES >= 4) */
- #if (NB_MMU_MODES >= 5)
- #define ACCESS_TYPE 4
- #define MEMSUFFIX MMU_MODE4_SUFFIX
- #define DATA_SIZE 1
- #include "softmmu_header.h"
- #define DATA_SIZE 2
- #include "softmmu_header.h"
- #define DATA_SIZE 4
- #include "softmmu_header.h"
- #define DATA_SIZE 8
- #include "softmmu_header.h"
- #undef ACCESS_TYPE
- #undef MEMSUFFIX
- #endif /* (NB_MMU_MODES >= 5) */
- #if (NB_MMU_MODES >= 6)
- #define ACCESS_TYPE 5
- #define MEMSUFFIX MMU_MODE5_SUFFIX
- #define DATA_SIZE 1
- #include "softmmu_header.h"
- #define DATA_SIZE 2
- #include "softmmu_header.h"
- #define DATA_SIZE 4
- #include "softmmu_header.h"
- #define DATA_SIZE 8
- #include "softmmu_header.h"
- #undef ACCESS_TYPE
- #undef MEMSUFFIX
- #endif /* (NB_MMU_MODES >= 6) */
- #if (NB_MMU_MODES > 6)
- #error "NB_MMU_MODES > 6 is not supported for now"
- #endif /* (NB_MMU_MODES > 6) */
- /* these access are slower, they must be as rare as possible */
- #define ACCESS_TYPE (NB_MMU_MODES)
- #define MEMSUFFIX _data
- #define DATA_SIZE 1
- #include "softmmu_header.h"
- #define DATA_SIZE 2
- #include "softmmu_header.h"
- #define DATA_SIZE 4
- #include "softmmu_header.h"
- #define DATA_SIZE 8
- #include "softmmu_header.h"
- #undef ACCESS_TYPE
- #undef MEMSUFFIX
- #define ldub(p) ldub_data(p)
- #define ldsb(p) ldsb_data(p)
- #define lduw(p) lduw_data(p)
- #define ldsw(p) ldsw_data(p)
- #define ldl(p) ldl_data(p)
- #define ldq(p) ldq_data(p)
- #define stb(p, v) stb_data(p, v)
- #define stw(p, v) stw_data(p, v)
- #define stl(p, v) stl_data(p, v)
- #define stq(p, v) stq_data(p, v)
|