Shouldn't these be limited to MSVC mode only? Have a look at BuiltinsARM.def, where there's cases like LANGBUILTIN(__dmb, "vUi", "nc", ALL_MS_LANGUAGES) instead.
I do see LANGBUILTIN in BuiltinsARM.def however it is defined as follows:
# define LANGBUILTIN(ID, TYPE, ATTRS, BUILTIN_LANG) BUILTIN(ID, TYPE, ATTRS)
So it seems the BUILTIN_LANG is never really used. Moreover, using LANGBUILTIN in BuiltinsAArch64.def I run into compilation error like this:
BuiltinsAArch64.def:65:12: error: expected '= constant-expression' or end of enumerator definition LANGBUILTIN(__dmb, "vUi", "nc", ALL_MS_LANGUAGES)
That's only the fallback definition of LANGBUILTIN. The .def file is included multiple times in different contexts. Have a look at e.g. lib/Basic/Targets/ARM.cpp and look for BuiltinsARM.def there, and you'll find a different implementation of LANGBUILTIN.
Sorry - I have no previous knowledge on them. Googling for _ReadStatusReg gets me to https://msdn.microsoft.com/en-us/library/hh875058.aspx at least (which is for ARM and not ARM64), which indicates that it'd map to the MRS instruction. And __getReg: https://msdn.microsoft.com/en-us/library/kcb3wece(v=vs.120).aspx
Since the ARM64 specifics of them aren't publicly known I guess you'd have to test MSVC to see what they expect in practice. For __getReg it seems to refer to intrin.h for register name constants - I guess arm64intr.h should define the constants for register numbers as well, or are they just called like __getReg(30) (to get the value of x30)?