int mz_is_support_mmx(void)
{
static int sg_result = (-1);
if(sg_result == (-1)) {
__asm__ __volatile__(
"\n\t"
"movl $1, %%eax\n\t"
"cpuid\n\t"
"xorl %%eax, %%eax\n\t"
"testl $0x800000, %%edx\n\t"
"jz L_Return\n\t"
"incl %%eax\n\t"
"L_Return:\n\t"
"movl %%eax, %0\n\t"
"\n\t"
: "=m"(sg_result)
:
: "ebx"
);
}
return(sg_result);
}
| 기능 | 값의 순환이 고려될 때 | 부호가 고려될 때 | 부호가 고려되지 않을 때 |
| 산술덧셈 | PADDB, PADDW, PADDD | PADDSB, PADDSW | PADDUB, PADDUW |
| 산술뺄셈 | PSUBB, PSUBW, PSUBD | PSUBSB, PSUBSW | PSUBUB, PSUBUW |
| 산술곱셈 | PMULL, PMULH | ||
| 산술곱셈자리올림 | PMADD | ||
| 비교 | PCMPEQB, PCMPEQW, PCMPEQD | ||
| PCMPGTPB, PCMPGTPW, PCMPGTPD | |||
| 변환 | PUNPCKHBW | PACKSSWB | PACKUSWB |
| PUNPCKHWD | PACKSSDW | ||
| PUNPCKHDQ | |||
| PUNPCKLBW | |||
| PUNPCKLWD | |||
| PUNPCKLDQ | |||
| 논리연산 | 묶음의 단위 | Quad단위 | |
| PAND | |||
| PANDN | |||
| POR | |||
| PXOR | |||
| PSLLQ | |||
| PSRLQ | |||
| 전송 | Double word 전송 | Quad word 전송 | |
| MOVD | MOVQ | ||
| MMX 상태를 비움 | EMMS | ||