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 #include "global.h"
00026 #ifdef HAVE_HDRSTOP
00027 #pragma hdrstop
00028 #endif
00029
00030 #include "x86istr.h"
00031 #include "x86table.h"
00032 #include "x86dasm.h"
00033 #include "utils/compilecheck.hpp"
00034
00035 #define istr__ -1
00036 #define I(rtn,special,istruction) \
00037 { &InstructionDecoder::rtn, special, istr_##istruction }
00038
00039 const InstructionDecoder::InstTable InstructionDecoder::instrTable[] =
00040 {
00041 I( mod_reg, modregEbGb, add ),
00042 I( mod_reg, modregEvGv, add ),
00043 I( mod_reg, modregGbEb, add ),
00044 I( mod_reg, modregGvEv, add ),
00045 I( two_byte, regAL, add ),
00046 I( three_byte, regAX, add ),
00047 I( one_byte, regES, push ),
00048 I( one_byte, regES, pop ),
00049 I( mod_reg, modregEbGb, or ),
00050 I( mod_reg, modregEvGv, or ),
00051 I( mod_reg, modregGbEb, or ),
00052 I( mod_reg, modregGvEv, or ),
00053 I( two_byte, regAL, or ),
00054 I( three_byte, regAX, or ),
00055 I( one_byte, regCS, push ),
00056 I( extra, 0, _ ),
00057 I( mod_reg, modregEbGb, adc ),
00058 I( mod_reg, modregEvGv, adc ),
00059 I( mod_reg, modregGbEb, adc ),
00060 I( mod_reg, modregGvEv, adc ),
00061 I( two_byte, regAL, adc ),
00062 I( three_byte, regAX, adc ),
00063 I( one_byte, regSS, push ),
00064 I( one_byte, regSS, pop ),
00065 I( mod_reg, modregEbGb, sbb ),
00066 I( mod_reg, modregEvGv, sbb ),
00067 I( mod_reg, modregGbEb, sbb ),
00068 I( mod_reg, modregGvEv, sbb ),
00069 I( two_byte, regAL, sbb ),
00070 I( three_byte, regAX, sbb ),
00071 I( one_byte, regDS, push ),
00072 I( one_byte, regDS, pop ),
00073 I( mod_reg, modregEbGb, and ),
00074 I( mod_reg, modregEvGv, and ),
00075 I( mod_reg, modregGbEb, and ),
00076 I( mod_reg, modregGvEv, and ),
00077 I( two_byte, regAL, and ),
00078 I( three_byte, regAX, and ),
00079 I( seg_over, 0, _ ),
00080 I( one_byte, regNone, daa ),
00081 I( mod_reg, modregEbGb, sub ),
00082 I( mod_reg, modregEvGv, sub ),
00083 I( mod_reg, modregGbEb, sub ),
00084 I( mod_reg, modregGvEv, sub ),
00085 I( two_byte, regAL, sub ),
00086 I( three_byte, regAX, sub ),
00087 I( seg_over, 0, _ ),
00088 I( one_byte, regNone, das ),
00089 I( mod_reg, modregEbGb, xor ),
00090 I( mod_reg, modregEvGv, xor ),
00091 I( mod_reg, modregGbEb, xor ),
00092 I( mod_reg, modregGvEv, xor ),
00093 I( two_byte, regAL, xor ),
00094 I( three_byte, regAX, xor ),
00095 I( seg_over, 0, _ ),
00096 I( one_byte, regNone, aaa ),
00097 I( mod_reg, modregEbGb, cmp ),
00098 I( mod_reg, modregEvGv, cmp ),
00099 I( mod_reg, modregGbEb, cmp ),
00100 I( mod_reg, modregGvEv, cmp ),
00101 I( two_byte, regAL, cmp ),
00102 I( three_byte, regAX, cmp ),
00103 I( seg_over, 0, _ ),
00104 I( one_byte, regNone, aas ),
00105 I( one_byte, regAX, inc ),
00106 I( one_byte, regCX, inc ),
00107 I( one_byte, regDX, inc ),
00108 I( one_byte, regBX, inc ),
00109 I( one_byte, regSP, inc ),
00110 I( one_byte, regBP, inc ),
00111 I( one_byte, regSI, inc ),
00112 I( one_byte, regDI, inc ),
00113 I( one_byte, regAX, dec ),
00114 I( one_byte, regCX, dec ),
00115 I( one_byte, regDX, dec ),
00116 I( one_byte, regBX, dec ),
00117 I( one_byte, regSP, dec ),
00118 I( one_byte, regBP, dec ),
00119 I( one_byte, regSI, dec ),
00120 I( one_byte, regDI, dec ),
00121 I( one_byte, regAX, push ),
00122 I( one_byte, regCX, push ),
00123 I( one_byte, regDX, push ),
00124 I( one_byte, regBX, push ),
00125 I( one_byte, regSP, push ),
00126 I( one_byte, regBP, push ),
00127 I( one_byte, regSI, push ),
00128 I( one_byte, regDI, push ),
00129 I( one_byte, regAX, pop ),
00130 I( one_byte, regCX, pop ),
00131 I( one_byte, regDX, pop ),
00132 I( one_byte, regBX, pop ),
00133 I( one_byte, regSP, pop ),
00134 I( one_byte, regBP, pop ),
00135 I( one_byte, regSI, pop ),
00136 I( one_byte, regDI, pop ),
00137 I( one_byte, regNone, pusha ),
00138 I( one_byte, regNone, popa ),
00139 I( mod_reg, modregGvMa, bound ),
00140 I( mod_reg, modregEvGv, arpl ),
00141 I( seg_over, 0, _ ),
00142 I( seg_over, 0, _ ),
00143 I( opsize_over, 0, _ ),
00144 I( adrsize_over, 0, _ ),
00145 I( three_byte, regNone, push ),
00146 I( mod_reg, modregGvEvIv, imul ),
00147 I( two_sbyte, 0, push ),
00148 I( mod_reg, modregGvEvIsb,imul ),
00149 I( string_byte, -1, insb ),
00150 I( string_byte,istr_insd, insw ),
00151 I( string_byte, -1, outsb ),
00152 I( string_byte,istr_outsd,outsw ),
00153 I( disp8, 0, jo ),
00154 I( disp8, 0, jno ),
00155 I( disp8, 0, jc ),
00156 I( disp8, 0, jnc ),
00157 I( disp8, 0, jz ),
00158 I( disp8, 0, jnz ),
00159 I( disp8, 0, jbe ),
00160 I( disp8, 0, jnbe ),
00161 I( disp8, 0, js ),
00162 I( disp8, 0, jns ),
00163 I( disp8, 0, jp ),
00164 I( disp8, 0, jnp ),
00165 I( disp8, 0, jl ),
00166 I( disp8, 0, jnl ),
00167 I( disp8, 0, jng ),
00168 I( disp8, 0, jg ),
00169 I( group1, modregEbIub, _ ),
00170 I( group1, modregEvIv, _ ),
00171 I( group1, modregEbIub, _ ),
00172 I( group1, modregEvIsb, _ ),
00173 I( mod_reg, modregGbEb, test ),
00174 I( mod_reg, modregGvEv, test ),
00175 I( mod_reg, modregGbEb, xchg ),
00176 I( mod_reg, modregGvEv, xchg ),
00177 I( mod_reg, modregEbGb, mov ),
00178 I( mod_reg, modregEvGv, mov ),
00179 I( mod_reg, modregGbEb, mov ),
00180 I( mod_reg, modregGvEv, mov ),
00181 I( seg_reg, modregEwSw, mov ),
00182 I( mod_reg, modregGvMn, lea ),
00183 I( seg_reg, modregSwEw, mov ),
00184 I( mod_reg, modregEv, pop ),
00185 I( one_byte, regNone, nop ),
00186 I( one_a, regCX, xchg ),
00187 I( one_a, regDX, xchg ),
00188 I( one_a, regBX, xchg ),
00189 I( one_a, regSP, xchg ),
00190 I( one_a, regBP, xchg ),
00191 I( one_a, regSI, xchg ),
00192 I( one_a, regDI, xchg ),
00193 I( conv_byte, istr_cwde, cbw ),
00194 I( conv_byte, istr_cdq, cwd ),
00195 I( five_byte, 0, call ),
00196 I( wait, 0, wait ),
00197 I( one_byte, regNone, pushf ),
00198 I( one_byte, regNone, popf ),
00199 I( one_byte, regNone, sahf ),
00200 I( one_byte, regNone, lahf ),
00201 I( three_a, 0, mov ),
00202 I( three_a, 0, mov ),
00203 I( three_a, 0, mov ),
00204 I( three_a, 0, mov ),
00205 I( string_byte, -1, movsb ),
00206 I( string_byte,istr_movsd,movsw ),
00207 I( string_byte, -1, cmpsb ),
00208 I( string_byte,istr_cmpsd,cmpsw ),
00209 I( two_byte, regAL, test ),
00210 I( three_byte, regAX, test ),
00211 I( string_byte, -1, stosb ),
00212 I( string_byte,istr_stosd,stosw ),
00213 I( string_byte, -1, lodsb ),
00214 I( string_byte,istr_lodsd,lodsw ),
00215 I( string_byte, -1, scasb ),
00216 I( string_byte,istr_scasd,scasw ),
00217 I( two_byte, regAL, mov ),
00218 I( two_byte, regCL, mov ),
00219 I( two_byte, regDL, mov ),
00220 I( two_byte, regBL, mov ),
00221 I( two_byte, regAH, mov ),
00222 I( two_byte, regCH, mov ),
00223 I( two_byte, regDH, mov ),
00224 I( two_byte, regBH, mov ),
00225 I( three_byte, regAX, mov ),
00226 I( three_byte, regCX, mov ),
00227 I( three_byte, regDX, mov ),
00228 I( three_byte, regBX, mov ),
00229 I( three_byte, regSP, mov ),
00230 I( three_byte, regBP, mov ),
00231 I( three_byte, regSI, mov ),
00232 I( three_byte, regDI, mov ),
00233 I( group2, modregEbIub, _ ),
00234 I( group2, modregEvIub, _ ),
00235 I( three_byte, regNone, ret ),
00236 I( one_byte, regNone, ret ),
00237 I( mod_reg, modregGvMp, les ),
00238 I( mod_reg, modregGvMp, lds ),
00239
00240 I( mov_special, modregEbIub, mov ),
00241 I( mov_special, modregEvIv, mov ),
00242 I( enter, 0, enter ),
00243 I( one_byte, regNone, leave ),
00244 I( three_byte, regNone, retf ),
00245 I( one_byte, regNone, retf ),
00246 I( one_byte, regNone, int3 ),
00247 I( two_byte, regNone, int ),
00248 I( one_byte, regNone, into ),
00249 I( one_byte, regNone, iret ),
00250 I( group2, modregEb1, _ ),
00251 I( group2, modregEv1, _ ),
00252 I( group2, modregEbCL, _ ),
00253 I( group2, modregEvCL, _ ),
00254 I( two_bcd, 0, aam ),
00255 I( two_bcd, 0, aad ),
00256 I( stub, 0, _ ),
00257 I( one_byte, regNone, xlat ),
00258 I( esc, 0, esc ),
00259 I( esc, 0, esc ),
00260 I( esc, 0, esc ),
00261 I( esc, 0, esc ),
00262 I( esc, 0, esc ),
00263 I( esc, 0, esc ),
00264 I( esc, 0, esc ),
00265 I( esc, 0, esc ),
00266 I( disp8, 0, loopnz ),
00267 I( disp8, 0, loopz ),
00268 I( disp8, 0, loop ),
00269 I( disp8, 0, jcxz ),
00270 I( two_byte, regAL, in ),
00271 I( two_byte, regAX, in ),
00272 I( two_a, 0, out ),
00273 I( two_a, 0, out ),
00274 I( disp16, 0, call ),
00275 I( disp16, 0, jmp ),
00276 I( five_byte, 0, jmp ),
00277 I( disp8, 0, jmp ),
00278 I( in_out, regDX, in ),
00279 I( in_out, regDX, in ),
00280 I( in_out, regDX, out ),
00281 I( in_out, regDX, out ),
00282 I( prefix, 0, lock ),
00283 I( stub, 0, _ ),
00284 I( prefix, 0, repnz ),
00285 I( prefixf3, 0, repz ),
00286 I( one_byte, regNone, hlt ),
00287 I( one_byte, regNone, cmc ),
00288 I( group3, modregEb, _ ),
00289 I( group3, modregEv, _ ),
00290 I( one_byte, regNone, clc ),
00291 I( one_byte, regNone, stc ),
00292 I( one_byte, regNone, cli ),
00293 I( one_byte, regNone, sti ),
00294 I( one_byte, regNone, cld ),
00295 I( one_byte, regNone, std ),
00296 I( group4, modregEb, _ ),
00297 I( group5, modregEv, _ )
00298 };
00299
00300 const InstructionDecoder::InstTable InstructionDecoder::exInstrTable[] = {
00301 I( group6, modregEw, _ ),
00302 I( group7, modregMs, _ ),
00303 I( mod_reg, modregGvEw, lar ),
00304 I( mod_reg, modregGvEw, lsl ),
00305 I( stub, 0, _ ),
00306 I( stub, 0, _ ),
00307 I( one_byte, regNone, clts ),
00308 I( stub, 0, _ ),
00309 I( one_byte, regNone, invd ),
00310 I( one_byte, regNone, wbinvd ),
00311 I( stub, 0, _ ),
00312 I( stub, 0, ud2 ),
00313 I( stub, 0, _ ),
00314 I( one_byte_k63d, regNone, femms ),
00315 I( prefetch_k63d, 0, prefetch ),
00316 I( k6_3dnow, modregPqQq, _ ),
00317 I( mod_xmm, modregVpsWps, movups ),
00318 I( mod_xmm, modregWpsVps, movups ),
00319 I( mod_xmm, modregWqVq, movlps ),
00320 I( mod_xmm, modregVqWq, movlps ),
00321
00322 I( mod_xmm, modregVpsWps, unpcklps ),
00323 I( mod_xmm, modregVpsWps, unpckhps ),
00324 I( mod_xmm, modregVqWq, movhps ),
00325 I( mod_xmm, modregWqVq, movhps ),
00326 I( group16, 0, _ ),
00327 I( stub, 0, _ ),
00328 I( stub, 0, _ ),
00329 I( stub, 0, _ ),
00330 I( stub, 0, _ ),
00331 I( stub, 0, _ ),
00332 I( stub, 0, _ ),
00333 I( stub, 0, _ ),
00334 I( mov_creg, movcregR32CRx, mov ),
00335 I( mov_creg, movcregR32DRx, mov ),
00336 I( mov_creg, movcregCRxr32, mov ),
00337 I( mov_creg, movcregDRxr32, mov ),
00338 I( mov_creg, movcregR32TRx, mov ),
00339 I( stub, 0, _ ),
00340 I( mov_creg, movcregTRxr32, mov ),
00341 I( stub, 0, _ ),
00342 I( mod_xmm, modregVpsWps, movaps ),
00343 I( mod_xmm, modregWpsVps, movaps ),
00344
00345 I( mod_xmm, modregVpsQq, cvtpi2ps),
00346 I( mod_xmm, modregWpsVps, movntps ),
00347 I( mod_xmm, modregPqWq, cvttps2pi),
00348
00349 I( mod_xmm, modregPqWq, cvtps2pi),
00350 I( mod_xmm, modregVssWss, ucomiss ),
00351
00352 I( mod_xmm, modregVssWss, comiss ),
00353 I( one_byte, regNone, wrmsr ),
00354 I( one_byte, regNone, rdtsc ),
00355 I( one_byte, regNone, rdmsr ),
00356 I( one_byte, regNone, rdpmc ),
00357 I( one_byte, regNone, sysenter ),
00358 I( one_byte, regNone, sysexit ),
00359 I( stub, 0, _ ),
00360 I( stub, 0, _ ),
00361 I( stub, 0, _ ),
00362 I( stub, 0, _ ),
00363 I( stub, 0, _ ),
00364 I( stub, 0, _ ),
00365 I( stub, 0, _ ),
00366 I( stub, 0, _ ),
00367 I( stub, 0, _ ),
00368 I( stub, 0, _ ),
00369 I( mod_reg, modregGvEv, cmovo ),
00370 I( mod_reg, modregGvEv, cmovno ),
00371 I( mod_reg, modregGvEv, cmovb ),
00372 I( mod_reg, modregGvEv, cmovnb ),
00373 I( mod_reg, modregGvEv, cmovz ),
00374 I( mod_reg, modregGvEv, cmovnz ),
00375 I( mod_reg, modregGvEv, cmovbe ),
00376 I( mod_reg, modregGvEv, cmovnbe ),
00377 I( mod_reg, modregGvEv, cmovs ),
00378 I( mod_reg, modregGvEv, cmovns ),
00379 I( mod_reg, modregGvEv, cmovp ),
00380 I( mod_reg, modregGvEv, cmovnp ),
00381 I( mod_reg, modregGvEv, cmovl ),
00382 I( mod_reg, modregGvEv, cmovnl ),
00383 I( mod_reg, modregGvEv, cmovle ),
00384 I( mod_reg, modregGvEv, cmovnle ),
00385
00386 I( mod_xmm, modregEdVps, movmskps ),
00387 I( mod_xmm, modregVpsWps, sqrtps ),
00388 I( mod_xmm, modregVpsWps, rsqrtps ),
00389 I( mod_xmm, modregVpsWps, rcpps ),
00390 I( mod_xmm, modregVpsWps, andps ),
00391 I( mod_xmm, modregVpsWps, andnps ),
00392 I( mod_xmm, modregVpsWps, orps ),
00393 I( mod_xmm, modregVpsWps, xorps ),
00394 I( mod_xmm, modregVpsWps, addps ),
00395 I( mod_xmm, modregVpsWps, mulps ),
00396 I( stub, 0, _ ),
00397 I( stub, 0, _ ),
00398 I( mod_xmm, modregVpsWps, subps ),
00399 I( mod_xmm, modregVpsWps, minps ),
00400 I( mod_xmm, modregVpsWps, divps ),
00401 I( mod_xmm, modregVpsWps, maxps ),
00402 I( mod_reg, modregPqQd, punpcklbw ),
00403 I( mod_reg, modregPqQd, punpcklwd ),
00404 I( mod_reg, modregPqQd, punockldq ),
00405 I( mod_reg, modregPqQd, packusdw ),
00406 I( mod_reg, modregPqQd, pcmpgtb ),
00407 I( mod_reg, modregPqQd, pcmpgtw ),
00408 I( mod_reg, modregPqQd, pcmpgtd ),
00409 I( mod_reg, modregPqQd, packsswb ),
00410 I( mod_reg, modregPqQd, punpckhbw ),
00411 I( mod_reg, modregPqQd, punpckhwd ),
00412 I( mod_reg, modregPqQd, punpckhdq ),
00413 I( mod_reg, modregPqQd, packssdw ),
00414 I( stub, 0, _ ),
00415 I( stub, 0, _ ),
00416 I( mod_reg, modregPdEd, movd ),
00417 I( mod_reg, modregPqQq, movq ),
00418 I( mod_reg_p3, modregPqQqIub,pshufw ),
00419 I( groupA, modregPqIub, _ ),
00420 I( groupA, modregPqIub, _ ),
00421 I( groupA, modregPqIub, _ ),
00422 I( mod_reg, modregPqQd, pcmpeqb ),
00423 I( mod_reg, modregPqQd, pcmpeqw ),
00424 I( mod_reg, modregPqQd, pcmpeqd ),
00425 I( one_byte, regNone, emms ),
00426
00427 I( stub, 0, _ ),
00428 I( stub, 0, _ ),
00429 I( stub, 0, _ ),
00430 I( stub, 0, _ ),
00431 I( stub, 0, _ ),
00432 I( stub, 0, _ ),
00433 I( mod_reg, modregEdPd, movd ),
00434 I( mod_reg, modregQqPq, movq ),
00435 I( disp16, 0, jo ),
00436 I( disp16, 0, jno ),
00437 I( disp16, 0, jb ),
00438 I( disp16, 0, jnb ),
00439 I( disp16, 0, jz ),
00440 I( disp16, 0, jnz ),
00441 I( disp16, 0, jbe ),
00442 I( disp16, 0, jnbe ),
00443 I( disp16, 0, js ),
00444 I( disp16, 0, jns ),
00445 I( disp16, 0, jp ),
00446 I( disp16, 0, jnp ),
00447 I( disp16, 0, jl ),
00448 I( disp16, 0, jnl ),
00449 I( disp16, 0, jle ),
00450 I( disp16, 0, jnle ),
00451 I( mod_reg, modregEb, seto ),
00452 I( mod_reg, modregEb, setno ),
00453 I( mod_reg, modregEb, setb ),
00454 I( mod_reg, modregEb, setnb ),
00455 I( mod_reg, modregEb, setz ),
00456 I( mod_reg, modregEb, setnz ),
00457 I( mod_reg, modregEb, setbe ),
00458 I( mod_reg, modregEb, setnbe ),
00459 I( mod_reg, modregEb, sets ),
00460 I( mod_reg, modregEb, setns ),
00461 I( mod_reg, modregEb, setp ),
00462 I( mod_reg, modregEb, setnp ),
00463 I( mod_reg, modregEb, setl ),
00464 I( mod_reg, modregEb, setnl ),
00465 I( mod_reg, modregEb, setle ),
00466 I( mod_reg, modregEb, setnle ),
00467 I( one_byte, regFS, push ),
00468 I( one_byte, regFS, pop ),
00469 I( one_byte, regNone, cpuid ),
00470 I( mod_reg, modregEvGv, bt ),
00471 I( mod_reg, modregEvGvIub, shld ),
00472 I( mod_reg, modregEvGvCL, shld ),
00473 I( stub, 0, _ ),
00474 I( stub, 0, _ ),
00475 I( one_byte, regGS, push ),
00476 I( one_byte, regGS, pop ),
00477 I( one_byte, regNone, rsm ),
00478 I( mod_reg, modregEvGv, bts ),
00479 I( mod_reg, modregEvGvIub, shrd ),
00480 I( mod_reg, modregEvGvCL, shrd ),
00481 I( group15, 0, _ ),
00482 I( mod_reg, modregGvEv, imul ),
00483 I( mod_reg, modregEbGb, cmpxchg ),
00484 I( mod_reg, modregEvGv, cmpxchg ),
00485 I( mod_reg, modregGvMp, lss ),
00486 I( mod_reg, modregEvGv, btr ),
00487 I( mod_reg, modregGvMp, lfs ),
00488 I( mod_reg, modregGvMp, lgs ),
00489 I( mod_reg, modregGvEb, movzx ),
00490 I( mod_reg, modregGvEw, movzx ),
00491 I( stub, 0, _ ),
00492
00493 I( stub, 0, ud ),
00494
00495 I( group8, modregEvIub, _ ),
00496 I( mod_reg, modregEvGv, btc ),
00497 I( mod_reg, modregGvEv, bsf ),
00498 I( mod_reg, modregGvEv, bsr ),
00499 I( mod_reg, modregGvEb, movsx ),
00500 I( mod_reg, modregGvEw, movsx ),
00501 I( mod_reg, modregEbGb, xadd ),
00502 I( mod_reg, modregEvGv, xadd ),
00503
00504 I( mod_xmm, modregVpsWpsIub,cmpps ),
00505 I( stub, 0, _ ),
00506
00507 I( mod_reg_p3, modregPqEdIub,pinsrw ),
00508
00509
00510 I( mod_reg_p3, modregGdQqIub,pextrw ),
00511 I( mod_xmm, modregVpsWpsIub,shufps ),
00512 I( group9, modregMq, _ ),
00513 I( one_byte, regAX, bswap ),
00514 I( one_byte, regCX, bswap ),
00515 I( one_byte, regDX, bswap ),
00516 I( one_byte, regBX, bswap ),
00517 I( one_byte, regSP, bswap ),
00518 I( one_byte, regBP, bswap ),
00519 I( one_byte, regSI, bswap ),
00520 I( one_byte, regDI, bswap ),
00521 I( stub, 0, _ ),
00522 I( mod_reg, modregPqQd, psrlw ),
00523 I( mod_reg, modregPqQd, psrld ),
00524 I( mod_reg, modregPqQd, psrlq ),
00525 I( stub, 0, _ ),
00526 I( mod_reg, modregPqQd, pmullw ),
00527 I( stub, 0, _ ),
00528
00529
00530 I( mod_reg_p3, modregGdQq, pmovmskb ),
00531 I( mod_reg, modregPqQq, psubusb ),
00532 I( mod_reg, modregPqQq, psubusw ),
00533 I( mod_reg_p3, modregPqQq, pminub ),
00534 I( mod_reg, modregPqQq, pand ),
00535 I( mod_reg, modregPqQq, paddusb ),
00536 I( mod_reg, modregPqQq, paddusw ),
00537 I( mod_reg_p3, modregPqQq, pmaxub ),
00538 I( mod_reg, modregPqQq, pandn ),
00539 I( mod_reg_p3, modregPqQq, pavgb ),
00540 I( mod_reg, modregPqQd, psraw ),
00541 I( mod_reg, modregPqQd, psrad ),
00542 I( mod_reg_p3, modregPqQq, pavgw ),
00543 I( mod_reg_p3, modregPqQq, pmulhuw ),
00544 I( mod_reg, modregPqQd, pmulhw ),
00545 I( stub, 0, _ ),
00546 I( mod_reg_p3, modregQqPq, movntq ),
00547 I( mod_reg, modregPqQq, psubsb ),
00548 I( mod_reg, modregPqQq, psubsw ),
00549 I( mod_reg_p3, modregPqQq, pminsw ),
00550 I( mod_reg, modregPqQq, por ),
00551 I( mod_reg, modregPqQq, paddsb ),
00552 I( mod_reg, modregPqQq, paddsw ),
00553 I( mod_reg_p3, modregPqQq, pmaxsw ),
00554 I( mod_reg, modregPqQq, pxor ),
00555 I( stub, 0, _ ),
00556 I( mod_reg, modregPqQd, psllw ),
00557 I( mod_reg, modregPqQd, pslld ),
00558 I( mod_reg, modregPqQd, psllq ),
00559 I( stub, 0, _ ),
00560 I( mod_reg, modregPqQd, pmaddwd ),
00561 I( mod_reg_p3, modregPqQq, psadbw ),
00562
00563
00564 I( mod_reg_p3, modregPqQq, maskmovq ),
00565 I( mod_reg, modregPqQq, psubb ),
00566 I( mod_reg, modregPqQq, psubw ),
00567 I( mod_reg, modregPqQq, psubd ),
00568 I( stub, 0, _ ),
00569 I( mod_reg, modregPqQq, paddb ),
00570 I( mod_reg, modregPqQq, paddw ),
00571 I( mod_reg, modregPqQq, paddd ),
00572 I( stub, 0, _ )
00573 #undef I
00574 };
00575
00576 inline void InstructionDecoder::CheckTables()
00577 {
00578
00579 COMPILE_CHECK(instrLenCheck,
00580 (sizeof(InstructionDecoder::instrTable) == (sizeof(InstructionDecoder::instrTable[0])*256))
00581 && (sizeof(InstructionDecoder::exInstrTable) == (sizeof(InstructionDecoder::exInstrTable[0])*256))
00582 );
00583 }
00584
00585 COMPILE_CHECK(intSizeCheck,
00586 (sizeof(int) >= 4) && (num_instructions <= (1<<23))
00587 );
00588
00589 int esc_inst[] = {
00590 DEFINE_FPI(istr_fadd,fpiTypeSingle),
00591 DEFINE_FPI(istr_fmul,fpiTypeSingle),
00592 DEFINE_FPI(istr_fcom,fpiTypeSingle),
00593 DEFINE_FPI(istr_fcomp,fpiTypeSingle),
00594 DEFINE_FPI(istr_fsub,fpiTypeSingle),
00595 DEFINE_FPI(istr_fsubr,fpiTypeSingle),
00596 DEFINE_FPI(istr_fdiv,fpiTypeSingle),
00597 DEFINE_FPI(istr_fdivr,fpiTypeSingle),
00598
00599 DEFINE_FPI(istr_fld,fpiTypeSingle),
00600 DEFINE_FPI(-1,0),
00601 DEFINE_FPI(istr_fst,fpiTypeSingle),
00602 DEFINE_FPI(istr_fstp,fpiTypeSingle),
00603 DEFINE_FPI(istr_fldenv,fpiTypeEnv),
00604 DEFINE_FPI(istr_fldcw,fpiTypeWord),
00605 DEFINE_FPI(istr_fnstenv,fpiTypeEnv),
00606 DEFINE_FPI(istr_fnstcw,fpiTypeWord),
00607
00608 DEFINE_FPI(istr_fiadd,fpiTypeSInt),
00609 DEFINE_FPI(istr_fimul,fpiTypeSInt),
00610 DEFINE_FPI(istr_ficom,fpiTypeSInt),
00611 DEFINE_FPI(istr_ficomp,fpiTypeSInt),
00612 DEFINE_FPI(istr_fisub,fpiTypeSInt),
00613 DEFINE_FPI(istr_fisubr,fpiTypeSInt),
00614 DEFINE_FPI(istr_fidiv,fpiTypeSInt),
00615 DEFINE_FPI(istr_fidivr,fpiTypeSInt),
00616
00617 DEFINE_FPI(istr_fild,fpiTypeSInt),
00618 DEFINE_FPI(-1,0),
00619 DEFINE_FPI(istr_fist,fpiTypeSInt),
00620 DEFINE_FPI(istr_fistp,fpiTypeSInt),
00621 DEFINE_FPI(-1,0),
00622 DEFINE_FPI(istr_fld,fpiTypeExtended),
00623 DEFINE_FPI(-1,0),
00624 DEFINE_FPI(istr_fstp,fpiTypeExtended),
00625
00626 DEFINE_FPI(istr_fadd,fpiTypeDouble),
00627 DEFINE_FPI(istr_fmul,fpiTypeDouble),
00628 DEFINE_FPI(istr_fcom,fpiTypeDouble),
00629 DEFINE_FPI(istr_fcomp,fpiTypeDouble),
00630 DEFINE_FPI(istr_fsub,fpiTypeDouble),
00631 DEFINE_FPI(istr_fsubr,fpiTypeDouble),
00632 DEFINE_FPI(istr_fdiv,fpiTypeDouble),
00633 DEFINE_FPI(istr_fdivr,fpiTypeDouble),
00634
00635 DEFINE_FPI(istr_fld,fpiTypeDouble),
00636 DEFINE_FPI(-1,0),
00637 DEFINE_FPI(istr_fst,fpiTypeDouble),
00638 DEFINE_FPI(istr_fstp,fpiTypeDouble),
00639 DEFINE_FPI(istr_frstor,fpiTypeStatus),
00640 DEFINE_FPI(-1,0),
00641 DEFINE_FPI(istr_fnsave,fpiTypeStatus),
00642 DEFINE_FPI(istr_fnstsw,fpiTypeWord),
00643
00644 DEFINE_FPI(istr_fiadd,fpiTypeWInt),
00645 DEFINE_FPI(istr_fimul,fpiTypeWInt),
00646 DEFINE_FPI(istr_ficom,fpiTypeWInt),
00647 DEFINE_FPI(istr_ficomp,fpiTypeWInt),
00648 DEFINE_FPI(istr_fisub,fpiTypeWInt),
00649 DEFINE_FPI(istr_fisubr,fpiTypeWInt),
00650 DEFINE_FPI(istr_fidiv,fpiTypeWInt),
00651 DEFINE_FPI(istr_fidivr,fpiTypeWInt),
00652
00653 DEFINE_FPI(istr_fild,fpiTypeWInt),
00654 DEFINE_FPI(-1,0),
00655 DEFINE_FPI(istr_fist,fpiTypeWInt),
00656 DEFINE_FPI(istr_fistp,fpiTypeWInt),
00657 DEFINE_FPI(istr_fbld,fpiTypeBCD),
00658 DEFINE_FPI(istr_fild,fpiTypeLInt),
00659 DEFINE_FPI(istr_fbstp,fpiTypeBCD),
00660 DEFINE_FPI(istr_fistp,fpiTypeLInt)
00661 };
00662 COMPILE_CHECK(escInstrLenCheck,
00663 sizeof(esc_inst) == (sizeof(esc_inst[0])*64)
00664 );
00665
00666 enum EscSpecial
00667 {
00668 escS_d9d0, escS_d9e0, escS_d9e8, escS_d9f0,
00669 escS_d9f8, escS_dae8, escS_dbe0, escS_ded8,
00670 escS_dfe0
00671 };
00672
00673 int esc_inst_mod3[] = {
00674 DEFINE_FPIM3(istr_fadd,fpiParamStStN),
00675 DEFINE_FPIM3(istr_fmul,fpiParamStStN),
00676 DEFINE_FPIM3(istr_fcom,fpiParamStStN),
00677 DEFINE_FPIM3(istr_fcomp,fpiParamStStN),
00678 DEFINE_FPIM3(istr_fsub,fpiParamStStN),
00679 DEFINE_FPIM3(istr_fsubr,fpiParamStStN),
00680 DEFINE_FPIM3(istr_fdiv,fpiParamStStN),
00681 DEFINE_FPIM3(istr_fdivr,fpiParamStStN),
00682
00683 DEFINE_FPIM3(istr_fld,fpiParamStN),
00684 DEFINE_FPIM3(istr_fxch,fpiParamStN),
00685 DEFINE_FPIM3(escS_d9d0,fpiParamNone),
00686 DEFINE_FPIM3(istr_fstp,fpiParamStN),
00687 DEFINE_FPIM3(escS_d9e0,fpiParamNone),
00688 DEFINE_FPIM3(escS_d9e8,fpiParamNone),
00689 DEFINE_FPIM3(escS_d9f0,fpiParamNone),
00690 DEFINE_FPIM3(escS_d9f8,fpiParamNone),
00691
00692 DEFINE_FPIM3(istr_fcmovb,fpiParamStStN),
00693 DEFINE_FPIM3(istr_fcmove,fpiParamStStN),
00694 DEFINE_FPIM3(istr_fcmovbe,fpiParamStStN),
00695 DEFINE_FPIM3(istr_fcmovu,fpiParamStStN),
00696 DEFINE_FPIM3(-1,fpiParamNone),
00697 DEFINE_FPIM3(escS_dae8,fpiParamNone),
00698 DEFINE_FPIM3(-1,fpiParamNone),
00699 DEFINE_FPIM3(-1,fpiParamNone),
00700
00701 DEFINE_FPIM3(istr_fcmovnb,fpiParamStStN),
00702 DEFINE_FPIM3(istr_fcmovne,fpiParamStStN),
00703 DEFINE_FPIM3(istr_fcmovnbe,fpiParamStStN),
00704 DEFINE_FPIM3(istr_fcmovnu,fpiParamStStN),
00705 DEFINE_FPIM3(escS_dbe0,fpiParamNone),
00706 DEFINE_FPIM3(istr_fucomi,fpiParamStStN),
00707 DEFINE_FPIM3(istr_fcomi,fpiParamStStN),
00708 DEFINE_FPIM3(-1,fpiParamNone),
00709
00710 DEFINE_FPIM3(istr_fadd,fpiParamStNSt),
00711 DEFINE_FPIM3(istr_fmul,fpiParamStNSt),
00712 DEFINE_FPIM3(istr_fcom,fpiParamStN),
00713 DEFINE_FPIM3(istr_fcomp,fpiParamStN),
00714 DEFINE_FPIM3(istr_fsubr,fpiParamStNSt),
00715 DEFINE_FPIM3(istr_fsub,fpiParamStNSt),
00716 DEFINE_FPIM3(istr_fdivr,fpiParamStNSt),
00717 DEFINE_FPIM3(istr_fdiv,fpiParamStNSt),
00718
00719 DEFINE_FPIM3(istr_ffree,fpiParamStN),
00720 DEFINE_FPIM3(-1,fpiParamNone),
00721 DEFINE_FPIM3(istr_fst,fpiParamStN),
00722 DEFINE_FPIM3(istr_fstp,fpiParamStN),
00723 DEFINE_FPIM3(istr_fucom,fpiParamStNSt),
00724 DEFINE_FPIM3(istr_fucomp,fpiParamStN),
00725 DEFINE_FPIM3(-1,fpiParamNone),
00726 DEFINE_FPIM3(-1,fpiParamNone),
00727
00728 DEFINE_FPIM3(istr_faddp,fpiParamStNSt),
00729 DEFINE_FPIM3(istr_fmulp,fpiParamStNSt),
00730 DEFINE_FPIM3(-1,fpiParamNone),
00731 DEFINE_FPIM3(escS_ded8,fpiParamNone),
00732 DEFINE_FPIM3(istr_fsubrp,fpiParamStNSt),
00733 DEFINE_FPIM3(istr_fsubp,fpiParamStNSt),
00734 DEFINE_FPIM3(istr_fdivrp,fpiParamStNSt),
00735 DEFINE_FPIM3(istr_fdivp,fpiParamStNSt),
00736
00737 DEFINE_FPIM3(-1,fpiParamNone),
00738 DEFINE_FPIM3(-1,fpiParamNone),
00739 DEFINE_FPIM3(-1,fpiParamNone),
00740 DEFINE_FPIM3(-1,fpiParamNone),
00741 DEFINE_FPIM3(escS_dfe0,fpiParamNone),
00742 DEFINE_FPIM3(istr_fucomip,fpiParamStStN),
00743 DEFINE_FPIM3(istr_fcomip,fpiParamStStN),
00744 DEFINE_FPIM3(-1,fpiParamNone)
00745 };
00746
00747 #define ESCSPECIAL(index,i1,i2,i3,i4,i5,i6,i7,i8) \
00748 { istr_##i1, istr_##i2, istr_##i3, istr_##i4, \
00749 istr_##i5, istr_##i6, istr_##i7, istr_##i8 }
00750 int esc_inst_special[][8] =
00751 {
00752 ESCSPECIAL(d9d0,fnop, _, _, _, _, _, _, _),
00753 ESCSPECIAL(d9e0,fchs, fabs, _, _, ftst, fxam, _, _),
00754 ESCSPECIAL(d9e8,fldl, fldl2t, fldl2e,fldpi, fldlg2, fldln2,fldz, _),
00755 ESCSPECIAL(d9f0,f2xm1,fyl2x, fptan, fpatan, fxtract,fpreml,fdecstp,fincstp),
00756 ESCSPECIAL(d9f8,fprem,fyl2xpl, fsqrt, fsincos,frndint,fscale,fsin, fcos),
00757 ESCSPECIAL(dae8,_, fucompuu,_, _, _, _, _, _),
00758 ESCSPECIAL(dbe0,feni, fdisi, fclex, finit, fsetpm, _, _, _),
00759 ESCSPECIAL(ded8,_, fcompp, _, _, _, _, _, _),
00760 ESCSPECIAL(dfe0,fstsw,_, _, _, _, _, _, _)
00761 };
00762
00763 INST_3DNOW k6_3DNow_instr[] = {
00764 { -1 },
00765 { -1 },
00766 { -1 },
00767 { -1 },
00768 { -1 },
00769 { -1 },
00770 { -1 },
00771 { -1 },
00772 { -1 },
00773 { -1 },
00774 { -1 },
00775 { -1 },
00776 { istr_pi2fw },
00777 { istr_pi2fd },
00778 { -1 },
00779 { -1 },
00780 { -1 },
00781 { -1 },
00782 { -1 },
00783 { -1 },
00784 { -1 },
00785 { -1 },
00786 { -1 },
00787 { -1 },
00788 { -1 },
00789 { -1 },
00790 { -1 },
00791 { -1 },
00792 { istr_pf2iw },
00793 { istr_pf2id },
00794 { -1 },
00795 { -1 },
00796 { -1 },
00797 { -1 },
00798 { -1 },
00799 { -1 },
00800 { -1 },
00801 { -1 },
00802 { -1 },
00803 { -1 },
00804 { -1 },
00805 { -1 },
00806 { -1 },
00807 { -1 },
00808 { -1 },
00809 { -1 },
00810 { -1 },
00811 { -1 },
00812 { -1 },
00813 { -1 },
00814 { -1 },
00815 { -1 },
00816 { -1 },
00817 { -1 },
00818 { -1 },
00819 { -1 },
00820 { -1 },
00821 { -1 },
00822 { -1 },
00823 { -1 },
00824 { -1 },
00825 { -1 },
00826 { -1 },
00827 { -1 },
00828 { -1 },
00829 { -1 },
00830 { -1 },
00831 { -1 },
00832 { -1 },
00833 { -1 },
00834 { -1 },
00835 { -1 },
00836 { -1 },
00837 { -1 },
00838 { -1 },
00839 { -1 },
00840 { -1 },
00841 { -1 },
00842 { -1 },
00843 { -1 },
00844 { -1 },
00845 { -1 },
00846 { -1 },
00847 { -1 },
00848 { -1 },
00849 { -1 },
00850 { -1 },
00851 { -1 },
00852 { -1 },
00853 { -1 },
00854 { -1 },
00855 { -1 },
00856 { -1 },
00857 { -1 },
00858 { -1 },
00859 { -1 },
00860 { -1 },
00861 { -1 },
00862 { -1 },
00863 { -1 },
00864 { -1 },
00865 { -1 },
00866 { -1 },
00867 { -1 },
00868 { -1 },
00869 { -1 },
00870 { -1 },
00871 { -1 },
00872 { -1 },
00873 { -1 },
00874 { -1 },
00875 { -1 },
00876 { -1 },
00877 { -1 },
00878 { -1 },
00879 { -1 },
00880 { -1 },
00881 { -1 },
00882 { -1 },
00883 { -1 },
00884 { -1 },
00885 { -1 },
00886 { -1 },
00887 { -1 },
00888 { -1 },
00889 { -1 },
00890 { -1 },
00891 { -1 },
00892 { -1 },
00893 { -1 },
00894 { -1 },
00895 { -1 },
00896 { -1 },
00897 { -1 },
00898 { -1 },
00899 { -1 },
00900 { -1 },
00901 { -1 },
00902 { istr_pfnacc },
00903 { -1 },
00904 { -1 },
00905 { -1 },
00906 { istr_pfpnacc },
00907 { -1 },
00908 { istr_pfcmpge },
00909 { -1 },
00910 { -1 },
00911 { -1 },
00912 { istr_pfmin },
00913 { -1 },
00914 { istr_pfrcp },
00915 { istr_pfrsqrt },
00916 { -1 },
00917 { -1 },
00918 { istr_pfsub },
00919 { -1 },
00920 { -1 },
00921 { -1 },
00922 { istr_pfadd },
00923 { -1 },
00924 { istr_pfcmpgt },
00925 { -1 },
00926 { -1 },
00927 { -1 },
00928 { istr_pfmax },
00929 { -1 },
00930 { istr_pfrcpit1},
00931 { istr_pfrsqit1},
00932 { -1 },
00933 { -1 },
00934 { istr_pfsubr },
00935 { -1 },
00936 { -1 },
00937 { -1 },
00938 { istr_pfacc },
00939 { -1 },
00940 { istr_pfcmpeq },
00941 { -1 },
00942 { -1 },
00943 { -1 },
00944 { istr_pfmul },
00945 { -1 },
00946 { istr_pfrcpit2},
00947 { istr_pmulhrw },
00948 { -1 },
00949 { -1 },
00950 { -1 },
00951 { istr_pswapd },
00952 { -1 },
00953 { -1 },
00954 { -1 },
00955 { istr_pavgusb },
00956 { -1 },
00957 { -1 },
00958 { -1 },
00959 { -1 },
00960 { -1 },
00961 { -1 },
00962 { -1 },
00963 { -1 },
00964 { -1 },
00965 { -1 },
00966 { -1 },
00967 { -1 },
00968 { -1 },
00969 { -1 },
00970 { -1 },
00971 { -1 },
00972 { -1 },
00973 { -1 },
00974 { -1 },
00975 { -1 },
00976 { -1 },
00977 { -1 },
00978 { -1 },
00979 { -1 },
00980 { -1 },
00981 { -1 },
00982 { -1 },
00983 { -1 },
00984 { -1 },
00985 { -1 },
00986 { -1 },
00987 { -1 },
00988 { -1 },
00989 { -1 },
00990 { -1 },
00991 { -1 },
00992 { -1 },
00993 { -1 },
00994 { -1 },
00995 { -1 },
00996 { -1 },
00997 { -1 },
00998 { -1 },
00999 { -1 },
01000 { -1 },
01001 { -1 },
01002 { -1 },
01003 { -1 },
01004 { -1 },
01005 { -1 },
01006 { -1 },
01007 { -1 },
01008 { -1 },
01009 { -1 },
01010 { -1 },
01011 { -1 },
01012 { -1 },
01013 { -1 },
01014 { -1 },
01015 { -1 },
01016 { -1 },
01017 { -1 },
01018 { -1 },
01019 { -1 }
01020 };
01021
01022 COMPILE_CHECK(k6_3dInstrLenCheck,
01023 sizeof(k6_3DNow_instr) == (sizeof(k6_3DNow_instr[0])*256)
01024 );
01025
01026 INST_F3XMM f3Xmm_instr[] = {
01027 #define F3OFF_NULL 0
01028 { 0, -1 },
01029 #define F3OFF_10 1
01030 { modregVssWss, istr_movss },
01031 #define F3OFF_11 2
01032 { modregWssVss, istr_movss },
01033 #define F3OFF_51 3
01034 { modregVssWss, istr_sqrtss },
01035 #define F3OFF_52 4
01036 { modregVssWss, istr_rsqrtss },
01037 #define F3OFF_53 5
01038 { modregVssWss, istr_rcpss },
01039 #define F3OFF_C2 6
01040 { modregVssWssIub, istr_cmpss },
01041 #define F3OFF_2A 7
01042 { modregVssEd, istr_cvtsi2ss },
01043 #define F3OFF_2C 8
01044 { modregGdWss, istr_cvttss2si },
01045 #define F3OFF_2D 9
01046 { modregGdWss, istr_cvtss2si },
01047 #define F3OFF_58 10
01048 { modregVssWss, istr_addss },
01049 #define F3OFF_59 11
01050 { modregVssWss, istr_mulss },
01051 #define F3OFF_5C 12
01052 { modregVssWss, istr_subss },
01053 #define F3OFF_5D 13
01054 { modregVssWss, istr_minss },
01055 #define F3OFF_5E 14
01056 { modregVssWss, istr_divss },
01057 #define F3OFF_5F 15
01058 { modregVssWss, istr_maxss },
01059 };
01060
01061
01062 uchar f3Xmm_offsets[] = {
01063 { F3OFF_NULL },
01064 { F3OFF_NULL },
01065 { F3OFF_NULL },
01066 { F3OFF_NULL },
01067 { F3OFF_NULL },
01068 { F3OFF_NULL },
01069 { F3OFF_NULL },
01070 { F3OFF_NULL },
01071 { F3OFF_NULL },
01072 { F3OFF_NULL },
01073 { F3OFF_NULL },
01074 { F3OFF_NULL },
01075 { F3OFF_NULL },
01076 { F3OFF_NULL },
01077 { F3OFF_NULL },
01078 { F3OFF_NULL },
01079 { F3OFF_10 },
01080 { F3OFF_11 },
01081 { F3OFF_NULL },
01082 { F3OFF_NULL },
01083 { F3OFF_NULL },
01084 { F3OFF_NULL },
01085 { F3OFF_NULL },
01086 { F3OFF_NULL },
01087 { F3OFF_NULL },
01088 { F3OFF_NULL },
01089 { F3OFF_NULL },
01090 { F3OFF_NULL },
01091 { F3OFF_NULL },
01092 { F3OFF_NULL },
01093 { F3OFF_NULL },
01094 { F3OFF_NULL },
01095 { F3OFF_NULL },
01096 { F3OFF_NULL },
01097 { F3OFF_NULL },
01098 { F3OFF_NULL },
01099 { F3OFF_NULL },
01100 { F3OFF_NULL },
01101 { F3OFF_NULL },
01102 { F3OFF_NULL },
01103 { F3OFF_NULL },
01104 { F3OFF_NULL },
01105 { F3OFF_2A },
01106 { F3OFF_NULL },
01107 { F3OFF_2C },
01108 { F3OFF_2D },
01109 { F3OFF_NULL },
01110 { F3OFF_NULL },
01111 { F3OFF_NULL },
01112 { F3OFF_NULL },
01113 { F3OFF_NULL },
01114 { F3OFF_NULL },
01115 { F3OFF_NULL },
01116 { F3OFF_NULL },
01117 { F3OFF_NULL },
01118 { F3OFF_NULL },
01119 { F3OFF_NULL },
01120 { F3OFF_NULL },
01121 { F3OFF_NULL },
01122 { F3OFF_NULL },
01123 { F3OFF_NULL },
01124 { F3OFF_NULL },
01125 { F3OFF_NULL },
01126 { F3OFF_NULL },
01127 { F3OFF_NULL },
01128 { F3OFF_NULL },
01129 { F3OFF_NULL },
01130 { F3OFF_NULL },
01131 { F3OFF_NULL },
01132 { F3OFF_NULL },
01133 { F3OFF_NULL },
01134 { F3OFF_NULL },
01135 { F3OFF_NULL },
01136 { F3OFF_NULL },
01137 { F3OFF_NULL },
01138 { F3OFF_NULL },
01139 { F3OFF_NULL },
01140 { F3OFF_NULL },
01141 { F3OFF_NULL },
01142 { F3OFF_NULL },
01143 { F3OFF_NULL },
01144 { F3OFF_51 },
01145 { F3OFF_52 },
01146 { F3OFF_53 },
01147 { F3OFF_NULL },
01148 { F3OFF_NULL },
01149 { F3OFF_NULL },
01150 { F3OFF_NULL },
01151 { F3OFF_58 },
01152 { F3OFF_59 },
01153 { F3OFF_NULL },
01154 { F3OFF_NULL },
01155 { F3OFF_5C },
01156 { F3OFF_5D },
01157 { F3OFF_5E },
01158 { F3OFF_5F },
01159 { F3OFF_NULL },
01160 { F3OFF_NULL },
01161 { F3OFF_NULL },
01162 { F3OFF_NULL },
01163 { F3OFF_NULL },
01164 { F3OFF_NULL },
01165 { F3OFF_NULL },
01166 { F3OFF_NULL },
01167 { F3OFF_NULL },
01168 { F3OFF_NULL },
01169 { F3OFF_NULL },
01170 { F3OFF_NULL },
01171 { F3OFF_NULL },
01172 { F3OFF_NULL },
01173 { F3OFF_NULL },
01174 { F3OFF_NULL },
01175 { F3OFF_NULL },
01176 { F3OFF_NULL },
01177 { F3OFF_NULL },
01178 { F3OFF_NULL },
01179 { F3OFF_NULL },
01180 { F3OFF_NULL },
01181 { F3OFF_NULL },
01182 { F3OFF_NULL },
01183 { F3OFF_NULL },
01184 { F3OFF_NULL },
01185 { F3OFF_NULL },
01186 { F3OFF_NULL },
01187 { F3OFF_NULL },
01188 { F3OFF_NULL },
01189 { F3OFF_NULL },
01190 { F3OFF_NULL },
01191 { F3OFF_NULL },
01192 { F3OFF_NULL },
01193 { F3OFF_NULL },
01194 { F3OFF_NULL },
01195 { F3OFF_NULL },
01196 { F3OFF_NULL },
01197 { F3OFF_NULL },
01198 { F3OFF_NULL },
01199 { F3OFF_NULL },
01200 { F3OFF_NULL },
01201 { F3OFF_NULL },
01202 { F3OFF_NULL },
01203 { F3OFF_NULL },
01204 { F3OFF_NULL },
01205 { F3OFF_NULL },
01206 { F3OFF_NULL },
01207 { F3OFF_NULL },
01208 { F3OFF_NULL },
01209 { F3OFF_NULL },
01210 { F3OFF_NULL },
01211 { F3OFF_NULL },
01212 { F3OFF_NULL },
01213 { F3OFF_NULL },
01214 { F3OFF_NULL },
01215 { F3OFF_NULL },
01216 { F3OFF_NULL },
01217 { F3OFF_NULL },
01218 { F3OFF_NULL },
01219 { F3OFF_NULL },
01220 { F3OFF_NULL },
01221 { F3OFF_NULL },
01222 { F3OFF_NULL },
01223 { F3OFF_NULL },
01224 { F3OFF_NULL },
01225 { F3OFF_NULL },
01226 { F3OFF_NULL },
01227 { F3OFF_NULL },
01228 { F3OFF_NULL },
01229 { F3OFF_NULL },
01230 { F3OFF_NULL },
01231 { F3OFF_NULL },
01232 { F3OFF_NULL },
01233 { F3OFF_NULL },
01234 { F3OFF_NULL },
01235 { F3OFF_NULL },
01236 { F3OFF_NULL },
01237 { F3OFF_NULL },
01238 { F3OFF_NULL },
01239 { F3OFF_NULL },
01240 { F3OFF_NULL },
01241 { F3OFF_NULL },
01242 { F3OFF_NULL },
01243 { F3OFF_NULL },
01244 { F3OFF_NULL },
01245 { F3OFF_NULL },
01246 { F3OFF_NULL },
01247 { F3OFF_NULL },
01248 { F3OFF_NULL },
01249 { F3OFF_NULL },
01250 { F3OFF_NULL },
01251 { F3OFF_NULL },
01252 { F3OFF_NULL },
01253 { F3OFF_NULL },
01254 { F3OFF_NULL },
01255 { F3OFF_NULL },
01256 { F3OFF_NULL },
01257 { F3OFF_C2 },
01258 { F3OFF_NULL },
01259 { F3OFF_NULL },
01260 { F3OFF_NULL },
01261 { F3OFF_NULL },
01262 { F3OFF_NULL },
01263 { F3OFF_NULL },
01264 { F3OFF_NULL },
01265 { F3OFF_NULL },
01266 { F3OFF_NULL },
01267 { F3OFF_NULL },
01268 { F3OFF_NULL },
01269 { F3OFF_NULL },
01270 { F3OFF_NULL },
01271 { F3OFF_NULL },
01272 { F3OFF_NULL },
01273 { F3OFF_NULL },
01274 { F3OFF_NULL },
01275 { F3OFF_NULL },
01276 { F3OFF_NULL },
01277 { F3OFF_NULL },
01278 { F3OFF_NULL },
01279 { F3OFF_NULL },
01280 { F3OFF_NULL },
01281 { F3OFF_NULL },
01282 { F3OFF_NULL },
01283 { F3OFF_NULL },
01284 { F3OFF_NULL },
01285 { F3OFF_NULL },
01286 { F3OFF_NULL },
01287 { F3OFF_NULL },
01288 { F3OFF_NULL },
01289 { F3OFF_NULL },
01290 { F3OFF_NULL },
01291 { F3OFF_NULL },
01292 { F3OFF_NULL },
01293 { F3OFF_NULL },
01294 { F3OFF_NULL },
01295 { F3OFF_NULL },
01296 { F3OFF_NULL },
01297 { F3OFF_NULL },
01298 { F3OFF_NULL },
01299 { F3OFF_NULL },
01300 { F3OFF_NULL },
01301 { F3OFF_NULL },
01302 { F3OFF_NULL },
01303 { F3OFF_NULL },
01304 { F3OFF_NULL },
01305 { F3OFF_NULL },
01306 { F3OFF_NULL },
01307 { F3OFF_NULL },
01308 { F3OFF_NULL },
01309 { F3OFF_NULL },
01310 { F3OFF_NULL },
01311 { F3OFF_NULL },
01312 { F3OFF_NULL },
01313 { F3OFF_NULL },
01314 { F3OFF_NULL },
01315 { F3OFF_NULL },
01316 { F3OFF_NULL },
01317 { F3OFF_NULL },
01318 { F3OFF_NULL }
01319 };
01320 COMPILE_CHECK(f3xmmLenCheck,
01321 sizeof(f3Xmm_offsets) == (sizeof(f3Xmm_offsets[0])*256)
01322 );