annotate libmpeg2/cpu_state.c @ 18554:ebf5efd78cb6

metadata support
author michael
date Tue, 30 May 2006 23:23:28 +0000
parents 52838f825747
children 0783dd397f74
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
9857
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
1 /*
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
2 * cpu_state.c
10298
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
3 * Copyright (C) 2000-2003 Michel Lespinasse <walken@zoy.org>
9857
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
4 * Copyright (C) 1999-2000 Aaron Holtzman <aholtzma@ess.engr.uvic.ca>
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
5 *
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
6 * This file is part of mpeg2dec, a free MPEG-2 video stream decoder.
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
7 * See http://libmpeg2.sourceforge.net/ for updates.
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
8 *
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
9 * mpeg2dec is free software; you can redistribute it and/or modify
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
10 * it under the terms of the GNU General Public License as published by
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
11 * the Free Software Foundation; either version 2 of the License, or
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
12 * (at your option) any later version.
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
13 *
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
14 * mpeg2dec is distributed in the hope that it will be useful,
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
17 * GNU General Public License for more details.
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
18 *
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
19 * You should have received a copy of the GNU General Public License
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
20 * along with this program; if not, write to the Free Software
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
14732
1385ec491ffb Mark locally modified files as such to comply more closely with GPL 2a.
diego
parents: 13864
diff changeset
22 *
1385ec491ffb Mark locally modified files as such to comply more closely with GPL 2a.
diego
parents: 13864
diff changeset
23 * Modified for use with MPlayer, see libmpeg-0.4.0.diff for the exact changes.
1385ec491ffb Mark locally modified files as such to comply more closely with GPL 2a.
diego
parents: 13864
diff changeset
24 * detailed CVS changelog at http://www.mplayerhq.hu/cgi-bin/cvsweb.cgi/main/
1385ec491ffb Mark locally modified files as such to comply more closely with GPL 2a.
diego
parents: 13864
diff changeset
25 * $Id$
9857
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
26 */
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
27
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
28 #include "config.h"
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
29
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
30 #include <stdlib.h>
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
31 #include <inttypes.h>
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
32
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
33 #include "mpeg2.h"
12932
d0a8810e155c Importing libmpeg2 from mpeg2dec-0.4.0b
henry
parents: 10299
diff changeset
34 #include "attributes.h"
9857
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
35 #include "mpeg2_internal.h"
13864
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13798
diff changeset
36 #if defined(ARCH_X86) || defined(ARCH_X86_64)
9857
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
37 #include "mmx.h"
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
38 #endif
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
39
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
40 void (* mpeg2_cpu_state_save) (cpu_state_t * state) = NULL;
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
41 void (* mpeg2_cpu_state_restore) (cpu_state_t * state) = NULL;
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
42
13864
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13798
diff changeset
43 #if defined(ARCH_X86) || defined(ARCH_X86_64)
9857
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
44 static void state_restore_mmx (cpu_state_t * state)
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
45 {
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
46 emms ();
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
47 }
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
48 #endif
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
49
13798
1c514c78c7b4 compile fix on G3
pontscho
parents: 12932
diff changeset
50 #if defined( ARCH_PPC ) && defined( HAVE_ALTIVEC )
15483
52838f825747 set define for apple gcc altivec
nplourde
parents: 14732
diff changeset
51 #if defined( __APPLE_CC__ ) && defined( __APPLE_ALTIVEC__ ) /* apple */
52838f825747 set define for apple gcc altivec
nplourde
parents: 14732
diff changeset
52 #define LI(a,b) "li r" #a "," #b "\n\t"
52838f825747 set define for apple gcc altivec
nplourde
parents: 14732
diff changeset
53 #define STVX0(a,b,c) "stvx v" #a ",0,r" #c "\n\t"
52838f825747 set define for apple gcc altivec
nplourde
parents: 14732
diff changeset
54 #define STVX(a,b,c) "stvx v" #a ",r" #b ",r" #c "\n\t"
52838f825747 set define for apple gcc altivec
nplourde
parents: 14732
diff changeset
55 #define LVX0(a,b,c) "lvx v" #a ",0,r" #c "\n\t"
52838f825747 set define for apple gcc altivec
nplourde
parents: 14732
diff changeset
56 #define LVX(a,b,c) "lvx v" #a ",r" #b ",r" #c "\n\t"
52838f825747 set define for apple gcc altivec
nplourde
parents: 14732
diff changeset
57 #else /* gnu */
10298
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
58 #define LI(a,b) "li " #a "," #b "\n\t"
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
59 #define STVX0(a,b,c) "stvx " #a ",0," #c "\n\t"
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
60 #define STVX(a,b,c) "stvx " #a "," #b "," #c "\n\t"
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
61 #define LVX0(a,b,c) "lvx " #a ",0," #c "\n\t"
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
62 #define LVX(a,b,c) "lvx " #a "," #b "," #c "\n\t"
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
63 #endif
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
64
9857
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
65 static void state_save_altivec (cpu_state_t * state)
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
66 {
10298
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
67 asm (LI (9, 16)
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
68 STVX0 (20, 0, 3)
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
69 LI (11, 32)
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
70 STVX (21, 9, 3)
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
71 LI (9, 48)
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
72 STVX (22, 11, 3)
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
73 LI (11, 64)
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
74 STVX (23, 9, 3)
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
75 LI (9, 80)
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
76 STVX (24, 11, 3)
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
77 LI (11, 96)
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
78 STVX (25, 9, 3)
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
79 LI (9, 112)
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
80 STVX (26, 11, 3)
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
81 LI (11, 128)
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
82 STVX (27, 9, 3)
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
83 LI (9, 144)
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
84 STVX (28, 11, 3)
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
85 LI (11, 160)
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
86 STVX (29, 9, 3)
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
87 LI (9, 176)
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
88 STVX (30, 11, 3)
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
89 STVX (31, 9, 3));
9857
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
90 }
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
91
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
92 static void state_restore_altivec (cpu_state_t * state)
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
93 {
10298
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
94 asm (LI (9, 16)
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
95 LVX0 (20, 0, 3)
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
96 LI (11, 32)
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
97 LVX (21, 9, 3)
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
98 LI (9, 48)
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
99 LVX (22, 11, 3)
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
100 LI (11, 64)
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
101 LVX (23, 9, 3)
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
102 LI (9, 80)
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
103 LVX (24, 11, 3)
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
104 LI (11, 96)
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
105 LVX (25, 9, 3)
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
106 LI (9, 112)
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
107 LVX (26, 11, 3)
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
108 LI (11, 128)
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
109 LVX (27, 9, 3)
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
110 LI (9, 144)
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
111 LVX (28, 11, 3)
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
112 LI (11, 160)
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
113 LVX (29, 9, 3)
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
114 LI (9, 176)
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
115 LVX (30, 11, 3)
4053e9c22c88 apple and gnu style support at the same time (ok, choosen at compile time) -- now altivec works under osx too -- bug noted by Steven Schultz
alex
parents: 9857
diff changeset
116 LVX (31, 9, 3));
9857
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
117 }
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
118 #endif
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
119
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
120 void mpeg2_cpu_state_init (uint32_t accel)
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
121 {
13864
96259a2f2142 enable mmx support on x86_64 in libmpeg2
aurel
parents: 13798
diff changeset
122 #if defined(ARCH_X86) || defined(ARCH_X86_64)
9857
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
123 if (accel & MPEG2_ACCEL_X86_MMX) {
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
124 mpeg2_cpu_state_restore = state_restore_mmx;
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
125 }
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
126 #endif
10299
71ae59ea3c46 Fixed compilation on g3. Patch by Dan Christiansen <danchr@daimi.au.dk>
alex
parents: 10298
diff changeset
127 #if defined(ARCH_PPC) && defined(HAVE_ALTIVEC)
9857
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
128 if (accel & MPEG2_ACCEL_PPC_ALTIVEC) {
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
129 mpeg2_cpu_state_save = state_save_altivec;
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
130 mpeg2_cpu_state_restore = state_restore_altivec;
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
131 }
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
132 #endif
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
133 }