00001 /* 00002 * Copyright (c) 2005 Luca Barbato <lu_zero@gentoo.org> 00003 * 00004 * This file is part of FFmpeg. 00005 * 00006 * FFmpeg is free software; you can redistribute it and/or 00007 * modify it under the terms of the GNU Lesser General Public 00008 * License as published by the Free Software Foundation; either 00009 * version 2.1 of the License, or (at your option) any later version. 00010 * 00011 * FFmpeg is distributed in the hope that it will be useful, 00012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00014 * Lesser General Public License for more details. 00015 * 00016 * You should have received a copy of the GNU Lesser General Public 00017 * License along with FFmpeg; if not, write to the Free Software 00018 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 00019 */ 00020 00021 #ifndef AVUTIL_PPC_TIMER_H 00022 #define AVUTIL_PPC_TIMER_H 00023 00024 #include <stdint.h> 00025 00026 #define AV_READ_TIME read_time 00027 00028 static inline uint64_t read_time(void) 00029 { 00030 uint32_t tbu, tbl, temp; 00031 00032 /* from section 2.2.1 of the 32-bit PowerPC PEM */ 00033 __asm__ volatile( 00034 "1:\n" 00035 "mftbu %2\n" 00036 "mftb %0\n" 00037 "mftbu %1\n" 00038 "cmpw %2,%1\n" 00039 "bne 1b\n" 00040 : "=r"(tbl), "=r"(tbu), "=r"(temp) 00041 : 00042 : "cc"); 00043 00044 return (((uint64_t)tbu)<<32) | (uint64_t)tbl; 00045 } 00046 00047 #endif /* AVUTIL_PPC_TIMER_H */