Duckstation/src/common/fastjmp.h

45 lines
917 B
C
Raw Normal View History

2019-09-09 07:01:26 +00:00
#pragma once
#ifdef _MSC_VER
__declspec(align(16)) struct fastjmp_buf
{
unsigned __int64 Rip;
unsigned __int64 Rbx;
unsigned __int64 Rsp;
unsigned __int64 Rbp;
unsigned __int64 Rsi;
unsigned __int64 Rdi;
unsigned __int64 R12;
unsigned __int64 R13;
unsigned __int64 R14;
unsigned __int64 R15;
unsigned __int64 Xmm6[2];
unsigned __int64 Xmm7[2];
unsigned __int64 Xmm8[2];
unsigned __int64 Xmm9[2];
unsigned __int64 Xmm10[2];
unsigned __int64 Xmm11[2];
unsigned __int64 Xmm12[2];
unsigned __int64 Xmm13[2];
unsigned __int64 Xmm14[2];
unsigned __int64 Xmm15[2];
// unsigned long MxCsr;
// unsigned short FpCsr;
// unsigned short Spare;
};
extern "C" {
void fastjmp_set(fastjmp_buf*);
void fastjmp_jmp(fastjmp_buf*);
}
#else
#include <setjmp.h>
#define fastjmp_buf jmp_buf
#define fastjmp_set(buf) setjmp(*(buf))
#define fastjmp_jmp(buf) longjmp(*(buf), 0)
#endif