mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-30 13:31:52 -06:00
tcg: Drop TCGContext.page_{mask,bits}
Use exec/target_page.h instead of independent variables. Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
9cfcf8c3b7
commit
11efde54f2
14 changed files with 31 additions and 36 deletions
|
@ -312,10 +312,6 @@ TranslationBlock *tb_gen_code(CPUState *cpu, TCGTBCPUState s)
|
||||||
|
|
||||||
tcg_ctx->gen_tb = tb;
|
tcg_ctx->gen_tb = tb;
|
||||||
tcg_ctx->addr_type = target_long_bits() == 32 ? TCG_TYPE_I32 : TCG_TYPE_I64;
|
tcg_ctx->addr_type = target_long_bits() == 32 ? TCG_TYPE_I32 : TCG_TYPE_I64;
|
||||||
#ifdef CONFIG_SOFTMMU
|
|
||||||
tcg_ctx->page_bits = TARGET_PAGE_BITS;
|
|
||||||
tcg_ctx->page_mask = TARGET_PAGE_MASK;
|
|
||||||
#endif
|
|
||||||
tcg_ctx->guest_mo = cpu->cc->tcg_ops->guest_default_memory_order;
|
tcg_ctx->guest_mo = cpu->cc->tcg_ops->guest_default_memory_order;
|
||||||
|
|
||||||
restart_translate:
|
restart_translate:
|
||||||
|
|
|
@ -365,9 +365,6 @@ struct TCGContext {
|
||||||
int nb_indirects;
|
int nb_indirects;
|
||||||
int nb_ops;
|
int nb_ops;
|
||||||
TCGType addr_type; /* TCG_TYPE_I32 or TCG_TYPE_I64 */
|
TCGType addr_type; /* TCG_TYPE_I32 or TCG_TYPE_I64 */
|
||||||
|
|
||||||
int page_mask;
|
|
||||||
uint8_t page_bits;
|
|
||||||
TCGBar guest_mo;
|
TCGBar guest_mo;
|
||||||
|
|
||||||
TCGRegSet reserved_regs;
|
TCGRegSet reserved_regs;
|
||||||
|
|
|
@ -1677,7 +1677,7 @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
|
||||||
/* Extract the TLB index from the address into X0. */
|
/* Extract the TLB index from the address into X0. */
|
||||||
tcg_out_insn(s, 3502S, AND_LSR, TCG_TYPE_I64,
|
tcg_out_insn(s, 3502S, AND_LSR, TCG_TYPE_I64,
|
||||||
TCG_REG_TMP0, TCG_REG_TMP0, addr_reg,
|
TCG_REG_TMP0, TCG_REG_TMP0, addr_reg,
|
||||||
s->page_bits - CPU_TLB_ENTRY_BITS);
|
TARGET_PAGE_BITS - CPU_TLB_ENTRY_BITS);
|
||||||
|
|
||||||
/* Add the tlb_table pointer, forming the CPUTLBEntry address. */
|
/* Add the tlb_table pointer, forming the CPUTLBEntry address. */
|
||||||
tcg_out_insn(s, 3502, ADD, 1, TCG_REG_TMP1, TCG_REG_TMP1, TCG_REG_TMP0);
|
tcg_out_insn(s, 3502, ADD, 1, TCG_REG_TMP1, TCG_REG_TMP1, TCG_REG_TMP0);
|
||||||
|
@ -1703,7 +1703,7 @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
|
||||||
tcg_out_insn(s, 3401, ADDI, addr_type,
|
tcg_out_insn(s, 3401, ADDI, addr_type,
|
||||||
addr_adj, addr_reg, s_mask - a_mask);
|
addr_adj, addr_reg, s_mask - a_mask);
|
||||||
}
|
}
|
||||||
compare_mask = (uint64_t)s->page_mask | a_mask;
|
compare_mask = (uint64_t)TARGET_PAGE_MASK | a_mask;
|
||||||
|
|
||||||
/* Store the page mask part of the address into TMP2. */
|
/* Store the page mask part of the address into TMP2. */
|
||||||
tcg_out_logicali(s, I3404_ANDI, addr_type, TCG_REG_TMP2,
|
tcg_out_logicali(s, I3404_ANDI, addr_type, TCG_REG_TMP2,
|
||||||
|
|
|
@ -1427,7 +1427,7 @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
|
||||||
|
|
||||||
/* Extract the tlb index from the address into R0. */
|
/* Extract the tlb index from the address into R0. */
|
||||||
tcg_out_dat_reg(s, COND_AL, ARITH_AND, TCG_REG_R0, TCG_REG_R0, addr,
|
tcg_out_dat_reg(s, COND_AL, ARITH_AND, TCG_REG_R0, TCG_REG_R0, addr,
|
||||||
SHIFT_IMM_LSR(s->page_bits - CPU_TLB_ENTRY_BITS));
|
SHIFT_IMM_LSR(TARGET_PAGE_BITS - CPU_TLB_ENTRY_BITS));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Add the tlb_table pointer, creating the CPUTLBEntry address in R1.
|
* Add the tlb_table pointer, creating the CPUTLBEntry address in R1.
|
||||||
|
@ -1463,8 +1463,8 @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
|
||||||
tcg_out_dat_imm(s, COND_AL, ARITH_ADD, t_addr,
|
tcg_out_dat_imm(s, COND_AL, ARITH_ADD, t_addr,
|
||||||
addr, s_mask - a_mask);
|
addr, s_mask - a_mask);
|
||||||
}
|
}
|
||||||
if (use_armv7_instructions && s->page_bits <= 16) {
|
if (use_armv7_instructions && TARGET_PAGE_BITS <= 16) {
|
||||||
tcg_out_movi32(s, COND_AL, TCG_REG_TMP, ~(s->page_mask | a_mask));
|
tcg_out_movi32(s, COND_AL, TCG_REG_TMP, ~(TARGET_PAGE_MASK | a_mask));
|
||||||
tcg_out_dat_reg(s, COND_AL, ARITH_BIC, TCG_REG_TMP,
|
tcg_out_dat_reg(s, COND_AL, ARITH_BIC, TCG_REG_TMP,
|
||||||
t_addr, TCG_REG_TMP, 0);
|
t_addr, TCG_REG_TMP, 0);
|
||||||
tcg_out_dat_reg(s, COND_AL, ARITH_CMP, 0,
|
tcg_out_dat_reg(s, COND_AL, ARITH_CMP, 0,
|
||||||
|
@ -1475,10 +1475,10 @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
|
||||||
tcg_out_dat_imm(s, COND_AL, ARITH_TST, 0, addr, a_mask);
|
tcg_out_dat_imm(s, COND_AL, ARITH_TST, 0, addr, a_mask);
|
||||||
}
|
}
|
||||||
tcg_out_dat_reg(s, COND_AL, ARITH_MOV, TCG_REG_TMP, 0, t_addr,
|
tcg_out_dat_reg(s, COND_AL, ARITH_MOV, TCG_REG_TMP, 0, t_addr,
|
||||||
SHIFT_IMM_LSR(s->page_bits));
|
SHIFT_IMM_LSR(TARGET_PAGE_BITS));
|
||||||
tcg_out_dat_reg(s, (a_mask ? COND_EQ : COND_AL), ARITH_CMP,
|
tcg_out_dat_reg(s, (a_mask ? COND_EQ : COND_AL), ARITH_CMP,
|
||||||
0, TCG_REG_R2, TCG_REG_TMP,
|
0, TCG_REG_R2, TCG_REG_TMP,
|
||||||
SHIFT_IMM_LSL(s->page_bits));
|
SHIFT_IMM_LSL(TARGET_PAGE_BITS));
|
||||||
}
|
}
|
||||||
} else if (a_mask) {
|
} else if (a_mask) {
|
||||||
ldst = new_ldst_label(s);
|
ldst = new_ldst_label(s);
|
||||||
|
|
|
@ -2206,7 +2206,7 @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
|
||||||
|
|
||||||
tcg_out_mov(s, tlbtype, TCG_REG_L0, addr);
|
tcg_out_mov(s, tlbtype, TCG_REG_L0, addr);
|
||||||
tcg_out_shifti(s, SHIFT_SHR + tlbrexw, TCG_REG_L0,
|
tcg_out_shifti(s, SHIFT_SHR + tlbrexw, TCG_REG_L0,
|
||||||
s->page_bits - CPU_TLB_ENTRY_BITS);
|
TARGET_PAGE_BITS - CPU_TLB_ENTRY_BITS);
|
||||||
|
|
||||||
tcg_out_modrm_offset(s, OPC_AND_GvEv + trexw, TCG_REG_L0, TCG_AREG0,
|
tcg_out_modrm_offset(s, OPC_AND_GvEv + trexw, TCG_REG_L0, TCG_AREG0,
|
||||||
fast_ofs + offsetof(CPUTLBDescFast, mask));
|
fast_ofs + offsetof(CPUTLBDescFast, mask));
|
||||||
|
@ -2225,7 +2225,7 @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
|
||||||
tcg_out_modrm_offset(s, OPC_LEA + trexw, TCG_REG_L1,
|
tcg_out_modrm_offset(s, OPC_LEA + trexw, TCG_REG_L1,
|
||||||
addr, s_mask - a_mask);
|
addr, s_mask - a_mask);
|
||||||
}
|
}
|
||||||
tlb_mask = s->page_mask | a_mask;
|
tlb_mask = TARGET_PAGE_MASK | a_mask;
|
||||||
tgen_arithi(s, ARITH_AND + trexw, TCG_REG_L1, tlb_mask, 0);
|
tgen_arithi(s, ARITH_AND + trexw, TCG_REG_L1, tlb_mask, 0);
|
||||||
|
|
||||||
/* cmp 0(TCG_REG_L0), TCG_REG_L1 */
|
/* cmp 0(TCG_REG_L0), TCG_REG_L1 */
|
||||||
|
|
|
@ -1065,7 +1065,7 @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
|
||||||
tcg_out_ld(s, TCG_TYPE_PTR, TCG_REG_TMP1, TCG_AREG0, table_ofs);
|
tcg_out_ld(s, TCG_TYPE_PTR, TCG_REG_TMP1, TCG_AREG0, table_ofs);
|
||||||
|
|
||||||
tcg_out_opc_srli_d(s, TCG_REG_TMP2, addr_reg,
|
tcg_out_opc_srli_d(s, TCG_REG_TMP2, addr_reg,
|
||||||
s->page_bits - CPU_TLB_ENTRY_BITS);
|
TARGET_PAGE_BITS - CPU_TLB_ENTRY_BITS);
|
||||||
tcg_out_opc_and(s, TCG_REG_TMP2, TCG_REG_TMP2, TCG_REG_TMP0);
|
tcg_out_opc_and(s, TCG_REG_TMP2, TCG_REG_TMP2, TCG_REG_TMP0);
|
||||||
tcg_out_opc_add_d(s, TCG_REG_TMP2, TCG_REG_TMP2, TCG_REG_TMP1);
|
tcg_out_opc_add_d(s, TCG_REG_TMP2, TCG_REG_TMP2, TCG_REG_TMP1);
|
||||||
|
|
||||||
|
@ -1091,7 +1091,7 @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
|
||||||
tcg_out_mov(s, addr_type, TCG_REG_TMP1, addr_reg);
|
tcg_out_mov(s, addr_type, TCG_REG_TMP1, addr_reg);
|
||||||
}
|
}
|
||||||
tcg_out_opc_bstrins_d(s, TCG_REG_TMP1, TCG_REG_ZERO,
|
tcg_out_opc_bstrins_d(s, TCG_REG_TMP1, TCG_REG_ZERO,
|
||||||
a_bits, s->page_bits - 1);
|
a_bits, TARGET_PAGE_BITS - 1);
|
||||||
|
|
||||||
/* Compare masked address with the TLB entry. */
|
/* Compare masked address with the TLB entry. */
|
||||||
ldst->label_ptr[0] = s->code_ptr;
|
ldst->label_ptr[0] = s->code_ptr;
|
||||||
|
|
|
@ -1199,9 +1199,9 @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
|
||||||
/* Extract the TLB index from the address into TMP3. */
|
/* Extract the TLB index from the address into TMP3. */
|
||||||
if (TCG_TARGET_REG_BITS == 32 || addr_type == TCG_TYPE_I32) {
|
if (TCG_TARGET_REG_BITS == 32 || addr_type == TCG_TYPE_I32) {
|
||||||
tcg_out_opc_sa(s, OPC_SRL, TCG_TMP3, addr,
|
tcg_out_opc_sa(s, OPC_SRL, TCG_TMP3, addr,
|
||||||
s->page_bits - CPU_TLB_ENTRY_BITS);
|
TARGET_PAGE_BITS - CPU_TLB_ENTRY_BITS);
|
||||||
} else {
|
} else {
|
||||||
tcg_out_dsrl(s, TCG_TMP3, addr, s->page_bits - CPU_TLB_ENTRY_BITS);
|
tcg_out_dsrl(s, TCG_TMP3, addr, TARGET_PAGE_BITS - CPU_TLB_ENTRY_BITS);
|
||||||
}
|
}
|
||||||
tcg_out_opc_reg(s, OPC_AND, TCG_TMP3, TCG_TMP3, TCG_TMP0);
|
tcg_out_opc_reg(s, OPC_AND, TCG_TMP3, TCG_TMP3, TCG_TMP0);
|
||||||
|
|
||||||
|
@ -1224,7 +1224,7 @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
|
||||||
* For unaligned accesses, compare against the end of the access to
|
* For unaligned accesses, compare against the end of the access to
|
||||||
* verify that it does not cross a page boundary.
|
* verify that it does not cross a page boundary.
|
||||||
*/
|
*/
|
||||||
tcg_out_movi(s, addr_type, TCG_TMP1, s->page_mask | a_mask);
|
tcg_out_movi(s, addr_type, TCG_TMP1, TARGET_PAGE_MASK | a_mask);
|
||||||
if (a_mask < s_mask) {
|
if (a_mask < s_mask) {
|
||||||
tcg_out_opc_imm(s, (TCG_TARGET_REG_BITS == 32
|
tcg_out_opc_imm(s, (TCG_TARGET_REG_BITS == 32
|
||||||
|| addr_type == TCG_TYPE_I32
|
|| addr_type == TCG_TYPE_I32
|
||||||
|
|
|
@ -334,7 +334,7 @@ void perf_report_code(uint64_t guest_pc, TranslationBlock *tb,
|
||||||
/* FIXME: This replicates the restore_state_to_opc() logic. */
|
/* FIXME: This replicates the restore_state_to_opc() logic. */
|
||||||
q[insn].address = gen_insn_data[insn * INSN_START_WORDS + 0];
|
q[insn].address = gen_insn_data[insn * INSN_START_WORDS + 0];
|
||||||
if (tb_cflags(tb) & CF_PCREL) {
|
if (tb_cflags(tb) & CF_PCREL) {
|
||||||
q[insn].address |= (guest_pc & qemu_target_page_mask());
|
q[insn].address |= guest_pc & TARGET_PAGE_MASK;
|
||||||
}
|
}
|
||||||
q[insn].flags = DEBUGINFO_SYMBOL | (jitdump ? DEBUGINFO_LINE : 0);
|
q[insn].flags = DEBUGINFO_SYMBOL | (jitdump ? DEBUGINFO_LINE : 0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -2440,10 +2440,10 @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
|
||||||
/* Extract the page index, shifted into place for tlb index. */
|
/* Extract the page index, shifted into place for tlb index. */
|
||||||
if (TCG_TARGET_REG_BITS == 32) {
|
if (TCG_TARGET_REG_BITS == 32) {
|
||||||
tcg_out_shri32(s, TCG_REG_R0, addr,
|
tcg_out_shri32(s, TCG_REG_R0, addr,
|
||||||
s->page_bits - CPU_TLB_ENTRY_BITS);
|
TARGET_PAGE_BITS - CPU_TLB_ENTRY_BITS);
|
||||||
} else {
|
} else {
|
||||||
tcg_out_shri64(s, TCG_REG_R0, addr,
|
tcg_out_shri64(s, TCG_REG_R0, addr,
|
||||||
s->page_bits - CPU_TLB_ENTRY_BITS);
|
TARGET_PAGE_BITS - CPU_TLB_ENTRY_BITS);
|
||||||
}
|
}
|
||||||
tcg_out32(s, AND | SAB(TCG_REG_TMP1, TCG_REG_TMP1, TCG_REG_R0));
|
tcg_out32(s, AND | SAB(TCG_REG_TMP1, TCG_REG_TMP1, TCG_REG_R0));
|
||||||
|
|
||||||
|
@ -2480,7 +2480,7 @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
|
||||||
a_bits = s_bits;
|
a_bits = s_bits;
|
||||||
}
|
}
|
||||||
tcg_out_rlw(s, RLWINM, TCG_REG_R0, addr, 0,
|
tcg_out_rlw(s, RLWINM, TCG_REG_R0, addr, 0,
|
||||||
(32 - a_bits) & 31, 31 - s->page_bits);
|
(32 - a_bits) & 31, 31 - TARGET_PAGE_BITS);
|
||||||
} else {
|
} else {
|
||||||
TCGReg t = addr;
|
TCGReg t = addr;
|
||||||
|
|
||||||
|
@ -2501,13 +2501,13 @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
|
||||||
/* Mask the address for the requested alignment. */
|
/* Mask the address for the requested alignment. */
|
||||||
if (addr_type == TCG_TYPE_I32) {
|
if (addr_type == TCG_TYPE_I32) {
|
||||||
tcg_out_rlw(s, RLWINM, TCG_REG_R0, t, 0,
|
tcg_out_rlw(s, RLWINM, TCG_REG_R0, t, 0,
|
||||||
(32 - a_bits) & 31, 31 - s->page_bits);
|
(32 - a_bits) & 31, 31 - TARGET_PAGE_BITS);
|
||||||
} else if (a_bits == 0) {
|
} else if (a_bits == 0) {
|
||||||
tcg_out_rld(s, RLDICR, TCG_REG_R0, t, 0, 63 - s->page_bits);
|
tcg_out_rld(s, RLDICR, TCG_REG_R0, t, 0, 63 - TARGET_PAGE_BITS);
|
||||||
} else {
|
} else {
|
||||||
tcg_out_rld(s, RLDICL, TCG_REG_R0, t,
|
tcg_out_rld(s, RLDICL, TCG_REG_R0, t,
|
||||||
64 - s->page_bits, s->page_bits - a_bits);
|
64 - TARGET_PAGE_BITS, TARGET_PAGE_BITS - a_bits);
|
||||||
tcg_out_rld(s, RLDICL, TCG_REG_R0, TCG_REG_R0, s->page_bits, 0);
|
tcg_out_rld(s, RLDICL, TCG_REG_R0, TCG_REG_R0, TARGET_PAGE_BITS, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1706,7 +1706,7 @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, TCGReg *pbase,
|
||||||
tcg_out_ld(s, TCG_TYPE_PTR, TCG_REG_TMP1, TCG_AREG0, table_ofs);
|
tcg_out_ld(s, TCG_TYPE_PTR, TCG_REG_TMP1, TCG_AREG0, table_ofs);
|
||||||
|
|
||||||
tcg_out_opc_imm(s, OPC_SRLI, TCG_REG_TMP2, addr_reg,
|
tcg_out_opc_imm(s, OPC_SRLI, TCG_REG_TMP2, addr_reg,
|
||||||
s->page_bits - CPU_TLB_ENTRY_BITS);
|
TARGET_PAGE_BITS - CPU_TLB_ENTRY_BITS);
|
||||||
tcg_out_opc_reg(s, OPC_AND, TCG_REG_TMP2, TCG_REG_TMP2, TCG_REG_TMP0);
|
tcg_out_opc_reg(s, OPC_AND, TCG_REG_TMP2, TCG_REG_TMP2, TCG_REG_TMP0);
|
||||||
tcg_out_opc_reg(s, OPC_ADD, TCG_REG_TMP2, TCG_REG_TMP2, TCG_REG_TMP1);
|
tcg_out_opc_reg(s, OPC_ADD, TCG_REG_TMP2, TCG_REG_TMP2, TCG_REG_TMP1);
|
||||||
|
|
||||||
|
@ -1722,7 +1722,7 @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, TCGReg *pbase,
|
||||||
tcg_out_opc_imm(s, addr_type == TCG_TYPE_I32 ? OPC_ADDIW : OPC_ADDI,
|
tcg_out_opc_imm(s, addr_type == TCG_TYPE_I32 ? OPC_ADDIW : OPC_ADDI,
|
||||||
addr_adj, addr_reg, s_mask - a_mask);
|
addr_adj, addr_reg, s_mask - a_mask);
|
||||||
}
|
}
|
||||||
compare_mask = s->page_mask | a_mask;
|
compare_mask = TARGET_PAGE_MASK | a_mask;
|
||||||
if (compare_mask == sextreg(compare_mask, 0, 12)) {
|
if (compare_mask == sextreg(compare_mask, 0, 12)) {
|
||||||
tcg_out_opc_imm(s, OPC_ANDI, TCG_REG_TMP1, addr_adj, compare_mask);
|
tcg_out_opc_imm(s, OPC_ANDI, TCG_REG_TMP1, addr_adj, compare_mask);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -2004,7 +2004,7 @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
|
||||||
ldst->addr_reg = addr_reg;
|
ldst->addr_reg = addr_reg;
|
||||||
|
|
||||||
tcg_out_sh64(s, RSY_SRLG, TCG_TMP0, addr_reg, TCG_REG_NONE,
|
tcg_out_sh64(s, RSY_SRLG, TCG_TMP0, addr_reg, TCG_REG_NONE,
|
||||||
s->page_bits - CPU_TLB_ENTRY_BITS);
|
TARGET_PAGE_BITS - CPU_TLB_ENTRY_BITS);
|
||||||
|
|
||||||
tcg_out_insn(s, RXY, NG, TCG_TMP0, TCG_AREG0, TCG_REG_NONE, mask_off);
|
tcg_out_insn(s, RXY, NG, TCG_TMP0, TCG_AREG0, TCG_REG_NONE, mask_off);
|
||||||
tcg_out_insn(s, RXY, AG, TCG_TMP0, TCG_AREG0, TCG_REG_NONE, table_off);
|
tcg_out_insn(s, RXY, AG, TCG_TMP0, TCG_AREG0, TCG_REG_NONE, table_off);
|
||||||
|
@ -2016,7 +2016,7 @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
|
||||||
* byte of the access.
|
* byte of the access.
|
||||||
*/
|
*/
|
||||||
a_off = (a_mask >= s_mask ? 0 : s_mask - a_mask);
|
a_off = (a_mask >= s_mask ? 0 : s_mask - a_mask);
|
||||||
tlb_mask = (uint64_t)s->page_mask | a_mask;
|
tlb_mask = (uint64_t)TARGET_PAGE_MASK | a_mask;
|
||||||
if (a_off == 0) {
|
if (a_off == 0) {
|
||||||
tgen_andi_risbg(s, TCG_REG_R0, addr_reg, tlb_mask);
|
tgen_andi_risbg(s, TCG_REG_R0, addr_reg, tlb_mask);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -1120,7 +1120,7 @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
|
||||||
|
|
||||||
/* Extract the page index, shifted into place for tlb index. */
|
/* Extract the page index, shifted into place for tlb index. */
|
||||||
tcg_out_arithi(s, TCG_REG_T1, addr_reg,
|
tcg_out_arithi(s, TCG_REG_T1, addr_reg,
|
||||||
s->page_bits - CPU_TLB_ENTRY_BITS, SHIFT_SRL);
|
TARGET_PAGE_BITS - CPU_TLB_ENTRY_BITS, SHIFT_SRL);
|
||||||
tcg_out_arith(s, TCG_REG_T1, TCG_REG_T1, TCG_REG_T2, ARITH_AND);
|
tcg_out_arith(s, TCG_REG_T1, TCG_REG_T1, TCG_REG_T2, ARITH_AND);
|
||||||
|
|
||||||
/* Add the tlb_table pointer, creating the CPUTLBEntry address into R2. */
|
/* Add the tlb_table pointer, creating the CPUTLBEntry address into R2. */
|
||||||
|
@ -1136,7 +1136,7 @@ static TCGLabelQemuLdst *prepare_host_addr(TCGContext *s, HostAddress *h,
|
||||||
h->base = TCG_REG_T1;
|
h->base = TCG_REG_T1;
|
||||||
|
|
||||||
/* Mask out the page offset, except for the required alignment. */
|
/* Mask out the page offset, except for the required alignment. */
|
||||||
compare_mask = s->page_mask | a_mask;
|
compare_mask = TARGET_PAGE_MASK | a_mask;
|
||||||
if (check_fit_tl(compare_mask, 13)) {
|
if (check_fit_tl(compare_mask, 13)) {
|
||||||
tcg_out_arithi(s, TCG_REG_T3, addr_reg, compare_mask, ARITH_AND);
|
tcg_out_arithi(s, TCG_REG_T3, addr_reg, compare_mask, ARITH_AND);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
#include "tcg/tcg-temp-internal.h"
|
#include "tcg/tcg-temp-internal.h"
|
||||||
#include "tcg/tcg-op-common.h"
|
#include "tcg/tcg-op-common.h"
|
||||||
#include "tcg/tcg-mo.h"
|
#include "tcg/tcg-mo.h"
|
||||||
|
#include "exec/target_page.h"
|
||||||
#include "exec/translation-block.h"
|
#include "exec/translation-block.h"
|
||||||
#include "exec/plugin-gen.h"
|
#include "exec/plugin-gen.h"
|
||||||
#include "tcg-internal.h"
|
#include "tcg-internal.h"
|
||||||
|
@ -40,7 +41,7 @@ static void check_max_alignment(unsigned a_bits)
|
||||||
* FIXME: Must keep the count up-to-date with "exec/tlb-flags.h".
|
* FIXME: Must keep the count up-to-date with "exec/tlb-flags.h".
|
||||||
*/
|
*/
|
||||||
if (tcg_use_softmmu) {
|
if (tcg_use_softmmu) {
|
||||||
tcg_debug_assert(a_bits + 5 <= tcg_ctx->page_bits);
|
tcg_debug_assert(a_bits + 5 <= TARGET_PAGE_BITS);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -34,6 +34,7 @@
|
||||||
#include "qemu/cacheflush.h"
|
#include "qemu/cacheflush.h"
|
||||||
#include "qemu/cacheinfo.h"
|
#include "qemu/cacheinfo.h"
|
||||||
#include "qemu/timer.h"
|
#include "qemu/timer.h"
|
||||||
|
#include "exec/target_page.h"
|
||||||
#include "exec/translation-block.h"
|
#include "exec/translation-block.h"
|
||||||
#include "exec/tlb-common.h"
|
#include "exec/tlb-common.h"
|
||||||
#include "tcg/startup.h"
|
#include "tcg/startup.h"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue