mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-06-24 12:44:59 -07:00
126 lines
2.4 KiB
C
126 lines
2.4 KiB
C
// Copyright (c) Epic Games Tools
|
|
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
|
|
|
#ifndef REGS_H
|
|
#define REGS_H
|
|
|
|
////////////////////////////////
|
|
//~ rjf: Register Usage Kinds
|
|
|
|
typedef enum REGS_UsageKind
|
|
{
|
|
REGS_UsageKind_Normal,
|
|
REGS_UsageKind_Vector,
|
|
}
|
|
REGS_UsageKind;
|
|
|
|
////////////////////////////////
|
|
//~ rjf: Register Types
|
|
|
|
typedef U8 REGS_RegCode;
|
|
typedef U8 REGS_AliasCode;
|
|
|
|
typedef union REGS_Reg16 REGS_Reg16;
|
|
union REGS_Reg16
|
|
{
|
|
U8 v[2];
|
|
U16 u16;
|
|
};
|
|
|
|
typedef union REGS_Reg32 REGS_Reg32;
|
|
union REGS_Reg32
|
|
{
|
|
U8 v[4];
|
|
U32 u32;
|
|
F32 f32;
|
|
};
|
|
|
|
typedef union REGS_Reg64 REGS_Reg64;
|
|
union REGS_Reg64
|
|
{
|
|
U8 v[8];
|
|
U64 u64;
|
|
F64 f64;
|
|
};
|
|
|
|
#pragma pack(push, 1)
|
|
typedef struct REGS_Reg80 REGS_Reg80;
|
|
struct REGS_Reg80
|
|
{
|
|
U64 int1_frac63;
|
|
U16 sign1_exp15;
|
|
};
|
|
#pragma pack(pop)
|
|
|
|
typedef union REGS_Reg128 REGS_Reg128;
|
|
union REGS_Reg128
|
|
{
|
|
U8 v[16];
|
|
U32 u32[4];
|
|
F32 f32[4];
|
|
U64 u64[2];
|
|
F64 f64[2];
|
|
};
|
|
|
|
typedef union REGS_Reg256 REGS_Reg256;
|
|
union REGS_Reg256
|
|
{
|
|
U8 v[32];
|
|
U32 u32[8];
|
|
F32 f32[8];
|
|
U64 u64[4];
|
|
F64 f64[4];
|
|
};
|
|
|
|
typedef union REGS_Reg512 REGS_Reg512;
|
|
union REGS_Reg512
|
|
{
|
|
U8 v[64];
|
|
U32 u32[16];
|
|
F32 f32[16];
|
|
U64 u64[8];
|
|
F64 f64[8];
|
|
};
|
|
|
|
////////////////////////////////
|
|
//~ rjf: Register Slicing Types
|
|
|
|
typedef struct REGS_Rng REGS_Rng;
|
|
struct REGS_Rng
|
|
{
|
|
U16 byte_off;
|
|
U16 byte_size;
|
|
};
|
|
|
|
typedef struct REGS_Slice REGS_Slice;
|
|
struct REGS_Slice
|
|
{
|
|
U16 code;
|
|
U8 byte_off;
|
|
U8 byte_size;
|
|
};
|
|
|
|
////////////////////////////////
|
|
//~ rjf: Generated Code
|
|
|
|
#include "regs/generated/regs.meta.h"
|
|
|
|
////////////////////////////////
|
|
//~ rjf: Helpers
|
|
|
|
internal U64 regs_block_size_from_arch(Arch arch);
|
|
internal U64 regs_reg_code_count_from_arch(Arch arch);
|
|
internal U64 regs_alias_code_count_from_arch(Arch arch);
|
|
internal String8 *regs_reg_code_string_table_from_arch(Arch arch);
|
|
internal String8 *regs_alias_code_string_table_from_arch(Arch arch);
|
|
internal REGS_Rng *regs_reg_code_rng_table_from_arch(Arch arch);
|
|
internal REGS_Slice *regs_alias_code_slice_table_from_arch(Arch arch);
|
|
internal REGS_UsageKind *regs_reg_code_usage_kind_table_from_arch(Arch arch);
|
|
internal REGS_UsageKind *regs_alias_code_usage_kind_table_from_arch(Arch arch);
|
|
internal U64 regs_rip_from_arch_block(Arch arch, void *block);
|
|
internal U64 regs_rsp_from_arch_block(Arch arch, void *block);
|
|
internal void regs_arch_block_write_rip(Arch arch, void *block, U64 rip);
|
|
internal void regs_arch_block_write_rsp(Arch arch, void *block, U64 rsp);
|
|
|
|
#endif // REGS_H
|