X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=include%2Fust%2Fprocessor.h;h=6ee44ddde599f3bd8eb5e24d90295c800168e1be;hb=7f0357f05bf1dae6e371b04a6f94d6912f0a0303;hp=867b140cce9b2d408f594f770ac688da86f5702c;hpb=6fa0d97f663351869797d35ddb504489e223fa7c;p=ust.git diff --git a/include/ust/processor.h b/include/ust/processor.h index 867b140..6ee44dd 100644 --- a/include/ust/processor.h +++ b/include/ust/processor.h @@ -20,10 +20,13 @@ #include #include +#include extern __thread long ust_reg_stack[500]; extern volatile __thread long *ust_reg_stack_ptr; +#define ____cacheline_aligned __attribute__((aligned(CAA_CACHE_LINE_SIZE))) + #ifdef __i386 struct registers { @@ -211,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 */ @@ -290,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 */ \ @@ -302,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 */ \ @@ -422,9 +423,7 @@ static inline int fls(int x) #define _ASM_PTR ".quad " -#endif /* x86_64 */ - -#ifdef __PPC__ +#elif defined(__PPC__) struct registers { }; @@ -444,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 */