/*
 * ompt-signal.h -- Header providing low-level synchronization for tests
 */

//===----------------------------------------------------------------------===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is a copy from runtime/test/ompt/
//
//===----------------------------------------------------------------------===//

#if defined(WIN32) || defined(_WIN32)
#include <windows.h>
#define delay() Sleep(1);
#else
#include <unistd.h>
#define delay(t) usleep(t);
#endif

// These functions are used to provide a signal-wait mechanism to enforce
// expected scheduling for the test cases.
// Conditional variable (s) needs to be shared! Initialize to 0

#define OMPT_SIGNAL(s) ompt_signal(&s)
// inline
void ompt_signal(int *s) {
#pragma omp atomic
  (*s)++;
}

#define OMPT_WAIT(s, v) ompt_wait(&s, v)
// wait for s >= v
// inline
void ompt_wait(int *s, int v) {
  int wait = 0;
  do {
    delay(10);
#pragma omp atomic read
    wait = (*s);
  } while (wait < v);
}
