Independent JPEG Group's JPEG software release 6b
  with x86 SIMD extension for IJG JPEG library version 1.02
    == INTERNAL ==
-----------------------------------------------------------

Υե

  ΥեǤϡSIMD  libjpeg 饤֥ΡSIMD ĥʬξܺ٤
  ⤷ޤSIMD ĥʬФƲ餫μä䡢ɸǤ
  бƤʤץåȥեбʤɤϡɤ
  

    եեޥåȡƤӽФ(ABI)λ
    OS  SIMD ݡȥå (jsimdgcc.c / jsimddjg.asm / jsimdw32.asm)
    ֥ե jsimdcfg.inc κ (makecfg.c)
    SIMD ̿μ¹ԻSIMD ư⡼ɾ
    Τۤܥޥ
       RGB_RED / RGB_GREEN / RGB_BLUE / RGB_PIXELSIZE
       RGBX_FILLER_0XFF
       JFDCT_INT_QUANTIZE_WITH_DIVISION
       UPSAMPLE_H1V2_SUPPORTED


եեޥåȡƤӽФ(ABI)λ

  ֥ǽ񤫤줿ɤ򡢣øʤɤιǽ񤫤줿
  ȥ󥯤ˤϡ֥ȥեΥեޥåȤפ뤳ȡ
  ӡƤӽФʤɤΥХʥꥳɤε(ABI)פ뤳Ȥ
  ɬפǤΥեȤǤϡλ򡢥֥ nasm Ϳ륪
  ǻꤷƤޤ

  nasm -fwin32 -DWIN32 ...

    Win32  coff եޥåȡMicrosoft Visual C++  MinGWCygWin
    ʤɡWin32 ѥʬ

  nasm -fobj -DOBJ32 ...

    Win32  obj եޥåȡ MS-DOS ǻȤƤ obj 
    (MSOMF) 32bit ˳ĥΡBorland C++ Complier (Win32) ʤɡ

  nasm -felf -DELF ...

    Ƽ UNIX ǹѤƤ ELF եޥåȡlinux  xBSD
    եߥʤɡߤ UNIX ʬ

  nasm -faoutb -DAOUT ...

     xBSD եߥǻȤƤ a.out եޥåȡ

  nasm -fmacho -DMACHO ...

    Darwin (MacOS X) ʤɤǺѤƤ Mach-O եޥåȡ
    -fmacho ץ nasm 0.98.40 ʹߤǥݡȤޤ

  nasm -fcoff -DDJGPP ...

    MS-DOS  DJGPP ѥǻȤ coff եޥåȡ

  Τ-f ץ nasm ᤹եեޥåȤλҤǡ
  -D ץ(ޥ) jsimdext.inc ǲᤵХʥ구
  (ABI)λҤǤjsimdext.inc Ǥϡ-D ץǤΥޥ˽äơ
  ()䳰̾̾ԤʤäƤޤ
  ܤ jsimdext.inc 

  ELF   a.out  ξ硢-DPIC ɲäƻꤹȥɤ
  Position Independent Code (Ω) ˤʤޤ-DPIC 
  jsimdext.inc ǲᤵ졢ɤ PIC ˤ뤿Υޥޤ
  Mach-O ξϡɤϾ PIC Ǥɬפ뤿ᡢ-DPIC 
  ꤷʤƤ PIC Υɤޤ

  ץåȥե˱ơ椫ŬڤʤΤ򤹤ɬפ
  ޤƱ makefile Ǥϡ餫ŬڤʤΤꤵƤޤ
  configure ץȤǤϡconfig.guess ϤۥȾ򸵤
  Ƥޤ


OS  SIMD ݡȥå (jsimdgcc.c / jsimddjg.asm / jsimdw32.asm)

  SIMD ̿¹Ԥˤϡ CPU ΥݡȥåǤϤʤ
  OS ΥݡȥåɬפǤä SSE/SSE2 ˤĤƤϡOS ¦
  SSE/SSE2 ̿¹ԤǤ褦˻CPUꤹɬפꡢ
  ԤʤäƤʤ OS ǤϡOS 󥰥륿ޥ˴ؤ餺
  SSE/SSE2 ϼ¹ԤǤޤ󡣤ˡޤΤƤޤ󤬡CPU 
  ¢줿 FPU (ͱ黻ץå) Ѥʤ(ߥ졼Ȥ)
  ˤʤäƤȡMMX  3DNow! ޤ᤹٤Ƥ SIMD ̿¹ԤǤ
  ޤפˡSIMD ̿¹ԤǤ뤫ɤĴ٤ˤϡCPUID 
  ե饰Ĵ٤ǤԽʬȤȤǤ

  SIMD ̿ OS ݡȥåȤäƤ⡢ݸ⡼ɤưƤ
  ץξ硢CPU ե饰ξ֤ľܥ桼ץफ
  ɤߤȤ뤳ȤǤʤᡢSIMD ̿˼¹ԤƤߤ̵̿㳰
  ȯ뤫ɤΤȤܿΰŪˡΤ餶
  ʤΤǤ

   SIMD ̿ OS ݡȥåäƤΤjsimdgcc.c /
  jsimddjg.asm / jsimdw32.asm ΣĤΥեǤ줾졢
  UNIX/gccѡDJGPPѡWin32ѤǤjsimdgcc.c Ǥϡ㳰ȯ
  signal() ؿΥʥϥɥޤƤޤɤΰ gcc 
  饤󥢥֥ȤäƤ뤿ᡢgcc ѤǤgcc ʳǤ
  ѥϤǤޤξ SIMD ̿Υݡȥå
  Ԥʤޤjsimddjg.asm  DPMI 㳰ľѤ
  ˡǡjsimdw32.asm  Win32 㳰ľѤˡǤ

  ץåȥե˱ơΣ椫ŬڤʤΤ򤹤ɬפ
  ޤƱ makefile Ǥϡ餫ŬڤʤΤꤵƤޤ
  configure ץȤǤϡconfig.guess ϤۥȾ򸵤
  Ƥޤ

  ΣΤɤȤŬ礷ʤץåȥեξϡʥå
  ؿɬפޤǤ OS Ƥ SIMD ̿򥵥ݡ
  Ƥ OS Ǥ뤳Ȥ狼äƤϡ OS ݡȥå
  ά뤳ȤǽǤʲΤ褦ʶδؿΤߤΥե
  äƾ嵭ΣĤΥե˻Ѥ뤫⤷ jcomapi.c 
  Ѥ jpeg_simd_os_support θƤӽФХѥ褦ˤУϣ
  Ǥ

    GLOBAL(unsigned int)
    jpeg_simd_os_support (unsigned int simd)
    {
      return simd;
    }


֥ե jsimdcfg.inc κ (makecfg.c)

  եȤξ硢֥Υ椫øΥإåե
  ˤ󡢤ȤСץץåޥͤ乽¤Τˤѿ
  եåȤʤɡΤɬפޤmakecfg.c ϡJPEG 饤֥
  ѥΩäƥѥ롦󥯡¹Ԥ졢֥¦
  ɤɬפȤʤ򥢥֥ե jsimdcfg.inc
  ȤƽϤƯ򤷤Ƥޤ

  Ȥơmakecfg.c  JPEG 饤֥ΥɤƱѥ
  ץǥѥ뤵ɬפޤäˡ¤Τβ(
  ʤ) JPEG 饤֥ΤΤΤȰۤʤäƤޤȡJPEG 饤֥꤬
  å夷ޤ


SIMD ̿μ¹ԻSIMD ư⡼ɾ

   SIMD ĥ JPEG 饤֥Ǥϡץμ¹Ի SIMD
  ̿Ѥʤ褦ˤꡢƽʳǤɤ SIMD ̿Ѥư
  ΤİǤȤߤѰդƤޤ

  jpeg_simd_mask() Ȥȡ SIMD ̿¹Ի˻Ѥʤ褦
  Ǥޤ

    GLOBAL(unsigned)
    jpeg_simd_mask (j_common_ptr cinfo, unsigned remove, unsigned add);

  δؿϡ SIMD ̿᥻åȤбޥӥåȤꡦѹޤ
  remove, add ͤϡ SIMD ̿бӥå (JSIMD_MMX,
  JSIMD_3DNOW, JSIMD_SSE, JSIMD_SSE2)  OR 黻Ȥ߹碌ΤǤ

  "ޥӥå" ϡ¤ cinfo ݻͤǡνͤ 0 Ǥ
  ƤδؿϡΥޥӥåȤʲΤ褦˹()ޤ

    (ޥӥå) = ((Ťޥӥå) & ~remove) | add;

  ơΥޥӥåȤ 1 ˤ줿 SIMD ̿᥻åȤϡȤ CPU/OS
  бƤƤѤޤ󡣤δؿϡδؿƤľޤ
  ƤޥӥåȤ֤ޤʤΤǡremove, add  0 Ϳ
  ؿƤ٤СꤵƤޥӥåȤǤޤδؿ
  ϡcjpeg.c, djpeg.c, jcomapi.c ˤޤ

  ΥޥӥåȤͤϡºݤˤϹ¤ cinfo  output_gamma ⤷
  input_gamma ѿβ̥ӥåȤ¸Ƥޤ(ܤ jcomapi.c 
  )ϡ¤ cinfo ˿ѿɲäƤޤȥХʥߴ
  ƤޤǡǤ̤ѤȻפ嵭ѿִּڤ
  Ƥޤ

  ޤʲδؿȤȡ饤֥γƽʳǤɤ SIMD ̿
  ѤưΤİǤޤ

    jpeg_simd_color_converter();   -> Ѵ(RGB->YCbCr)
    jpeg_simd_downsampler();       -> 󥵥ץ
    jpeg_simd_forward_dct();       -> DCTѴ
    jpeg_simd_color_deconverter(); -> Ѵ(YCbCr->RGB)
    jpeg_simd_upsampler();         -> åץץ
    jpeg_simd_inverse_dct();       -> DCTѴ

  ֤ͤϡưDCTѴ/Ѵ ξ JSIMD_3DNOW  JSIMD_SSE
  ʳξ JSIMD_MMX  JSIMD_SSE2 ֤ޤޤ0 ֤ä
   SIMD ̿᥻åȤϻȤ줺Υ롼󤬻Ȥ뤳Ȥ
  ̣ޤ

  δؿξܤȤˤĤƤϡcjpeg.c, djpeg.c () 
  

  ʤ SIMD ޥؿSIMD ⡼ɾؿ ɬפʤϡ
  ʲΥޥ jconfig.h ʤɤ˴ޤ뤳ȤǡϤǤɥ
  Ǥޤ

    #define JSIMD_MASKFUNC_NOT_SUPPORTED
    #define JSIMD_MODEINFO_NOT_SUPPORTED


Τۤܥޥ

   RGB_RED / RGB_GREEN / RGB_BLUE / RGB_PIXELSIZE

    ϡjmorecfg.h ˤܥޥǡ갷 RGB 
    ǡ RGB ¤ӽԥ륵ꤷޤ SIMD ĥ
    ǤѹǤ褦ˤƤޤRGB_PIXELSIZE  3  4 ξΤߡ
    SIMD ǤοѴ롼ͭˤʤޤʳͤˤϡ
    SIMD ǤοѴ롼ϼưŪ̵ơοѴ
    롼󤬻Ȥޤ(®ˤʤޤ)

    ͤѹ뤳ȤǡϤ 32bit/pixel ˤꡢBMP 
    碌ƥԥ BGR ˤꤹ뤳Ȥǽˤʤޤʤ
    ̷ͤ⤹ͤ #define ϥѥǤʤ褦ˤ
    ޤΤǡդƤ

   RGBX_FILLER_0XFF

     jmorecfg.h ˤܥޥǤǥեȤǤ #undef
    ˤʤäƤޤ RGB_PIXELSIZE  4 ˤ硢ĤΥԥ
    ǡ(RGBΣХȤ¾);פʣХȤ¸ߤ뤳Ȥˤʤޤ
    ǥեȤǤϡ;פʣХ(filler byte)ˤ 0x00 
    Ϥޤ RGBX_FILLER_0XFF  #define  0x00 
     0xFF  filler byte ƽϤޤ

    Ϥ 32bit/pixel ˤǡfiller byte 򥢥եͥ
    ȤưʤɤϡRGBX_FILLER_0XFF  #define Թ礬ɤ
    礬Ǥ礦

    ʤꥸʥǤ JPEG 饤֥Ǥϡ filler byte ˤϲ
    ͤ줺ͤΤޤݻޤǤSIMD ǤοѴ
    롼Ǥϸͤݻˤϼ֤뤿ᡢ 0x00  0xFF
    ƽϤ褦˻ѹԤʤޤ

   JFDCT_INT_QUANTIZE_WITH_DIVISION

    ϡjmorecfg.h ˤܥޥǡ̽Ǥ DCT
    ̻ҲˡѹޤǥեȤǤ #undef ǡ#undef ξ֤
    ®ʤΤǡäͳΤʤ¤ #undef ǻѤ뤳Ȥᤤ
    ޤ

    DCT̻ҲȤΤϡüŪ˸вǡФưİ
    껻()¹Ԥ뤳ȤǤǤϸŪ˹®
    ԲǽʤΤǡ SIMD ĥǤǤ軻Ѥ
    ̻Ҳ¹ԤƤޤ

    軻ѤˡǤ⡢DCT/®DCTȤäǡ
    ġ0100 Τ٤Ƥΰ̥ƥǥꥸʥǤƱ̤
    ФȤǧƤޤǤ̲ "ƥ" λɸ
    ƥ 0 ̻Ҳơ֥ľͿư̤
    ʤɤϡ黻οϰϤδطǡꥸʥǤȤϰۤʤ̤Ф뤳
    Ǥޤ󡣤äüʶﲼǤ⥪ꥸʥǤȤθߴ٤
    ⤯ʤʤФʤʤʤɤˤϡιܤ #define ˤƻѤ
    㴳®٤ޤɤꡢİĽԤä̻Ҳ
    Ԥޤ

    äȤ⡢ƥ 0 ǰ̤Ƥ⡢ۤȤɼѤ
    ʤޤΤǡ軻ѤˡǤ⡢ˤʤ뤳ȤϤʤ
    פޤ

   UPSAMPLE_H1V2_SUPPORTED

    ϡjmorecfg.h ˤ롢ꥸʥǤ IJG JPEG library ˤ
    ¸ߤʤܥޥǤϡY:1x2 Cb:1x1 Cr:1x1 (4:2:2) 
    ֥ץ JPEG ե򡢥ꥸʥǤ IJG JPEG
    library ®ŸǤ褦ˤΤǤ

    ֥ץ Y:1x2 Cb:1x1 Cr:1x1 (4:2:2)  JPEG եϡ
    ꥸʥ IJG JPEG Library ǤŸǤޤΥ֥ץ
    б륢åץץ󥰡롼󤬴ñʤΤѰդ
    ʤᡢŸ®٤٤ޤζܤϤäꤷƤãǲ
    ʤɤξϥ㥮ΩäƤޤȤޤιܤͭ
    뤳ȤǡΤ褦ʥ֥ץ Y:1x2 Cb:1x1 Cr:1x1 
    JPEG ե®ˡޤ㥮Ωʤ褦˹Ÿ
    Ǥ褦ˤޤ

    Ρ֥ץ Y:1x2 Cb:1x1 Cr:1x1  JPEG եϡޤ
    ŪʤΤǤϤޤ󤬡ǥ륫ʤɤϤ뤳Ȥ¿
    ֥ץ Y:2x1 Cb:1x1 Cr:1x1 (4:2:2)  JPEG եФ
    JPEG 쥹ž׽Ԥʤȡ Y:1x2 Cb:1x1 Cr:1x1  JPEG
    եˤʤޤǥ륫ǡĤˤơʽİ֤ǡ˻
    JPEG 쥹žפʸľʤɤȤȤϡ
    褯뤳ȤȻפޤǤΤ褦ʡJPEG 쥹žפ줿
    JPEG ե򥪥ꥸʥ IJG JPEG Library Ÿȡ嵭ͳ顢
    JPEG եŸƤեȤǲž٤Ʋ
    äƤޤޤιܤͭˤ뤳ȤǡեȤǲž
    ȤۤƱƥǲŸ뤳Ȥǽˤʤޤ

    ιܤϡäͳΤʤ¤ꡢ#define ξ֤ˤƤȤ
    ޤꥸʥ IJG JPEG Library ȴƱη̤ɬפ
    Τ #undef ˤƥѥ뤷Ƥ



[EOF]
