Changeset 106676 in vbox for trunk/src/VBox/ValidationKit
- Timestamp:
- Oct 25, 2024 6:21:56 AM (4 months ago)
- svn:sync-xref-src-repo-rev:
- 165544
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-4-template.mac
r106471 r106676 71 71 72 72 ;; 73 ; FSxBX and its variants allow a memory reference to be embedded into a test 74 ; instruction. `xBX' adjusts automatically to the addressing model: BX, EBX, 75 ; or RBX depending on the number of address bits. FSxBX_D and so on allow to 76 ; force a particular memory reference size; this is necessary for some AVX 77 ; instructions where the mentioned XMM/YMM/ZMM register size doesn't fully 78 ; control the memory size to be used. Macros are repeatedly redefined in 79 ; order to pick up the current address-model-specific `xBX' value. (Other 80 ; sizes could be defined: B=byte=1, W=word=2, T=tword=10(x87), z=zword=32) 81 ; 82 %ifndef BS3CPUINSTR4_DEFINE_FSxBX_DEFINED 83 %define BS3CPUINSTR4_DEFINE_FSxBX_DEFINED 84 %macro BS3CPUINSTR4_DEFINE_FSxBX 0 85 %define FSxBX [fs:xBX] ; natural size of the instruction 86 %define FSxBX_D dword [fs:xBX] ; dword = 32 bits = 4 bytes = 2 words 87 %define FSxBX_Q qword [fs:xBX] ; qword = 64 bits = 8 bytes = 4 words 88 %define FSxBX_O oword [fs:xBX] ; oword = 128 bits = 16 bytes = 8 words 89 %define FSxBX_Y yword [fs:xBX] ; yword = 256 bits = 32 bytes = 16 words 90 %endmacro 91 %macro BS3CPUINSTR4_UNDEF_FSxBX 0 92 %undef FSxBX 93 %undef FSxBX_D 94 %undef FSxBX_Q 95 %undef FSxBX_O 96 %undef FSxBX_Y 97 %endmacro 98 %endif ; !BS3CPUINSTR4_DEFINE_FSxBX_DEFINED 99 100 ;; 73 101 ; The EMIT_INSTR_PLUS_ICEBP macros is for creating a common function for and 74 ; named after a single instruction, followed by a looping ICEBP. 75 ; 76 ; This works like a prefix to the instruction invocation, only exception is that 77 ; instead of [fs:xBX] you write FSxBS as that's what is wanted in the name. 102 ; named after a single instruction & args, followed by a looping ICEBP. 78 103 ; 79 104 %ifndef EMIT_INSTR_PLUS_ICEBP_DEFINED … … 82 107 %macro EMIT_INSTR_PLUS_ICEBP 2 83 108 BS3CPUINSTR4_PROC_BEGIN_CMN bs3CpuInstr4_ %+ %1 %+ _ %+ %2 %+ _icebp 84 %define FSxBX [fs:xBX]109 BS3CPUINSTR4_DEFINE_FSxBX 85 110 %1 %2 86 %undefFSxBX111 BS3CPUINSTR4_UNDEF_FSxBX 87 112 .again: 88 113 icebp … … 93 118 %macro EMIT_INSTR_PLUS_ICEBP 3 94 119 BS3CPUINSTR4_PROC_BEGIN_CMN bs3CpuInstr4_ %+ %1 %+ _ %+ %2 %+ _ %+ %3 %+ _icebp 95 %define FSxBX [fs:xBX]120 BS3CPUINSTR4_DEFINE_FSxBX 96 121 %1 %2, %3 97 %undefFSxBX122 BS3CPUINSTR4_UNDEF_FSxBX 98 123 .again: 99 124 icebp … … 104 129 %macro EMIT_INSTR_PLUS_ICEBP 4 105 130 BS3CPUINSTR4_PROC_BEGIN_CMN bs3CpuInstr4_ %+ %1 %+ _ %+ %2 %+ _ %+ %3 %+ _ %+ %4 %+ _icebp 106 %define FSxBX [fs:xBX]131 BS3CPUINSTR4_DEFINE_FSxBX 107 132 %1 %2, %3, %4 108 %undefFSxBX133 BS3CPUINSTR4_UNDEF_FSxBX 109 134 .again: 110 135 icebp … … 115 140 %macro EMIT_INSTR_PLUS_ICEBP 5 116 141 BS3CPUINSTR4_PROC_BEGIN_CMN bs3CpuInstr4_ %+ %1 %+ _ %+ %2 %+ _ %+ %3 %+ _ %+ %4 %+ _ %+ %5 %+ _icebp 117 %define FSxBX [fs:xBX]142 BS3CPUINSTR4_DEFINE_FSxBX 118 143 %1 %2, %3, %4, %5 119 %undefFSxBX144 BS3CPUINSTR4_UNDEF_FSxBX 120 145 .again: 121 146 icebp … … 846 871 EMIT_INSTR_PLUS_ICEBP_C64 vrsqrtss, XMM8, XMM8, XMM8 847 872 873 ; 874 ;; cvtpi2ps 875 ; 876 ; SSE-128, int32 -> fp32 (packed:2; from MMX register) 877 EMIT_INSTR_PLUS_ICEBP cvtpi2ps, XMM1, MM1 878 EMIT_INSTR_PLUS_ICEBP cvtpi2ps, XMM1, FSxBX 879 EMIT_INSTR_PLUS_ICEBP_C64 cvtpi2ps, XMM8, MM1 880 EMIT_INSTR_PLUS_ICEBP_C64 cvtpi2ps, XMM8, FSxBX 881 ; note: transition from x87 FPU to MMX; takes FPU exceptions (SDM does not mention MM forms only?) 882 ; 883 ;; cvtps2pi 884 ; 885 ; SSE-128, fp32 -> int32 (packed:2; to MMX register) 886 EMIT_INSTR_PLUS_ICEBP cvtps2pi, MM1, XMM1 887 EMIT_INSTR_PLUS_ICEBP cvtps2pi, MM1, FSxBX 888 EMIT_INSTR_PLUS_ICEBP_C64 cvtps2pi, MM1, XMM8 889 ; note: transition from x87 FPU to MMX; takes FPU exceptions 890 891 ; 892 ;; cvttps2pi 893 ; 894 ; SSE-128, fp32 -> int32 (packed:2; truncated; to MMX register) 895 EMIT_INSTR_PLUS_ICEBP cvttps2pi, MM1, XMM1 896 EMIT_INSTR_PLUS_ICEBP cvttps2pi, MM1, FSxBX 897 EMIT_INSTR_PLUS_ICEBP_C64 cvttps2pi, MM1, XMM8 898 ; note: transition from x87 FPU to MMX; takes FPU exceptions 899 ; 900 ;; cvtsi2ss 901 ; 902 ; SSE-128, int32 -> fp32 (single) 903 EMIT_INSTR_PLUS_ICEBP cvtsi2ss, XMM1, EAX 904 EMIT_INSTR_PLUS_ICEBP cvtsi2ss, XMM1, FSxBX_D 905 EMIT_INSTR_PLUS_ICEBP_C64 cvtsi2ss, XMM8, R8D 906 EMIT_INSTR_PLUS_ICEBP_C64 cvtsi2ss, XMM8, FSxBX_D 907 ; SSE-128, int64 -> fp32 (single) 908 EMIT_INSTR_PLUS_ICEBP_C64 cvtsi2ss, XMM1, RAX 909 EMIT_INSTR_PLUS_ICEBP_C64 cvtsi2ss, XMM1, FSxBX_Q 910 EMIT_INSTR_PLUS_ICEBP_C64 cvtsi2ss, XMM8, R8 911 EMIT_INSTR_PLUS_ICEBP_C64 cvtsi2ss, XMM8, FSxBX_Q 912 ; AVX-128, int32 -> fp32 (single) 913 EMIT_INSTR_PLUS_ICEBP vcvtsi2ss, XMM1, XMM2, EAX 914 EMIT_INSTR_PLUS_ICEBP vcvtsi2ss, XMM1, XMM2, FSxBX_D 915 EMIT_INSTR_PLUS_ICEBP_C64 vcvtsi2ss, XMM8, XMM9, R8D 916 EMIT_INSTR_PLUS_ICEBP_C64 vcvtsi2ss, XMM8, XMM9, FSxBX_D 917 ; AVX-128, int64 -> fp32 (single) 918 EMIT_INSTR_PLUS_ICEBP vcvtsi2ss, XMM1, XMM2, RAX ;; @todo this assembles in 16/32 mode; SDM says VEX.W1 ignored in non-64 bit 919 EMIT_INSTR_PLUS_ICEBP vcvtsi2ss, XMM1, XMM2, FSxBX_Q ;; @todo this assembles in 16/32 mode; SDM says VEX.W1 ignored in non-64 bit 920 EMIT_INSTR_PLUS_ICEBP_C64 vcvtsi2ss, XMM8, XMM9, R8 921 EMIT_INSTR_PLUS_ICEBP_C64 vcvtsi2ss, XMM8, XMM9, FSxBX_Q 922 ; AVX-128, int32 -> fp32, same-reg (single) 923 EMIT_INSTR_PLUS_ICEBP vcvtsi2ss, XMM1, XMM1, EAX 924 EMIT_INSTR_PLUS_ICEBP vcvtsi2ss, XMM1, XMM1, FSxBX_D 925 EMIT_INSTR_PLUS_ICEBP_C64 vcvtsi2ss, XMM8, XMM8, R8D 926 EMIT_INSTR_PLUS_ICEBP_C64 vcvtsi2ss, XMM8, XMM8, FSxBX_D 927 ; AVX-128, int64 -> fp32, same-reg (single) 928 EMIT_INSTR_PLUS_ICEBP vcvtsi2ss, XMM1, XMM1, RAX ;; @todo this assembles in 16/32 mode, but should it...? 929 EMIT_INSTR_PLUS_ICEBP vcvtsi2ss, XMM1, XMM1, FSxBX_Q ;; @todo this assembles in 16/32 mode, but should it...? 930 EMIT_INSTR_PLUS_ICEBP_C64 vcvtsi2ss, XMM8, XMM8, R8 931 EMIT_INSTR_PLUS_ICEBP_C64 vcvtsi2ss, XMM8, XMM8, FSxBX_Q 932 ; @todo test with VEX.L=1 (as if asking for YMM)? SDM says 'unpredictable behavior'... 933 ; @todo same-reg int32 -> fp32 (SDM says W1 ignored in 32-bit modes) (see above) 934 935 ; 936 ;; cvtss2si 937 ; 938 ; SSE-128, fp32 -> int32 939 EMIT_INSTR_PLUS_ICEBP cvtss2si, EAX, XMM1 940 EMIT_INSTR_PLUS_ICEBP cvtss2si, EAX, FSxBX 941 EMIT_INSTR_PLUS_ICEBP_C64 cvtss2si, R8D, XMM8 942 EMIT_INSTR_PLUS_ICEBP_C64 cvtss2si, R8D, FSxBX 943 ; SSE-128, fp32 -> int64 944 EMIT_INSTR_PLUS_ICEBP_C64 cvtss2si, RAX, XMM1 945 EMIT_INSTR_PLUS_ICEBP_C64 cvtss2si, RAX, FSxBX 946 EMIT_INSTR_PLUS_ICEBP_C64 cvtss2si, R8, XMM8 947 EMIT_INSTR_PLUS_ICEBP_C64 cvtss2si, R8, FSxBX 948 ; AVX-128, fp32 -> int32 949 EMIT_INSTR_PLUS_ICEBP vcvtss2si, EAX, XMM1 950 EMIT_INSTR_PLUS_ICEBP vcvtss2si, EAX, FSxBX 951 EMIT_INSTR_PLUS_ICEBP_C64 vcvtss2si, R8D, XMM8 952 EMIT_INSTR_PLUS_ICEBP_C64 vcvtss2si, R8D, FSxBX 953 ; AVX-128, fp32 -> int64 954 EMIT_INSTR_PLUS_ICEBP vcvtss2si, RAX, XMM1 955 EMIT_INSTR_PLUS_ICEBP vcvtss2si, RAX, FSxBX 956 EMIT_INSTR_PLUS_ICEBP_C64 vcvtss2si, R8, XMM8 957 EMIT_INSTR_PLUS_ICEBP_C64 vcvtss2si, R8, FSxBX 958 ; @todo test with VEX.W=1 in 16/32-bit modes; SDM says behaves as if W=0 959 ; @todo test with VEX.L=1 (as if asking for YMM)? SDM says 'unpredictable behavior'... 960 961 ; 962 ;; cvttss2si 963 ; 964 ; SSE-128, fp32 -> int32 (single; truncated) 965 EMIT_INSTR_PLUS_ICEBP cvttss2si, EAX, XMM1 966 EMIT_INSTR_PLUS_ICEBP cvttss2si, EAX, FSxBX 967 EMIT_INSTR_PLUS_ICEBP_C64 cvttss2si, R8D, XMM8 968 EMIT_INSTR_PLUS_ICEBP_C64 cvttss2si, R8D, FSxBX 969 ; SSE-128, fp32 -> int64 (single; truncated) 970 EMIT_INSTR_PLUS_ICEBP_C64 cvttss2si, RAX, XMM1 971 EMIT_INSTR_PLUS_ICEBP_C64 cvttss2si, RAX, FSxBX 972 EMIT_INSTR_PLUS_ICEBP_C64 cvttss2si, R8, XMM8 973 EMIT_INSTR_PLUS_ICEBP_C64 cvttss2si, R8, FSxBX 974 ; AVX-128, fp32 -> int32 (single; truncated) 975 EMIT_INSTR_PLUS_ICEBP vcvttss2si, EAX, XMM1 976 EMIT_INSTR_PLUS_ICEBP vcvttss2si, EAX, FSxBX 977 EMIT_INSTR_PLUS_ICEBP_C64 vcvttss2si, R8D, XMM8 978 EMIT_INSTR_PLUS_ICEBP_C64 vcvttss2si, R8D, FSxBX 979 ; AVX-128, fp32 -> int64 (single; truncated) 980 EMIT_INSTR_PLUS_ICEBP vcvttss2si, RAX, XMM1 981 EMIT_INSTR_PLUS_ICEBP vcvttss2si, RAX, FSxBX 982 EMIT_INSTR_PLUS_ICEBP_C64 vcvttss2si, R8, XMM8 983 EMIT_INSTR_PLUS_ICEBP_C64 vcvttss2si, R8, FSxBX 984 ; @todo test with VEX.W=1 in 16/32-bit modes; SDM says behaves as if W=0 985 ; @todo test with VEX.L=1 (as if asking for YMM)? SDM says 'unpredictable behavior'... 986 987 ; 988 ;; cvtpi2pd 989 ; 990 ; SSE-128, int32 -> fp64 (packed:2; from MMX register) 991 EMIT_INSTR_PLUS_ICEBP cvtpi2pd, XMM1, MM1 992 EMIT_INSTR_PLUS_ICEBP cvtpi2pd, XMM1, FSxBX 993 EMIT_INSTR_PLUS_ICEBP_C64 cvtpi2pd, XMM8, MM1 994 EMIT_INSTR_PLUS_ICEBP_C64 cvtpi2pd, XMM8, FSxBX 995 ; note: transition from x87 FPU to MMX; takes FPU exceptions (MM forms only) 996 997 ; 998 ;; cvtpd2pi 999 ; 1000 ; SSE-128, fp64 -> int32 (packed:2; to MMX register) 1001 EMIT_INSTR_PLUS_ICEBP cvtpd2pi, MM1, XMM1 1002 EMIT_INSTR_PLUS_ICEBP cvtpd2pi, MM1, FSxBX 1003 EMIT_INSTR_PLUS_ICEBP_C64 cvtpd2pi, MM1, XMM8 1004 ; note: transition from x87 FPU to MMX; takes FPU exceptions 1005 1006 ; 1007 ;; cvttpd2pi 1008 ; 1009 ; SSE-128, fp64 -> int32 (packed:2; truncated; to MMX register) 1010 EMIT_INSTR_PLUS_ICEBP cvttpd2pi, MM1, XMM1 1011 EMIT_INSTR_PLUS_ICEBP cvttpd2pi, MM1, FSxBX 1012 EMIT_INSTR_PLUS_ICEBP_C64 cvttpd2pi, MM1, XMM8 1013 ; note: transition from x87 FPU to MMX; takes FPU exceptions 1014 1015 ; 1016 ;; cvtsi2sd 1017 ; 1018 ; SSE-128, int32 -> fp64 (single) 1019 EMIT_INSTR_PLUS_ICEBP cvtsi2sd, XMM1, EAX 1020 EMIT_INSTR_PLUS_ICEBP cvtsi2sd, XMM1, FSxBX_D 1021 EMIT_INSTR_PLUS_ICEBP_C64 cvtsi2sd, XMM8, R8D 1022 EMIT_INSTR_PLUS_ICEBP_C64 cvtsi2sd, XMM8, FSxBX_D 1023 ; SSE-128, int64 -> fp64 (single) 1024 EMIT_INSTR_PLUS_ICEBP_C64 cvtsi2sd, XMM1, RAX 1025 EMIT_INSTR_PLUS_ICEBP_C64 cvtsi2sd, XMM1, FSxBX_Q 1026 EMIT_INSTR_PLUS_ICEBP_C64 cvtsi2sd, XMM8, R8 1027 EMIT_INSTR_PLUS_ICEBP_C64 cvtsi2sd, XMM8, FSxBX_Q 1028 ; AVX-128, int32 -> fp64 (single) 1029 EMIT_INSTR_PLUS_ICEBP vcvtsi2sd, XMM1, XMM2, EAX 1030 EMIT_INSTR_PLUS_ICEBP vcvtsi2sd, XMM1, XMM2, FSxBX_D 1031 EMIT_INSTR_PLUS_ICEBP_C64 vcvtsi2sd, XMM8, XMM9, EAX 1032 EMIT_INSTR_PLUS_ICEBP_C64 vcvtsi2sd, XMM8, XMM9, FSxBX_D 1033 ; AVX-128, int64 -> fp64 (single) 1034 EMIT_INSTR_PLUS_ICEBP vcvtsi2sd, XMM1, XMM2, RAX 1035 EMIT_INSTR_PLUS_ICEBP vcvtsi2sd, XMM1, XMM2, FSxBX_Q 1036 EMIT_INSTR_PLUS_ICEBP_C64 vcvtsi2sd, XMM8, XMM9, RAX 1037 EMIT_INSTR_PLUS_ICEBP_C64 vcvtsi2sd, XMM8, XMM9, FSxBX_Q 1038 ; AVX-128, int32 -> fp64, same-reg (single) 1039 EMIT_INSTR_PLUS_ICEBP vcvtsi2sd, XMM1, XMM1, EAX 1040 EMIT_INSTR_PLUS_ICEBP vcvtsi2sd, XMM1, XMM1, FSxBX_D 1041 EMIT_INSTR_PLUS_ICEBP_C64 vcvtsi2sd, XMM8, XMM8, EAX 1042 EMIT_INSTR_PLUS_ICEBP_C64 vcvtsi2sd, XMM8, XMM8, FSxBX_D 1043 ; AVX-128, int64 -> fp64, same-reg (single) 1044 EMIT_INSTR_PLUS_ICEBP vcvtsi2sd, XMM1, XMM1, RAX 1045 EMIT_INSTR_PLUS_ICEBP vcvtsi2sd, XMM1, XMM1, FSxBX_Q 1046 EMIT_INSTR_PLUS_ICEBP_C64 vcvtsi2sd, XMM8, XMM8, RAX 1047 EMIT_INSTR_PLUS_ICEBP_C64 vcvtsi2sd, XMM8, XMM8, FSxBX_Q 1048 ; @todo test with VEX.W=1 in 16/32-bit modes; SDM says behaves as if W=0 1049 ; @todo test with VEX.L=1 (as if asking for YMM)? SDM says 'unpredictable behavior'... 1050 1051 ; 1052 ;; cvtsd2si 1053 ; 1054 ; SSE-128, fp64 -> int32 (single) 1055 EMIT_INSTR_PLUS_ICEBP cvtsd2si, EAX, XMM1 1056 EMIT_INSTR_PLUS_ICEBP cvtsd2si, EAX, FSxBX 1057 EMIT_INSTR_PLUS_ICEBP_C64 cvtsd2si, R8D, XMM8 1058 EMIT_INSTR_PLUS_ICEBP_C64 cvtsd2si, R8D, FSxBX 1059 ; SSE-128, fp64 -> int64 (single) 1060 EMIT_INSTR_PLUS_ICEBP_C64 cvtsd2si, RAX, XMM1 1061 EMIT_INSTR_PLUS_ICEBP_C64 cvtsd2si, RAX, FSxBX 1062 EMIT_INSTR_PLUS_ICEBP_C64 cvtsd2si, R8, XMM8 1063 EMIT_INSTR_PLUS_ICEBP_C64 cvtsd2si, R8, FSxBX 1064 ; AVX-128, fp64 -> int32 (single) 1065 EMIT_INSTR_PLUS_ICEBP vcvtsd2si, EAX, XMM1 1066 EMIT_INSTR_PLUS_ICEBP vcvtsd2si, EAX, FSxBX 1067 EMIT_INSTR_PLUS_ICEBP_C64 vcvtsd2si, R8D, XMM8 1068 EMIT_INSTR_PLUS_ICEBP_C64 vcvtsd2si, R8D, FSxBX 1069 ; AVX-128, fp64 -> int64 (single) 1070 EMIT_INSTR_PLUS_ICEBP vcvtsd2si, RAX, XMM1 ;; @todo this assembles in 16/32 mode; SDM says VEX.W1 ignored in non-64 bit 1071 EMIT_INSTR_PLUS_ICEBP vcvtsd2si, RAX, FSxBX ;; @todo this assembles in 16/32 mode; SDM says VEX.W1 ignored in non-64 bit 1072 EMIT_INSTR_PLUS_ICEBP_C64 vcvtsd2si, R8, XMM8 1073 EMIT_INSTR_PLUS_ICEBP_C64 vcvtsd2si, R8, FSxBX 1074 ; @todo test with VEX.L=1 (as if asking for YMM)? SDM says 'unpredictable behavior'... 1075 ; @todo same-reg int32 -> fp32 (SDM says W1 ignored in 32-bit modes) (see above) 1076 1077 ; 1078 ;; cvttsd2si 1079 ; 1080 ; SSE-128, fp64 -> int32 (single; truncated) 1081 EMIT_INSTR_PLUS_ICEBP cvttsd2si, EAX, XMM1 1082 EMIT_INSTR_PLUS_ICEBP cvttsd2si, EAX, FSxBX 1083 EMIT_INSTR_PLUS_ICEBP_C64 cvttsd2si, R8D, XMM8 1084 EMIT_INSTR_PLUS_ICEBP_C64 cvttsd2si, R8D, FSxBX 1085 ; SSE-128, fp64 -> int64 (single; truncated) 1086 EMIT_INSTR_PLUS_ICEBP_C64 cvttsd2si, RAX, XMM1 1087 EMIT_INSTR_PLUS_ICEBP_C64 cvttsd2si, RAX, FSxBX 1088 EMIT_INSTR_PLUS_ICEBP_C64 cvttsd2si, R8, XMM8 1089 EMIT_INSTR_PLUS_ICEBP_C64 cvttsd2si, R8, FSxBX 1090 ; AVX-128, fp64 -> int32 (single; truncated) 1091 EMIT_INSTR_PLUS_ICEBP vcvttsd2si, EAX, XMM1 1092 EMIT_INSTR_PLUS_ICEBP vcvttsd2si, EAX, FSxBX 1093 EMIT_INSTR_PLUS_ICEBP_C64 vcvttsd2si, R8D, XMM8 1094 EMIT_INSTR_PLUS_ICEBP_C64 vcvttsd2si, R8D, FSxBX 1095 ; AVX-128, fp64 -> int64 (single; truncated) 1096 EMIT_INSTR_PLUS_ICEBP vcvttsd2si, RAX, XMM1 1097 EMIT_INSTR_PLUS_ICEBP vcvttsd2si, RAX, FSxBX 1098 EMIT_INSTR_PLUS_ICEBP_C64 vcvttsd2si, R8, XMM8 1099 EMIT_INSTR_PLUS_ICEBP_C64 vcvttsd2si, R8, FSxBX 1100 ; @todo test with VEX.W=1 in 16/32-bit modes; SDM says behaves as if W=0 1101 ; @todo test with VEX.L=1 (as if asking for YMM)? SDM says 'unpredictable behavior'... 1102 1103 ; 1104 ;; cvtdq2ps 1105 ; 1106 ; SSE-128, int32 -> fp32 (packed:4) 1107 EMIT_INSTR_PLUS_ICEBP cvtdq2ps, XMM1, XMM2 1108 EMIT_INSTR_PLUS_ICEBP cvtdq2ps, XMM1, FSxBX 1109 EMIT_INSTR_PLUS_ICEBP_C64 cvtdq2ps, XMM8, XMM9 1110 EMIT_INSTR_PLUS_ICEBP_C64 cvtdq2ps, XMM8, FSxBX 1111 ; AVX-128, int32 -> fp32 (packed:4) 1112 EMIT_INSTR_PLUS_ICEBP vcvtdq2ps, XMM1, XMM2 1113 EMIT_INSTR_PLUS_ICEBP vcvtdq2ps, XMM1, FSxBX 1114 EMIT_INSTR_PLUS_ICEBP_C64 vcvtdq2ps, XMM8, XMM9 1115 EMIT_INSTR_PLUS_ICEBP_C64 vcvtdq2ps, XMM8, FSxBX 1116 ; AVX-256, int32 -> fp32 (packed:8) 1117 EMIT_INSTR_PLUS_ICEBP vcvtdq2ps, YMM1, YMM2 1118 EMIT_INSTR_PLUS_ICEBP vcvtdq2ps, YMM1, FSxBX 1119 EMIT_INSTR_PLUS_ICEBP_C64 vcvtdq2ps, YMM8, YMM9 1120 EMIT_INSTR_PLUS_ICEBP_C64 vcvtdq2ps, YMM8, FSxBX 1121 ; SSE-128, int32 -> fp32, same-reg (packed:4) 1122 EMIT_INSTR_PLUS_ICEBP cvtdq2ps, XMM1, XMM1 1123 EMIT_INSTR_PLUS_ICEBP_C64 cvtdq2ps, XMM8, XMM8 1124 ; AVX-128, int32 -> fp32, same-reg (packed:4) 1125 EMIT_INSTR_PLUS_ICEBP vcvtdq2ps, XMM1, XMM1 1126 EMIT_INSTR_PLUS_ICEBP_C64 vcvtdq2ps, XMM8, XMM8 1127 ; AVX-256, int32 -> fp32, same-reg (packed:8) 1128 EMIT_INSTR_PLUS_ICEBP vcvtdq2ps, YMM1, YMM1 1129 EMIT_INSTR_PLUS_ICEBP_C64 vcvtdq2ps, YMM8, YMM8 1130 1131 ; 1132 ;; cvtps2dq 1133 ; 1134 ; SSE-128, fp32 -> int32 (packed:4) 1135 EMIT_INSTR_PLUS_ICEBP cvtps2dq, XMM1, XMM2 1136 EMIT_INSTR_PLUS_ICEBP cvtps2dq, XMM1, FSxBX 1137 EMIT_INSTR_PLUS_ICEBP_C64 cvtps2dq, XMM8, XMM9 1138 EMIT_INSTR_PLUS_ICEBP_C64 cvtps2dq, XMM8, FSxBX 1139 ; AVX-128, fp32 -> int32 (packed:4) 1140 EMIT_INSTR_PLUS_ICEBP vcvtps2dq, XMM1, XMM2 1141 EMIT_INSTR_PLUS_ICEBP vcvtps2dq, XMM1, FSxBX 1142 EMIT_INSTR_PLUS_ICEBP_C64 vcvtps2dq, XMM8, XMM9 1143 EMIT_INSTR_PLUS_ICEBP_C64 vcvtps2dq, XMM8, FSxBX 1144 ; AVX-256, fp32 -> int32 (packed:8) 1145 EMIT_INSTR_PLUS_ICEBP vcvtps2dq, YMM1, YMM2 1146 EMIT_INSTR_PLUS_ICEBP vcvtps2dq, YMM1, FSxBX 1147 EMIT_INSTR_PLUS_ICEBP_C64 vcvtps2dq, YMM8, YMM9 1148 EMIT_INSTR_PLUS_ICEBP_C64 vcvtps2dq, YMM8, FSxBX 1149 ; SSE-128, fp32 -> int32, same-reg (packed:4) 1150 EMIT_INSTR_PLUS_ICEBP cvtps2dq, XMM1, XMM1 1151 EMIT_INSTR_PLUS_ICEBP_C64 cvtps2dq, XMM8, XMM8 1152 ; AVX-128, fp32 -> int32, same-reg (packed:4) 1153 EMIT_INSTR_PLUS_ICEBP vcvtps2dq, XMM1, XMM1 1154 EMIT_INSTR_PLUS_ICEBP_C64 vcvtps2dq, XMM8, XMM8 1155 ; AVX-256, fp32 -> int32, same-reg (packed:8) 1156 EMIT_INSTR_PLUS_ICEBP vcvtps2dq, YMM1, YMM1 1157 EMIT_INSTR_PLUS_ICEBP_C64 vcvtps2dq, YMM8, YMM8 1158 1159 ; 1160 ;; cvttps2dq 1161 ; 1162 ; SSE-128, fp32 -> int32 (packed:4; truncated) 1163 EMIT_INSTR_PLUS_ICEBP cvttps2dq, XMM1, XMM2 1164 EMIT_INSTR_PLUS_ICEBP cvttps2dq, XMM1, FSxBX_O 1165 EMIT_INSTR_PLUS_ICEBP_C64 cvttps2dq, XMM8, XMM9 1166 EMIT_INSTR_PLUS_ICEBP_C64 cvttps2dq, XMM8, FSxBX_O 1167 ; AVX-128, fp32 -> int32 (packed:4; truncated) 1168 EMIT_INSTR_PLUS_ICEBP vcvttps2dq, XMM1, XMM2 1169 EMIT_INSTR_PLUS_ICEBP vcvttps2dq, XMM1, FSxBX_O 1170 EMIT_INSTR_PLUS_ICEBP_C64 vcvttps2dq, XMM8, XMM9 1171 EMIT_INSTR_PLUS_ICEBP_C64 vcvttps2dq, XMM8, FSxBX_O 1172 ; AVX-256, fp32 -> int32 (packed:8; truncated) 1173 EMIT_INSTR_PLUS_ICEBP vcvttps2dq, YMM1, YMM2 1174 EMIT_INSTR_PLUS_ICEBP vcvttps2dq, YMM1, FSxBX_Y 1175 EMIT_INSTR_PLUS_ICEBP_C64 vcvttps2dq, YMM8, YMM9 1176 EMIT_INSTR_PLUS_ICEBP_C64 vcvttps2dq, YMM8, FSxBX_Y 1177 ; AVX-128, fp32 -> int32, same-reg (packed:4; truncated) 1178 EMIT_INSTR_PLUS_ICEBP cvttps2dq, XMM1, XMM1 1179 EMIT_INSTR_PLUS_ICEBP_C64 cvttps2dq, XMM8, XMM8 1180 ; AVX-128, fp32 -> int32, same-reg (packed:4; truncated) 1181 EMIT_INSTR_PLUS_ICEBP vcvttps2dq, XMM1, XMM1 1182 EMIT_INSTR_PLUS_ICEBP_C64 vcvttps2dq, XMM8, XMM8 1183 ; AVX-256, fp32 -> int32, same-reg (packed:8; truncated) 1184 EMIT_INSTR_PLUS_ICEBP vcvttps2dq, YMM1, YMM1 1185 EMIT_INSTR_PLUS_ICEBP_C64 vcvttps2dq, YMM8, YMM8 1186 1187 ; 1188 ;; cvtdq2pd 1189 ; 1190 ; SSE-128, int32 -> fp64 (packed:2) 1191 EMIT_INSTR_PLUS_ICEBP cvtdq2pd, XMM1, XMM2 1192 EMIT_INSTR_PLUS_ICEBP cvtdq2pd, XMM1, FSxBX 1193 EMIT_INSTR_PLUS_ICEBP_C64 cvtdq2pd, XMM8, XMM9 1194 EMIT_INSTR_PLUS_ICEBP_C64 cvtdq2pd, XMM8, FSxBX 1195 ; AVX-128, int32 -> fp64 (packed:2) 1196 EMIT_INSTR_PLUS_ICEBP vcvtdq2pd, XMM1, XMM2 1197 EMIT_INSTR_PLUS_ICEBP vcvtdq2pd, XMM1, FSxBX 1198 EMIT_INSTR_PLUS_ICEBP_C64 vcvtdq2pd, XMM8, XMM9 1199 EMIT_INSTR_PLUS_ICEBP_C64 vcvtdq2pd, XMM8, FSxBX 1200 ; AVX-256, int32 -> fp64 (packed:4) 1201 EMIT_INSTR_PLUS_ICEBP vcvtdq2pd, YMM1, XMM2 1202 EMIT_INSTR_PLUS_ICEBP vcvtdq2pd, YMM1, FSxBX 1203 EMIT_INSTR_PLUS_ICEBP_C64 vcvtdq2pd, YMM8, XMM9 1204 EMIT_INSTR_PLUS_ICEBP_C64 vcvtdq2pd, YMM8, FSxBX 1205 ; SSE-128, int32 -> fp64, same-reg (packed:2) 1206 EMIT_INSTR_PLUS_ICEBP cvtdq2pd, XMM1, XMM1 1207 EMIT_INSTR_PLUS_ICEBP_C64 cvtdq2pd, XMM8, XMM8 1208 ; AVX-128, int32 -> fp64, same-reg (packed:2) 1209 EMIT_INSTR_PLUS_ICEBP vcvtdq2pd, XMM1, XMM1 1210 EMIT_INSTR_PLUS_ICEBP_C64 vcvtdq2pd, XMM8, XMM8 1211 ; AVX-256, int32 -> fp64, same-reg (packed:4) 1212 EMIT_INSTR_PLUS_ICEBP vcvtdq2pd, YMM1, XMM1 1213 EMIT_INSTR_PLUS_ICEBP_C64 vcvtdq2pd, YMM8, XMM8 1214 1215 ; 1216 ;; cvtpd2dq 1217 ; 1218 ; SSE-128, fp64 -> int32 (packed:2) 1219 EMIT_INSTR_PLUS_ICEBP cvtpd2dq, XMM1, XMM2 1220 EMIT_INSTR_PLUS_ICEBP cvtpd2dq, XMM1, FSxBX 1221 EMIT_INSTR_PLUS_ICEBP_C64 cvtpd2dq, XMM8, XMM9 1222 EMIT_INSTR_PLUS_ICEBP_C64 cvtpd2dq, XMM8, FSxBX 1223 ; AVX-128, fp64 -> int32 (packed:2) 1224 EMIT_INSTR_PLUS_ICEBP vcvtpd2dq, XMM1, XMM2 1225 EMIT_INSTR_PLUS_ICEBP vcvtpd2dq, XMM1, FSxBX 1226 EMIT_INSTR_PLUS_ICEBP_C64 vcvtpd2dq, XMM8, XMM9 1227 EMIT_INSTR_PLUS_ICEBP_C64 vcvtpd2dq, XMM8, FSxBX 1228 ; AVX-256, fp64 -> int32 (packed:4) 1229 EMIT_INSTR_PLUS_ICEBP vcvtpd2dq, XMM1, YMM2 1230 EMIT_INSTR_PLUS_ICEBP vcvtpd2dq, YMM1, FSxBX 1231 EMIT_INSTR_PLUS_ICEBP_C64 vcvtpd2dq, XMM8, YMM9 1232 EMIT_INSTR_PLUS_ICEBP_C64 vcvtpd2dq, YMM8, FSxBX 1233 ; SSE-128, fp64 -> int32, same-reg (packed:2) 1234 EMIT_INSTR_PLUS_ICEBP cvtpd2dq, XMM1, XMM1 1235 EMIT_INSTR_PLUS_ICEBP_C64 cvtpd2dq, XMM8, XMM8 1236 ; AVX-128, fp64 -> int32, same-reg (packed:2) 1237 EMIT_INSTR_PLUS_ICEBP vcvtpd2dq, XMM1, XMM1 1238 EMIT_INSTR_PLUS_ICEBP_C64 vcvtpd2dq, XMM8, XMM8 1239 ; AVX-256, fp64 -> int32, same-reg (packed:4) 1240 EMIT_INSTR_PLUS_ICEBP vcvtpd2dq, XMM1, YMM1 1241 EMIT_INSTR_PLUS_ICEBP_C64 vcvtpd2dq, XMM8, YMM8 1242 1243 ; 1244 ;; cvttpd2dq 1245 ; 1246 ; SSE-128, fp64 -> int32 (packed:2; truncated) 1247 EMIT_INSTR_PLUS_ICEBP cvttpd2dq, XMM1, XMM2 1248 EMIT_INSTR_PLUS_ICEBP cvttpd2dq, XMM1, FSxBX_O 1249 EMIT_INSTR_PLUS_ICEBP_C64 cvttpd2dq, XMM8, XMM9 1250 EMIT_INSTR_PLUS_ICEBP_C64 cvttpd2dq, XMM8, FSxBX_O 1251 ; AVX-128, fp64 -> int32 (packed:2; truncated) 1252 EMIT_INSTR_PLUS_ICEBP vcvttpd2dq, XMM1, XMM2 1253 EMIT_INSTR_PLUS_ICEBP vcvttpd2dq, XMM1, FSxBX_O 1254 EMIT_INSTR_PLUS_ICEBP_C64 vcvttpd2dq, XMM8, XMM9 1255 EMIT_INSTR_PLUS_ICEBP_C64 vcvttpd2dq, XMM8, FSxBX_O 1256 ; AVX-256, fp64 -> int32 (packed:4; truncated) 1257 EMIT_INSTR_PLUS_ICEBP vcvttpd2dq, XMM1, YMM2 1258 EMIT_INSTR_PLUS_ICEBP vcvttpd2dq, XMM1, FSxBX_Y 1259 EMIT_INSTR_PLUS_ICEBP_C64 vcvttpd2dq, XMM8, YMM9 1260 EMIT_INSTR_PLUS_ICEBP_C64 vcvttpd2dq, XMM8, FSxBX_Y 1261 ; AVX-128, fp64 -> int32, same-reg (packed:2; truncated) 1262 EMIT_INSTR_PLUS_ICEBP cvttpd2dq, XMM1, XMM1 1263 EMIT_INSTR_PLUS_ICEBP_C64 cvttpd2dq, XMM8, XMM8 1264 ; AVX-128, fp64 -> int32, same-reg (packed:2; truncated) 1265 EMIT_INSTR_PLUS_ICEBP vcvttpd2dq, XMM1, XMM1 1266 EMIT_INSTR_PLUS_ICEBP_C64 vcvttpd2dq, XMM8, XMM8 1267 ; AVX-256, fp64 -> int32, same-reg (packed:4; truncated) 1268 EMIT_INSTR_PLUS_ICEBP vcvttpd2dq, XMM1, YMM1 1269 EMIT_INSTR_PLUS_ICEBP_C64 vcvttpd2dq, XMM8, YMM8 1270 1271 ; 1272 ;; cvtpd2ps 1273 ; 1274 ; SSE-128, fp64 -> fp32 (packed:2) 1275 EMIT_INSTR_PLUS_ICEBP cvtpd2ps, XMM1, XMM2 1276 EMIT_INSTR_PLUS_ICEBP cvtpd2ps, XMM1, FSxBX 1277 EMIT_INSTR_PLUS_ICEBP_C64 cvtpd2ps, XMM8, XMM9 1278 EMIT_INSTR_PLUS_ICEBP_C64 cvtpd2ps, XMM8, FSxBX 1279 ; AVX-128, fp64 -> fp32 (packed:2) 1280 EMIT_INSTR_PLUS_ICEBP vcvtpd2ps, XMM1, XMM2 1281 EMIT_INSTR_PLUS_ICEBP vcvtpd2ps, XMM1, FSxBX_O 1282 EMIT_INSTR_PLUS_ICEBP_C64 vcvtpd2ps, XMM8, XMM9 1283 EMIT_INSTR_PLUS_ICEBP_C64 vcvtpd2ps, XMM8, FSxBX_O 1284 ; AVX-256, fp64 -> fp32 (packed:4) 1285 EMIT_INSTR_PLUS_ICEBP vcvtpd2ps, XMM1, YMM2 1286 EMIT_INSTR_PLUS_ICEBP vcvtpd2ps, XMM1, FSxBX_Y 1287 EMIT_INSTR_PLUS_ICEBP_C64 vcvtpd2ps, XMM8, YMM9 1288 EMIT_INSTR_PLUS_ICEBP_C64 vcvtpd2ps, XMM8, FSxBX_Y 1289 ; SSE-128, fp64 -> fp32, same-reg (packed:2) 1290 EMIT_INSTR_PLUS_ICEBP cvtpd2ps, XMM1, XMM1 1291 EMIT_INSTR_PLUS_ICEBP_C64 cvtpd2ps, XMM8, XMM8 1292 ; AVX-128, fp64 -> fp32, same-reg (packed:2) 1293 EMIT_INSTR_PLUS_ICEBP vcvtpd2ps, XMM1, XMM1 1294 EMIT_INSTR_PLUS_ICEBP_C64 vcvtpd2ps, XMM8, XMM8 1295 ; AVX-256, fp64 -> fp32, same-reg (packed:4) 1296 EMIT_INSTR_PLUS_ICEBP vcvtpd2ps, XMM1, YMM1 1297 EMIT_INSTR_PLUS_ICEBP_C64 vcvtpd2ps, XMM8, YMM8 1298 1299 ; 1300 ;; cvtps2pd 1301 ; 1302 ; SSE-128, fp32 -> fp64 (packed:2) 1303 EMIT_INSTR_PLUS_ICEBP cvtps2pd, XMM1, XMM2 1304 EMIT_INSTR_PLUS_ICEBP cvtps2pd, XMM1, FSxBX 1305 EMIT_INSTR_PLUS_ICEBP_C64 cvtps2pd, XMM8, XMM9 1306 EMIT_INSTR_PLUS_ICEBP_C64 cvtps2pd, XMM8, FSxBX 1307 ; AVX-128, fp32 -> fp64 (packed:2) 1308 EMIT_INSTR_PLUS_ICEBP vcvtps2pd, XMM1, XMM2 1309 EMIT_INSTR_PLUS_ICEBP vcvtps2pd, XMM1, FSxBX 1310 EMIT_INSTR_PLUS_ICEBP_C64 vcvtps2pd, XMM8, XMM9 1311 EMIT_INSTR_PLUS_ICEBP_C64 vcvtps2pd, XMM8, FSxBX 1312 ; AVX-256, fp32 -> fp64 (packed:4) 1313 EMIT_INSTR_PLUS_ICEBP vcvtps2pd, YMM1, XMM2 1314 EMIT_INSTR_PLUS_ICEBP vcvtps2pd, YMM1, FSxBX_O 1315 EMIT_INSTR_PLUS_ICEBP_C64 vcvtps2pd, YMM8, XMM9 1316 EMIT_INSTR_PLUS_ICEBP_C64 vcvtps2pd, YMM8, FSxBX_O 1317 ; SSE-128, fp32 -> fp64, same-reg (packed:2) 1318 EMIT_INSTR_PLUS_ICEBP cvtps2pd, XMM1, XMM1 1319 EMIT_INSTR_PLUS_ICEBP_C64 cvtps2pd, XMM8, XMM8 1320 ; AVX-128, fp32 -> fp64, same-reg (packed:2) 1321 EMIT_INSTR_PLUS_ICEBP vcvtps2pd, XMM1, XMM1 1322 EMIT_INSTR_PLUS_ICEBP_C64 vcvtps2pd, XMM8, XMM8 1323 ; AVX-256, fp32 -> fp64, same-reg (packed:4) 1324 EMIT_INSTR_PLUS_ICEBP vcvtps2pd, YMM1, XMM1 1325 EMIT_INSTR_PLUS_ICEBP_C64 vcvtps2pd, YMM8, XMM8 1326 1327 ; 1328 ;; cvtsd2ss 1329 ; 1330 ; SSE-128, fp64 -> fp32 (single) 1331 EMIT_INSTR_PLUS_ICEBP cvtsd2ss, XMM1, XMM2 1332 EMIT_INSTR_PLUS_ICEBP cvtsd2ss, XMM1, FSxBX 1333 EMIT_INSTR_PLUS_ICEBP_C64 cvtsd2ss, XMM8, XMM9 1334 EMIT_INSTR_PLUS_ICEBP_C64 cvtsd2ss, XMM8, FSxBX 1335 ; AVX-128, fp64 -> fp32 (single) 1336 EMIT_INSTR_PLUS_ICEBP vcvtsd2ss, XMM1, XMM2, XMM3 1337 EMIT_INSTR_PLUS_ICEBP vcvtsd2ss, XMM1, XMM2, FSxBX 1338 EMIT_INSTR_PLUS_ICEBP_C64 vcvtsd2ss, XMM8, XMM9, XMM10 1339 EMIT_INSTR_PLUS_ICEBP_C64 vcvtsd2ss, XMM8, XMM9, FSxBX 1340 ; SSE-128, fp64 -> fp32, same-reg (single) 1341 EMIT_INSTR_PLUS_ICEBP cvtsd2ss, XMM1, XMM1 1342 EMIT_INSTR_PLUS_ICEBP_C64 cvtsd2ss, XMM8, XMM8 1343 ; AVX-128, fp64 -> fp32, same-reg (single) 1344 EMIT_INSTR_PLUS_ICEBP vcvtsd2ss, XMM1, XMM1, XMM1 1345 EMIT_INSTR_PLUS_ICEBP_C64 vcvtsd2ss, XMM1, XMM1, XMM8 1346 EMIT_INSTR_PLUS_ICEBP_C64 vcvtsd2ss, XMM1, XMM8, XMM8 1347 EMIT_INSTR_PLUS_ICEBP_C64 vcvtsd2ss, XMM1, XMM8, XMM1 1348 EMIT_INSTR_PLUS_ICEBP vcvtsd2ss, XMM1, XMM1, FSxBX 1349 EMIT_INSTR_PLUS_ICEBP_C64 vcvtsd2ss, XMM8, XMM8, XMM8 1350 EMIT_INSTR_PLUS_ICEBP_C64 vcvtsd2ss, XMM8, XMM8, FSxBX 1351 ; @todo test with VEX.L=1 (as if asking for YMM)? SDM says 'unpredictable behavior'... 1352 1353 ; 1354 ;; cvtss2sd 1355 ; 1356 ; SSE-128, fp32 -> fp64 (single) 1357 EMIT_INSTR_PLUS_ICEBP cvtss2sd, XMM1, XMM2 1358 EMIT_INSTR_PLUS_ICEBP cvtss2sd, XMM1, FSxBX 1359 EMIT_INSTR_PLUS_ICEBP_C64 cvtss2sd, XMM8, XMM9 1360 EMIT_INSTR_PLUS_ICEBP_C64 cvtss2sd, XMM8, FSxBX 1361 ; AVX-128, fp32 -> fp64 (single) 1362 EMIT_INSTR_PLUS_ICEBP vcvtss2sd, XMM1, XMM2, XMM3 1363 EMIT_INSTR_PLUS_ICEBP vcvtss2sd, XMM1, XMM2, FSxBX 1364 EMIT_INSTR_PLUS_ICEBP_C64 vcvtss2sd, XMM8, XMM9, XMM10 1365 EMIT_INSTR_PLUS_ICEBP_C64 vcvtss2sd, XMM8, XMM9, FSxBX 1366 ; SSE-128, fp32 -> fp64, same-reg (single) 1367 EMIT_INSTR_PLUS_ICEBP cvtss2sd, XMM1, XMM1 1368 EMIT_INSTR_PLUS_ICEBP_C64 cvtss2sd, XMM8, XMM8 1369 ; AVX-128, fp32 -> fp64, same-reg (single) 1370 EMIT_INSTR_PLUS_ICEBP vcvtss2sd, XMM1, XMM1, XMM1 1371 EMIT_INSTR_PLUS_ICEBP_C64 vcvtss2sd, XMM1, XMM1, XMM8 1372 EMIT_INSTR_PLUS_ICEBP_C64 vcvtss2sd, XMM1, XMM8, XMM8 1373 EMIT_INSTR_PLUS_ICEBP_C64 vcvtss2sd, XMM1, XMM8, XMM1 1374 EMIT_INSTR_PLUS_ICEBP vcvtss2sd, XMM1, XMM1, FSxBX 1375 EMIT_INSTR_PLUS_ICEBP_C64 vcvtss2sd, XMM8, XMM8, XMM8 1376 EMIT_INSTR_PLUS_ICEBP_C64 vcvtss2sd, XMM8, XMM8, FSxBX 1377 ; @todo test with VEX.L=1 (as if asking for YMM)? SDM says 'unpredictable behavior'... 1378 848 1379 %endif ; BS3_INSTANTIATING_CMN 849 1380
Note:
See TracChangeset
for help on using the changeset viewer.