22#if !REX_PLATFORM_WIN32
107enum class X64Register : u8 {
111 kRax = kIntRegisterFirst,
127 kIntRegisterLast = kR15,
182 u64 int_registers[16];
249constexpr u32 kARM64LoadLiteralFixed = UINT32_C(0x18000000);
251constexpr u32 kARM64LoadStoreAnyFMask = UINT32_C(0x0A000000);
252constexpr u32 kARM64LoadStoreAnyFixed = UINT32_C(0x08000000);
254constexpr u32 kARM64LoadStorePairAnyFMask = UINT32_C(0x3A000000);
255constexpr u32 kARM64LoadStorePairAnyFixed = UINT32_C(0x28000000);
298 kRegisterOffset = UINT32_C(0x38200800),
303constexpr u32 kARM64LoadStoreUnsignedOffsetFixed = UINT32_C(0x39000000);
318 kInvalidException = 0,
323 enum class AccessViolationOperation : u8 {
335 AccessViolationOperation operation) {
336 code_ = Code::kAccessViolation;
337 thread_context_ = thread_context;
338 fault_address_ = fault_address;
339 access_violation_operation_ = operation;
343 code_ = Code::kIllegalInstruction;
344 thread_context_ = thread_context;
347 Code GetCode()
const {
return code_; }
357 return thread_context_->rip;
359 return thread_context_->pc;
366 void SetResumePC(u64 pc) {
368 thread_context_->rip = pc;
370 thread_context_->pc = pc;
382 u64& ModifyIntRegister(u32 index) {
384 modified_int_registers_ |= UINT16_C(1) << index;
385 return thread_context_->int_registers[index];
389 u16 GetModifiedIntRegisters()
const {
return modified_int_registers_; }
396 VectorRegister& ModifyXMMRegister(u32 index) {
398 modified_xmm_registers_ |= UINT16_C(1) << index;
399 return thread_context_->xmm_registers[index];
405 u16 GetModifiedXMMRegisters()
const {
return modified_xmm_registers_; }
412 u64& ModifyXRegister(u32 index) {
414 modified_x_registers_ |= UINT32_C(1) << index;
415 return thread_context_->x[index];
421 u32 GetModifiedXRegisters()
const {
return modified_x_registers_; }
428 VectorRegister& ModifyVRegister(u32 index) {
430 modified_v_registers_ |= UINT32_C(1) << index;
431 return thread_context_->v[index];
437 u32 GetModifiedVRegisters()
const {
return modified_v_registers_; }
443 AccessViolationOperation GetAccessViolationOperation()
const {
444 return access_violation_operation_;
449 HostThreadContext* thread_context_ =
nullptr;
451 u16 modified_int_registers_ = 0;
452 u16 modified_xmm_registers_ = 0;
454 u32 modified_x_registers_ = 0;
455 u32 modified_v_registers_ = 0;
457 u64 fault_address_ = 0;
458 AccessViolationOperation access_violation_operation_ = AccessViolationOperation::kUnknown;
481#if !REX_PLATFORM_WIN32
504 void* signal_context);
#define REX_ASSERT_ALWAYS(...)
Definition assert.h:102
#define REX_ASSERT(cond,...)
Definition assert.h:84
Definition exception_handler.h:158
Integer types, byte order wrappers and size literals.