mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-08 04:51:23 +00:00
Add an operator for vaba so it can be implemented using vabd.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121276 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
6b1207267f
commit
f4f39d35cd
@ -752,6 +752,9 @@ static std::string GenOpString(OpKind op, const std::string &proto,
|
||||
s += ");";
|
||||
break;
|
||||
}
|
||||
case OpAba:
|
||||
s += "__a + " + MangleName("vabd", typestr, ClassS) + "(__b, __c);";
|
||||
break;
|
||||
default:
|
||||
throw "unknown OpKind!";
|
||||
break;
|
||||
@ -1077,13 +1080,15 @@ void NeonEmitter::run(raw_ostream &OS) {
|
||||
|
||||
std::vector<Record*> RV = Records.getAllDerivedDefinitions("Inst");
|
||||
|
||||
// Emit vmovl intrinsics first so they can be used by other intrinsics.
|
||||
// Emit vmovl and vabd intrinsics first so they can be used by other
|
||||
// intrinsics.
|
||||
emitIntrinsic(OS, Records.getDef("VMOVL"));
|
||||
emitIntrinsic(OS, Records.getDef("VABD"));
|
||||
|
||||
// Unique the return+pattern types, and assign them.
|
||||
for (unsigned i = 0, e = RV.size(); i != e; ++i) {
|
||||
Record *R = RV[i];
|
||||
if (R->getName() != "VMOVL")
|
||||
if (R->getName() != "VMOVL" && R->getName() != "VABD")
|
||||
emitIntrinsic(OS, R);
|
||||
}
|
||||
|
||||
|
@ -69,7 +69,8 @@ enum OpKind {
|
||||
OpRev16,
|
||||
OpRev32,
|
||||
OpRev64,
|
||||
OpReinterpret
|
||||
OpReinterpret,
|
||||
OpAba
|
||||
};
|
||||
|
||||
enum ClassKind {
|
||||
@ -137,6 +138,7 @@ namespace llvm {
|
||||
OpMap["OP_REV32"] = OpRev32;
|
||||
OpMap["OP_REV64"] = OpRev64;
|
||||
OpMap["OP_REINT"] = OpReinterpret;
|
||||
OpMap["OP_ABA"] = OpAba;
|
||||
|
||||
Record *SI = R.getClass("SInst");
|
||||
Record *II = R.getClass("IInst");
|
||||
|
Loading…
Reference in New Issue
Block a user