You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
vmprofiler/src/vmlifters/read.cpp

40 lines
1.3 KiB

#include <vmlifters.hpp>
namespace vm::lifters
{
vm::lifters::lifter_t readq = {
// pop vregX
// ldd vregX, vregX, 0
// push vregX
vm::handler::READQ,
[]( vtil::basic_block *blk, vm::instrs::virt_instr_t *vinstr, vmp2::v3::code_block_t *code_blk ) {
auto [ t0, t1 ] = blk->tmp( 64, 64 );
blk->pop( t0 );
blk->ldd( t1, t0, vtil::make_imm( 0ull ) );
blk->push( t1 );
} };
vm::lifters::lifter_t readdw = {
// pop vregX
// ldd vregX, vregX, 0
// push vregX
vm::handler::READDW,
[]( vtil::basic_block *blk, vm::instrs::virt_instr_t *vinstr, vmp2::v3::code_block_t *code_blk ) {
auto [ t0, t1 ] = blk->tmp( 64, 32 );
blk->pop( t0 );
blk->ldd( t1, t0, vtil::make_imm( 0ull ) );
blk->push( t1 );
} };
vm::lifters::lifter_t readw = {
// pop vregX
// ldd vregX, vregX, 0
// push vregX
vm::handler::READW,
[]( vtil::basic_block *blk, vm::instrs::virt_instr_t *vinstr, vmp2::v3::code_block_t *code_blk ) {
auto [ t0, t1 ] = blk->tmp( 64, 16 );
blk->pop( t0 );
blk->ldd( t1, t0, vtil::make_imm( 0ull ) );
blk->push( t1 );
} };
} // namespace vm::lifters