Index: src/arm64/macro-assembler-arm64.h |
diff --git a/src/arm64/macro-assembler-arm64.h b/src/arm64/macro-assembler-arm64.h |
index 7d267a2cb0c44478db3399a4f12dc674ee26ccf1..c1ad820f69718ab742e8215ca8323336279c4d79 100644 |
--- a/src/arm64/macro-assembler-arm64.h |
+++ b/src/arm64/macro-assembler-arm64.h |
@@ -1918,12 +1918,13 @@ class MacroAssembler : public Assembler { |
// (such as %e, %f or %g) are FPRegisters, and that arguments for integer |
// placeholders are Registers. |
// |
- // A maximum of four arguments may be given to any single Printf call. The |
- // arguments must be of the same type, but they do not need to have the same |
- // size. |
+ // At the moment it is only possible to print the value of csp if it is the |
+ // current stack pointer. Otherwise, the MacroAssembler will automatically |
+ // update csp on every push (using BumpSystemStackPointer), so determining its |
+ // value is difficult. |
// |
- // The following registers cannot be printed: |
- // StackPointer(), csp. |
+ // Format placeholders that refer to more than one argument, or to a specific |
+ // argument, are not supported. This includes formats like "%1$d" or "%.*d". |
// |
// This function automatically preserves caller-saved registers so that |
// calling code can use Printf at any point without having to worry about |
@@ -1931,15 +1932,11 @@ class MacroAssembler : public Assembler { |
// a problem, preserve the important registers manually and then call |
// PrintfNoPreserve. Callee-saved registers are not used by Printf, and are |
// implicitly preserved. |
- // |
- // This function assumes (and asserts) that the current stack pointer is |
- // callee-saved, not caller-saved. This is most likely the case anyway, as a |
- // caller-saved stack pointer doesn't make a lot of sense. |
void Printf(const char * format, |
- const CPURegister& arg0 = NoCPUReg, |
- const CPURegister& arg1 = NoCPUReg, |
- const CPURegister& arg2 = NoCPUReg, |
- const CPURegister& arg3 = NoCPUReg); |
+ CPURegister arg0 = NoCPUReg, |
+ CPURegister arg1 = NoCPUReg, |
+ CPURegister arg2 = NoCPUReg, |
+ CPURegister arg3 = NoCPUReg); |
// Like Printf, but don't preserve any caller-saved registers, not even 'lr'. |
// |
@@ -2034,8 +2031,10 @@ class MacroAssembler : public Assembler { |
// arguments and stack (csp) must be prepared by the caller as for a normal |
// AAPCS64 call to 'printf'. |
// |
- // The 'type' argument specifies the type of the optional arguments. |
- void CallPrintf(CPURegister::RegisterType type = CPURegister::kNoRegister); |
+ // The 'args' argument should point to an array of variable arguments in their |
+ // proper PCS registers (and in calling order). The argument registers can |
+ // have mixed types. The format string (x0) should not be included. |
+ void CallPrintf(int arg_count = 0, const CPURegister * args = NULL); |
// Helper for throwing exceptions. Compute a handler address and jump to |
// it. See the implementation for register usage. |