The entire patch bootstrapped and regtested on loongarch64-linux-gnu
with -march=la664, and I've also tried several simple 16-byte atomic
operation tests locally.

OK for trunk?  Or maybe the clean up is OK but the 16-byte atomic
implementation still needs to be confirmed by the hardware team?

Xi Ruoyao (17):
  LoongArch: (NFC) Remove atomic_optab and use amop instead
  LoongArch: (NFC) Remove amo and use size instead
  LoongArch: Don't use "+" for atomic_{load,store} "m" constraint
  LoongArch: Allow using bstrins for masking the address in
    atomic_test_and_set
  LoongArch: Don't emit overly-restrictive barrier for LL-SC loops
  LoongArch: Remove unneeded "b 3f" instruction after LL-SC loops
  LoongArch: Remove unneeded "andi offset,addr,3" instruction in
    atomic_test_and_set
  LoongArch: Implement subword atomic_fetch_{and,or,xor} with am*.w
    instructions
  LoongArch: Don't expand atomic_fetch_sub_{hi,qi} to LL-SC loop if
    -mlam-bh
  LoongArch: Implement atomic_fetch_nand<GPR:mode>
  LoongArch: Implement 16-byte atomic load with LSX
  LoongArch: Implement 16-byte atomic store with LSX
  LoongArch: Add -m[no-]scq option
  LoongArch: Implement 16-byte atomic store with sc.q
  LoongArch: Implement 16-byte CAS with sc.q
  LoongArch: Implement 16-byte atomic exchange with sc.q
  LoongArch: Implement 16-byte atomic add, sub, and, or, xor, and nand
    with sc.q

 gcc/config/loongarch/genopts/isa-evolution.in |   1 +
 gcc/config/loongarch/loongarch-def.cc         |   4 +-
 gcc/config/loongarch/loongarch-evolution.cc   |   4 +
 gcc/config/loongarch/loongarch-evolution.h    |   8 +-
 gcc/config/loongarch/loongarch-str.h          |   1 +
 gcc/config/loongarch/loongarch.cc             |  30 +-
 gcc/config/loongarch/loongarch.opt            |   4 +
 gcc/config/loongarch/sync.md                  | 641 ++++++++++++------
 gcc/doc/invoke.texi                           |  11 +-
 9 files changed, 494 insertions(+), 210 deletions(-)

-- 
2.48.1

Reply via email to