diff options
-rw-r--r-- | compiler/optimizing/optimizing_compiler.cc | 50 | ||||
-rw-r--r-- | disassembler/disassembler_riscv64.cc | 2 |
2 files changed, 51 insertions, 1 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. diff --git a/disassembler/disassembler_riscv64.cc b/disassembler/disassembler_riscv64.cc index 1dcf1a31cd..3592cfe4a2 100644 --- a/disassembler/disassembler_riscv64.cc +++ b/disassembler/disassembler_riscv64.cc @@ -532,7 +532,7 @@ void DisassemblerRiscv64::Printer::Print32Atomic(uint32_t insn32) { } void DisassemblerRiscv64::Printer::Print32FpOp(uint32_t insn32) { - DCHECK_EQ(insn32 & 0x7fu, 0x4fu); + DCHECK_EQ(insn32 & 0x7fu, 0x53u); uint32_t rd = GetRd(insn32); uint32_t rs1 = GetRs1(insn32); uint32_t rs2 = GetRs2(insn32); // Sometimes used to to differentiate opcodes. |