| Index: src/mips/macro-assembler-mips.h
|
| diff --git a/src/mips/macro-assembler-mips.h b/src/mips/macro-assembler-mips.h
|
| index 38115bc6d87fd024665e54d55014bb9f3336fe7a..ec4c27d97a18e052bbe9dd6bf092554c7fc1abfe 100644
|
| --- a/src/mips/macro-assembler-mips.h
|
| +++ b/src/mips/macro-assembler-mips.h
|
| @@ -305,17 +305,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.
|
| @@ -1296,6 +1285,31 @@ class MacroAssembler: public Assembler {
|
| Label* overflow_label, Label* no_overflow_label,
|
| Register scratch = at);
|
|
|
| + // 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(DoubleRegister dst, DoubleRegister src1, DoubleRegister src2,
|
| + Label* out_of_line);
|
| + void Float64Min(DoubleRegister dst, DoubleRegister src1, DoubleRegister 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(DoubleRegister dst, DoubleRegister src1,
|
| + DoubleRegister src2);
|
| + void Float64MinOutOfLine(DoubleRegister dst, DoubleRegister src1,
|
| + DoubleRegister src2);
|
| +
|
| // -------------------------------------------------------------------------
|
| // Runtime calls.
|
|
|
|
|