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;
}