Mercurial > mplayer.hg
annotate libmpeg2/cpu_state.c @ 22809:09f97d0161ba
Handle X-QT extradata in a slightly more correct way
| author | cehoyos |
|---|---|
| date | Mon, 26 Mar 2007 09:35:03 +0000 |
| parents | f6881c789312 |
| children | 11181df06389 |
| rev | line source |
|---|---|
| 9857 | 1 /* |
| 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 | 4 * Copyright (C) 1999-2000 Aaron Holtzman <aholtzma@ess.engr.uvic.ca> |
| 5 * | |
| 6 * This file is part of mpeg2dec, a free MPEG-2 video stream decoder. | |
| 7 * See http://libmpeg2.sourceforge.net/ for updates. | |
| 8 * | |
| 9 * mpeg2dec is free software; you can redistribute it and/or modify | |
| 10 * it under the terms of the GNU General Public License as published by | |
| 11 * the Free Software Foundation; either version 2 of the License, or | |
| 12 * (at your option) any later version. | |
| 13 * | |
| 14 * mpeg2dec is distributed in the hope that it will be useful, | |
| 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 17 * GNU General Public License for more details. | |
| 18 * | |
| 19 * You should have received a copy of the GNU General Public License | |
| 20 * along with this program; if not, write to the Free Software | |
| 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 * |
| 21526 | 23 * Modified for use with MPlayer, see libmpeg-0.4.1.diff for the exact changes. |
| 18783 | 24 * detailed changelog at http://svn.mplayerhq.hu/mplayer/trunk/ |
|
14732
1385ec491ffb
Mark locally modified files as such to comply more closely with GPL 2a.
diego
parents:
13864
diff
changeset
|
25 * $Id$ |
| 9857 | 26 */ |
| 27 | |
| 28 #include "config.h" | |
| 29 | |
| 30 #include <stdlib.h> | |
| 31 #include <inttypes.h> | |
| 32 | |
| 33 #include "mpeg2.h" | |
| 12932 | 34 #include "attributes.h" |
| 9857 | 35 #include "mpeg2_internal.h" |
| 13864 | 36 #if defined(ARCH_X86) || defined(ARCH_X86_64) |
| 9857 | 37 #include "mmx.h" |
| 38 #endif | |
| 39 | |
| 40 void (* mpeg2_cpu_state_save) (cpu_state_t * state) = NULL; | |
| 41 void (* mpeg2_cpu_state_restore) (cpu_state_t * state) = NULL; | |
| 42 | |
| 13864 | 43 #if defined(ARCH_X86) || defined(ARCH_X86_64) |
| 9857 | 44 static void state_restore_mmx (cpu_state_t * state) |
| 45 { | |
| 46 emms (); | |
| 47 } | |
| 48 #endif | |
| 49 | |
| 21571 | 50 #if defined(ARCH_PPC) && defined(HAVE_ALTIVEC) |
| 51 #if defined( __APPLE_CC__ ) && defined( __APPLE_ALTIVEC__ ) /* apple */ | |
| 52 #define LI(a,b) "li r" #a "," #b "\n\t" | |
| 53 #define STVX0(a,b,c) "stvx v" #a ",0,r" #c "\n\t" | |
| 54 #define STVX(a,b,c) "stvx v" #a ",r" #b ",r" #c "\n\t" | |
| 55 #define LVX0(a,b,c) "lvx v" #a ",0,r" #c "\n\t" | |
| 56 #define LVX(a,b,c) "lvx v" #a ",r" #b ",r" #c "\n\t" | |
| 57 #else /* gnu */ | |
| 21526 | 58 #define LI(a,b) "li " #a "," #b "\n\t" |
| 59 #define STVX0(a,b,c) "stvx " #a ",0," #c "\n\t" | |
| 60 #define STVX(a,b,c) "stvx " #a "," #b "," #c "\n\t" | |
| 61 #define LVX0(a,b,c) "lvx " #a ",0," #c "\n\t" | |
| 62 #define LVX(a,b,c) "lvx " #a "," #b "," #c "\n\t" | |
|
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 #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 | 65 static void state_save_altivec (cpu_state_t * state) |
| 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 | 90 } |
| 91 | |
| 92 static void state_restore_altivec (cpu_state_t * state) | |
| 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 | 117 } |
| 118 #endif | |
| 119 | |
| 120 void mpeg2_cpu_state_init (uint32_t accel) | |
| 121 { | |
| 13864 | 122 #if defined(ARCH_X86) || defined(ARCH_X86_64) |
| 9857 | 123 if (accel & MPEG2_ACCEL_X86_MMX) { |
| 124 mpeg2_cpu_state_restore = state_restore_mmx; | |
| 125 } | |
| 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 | 128 if (accel & MPEG2_ACCEL_PPC_ALTIVEC) { |
| 129 mpeg2_cpu_state_save = state_save_altivec; | |
| 130 mpeg2_cpu_state_restore = state_restore_altivec; | |
| 131 } | |
| 132 #endif | |
| 133 } |
