// Copyright 2019 The Marl Authors. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #define MARL_REG_RBX 0x00 #define MARL_REG_RBP 0x08 #define MARL_REG_R12 0x10 #define MARL_REG_R13 0x18 #define MARL_REG_R14 0x20 #define MARL_REG_R15 0x28 #define MARL_REG_RDI 0x30 #define MARL_REG_RSI 0x38 #define MARL_REG_RSP 0x40 #define MARL_REG_RIP 0x48 #if defined(__APPLE__) #define MARL_ASM_SYMBOL(x) _##x #else #define MARL_ASM_SYMBOL(x) x #endif #ifndef MARL_BUILD_ASM #include struct marl_fiber_context { // callee-saved registers uintptr_t RBX; uintptr_t RBP; uintptr_t R12; uintptr_t R13; uintptr_t R14; uintptr_t R15; // parameter registers uintptr_t RDI; uintptr_t RSI; // stack and instruction registers uintptr_t RSP; uintptr_t RIP; }; #ifdef __cplusplus #include static_assert(offsetof(marl_fiber_context, RBX) == MARL_REG_RBX, "Bad register offset"); static_assert(offsetof(marl_fiber_context, RBP) == MARL_REG_RBP, "Bad register offset"); static_assert(offsetof(marl_fiber_context, R12) == MARL_REG_R12, "Bad register offset"); static_assert(offsetof(marl_fiber_context, R13) == MARL_REG_R13, "Bad register offset"); static_assert(offsetof(marl_fiber_context, R14) == MARL_REG_R14, "Bad register offset"); static_assert(offsetof(marl_fiber_context, R15) == MARL_REG_R15, "Bad register offset"); static_assert(offsetof(marl_fiber_context, RDI) == MARL_REG_RDI, "Bad register offset"); static_assert(offsetof(marl_fiber_context, RSI) == MARL_REG_RSI, "Bad register offset"); static_assert(offsetof(marl_fiber_context, RSP) == MARL_REG_RSP, "Bad register offset"); static_assert(offsetof(marl_fiber_context, RIP) == MARL_REG_RIP, "Bad register offset"); #endif // __cplusplus #endif // MARL_BUILD_ASM