sync with latest
[sdk/emulator/qemu.git] / softmmu_defs.h
1 /*
2  *  Software MMU support
3  *
4  * Declare helpers used by TCG for qemu_ld/st ops.
5  *
6  * Used by softmmu_exec.h, TCG targets and exec-all.h.
7  *
8  */
9 #ifndef SOFTMMU_DEFS_H
10 #define SOFTMMU_DEFS_H
11
12 #ifndef CONFIG_TCG_PASS_AREG0
13 uint8_t __ldb_mmu(target_ulong addr, int mmu_idx);
14 void __stb_mmu(target_ulong addr, uint8_t val, int mmu_idx);
15 uint16_t __ldw_mmu(target_ulong addr, int mmu_idx);
16 void __stw_mmu(target_ulong addr, uint16_t val, int mmu_idx);
17 uint32_t __ldl_mmu(target_ulong addr, int mmu_idx);
18 void __stl_mmu(target_ulong addr, uint32_t val, int mmu_idx);
19 uint64_t __ldq_mmu(target_ulong addr, int mmu_idx);
20 void __stq_mmu(target_ulong addr, uint64_t val, int mmu_idx);
21
22 #if defined(CONFIG_QEMU_LDST_OPTIMIZATION) && defined(CONFIG_SOFTMMU)
23 /* Extended versions of MMU helpers for qemu_ld/st optimization.
24    They get return address arguments because the caller PCs are not where helpers return to. */
25 uint8_t __ext_ldb_mmu(target_ulong addr, int mmu_idx, uintptr_t ra);
26 void __ext_stb_mmu(target_ulong addr, uint8_t val, int mmu_idx, uintptr_t ra);
27 uint16_t __ext_ldw_mmu(target_ulong addr, int mmu_idx, uintptr_t ra);
28 void __ext_stw_mmu(target_ulong addr, uint16_t val, int mmu_idx, uintptr_t ra);
29 uint32_t __ext_ldl_mmu(target_ulong addr, int mmu_idx, uintptr_t ra);
30 void __ext_stl_mmu(target_ulong addr, uint32_t val, int mmu_idx, uintptr_t ra);
31 uint64_t __ext_ldq_mmu(target_ulong addr, int mmu_idx, uintptr_t ra);
32 void __ext_stq_mmu(target_ulong addr, uint64_t val, int mmu_idx, uintptr_t ra);
33 #endif  /* CONFIG_QEMU_LDST_OPTIMIZATION && CONFIG_SOFTMMU */
34
35 uint8_t __ldb_cmmu(target_ulong addr, int mmu_idx);
36 void __stb_cmmu(target_ulong addr, uint8_t val, int mmu_idx);
37 uint16_t __ldw_cmmu(target_ulong addr, int mmu_idx);
38 void __stw_cmmu(target_ulong addr, uint16_t val, int mmu_idx);
39 uint32_t __ldl_cmmu(target_ulong addr, int mmu_idx);
40 void __stl_cmmu(target_ulong addr, uint32_t val, int mmu_idx);
41 uint64_t __ldq_cmmu(target_ulong addr, int mmu_idx);
42 void __stq_cmmu(target_ulong addr, uint64_t val, int mmu_idx);
43 #else
44 uint8_t helper_ldb_mmu(CPUArchState *env, target_ulong addr, int mmu_idx);
45 void helper_stb_mmu(CPUArchState *env, target_ulong addr, uint8_t val,
46                     int mmu_idx);
47 uint16_t helper_ldw_mmu(CPUArchState *env, target_ulong addr, int mmu_idx);
48 void helper_stw_mmu(CPUArchState *env, target_ulong addr, uint16_t val,
49                     int mmu_idx);
50 uint32_t helper_ldl_mmu(CPUArchState *env, target_ulong addr, int mmu_idx);
51 void helper_stl_mmu(CPUArchState *env, target_ulong addr, uint32_t val,
52                     int mmu_idx);
53 uint64_t helper_ldq_mmu(CPUArchState *env, target_ulong addr, int mmu_idx);
54 void helper_stq_mmu(CPUArchState *env, target_ulong addr, uint64_t val,
55                     int mmu_idx);
56
57 uint8_t helper_ldb_cmmu(CPUArchState *env, target_ulong addr, int mmu_idx);
58 void helper_stb_cmmu(CPUArchState *env, target_ulong addr, uint8_t val,
59 int mmu_idx);
60 uint16_t helper_ldw_cmmu(CPUArchState *env, target_ulong addr, int mmu_idx);
61 void helper_stw_cmmu(CPUArchState *env, target_ulong addr, uint16_t val,
62                      int mmu_idx);
63 uint32_t helper_ldl_cmmu(CPUArchState *env, target_ulong addr, int mmu_idx);
64 void helper_stl_cmmu(CPUArchState *env, target_ulong addr, uint32_t val,
65                      int mmu_idx);
66 uint64_t helper_ldq_cmmu(CPUArchState *env, target_ulong addr, int mmu_idx);
67 void helper_stq_cmmu(CPUArchState *env, target_ulong addr, uint64_t val,
68                      int mmu_idx);
69 #endif
70
71 #endif