| 검색 | ?

MMX (MultiMedia eXtention)

  • 작성자
    조재혁(Mminzkn@minzkn.com)

  • 고친과정
    2003년 10월 3일 : 처음씀 (kldp위키에 작성)
    2008년 12월 16일 : 글 정리 및 옮김

1.1. MMX란?

  • MMX는 MultiMedia eXtention의 약자로 그 목적은 범용레지스터의 크기보다 큰 정수연산을 보다 빠르게 하기 위함입니다.
  • 이 문서를 작성하는 현재시점을 기준으로 MM0 ~ 7까지의 특수 명칭이 MMX에 사용되고 있으며 이름만 이렇게 사용될뿐 사실상 부동소수점 연산용 레지스터를 사용하게 됩니다. (이러한 이유로 아래 설명하지만 EMMS의 명령에 대해서 필요한 이유를 이해하세요!)
  • MMX의 가장 대표적인 기능으로는 8바이트 단위로 Data를 전송하는 것인데 이것 말고도 기본 산술연산 및 논리연산을 할수 있게 되어 있습니다.
  • MMX는 범용레지스터로 하는 기능과 비교했을 때 다른 점이 Packed mode라는 것이 있는데 아직 이것에 대한 필요성을 제가 못느끼고 있는 관계로 나중에 필요성이 생기면 정리좀 해보겠습니다.

1.2. MMX의 지원여부 판단

  • 아래와 같이 cpuid명령을 통하여 해당 기능의 지원 여부를 확인 할수 있습니다. 이밖에 3D-NOW같은 경우도 비슷한 방법으로 지원여부를 알수 있겠습니다.
    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);
    }
    

1.3. MMX 명령어 요약표

  • 특별한 설명이 없더라도 아래의 요약표를 보시면 어셈블리 개발자분들이라면 그리 어렵지 않게 접근하실수 있을겁니다.
  • EMMS에 대해 간단히 추가설명하자면 부동소수점 연산을 하기 위해서 상태를 지울 필요가 있는데 그런 경우에 적절히 삽입하여 사용하여야 합니다. (즉, MMX명령을 사용하게 되면 EMMS명령은 뒤따라야 골치아픈 오동작 계산을 방지할수 있습니다.)
    기능 값의 순환이 고려될 때 부호가 고려될 때 부호가 고려되지 않을 때
    산술덧셈 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

1.4. 문서를 마치며

  • 이 문서를 작성하기 위해 Intel pentium manual을 참조하였습니다. 자세한것은 Intel의 홈페이지를 방문하세요.


Copyright ⓒ MINZKN.COM
All Rights Reserved.