mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-10 18:34:09 +00:00
Turn this into a table, this will make more sense shortly.
Part of rdar://8470697 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@131200 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
007cfce220
commit
c493a1f317
@ -1482,6 +1482,22 @@ SDNode *X86DAGToDAGISel::SelectAtomicLoadAdd(SDNode *Node, EVT NVT) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const unsigned int AtomicOpcTbl[1][11] = {
|
||||||
|
{
|
||||||
|
X86::LOCK_OR8mi,
|
||||||
|
X86::LOCK_OR8mr,
|
||||||
|
X86::LOCK_OR16mi8,
|
||||||
|
X86::LOCK_OR16mi,
|
||||||
|
X86::LOCK_OR16mr,
|
||||||
|
X86::LOCK_OR32mi8,
|
||||||
|
X86::LOCK_OR32mi,
|
||||||
|
X86::LOCK_OR32mr,
|
||||||
|
X86::LOCK_OR64mi8,
|
||||||
|
X86::LOCK_OR64mi32,
|
||||||
|
X86::LOCK_OR64mr
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
SDNode *X86DAGToDAGISel::SelectAtomicLoadOr(SDNode *Node, EVT NVT) {
|
SDNode *X86DAGToDAGISel::SelectAtomicLoadOr(SDNode *Node, EVT NVT) {
|
||||||
if (Node->hasAnyUseOfValue(0))
|
if (Node->hasAnyUseOfValue(0))
|
||||||
return 0;
|
return 0;
|
||||||
@ -1504,41 +1520,43 @@ SDNode *X86DAGToDAGISel::SelectAtomicLoadOr(SDNode *Node, EVT NVT) {
|
|||||||
Val = CurDAG->getTargetConstant(CN->getSExtValue(), NVT);
|
Val = CurDAG->getTargetConstant(CN->getSExtValue(), NVT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Which index into the table.
|
||||||
|
unsigned index = 0;
|
||||||
unsigned Opc = 0;
|
unsigned Opc = 0;
|
||||||
switch (NVT.getSimpleVT().SimpleTy) {
|
switch (NVT.getSimpleVT().SimpleTy) {
|
||||||
default: return 0;
|
default: return 0;
|
||||||
case MVT::i8:
|
case MVT::i8:
|
||||||
if (isCN)
|
if (isCN)
|
||||||
Opc = X86::LOCK_OR8mi;
|
Opc = AtomicOpcTbl[index][0];
|
||||||
else
|
else
|
||||||
Opc = X86::LOCK_OR8mr;
|
Opc = AtomicOpcTbl[index][1];
|
||||||
break;
|
break;
|
||||||
case MVT::i16:
|
case MVT::i16:
|
||||||
if (isCN) {
|
if (isCN) {
|
||||||
if (immSext8(Val.getNode()))
|
if (immSext8(Val.getNode()))
|
||||||
Opc = X86::LOCK_OR16mi8;
|
Opc = AtomicOpcTbl[index][2];
|
||||||
else
|
else
|
||||||
Opc = X86::LOCK_OR16mi;
|
Opc = AtomicOpcTbl[index][3];
|
||||||
} else
|
} else
|
||||||
Opc = X86::LOCK_OR16mr;
|
Opc = AtomicOpcTbl[index][4];
|
||||||
break;
|
break;
|
||||||
case MVT::i32:
|
case MVT::i32:
|
||||||
if (isCN) {
|
if (isCN) {
|
||||||
if (immSext8(Val.getNode()))
|
if (immSext8(Val.getNode()))
|
||||||
Opc = X86::LOCK_OR32mi8;
|
Opc = AtomicOpcTbl[index][5];
|
||||||
else
|
else
|
||||||
Opc = X86::LOCK_OR32mi;
|
Opc = AtomicOpcTbl[index][6];
|
||||||
} else
|
} else
|
||||||
Opc = X86::LOCK_OR32mr;
|
Opc = AtomicOpcTbl[index][7];
|
||||||
break;
|
break;
|
||||||
case MVT::i64:
|
case MVT::i64:
|
||||||
if (isCN) {
|
if (isCN) {
|
||||||
if (immSext8(Val.getNode()))
|
if (immSext8(Val.getNode()))
|
||||||
Opc = X86::LOCK_OR64mi8;
|
Opc = AtomicOpcTbl[index][8];
|
||||||
else if (i64immSExt32(Val.getNode()))
|
else if (i64immSExt32(Val.getNode()))
|
||||||
Opc = X86::LOCK_OR64mi32;
|
Opc = AtomicOpcTbl[index][9];
|
||||||
} else
|
} else
|
||||||
Opc = X86::LOCK_OR64mr;
|
Opc = AtomicOpcTbl[index][10];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user