[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