Exemplo n.º 1
0
void
SIZE(libat_store) (UTYPE *mptr, UTYPE newval, int smodel)
{
    UWORD magic;

    pre_seq_barrier (smodel);
    magic = protect_start (mptr);

    *mptr = newval;

    protect_end (mptr, magic);
    post_seq_barrier (smodel);
}
Exemplo n.º 2
0
UTYPE
SIZE(libat_load) (UTYPE *mptr, int smodel)
{
  UTYPE ret;
  UWORD magic;

  pre_seq_barrier (smodel);
  magic = protect_start (mptr);

  ret = *mptr;

  protect_end (mptr, magic);
  post_seq_barrier (smodel);

  return ret;
}
Exemplo n.º 3
0
bool
SIZE(libat_test_and_set) (UTYPE *mptr, int smodel)
{
  UTYPE oldval;
  UWORD magic;

  pre_seq_barrier (smodel);
  magic = protect_start (mptr);

  oldval = *mptr;
  *mptr = __GCC_ATOMIC_TEST_AND_SET_TRUEVAL;

  protect_end (mptr, magic);
  post_seq_barrier (smodel);

  return oldval != 0;
}
Exemplo n.º 4
0
Arquivo: exch_n.c Projeto: 0day-ci/gcc
UTYPE
SIZE(libat_exchange) (UTYPE *mptr, UTYPE newval, int smodel UNUSED)
{
  UTYPE oldval;
  UWORD magic;

  pre_seq_barrier (smodel);
  magic = protect_start (mptr);

  oldval = *mptr;
  *mptr = newval;

  protect_end (mptr, magic);
  post_seq_barrier (smodel);

  return oldval;
}
Exemplo n.º 5
0
UTYPE
SIZE(C3(libat_,NAME,_fetch)) (UTYPE *mptr, UTYPE opval, int smodel UNUSED)
{
    UTYPE ret;
    UWORD magic;

    pre_seq_barrier (smodel);
    magic = protect_start (mptr);

    ret = OP (*mptr, opval);
    *mptr = ret;

    protect_end (mptr, magic);
    post_seq_barrier (smodel);

    return ret;
}
Exemplo n.º 6
0
bool
SIZE(libat_compare_exchange) (UTYPE *mptr, UTYPE *eptr, UTYPE newval,
			      int smodel, int fmodel UNUSED)
{
  UTYPE oldval;
  UWORD magic;
  bool ret;

  pre_seq_barrier (smodel);
  magic = protect_start (mptr);

  oldval = *mptr;
  ret = (oldval == *eptr);
  if (ret)
      *mptr = newval;
  else
  *eptr = oldval;

  protect_end (mptr, magic);
  post_seq_barrier (smodel);

  return ret;
}