diff options
Diffstat (limited to 'compiler/optimizing/loop_optimization.cc')
| -rw-r--r-- | compiler/optimizing/loop_optimization.cc | 27 | 
1 files changed, 26 insertions, 1 deletions
| diff --git a/compiler/optimizing/loop_optimization.cc b/compiler/optimizing/loop_optimization.cc index 83f31c77d3..422e58debb 100644 --- a/compiler/optimizing/loop_optimization.cc +++ b/compiler/optimizing/loop_optimization.cc @@ -1171,7 +1171,32 @@ bool HLoopOptimization::TrySetVectorType(Primitive::Type type, uint64_t* restric        }        return false;      case kMips: -      // TODO: implement MIPS SIMD. +      if (features->AsMipsInstructionSetFeatures()->HasMsa()) { +        switch (type) { +          case Primitive::kPrimBoolean: +          case Primitive::kPrimByte: +            *restrictions |= kNoDiv; +            return TrySetVectorLength(16); +          case Primitive::kPrimChar: +          case Primitive::kPrimShort: +            *restrictions |= kNoDiv | kNoStringCharAt; +            return TrySetVectorLength(8); +          case Primitive::kPrimInt: +            *restrictions |= kNoDiv; +            return TrySetVectorLength(4); +          case Primitive::kPrimLong: +            *restrictions |= kNoDiv; +            return TrySetVectorLength(2); +          case Primitive::kPrimFloat: +            *restrictions |= kNoMinMax;  // min/max(x, NaN) +            return TrySetVectorLength(4); +          case Primitive::kPrimDouble: +            *restrictions |= kNoMinMax;  // min/max(x, NaN) +            return TrySetVectorLength(2); +          default: +            break; +        }  // switch type +      }        return false;      case kMips64:        if (features->AsMips64InstructionSetFeatures()->HasMsa()) { |