Skip to content

Commit

Permalink
Fixed calling convention problems in Linux builds occurring in gcc 13
Browse files Browse the repository at this point in the history
  • Loading branch information
ergo720 committed Mar 17, 2024
1 parent c579548 commit e44c112
Show file tree
Hide file tree
Showing 15 changed files with 102 additions and 102 deletions.
2 changes: 1 addition & 1 deletion lib86cpu/core/emitter/emitter_common.h
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@
#define REG_pair(reg) get_reg_pair(reg)


entry_t JIT_API link_indirect_handler(cpu_ctx_t *cpu_ctx, translated_code_t *tc);
JIT_API entry_t link_indirect_handler(cpu_ctx_t *cpu_ctx, translated_code_t *tc);
size_t get_reg_offset(ZydisRegister reg);
size_t get_seg_prfx_offset(decoded_instr *instr);
int get_reg_idx(ZydisRegister reg);
Expand Down
2 changes: 1 addition & 1 deletion lib86cpu/core/emitter/x64/jit.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ static const std::unordered_map<x64, x86::Gp> reg_to_sized_reg = {

template<typename R, typename... Args>
consteval std::integral_constant<size_t, sizeof...(Args)>
get_arg_count(R(JIT_API *f)(Args...))
get_arg_count(JIT_API R(*f)(Args...))
{
return std::integral_constant<size_t, sizeof...(Args)>{};
}
Expand Down
28 changes: 14 additions & 14 deletions lib86cpu/core/fpu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -113,17 +113,17 @@ uint32_t fpu_stack_check(cpu_ctx_t *cpu_ctx, uint32_t *sw, uint80_t *inv_val)
return ftop;
}

template uint32_t fpu_stack_check<true, fpu_instr_t::integer8>(cpu_ctx_t *cpu_ctx, uint32_t *sw, uint80_t *inv_val);
template uint32_t fpu_stack_check<false, fpu_instr_t::integer8>(cpu_ctx_t *cpu_ctx, uint32_t *sw, uint80_t *inv_val);
template uint32_t fpu_stack_check<true, fpu_instr_t::integer16>(cpu_ctx_t *cpu_ctx, uint32_t *sw, uint80_t *inv_val);
template uint32_t fpu_stack_check<false, fpu_instr_t::integer16>(cpu_ctx_t *cpu_ctx, uint32_t *sw, uint80_t *inv_val);
template uint32_t fpu_stack_check<true, fpu_instr_t::integer32>(cpu_ctx_t *cpu_ctx, uint32_t *sw, uint80_t *inv_val);
template uint32_t fpu_stack_check<false, fpu_instr_t::integer32>(cpu_ctx_t *cpu_ctx, uint32_t *sw, uint80_t *inv_val);
template uint32_t fpu_stack_check<true, fpu_instr_t::integer64>(cpu_ctx_t *cpu_ctx, uint32_t *sw, uint80_t *inv_val);
template uint32_t fpu_stack_check<false, fpu_instr_t::integer64>(cpu_ctx_t *cpu_ctx, uint32_t *sw, uint80_t *inv_val);
template uint32_t fpu_stack_check<true, fpu_instr_t::float_>(cpu_ctx_t *cpu_ctx, uint32_t *sw, uint80_t *inv_val);
template uint32_t fpu_stack_check<false, fpu_instr_t::float_>(cpu_ctx_t *cpu_ctx, uint32_t *sw, uint80_t *inv_val);
template uint32_t fpu_stack_check<true, fpu_instr_t::bcd>(cpu_ctx_t *cpu_ctx, uint32_t *sw, uint80_t *inv_val);
template uint32_t fpu_stack_check<false, fpu_instr_t::bcd>(cpu_ctx_t *cpu_ctx, uint32_t *sw, uint80_t *inv_val);
template void fpu_update_tag<true>(cpu_ctx_t *cpu_ctx, uint32_t idx);
template void fpu_update_tag<false>(cpu_ctx_t *cpu_ctx, uint32_t idx);
template JIT_API uint32_t fpu_stack_check<true, fpu_instr_t::integer8>(cpu_ctx_t *cpu_ctx, uint32_t *sw, uint80_t *inv_val);
template JIT_API uint32_t fpu_stack_check<false, fpu_instr_t::integer8>(cpu_ctx_t *cpu_ctx, uint32_t *sw, uint80_t *inv_val);
template JIT_API uint32_t fpu_stack_check<true, fpu_instr_t::integer16>(cpu_ctx_t *cpu_ctx, uint32_t *sw, uint80_t *inv_val);
template JIT_API uint32_t fpu_stack_check<false, fpu_instr_t::integer16>(cpu_ctx_t *cpu_ctx, uint32_t *sw, uint80_t *inv_val);
template JIT_API uint32_t fpu_stack_check<true, fpu_instr_t::integer32>(cpu_ctx_t *cpu_ctx, uint32_t *sw, uint80_t *inv_val);
template JIT_API uint32_t fpu_stack_check<false, fpu_instr_t::integer32>(cpu_ctx_t *cpu_ctx, uint32_t *sw, uint80_t *inv_val);
template JIT_API uint32_t fpu_stack_check<true, fpu_instr_t::integer64>(cpu_ctx_t *cpu_ctx, uint32_t *sw, uint80_t *inv_val);
template JIT_API uint32_t fpu_stack_check<false, fpu_instr_t::integer64>(cpu_ctx_t *cpu_ctx, uint32_t *sw, uint80_t *inv_val);
template JIT_API uint32_t fpu_stack_check<true, fpu_instr_t::float_>(cpu_ctx_t *cpu_ctx, uint32_t *sw, uint80_t *inv_val);
template JIT_API uint32_t fpu_stack_check<false, fpu_instr_t::float_>(cpu_ctx_t *cpu_ctx, uint32_t *sw, uint80_t *inv_val);
template JIT_API uint32_t fpu_stack_check<true, fpu_instr_t::bcd>(cpu_ctx_t *cpu_ctx, uint32_t *sw, uint80_t *inv_val);
template JIT_API uint32_t fpu_stack_check<false, fpu_instr_t::bcd>(cpu_ctx_t *cpu_ctx, uint32_t *sw, uint80_t *inv_val);
template JIT_API void fpu_update_tag<true>(cpu_ctx_t *cpu_ctx, uint32_t idx);
template JIT_API void fpu_update_tag<false>(cpu_ctx_t *cpu_ctx, uint32_t idx);
4 changes: 2 additions & 2 deletions lib86cpu/core/fpu.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,6 @@ enum class fpu_instr_t : int {

void fpu_init(cpu_t *cpu);
template<bool is_push>
void JIT_API fpu_update_tag(cpu_ctx_t *cpu_ctx, uint32_t idx);
JIT_API void fpu_update_tag(cpu_ctx_t *cpu_ctx, uint32_t idx);
template<bool is_push, fpu_instr_t instr_type>
uint32_t JIT_API fpu_stack_check(cpu_ctx_t *cpu_ctx, uint32_t *sw, uint80_t *inv_val);
JIT_API uint32_t fpu_stack_check(cpu_ctx_t *cpu_ctx, uint32_t *sw, uint80_t *inv_val);
24 changes: 12 additions & 12 deletions lib86cpu/core/instructions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1423,18 +1423,18 @@ hlt_helper(cpu_ctx_t *cpu_ctx)
return 0;
}

template uint32_t lret_pe_helper<true>(cpu_ctx_t *cpu_ctx, uint8_t size_mode, uint32_t eip);
template uint32_t lret_pe_helper<false>(cpu_ctx_t *cpu_ctx, uint8_t size_mode, uint32_t eip);
template JIT_API uint32_t lret_pe_helper<true>(cpu_ctx_t *cpu_ctx, uint8_t size_mode, uint32_t eip);
template JIT_API uint32_t lret_pe_helper<false>(cpu_ctx_t *cpu_ctx, uint8_t size_mode, uint32_t eip);

template void verrw_helper<true>(cpu_ctx_t *cpu_ctx, uint16_t sel, uint32_t eip);
template void verrw_helper<false>(cpu_ctx_t *cpu_ctx, uint16_t sel, uint32_t eip);
template JIT_API void verrw_helper<true>(cpu_ctx_t *cpu_ctx, uint16_t sel, uint32_t eip);
template JIT_API void verrw_helper<false>(cpu_ctx_t *cpu_ctx, uint16_t sel, uint32_t eip);

template uint32_t mov_sel_pe_helper<DS_idx>(cpu_ctx_t *cpu_ctx, uint16_t sel, uint32_t eip);
template uint32_t mov_sel_pe_helper<ES_idx>(cpu_ctx_t *cpu_ctx, uint16_t sel, uint32_t eip);
template uint32_t mov_sel_pe_helper<SS_idx>(cpu_ctx_t *cpu_ctx, uint16_t sel, uint32_t eip);
template uint32_t mov_sel_pe_helper<FS_idx>(cpu_ctx_t *cpu_ctx, uint16_t sel, uint32_t eip);
template uint32_t mov_sel_pe_helper<GS_idx>(cpu_ctx_t *cpu_ctx, uint16_t sel, uint32_t eip);
template JIT_API uint32_t mov_sel_pe_helper<DS_idx>(cpu_ctx_t *cpu_ctx, uint16_t sel, uint32_t eip);
template JIT_API uint32_t mov_sel_pe_helper<ES_idx>(cpu_ctx_t *cpu_ctx, uint16_t sel, uint32_t eip);
template JIT_API uint32_t mov_sel_pe_helper<SS_idx>(cpu_ctx_t *cpu_ctx, uint16_t sel, uint32_t eip);
template JIT_API uint32_t mov_sel_pe_helper<FS_idx>(cpu_ctx_t *cpu_ctx, uint16_t sel, uint32_t eip);
template JIT_API uint32_t mov_sel_pe_helper<GS_idx>(cpu_ctx_t *cpu_ctx, uint16_t sel, uint32_t eip);

template uint32_t update_crN_helper<0>(cpu_ctx_t* cpu_ctx, uint32_t new_cr, uint8_t idx);
template uint32_t update_crN_helper<1>(cpu_ctx_t* cpu_ctx, uint32_t new_cr, uint8_t idx);
template uint32_t update_crN_helper<2>(cpu_ctx_t* cpu_ctx, uint32_t new_cr, uint8_t idx);
template JIT_API uint32_t update_crN_helper<0>(cpu_ctx_t* cpu_ctx, uint32_t new_cr, uint8_t idx);
template JIT_API uint32_t update_crN_helper<1>(cpu_ctx_t* cpu_ctx, uint32_t new_cr, uint8_t idx);
template JIT_API uint32_t update_crN_helper<2>(cpu_ctx_t* cpu_ctx, uint32_t new_cr, uint8_t idx);
46 changes: 23 additions & 23 deletions lib86cpu/core/instructions.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,26 +7,26 @@
#include "helpers.h"


template<bool is_iret> uint32_t JIT_API lret_pe_helper(cpu_ctx_t *cpu_ctx, uint8_t size_mode, uint32_t eip);
void JIT_API iret_real_helper(cpu_ctx_t *cpu_ctx, uint8_t size_mode, uint32_t eip);
uint32_t JIT_API ljmp_pe_helper(cpu_ctx_t *cpu_ctx, uint16_t sel, uint8_t size_mode, uint32_t jmp_eip, uint32_t eip);
uint32_t JIT_API lcall_pe_helper(cpu_ctx_t *cpu_ctx, uint16_t sel, uint32_t call_eip, uint8_t size_mode, uint32_t ret_eip, uint32_t eip);
template<bool is_verr> void JIT_API verrw_helper(cpu_ctx_t *cpu_ctx, uint16_t sel, uint32_t eip);
template<unsigned reg> uint32_t JIT_API mov_sel_pe_helper(cpu_ctx_t *cpu_ctx, uint16_t sel, uint32_t eip);
uint32_t JIT_API ltr_helper(cpu_ctx_t *cpu_ctx, uint16_t sel, uint32_t eip);
uint32_t JIT_API lldt_helper(cpu_ctx_t *cpu_ctx, uint16_t sel, uint32_t eip);
template<unsigned idx1> uint32_t JIT_API update_crN_helper(cpu_ctx_t *cpu_ctx, uint32_t new_cr, uint8_t idx);
void JIT_API update_drN_helper(cpu_ctx_t *cpu_ctx, uint8_t dr_idx, uint32_t new_dr);
uint32_t JIT_API divd_helper(cpu_ctx_t *cpu_ctx, uint32_t d, uint32_t eip);
uint32_t JIT_API divw_helper(cpu_ctx_t *cpu_ctx, uint16_t d, uint32_t eip);
uint32_t JIT_API divb_helper(cpu_ctx_t *cpu_ctx, uint8_t d, uint32_t eip);
uint32_t JIT_API idivd_helper(cpu_ctx_t *cpu_ctx, uint32_t d, uint32_t eip);
uint32_t JIT_API idivw_helper(cpu_ctx_t *cpu_ctx, uint16_t d, uint32_t eip);
uint32_t JIT_API idivb_helper(cpu_ctx_t *cpu_ctx, uint8_t d, uint32_t eip);
void JIT_API cpuid_helper(cpu_ctx_t *cpu_ctx);
void JIT_API cpu_rdtsc_helper(cpu_ctx_t *cpu_ctx);
uint32_t JIT_API msr_read_helper(cpu_ctx_t *cpu_ctx);
uint32_t JIT_API msr_write_helper(cpu_ctx_t *cpu_ctx);
uint32_t JIT_API hlt_helper(cpu_ctx_t *cpu_ctx);
void JIT_API fxsave_helper(cpu_ctx_t *cpu_ctx, addr_t addr, uint32_t eip);
uint32_t JIT_API fxrstor_helper(cpu_ctx_t *cpu_ctx, addr_t addr, uint32_t eip);
template<bool is_iret> JIT_API uint32_t lret_pe_helper(cpu_ctx_t *cpu_ctx, uint8_t size_mode, uint32_t eip);
JIT_API void iret_real_helper(cpu_ctx_t *cpu_ctx, uint8_t size_mode, uint32_t eip);
JIT_API uint32_t ljmp_pe_helper(cpu_ctx_t *cpu_ctx, uint16_t sel, uint8_t size_mode, uint32_t jmp_eip, uint32_t eip);
JIT_API uint32_t lcall_pe_helper(cpu_ctx_t *cpu_ctx, uint16_t sel, uint32_t call_eip, uint8_t size_mode, uint32_t ret_eip, uint32_t eip);
template<bool is_verr> JIT_API void verrw_helper(cpu_ctx_t *cpu_ctx, uint16_t sel, uint32_t eip);
template<unsigned reg> JIT_API uint32_t mov_sel_pe_helper(cpu_ctx_t *cpu_ctx, uint16_t sel, uint32_t eip);
JIT_API uint32_t ltr_helper(cpu_ctx_t *cpu_ctx, uint16_t sel, uint32_t eip);
JIT_API uint32_t lldt_helper(cpu_ctx_t *cpu_ctx, uint16_t sel, uint32_t eip);
template<unsigned idx1> JIT_API uint32_t update_crN_helper(cpu_ctx_t *cpu_ctx, uint32_t new_cr, uint8_t idx);
JIT_API void update_drN_helper(cpu_ctx_t *cpu_ctx, uint8_t dr_idx, uint32_t new_dr);
JIT_API uint32_t divd_helper(cpu_ctx_t *cpu_ctx, uint32_t d, uint32_t eip);
JIT_API uint32_t divw_helper(cpu_ctx_t *cpu_ctx, uint16_t d, uint32_t eip);
JIT_API uint32_t divb_helper(cpu_ctx_t *cpu_ctx, uint8_t d, uint32_t eip);
JIT_API uint32_t idivd_helper(cpu_ctx_t *cpu_ctx, uint32_t d, uint32_t eip);
JIT_API uint32_t idivw_helper(cpu_ctx_t *cpu_ctx, uint16_t d, uint32_t eip);
JIT_API uint32_t idivb_helper(cpu_ctx_t *cpu_ctx, uint8_t d, uint32_t eip);
JIT_API void cpuid_helper(cpu_ctx_t *cpu_ctx);
JIT_API void cpu_rdtsc_helper(cpu_ctx_t *cpu_ctx);
JIT_API uint32_t msr_read_helper(cpu_ctx_t *cpu_ctx);
JIT_API uint32_t msr_write_helper(cpu_ctx_t *cpu_ctx);
JIT_API uint32_t hlt_helper(cpu_ctx_t *cpu_ctx);
JIT_API void fxsave_helper(cpu_ctx_t *cpu_ctx, addr_t addr, uint32_t eip);
JIT_API uint32_t fxrstor_helper(cpu_ctx_t *cpu_ctx, addr_t addr, uint32_t eip);
6 changes: 3 additions & 3 deletions lib86cpu/core/internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,10 @@ void tc_cache_clear(cpu_t *cpu);
void tc_cache_purge(cpu_t *cpu);
addr_t get_pc(cpu_ctx_t *cpu_ctx);
template<unsigned is_intn = 0, bool is_hw_int = false>
translated_code_t * JIT_API cpu_raise_exception(cpu_ctx_t *cpu_ctx);
uint32_t JIT_API cpu_do_int(cpu_ctx_t *cpu_ctx, uint32_t int_flg);
JIT_API translated_code_t *cpu_raise_exception(cpu_ctx_t *cpu_ctx);
JIT_API uint32_t cpu_do_int(cpu_ctx_t *cpu_ctx, uint32_t int_flg);
void halt_loop(cpu_t *cpu);
void JIT_API tlb_invalidate_(cpu_ctx_t *cpu_ctx, addr_t addr);
JIT_API void tlb_invalidate_(cpu_ctx_t *cpu_ctx, addr_t addr);


// cpu hidden flags (assumed to be constant during exec of a tc, together with a flag subset of eflags)
Expand Down
2 changes: 1 addition & 1 deletion lib86cpu/core/linux/clock.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,4 @@
uint64_t get_current_time();
void tsc_init(cpu_t *cpu);
void cpu_timer_set_now(cpu_t *cpu);
uint32_t JIT_API cpu_timer_helper(cpu_ctx_t *cpu_ctx);
JIT_API uint32_t cpu_timer_helper(cpu_ctx_t *cpu_ctx);
50 changes: 25 additions & 25 deletions lib86cpu/core/memory_management.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -703,31 +703,31 @@ void io_write_helper(cpu_ctx_t *cpu_ctx, port_t port, T val, uint32_t eip)
io_write<T>(cpu_ctx->cpu, port, val);
}

template uint8_t mem_read_helper(cpu_ctx_t *cpu_ctx, addr_t addr, uint32_t eip, uint8_t is_priv);
template uint16_t mem_read_helper(cpu_ctx_t *cpu_ctx, addr_t addr, uint32_t eip, uint8_t is_priv);
template uint32_t mem_read_helper(cpu_ctx_t *cpu_ctx, addr_t addr, uint32_t eip, uint8_t is_priv);
template uint64_t mem_read_helper(cpu_ctx_t *cpu_ctx, addr_t addr, uint32_t eip, uint8_t is_priv);
template uint80_t mem_read_helper(cpu_ctx_t *cpu_ctx, addr_t addr, uint32_t eip, uint8_t is_priv);
template uint128_t mem_read_helper(cpu_ctx_t *cpu_ctx, addr_t addr, uint32_t eip, uint8_t is_priv);
template void mem_write_helper<uint8_t, false>(cpu_ctx_t *cpu_ctx, addr_t addr, uint8_t val, uint32_t eip, uint8_t is_priv);
template void mem_write_helper<uint16_t, false>(cpu_ctx_t *cpu_ctx, addr_t addr, uint16_t val, uint32_t eip, uint8_t is_priv);
template void mem_write_helper<uint32_t, false>(cpu_ctx_t *cpu_ctx, addr_t addr, uint32_t val, uint32_t eip, uint8_t is_priv);
template void mem_write_helper<uint64_t, false>(cpu_ctx_t *cpu_ctx, addr_t addr, uint64_t val, uint32_t eip, uint8_t is_priv);
template void mem_write_helper<uint80_t, false>(cpu_ctx_t *cpu_ctx, addr_t addr, uint80_t val, uint32_t eip, uint8_t is_priv);
template void mem_write_helper<uint128_t, false>(cpu_ctx_t *cpu_ctx, addr_t addr, uint128_t val, uint32_t eip, uint8_t is_priv);
template void mem_write_helper<uint8_t, true>(cpu_ctx_t *cpu_ctx, addr_t addr, uint8_t val, uint32_t eip, uint8_t is_priv);
template void mem_write_helper<uint16_t, true>(cpu_ctx_t *cpu_ctx, addr_t addr, uint16_t val, uint32_t eip, uint8_t is_priv);
template void mem_write_helper<uint32_t, true>(cpu_ctx_t *cpu_ctx, addr_t addr, uint32_t val, uint32_t eip, uint8_t is_priv);
template void mem_write_helper<uint64_t, true>(cpu_ctx_t *cpu_ctx, addr_t addr, uint64_t val, uint32_t eip, uint8_t is_priv);
template void mem_write_helper<uint80_t, true>(cpu_ctx_t *cpu_ctx, addr_t addr, uint80_t val, uint32_t eip, uint8_t is_priv);
template void mem_write_helper<uint128_t, true>(cpu_ctx_t *cpu_ctx, addr_t addr, uint128_t val, uint32_t eip, uint8_t is_priv);

template uint8_t io_read_helper(cpu_ctx_t *cpu_ctx, port_t port, uint32_t eip);
template uint16_t io_read_helper(cpu_ctx_t *cpu_ctx, port_t port, uint32_t eip);
template uint32_t io_read_helper(cpu_ctx_t *cpu_ctx, port_t port, uint32_t eip);
template void io_write_helper(cpu_ctx_t *cpu_ctx, port_t port, uint8_t val, uint32_t eip);
template void io_write_helper(cpu_ctx_t *cpu_ctx, port_t port, uint16_t val, uint32_t eip);
template void io_write_helper(cpu_ctx_t *cpu_ctx, port_t port, uint32_t val, uint32_t eip);
template JIT_API uint8_t mem_read_helper(cpu_ctx_t *cpu_ctx, addr_t addr, uint32_t eip, uint8_t is_priv);
template JIT_API uint16_t mem_read_helper(cpu_ctx_t *cpu_ctx, addr_t addr, uint32_t eip, uint8_t is_priv);
template JIT_API uint32_t mem_read_helper(cpu_ctx_t *cpu_ctx, addr_t addr, uint32_t eip, uint8_t is_priv);
template JIT_API uint64_t mem_read_helper(cpu_ctx_t *cpu_ctx, addr_t addr, uint32_t eip, uint8_t is_priv);
template JIT_API uint80_t mem_read_helper(cpu_ctx_t *cpu_ctx, addr_t addr, uint32_t eip, uint8_t is_priv);
template JIT_API uint128_t mem_read_helper(cpu_ctx_t *cpu_ctx, addr_t addr, uint32_t eip, uint8_t is_priv);
template JIT_API void mem_write_helper<uint8_t, false>(cpu_ctx_t *cpu_ctx, addr_t addr, uint8_t val, uint32_t eip, uint8_t is_priv);
template JIT_API void mem_write_helper<uint16_t, false>(cpu_ctx_t *cpu_ctx, addr_t addr, uint16_t val, uint32_t eip, uint8_t is_priv);
template JIT_API void mem_write_helper<uint32_t, false>(cpu_ctx_t *cpu_ctx, addr_t addr, uint32_t val, uint32_t eip, uint8_t is_priv);
template JIT_API void mem_write_helper<uint64_t, false>(cpu_ctx_t *cpu_ctx, addr_t addr, uint64_t val, uint32_t eip, uint8_t is_priv);
template JIT_API void mem_write_helper<uint80_t, false>(cpu_ctx_t *cpu_ctx, addr_t addr, uint80_t val, uint32_t eip, uint8_t is_priv);
template JIT_API void mem_write_helper<uint128_t, false>(cpu_ctx_t *cpu_ctx, addr_t addr, uint128_t val, uint32_t eip, uint8_t is_priv);
template JIT_API void mem_write_helper<uint8_t, true>(cpu_ctx_t *cpu_ctx, addr_t addr, uint8_t val, uint32_t eip, uint8_t is_priv);
template JIT_API void mem_write_helper<uint16_t, true>(cpu_ctx_t *cpu_ctx, addr_t addr, uint16_t val, uint32_t eip, uint8_t is_priv);
template JIT_API void mem_write_helper<uint32_t, true>(cpu_ctx_t *cpu_ctx, addr_t addr, uint32_t val, uint32_t eip, uint8_t is_priv);
template JIT_API void mem_write_helper<uint64_t, true>(cpu_ctx_t *cpu_ctx, addr_t addr, uint64_t val, uint32_t eip, uint8_t is_priv);
template JIT_API void mem_write_helper<uint80_t, true>(cpu_ctx_t *cpu_ctx, addr_t addr, uint80_t val, uint32_t eip, uint8_t is_priv);
template JIT_API void mem_write_helper<uint128_t, true>(cpu_ctx_t *cpu_ctx, addr_t addr, uint128_t val, uint32_t eip, uint8_t is_priv);

template JIT_API uint8_t io_read_helper(cpu_ctx_t *cpu_ctx, port_t port, uint32_t eip);
template JIT_API uint16_t io_read_helper(cpu_ctx_t *cpu_ctx, port_t port, uint32_t eip);
template JIT_API uint32_t io_read_helper(cpu_ctx_t *cpu_ctx, port_t port, uint32_t eip);
template JIT_API void io_write_helper(cpu_ctx_t *cpu_ctx, port_t port, uint8_t val, uint32_t eip);
template JIT_API void io_write_helper(cpu_ctx_t *cpu_ctx, port_t port, uint16_t val, uint32_t eip);
template JIT_API void io_write_helper(cpu_ctx_t *cpu_ctx, port_t port, uint32_t val, uint32_t eip);

template addr_t get_code_addr<false>(cpu_t *cpu, addr_t addr, uint32_t eip, disas_ctx_t *disas_ctx);
template addr_t get_code_addr<true>(cpu_t *cpu, addr_t addr, uint32_t eip, disas_ctx_t *disas_ctx);
Expand Down
8 changes: 4 additions & 4 deletions lib86cpu/core/memory_management.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,10 @@ template<typename T> T ram_read(cpu_t *cpu, void *ram_ptr);
template<typename T> void ram_write(cpu_t *cpu, void *ram_ptr, T value);
void ram_fetch(cpu_t *cpu, disas_ctx_t *disas_ctx, uint8_t *buffer);
uint64_t as_ram_dispatch_read(cpu_t *cpu, addr_t addr, uint64_t size, const memory_region_t<addr_t> *region, uint8_t *buffer);
template<typename T> T JIT_API mem_read_helper(cpu_ctx_t *cpu_ctx, addr_t addr, uint32_t eip, uint8_t is_priv);
template<typename T, bool dont_write = false> void JIT_API mem_write_helper(cpu_ctx_t *cpu_ctx, addr_t addr, T val, uint32_t eip, uint8_t is_priv);
template<typename T> T JIT_API io_read_helper(cpu_ctx_t * cpu_ctx, port_t port, uint32_t eip);
template<typename T> void JIT_API io_write_helper(cpu_ctx_t * cpu_ctx, port_t port, T val, uint32_t eip);
template<typename T> JIT_API T mem_read_helper(cpu_ctx_t *cpu_ctx, addr_t addr, uint32_t eip, uint8_t is_priv);
template<typename T, bool dont_write = false> JIT_API void mem_write_helper(cpu_ctx_t *cpu_ctx, addr_t addr, T val, uint32_t eip, uint8_t is_priv);
template<typename T> JIT_API T io_read_helper(cpu_ctx_t * cpu_ctx, port_t port, uint32_t eip);
template<typename T> JIT_API void io_write_helper(cpu_ctx_t * cpu_ctx, port_t port, T val, uint32_t eip);

inline constexpr uint64_t tlb_access[2][4] = {
{ TLB_SUP_READ, TLB_SUP_READ, TLB_SUP_READ, TLB_USER_READ },
Expand Down
Loading

0 comments on commit e44c112

Please sign in to comment.