| /* phsa.h -- interfacing between the gcc BRIG FE and the phsa runtime |
| Copyright (C) 2016-2020 Free Software Foundation, Inc. |
| Contributed by Pekka Jaaskelainen <pekka.jaaskelainen@parmance.com> |
| for General Processor Tech. |
| |
| This file is part of GCC. |
| |
| GCC is free software; you can redistribute it and/or modify it under |
| the terms of the GNU General Public License as published by the Free |
| Software Foundation; either version 3, or (at your option) any later |
| version. |
| |
| GCC is distributed in the hope that it will be useful, but WITHOUT ANY |
| WARRANTY; without even the implied warranty of MERCHANTABILITY or |
| FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
| for more details. |
| |
| You should have received a copy of the GNU General Public License |
| along with GCC; see the file COPYING3. If not see |
| <http://www.gnu.org/licenses/>. */ |
| |
| #ifndef PHSA_H |
| #define PHSA_H |
| |
| #include <stdint.h> |
| |
| /* This struct is used to pass information from the BRIG FE to the |
| runtime of the finalizer kernel, its control directives etc. |
| The data is passed raw in a special ELF section named |
| phsa.kerneldesc.kernel_function_name. */ |
| |
| typedef struct __attribute__((__packed__)) |
| { |
| /* Set to 1 in case the function is a kernel. */ |
| uint8_t is_kernel; |
| /* The size of the group segment used by the kernel. */ |
| uint32_t group_segment_size; |
| /* Size of the private segment used by a single work-item. */ |
| uint32_t private_segment_size; |
| /* Total size of the kernel arguments. */ |
| uint32_t kernarg_segment_size; |
| /* Maximum alignment of a kernel argument variable. */ |
| uint16_t kernarg_max_align; |
| /* Maximum size (in bytes) of dynamic group memory. */ |
| uint32_t max_dynamic_group_size; |
| /* Max number of work-items used to launch the kernel. */ |
| uint64_t max_flat_grid_size; |
| /* Max number of work-items in a work-group used to launch the kernel. */ |
| uint32_t max_flat_workgroup_size; |
| /* The grid size required by the kernel. */ |
| uint64_t required_grid_size[3]; |
| /* The work group size required by the kernel. */ |
| uint32_t required_workgroup_size[3]; |
| /* The number of dimensions required by the kernel. */ |
| uint8_t required_dim; |
| |
| } phsa_descriptor; |
| |
| /* The prefix to use in the ELF section containing descriptor for |
| a function. */ |
| |
| #define PHSA_DESC_SECTION_PREFIX "phsa.desc." |
| #define PHSA_HOST_DEF_PTR_PREFIX "__phsa.host_def." |
| |
| /* The frontend error messages are parsed by the host runtime. Known |
| prefix strings are used to separate the different runtime error |
| codes. */ |
| |
| #define PHSA_ERROR_PREFIX_INCOMPATIBLE_MODULE "Incompatible module: " |
| #define PHSA_ERROR_PREFIX_CORRUPTED_MODULE "Corrupted module: " |
| |
| /* Offsets of attributes in the PHSA context structs. |
| Used by -fphsa-wi-context-opt. */ |
| #define PHSA_CONTEXT_OFFS_WI_IDS 0 |
| #define PHSA_CONTEXT_OFFS_WG_IDS (PHSA_CONTEXT_OFFS_WI_IDS + 3 * 4) |
| #define PHSA_CONTEXT_WG_SIZES (PHSA_CONTEXT_OFFS_WG_IDS + 3 * 4) |
| #define PHSA_CONTEXT_CURRENT_WG_SIZES (PHSA_CONTEXT_WG_SIZES + 3 * 4) |
| |
| #endif |