diff options
author | Mandeep Singh Grang <mgrang@codeaurora.org> | 2018-10-18 23:35:35 +0000 |
---|---|---|
committer | Mandeep Singh Grang <mgrang@codeaurora.org> | 2018-10-18 23:35:35 +0000 |
commit | 2147b1af95f4913ea9ce9e6dc374bc498103fc8f (patch) | |
tree | c2375b4e3888ddfd1080fb0ed8bd2a5eb40501e6 /clang/lib/Sema/SemaChecking.cpp | |
parent | 7c80c3a8e49a19748636b7488860cbe2dd2c99d9 (diff) | |
download | bcm5719-llvm-2147b1af95f4913ea9ce9e6dc374bc498103fc8f.tar.gz bcm5719-llvm-2147b1af95f4913ea9ce9e6dc374bc498103fc8f.zip |
[COFF, ARM64] Add _ReadStatusReg and_WriteStatusReg intrinsics
Reviewers: rnk, compnerd, mstorsjo, efriedma, TomTan, haripul, javed.absar
Reviewed By: efriedma
Subscribers: dmajor, kristof.beyls, chrib, cfe-commits
Differential Revision: https://reviews.llvm.org/D53115
llvm-svn: 344765
Diffstat (limited to 'clang/lib/Sema/SemaChecking.cpp')
-rw-r--r-- | clang/lib/Sema/SemaChecking.cpp | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp index 113626374c4..239e3c8402d 100644 --- a/clang/lib/Sema/SemaChecking.cpp +++ b/clang/lib/Sema/SemaChecking.cpp @@ -1749,6 +1749,13 @@ bool Sema::CheckAArch64BuiltinFunctionCall(unsigned BuiltinID, BuiltinID == AArch64::BI__builtin_arm_wsrp) return SemaBuiltinARMSpecialReg(BuiltinID, TheCall, 0, 5, true); + // Only check the valid encoding range. Any constant in this range would be + // converted to a register of the form S1_2_C3_C4_5. Let the hardware throw + // an exception for incorrect registers. This matches MSVC behavior. + if (BuiltinID == AArch64::BI_ReadStatusReg || + BuiltinID == AArch64::BI_WriteStatusReg) + return SemaBuiltinConstantArgRange(TheCall, 0, 0, 0x7fff); + if (BuiltinID == AArch64::BI__getReg) return SemaBuiltinConstantArgRange(TheCall, 0, 0, 31); |