Index: src/arm/macro-assembler-arm.h |
=================================================================== |
--- src/arm/macro-assembler-arm.h (revision 6953) |
+++ src/arm/macro-assembler-arm.h (working copy) |
@@ -121,6 +121,15 @@ |
Condition cond = al); |
void Sbfx(Register dst, Register src, int lsb, int width, |
Condition cond = al); |
+ // The scratch register is not used for ARMv7. |
+ // scratch can be the same register as src (in which case it is trashed), but |
+ // not the same as dst. |
Søren Thygesen Gjesse
2011/02/28 09:54:32
not -> but not
Søren Thygesen Gjesse
2011/03/02 09:33:08
The but was there in the first place.
|
+ void Bfi(Register dst, |
+ Register src, |
+ Register scratch, |
+ int lsb, |
+ int width, |
+ Condition cond = al); |
void Bfc(Register dst, int lsb, int width, Condition cond = al); |
void Usat(Register dst, int satpos, const Operand& src, |
Condition cond = al); |
@@ -234,6 +243,17 @@ |
} |
} |
+ // Pop two registers. Pops rightmost register first (from lower address). |
+ void Pop(Register src1, Register src2, Condition cond = al) { |
+ ASSERT(!src1.is(src2)); |
+ if (src1.code() > src2.code()) { |
+ ldm(ia_w, sp, src1.bit() | src2.bit(), cond); |
+ } else { |
+ ldr(src2, MemOperand(sp, 4, PostIndex), cond); |
+ ldr(src1, MemOperand(sp, 4, PostIndex), cond); |
+ } |
+ } |
+ |
// Push and pop the registers that can hold pointers, as defined by the |
// RegList constant kSafepointSavedRegisters. |
void PushSafepointRegisters(); |
@@ -613,6 +633,19 @@ |
DwVfpRegister double_scratch, |
Label *not_int32); |
+// Truncates a double using a specific rounding mode. |
+// Clears the z flag (ne condition) if an overflow occurs. |
+// If exact_conversion is true, the z flag is also cleared if the conversion |
+// was inexact, ie. if the double value could not be converted exactly |
+// to a 32bit integer. |
+ void EmitVFPTruncate(VFPRoundingMode rounding_mode, |
+ SwVfpRegister result, |
+ DwVfpRegister double_input, |
+ Register scratch1, |
+ Register scratch2, |
+ CheckForInexactConversion check |
+ = kDontCheckForInexactConversion); |
+ |
// 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 |