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

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

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.h
diff --git a/src/arm/macro-assembler-arm.h b/src/arm/macro-assembler-arm.h
index 8b9fa2b22162bf0e1b1e1d8343bb3ebd1771fa10..431f01249e2e0422091b295e6ca8755a81d80145 100644
--- a/src/arm/macro-assembler-arm.h
+++ b/src/arm/macro-assembler-arm.h
@@ -86,6 +86,34 @@ class MacroAssembler: public Assembler {
// macro assembler.
MacroAssembler(Isolate* isolate, void* buffer, int size);
+ // Helper instructions using the macro assembler temporary register (ip) to
+ // perform their task. If the MemOperand is used used more than once then it
+ // is more efficient to load it separately.
+ void AddMemOperand(Register dst,
+ Register src1,
+ const MemOperand& src2,
+ SBit s = LeaveCC);
+ void SubMemOperand(Register dst,
+ Register src1,
+ const MemOperand& src2,
+ SBit s = LeaveCC);
+ void RsbMemOperand(Register dst,
+ Register src1,
+ const MemOperand& src2,
+ SBit s = LeaveCC);
+ void AndMemOperand(Register dst,
+ Register src1,
+ const MemOperand& src2,
+ SBit s = LeaveCC);
+ void OrrMemOperand(Register dst,
+ Register src1,
+ const MemOperand& src2,
+ SBit s = LeaveCC);
+ void EorMemOperand(Register dst,
+ Register src1,
+ const MemOperand& src2,
+ SBit s = LeaveCC);
+
// Jump, Call, and Ret pseudo instructions implementing inter-working.
void Jump(Register target, Condition cond = al);
void Jump(Address target, RelocInfo::Mode rmode, Condition cond = al);
@@ -461,8 +489,13 @@ class MacroAssembler: public Assembler {
void VFPEnsureFPSCRState(Register scratch);
// If the value is a NaN, canonicalize the value else, do nothing.
- void VFPCanonicalizeNaN(const DwVfpRegister value,
+ void VFPCanonicalizeNaN(const DwVfpRegister result,
+ const DwVfpRegister value,
const Condition cond = al);
+ void VFPCanonicalizeNaN(const DwVfpRegister value,
+ const Condition cond = al) {
+ VFPCanonicalizeNaN(value, value, cond);
+ }
// Compare double values and move the result to the normal condition flags.
void VFPCompareAndSetFlags(const DwVfpRegister src1,
@@ -842,11 +875,20 @@ class MacroAssembler: public Assembler {
// are the same register). It leaves the heap object in the heap_object
// register unless the heap_object register is the same register as one of the
// other registers.
+ // Type_reg can be no_reg. In that case ip is used.
void CompareObjectType(Register heap_object,
Register map,
Register type_reg,
InstanceType type);
+ // Compare object type for heap object. Branch to false_label if type
+ // is lower than min_type or greater than max_type.
+ void CheckObjectTypeRange(Register heap_object,
+ Register map,
+ InstanceType min_type,
+ InstanceType max_type,
+ Label* false_label);
+
// Compare instance type in a map. map contains a valid map object whose
// object type should be compared with the given type. This both
// sets the flags and leaves the object type in the type_reg register.

Powered by Google App Engine
This is Rietveld 408576698