/*
 * Copyright (c) 2004-2006 The Regents of the University of California.
 *                         All rights reserved.
 * Copyright (c) 2014-2020 Intel, Inc.  All rights reserved.
 * Copyright (c) 2021-2022 Nanook Consulting.  All rights reserved.
 * $COPYRIGHT$
 *
 * Additional copyrights may follow
 *
 * $HEADER$
 */

/** @file
 *
 * Compiler-specific prefetch functions
 *
 * A small set of prefetch / prediction interfaces for using compiler
 * directives to improve memory prefetching and branch prediction
 */

#ifndef PMIX_PREFETCH_H
#define PMIX_PREFETCH_H

#include "src/include/pmix_config.h"

#if PMIX_C_HAVE_BUILTIN_EXPECT
#    define PMIX_LIKELY(expression)   __builtin_expect(!!(expression), 1)
#    define PMIX_UNLIKELY(expression) __builtin_expect(!!(expression), 0)
#else
#    define PMIX_LIKELY(expression)   (expression)
#    define PMIX_UNLIKELY(expression) (expression)
#endif

#if PMIX_C_HAVE_BUILTIN_PREFETCH
#    define PMIX_PREFETCH(address, rw, locality) __builtin_prefetch(address, rw, locality)
#else
#    define PMIX_PREFETCH(address, rw, locality)
#endif

#endif
