1 /** 2 * Copyright (c) 2021-2024 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef PANDA_ASM_SUPPORT_H 17 #define PANDA_ASM_SUPPORT_H 18 19 #include "asm_defines.h" 20 #include "shorty_values.h" 21 22 #ifdef PANDA_TARGET_ARM32 23 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage) 24 #define THREAD_REG r10 25 #elif defined(PANDA_TARGET_ARM64) 26 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage) 27 #define THREAD_REG x28 28 #elif defined(PANDA_TARGET_X86) 29 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage) 30 #define THREAD_REG gs 31 #elif defined(PANDA_TARGET_AMD64) 32 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage) 33 #define THREAD_REG r15 34 #else 35 #error "Unsupported target" 36 #endif 37 38 // clang-format off 39 40 #ifndef PANDA_TARGET_WINDOWS 41 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage) 42 #define TYPE_FUNCTION(name) .type name, %function 43 #else 44 #define TYPE_FUNCTION(name) 45 #endif 46 47 #ifdef PANDA_COMPILER_DEBUG_INFO 48 49 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage) 50 #define CFI_STARTPROC .cfi_startproc 51 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage) 52 #define CFI_ENDPROC .cfi_endproc 53 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage) 54 #define CFI_DEF_CFA(reg, offset) .cfi_def_cfa reg, (offset) 55 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage) 56 #define CFI_ADJUST_CFA_OFFSET(offset) .cfi_adjust_cfa_offset (offset) 57 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage) 58 #define CFI_DEF_CFA_REGISTER(reg) .cfi_def_cfa_register reg 59 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage) 60 #define CFI_REL_OFFSET(reg, offset) .cfi_rel_offset reg, (offset) 61 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage) 62 #define CFI_OFFSET(reg, offset) .cfi_offset reg, (offset) 63 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage) 64 #define CFI_REMEMBER_STATE .cfi_remember_state 65 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage) 66 #define CFI_RESTORE_STATE .cfi_restore_state 67 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage) 68 #define CFI_RESTORE(reg) .cfi_restore reg 69 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage) 70 #define CFI_REGISTER(reg, old_reg) .cfi_register reg, old_reg 71 72 #else 73 74 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage) 75 #define CFI_STARTPROC 76 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage) 77 #define CFI_ENDPROC 78 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage) 79 #define CFI_DEF_CFA(reg, offset) 80 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage) 81 #define CFI_ADJUST_CFA_OFFSET(offset) 82 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage) 83 #define CFI_DEF_CFA_REGISTER(reg) 84 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage) 85 #define CFI_REL_OFFSET(reg, offset) 86 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage) 87 #define CFI_OFFSET(reg, offset) 88 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage) 89 #define CFI_REMEMBER_STATE 90 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage) 91 #define CFI_RESTORE_STATE 92 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage) 93 #define CFI_RESTORE(reg) 94 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage) 95 #define CFI_REGISTER(reg, old_reg) 96 97 #endif 98 99 // clang-format on 100 101 #endif // PANDA_ASM_SUPPORT_H 102