OSDN Git Service

Forbid the use of shifts in ShifterOperand in Thumb2
authorGuillaume "Vermeille" Sanchez <guillaumesa@google.com>
Wed, 11 Mar 2015 14:00:30 +0000 (14:00 +0000)
committerGuillaume Sanchez <guillaumesa@google.com>
Wed, 11 Mar 2015 16:36:08 +0000 (16:36 +0000)
Change-Id: Ib141f53e52cce3032a42fbc991303e227c98820b

compiler/utils/arm/assembler_arm.h
compiler/utils/arm/assembler_thumb2.cc

index 8730f52..dd0dba2 100644 (file)
@@ -100,6 +100,10 @@ class ShifterOperand {
     return rm_;
   }
 
+  Register GetSecondRegister() const {
+    return rs_;
+  }
+
   enum Type {
     kUnknown = -1,
     kRegister,
index 6d0571e..eb5b454 100644 (file)
@@ -921,6 +921,8 @@ void Thumb2Assembler::Emit16BitDataProcessing(Condition cond,
       use_immediate = true;
       immediate = so.GetImmediate();
     } else {
+      CHECK(!(so.IsRegister() && so.IsShift() && so.GetSecondRegister() != kNoRegister))
+          << "No register-shifted register instruction available in thumb";
       // Adjust rn and rd: only two registers will be emitted.
       switch (opcode) {
         case AND: