X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=include%2Fust%2Fprocessor.h;h=6ee44ddde599f3bd8eb5e24d90295c800168e1be;hb=7f0357f05bf1dae6e371b04a6f94d6912f0a0303;hp=68ac258631a61491b287d0c1f492253dd5881fda;hpb=066b83b8dfc562e00cb61d39eca0e0f77242828c;p=ust.git diff --git a/include/ust/processor.h b/include/ust/processor.h index 68ac258..6ee44dd 100644 --- a/include/ust/processor.h +++ b/include/ust/processor.h @@ -25,7 +25,7 @@ extern __thread long ust_reg_stack[500]; extern volatile __thread long *ust_reg_stack_ptr; -#define ____cacheline_aligned __attribute__((aligned(CACHE_LINE_SIZE))) +#define ____cacheline_aligned __attribute__((aligned(CAA_CACHE_LINE_SIZE))) #ifdef __i386 @@ -214,9 +214,7 @@ static inline int fls(int x) #define _ASM_PTR ".long " -#endif /* below is code for x86-64 */ - -#ifdef __x86_64 +#elif defined(__x86_64) struct registers { int padding; /* 4 bytes */ @@ -293,7 +291,7 @@ static inline int fls(int x) /* Start TLS access of private reg stack pointer */ \ ".byte 0x66\n\t" \ "leaq ust_reg_stack_ptr@tlsgd(%%rip), %%rdi\n\t" \ - ".word 0x6666\n\t" \ + ".hword 0x6666\n\t" \ "rex64\n\t" \ "call __tls_get_addr@plt\n\t" \ /* --- End TLS access */ \ @@ -305,7 +303,7 @@ static inline int fls(int x) /* Start TLS access of private reg stack */ \ ".byte 0x66\n\t" \ "leaq ust_reg_stack@tlsgd(%%rip), %%rdi\n\t" \ - ".word 0x6666\n\t" \ + ".hword 0x6666\n\t" \ "rex64\n\t" \ "call __tls_get_addr@plt\n\t" \ /* --- End TLS access */ \ @@ -425,9 +423,7 @@ static inline int fls(int x) #define _ASM_PTR ".quad " -#endif /* x86_64 */ - -#ifdef __PPC__ +#elif defined(__PPC__) struct registers { }; @@ -447,6 +443,37 @@ static __inline__ int fls(unsigned int x) #define _ASM_PTR ".long " #define save_registers(a) -#endif /* __PPC__ */ +#else /* arch-agnostic */ + +static __inline__ int fls(unsigned int x) +{ + int r = 32; + + if (!x) + return 0; + if (!(x & 0xFFFF0000U)) { + x <<= 16; + r -= 16; + } + if (!(x & 0xFF000000U)) { + x <<= 8; + r -= 8; + } + if (!(x & 0xF0000000U)) { + x <<= 4; + r -= 4; + } + if (!(x & 0xC0000000U)) { + x <<= 2; + r -= 2; + } + if (!(x & 0x80000000U)) { + x <<= 1; + r -= 1; + } + return r; +} + +#endif #endif /* UST_PROCESSOR_H */