diff options
Diffstat (limited to 'src/jit/register.h')
-rw-r--r-- | src/jit/register.h | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/src/jit/register.h b/src/jit/register.h new file mode 100644 index 0000000000..9e351037fd --- /dev/null +++ b/src/jit/register.h @@ -0,0 +1,124 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +// clang-format off + +/*****************************************************************************/ +/*****************************************************************************/ +#ifndef REGDEF +#error Must define REGDEF macro before including this file +#endif +#ifndef REGALIAS +#define REGALIAS(alias, realname) +#endif + +#if defined(_TARGET_XARCH_) + +#if defined(_TARGET_X86_) +/* +REGDEF(name, rnum, mask, sname) */ +REGDEF(EAX, 0, 0x01, "eax" ) +REGDEF(ECX, 1, 0x02, "ecx" ) +REGDEF(EDX, 2, 0x04, "edx" ) +REGDEF(EBX, 3, 0x08, "ebx" ) +REGDEF(ESP, 4, 0x10, "esp" ) +REGDEF(EBP, 5, 0x20, "ebp" ) +REGDEF(ESI, 6, 0x40, "esi" ) +REGDEF(EDI, 7, 0x80, "edi" ) +REGALIAS(RAX, EAX) +REGALIAS(RCX, ECX) +REGALIAS(RDX, EDX) +REGALIAS(RBX, EBX) +REGALIAS(RSP, ESP) +REGALIAS(RBP, EBP) +REGALIAS(RSI, ESI) +REGALIAS(RDI, EDI) + +#else // !defined(_TARGET_X86_) + +/* +REGDEF(name, rnum, mask, sname) */ +REGDEF(RAX, 0, 0x0001, "rax" ) +REGDEF(RCX, 1, 0x0002, "rcx" ) +REGDEF(RDX, 2, 0x0004, "rdx" ) +REGDEF(RBX, 3, 0x0008, "rbx" ) +REGDEF(RSP, 4, 0x0010, "rsp" ) +REGDEF(RBP, 5, 0x0020, "rbp" ) +REGDEF(RSI, 6, 0x0040, "rsi" ) +REGDEF(RDI, 7, 0x0080, "rdi" ) +REGDEF(R8, 8, 0x0100, "r8" ) +REGDEF(R9, 9, 0x0200, "r9" ) +REGDEF(R10, 10, 0x0400, "r10" ) +REGDEF(R11, 11, 0x0800, "r11" ) +REGDEF(R12, 12, 0x1000, "r12" ) +REGDEF(R13, 13, 0x2000, "r13" ) +REGDEF(R14, 14, 0x4000, "r14" ) +REGDEF(R15, 15, 0x8000, "r15" ) + +REGALIAS(EAX, RAX) +REGALIAS(ECX, RCX) +REGALIAS(EDX, RDX) +REGALIAS(EBX, RBX) +REGALIAS(ESP, RSP) +REGALIAS(EBP, RBP) +REGALIAS(ESI, RSI) +REGALIAS(EDI, RDI) + +#endif // !defined(_TARGET_X86_) + +#ifdef LEGACY_BACKEND + +REGDEF(STK, 8, 0x00, "STK" ) + +#else // !LEGACY_BACKEND + +#ifdef _TARGET_AMD64_ +#define XMMBASE 16 +#define XMMMASK(x) (__int64(1) << (x+XMMBASE)) +#else // !_TARGET_AMD64_ +#define XMMBASE 8 +#define XMMMASK(x) (__int32(1) << (x+XMMBASE)) +#endif // !_TARGET_AMD64_ + +REGDEF(XMM0, 0+XMMBASE, XMMMASK(0), "mm0" ) +REGDEF(XMM1, 1+XMMBASE, XMMMASK(1), "mm1" ) +REGDEF(XMM2, 2+XMMBASE, XMMMASK(2), "mm2" ) +REGDEF(XMM3, 3+XMMBASE, XMMMASK(3), "mm3" ) +REGDEF(XMM4, 4+XMMBASE, XMMMASK(4), "mm4" ) +REGDEF(XMM5, 5+XMMBASE, XMMMASK(5), "mm5" ) +REGDEF(XMM6, 6+XMMBASE, XMMMASK(6), "mm6" ) +REGDEF(XMM7, 7+XMMBASE, XMMMASK(7), "mm7" ) + +#ifdef _TARGET_X86_ +REGDEF(STK, 8+XMMBASE, 0x0000, "STK" ) +#else // !_TARGET_X86_ +REGDEF(XMM8, 8+XMMBASE, XMMMASK(8), "mm8" ) +REGDEF(XMM9, 9+XMMBASE, XMMMASK(9), "mm9" ) +REGDEF(XMM10, 10+XMMBASE, XMMMASK(10), "mm10" ) +REGDEF(XMM11, 11+XMMBASE, XMMMASK(11), "mm11" ) +REGDEF(XMM12, 12+XMMBASE, XMMMASK(12), "mm12" ) +REGDEF(XMM13, 13+XMMBASE, XMMMASK(13), "mm13" ) +REGDEF(XMM14, 14+XMMBASE, XMMMASK(14), "mm14" ) +REGDEF(XMM15, 15+XMMBASE, XMMMASK(15), "mm15" ) +REGDEF(STK, 16+XMMBASE, 0x0000, "STK" ) +#endif // !_TARGET_X86_ + +#endif // !LEGACY_BACKEND + +#elif defined(_TARGET_ARM_) + #include "registerarm.h" + +#elif defined(_TARGET_ARM64_) + #include "registerarm64.h" + +#else + #error Unsupported or unset target architecture +#endif // target type +/*****************************************************************************/ +#undef REGDEF +#undef REGALIAS +#undef XMMMASK +/*****************************************************************************/ + +// clang-format on |