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 |