Blame SOURCES/libgomp_nonshared.c

53dace
/* Copyright (C) 2019 Free Software Foundation, Inc.
53dace
   Contributed by Jakub Jelinek <jakub@redhat.com>.
53dace
53dace
   This file is part of the GNU Offloading and Multi Processing Library
53dace
   (libgomp).
53dace
  
53dace
   Libgomp is free software; you can redistribute it and/or modify it
53dace
   under the terms of the GNU General Public License as published by
53dace
   the Free Software Foundation; either version 3, or (at your option)
53dace
   any later version.
53dace
53dace
   Libgomp is distributed in the hope that it will be useful, but WITHOUT ANY
53dace
   WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
53dace
   FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
53dace
   more details.
53dace
53dace
   Under Section 7 of GPL version 3, you are granted additional
53dace
   permissions described in the GCC Runtime Library Exception, version
53dace
   3.1, as published by the Free Software Foundation.
53dace
53dace
   You should have received a copy of the GNU General Public License and
53dace
   a copy of the GCC Runtime Library Exception along with this program;
53dace
   see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
53dace
   <http://www.gnu.org/licenses/>.  */
53dace
53dace
/* Remapping of nonmonotonic runtime schedule and maybe nonmonotonic runtime
53dace
   schedule loop entrypoints (the used by GCC 9 and later for runtime
53dace
   schedule without monotonic or nonmonotonic modifiers).
53dace
   RHEL 7 libgomp only implements the GOMP*loop*runtime* entrypoints without
53dace
   nonmonotonic in the names, which always implement monotonic scheduling,
53dace
   but the library doesn't implement any other scheduling, even in GCC 9
53dace
   and monotonic scheduling is a valid implementation of non-monotonic
53dace
   scheduling.  */
53dace
53dace
#include <stdbool.h>
53dace
53dace
typedef unsigned long long ull;
53dace
extern bool GOMP_loop_runtime_start (long, long, long, long *, long *);
53dace
extern bool GOMP_loop_runtime_next (long *, long *);
53dace
extern void GOMP_parallel_loop_runtime (void (*)(void *), void *,
53dace
					unsigned, long, long, long,
53dace
					unsigned);
53dace
extern bool GOMP_loop_ull_runtime_start (bool, ull, ull, ull, ull *, ull *);
53dace
extern bool GOMP_loop_ull_runtime_next (ull *, ull *);
53dace
extern bool GOMP_loop_dynamic_next (long *, long *);
53dace
extern bool GOMP_loop_dynamic_start (long, long, long, long, long *, long *);
53dace
extern bool GOMP_loop_guided_next (long *, long *);
53dace
extern bool GOMP_loop_guided_start (long, long, long, long, long *, long *);
53dace
extern bool GOMP_loop_ull_dynamic_next (ull *, ull *);
53dace
extern bool GOMP_loop_ull_dynamic_start (bool, ull, ull, ull, ull, ull *,
53dace
					 ull *);
53dace
extern bool GOMP_loop_ull_guided_next (ull *, ull *);
53dace
extern bool GOMP_loop_ull_guided_start (bool, ull, ull, ull, ull, ull *,
53dace
					ull *);
53dace
extern void GOMP_parallel_loop_dynamic (void (*)(void *), void *,
53dace
					unsigned, long, long, long, long,
53dace
					unsigned);
53dace
extern void GOMP_parallel_loop_guided (void (*)(void *), void *,
53dace
				       unsigned, long, long, long, long,
53dace
				       unsigned);
53dace
#define alias(x, y) __typeof (x) y __attribute__((alias (#x)))
53dace
53dace
#pragma GCC visibility push(hidden)
53dace
53dace
bool
53dace
GOMP_loop_nonmonotonic_runtime_start (long start, long end, long incr,
53dace
				      long *istart, long *iend)
53dace
{
53dace
  return GOMP_loop_runtime_start (start, end, incr, istart, iend);
53dace
}
53dace
alias (GOMP_loop_nonmonotonic_runtime_start,
53dace
       GOMP_loop_maybe_nonmonotonic_runtime_start);
53dace
53dace
bool
53dace
GOMP_loop_nonmonotonic_runtime_next (long *istart, long *iend)
53dace
{
53dace
  return GOMP_loop_runtime_next (istart, iend);
53dace
}
53dace
alias (GOMP_loop_nonmonotonic_runtime_next,
53dace
       GOMP_loop_maybe_nonmonotonic_runtime_next);
53dace
53dace
void
53dace
GOMP_parallel_loop_nonmonotonic_runtime (void (*fn)(void *), void *data,
53dace
					 unsigned num_threads, long start,
53dace
					 long end, long incr, unsigned flags)
53dace
{
53dace
  return GOMP_parallel_loop_runtime (fn, data, num_threads, start,
53dace
				     end, incr, flags);
53dace
}
53dace
alias (GOMP_parallel_loop_nonmonotonic_runtime,
53dace
       GOMP_parallel_loop_maybe_nonmonotonic_runtime);
53dace
53dace
bool
53dace
GOMP_loop_ull_nonmonotonic_runtime_start (bool up, ull start, ull end,
53dace
					  ull incr, ull *istart, ull *iend)
53dace
{
53dace
  return GOMP_loop_ull_runtime_start (up, start, end, incr, istart, iend);
53dace
}
53dace
alias (GOMP_loop_ull_nonmonotonic_runtime_start,
53dace
       GOMP_loop_ull_maybe_nonmonotonic_runtime_start);
53dace
53dace
bool
53dace
GOMP_loop_ull_nonmonotonic_runtime_next (ull *istart, ull *iend)
53dace
{
53dace
  return GOMP_loop_ull_runtime_next (istart, iend);
53dace
}
53dace
alias (GOMP_loop_ull_nonmonotonic_runtime_next,
53dace
       GOMP_loop_ull_maybe_nonmonotonic_runtime_next);
53dace
53dace
bool
53dace
GOMP_loop_nonmonotonic_dynamic_next (long *istart, long *iend)
53dace
{
53dace
  return GOMP_loop_dynamic_next (istart, iend);
53dace
}
53dace
53dace
bool
53dace
GOMP_loop_nonmonotonic_dynamic_start (long start, long end, long incr,
53dace
				      long chunk_size, long *istart,
53dace
				      long *iend)
53dace
{
53dace
  return GOMP_loop_dynamic_start (start, end, incr, chunk_size, istart, iend);
53dace
}
53dace
53dace
bool
53dace
GOMP_loop_nonmonotonic_guided_next (long *istart, long *iend)
53dace
{
53dace
  return GOMP_loop_guided_next (istart, iend);
53dace
}
53dace
53dace
bool
53dace
GOMP_loop_nonmonotonic_guided_start (long start, long end, long incr,
53dace
				     long chunk_size, long *istart, long *iend)
53dace
{
53dace
  return GOMP_loop_guided_start (start, end, incr, chunk_size, istart, iend);
53dace
}
53dace
53dace
bool
53dace
GOMP_loop_ull_nonmonotonic_dynamic_next (ull *istart, ull *iend)
53dace
{
53dace
  return GOMP_loop_ull_dynamic_next (istart, iend);
53dace
}
53dace
53dace
bool
53dace
GOMP_loop_ull_nonmonotonic_dynamic_start (bool up, ull start,
53dace
					  ull end, ull incr,
53dace
					  ull chunk_size,
53dace
					  ull *istart, ull *iend)
53dace
{
53dace
  return GOMP_loop_ull_dynamic_start (up, start, end, incr, chunk_size, istart,
53dace
				      iend);
53dace
}
53dace
53dace
bool
53dace
GOMP_loop_ull_nonmonotonic_guided_next (ull *istart, ull *iend)
53dace
{
53dace
  return GOMP_loop_ull_guided_next (istart, iend);
53dace
}
53dace
53dace
bool
53dace
GOMP_loop_ull_nonmonotonic_guided_start (bool up, ull start, ull end,
53dace
					 ull incr, ull chunk_size,
53dace
					 ull *istart, ull *iend)
53dace
{
53dace
  return GOMP_loop_ull_guided_start (up, start, end, incr, chunk_size, istart,
53dace
				     iend);
53dace
}
53dace
53dace
void
53dace
GOMP_parallel_loop_nonmonotonic_dynamic (void (*fn) (void *), void *data,
53dace
					 unsigned num_threads, long start,
53dace
					 long end, long incr, long chunk_size,
53dace
					 unsigned flags)
53dace
{
53dace
  GOMP_parallel_loop_dynamic (fn, data, num_threads, start, end, incr,
53dace
			      chunk_size, flags);
53dace
}
53dace
53dace
void
53dace
GOMP_parallel_loop_nonmonotonic_guided (void (*fn) (void *), void *data,
53dace
					unsigned num_threads, long start,
53dace
					long end, long incr, long chunk_size,
53dace
					unsigned flags)
53dace
{
53dace
  GOMP_parallel_loop_guided (fn, data, num_threads, start, end, incr,
53dace
			     chunk_size, flags);
53dace
}
53dace
53dace
#pragma  GCC visibility pop