ReactOS 0.4.17-dev-573-g8315b8c
arm64intr.h File Reference

Go to the source code of this file.

Typedefs

typedef enum _tag_ARM64INTR_BARRIER_TYPE _ARM64INTR_BARRIER_TYPE
 

Enumerations

enum  _tag_ARM64INTR_BARRIER_TYPE {
  _ARM64_BARRIER_SY = 0xF , _ARM64_BARRIER_ST = 0xE , _ARM64_BARRIER_LD = 0xD , _ARM64_BARRIER_ISH = 0xB ,
  _ARM64_BARRIER_ISHST = 0xA , _ARM64_BARRIER_ISHLD = 0x9 , _ARM64_BARRIER_NSH = 0x7 , _ARM64_BARRIER_NSHST = 0x6 ,
  _ARM64_BARRIER_NSHLD = 0x5 , _ARM64_BARRIER_OSH = 0x3 , _ARM64_BARRIER_OSHST = 0x2 , _ARM64_BARRIER_OSHLD = 0x1
}
 

Functions

void __dmb (unsigned int _Type)
 
void __dsb (unsigned int _Type)
 
void __isb (unsigned int _Type)
 

Typedef Documentation

◆ _ARM64INTR_BARRIER_TYPE

Enumeration Type Documentation

◆ _tag_ARM64INTR_BARRIER_TYPE

Enumerator
_ARM64_BARRIER_SY 
_ARM64_BARRIER_ST 
_ARM64_BARRIER_LD 
_ARM64_BARRIER_ISH 
_ARM64_BARRIER_ISHST 
_ARM64_BARRIER_ISHLD 
_ARM64_BARRIER_NSH 
_ARM64_BARRIER_NSHST 
_ARM64_BARRIER_NSHLD 
_ARM64_BARRIER_OSH 
_ARM64_BARRIER_OSHST 
_ARM64_BARRIER_OSHLD 

Definition at line 14 of file arm64intr.h.

15{
@ _ARM64_BARRIER_NSH
Definition: arm64intr.h:22
@ _ARM64_BARRIER_SY
Definition: arm64intr.h:16
@ _ARM64_BARRIER_ISHLD
Definition: arm64intr.h:21
@ _ARM64_BARRIER_NSHLD
Definition: arm64intr.h:24
@ _ARM64_BARRIER_LD
Definition: arm64intr.h:18
@ _ARM64_BARRIER_OSHLD
Definition: arm64intr.h:27
@ _ARM64_BARRIER_ISHST
Definition: arm64intr.h:20
@ _ARM64_BARRIER_OSHST
Definition: arm64intr.h:26
@ _ARM64_BARRIER_ST
Definition: arm64intr.h:17
@ _ARM64_BARRIER_NSHST
Definition: arm64intr.h:23
@ _ARM64_BARRIER_ISH
Definition: arm64intr.h:19
@ _ARM64_BARRIER_OSH
Definition: arm64intr.h:25
enum _tag_ARM64INTR_BARRIER_TYPE _ARM64INTR_BARRIER_TYPE

Function Documentation

◆ __dmb()

void __dmb ( unsigned int  _Type)

Definition at line 694 of file intrin_arm64.h.

695{
696 /* MS _ARM64_BARRIER_* constants: OSHLD=1 OSHST=2 OSH=3 NSHLD=5 NSHST=6
697 NSH=7 ISHLD=9 ISHST=10 ISH=11 LD=13 ST=14 SY=15. The dmb option must
698 be an assembler literal, so we dispatch on the runtime value. */
699 switch (type)
700 {
701 case 1: __asm__ __volatile__("dmb oshld" ::: "memory"); break;
702 case 2: __asm__ __volatile__("dmb oshst" ::: "memory"); break;
703 case 3: __asm__ __volatile__("dmb osh" ::: "memory"); break;
704 case 5: __asm__ __volatile__("dmb nshld" ::: "memory"); break;
705 case 6: __asm__ __volatile__("dmb nshst" ::: "memory"); break;
706 case 7: __asm__ __volatile__("dmb nsh" ::: "memory"); break;
707 case 9: __asm__ __volatile__("dmb ishld" ::: "memory"); break;
708 case 10: __asm__ __volatile__("dmb ishst" ::: "memory"); break;
709 case 11: __asm__ __volatile__("dmb ish" ::: "memory"); break;
710 case 13: __asm__ __volatile__("dmb ld" ::: "memory"); break;
711 case 14: __asm__ __volatile__("dmb st" ::: "memory"); break;
712 default: __asm__ __volatile__("dmb sy" ::: "memory"); break;
713 }
714}
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
__asm__(".p2align 4, 0x90\n" ".seh_proc __seh2_global_filter_func\n" "__seh2_global_filter_func:\n" "\tsub %rbp, %rax\n" "\tpush %rbp\n" "\t.seh_pushreg %rbp\n" "\tpush %rbx\n" "\t.seh_pushreg %rbx\n" "\tpush %rdi\n" "\t.seh_pushreg %rdi\n" "\tpush %rsi\n" "\t.seh_pushreg %rsi\n" "\tpush %r12\n" "\t.seh_pushreg %r12\n" "\tpush %r13\n" "\t.seh_pushreg %r13\n" "\tpush %r14\n" "\t.seh_pushreg %r14\n" "\tpush %r15\n" "\t.seh_pushreg %r15\n" "\tsub $40, %rsp\n" "\t.seh_stackalloc 40\n" "\t.seh_endprologue\n" "\tsub %rax, %rdx\n" "\tmov %rdx, %rbp\n" "\tjmp *%r8\n" "__seh2_global_filter_func_exit:\n" "\t.p2align 4\n" "\tadd $40, %rsp\n" "\tpop %r15\n" "\tpop %r14\n" "\tpop %r13\n" "\tpop %r12\n" "\tpop %rsi\n" "\tpop %rdi\n" "\tpop %rbx\n" "\tpop %rbp\n" "\tret\n" "\t.seh_endproc")

Referenced by YieldProcessor().

◆ __dsb()

void __dsb ( unsigned int  _Type)

Definition at line 718 of file intrin_arm64.h.

719{
720 switch (type)
721 {
722 case 1: __asm__ __volatile__("dsb oshld" ::: "memory"); break;
723 case 2: __asm__ __volatile__("dsb oshst" ::: "memory"); break;
724 case 3: __asm__ __volatile__("dsb osh" ::: "memory"); break;
725 case 5: __asm__ __volatile__("dsb nshld" ::: "memory"); break;
726 case 6: __asm__ __volatile__("dsb nshst" ::: "memory"); break;
727 case 7: __asm__ __volatile__("dsb nsh" ::: "memory"); break;
728 case 9: __asm__ __volatile__("dsb ishld" ::: "memory"); break;
729 case 10: __asm__ __volatile__("dsb ishst" ::: "memory"); break;
730 case 11: __asm__ __volatile__("dsb ish" ::: "memory"); break;
731 case 13: __asm__ __volatile__("dsb ld" ::: "memory"); break;
732 case 14: __asm__ __volatile__("dsb st" ::: "memory"); break;
733 default: __asm__ __volatile__("dsb sy" ::: "memory"); break;
734 }
735}

◆ __isb()

void __isb ( unsigned int  _Type)

Definition at line 739 of file intrin_arm64.h.

740{
741 /* ISB on ARM64 only supports the 'sy' option; accept the type arg
742 for API compatibility with MS docs and ignore it. */
743 (void)type;
744 __asm__ __volatile__("isb" ::: "memory");
745}