implementing shifting of literal integers
authorChris Lattner <sabre@nondot.org>
Tue, 19 Apr 2005 01:17:35 +0000 (01:17 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 19 Apr 2005 01:17:35 +0000 (01:17 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21336 91177308-0d34-0410-b5e6-96231b3b80d8

utils/TableGen/Record.cpp
utils/TableGen/Record.h

index 8c8e7b97f7bf0f7ccfcf0caaf90bdaa90310c6df..d2422ff74b30ebc82ef723333da6070020f9aceb 100644 (file)
@@ -297,6 +297,20 @@ Init *BitsInit::resolveReferences(Record &R) {
   return this;
 }
 
+Init *IntInit::getBinaryOp(BinaryOp Op, Init *RHS) {
+  IntInit *RHSi = dynamic_cast<IntInit*>(RHS);
+  if (RHSi == 0) return 0;
+
+  int NewValue;
+  switch (Op) {
+  case SHL: NewValue = Value << RHSi->getValue(); break;
+  case SRA: NewValue = Value >> RHSi->getValue(); break;
+  case SRL: NewValue = (unsigned)Value >> (unsigned)RHSi->getValue(); break;
+  }
+  return new IntInit(NewValue);
+}
+
+
 Init *IntInit::convertInitializerBitRange(const std::vector<unsigned> &Bits) {
   BitsInit *BI = new BitsInit(Bits.size());
 
index 9c5166c0cc833f315b7eb8f5f38224a35e64c1ba..82db72094b3f8b4783f274e83f01d08b99e3c027 100644 (file)
@@ -567,6 +567,8 @@ public:
   }
   virtual Init *convertInitializerBitRange(const std::vector<unsigned> &Bits);
 
+  virtual Init *getBinaryOp(BinaryOp Op, Init *RHS);
+
   virtual void print(std::ostream &OS) const { OS << Value; }
 };