Skip to content

Merge ac97562c99c3ae97f063048ccaf08ebdae60ac30 into 18.x #81742

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
brad0 opened this issue Feb 14, 2024 · 3 comments
Closed

Merge ac97562c99c3ae97f063048ccaf08ebdae60ac30 into 18.x #81742

brad0 opened this issue Feb 14, 2024 · 3 comments

Comments

@brad0
Copy link
Contributor

brad0 commented Feb 14, 2024

[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.

@brad0
Copy link
Contributor Author

brad0 commented Feb 14, 2024

/cherry-pick 7a9b0e4 ac97562

@llvmbot llvmbot closed this as completed Feb 14, 2024
@github-project-automation github-project-automation bot moved this from Needs Triage to Done in LLVM Release Status Feb 14, 2024
@llvmbot
Copy link
Member

llvmbot commented Feb 14, 2024

/pull-request #81743

@llvmbot
Copy link
Member

llvmbot commented Feb 14, 2024

@llvm/issue-subscribers-openmp

Author: Brad Smith (brad0)

[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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Development

No branches or pull requests

3 participants