[CPU] Change thunk layout and fix Linux thunk misalignment

This commit is contained in:
Prism Tutaj
2019-12-02 23:30:41 -06:00
committed by Rick Gibbed
parent f0723c211b
commit 1cce25d5e7
2 changed files with 101 additions and 95 deletions

View File

@@ -27,78 +27,71 @@ class StackLayout {
* NOTE: stack must always be 16b aligned.
*
* Thunk stack:
* +------------------+
* | arg temp, 3 * 8 | rsp + 0
* | |
* | |
* +------------------+
* | scratch, 16b | rsp + 24
* | |
* +------------------+
* | rbx | rsp + 40
* +------------------+
* | rcx / context | rsp + 48
* +------------------+
* | rbp | rsp + 56
* +------------------+
* | rsi | rsp + 64
* +------------------+
* | rdi | rsp + 72
* +------------------+
* | r12 | rsp + 80
* +------------------+
* | r13 | rsp + 88
* +------------------+
* | r14 | rsp + 96
* +------------------+
* | r15 | rsp + 104
* +------------------+
* | xmm6/0 | rsp + 112
* | |
* +------------------+
* | xmm7/1 | rsp + 128
* | |
* +------------------+
* | xmm8/2 | rsp + 144
* | |
* +------------------+
* | xmm9/3 | rsp + 160
* | |
* +------------------+
* | xmm10/4 | rsp + 176
* | |
* +------------------+
* | xmm11/5 | rsp + 192
* | |
* +------------------+
* | xmm12 | rsp + 208
* | |
* +------------------+
* | xmm13 | rsp + 224
* | |
* +------------------+
* | xmm14 | rsp + 240
* | |
* +------------------+
* | xmm15 | rsp + 256
* | |
* +------------------+
* | scratch, 8b | rsp + 272
* | |
* +------------------+
* | (return address) | rsp + 280
* +------------------+
* | (rcx home) | rsp + 288
* +------------------+
* | (rdx home) | rsp + 296
* +------------------+
* Non-Volatile Volatile
* +------------------+------------------+
* | arg temp, 3 * 8 | arg temp, 3 * 8 | rsp + 0x000
* | | |
* | | |
* +------------------+------------------+
* | rbx | (unused) | rsp + 0x018
* +------------------+------------------+
* | rbp | rcx | rsp + 0x020
* +------------------+------------------+
* | rcx (Win32) | rdx | rsp + 0x028
* +------------------+------------------+
* | rsi (Win32) | rsi (Linux) | rsp + 0x030
* +------------------+------------------+
* | rdi (Win32) | rdi (Linux) | rsp + 0x038
* +------------------+------------------+
* | r12 | r8 | rsp + 0x040
* +------------------+------------------+
* | r13 | r9 | rsp + 0x048
* +------------------+------------------+
* | r14 | r10 | rsp + 0x050
* +------------------+------------------+
* | r15 | r11 | rsp + 0x058
* +------------------+------------------+
* | xmm6 (Win32) | (unused) | rsp + 0x060
* | | |
* +------------------+------------------+
* | xmm7 (Win32) | xmm1 | rsp + 0x070
* | | |
* +------------------+------------------+
* | xmm8 (Win32) | xmm2 | rsp + 0x080
* | | |
* +------------------+------------------+
* | xmm9 (Win32) | xmm3 | rsp + 0x090
* | | |
* +------------------+------------------+
* | xmm10 (Win32) | xmm4 | rsp + 0x0A0
* | | |
* +------------------+------------------+
* | xmm11 (Win32) | xmm5 | rsp + 0x0B0
* | | |
* +------------------+------------------+
* | xmm12 (Win32) | (unused) | rsp + 0x0C0
* | | |
* +------------------+------------------+
* | xmm13 (Win32) | (unused) | rsp + 0x0D0
* | | |
* +------------------+------------------+
* | xmm14 (Win32) | (unused) | rsp + 0x0E0
* | | |
* +------------------+------------------+
* | xmm15 (Win32) | (unused) | rsp + 0x0F0
* | | |
* +------------------+------------------+
* | (return address) | (return address) | rsp + 0x100
* +------------------+------------------+
* | (rcx home) | (rcx home) | rsp + 0x108
* +------------------+------------------+
* | (rdx home) | (rdx home) | rsp + 0x110
* +------------------+------------------+
*/
XEPACKEDSTRUCT(Thunk, {
uint64_t arg_temp[3];
uint8_t scratch[16];
uint64_t r[10];
uint64_t r[9];
vec128_t xmm[10];
uint64_t dummy;
});
static_assert(sizeof(Thunk) % 16 == 0,
"sizeof(Thunk) must be a multiple of 16!");