update copyright to 2004
[platform/upstream/flac.git] / src / libFLAC / ia32 / cpu_asm.nasm
1 ;  libFLAC - Free Lossless Audio Codec library
2 ;  Copyright (C) 2001,2002,2003,2004  Josh Coalson
3 ;
4 ;  Redistribution and use in source and binary forms, with or without
5 ;  modification, are permitted provided that the following conditions
6 ;  are met:
7 ;
8 ;  - Redistributions of source code must retain the above copyright
9 ;  notice, this list of conditions and the following disclaimer.
10 ;
11 ;  - Redistributions in binary form must reproduce the above copyright
12 ;  notice, this list of conditions and the following disclaimer in the
13 ;  documentation and/or other materials provided with the distribution.
14 ;
15 ;  - Neither the name of the Xiph.org Foundation nor the names of its
16 ;  contributors may be used to endorse or promote products derived from
17 ;  this software without specific prior written permission.
18 ;
19 ;  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 ;  ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 ;  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22 ;  A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
23 ;  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24 ;  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25 ;  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
26 ;  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
27 ;  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
28 ;  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29 ;  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
31 %include "nasm.h"
32
33         data_section
34
35 cglobal FLAC__cpu_info_asm_ia32
36 cglobal FLAC__cpu_info_extended_amd_asm_ia32
37 cglobal FLAC__cpu_info_sse_test_asm_ia32
38
39         code_section
40
41 ; **********************************************************************
42 ;
43
44 have_cpuid:
45         pushfd
46         pop     eax
47         mov     edx, eax
48         xor     eax, 0x00200000
49         push    eax
50         popfd
51         pushfd
52         pop     eax
53         cmp     eax, edx
54         jz      .no_cpuid
55         mov     eax, 1
56         jmp     .end
57 .no_cpuid:
58         xor     eax, eax
59 .end:
60         ret
61
62 cident FLAC__cpu_info_asm_ia32
63         push    ebx
64         call    have_cpuid
65         test    eax, eax
66         jz      .no_cpuid
67         mov     eax, 1
68         cpuid
69         mov     eax, edx
70         jmp     .end
71 .no_cpuid:
72         xor     eax, eax
73 .end
74         pop     ebx
75         ret
76
77 cident FLAC__cpu_info_extended_amd_asm_ia32
78         push    ebx
79         call    have_cpuid
80         test    eax, eax
81         jz      .no_cpuid
82         mov     eax, 0x80000000
83         cpuid
84         cmp     eax, 0x80000001
85         jb      .no_cpuid
86         mov     eax, 0x80000001
87         cpuid
88         mov     eax, edx
89         jmp     .end
90 .no_cpuid
91         xor     eax, eax
92 .end
93         pop     ebx
94         ret
95
96 cident FLAC__cpu_info_sse_test_asm_ia32
97         xorps   xmm0, xmm0
98         pop     ebx
99
100 end