Mercurial > libavcodec.hg
annotate ppc/check_altivec.c @ 6323:e6da66f378c7 libavcodec
mpegvideo.h has two function declarations with the 'inline' specifier
but no definition for those functions. The C standard requires a
definition to appear in the same translation unit for any function
declared with 'inline'. Most of the files including mpegvideo.h do not
define those functions. Fix this by removing the 'inline' specifiers
from the header.
patch by Uoti Urpala
author | diego |
---|---|
date | Sun, 03 Feb 2008 17:54:30 +0000 |
parents | eb2e3c3b7f78 |
children | c93570aeb3eb |
rev | line source |
---|---|
5750
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
1 /* |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
2 * This file is part of FFmpeg. |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
3 * |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
4 * FFmpeg is free software; you can redistribute it and/or |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
5 * modify it under the terms of the GNU Lesser General Public |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
6 * License as published by the Free Software Foundation; either |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
7 * version 2.1 of the License, or (at your option) any later version. |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
8 * |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
9 * FFmpeg is distributed in the hope that it will be useful, |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
12 * Lesser General Public License for more details. |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
13 * |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
14 * You should have received a copy of the GNU Lesser General Public |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
15 * License along with FFmpeg; if not, write to the Free Software |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
17 */ |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
18 |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
19 |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
20 /** |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
21 * @file check_altivec.c |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
22 * Checks for AltiVec presence. |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
23 */ |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
24 |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
25 #ifdef __APPLE__ |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
26 #include <sys/sysctl.h> |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
27 #elif __AMIGAOS4__ |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
28 #include <exec/exec.h> |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
29 #include <interfaces/exec.h> |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
30 #include <proto/exec.h> |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
31 #endif /* __APPLE__ */ |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
32 |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
33 /** |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
34 * This function MAY rely on signal() or fork() in order to make sure altivec |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
35 * is present |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
36 */ |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
37 |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
38 int has_altivec(void) |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
39 { |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
40 #ifdef __AMIGAOS4__ |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
41 ULONG result = 0; |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
42 extern struct ExecIFace *IExec; |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
43 |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
44 IExec->GetCPUInfoTags(GCIT_VectorUnit, &result, TAG_DONE); |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
45 if (result == VECTORTYPE_ALTIVEC) return 1; |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
46 return 0; |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
47 #elif __APPLE__ |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
48 int sels[2] = {CTL_HW, HW_VECTORUNIT}; |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
49 int has_vu = 0; |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
50 size_t len = sizeof(has_vu); |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
51 int err; |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
52 |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
53 err = sysctl(sels, 2, &has_vu, &len, NULL, 0); |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
54 |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
55 if (err == 0) return (has_vu != 0); |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
56 return 0; |
6159 | 57 #elif defined(RUNTIME_CPUDETECT) |
58 int proc_ver; | |
59 // support of mfspr PVR emulation added in Linux 2.6.17 | |
60 asm volatile("mfspr %0, 287" : "=r" (proc_ver)); | |
61 proc_ver >>= 16; | |
62 if (proc_ver & 0x8000 || | |
63 proc_ver == 0x000c || | |
64 proc_ver == 0x0039 || proc_ver == 0x003c || | |
65 proc_ver == 0x0044 || proc_ver == 0x0045 || | |
66 proc_ver == 0x0070) | |
67 return 1; | |
68 return 0; | |
5750
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
69 #else |
5757
ace63c809071
Remove uses of SIGILL for CPU extension detection, that method is not acceptable
reimar
parents:
5750
diff
changeset
|
70 // since we were compiled for altivec, just assume we have it |
ace63c809071
Remove uses of SIGILL for CPU extension detection, that method is not acceptable
reimar
parents:
5750
diff
changeset
|
71 // until someone comes up with a proper way (not involving signal hacks). |
ace63c809071
Remove uses of SIGILL for CPU extension detection, that method is not acceptable
reimar
parents:
5750
diff
changeset
|
72 return 1; |
5750
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
73 #endif /* __AMIGAOS4__ */ |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
74 } |
09f99af1db40
Sanitize altivec code so it can be built with runtime check properly
lu_zero
parents:
diff
changeset
|
75 |