36 if( elmt_size != 4 ) {
37 _XMP_fatal(
"_XMP_utofu_atomic_define : invalid elmt_size");
40 int ident_val = _xmp_utofu_num_of_puts;
41 unsigned long int post_flags;
42 post_flags = _XMP_UTOFU_COARRAY_PUT_POST_FLAGS;
43 uint64_t edata = _xmp_utofu_edata_flag_armw_puts;
44 uintptr_t cbvalue = ident_val;
46 utofu_vcq_id_t rmt_vcq_id = _xmp_utofu_vcq_ids[target_rank];
47 enum utofu_armw_op armw_op = UTOFU_ARMW_OP_SWAP;
48 utofu_stadd_t rmt_stadd = dst_desc->stadds[target_rank] + elmt_size * dst_offset;
50 uint32_t op_value = value;
52 _xmp_utofu_num_of_puts++;
53 utofu_armw4(_xmp_utofu_vcq_hdl, rmt_vcq_id, armw_op, op_value, rmt_stadd,
54 edata, post_flags, (
void *)cbvalue);
55 while( _xmp_utofu_num_of_puts != 0 )
56 _XMP_utofu_sync_memory_armw(edata, post_flags, cbvalue);