fetchadd Operation Font Conventions
if
(PR[qp]) {
check_target_register;
if (
GR[r3].nat)
register_nat_consumption_fault(SEMAPHORE);
size = four_byte_form ? 4 : 8;
paddr =
tlb_translate(GR[r3],
size, SEMAPHORE, PSR.cpl, &mattr, &tmp_unused);
if (!ma_supports_fetchadd(mattr))
unsupported_data_reference_fault(GR[r3]);
if (sem == ‘acq')
val =
mem_xchg_add(inc3,
paddr, size, UM.be, mattr, ACQUIRE, ldhint);
else // ‘rel'
val = mem_xchg_add(inc3, paddr, size, UM.be, mattr, RELEASE, ldhint);
alat_inval_multiple_entries(paddr,
size);
GR[r1] =
zero_ext(val,
size * 8);
GR[r1].nat = 0;
}