File indexing completed on 2025-05-11 08:24:26
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032 #ifndef _RTEMS_ASM_H
0033 #define _RTEMS_ASM_H
0034
0035
0036
0037
0038
0039 #ifndef ASM
0040 #define ASM
0041 #endif
0042 #include <rtems/score/cpuopts.h>
0043 #include <rtems/score/x86_64.h>
0044 #include <rtems/score/percpu.h>
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056 #ifndef __USER_LABEL_PREFIX__
0057
0058
0059
0060
0061
0062
0063
0064
0065 #define __USER_LABEL_PREFIX__ _
0066 #endif
0067
0068 #undef __REGISTER_PREFIX__
0069 #define __REGISTER_PREFIX__ %
0070
0071 #include <rtems/concat.h>
0072
0073
0074 #define SYM(x) CONCAT1 (__USER_LABEL_PREFIX__, x)
0075
0076
0077 #define REG(x) CONCAT1 (__REGISTER_PREFIX__, x)
0078
0079
0080
0081
0082 #define rax REG (rax)
0083 #define rbx REG (rbx)
0084 #define rcx REG (rcx)
0085 #define rdx REG (rdx)
0086 #define rdi REG (rdi)
0087 #define rsi REG (rsi)
0088 #define rbp REG (rbp)
0089 #define rsp REG (rsp)
0090 #define r8 REG (r8)
0091 #define r9 REG (r9)
0092 #define r10 REG (r10)
0093 #define r11 REG (r11)
0094 #define r12 REG (r12)
0095 #define r13 REG (r13)
0096 #define r14 REG (r14)
0097 #define r15 REG (r15)
0098
0099
0100
0101
0102 #define REG_ARG0 rdi
0103 #define REG_ARG1 rsi
0104 #define REG_ARG2 rdx
0105 #define REG_ARG3 rcx
0106 #define REG_ARG4 r8
0107 #define REG_ARG5 r9
0108
0109
0110
0111
0112
0113
0114
0115
0116 #define BEGIN_CODE_DCL .text
0117
0118 #define END_CODE_DCL
0119
0120 #define BEGIN_DATA_DCL .data
0121
0122 #define END_DATA_DCL
0123
0124 #define BEGIN_CODE .text
0125
0126 #define END_CODE
0127
0128 #define BEGIN_DATA
0129
0130 #define END_DATA
0131
0132
0133
0134 #define BEGIN_BSS
0135
0136 #define END_BSS
0137
0138 #define END
0139
0140
0141
0142
0143
0144
0145
0146 #define PUBLIC(sym) .globl SYM (sym)
0147
0148
0149
0150
0151
0152
0153
0154 #define EXTERN(sym) .globl SYM (sym)
0155
0156 #ifdef RTEMS_SMP
0157
0158 .macro GET_CPU_INDEX REG REG32
0159 .set LAPIC_ID, 0x20
0160 .set LAPIC_ID_SHIFT, 24
0161 movq amd64_lapic_base, \REG
0162 movl LAPIC_ID(\REG), \REG32
0163 shrq $LAPIC_ID_SHIFT, \REG
0164 movzbq amd64_lapic_to_cpu_map(\REG), \REG
0165 .endm
0166
0167
0168 .macro GET_SELF_CPU_CONTROL REG REG32
0169 GET_CPU_INDEX \REG \REG32
0170 shlq $PER_CPU_CONTROL_SIZE_LOG2, \REG
0171 leaq _Per_CPU_Information(\REG), \REG
0172 .endm
0173 #else
0174 .macro GET_CPU_INDEX REG REG32
0175 movq $0, \REG
0176 .endm
0177
0178 .macro GET_SELF_CPU_CONTROL REG REG32
0179 leaq _Per_CPU_Information, \REG
0180 .endm
0181 #endif
0182
0183
0184 .macro GET_SELF_CPU_CONTROL_RAX
0185 GET_SELF_CPU_CONTROL rax,%eax
0186 .endm
0187 .macro GET_SELF_CPU_CONTROL_RBX
0188 GET_SELF_CPU_CONTROL rbx,%ebx
0189 .endm
0190 .macro GET_SELF_CPU_CONTROL_RCX
0191 GET_SELF_CPU_CONTROL rcx,%ecx
0192 .endm
0193 .macro GET_SELF_CPU_CONTROL_RDX
0194 GET_SELF_CPU_CONTROL rdx,%edx
0195 .endm
0196 .macro GET_SELF_CPU_CONTROL_RDI
0197 GET_SELF_CPU_CONTROL rdi,%edi
0198 .endm
0199 .macro GET_SELF_CPU_CONTROL_RSI
0200 GET_SELF_CPU_CONTROL rsi,%esi
0201 .endm
0202 .macro GET_SELF_CPU_CONTROL_R8
0203 GET_SELF_CPU_CONTROL r8,%r8d
0204 .endm
0205 .macro GET_SELF_CPU_CONTROL_R9
0206 GET_SELF_CPU_CONTROL r9,%r9d
0207 .endm
0208 .macro GET_SELF_CPU_CONTROL_R10
0209 GET_SELF_CPU_CONTROL r10,%r10d
0210 .endm
0211 .macro GET_SELF_CPU_CONTROL_R11
0212 GET_SELF_CPU_CONTROL r11,%r11d
0213 .endm
0214 .macro GET_SELF_CPU_CONTROL_R12
0215 GET_SELF_CPU_CONTROL r12,%r12d
0216 .endm
0217 .macro GET_SELF_CPU_CONTROL_R13
0218 GET_SELF_CPU_CONTROL r13,%r13d
0219 .endm
0220 .macro GET_SELF_CPU_CONTROL_R14
0221 GET_SELF_CPU_CONTROL r14,%r14d
0222 .endm
0223 .macro GET_SELF_CPU_CONTROL_R15
0224 GET_SELF_CPU_CONTROL r15,%r15d
0225 .endm
0226
0227 #endif
0228
0229