Blame SOURCES/libgomp_nonshared.c

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