;
; jsimdcpu.asm - SIMD instruction support check
;
; Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
;
; Based on
; x86 SIMD extension for IJG JPEG library
; Copyright (C) 1999-2006, MIYASAKA Masaru.
; For conditions of distribution and use, see copyright notice in jsimdext.inc
;
; This file should be assembled with NASM (Netwide Assembler),
; can *not* be assembled with Microsoft's MASM or any compatible
; assembler (including Borland's Turbo Assembler).
; NASM is available from http://nasm.sourceforge.net/ or
; http://sourceforge.net/project/showfiles.php?group_id=6208
;
; [TAB8]

%include "jsimdext.inc"

; --------------------------------------------------------------------------
        SECTION SEG_TEXT
        BITS    32
;
; Check if the CPU supports SIMD instructions
;
; GLOBAL(unsigned int)
; jpeg_simd_cpu_support (void)
;

        align   16
        global  EXTN(jpeg_simd_cpu_support)

EXTN(jpeg_simd_cpu_support):
        push    ebx
;       push    ecx             ; need not be preserved
;       push    edx             ; need not be preserved
;       push    esi             ; unused
        push    edi

        xor     edi,edi                 ; simd support flag

        pushfd
        pop     eax
        mov     edx,eax
        xor     eax, 1<<21              ; flip ID bit in EFLAGS
        push    eax
        popfd
        pushfd
        pop     eax
        xor     eax,edx
        jz      short .return           ; CPUID is not supported

        ; Check for MMX instruction support
        xor     eax,eax
        cpuid
        test    eax,eax
        jz      short .return

        xor     eax,eax
        inc     eax
        cpuid
        mov     eax,edx                 ; eax = Standard feature flags

        test    eax, 1<<23              ; bit23:MMX
        jz      short .no_mmx
        or      edi, byte JSIMD_MMX
.no_mmx:
        test    eax, 1<<25              ; bit25:SSE
        jz      short .no_sse
        or      edi, byte JSIMD_SSE
.no_sse:
        test    eax, 1<<26              ; bit26:SSE2
        jz      short .no_sse2
        or      edi, byte JSIMD_SSE2
.no_sse2:

        ; Check for 3DNow! instruction support
        mov     eax, 0x80000000
        cpuid
        cmp     eax, 0x80000000
        jbe     short .return

        mov     eax, 0x80000001
        cpuid
        mov     eax,edx                 ; eax = Extended feature flags

        test    eax, 1<<31              ; bit31:3DNow!(vendor independent)
        jz      short .no_3dnow
        or      edi, byte JSIMD_3DNOW
.no_3dnow:

.return:
        mov     eax,edi

        pop     edi
;       pop     esi             ; unused
;       pop     edx             ; need not be preserved
;       pop     ecx             ; need not be preserved
        pop     ebx
        ret

; For some reason, the OS X linker does not honor the request to align the
; segment unless we do this.
        align   16
