; ; jsimdcpu.asm - SIMD instruction support check ; ; Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB ; Copyright (C) 2016, D. R. Commander. ; ; Based on the 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) or Yasm.
%include"jsimdext.inc"
; --------------------------------------------------------------------------
SECTION SEG_TEXT
BITS 32 ; ; Check if the CPU supports SIMD instructions ; ; GLOBAL(unsigned int) ; jpeg_simd_cpu_support(void) ;
align 32
GLOBAL_FUNCTION(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 pushedi
xoredi, edi; simd support flag
pushfd popeax movedx, eax xoreax, 1<<21 ; flip ID bit in EFLAGS pusheax
popfd
pushfd popeax xoreax, edx jz near .return ; CPUID is not supported
; Check whether CPUID leaf 07H is supported ; (leaf 07H is used to check for AVX2 instruction support) xoreax, eax
cpuid
test eax, eax jz near .return cmpeax, 7 jlshort .no_avx2 ; Maximum leaf < 07H
; Check for AVX2 instruction support moveax, 7 xorecx, ecx
cpuid moveax, ebx
test eax, 1<<5 ; bit5:AVX2 jzshort .no_avx2
; Check for AVX2 O/S support moveax, 1 xorecx, ecx
cpuid
test ecx, 1<<27 jzshort .no_avx2 ; O/S does not support XSAVE
test ecx, 1<<28 jzshort .no_avx2 ; CPU does not support AVX2
xorecx, ecx
xgetbv andeax, 6 cmpeax, 6 ; O/S does not manage XMM/YMM state ; using XSAVE jnzshort .no_avx2
oredi, JSIMD_AVX2
.no_avx2:
; Check CPUID leaf 01H for MMX, SSE, and SSE2 support xoreax, eax inceax
cpuid moveax, edx; eax = Standard feature flags
; Check for MMX instruction support
test eax, 1<<23 ; bit23:MMX jzshort .no_mmx oredi, byte JSIMD_MMX
.no_mmx:
test eax, 1<<25 ; bit25:SSE jzshort .no_sse oredi, byte JSIMD_SSE
.no_sse:
test eax, 1<<26 ; bit26:SSE2 jzshort .no_sse2 oredi, byte JSIMD_SSE2
.no_sse2:
; Check for 3DNow! instruction support moveax, 0x80000000
cpuid cmpeax, 0x80000000
jbe short .return
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.