/src/ffmpeg/libavutil/x86/timer.h
Line | Count | Source |
1 | | /* |
2 | | * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at> |
3 | | * |
4 | | * This file is part of FFmpeg. |
5 | | * |
6 | | * FFmpeg is free software; you can redistribute it and/or |
7 | | * modify it under the terms of the GNU Lesser General Public |
8 | | * License as published by the Free Software Foundation; either |
9 | | * version 2.1 of the License, or (at your option) any later version. |
10 | | * |
11 | | * FFmpeg is distributed in the hope that it will be useful, |
12 | | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
13 | | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
14 | | * Lesser General Public License for more details. |
15 | | * |
16 | | * You should have received a copy of the GNU Lesser General Public |
17 | | * License along with FFmpeg; if not, write to the Free Software |
18 | | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
19 | | */ |
20 | | |
21 | | #ifndef AVUTIL_X86_TIMER_H |
22 | | #define AVUTIL_X86_TIMER_H |
23 | | |
24 | | #include <stdint.h> |
25 | | |
26 | | #if HAVE_INLINE_ASM |
27 | | |
28 | | #define FF_TIMER_UNITS "decicycles" |
29 | 0 | #define AV_READ_TIME read_time |
30 | | |
31 | | static inline uint64_t read_time(void) |
32 | 0 | { |
33 | 0 | uint32_t a, d; |
34 | 0 | __asm__ volatile( |
35 | 0 | #if ARCH_X86_64 || defined(__SSE2__) |
36 | 0 | "lfence \n\t" |
37 | 0 | #endif |
38 | 0 | "rdtsc \n\t" |
39 | 0 | : "=a" (a), "=d" (d)); |
40 | 0 | return ((uint64_t)d << 32) + a; |
41 | 0 | } |
42 | | |
43 | | #elif HAVE_RDTSC |
44 | | |
45 | | #include <intrin.h> |
46 | | #define AV_READ_TIME __rdtsc |
47 | | |
48 | | #endif /* HAVE_INLINE_ASM */ |
49 | | |
50 | | #endif /* AVUTIL_X86_TIMER_H */ |