Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(645)

Unified Diff: runtime/vm/assembler_arm64.cc

Issue 2379733002: Recognize and optimize a.runtimeType == b.runtimeType pattern. (Closed)
Patch Set: port to all arch, make AOT opt non-speculative Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: runtime/vm/assembler_arm64.cc
diff --git a/runtime/vm/assembler_arm64.cc b/runtime/vm/assembler_arm64.cc
index 72278e967a219aeda1961063fdf09d5000085159..dde11c270453b2743cd3aa3507cbf1be94570781 100644
--- a/runtime/vm/assembler_arm64.cc
+++ b/runtime/vm/assembler_arm64.cc
@@ -682,6 +682,24 @@ void Assembler::SubImmediateSetFlags(Register dest, Register rn, int64_t imm) {
}
+void Assembler::SubImmediate(Register dest, Register rn, int64_t imm) {
regis 2016/10/08 09:10:37 Same comment as for arm.
Vyacheslav Egorov (Google) 2016/10/24 20:23:03 Done.
+ Operand op;
+ if (Operand::CanHold(imm, kXRegSizeInBits, &op) == Operand::Immediate) {
+ // Handles imm == kMinInt64.
+ sub(dest, rn, op);
+ } else if (Operand::CanHold(-imm, kXRegSizeInBits, &op) ==
+ Operand::Immediate) {
+ ASSERT(imm != kMinInt64); // Would cause erroneous overflow detection.
+ add(dest, rn, op);
+ } else {
+ // TODO(zra): Try subtracting top 12 bits, then bottom 12 bits.
+ ASSERT(rn != TMP2);
+ LoadImmediate(TMP2, imm);
+ sub(dest, rn, Operand(TMP2));
+ }
+}
+
+
void Assembler::AndImmediate(Register rd, Register rn, int64_t imm) {
Operand imm_op;
if (Operand::IsImmLogical(imm, kXRegSizeInBits, &imm_op)) {

Powered by Google App Engine
This is Rietveld 408576698