diff options
author | Chris Lattner <sabre@nondot.org> | 2003-08-06 20:08:25 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2003-08-06 20:08:25 +0000 |
commit | c232818432af88e8830cd45ee3c77738351302c4 (patch) | |
tree | 4187442253cbd0d1c377ee2af1c9931e27e9f38f /lib/VMCore | |
parent | e895a740c762c48b308bb3ebc8b76ad68b009569 (diff) | |
download | llvm-c232818432af88e8830cd45ee3c77738351302c4.tar.gz llvm-c232818432af88e8830cd45ee3c77738351302c4.tar.bz2 llvm-c232818432af88e8830cd45ee3c77738351302c4.tar.xz |
Add a bunch of new Alpha Intrinsics for Rahul Joshi
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7646 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/VMCore')
-rw-r--r-- | lib/VMCore/Function.cpp | 32 | ||||
-rw-r--r-- | lib/VMCore/Verifier.cpp | 19 |
2 files changed, 43 insertions, 8 deletions
diff --git a/lib/VMCore/Function.cpp b/lib/VMCore/Function.cpp index 6d78711411..c7eb2ca5b7 100644 --- a/lib/VMCore/Function.cpp +++ b/lib/VMCore/Function.cpp @@ -163,12 +163,36 @@ unsigned Function::getIntrinsicID() const { getName()[1] != 'l' || getName()[2] != 'v' || getName()[3] != 'm') return 0; // All intrinsics start with 'llvm.' + // a table of all Alpha intrinsic functions + struct { + std::string name; // The name of the intrinsic + unsigned id; // Its ID number + } alpha_intrinsics[] = { + { "llvm.alpha.ctlz", LLVMIntrinsic::alpha_ctlz }, + { "llvm.alpha.cttz", LLVMIntrinsic::alpha_cttz }, + { "llvm.alpha.ctpop", LLVMIntrinsic::alpha_ctpop }, + { "llvm.alpha.umulh", LLVMIntrinsic::alpha_umulh }, + { "llvm.alpha.vecop", LLVMIntrinsic::alpha_vecop }, + { "llvm.alpha.pup", LLVMIntrinsic::alpha_pup }, + { "llvm.alpha.bytezap", LLVMIntrinsic::alpha_bytezap }, + { "llvm.alpha.bytemanip", LLVMIntrinsic::alpha_bytemanip }, + { "llvm.alpha.dfp_bop", LLVMIntrinsic::alpha_dfpbop }, + { "llvm.alpha.dfp_uop", LLVMIntrinsic::alpha_dfpuop }, + { "llvm.alpha.unordered", LLVMIntrinsic::alpha_unordered }, + { "llvm.alpha.uqtodfp", LLVMIntrinsic::alpha_uqtodfp }, + { "llvm.alpha.uqtosfp", LLVMIntrinsic::alpha_uqtosfp }, + { "llvm.alpha.dfptosq", LLVMIntrinsic::alpha_dfptosq }, + { "llvm.alpha.sfptosq", LLVMIntrinsic::alpha_sfptosq }, + }; + const unsigned num_alpha_intrinsics = + sizeof(alpha_intrinsics) / sizeof(*alpha_intrinsics); + switch (getName()[5]) { case 'a': - if (getName() == "llvm.alpha.ctlz") return LLVMIntrinsic::alpha_ctlz; - if (getName() == "llvm.alpha.cttz") return LLVMIntrinsic::alpha_cttz; - if (getName() == "llvm.alpha.ctpop") return LLVMIntrinsic::alpha_ctpop; - if (getName() == "llvm.alpha.umulh") return LLVMIntrinsic::alpha_umulh; + for (unsigned i = 0; i < num_alpha_intrinsics; ++i) { + if (getName() == alpha_intrinsics[i].name) + return alpha_intrinsics[i].id; + } break; case 'l': if (getName() == "llvm.longjmp") return LLVMIntrinsic::longjmp; diff --git a/lib/VMCore/Verifier.cpp b/lib/VMCore/Verifier.cpp index 84556cddc1..a15733af12 100644 --- a/lib/VMCore/Verifier.cpp +++ b/lib/VMCore/Verifier.cpp @@ -522,10 +522,21 @@ void Verifier::visitIntrinsicFunctionCall(LLVMIntrinsic::ID ID, CallInst &CI) { case LLVMIntrinsic::setjmp: NumArgs = 1; break; case LLVMIntrinsic::longjmp: NumArgs = 2; break; - case LLVMIntrinsic::alpha_ctlz: NumArgs = 1; break; - case LLVMIntrinsic::alpha_cttz: NumArgs = 1; break; - case LLVMIntrinsic::alpha_ctpop: NumArgs = 1; break; - case LLVMIntrinsic::alpha_umulh: NumArgs = 2; break; + case LLVMIntrinsic::alpha_ctlz: NumArgs = 1; break; + case LLVMIntrinsic::alpha_cttz: NumArgs = 1; break; + case LLVMIntrinsic::alpha_ctpop: NumArgs = 1; break; + case LLVMIntrinsic::alpha_umulh: NumArgs = 2; break; + case LLVMIntrinsic::alpha_vecop: NumArgs = 4; break; + case LLVMIntrinsic::alpha_pup: NumArgs = 3; break; + case LLVMIntrinsic::alpha_bytezap: NumArgs = 2; break; + case LLVMIntrinsic::alpha_bytemanip: NumArgs = 3; break; + case LLVMIntrinsic::alpha_dfpbop: NumArgs = 3; break; + case LLVMIntrinsic::alpha_dfpuop: NumArgs = 2; break; + case LLVMIntrinsic::alpha_unordered: NumArgs = 2; break; + case LLVMIntrinsic::alpha_uqtodfp: NumArgs = 2; break; + case LLVMIntrinsic::alpha_uqtosfp: NumArgs = 2; break; + case LLVMIntrinsic::alpha_dfptosq: NumArgs = 2; break; + case LLVMIntrinsic::alpha_sfptosq: NumArgs = 2; break; case LLVMIntrinsic::not_intrinsic: assert(0 && "Invalid intrinsic!"); NumArgs = 0; break; |