Author: moodytongytong
Date: 2026-03-25T11:37:40-04:00
New Revision: 731bcb5a1c77403b496f13674ff1994795ce3a44

URL: 
https://github.com/llvm/llvm-project/commit/731bcb5a1c77403b496f13674ff1994795ce3a44
DIFF: 
https://github.com/llvm/llvm-project/commit/731bcb5a1c77403b496f13674ff1994795ce3a44.diff

LOG: AArch64 Tablegen Update (#179692)

- Use updated `.td` file instead of the `.def` file for the AArch64
builtin functions.
- The change has been tested via `clang-check` and `check-clang` which
returns no error nor warnings
- The translation is mostly done using the translation script -
https://github.com/moodytongytong/random-python-script

Signed-off-by: moodytongytong

---------

Co-authored-by: Lang Hames <[email protected]>
Co-authored-by: Jackson Stogel <[email protected]>
Co-authored-by: Pranav Kant <[email protected]>

Added: 
    clang/include/clang/Basic/BuiltinsAArch64.td
    clang/include/clang/Basic/BuiltinsAArch64Base.td

Modified: 
    clang/include/clang/Basic/BuiltinHeaders.def
    clang/include/clang/Basic/BuiltinsARM.def
    clang/include/clang/Basic/BuiltinsBase.td
    clang/include/clang/Basic/CMakeLists.txt
    clang/include/clang/Basic/TargetBuiltins.h
    clang/include/module.modulemap
    clang/lib/Basic/Targets/AArch64.cpp

Removed: 
    clang/include/clang/Basic/BuiltinsAArch64.def


################################################################################
diff  --git a/clang/include/clang/Basic/BuiltinHeaders.def 
b/clang/include/clang/Basic/BuiltinHeaders.def
index d6012a896eca9..bca40c0e4deea 100644
--- a/clang/include/clang/Basic/BuiltinHeaders.def
+++ b/clang/include/clang/Basic/BuiltinHeaders.def
@@ -12,7 +12,7 @@
 
//===----------------------------------------------------------------------===//
 
 HEADER(NO_HEADER, nullptr)
-HEADER(ARMACLE_H, "arm_acle.h")
+HEADER(ARM_ACLE_H, "arm_acle.h")
 HEADER(BLOCKS_H, "Blocks.h")
 HEADER(COMPLEX_H, "complex.h")
 HEADER(CTYPE_H, "ctype.h")

diff  --git a/clang/include/clang/Basic/BuiltinsAArch64.def 
b/clang/include/clang/Basic/BuiltinsAArch64.def
deleted file mode 100644
index 5722b045f1ed1..0000000000000
--- a/clang/include/clang/Basic/BuiltinsAArch64.def
+++ /dev/null
@@ -1,329 +0,0 @@
-//==- BuiltinsAArch64.def - AArch64 Builtin function database ----*- C++ 
-*-==//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM 
Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-//
-// This file defines the AArch64-specific builtin function database.  Users of
-// this file must define the BUILTIN macro to make use of this information.
-//
-//===----------------------------------------------------------------------===//
-
-// The format of this database matches clang/Basic/Builtins.def.
-
-#if defined(BUILTIN) && !defined(LANGBUILTIN)
-#   define LANGBUILTIN(ID, TYPE, ATTRS, BUILTIN_LANG) BUILTIN(ID, TYPE, ATTRS)
-#endif
-
-#if defined(BUILTIN) && !defined(TARGET_BUILTIN)
-#  define TARGET_BUILTIN(ID, TYPE, ATTRS, FEATURE) BUILTIN(ID, TYPE, ATTRS)
-#endif
-
-#if defined(BUILTIN) && !defined(TARGET_HEADER_BUILTIN)
-#  define TARGET_HEADER_BUILTIN(ID, TYPE, ATTRS, HEADER, LANG, FEATURE) 
BUILTIN(ID, TYPE, ATTRS)
-#endif
-
-// In libgcc
-BUILTIN(__clear_cache, "vv*v*", "i")
-
-BUILTIN(__builtin_arm_ldrex, "v.", "t")
-BUILTIN(__builtin_arm_ldaex, "v.", "t")
-BUILTIN(__builtin_arm_strex, "i.", "t")
-BUILTIN(__builtin_arm_stlex, "i.", "t")
-BUILTIN(__builtin_arm_clrex, "v", "")
-
-// Bit manipulation
-BUILTIN(__builtin_arm_rbit, "UiUi", "nc")
-BUILTIN(__builtin_arm_rbit64, "WUiWUi", "nc")
-BUILTIN(__builtin_arm_cls, "UiZUi", "nc")
-BUILTIN(__builtin_arm_cls64, "UiWUi", "nc")
-BUILTIN(__builtin_arm_clz, "UiZUi", "nc")
-BUILTIN(__builtin_arm_clz64, "UiWUi", "nc")
-
-// HINT
-BUILTIN(__builtin_arm_nop, "v", "")
-BUILTIN(__builtin_arm_yield, "v", "")
-BUILTIN(__builtin_arm_wfe, "v", "")
-BUILTIN(__builtin_arm_wfi, "v", "")
-BUILTIN(__builtin_arm_sev, "v", "")
-BUILTIN(__builtin_arm_sevl, "v", "")
-BUILTIN(__builtin_arm_chkfeat, "WUiWUi", "")
-TARGET_HEADER_BUILTIN(__yield, "v", "h", ARMACLE_H, ALL_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(__wfe,   "v", "h", ARMACLE_H, ALL_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(__wfi,   "v", "h", ARMACLE_H, ALL_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(__sev,   "v", "h", ARMACLE_H, ALL_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(__sevl,  "v", "h", ARMACLE_H, ALL_LANGUAGES, "")
-
-// Like __builtin_trap but provide an 16-bit immediate reason code (which goes 
into `brk #N`).
-BUILTIN(__builtin_arm_trap, "vUIs", "nr")
-
-// CRC32
-TARGET_BUILTIN(__builtin_arm_crc32b, "UiUiUc", "nc", "crc")
-TARGET_BUILTIN(__builtin_arm_crc32cb, "UiUiUc", "nc", "crc")
-TARGET_BUILTIN(__builtin_arm_crc32h, "UiUiUs", "nc", "crc")
-TARGET_BUILTIN(__builtin_arm_crc32ch, "UiUiUs", "nc", "crc")
-TARGET_BUILTIN(__builtin_arm_crc32w, "UiUiUi", "nc", "crc")
-TARGET_BUILTIN(__builtin_arm_crc32cw, "UiUiUi", "nc", "crc")
-TARGET_BUILTIN(__builtin_arm_crc32d, "UiUiWUi", "nc", "crc")
-TARGET_BUILTIN(__builtin_arm_crc32cd, "UiUiWUi", "nc", "crc")
-
-// Memory Tagging Extensions (MTE)
-TARGET_BUILTIN(__builtin_arm_irg, "v*v*Ui", "t", "mte")
-TARGET_BUILTIN(__builtin_arm_addg, "v*v*Ui", "t", "mte")
-TARGET_BUILTIN(__builtin_arm_gmi, "Uiv*Ui", "t", "mte")
-TARGET_BUILTIN(__builtin_arm_ldg, "v*v*", "t", "mte")
-TARGET_BUILTIN(__builtin_arm_stg, "vv*", "t", "mte")
-TARGET_BUILTIN(__builtin_arm_subp, "Uiv*v*", "t", "mte")
-
-// SME state function
-BUILTIN(__builtin_arm_get_sme_state, "vWUi*WUi*", "n")
-
-// Memory Operations
-TARGET_BUILTIN(__builtin_arm_mops_memset_tag, "v*v*iz", "", "mte,mops")
-
-// Memory barrier
-BUILTIN(__builtin_arm_dmb, "vUi", "nc")
-BUILTIN(__builtin_arm_dsb, "vUi", "nc")
-BUILTIN(__builtin_arm_isb, "vUi", "nc")
-TARGET_HEADER_BUILTIN(__dmb, "vUi", "nch", ARMACLE_H, ALL_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(__dsb, "vUi", "nch", ARMACLE_H, ALL_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(__isb, "vUi", "nch", ARMACLE_H, ALL_LANGUAGES, "")
-
-TARGET_BUILTIN(__builtin_arm_jcvt, "Zid", "nc", "v8.3a")
-
-// Prefetch
-BUILTIN(__builtin_arm_prefetch, "vvC*UiUiUiUi", "nc")
-
-BUILTIN(__builtin_arm_prefetch_ir, "vvC*", "nc")
-
-// Range Prefetch
-BUILTIN(__builtin_arm_range_prefetch_x, "vvC*UiUiiUiiz", "n")
-BUILTIN(__builtin_arm_range_prefetch, "vvC*UiUiWUi", "n")
-
-// System Registers
-BUILTIN(__builtin_arm_rsr, "UicC*", "nc")
-BUILTIN(__builtin_arm_rsr64, "WUicC*", "nc")
-TARGET_BUILTIN(__builtin_arm_rsr128, "LLLUicC*", "nc", "d128")
-BUILTIN(__builtin_arm_rsrp, "v*cC*", "nc")
-BUILTIN(__builtin_arm_wsr, "vcC*Ui", "nc")
-BUILTIN(__builtin_arm_wsr64, "vcC*WUi", "nc")
-TARGET_BUILTIN(__builtin_arm_wsr128, "vcC*LLLUi", "nc", "d128")
-BUILTIN(__builtin_arm_wsrp, "vcC*vC*", "nc")
-
-// Misc
-BUILTIN(__builtin_sponentry, "v*", "c")
-
-// Armv8.5-A FP rounding intrinsics
-TARGET_BUILTIN(__builtin_arm_rint32zf, "ff", "", "v8.5a")
-TARGET_BUILTIN(__builtin_arm_rint32z, "dd", "", "v8.5a")
-TARGET_BUILTIN(__builtin_arm_rint64zf, "ff", "", "v8.5a")
-TARGET_BUILTIN(__builtin_arm_rint64z, "dd", "", "v8.5a")
-TARGET_BUILTIN(__builtin_arm_rint32xf, "ff", "", "v8.5a")
-TARGET_BUILTIN(__builtin_arm_rint32x, "dd", "", "v8.5a")
-TARGET_BUILTIN(__builtin_arm_rint64xf, "ff", "", "v8.5a")
-TARGET_BUILTIN(__builtin_arm_rint64x, "dd", "", "v8.5a")
-
-// Armv8.5-A Random number generation intrinsics
-TARGET_BUILTIN(__builtin_arm_rndr,   "iWUi*", "n", "rand")
-TARGET_BUILTIN(__builtin_arm_rndrrs, "iWUi*", "n", "rand")
-
-// Armv8.7-A load/store 64-byte intrinsics
-TARGET_BUILTIN(__builtin_arm_ld64b, "vvC*WUi*", "n", "ls64")
-TARGET_BUILTIN(__builtin_arm_st64b, "vv*WUiC*", "n", "ls64")
-TARGET_BUILTIN(__builtin_arm_st64bv, "WUiv*WUiC*", "n", "ls64")
-TARGET_BUILTIN(__builtin_arm_st64bv0, "WUiv*WUiC*", "n", "ls64")
-
-// Atomic store with PCDPHINT
-TARGET_BUILTIN(__builtin_arm_atomic_store_with_stshh, "v.", "t", "")
-
-// Armv9.3-A Guarded Control Stack
-TARGET_BUILTIN(__builtin_arm_gcspopm, "WUiWUi", "n", "gcs")
-TARGET_BUILTIN(__builtin_arm_gcsss, "v*v*", "n", "gcs")
-
-TARGET_HEADER_BUILTIN(_BitScanForward, "UcUNi*UNi", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_BitScanReverse, "UcUNi*UNi", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_BitScanForward64, "UcUNi*ULLi", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_BitScanReverse64, "UcUNi*ULLi", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-
-TARGET_HEADER_BUILTIN(_InterlockedAdd,           "NiNiD*Ni",    "nh", 
INTRIN_H, ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedAdd64,         "LLiLLiD*LLi", "nh", 
INTRIN_H, ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedAnd64,         "LLiLLiD*LLi", "nh", 
INTRIN_H, ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedDecrement64,   "LLiLLiD*",    "nh", 
INTRIN_H, ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedExchange64,    "LLiLLiD*LLi", "nh", 
INTRIN_H, ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedExchangeAdd64, "LLiLLiD*LLi", "nh", 
INTRIN_H, ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedExchangeSub64, "LLiLLiD*LLi", "nh", 
INTRIN_H, ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedIncrement64,   "LLiLLiD*",    "nh", 
INTRIN_H, ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedOr64,          "LLiLLiD*LLi", "nh", 
INTRIN_H, ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedXor64,         "LLiLLiD*LLi", "nh", 
INTRIN_H, ALL_MS_LANGUAGES, "")
-
-TARGET_HEADER_BUILTIN(_InterlockedAdd_acq,       "NiNiD*Ni",    "nh", 
INTRIN_H, ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedAdd_rel,       "NiNiD*Ni",    "nh", 
INTRIN_H, ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedAdd_nf,        "NiNiD*Ni",    "nh", 
INTRIN_H, ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedAdd64_acq,     "LLiLLiD*LLi", "nh", 
INTRIN_H, ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedAdd64_rel,     "LLiLLiD*LLi", "nh", 
INTRIN_H, ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedAdd64_nf,      "LLiLLiD*LLi", "nh", 
INTRIN_H, ALL_MS_LANGUAGES, "")
-
-TARGET_HEADER_BUILTIN(_InterlockedExchangeAdd_acq, "NiNiD*Ni", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedExchangeAdd_rel, "NiNiD*Ni", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedExchangeAdd_nf, "NiNiD*Ni", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedExchangeAdd8_acq, "ccD*c", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedExchangeAdd8_rel, "ccD*c", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedExchangeAdd8_nf, "ccD*c", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedExchangeAdd16_acq, "ssD*s", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedExchangeAdd16_rel, "ssD*s", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedExchangeAdd16_nf, "ssD*s", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedExchangeAdd64_acq, "LLiLLiD*LLi", "nh", 
INTRIN_H, ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedExchangeAdd64_rel, "LLiLLiD*LLi", "nh", 
INTRIN_H, ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedExchangeAdd64_nf, "LLiLLiD*LLi", "nh", 
INTRIN_H, ALL_MS_LANGUAGES, "")
-
-TARGET_HEADER_BUILTIN(_InterlockedExchange8_acq,  "ccD*c",       "nh", 
INTRIN_H, ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedExchange8_nf,   "ccD*c",       "nh", 
INTRIN_H, ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedExchange8_rel,  "ccD*c",       "nh", 
INTRIN_H, ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedExchange16_acq, "ssD*s",       "nh", 
INTRIN_H, ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedExchange16_nf,  "ssD*s",       "nh", 
INTRIN_H, ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedExchange16_rel, "ssD*s",       "nh", 
INTRIN_H, ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedExchange_acq,   "NiNiD*Ni",    "nh", 
INTRIN_H, ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedExchange_nf,    "NiNiD*Ni",    "nh", 
INTRIN_H, ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedExchange_rel,   "NiNiD*Ni",    "nh", 
INTRIN_H, ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedExchange64_acq, "LLiLLiD*LLi", "nh", 
INTRIN_H, ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedExchange64_nf,  "LLiLLiD*LLi", "nh", 
INTRIN_H, ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedExchange64_rel, "LLiLLiD*LLi", "nh", 
INTRIN_H, ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedExchangePointer_acq, "v*v*D*v*","nh", 
INTRIN_H, ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedExchangePointer_nf,  "v*v*D*v*","nh", 
INTRIN_H, ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedExchangePointer_rel, "v*v*D*v*","nh", 
INTRIN_H, ALL_MS_LANGUAGES, "")
-
-TARGET_HEADER_BUILTIN(_InterlockedCompareExchange8_acq,  "ccD*cc",         
"nh", INTRIN_H, ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedCompareExchange8_nf,   "ccD*cc",         
"nh", INTRIN_H, ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedCompareExchange8_rel,  "ccD*cc",         
"nh", INTRIN_H, ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedCompareExchange16_acq, "ssD*ss",         
"nh", INTRIN_H, ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedCompareExchange16_nf,  "ssD*ss",         
"nh", INTRIN_H, ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedCompareExchange16_rel, "ssD*ss",         
"nh", INTRIN_H, ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedCompareExchange_acq,   "NiNiD*NiNi",     
"nh", INTRIN_H, ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedCompareExchange_nf,    "NiNiD*NiNi",     
"nh", INTRIN_H, ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedCompareExchange_rel,   "NiNiD*NiNi",     
"nh", INTRIN_H, ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedCompareExchange64_acq, "LLiLLiD*LLiLLi", 
"nh", INTRIN_H, ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedCompareExchange64_nf,  "LLiLLiD*LLiLLi", 
"nh", INTRIN_H, ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedCompareExchange64_rel, "LLiLLiD*LLiLLi", 
"nh", INTRIN_H, ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedCompareExchangePointer_acq, 
"v*v*D*v*v*","nh", INTRIN_H, ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedCompareExchangePointer_rel, 
"v*v*D*v*v*","nh", INTRIN_H, ALL_MS_LANGUAGES, "")
-
-TARGET_HEADER_BUILTIN(_InterlockedCompareExchange128,    "UcLLiD*LLiLLiLLi*", 
"nh", INTRIN_H, ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedCompareExchange128_acq,"UcLLiD*LLiLLiLLi*", 
"nh", INTRIN_H, ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedCompareExchange128_nf ,"UcLLiD*LLiLLiLLi*", 
"nh", INTRIN_H, ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedCompareExchange128_rel,"UcLLiD*LLiLLiLLi*", 
"nh", INTRIN_H, ALL_MS_LANGUAGES, "")
-
-TARGET_HEADER_BUILTIN(_InterlockedOr8_acq,  "ccD*c",       "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedOr8_nf,   "ccD*c",       "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedOr8_rel,  "ccD*c",       "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedOr16_acq, "ssD*s",       "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedOr16_nf,  "ssD*s",       "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedOr16_rel, "ssD*s",       "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedOr_acq,   "NiNiD*Ni",    "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedOr_nf,    "NiNiD*Ni",    "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedOr_rel,   "NiNiD*Ni",    "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedOr64_acq, "LLiLLiD*LLi", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedOr64_nf,  "LLiLLiD*LLi", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedOr64_rel, "LLiLLiD*LLi", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-
-TARGET_HEADER_BUILTIN(_InterlockedXor8_acq,  "ccD*c",       "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedXor8_nf,   "ccD*c",       "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedXor8_rel,  "ccD*c",       "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedXor16_acq, "ssD*s",       "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedXor16_nf,  "ssD*s",       "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedXor16_rel, "ssD*s",       "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedXor_acq,   "NiNiD*Ni",    "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedXor_nf,    "NiNiD*Ni",    "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedXor_rel,   "NiNiD*Ni",    "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedXor64_acq, "LLiLLiD*LLi", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedXor64_nf,  "LLiLLiD*LLi", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedXor64_rel, "LLiLLiD*LLi", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-
-TARGET_HEADER_BUILTIN(_InterlockedAnd8_acq,  "ccD*c",       "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedAnd8_nf,   "ccD*c",       "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedAnd8_rel,  "ccD*c",       "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedAnd16_acq, "ssD*s",       "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedAnd16_nf,  "ssD*s",       "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedAnd16_rel, "ssD*s",       "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedAnd_acq,   "NiNiD*Ni",    "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedAnd_nf,    "NiNiD*Ni",    "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedAnd_rel,   "NiNiD*Ni",    "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedAnd64_acq, "LLiLLiD*LLi", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedAnd64_nf,  "LLiLLiD*LLi", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedAnd64_rel, "LLiLLiD*LLi", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-
-TARGET_HEADER_BUILTIN(_InterlockedIncrement16_acq, "ssD*",     "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedIncrement16_nf,  "ssD*",     "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedIncrement16_rel, "ssD*",     "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedIncrement_acq,   "NiNiD*",   "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedIncrement_nf,    "NiNiD*",   "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedIncrement_rel,   "NiNiD*",   "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedIncrement64_acq, "LLiLLiD*", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedIncrement64_nf,  "LLiLLiD*", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedIncrement64_rel, "LLiLLiD*", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-
-TARGET_HEADER_BUILTIN(_InterlockedDecrement16_acq, "ssD*",     "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedDecrement16_nf,  "ssD*",     "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedDecrement16_rel, "ssD*",     "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedDecrement_acq,   "NiNiD*",   "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedDecrement_nf,    "NiNiD*",   "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedDecrement_rel,   "NiNiD*",   "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedDecrement64_acq, "LLiLLiD*", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedDecrement64_nf,  "LLiLLiD*", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_InterlockedDecrement64_rel, "LLiLLiD*", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-
-TARGET_HEADER_BUILTIN(_ReadWriteBarrier, "v", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(__getReg, "ULLii", "nh", INTRIN_H, ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_ReadStatusReg,  "LLii",  "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_WriteStatusReg, "viLLi", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(__sys, "UiiLLi", "nh", INTRIN_H, ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_AddressOfReturnAddress, "v*", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-
-TARGET_HEADER_BUILTIN(__mulh,  "SLLiSLLiSLLi", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(__umulh, "ULLiULLiULLi", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-
-TARGET_HEADER_BUILTIN(__break, "vi", "nh", INTRIN_H, ALL_MS_LANGUAGES, "")
-
-TARGET_HEADER_BUILTIN(__writex18byte,  "vUNiUc", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(__writex18word,  "vUNiUs", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(__writex18dword, "vUNiUNi", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(__writex18qword, "vUNiULLi", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-
-TARGET_HEADER_BUILTIN(__readx18byte,  "UcUNi", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(__readx18word,  "UsUNi", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(__readx18dword, "UNiUNi", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(__readx18qword, "ULLiUNi", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-
-TARGET_HEADER_BUILTIN(__addx18byte,  "vUNiUc", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(__addx18word,  "vUNiUs", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(__addx18dword, "vUNiUNi", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(__addx18qword, "vUNiULLi", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-
-TARGET_HEADER_BUILTIN(__incx18byte,  "vUNi", "nh", INTRIN_H, ALL_MS_LANGUAGES, 
"")
-TARGET_HEADER_BUILTIN(__incx18word,  "vUNi", "nh", INTRIN_H, ALL_MS_LANGUAGES, 
"")
-TARGET_HEADER_BUILTIN(__incx18dword, "vUNi", "nh", INTRIN_H, ALL_MS_LANGUAGES, 
"")
-TARGET_HEADER_BUILTIN(__incx18qword, "vUNi", "nh", INTRIN_H, ALL_MS_LANGUAGES, 
"")
-
-TARGET_HEADER_BUILTIN(_CopyDoubleFromInt64, "dSLLi", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_CopyFloatFromInt32, "fSi", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_CopyInt32FromFloat, "Sif", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_CopyInt64FromDouble, "SLLid", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-
-TARGET_HEADER_BUILTIN(_CountLeadingOnes, "UiUNi", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_CountLeadingOnes64, "UiULLi", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_CountLeadingSigns, "UiSNi", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_CountLeadingSigns64, "UiSLLi", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_CountLeadingZeros, "UiUNi", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_CountLeadingZeros64, "UiULLi", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_CountOneBits, "UiUNi", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_CountOneBits64, "UiULLi", "nh", INTRIN_H, 
ALL_MS_LANGUAGES, "")
-
-TARGET_HEADER_BUILTIN(__prefetch, "vvC*", "nh", INTRIN_H, ALL_MS_LANGUAGES, "")
-
-TARGET_HEADER_BUILTIN(__hlt, "UiUi.", "nh", INTRIN_H, ALL_MS_LANGUAGES, "")
-
-#undef BUILTIN
-#undef LANGBUILTIN
-#undef TARGET_BUILTIN
-#undef TARGET_HEADER_BUILTIN

diff  --git a/clang/include/clang/Basic/BuiltinsAArch64.td 
b/clang/include/clang/Basic/BuiltinsAArch64.td
new file mode 100644
index 0000000000000..48ad4cb16f14c
--- /dev/null
+++ b/clang/include/clang/Basic/BuiltinsAArch64.td
@@ -0,0 +1,410 @@
+//==- BuiltinsAArch64.td - AArch64 Builtin function database ----*- C++ -*-==//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM 
Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines the AArch64-specific builtin function database.  Users of
+// this file must define the BUILTIN macro to make use of this information.
+//
+//===----------------------------------------------------------------------===//
+
+// The format of this database matches clang/Basic/Builtins.def.
+
+include "clang/Basic/BuiltinsAArch64Base.td"
+
+// In libgcc
+let Attributes = [RuntimeLibraryFunction] in {
+    def __clear_cache : AArch64NoPrefixBuiltin<"void (void *, void *)">;
+}
+
+let Attributes = [CustomTypeChecking] in {
+       def ldrex : AArch64Builtin<"void (...)">;
+       def ldaex : AArch64Builtin<"void (...)">;
+       def strex : AArch64Builtin<"int (...)">;
+       def stlex : AArch64Builtin<"int (...)">;
+}
+
+def clrex : AArch64Builtin<"void ()">;
+
+// Bit manipulation
+let Attributes = [NoThrow, Const] in {
+       def rbit   : AArch64Builtin<"unsigned int (unsigned int)">;
+       def rbit64 : AArch64Builtin<"uint64_t (uint64_t)">;
+       def cls    : AArch64Builtin<"unsigned int (uint32_t)">;
+       def cls64  : AArch64Builtin<"unsigned int (uint64_t)">;
+       def clz    : AArch64Builtin<"unsigned int (uint32_t)">;
+       def clz64  : AArch64Builtin<"unsigned int (uint64_t)">;
+}
+
+// HINT
+def nop     : AArch64Builtin<"void ()">;
+def yield   : AArch64Builtin<"void ()">;
+def wfe     : AArch64Builtin<"void ()">;
+def wfi     : AArch64Builtin<"void ()">;
+def sev     : AArch64Builtin<"void ()">;
+def sevl    : AArch64Builtin<"void ()">;
+def chkfeat : AArch64Builtin<"uint64_t (uint64_t)">;
+
+let Attributes = [RequireDeclaration], Languages = "ALL_LANGUAGES", Header = 
"arm_acle.h" in {
+       def __yield : AArch64NoPrefixTargetLibBuiltin<"void ()">;
+       def __wfe   : AArch64NoPrefixTargetLibBuiltin<"void ()">;
+       def __wfi   : AArch64NoPrefixTargetLibBuiltin<"void ()">;
+       def __sev   : AArch64NoPrefixTargetLibBuiltin<"void ()">;
+       def __sevl  : AArch64NoPrefixTargetLibBuiltin<"void ()">;
+}
+
+// Like __builtin_trap but provide an 16-bit immediate reason code (which goes 
into `brk #N`).
+let Attributes = [NoThrow, NoReturn] in {
+       def trap : AArch64Builtin<"void (unsigned _Constant short)">;
+}
+
+// CRC32
+let Attributes = [NoThrow, Const], Features = "crc" in {
+       def crc32b  : AArch64TargetBuiltin<"unsigned int (unsigned int, 
unsigned char)">;
+       def crc32cb : AArch64TargetBuiltin<"unsigned int (unsigned int, 
unsigned char)">;
+       def crc32h  : AArch64TargetBuiltin<"unsigned int (unsigned int, 
unsigned short)">;
+       def crc32ch : AArch64TargetBuiltin<"unsigned int (unsigned int, 
unsigned short)">;
+       def crc32w  : AArch64TargetBuiltin<"unsigned int (unsigned int, 
unsigned int)">;
+       def crc32cw : AArch64TargetBuiltin<"unsigned int (unsigned int, 
unsigned int)">;
+       def crc32d  : AArch64TargetBuiltin<"unsigned int (unsigned int, 
uint64_t)">;
+       def crc32cd : AArch64TargetBuiltin<"unsigned int (unsigned int, 
uint64_t)">;
+}
+
+// Memory Tagging Extensions (MTE)
+let Attributes = [CustomTypeChecking], Features = "mte" in {
+       def irg  : AArch64TargetBuiltin<"void * (void *, unsigned int)">;
+       def addg : AArch64TargetBuiltin<"void * (void *, unsigned int)">;
+       def gmi  : AArch64TargetBuiltin<"unsigned int (void *, unsigned int)">;
+       def ldg  : AArch64TargetBuiltin<"void * (void *)">;
+       def stg  : AArch64TargetBuiltin<"void (void *)">;
+       def subp : AArch64TargetBuiltin<"unsigned int (void *, void *)">;
+}
+
+// SME state function
+let Attributes = [NoThrow] in {
+       def get_sme_state : AArch64Builtin<"void (uint64_t *, uint64_t *)">;
+}
+
+// Memory Operations
+let Features = "mte,mops" in {
+       def mops_memset_tag : AArch64TargetBuiltin<"void * (void *, int, 
size_t)">;
+}
+
+// Memory barrier
+let Attributes = [NoThrow, Const] in {
+       def dmb : AArch64Builtin<"void (unsigned int)">;
+       def dsb : AArch64Builtin<"void (unsigned int)">;
+       def isb : AArch64Builtin<"void (unsigned int)">;
+}
+
+let Attributes = [NoThrow, Const, RequireDeclaration], Languages = 
"ALL_LANGUAGES", Header = "arm_acle.h" in {
+       def __dmb : AArch64NoPrefixTargetLibBuiltin<"void (unsigned int)">;
+       def __dsb : AArch64NoPrefixTargetLibBuiltin<"void (unsigned int)">;
+       def __isb : AArch64NoPrefixTargetLibBuiltin<"void (unsigned int)">;
+}
+
+let Attributes = [NoThrow, Const], Features = "v8.3a" in {
+       def jcvt : AArch64TargetBuiltin<"int32_t (double)">;
+}
+
+// Prefetch
+let Attributes = [NoThrow, Const] in {
+       def prefetch : AArch64Builtin<"void (void const *, unsigned int, 
unsigned int, unsigned int, unsigned int)">;
+}
+
+let Attributes = [NoThrow, Const] in {
+       def prefetch_ir : AArch64Builtin<"void (void const *)">;
+}
+
+// Range Prefetch
+let Attributes = [NoThrow] in {
+       def range_prefetch_x : AArch64Builtin<"void (void const *, unsigned 
int, unsigned int, int, unsigned int, int, size_t)">;
+       def range_prefetch   : AArch64Builtin<"void (void const *, unsigned 
int, unsigned int, uint64_t)">;
+}
+
+// System Registers
+let Attributes = [NoThrow, Const] in {
+       def rsr   : AArch64Builtin<"unsigned int (char const *)">;
+       def rsr64 : AArch64Builtin<"uint64_t (char const *)">;
+       def rsrp  : AArch64Builtin<"void * (char const *)">;
+       def wsr   : AArch64Builtin<"void (char const *, unsigned int)">;
+       def wsr64 : AArch64Builtin<"void (char const *, uint64_t)">;
+       def wsrp  : AArch64Builtin<"void (char const *, void const *)">;
+}
+
+let Attributes = [NoThrow, Const], Features = "d128" in {
+       def rsr128 : AArch64TargetBuiltin<"unsigned __int128_t (char const 
*)">; // __int128_t
+       def wsr128 : AArch64TargetBuiltin<"void (char const *, 
unsigned__int128_t)">;
+}
+
+// Misc
+let Attributes = [Const] in {
+       def __builtin_sponentry : AArch64NoPrefixBuiltin<"void * ()">;
+}
+
+// Armv8.5-A FP rounding intrinsics
+let Features = "v8.5a" in {
+       def rint32zf : AArch64TargetBuiltin<"float (float)">;
+       def rint32z  : AArch64TargetBuiltin<"double (double)">;
+       def rint64zf : AArch64TargetBuiltin<"float (float)">;
+       def rint64z  : AArch64TargetBuiltin<"double (double)">;
+       def rint32xf : AArch64TargetBuiltin<"float (float)">;
+       def rint32x  : AArch64TargetBuiltin<"double (double)">;
+       def rint64xf : AArch64TargetBuiltin<"float (float)">;
+       def rint64x  : AArch64TargetBuiltin<"double (double)">;
+}
+
+// Armv8.5-A Random number generation intrinsics
+let Attributes = [NoThrow], Features = "rand" in {
+       def rndr   : AArch64TargetBuiltin<"int (uint64_t *)">;
+       def rndrrs : AArch64TargetBuiltin<"int (uint64_t *)">;
+}
+
+// Armv8.7-A load/store 64-byte intrinsics
+let Attributes = [NoThrow], Features = "ls64" in {
+       def ld64b   : AArch64TargetBuiltin<"void (void const *, uint64_t *)">;
+       def st64b   : AArch64TargetBuiltin<"void (void *, uint64_t const *)">;
+       def st64bv  : AArch64TargetBuiltin<"uint64_t (void *, uint64_t const 
*)">;
+       def st64bv0 : AArch64TargetBuiltin<"uint64_t (void *, uint64_t const 
*)">;
+}
+
+// Atomic store with PCDPHINT
+let Attributes = [CustomTypeChecking] in {
+       def atomic_store_with_stshh : AArch64TargetBuiltin<"void (...)">;
+}
+
+// Armv9.3-A Guarded Control Stack
+let Attributes = [NoThrow], Features = "gcs" in {
+       def gcspopm : AArch64TargetBuiltin<"uint64_t (uint64_t)">;
+       def gcsss   : AArch64TargetBuiltin<"void * (void *)">;
+}
+
+let Attributes = [NoThrow, RequireDeclaration], Languages = 
"ALL_MS_LANGUAGES", Header = "intrin.h" in {
+       def _BitScanForward   : AArch64NoPrefixTargetLibBuiltin<"unsigned char 
(msuint32_t *, msuint32_t)">;
+       def _BitScanReverse   : AArch64NoPrefixTargetLibBuiltin<"unsigned char 
(msuint32_t *, msuint32_t)">;
+       def _BitScanForward64 : AArch64NoPrefixTargetLibBuiltin<"unsigned char 
(msuint32_t *, unsigned long long int)">;
+       def _BitScanReverse64 : AArch64NoPrefixTargetLibBuiltin<"unsigned char 
(msuint32_t *, unsigned long long int)">;
+}
+
+let Attributes = [NoThrow, RequireDeclaration], Languages = 
"ALL_MS_LANGUAGES", Header = "intrin.h" in {
+       def _InterlockedAdd           : 
AArch64NoPrefixTargetLibBuiltin<"msint32_t (msint32_t volatile *, msint32_t)">;
+       def _InterlockedAdd64         : AArch64NoPrefixTargetLibBuiltin<"long 
long int (long long int volatile *, long long int)">;
+       def _InterlockedAnd64         : AArch64NoPrefixTargetLibBuiltin<"long 
long int (long long int volatile *, long long int)">;
+       def _InterlockedDecrement64   : AArch64NoPrefixTargetLibBuiltin<"long 
long int (long long int volatile *)">;
+       def _InterlockedExchange64    : AArch64NoPrefixTargetLibBuiltin<"long 
long int (long long int volatile *, long long int)">;
+       def _InterlockedExchangeAdd64 : AArch64NoPrefixTargetLibBuiltin<"long 
long int (long long int volatile *, long long int)">;
+       def _InterlockedExchangeSub64 : AArch64NoPrefixTargetLibBuiltin<"long 
long int (long long int volatile *, long long int)">;
+       def _InterlockedIncrement64   : AArch64NoPrefixTargetLibBuiltin<"long 
long int (long long int volatile *)">;
+       def _InterlockedOr64          : AArch64NoPrefixTargetLibBuiltin<"long 
long int (long long int volatile *, long long int)">;
+       def _InterlockedXor64         : AArch64NoPrefixTargetLibBuiltin<"long 
long int (long long int volatile *, long long int)">;
+}
+
+let Attributes = [NoThrow, RequireDeclaration], Languages = 
"ALL_MS_LANGUAGES", Header = "intrin.h" in {
+       def _InterlockedAdd_acq   : AArch64NoPrefixTargetLibBuiltin<"msint32_t 
(msint32_t volatile *, msint32_t)">;
+       def _InterlockedAdd_rel   : AArch64NoPrefixTargetLibBuiltin<"msint32_t 
(msint32_t volatile *, msint32_t)">;
+       def _InterlockedAdd_nf    : AArch64NoPrefixTargetLibBuiltin<"msint32_t 
(msint32_t volatile *, msint32_t)">;
+       def _InterlockedAdd64_acq : AArch64NoPrefixTargetLibBuiltin<"long long 
int (long long int volatile *, long long int)">;
+       def _InterlockedAdd64_rel : AArch64NoPrefixTargetLibBuiltin<"long long 
int (long long int volatile *, long long int)">;
+       def _InterlockedAdd64_nf  : AArch64NoPrefixTargetLibBuiltin<"long long 
int (long long int volatile *, long long int)">;
+}
+
+let Attributes = [NoThrow, RequireDeclaration], Languages = 
"ALL_MS_LANGUAGES", Header = "intrin.h" in {
+       def _InterlockedExchangeAdd_acq   : 
AArch64NoPrefixTargetLibBuiltin<"msint32_t (msint32_t volatile *, msint32_t)">;
+       def _InterlockedExchangeAdd_rel   : 
AArch64NoPrefixTargetLibBuiltin<"msint32_t (msint32_t volatile *, msint32_t)">;
+       def _InterlockedExchangeAdd_nf    : 
AArch64NoPrefixTargetLibBuiltin<"msint32_t (msint32_t volatile *, msint32_t)">;
+       def _InterlockedExchangeAdd8_acq  : 
AArch64NoPrefixTargetLibBuiltin<"char (char volatile *, char)">;
+       def _InterlockedExchangeAdd8_rel  : 
AArch64NoPrefixTargetLibBuiltin<"char (char volatile *, char)">;
+       def _InterlockedExchangeAdd8_nf   : 
AArch64NoPrefixTargetLibBuiltin<"char (char volatile *, char)">;
+       def _InterlockedExchangeAdd16_acq : 
AArch64NoPrefixTargetLibBuiltin<"short (short volatile *, short)">;
+       def _InterlockedExchangeAdd16_rel : 
AArch64NoPrefixTargetLibBuiltin<"short (short volatile *, short)">;
+       def _InterlockedExchangeAdd16_nf  : 
AArch64NoPrefixTargetLibBuiltin<"short (short volatile *, short)">;
+       def _InterlockedExchangeAdd64_acq : 
AArch64NoPrefixTargetLibBuiltin<"long long int (long long int volatile *, long 
long int)">;
+       def _InterlockedExchangeAdd64_rel : 
AArch64NoPrefixTargetLibBuiltin<"long long int (long long int volatile *, long 
long int)">;
+       def _InterlockedExchangeAdd64_nf  : 
AArch64NoPrefixTargetLibBuiltin<"long long int (long long int volatile *, long 
long int)">;
+}
+
+let Attributes = [NoThrow, RequireDeclaration], Languages = 
"ALL_MS_LANGUAGES", Header = "intrin.h" in {
+       def _InterlockedExchange8_acq       : 
AArch64NoPrefixTargetLibBuiltin<"char (char volatile *, char)">;
+       def _InterlockedExchange8_nf        : 
AArch64NoPrefixTargetLibBuiltin<"char (char volatile *, char)">;
+       def _InterlockedExchange8_rel       : 
AArch64NoPrefixTargetLibBuiltin<"char (char volatile *, char)">;
+       def _InterlockedExchange16_acq      : 
AArch64NoPrefixTargetLibBuiltin<"short (short volatile *, short)">;
+       def _InterlockedExchange16_nf       : 
AArch64NoPrefixTargetLibBuiltin<"short (short volatile *, short)">;
+       def _InterlockedExchange16_rel      : 
AArch64NoPrefixTargetLibBuiltin<"short (short volatile *, short)">;
+       def _InterlockedExchange_acq        : 
AArch64NoPrefixTargetLibBuiltin<"msint32_t (msint32_t volatile *, msint32_t)">;
+       def _InterlockedExchange_nf         : 
AArch64NoPrefixTargetLibBuiltin<"msint32_t (msint32_t volatile *, msint32_t)">;
+       def _InterlockedExchange_rel        : 
AArch64NoPrefixTargetLibBuiltin<"msint32_t (msint32_t volatile *, msint32_t)">;
+       def _InterlockedExchange64_acq      : 
AArch64NoPrefixTargetLibBuiltin<"long long int (long long int volatile *, long 
long int)">;
+       def _InterlockedExchange64_nf       : 
AArch64NoPrefixTargetLibBuiltin<"long long int (long long int volatile *, long 
long int)">;
+       def _InterlockedExchange64_rel      : 
AArch64NoPrefixTargetLibBuiltin<"long long int (long long int volatile *, long 
long int)">;
+       def _InterlockedExchangePointer_acq : 
AArch64NoPrefixTargetLibBuiltin<"void * (void * volatile *, void *)">;
+       def _InterlockedExchangePointer_nf  : 
AArch64NoPrefixTargetLibBuiltin<"void * (void * volatile *, void *)">;
+       def _InterlockedExchangePointer_rel : 
AArch64NoPrefixTargetLibBuiltin<"void * (void * volatile *, void *)">;
+}
+
+let Attributes = [NoThrow, RequireDeclaration], Languages = 
"ALL_MS_LANGUAGES", Header = "intrin.h" in {
+       def _InterlockedCompareExchange8_acq       : 
AArch64NoPrefixTargetLibBuiltin<"char (char volatile *, char, char)">;
+       def _InterlockedCompareExchange8_nf        : 
AArch64NoPrefixTargetLibBuiltin<"char (char volatile *, char, char)">;
+       def _InterlockedCompareExchange8_rel       : 
AArch64NoPrefixTargetLibBuiltin<"char (char volatile *, char, char)">;
+       def _InterlockedCompareExchange16_acq      : 
AArch64NoPrefixTargetLibBuiltin<"short (short volatile *, short, short)">;
+       def _InterlockedCompareExchange16_nf       : 
AArch64NoPrefixTargetLibBuiltin<"short (short volatile *, short, short)">;
+       def _InterlockedCompareExchange16_rel      : 
AArch64NoPrefixTargetLibBuiltin<"short (short volatile *, short, short)">;
+       def _InterlockedCompareExchange_acq        : 
AArch64NoPrefixTargetLibBuiltin<"msint32_t (msint32_t volatile *, msint32_t, 
msint32_t)">;
+       def _InterlockedCompareExchange_nf         : 
AArch64NoPrefixTargetLibBuiltin<"msint32_t (msint32_t volatile *, msint32_t, 
msint32_t)">;
+       def _InterlockedCompareExchange_rel        : 
AArch64NoPrefixTargetLibBuiltin<"msint32_t (msint32_t volatile *, msint32_t, 
msint32_t)">;
+       def _InterlockedCompareExchange64_acq      : 
AArch64NoPrefixTargetLibBuiltin<"long long int (long long int volatile *, long 
long int, long long int)">;
+       def _InterlockedCompareExchange64_nf       : 
AArch64NoPrefixTargetLibBuiltin<"long long int (long long int volatile *, long 
long int, long long int)">;
+       def _InterlockedCompareExchange64_rel      : 
AArch64NoPrefixTargetLibBuiltin<"long long int (long long int volatile *, long 
long int, long long int)">;
+       def _InterlockedCompareExchangePointer_acq : 
AArch64NoPrefixTargetLibBuiltin<"void * (void * volatile *, void *, void *)">;
+       def _InterlockedCompareExchangePointer_rel : 
AArch64NoPrefixTargetLibBuiltin<"void * (void * volatile *, void *, void *)">;
+}
+
+let Attributes = [NoThrow, RequireDeclaration], Languages = 
"ALL_MS_LANGUAGES", Header = "intrin.h" in {
+       def _InterlockedCompareExchange128     : 
AArch64NoPrefixTargetLibBuiltin<"unsigned char (long long int volatile *, long 
long int, long long int, long long int *)">;
+       def _InterlockedCompareExchange128_acq : 
AArch64NoPrefixTargetLibBuiltin<"unsigned char (long long int volatile *, long 
long int, long long int, long long int *)">;
+       def _InterlockedCompareExchange128_nf  : 
AArch64NoPrefixTargetLibBuiltin<"unsigned char (long long int volatile *, long 
long int, long long int, long long int *)">;
+       def _InterlockedCompareExchange128_rel : 
AArch64NoPrefixTargetLibBuiltin<"unsigned char (long long int volatile *, long 
long int, long long int, long long int *)">;
+}
+
+let Attributes = [NoThrow, RequireDeclaration], Languages = 
"ALL_MS_LANGUAGES", Header = "intrin.h" in {
+       def _InterlockedOr8_acq  : AArch64NoPrefixTargetLibBuiltin<"char (char 
volatile *, char)">;
+       def _InterlockedOr8_nf   : AArch64NoPrefixTargetLibBuiltin<"char (char 
volatile *, char)">;
+       def _InterlockedOr8_rel  : AArch64NoPrefixTargetLibBuiltin<"char (char 
volatile *, char)">;
+       def _InterlockedOr16_acq : AArch64NoPrefixTargetLibBuiltin<"short 
(short volatile *, short)">;
+       def _InterlockedOr16_nf  : AArch64NoPrefixTargetLibBuiltin<"short 
(short volatile *, short)">;
+       def _InterlockedOr16_rel : AArch64NoPrefixTargetLibBuiltin<"short 
(short volatile *, short)">;
+       def _InterlockedOr_acq   : AArch64NoPrefixTargetLibBuiltin<"msint32_t 
(msint32_t volatile *, msint32_t)">;
+       def _InterlockedOr_nf    : AArch64NoPrefixTargetLibBuiltin<"msint32_t 
(msint32_t volatile *, msint32_t)">;
+       def _InterlockedOr_rel   : AArch64NoPrefixTargetLibBuiltin<"msint32_t 
(msint32_t volatile *, msint32_t)">;
+       def _InterlockedOr64_acq : AArch64NoPrefixTargetLibBuiltin<"long long 
int (long long int volatile *, long long int)">;
+       def _InterlockedOr64_nf  : AArch64NoPrefixTargetLibBuiltin<"long long 
int (long long int volatile *, long long int)">;
+       def _InterlockedOr64_rel : AArch64NoPrefixTargetLibBuiltin<"long long 
int (long long int volatile *, long long int)">;
+}
+
+let Attributes = [NoThrow, RequireDeclaration], Languages = 
"ALL_MS_LANGUAGES", Header = "intrin.h" in {
+       def _InterlockedXor8_acq  : AArch64NoPrefixTargetLibBuiltin<"char (char 
volatile *, char)">;
+       def _InterlockedXor8_nf   : AArch64NoPrefixTargetLibBuiltin<"char (char 
volatile *, char)">;
+       def _InterlockedXor8_rel  : AArch64NoPrefixTargetLibBuiltin<"char (char 
volatile *, char)">;
+       def _InterlockedXor16_acq : AArch64NoPrefixTargetLibBuiltin<"short 
(short volatile *, short)">;
+       def _InterlockedXor16_nf  : AArch64NoPrefixTargetLibBuiltin<"short 
(short volatile *, short)">;
+       def _InterlockedXor16_rel : AArch64NoPrefixTargetLibBuiltin<"short 
(short volatile *, short)">;
+       def _InterlockedXor_acq   : AArch64NoPrefixTargetLibBuiltin<"msint32_t 
(msint32_t volatile *, msint32_t)">;
+       def _InterlockedXor_nf    : AArch64NoPrefixTargetLibBuiltin<"msint32_t 
(msint32_t volatile *, msint32_t)">;
+       def _InterlockedXor_rel   : AArch64NoPrefixTargetLibBuiltin<"msint32_t 
(msint32_t volatile *, msint32_t)">;
+       def _InterlockedXor64_acq : AArch64NoPrefixTargetLibBuiltin<"long long 
int (long long int volatile *, long long int)">;
+       def _InterlockedXor64_nf  : AArch64NoPrefixTargetLibBuiltin<"long long 
int (long long int volatile *, long long int)">;
+       def _InterlockedXor64_rel : AArch64NoPrefixTargetLibBuiltin<"long long 
int (long long int volatile *, long long int)">;
+}
+
+let Attributes = [NoThrow, RequireDeclaration], Languages = 
"ALL_MS_LANGUAGES", Header = "intrin.h" in {
+       def _InterlockedAnd8_acq  : AArch64NoPrefixTargetLibBuiltin<"char (char 
volatile *, char)">;
+       def _InterlockedAnd8_nf   : AArch64NoPrefixTargetLibBuiltin<"char (char 
volatile *, char)">;
+       def _InterlockedAnd8_rel  : AArch64NoPrefixTargetLibBuiltin<"char (char 
volatile *, char)">;
+       def _InterlockedAnd16_acq : AArch64NoPrefixTargetLibBuiltin<"short 
(short volatile *, short)">;
+       def _InterlockedAnd16_nf  : AArch64NoPrefixTargetLibBuiltin<"short 
(short volatile *, short)">;
+       def _InterlockedAnd16_rel : AArch64NoPrefixTargetLibBuiltin<"short 
(short volatile *, short)">;
+       def _InterlockedAnd_acq   : AArch64NoPrefixTargetLibBuiltin<"msint32_t 
(msint32_t volatile *, msint32_t)">;
+       def _InterlockedAnd_nf    : AArch64NoPrefixTargetLibBuiltin<"msint32_t 
(msint32_t volatile *, msint32_t)">;
+       def _InterlockedAnd_rel   : AArch64NoPrefixTargetLibBuiltin<"msint32_t 
(msint32_t volatile *, msint32_t)">;
+       def _InterlockedAnd64_acq : AArch64NoPrefixTargetLibBuiltin<"long long 
int (long long int volatile *, long long int)">;
+       def _InterlockedAnd64_nf  : AArch64NoPrefixTargetLibBuiltin<"long long 
int (long long int volatile *, long long int)">;
+       def _InterlockedAnd64_rel : AArch64NoPrefixTargetLibBuiltin<"long long 
int (long long int volatile *, long long int)">;
+}
+
+let Attributes = [NoThrow, RequireDeclaration], Languages = 
"ALL_MS_LANGUAGES", Header = "intrin.h" in {
+       def _InterlockedIncrement16_acq : 
AArch64NoPrefixTargetLibBuiltin<"short (short volatile *)">;
+       def _InterlockedIncrement16_nf  : 
AArch64NoPrefixTargetLibBuiltin<"short (short volatile *)">;
+       def _InterlockedIncrement16_rel : 
AArch64NoPrefixTargetLibBuiltin<"short (short volatile *)">;
+       def _InterlockedIncrement_acq   : 
AArch64NoPrefixTargetLibBuiltin<"msint32_t (msint32_t volatile *)">;
+       def _InterlockedIncrement_nf    : 
AArch64NoPrefixTargetLibBuiltin<"msint32_t (msint32_t volatile *)">;
+       def _InterlockedIncrement_rel   : 
AArch64NoPrefixTargetLibBuiltin<"msint32_t (msint32_t volatile *)">;
+       def _InterlockedIncrement64_acq : AArch64NoPrefixTargetLibBuiltin<"long 
long int (long long int volatile *)">;
+       def _InterlockedIncrement64_nf  : AArch64NoPrefixTargetLibBuiltin<"long 
long int (long long int volatile *)">;
+       def _InterlockedIncrement64_rel : AArch64NoPrefixTargetLibBuiltin<"long 
long int (long long int volatile *)">;
+}
+
+let Attributes = [NoThrow, RequireDeclaration], Languages = 
"ALL_MS_LANGUAGES", Header = "intrin.h" in {
+       def _InterlockedDecrement16_acq : 
AArch64NoPrefixTargetLibBuiltin<"short (short volatile *)">;
+       def _InterlockedDecrement16_nf  : 
AArch64NoPrefixTargetLibBuiltin<"short (short volatile *)">;
+       def _InterlockedDecrement16_rel : 
AArch64NoPrefixTargetLibBuiltin<"short (short volatile *)">;
+       def _InterlockedDecrement_acq   : 
AArch64NoPrefixTargetLibBuiltin<"msint32_t (msint32_t volatile *)">;
+       def _InterlockedDecrement_nf    : 
AArch64NoPrefixTargetLibBuiltin<"msint32_t (msint32_t volatile *)">;
+       def _InterlockedDecrement_rel   : 
AArch64NoPrefixTargetLibBuiltin<"msint32_t (msint32_t volatile *)">;
+       def _InterlockedDecrement64_acq : AArch64NoPrefixTargetLibBuiltin<"long 
long int (long long int volatile *)">;
+       def _InterlockedDecrement64_nf  : AArch64NoPrefixTargetLibBuiltin<"long 
long int (long long int volatile *)">;
+       def _InterlockedDecrement64_rel : AArch64NoPrefixTargetLibBuiltin<"long 
long int (long long int volatile *)">;
+}
+
+let Attributes = [NoThrow, RequireDeclaration], Languages = 
"ALL_MS_LANGUAGES", Header = "intrin.h" in {
+       def _ReadWriteBarrier       : AArch64NoPrefixTargetLibBuiltin<"void 
()">;
+       def __getReg                : AArch64NoPrefixTargetLibBuiltin<"unsigned 
long long int (int)">;
+       def _ReadStatusReg          : AArch64NoPrefixTargetLibBuiltin<"long 
long int (int)">;
+       def _WriteStatusReg         : AArch64NoPrefixTargetLibBuiltin<"void 
(int, long long int)">;
+       def __sys                   : AArch64NoPrefixTargetLibBuiltin<"unsigned 
int (int, long long int)">;
+       def _AddressOfReturnAddress : AArch64NoPrefixTargetLibBuiltin<"void * 
()">;
+}
+
+let Attributes = [NoThrow, RequireDeclaration], Languages = 
"ALL_MS_LANGUAGES", Header = "intrin.h" in {
+       def __mulh  : AArch64NoPrefixTargetLibBuiltin<"signed long long int 
(signed long long int, signed long long int)">;
+       def __umulh : AArch64NoPrefixTargetLibBuiltin<"unsigned long long int 
(unsigned long long int, unsigned long long int)">;
+}
+
+let Attributes = [NoThrow, RequireDeclaration], Languages = 
"ALL_MS_LANGUAGES", Header = "intrin.h" in {
+       def __break : AArch64NoPrefixTargetLibBuiltin<"void (int)">;
+}
+
+let Attributes = [NoThrow, RequireDeclaration], Languages = 
"ALL_MS_LANGUAGES", Header = "intrin.h" in {
+       def __writex18byte  : AArch64NoPrefixTargetLibBuiltin<"void 
(msuint32_t, unsigned char)">;
+       def __writex18word  : AArch64NoPrefixTargetLibBuiltin<"void 
(msuint32_t, unsigned short)">;
+       def __writex18dword : AArch64NoPrefixTargetLibBuiltin<"void 
(msuint32_t, msuint32_t)">;
+       def __writex18qword : AArch64NoPrefixTargetLibBuiltin<"void 
(msuint32_t, unsigned long long int)">;
+}
+
+let Attributes = [NoThrow, RequireDeclaration], Languages = 
"ALL_MS_LANGUAGES", Header = "intrin.h" in {
+       def __readx18byte  : AArch64NoPrefixTargetLibBuiltin<"unsigned char 
(msuint32_t)">;
+       def __readx18word  : AArch64NoPrefixTargetLibBuiltin<"unsigned short 
(msuint32_t)">;
+       def __readx18dword : AArch64NoPrefixTargetLibBuiltin<"msuint32_t 
(msuint32_t)">;
+       def __readx18qword : AArch64NoPrefixTargetLibBuiltin<"unsigned long 
long int (msuint32_t)">;
+}
+
+let Attributes = [NoThrow, RequireDeclaration], Languages = 
"ALL_MS_LANGUAGES", Header = "intrin.h" in {
+       def __addx18byte  : AArch64NoPrefixTargetLibBuiltin<"void (msuint32_t, 
unsigned char)">;
+       def __addx18word  : AArch64NoPrefixTargetLibBuiltin<"void (msuint32_t, 
unsigned short)">;
+       def __addx18dword : AArch64NoPrefixTargetLibBuiltin<"void (msuint32_t, 
msuint32_t)">;
+       def __addx18qword : AArch64NoPrefixTargetLibBuiltin<"void (msuint32_t, 
unsigned long long int)">;
+}
+
+let Attributes = [NoThrow, RequireDeclaration], Languages = 
"ALL_MS_LANGUAGES", Header = "intrin.h" in {
+       def __incx18byte  : AArch64NoPrefixTargetLibBuiltin<"void 
(msuint32_t)">;
+       def __incx18word  : AArch64NoPrefixTargetLibBuiltin<"void 
(msuint32_t)">;
+       def __incx18dword : AArch64NoPrefixTargetLibBuiltin<"void 
(msuint32_t)">;
+       def __incx18qword : AArch64NoPrefixTargetLibBuiltin<"void 
(msuint32_t)">;
+}
+
+let Attributes = [NoThrow, RequireDeclaration], Languages = 
"ALL_MS_LANGUAGES", Header = "intrin.h" in {
+       def _CopyDoubleFromInt64 : AArch64NoPrefixTargetLibBuiltin<"double 
(signed long long int)">;
+       def _CopyFloatFromInt32  : AArch64NoPrefixTargetLibBuiltin<"float 
(signed int)">;
+       def _CopyInt32FromFloat  : AArch64NoPrefixTargetLibBuiltin<"signed int 
(float)">;
+       def _CopyInt64FromDouble : AArch64NoPrefixTargetLibBuiltin<"signed long 
long int (double)">;
+}
+
+let Attributes = [NoThrow, RequireDeclaration], Languages = 
"ALL_MS_LANGUAGES", Header = "intrin.h" in {
+       def _CountLeadingOnes    : AArch64NoPrefixTargetLibBuiltin<"unsigned 
int (msuint32_t)">;
+       def _CountLeadingOnes64  : AArch64NoPrefixTargetLibBuiltin<"unsigned 
int (unsigned long long int)">;
+       def _CountLeadingSigns   : AArch64NoPrefixTargetLibBuiltin<"unsigned 
int (signed msint32_t)">;
+       def _CountLeadingSigns64 : AArch64NoPrefixTargetLibBuiltin<"unsigned 
int (signed long long int)">;
+       def _CountLeadingZeros   : AArch64NoPrefixTargetLibBuiltin<"unsigned 
int (msuint32_t)">;
+       def _CountLeadingZeros64 : AArch64NoPrefixTargetLibBuiltin<"unsigned 
int (unsigned long long int)">;
+       def _CountOneBits        : AArch64NoPrefixTargetLibBuiltin<"unsigned 
int (msuint32_t)">;
+       def _CountOneBits64      : AArch64NoPrefixTargetLibBuiltin<"unsigned 
int (unsigned long long int)">;
+}
+
+let Attributes = [NoThrow, RequireDeclaration], Languages = 
"ALL_MS_LANGUAGES", Header = "intrin.h" in {
+       def __prefetch : AArch64NoPrefixTargetLibBuiltin<"void (void const *)">;
+}
+
+let Attributes = [NoThrow, RequireDeclaration], Languages = 
"ALL_MS_LANGUAGES", Header = "intrin.h" in {
+       def __hlt : AArch64NoPrefixTargetLibBuiltin<"unsigned int (unsigned 
int, ...)">;
+}

diff  --git a/clang/include/clang/Basic/BuiltinsAArch64Base.td 
b/clang/include/clang/Basic/BuiltinsAArch64Base.td
new file mode 100644
index 0000000000000..7a0aca7f65b00
--- /dev/null
+++ b/clang/include/clang/Basic/BuiltinsAArch64Base.td
@@ -0,0 +1,37 @@
+//===--- BuiltinsAArch64Base.td - AArch64 Builtin function classes ------*- 
C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM 
Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines the AArch64-specific builtin function classes.
+//
+//===----------------------------------------------------------------------===//
+
+include "clang/Basic/BuiltinsBase.td"
+
+def AArch64Prefix : NamePrefix<"__builtin_arm_">;
+
+class AArch64Builtin<string prototype> : Builtin {
+  let Spellings = [NAME];
+  let Prototype = prototype;
+  let RequiredNamePrefix = AArch64Prefix;
+}
+
+class AArch64NoPrefixBuiltin<string prototype> : Builtin {
+  let Spellings = [NAME];
+  let Prototype = prototype;
+}
+
+class AArch64TargetBuiltin<string prototype> : TargetBuiltin {
+  let Spellings = [NAME];
+  let Prototype = prototype;
+  let RequiredNamePrefix = AArch64Prefix;
+}
+
+class AArch64NoPrefixTargetLibBuiltin<string prototype> : TargetLibBuiltin {
+  let Spellings = [NAME];
+  let Prototype = prototype;
+}

diff  --git a/clang/include/clang/Basic/BuiltinsARM.def 
b/clang/include/clang/Basic/BuiltinsARM.def
index cdcc0d0d65e20..15debc7553bfe 100644
--- a/clang/include/clang/Basic/BuiltinsARM.def
+++ b/clang/include/clang/Basic/BuiltinsARM.def
@@ -186,19 +186,19 @@ BUILTIN(__builtin_arm_wfi, "v", "")
 BUILTIN(__builtin_arm_sev, "v", "")
 BUILTIN(__builtin_arm_sevl, "v", "")
 BUILTIN(__builtin_arm_dbg, "vUi", "")
-TARGET_HEADER_BUILTIN(__yield, "v", "h", ARMACLE_H, ALL_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(__wfe, "v", "h", ARMACLE_H, ALL_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(__wfi, "v", "h", ARMACLE_H, ALL_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(__sev, "v", "h", ARMACLE_H, ALL_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(__sevl, "v", "h", ARMACLE_H, ALL_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(__yield, "v", "h", ARM_ACLE_H, ALL_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(__wfe, "v", "h", ARM_ACLE_H, ALL_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(__wfi, "v", "h", ARM_ACLE_H, ALL_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(__sev, "v", "h", ARM_ACLE_H, ALL_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(__sevl, "v", "h", ARM_ACLE_H, ALL_LANGUAGES, "")
 
 // Data barrier
 BUILTIN(__builtin_arm_dmb, "vUi", "nc")
 BUILTIN(__builtin_arm_dsb, "vUi", "nc")
 BUILTIN(__builtin_arm_isb, "vUi", "nc")
-TARGET_HEADER_BUILTIN(__dmb, "vUi", "nch", ARMACLE_H, ALL_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(__dsb, "vUi", "nch", ARMACLE_H, ALL_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(__isb, "vUi", "nch", ARMACLE_H, ALL_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(__dmb, "vUi", "nch", ARM_ACLE_H, ALL_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(__dsb, "vUi", "nch", ARM_ACLE_H, ALL_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(__isb, "vUi", "nch", ARM_ACLE_H, ALL_LANGUAGES, "")
 
 // Prefetch
 BUILTIN(__builtin_arm_prefetch, "vvC*UiUi", "nc")

diff  --git a/clang/include/clang/Basic/BuiltinsBase.td 
b/clang/include/clang/Basic/BuiltinsBase.td
index af9c0fd7d3cef..1f34374148363 100644
--- a/clang/include/clang/Basic/BuiltinsBase.td
+++ b/clang/include/clang/Basic/BuiltinsBase.td
@@ -75,6 +75,10 @@ def ConstIgnoringExceptions : Attribute<"g">;
 // This function requires a specific header or an explicit declaration.
 def RequireDeclaration : Attribute<"h">;
 
+// This is a runtime library implemented function without the
+// '__builtin_' prefix. It will be implemented in compiler-rt or libgcc.
+def RuntimeLibraryFunction : Attribute<"i">;
+
 // FIXME: Why is this not simply the min_vector_width attribute?
 // Vector has to be at least N bits wide.
 class RequiredVectorWidth<int N> : IndexedAttribute<"V", N>;

diff  --git a/clang/include/clang/Basic/CMakeLists.txt 
b/clang/include/clang/Basic/CMakeLists.txt
index fefddf997fe83..9408277c04fe7 100644
--- a/clang/include/clang/Basic/CMakeLists.txt
+++ b/clang/include/clang/Basic/CMakeLists.txt
@@ -94,6 +94,10 @@ clang_tablegen(Builtins.inc -gen-clang-builtins
   SOURCE Builtins.td
   TARGET ClangBuiltins)
 
+clang_tablegen(BuiltinsAArch64.inc -gen-clang-builtins
+  SOURCE BuiltinsAArch64.td
+  TARGET ClangBuiltinsAArch64)
+
 clang_tablegen(BuiltinsAMDGPU.inc -gen-clang-builtins
   SOURCE BuiltinsAMDGPU.td
   TARGET ClangBuiltinsAMDGPU)

diff  --git a/clang/include/clang/Basic/TargetBuiltins.h 
b/clang/include/clang/Basic/TargetBuiltins.h
index 94ae62e80b65b..63fb470ea6a4f 100644
--- a/clang/include/clang/Basic/TargetBuiltins.h
+++ b/clang/include/clang/Basic/TargetBuiltins.h
@@ -84,7 +84,6 @@ namespace clang {
   };
   }
 
-  /// AArch64 builtins
   namespace AArch64 {
   enum {
     LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1,
@@ -93,8 +92,9 @@ namespace clang {
     LastSVEBuiltin = SVE::FirstTSBuiltin - 1,
     FirstSMEBuiltin = SVE::FirstTSBuiltin,
     LastSMEBuiltin = SME::FirstTSBuiltin - 1,
-  #define BUILTIN(ID, TYPE, ATTRS) BI##ID,
-  #include "clang/Basic/BuiltinsAArch64.def"
+#define GET_BUILTIN_ENUMERATORS
+#include "clang/Basic/BuiltinsAArch64.inc"
+#undef GET_BUILTIN_ENUMERATORS
     LastTSBuiltin
   };
   }

diff  --git a/clang/include/module.modulemap b/clang/include/module.modulemap
index 5cff436b61f23..ebc26fffc37f9 100644
--- a/clang/include/module.modulemap
+++ b/clang/include/module.modulemap
@@ -39,7 +39,6 @@ module Clang_Basic {
   textual header "clang/Basic/ABIVersions.def"
   textual header "clang/Basic/AMDGPUTypes.def"
   textual header "clang/Basic/BuiltinHeaders.def"
-  textual header "clang/Basic/BuiltinsAArch64.def"
   textual header "clang/Basic/BuiltinsAArch64NeonSVEBridge.def"
   textual header "clang/Basic/BuiltinsAArch64NeonSVEBridge_cg.def"
   textual header "clang/Basic/BuiltinsARM.def"

diff  --git a/clang/lib/Basic/Targets/AArch64.cpp 
b/clang/lib/Basic/Targets/AArch64.cpp
index f7ed15be75cd8..9b951e69cce33 100644
--- a/clang/lib/Basic/Targets/AArch64.cpp
+++ b/clang/lib/Basic/Targets/AArch64.cpp
@@ -43,6 +43,26 @@ static_assert(NumBuiltins ==
                NumSVENeonBridgeBuiltins + NumSMEBuiltins + 
NumAArch64Builtins));
 
 namespace clang {
+namespace AArch64 {
+#define GET_BUILTIN_STR_TABLE
+#include "clang/Basic/BuiltinsAArch64.inc"
+#undef GET_BUILTIN_STR_TABLE
+
+static constexpr Builtin::Info BuiltinInfos[] = {
+#define GET_BUILTIN_INFOS
+#include "clang/Basic/BuiltinsAArch64.inc"
+#undef GET_BUILTIN_INFOS
+};
+
+static constexpr Builtin::Info PrefixedBuiltinInfos[] = {
+#define GET_BUILTIN_PREFIXED_INFOS
+#include "clang/Basic/BuiltinsAArch64.inc"
+#undef GET_BUILTIN_PREFIXED_INFOS
+};
+static_assert((std::size(BuiltinInfos) + std::size(PrefixedBuiltinInfos)) ==
+              NumAArch64Builtins);
+} // namespace AArch64
+
 namespace NEON {
 #define GET_NEON_BUILTIN_STR_TABLE
 #include "clang/Basic/arm_neon.inc"
@@ -100,13 +120,6 @@ static constexpr llvm::StringTable 
BuiltinSVENeonBridgeStrings =
 #undef GET_SVE_BUILTINS
 #undef TARGET_BUILTIN
     ;
-static constexpr llvm::StringTable BuiltinAArch64Strings =
-    CLANG_BUILTIN_STR_TABLE_START
-#define BUILTIN CLANG_BUILTIN_STR_TABLE
-#define TARGET_BUILTIN CLANG_TARGET_BUILTIN_STR_TABLE
-#define TARGET_HEADER_BUILTIN CLANG_TARGET_HEADER_BUILTIN_STR_TABLE
-#include "clang/Basic/BuiltinsAArch64.def"
-    ;
 
 static constexpr auto BuiltinSVENeonBridgeInfos =
     Builtin::MakeInfos<NumSVENeonBridgeBuiltins>({
@@ -116,14 +129,6 @@ static constexpr auto BuiltinSVENeonBridgeInfos =
 #undef GET_SVE_BUILTINS
 #undef TARGET_BUILTIN
     });
-static constexpr auto BuiltinAArch64Infos =
-    Builtin::MakeInfos<NumAArch64Builtins>({
-#define BUILTIN CLANG_BUILTIN_ENTRY
-#define TARGET_BUILTIN CLANG_TARGET_BUILTIN_ENTRY
-#define LANGBUILTIN CLANG_LANGBUILTIN_ENTRY
-#define TARGET_HEADER_BUILTIN CLANG_TARGET_HEADER_BUILTIN_ENTRY
-#include "clang/Basic/BuiltinsAArch64.def"
-    });
 
 AArch64TargetInfo::AArch64TargetInfo(const llvm::Triple &Triple,
                                      const TargetOptions &Opts)
@@ -775,7 +780,9 @@ AArch64TargetInfo::getTargetBuiltins() const {
       {&SVE::BuiltinStrings, SVE::BuiltinInfos, "__builtin_sve_"},
       {&BuiltinSVENeonBridgeStrings, BuiltinSVENeonBridgeInfos},
       {&SME::BuiltinStrings, SME::BuiltinInfos, "__builtin_sme_"},
-      {&BuiltinAArch64Strings, BuiltinAArch64Infos},
+      {&AArch64::BuiltinStrings, AArch64::BuiltinInfos},
+      {&AArch64::BuiltinStrings, AArch64::PrefixedBuiltinInfos,
+       "__builtin_arm_"},
   };
 }
 


        
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to