https://bugs.kde.org/show_bug.cgi?id=344524

--- Comment #19 from Julian Seward <jsew...@acm.org> ---
Hmm, even that is too relaxed, because it doesn't reject mismatched
load vs store sizes.  Here's a variant that does check sizes, and 
uses size == 0 to mean "no transaction pending".

LoadLinked(addr)

  gs.LLsize = load_size // 1, 2, 4 or 8
  gs.LLaddr = addr
  gs.LLdata = zeroExtend(*addr)

StoreCond(addr, data)

  tmp_LLsize = gs.LLsize
  gs.LLsize = 0 // "no transaction"
  if tmp_LLsize != store_size        -> fail
  if addr != gs.LLaddr               -> fail
  if zeroExtend(*addr) != gs.LLdata  -> fail
  cas_ok = CAS(store_size, addr, gs.LLdata -> data)
  if !cas_ok                         -> fail
  succeed

When thread scheduled

  gs.LLsize = 0 // "no transaction"

-- 
You are receiving this mail because:
You are watching all bug changes.

Reply via email to