[all-commits] [llvm/llvm-project] ac9756: [OpenMP][AIX]Define struct kmp_base_tas_lock with ...
Xing Xue via All-commits
all-commits at lists.llvm.org
Tue Feb 13 12:11:36 PST 2024
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: ac97562c99c3ae97f063048ccaf08ebdae60ac30
https://github.com/llvm/llvm-project/commit/ac97562c99c3ae97f063048ccaf08ebdae60ac30
Author: Xing Xue <xingxue at outlook.com>
Date: 2024-02-13 (Tue, 13 Feb 2024)
Changed paths:
M openmp/runtime/src/kmp_csupport.cpp
M openmp/runtime/src/kmp_gsupport.cpp
M openmp/runtime/src/kmp_lock.cpp
M openmp/runtime/src/kmp_lock.h
Log Message:
-----------
[OpenMP][AIX]Define struct kmp_base_tas_lock with the order of two members swapped for big-endian (#79188)
The direct lock data structure has bit `0` (the least significant bit)
of the first 32-bit word set to `1` to indicate it is a direct lock. On
the other hand, the first word (in 32-bit mode) or first two words (in
64-bit mode) of an indirect lock are the address of the entry allocated
from the indirect lock table. The runtime checks bit `0` of the first
32-bit word to tell if this is a direct or an indirect lock. This works
fine for 32-bit and 64-bit little-endian because its memory layout of a
64-bit address is (`low word`, `high word`). However, this causes
problems for big-endian where the memory layout of a 64-bit address is
(`high word`, `low word`). If an address of the indirect lock table
entry is something like `0x110035300`, i.e., (`0x1`, `0x10035300`), it
is treated as a direct lock. This patch defines `struct
kmp_base_tas_lock` with the ordering of the two 32-bit members flipped
for big-endian PPC64 so that when checking/setting tags in member
`poll`, the second word (the low word) is used. This patch also changes
places where `poll` is not already explicitly specified for
checking/setting tags.
More information about the All-commits
mailing list