//===------------- target_interface.h - Target interfaces --------- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
// This file contains interfaces that must be implemented by each target.
//
//===----------------------------------------------------------------------===//

#ifndef _OMPTARGET_TARGET_INTERFACE_H_
#define _OMPTARGET_TARGET_INTERFACE_H_

#include "target_impl.h"

// Calls to the NVPTX layer (assuming 1D layout)
EXTERN int GetThreadIdInBlock();
EXTERN int GetBlockIdInKernel();
EXTERN int GetNumberOfBlocksInKernel();
EXTERN int GetNumberOfThreadsInBlock();
EXTERN unsigned GetWarpId();
EXTERN unsigned GetWarpSize();
EXTERN unsigned GetLaneId();

// Atomics
DEVICE uint32_t __kmpc_atomic_add(uint32_t *, uint32_t);
DEVICE uint32_t __kmpc_atomic_inc(uint32_t *, uint32_t);
DEVICE uint32_t __kmpc_atomic_max(uint32_t *, uint32_t);
DEVICE uint32_t __kmpc_atomic_exchange(uint32_t *, uint32_t);
DEVICE uint32_t __kmpc_atomic_cas(uint32_t *, uint32_t, uint32_t);
static_assert(sizeof(unsigned long long) == sizeof(uint64_t), "");
DEVICE unsigned long long __kmpc_atomic_exchange(unsigned long long *,
                                                 unsigned long long);
DEVICE unsigned long long __kmpc_atomic_add(unsigned long long *,
                                            unsigned long long);

// Locks
EXTERN void __kmpc_impl_init_lock(omp_lock_t *lock);
EXTERN void __kmpc_impl_destroy_lock(omp_lock_t *lock);
EXTERN void __kmpc_impl_set_lock(omp_lock_t *lock);
EXTERN void __kmpc_impl_unset_lock(omp_lock_t *lock);
EXTERN int __kmpc_impl_test_lock(omp_lock_t *lock);

EXTERN void __kmpc_impl_threadfence();
EXTERN void __kmpc_impl_threadfence_block();
EXTERN void __kmpc_impl_threadfence_system();

EXTERN double __kmpc_impl_get_wtick();
EXTERN double __kmpc_impl_get_wtime();

EXTERN void __kmpc_impl_unpack(uint64_t val, uint32_t &lo, uint32_t &hi);
EXTERN uint64_t __kmpc_impl_pack(uint32_t lo, uint32_t hi);
EXTERN __kmpc_impl_lanemask_t __kmpc_impl_lanemask_lt();
EXTERN __kmpc_impl_lanemask_t __kmpc_impl_lanemask_gt();
EXTERN uint32_t __kmpc_impl_smid();

EXTERN __kmpc_impl_lanemask_t __kmpc_impl_activemask();

EXTERN void __kmpc_impl_syncthreads();
EXTERN void __kmpc_impl_syncwarp(__kmpc_impl_lanemask_t Mask);

// Kernel initialization
EXTERN void __kmpc_impl_target_init();

// Memory
EXTERN void *__kmpc_impl_malloc(size_t);
EXTERN void __kmpc_impl_free(void *);

// Barrier until num_threads arrive.
EXTERN void __kmpc_impl_named_sync(uint32_t num_threads);

#endif // _OMPTARGET_TARGET_INTERFACE_H_
