annotate Input/mpg123/getcpuflags.s @ 28:a4513169b27e trunk

[svn] Possible crash fix.
author nenolod
date Tue, 25 Oct 2005 21:46:47 -0700
parents cb178e5ad177
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
1 # KIMURA Takuhiro <kim@comtec.co.jp>
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
2 # Copyright 2002 Haavard Kvaalen <havardk@xmms.org>
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
3
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
4 # Get feature flags with cpuid
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
5 # void mpg123_getcpuid(unsigned int *fflags, unsigned int *efflags)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
6
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
7 .text
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
8 .align 4
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
9 .globl mpg123_getcpuflags
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
10 .type mpg123_getcpuflags,@function
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
11 mpg123_getcpuflags:
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
12 pushl %ebp
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
13 movl %esp,%ebp
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
14 pushl %edx
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
15 pushl %ecx
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
16 pushl %ebx
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
17 pushfl # First test if cpuid is supported
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
18 pushfl # Check if the ID flag (bit 21 of eflags) sticks
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
19 popl %eax # Get eflags
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
20 movl %eax,%ebx
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
21 xorl $0x200000,%eax # Flip bit 21
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
22 pushl %eax
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
23 popfl # Get modified eflags to flag register
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
24 pushfl
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
25 popl %eax # Get eflags again
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
26 popfl # Restore original eflags
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
27 xorl %ebx,%eax
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
28 je nocpuid
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
29 xorl %eax,%eax
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
30 cpuid # Check if eax = 1 is supported
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
31 xorl %edx,%edx
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
32 cmp $1,%eax
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
33 jl noflags
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
34 movl $1,%eax # Get feature flags
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
35 cpuid
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
36 noflags:
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
37 movl 8(%ebp),%eax
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
38 movl %edx,(%eax)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
39 movl $0x80000000,%eax # Check support for extended level cpuid
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
40 cpuid
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
41 xorl %edx,%edx
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
42 cmp $0x80000001,%eax # Get extended feature flags
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
43 jl noeflags
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
44 movl $0x80000001,%eax
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
45 cpuid
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
46 noeflags:
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
47 movl 12(%ebp),%eax
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
48 movl %edx,(%eax)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
49 jmp done
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
50 nocpuid:
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
51 xorl %edx,%edx
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
52 movl 8(%ebp),%eax
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
53 movl %edx,(%eax)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
54 movl 12(%ebp),%eax
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
55 movl %edx,(%eax)
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
56 done:
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
57 popl %ebx
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
58 popl %ecx
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
59 popl %edx
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
60 leave
cb178e5ad177 [svn] Import audacious source.
nenolod
parents:
diff changeset
61 ret