| Index: src/arm/assembler-arm.h
|
| ===================================================================
|
| --- src/arm/assembler-arm.h (revision 6941)
|
| +++ src/arm/assembler-arm.h (working copy)
|
| @@ -66,13 +66,14 @@
|
| // such that we use an enum in optimized mode, and the struct in debug
|
| // mode. This way we get the compile-time error checking in debug mode
|
| // and best performance in optimized code.
|
| -//
|
| +
|
| // Core register
|
| struct Register {
|
| static const int kNumRegisters = 16;
|
| static const int kNumAllocatableRegisters = 8;
|
|
|
| static int ToAllocationIndex(Register reg) {
|
| + ASSERT(reg.code() < kNumAllocatableRegisters);
|
| return reg.code();
|
| }
|
|
|
| @@ -132,7 +133,7 @@
|
| const Register r6 = { 6 };
|
| const Register r7 = { 7 };
|
| const Register r8 = { 8 }; // Used as context register.
|
| -const Register r9 = { 9 };
|
| +const Register r9 = { 9 }; // Used as lithium codegen scratch register.
|
| const Register r10 = { 10 }; // Used as roots register.
|
| const Register fp = { 11 };
|
| const Register ip = { 12 };
|
| @@ -166,8 +167,11 @@
|
| struct DwVfpRegister {
|
| // d0 has been excluded from allocation. This is following ia32
|
| // where xmm0 is excluded. This should be revisited.
|
| + // Currently d0 is used as a scratch register.
|
| + // d1 has also been excluded from allocation to be used as a scratch
|
| + // register as well.
|
| static const int kNumRegisters = 16;
|
| - static const int kNumAllocatableRegisters = 15;
|
| + static const int kNumAllocatableRegisters = 14;
|
|
|
| static int ToAllocationIndex(DwVfpRegister reg) {
|
| ASSERT(reg.code() != 0);
|
| @@ -176,13 +180,12 @@
|
|
|
| static DwVfpRegister FromAllocationIndex(int index) {
|
| ASSERT(index >= 0 && index < kNumAllocatableRegisters);
|
| - return from_code(index + 1);
|
| + return from_code(index + 2);
|
| }
|
|
|
| static const char* AllocationIndexToString(int index) {
|
| ASSERT(index >= 0 && index < kNumAllocatableRegisters);
|
| const char* const names[] = {
|
| - "d1",
|
| "d2",
|
| "d3",
|
| "d4",
|
| @@ -297,11 +300,18 @@
|
| const DwVfpRegister d15 = { 15 };
|
|
|
| // VFP FPSCR constants.
|
| -static const uint32_t kVFPExceptionMask = 0xf;
|
| +static const uint32_t kVFPNConditionFlagBit = 1 << 31;
|
| +static const uint32_t kVFPZConditionFlagBit = 1 << 30;
|
| +static const uint32_t kVFPCConditionFlagBit = 1 << 29;
|
| +static const uint32_t kVFPVConditionFlagBit = 1 << 28;
|
| +
|
| +static const uint32_t kVFPFlushToZeroMask = 1 << 24;
|
| +
|
| static const uint32_t kVFPRoundingModeMask = 3 << 22;
|
| -static const uint32_t kVFPFlushToZeroMask = 1 << 24;
|
| static const uint32_t kVFPRoundToMinusInfinityBits = 2 << 22;
|
|
|
| +static const uint32_t kVFPExceptionMask = 0xf;
|
| +
|
| // Coprocessor register
|
| struct CRegister {
|
| bool is_valid() const { return 0 <= code_ && code_ < 16; }
|
| @@ -1157,11 +1167,9 @@
|
| const Condition cond = al);
|
| void vcmp(const DwVfpRegister src1,
|
| const DwVfpRegister src2,
|
| - const SBit s = LeaveCC,
|
| const Condition cond = al);
|
| void vcmp(const DwVfpRegister src1,
|
| const double src2,
|
| - const SBit s = LeaveCC,
|
| const Condition cond = al);
|
| void vmrs(const Register dst,
|
| const Condition cond = al);
|
|
|