Index: src/arm/macro-assembler-arm.h |
=================================================================== |
--- src/arm/macro-assembler-arm.h (revision 4973) |
+++ src/arm/macro-assembler-arm.h (working copy) |
@@ -67,6 +67,17 @@ |
}; |
+// Flags used for the ObjectToDoubleVFPRegister function. |
+enum ObjectToDoubleFlags { |
+ // No special flags. |
+ NO_OBJECT_TO_DOUBLE_FLAGS = 0, |
+ // Object is known to be a non smi. |
+ OBJECT_NOT_SMI = 1 << 0, |
+ // Don't load NaNs or infinities, branch to the non number case instead. |
+ AVOID_NANS_AND_INFINITIES = 1 << 1 |
+}; |
+ |
+ |
// MacroAssembler implements a collection of frequently used macros. |
class MacroAssembler: public Assembler { |
public: |
@@ -381,7 +392,14 @@ |
Register scratch2, |
Register heap_number_map, |
Label* gc_required); |
+ void AllocateHeapNumberWithValue(Register result, |
+ DwVfpRegister value, |
+ Register scratch1, |
+ Register scratch2, |
+ Register heap_number_map, |
+ Label* gc_required); |
+ |
// --------------------------------------------------------------------------- |
// Support functions. |
@@ -469,6 +487,27 @@ |
Register outHighReg, |
Register outLowReg); |
+ // Load the value of a number object into a VFP double register. If the object |
+ // is not a number a jump to the label not_number is performed and the VFP |
+ // double register is unchanged. |
+ void ObjectToDoubleVFPRegister( |
+ Register object, |
+ DwVfpRegister value, |
+ Register scratch1, |
+ Register scratch2, |
+ Register heap_number_map, |
+ SwVfpRegister scratch3, |
+ Label* not_number, |
+ ObjectToDoubleFlags flags = NO_OBJECT_TO_DOUBLE_FLAGS); |
+ |
+ // Load the value of a smi object into a VFP double register. The register |
+ // scratch1 can be the same register as smi in which case smi will hold the |
+ // untagged value afterwards. |
+ void SmiToDoubleVFPRegister(Register smi, |
+ DwVfpRegister value, |
+ Register scratch1, |
+ SwVfpRegister scratch2); |
+ |
// Count leading zeros in a 32 bit word. On ARM5 and later it uses the clz |
// instruction. On pre-ARM5 hardware this routine gives the wrong answer |
// for 0 (31 instead of 32). Source and scratch can be the same in which case |