mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-09-25 17:20:48 +00:00
SDAG: Merge the meat of two ExpandAtomic implementations.
The copies already diverged, don't let them become any worse. Reduce redundancy in code with a little macro metaprogramming. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@231401 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -664,6 +664,44 @@ RTLIB::Libcall RTLIB::getUINTTOFP(EVT OpVT, EVT RetVT) {
|
||||
return UNKNOWN_LIBCALL;
|
||||
}
|
||||
|
||||
RTLIB::Libcall RTLIB::getATOMIC(unsigned Opc, MVT VT) {
|
||||
#define OP_TO_LIBCALL(Name, Enum) \
|
||||
case Name: \
|
||||
switch (VT.SimpleTy) { \
|
||||
default: \
|
||||
return UNKNOWN_LIBCALL; \
|
||||
case MVT::i8: \
|
||||
return Enum##_1; \
|
||||
case MVT::i16: \
|
||||
return Enum##_2; \
|
||||
case MVT::i32: \
|
||||
return Enum##_4; \
|
||||
case MVT::i64: \
|
||||
return Enum##_8; \
|
||||
case MVT::i128: \
|
||||
return Enum##_16; \
|
||||
}
|
||||
|
||||
switch (Opc) {
|
||||
OP_TO_LIBCALL(ISD::ATOMIC_SWAP, SYNC_LOCK_TEST_AND_SET)
|
||||
OP_TO_LIBCALL(ISD::ATOMIC_CMP_SWAP, SYNC_VAL_COMPARE_AND_SWAP)
|
||||
OP_TO_LIBCALL(ISD::ATOMIC_LOAD_ADD, SYNC_FETCH_AND_ADD)
|
||||
OP_TO_LIBCALL(ISD::ATOMIC_LOAD_SUB, SYNC_FETCH_AND_SUB)
|
||||
OP_TO_LIBCALL(ISD::ATOMIC_LOAD_AND, SYNC_FETCH_AND_AND)
|
||||
OP_TO_LIBCALL(ISD::ATOMIC_LOAD_OR, SYNC_FETCH_AND_OR)
|
||||
OP_TO_LIBCALL(ISD::ATOMIC_LOAD_XOR, SYNC_FETCH_AND_XOR)
|
||||
OP_TO_LIBCALL(ISD::ATOMIC_LOAD_NAND, SYNC_FETCH_AND_NAND)
|
||||
OP_TO_LIBCALL(ISD::ATOMIC_LOAD_MAX, SYNC_FETCH_AND_MAX)
|
||||
OP_TO_LIBCALL(ISD::ATOMIC_LOAD_UMAX, SYNC_FETCH_AND_UMAX)
|
||||
OP_TO_LIBCALL(ISD::ATOMIC_LOAD_MIN, SYNC_FETCH_AND_MIN)
|
||||
OP_TO_LIBCALL(ISD::ATOMIC_LOAD_UMIN, SYNC_FETCH_AND_UMIN)
|
||||
}
|
||||
|
||||
#undef OP_TO_LIBCALL
|
||||
|
||||
return UNKNOWN_LIBCALL;
|
||||
}
|
||||
|
||||
/// InitCmpLibcallCCs - Set default comparison libcall CC.
|
||||
///
|
||||
static void InitCmpLibcallCCs(ISD::CondCode *CCs) {
|
||||
|
Reference in New Issue
Block a user