Blame SOURCES/libgomp_nonshared.c

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