Blame SOURCES/libgomp_nonshared.c

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