Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void EE_JIT64::write_gpr(EmotionEngine &ee, REG_64 addr_reg, REG_64 value_reg, int size)
- {
- REG_64 temp = lalloc_int_reg(ee, 0, REG_TYPE::INTSCRATCHPAD, REG_STATE::SCRATCHPAD);
- emitter.MOV32_REG(addr_reg, temp);
- //uint8_t* mem = tlb_map[addr / 4096]
- emitter.SHR32_REG_IMM(12, temp);
- emitter.SHL32_REG_IMM(3, temp);
- emitter.ADD64_REG(REG_64::R15, temp);
- emitter.MOV64_FROM_MEM(temp, temp);
- //if (mem > (uint8_t*)1)
- emitter.CMP64_IMM(1, temp);
- uint8_t* is_mem_dest = emitter.JCC_NEAR_DEFERRED(ConditionCode::G);
- //else if (mem == (uint8_t*)1)
- uint8_t* is_mmio_dest = emitter.JCC_NEAR_DEFERRED(ConditionCode::E);
- //else
- emitter.MOV32_TO_MEM(value_reg, temp);
- emitter.set_jump_dest(is_mmio_dest);
- //return e->readT(address & 0x1FFFFFFF)
- emitter.AND32_REG_IMM(0x1FFFFFFF, addr_reg);
- prepare_abi((uint64_t)ee.e);
- prepare_abi_reg(addr_reg);
- prepare_abi_reg(value_reg);
- switch (size)
- {
- case 8:
- call_abi_func((uint64_t)emulator_write8);
- break;
- case 16:
- call_abi_func((uint64_t)emulator_write16);
- break;
- case 32:
- call_abi_func((uint64_t)emulator_write32);
- break;
- case 64:
- call_abi_func((uint64_t)emulator_write64);
- break;
- default:
- Errors::die("[EE_JIT64] Unrecognized size %d in read_gpr", size);
- }
- uint8_t* mmio_finished_dest = emitter.JMP_NEAR_DEFERRED();
- emitter.set_jump_dest(is_mem_dest);
- //*(T*)&mem[address & 4095] = value
- emitter.AND32_REG_IMM(0xFFF, addr_reg);
- emitter.ADD64_REG(temp, addr_reg);
- switch (size)
- {
- case 8:
- emitter.MOV8_TO_MEM(value_reg, addr_reg);
- break;
- case 16:
- emitter.MOV16_TO_MEM(value_reg, addr_reg);
- break;
- case 32:
- emitter.MOV32_TO_MEM(value_reg, addr_reg);
- break;
- case 64:
- emitter.MOV64_TO_MEM(value_reg, addr_reg);
- break;
- default:
- Errors::die("[EE_JIT64] Unrecognized size %d in write_gpr", size);
- }
- emitter.set_jump_dest(mmio_finished_dest);
- free_int_reg(ee, temp);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement