Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(549)

Side by Side Diff: src/mips64/macro-assembler-mips64.h

Issue 2534413002: MIPS: Improve Float(32|64)(Max|Min). (Closed)
Patch Set: MIPS: Improve Float(32|64)(Max|Min). Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/mips/macro-assembler-mips.cc ('k') | src/mips64/macro-assembler-mips64.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef V8_MIPS_MACRO_ASSEMBLER_MIPS_H_ 5 #ifndef V8_MIPS_MACRO_ASSEMBLER_MIPS_H_
6 #define V8_MIPS_MACRO_ASSEMBLER_MIPS_H_ 6 #define V8_MIPS_MACRO_ASSEMBLER_MIPS_H_
7 7
8 #include "src/assembler.h" 8 #include "src/assembler.h"
9 #include "src/globals.h" 9 #include "src/globals.h"
10 #include "src/mips64/assembler-mips64.h" 10 #include "src/mips64/assembler-mips64.h"
(...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after
330 330
331 void Move(FPURegister dst, float imm); 331 void Move(FPURegister dst, float imm);
332 void Move(FPURegister dst, double imm); 332 void Move(FPURegister dst, double imm);
333 333
334 // Conditional move. 334 // Conditional move.
335 void Movz(Register rd, Register rs, Register rt); 335 void Movz(Register rd, Register rs, Register rt);
336 void Movn(Register rd, Register rs, Register rt); 336 void Movn(Register rd, Register rs, Register rt);
337 void Movt(Register rd, Register rs, uint16_t cc = 0); 337 void Movt(Register rd, Register rs, uint16_t cc = 0);
338 void Movf(Register rd, Register rs, uint16_t cc = 0); 338 void Movf(Register rd, Register rs, uint16_t cc = 0);
339 339
340 // Min, Max macros.
341 // On pre-r6 these functions may modify at and t8 registers.
342 void MinNaNCheck_d(FPURegister dst, FPURegister src1, FPURegister src2,
343 Label* nan = nullptr);
344 void MaxNaNCheck_d(FPURegister dst, FPURegister src1, FPURegister src2,
345 Label* nan = nullptr);
346 void MinNaNCheck_s(FPURegister dst, FPURegister src1, FPURegister src2,
347 Label* nan = nullptr);
348 void MaxNaNCheck_s(FPURegister dst, FPURegister src1, FPURegister src2,
349 Label* nan = nullptr);
350
351 void Clz(Register rd, Register rs); 340 void Clz(Register rd, Register rs);
352 341
353 // Jump unconditionally to given label. 342 // Jump unconditionally to given label.
354 // We NEED a nop in the branch delay slot, as it used by v8, for example in 343 // We NEED a nop in the branch delay slot, as it used by v8, for example in
355 // CodeGenerator::ProcessDeferred(). 344 // CodeGenerator::ProcessDeferred().
356 // Currently the branch delay slot is filled by the MacroAssembler. 345 // Currently the branch delay slot is filled by the MacroAssembler.
357 // Use rather b(Label) for code generation. 346 // Use rather b(Label) for code generation.
358 void jmp(Label* L) { 347 void jmp(Label* L) {
359 Branch(L); 348 Branch(L);
360 } 349 }
(...skipping 1043 matching lines...) Expand 10 before | Expand all | Expand 10 after
1404 } 1393 }
1405 1394
1406 void RetOnOverflow(Register overflow_check, BranchDelaySlot bd = PROTECT) { 1395 void RetOnOverflow(Register overflow_check, BranchDelaySlot bd = PROTECT) {
1407 Ret(lt, overflow_check, Operand(zero_reg), bd); 1396 Ret(lt, overflow_check, Operand(zero_reg), bd);
1408 } 1397 }
1409 1398
1410 void RetOnNoOverflow(Register overflow_check, BranchDelaySlot bd = PROTECT) { 1399 void RetOnNoOverflow(Register overflow_check, BranchDelaySlot bd = PROTECT) {
1411 Ret(ge, overflow_check, Operand(zero_reg), bd); 1400 Ret(ge, overflow_check, Operand(zero_reg), bd);
1412 } 1401 }
1413 1402
1403 // Perform a floating-point min or max operation with the
1404 // (IEEE-754-compatible) semantics of MIPS32's Release 6 MIN.fmt/MAX.fmt.
1405 // Some cases, typically NaNs or +/-0.0, are expected to be rare and are
1406 // handled in out-of-line code. The specific behaviour depends on supported
1407 // instructions.
1408 //
1409 // These functions assume (and assert) that !src1.is(src2). It is permitted
1410 // for the result to alias either input register.
1411 void Float32Max(FPURegister dst, FPURegister src1, FPURegister src2,
1412 Label* out_of_line);
1413 void Float32Min(FPURegister dst, FPURegister src1, FPURegister src2,
1414 Label* out_of_line);
1415 void Float64Max(FPURegister dst, FPURegister src1, FPURegister src2,
1416 Label* out_of_line);
1417 void Float64Min(FPURegister dst, FPURegister src1, FPURegister src2,
1418 Label* out_of_line);
1419
1420 // Generate out-of-line cases for the macros above.
1421 void Float32MaxOutOfLine(FPURegister dst, FPURegister src1, FPURegister src2);
1422 void Float32MinOutOfLine(FPURegister dst, FPURegister src1, FPURegister src2);
1423 void Float64MaxOutOfLine(FPURegister dst, FPURegister src1, FPURegister src2);
1424 void Float64MinOutOfLine(FPURegister dst, FPURegister src1, FPURegister src2);
1425
1414 // ------------------------------------------------------------------------- 1426 // -------------------------------------------------------------------------
1415 // Runtime calls. 1427 // Runtime calls.
1416 1428
1417 // See comments at the beginning of CEntryStub::Generate. 1429 // See comments at the beginning of CEntryStub::Generate.
1418 inline void PrepareCEntryArgs(int num_args) { li(a0, num_args); } 1430 inline void PrepareCEntryArgs(int num_args) { li(a0, num_args); }
1419 1431
1420 inline void PrepareCEntryFunction(const ExternalReference& ref) { 1432 inline void PrepareCEntryFunction(const ExternalReference& ref) {
1421 li(a1, Operand(ref)); 1433 li(a1, Operand(ref));
1422 } 1434 }
1423 1435
(...skipping 564 matching lines...) Expand 10 before | Expand all | Expand 10 after
1988 dd(GetLabelFunction(index)); 2000 dd(GetLabelFunction(index));
1989 } 2001 }
1990 } 2002 }
1991 2003
1992 #define ACCESS_MASM(masm) masm-> 2004 #define ACCESS_MASM(masm) masm->
1993 2005
1994 } // namespace internal 2006 } // namespace internal
1995 } // namespace v8 2007 } // namespace v8
1996 2008
1997 #endif // V8_MIPS_MACRO_ASSEMBLER_MIPS_H_ 2009 #endif // V8_MIPS_MACRO_ASSEMBLER_MIPS_H_
OLDNEW
« no previous file with comments | « src/mips/macro-assembler-mips.cc ('k') | src/mips64/macro-assembler-mips64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698