| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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 // Modified by the Subzero authors. | 5 // Modified by the Subzero authors. |
| 6 // | 6 // |
| 7 //===- subzero/src/assembler_ia32.h - Assembler for x86-32 ----------------===// | 7 //===- subzero/src/assembler_ia32.h - Assembler for x86-32 ----------------===// |
| 8 // | 8 // |
| 9 // The Subzero Code Generator | 9 // The Subzero Code Generator |
| 10 // | 10 // |
| (...skipping 379 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 390 | 390 |
| 391 typedef void (AssemblerX86::*TypedEmitXmmImm)(Type, XmmRegister, | 391 typedef void (AssemblerX86::*TypedEmitXmmImm)(Type, XmmRegister, |
| 392 const Immediate &); | 392 const Immediate &); |
| 393 | 393 |
| 394 struct XmmEmitterShiftOp { | 394 struct XmmEmitterShiftOp { |
| 395 TypedEmitXmmXmm XmmXmm; | 395 TypedEmitXmmXmm XmmXmm; |
| 396 TypedEmitXmmAddr XmmAddr; | 396 TypedEmitXmmAddr XmmAddr; |
| 397 TypedEmitXmmImm XmmImm; | 397 TypedEmitXmmImm XmmImm; |
| 398 }; | 398 }; |
| 399 | 399 |
| 400 // Cross Xmm/GPR cast instructions. |
| 401 template <typename DReg_t, typename SReg_t> struct CastEmitterRegOp { |
| 402 typedef void (AssemblerX86::*TypedEmitRegs)(Type, DReg_t, SReg_t); |
| 403 typedef void (AssemblerX86::*TypedEmitAddr)(Type, DReg_t, const Address &); |
| 404 |
| 405 TypedEmitRegs RegReg; |
| 406 TypedEmitAddr RegAddr; |
| 407 }; |
| 408 |
| 400 /* | 409 /* |
| 401 * Emit Machine Instructions. | 410 * Emit Machine Instructions. |
| 402 */ | 411 */ |
| 403 void call(GPRRegister reg); | 412 void call(GPRRegister reg); |
| 404 void call(const Address &address); | 413 void call(const Address &address); |
| 405 void call(Label *label); | 414 void call(Label *label); |
| 406 void call(const ConstantRelocatable *label); | 415 void call(const ConstantRelocatable *label); |
| 407 | 416 |
| 408 static const intptr_t kCallExternalLabelSize = 5; | 417 static const intptr_t kCallExternalLabelSize = 5; |
| 409 | 418 |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 530 void unpckhps(XmmRegister dst, XmmRegister src); | 539 void unpckhps(XmmRegister dst, XmmRegister src); |
| 531 void unpcklpd(XmmRegister dst, XmmRegister src); | 540 void unpcklpd(XmmRegister dst, XmmRegister src); |
| 532 void unpckhpd(XmmRegister dst, XmmRegister src); | 541 void unpckhpd(XmmRegister dst, XmmRegister src); |
| 533 | 542 |
| 534 void set1ps(XmmRegister dst, GPRRegister tmp, const Immediate &imm); | 543 void set1ps(XmmRegister dst, GPRRegister tmp, const Immediate &imm); |
| 535 void shufps(XmmRegister dst, XmmRegister src, const Immediate &mask); | 544 void shufps(XmmRegister dst, XmmRegister src, const Immediate &mask); |
| 536 | 545 |
| 537 void minpd(XmmRegister dst, XmmRegister src); | 546 void minpd(XmmRegister dst, XmmRegister src); |
| 538 void maxpd(XmmRegister dst, XmmRegister src); | 547 void maxpd(XmmRegister dst, XmmRegister src); |
| 539 void sqrtpd(XmmRegister dst); | 548 void sqrtpd(XmmRegister dst); |
| 540 void cvtps2pd(XmmRegister dst, XmmRegister src); | |
| 541 void cvtpd2ps(XmmRegister dst, XmmRegister src); | |
| 542 void shufpd(XmmRegister dst, XmmRegister src, const Immediate &mask); | 549 void shufpd(XmmRegister dst, XmmRegister src, const Immediate &mask); |
| 543 | 550 |
| 544 void cvtsi2ss(XmmRegister dst, GPRRegister src); | 551 void cvtdq2ps(Type, XmmRegister dst, XmmRegister src); |
| 545 void cvtsi2sd(XmmRegister dst, GPRRegister src); | 552 void cvtdq2ps(Type, XmmRegister dst, const Address &src); |
| 546 | 553 |
| 547 void cvtss2si(GPRRegister dst, XmmRegister src); | 554 void cvttps2dq(Type, XmmRegister dst, XmmRegister src); |
| 548 void cvtss2sd(XmmRegister dst, XmmRegister src); | 555 void cvttps2dq(Type, XmmRegister dst, const Address &src); |
| 549 | 556 |
| 550 void cvtsd2si(GPRRegister dst, XmmRegister src); | 557 void cvtsi2ss(Type DestTy, XmmRegister dst, GPRRegister src); |
| 551 void cvtsd2ss(XmmRegister dst, XmmRegister src); | 558 void cvtsi2ss(Type DestTy, XmmRegister dst, const Address &src); |
| 552 | 559 |
| 553 void cvttss2si(GPRRegister dst, XmmRegister src); | 560 void cvtfloat2float(Type SrcTy, XmmRegister dst, XmmRegister src); |
| 554 void cvttsd2si(GPRRegister dst, XmmRegister src); | 561 void cvtfloat2float(Type SrcTy, XmmRegister dst, const Address &src); |
| 555 | 562 |
| 556 void cvtdq2pd(XmmRegister dst, XmmRegister src); | 563 void cvttss2si(Type SrcTy, GPRRegister dst, XmmRegister src); |
| 564 void cvttss2si(Type SrcTy, GPRRegister dst, const Address &src); |
| 557 | 565 |
| 558 void ucomiss(Type Ty, XmmRegister a, XmmRegister b); | 566 void ucomiss(Type Ty, XmmRegister a, XmmRegister b); |
| 559 void ucomiss(Type Ty, XmmRegister a, const Address &b); | 567 void ucomiss(Type Ty, XmmRegister a, const Address &b); |
| 560 | 568 |
| 561 void movmskpd(GPRRegister dst, XmmRegister src); | 569 void movmskpd(GPRRegister dst, XmmRegister src); |
| 562 void movmskps(GPRRegister dst, XmmRegister src); | 570 void movmskps(GPRRegister dst, XmmRegister src); |
| 563 | 571 |
| 564 void sqrtss(Type Ty, XmmRegister dst, const Address &src); | 572 void sqrtss(Type Ty, XmmRegister dst, const Address &src); |
| 565 void sqrtss(Type Ty, XmmRegister dst, XmmRegister src); | 573 void sqrtss(Type Ty, XmmRegister dst, XmmRegister src); |
| 566 | 574 |
| (...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 806 inline void AssemblerX86::EmitFixup(AssemblerFixup *fixup) { | 814 inline void AssemblerX86::EmitFixup(AssemblerFixup *fixup) { |
| 807 buffer_.EmitFixup(fixup); | 815 buffer_.EmitFixup(fixup); |
| 808 } | 816 } |
| 809 | 817 |
| 810 inline void AssemblerX86::EmitOperandSizeOverride() { EmitUint8(0x66); } | 818 inline void AssemblerX86::EmitOperandSizeOverride() { EmitUint8(0x66); } |
| 811 | 819 |
| 812 } // end of namespace x86 | 820 } // end of namespace x86 |
| 813 } // end of namespace Ice | 821 } // end of namespace Ice |
| 814 | 822 |
| 815 #endif // SUBZERO_SRC_ASSEMBLER_IA32_H_ | 823 #endif // SUBZERO_SRC_ASSEMBLER_IA32_H_ |
| OLD | NEW |