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 |