· 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
Many pages make a thick book.


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.0063 sec