Skip to content

Commit

Permalink
release/18.x: [openmp] __kmp_x86_cpuid fix for i386/PIC builds. (#84626
Browse files Browse the repository at this point in the history
…) (#85053)
  • Loading branch information
devnexen authored Mar 15, 2024
1 parent 600f7f2 commit 9b3edb5
Showing 1 changed file with 10 additions and 0 deletions.
10 changes: 10 additions & 0 deletions openmp/runtime/src/kmp.h
Original file line number Diff line number Diff line change
Expand Up @@ -1403,9 +1403,19 @@ extern void __kmp_query_cpuid(kmp_cpuinfo_t *p);
// subleaf is only needed for cache and topology discovery and can be set to
// zero in most cases
static inline void __kmp_x86_cpuid(int leaf, int subleaf, struct kmp_cpuid *p) {
#if KMP_ARCH_X86 && (defined(__pic__) || defined(__PIC__))
// on i386 arch, the ebx reg. is used by pic, thus we need to preserve from
// being trashed beforehand
__asm__ __volatile__("mov %%ebx, %%edi\n"
"cpuid\n"
"xchg %%edi, %%ebx\n"
: "=a"(p->eax), "=b"(p->ebx), "=c"(p->ecx), "=d"(p->edx)
: "a"(leaf), "c"(subleaf));
#else
__asm__ __volatile__("cpuid"
: "=a"(p->eax), "=b"(p->ebx), "=c"(p->ecx), "=d"(p->edx)
: "a"(leaf), "c"(subleaf));
#endif
}
// Load p into FPU control word
static inline void __kmp_load_x87_fpu_control_word(const kmp_int16 *p) {
Expand Down

0 comments on commit 9b3edb5

Please sign in to comment.