philnik created this revision. philnik requested review of this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits.
GCC has a `__builtin_bswap128` which is used for `std::byteswap()`. Clang should also add this builtin. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D114425 Files: clang/include/clang/Basic/Builtins.def clang/lib/AST/ExprConstant.cpp clang/lib/CodeGen/CGBuiltin.cpp clang/test/CodeGen/builtins.cpp Index: clang/test/CodeGen/builtins.cpp =================================================================== --- clang/test/CodeGen/builtins.cpp +++ clang/test/CodeGen/builtins.cpp @@ -20,6 +20,10 @@ decltype(__builtin_bswap32(0)) bswap32 = 42; extern uint64_t bswap64; decltype(__builtin_bswap64(0)) bswap64 = 42; +#ifdef __SIZEOF_INT128__ +extern __uint128_t bswap128; +decltype(__builtin_bswap128(0)) bswap128 = 42; +#endif #ifdef __clang__ extern uint8_t bitrev8; Index: clang/lib/CodeGen/CGBuiltin.cpp =================================================================== --- clang/lib/CodeGen/CGBuiltin.cpp +++ clang/lib/CodeGen/CGBuiltin.cpp @@ -2905,7 +2905,8 @@ } case Builtin::BI__builtin_bswap16: case Builtin::BI__builtin_bswap32: - case Builtin::BI__builtin_bswap64: { + case Builtin::BI__builtin_bswap64: + case Builtin::BI__builtin_bswap128: { return RValue::get(emitUnaryBuiltin(*this, E, Intrinsic::bswap)); } case Builtin::BI__builtin_bitreverse8: Index: clang/lib/AST/ExprConstant.cpp =================================================================== --- clang/lib/AST/ExprConstant.cpp +++ clang/lib/AST/ExprConstant.cpp @@ -11640,7 +11640,8 @@ case Builtin::BI__builtin_bswap16: case Builtin::BI__builtin_bswap32: - case Builtin::BI__builtin_bswap64: { + case Builtin::BI__builtin_bswap64: + case Builtin::BI__builtin_bswap128: { APSInt Val; if (!EvaluateInteger(E->getArg(0), Val, Info)) return false; Index: clang/include/clang/Basic/Builtins.def =================================================================== --- clang/include/clang/Basic/Builtins.def +++ clang/include/clang/Basic/Builtins.def @@ -512,6 +512,7 @@ BUILTIN(__builtin_bswap16, "UsUs", "nc") BUILTIN(__builtin_bswap32, "UZiUZi", "nc") BUILTIN(__builtin_bswap64, "UWiUWi", "nc") +BUILTIN(__builtin_bswap128, "ULLLiULLLi", "nc") BUILTIN(__builtin_bitreverse8, "UcUc", "nc") BUILTIN(__builtin_bitreverse16, "UsUs", "nc")
Index: clang/test/CodeGen/builtins.cpp =================================================================== --- clang/test/CodeGen/builtins.cpp +++ clang/test/CodeGen/builtins.cpp @@ -20,6 +20,10 @@ decltype(__builtin_bswap32(0)) bswap32 = 42; extern uint64_t bswap64; decltype(__builtin_bswap64(0)) bswap64 = 42; +#ifdef __SIZEOF_INT128__ +extern __uint128_t bswap128; +decltype(__builtin_bswap128(0)) bswap128 = 42; +#endif #ifdef __clang__ extern uint8_t bitrev8; Index: clang/lib/CodeGen/CGBuiltin.cpp =================================================================== --- clang/lib/CodeGen/CGBuiltin.cpp +++ clang/lib/CodeGen/CGBuiltin.cpp @@ -2905,7 +2905,8 @@ } case Builtin::BI__builtin_bswap16: case Builtin::BI__builtin_bswap32: - case Builtin::BI__builtin_bswap64: { + case Builtin::BI__builtin_bswap64: + case Builtin::BI__builtin_bswap128: { return RValue::get(emitUnaryBuiltin(*this, E, Intrinsic::bswap)); } case Builtin::BI__builtin_bitreverse8: Index: clang/lib/AST/ExprConstant.cpp =================================================================== --- clang/lib/AST/ExprConstant.cpp +++ clang/lib/AST/ExprConstant.cpp @@ -11640,7 +11640,8 @@ case Builtin::BI__builtin_bswap16: case Builtin::BI__builtin_bswap32: - case Builtin::BI__builtin_bswap64: { + case Builtin::BI__builtin_bswap64: + case Builtin::BI__builtin_bswap128: { APSInt Val; if (!EvaluateInteger(E->getArg(0), Val, Info)) return false; Index: clang/include/clang/Basic/Builtins.def =================================================================== --- clang/include/clang/Basic/Builtins.def +++ clang/include/clang/Basic/Builtins.def @@ -512,6 +512,7 @@ BUILTIN(__builtin_bswap16, "UsUs", "nc") BUILTIN(__builtin_bswap32, "UZiUZi", "nc") BUILTIN(__builtin_bswap64, "UWiUWi", "nc") +BUILTIN(__builtin_bswap128, "ULLLiULLLi", "nc") BUILTIN(__builtin_bitreverse8, "UcUc", "nc") BUILTIN(__builtin_bitreverse16, "UsUs", "nc")
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits