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

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

Issue 19560003: [v8-dev] ARM: Make double registers low/high safe (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years, 5 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
« no previous file with comments | « src/arm/lithium-codegen-arm.cc ('k') | src/arm/macro-assembler-arm.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/arm/macro-assembler-arm.h
diff --git a/src/arm/macro-assembler-arm.h b/src/arm/macro-assembler-arm.h
index 747dd3b88298065d2ae6966514e5a5dadd8f17cc..8ff261b7ecb622db3290506019392173dbc5a330 100644
--- a/src/arm/macro-assembler-arm.h
+++ b/src/arm/macro-assembler-arm.h
@@ -484,6 +484,11 @@ class MacroAssembler: public Assembler {
const double imm,
const Register scratch = no_reg);
+ void VmovHigh(Register dst, DwVfpRegister src);
+ void VmovHigh(DwVfpRegister dst, Register src);
+ void VmovLow(Register dst, DwVfpRegister src);
+ void VmovLow(DwVfpRegister dst, Register src);
+
// Converts the smi or heap number in object to an int32 using the rules
// for ToInt32 as described in ECMAScript 9.5.: the value is truncated
// and brought into the range -2^31 .. +2^31 - 1.
@@ -494,14 +499,14 @@ class MacroAssembler: public Assembler {
Register scratch2,
Register scratch3,
DwVfpRegister double_scratch1,
- DwVfpRegister double_scratch2,
+ LowDwVfpRegister double_scratch2,
Label* not_int32);
// Loads the number from object into dst register.
// If |object| is neither smi nor heap number, |not_number| is jumped to
// with |object| still intact.
void LoadNumber(Register object,
- DwVfpRegister dst,
+ LowDwVfpRegister dst,
Register heap_number_map,
Register scratch,
Label* not_number);
@@ -515,7 +520,7 @@ class MacroAssembler: public Assembler {
DwVfpRegister double_dst,
Register heap_number_map,
Register scratch,
- DwVfpRegister double_scratch,
+ LowDwVfpRegister double_scratch,
Label* not_int32);
// Loads the number from object into dst as a 32-bit integer.
@@ -528,7 +533,7 @@ class MacroAssembler: public Assembler {
Register heap_number_map,
Register scratch,
DwVfpRegister double_scratch0,
- DwVfpRegister double_scratch1,
+ LowDwVfpRegister double_scratch1,
Label* not_int32);
@@ -796,8 +801,7 @@ class MacroAssembler: public Assembler {
// Copies a fixed number of fields of heap objects from src to dst.
void CopyFields(Register dst,
Register src,
- DwVfpRegister double_scratch,
- SwVfpRegister single_scratch,
+ LowDwVfpRegister double_scratch,
int field_count);
// Copies a number of bytes from src to dst. All registers are clobbered. On
@@ -874,6 +878,7 @@ class MacroAssembler: public Assembler {
Register key_reg,
Register elements_reg,
Register scratch1,
+ LowDwVfpRegister double_scratch0,
ulan 2013/07/25 11:49:54 double_scratch would be more consistent with the r
Label* fail,
int elements_offset = 0);
@@ -957,26 +962,27 @@ class MacroAssembler: public Assembler {
// Load the value of a smi object into a double register.
// The register value must be between d0 and d15.
- void SmiToDouble(DwVfpRegister value, Register smi);
+ void SmiToDouble(LowDwVfpRegister value, Register smi);
// Check if a double can be exactly represented as a signed 32-bit integer.
// Z flag set to one if true.
void TestDoubleIsInt32(DwVfpRegister double_input,
- DwVfpRegister double_scratch);
+ LowDwVfpRegister double_scratch);
// Try to convert a double to a signed 32-bit integer.
// Z flag set to one and result assigned if the conversion is exact.
void TryDoubleToInt32Exact(Register result,
DwVfpRegister double_input,
- DwVfpRegister double_scratch);
+ LowDwVfpRegister double_scratch);
// Floor a double and writes the value to the result register.
// Go to exact if the conversion is exact (to be able to test -0),
// fall through calling code if an overflow occurred, else go to done.
+ // In return, input_high is loaded with high bits of input.
void TryInt32Floor(Register result,
DwVfpRegister double_input,
Register input_high,
- DwVfpRegister double_scratch,
+ LowDwVfpRegister double_scratch,
Label* done,
Label* exact);
@@ -989,7 +995,7 @@ class MacroAssembler: public Assembler {
Register scratch,
Register scratch_high,
Register scratch_low,
- DwVfpRegister double_scratch);
+ LowDwVfpRegister double_scratch);
// Check whether d16-d31 are available on the CPU. The result is given by the
// Z condition flag: Z==0 if d16-d31 available, Z==1 otherwise.
@@ -1311,7 +1317,7 @@ class MacroAssembler: public Assembler {
void ClampDoubleToUint8(Register result_reg,
DwVfpRegister input_reg,
- DwVfpRegister temp_double_reg);
+ LowDwVfpRegister temp_double_reg);
ulan 2013/07/25 11:49:54 double_scratch would be more consistent with the r
void LoadInstanceDescriptors(Register map, Register descriptors);
« no previous file with comments | « src/arm/lithium-codegen-arm.cc ('k') | src/arm/macro-assembler-arm.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698