diff options
Diffstat (limited to 'compiler')
-rw-r--r-- | compiler/optimizing/optimizing_compiler.cc | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/compiler/optimizing/optimizing_compiler.cc b/compiler/optimizing/optimizing_compiler.cc index 62cae41665..f86ee4f70e 100644 --- a/compiler/optimizing/optimizing_compiler.cc +++ b/compiler/optimizing/optimizing_compiler.cc @@ -747,6 +747,56 @@ static bool CanAssembleGraphForRiscv64(HGraph* graph) { case HInstruction::kReturn: case HInstruction::kReturnVoid: case HInstruction::kSuspendCheck: + case HInstruction::kDoubleConstant: + case HInstruction::kFloatConstant: + case HInstruction::kIntConstant: + case HInstruction::kLongConstant: + case HInstruction::kAbove: + case HInstruction::kAboveOrEqual: + case HInstruction::kBelow: + case HInstruction::kBelowOrEqual: + case HInstruction::kEqual: + case HInstruction::kGreaterThan: + case HInstruction::kGreaterThanOrEqual: + case HInstruction::kLessThan: + case HInstruction::kLessThanOrEqual: + case HInstruction::kNotEqual: + case HInstruction::kCompare: + case HInstruction::kIf: + case HInstruction::kAdd: + case HInstruction::kAnd: + case HInstruction::kOr: + case HInstruction::kSub: + case HInstruction::kXor: + case HInstruction::kRor: + case HInstruction::kShl: + case HInstruction::kShr: + case HInstruction::kUShr: + case HInstruction::kAbs: + case HInstruction::kBooleanNot: + case HInstruction::kMul: + break; + case HInstruction::kInvokeStaticOrDirect: { + Intrinsics intrinsic = it.Current()->AsInvokeStaticOrDirect()->GetIntrinsic(); + if (intrinsic != Intrinsics::kDoubleDoubleToRawLongBits && + intrinsic != Intrinsics::kDoubleIsInfinite && + intrinsic != Intrinsics::kDoubleLongBitsToDouble && + intrinsic != Intrinsics::kFloatFloatToRawIntBits && + intrinsic != Intrinsics::kFloatIsInfinite && + intrinsic != Intrinsics::kFloatIntBitsToFloat && + intrinsic != Intrinsics::kMemoryPeekByte && + intrinsic != Intrinsics::kMemoryPeekIntNative && + intrinsic != Intrinsics::kMemoryPeekLongNative && + intrinsic != Intrinsics::kMemoryPeekShortNative && + intrinsic != Intrinsics::kMemoryPokeByte && + intrinsic != Intrinsics::kMemoryPokeIntNative && + intrinsic != Intrinsics::kMemoryPokeLongNative && + intrinsic != Intrinsics::kMemoryPokeShortNative) { + return false; + } + break; + } + case HInstruction::kCurrentMethod: break; default: // Unimplemented instruction. |