Chromium Code Reviews| Index: src/x64/macro-assembler-x64.h |
| diff --git a/src/x64/macro-assembler-x64.h b/src/x64/macro-assembler-x64.h |
| index a080f1b3f002f033ff0727b762e221766fea31dd..de2070ab8d02341df16efee65cbdf413b1114252 100644 |
| --- a/src/x64/macro-assembler-x64.h |
| +++ b/src/x64/macro-assembler-x64.h |
| @@ -41,6 +41,13 @@ static const Register kScratchRegister = r10; |
| // Forward declaration. |
| class JumpTarget; |
| +struct SmiIndex { |
|
William Hesse
2009/09/15 10:12:09
Are we allowed to create constructors for structs,
Lasse Reichstein
2009/09/15 10:39:08
Yes (I had to check to be sure).
|
| + SmiIndex(Register index_register, ScaleFactor scale) |
| + : reg(index_register), |
| + scale(scale) {} |
| + Register reg; |
| + ScaleFactor scale; |
| +}; |
| // MacroAssembler implements a collection of frequently used macros. |
| class MacroAssembler: public Assembler { |
| @@ -241,7 +248,7 @@ class MacroAssembler: public Assembler { |
| int32_t constant, |
| Label* on_not_smi_result); |
| - // Negating a smi can give a negative zero or too larget positive value. |
| + // Negating a smi can give a negative zero or too large positive value. |
| void SmiNeg(Register dst, |
| Register src, |
| Label* on_not_smi_result); |
| @@ -253,6 +260,7 @@ class MacroAssembler: public Assembler { |
| Register src1, |
| Register src2, |
| Label* on_not_smi_result); |
| + |
| // Subtracts smi values and return the result as a smi. |
| // If dst is src1, then src1 will be destroyed, even if |
| // the operation is unsuccessful. |
| @@ -260,6 +268,7 @@ class MacroAssembler: public Assembler { |
| Register src1, |
| Register src2, |
| Label* on_not_smi_result); |
| + |
| // Multiplies smi values and return the result as a smi, |
| // if possible. |
| // If dst is src1, then src1 will be destroyed, even if |
| @@ -335,6 +344,19 @@ class MacroAssembler: public Assembler { |
| Register src2, |
| Label* on_not_smis); |
| + // Converts, if necessary, a smi to a combination of number and |
| + // multiplier to be used as a scaled index. |
| + // The src register contains a *positive* smi value. The shift is the |
| + // power of two to multiply the index value by (e.g. |
| + // to index by smi-value * kPointerSize, pass the smi and kPointerSizeLog2). |
| + // The returned index register may be either src or dst, depending |
| + // on what is most efficient. If src and dst are different registers, |
| + // src is always unchanged. |
|
William Hesse
2009/09/15 10:12:09
Don't those two sentences contradict each other?
Lasse Reichstein
2009/09/15 10:39:08
It can happen if an unchanged src combined with a
|
| + SmiIndex SmiToIndex(Register dst, Register src, int shift); |
| + |
| + // Converts a positive smi to a negative index. |
| + SmiIndex SmiToNegativeIndex(Register dst, Register src, int shift); |
| + |
| // --------------------------------------------------------------------------- |
| // Macro instructions |