mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2025-05-04 22:02:16 +00:00
cpu: Replace ENV_GET_CPU with env_cpu
Now that we have both ArchCPU and CPUArchState, we can define this generically instead of via macro in each target's cpu.h. Backports commit 29a0af618ddd21f55df5753c3e16b0625f534b3c from qemu
This commit is contained in:
parent
ae94fb5992
commit
fbf91a6535
|
@ -136,7 +136,7 @@ static inline void tlb_flush_vtlb_page_locked(CPUArchState *env, int mmu_idx,
|
||||||
target_ulong page)
|
target_ulong page)
|
||||||
{
|
{
|
||||||
int k;
|
int k;
|
||||||
//assert_cpu_is_self(ENV_GET_CPU(env));
|
//assert_cpu_is_self(env_cpu(env));
|
||||||
for (k = 0; k < CPU_VTLB_SIZE; k++) {
|
for (k = 0; k < CPU_VTLB_SIZE; k++) {
|
||||||
tlb_flush_entry_locked(&env->tlb_v_table[mmu_idx][k], page);
|
tlb_flush_entry_locked(&env->tlb_v_table[mmu_idx][k], page);
|
||||||
}
|
}
|
||||||
|
@ -535,7 +535,7 @@ tb_page_addr_t get_page_addr_code(CPUArchState *env, target_ulong addr)
|
||||||
MemoryRegion *mr;
|
MemoryRegion *mr;
|
||||||
MemoryRegionSection *section;
|
MemoryRegionSection *section;
|
||||||
ram_addr_t ram_addr;
|
ram_addr_t ram_addr;
|
||||||
CPUState *cpu = ENV_GET_CPU(env);
|
CPUState *cpu = env_cpu(env);
|
||||||
CPUIOTLBEntry *iotlbentry;
|
CPUIOTLBEntry *iotlbentry;
|
||||||
hwaddr physaddr, mr_offset;
|
hwaddr physaddr, mr_offset;
|
||||||
|
|
||||||
|
@ -617,7 +617,7 @@ static uint64_t io_readx(CPUArchState *env, CPUIOTLBEntry *iotlbentry,
|
||||||
int mmu_idx, target_ulong addr, uintptr_t retaddr,
|
int mmu_idx, target_ulong addr, uintptr_t retaddr,
|
||||||
MMUAccessType access_type, int size)
|
MMUAccessType access_type, int size)
|
||||||
{
|
{
|
||||||
CPUState *cpu = ENV_GET_CPU(env);
|
CPUState *cpu = env_cpu(env);
|
||||||
hwaddr mr_offset;
|
hwaddr mr_offset;
|
||||||
MemoryRegionSection *section;
|
MemoryRegionSection *section;
|
||||||
MemoryRegion *mr;
|
MemoryRegion *mr;
|
||||||
|
@ -652,7 +652,7 @@ static void io_writex(CPUArchState *env, CPUIOTLBEntry *iotlbentry,
|
||||||
int mmu_idx, uint64_t val, target_ulong addr,
|
int mmu_idx, uint64_t val, target_ulong addr,
|
||||||
uintptr_t retaddr, int size)
|
uintptr_t retaddr, int size)
|
||||||
{
|
{
|
||||||
CPUState *cpu = ENV_GET_CPU(env);
|
CPUState *cpu = env_cpu(env);
|
||||||
hwaddr mr_offset;
|
hwaddr mr_offset;
|
||||||
MemoryRegionSection *section;
|
MemoryRegionSection *section;
|
||||||
MemoryRegion *mr;
|
MemoryRegion *mr;
|
||||||
|
@ -737,7 +737,7 @@ void probe_write(CPUArchState *env, target_ulong addr, int size, int mmu_idx,
|
||||||
if (!tlb_hit(tlb_addr_write(entry), addr)) {
|
if (!tlb_hit(tlb_addr_write(entry), addr)) {
|
||||||
/* TLB entry is for a different page */
|
/* TLB entry is for a different page */
|
||||||
if (!VICTIM_TLB_HIT(addr_write, addr)) {
|
if (!VICTIM_TLB_HIT(addr_write, addr)) {
|
||||||
tlb_fill(ENV_GET_CPU(env), addr, size, MMU_DATA_STORE,
|
tlb_fill(env_cpu(env), addr, size, MMU_DATA_STORE,
|
||||||
mmu_idx, retaddr);
|
mmu_idx, retaddr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -771,7 +771,7 @@ void *tlb_vaddr_to_host(CPUArchState *env, abi_ptr addr,
|
||||||
uintptr_t index = tlb_index(env, mmu_idx, addr);
|
uintptr_t index = tlb_index(env, mmu_idx, addr);
|
||||||
|
|
||||||
if (!victim_tlb_hit(env, mmu_idx, index, elt_ofs, page)) {
|
if (!victim_tlb_hit(env, mmu_idx, index, elt_ofs, page)) {
|
||||||
CPUState *cs = ENV_GET_CPU(env);
|
CPUState *cs = env_cpu(env);
|
||||||
CPUClass *cc = CPU_GET_CLASS(cs->uc, cs);
|
CPUClass *cc = CPU_GET_CLASS(cs->uc, cs);
|
||||||
|
|
||||||
if (!cc->tlb_fill(cs, addr, 0, access_type, mmu_idx, true, 0)) {
|
if (!cc->tlb_fill(cs, addr, 0, access_type, mmu_idx, true, 0)) {
|
||||||
|
@ -812,7 +812,7 @@ static void *atomic_mmu_lookup(CPUArchState *env, target_ulong addr,
|
||||||
/* Enforce guest required alignment. */
|
/* Enforce guest required alignment. */
|
||||||
if (unlikely(a_bits > 0 && (addr & ((1 << a_bits) - 1)))) {
|
if (unlikely(a_bits > 0 && (addr & ((1 << a_bits) - 1)))) {
|
||||||
/* ??? Maybe indicate atomic op to cpu_unaligned_access */
|
/* ??? Maybe indicate atomic op to cpu_unaligned_access */
|
||||||
cpu_unaligned_access(ENV_GET_CPU(env), addr, MMU_DATA_STORE,
|
cpu_unaligned_access(env_cpu(env), addr, MMU_DATA_STORE,
|
||||||
mmu_idx, retaddr);
|
mmu_idx, retaddr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -828,7 +828,7 @@ static void *atomic_mmu_lookup(CPUArchState *env, target_ulong addr,
|
||||||
/* Check TLB entry and enforce page permissions. */
|
/* Check TLB entry and enforce page permissions. */
|
||||||
if (!tlb_hit(tlb_addr, addr)) {
|
if (!tlb_hit(tlb_addr, addr)) {
|
||||||
if (!VICTIM_TLB_HIT(addr_write, addr)) {
|
if (!VICTIM_TLB_HIT(addr_write, addr)) {
|
||||||
tlb_fill(ENV_GET_CPU(env), addr, 1 << s_bits, MMU_DATA_STORE,
|
tlb_fill(env_cpu(env), addr, 1 << s_bits, MMU_DATA_STORE,
|
||||||
mmu_idx, retaddr);
|
mmu_idx, retaddr);
|
||||||
index = tlb_index(env, mmu_idx, addr);
|
index = tlb_index(env, mmu_idx, addr);
|
||||||
tlbe = tlb_entry(env, mmu_idx, addr);
|
tlbe = tlb_entry(env, mmu_idx, addr);
|
||||||
|
@ -838,7 +838,7 @@ static void *atomic_mmu_lookup(CPUArchState *env, target_ulong addr,
|
||||||
|
|
||||||
/* Check notdirty */
|
/* Check notdirty */
|
||||||
if (unlikely(tlb_addr & TLB_NOTDIRTY)) {
|
if (unlikely(tlb_addr & TLB_NOTDIRTY)) {
|
||||||
tlb_set_dirty(ENV_GET_CPU(env), addr);
|
tlb_set_dirty(env_cpu(env), addr);
|
||||||
tlb_addr = tlb_addr & ~TLB_NOTDIRTY;
|
tlb_addr = tlb_addr & ~TLB_NOTDIRTY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -851,7 +851,7 @@ static void *atomic_mmu_lookup(CPUArchState *env, target_ulong addr,
|
||||||
|
|
||||||
/* Let the guest notice RMW on a write-only page. */
|
/* Let the guest notice RMW on a write-only page. */
|
||||||
if (unlikely(tlbe->addr_read != (tlb_addr & ~TLB_NOTDIRTY))) {
|
if (unlikely(tlbe->addr_read != (tlb_addr & ~TLB_NOTDIRTY))) {
|
||||||
tlb_fill(ENV_GET_CPU(env), addr, 1 << s_bits, MMU_DATA_LOAD,
|
tlb_fill(env_cpu(env), addr, 1 << s_bits, MMU_DATA_LOAD,
|
||||||
mmu_idx, retaddr);
|
mmu_idx, retaddr);
|
||||||
/* Since we don't support reads and writes to different addresses,
|
/* Since we don't support reads and writes to different addresses,
|
||||||
and we do have the proper page loaded for write, this shouldn't
|
and we do have the proper page loaded for write, this shouldn't
|
||||||
|
@ -862,7 +862,7 @@ static void *atomic_mmu_lookup(CPUArchState *env, target_ulong addr,
|
||||||
return (void *)((uintptr_t)addr + tlbe->addend);
|
return (void *)((uintptr_t)addr + tlbe->addend);
|
||||||
|
|
||||||
stop_the_world:
|
stop_the_world:
|
||||||
cpu_loop_exit_atomic(ENV_GET_CPU(env), retaddr);
|
cpu_loop_exit_atomic(env_cpu(env), retaddr);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef TARGET_WORDS_BIGENDIAN
|
#ifdef TARGET_WORDS_BIGENDIAN
|
||||||
|
@ -1033,7 +1033,7 @@ load_helper(CPUArchState *env, target_ulong addr, TCGMemOpIdx oi,
|
||||||
|
|
||||||
/* Handle CPU specific unaligned behaviour */
|
/* Handle CPU specific unaligned behaviour */
|
||||||
if (addr & ((1 << a_bits) - 1)) {
|
if (addr & ((1 << a_bits) - 1)) {
|
||||||
cpu_unaligned_access(ENV_GET_CPU(env), addr, access_type,
|
cpu_unaligned_access(env_cpu(env), addr, access_type,
|
||||||
mmu_idx, retaddr);
|
mmu_idx, retaddr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1041,7 +1041,7 @@ load_helper(CPUArchState *env, target_ulong addr, TCGMemOpIdx oi,
|
||||||
if (!tlb_hit(tlb_addr, addr)) {
|
if (!tlb_hit(tlb_addr, addr)) {
|
||||||
if (!victim_tlb_hit(env, mmu_idx, index, tlb_off,
|
if (!victim_tlb_hit(env, mmu_idx, index, tlb_off,
|
||||||
addr & TARGET_PAGE_MASK)) {
|
addr & TARGET_PAGE_MASK)) {
|
||||||
tlb_fill(ENV_GET_CPU(env), addr, size,
|
tlb_fill(env_cpu(env), addr, size,
|
||||||
access_type, mmu_idx, retaddr);
|
access_type, mmu_idx, retaddr);
|
||||||
index = tlb_index(env, mmu_idx, addr);
|
index = tlb_index(env, mmu_idx, addr);
|
||||||
entry = tlb_entry(env, mmu_idx, addr);
|
entry = tlb_entry(env, mmu_idx, addr);
|
||||||
|
@ -1062,7 +1062,7 @@ load_helper(CPUArchState *env, target_ulong addr, TCGMemOpIdx oi,
|
||||||
* repeat the MMU check here. This tlb_fill() call might
|
* repeat the MMU check here. This tlb_fill() call might
|
||||||
* longjump out if this access should cause a guest exception.
|
* longjump out if this access should cause a guest exception.
|
||||||
*/
|
*/
|
||||||
tlb_fill(ENV_GET_CPU(env), addr, size,
|
tlb_fill(env_cpu(env), addr, size,
|
||||||
access_type, mmu_idx, retaddr);
|
access_type, mmu_idx, retaddr);
|
||||||
index = tlb_index(env, mmu_idx, addr);
|
index = tlb_index(env, mmu_idx, addr);
|
||||||
entry = tlb_entry(env, mmu_idx, addr);
|
entry = tlb_entry(env, mmu_idx, addr);
|
||||||
|
@ -1355,7 +1355,7 @@ store_helper(CPUArchState *env, target_ulong addr, uint64_t val,
|
||||||
|
|
||||||
/* Handle CPU specific unaligned behaviour */
|
/* Handle CPU specific unaligned behaviour */
|
||||||
if (addr & ((1 << a_bits) - 1)) {
|
if (addr & ((1 << a_bits) - 1)) {
|
||||||
cpu_unaligned_access(ENV_GET_CPU(env), addr, MMU_DATA_STORE,
|
cpu_unaligned_access(env_cpu(env), addr, MMU_DATA_STORE,
|
||||||
mmu_idx, retaddr);
|
mmu_idx, retaddr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1363,7 +1363,7 @@ store_helper(CPUArchState *env, target_ulong addr, uint64_t val,
|
||||||
if (!tlb_hit(tlb_addr, addr)) {
|
if (!tlb_hit(tlb_addr, addr)) {
|
||||||
if (!victim_tlb_hit(env, mmu_idx, index, tlb_off,
|
if (!victim_tlb_hit(env, mmu_idx, index, tlb_off,
|
||||||
addr & TARGET_PAGE_MASK)) {
|
addr & TARGET_PAGE_MASK)) {
|
||||||
tlb_fill(ENV_GET_CPU(env), addr, size, MMU_DATA_STORE,
|
tlb_fill(env_cpu(env), addr, size, MMU_DATA_STORE,
|
||||||
mmu_idx, retaddr);
|
mmu_idx, retaddr);
|
||||||
index = tlb_index(env, mmu_idx, addr);
|
index = tlb_index(env, mmu_idx, addr);
|
||||||
entry = tlb_entry(env, mmu_idx, addr);
|
entry = tlb_entry(env, mmu_idx, addr);
|
||||||
|
@ -1384,7 +1384,7 @@ store_helper(CPUArchState *env, target_ulong addr, uint64_t val,
|
||||||
* repeat the MMU check here. This tlb_fill() call might
|
* repeat the MMU check here. This tlb_fill() call might
|
||||||
* longjump out if this access should cause a guest exception.
|
* longjump out if this access should cause a guest exception.
|
||||||
*/
|
*/
|
||||||
tlb_fill(ENV_GET_CPU(env), addr, size, MMU_DATA_STORE,
|
tlb_fill(env_cpu(env), addr, size, MMU_DATA_STORE,
|
||||||
mmu_idx, retaddr);
|
mmu_idx, retaddr);
|
||||||
index = tlb_index(env, mmu_idx, addr);
|
index = tlb_index(env, mmu_idx, addr);
|
||||||
entry = tlb_entry(env, mmu_idx, addr);
|
entry = tlb_entry(env, mmu_idx, addr);
|
||||||
|
@ -1424,7 +1424,7 @@ store_helper(CPUArchState *env, target_ulong addr, uint64_t val,
|
||||||
if (!tlb_hit_page(tlb_addr2, page2)
|
if (!tlb_hit_page(tlb_addr2, page2)
|
||||||
&& !victim_tlb_hit(env, mmu_idx, index2, tlb_off,
|
&& !victim_tlb_hit(env, mmu_idx, index2, tlb_off,
|
||||||
page2 & TARGET_PAGE_MASK)) {
|
page2 & TARGET_PAGE_MASK)) {
|
||||||
tlb_fill(ENV_GET_CPU(env), page2, size, MMU_DATA_STORE,
|
tlb_fill(env_cpu(env), page2, size, MMU_DATA_STORE,
|
||||||
mmu_idx, retaddr);
|
mmu_idx, retaddr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -146,7 +146,7 @@ uint64_t HELPER(ctpop_i64)(uint64_t arg)
|
||||||
void *HELPER(lookup_tb_ptr)(CPUArchState *env)
|
void *HELPER(lookup_tb_ptr)(CPUArchState *env)
|
||||||
{
|
{
|
||||||
TCGContext *tcg_ctx = env->uc->tcg_ctx;
|
TCGContext *tcg_ctx = env->uc->tcg_ctx;
|
||||||
CPUState *cpu = ENV_GET_CPU(env);
|
CPUState *cpu = env_cpu(env);
|
||||||
TranslationBlock *tb;
|
TranslationBlock *tb;
|
||||||
target_ulong cs_base, pc;
|
target_ulong cs_base, pc;
|
||||||
uint32_t flags;
|
uint32_t flags;
|
||||||
|
@ -167,5 +167,5 @@ void *HELPER(lookup_tb_ptr)(CPUArchState *env)
|
||||||
|
|
||||||
void HELPER(exit_atomic)(CPUArchState *env)
|
void HELPER(exit_atomic)(CPUArchState *env)
|
||||||
{
|
{
|
||||||
cpu_loop_exit_atomic(ENV_GET_CPU(env), GETPC());
|
cpu_loop_exit_atomic(env_cpu(env), GETPC());
|
||||||
}
|
}
|
||||||
|
|
|
@ -1371,7 +1371,7 @@ TranslationBlock *tb_gen_code(CPUState *cpu,
|
||||||
|
|
||||||
tcg_func_start(tcg_ctx);
|
tcg_func_start(tcg_ctx);
|
||||||
|
|
||||||
tcg_ctx->cpu = ENV_GET_CPU(env);
|
tcg_ctx->cpu = env_cpu(env);
|
||||||
gen_intermediate_code(cpu, tb, max_insns);
|
gen_intermediate_code(cpu, tb, max_insns);
|
||||||
tcg_ctx->cpu = NULL;
|
tcg_ctx->cpu = NULL;
|
||||||
|
|
||||||
|
|
|
@ -375,4 +375,16 @@ int cpu_memory_rw_debug(CPUState *cpu, target_ulong addr,
|
||||||
|
|
||||||
int cpu_exec(struct uc_struct *uc, CPUState *cpu);
|
int cpu_exec(struct uc_struct *uc, CPUState *cpu);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* env_cpu(env)
|
||||||
|
* @env: The architecture environment
|
||||||
|
*
|
||||||
|
* Return the CPUState associated with the environment.
|
||||||
|
*/
|
||||||
|
static inline CPUState *env_cpu(CPUArchState *env)
|
||||||
|
{
|
||||||
|
ArchCPU *arch_cpu = container_of(env, ArchCPU, env);
|
||||||
|
return &arch_cpu->parent_obj;
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* CPU_ALL_H */
|
#endif /* CPU_ALL_H */
|
||||||
|
|
|
@ -892,8 +892,6 @@ static inline ARMCPU *arm_env_get_cpu(CPUARMState *env)
|
||||||
return container_of(env, ARMCPU, env);
|
return container_of(env, ARMCPU, env);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define ENV_GET_CPU(e) CPU(arm_env_get_cpu(e))
|
|
||||||
|
|
||||||
#define ENV_OFFSET offsetof(ARMCPU, env)
|
#define ENV_OFFSET offsetof(ARMCPU, env)
|
||||||
|
|
||||||
#ifndef CONFIG_USER_ONLY
|
#ifndef CONFIG_USER_ONLY
|
||||||
|
|
|
@ -551,7 +551,7 @@ static uint64_t do_paired_cmpxchg64_le(CPUARMState *env, uint64_t addr,
|
||||||
|
|
||||||
if (parallel) {
|
if (parallel) {
|
||||||
#ifndef CONFIG_ATOMIC128
|
#ifndef CONFIG_ATOMIC128
|
||||||
cpu_loop_exit_atomic(ENV_GET_CPU(env), ra);
|
cpu_loop_exit_atomic(env_cpu(env), ra);
|
||||||
#else
|
#else
|
||||||
int mem_idx = cpu_mmu_index(env, false);
|
int mem_idx = cpu_mmu_index(env, false);
|
||||||
TCGMemOpIdx oi = make_memop_idx(MO_LEQ | MO_ALIGN_16, mem_idx);
|
TCGMemOpIdx oi = make_memop_idx(MO_LEQ | MO_ALIGN_16, mem_idx);
|
||||||
|
@ -621,7 +621,7 @@ static uint64_t do_paired_cmpxchg64_be(CPUARMState *env, uint64_t addr,
|
||||||
|
|
||||||
if (parallel) {
|
if (parallel) {
|
||||||
#ifndef CONFIG_ATOMIC128
|
#ifndef CONFIG_ATOMIC128
|
||||||
cpu_loop_exit_atomic(ENV_GET_CPU(env), ra);
|
cpu_loop_exit_atomic(env_cpu(env), ra);
|
||||||
#else
|
#else
|
||||||
int mem_idx = cpu_mmu_index(env, false);
|
int mem_idx = cpu_mmu_index(env, false);
|
||||||
TCGMemOpIdx oi = make_memop_idx(MO_BEQ | MO_ALIGN_16, mem_idx);
|
TCGMemOpIdx oi = make_memop_idx(MO_BEQ | MO_ALIGN_16, mem_idx);
|
||||||
|
|
|
@ -429,7 +429,7 @@ static void contextidr_write(CPUARMState *env, const ARMCPRegInfo *ri,
|
||||||
static void tlbiall_is_write(CPUARMState *env, const ARMCPRegInfo *ri,
|
static void tlbiall_is_write(CPUARMState *env, const ARMCPRegInfo *ri,
|
||||||
uint64_t value)
|
uint64_t value)
|
||||||
{
|
{
|
||||||
//CPUState *cs = ENV_GET_CPU(env);
|
//CPUState *cs = env_cpu(env);
|
||||||
|
|
||||||
//tlb_flush_all_cpus_synced(cs);
|
//tlb_flush_all_cpus_synced(cs);
|
||||||
}
|
}
|
||||||
|
@ -437,7 +437,7 @@ static void tlbiall_is_write(CPUARMState *env, const ARMCPRegInfo *ri,
|
||||||
static void tlbiasid_is_write(CPUARMState *env, const ARMCPRegInfo *ri,
|
static void tlbiasid_is_write(CPUARMState *env, const ARMCPRegInfo *ri,
|
||||||
uint64_t value)
|
uint64_t value)
|
||||||
{
|
{
|
||||||
//CPUState *cs = ENV_GET_CPU(env);
|
//CPUState *cs = env_cpu(env);
|
||||||
|
|
||||||
//tlb_flush_all_cpus_synced(cs);
|
//tlb_flush_all_cpus_synced(cs);
|
||||||
}
|
}
|
||||||
|
@ -445,7 +445,7 @@ static void tlbiasid_is_write(CPUARMState *env, const ARMCPRegInfo *ri,
|
||||||
static void tlbimva_is_write(CPUARMState *env, const ARMCPRegInfo *ri,
|
static void tlbimva_is_write(CPUARMState *env, const ARMCPRegInfo *ri,
|
||||||
uint64_t value)
|
uint64_t value)
|
||||||
{
|
{
|
||||||
//CPUState *cs = ENV_GET_CPU(env);
|
//CPUState *cs = env_cpu(env);
|
||||||
|
|
||||||
//tlb_flush_page_all_cpus_synced(cs, value & TARGET_PAGE_MASK);
|
//tlb_flush_page_all_cpus_synced(cs, value & TARGET_PAGE_MASK);
|
||||||
}
|
}
|
||||||
|
@ -453,7 +453,7 @@ static void tlbimva_is_write(CPUARMState *env, const ARMCPRegInfo *ri,
|
||||||
static void tlbimvaa_is_write(CPUARMState *env, const ARMCPRegInfo *ri,
|
static void tlbimvaa_is_write(CPUARMState *env, const ARMCPRegInfo *ri,
|
||||||
uint64_t value)
|
uint64_t value)
|
||||||
{
|
{
|
||||||
//CPUState *cs = ENV_GET_CPU(env);
|
//CPUState *cs = env_cpu(env);
|
||||||
|
|
||||||
//tlb_flush_page_all_cpus_synced(cs, value & TARGET_PAGE_MASK);
|
//tlb_flush_page_all_cpus_synced(cs, value & TARGET_PAGE_MASK);
|
||||||
}
|
}
|
||||||
|
@ -528,7 +528,7 @@ static void tlbimvaa_write(CPUARMState *env, const ARMCPRegInfo *ri,
|
||||||
static void tlbiall_nsnh_write(CPUARMState *env, const ARMCPRegInfo *ri,
|
static void tlbiall_nsnh_write(CPUARMState *env, const ARMCPRegInfo *ri,
|
||||||
uint64_t value)
|
uint64_t value)
|
||||||
{
|
{
|
||||||
CPUState *cs = ENV_GET_CPU(env);
|
CPUState *cs = env_cpu(env);
|
||||||
|
|
||||||
tlb_flush_by_mmuidx(cs,
|
tlb_flush_by_mmuidx(cs,
|
||||||
ARMMMUIdxBit_S12NSE1 |
|
ARMMMUIdxBit_S12NSE1 |
|
||||||
|
@ -541,7 +541,7 @@ static void tlbiall_nsnh_is_write(CPUARMState *env, const ARMCPRegInfo *ri,
|
||||||
{
|
{
|
||||||
// Unicorn: if'd out. See issue 642
|
// Unicorn: if'd out. See issue 642
|
||||||
#if 0
|
#if 0
|
||||||
CPUState *cs = ENV_GET_CPU(env);
|
CPUState *cs = env_cpu(env);
|
||||||
|
|
||||||
tlb_flush_by_mmuidx_all_cpus_synced(cs,
|
tlb_flush_by_mmuidx_all_cpus_synced(cs,
|
||||||
ARMMMUIdxBit_S12NSE1 |
|
ARMMMUIdxBit_S12NSE1 |
|
||||||
|
@ -559,7 +559,7 @@ static void tlbiipas2_write(CPUARMState *env, const ARMCPRegInfo *ri,
|
||||||
* translation information.
|
* translation information.
|
||||||
* This must NOP if EL2 isn't implemented or SCR_EL3.NS is zero.
|
* This must NOP if EL2 isn't implemented or SCR_EL3.NS is zero.
|
||||||
*/
|
*/
|
||||||
CPUState *cs = ENV_GET_CPU(env);
|
CPUState *cs = env_cpu(env);
|
||||||
uint64_t pageaddr;
|
uint64_t pageaddr;
|
||||||
|
|
||||||
if (!arm_feature(env, ARM_FEATURE_EL2) || !(env->cp15.scr_el3 & SCR_NS)) {
|
if (!arm_feature(env, ARM_FEATURE_EL2) || !(env->cp15.scr_el3 & SCR_NS)) {
|
||||||
|
@ -593,7 +593,7 @@ static void tlbiipas2_is_write(CPUARMState *env, const ARMCPRegInfo *ri,
|
||||||
static void tlbiall_hyp_write(CPUARMState *env, const ARMCPRegInfo *ri,
|
static void tlbiall_hyp_write(CPUARMState *env, const ARMCPRegInfo *ri,
|
||||||
uint64_t value)
|
uint64_t value)
|
||||||
{
|
{
|
||||||
CPUState *cs = ENV_GET_CPU(env);
|
CPUState *cs = env_cpu(env);
|
||||||
|
|
||||||
tlb_flush_by_mmuidx(cs, ARMMMUIdxBit_S1E2);
|
tlb_flush_by_mmuidx(cs, ARMMMUIdxBit_S1E2);
|
||||||
}
|
}
|
||||||
|
@ -603,7 +603,7 @@ static void tlbiall_hyp_is_write(CPUARMState *env, const ARMCPRegInfo *ri,
|
||||||
{
|
{
|
||||||
// Unicorn: if'd out. See issue 642
|
// Unicorn: if'd out. See issue 642
|
||||||
#if 0
|
#if 0
|
||||||
CPUState *cs = ENV_GET_CPU(env);
|
CPUState *cs = env_cpu(env);
|
||||||
|
|
||||||
tlb_flush_by_mmuidx_all_cpus_synced(cs, ARMMMUIdxBit_S1E2);
|
tlb_flush_by_mmuidx_all_cpus_synced(cs, ARMMMUIdxBit_S1E2);
|
||||||
#endif
|
#endif
|
||||||
|
@ -612,7 +612,7 @@ static void tlbiall_hyp_is_write(CPUARMState *env, const ARMCPRegInfo *ri,
|
||||||
static void tlbimva_hyp_write(CPUARMState *env, const ARMCPRegInfo *ri,
|
static void tlbimva_hyp_write(CPUARMState *env, const ARMCPRegInfo *ri,
|
||||||
uint64_t value)
|
uint64_t value)
|
||||||
{
|
{
|
||||||
CPUState *cs = ENV_GET_CPU(env);
|
CPUState *cs = env_cpu(env);
|
||||||
uint64_t pageaddr = value & ~MAKE_64BIT_MASK(0, 12);
|
uint64_t pageaddr = value & ~MAKE_64BIT_MASK(0, 12);
|
||||||
|
|
||||||
tlb_flush_page_by_mmuidx(cs, pageaddr, ARMMMUIdxBit_S1E2);
|
tlb_flush_page_by_mmuidx(cs, pageaddr, ARMMMUIdxBit_S1E2);
|
||||||
|
@ -623,7 +623,7 @@ static void tlbimva_hyp_is_write(CPUARMState *env, const ARMCPRegInfo *ri,
|
||||||
{
|
{
|
||||||
// Unicorn: if'd out. See issue 642.
|
// Unicorn: if'd out. See issue 642.
|
||||||
#if 0
|
#if 0
|
||||||
CPUState *cs = ENV_GET_CPU(env);
|
CPUState *cs = env_cpu(env);
|
||||||
uint64_t pageaddr = value & ~MAKE_64BIT_MASK(0, 12);
|
uint64_t pageaddr = value & ~MAKE_64BIT_MASK(0, 12);
|
||||||
|
|
||||||
tlb_flush_page_by_mmuidx_all_cpus_synced(cs, pageaddr,
|
tlb_flush_page_by_mmuidx_all_cpus_synced(cs, pageaddr,
|
||||||
|
@ -1702,7 +1702,7 @@ static void csselr_write(CPUARMState *env, const ARMCPRegInfo *ri,
|
||||||
|
|
||||||
static uint64_t isr_read(CPUARMState *env, const ARMCPRegInfo *ri)
|
static uint64_t isr_read(CPUARMState *env, const ARMCPRegInfo *ri)
|
||||||
{
|
{
|
||||||
CPUState *cs = ENV_GET_CPU(env);
|
CPUState *cs = env_cpu(env);
|
||||||
uint64_t hcr_el2 = arm_hcr_el2_eff(env);
|
uint64_t hcr_el2 = arm_hcr_el2_eff(env);
|
||||||
uint64_t ret = 0;
|
uint64_t ret = 0;
|
||||||
|
|
||||||
|
@ -3563,7 +3563,7 @@ static void tlbi_aa64_vmalle1is_write(CPUARMState *env, const ARMCPRegInfo *ri,
|
||||||
// UNICORN: TODO: issue #642
|
// UNICORN: TODO: issue #642
|
||||||
#if 0
|
#if 0
|
||||||
bool sec = arm_is_secure_below_el3(env);
|
bool sec = arm_is_secure_below_el3(env);
|
||||||
CPUState *cs = ENV_GET_CPU(env);
|
CPUState *cs = env_cpu(env);
|
||||||
|
|
||||||
if (sec) {
|
if (sec) {
|
||||||
tlb_flush_by_mmuidx_all_cpus_synced(cs,
|
tlb_flush_by_mmuidx_all_cpus_synced(cs,
|
||||||
|
@ -3580,7 +3580,7 @@ static void tlbi_aa64_vmalle1is_write(CPUARMState *env, const ARMCPRegInfo *ri,
|
||||||
static void tlbi_aa64_vmalle1_write(CPUARMState *env, const ARMCPRegInfo *ri,
|
static void tlbi_aa64_vmalle1_write(CPUARMState *env, const ARMCPRegInfo *ri,
|
||||||
uint64_t value)
|
uint64_t value)
|
||||||
{
|
{
|
||||||
CPUState *cs = ENV_GET_CPU(env);
|
CPUState *cs = env_cpu(env);
|
||||||
|
|
||||||
if (tlb_force_broadcast(env)) {
|
if (tlb_force_broadcast(env)) {
|
||||||
tlbi_aa64_vmalle1is_write(env, NULL, value);
|
tlbi_aa64_vmalle1is_write(env, NULL, value);
|
||||||
|
@ -3655,7 +3655,7 @@ static void tlbi_aa64_alle1is_write(CPUARMState *env, const ARMCPRegInfo *ri,
|
||||||
#if 0
|
#if 0
|
||||||
bool sec = arm_is_secure_below_el3(env);
|
bool sec = arm_is_secure_below_el3(env);
|
||||||
bool has_el2 = arm_feature(env, ARM_FEATURE_EL2);
|
bool has_el2 = arm_feature(env, ARM_FEATURE_EL2);
|
||||||
CPUState *cs = ENV_GET_CPU(env);
|
CPUState *cs = env_cpu(env);
|
||||||
|
|
||||||
if (sec) {
|
if (sec) {
|
||||||
tlb_flush_by_mmuidx_all_cpus_synced(cs,
|
tlb_flush_by_mmuidx_all_cpus_synced(cs,
|
||||||
|
@ -3679,7 +3679,7 @@ static void tlbi_aa64_alle2is_write(CPUARMState *env, const ARMCPRegInfo *ri,
|
||||||
{
|
{
|
||||||
// UNICORN: TODO: issue #642
|
// UNICORN: TODO: issue #642
|
||||||
#if 0
|
#if 0
|
||||||
CPUState *cs = ENV_GET_CPU(env);
|
CPUState *cs = env_cpu(env);
|
||||||
|
|
||||||
tlb_flush_by_mmuidx_all_cpus_synced(cs, ARMMMUIdxBit_S1E2);
|
tlb_flush_by_mmuidx_all_cpus_synced(cs, ARMMMUIdxBit_S1E2);
|
||||||
#endif
|
#endif
|
||||||
|
@ -3690,7 +3690,7 @@ static void tlbi_aa64_alle3is_write(CPUARMState *env, const ARMCPRegInfo *ri,
|
||||||
{
|
{
|
||||||
// UNICORN: TODO: issue #642
|
// UNICORN: TODO: issue #642
|
||||||
#if 0
|
#if 0
|
||||||
CPUState *cs = ENV_GET_CPU(env);
|
CPUState *cs = env_cpu(env);
|
||||||
|
|
||||||
tlb_flush_by_mmuidx_all_cpus_synced(cs, ARMMMUIdxBit_S1E3);
|
tlb_flush_by_mmuidx_all_cpus_synced(cs, ARMMMUIdxBit_S1E3);
|
||||||
#endif
|
#endif
|
||||||
|
@ -3730,7 +3730,7 @@ static void tlbi_aa64_vae1is_write(CPUARMState *env, const ARMCPRegInfo *ri,
|
||||||
// UNICORN: TODO: issue #642
|
// UNICORN: TODO: issue #642
|
||||||
#if 0
|
#if 0
|
||||||
bool sec = arm_is_secure_below_el3(env);
|
bool sec = arm_is_secure_below_el3(env);
|
||||||
CPUState *cs = ENV_GET_CPU(env)
|
CPUState *cs = env_cpu(env)
|
||||||
uint64_t pageaddr = sextract64(value << 12, 0, 56);
|
uint64_t pageaddr = sextract64(value << 12, 0, 56);
|
||||||
|
|
||||||
if (sec) {
|
if (sec) {
|
||||||
|
@ -3778,7 +3778,7 @@ static void tlbi_aa64_vae2is_write(CPUARMState *env, const ARMCPRegInfo *ri,
|
||||||
{
|
{
|
||||||
// UNICORN: TODO: issue #642
|
// UNICORN: TODO: issue #642
|
||||||
#if 0
|
#if 0
|
||||||
CPUState *cs = ENV_GET_CPU(env);
|
CPUState *cs = env_cpu(env);
|
||||||
uint64_t pageaddr = sextract64(value << 12, 0, 56);
|
uint64_t pageaddr = sextract64(value << 12, 0, 56);
|
||||||
|
|
||||||
tlb_flush_page_by_mmuidx_all_cpus_synced(cs, pageaddr,
|
tlb_flush_page_by_mmuidx_all_cpus_synced(cs, pageaddr,
|
||||||
|
@ -3791,7 +3791,7 @@ static void tlbi_aa64_vae3is_write(CPUARMState *env, const ARMCPRegInfo *ri,
|
||||||
{
|
{
|
||||||
// UNICORN: TODO: issue #642
|
// UNICORN: TODO: issue #642
|
||||||
#if 0
|
#if 0
|
||||||
CPUState *cs = ENV_GET_CPU(env);
|
CPUState *cs = env_cpu(env);
|
||||||
uint64_t pageaddr = sextract64(value << 12, 0, 56);
|
uint64_t pageaddr = sextract64(value << 12, 0, 56);
|
||||||
|
|
||||||
tlb_flush_page_by_mmuidx_all_cpus_synced(cs, pageaddr,
|
tlb_flush_page_by_mmuidx_all_cpus_synced(cs, pageaddr,
|
||||||
|
@ -3826,7 +3826,7 @@ static void tlbi_aa64_ipas2e1is_write(CPUARMState *env, const ARMCPRegInfo *ri,
|
||||||
{
|
{
|
||||||
// UNICORN: TODO: issue #642
|
// UNICORN: TODO: issue #642
|
||||||
#if 0
|
#if 0
|
||||||
CPUState *cs = ENV_GET_CPU(env);
|
CPUState *cs = env_cpu(env);
|
||||||
uint64_t pageaddr;
|
uint64_t pageaddr;
|
||||||
|
|
||||||
if (!arm_feature(env, ARM_FEATURE_EL2) || !(env->cp15.scr_el3 & SCR_NS)) {
|
if (!arm_feature(env, ARM_FEATURE_EL2) || !(env->cp15.scr_el3 & SCR_NS)) {
|
||||||
|
|
|
@ -1403,8 +1403,6 @@ static inline X86CPU *x86_env_get_cpu(CPUX86State *env)
|
||||||
return container_of(env, X86CPU, env);
|
return container_of(env, X86CPU, env);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define ENV_GET_CPU(e) CPU(x86_env_get_cpu(e))
|
|
||||||
|
|
||||||
#define ENV_OFFSET offsetof(X86CPU, env)
|
#define ENV_OFFSET offsetof(X86CPU, env)
|
||||||
|
|
||||||
#ifndef CONFIG_USER_ONLY
|
#ifndef CONFIG_USER_ONLY
|
||||||
|
|
|
@ -91,7 +91,7 @@ void helper_cmpxchg8b(CPUX86State *env, target_ulong a0)
|
||||||
}
|
}
|
||||||
CC_SRC = eflags;
|
CC_SRC = eflags;
|
||||||
#else
|
#else
|
||||||
cpu_loop_exit_atomic(ENV_GET_CPU(env), GETPC());
|
cpu_loop_exit_atomic(env_cpu(env), GETPC());
|
||||||
#endif /* CONFIG_ATOMIC64 */
|
#endif /* CONFIG_ATOMIC64 */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -160,7 +160,7 @@ void helper_cmpxchg16b(CPUX86State *env, target_ulong a0)
|
||||||
}
|
}
|
||||||
CC_SRC = eflags;
|
CC_SRC = eflags;
|
||||||
} else {
|
} else {
|
||||||
cpu_loop_exit_atomic(ENV_GET_CPU(env), ra);
|
cpu_loop_exit_atomic(env_cpu(env), ra);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -172,8 +172,6 @@ static inline M68kCPU *m68k_env_get_cpu(CPUM68KState *env)
|
||||||
return container_of(env, M68kCPU, env);
|
return container_of(env, M68kCPU, env);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define ENV_GET_CPU(e) CPU(m68k_env_get_cpu(e))
|
|
||||||
|
|
||||||
#define ENV_OFFSET offsetof(M68kCPU, env)
|
#define ENV_OFFSET offsetof(M68kCPU, env)
|
||||||
|
|
||||||
void m68k_cpu_do_interrupt(CPUState *cpu);
|
void m68k_cpu_do_interrupt(CPUState *cpu);
|
||||||
|
|
|
@ -790,7 +790,7 @@ static void do_cas2l(CPUM68KState *env, uint32_t regs, uint32_t a1, uint32_t a2,
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
/* Tell the main loop we need to serialize this insn. */
|
/* Tell the main loop we need to serialize this insn. */
|
||||||
cpu_loop_exit_atomic(ENV_GET_CPU(env), ra);
|
cpu_loop_exit_atomic(env_cpu(env), ra);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/* We're executing in a serial context -- no need to be atomic. */
|
/* We're executing in a serial context -- no need to be atomic. */
|
||||||
|
|
|
@ -1074,8 +1074,6 @@ static inline MIPSCPU *mips_env_get_cpu(CPUMIPSState *env)
|
||||||
return container_of(env, MIPSCPU, env);
|
return container_of(env, MIPSCPU, env);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define ENV_GET_CPU(e) CPU(mips_env_get_cpu(e))
|
|
||||||
|
|
||||||
#define ENV_OFFSET offsetof(MIPSCPU, env)
|
#define ENV_OFFSET offsetof(MIPSCPU, env)
|
||||||
|
|
||||||
void mips_cpu_list (FILE *f, fprintf_function cpu_fprintf);
|
void mips_cpu_list (FILE *f, fprintf_function cpu_fprintf);
|
||||||
|
|
|
@ -241,7 +241,6 @@ extern const char * const riscv_fpr_regnames[];
|
||||||
extern const char * const riscv_excp_names[];
|
extern const char * const riscv_excp_names[];
|
||||||
extern const char * const riscv_intr_names[];
|
extern const char * const riscv_intr_names[];
|
||||||
|
|
||||||
#define ENV_GET_CPU(e) CPU(riscv_env_get_cpu(e))
|
|
||||||
#define ENV_OFFSET offsetof(RISCVCPU, env)
|
#define ENV_OFFSET offsetof(RISCVCPU, env)
|
||||||
|
|
||||||
void riscv_cpu_do_interrupt(CPUState *cpu);
|
void riscv_cpu_do_interrupt(CPUState *cpu);
|
||||||
|
|
|
@ -533,8 +533,6 @@ static inline SPARCCPU *sparc_env_get_cpu(CPUSPARCState *env)
|
||||||
return container_of(env, SPARCCPU, env);
|
return container_of(env, SPARCCPU, env);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define ENV_GET_CPU(e) CPU(sparc_env_get_cpu(e))
|
|
||||||
|
|
||||||
#define ENV_OFFSET offsetof(SPARCCPU, env)
|
#define ENV_OFFSET offsetof(SPARCCPU, env)
|
||||||
|
|
||||||
void sparc_cpu_do_interrupt(CPUState *cpu);
|
void sparc_cpu_do_interrupt(CPUState *cpu);
|
||||||
|
|
Loading…
Reference in a new issue