• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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