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

Side by Side Diff: src/assembler_ia32.cpp

Issue 640603002: emitIAS for cvtt?.*2.* (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: move check Created 6 years, 2 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
« no previous file with comments | « src/assembler_ia32.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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.cpp - Assembler for x86-32 -------------===// 7 //===- subzero/src/assembler_ia32.cpp - Assembler for x86-32 -------------===//
8 // 8 //
9 // The Subzero Code Generator 9 // The Subzero Code Generator
10 // 10 //
(...skipping 930 matching lines...) Expand 10 before | Expand all | Expand 10 after
941 } 941 }
942 942
943 void AssemblerX86::sqrtpd(XmmRegister dst) { 943 void AssemblerX86::sqrtpd(XmmRegister dst) {
944 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 944 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
945 EmitUint8(0x66); 945 EmitUint8(0x66);
946 EmitUint8(0x0F); 946 EmitUint8(0x0F);
947 EmitUint8(0x51); 947 EmitUint8(0x51);
948 EmitXmmRegisterOperand(dst, dst); 948 EmitXmmRegisterOperand(dst, dst);
949 } 949 }
950 950
951 void AssemblerX86::cvtps2pd(XmmRegister dst, XmmRegister src) {
952 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
953 EmitUint8(0x0F);
954 EmitUint8(0x5A);
955 EmitXmmRegisterOperand(dst, src);
956 }
957
958 void AssemblerX86::cvtpd2ps(XmmRegister dst, XmmRegister src) {
959 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
960 EmitUint8(0x66);
961 EmitUint8(0x0F);
962 EmitUint8(0x5A);
963 EmitXmmRegisterOperand(dst, src);
964 }
965
966 void AssemblerX86::shufpd(XmmRegister dst, XmmRegister src, 951 void AssemblerX86::shufpd(XmmRegister dst, XmmRegister src,
967 const Immediate &imm) { 952 const Immediate &imm) {
968 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 953 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
969 EmitUint8(0x66); 954 EmitUint8(0x66);
970 EmitUint8(0x0F); 955 EmitUint8(0x0F);
971 EmitUint8(0xC6); 956 EmitUint8(0xC6);
972 EmitXmmRegisterOperand(dst, src); 957 EmitXmmRegisterOperand(dst, src);
973 assert(imm.is_uint8()); 958 assert(imm.is_uint8());
974 EmitUint8(imm.value()); 959 EmitUint8(imm.value());
975 } 960 }
976 961
977 void AssemblerX86::cvtsi2ss(XmmRegister dst, GPRRegister src) { 962 void AssemblerX86::cvtdq2ps(Type /* Ignore */, XmmRegister dst,
963 XmmRegister src) {
964 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
965 EmitUint8(0x0F);
966 EmitUint8(0x5B);
967 EmitXmmRegisterOperand(dst, src);
968 }
969
970 void AssemblerX86::cvtdq2ps(Type /* Ignore */, XmmRegister dst,
971 const Address &src) {
972 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
973 EmitUint8(0x0F);
974 EmitUint8(0x5B);
975 EmitOperand(dst, src);
976 }
977
978 void AssemblerX86::cvttps2dq(Type /* Ignore */, XmmRegister dst,
979 XmmRegister src) {
978 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 980 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
979 EmitUint8(0xF3); 981 EmitUint8(0xF3);
980 EmitUint8(0x0F); 982 EmitUint8(0x0F);
981 EmitUint8(0x2A); 983 EmitUint8(0x5B);
982 EmitOperand(dst, Operand(src)); 984 EmitXmmRegisterOperand(dst, src);
983 } 985 }
984 986
985 void AssemblerX86::cvtsi2sd(XmmRegister dst, GPRRegister src) { 987 void AssemblerX86::cvttps2dq(Type /* Ignore */, XmmRegister dst,
986 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 988 const Address &src) {
987 EmitUint8(0xF2);
988 EmitUint8(0x0F);
989 EmitUint8(0x2A);
990 EmitOperand(dst, Operand(src));
991 }
992
993 void AssemblerX86::cvtss2si(GPRRegister dst, XmmRegister src) {
994 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 989 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
995 EmitUint8(0xF3); 990 EmitUint8(0xF3);
996 EmitUint8(0x0F); 991 EmitUint8(0x0F);
997 EmitUint8(0x2D); 992 EmitUint8(0x5B);
998 EmitXmmRegisterOperand(dst, src); 993 EmitOperand(dst, src);
999 } 994 }
1000 995
1001 void AssemblerX86::cvtss2sd(XmmRegister dst, XmmRegister src) { 996 void AssemblerX86::cvtsi2ss(Type DestTy, XmmRegister dst, GPRRegister src) {
1002 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 997 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1003 EmitUint8(0xF3); 998 EmitUint8(isFloat32Asserting32Or64(DestTy) ? 0xF3 : 0xF2);
999 EmitUint8(0x0F);
1000 EmitUint8(0x2A);
1001 EmitRegisterOperand(dst, src);
1002 }
1003
1004 void AssemblerX86::cvtsi2ss(Type DestTy, XmmRegister dst, const Address &src) {
1005 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1006 EmitUint8(isFloat32Asserting32Or64(DestTy) ? 0xF3 : 0xF2);
1007 EmitUint8(0x0F);
1008 EmitUint8(0x2A);
1009 EmitOperand(dst, src);
1010 }
1011
1012 void AssemblerX86::cvtfloat2float(Type SrcTy, XmmRegister dst,
1013 XmmRegister src) {
1014 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1015 // ss2sd or sd2ss
1016 EmitUint8(isFloat32Asserting32Or64(SrcTy) ? 0xF3 : 0xF2);
1004 EmitUint8(0x0F); 1017 EmitUint8(0x0F);
1005 EmitUint8(0x5A); 1018 EmitUint8(0x5A);
1006 EmitXmmRegisterOperand(dst, src); 1019 EmitXmmRegisterOperand(dst, src);
1007 } 1020 }
1008 1021
1009 void AssemblerX86::cvtsd2si(GPRRegister dst, XmmRegister src) { 1022 void AssemblerX86::cvtfloat2float(Type SrcTy, XmmRegister dst,
1023 const Address &src) {
1010 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1024 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1011 EmitUint8(0xF2); 1025 EmitUint8(isFloat32Asserting32Or64(SrcTy) ? 0xF3 : 0xF2);
1012 EmitUint8(0x0F); 1026 EmitUint8(0x0F);
1013 EmitUint8(0x2D); 1027 EmitUint8(0x5A);
1014 EmitXmmRegisterOperand(dst, src); 1028 EmitOperand(dst, src);
1015 } 1029 }
1016 1030
1017 void AssemblerX86::cvttss2si(GPRRegister dst, XmmRegister src) { 1031 void AssemblerX86::cvttss2si(Type SrcTy, GPRRegister dst, XmmRegister src) {
1018 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1032 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1019 EmitUint8(0xF3); 1033 EmitUint8(isFloat32Asserting32Or64(SrcTy) ? 0xF3 : 0xF2);
1020 EmitUint8(0x0F); 1034 EmitUint8(0x0F);
1021 EmitUint8(0x2C); 1035 EmitUint8(0x2C);
1022 EmitXmmRegisterOperand(dst, src); 1036 EmitXmmRegisterOperand(dst, src);
1023 } 1037 }
1024 1038
1025 void AssemblerX86::cvttsd2si(GPRRegister dst, XmmRegister src) { 1039 void AssemblerX86::cvttss2si(Type SrcTy, GPRRegister dst, const Address &src) {
1026 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1040 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1027 EmitUint8(0xF2); 1041 EmitUint8(isFloat32Asserting32Or64(SrcTy) ? 0xF3 : 0xF2);
1028 EmitUint8(0x0F); 1042 EmitUint8(0x0F);
1029 EmitUint8(0x2C); 1043 EmitUint8(0x2C);
1030 EmitXmmRegisterOperand(dst, src); 1044 EmitOperand(dst, src);
1031 }
1032
1033 void AssemblerX86::cvtsd2ss(XmmRegister dst, XmmRegister src) {
1034 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1035 EmitUint8(0xF2);
1036 EmitUint8(0x0F);
1037 EmitUint8(0x5A);
1038 EmitXmmRegisterOperand(dst, src);
1039 }
1040
1041 void AssemblerX86::cvtdq2pd(XmmRegister dst, XmmRegister src) {
1042 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1043 EmitUint8(0xF3);
1044 EmitUint8(0x0F);
1045 EmitUint8(0xE6);
1046 EmitXmmRegisterOperand(dst, src);
1047 } 1045 }
1048 1046
1049 void AssemblerX86::ucomiss(Type Ty, XmmRegister a, XmmRegister b) { 1047 void AssemblerX86::ucomiss(Type Ty, XmmRegister a, XmmRegister b) {
1050 AssemblerBuffer::EnsureCapacity ensured(&buffer_); 1048 AssemblerBuffer::EnsureCapacity ensured(&buffer_);
1051 if (Ty == IceType_f64) 1049 if (Ty == IceType_f64)
1052 EmitUint8(0x66); 1050 EmitUint8(0x66);
1053 EmitUint8(0x0F); 1051 EmitUint8(0x0F);
1054 EmitUint8(0x2E); 1052 EmitUint8(0x2E);
1055 EmitXmmRegisterOperand(a, b); 1053 EmitXmmRegisterOperand(a, b);
1056 } 1054 }
(...skipping 1290 matching lines...) Expand 10 before | Expand all | Expand 10 after
2347 assert(shifter == RegX8632::Encoded_Reg_ecx); 2345 assert(shifter == RegX8632::Encoded_Reg_ecx);
2348 (void)shifter; 2346 (void)shifter;
2349 if (Ty == IceType_i16) 2347 if (Ty == IceType_i16)
2350 EmitOperandSizeOverride(); 2348 EmitOperandSizeOverride();
2351 EmitUint8(isByteSizedArithType(Ty) ? 0xD2 : 0xD3); 2349 EmitUint8(isByteSizedArithType(Ty) ? 0xD2 : 0xD3);
2352 EmitOperand(rm, operand); 2350 EmitOperand(rm, operand);
2353 } 2351 }
2354 2352
2355 } // end of namespace x86 2353 } // end of namespace x86
2356 } // end of namespace Ice 2354 } // end of namespace Ice
OLDNEW
« no previous file with comments | « src/assembler_ia32.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698