Index: src/libFLAC/ia32/cpu_asm.nasm |
diff --git a/src/libFLAC/ia32/cpu_asm.nasm b/src/libFLAC/ia32/cpu_asm.nasm |
new file mode 100644 |
index 0000000000000000000000000000000000000000..036e865444708212ac7292c1ba5fe5c52b92d6a8 |
--- /dev/null |
+++ b/src/libFLAC/ia32/cpu_asm.nasm |
@@ -0,0 +1,98 @@ |
+; vim:filetype=nasm ts=8 |
+ |
+; libFLAC - Free Lossless Audio Codec library |
+; Copyright (C) 2001-2009 Josh Coalson |
+; Copyright (C) 2011-2014 Xiph.Org Foundation |
+; |
+; Redistribution and use in source and binary forms, with or without |
+; modification, are permitted provided that the following conditions |
+; are met: |
+; |
+; - Redistributions of source code must retain the above copyright |
+; notice, this list of conditions and the following disclaimer. |
+; |
+; - Redistributions in binary form must reproduce the above copyright |
+; notice, this list of conditions and the following disclaimer in the |
+; documentation and/or other materials provided with the distribution. |
+; |
+; - Neither the name of the Xiph.org Foundation nor the names of its |
+; contributors may be used to endorse or promote products derived from |
+; this software without specific prior written permission. |
+; |
+; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
+; ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
+; LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
+; A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR |
+; CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
+; EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
+; PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR |
+; PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF |
+; LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING |
+; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
+; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
+ |
+%include "nasm.h" |
+ |
+ data_section |
+ |
+cglobal FLAC__cpu_have_cpuid_asm_ia32 |
+cglobal FLAC__cpu_info_asm_ia32 |
+ |
+ code_section |
+ |
+; ********************************************************************** |
+; |
+; FLAC__uint32 FLAC__cpu_have_cpuid_asm_ia32() |
+; |
+ |
+cident FLAC__cpu_have_cpuid_asm_ia32 |
+ pushfd |
+ pop eax |
+ mov edx, eax |
+ xor eax, 0x00200000 |
+ push eax |
+ popfd |
+ pushfd |
+ pop eax |
+ xor eax, edx |
+ and eax, 0x00200000 |
+ shr eax, 0x15 |
+ push edx |
+ popfd |
+ ret |
+ |
+; ********************************************************************** |
+; |
+; void FLAC__cpu_info_asm_ia32(FLAC__uint32 *flags_edx, FLAC__uint32 *flags_ecx) |
+; |
+ |
+cident FLAC__cpu_info_asm_ia32 |
+ ;[esp + 8] == flags_edx |
+ ;[esp + 12] == flags_ecx |
+ |
+ push ebx |
+ call FLAC__cpu_have_cpuid_asm_ia32 |
+ test eax, eax |
+ jz .no_cpuid |
+ mov eax, 0 |
+ cpuid |
+ cmp eax, 1 |
+ jb .no_cpuid |
+ mov eax, 1 |
+ cpuid |
+ mov ebx, [esp + 8] |
+ mov [ebx], edx |
+ mov ebx, [esp + 12] |
+ mov [ebx], ecx |
+ jmp .end |
+.no_cpuid: |
+ xor eax, eax |
+ mov ebx, [esp + 8] |
+ mov [ebx], eax |
+ mov ebx, [esp + 12] |
+ mov [ebx], eax |
+.end: |
+ pop ebx |
+ ret |
+ |
+; end |