You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[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.
The text was updated successfully, but these errors were encountered:
[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.
[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. Onthe 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 first32-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 causesproblems for big-endian where the memory layout of a 64-bit address is
(
high word
,low word
). If an address of the indirect lock tableentry is something like
0x110035300
, i.e., (0x1
,0x10035300
), itis treated as a direct lock. This patch defines
struct kmp_base_tas_lock
with the ordering of the two 32-bit members flippedfor big-endian PPC64 so that when checking/setting tags in member
poll
, the second word (the low word) is used. This patch also changesplaces where
poll
is not already explicitly specified forchecking/setting tags.
The text was updated successfully, but these errors were encountered: