mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-10-05 15:35:42 +00:00
107 lines
2.6 KiB
C
107 lines
2.6 KiB
C
// Copyright (c) Epic Games Tools
|
|
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
|
|
|
////////////////////////////////
|
|
//~ rjf: Generated Code
|
|
|
|
#include "regs/generated/regs.meta.c"
|
|
|
|
////////////////////////////////
|
|
//~ rjf: Helpers
|
|
|
|
internal REGS_RegCode
|
|
regs_reg_code_from_name(Arch arch, String8 name)
|
|
{
|
|
String8 *name_table = regs_reg_code_string_table_from_arch(arch);
|
|
U64 name_count = regs_reg_code_count_from_arch(arch);
|
|
for EachIndex(i, name_count)
|
|
{
|
|
if(str8_match(name_table[i], name, StringMatchFlag_CaseInsensitive))
|
|
{
|
|
return (REGS_RegCode)i;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
internal REGS_AliasCode
|
|
regs_alias_code_from_name(Arch arch, String8 name)
|
|
{
|
|
String8 *alias_table = regs_alias_code_string_table_from_arch(arch);
|
|
U64 alias_count = regs_alias_code_count_from_arch(arch);
|
|
for EachIndex(i, alias_count)
|
|
{
|
|
if(str8_match(alias_table[i], name, StringMatchFlag_CaseInsensitive))
|
|
{
|
|
return (REGS_RegCode)i;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
internal Rng1U64
|
|
regs_range_from_code(Arch arch, B32 is_alias, U64 reg_code)
|
|
{
|
|
Rng1U64 range = {0};
|
|
if(is_alias)
|
|
{
|
|
REGS_Slice slice = regs_alias_code_slice_table_from_arch(arch)[reg_code];
|
|
REGS_Rng rng = regs_reg_code_rng_table_from_arch(arch)[reg_code];
|
|
range = r1u64(rng.byte_off + slice.byte_off, rng.byte_off + slice.byte_off + slice.byte_size);
|
|
}
|
|
else
|
|
{
|
|
REGS_Rng rng = regs_reg_code_rng_table_from_arch(arch)[reg_code];
|
|
range = r1u64(rng.byte_off, rng.byte_off + rng.byte_size);
|
|
}
|
|
return range;
|
|
}
|
|
|
|
internal U64
|
|
regs_rip_from_arch_block(Arch arch, void *block)
|
|
{
|
|
U64 result = 0;
|
|
if(block != 0) switch(arch)
|
|
{
|
|
default:{}break;
|
|
case Arch_x64:{result = ((REGS_RegBlockX64 *)block)->rip.u64;}break;
|
|
case Arch_x86:{NotImplemented;}break;
|
|
}
|
|
return result;
|
|
}
|
|
|
|
internal U64
|
|
regs_rsp_from_arch_block(Arch arch, void *block)
|
|
{
|
|
U64 result = 0;
|
|
if(block != 0) switch(arch)
|
|
{
|
|
default:{}break;
|
|
case Arch_x64:{result = ((REGS_RegBlockX64 *)block)->rsp.u64;}break;
|
|
case Arch_x86:{NotImplemented;}break;
|
|
}
|
|
return result;
|
|
}
|
|
|
|
internal void
|
|
regs_arch_block_write_rip(Arch arch, void *block, U64 rip)
|
|
{
|
|
if(block != 0) switch(arch)
|
|
{
|
|
default:{}break;
|
|
case Arch_x64:{((REGS_RegBlockX64 *)block)->rip.u64 = rip;}break;
|
|
case Arch_x86:{NotImplemented;}break;
|
|
}
|
|
}
|
|
|
|
internal void
|
|
regs_arch_block_write_rsp(Arch arch, void *block, U64 rsp)
|
|
{
|
|
if(block != 0) switch(arch)
|
|
{
|
|
default:{}break;
|
|
case Arch_x64:{((REGS_RegBlockX64 *)block)->rsp.u64 = rsp;}break;
|
|
case Arch_x86:{NotImplemented;}break;
|
|
}
|
|
}
|