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

Unified Diff: src/arm/macro-assembler-arm.cc

Issue 23156006: [v8-dev] ARM: Improve Lithium register constraints. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years, 4 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: src/arm/macro-assembler-arm.cc
diff --git a/src/arm/macro-assembler-arm.cc b/src/arm/macro-assembler-arm.cc
index 190e8682f711c4c9c8046b85897d485ee5d4f200..72f5cd718ba7aebb3c85d0fff037fe1f868ff10c 100644
--- a/src/arm/macro-assembler-arm.cc
+++ b/src/arm/macro-assembler-arm.cc
@@ -52,6 +52,60 @@ MacroAssembler::MacroAssembler(Isolate* arg_isolate, void* buffer, int size)
}
+void MacroAssembler::AddMemOperand(Register dst,
+ Register src1,
+ const MemOperand& src2,
+ SBit s) {
+ ldr(ip, src2);
+ add(dst, src1, Operand(ip), s);
+}
+
+
+void MacroAssembler::SubMemOperand(Register dst,
+ Register src1,
+ const MemOperand& src2,
+ SBit s) {
+ ldr(ip, src2);
+ sub(dst, src1, Operand(ip), s);
+}
+
+
+void MacroAssembler::RsbMemOperand(Register dst,
+ Register src1,
+ const MemOperand& src2,
+ SBit s) {
+ ldr(ip, src2);
+ rsb(dst, src1, Operand(ip), s);
+}
+
+
+void MacroAssembler::AndMemOperand(Register dst,
+ Register src1,
+ const MemOperand& src2,
+ SBit s) {
+ ldr(ip, src2);
+ and_(dst, src1, Operand(ip), s);
+}
+
+
+void MacroAssembler::OrrMemOperand(Register dst,
+ Register src1,
+ const MemOperand& src2,
+ SBit s) {
+ ldr(ip, src2);
+ orr(dst, src1, Operand(ip), s);
+}
+
+
+void MacroAssembler::EorMemOperand(Register dst,
+ Register src1,
+ const MemOperand& src2,
+ SBit s) {
+ ldr(ip, src2);
+ eor(dst, src1, Operand(ip), s);
+}
+
+
void MacroAssembler::Jump(Register target, Condition cond) {
bx(target, cond);
}
@@ -733,9 +787,10 @@ void MacroAssembler::VFPEnsureFPSCRState(Register scratch) {
bind(&fpscr_done);
}
-void MacroAssembler::VFPCanonicalizeNaN(const DwVfpRegister value,
+void MacroAssembler::VFPCanonicalizeNaN(const DwVfpRegister result,
+ const DwVfpRegister value,
const Condition cond) {
- vsub(value, value, kDoubleRegZero, cond);
+ vsub(result, value, kDoubleRegZero, cond);
}
@@ -2057,8 +2112,25 @@ void MacroAssembler::CompareObjectType(Register object,
Register map,
Register type_reg,
InstanceType type) {
+ const Register temp = type_reg.is(no_reg) ? ip : type_reg;
+
+ ldr(map, FieldMemOperand(object, HeapObject::kMapOffset));
+ CompareInstanceType(map, temp, type);
+}
+
+
+void MacroAssembler::CheckObjectTypeRange(Register object,
+ Register map,
+ InstanceType min_type,
+ InstanceType max_type,
+ Label* false_label) {
+ STATIC_ASSERT(Map::kInstanceTypeOffset < 4096);
+ STATIC_ASSERT(LAST_TYPE < 256);
ldr(map, FieldMemOperand(object, HeapObject::kMapOffset));
- CompareInstanceType(map, type_reg, type);
+ ldrb(ip, FieldMemOperand(map, Map::kInstanceTypeOffset));
+ sub(ip, ip, Operand(min_type));
+ cmp(ip, Operand(max_type - min_type));
+ b(hi, false_label);
}

Powered by Google App Engine
This is Rietveld 408576698