]> git.ipfire.org Git - thirdparty/gcc.git/blobdiff - libgomp/config/nvptx/icv-device.c
Update copyright years.
[thirdparty/gcc.git] / libgomp / config / nvptx / icv-device.c
index 562db95f328e23974f7edf37372ba7a3cd60b14b..fba1eab33ef710d38408885afb10cb9228f63b39 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2015-2018 Free Software Foundation, Inc.
+/* Copyright (C) 2015-2024 Free Software Foundation, Inc.
    Contributed by Alexander Monakov <amonakov@ispras.ru>
 
    This file is part of the GNU Offloading and Multi Processing Library
 
 #include "libgomp.h"
 
+/* This is set to the ICV values of current GPU during device initialization,
+   when the offload image containing this libgomp portion is loaded.  */
+volatile struct gomp_offload_icvs GOMP_ADDITIONAL_ICVS;
+
 void
 omp_set_default_device (int device_num __attribute__((unused)))
 {
@@ -36,7 +40,13 @@ omp_set_default_device (int device_num __attribute__((unused)))
 int
 omp_get_default_device (void)
 {
-  return 0;
+  return GOMP_ADDITIONAL_ICVS.default_device;
+}
+
+int
+omp_get_initial_device (void)
+{
+  return GOMP_DEVICE_HOST_FALLBACK;
 }
 
 int
@@ -46,29 +56,51 @@ omp_get_num_devices (void)
 }
 
 int
-omp_get_num_teams (void)
+omp_is_initial_device (void)
 {
-  return gomp_num_teams_var + 1;
+  /* NVPTX is an accelerator-only target.  */
+  return 0;
 }
 
 int
-omp_get_team_num (void)
+omp_get_device_num (void)
 {
-  int ctaid;
-  asm ("mov.u32 %0, %%ctaid.x;" : "=r" (ctaid));
-  return ctaid;
+  return GOMP_ADDITIONAL_ICVS.device_num;
 }
 
 int
-omp_is_initial_device (void)
+omp_get_max_teams (void)
 {
-  /* NVPTX is an accelerator-only target.  */
-  return 0;
+  return GOMP_ADDITIONAL_ICVS.nteams;
+}
+
+void
+omp_set_num_teams (int num_teams)
+{
+  if (num_teams >= 0)
+    GOMP_ADDITIONAL_ICVS.nteams = num_teams;
+}
+
+int
+omp_get_teams_thread_limit (void)
+{
+  return GOMP_ADDITIONAL_ICVS.teams_thread_limit;
+}
+
+void
+omp_set_teams_thread_limit (int thread_limit)
+{
+  if (thread_limit >= 0)
+    GOMP_ADDITIONAL_ICVS.teams_thread_limit = thread_limit;
 }
 
 ialias (omp_set_default_device)
 ialias (omp_get_default_device)
+ialias (omp_get_initial_device)
 ialias (omp_get_num_devices)
-ialias (omp_get_num_teams)
-ialias (omp_get_team_num)
 ialias (omp_is_initial_device)
+ialias (omp_get_device_num)
+ialias (omp_get_max_teams)
+ialias (omp_set_num_teams)
+ialias (omp_get_teams_thread_limit)
+ialias (omp_set_teams_thread_limit)