annotate libmpeg2/cpu_state.c @ 10876:f50ba41128ac

New file
author nauj27
date Tue, 16 Sep 2003 16:27:37 +0000
parents 71ae59ea3c46
children d0a8810e155c
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
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
22 */
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
23
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
24 #include "config.h"
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
25
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
26 #include <stdlib.h>
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
27 #include <inttypes.h>
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
28
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
29 #include "mpeg2.h"
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
30 #include "mpeg2_internal.h"
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
31 #include "attributes.h"
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
32 #ifdef ARCH_X86
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
33 #include "mmx.h"
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
34 #endif
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
35
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
36 void (* mpeg2_cpu_state_save) (cpu_state_t * state) = NULL;
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
37 void (* mpeg2_cpu_state_restore) (cpu_state_t * state) = NULL;
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
38
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
39 #ifdef ARCH_X86
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
40 static void state_restore_mmx (cpu_state_t * state)
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
41 {
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
42 emms ();
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
43 }
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
44 #endif
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
45
10299
71ae59ea3c46 Fixed compilation on g3. Patch by Dan Christiansen <danchr@daimi.au.dk>
alex
parents: 10298
diff changeset
46 #if defined(ARCH_PPC) && defined(HAVE_ALTIVEC)
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
47 #ifdef HAVE_ALTIVEC_H /* gnu */
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
48 #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
49 #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
50 #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
51 #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
52 #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
53 #else /* apple */
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
54 #define LI(a,b) "li r" #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
55 #define STVX0(a,b,c) "stvx v" #a ",0,r" #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
56 #define STVX(a,b,c) "stvx v" #a ",r" #b ",r" #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
57 #define LVX0(a,b,c) "lvx v" #a ",0,r" #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
58 #define LVX(a,b,c) "lvx v" #a ",r" #b ",r" #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
59 #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
60
9857
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
61 static void state_save_altivec (cpu_state_t * state)
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
62 {
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
63 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
64 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
65 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
66 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
67 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
68 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
69 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
70 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
71 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
72 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
73 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
74 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
75 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
76 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
77 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
78 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
79 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
80 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
81 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
82 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
83 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
84 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
85 STVX (31, 9, 3));
9857
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
86 }
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
87
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
88 static void state_restore_altivec (cpu_state_t * state)
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
89 {
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
90 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
91 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
92 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
93 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
94 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
95 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
96 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
97 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
98 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
99 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
100 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
101 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
102 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
103 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
104 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
105 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
106 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
107 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
108 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
109 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
110 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
111 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
112 LVX (31, 9, 3));
9857
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
113 }
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
114 #endif
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
115
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
116 void mpeg2_cpu_state_init (uint32_t accel)
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 #ifdef ARCH_X86
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
119 if (accel & MPEG2_ACCEL_X86_MMX) {
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
120 mpeg2_cpu_state_restore = state_restore_mmx;
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
121 }
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
122 #endif
10299
71ae59ea3c46 Fixed compilation on g3. Patch by Dan Christiansen <danchr@daimi.au.dk>
alex
parents: 10298
diff changeset
123 #if defined(ARCH_PPC) && defined(HAVE_ALTIVEC)
9857
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
124 if (accel & MPEG2_ACCEL_PPC_ALTIVEC) {
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
125 mpeg2_cpu_state_save = state_save_altivec;
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
126 mpeg2_cpu_state_restore = state_restore_altivec;
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
127 }
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
128 #endif
89b48bc6c441 Importing libmpeg2 from mpeg2dec-0.3.1
arpi
parents:
diff changeset
129 }