00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00068 #define DO_CMPBGE state.r[REG_3] = \
00069 (((u8) (state.r[REG_1] & 0xff) >= (u8) (V_2 & 0xff)) ? 1 : 0) | \
00070 (((u8) ((state.r[REG_1] >> 8) & 0xff) >= (u8) ((V_2 >> 8) & 0xff)) ? 2 : 0) | \
00071 (((u8) ((state.r[REG_1] >> 16) & 0xff) >= (u8) ((V_2 >> 16) & 0xff)) ? 4 : 0) | \
00072 (((u8) ((state.r[REG_1] >> 24) & 0xff) >= (u8) ((V_2 >> 24) & 0xff)) ? 8 : 0) | \
00073 (((u8) ((state.r[REG_1] >> 32) & 0xff) >= (u8) ((V_2 >> 32) & 0xff)) ? 16 : 0) | \
00074 (((u8) ((state.r[REG_1] >> 40) & 0xff) >= (u8) ((V_2 >> 40) & 0xff)) ? 32 : 0) | \
00075 (((u8) ((state.r[REG_1] >> 48) & 0xff) >= (u8) ((V_2 >> 48) & 0xff)) ? 64 : 0) | \
00076 (((u8) ((state.r[REG_1] >> 56) & 0xff) >= (u8) ((V_2 >> 56) & 0xff)) ? 128 : 0);
00077
00078 #define DO_EXTBL state.r[REG_3] = \
00079 ( \
00080 state.r[REG_1] >> \
00081 ((V_2 & 7) * 8) \
00082 ) & X64_BYTE;
00083 #define DO_EXTWL state.r[REG_3] = \
00084 ( \
00085 state.r[REG_1] >> \
00086 ((V_2 & 7) * 8) \
00087 ) & X64_WORD;
00088 #define DO_EXTLL state.r[REG_3] = \
00089 ( \
00090 state.r[REG_1] >> \
00091 ((V_2 & 7) * 8) \
00092 ) & X64_LONG;
00093 #define DO_EXTQL state.r[REG_3] = (state.r[REG_1] >> ((V_2 & 7) * 8));
00094 #define DO_EXTWH state.r[REG_3] = \
00095 ( \
00096 state.r[REG_1] << \
00097 ((64 - ((V_2 & 7) * 8)) & 63) \
00098 ) & X64_WORD;
00099 #define DO_EXTLH state.r[REG_3] = \
00100 ( \
00101 state.r[REG_1] << \
00102 ((64 - ((V_2 & 7) * 8)) & 63) \
00103 ) & X64_LONG;
00104 #define DO_EXTQH state.r[REG_3] = \
00105 ( \
00106 state.r[REG_1] << \
00107 ((64 - ((V_2 & 7) * 8)) & 63) \
00108 ) & X64_QUAD;
00109
00110 #define DO_INSBL state.r[REG_3] = (state.r[REG_1] & X64_BYTE) << \
00111 ((V_2 & 7) * 8);
00112 #define DO_INSWL state.r[REG_3] = (state.r[REG_1] & X64_WORD) << \
00113 ((V_2 & 7) * 8);
00114 #define DO_INSLL state.r[REG_3] = (state.r[REG_1] & X64_LONG) << \
00115 ((V_2 & 7) * 8);
00116 #define DO_INSQL state.r[REG_3] = (state.r[REG_1]) << ((V_2 & 7) * 8);
00117 #define DO_INSWH state.r[REG_3] = (V_2 & 7) ? \
00118 ((state.r[REG_1] & X64_WORD) >> ((64 - ((V_2 & 7) * 8)) & 63)) : 0;
00119 #define DO_INSLH state.r[REG_3] = (V_2 & 7) ? \
00120 ((state.r[REG_1] & X64_LONG) >> ((64 - ((V_2 & 7) * 8)) & 63)) : 0;
00121 #define DO_INSQH state.r[REG_3] = (V_2 & 7) ? \
00122 ((state.r[REG_1] & X64_QUAD) >> ((64 - ((V_2 & 7) * 8)) & 63)) : 0;
00123
00124 #define DO_MSKBL state.r[REG_3] = state.r[REG_1] &~ \
00125 (X64_BYTE << ((V_2 & 7) * 8));
00126 #define DO_MSKWL state.r[REG_3] = state.r[REG_1] &~ \
00127 (X64_WORD << ((V_2 & 7) * 8));
00128 #define DO_MSKLL state.r[REG_3] = state.r[REG_1] &~ \
00129 (X64_LONG << ((V_2 & 7) * 8));
00130 #define DO_MSKQL state.r[REG_3] = state.r[REG_1] &~ \
00131 (X64_QUAD << ((V_2 & 7) * 8));
00132 #define DO_MSKWH state.r[REG_3] = (V_2 & 7) ? \
00133 (state.r[REG_1] &~(X64_WORD >> ((64 - ((V_2 & 7) * 8)) & 63))) : state.r[REG_1];
00134 #define DO_MSKLH state.r[REG_3] = (V_2 & 7) ? \
00135 (state.r[REG_1] &~(X64_LONG >> ((64 - ((V_2 & 7) * 8)) & 63))) : state.r[REG_1];
00136 #define DO_MSKQH state.r[REG_3] = (V_2 & 7) ? \
00137 (state.r[REG_1] &~(X64_QUAD >> ((64 - ((V_2 & 7) * 8)) & 63))) : state.r[REG_1];
00138
00139 #define DO_SEXTB state.r[REG_3] = sext_u64_8(V_2);
00140 #define DO_SEXTW state.r[REG_3] = sext_u64_16(V_2);
00141
00142 #define DO_ZAP state.r[REG_3] = state.r[REG_1] & \
00143 ( \
00144 ((V_2 & 1) ? 0 : U64(0xff)) | ((V_2 & 2) ? 0 : U64(0xff00)) | \
00145 ((V_2 & 4) ? 0 : U64(0xff0000)) | ((V_2 & 8) ? 0 : U64(0xff000000)) | \
00146 ((V_2 & 16) ? 0 : U64(0xff00000000)) | \
00147 ((V_2 & 32) ? 0 : U64(0xff0000000000)) | \
00148 ((V_2 & 64) ? 0 : U64(0xff000000000000)) | \
00149 ((V_2 & 128) ? 0 : U64(0xff00000000000000)) \
00150 );
00151
00152 #define DO_ZAPNOT state.r[REG_3] = state.r[REG_1] & \
00153 ( \
00154 ((V_2 & 1) ? U64(0xff) : 0) | ((V_2 & 2) ? U64(0xff00) : 0) | \
00155 ((V_2 & 4) ? U64(0xff0000) : 0) | ((V_2 & 8) ? U64(0xff000000) : 0) | \
00156 ((V_2 & 16) ? U64(0xff00000000) : 0) | \
00157 ((V_2 & 32) ? U64(0xff0000000000) : 0) | \
00158 ((V_2 & 64) ? U64(0xff000000000000) : 0) | \
00159 ((V_2 & 128) ? U64(0xff00000000000000) : 0) \
00160 );