· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
PentiumMMX



PentiumÀÇ MMXÀÇ »ç¿ë



1.1. MMX¶õ?

  • MMX´Â MultiMedia eXtensionÀÇ ¾àÀÚ·Î ±× ¸ñÀûÀº ¹ü¿ë·¹Áö½ºÅÍÀÇ Å©±âº¸´Ù Å« Á¤¼ö¿¬»êÀ» º¸´Ù ºü¸£°Ô Çϱâ À§ÇÔÀÔ´Ï´Ù.
  • ÀÌ ¹®¼­¸¦ ÀÛ¼ºÇÏ´Â ÇöÀç½ÃÁ¡À» ±âÁØÀ¸·Î MM0 ~ 7±îÁöÀÇ Æ¯¼ö ¸íĪÀÌ MMX¿¡ »ç¿ëµÇ°í ÀÖÀ¸¸ç À̸§¸¸ ÀÌ·¸°Ô »ç¿ëµÉ»Ó »ç½Ç»ó ºÎµ¿¼Ò¼öÁ¡ ¿¬»ê¿ë ·¹Áö½ºÅ͸¦ »ç¿ëÇÏ°Ô µË´Ï´Ù. (ÀÌ·¯ÇÑ ÀÌÀ¯·Î ¾Æ·¡ ¼³¸íÇÏÁö¸¸ EMMSÀÇ ¸í·É¿¡ ´ëÇؼ­ ÇÊ¿äÇÑ ÀÌÀ¯¸¦ ÀÌÇØÇϼ¼¿ä!)
  • MMXÀÇ °¡Àå ´ëÇ¥ÀûÀÎ ±â´ÉÀ¸·Î´Â 8¹ÙÀÌÆ® ´ÜÀ§·Î Data¸¦ Àü¼ÛÇÏ´Â °ÍÀε¥ ÀÌ°Í ¸»°íµµ ±âº» »ê¼ú¿¬»ê ¹× ³í¸®¿¬»êÀ» ÇÒ¼ö ÀÖ°Ô µÇ¾î ÀÖ½À´Ï´Ù.
  • MMX´Â ¹ü¿ë·¹Áö½ºÅÍ·Î ÇÏ´Â ±â´É°ú ºñ±³ÇßÀ» ¶§ ´Ù¸¥ Á¡ÀÌ Packed mode¶ó´Â °ÍÀÌ Àִµ¥ ¾ÆÁ÷ ÀÌ°Í¿¡ ´ëÇÑ Çʿ伺À» Á¦°¡ ¸ø´À³¢°í ÀÖ´Â °ü°è·Î ³ªÁß¿¡ Çʿ伺ÀÌ »ý±â¸é Á¤¸®Á» Çغ¸°Ú½À´Ï´Ù.

1.2. MMXÀÇ Áö¿ø¿©ºÎ ÆÇ´Ü

  • ¾Æ·¡¿Í °°ÀÌ cpuid¸í·ÉÀ» ÅëÇÏ¿© ÇØ´ç ±â´ÉÀÇ Áö¿ø ¿©ºÎ¸¦ È®ÀÎ ÇÒ¼ö ÀÖ½À´Ï´Ù. À̹ۿ¡ 3D-NOW°°Àº °æ¿ìµµ ºñ½ÁÇÑ ¹æ¹ýÀ¸·Î Áö¿ø¿©ºÎ¸¦ ¾Ë¼ö ÀÖ°Ú½À´Ï´Ù.

int MZ_IsMMX(void)
{
 static int s_Return = (-1);^I
 if(s_Return == (-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"(s_Return)
   :
   : "ebx"
  );
 }
 return(s_Return);
}


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. ÇÁ·Î±×·¥¿¡ Àû¿ëÇغ¸±â


1.4.1. Inline assembly¿¡ ¾î¶»°Ô Àû¿ëÇÒ °ÍÀΰ¡?

  • Clobber¿¡ ¾î¶»°Ô µÎ¾î¾ß »ç¿ëÇÒ¼ö ÀÖÀ»±î¿ä? ¾Æ·¡ÀÇ °£´ÜÇÑ ¿¹Á¦¸¦ º¸½Ã´Ù½ÃÇÇ "X"¶ó´Â °ÍÀÌ ÇöÀç·Î¼­´Â Àû´çÇÑµí ½Í±º¿ä. ÇÊÀÚ´Â »ç½Ç»ó ÀÌ·¸°Ô ¾²´Â°ÍÀÌ º°·Î ¸¶À½¿¡ ³»Å°Áö ¸øÇÏ¿© ±×³É *.s ·Î InlineÀÌ ¾Æ´Ñ »óÅ·Π´ëºÎºÐ »ç¿ëÇϱâ´Â ÇÏÁö¸¸ °¡²ûÀº InlineÀ» ¾Æ·¡¿Í °°ÀÌ »ç¿ëÇϱâ´Â ÇÕ´Ï´Ù. Ȥ½Ã ´õ Àû´çÇÑ Clobber¸¦ ¾Ë°í °è½Ã´Ù¸é ÁÖÀú¾øÀÌ ¾Ë·ÁÁֽøé ÁÁ°Ú±º¿ä.
  • "X"´Â ¾î¶°ÇÑ ÀÎÀÚ¶óµµ Çã¿ëÇÏ´Â °ÍÀ̶ó´Â Á¡À» ³ëÆĽɿ¡ ¼³¸í µå¸®¸ç »ç½Ç»ó ¿Ø¸¸ÇÑ°Å´Â ¸ð¸£°Ú´Ù ½ÍÀ¸¸é ÀÌ°ÍÀ» ¾²¸é Àß µÇÁÒ. (¾ÈµÇ¸é °ñÄ¡¾ÆÇ°Š¾Æ½ÃÁÒ?)

unsigned long long MZ_NopMMX(unsigned long long s_Value)
{
 unsigned long long s_Return;
 __asm__ volatile(
  "\n\t"
  "movd %1, %%mm0\n\t"
  "movd %%mm0, %0\n\t"
  "emms\n\t"
  "\n\t"
  : "=X"(s_Return)
  : "X"(s_Value)
 );
 return(s_Return);
}


1.5. ¹®¼­¸¦ ¸¶Ä¡¸ç

  • ÀÌ ¹®¼­¸¦ ÀÛ¼ºÇϱâ À§ÇØ Intel pentium manualÀ» ÂüÁ¶ÇÏ¿´½À´Ï´Ù. ÀÚ¼¼ÇÑ°ÍÀº IntelÀÇ È¨ÆäÀÌÁö¸¦ ¹æ¹®Çϼ¼¿ä.
  • º» ¹®¼­ÀÇ ÃÖ±Ù ¹öÁ¯Àº [http]http://minzkn.pe.ky¿¡¼­ º¸½Ç¼ö ÀÖ½À´Ï´Ù.


ID
Password
Join
You attempt things that you do not even plan because of your extreme stupidity.


sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2004-12-04 20:44:28
Processing time 0.0061 sec