| Index: src/mips64/macro-assembler-mips64.h
|
| diff --git a/src/mips64/macro-assembler-mips64.h b/src/mips64/macro-assembler-mips64.h
|
| index 09289bf1332f002c92ac981669baceab799c5404..24abd28c36abba2bc9eb26cf4e391f39d0988279 100644
|
| --- a/src/mips64/macro-assembler-mips64.h
|
| +++ b/src/mips64/macro-assembler-mips64.h
|
| @@ -337,17 +337,6 @@ class MacroAssembler: public Assembler {
|
| void Movt(Register rd, Register rs, uint16_t cc = 0);
|
| void Movf(Register rd, Register rs, uint16_t cc = 0);
|
|
|
| - // Min, Max macros.
|
| - // On pre-r6 these functions may modify at and t8 registers.
|
| - void MinNaNCheck_d(FPURegister dst, FPURegister src1, FPURegister src2,
|
| - Label* nan = nullptr);
|
| - void MaxNaNCheck_d(FPURegister dst, FPURegister src1, FPURegister src2,
|
| - Label* nan = nullptr);
|
| - void MinNaNCheck_s(FPURegister dst, FPURegister src1, FPURegister src2,
|
| - Label* nan = nullptr);
|
| - void MaxNaNCheck_s(FPURegister dst, FPURegister src1, FPURegister src2,
|
| - Label* nan = nullptr);
|
| -
|
| void Clz(Register rd, Register rs);
|
|
|
| // Jump unconditionally to given label.
|
| @@ -1411,6 +1400,29 @@ class MacroAssembler: public Assembler {
|
| Ret(ge, overflow_check, Operand(zero_reg), bd);
|
| }
|
|
|
| + // Perform a floating-point min or max operation with the
|
| + // (IEEE-754-compatible) semantics of MIPS32's Release 6 MIN.fmt/MAX.fmt.
|
| + // Some cases, typically NaNs or +/-0.0, are expected to be rare and are
|
| + // handled in out-of-line code. The specific behaviour depends on supported
|
| + // instructions.
|
| + //
|
| + // These functions assume (and assert) that !src1.is(src2). It is permitted
|
| + // for the result to alias either input register.
|
| + void Float32Max(FPURegister dst, FPURegister src1, FPURegister src2,
|
| + Label* out_of_line);
|
| + void Float32Min(FPURegister dst, FPURegister src1, FPURegister src2,
|
| + Label* out_of_line);
|
| + void Float64Max(FPURegister dst, FPURegister src1, FPURegister src2,
|
| + Label* out_of_line);
|
| + void Float64Min(FPURegister dst, FPURegister src1, FPURegister src2,
|
| + Label* out_of_line);
|
| +
|
| + // Generate out-of-line cases for the macros above.
|
| + void Float32MaxOutOfLine(FPURegister dst, FPURegister src1, FPURegister src2);
|
| + void Float32MinOutOfLine(FPURegister dst, FPURegister src1, FPURegister src2);
|
| + void Float64MaxOutOfLine(FPURegister dst, FPURegister src1, FPURegister src2);
|
| + void Float64MinOutOfLine(FPURegister dst, FPURegister src1, FPURegister src2);
|
| +
|
| // -------------------------------------------------------------------------
|
| // Runtime calls.
|
|
|
|
|