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

Side by Side Diff: runtime/vm/assembler_x64.h

Issue 11573044: Inline Doubles truncate and round. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 11 months 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #ifndef VM_ASSEMBLER_X64_H_ 5 #ifndef VM_ASSEMBLER_X64_H_
6 #define VM_ASSEMBLER_X64_H_ 6 #define VM_ASSEMBLER_X64_H_
7 7
8 #ifndef VM_ASSEMBLER_H_ 8 #ifndef VM_ASSEMBLER_H_
9 #error Do not include assembler_x64.h directly; use assembler.h instead. 9 #error Do not include assembler_x64.h directly; use assembler.h instead.
10 #endif 10 #endif
(...skipping 356 matching lines...) Expand 10 before | Expand all | Expand 10 after
367 void mulsd(XmmRegister dst, XmmRegister src); 367 void mulsd(XmmRegister dst, XmmRegister src);
368 void divsd(XmmRegister dst, XmmRegister src); 368 void divsd(XmmRegister dst, XmmRegister src);
369 369
370 void comisd(XmmRegister a, XmmRegister b); 370 void comisd(XmmRegister a, XmmRegister b);
371 void cvtsi2sd(XmmRegister a, Register b); 371 void cvtsi2sd(XmmRegister a, Register b);
372 void cvttsd2siq(Register dst, XmmRegister src); 372 void cvttsd2siq(Register dst, XmmRegister src);
373 373
374 void cvtss2sd(XmmRegister dst, XmmRegister src); 374 void cvtss2sd(XmmRegister dst, XmmRegister src);
375 void cvtsd2ss(XmmRegister dst, XmmRegister src); 375 void cvtsd2ss(XmmRegister dst, XmmRegister src);
376 376
377 void pxor(XmmRegister dst, XmmRegister src);
378
379 enum RoundingMode {
380 kRoundToNearest = 0x0,
381 kRoundDown = 0x1,
382 kRoundUp = 0x2,
383 kRoundToZero = 0x3
384 };
385 void roundsd(XmmRegister dst, XmmRegister src, RoundingMode mode);
386
377 void xchgl(Register dst, Register src); 387 void xchgl(Register dst, Register src);
378 void xchgq(Register dst, Register src); 388 void xchgq(Register dst, Register src);
379 389
380 void cmpl(Register reg, const Immediate& imm); 390 void cmpl(Register reg, const Immediate& imm);
381 void cmpl(Register reg0, Register reg1); 391 void cmpl(Register reg0, Register reg1);
382 void cmpl(Register reg, const Address& address); 392 void cmpl(Register reg, const Address& address);
383 void cmpl(const Address& address, const Immediate& imm); 393 void cmpl(const Address& address, const Immediate& imm);
384 394
385 void cmpq(Register reg, const Immediate& imm); 395 void cmpq(Register reg, const Immediate& imm);
386 void cmpq(const Address& address, Register reg); 396 void cmpq(const Address& address, Register reg);
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
475 void leave(); 485 void leave();
476 void ret(); 486 void ret();
477 487
478 void movmskpd(Register dst, XmmRegister src); 488 void movmskpd(Register dst, XmmRegister src);
479 489
480 void sqrtsd(XmmRegister dst, XmmRegister src); 490 void sqrtsd(XmmRegister dst, XmmRegister src);
481 491
482 void xorpd(XmmRegister dst, const Address& src); 492 void xorpd(XmmRegister dst, const Address& src);
483 void xorpd(XmmRegister dst, XmmRegister src); 493 void xorpd(XmmRegister dst, XmmRegister src);
484 494
495 void andpd(XmmRegister dst, const Address& src);
496
485 void fldl(const Address& src); 497 void fldl(const Address& src);
486 void fstpl(const Address& dst); 498 void fstpl(const Address& dst);
487 499
488 void fildl(const Address& src); 500 void fildl(const Address& src);
489 501
490 void fincstp(); 502 void fincstp();
491 void ffree(intptr_t value); 503 void ffree(intptr_t value);
492 504
493 void fsin(); 505 void fsin();
494 void fcos(); 506 void fcos();
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
568 const FieldAddress& dest, 580 const FieldAddress& dest,
569 Register value); 581 Register value);
570 void StoreIntoObjectNoBarrier(Register object, 582 void StoreIntoObjectNoBarrier(Register object,
571 const FieldAddress& dest, 583 const FieldAddress& dest,
572 const Object& value); 584 const Object& value);
573 585
574 void DoubleNegate(XmmRegister d); 586 void DoubleNegate(XmmRegister d);
575 void FloatNegate(XmmRegister f); 587 void FloatNegate(XmmRegister f);
576 588
577 void DoubleAbs(XmmRegister reg); 589 void DoubleAbs(XmmRegister reg);
590 void DoubleRound(XmmRegister dst, XmmRegister src, XmmRegister tmp);
578 591
579 void LockCmpxchgl(const Address& address, Register reg) { 592 void LockCmpxchgl(const Address& address, Register reg) {
580 lock(); 593 lock();
581 cmpxchgl(address, reg); 594 cmpxchgl(address, reg);
582 } 595 }
583 596
584 void EnterFrame(intptr_t frame_space); 597 void EnterFrame(intptr_t frame_space);
585 void LeaveFrame(); 598 void LeaveFrame();
586 void ReserveAlignedFrameSpace(intptr_t frame_space); 599 void ReserveAlignedFrameSpace(intptr_t frame_space);
587 600
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
776 } 789 }
777 790
778 791
779 inline void Assembler::EmitOperandSizeOverride() { 792 inline void Assembler::EmitOperandSizeOverride() {
780 EmitUint8(0x66); 793 EmitUint8(0x66);
781 } 794 }
782 795
783 } // namespace dart 796 } // namespace dart
784 797
785 #endif // VM_ASSEMBLER_X64_H_ 798 #endif // VM_ASSEMBLER_X64_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698