summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--compiler/optimizing/optimizing_compiler.cc50
-rw-r--r--disassembler/disassembler_riscv64.cc2
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.