1515#ifndef __ARM64INTR_H
1616#define __ARM64INTR_H
1717
18+ #define ARM64_SYSREG (op0 , op1 , crn , crm , op2 ) \
19+ ( ((op0 & 1) << 14) | \
20+ ((op1 & 7) << 11) | \
21+ ((crn & 15) << 7) | \
22+ ((crm & 15) << 3) | \
23+ ((op2 & 7) << 0) )
24+
25+ #define ARM64_FPCR ARM64_SYSREG(3, 3, 4, 4, 0) // Floating point control register (EL0)
26+ #define ARM64_FPSR ARM64_SYSREG(3, 3, 4, 4, 1) // Floating point status register (EL0)
27+
1828typedef enum
1929{
2030 _ARM64_BARRIER_SY = 0xF ,
@@ -31,5 +41,73 @@ typedef enum
3141 _ARM64_BARRIER_OSHLD = 0x1
3242} _ARM64INTR_BARRIER_TYPE ;
3343
44+ #if defined(__cplusplus )
45+ extern "C" {
46+ #endif
47+
48+ void __dmb (unsigned int _Type );
49+ void __dsb (unsigned int _Type );
50+ void __isb (unsigned int _Type );
51+
52+ unsigned __int8 __ldar8 (unsigned __int8 volatile * _Target );
53+ unsigned __int16 __ldar16 (unsigned __int16 volatile * _Target );
54+ unsigned __int32 __ldar32 (unsigned __int32 volatile * _Target );
55+ unsigned __int64 __ldar64 (unsigned __int64 volatile * _Target );
56+
57+ unsigned __int8 __ldapr8 (unsigned __int8 volatile * _Target );
58+ unsigned __int16 __ldapr16 (unsigned __int16 volatile * _Target );
59+ unsigned __int32 __ldapr32 (unsigned __int32 volatile * _Target );
60+ unsigned __int64 __ldapr64 (unsigned __int64 volatile * _Target );
61+
62+ unsigned __int8 __load_acquire8 (unsigned __int8 volatile * _Target );
63+ unsigned __int16 __load_acquire16 (unsigned __int16 volatile * _Target );
64+ unsigned __int32 __load_acquire32 (unsigned __int32 volatile * _Target );
65+ unsigned __int64 __load_acquire64 (unsigned __int64 volatile * _Target );
66+
67+ void __stlr8 (unsigned __int8 volatile * _Target , unsigned __int8 _Value );
68+ void __stlr16 (unsigned __int16 volatile * _Target , unsigned __int16 _Value );
69+ void __stlr32 (unsigned __int32 volatile * _Target , unsigned __int32 _Value );
70+ void __stlr64 (unsigned __int64 volatile * _Target , unsigned __int64 _Value );
71+
72+ unsigned __int8 __swp8 (unsigned __int8 volatile * _Target , unsigned __int8 _Value );
73+ unsigned __int16 __swp16 (unsigned __int16 volatile * _Target , unsigned __int16 _Value );
74+ unsigned __int32 __swp32 (unsigned __int32 volatile * _Target , unsigned __int32 _Value );
75+ unsigned __int64 __swp64 (unsigned __int64 volatile * _Target , unsigned __int64 _Value );
76+ unsigned __int8 __swpa8 (unsigned __int8 volatile * _Target , unsigned __int8 _Value );
77+ unsigned __int16 __swpa16 (unsigned __int16 volatile * _Target , unsigned __int16 _Value );
78+ unsigned __int32 __swpa32 (unsigned __int32 volatile * _Target , unsigned __int32 _Value );
79+ unsigned __int64 __swpa64 (unsigned __int64 volatile * _Target , unsigned __int64 _Value );
80+ unsigned __int8 __swpl8 (unsigned __int8 volatile * _Target , unsigned __int8 _Value );
81+ unsigned __int16 __swpl16 (unsigned __int16 volatile * _Target , unsigned __int16 _Value );
82+ unsigned __int32 __swpl32 (unsigned __int32 volatile * _Target , unsigned __int32 _Value );
83+ unsigned __int64 __swpl64 (unsigned __int64 volatile * _Target , unsigned __int64 _Value );
84+ unsigned __int8 __swpal8 (unsigned __int8 volatile * _Target , unsigned __int8 _Value );
85+ unsigned __int16 __swpal16 (unsigned __int16 volatile * _Target , unsigned __int16 _Value );
86+ unsigned __int32 __swpal32 (unsigned __int32 volatile * _Target , unsigned __int32 _Value );
87+ unsigned __int64 __swpal64 (unsigned __int64 volatile * _Target , unsigned __int64 _Value );
88+
89+ unsigned __int8 __cas8 (unsigned __int8 volatile * _Target , unsigned __int8 _Comp , unsigned __int8 _Value );
90+ unsigned __int16 __cas16 (unsigned __int16 volatile * _Target , unsigned __int16 _Comp , unsigned __int16 _Value );
91+ unsigned __int32 __cas32 (unsigned __int32 volatile * _Target , unsigned __int32 _Comp , unsigned __int32 _Value );
92+ unsigned __int64 __cas64 (unsigned __int64 volatile * _Target , unsigned __int64 _Comp , unsigned __int64 _Value );
93+ unsigned __int8 __casa8 (unsigned __int8 volatile * _Target , unsigned __int8 _Comp , unsigned __int8 _Value );
94+ unsigned __int16 __casa16 (unsigned __int16 volatile * _Target , unsigned __int16 _Comp , unsigned __int16 _Value );
95+ unsigned __int32 __casa32 (unsigned __int32 volatile * _Target , unsigned __int32 _Comp , unsigned __int32 _Value );
96+ unsigned __int64 __casa64 (unsigned __int64 volatile * _Target , unsigned __int64 _Comp , unsigned __int64 _Value );
97+ unsigned __int8 __casl8 (unsigned __int8 volatile * _Target , unsigned __int8 _Comp , unsigned __int8 _Value );
98+ unsigned __int16 __casl16 (unsigned __int16 volatile * _Target , unsigned __int16 _Comp , unsigned __int16 _Value );
99+ unsigned __int32 __casl32 (unsigned __int32 volatile * _Target , unsigned __int32 _Comp , unsigned __int32 _Value );
100+ unsigned __int64 __casl64 (unsigned __int64 volatile * _Target , unsigned __int64 _Comp , unsigned __int64 _Value );
101+ unsigned __int8 __casal8 (unsigned __int8 volatile * _Target , unsigned __int8 _Comp , unsigned __int8 _Value );
102+ unsigned __int16 __casal16 (unsigned __int16 volatile * _Target , unsigned __int16 _Comp , unsigned __int16 _Value );
103+ unsigned __int32 __casal32 (unsigned __int32 volatile * _Target , unsigned __int32 _Comp , unsigned __int32 _Value );
104+ unsigned __int64 __casal64 (unsigned __int64 volatile * _Target , unsigned __int64 _Comp , unsigned __int64 _Value );
105+
106+ #ifdef __cplusplus
107+ }
108+ #endif
109+
110+ #include <arm_acle.h>
111+
34112#endif /* __ARM64INTR_H */
35113#endif /* _MSC_VER */
0 commit comments