view paper/src/AtomicTImpl2.cbc @ 131:988b3024d685

update
author anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Mon, 08 Feb 2021 05:49:37 +0900
parents b804a51037c7
children
line wrap: on
line source

AtomicT_int* createAtomicT_intImpl_int(struct Context* context,int init) {
    struct AtomicT_int* atomicT_int  = &ALLOCATE(context, AtomicT_int)->AtomicT_int;
    struct AtomicT_intImpl_int* atomic_t_impl = &ALLOCATE(context, AtomicT_intImpl_int)->AtomicT_intImpl_int;
    atomicT_int->atomicT_int = (union Data*)atomic_t_impl;
    atomicT_int->checkAndSet = C_checkAndSet_AtomicT_intImpl;
    atomicT_int->set = C_set_AtomicT_intImpl;
    atomic_t_impl->atomic = init;
    atomic_t_impl->init = init;
    return atomicT_int;

}

__code checkAndSet_AtomicT_intImpl(struct Context *context,struct AtomicT_intImpl_int* atomicT_int, int oldData, int newData, enum Code next, enum Code fail) {
    if (__sync_bool_compare_and_swap(&atomicT_int->atomic, oldData, newData)) {
        goto meta(context, next);
    }
    goto meta(context, fail);
}