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
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066 #ifndef _MMX_H
00067 #define _MMX_H
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078 #undef BROKEN_PAND
00079
00080
00081
00082
00083
00084
00085
00086 typedef union {
00087 long long q;
00088 unsigned long long uq;
00089 int d[2];
00090 unsigned int ud[2];
00091 short w[4];
00092 unsigned short uw[4];
00093 char b[8];
00094 unsigned char ub[8];
00095 float s[2];
00096 } mmx_t;
00097
00098
00099
00100
00101
00102 inline extern int
00103 mm_support(void)
00104 {
00105
00106
00107
00108
00109
00110 register int rval = 0;
00111
00112 __asm__ __volatile__ (
00113
00114
00115 "pushf\n\t"
00116 "popl %%eax\n\t"
00117 "movl %%eax, %%ecx\n\t"
00118
00119
00120
00121 "xorl $0x200000, %%eax\n\t"
00122 "push %%eax\n\t"
00123 "popf\n\t"
00124
00125
00126 "pushf\n\t"
00127 "popl %%eax\n\t"
00128
00129
00130 "xorl %%eax, %%ecx\n\t"
00131 "testl $0x200000, %%ecx\n\t"
00132 "jz NotSupported1\n\t"
00133
00134
00135
00136
00137 "movl $0, %%eax\n\t"
00138 "cpuid\n\t"
00139
00140
00141 "cmpl $0x756e6547, %%ebx\n\t"
00142 "jne TryAMD\n\t"
00143 "cmpl $0x49656e69, %%edx\n\t"
00144 "jne TryAMD\n\t"
00145 "cmpl $0x6c65746e, %%ecx\n"
00146 "jne TryAMD\n\t"
00147 "jmp Intel\n\t"
00148
00149
00150 "\nTryAMD:\n\t"
00151 "cmpl $0x68747541, %%ebx\n\t"
00152 "jne TryCyrix\n\t"
00153 "cmpl $0x69746e65, %%edx\n\t"
00154 "jne TryCyrix\n\t"
00155 "cmpl $0x444d4163, %%ecx\n"
00156 "jne TryCyrix\n\t"
00157 "jmp AMD\n\t"
00158
00159
00160 "\nTryCyrix:\n\t"
00161 "cmpl $0x69727943, %%ebx\n\t"
00162 "jne NotSupported2\n\t"
00163 "cmpl $0x736e4978, %%edx\n\t"
00164 "jne NotSupported3\n\t"
00165 "cmpl $0x64616574, %%ecx\n\t"
00166 "jne NotSupported4\n\t"
00167
00168
00169
00170
00171
00172 "movl $0x80000000, %%eax\n\t"
00173 "cpuid\n\t"
00174 "cmpl $0x80000000, %%eax\n\t"
00175 "jl MMXtest\n\t"
00176
00177
00178 "movl $0x80000001, %%eax\n\t"
00179 "cpuid\n\t"
00180 "testl $0x00800000, %%eax\n\t"
00181 "jz NotSupported5\n\t"
00182 "testl $0x01000000, %%eax\n\t"
00183 "jnz EMMXSupported\n\t"
00184 "movl $1, %0:\n\n\t"
00185 "jmp Return\n\n"
00186 "EMMXSupported:\n\t"
00187 "movl $3, %0:\n\n\t"
00188 "jmp Return\n\t"
00189
00190
00191
00192 "AMD:\n\t"
00193
00194
00195 "movl $0x80000000, %%eax\n\t"
00196 "cpuid\n\t"
00197 "cmpl $0x80000000, %%eax\n\t"
00198 "jl MMXtest\n\t"
00199
00200
00201 "movl $0x80000001, %%eax\n\t"
00202 "cpuid\n\t"
00203 "testl $0x00800000, %%edx\n\t"
00204 "jz NotSupported6\n\t"
00205 "testl $0x80000000, %%edx\n\t"
00206 "jnz ThreeDNowSupported\n\t"
00207 "movl $1, %0:\n\n\t"
00208 "jmp Return\n\n"
00209 "ThreeDNowSupported:\n\t"
00210 "movl $5, %0:\n\n\t"
00211 "jmp Return\n\t"
00212
00213
00214
00215 "Intel:\n\t"
00216
00217
00218 "MMXtest:\n\t"
00219 "movl $1, %%eax\n\t"
00220 "cpuid\n\t"
00221 "testl $0x00800000, %%edx\n\t"
00222 "jz NotSupported7\n\t"
00223 "movl $1, %0:\n\n\t"
00224 "jmp Return\n\t"
00225
00226
00227 "\nNotSupported1:\n\t"
00228 "#movl $101, %0:\n\n\t"
00229 "\nNotSupported2:\n\t"
00230 "#movl $102, %0:\n\n\t"
00231 "\nNotSupported3:\n\t"
00232 "#movl $103, %0:\n\n\t"
00233 "\nNotSupported4:\n\t"
00234 "#movl $104, %0:\n\n\t"
00235 "\nNotSupported5:\n\t"
00236 "#movl $105, %0:\n\n\t"
00237 "\nNotSupported6:\n\t"
00238 "#movl $106, %0:\n\n\t"
00239 "\nNotSupported7:\n\t"
00240 "#movl $107, %0:\n\n\t"
00241 "movl $0, %0:\n\n\t"
00242
00243 "Return:\n\t"
00244 : "=a" (rval)
00245 :
00246 : "eax", "ebx", "ecx", "edx"
00247 );
00248
00249
00250 return(rval);
00251 }
00252
00253
00254
00255 inline extern int
00256 mmx_ok(void)
00257 {
00258
00259 return ( mm_support() & 0x1 );
00260 }
00261
00262
00263
00264
00265
00266
00267
00268
00269 #ifdef MMX_TRACE
00270
00271
00272
00273
00274 #include <stdio.h>
00275
00276 #define mmx_i2r(op, imm, reg) \
00277 { \
00278 mmx_t mmx_trace; \
00279 mmx_trace = (imm); \
00280 fprintf(stderr, #op "_i2r(" #imm "=0x%016llx, ", mmx_trace.q); \
00281 __asm__ __volatile__ ("movq %%" #reg ", %0" \
00282 : "=X" (mmx_trace) \
00283 : ); \
00284 fprintf(stderr, #reg "=0x%016llx) => ", mmx_trace.q); \
00285 __asm__ __volatile__ (#op " %0, %%" #reg \
00286 : \
00287 : "X" (imm)); \
00288 __asm__ __volatile__ ("movq %%" #reg ", %0" \
00289 : "=X" (mmx_trace) \
00290 : ); \
00291 fprintf(stderr, #reg "=0x%016llx\n", mmx_trace.q); \
00292 }
00293
00294 #define mmx_m2r(op, mem, reg) \
00295 { \
00296 mmx_t mmx_trace; \
00297 mmx_trace = (mem); \
00298 fprintf(stderr, #op "_m2r(" #mem "=0x%016llx, ", mmx_trace.q); \
00299 __asm__ __volatile__ ("movq %%" #reg ", %0" \
00300 : "=X" (mmx_trace) \
00301 : ); \
00302 fprintf(stderr, #reg "=0x%016llx) => ", mmx_trace.q); \
00303 __asm__ __volatile__ (#op " %0, %%" #reg \
00304 : \
00305 : "X" (mem)); \
00306 __asm__ __volatile__ ("movq %%" #reg ", %0" \
00307 : "=X" (mmx_trace) \
00308 : ); \
00309 fprintf(stderr, #reg "=0x%016llx\n", mmx_trace.q); \
00310 }
00311
00312 #define mmx_r2m(op, reg, mem) \
00313 { \
00314 mmx_t mmx_trace; \
00315 __asm__ __volatile__ ("movq %%" #reg ", %0" \
00316 : "=X" (mmx_trace) \
00317 : ); \
00318 fprintf(stderr, #op "_r2m(" #reg "=0x%016llx, ", mmx_trace.q); \
00319 mmx_trace = (mem); \
00320 fprintf(stderr, #mem "=0x%016llx) => ", mmx_trace.q); \
00321 __asm__ __volatile__ (#op " %%" #reg ", %0" \
00322 : "=X" (mem) \
00323 : ); \
00324 mmx_trace = (mem); \
00325 fprintf(stderr, #mem "=0x%016llx\n", mmx_trace.q); \
00326 }
00327
00328 #define mmx_r2r(op, regs, regd) \
00329 { \
00330 mmx_t mmx_trace; \
00331 __asm__ __volatile__ ("movq %%" #regs ", %0" \
00332 : "=X" (mmx_trace) \
00333 : ); \
00334 fprintf(stderr, #op "_r2r(" #regs "=0x%016llx, ", mmx_trace.q); \
00335 __asm__ __volatile__ ("movq %%" #regd ", %0" \
00336 : "=X" (mmx_trace) \
00337 : ); \
00338 fprintf(stderr, #regd "=0x%016llx) => ", mmx_trace.q); \
00339 __asm__ __volatile__ (#op " %" #regs ", %" #regd); \
00340 __asm__ __volatile__ ("movq %%" #regd ", %0" \
00341 : "=X" (mmx_trace) \
00342 : ); \
00343 fprintf(stderr, #regd "=0x%016llx\n", mmx_trace.q); \
00344 }
00345
00346 #define mmx_m2m(op, mems, memd) \
00347 { \
00348 mmx_t mmx_trace; \
00349 mmx_trace = (mems); \
00350 fprintf(stderr, #op "_m2m(" #mems "=0x%016llx, ", mmx_trace.q); \
00351 mmx_trace = (memd); \
00352 fprintf(stderr, #memd "=0x%016llx) => ", mmx_trace.q); \
00353 __asm__ __volatile__ ("movq %0, %%mm0\n\t" \
00354 #op " %1, %%mm0\n\t" \
00355 "movq %%mm0, %0" \
00356 : "=X" (memd) \
00357 : "X" (mems)); \
00358 mmx_trace = (memd); \
00359 fprintf(stderr, #memd "=0x%016llx\n", mmx_trace.q); \
00360 }
00361
00362 #else
00363
00364
00365
00366
00367 #define mmx_i2r(op, imm, reg) \
00368 __asm__ __volatile__ (#op " $" #imm ", %%" #reg \
00369 : \
00370 : );
00371
00372 #define mmx_m2r(op, mem, reg) \
00373 __asm__ __volatile__ (#op " %0, %%" #reg \
00374 : \
00375 : "X" (mem))
00376
00377 #define mmx_r2m(op, reg, mem) \
00378 __asm__ __volatile__ (#op " %%" #reg ", %0" \
00379 : "=X" (mem) \
00380 : )
00381
00382 #define mmx_r2r(op, regs, regd) \
00383 __asm__ __volatile__ (#op " %" #regs ", %" #regd)
00384
00385 #define mmx_m2m(op, mems, memd) \
00386 __asm__ __volatile__ ("movq %0, %%mm0\n\t" \
00387 #op " %1, %%mm0\n\t" \
00388 "movq %%mm0, %0" \
00389 : "=X" (memd) \
00390 : "X" (mems))
00391
00392 #endif
00393
00394
00395
00396
00397
00398
00399 #define movq_m2r(var, reg) mmx_m2r(movq, var, reg)
00400 #define movq_r2m(reg, var) mmx_r2m(movq, reg, var)
00401 #define movq_r2r(regs, regd) mmx_r2r(movq, regs, regd)
00402 #define movq(vars, vard) \
00403 __asm__ __volatile__ ("movq %1, %%mm0\n\t" \
00404 "movq %%mm0, %0" \
00405 : "=X" (vard) \
00406 : "X" (vars))
00407
00408
00409
00410
00411
00412
00413
00414 #define movd_m2r(var, reg) mmx_m2r(movd, var, reg)
00415 #define movd_r2m(reg, var) mmx_r2m(movd, reg, var)
00416 #define movd_r2r(regs, regd) mmx_r2r(movd, regs, regd)
00417 #define movd(vars, vard) \
00418 __asm__ __volatile__ ("movd %1, %%mm0\n\t" \
00419 "movd %%mm0, %0" \
00420 : "=X" (vard) \
00421 : "X" (vars))
00422
00423
00424
00425
00426 #define paddd_m2r(var, reg) mmx_m2r(paddd, var, reg)
00427 #define paddd_r2r(regs, regd) mmx_r2r(paddd, regs, regd)
00428 #define paddd(vars, vard) mmx_m2m(paddd, vars, vard)
00429
00430 #define paddw_m2r(var, reg) mmx_m2r(paddw, var, reg)
00431 #define paddw_r2r(regs, regd) mmx_r2r(paddw, regs, regd)
00432 #define paddw(vars, vard) mmx_m2m(paddw, vars, vard)
00433
00434 #define paddb_m2r(var, reg) mmx_m2r(paddb, var, reg)
00435 #define paddb_r2r(regs, regd) mmx_r2r(paddb, regs, regd)
00436 #define paddb(vars, vard) mmx_m2m(paddb, vars, vard)
00437
00438
00439
00440
00441 #define paddsw_m2r(var, reg) mmx_m2r(paddsw, var, reg)
00442 #define paddsw_r2r(regs, regd) mmx_r2r(paddsw, regs, regd)
00443 #define paddsw(vars, vard) mmx_m2m(paddsw, vars, vard)
00444
00445 #define paddsb_m2r(var, reg) mmx_m2r(paddsb, var, reg)
00446 #define paddsb_r2r(regs, regd) mmx_r2r(paddsb, regs, regd)
00447 #define paddsb(vars, vard) mmx_m2m(paddsb, vars, vard)
00448
00449
00450
00451
00452 #define paddusw_m2r(var, reg) mmx_m2r(paddusw, var, reg)
00453 #define paddusw_r2r(regs, regd) mmx_r2r(paddusw, regs, regd)
00454 #define paddusw(vars, vard) mmx_m2m(paddusw, vars, vard)
00455
00456 #define paddusb_m2r(var, reg) mmx_m2r(paddusb, var, reg)
00457 #define paddusb_r2r(regs, regd) mmx_r2r(paddusb, regs, regd)
00458 #define paddusb(vars, vard) mmx_m2m(paddusb, vars, vard)
00459
00460
00461
00462
00463 #define psubd_m2r(var, reg) mmx_m2r(psubd, var, reg)
00464 #define psubd_r2r(regs, regd) mmx_r2r(psubd, regs, regd)
00465 #define psubd(vars, vard) mmx_m2m(psubd, vars, vard)
00466
00467 #define psubw_m2r(var, reg) mmx_m2r(psubw, var, reg)
00468 #define psubw_r2r(regs, regd) mmx_r2r(psubw, regs, regd)
00469 #define psubw(vars, vard) mmx_m2m(psubw, vars, vard)
00470
00471 #define psubb_m2r(var, reg) mmx_m2r(psubb, var, reg)
00472 #define psubb_r2r(regs, regd) mmx_r2r(psubb, regs, regd)
00473 #define psubb(vars, vard) mmx_m2m(psubb, vars, vard)
00474
00475
00476
00477
00478 #define psubsw_m2r(var, reg) mmx_m2r(psubsw, var, reg)
00479 #define psubsw_r2r(regs, regd) mmx_r2r(psubsw, regs, regd)
00480 #define psubsw(vars, vard) mmx_m2m(psubsw, vars, vard)
00481
00482 #define psubsb_m2r(var, reg) mmx_m2r(psubsb, var, reg)
00483 #define psubsb_r2r(regs, regd) mmx_r2r(psubsb, regs, regd)
00484 #define psubsb(vars, vard) mmx_m2m(psubsb, vars, vard)
00485
00486
00487
00488
00489 #define psubusw_m2r(var, reg) mmx_m2r(psubusw, var, reg)
00490 #define psubusw_r2r(regs, regd) mmx_r2r(psubusw, regs, regd)
00491 #define psubusw(vars, vard) mmx_m2m(psubusw, vars, vard)
00492
00493 #define psubusb_m2r(var, reg) mmx_m2r(psubusb, var, reg)
00494 #define psubusb_r2r(regs, regd) mmx_r2r(psubusb, regs, regd)
00495 #define psubusb(vars, vard) mmx_m2m(psubusb, vars, vard)
00496
00497
00498
00499
00500 #define pmullw_m2r(var, reg) mmx_m2r(pmullw, var, reg)
00501 #define pmullw_r2r(regs, regd) mmx_r2r(pmullw, regs, regd)
00502 #define pmullw(vars, vard) mmx_m2m(pmullw, vars, vard)
00503
00504
00505
00506
00507 #define pmulhw_m2r(var, reg) mmx_m2r(pmulhw, var, reg)
00508 #define pmulhw_r2r(regs, regd) mmx_r2r(pmulhw, regs, regd)
00509 #define pmulhw(vars, vard) mmx_m2m(pmulhw, vars, vard)
00510
00511
00512
00513
00514
00515
00516 #define pmaddwd_m2r(var, reg) mmx_m2r(pmaddwd, var, reg)
00517 #define pmaddwd_r2r(regs, regd) mmx_r2r(pmaddwd, regs, regd)
00518 #define pmaddwd(vars, vard) mmx_m2m(pmaddwd, vars, vard)
00519
00520
00521
00522
00523 #ifdef BROKEN_PAND
00524 #define pand_m2r(var, reg) \
00525 { \
00526 mmx_m2r(pandn, (mmx_t) -1LL, reg); \
00527 mmx_m2r(pandn, var, reg); \
00528 }
00529 #define pand_r2r(regs, regd) \
00530 { \
00531 mmx_m2r(pandn, (mmx_t) -1LL, regd); \
00532 mmx_r2r(pandn, regs, regd) \
00533 }
00534 #define pand(vars, vard) \
00535 { \
00536 movq_m2r(vard, mm0); \
00537 mmx_m2r(pandn, (mmx_t) -1LL, mm0); \
00538 mmx_m2r(pandn, vars, mm0); \
00539 movq_r2m(mm0, vard); \
00540 }
00541 #else
00542 #define pand_m2r(var, reg) mmx_m2r(pand, var, reg)
00543 #define pand_r2r(regs, regd) mmx_r2r(pand, regs, regd)
00544 #define pand(vars, vard) mmx_m2m(pand, vars, vard)
00545 #endif
00546
00547
00548
00549
00550 #define pandn_m2r(var, reg) mmx_m2r(pandn, var, reg)
00551 #define pandn_r2r(regs, regd) mmx_r2r(pandn, regs, regd)
00552 #define pandn(vars, vard) mmx_m2m(pandn, vars, vard)
00553
00554
00555
00556
00557 #define por_m2r(var, reg) mmx_m2r(por, var, reg)
00558 #define por_r2r(regs, regd) mmx_r2r(por, regs, regd)
00559 #define por(vars, vard) mmx_m2m(por, vars, vard)
00560
00561
00562
00563
00564 #define pxor_m2r(var, reg) mmx_m2r(pxor, var, reg)
00565 #define pxor_r2r(regs, regd) mmx_r2r(pxor, regs, regd)
00566 #define pxor(vars, vard) mmx_m2m(pxor, vars, vard)
00567
00568
00569
00570
00571
00572 #define pcmpeqd_m2r(var, reg) mmx_m2r(pcmpeqd, var, reg)
00573 #define pcmpeqd_r2r(regs, regd) mmx_r2r(pcmpeqd, regs, regd)
00574 #define pcmpeqd(vars, vard) mmx_m2m(pcmpeqd, vars, vard)
00575
00576 #define pcmpeqw_m2r(var, reg) mmx_m2r(pcmpeqw, var, reg)
00577 #define pcmpeqw_r2r(regs, regd) mmx_r2r(pcmpeqw, regs, regd)
00578 #define pcmpeqw(vars, vard) mmx_m2m(pcmpeqw, vars, vard)
00579
00580 #define pcmpeqb_m2r(var, reg) mmx_m2r(pcmpeqb, var, reg)
00581 #define pcmpeqb_r2r(regs, regd) mmx_r2r(pcmpeqb, regs, regd)
00582 #define pcmpeqb(vars, vard) mmx_m2m(pcmpeqb, vars, vard)
00583
00584
00585
00586
00587
00588 #define pcmpgtd_m2r(var, reg) mmx_m2r(pcmpgtd, var, reg)
00589 #define pcmpgtd_r2r(regs, regd) mmx_r2r(pcmpgtd, regs, regd)
00590 #define pcmpgtd(vars, vard) mmx_m2m(pcmpgtd, vars, vard)
00591
00592 #define pcmpgtw_m2r(var, reg) mmx_m2r(pcmpgtw, var, reg)
00593 #define pcmpgtw_r2r(regs, regd) mmx_r2r(pcmpgtw, regs, regd)
00594 #define pcmpgtw(vars, vard) mmx_m2m(pcmpgtw, vars, vard)
00595
00596 #define pcmpgtb_m2r(var, reg) mmx_m2r(pcmpgtb, var, reg)
00597 #define pcmpgtb_r2r(regs, regd) mmx_r2r(pcmpgtb, regs, regd)
00598 #define pcmpgtb(vars, vard) mmx_m2m(pcmpgtb, vars, vard)
00599
00600
00601
00602
00603 #define psllq_i2r(imm, reg) mmx_i2r(psllq, imm, reg)
00604 #define psllq_m2r(var, reg) mmx_m2r(psllq, var, reg)
00605 #define psllq_r2r(regs, regd) mmx_r2r(psllq, regs, regd)
00606 #define psllq(vars, vard) mmx_m2m(psllq, vars, vard)
00607
00608 #define pslld_i2r(imm, reg) mmx_i2r(pslld, imm, reg)
00609 #define pslld_m2r(var, reg) mmx_m2r(pslld, var, reg)
00610 #define pslld_r2r(regs, regd) mmx_r2r(pslld, regs, regd)
00611 #define pslld(vars, vard) mmx_m2m(pslld, vars, vard)
00612
00613 #define psllw_i2r(imm, reg) mmx_i2r(psllw, imm, reg)
00614 #define psllw_m2r(var, reg) mmx_m2r(psllw, var, reg)
00615 #define psllw_r2r(regs, regd) mmx_r2r(psllw, regs, regd)
00616 #define psllw(vars, vard) mmx_m2m(psllw, vars, vard)
00617
00618
00619
00620
00621 #define psrlq_i2r(imm, reg) mmx_i2r(psrlq, imm, reg)
00622 #define psrlq_m2r(var, reg) mmx_m2r(psrlq, var, reg)
00623 #define psrlq_r2r(regs, regd) mmx_r2r(psrlq, regs, regd)
00624 #define psrlq(vars, vard) mmx_m2m(psrlq, vars, vard)
00625
00626 #define psrld_i2r(imm, reg) mmx_i2r(psrld, imm, reg)
00627 #define psrld_m2r(var, reg) mmx_m2r(psrld, var, reg)
00628 #define psrld_r2r(regs, regd) mmx_r2r(psrld, regs, regd)
00629 #define psrld(vars, vard) mmx_m2m(psrld, vars, vard)
00630
00631 #define psrlw_i2r(imm, reg) mmx_i2r(psrlw, imm, reg)
00632 #define psrlw_m2r(var, reg) mmx_m2r(psrlw, var, reg)
00633 #define psrlw_r2r(regs, regd) mmx_r2r(psrlw, regs, regd)
00634 #define psrlw(vars, vard) mmx_m2m(psrlw, vars, vard)
00635
00636
00637
00638
00639 #define psrad_i2r(imm, reg) mmx_i2r(psrad, imm, reg)
00640 #define psrad_m2r(var, reg) mmx_m2r(psrad, var, reg)
00641 #define psrad_r2r(regs, regd) mmx_r2r(psrad, regs, regd)
00642 #define psrad(vars, vard) mmx_m2m(psrad, vars, vard)
00643
00644 #define psraw_i2r(imm, reg) mmx_i2r(psraw, imm, reg)
00645 #define psraw_m2r(var, reg) mmx_m2r(psraw, var, reg)
00646 #define psraw_r2r(regs, regd) mmx_r2r(psraw, regs, regd)
00647 #define psraw(vars, vard) mmx_m2m(psraw, vars, vard)
00648
00649
00650
00651
00652
00653 #define packssdw_m2r(var, reg) mmx_m2r(packssdw, var, reg)
00654 #define packssdw_r2r(regs, regd) mmx_r2r(packssdw, regs, regd)
00655 #define packssdw(vars, vard) mmx_m2m(packssdw, vars, vard)
00656
00657 #define packsswb_m2r(var, reg) mmx_m2r(packsswb, var, reg)
00658 #define packsswb_r2r(regs, regd) mmx_r2r(packsswb, regs, regd)
00659 #define packsswb(vars, vard) mmx_m2m(packsswb, vars, vard)
00660
00661
00662
00663
00664
00665 #define packuswb_m2r(var, reg) mmx_m2r(packuswb, var, reg)
00666 #define packuswb_r2r(regs, regd) mmx_r2r(packuswb, regs, regd)
00667 #define packuswb(vars, vard) mmx_m2m(packuswb, vars, vard)
00668
00669
00670
00671
00672
00673
00674 #define punpckldq_m2r(var, reg) mmx_m2r(punpckldq, var, reg)
00675 #define punpckldq_r2r(regs, regd) mmx_r2r(punpckldq, regs, regd)
00676 #define punpckldq(vars, vard) mmx_m2m(punpckldq, vars, vard)
00677
00678 #define punpcklwd_m2r(var, reg) mmx_m2r(punpcklwd, var, reg)
00679 #define punpcklwd_r2r(regs, regd) mmx_r2r(punpcklwd, regs, regd)
00680 #define punpcklwd(vars, vard) mmx_m2m(punpcklwd, vars, vard)
00681
00682 #define punpcklbw_m2r(var, reg) mmx_m2r(punpcklbw, var, reg)
00683 #define punpcklbw_r2r(regs, regd) mmx_r2r(punpcklbw, regs, regd)
00684 #define punpcklbw(vars, vard) mmx_m2m(punpcklbw, vars, vard)
00685
00686
00687
00688
00689
00690
00691 #define punpckhdq_m2r(var, reg) mmx_m2r(punpckhdq, var, reg)
00692 #define punpckhdq_r2r(regs, regd) mmx_r2r(punpckhdq, regs, regd)
00693 #define punpckhdq(vars, vard) mmx_m2m(punpckhdq, vars, vard)
00694
00695 #define punpckhwd_m2r(var, reg) mmx_m2r(punpckhwd, var, reg)
00696 #define punpckhwd_r2r(regs, regd) mmx_r2r(punpckhwd, regs, regd)
00697 #define punpckhwd(vars, vard) mmx_m2m(punpckhwd, vars, vard)
00698
00699 #define punpckhbw_m2r(var, reg) mmx_m2r(punpckhbw, var, reg)
00700 #define punpckhbw_r2r(regs, regd) mmx_r2r(punpckhbw, regs, regd)
00701 #define punpckhbw(vars, vard) mmx_m2m(punpckhbw, vars, vard)
00702
00703
00704
00705
00706
00707
00708
00709
00710 #ifdef MMX_TRACE
00711
00712 #define emms() \
00713 { \
00714 fprintf(stderr, "emms()\n"); \
00715 __asm__ __volatile__ ("emms"); \
00716 }
00717
00718 #else
00719
00720 #define emms() __asm__ __volatile__ ("emms")
00721
00722 #endif
00723
00724 #endif
00725
00726