Blame SOURCES/libgomp_nonshared.c

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