--- portab.h 2002/03/28 23:38:50 1.10 +++ portab.h 2002/03/30 16:21:47 1.13 @@ -39,7 +39,7 @@ type * name = (type *) (((int32_t) name##_storage+(alignment - 1)) & ~((int32_t)(alignment)-1)) #else #define DECLARE_ALIGNED_MATRIX(name,sizex,sizey,type,alignment) \ - __declspec(align(CACHE_LINE)) type name[(sizex)*(sizey)] + __declspec(align(alignment)) type name[(sizex)*(sizey)] #endif // needed for bitstream.h @@ -110,9 +110,28 @@ // needed for bitstream.h #ifdef ARCH_PPC - #define BSWAP(a) __asm__ ( "lwbrx %0,0,%1; eieio" : "=r" (a) : \ + #define BSWAP(a) __asm__ __volatile__ ( "lwbrx %0,0,%1; eieio" : "=r" (a) : \ "r" (&(a)), "m" (a)); #define EMMS() + + static __inline unsigned long get_tbl(void) { + unsigned long tbl; + asm volatile("mftb %0" : "=r" (tbl)); + return tbl; + } + static __inline unsigned long get_tbu(void) { + unsigned long tbl; + asm volatile("mftbu %0" : "=r" (tbl)); + return tbl; + } + static __inline int64_t read_counter() { + unsigned long tb, tu; + do { + tu = get_tbu(); + tb = get_tbl(); + } while(tb != get_tbl()); + return (((int64_t)tu) << 32) | (int64_t)tb; + } #else #define BSWAP(a) __asm__ ( "bswapl %0\n" : "=r" (a) : "0" (a) ) #define EMMS() __asm__("emms\n\t")