#if __has_builtin(__builtin_thread_pointer) && defined(CONFIG_CURRENT_POINTER_IN_TPIDRURO) /* * Use the __builtin helper when available - this results in better * code, especially when using GCC in combination with the per-task * stack protector, as the compiler will recognize that it needs to * load the TLS register only once in every function.
*/
cur = __builtin_thread_pointer(); #elifdefined(CONFIG_CURRENT_POINTER_IN_TPIDRURO) || defined(CONFIG_SMP) asm("0: mrc p15, 0, %0, c13, c0, 3 \n\t" #ifdef CONFIG_CPU_V6 "1: \n\t" " .subsection 1 \n\t" #ifdefined(CONFIG_ARM_HAS_GROUP_RELOCS) && \
!(defined(MODULE) && defined(CONFIG_ARM_MODULE_PLTS)) "2: " LOAD_SYM_ARMV6(%0, __current) " \n\t" " b 1b \n\t" #else "2: ldr %0, 3f \n\t" " ldr %0, [%0] \n\t" " b 1b \n\t" "3: .long __current \n\t" #endif " .previous \n\t" " .pushsection \".alt.smp.init\", \"a\" \n\t" " .long 0b - . \n\t" " b . + (2b - 0b) \n\t" " .popsection \n\t" #endif
: "=r"(cur)); #elif __LINUX_ARM_ARCH__>= 7 || \
!defined(CONFIG_ARM_HAS_GROUP_RELOCS) || \
(defined(MODULE) && defined(CONFIG_ARM_MODULE_PLTS))
cur = __current; #else asm(LOAD_SYM_ARMV6(%0, __current) : "=r"(cur)); #endif return cur;
}
#define current get_current()
#endif/* __ASSEMBLY__ */
#endif/* _ASM_ARM_CURRENT_H */
Messung V0.5
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.15Bemerkung:
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.