Index: src/arm/assembler-arm.h |
=================================================================== |
--- src/arm/assembler-arm.h (revision 8283) |
+++ src/arm/assembler-arm.h (working copy) |
@@ -167,13 +167,16 @@ |
// Double word VFP register. |
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; |
+ // A few double registers are reserved: one as a scratch register and three |
+ // for common values not fitting the immediate field of vmov instructions. |
Søren Thygesen Gjesse
2011/06/16 09:38:07
It seems to be some of a waste to use 3 double reg
Alexandre
2011/06/16 12:58:48
I thought we never put enough pressure on double r
|
+ // d12: 255.0 |
+ // d13: -0.0 |
+ // d14: 0.0 |
+ // d15: scratch register. |
+ static const int kNumReservedRegisters = 4; |
+ static const int kNumAllocatableRegisters = kNumRegisters - |
+ kNumReservedRegisters; |
static int ToAllocationIndex(DwVfpRegister reg) { |
ASSERT(reg.code() != 0); |
@@ -188,6 +191,7 @@ |
static const char* AllocationIndexToString(int index) { |
ASSERT(index >= 0 && index < kNumAllocatableRegisters); |
const char* const names[] = { |
+ "d0", |
"d1", |
"d2", |
"d3", |
@@ -198,11 +202,7 @@ |
"d8", |
"d9", |
"d10", |
- "d11", |
- "d12", |
- "d13", |
- "d14", |
- "d15" |
+ "d11" |
}; |
return names[index]; |
} |
@@ -303,7 +303,14 @@ |
const DwVfpRegister d14 = { 14 }; |
const DwVfpRegister d15 = { 15 }; |
+// Aliases for double registers. |
+const DwVfpRegister kFirstCalleeSavedDoubleReg = d8; |
+const DwVfpRegister kLastCalleeSavedDoubleReg = d15; |
+const DwVfpRegister kDoubleReg255 = d12; |
+const DwVfpRegister kDoubleRegMinusZero = d13; |
+const DwVfpRegister kDoubleRegZero = d14; |
+ |
// Coprocessor register |
struct CRegister { |
bool is_valid() const { return 0 <= code_ && code_ < 16; } |