diff options
Diffstat (limited to 'drivers/mxc/gpu-viv/hal/kernel/arch/gc_hal_kernel_hardware_func_flop_reset.c')
-rw-r--r-- | drivers/mxc/gpu-viv/hal/kernel/arch/gc_hal_kernel_hardware_func_flop_reset.c | 7020 |
1 files changed, 7020 insertions, 0 deletions
diff --git a/drivers/mxc/gpu-viv/hal/kernel/arch/gc_hal_kernel_hardware_func_flop_reset.c b/drivers/mxc/gpu-viv/hal/kernel/arch/gc_hal_kernel_hardware_func_flop_reset.c new file mode 100644 index 000000000000..6d57034e181d --- /dev/null +++ b/drivers/mxc/gpu-viv/hal/kernel/arch/gc_hal_kernel_hardware_func_flop_reset.c @@ -0,0 +1,7020 @@ +/**************************************************************************** +* +* The MIT License (MIT) +* +* Copyright (c) 2014 - 2020 Vivante Corporation +* +* Permission is hereby granted, free of charge, to any person obtaining a +* copy of this software and associated documentation files (the "Software"), +* to deal in the Software without restriction, including without limitation +* the rights to use, copy, modify, merge, publish, distribute, sublicense, +* and/or sell copies of the Software, and to permit persons to whom the +* Software is furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in +* all copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +* DEALINGS IN THE SOFTWARE. +* +***************************************************************************** +* +* The GPL License (GPL) +* +* Copyright (C) 2014 - 2020 Vivante Corporation +* +* This program 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 2 +* of the License, or (at your option) any later version. +* +* This program 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 this program; if not, write to the Free Software Foundation, +* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +* +***************************************************************************** +* +* Note: This software is released under dual MIT and GPL licenses. A +* recipient may use this file under the terms of either the MIT license or +* GPL License. If you wish to use only one license not the other, you can +* indicate your decision by deleting one of the above license notices in your +* version of this file. +* +*****************************************************************************/ + + +#include <gc_hal.h> +#include <gc_feature_database.h> + +#include "gc_hal_kernel_hardware_func_flop_reset.h" + +/* + * Flop reset. + * + * The flops can be reset with PPU, NN and TP programs. + * PPU: + * Requirements: + * 1. DP inst with all bins enabled. + * 2. Load inst which has at least two shader group, + * and every thread should load from different 64-byte address. + * 3. Stroe inst which has at least 6 threads, whose addresses are + * from different 64-byte address and flush. + * Case: + * * InImage: 64x6 = {1}, unsigned int8 + * * OutImage: 64x6, unsigned int8 + * * OutImage = InImage + InImage + * NN: + * Requirements: + * 1. A XYDP6 case. + * 2. NN cmd that uses only 1 core and make othere core's kernel size + * to be 0. + * Case: + * * Input: 3x2x1 = {1} + * * Kernel: 2x2x1 = {1} + * * Output: 2x1x1 + * TP: + * Requirements: + * 1. Run TP fc on all TP cores. + * Case: + * * Input: 1x1x2 = {1} + * * Kernel: 1x1x2x64 = {1} + * * Output: 1x64 + */ + +/* + * PPU. + */ +#define PPU_IMAGE_XSIZE 64 +#define PPU_IMAGE_YSIZE 6 +#define PPU_IMAGE_DATA 0x01010101 +#define MAX_PPU_INSTRUCTION_COUNT 16 +#define MAX_PPU_COMMAND_NUM 128 + +#define GCREG_SH_INSTRUCTION_TYPE_INVALID (~0U) + +typedef enum _gceFLOP_RESET_PPU_DATA { + gcvFLOP_RESET_PPU_INSTRUCTION = 0, + gcvFLOP_RESET_PPU_INPUT = 1, + gcvFLOP_RESET_PPU_OUTPUT = 2, + gcvFLOP_RESET_PPU_DATA_NUM +} +gceFLOP_RESET_PPU_DATA; + +/* + * NN convolution. + */ +#define MAX_NN_COMMAND_NUM 64 + +#define NN_KERNEL_XSIZE 2 +#define NN_KERNEL_YSIZE 2 +#define NN_KERNEL_ZSIZE 1 + +#define NN_INPUT_XSIZE 3 +#define NN_INPUT_YSIZE 2 +#define NN_INPUT_ZSIZE 1 + +#define NN_OUTPUT_XSIZE 2 +#define NN_OUTPUT_YSIZE 1 +#define NN_OUTPUT_ZSIZE 1 + +typedef enum _gceVIP_ARCH_TYPE { + gcvVIP_ARCH_TYPE_V6, + gcvVIP_ARCH_TYPE_V7, + gcvVIP_ARCH_TYPE_V8 +} +gceVIP_ARCH_TYPE; + +typedef enum _gceFLOP_RESET_NN_DATA { + gcvFLOP_RESET_NN_INSTRUCTION = 0, + gcvFLOP_RESET_NN_INPUT = 1, + gcvFLOP_RESET_NN_OUTPUT = 2, + gcvFLOP_RESET_NN_KERNEL = 3, + gcvFLOP_RESET_NN_DATA_NUM +} +gceFLOP_RESET_NN_DATA; + +#define TP_KERNEL_XSIZE 1 +#define TP_KERNEL_YSIZE 1 +#define TP_KERNEL_ZSIZE 2 +#define TP_KENREL_UNITS 64 + +#define TP_INPUT_XSIZE 1 +#define TP_INPUT_YSIZE 1 +#define TP_INPUT_ZSIZE 2 + +#define TP_OUTPUT_XSIZE 1 +#define TP_OUTPUT_YSIZE 64 +#define TP_OUTPUT_ZSIZE 1 + +typedef enum _gceFLOP_RESET_TP_DATA { + gcvFLOP_RESET_TP_INSTRUCTION = 0, + gcvFLOP_RESET_TP_INPUT = 1, + gcvFLOP_RESET_TP_OUTPUT = 2, + gcvFLOP_RESET_TP_KERNEL = 3, + gcvFLOP_RESET_TP_DATA_NUM +} +gceFLOP_RESET_TP_DATA; + +static gceSTATUS +_AllocateVideoMemory( + IN gckKERNEL Kernel, + IN gceVIDMEM_TYPE Type, + IN gctUINT32 AllocFlag, + IN OUT gcePOOL *Pool, + IN OUT gctSIZE_T *Bytes, + OUT gckVIDMEM_NODE *Node, + OUT gctPOINTER *Logical, + OUT gctUINT32 *Address + ) +{ + gceSTATUS status = gcvSTATUS_OK; + + gckVIDMEM_NODE bufferNode = gcvNULL; + gctPOINTER bufferLogical = gcvNULL; + gctUINT32 bufferAddress = 0; + gctSIZE_T bufferBytes = 0; + gcePOOL pool = gcvPOOL_DEFAULT; + + if (!Bytes || *Bytes == 0) + { + gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT); + } + + if (Pool) + { + pool = *Pool; + } + + bufferBytes = *Bytes; + + gcmkONERROR(gckKERNEL_AllocateVideoMemory( + Kernel, + 64, + Type, + AllocFlag, + &bufferBytes, + &pool, + &bufferNode + )); + + gcmkONERROR(gckVIDMEM_NODE_LockCPU( + Kernel, + bufferNode, + gcvFALSE, + gcvFALSE, + &bufferLogical + )); + + gcmkONERROR(gckVIDMEM_NODE_Lock( + Kernel, + bufferNode, + &bufferAddress + )); + + gcmkONERROR(gckOS_ZeroMemory(bufferLogical, bufferBytes)); + + *Bytes = bufferBytes; + + if (Pool) + { + *Pool = pool; + } + + if (Node) + { + *Node = bufferNode; + } + + if (Logical) + { + *Logical = bufferLogical; + } + + if (Address) + { + *Address = bufferAddress; + } + + return gcvSTATUS_OK; + +OnError: + if (bufferNode) + { + if (bufferAddress) + { + gcmkVERIFY_OK(gckVIDMEM_NODE_Unlock( + Kernel, + bufferNode, + 0, + gcvNULL + )); + } + + if (bufferLogical) + { + gcmkVERIFY_OK(gckVIDMEM_NODE_UnlockCPU( + Kernel, + bufferNode, + 0, + gcvFALSE, + gcvFALSE + )); + } + + gcmkVERIFY_OK(gckVIDMEM_NODE_Dereference( + Kernel, + bufferNode + )); + } + + return status; +} + +static gceSTATUS +_FreeVideoMemory( + IN gckKERNEL Kernel, + IN gckVIDMEM_NODE Node + ) +{ + gceSTATUS status = gcvSTATUS_OK; + + if (!Node) + { + gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT); + } + + gcmkVERIFY_OK(gckVIDMEM_NODE_Unlock( + Kernel, + Node, + 0, + gcvNULL + )); + + gcmkVERIFY_OK(gckVIDMEM_NODE_UnlockCPU( + Kernel, + Node, + 0, + gcvFALSE, + gcvFALSE + )); + + gcmkVERIFY_OK(gckVIDMEM_NODE_Dereference( + Kernel, + Node + )); + + return gcvSTATUS_OK; + +OnError: + return status; +} + +static gceSTATUS +_BitValue( + IN gctUINT8_PTR *Base, + IN gctUINT32 Value, + IN gctUINT32_PTR Offset, + IN gctUINT Length + ) +{ + gceSTATUS status = gcvSTATUS_OK; + + gctUINT32_PTR msb = (gctUINT32_PTR)(*Base) + 1, lsb = (gctUINT32_PTR)(*Base); + + gcmkASSERT(*Offset <= 32 && Length <= 32); + + if ((*Offset) < 32) + { + gctUINT32 end = (*Offset) + Length, data = *lsb; + + if (end < 32) + { + /************************************************************************ + * offset 32 64 * + * _________________________ * + * |_____|////|_|____________| * + * end * + ************************************************************************/ + data = (*lsb & ((1 << *Offset) - 1)); + data |= (*lsb & ~((1 << end) - 1)); + data |= (Value << *Offset); + + *lsb = data; + *Offset = end; + } + else if (end < 64) + { + /************************************************************************ + * offset 32 64 * + * _________________________ * + * |_____|//////|//|_________| * + * end * + ************************************************************************/ + gctUINT32 length_m = end - 32; + gctUINT32 data_l = (*lsb & ((1 << *Offset) - 1)); + gctUINT32 data_m = (*msb & ~((1 << length_m) - 1)); + + data_l |= (Value << *Offset); + data_m |= (Value >> (32 - *Offset)); + + *lsb = data_l; + + if (end > 32) + *msb = data_m; + + *Offset = length_m; + + *Base = (gctUINT8_PTR)msb; + } + + } + + return status; +} + +static gceSTATUS +_GetVIPCoreInfo( + IN gckHARDWARE Hardware, + OUT gceVIP_ARCH_TYPE *ArchType, + OUT gctUINT8 *DataType, + OUT gctUINT32 *CoreCount, + OUT gctUINT32 *Zdp, + OUT gctUINT32 *KernelBurstSize + ) +{ + gceSTATUS status = gcvSTATUS_OK; + + gcsFEATURE_DATABASE *database = (gcsFEATURE_DATABASE *)(Hardware->featureDatabase); + gceVIP_ARCH_TYPE archType; + gctUINT8 dataType = 0x0; + gctUINT32 coreCount = 0; + gctUINT32 zdp = 1; + gctUINT32 kernelBurstSize; + + gcmkASSERT(database); + + /* Choose one supported format. */ + if (database->NNCoreCount_INT8 > 0) + { + dataType = 0x0; + coreCount = database->NNCoreCount_INT8; + } + else if (database->NNCoreCount_INT16 > 0) + { + dataType = 0x4; + coreCount = database->NNCoreCount_INT16; + } + else if (database->NNCoreCount_FLOAT16 > 0) + { + dataType = 0x1; + coreCount = database->NNCoreCount_FLOAT16; + } + else if (database->NNCoreCount_BFLOAT > 0) + { + dataType = 0x7; + coreCount = database->NNCoreCount_BFLOAT; + } + else + { + gcmkONERROR(gcvSTATUS_NOT_SUPPORTED); + } + + if (database->NN_XYDP0) + { + archType = gcvVIP_ARCH_TYPE_V8; + } + else if (database->VIP_V7) + { + archType = gcvVIP_ARCH_TYPE_V7; + } + else + { + archType = gcvVIP_ARCH_TYPE_V6; + } + + zdp = database->NN_ZDP3 ? 3 : 1; + + kernelBurstSize = database->DDR_KERNEL_BURST_SIZE; + + if (ArchType) + { + *ArchType = archType; + } + + if (DataType) + { + *DataType = dataType; + } + + if (CoreCount) + { + *CoreCount = coreCount; + } + + if (Zdp) + { + *Zdp = zdp; + } + + if (KernelBurstSize) + { + *KernelBurstSize = kernelBurstSize; + } + + return gcvSTATUS_OK; + +OnError: + return status; +} + +static gceSTATUS +_GetMapIndex( + gctUINT8 DataType, + gctUINT32_PTR Index + ) +{ + gceSTATUS status = gcvSTATUS_OK; + + if (!Index) + { + gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT); + } + + switch (DataType) + { + case 0x1: + *Index = 1; + break; + + case 0x7: + *Index = 2; + break; + + default: + *Index = 0; + break; + } + + return gcvSTATUS_OK; + +OnError: + return status; +} + +static gceSTATUS +_GetNNDataSize( + IN gctUINT8 DataType, + OUT gctUINT32_PTR DataSize + ) +{ + gceSTATUS status = gcvSTATUS_OK; + + if (!DataSize) + { + gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT); + } + + switch (DataType) + { + case 0x2: + case 0x0: + *DataSize = 1; + break; + + case 0x4: + case 0x1: + case 0x7: + *DataSize = 2; + break; + + default: + gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT); + break; + } + + return gcvSTATUS_OK; + +OnError: + return status; +} + +/* + * PPU. + */ +static gceSTATUS +_ProgramPPUInput( + IN gckHARDWARE Hardware, + IN gctUINT32 InImageXSize, + IN gctUINT32 InImageYSize, + IN gctUINT32 AllocFlag, + IN OUT gcePOOL *Pool, + OUT gcsFUNCTION_EXECUTION_DATA *Data + ) +{ + gceSTATUS status = gcvSTATUS_OK; + + gctUINT32 itemBytes = 1; /* U8 format. */ + gckVIDMEM_NODE bufferNode = gcvNULL; + gctPOINTER bufferLogical = gcvNULL; + gctUINT32 bufferAddress = 0; + gctSIZE_T bufferBytes, bytes; + gctUINT32 *buffer = gcvNULL; + gctUINT32 i; + + bufferBytes = bytes = InImageXSize * InImageYSize * itemBytes; + + gcmkONERROR(_AllocateVideoMemory( + Hardware->kernel, + gcvVIDMEM_TYPE_BITMAP, + AllocFlag, + Pool, + &bufferBytes, + &bufferNode, + &bufferLogical, + &bufferAddress + )); + + buffer = (gctUINT32_PTR)bufferLogical; + + /* Fill the data. */ + for (i = 0; i < bytes / 4; i++) + { + buffer[i] = PPU_IMAGE_DATA; + } + + gcmkONERROR(gckVIDMEM_NODE_CleanCache( + Hardware->kernel, + bufferNode, + 0, + bufferLogical, + bytes + )); + +#if gcdDUMP_IN_KERNEL + gcmkDUMP(Hardware->os, "#[flop reset: ppu input]"); + gcmkDUMP_BUFFER( + Hardware->os, + gcvDUMP_BUFFER_KERNEL_COMMAND, + bufferLogical, + bufferAddress, + bytes + ); +#endif + + Data->bufVidMem = bufferNode; + Data->bufVidMemBytes = bufferBytes; + Data->address = bufferAddress; + Data->logical = bufferLogical; + Data->bytes = bytes; + + return gcvSTATUS_OK; + +OnError: + if (bufferNode) + { + gcmkVERIFY_OK(_FreeVideoMemory( + Hardware->kernel, + bufferNode + )); + } + + return status; +} + +static gceSTATUS +_ProgramPPUOutput( + IN gckHARDWARE Hardware, + IN gctUINT32 Width, + IN gctUINT32 Height, + IN gctUINT32 AllocFlag, + IN OUT gcePOOL *Pool, + OUT gcsFUNCTION_EXECUTION_DATA *Data + ) +{ + gceSTATUS status = gcvSTATUS_OK; + + gctUINT32 itemBytes = 1; + gckVIDMEM_NODE bufferNode = gcvNULL; + gctPOINTER bufferLogical = gcvNULL; + gctUINT32 bufferAddress = 0; + gctSIZE_T bufferBytes, bytes; + + bufferBytes = bytes = Width * Height * itemBytes; + + gcmkONERROR(_AllocateVideoMemory( + Hardware->kernel, + gcvVIDMEM_TYPE_BITMAP, + AllocFlag, + Pool, + &bufferBytes, + &bufferNode, + &bufferLogical, + &bufferAddress + )); + + gcmkONERROR(gckVIDMEM_NODE_CleanCache( + Hardware->kernel, + bufferNode, + 0, + bufferLogical, + bufferBytes + )); + + Data->bufVidMem = bufferNode; + Data->bufVidMemBytes = bufferBytes; + Data->address = bufferAddress; + Data->logical = bufferLogical; + Data->bytes = bytes; + + return gcvSTATUS_OK; + +OnError: + if (bufferNode) + { + gcmkVERIFY_OK(_FreeVideoMemory( + Hardware->kernel, + bufferNode + )); + } + + return status; +} + +static gctUINT32 +_SETBITS( + IN gctUINT32 Data, + IN gctUINT32 Start, + IN gctUINT32 End, + IN gctUINT32 Value + ) +{ + gctUINT32 data = Data; + gctUINT32 mask; + + if (End >= Start) + { + mask = ((~0ULL >> (63 - End + Start)) << Start); + data &= ~mask; + data |= ((Value) << Start) & mask; + return data; + } + else + { + mask = ((~0ULL >> (63 - Start + End)) << End); + data &= ~mask; + data |= ((Value) << End) & mask; + return data; + } +} + +static gctUINT32 +_SETBIT( + IN gctUINT32 Data, + IN gctUINT32 Position, + IN gctUINT32 Value + ) +{ + gctUINT32 data; + + data = _SETBITS(Data, Position, Position, Value); + + return data; +} + +static gctUINT32 +_GETBITS( + IN gctUINT32 Data, + IN gctUINT32 Start, + IN gctUINT32 End + ) +{ + gctUINT32 data = Data; + gctUINT32 mask; + + if (End >= Start) + { + mask = (~0ULL >> (63 - (End - Start))); + return (data >> Start) & mask; + } + else + { + mask = (~0ULL >> (63 - (Start - End))); + return (data >> End) & mask;; + } +} + +static gctUINT32 +_GETBIT( + IN gctUINT32 Data, + IN gctUINT32 Position + ) +{ + gctUINT32 data; + + data = _GETBITS(Data, Position, Position); + + return data; +} + +static gceSTATUS +gckPPU_SetImmediate( + IN gctUINT32 Where, + IN gctUINT32 Value, + IN gctUINT32 Type, + IN OUT gctUINT32_PTR Inst + ) +{ + gceSTATUS status = gcvSTATUS_OK; + + if (!Inst) + { + gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT); + } + + switch (Where) + { + case 0: + Inst[1] = ((((gctUINT32) (Inst[1])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 20:12) - (0 ? + 20:12) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 20:12) - (0 ? + 20:12) + 1))))))) << (0 ? + 20:12))) | (((gctUINT32) ((gctUINT32) (_GETBITS(Value, 8, 0)) & ((gctUINT32) ((((1 ? + 20:12) - (0 ? + 20:12) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 20:12) - (0 ? 20:12) + 1))))))) << (0 ? 20:12))); + Inst[1] = ((((gctUINT32) (Inst[1])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 29:22) - (0 ? + 29:22) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 29:22) - (0 ? + 29:22) + 1))))))) << (0 ? + 29:22))) | (((gctUINT32) ((gctUINT32) (_GETBITS(Value, 16, 9)) & ((gctUINT32) ((((1 ? + 29:22) - (0 ? + 29:22) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 29:22) - (0 ? 29:22) + 1))))))) << (0 ? 29:22))); + Inst[1] = ((((gctUINT32) (Inst[1])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 30:30) - (0 ? + 30:30) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 30:30) - (0 ? + 30:30) + 1))))))) << (0 ? + 30:30))) | (((gctUINT32) ((gctUINT32) (_GETBIT(Value, 17)) & ((gctUINT32) ((((1 ? + 30:30) - (0 ? + 30:30) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 30:30) - (0 ? 30:30) + 1))))))) << (0 ? 30:30))); + Inst[1] = ((((gctUINT32) (Inst[1])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:31) - (0 ? + 31:31) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:31) - (0 ? + 31:31) + 1))))))) << (0 ? + 31:31))) | (((gctUINT32) ((gctUINT32) (_GETBIT(Value, 18)) & ((gctUINT32) ((((1 ? + 31:31) - (0 ? + 31:31) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:31) - (0 ? 31:31) + 1))))))) << (0 ? 31:31))); + Inst[2] = ((((gctUINT32) (Inst[2])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 2:0) - (0 ? + 2:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 2:0) - (0 ? + 2:0) + 1))))))) << (0 ? + 2:0))) | (((gctUINT32) ((gctUINT32) (_GETBIT(Value, 19) | (Type << 1)) & ((gctUINT32) ((((1 ? + 2:0) - (0 ? + 2:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 2:0) - (0 ? 2:0) + 1))))))) << (0 ? 2:0))); + Inst[2] = ((((gctUINT32) (Inst[2])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 5:3) - (0 ? + 5:3) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 5:3) - (0 ? + 5:3) + 1))))))) << (0 ? + 5:3))) | (((gctUINT32) ((gctUINT32) (0x7) & ((gctUINT32) ((((1 ? + 5:3) - (0 ? + 5:3) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 5:3) - (0 ? 5:3) + 1))))))) << (0 ? 5:3))); + break; + + case 1: + Inst[2] = ((((gctUINT32) (Inst[2])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:7) - (0 ? + 15:7) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:7) - (0 ? + 15:7) + 1))))))) << (0 ? + 15:7))) | (((gctUINT32) ((gctUINT32) (_GETBITS(Value, 8, 0)) & ((gctUINT32) ((((1 ? + 15:7) - (0 ? + 15:7) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:7) - (0 ? 15:7) + 1))))))) << (0 ? 15:7))); + Inst[2] = ((((gctUINT32) (Inst[2])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 24:17) - (0 ? + 24:17) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 24:17) - (0 ? + 24:17) + 1))))))) << (0 ? + 24:17))) | (((gctUINT32) ((gctUINT32) (_GETBITS(Value, 16, 9)) & ((gctUINT32) ((((1 ? + 24:17) - (0 ? + 24:17) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 24:17) - (0 ? 24:17) + 1))))))) << (0 ? 24:17))); + Inst[2] = ((((gctUINT32) (Inst[2])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:25) - (0 ? + 25:25) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:25) - (0 ? + 25:25) + 1))))))) << (0 ? + 25:25))) | (((gctUINT32) ((gctUINT32) (_GETBIT(Value, 17)) & ((gctUINT32) ((((1 ? + 25:25) - (0 ? + 25:25) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:25) - (0 ? 25:25) + 1))))))) << (0 ? 25:25))); + Inst[2] = ((((gctUINT32) (Inst[2])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 26:26) - (0 ? + 26:26) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 26:26) - (0 ? + 26:26) + 1))))))) << (0 ? + 26:26))) | (((gctUINT32) ((gctUINT32) (_GETBIT(Value, 18)) & ((gctUINT32) ((((1 ? + 26:26) - (0 ? + 26:26) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 26:26) - (0 ? 26:26) + 1))))))) << (0 ? 26:26))); + Inst[2] = ((((gctUINT32) (Inst[2])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 29:27) - (0 ? + 29:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 29:27) - (0 ? + 29:27) + 1))))))) << (0 ? + 29:27))) | (((gctUINT32) ((gctUINT32) (_GETBIT(Value, 19) | (Type << 1)) & ((gctUINT32) ((((1 ? + 29:27) - (0 ? + 29:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 29:27) - (0 ? 29:27) + 1))))))) << (0 ? 29:27))); + Inst[3] = ((((gctUINT32) (Inst[3])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 2:0) - (0 ? + 2:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 2:0) - (0 ? + 2:0) + 1))))))) << (0 ? + 2:0))) | (((gctUINT32) ((gctUINT32) (0x7) & ((gctUINT32) ((((1 ? + 2:0) - (0 ? + 2:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 2:0) - (0 ? 2:0) + 1))))))) << (0 ? 2:0))); + break; + + case 2: + Inst[3] = ((((gctUINT32) (Inst[3])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 12:4) - (0 ? + 12:4) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 12:4) - (0 ? + 12:4) + 1))))))) << (0 ? + 12:4))) | (((gctUINT32) ((gctUINT32) (_GETBITS(Value, 8, 0)) & ((gctUINT32) ((((1 ? + 12:4) - (0 ? + 12:4) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 12:4) - (0 ? 12:4) + 1))))))) << (0 ? 12:4))); + Inst[3] = ((((gctUINT32) (Inst[3])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 21:14) - (0 ? + 21:14) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 21:14) - (0 ? + 21:14) + 1))))))) << (0 ? + 21:14))) | (((gctUINT32) ((gctUINT32) (_GETBITS(Value, 16, 9)) & ((gctUINT32) ((((1 ? + 21:14) - (0 ? + 21:14) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 21:14) - (0 ? 21:14) + 1))))))) << (0 ? 21:14))); + Inst[3] = ((((gctUINT32) (Inst[3])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 22:22) - (0 ? + 22:22) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 22:22) - (0 ? + 22:22) + 1))))))) << (0 ? + 22:22))) | (((gctUINT32) ((gctUINT32) (_GETBIT(Value, 17)) & ((gctUINT32) ((((1 ? + 22:22) - (0 ? + 22:22) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 22:22) - (0 ? 22:22) + 1))))))) << (0 ? 22:22))); + Inst[3] = ((((gctUINT32) (Inst[3])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 23:23) - (0 ? + 23:23) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 23:23) - (0 ? + 23:23) + 1))))))) << (0 ? + 23:23))) | (((gctUINT32) ((gctUINT32) (_GETBIT(Value, 18)) & ((gctUINT32) ((((1 ? + 23:23) - (0 ? + 23:23) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 23:23) - (0 ? 23:23) + 1))))))) << (0 ? 23:23))); + Inst[3] = ((((gctUINT32) (Inst[3])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 27:25) - (0 ? + 27:25) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 27:25) - (0 ? + 27:25) + 1))))))) << (0 ? + 27:25))) | (((gctUINT32) ((gctUINT32) (_GETBIT(Value, 19) | (Type << 1)) & ((gctUINT32) ((((1 ? + 27:25) - (0 ? + 27:25) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 27:25) - (0 ? 27:25) + 1))))))) << (0 ? 27:25))); + Inst[3] = ((((gctUINT32) (Inst[3])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 30:28) - (0 ? + 30:28) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 30:28) - (0 ? + 30:28) + 1))))))) << (0 ? + 30:28))) | (((gctUINT32) ((gctUINT32) (0x7) & ((gctUINT32) ((((1 ? + 30:28) - (0 ? + 30:28) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 30:28) - (0 ? 30:28) + 1))))))) << (0 ? 30:28))); + break; + } + + return gcvSTATUS_OK; + +OnError: + return status; +} + +static gceSTATUS +gckPPU_SetInstructionType( + IN gctUINT32 Type, + OUT gctUINT32_PTR Inst + ) +{ + gceSTATUS status = gcvSTATUS_OK; + + if (!Inst) + { + gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT); + } + + Inst[1] = ((((gctUINT32) (Inst[1])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 21:21) - (0 ? + 21:21) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 21:21) - (0 ? + 21:21) + 1))))))) << (0 ? + 21:21))) | (((gctUINT32) ((gctUINT32) (_GETBIT(Type, 0)) & ((gctUINT32) ((((1 ? + 21:21) - (0 ? + 21:21) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 21:21) - (0 ? 21:21) + 1))))))) << (0 ? 21:21))); + Inst[2] = ((((gctUINT32) (Inst[2])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:30) - (0 ? + 31:30) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:30) - (0 ? + 31:30) + 1))))))) << (0 ? + 31:30))) | (((gctUINT32) ((gctUINT32) (_GETBITS(Type, 2, 1)) & ((gctUINT32) ((((1 ? + 31:30) - (0 ? + 31:30) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:30) - (0 ? 31:30) + 1))))))) << (0 ? 31:30))); + + return gcvSTATUS_OK; + +OnError: + return status; +} + +static gceSTATUS +gckPPU_IsEndOfBB( + IN gckHARDWARE Hardware, + IN gctUINT32 OpCode, + OUT gctUINT32_PTR Inst +) +{ + gceSTATUS status = gcvSTATUS_OK; + + gcsFEATURE_DATABASE *database = (gcsFEATURE_DATABASE *)Hardware->featureDatabase; + gctUINT32 bits = 0; + + if (!Inst) + { + gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT); + } + + if (!database->SH_END_OF_BB) + { + return gcvSTATUS_OK; + } + + switch (OpCode) + { + case 0x09: + case 0x56: + case 0x0A: + case 0x0B: + case 0x0F: + case 0x31: + case 0x10: + bits = _SETBITS(Inst[1], 3, 3, 1); + Inst[1] = ((((gctUINT32) (Inst[1])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 10:3) - (0 ? + 10:3) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 10:3) - (0 ? + 10:3) + 1))))))) << (0 ? + 10:3))) | (((gctUINT32) ((gctUINT32) (bits) & ((gctUINT32) ((((1 ? + 10:3) - (0 ? + 10:3) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 10:3) - (0 ? 10:3) + 1))))))) << (0 ? 10:3))); + break; + + case 0x65: + case 0x66: + case 0x67: + case 0x68: + case 0x69: + case 0x6A: + case 0x6B: + case 0x6C: + case 0x46: + bits = _SETBITS(Inst[0], 2, 2, 1); + Inst[0] = ((((gctUINT32) (Inst[0])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 10:6) - (0 ? + 10:6) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 10:6) - (0 ? + 10:6) + 1))))))) << (0 ? + 10:6))) | (((gctUINT32) ((gctUINT32) (bits) & ((gctUINT32) ((((1 ? + 10:6) - (0 ? + 10:6) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 10:6) - (0 ? 10:6) + 1))))))) << (0 ? 10:6))); + break; + + case 0x32: + case 0x39: + case 0x33: + case 0x3A: + case 0x79: + case 0x34: + case 0x7A: + case 0x35: + bits = _SETBITS(Inst[0], 2, 2, 1); + Inst[0] = ((((gctUINT32) (Inst[0])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 10:6) - (0 ? + 10:6) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 10:6) - (0 ? + 10:6) + 1))))))) << (0 ? + 10:6))) | (((gctUINT32) ((gctUINT32) (bits) & ((gctUINT32) ((((1 ? + 10:6) - (0 ? + 10:6) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 10:6) - (0 ? 10:6) + 1))))))) << (0 ? 10:6))); + break; + + default: + if (OpCode != 0x16 && + OpCode != 0x24 && + OpCode != 0x14 && + OpCode != 0x15 && + OpCode != 0x17) + { + bits = _SETBITS(Inst[0], 2, 2, 1); + Inst[0] = ((((gctUINT32) (Inst[0])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 10:6) - (0 ? + 10:6) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 10:6) - (0 ? + 10:6) + 1))))))) << (0 ? + 10:6))) | (((gctUINT32) ((gctUINT32) (bits) & ((gctUINT32) ((((1 ? + 10:6) - (0 ? + 10:6) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 10:6) - (0 ? 10:6) + 1))))))) << (0 ? 10:6))); + } + break; + } + + return gcvSTATUS_OK; + +OnError: + return status; +} + +static gceSTATUS +gckPPU_AddOpCode( + IN gckHARDWARE Hardware, + IN gctUINT32 OpCode, + IN gctUINT32 Extended, + IN gctUINT32 Type, + IN OUT gctUINT32_PTR Inst + ) +{ + gceSTATUS status = gcvSTATUS_OK; + + if (!Inst) + { + gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT); + } + + Inst[0] = ((((gctUINT32) (Inst[0])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 5:0) - (0 ? + 5:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 5:0) - (0 ? + 5:0) + 1))))))) << (0 ? + 5:0))) | (((gctUINT32) ((gctUINT32) (_GETBITS(OpCode, 5, 0)) & ((gctUINT32) ((((1 ? + 5:0) - (0 ? + 5:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 5:0) - (0 ? 5:0) + 1))))))) << (0 ? 5:0))); + Inst[2] = ((((gctUINT32) (Inst[2])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 16:16) - (0 ? + 16:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 16:16) - (0 ? + 16:16) + 1))))))) << (0 ? + 16:16))) | (((gctUINT32) ((gctUINT32) (_GETBIT(OpCode, 6)) & ((gctUINT32) ((((1 ? + 16:16) - (0 ? + 16:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 16:16) - (0 ? 16:16) + 1))))))) << (0 ? 16:16))); + + switch (OpCode) + { + case 0x7F: + gcmkONERROR(gckPPU_SetImmediate(2, Extended, 0x2, Inst)); + break; + + case 0x45: + Inst[0] = ((((gctUINT32) (Inst[0])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:13) - (0 ? + 15:13) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:13) - (0 ? + 15:13) + 1))))))) << (0 ? + 15:13))) | (((gctUINT32) ((gctUINT32) (_GETBITS(Extended, 2, 0)) & ((gctUINT32) ((((1 ? + 15:13) - (0 ? + 15:13) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:13) - (0 ? 15:13) + 1))))))) << (0 ? 15:13))); + Inst[0] = _SETBIT(Inst[0], 31, _GETBIT(Extended, 3)); + Inst[1] = _SETBITS(Inst[1], 1, 0, _GETBITS(Extended, 5, 4)); + break; + + case 0x31: + case 0x09: + case 0x0F: + Inst[0] = ((((gctUINT32) (Inst[0])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 10:6) - (0 ? + 10:6) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 10:6) - (0 ? + 10:6) + 1))))))) << (0 ? + 10:6))) | (((gctUINT32) ((gctUINT32) (_GETBITS(Extended, 4, 0)) & ((gctUINT32) ((((1 ? + 10:6) - (0 ? + 10:6) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 10:6) - (0 ? 10:6) + 1))))))) << (0 ? 10:6))); + break; + + default: + break; + } + + if (Type != GCREG_SH_INSTRUCTION_TYPE_INVALID) + { + gcmkONERROR(gckPPU_SetInstructionType(Type, Inst)); + } + + gcmkONERROR(gckPPU_IsEndOfBB(Hardware, OpCode, Inst)); + + return gcvSTATUS_OK; + +OnError: + return status; +} + +static gceSTATUS +gckPPU_SetDestination( + IN gctUINT32 Address, + IN gctUINT32 WriteEnable, + IN gctUINT32 Saturate, + IN OUT gctUINT32_PTR Inst + ) +{ + gceSTATUS status = gcvSTATUS_OK; + + if (!Inst) + { + gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT); + } + + Inst[0] = ((((gctUINT32) (Inst[0])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 12:12) - (0 ? + 12:12) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 12:12) - (0 ? + 12:12) + 1))))))) << (0 ? + 12:12))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 12:12) - (0 ? + 12:12) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 12:12) - (0 ? 12:12) + 1))))))) << (0 ? 12:12))); + Inst[0] = ((((gctUINT32) (Inst[0])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 22:16) - (0 ? + 22:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 22:16) - (0 ? + 22:16) + 1))))))) << (0 ? + 22:16))) | (((gctUINT32) ((gctUINT32) (Address) & ((gctUINT32) ((((1 ? + 22:16) - (0 ? + 22:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 22:16) - (0 ? 22:16) + 1))))))) << (0 ? 22:16))); + Inst[0] = ((((gctUINT32) (Inst[0])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 26:23) - (0 ? + 26:23) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 26:23) - (0 ? + 26:23) + 1))))))) << (0 ? + 26:23))) | (((gctUINT32) ((gctUINT32) (WriteEnable) & ((gctUINT32) ((((1 ? + 26:23) - (0 ? + 26:23) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 26:23) - (0 ? 26:23) + 1))))))) << (0 ? 26:23))); + Inst[0] = ((((gctUINT32) (Inst[0])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 11:11) - (0 ? + 11:11) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 11:11) - (0 ? + 11:11) + 1))))))) << (0 ? + 11:11))) | (((gctUINT32) ((gctUINT32) (Saturate) & ((gctUINT32) ((((1 ? + 11:11) - (0 ? + 11:11) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 11:11) - (0 ? 11:11) + 1))))))) << (0 ? 11:11))); + + return gcvSTATUS_OK; + +OnError: + return status; +} + +#define gcdVX_ENABLE ((1 << 0) | (1 << 1) | (1 << 2) | (1 << 3)) +#define gcdVX_ENABLE4(X, Y, Z, W) ((1 << (X)) | (1 << (Y)) | (1 << (Z)) | (1 << (W))) +#define gcdVX_ENABLE1(X) (1 << (X)) +#define gcdVX_ENABLE2(X, Y) ((1 << (X)) | (1 << (Y))) +#define gcdVX_ENABLE3(X, Y, Z) ((1 << (X)) | (1 << (Y)) | (1 << (Z))) +#define gcdVX_SWIZZLE (0 | (1 << 2) | (2 << 4) | (3 << 6)) +#define gcdVX_SWIZZLE1(X) ((X) | ((X) << 2) | ((X) << 4) | ((X) << 6)) +#define gcdVX_SWIZZLE2(X, Y) ((X) | ((Y) << 2) | ((Y) << 4) | ((Y) << 6)) +#define gcdVX_SWIZZLE4(X, Y, Z, W) ((X) | ((Y) << 2) | ((Z) << 4) | ((W) << 6)) + +static gctUINT32 +gckPPU_GetPixel( + IN gctUINT32 Format + ) +{ + gctUINT32 pixel = 0; + + switch(Format) + { + case 0x7: + pixel = 15; + break; + + case 0x3: + case 0x6: + pixel = 7; + break; + + default: + pixel = 15; + break; + } + + return pixel; +} + +gceSTATUS +gckPPU_SetEVIS( + IN gctUINT32 Start, + IN gctUINT32 End, + IN gctUINT32 Evis, + IN OUT gctUINT32_PTR Inst + ) +{ + gceSTATUS status = gcvSTATUS_OK; + + if (!Inst) + { + gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT); + } + + Inst[0] = ((((gctUINT32) (Inst[0])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 26:23) - (0 ? + 26:23) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 26:23) - (0 ? + 26:23) + 1))))))) << (0 ? + 26:23))) | (((gctUINT32) ((gctUINT32) (Start) & ((gctUINT32) ((((1 ? + 26:23) - (0 ? + 26:23) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 26:23) - (0 ? 26:23) + 1))))))) << (0 ? 26:23))); + Inst[0] = _SETBITS(Inst[0], 30, 27, End); + Inst[1] = _SETBITS(Inst[1], 10, 2, Evis); + + return gcvSTATUS_OK; + +OnError: + return status; +} + +static gceSTATUS +gckPPU_SetSource( + IN gctUINT32 Where, + IN gctUINT32 Address, + IN gctUINT32 Swizzle, + IN gctUINT32 Type, + IN gctBOOL Negate, + IN gctBOOL Absolute, + IN gctUINT32 Relative, + IN OUT gctUINT32_PTR Inst + ) +{ + gceSTATUS status = gcvSTATUS_OK; + + if (!Inst) + { + gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT); + } + + switch (Where) + { + case 0: + Inst[1] = ((((gctUINT32) (Inst[1])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 11:11) - (0 ? + 11:11) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 11:11) - (0 ? + 11:11) + 1))))))) << (0 ? + 11:11))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 11:11) - (0 ? + 11:11) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 11:11) - (0 ? 11:11) + 1))))))) << (0 ? 11:11))); + Inst[1] = ((((gctUINT32) (Inst[1])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 20:12) - (0 ? + 20:12) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 20:12) - (0 ? + 20:12) + 1))))))) << (0 ? + 20:12))) | (((gctUINT32) ((gctUINT32) (Address) & ((gctUINT32) ((((1 ? + 20:12) - (0 ? + 20:12) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 20:12) - (0 ? 20:12) + 1))))))) << (0 ? 20:12))); + Inst[1] = ((((gctUINT32) (Inst[1])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 29:22) - (0 ? + 29:22) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 29:22) - (0 ? + 29:22) + 1))))))) << (0 ? + 29:22))) | (((gctUINT32) ((gctUINT32) (Swizzle) & ((gctUINT32) ((((1 ? + 29:22) - (0 ? + 29:22) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 29:22) - (0 ? 29:22) + 1))))))) << (0 ? 29:22))); + Inst[1] = ((((gctUINT32) (Inst[1])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 30:30) - (0 ? + 30:30) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 30:30) - (0 ? + 30:30) + 1))))))) << (0 ? + 30:30))) | (((gctUINT32) ((gctUINT32) (Negate) & ((gctUINT32) ((((1 ? + 30:30) - (0 ? + 30:30) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 30:30) - (0 ? 30:30) + 1))))))) << (0 ? 30:30))); + Inst[1] = ((((gctUINT32) (Inst[1])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:31) - (0 ? + 31:31) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:31) - (0 ? + 31:31) + 1))))))) << (0 ? + 31:31))) | (((gctUINT32) ((gctUINT32) (Absolute) & ((gctUINT32) ((((1 ? + 31:31) - (0 ? + 31:31) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:31) - (0 ? 31:31) + 1))))))) << (0 ? 31:31))); + Inst[2] = ((((gctUINT32) (Inst[2])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 2:0) - (0 ? + 2:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 2:0) - (0 ? + 2:0) + 1))))))) << (0 ? + 2:0))) | (((gctUINT32) ((gctUINT32) (Relative) & ((gctUINT32) ((((1 ? + 2:0) - (0 ? + 2:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 2:0) - (0 ? 2:0) + 1))))))) << (0 ? 2:0))); + Inst[2] = ((((gctUINT32) (Inst[2])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 5:3) - (0 ? + 5:3) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 5:3) - (0 ? + 5:3) + 1))))))) << (0 ? + 5:3))) | (((gctUINT32) ((gctUINT32) (Type) & ((gctUINT32) ((((1 ? + 5:3) - (0 ? + 5:3) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 5:3) - (0 ? 5:3) + 1))))))) << (0 ? 5:3))); + break; + + case 1: + Inst[2] = ((((gctUINT32) (Inst[2])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 6:6) - (0 ? + 6:6) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 6:6) - (0 ? + 6:6) + 1))))))) << (0 ? + 6:6))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 6:6) - (0 ? + 6:6) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 6:6) - (0 ? 6:6) + 1))))))) << (0 ? 6:6))); + Inst[2] = ((((gctUINT32) (Inst[2])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:7) - (0 ? + 15:7) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:7) - (0 ? + 15:7) + 1))))))) << (0 ? + 15:7))) | (((gctUINT32) ((gctUINT32) (Address) & ((gctUINT32) ((((1 ? + 15:7) - (0 ? + 15:7) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:7) - (0 ? 15:7) + 1))))))) << (0 ? 15:7))); + Inst[2] = ((((gctUINT32) (Inst[2])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 24:17) - (0 ? + 24:17) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 24:17) - (0 ? + 24:17) + 1))))))) << (0 ? + 24:17))) | (((gctUINT32) ((gctUINT32) (Swizzle) & ((gctUINT32) ((((1 ? + 24:17) - (0 ? + 24:17) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 24:17) - (0 ? 24:17) + 1))))))) << (0 ? 24:17))); + Inst[2] = ((((gctUINT32) (Inst[2])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:25) - (0 ? + 25:25) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:25) - (0 ? + 25:25) + 1))))))) << (0 ? + 25:25))) | (((gctUINT32) ((gctUINT32) (Negate) & ((gctUINT32) ((((1 ? + 25:25) - (0 ? + 25:25) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:25) - (0 ? 25:25) + 1))))))) << (0 ? 25:25))); + Inst[2] = ((((gctUINT32) (Inst[2])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 26:26) - (0 ? + 26:26) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 26:26) - (0 ? + 26:26) + 1))))))) << (0 ? + 26:26))) | (((gctUINT32) ((gctUINT32) (Absolute) & ((gctUINT32) ((((1 ? + 26:26) - (0 ? + 26:26) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 26:26) - (0 ? 26:26) + 1))))))) << (0 ? 26:26))); + Inst[2] = ((((gctUINT32) (Inst[2])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 29:27) - (0 ? + 29:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 29:27) - (0 ? + 29:27) + 1))))))) << (0 ? + 29:27))) | (((gctUINT32) ((gctUINT32) (Relative) & ((gctUINT32) ((((1 ? + 29:27) - (0 ? + 29:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 29:27) - (0 ? 29:27) + 1))))))) << (0 ? 29:27))); + Inst[3] = ((((gctUINT32) (Inst[3])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 2:0) - (0 ? + 2:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 2:0) - (0 ? + 2:0) + 1))))))) << (0 ? + 2:0))) | (((gctUINT32) ((gctUINT32) (Type) & ((gctUINT32) ((((1 ? + 2:0) - (0 ? + 2:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 2:0) - (0 ? 2:0) + 1))))))) << (0 ? 2:0))); + break; + + case 2: + Inst[3] = ((((gctUINT32) (Inst[3])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 3:3) - (0 ? + 3:3) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 3:3) - (0 ? + 3:3) + 1))))))) << (0 ? + 3:3))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 3:3) - (0 ? + 3:3) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ? 3:3))); + Inst[3] = ((((gctUINT32) (Inst[3])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 12:4) - (0 ? + 12:4) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 12:4) - (0 ? + 12:4) + 1))))))) << (0 ? + 12:4))) | (((gctUINT32) ((gctUINT32) (Address) & ((gctUINT32) ((((1 ? + 12:4) - (0 ? + 12:4) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 12:4) - (0 ? 12:4) + 1))))))) << (0 ? 12:4))); + Inst[3] = ((((gctUINT32) (Inst[3])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 21:14) - (0 ? + 21:14) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 21:14) - (0 ? + 21:14) + 1))))))) << (0 ? + 21:14))) | (((gctUINT32) ((gctUINT32) (Swizzle) & ((gctUINT32) ((((1 ? + 21:14) - (0 ? + 21:14) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 21:14) - (0 ? 21:14) + 1))))))) << (0 ? 21:14))); + Inst[3] = ((((gctUINT32) (Inst[3])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 22:22) - (0 ? + 22:22) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 22:22) - (0 ? + 22:22) + 1))))))) << (0 ? + 22:22))) | (((gctUINT32) ((gctUINT32) (Negate) & ((gctUINT32) ((((1 ? + 22:22) - (0 ? + 22:22) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 22:22) - (0 ? 22:22) + 1))))))) << (0 ? 22:22))); + Inst[3] = ((((gctUINT32) (Inst[3])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 23:23) - (0 ? + 23:23) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 23:23) - (0 ? + 23:23) + 1))))))) << (0 ? + 23:23))) | (((gctUINT32) ((gctUINT32) (Absolute) & ((gctUINT32) ((((1 ? + 23:23) - (0 ? + 23:23) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 23:23) - (0 ? 23:23) + 1))))))) << (0 ? 23:23))); + Inst[3] = ((((gctUINT32) (Inst[3])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 27:25) - (0 ? + 27:25) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 27:25) - (0 ? + 27:25) + 1))))))) << (0 ? + 27:25))) | (((gctUINT32) ((gctUINT32) (Relative) & ((gctUINT32) ((((1 ? + 27:25) - (0 ? + 27:25) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 27:25) - (0 ? 27:25) + 1))))))) << (0 ? 27:25))); + Inst[3] = ((((gctUINT32) (Inst[3])) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 30:28) - (0 ? + 30:28) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 30:28) - (0 ? + 30:28) + 1))))))) << (0 ? + 30:28))) | (((gctUINT32) ((gctUINT32) (Type) & ((gctUINT32) ((((1 ? + 30:28) - (0 ? + 30:28) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 30:28) - (0 ? 30:28) + 1))))))) << (0 ? 30:28))); + break; + + default: + gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT); + break; + } + + return gcvSTATUS_OK; + +OnError: + return status; +} + +static const gctUINT32 NEGATE_FLAG = 1 << 0; +static const gctUINT32 ABSOLUTE_FLAG = 1 << 1; + +static gceSTATUS +gckPPU_SetUniform( + IN gctUINT32 Where, + IN gctUINT32 Address, + IN gctUINT32 Swizzle, + IN gctUINT32 Modifiers, + OUT gctUINT32_PTR Inst + ) +{ + gceSTATUS status = gcvSTATUS_OK; + + gctBOOL negate = (Modifiers & NEGATE_FLAG) ? gcvTRUE : gcvFALSE; + gctBOOL absolute = (Modifiers & ABSOLUTE_FLAG) ? gcvTRUE : gcvFALSE; + + if (!Inst) + { + gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT); + } + + gcmkONERROR(gckPPU_SetSource( + Where, + Address, + Swizzle, + 0x2, + negate, + absolute, + 0, + Inst + )); + + return gcvSTATUS_OK; + +OnError: + return status; +} + +gceSTATUS +gckPPU_SetTempReg( + IN gctUINT32 Where, + IN gctUINT32 Address, + IN gctUINT32 Swizzle, + IN gctUINT32 Modifiers, + OUT gctUINT32_PTR Inst + ) +{ + gceSTATUS status = gcvSTATUS_OK; + + gctBOOL negate = (Modifiers & NEGATE_FLAG) ? gcvTRUE : gcvFALSE; + gctBOOL absolute = (Modifiers & ABSOLUTE_FLAG) ? gcvTRUE : gcvFALSE; + + if (!Inst) + { + gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT); + } + + gcmkONERROR(gckPPU_SetSource( + Where, + Address, + Swizzle, + 0x0, + negate, + absolute, + 0, + Inst + )); + + return gcvSTATUS_OK; + +OnError: + return status; +} + + +static gceSTATUS +_ProgramPPUInstruction( + IN gckHARDWARE Hardware, + IN gctUINT32 DataType, + IN gctUINT32 AllocFlag, + IN OUT gcePOOL *Pool, + OUT gctUINT32 *InstCount, + OUT gctUINT32 *RegCount, + OUT gcsFUNCTION_EXECUTION_DATA *Data + ) +{ + gceSTATUS status = gcvSTATUS_OK; + + gckVIDMEM_NODE bufferNode = gcvNULL; + gctPOINTER bufferLogical = gcvNULL; + gctUINT32 bufferAddress = 0; + gctSIZE_T bufferBytes, bytes; + + gctUINT32 instCount = 0; + gctUINT32_PTR inst = gcvNULL; + + gctUINT32 inImage1DataType = DataType; + gctUINT32 inImage2DataType = DataType; + gctUINT32 outImageDataType = DataType; + + if (!Data || !InstCount || !RegCount) + { + gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT); + } + + bufferBytes = bytes = gcmSIZEOF(gctUINT32) * MAX_PPU_INSTRUCTION_COUNT; + + gcmkONERROR(_AllocateVideoMemory( + Hardware->kernel, + gcvVIDMEM_TYPE_COMMAND, + AllocFlag, + Pool, + &bufferBytes, + &bufferNode, + &bufferLogical, + &bufferAddress + )); + + inst = (gctUINT32_PTR)bufferLogical; + + /* img_load.u8 r1, c0, r0.xy */ + gcmkONERROR(gckPPU_AddOpCode(Hardware, 0x79, 0, inImage1DataType, &inst[instCount])); + gcmkONERROR(gckPPU_SetDestination(1, gcdVX_ENABLE, gcvFALSE, &inst[instCount])); + gcmkONERROR(gckPPU_SetEVIS(0, gckPPU_GetPixel(inImage1DataType), 1, &inst[instCount])); + gcmkONERROR(gckPPU_SetUniform(0, 0, gcdVX_SWIZZLE, 0, &inst[instCount])); + gcmkONERROR(gckPPU_SetTempReg(1, 0, gcdVX_SWIZZLE2(0, 1), 0, &inst[instCount])); + instCount += 4; + + /*img_load.u8 r2, c0, r0.xy */ + gcmkONERROR(gckPPU_AddOpCode(Hardware, 0x79, 0, inImage2DataType, &inst[instCount])); + gcmkONERROR(gckPPU_SetDestination(2, gcdVX_ENABLE, gcvFALSE, &inst[instCount])); + gcmkONERROR(gckPPU_SetEVIS(0, gckPPU_GetPixel(inImage2DataType), 1, &inst[instCount])); + gcmkONERROR(gckPPU_SetUniform(0, 0, gcdVX_SWIZZLE, 0, &inst[instCount])); + gcmkONERROR(gckPPU_SetTempReg(1, 0, gcdVX_SWIZZLE2(0, 1), 0, &inst[instCount])); + instCount += 4; + + /* dp2x8 r1, r1, r2, c3_512 */ + gcmkONERROR(gckPPU_AddOpCode(Hardware, 0x45, 0x0B, outImageDataType, &inst[instCount])); + gcmkONERROR(gckPPU_SetDestination(1, gcdVX_ENABLE, gcvFALSE, &inst[instCount])); + gcmkONERROR(gckPPU_SetEVIS(0, 7, (inImage1DataType | (inImage2DataType << 3)), &inst[instCount])); + gcmkONERROR(gckPPU_SetTempReg(0, 1, gcdVX_SWIZZLE, 0, &inst[instCount])); + gcmkONERROR(gckPPU_SetTempReg(1, 2, gcdVX_SWIZZLE, 0, &inst[instCount])); + gcmkONERROR(gckPPU_SetSource (2, 2, gcdVX_SWIZZLE, 0x4, gcvFALSE, gcvFALSE, 0, &inst[instCount])); + instCount += 4; + + /* img_store.u8 r1, c2, r0.xy, r1 */ + gcmkONERROR(gckPPU_AddOpCode(Hardware, 0x7A, 0, outImageDataType, &inst[instCount])); + gcmkONERROR(gckPPU_SetEVIS(0, gckPPU_GetPixel(outImageDataType), 1, &inst[instCount])); + gcmkONERROR(gckPPU_SetUniform(0, 1, gcdVX_SWIZZLE, 0, &inst[instCount])); + gcmkONERROR(gckPPU_SetTempReg(1, 0, gcdVX_SWIZZLE2(0, 1), 0, &inst[instCount])); + gcmkONERROR(gckPPU_SetTempReg(2, 1, gcdVX_SWIZZLE, 0, &inst[instCount])); + instCount += 4; + + bytes = gcmSIZEOF(gctUINT32) * instCount; + + gcmkONERROR(gckVIDMEM_NODE_CleanCache( + Hardware->kernel, + bufferNode, + 0, + bufferLogical, + bytes + )); + +#if gcdDUMP_IN_KERNEL + gcmkDUMP(Hardware->os, "#[flop reset: ppu instruction]"); + gcmkDUMP_BUFFER( + Hardware->os, + gcvDUMP_BUFFER_KERNEL_COMMAND, + bufferLogical, + bufferAddress, + bytes + ); +#endif + + *InstCount = instCount; + *RegCount = 0x3; + + Data->bufVidMem = bufferNode; + Data->bufVidMemBytes = bufferBytes; + Data->address = bufferAddress; + Data->logical = bufferLogical; + Data->bytes = bytes; + + return gcvSTATUS_OK; + +OnError: + if (bufferNode) + { + gcmkVERIFY_OK(_FreeVideoMemory( + Hardware->kernel, + bufferNode + )); + } + + return status; +} + +static gceSTATUS +_ProgramPPUCommand( + IN gckHARDWARE Hardware, + IN gctUINT32 Stride, + IN gctUINT32 Width, + IN gctUINT32 Height, + IN gctUINT32 WorkDim, + IN gctUINT32 ValueOrder, + IN gctUINT32 GroupSizeX, + IN gctUINT32 GroupSizeY, + IN gctUINT32 GroupSizeZ, + IN gctUINT32 GlobalScaleX, + IN gctUINT32 GlobalScaleY, + IN gctUINT32 GlobalScaleZ, + IN gctUINT32 GlobalOffsetX, + IN gctUINT32 GlobalOffsetY, + IN gctUINT32 GlobalOffsetZ, + IN gctUINT32 ThreadAllocation, + IN gctUINT32 InImageAddress, + IN gctUINT32 OutImageAddress, + IN gctUINT32 InstAddress, + IN gctUINT32 InstCount, + IN gctUINT32 RegCount, + IN gctUINT32 AllocFlag, + IN OUT gcePOOL *Pool, + OUT gcsFUNCTION_COMMAND_PTR Command + ) +{ + gceSTATUS status = gcvSTATUS_OK; + + gckVIDMEM_NODE bufferNode = gcvNULL; + gctPOINTER bufferLogical = gcvNULL; + gctUINT32 bufferAddress = 0; + gctSIZE_T bufferBytes = 0; + gctUINT32 bytes = 0; + gctUINT8_PTR endLogical; + gctUINT32 endAddress; + gctUINT32 endBytes = 0; + gctUINT32_PTR commands = gcvNULL; + gctUINT32 index = 0; + gctUINT32 groupCountX = (Width + GlobalScaleX - 1) / GlobalScaleX; + gctUINT32 groupCountY = (Height + GlobalScaleY - 1) / GlobalScaleY; + gctUINT32 groupCountZ = 0; + + if (!Command) + { + gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT); + } + + bufferBytes = gcmSIZEOF(gctUINT32) * MAX_PPU_COMMAND_NUM; + + gcmkONERROR(_AllocateVideoMemory( + Hardware->kernel, + gcvVIDMEM_TYPE_COMMAND, + AllocFlag, + Pool, + &bufferBytes, + &bufferNode, + &bufferLogical, + &bufferAddress + )); + + commands = (gctUINT32_PTR)bufferLogical; + + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E13) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 1:0) - (0 ? + 1:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 1:0) - (0 ? + 1:0) + 1))))))) << (0 ? + 1:0))) | (((gctUINT32) (0x2 & ((gctUINT32) ((((1 ? + 1:0) - (0 ? + 1:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 1:0) - (0 ? 1:0) + 1))))))) << (0 ? 1:0))); + + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E02) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 4:0) - (0 ? + 4:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 4:0) - (0 ? + 4:0) + 1))))))) << (0 ? + 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 4:0) - (0 ? + 4:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 12:8) - (0 ? + 12:8) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 12:8) - (0 ? + 12:8) + 1))))))) << (0 ? + 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? + 12:8) - (0 ? + 12:8) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))); + + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x09 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))); + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 4:0) - (0 ? + 4:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 4:0) - (0 ? + 4:0) + 1))))))) << (0 ? + 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 4:0) - (0 ? + 4:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 12:8) - (0 ? + 12:8) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 12:8) - (0 ? + 12:8) + 1))))))) << (0 ? + 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? + 12:8) - (0 ? + 12:8) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))); + + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0xD800) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (4) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = InImageAddress; + commands[index++] = Stride; + commands[index++] = Height << 16 | Width; + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 2:0) - (0 ? + 2:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 2:0) - (0 ? + 2:0) + 1))))))) << (0 ? + 2:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? + 2:0) - (0 ? + 2:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 2:0) - (0 ? 2:0) + 1))))))) << (0 ? 2:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 3:3) - (0 ? + 3:3) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 3:3) - (0 ? + 3:3) + 1))))))) << (0 ? + 3:3))) | (((gctUINT32) ((gctUINT32) (0x0) & ((gctUINT32) ((((1 ? + 3:3) - (0 ? + 3:3) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ? 3:3))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 5:4) - (0 ? + 5:4) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 5:4) - (0 ? + 5:4) + 1))))))) << (0 ? + 5:4))) | (((gctUINT32) ((gctUINT32) (0x3) & ((gctUINT32) ((((1 ? + 5:4) - (0 ? + 5:4) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 5:4) - (0 ? 5:4) + 1))))))) << (0 ? 5:4))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 9:6) - (0 ? + 9:6) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 9:6) - (0 ? + 9:6) + 1))))))) << (0 ? + 9:6))) | (((gctUINT32) ((gctUINT32) (0x7) & ((gctUINT32) ((((1 ? + 9:6) - (0 ? + 9:6) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 9:6) - (0 ? 9:6) + 1))))))) << (0 ? 9:6))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 11:10) - (0 ? + 11:10) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 11:10) - (0 ? + 11:10) + 1))))))) << (0 ? + 11:10))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? + 11:10) - (0 ? + 11:10) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 11:10) - (0 ? 11:10) + 1))))))) << (0 ? 11:10))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 12:12) - (0 ? + 12:12) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 12:12) - (0 ? + 12:12) + 1))))))) << (0 ? + 12:12))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? + 12:12) - (0 ? + 12:12) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 12:12) - (0 ? 12:12) + 1))))))) << (0 ? 12:12))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:14) - (0 ? + 15:14) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:14) - (0 ? + 15:14) + 1))))))) << (0 ? + 15:14))) | (((gctUINT32) ((gctUINT32) (0x1) & ((gctUINT32) ((((1 ? + 15:14) - (0 ? + 15:14) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:14) - (0 ? 15:14) + 1))))))) << (0 ? 15:14))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 18:16) - (0 ? + 18:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 18:16) - (0 ? + 18:16) + 1))))))) << (0 ? + 18:16))) | (((gctUINT32) ((gctUINT32) (0x0) & ((gctUINT32) ((((1 ? + 18:16) - (0 ? + 18:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 18:16) - (0 ? 18:16) + 1))))))) << (0 ? 18:16))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 22:20) - (0 ? + 22:20) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 22:20) - (0 ? + 22:20) + 1))))))) << (0 ? + 22:20))) | (((gctUINT32) ((gctUINT32) (0x4) & ((gctUINT32) ((((1 ? + 22:20) - (0 ? + 22:20) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 22:20) - (0 ? 22:20) + 1))))))) << (0 ? 22:20))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 26:24) - (0 ? + 26:24) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 26:24) - (0 ? + 26:24) + 1))))))) << (0 ? + 26:24))) | (((gctUINT32) ((gctUINT32) (0x4) & ((gctUINT32) ((((1 ? + 26:24) - (0 ? + 26:24) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 26:24) - (0 ? 26:24) + 1))))))) << (0 ? 26:24))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 30:28) - (0 ? + 30:28) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 30:28) - (0 ? + 30:28) + 1))))))) << (0 ? + 30:28))) | (((gctUINT32) ((gctUINT32) (0x4) & ((gctUINT32) ((((1 ? + 30:28) - (0 ? + 30:28) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 30:28) - (0 ? 30:28) + 1))))))) << (0 ? 30:28))); + + commands[index++] = 0xFFFFFFFF; + + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0xD800 + 0x04) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (4) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = OutImageAddress; + commands[index++] = Stride; + commands[index++] = Height << 16 | Width; + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 2:0) - (0 ? + 2:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 2:0) - (0 ? + 2:0) + 1))))))) << (0 ? + 2:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? + 2:0) - (0 ? + 2:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 2:0) - (0 ? 2:0) + 1))))))) << (0 ? 2:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 3:3) - (0 ? + 3:3) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 3:3) - (0 ? + 3:3) + 1))))))) << (0 ? + 3:3))) | (((gctUINT32) ((gctUINT32) (0x0) & ((gctUINT32) ((((1 ? + 3:3) - (0 ? + 3:3) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ? 3:3))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 5:4) - (0 ? + 5:4) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 5:4) - (0 ? + 5:4) + 1))))))) << (0 ? + 5:4))) | (((gctUINT32) ((gctUINT32) (0x3) & ((gctUINT32) ((((1 ? + 5:4) - (0 ? + 5:4) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 5:4) - (0 ? 5:4) + 1))))))) << (0 ? 5:4))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 9:6) - (0 ? + 9:6) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 9:6) - (0 ? + 9:6) + 1))))))) << (0 ? + 9:6))) | (((gctUINT32) ((gctUINT32) (0x7) & ((gctUINT32) ((((1 ? + 9:6) - (0 ? + 9:6) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 9:6) - (0 ? 9:6) + 1))))))) << (0 ? 9:6))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 11:10) - (0 ? + 11:10) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 11:10) - (0 ? + 11:10) + 1))))))) << (0 ? + 11:10))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? + 11:10) - (0 ? + 11:10) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 11:10) - (0 ? 11:10) + 1))))))) << (0 ? 11:10))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 12:12) - (0 ? + 12:12) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 12:12) - (0 ? + 12:12) + 1))))))) << (0 ? + 12:12))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? + 12:12) - (0 ? + 12:12) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 12:12) - (0 ? 12:12) + 1))))))) << (0 ? 12:12))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:14) - (0 ? + 15:14) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:14) - (0 ? + 15:14) + 1))))))) << (0 ? + 15:14))) | (((gctUINT32) ((gctUINT32) (0x1) & ((gctUINT32) ((((1 ? + 15:14) - (0 ? + 15:14) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:14) - (0 ? 15:14) + 1))))))) << (0 ? 15:14))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 18:16) - (0 ? + 18:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 18:16) - (0 ? + 18:16) + 1))))))) << (0 ? + 18:16))) | (((gctUINT32) ((gctUINT32) (0x0) & ((gctUINT32) ((((1 ? + 18:16) - (0 ? + 18:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 18:16) - (0 ? 18:16) + 1))))))) << (0 ? 18:16))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 22:20) - (0 ? + 22:20) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 22:20) - (0 ? + 22:20) + 1))))))) << (0 ? + 22:20))) | (((gctUINT32) ((gctUINT32) (0x4) & ((gctUINT32) ((((1 ? + 22:20) - (0 ? + 22:20) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 22:20) - (0 ? 22:20) + 1))))))) << (0 ? 22:20))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 26:24) - (0 ? + 26:24) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 26:24) - (0 ? + 26:24) + 1))))))) << (0 ? + 26:24))) | (((gctUINT32) ((gctUINT32) (0x4) & ((gctUINT32) ((((1 ? + 26:24) - (0 ? + 26:24) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 26:24) - (0 ? 26:24) + 1))))))) << (0 ? 26:24))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 30:28) - (0 ? + 30:28) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 30:28) - (0 ? + 30:28) + 1))))))) << (0 ? + 30:28))) | (((gctUINT32) ((gctUINT32) (0x4) & ((gctUINT32) ((((1 ? + 30:28) - (0 ? + 30:28) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 30:28) - (0 ? 30:28) + 1))))))) << (0 ? 30:28))); + + commands[index++] = 0xFFFFFFFF; + + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0xD800 + 0x08) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (16) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = 0x55555555; + commands[index++] = 0x00000000; /* TCfg. */ + commands[index++] = 0x01234567; + commands[index++] = 0x89abcdef; + commands[index++] = 0x55555555; + commands[index++] = 0x01234567; + commands[index++] = 0x89abcdef; /* BinSelect. */ + commands[index++] = 0x00000000; /* AccumType, ConstantType, and PostShift. */ + commands[index++] = 0x00000000; + commands[index++] = 0x00000000; + commands[index++] = 0x00000000; + commands[index++] = 0x00000000; + commands[index++] = 0x00000000; + commands[index++] = 0x00000000; + commands[index++] = 0x00000000; + commands[index++] = 0x00000000; /* Constant. */ + + commands[index++] = 0xFFFFFFFF; + + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0240) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 1:0) - (0 ? + 1:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 1:0) - (0 ? + 1:0) + 1))))))) << (0 ? + 1:0))) | (((gctUINT32) ((gctUINT32) (0x2) & ((gctUINT32) ((((1 ? + 1:0) - (0 ? + 1:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 1:0) - (0 ? 1:0) + 1))))))) << (0 ? 1:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 6:4) - (0 ? + 6:4) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 6:4) - (0 ? + 6:4) + 1))))))) << (0 ? + 6:4))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? + 6:4) - (0 ? + 6:4) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 6:4) - (0 ? 6:4) + 1))))))) << (0 ? 6:4))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 26:24) - (0 ? + 26:24) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 26:24) - (0 ? + 26:24) + 1))))))) << (0 ? + 26:24))) | (((gctUINT32) ((gctUINT32) (0x2) & ((gctUINT32) ((((1 ? + 26:24) - (0 ? + 26:24) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 26:24) - (0 ? 26:24) + 1))))))) << (0 ? 26:24))); + + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x022C) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 0:0) - (0 ? + 0:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 0:0) - (0 ? + 0:0) + 1))))))) << (0 ? + 0:0))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 0:0) - (0 ? + 0:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 1:1) - (0 ? + 1:1) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 1:1) - (0 ? + 1:1) + 1))))))) << (0 ? + 1:1))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 1:1) - (0 ? + 1:1) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 2:2) - (0 ? + 2:2) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 2:2) - (0 ? + 2:2) + 1))))))) << (0 ? + 2:2))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 2:2) - (0 ? + 2:2) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 3:3) - (0 ? + 3:3) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 3:3) - (0 ? + 3:3) + 1))))))) << (0 ? + 3:3))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 3:3) - (0 ? + 3:3) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ? 3:3))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 4:4) - (0 ? + 4:4) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 4:4) - (0 ? + 4:4) + 1))))))) << (0 ? + 4:4))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 4:4) - (0 ? + 4:4) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4))); + + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0420) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 2:0) - (0 ? + 2:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 2:0) - (0 ? + 2:0) + 1))))))) << (0 ? + 2:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? + 2:0) - (0 ? + 2:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 2:0) - (0 ? 2:0) + 1))))))) << (0 ? 2:0))); + + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0403) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = RegCount; + + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0416) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = 0x00000000; + + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0409) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = 0x00000000; + + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x021F) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = 0x00000000; + + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0424) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = InstCount / 4; + + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x040A) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = InstAddress; + + if (gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_HALTI5)) + { + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x5580) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 1:1) - (0 ? + 1:1) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 1:1) - (0 ? + 1:1) + 1))))))) << (0 ? + 1:1))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? + 1:1) - (0 ? + 1:1) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1))); + } + else + { + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0218) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 12:12) - (0 ? + 12:12) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 12:12) - (0 ? + 12:12) + 1))))))) << (0 ? + 12:12))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? + 12:12) - (0 ? + 12:12) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 12:12) - (0 ? 12:12) + 1))))))) << (0 ? 12:12))); + } + + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x021A) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 0:0) - (0 ? + 0:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 0:0) - (0 ? + 0:0) + 1))))))) << (0 ? + 0:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? + 0:0) - (0 ? + 0:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))); + + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0425) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = InstCount / 4 - 1; + + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0402) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 5:0) - (0 ? + 5:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 5:0) - (0 ? + 5:0) + 1))))))) << (0 ? + 5:0))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 5:0) - (0 ? + 5:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 5:0) - (0 ? 5:0) + 1))))))) << (0 ? 5:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 12:8) - (0 ? + 12:8) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 12:8) - (0 ? + 12:8) + 1))))))) << (0 ? + 12:8))) | (((gctUINT32) ((gctUINT32) (~0) & ((gctUINT32) ((((1 ? + 12:8) - (0 ? + 12:8) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))); + + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0228) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = 0x00000000; + + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x02AA) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = 0x00000000; + + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E07) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = 0x00000000; + + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x040C) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = 0x00000000; + + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0201) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 5:0) - (0 ? + 5:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 5:0) - (0 ? + 5:0) + 1))))))) << (0 ? + 5:0))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 5:0) - (0 ? + 5:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 5:0) - (0 ? 5:0) + 1))))))) << (0 ? 5:0))); + + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E22) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = 0x00000000; + + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0412) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = 0x00000000; + + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0240) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 1:0) - (0 ? + 1:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 1:0) - (0 ? + 1:0) + 1))))))) << (0 ? + 1:0))) | (((gctUINT32) ((gctUINT32) (0x2) & ((gctUINT32) ((((1 ? + 1:0) - (0 ? + 1:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 1:0) - (0 ? 1:0) + 1))))))) << (0 ? 1:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 6:4) - (0 ? + 6:4) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 6:4) - (0 ? + 6:4) + 1))))))) << (0 ? + 6:4))) | (((gctUINT32) (0x0 & ((gctUINT32) ((((1 ? + 6:4) - (0 ? + 6:4) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 6:4) - (0 ? 6:4) + 1))))))) << (0 ? 6:4))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 26:24) - (0 ? + 26:24) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 26:24) - (0 ? + 26:24) + 1))))))) << (0 ? + 26:24))) | (((gctUINT32) ((gctUINT32) (0x3) & ((gctUINT32) ((((1 ? + 26:24) - (0 ? + 26:24) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 26:24) - (0 ? 26:24) + 1))))))) << (0 ? 26:24))); + + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0249) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = 0x00000000; + + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0247) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = ThreadAllocation; + + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x024B) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = GlobalOffsetX; + + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x024D) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = GlobalOffsetY; + + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x024F) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = GlobalOffsetZ; + + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0256) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = GlobalScaleX; + + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0257) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = GlobalScaleY; + + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0258) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = GlobalScaleZ; + + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0250) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (6) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = groupCountX - 1; + commands[index++] = groupCountY - 1; + commands[index++] = groupCountZ - 1; + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 9:0) - (0 ? + 9:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 9:0) - (0 ? + 9:0) + 1))))))) << (0 ? + 9:0))) | (((gctUINT32) ((gctUINT32) (GroupSizeX - 1) & ((gctUINT32) ((((1 ? + 9:0) - (0 ? + 9:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 9:0) - (0 ? 9:0) + 1))))))) << (0 ? 9:0))); + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 9:0) - (0 ? + 9:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 9:0) - (0 ? + 9:0) + 1))))))) << (0 ? + 9:0))) | (((gctUINT32) ((gctUINT32) (GroupSizeY - 1) & ((gctUINT32) ((((1 ? + 9:0) - (0 ? + 9:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 9:0) - (0 ? 9:0) + 1))))))) << (0 ? 9:0))); + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 9:0) - (0 ? + 9:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 9:0) - (0 ? + 9:0) + 1))))))) << (0 ? + 9:0))) | (((gctUINT32) ((gctUINT32) (GroupSizeZ - 1) & ((gctUINT32) ((((1 ? + 9:0) - (0 ? + 9:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 9:0) - (0 ? 9:0) + 1))))))) << (0 ? 9:0))); + commands[index++] = 0x00000000; + + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0248) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = 0xBADABEEB; + + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E03) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 5:5) - (0 ? + 5:5) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 5:5) - (0 ? + 5:5) + 1))))))) << (0 ? + 5:5))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? + 5:5) - (0 ? + 5:5) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ? 5:5))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 10:10) - (0 ? + 10:10) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 10:10) - (0 ? + 10:10) + 1))))))) << (0 ? + 10:10))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? + 10:10) - (0 ? + 10:10) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 10:10) - (0 ? 10:10) + 1))))))) << (0 ? 10:10))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 11:11) - (0 ? + 11:11) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 11:11) - (0 ? + 11:11) + 1))))))) << (0 ? + 11:11))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? + 11:11) - (0 ? + 11:11) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 11:11) - (0 ? 11:11) + 1))))))) << (0 ? 11:11))); + + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E02) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 4:0) - (0 ? + 4:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 4:0) - (0 ? + 4:0) + 1))))))) << (0 ? + 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 4:0) - (0 ? + 4:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 12:8) - (0 ? + 12:8) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 12:8) - (0 ? + 12:8) + 1))))))) << (0 ? + 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? + 12:8) - (0 ? + 12:8) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))); + + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x09 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))); + + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 4:0) - (0 ? + 4:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 4:0) - (0 ? + 4:0) + 1))))))) << (0 ? + 4:0))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 4:0) - (0 ? + 4:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 12:8) - (0 ? + 12:8) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 12:8) - (0 ? + 12:8) + 1))))))) << (0 ? + 12:8))) | (((gctUINT32) (0x07 & ((gctUINT32) ((((1 ? + 12:8) - (0 ? + 12:8) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 12:8) - (0 ? 12:8) + 1))))))) << (0 ? 12:8))); + + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E03) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 0:0) - (0 ? + 0:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 0:0) - (0 ? + 0:0) + 1))))))) << (0 ? + 0:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? + 0:0) - (0 ? + 0:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 1:1) - (0 ? + 1:1) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 1:1) - (0 ? + 1:1) + 1))))))) << (0 ? + 1:1))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? + 1:1) - (0 ? + 1:1) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 5:5) - (0 ? + 5:5) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 5:5) - (0 ? + 5:5) + 1))))))) << (0 ? + 5:5))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? + 5:5) - (0 ? + 5:5) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ? 5:5))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 10:10) - (0 ? + 10:10) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 10:10) - (0 ? + 10:10) + 1))))))) << (0 ? + 10:10))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? + 10:10) - (0 ? + 10:10) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 10:10) - (0 ? 10:10) + 1))))))) << (0 ? 10:10))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 11:11) - (0 ? + 11:11) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 11:11) - (0 ? + 11:11) + 1))))))) << (0 ? + 11:11))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? + 11:11) - (0 ? + 11:11) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 11:11) - (0 ? 11:11) + 1))))))) << (0 ? 11:11))); + + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E03) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 0:0) - (0 ? + 0:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 0:0) - (0 ? + 0:0) + 1))))))) << (0 ? + 0:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? + 0:0) - (0 ? + 0:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 1:1) - (0 ? + 1:1) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 1:1) - (0 ? + 1:1) + 1))))))) << (0 ? + 1:1))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? + 1:1) - (0 ? + 1:1) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 5:5) - (0 ? + 5:5) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 5:5) - (0 ? + 5:5) + 1))))))) << (0 ? + 5:5))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? + 5:5) - (0 ? + 5:5) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ? 5:5))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 10:10) - (0 ? + 10:10) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 10:10) - (0 ? + 10:10) + 1))))))) << (0 ? + 10:10))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? + 10:10) - (0 ? + 10:10) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 10:10) - (0 ? 10:10) + 1))))))) << (0 ? 10:10))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 11:11) - (0 ? + 11:11) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 11:11) - (0 ? + 11:11) + 1))))))) << (0 ? + 11:11))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? + 11:11) - (0 ? + 11:11) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 11:11) - (0 ? 11:11) + 1))))))) << (0 ? 11:11))); + + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0594) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 0:0) - (0 ? + 0:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 0:0) - (0 ? + 0:0) + 1))))))) << (0 ? + 0:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? + 0:0) - (0 ? + 0:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))); + + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E03) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 0:0) - (0 ? + 0:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 0:0) - (0 ? + 0:0) + 1))))))) << (0 ? + 0:0))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? + 0:0) - (0 ? + 0:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 1:1) - (0 ? + 1:1) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 1:1) - (0 ? + 1:1) + 1))))))) << (0 ? + 1:1))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? + 1:1) - (0 ? + 1:1) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 5:5) - (0 ? + 5:5) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 5:5) - (0 ? + 5:5) + 1))))))) << (0 ? + 5:5))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? + 5:5) - (0 ? + 5:5) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ? 5:5))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 10:10) - (0 ? + 10:10) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 10:10) - (0 ? + 10:10) + 1))))))) << (0 ? + 10:10))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? + 10:10) - (0 ? + 10:10) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 10:10) - (0 ? 10:10) + 1))))))) << (0 ? 10:10))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 11:11) - (0 ? + 11:11) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 11:11) - (0 ? + 11:11) + 1))))))) << (0 ? + 11:11))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? + 11:11) - (0 ? + 11:11) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 11:11) - (0 ? 11:11) + 1))))))) << (0 ? 11:11))); + + bytes = gcmSIZEOF(gctUINT32) * index; + + endLogical = (gctUINT8_PTR)bufferLogical + bytes; + endAddress = bufferAddress + bytes; + + if (Hardware->wlFE) + { + gcmkONERROR(gckWLFE_End(Hardware, gcvNULL, ~0U, &endBytes)); + gcmkONERROR(gckWLFE_End(Hardware, endLogical, endAddress, &endBytes)); + } + + bytes += endBytes; + + gcmkASSERT(bytes <= bufferBytes); + + gcmkONERROR(gckVIDMEM_NODE_CleanCache( + Hardware->kernel, + bufferNode, + 0, + bufferLogical, + bytes + )); + + Command->funcVidMem = bufferNode; + Command->funcVidMemBytes = bufferBytes; + Command->logical = bufferLogical; + Command->address = bufferAddress; + Command->bytes = bytes; + Command->endAddress = endAddress; + Command->endLogical = endLogical; + + return gcvSTATUS_OK; + +OnError: + if (bufferNode) + { + gcmkVERIFY_OK(_FreeVideoMemory( + Hardware->kernel, + bufferNode + )); + } + + return status; +} + +/* +** gckHARDWARE_ResetFlopWithPPU +** +** Generate the command to do PPU program as follows. +** InImage: 64x6 = {1}, unsigned int8 +** OutImage: 64x6, unsigned int8 +** OutImage = InImage + InImage +** +** INPUT: +** +** gckHARDWARE Hardware +** +** gctUINT32 AllocFlag +** +** gcePOOL *Pool +** +** OUTPUT: +** +** gcePOOL *Pool +** +** gcsFUNCTION_COMMAND *Command +*/ +gceSTATUS +gckHARDWARE_ResetFlopWithPPU( + IN gckHARDWARE Hardware, + IN gctUINT32 AllocFlag, + IN OUT gcePOOL *Pool, + OUT gcsFUNCTION_COMMAND *Command + ) +{ + gceSTATUS status = gcvSTATUS_OK; + + gctUINT32 dataType = 0x7; + gcsFEATURE_DATABASE *database = gcvNULL; + gctUINT32 numShaderCores; + gctUINT32 stride, width, height; + gctUINT32 workDim; + gctUINT32 valueOrder; + gctUINT32 groupSizeX, groupSizeY, groupSizeZ; + gctUINT32 globalScaleX, globalScaleY, globalScaleZ; + gctUINT32 globalOffsetX, globalOffsetY, globalOffsetZ; + gctUINT32 threadAllocation; + gctUINT32 inImageAddress = 0, outImageAddress = 0, instAddress = 0; + gctUINT32 instCount = 0, regCount = 0; + gctUINT32 dataCount; + gctPOINTER pointer = gcvNULL; + gcsFUNCTION_EXECUTION_DATA *data = gcvNULL; + gctUINT32 i; + + /* Exectution data. */ + dataCount = gcvFLOP_RESET_PPU_DATA_NUM; + gcmkASSERT(dataCount > 0); + + gcmkONERROR(gckOS_Allocate( + Hardware->os, + gcmSIZEOF(gcsFUNCTION_EXECUTION_DATA) * dataCount, + &pointer + )); + gckOS_ZeroMemory(pointer, gcmSIZEOF(gcsFUNCTION_EXECUTION_DATA) * dataCount); + data = (gcsFUNCTION_EXECUTION_DATA_PTR)pointer; + + database = (gcsFEATURE_DATABASE *)Hardware->featureDatabase; + + numShaderCores = database->NumShaderCores; + + stride = PPU_IMAGE_XSIZE * 1; + width = PPU_IMAGE_XSIZE; + height = PPU_IMAGE_YSIZE; + + gcmkONERROR(_ProgramPPUInput( + Hardware, + width, + height, + AllocFlag, + Pool, + &data[gcvFLOP_RESET_PPU_INPUT] + )); + + gcmkONERROR(_ProgramPPUOutput( + Hardware, + width, + height, + AllocFlag, + Pool, + &data[gcvFLOP_RESET_PPU_OUTPUT] + )); + + gcmkONERROR(_ProgramPPUInstruction( + Hardware, + dataType, + AllocFlag, + Pool, + &instCount, + ®Count, + &data[gcvFLOP_RESET_PPU_INSTRUCTION] + )); + + workDim = 0x2; + valueOrder = 0x2; + groupSizeX = 1; + groupSizeY = 1; + groupSizeZ = 0; + globalScaleX = 4; + globalScaleY = 1; + globalScaleZ = 0; + globalOffsetX = 0; + globalOffsetY = 0; + globalOffsetZ = 0; + threadAllocation = (groupSizeX * groupSizeY + numShaderCores * 4 - 1) / (numShaderCores * 4); + inImageAddress = data[gcvFLOP_RESET_PPU_INPUT].address; + outImageAddress = data[gcvFLOP_RESET_PPU_OUTPUT].address; + instAddress = data[gcvFLOP_RESET_PPU_INSTRUCTION].address; + + gcmkONERROR(_ProgramPPUCommand( + Hardware, + stride, + width, + height, + workDim, + valueOrder, + groupSizeX, + groupSizeY, + groupSizeZ, + globalScaleX, + globalScaleY, + globalScaleZ, + globalOffsetX, + globalOffsetY, + globalOffsetZ, + threadAllocation, + inImageAddress, + outImageAddress, + instAddress, + instCount, + regCount, + AllocFlag, + Pool, + Command + )); + + Command->data = data; + Command->dataCount = dataCount; + + return gcvSTATUS_OK; + +OnError: + if (Command->funcVidMem) + { + gcmkVERIFY_OK(_FreeVideoMemory( + Hardware->kernel, + Command->funcVidMem + )); + Command->funcVidMem = gcvNULL; + } + + if (data) + { + for (i = 0; i < dataCount; i++) + { + if (data[i].bufVidMem) + { + gcmkVERIFY_OK(_FreeVideoMemory( + Hardware->kernel, + data[i].bufVidMem + )); + } + } + + gcmkVERIFY_OK(gckOS_Free(Hardware->os, data)); + } + + return status; +} + +/* + * NN + */ +static gceSTATUS +_ProgramNNKernel( + IN gckHARDWARE Hardware, + IN gceVIP_ARCH_TYPE ArchType, + IN gctUINT32 CoreCount, + IN gctUINT32 Zdp, + IN gctUINT8 DataType, + IN gctUINT32 KernelXSize, + IN gctUINT32 KernelYSize, + IN gctUINT32 KernelZSize, + IN gctUINT32 AllocFlag, + IN OUT gcePOOL *Pool, + OUT gcsFUNCTION_EXECUTION_DATA *Data + ) +{ + gceSTATUS status = gcvSTATUS_OK; + + gctUINT32 filterBytes = 0; + gctUINT8_PTR kernels = gcvNULL; + gctUINT32 offset = 0; + gctUINT8_PTR kernelStreamSizePtr = gcvNULL; + gctUINT32 filterTotalCount = 1; + gctUINT32 itemBytes = 1; + gctUINT32 biasBytes = 4; + gckVIDMEM_NODE bufferNode = gcvNULL; + gctPOINTER bufferLogical = gcvNULL; + gctUINT32 bufferAddress = 0; + gctSIZE_T bufferBytes, bytes; + + gcmkONERROR(_GetNNDataSize(DataType, &itemBytes)); + + filterBytes = KernelXSize * KernelYSize * KernelZSize * itemBytes; + + /* Kernel buffer. */ + if (gcvVIP_ARCH_TYPE_V8 == ArchType) + { + /* Head (align to 64) + body (align to 64) + tail (align to 64). */ + gcmkASSERT(Zdp == 1 || Zdp == 3); + bufferBytes = 64 + gcmALIGN_NP2((gcmALIGN_NP2(filterBytes, Zdp * 3) * (Zdp * 3) * filterTotalCount) + (1 * (16 / itemBytes)), 64) + 64; + } + else + { + /* Head (align to 64) + body (align to 64). */ + bufferBytes = 64 + gcmALIGN_NP2(((filterBytes + biasBytes + 3) * filterTotalCount + 3), 64); + } + + gcmkONERROR(_AllocateVideoMemory( + Hardware->kernel, + gcvVIDMEM_TYPE_BITMAP, + AllocFlag, + Pool, + &bufferBytes, + &bufferNode, + &bufferLogical, + &bufferAddress + )); + + kernels = (gctUINT8_PTR)bufferLogical; + + /* V8 huffman encoder. */ + if (gcvVIP_ARCH_TYPE_V8 == ArchType) + { + gctUINT32 i = 0; + gctUINT8 rlt[][18] = { + {0}, /* uint8 */ + {1, 1, 0, 1}, /* fp16 */ + {7, 1}, /* int8 */ + {0}, /* uint16 */ + {3, 1, 0, 1}, /* int16 */ + {0}, /* uint4 */ + {0}, /* int4 */ + {1, 1, 0, 1} /* bf16 */ + }; + gctUINT8 map[][9] = { + {1, 8, 7, 0, 4, 5, 6, 2, 3}, + {1, 5, 0, 7, 8, 2, 6, 3, 4}, + {1, 0, 7, 8, 4, 5, 6, 2, 3}, + }; + gctBOOL bit16 = DataType == 0x4 || + DataType == 0x1 || + DataType == 0x7; + gctBOOL fp16 = DataType == 0x1; + gctUINT32 index = 0; + + if (Hardware->identity.customerID == 0x9f) + { + rlt[0][0] = 3; + rlt[0][1] = 1; + rlt[0][3] = 1; + } + + gcmkONERROR(_GetMapIndex(DataType, &index)); + + gcmkONERROR(_BitValue(&kernels, 0, &offset, 1)); /* precode */ + gcmkONERROR(_BitValue(&kernels, bit16, &offset, 1)); /* bit16 */ + gcmkONERROR(_BitValue(&kernels, fp16, &offset, 1)); /* fp16 */ + gcmkONERROR(_BitValue(&kernels, 0, &offset, 1)); /* reserved */ + gcmkONERROR(_BitValue(&kernels, 1, &offset, 4)); /* version, 1 */ + gcmkONERROR(_BitValue(&kernels, 4, &offset, 8)); /* zero run length size */ + + for (i = 0; i < 18; i++) + { + /* Zero run length x 18. */ + gcmkONERROR(_BitValue(&kernels, rlt[DataType][i], &offset, 8)); + } + + for (i = 0; i < 4; i++) + { + /* Map x 4. */ + gcmkONERROR(_BitValue(&kernels, (map[index][2 * i + 1] << 4) + map[index][2 * i], &offset, 8)); + } + + /* Avg bias */ + gcmkONERROR(_BitValue(&kernels, 0, &offset, 16)); + + /* Reserved, must zero. */ + gcmkONERROR(_BitValue(&kernels, 0, &offset, 16)); + + kernelStreamSizePtr = kernels; + + for (i = 0; i < CoreCount; i ++) + { + /* Stream size. */ + gcmkONERROR(_BitValue(&kernels, 0, &offset, 32)); + } + + kernels = (gctUINT8_PTR)bufferLogical + gcmALIGN_NP2((gctUINT32)((gctUINT8_PTR)kernels - (gctUINT8_PTR)bufferLogical), 64); + + switch (DataType) + { + case 0x4: + /* Huffman data: 00000018 00924600 */ + gcmkONERROR(_BitValue(&kernels, 0x04058000, &offset, 32)); + /* Huffman data. */ + gcmkONERROR(_BitValue(&kernels, 0x640101fc, &offset, 32)); + /* Huffman data. */ + gcmkONERROR(_BitValue(&kernels, 0x00001200, &offset, 32)); + + /* Only on core, stream size. */ + gcmkONERROR(_BitValue(&kernelStreamSizePtr, 0x0000006d, &offset, 32)); + + break; + + case 0x0: + case 0x2: + /* Huffman data. */ + gcmkONERROR(_BitValue(&kernels, 0xec000038, &offset, 32)); + + /* Only on core, stream size. */ + gcmkONERROR(_BitValue(&kernelStreamSizePtr, 0x35, &offset, 32)); + + break; + + case 0x1: + /* Huffman data: 0009db68 000006c0 000001f0 00000900 00024000. */ + gcmkONERROR(_BitValue(&kernels, 0x0009db68, &offset, 32)); + /* Huffman data. */ + gcmkONERROR(_BitValue(&kernels, 0x000006c0, &offset, 32)); + /* Huffman data. */ + gcmkONERROR(_BitValue(&kernels, 0x000001f0, &offset, 32)); + /* Huffman data. */ + gcmkONERROR(_BitValue(&kernels, 0x00000900, &offset, 32)); + /* Huffman data. */ + gcmkONERROR(_BitValue(&kernels, 0x00024000, &offset, 32)); + + /* Only on core, stream size. */ + gcmkONERROR(_BitValue(&kernelStreamSizePtr, 0x000000a3, &offset, 32)); + + break; + + case 0x7: + /* Huffman data: 0007fff8 7f00fdfc c0397f00 0900001f 40000000 00000002. */ + gcmkONERROR(_BitValue(&kernels, 0x0007fff8, &offset, 32)); + /* Huffman data. */ + gcmkONERROR(_BitValue(&kernels, 0x7f00fdfc, &offset, 32)); + /* Huffman data. */ + gcmkONERROR(_BitValue(&kernels, 0xc0397f00, &offset, 32)); + /* Huffman data. */ + gcmkONERROR(_BitValue(&kernels, 0x0900001f, &offset, 32)); + /* Huffman data. */ + gcmkONERROR(_BitValue(&kernels, 0x40000000, &offset, 32)); + /* Huffman data. */ + gcmkONERROR(_BitValue(&kernels, 0x00000002, &offset, 32)); + + /* Only on core, stream size. */ + gcmkONERROR(_BitValue(&kernelStreamSizePtr, 0x000000b2, &offset, 32)); + + break; + + default: + gcmkFATAL("Huffman encode not support this format! Please check!"); + break; + } + } + else + { + gctBOOL zeroAll = gcvFALSE; + gctUINT8 zrl = 0; + gctUINT16 vzNum = 1; + gctUINT32 bias = 0; + gctUINT32 totalSize = gcmALIGN_NP2((filterTotalCount * (filterBytes + biasBytes + 3) + 3), 64); + + gckOS_ZeroMemory(kernels, totalSize + 64); + + *((gctUINT32_PTR)kernels) = totalSize; + kernels += totalSize; + if (zeroAll) + { + /* + * Zrl & coreFilterCount, both compressed weight and bias are zero, + * the size (1 * 1 * 2 * 2 + 4 ) < 64, aligned to 64. + */ + *((gctUINT32_PTR)kernels) = (vzNum << (8 * itemBytes)); + } + else + { + gctINT16 value = (DataType == 0x1) ? 0x3c00 /*1.0f*/ : 1; + gctUINT32 i = 0; + + _BitValue(&kernels, zrl, &offset, 8); + _BitValue(&kernels, vzNum, &offset, 16); + _BitValue(&kernels, value, &offset, 8 * itemBytes); + _BitValue(&kernels, bias, &offset, 32); + + if (DataType == 0x3 || + DataType == 0x4) + { + _BitValue(&kernels, 0, &offset, 16); + } + + for (i = 1; i < filterBytes / itemBytes; i++) + { + _BitValue(&kernels, value, &offset, 8 * itemBytes); + } + } + } + + bytes = kernels + (offset + 7) / 8 - (gctUINT8_PTR)bufferLogical; + + gcmkONERROR(gckVIDMEM_NODE_CleanCache( + Hardware->kernel, + bufferNode, + 0, + bufferLogical, + bytes + )); + +#if gcdDUMP_IN_KERNEL + gcmkDUMP(Hardware->os, "#[flop reset: nn kernel]"); + gcmkDUMP_BUFFER( + Hardware->os, + gcvDUMP_BUFFER_KERNEL_COMMAND, + bufferLogical, + bufferAddress, + bytes + ); +#endif + + Data->bufVidMem = bufferNode; + Data->bufVidMemBytes = bufferBytes; + Data->address = bufferAddress; + Data->logical = bufferLogical; + Data->bytes = bytes; + + return gcvSTATUS_OK; + +OnError: + if (bufferNode) + { + gcmkVERIFY_OK(_FreeVideoMemory( + Hardware->kernel, + bufferNode + )); + } + + return status; +} + +static gceSTATUS +_ProgramNNInput( + IN gckHARDWARE Hardware, + IN gceVIP_ARCH_TYPE ArchType, + IN gctUINT8 DataType, + IN gctUINT32 InImageXSize, + IN gctUINT32 InImageYSize, + IN gctUINT32 InImageZSize, + IN gctUINT32 AllocFlag, + IN OUT gcePOOL *Pool, + OUT gcsFUNCTION_EXECUTION_DATA_PTR Data + ) +{ + gceSTATUS status = gcvSTATUS_OK; + + gctUINT32 inputSize = InImageXSize * InImageYSize * InImageZSize; + gctUINT32 itemBytes = 0; + gckVIDMEM_NODE bufferNode = gcvNULL; + gctPOINTER bufferLogical = gcvNULL; + gctUINT32 bufferAddress = 0; + gctSIZE_T bufferBytes, bytes; + gctUINT8_PTR buffer = gcvNULL; + + gctUINT32 i = 0; + gctUINT32 offset = 0; + gctUINT32 value[] = { + 1, /* uint8 */ + 0x3c00, /* fp16 */ + 1, /* int8 */ + 1, /* uint16 */ + 1, /* int16 */ + 1, /* uint4 */ + 1, /* int4 */ + 0x3f80 /* bf16 */ + }; + + gcmkONERROR(_GetNNDataSize(DataType, &itemBytes)); + + bufferBytes = inputSize * itemBytes; + + gcmkONERROR(_AllocateVideoMemory( + Hardware->kernel, + gcvVIDMEM_TYPE_BITMAP, + AllocFlag, + Pool, + &bufferBytes, + &bufferNode, + &bufferLogical, + &bufferAddress + )); + + if (gcvVIP_ARCH_TYPE_V8 == ArchType) + { + value[0x4] = 0x81; + } + + buffer = (gctUINT8_PTR)bufferLogical; + + for (i = 0; i < inputSize; i++) + { + _BitValue(&buffer, value[DataType], &offset, itemBytes * 8); + } + + bytes = buffer + (offset + 7) / 8 - (gctUINT8_PTR)bufferLogical; + + gcmkONERROR(gckVIDMEM_NODE_CleanCache( + Hardware->kernel, + bufferNode, + 0, + bufferLogical, + bytes + )); + +#if gcdDUMP_IN_KERNEL + gcmkDUMP(Hardware->os, "#[flop reset: nn input]"); + gcmkDUMP_BUFFER( + Hardware->os, + gcvDUMP_BUFFER_KERNEL_COMMAND, + bufferLogical, + bufferAddress, + bytes + ); +#endif + + Data->bufVidMem = bufferNode; + Data->bufVidMemBytes = bufferBytes; + Data->address = bufferAddress; + Data->logical = bufferLogical; + Data->bytes = bytes; + + return gcvSTATUS_OK; + +OnError: + gcmkVERIFY_OK(_FreeVideoMemory( + Hardware->kernel, + bufferNode + )); + + return status; +} + +static gceSTATUS +_ProgramNNOutput( + IN gckHARDWARE Hardware, + IN gctUINT8 DataType, + IN gctUINT32 OutputXSize, + IN gctUINT32 OutputYSize, + IN gctUINT32 OutputZSize, + IN gctUINT32 AllocFlag, + IN OUT gcePOOL *Pool, + OUT gcsFUNCTION_EXECUTION_DATA *Data + ) +{ + gceSTATUS status = gcvSTATUS_OK; + + gctUINT32 itemBytes = 0; + gckVIDMEM_NODE bufferNode = gcvNULL; + gctPOINTER bufferLogical = gcvNULL; + gctUINT32 bufferAddress = 0; + gctSIZE_T bufferBytes, bytes; + + if (!Data) + { + gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT); + } + + gcmkONERROR(_GetNNDataSize(DataType, &itemBytes)); + + bufferBytes = bytes = OutputXSize * OutputYSize * OutputZSize * itemBytes; + + gcmkONERROR(_AllocateVideoMemory( + Hardware->kernel, + gcvVIDMEM_TYPE_BITMAP, + AllocFlag, + Pool, + &bufferBytes, + &bufferNode, + &bufferLogical, + &bufferAddress + )); + + gcmkONERROR(gckVIDMEM_NODE_CleanCache( + Hardware->kernel, + bufferNode, + 0, + bufferLogical, + bytes + )); + + Data->bufVidMem = bufferNode; + Data->bufVidMemBytes = bufferBytes; + Data->address = bufferAddress; + Data->logical = bufferLogical; + Data->bytes = bytes; + + return gcvSTATUS_OK; + +OnError: + gcmkVERIFY_OK(_FreeVideoMemory( + Hardware->kernel, + bufferNode + )); + + return status; +} + +static gceSTATUS +_ProgramNNInstruction( + IN gckHARDWARE Hardware, + IN gceVIP_ARCH_TYPE ArchType, + IN gctUINT8 DataType, + IN gctUINT32 InImageXSize, + IN gctUINT32 InImageYSize, + IN gctUINT32 OutImageXSize, + IN gctUINT32 OutImageYSize, + IN gctUINT32 OutImageZSize, + IN gctUINT32 KernelXSize, + IN gctUINT32 KernelYSize, + IN gctUINT32 KernelZSize, + IN gctUINT32 InImageAddress, + IN gctUINT32 OutImageAddress, + IN gctUINT32 KernelAddress, + IN gctUINT32 AllocFlag, + IN gcePOOL *Pool, + OUT gcsFUNCTION_EXECUTION_DATA_PTR Data + ) +{ + gceSTATUS status = gcvSTATUS_OK; + + gckOS os = Hardware->os; + + gctUINT32 itemBytes; + gckVIDMEM_NODE bufferNode = gcvNULL; + gctPOINTER bufferLogical = gcvNULL; + gctUINT32 bufferAddress = 0; + gctSIZE_T bufferBytes, bytes; + gctUINT32 *command = gcvNULL; + + gctUINT8 kernelDataType; + gctUINT8 inImageDataType; + gctUINT8 outImageDataType; + + gctUINT32 kernelsPerCore = 1; + + gctUINT32 nnLayerFlush = 1; + gctUINT32 noZOffset = 0; + gctUINT32 imageEndAddress = 2048; + gctUINT32 postShift = 0; + gctUINT32 postShiftBit56 = 0; + gctUINT8 coefZP = 0; + gctUINT8 outputZP = 0; + + bufferBytes = bytes = gcmSIZEOF(gctUINT32) * ((ArchType == gcvVIP_ARCH_TYPE_V6) ? 16 : 32); + + /* Allocate buffer. */ + gcmkONERROR(_AllocateVideoMemory( + Hardware->kernel, + gcvVIDMEM_TYPE_COMMAND, + AllocFlag, + Pool, + &bufferBytes, + &bufferNode, + &bufferLogical, + &bufferAddress + )); + + command = (gctUINT32_PTR)bufferLogical; + + gcmkONERROR(_GetNNDataSize(DataType, &itemBytes)); + + kernelDataType = + inImageDataType = + outImageDataType = DataType; + + switch (ArchType) + { + case gcvVIP_ARCH_TYPE_V8: + noZOffset = 1; + outputZP = 0; + postShift = (gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_NN_FLOAT_POST_MULT)) ? 0x1f : 0; + postShiftBit56 = (gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_NN_FLOAT_POST_MULT)) ? 3 : 0; + break; + + case gcvVIP_ARCH_TYPE_V7: + case gcvVIP_ARCH_TYPE_V6: + postShift = (DataType == 0x2) ? 15 : 0; + break; + + default: + gcmkONERROR(gcvSTATUS_NOT_SUPPORTED); + break; + } + + /* gcregNNInstWord0 */ + gcmkWRITE_MEMORY( + command, + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 0:0) - (0 ? + 0:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 0:0) - (0 ? + 0:0) + 1))))))) << (0 ? + 0:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? + 0:0) - (0 ? + 0:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 1:1) - (0 ? + 1:1) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 1:1) - (0 ? + 1:1) + 1))))))) << (0 ? + 1:1))) | (((gctUINT32) ((gctUINT32) (noZOffset) & ((gctUINT32) ((((1 ? + 1:1) - (0 ? + 1:1) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 5:2) - (0 ? + 5:2) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 5:2) - (0 ? + 5:2) + 1))))))) << (0 ? + 5:2))) | (((gctUINT32) ((gctUINT32) (KernelXSize) & ((gctUINT32) ((((1 ? + 5:2) - (0 ? + 5:2) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 5:2) - (0 ? 5:2) + 1))))))) << (0 ? 5:2))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 19:6) - (0 ? + 19:6) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 19:6) - (0 ? + 19:6) + 1))))))) << (0 ? + 19:6))) | (((gctUINT32) ((gctUINT32) ((KernelZSize & 0x3FFF)) & ((gctUINT32) ((((1 ? + 19:6) - (0 ? + 19:6) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 19:6) - (0 ? 19:6) + 1))))))) << (0 ? 19:6))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 26:20) - (0 ? + 26:20) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 26:20) - (0 ? + 26:20) + 1))))))) << (0 ? + 26:20))) | (((gctUINT32) ((gctUINT32) (kernelsPerCore) & ((gctUINT32) ((((1 ? + 26:20) - (0 ? + 26:20) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 26:20) - (0 ? 26:20) + 1))))))) << (0 ? 26:20))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 28:27) - (0 ? + 28:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 28:27) - (0 ? + 28:27) + 1))))))) << (0 ? + 28:27))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? + 28:27) - (0 ? + 28:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 28:27) - (0 ? 28:27) + 1))))))) << (0 ? 28:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 29:29) - (0 ? + 29:29) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 29:29) - (0 ? + 29:29) + 1))))))) << (0 ? + 29:29))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? + 29:29) - (0 ? + 29:29) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 29:29) - (0 ? 29:29) + 1))))))) << (0 ? 29:29))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 30:30) - (0 ? + 30:30) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 30:30) - (0 ? + 30:30) + 1))))))) << (0 ? + 30:30))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? + 30:30) - (0 ? + 30:30) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 30:30) - (0 ? 30:30) + 1))))))) << (0 ? 30:30))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:31) - (0 ? + 31:31) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:31) - (0 ? + 31:31) + 1))))))) << (0 ? + 31:31))) | (((gctUINT32) ((gctUINT32) (nnLayerFlush) & ((gctUINT32) ((((1 ? + 31:31) - (0 ? + 31:31) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:31) - (0 ? 31:31) + 1))))))) << (0 ? 31:31))) + ); + + /* gcregNNInstWord1 */ + gcmkWRITE_MEMORY( + command, + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 18:6) - (0 ? + 18:6) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 18:6) - (0 ? + 18:6) + 1))))))) << (0 ? + 18:6))) | (((gctUINT32) ((gctUINT32) (InImageXSize) & ((gctUINT32) ((((1 ? + 18:6) - (0 ? + 18:6) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 18:6) - (0 ? 18:6) + 1))))))) << (0 ? 18:6))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:19) - (0 ? + 31:19) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:19) - (0 ? + 31:19) + 1))))))) << (0 ? + 31:19))) | (((gctUINT32) ((gctUINT32) (InImageYSize) & ((gctUINT32) ((((1 ? + 31:19) - (0 ? + 31:19) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:19) - (0 ? 31:19) + 1))))))) << (0 ? 31:19))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 1:1) - (0 ? + 1:1) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 1:1) - (0 ? + 1:1) + 1))))))) << (0 ? + 1:1))) | (((gctUINT32) ((gctUINT32) (kernelDataType >> 1) & ((gctUINT32) ((((1 ? + 1:1) - (0 ? + 1:1) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 3:3) - (0 ? + 3:3) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 3:3) - (0 ? + 3:3) + 1))))))) << (0 ? + 3:3))) | (((gctUINT32) ((gctUINT32) (inImageDataType >> 1) & ((gctUINT32) ((((1 ? + 3:3) - (0 ? + 3:3) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ? 3:3))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 5:5) - (0 ? + 5:5) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 5:5) - (0 ? + 5:5) + 1))))))) << (0 ? + 5:5))) | (((gctUINT32) ((gctUINT32) (outImageDataType >> 1) & ((gctUINT32) ((((1 ? + 5:5) - (0 ? + 5:5) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ? 5:5))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 0:0) - (0 ? + 0:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 0:0) - (0 ? + 0:0) + 1))))))) << (0 ? + 0:0))) | (((gctUINT32) ((gctUINT32) (kernelDataType & 0x1) & ((gctUINT32) ((((1 ? + 0:0) - (0 ? + 0:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 2:2) - (0 ? + 2:2) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 2:2) - (0 ? + 2:2) + 1))))))) << (0 ? + 2:2))) | (((gctUINT32) ((gctUINT32) (inImageDataType & 0x1) & ((gctUINT32) ((((1 ? + 2:2) - (0 ? + 2:2) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 4:4) - (0 ? + 4:4) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 4:4) - (0 ? + 4:4) + 1))))))) << (0 ? + 4:4))) | (((gctUINT32) ((gctUINT32) (outImageDataType & 0x1) & ((gctUINT32) ((((1 ? + 4:4) - (0 ? + 4:4) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4))) + ); + + /* gcregNNInstWord2 */ + gcmkWRITE_MEMORY( + command, + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 24:24) - (0 ? + 24:24) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 24:24) - (0 ? + 24:24) + 1))))))) << (0 ? + 24:24))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? + 24:24) - (0 ? + 24:24) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 24:24) - (0 ? 24:24) + 1))))))) << (0 ? 24:24))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:25) - (0 ? + 25:25) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:25) - (0 ? + 25:25) + 1))))))) << (0 ? + 25:25))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? + 25:25) - (0 ? + 25:25) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:25) - (0 ? 25:25) + 1))))))) << (0 ? 25:25))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 2:0) - (0 ? + 2:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 2:0) - (0 ? + 2:0) + 1))))))) << (0 ? + 2:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? + 2:0) - (0 ? + 2:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 2:0) - (0 ? 2:0) + 1))))))) << (0 ? 2:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 5:3) - (0 ? + 5:3) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 5:3) - (0 ? + 5:3) + 1))))))) << (0 ? + 5:3))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? + 5:3) - (0 ? + 5:3) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 5:3) - (0 ? 5:3) + 1))))))) << (0 ? 5:3))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 26:26) - (0 ? + 26:26) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 26:26) - (0 ? + 26:26) + 1))))))) << (0 ? + 26:26))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? + 26:26) - (0 ? + 26:26) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 26:26) - (0 ? 26:26) + 1))))))) << (0 ? 26:26))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 7:7) - (0 ? + 7:7) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 7:7) - (0 ? + 7:7) + 1))))))) << (0 ? + 7:7))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? + 7:7) - (0 ? + 7:7) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 7:7) - (0 ? 7:7) + 1))))))) << (0 ? 7:7))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 23:8) - (0 ? + 23:8) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 23:8) - (0 ? + 23:8) + 1))))))) << (0 ? + 23:8))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? + 23:8) - (0 ? + 23:8) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 23:8) - (0 ? 23:8) + 1))))))) << (0 ? 23:8))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) ((gctUINT32) (postShift) & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + ); + + /* gcregNNInstWord3 */ + gcmkWRITE_MEMORY( + command, + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 18:6) - (0 ? + 18:6) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 18:6) - (0 ? + 18:6) + 1))))))) << (0 ? + 18:6))) | (((gctUINT32) ((gctUINT32) (OutImageXSize) & ((gctUINT32) ((((1 ? + 18:6) - (0 ? + 18:6) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 18:6) - (0 ? 18:6) + 1))))))) << (0 ? 18:6))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:19) - (0 ? + 31:19) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:19) - (0 ? + 31:19) + 1))))))) << (0 ? + 31:19))) | (((gctUINT32) ((gctUINT32) (OutImageYSize) & ((gctUINT32) ((((1 ? + 31:19) - (0 ? + 31:19) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:19) - (0 ? 31:19) + 1))))))) << (0 ? 31:19))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 2:2) - (0 ? + 2:2) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 2:2) - (0 ? + 2:2) + 1))))))) << (0 ? + 2:2))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? + 2:2) - (0 ? + 2:2) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 3:3) - (0 ? + 3:3) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 3:3) - (0 ? + 3:3) + 1))))))) << (0 ? + 3:3))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? + 3:3) - (0 ? + 3:3) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ? 3:3))) + ); + + /* gcregNNInstWord4 */ + gcmkWRITE_MEMORY( + command, + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 13:0) - (0 ? + 13:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 13:0) - (0 ? + 13:0) + 1))))))) << (0 ? + 13:0))) | (((gctUINT32) ((gctUINT32) (OutImageZSize) & ((gctUINT32) ((((1 ? + 13:0) - (0 ? + 13:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 13:0) - (0 ? 13:0) + 1))))))) << (0 ? 13:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:14) - (0 ? + 15:14) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:14) - (0 ? + 15:14) + 1))))))) << (0 ? + 15:14))) | (((gctUINT32) ((gctUINT32) (0x0) & ((gctUINT32) ((((1 ? + 15:14) - (0 ? + 15:14) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:14) - (0 ? 15:14) + 1))))))) << (0 ? 15:14))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 24:18) - (0 ? + 24:18) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 24:18) - (0 ? + 24:18) + 1))))))) << (0 ? + 24:18))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 24:18) - (0 ? + 24:18) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 24:18) - (0 ? 24:18) + 1))))))) << (0 ? 24:18))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:25) - (0 ? + 31:25) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:25) - (0 ? + 31:25) + 1))))))) << (0 ? + 31:25))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 31:25) - (0 ? + 31:25) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:25) - (0 ? 31:25) + 1))))))) << (0 ? 31:25))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 16:16) - (0 ? + 16:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 16:16) - (0 ? + 16:16) + 1))))))) << (0 ? + 16:16))) | (((gctUINT32) ((gctUINT32) ((0 >> 3) & 0x1) & ((gctUINT32) ((((1 ? + 16:16) - (0 ? + 16:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 16:16) - (0 ? 16:16) + 1))))))) << (0 ? 16:16))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 17:17) - (0 ? + 17:17) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 17:17) - (0 ? + 17:17) + 1))))))) << (0 ? + 17:17))) | (((gctUINT32) ((gctUINT32) ((0 >> 3) & 0x1) & ((gctUINT32) ((((1 ? + 17:17) - (0 ? + 17:17) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 17:17) - (0 ? 17:17) + 1))))))) << (0 ? 17:17))) + ); + + /* gcregNNInstWord5 */ + gcmkWRITE_MEMORY( + command, + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:26) - (0 ? + 31:26) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:26) - (0 ? + 31:26) + 1))))))) << (0 ? + 31:26))) | (((gctUINT32) ((gctUINT32) (((KernelZSize >> 14) & 0x3F)) & ((gctUINT32) ((((1 ? + 31:26) - (0 ? + 31:26) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:26) - (0 ? 31:26) + 1))))))) << (0 ? 31:26))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:0) - (0 ? + 25:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:0) - (0 ? + 25:0) + 1))))))) << (0 ? + 25:0))) | (((gctUINT32) ((gctUINT32) ((KernelAddress >> 6)) & ((gctUINT32) ((((1 ? + 25:0) - (0 ? + 25:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:0) - (0 ? 25:0) + 1))))))) << (0 ? 25:0))) + ); + + /* gcregNNInstWord6 */ + gcmkWRITE_MEMORY(command, InImageAddress); + + /* gcregNNInstWord7 */ + gcmkWRITE_MEMORY(command, OutImageAddress); + + /* gcregNNInstWord8 */ + gcmkWRITE_MEMORY( + command, + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:12) - (0 ? + 15:12) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:12) - (0 ? + 15:12) + 1))))))) << (0 ? + 15:12))) | (((gctUINT32) ((gctUINT32) (KernelYSize) & ((gctUINT32) ((((1 ? + 15:12) - (0 ? + 15:12) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:12) - (0 ? 15:12) + 1))))))) << (0 ? 15:12))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:16) - (0 ? + 31:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:16) - (0 ? + 31:16) + 1))))))) << (0 ? + 31:16))) | (((gctUINT32) ((gctUINT32) (OutImageYSize) & ((gctUINT32) ((((1 ? + 31:16) - (0 ? + 31:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:16) - (0 ? 31:16) + 1))))))) << (0 ? 31:16))) + ); + + /* gcregNNInstWord9 */ + gcmkWRITE_MEMORY(command, 0); + + /* gcregNNInstWord10 */ + gcmkWRITE_MEMORY(command, 0); + + /* gcregNNInstWord11 */ + gcmkWRITE_MEMORY(command, 0); + + /* gcregNNInstWord12 */ + gcmkWRITE_MEMORY(command, 0); + + /* gcregNNInstWord13 */ + gcmkWRITE_MEMORY(command, 0); + + /* gcregNNInstWord14 */ + gcmkWRITE_MEMORY(command, imageEndAddress); + + /* gcregNNInstWord15 */ + gcmkWRITE_MEMORY( + command, + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 1:0) - (0 ? + 1:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 1:0) - (0 ? + 1:0) + 1))))))) << (0 ? + 1:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? + 1:0) - (0 ? + 1:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 1:0) - (0 ? 1:0) + 1))))))) << (0 ? 1:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 17:2) - (0 ? + 17:2) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 17:2) - (0 ? + 17:2) + 1))))))) << (0 ? + 17:2))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? + 17:2) - (0 ? + 17:2) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 17:2) - (0 ? 17:2) + 1))))))) << (0 ? 17:2))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 19:19) - (0 ? + 19:19) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 19:19) - (0 ? + 19:19) + 1))))))) << (0 ? + 19:19))) | (((gctUINT32) ((gctUINT32) (kernelDataType >> 2) & ((gctUINT32) ((((1 ? + 19:19) - (0 ? + 19:19) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 19:19) - (0 ? 19:19) + 1))))))) << (0 ? 19:19))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 20:20) - (0 ? + 20:20) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 20:20) - (0 ? + 20:20) + 1))))))) << (0 ? + 20:20))) | (((gctUINT32) ((gctUINT32) (inImageDataType >> 2) & ((gctUINT32) ((((1 ? + 20:20) - (0 ? + 20:20) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 20:20) - (0 ? 20:20) + 1))))))) << (0 ? 20:20))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 21:21) - (0 ? + 21:21) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 21:21) - (0 ? + 21:21) + 1))))))) << (0 ? + 21:21))) | (((gctUINT32) ((gctUINT32) (outImageDataType >> 2) & ((gctUINT32) ((((1 ? + 21:21) - (0 ? + 21:21) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 21:21) - (0 ? 21:21) + 1))))))) << (0 ? 21:21))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 27:22) - (0 ? + 27:22) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 27:22) - (0 ? + 27:22) + 1))))))) << (0 ? + 27:22))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? + 27:22) - (0 ? + 27:22) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 27:22) - (0 ? 27:22) + 1))))))) << (0 ? 27:22))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 29:28) - (0 ? + 29:28) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 29:28) - (0 ? + 29:28) + 1))))))) << (0 ? + 29:28))) | (((gctUINT32) ((gctUINT32) (postShiftBit56) & ((gctUINT32) ((((1 ? + 29:28) - (0 ? + 29:28) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 29:28) - (0 ? 29:28) + 1))))))) << (0 ? 29:28))) + ); + + /* V7 or V8 */ + if (ArchType == gcvVIP_ARCH_TYPE_V7 || + ArchType == gcvVIP_ARCH_TYPE_V8) + { + /* gcregNNInstWord16 */ + gcmkWRITE_MEMORY( + command, + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (InImageXSize * itemBytes) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:16) - (0 ? + 31:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:16) - (0 ? + 31:16) + 1))))))) << (0 ? + 31:16))) | (((gctUINT32) ((gctUINT32) (InImageYSize) & ((gctUINT32) ((((1 ? + 31:16) - (0 ? + 31:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:16) - (0 ? 31:16) + 1))))))) << (0 ? 31:16))) + ); + + /* gcregNNInstWord17 */ + gcmkWRITE_MEMORY( + command, + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (OutImageXSize * itemBytes) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:24) - (0 ? + 31:24) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:24) - (0 ? + 31:24) + 1))))))) << (0 ? + 31:24))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? + 31:24) - (0 ? + 31:24) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:24) - (0 ? 31:24) + 1))))))) << (0 ? 31:24))) + ); + + /* gcregNNInstWord18 */ + gcmkWRITE_MEMORY( + command, + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:0) - (0 ? + 25:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:0) - (0 ? + 25:0) + 1))))))) << (0 ? + 25:0))) | (((gctUINT32) ((gctUINT32) (0 >> 6) & ((gctUINT32) ((((1 ? + 25:0) - (0 ? + 25:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:0) - (0 ? 25:0) + 1))))))) << (0 ? 25:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 26:26) - (0 ? + 26:26) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 26:26) - (0 ? + 26:26) + 1))))))) << (0 ? + 26:26))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? + 26:26) - (0 ? + 26:26) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 26:26) - (0 ? 26:26) + 1))))))) << (0 ? 26:26))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 29:29) - (0 ? + 29:29) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 29:29) - (0 ? + 29:29) + 1))))))) << (0 ? + 29:29))) | (((gctUINT32) ((gctUINT32) ((0 >> 4) & 0x1) & ((gctUINT32) ((((1 ? + 29:29) - (0 ? + 29:29) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 29:29) - (0 ? 29:29) + 1))))))) << (0 ? 29:29))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 30:30) - (0 ? + 30:30) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 30:30) - (0 ? + 30:30) + 1))))))) << (0 ? + 30:30))) | (((gctUINT32) ((gctUINT32) ((0 >> 4) & 0x1) & ((gctUINT32) ((((1 ? + 30:30) - (0 ? + 30:30) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 30:30) - (0 ? 30:30) + 1))))))) << (0 ? 30:30))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 28:28) - (0 ? + 28:28) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 28:28) - (0 ? + 28:28) + 1))))))) << (0 ? + 28:28))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? + 28:28) - (0 ? + 28:28) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 28:28) - (0 ? 28:28) + 1))))))) << (0 ? 28:28))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:31) - (0 ? + 31:31) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:31) - (0 ? + 31:31) + 1))))))) << (0 ? + 31:31))) | (((gctUINT32) ((gctUINT32) (kernelDataType >> 3) & ((gctUINT32) ((((1 ? + 31:31) - (0 ? + 31:31) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:31) - (0 ? 31:31) + 1))))))) << (0 ? 31:31))) + ); + + /* 25:0 */ + gcmkWRITE_MEMORY( + command, + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:0) - (0 ? + 25:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:0) - (0 ? + 25:0) + 1))))))) << (0 ? + 25:0))) | (((gctUINT32) ((gctUINT32) (0xFFFFFFFF >> 6) & ((gctUINT32) ((((1 ? + 25:0) - (0 ? + 25:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:0) - (0 ? 25:0) + 1))))))) << (0 ? 25:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 30:30) - (0 ? + 30:30) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 30:30) - (0 ? + 30:30) + 1))))))) << (0 ? + 30:30))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? + 30:30) - (0 ? + 30:30) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 30:30) - (0 ? 30:30) + 1))))))) << (0 ? 30:30))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:31) - (0 ? + 31:31) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:31) - (0 ? + 31:31) + 1))))))) << (0 ? + 31:31))) | (((gctUINT32) ((gctUINT32) (inImageDataType >> 3) & ((gctUINT32) ((((1 ? + 31:31) - (0 ? + 31:31) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:31) - (0 ? 31:31) + 1))))))) << (0 ? 31:31))) + ); + + /* GCREG_NN_INST_WORD20 */ + gcmkWRITE_MEMORY( + command, + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:0) - (0 ? + 25:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:0) - (0 ? + 25:0) + 1))))))) << (0 ? + 25:0))) | (((gctUINT32) ((gctUINT32) (0 >> 6) & ((gctUINT32) ((((1 ? + 25:0) - (0 ? + 25:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:0) - (0 ? 25:0) + 1))))))) << (0 ? 25:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 26:26) - (0 ? + 26:26) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 26:26) - (0 ? + 26:26) + 1))))))) << (0 ? + 26:26))) | (((gctUINT32) ((gctUINT32) (outImageDataType >> 3) & ((gctUINT32) ((((1 ? + 26:26) - (0 ? + 26:26) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 26:26) - (0 ? 26:26) + 1))))))) << (0 ? 26:26))) + ); + + /* 25:0 */ + gcmkWRITE_MEMORY( + command, + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:0) - (0 ? + 25:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:0) - (0 ? + 25:0) + 1))))))) << (0 ? + 25:0))) | (((gctUINT32) ((gctUINT32) (0xFFFFFFFF >> 6) & ((gctUINT32) ((((1 ? + 25:0) - (0 ? + 25:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:0) - (0 ? 25:0) + 1))))))) << (0 ? 25:0))) + ); + + /*GCREG_NN_INST_WORD22*/ + gcmkWRITE_MEMORY( + command, + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 7:0) - (0 ? + 7:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 7:0) - (0 ? + 7:0) + 1))))))) << (0 ? + 7:0))) | (((gctUINT32) ((gctUINT32) (coefZP) & ((gctUINT32) ((((1 ? + 7:0) - (0 ? + 7:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 7:0) - (0 ? 7:0) + 1))))))) << (0 ? 7:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:8) - (0 ? + 15:8) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:8) - (0 ? + 15:8) + 1))))))) << (0 ? + 15:8))) | (((gctUINT32) ((gctUINT32) (outputZP) & ((gctUINT32) ((((1 ? + 15:8) - (0 ? + 15:8) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:8) - (0 ? 15:8) + 1))))))) << (0 ? 15:8))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 16:16) - (0 ? + 16:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 16:16) - (0 ? + 16:16) + 1))))))) << (0 ? + 16:16))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? + 16:16) - (0 ? + 16:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 16:16) - (0 ? 16:16) + 1))))))) << (0 ? 16:16))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 17:17) - (0 ? + 17:17) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 17:17) - (0 ? + 17:17) + 1))))))) << (0 ? + 17:17))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? + 17:17) - (0 ? + 17:17) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 17:17) - (0 ? 17:17) + 1))))))) << (0 ? 17:17))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:18) - (0 ? + 25:18) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:18) - (0 ? + 25:18) + 1))))))) << (0 ? + 25:18))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? + 25:18) - (0 ? + 25:18) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:18) - (0 ? 25:18) + 1))))))) << (0 ? 25:18))) + ); + + /*GCREG_NN_INST_WORD23*/ + gcmkWRITE_MEMORY(command, 0); + + /*GCREG_NN_INST_WORD24*/ + gcmkWRITE_MEMORY( + command, + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 3:0) - (0 ? + 3:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 3:0) - (0 ? + 3:0) + 1))))))) << (0 ? + 3:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? + 3:0) - (0 ? + 3:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 3:0) - (0 ? 3:0) + 1))))))) << (0 ? 3:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:4) - (0 ? + 31:4) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:4) - (0 ? + 31:4) + 1))))))) << (0 ? + 31:4))) | (((gctUINT32) ((gctUINT32) (0 >> 4) & ((gctUINT32) ((((1 ? + 31:4) - (0 ? + 31:4) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:4) - (0 ? 31:4) + 1))))))) << (0 ? 31:4))) + ); + + /*GCREG_NN_INST_WORD25*/ + gcmkWRITE_MEMORY( + command, + ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 3:0) - (0 ? + 3:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 3:0) - (0 ? + 3:0) + 1))))))) << (0 ? + 3:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? + 3:0) - (0 ? + 3:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 3:0) - (0 ? 3:0) + 1))))))) << (0 ? 3:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:4) - (0 ? + 31:4) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:4) - (0 ? + 31:4) + 1))))))) << (0 ? + 31:4))) | (((gctUINT32) ((gctUINT32) (0 >> 4) & ((gctUINT32) ((((1 ? + 31:4) - (0 ? + 31:4) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:4) - (0 ? 31:4) + 1))))))) << (0 ? 31:4))) + ); + } + + gcmkONERROR(gckVIDMEM_NODE_CleanCache( + Hardware->kernel, + bufferNode, + 0, + bufferLogical, + bytes + )); + +#if gcdDUMP_IN_KERNEL + gcmkDUMP(Hardware->os, "#[flop reset: nn instruction]"); + gcmkDUMP_BUFFER( + Hardware->os, + gcvDUMP_BUFFER_KERNEL_COMMAND, + bufferLogical, + bufferAddress, + bytes + ); +#endif + + Data->bufVidMem = bufferNode; + Data->bufVidMemBytes = bufferBytes; + Data->address = bufferAddress; + Data->logical = bufferLogical; + Data->bytes = bytes; + + return gcvSTATUS_OK; + +OnError: + if (bufferNode) + { + gcmkVERIFY_OK(_FreeVideoMemory( + Hardware->kernel, + bufferNode + )); + } + + return status; +} + +static gceSTATUS +_ProgramNNCommand( + IN gckHARDWARE Hardware, + IN gceVIP_ARCH_TYPE ArchType, + IN gctUINT32 KernelBurstSize, + IN gctUINT32 InstAddress, + IN gctUINT32 AllocFlag, + IN gcePOOL *Pool, + OUT gcsFUNCTION_COMMAND_PTR Command + ) +{ + gceSTATUS status = gcvSTATUS_OK; + + gckVIDMEM_NODE bufferNode = gcvNULL; + gctPOINTER bufferLogical = gcvNULL; + gctUINT32 bufferAddress = 0; + gctSIZE_T bufferBytes; + gctUINT32 bytes; + gctUINT8_PTR endLogical; + gctUINT32 endAddress; + gctUINT32 endBytes = 0; + gcsFEATURE_DATABASE *database = (gcsFEATURE_DATABASE *)(Hardware->featureDatabase); + gctUINT32 index = 0; + gctINT32 disableZDPN = 1, disableSWTiling = 1; + gctBOOL enableNNStride = gcvFALSE; + gctUINT32 smallBatch; + gctUINT32 ddrBurstSize; + gctUINT32 *commands = gcvNULL; + + bufferBytes = gcmSIZEOF(gctUINT32) * MAX_NN_COMMAND_NUM; + + gcmkONERROR(_AllocateVideoMemory( + Hardware->kernel, + gcvVIDMEM_TYPE_COMMAND, + AllocFlag, + Pool, + &bufferBytes, + &bufferNode, + &bufferLogical, + &bufferAddress + )); + + commands = (gctUINT32 *)bufferLogical; + + disableZDPN = (database->NN_ZDP3 || database->NN_ZDP6) ? 0 : 1; + + enableNNStride = database->NN_STRIDE_SUPPORT; + disableSWTiling = enableNNStride ? 0 : 1; + + if (Hardware->identity.chipModel == 0x8000 && + Hardware->identity.chipRevision == 0x7120 && + (Hardware->identity.customerID == 0x80 || + Hardware->identity.customerID == 0x92)) + { + smallBatch = 0x0; + } + else + { + smallBatch = (database->NN_SMALLBATCH_PHASE1 && database->NN_COMMAND_KERNEL_REQUEST_CONFICT_FIX) + ? 0x0 : 0x1; + } + + switch(KernelBurstSize) + { + case 256: + ddrBurstSize = 0x2; + break; + + case 64: + default: + ddrBurstSize = 0x0; + break; + } + + commands = (gctUINT32_PTR)bufferLogical; + + if (gcvVIP_ARCH_TYPE_V6 == ArchType) + { + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x006B) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = 0; + + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E03) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 6:6) - (0 ? + 6:6) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 6:6) - (0 ? + 6:6) + 1))))))) << (0 ? + 6:6))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? + 6:6) - (0 ? + 6:6) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 6:6) - (0 ? 6:6) + 1))))))) << (0 ? 6:6))); + } + + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E4E) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = Hardware->options.sRAMGPUVirtAddrs[0]; + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E4F) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = 0x00000000; + + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E50) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = 0x00000000; + + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E03) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 6:6) - (0 ? + 6:6) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 6:6) - (0 ? + 6:6) + 1))))))) << (0 ? + 6:6))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? + 6:6) - (0 ? + 6:6) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 6:6) - (0 ? 6:6) + 1))))))) << (0 ? 6:6))); + + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E4C) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 2:2) - (0 ? + 2:2) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 2:2) - (0 ? + 2:2) + 1))))))) << (0 ? + 2:2))) | (((gctUINT32) ((gctUINT32) (disableZDPN) & ((gctUINT32) ((((1 ? + 2:2) - (0 ? + 2:2) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 2:2) - (0 ? 2:2) + 1))))))) << (0 ? 2:2))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 3:3) - (0 ? + 3:3) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 3:3) - (0 ? + 3:3) + 1))))))) << (0 ? + 3:3))) | (((gctUINT32) ((gctUINT32) (disableSWTiling) & ((gctUINT32) ((((1 ? + 3:3) - (0 ? + 3:3) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 3:3) - (0 ? 3:3) + 1))))))) << (0 ? 3:3))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 4:4) - (0 ? + 4:4) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 4:4) - (0 ? + 4:4) + 1))))))) << (0 ? + 4:4))) | (((gctUINT32) ((gctUINT32) (smallBatch) & ((gctUINT32) ((((1 ? + 4:4) - (0 ? + 4:4) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 4:4) - (0 ? 4:4) + 1))))))) << (0 ? 4:4))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 6:5) - (0 ? + 6:5) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 6:5) - (0 ? + 6:5) + 1))))))) << (0 ? + 6:5))) | (((gctUINT32) ((gctUINT32) (ddrBurstSize) & ((gctUINT32) ((((1 ? + 6:5) - (0 ? + 6:5) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 6:5) - (0 ? 6:5) + 1))))))) << (0 ? 6:5))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 12:12) - (0 ? + 12:12) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 12:12) - (0 ? + 12:12) + 1))))))) << (0 ? + 12:12))) | (((gctUINT32) ((gctUINT32) (0x0) & ((gctUINT32) ((((1 ? + 12:12) - (0 ? + 12:12) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 12:12) - (0 ? 12:12) + 1))))))) << (0 ? 12:12))); + + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E54) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 0:0) - (0 ? + 0:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 0:0) - (0 ? + 0:0) + 1))))))) << (0 ? + 0:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? + 0:0) - (0 ? + 0:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 0:0) - (0 ? 0:0) + 1))))))) << (0 ? 0:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 1:1) - (0 ? + 1:1) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 1:1) - (0 ? + 1:1) + 1))))))) << (0 ? + 1:1))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? + 1:1) - (0 ? + 1:1) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 1:1) - (0 ? 1:1) + 1))))))) << (0 ? 1:1))); + + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0428) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:6) - (0 ? + 31:6) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:6) - (0 ? + 31:6) + 1))))))) << (0 ? + 31:6))) | (((gctUINT32) ((gctUINT32) ((InstAddress >> 6)) & ((gctUINT32) ((((1 ? + 31:6) - (0 ? + 31:6) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:6) - (0 ? 31:6) + 1))))))) << (0 ? 31:6))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 4:0) - (0 ? + 4:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 4:0) - (0 ? + 4:0) + 1))))))) << (0 ? + 4:0))) | (((gctUINT32) ((gctUINT32) (0) & ((gctUINT32) ((((1 ? + 4:0) - (0 ? + 4:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 4:0) - (0 ? 4:0) + 1))))))) << (0 ? 4:0))); + + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0429) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = 0; + + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 31:27) - (0 ? + 31:27) + 1))))))) << (0 ? + 31:27))) | (((gctUINT32) (0x01 & ((gctUINT32) ((((1 ? + 31:27) - (0 ? + 31:27) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 31:27) - (0 ? 31:27) + 1))))))) << (0 ? 31:27))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 15:0) - (0 ? + 15:0) + 1))))))) << (0 ? + 15:0))) | (((gctUINT32) ((gctUINT32) (0x0E03) & ((gctUINT32) ((((1 ? + 15:0) - (0 ? + 15:0) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 15:0) - (0 ? 15:0) + 1))))))) << (0 ? 15:0))) + | ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 25:16) - (0 ? + 25:16) + 1))))))) << (0 ? + 25:16))) | (((gctUINT32) ((gctUINT32) (1) & ((gctUINT32) ((((1 ? + 25:16) - (0 ? + 25:16) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 25:16) - (0 ? 25:16) + 1))))))) << (0 ? 25:16))); + commands[index++] = ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ? + 5:5) - (0 ? + 5:5) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? + 5:5) - (0 ? + 5:5) + 1))))))) << (0 ? + 5:5))) | (((gctUINT32) (0x1 & ((gctUINT32) ((((1 ? + 5:5) - (0 ? + 5:5) + 1) == 32) ? + ~0U : (~(~0U << ((1 ? 5:5) - (0 ? 5:5) + 1))))))) << (0 ? 5:5))); + + bytes = gcmSIZEOF(gctUINT32) * index; + + endLogical = (gctUINT8_PTR)bufferLogical + bytes; + endAddress = bufferAddress + bytes; + + if (Hardware->wlFE) + { + gcmkONERROR(gckWLFE_End(Hardware, gcvNULL, ~0U, &endBytes)); + gcmkONERROR(gckWLFE_End(Hardware, endLogical, endAddress, &endBytes)); + } + + bytes += endBytes; + + gcmkASSERT(bytes <= bufferBytes); + + gcmkONERROR(gckVIDMEM_NODE_CleanCache( + Hardware->kernel, + bufferNode, + 0, + bufferLogical, + bytes + )); + + Command->funcVidMem = bufferNode; + Command->funcVidMemBytes = bufferBytes; + Command->logical = bufferLogical; + Command->address = bufferAddress; + Command->bytes = bytes; + Command->endAddress = endAddress; + Command->endLogical = endLogical; + + return gcvSTATUS_OK; + +OnError: + if (bufferNode) + { + gcmkONERROR(_FreeVideoMemory( + Hardware->kernel, + bufferNode + )); + } + + return status; +} + +gceSTATUS +gckHARDWARE_ResetFlopWithNN( + IN gckHARDWARE Hardware, + IN gctUINT32 AllocFlag, + IN OUT gcePOOL *Pool, + OUT gcsFUNCTION_COMMAND *Command + ) +{ + gceSTATUS status = gcvSTATUS_OK; + + gctUINT32 kernelXSize = NN_KERNEL_XSIZE; + gctUINT32 kernelYSize = NN_KERNEL_YSIZE; + gctUINT32 kernelZSize = NN_KERNEL_ZSIZE; + + gctUINT32 inImageXSize = NN_INPUT_XSIZE; + gctUINT32 inImageYSize = NN_INPUT_YSIZE; + gctUINT32 inImageZSize = NN_INPUT_ZSIZE; + + gctUINT32 outImageXSize = NN_OUTPUT_XSIZE; + gctUINT32 outImageYSize = NN_OUTPUT_YSIZE; + gctUINT32 outImageZSize = NN_OUTPUT_ZSIZE; + + gctUINT32 i; + gctPOINTER pointer = gcvNULL; + + gceVIP_ARCH_TYPE archType; + gctUINT8 dataType; + gctUINT32 coreCount = 0; + gctUINT32 itemBytes = 0; + gctUINT32 zdp = 1; + gctUINT32 kernelBurstSize; + gcsFUNCTION_EXECUTION_DATA_PTR data = gcvNULL; + gctUINT32 dataCount = 0; + + if (!Command) + { + gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT); + } + + gcmkONERROR(_GetVIPCoreInfo( + Hardware, + &archType, + &dataType, + &coreCount, + &zdp, + &kernelBurstSize + )); + + gcmkONERROR(_GetNNDataSize(dataType, &itemBytes)); + + /* Exectution data. */ + dataCount = gcvFLOP_RESET_NN_DATA_NUM; + gcmkASSERT(dataCount > 0); + + gcmkONERROR(gckOS_Allocate( + Hardware->os, + gcmSIZEOF(gcsFUNCTION_EXECUTION_DATA) * dataCount, + &pointer + )); + gckOS_ZeroMemory(pointer, gcmSIZEOF(gcsFUNCTION_EXECUTION_DATA) * dataCount); + data = (gcsFUNCTION_EXECUTION_DATA *)pointer; + + /* Kernel. */ + gcmkONERROR(_ProgramNNKernel( + Hardware, + archType, + coreCount, + zdp, + dataType, + kernelXSize, + kernelYSize, + kernelZSize, + AllocFlag, + Pool, + &data[gcvFLOP_RESET_NN_KERNEL] + )); + + /* Input. */ + gcmkONERROR(_ProgramNNInput( + Hardware, + archType, + dataType, + inImageXSize, + inImageYSize, + inImageZSize, + AllocFlag, + Pool, + &data[gcvFLOP_RESET_NN_INPUT] + )); + + /* Output. */ + gcmkONERROR(_ProgramNNOutput( + Hardware, + dataType, + outImageXSize, + outImageYSize, + outImageZSize, + AllocFlag, + Pool, + &data[gcvFLOP_RESET_NN_OUTPUT] + )); + + /* Commands. */ + gcmkONERROR(_ProgramNNInstruction( + Hardware, + archType, + dataType, + inImageXSize, + inImageYSize, + outImageXSize, + outImageYSize, + outImageZSize, + kernelXSize, + kernelYSize, + kernelZSize, + data[gcvFLOP_RESET_NN_INPUT].address, + data[gcvFLOP_RESET_NN_OUTPUT].address, + data[gcvFLOP_RESET_NN_KERNEL].address, + AllocFlag, + Pool, + &data[gcvFLOP_RESET_NN_INSTRUCTION] + )); + + gcmkONERROR(_ProgramNNCommand( + Hardware, + archType, + kernelBurstSize, + data[gcvFLOP_RESET_NN_INSTRUCTION].address, + AllocFlag, + Pool, + Command + )); + + Command->data = data; + Command->dataCount = dataCount; + + return gcvSTATUS_OK; + +OnError: + if (Command && Command->funcVidMem) + { + gcmkVERIFY_OK(_FreeVideoMemory( + Hardware->kernel, + Command->funcVidMem + )); + Command->funcVidMem = gcvNULL; + } + + if (data) + { + for (i = 0; i < dataCount; i++) + { + if (data[i].bufVidMem) + { + gcmkVERIFY_OK(_FreeVideoMemory( + Hardware->kernel, + data[i].bufVidMem + )); + } + } + + gcmkVERIFY_OK(gckOS_Free(Hardware->os, data)); + } + + return status; +} + +static gceSTATUS +_ProgramTPKernel( + IN gckHARDWARE Hardware, + IN gceVIP_ARCH_TYPE ArchType, + IN gctUINT32 CoreCount, + IN gctUINT32 Zdp, + IN gctUINT8 DataType, + IN gctUINT32 KernelXSize, + IN gctUINT32 KernelYSize, + IN gctUINT32 KernelZSize, + IN gctUINT32 AllocFlag, + IN OUT gcePOOL *Pool, + OUT gcsFUNCTION_EXECUTION_DATA *Data + ) +{ + gceSTATUS status = gcvSTATUS_OK; + gckVIDMEM_NODE bufferNode = gcvNULL; + gctPOINTER bufferLogical = gcvNULL; + gctUINT32 bufferAddress =0; + gctSIZE_T bufferBytes = 0x3C0; + gctUINT32 *buffer = gcvNULL; + gctUINT32 i; + + + /* hardcode */ + gcmkONERROR(_AllocateVideoMemory( + Hardware->kernel, + gcvVIDMEM_TYPE_BITMAP, + AllocFlag, + Pool, + &bufferBytes, + &bufferNode, + &bufferLogical, + &bufferAddress + )); + + buffer = (gctUINT32_PTR)bufferLogical; + + /* Fill the data. */ + for (i = 0; i < bufferBytes / 4; i++) + { + buffer[i] = 0; + } + + buffer[0] = 0x01150410; + buffer[1] = buffer[81] = buffer[161] = 0x00000100; + buffer[5] = buffer[85] = buffer[165] = 0x26543780; + buffer[6] = buffer[86] = buffer[166] = 0x000000ff; + buffer[7] = buffer[87] = buffer[167] = 0x0006801a; + buffer[48] = buffer[128] = buffer[208] = 0x00024938; + buffer[64] = buffer[144] = buffer[224] = 0x00024938; + buffer[80] = buffer[160] = 0x01140410; + + + gcmkONERROR(gckVIDMEM_NODE_CleanCache( + Hardware->kernel, + bufferNode, + 0, + bufferLogical, + bufferBytes + )); + +#if gcdDUMP_IN_KERNEL + gcmkDUMP(Hardware->os, "#[flop reset: TP kernel]"); + gcmkDUMP_BUFFER( + Hardware->os, + gcvDUMP_BUFFER_KERNEL_COMMAND, + bufferLogical, + bufferAddress, + bufferBytes + ); +#endif + + Data->bufVidMem = bufferNode; + Data->bufVidMemBytes = bufferBytes; + Data->address = bufferAddress; + Data->logical = bufferLogical; + Data->bytes = bufferBytes; + + return gcvSTATUS_OK; + +OnError: + if (bufferNode) + { + gcmkVERIFY_OK(_FreeVideoMemory( + Hardware->kernel, + bufferNode + )); + } + + return status; +} + +static gceSTATUS +_ProgramTPInput( + IN gckHARDWARE Hardware, + IN gceVIP_ARCH_TYPE ArchType, + IN gctUINT8 DataType, + IN gctUINT32 InImageXSize, + IN gctUINT32 InImageYSize, + IN gctUINT32 InImageZSize, + IN gctUINT32 AllocFlag, + IN OUT gcePOOL *Pool, + OUT gcsFUNCTION_EXECUTION_DATA_PTR Data + ) +{ + gceSTATUS status = gcvSTATUS_OK; + + gctUINT32 inputSize = InImageXSize * InImageYSize * InImageZSize; + gctUINT32 itemBytes = 0; + gckVIDMEM_NODE bufferNode = gcvNULL; + gctPOINTER bufferLogical = gcvNULL; + gctUINT32 bufferAddress = 0; + gctSIZE_T bufferBytes, bytes; + gctUINT8_PTR buffer = gcvNULL; + + gctUINT32 i = 0; + gctUINT32 offset = 0; + gctUINT32 value[] = { + 0xff, /* uint8, the case set scale = 0.003921569*/ + 0x3c00, /* fp16 */ + 1, /* int8 */ + 1, /* uint16 */ + 1, /* int16 */ + 1, /* uint4 */ + 1, /* int4 */ + 0x3f80 /* bf16 */ + }; + gcmkONERROR(_GetNNDataSize(DataType, &itemBytes)); + + bufferBytes = inputSize * itemBytes; + + gcmkONERROR(_AllocateVideoMemory( + Hardware->kernel, + gcvVIDMEM_TYPE_BITMAP, + AllocFlag, + Pool, + &bufferBytes, + &bufferNode, + &bufferLogical, + &bufferAddress + )); + + if (gcvVIP_ARCH_TYPE_V8 == ArchType) + { + value[0x4] = 0x81; + } + + buffer = (gctUINT8_PTR)bufferLogical; + + for (i = 0; i < inputSize; i++) + { + _BitValue(&buffer, value[DataType], &offset, itemBytes * 8); + } + + bytes = buffer + (offset + 7) / 8 - (gctUINT8_PTR)bufferLogical; + + gcmkONERROR(gckVIDMEM_NODE_CleanCache( + Hardware->kernel, + bufferNode, + 0, + bufferLogical, + bytes + )); + +#if gcdDUMP_IN_KERNEL + gcmkDUMP(Hardware->os, "#[flop reset: TP input]"); + gcmkDUMP_BUFFER( + Hardware->os, + gcvDUMP_BUFFER_KERNEL_COMMAND, + bufferLogical, + bufferAddress, + bytes + ); +#endif + + Data->bufVidMem = bufferNode; + Data->bufVidMemBytes = bufferBytes; + Data->address = bufferAddress; + Data->logical = bufferLogical; + Data->bytes = bytes; + + return gcvSTATUS_OK; + +OnError: + gcmkVERIFY_OK(_FreeVideoMemory( + Hardware->kernel, + bufferNode + )); + + return status; +} + +static gceSTATUS +_ProgramTPOutput( + IN gckHARDWARE Hardware, + IN gctUINT8 DataType, + IN gctUINT32 OutputXSize, + IN gctUINT32 OutputYSize, + IN gctUINT32 OutputZSize, + IN gctUINT32 AllocFlag, + IN OUT gcePOOL *Pool, + OUT gcsFUNCTION_EXECUTION_DATA *Data + ) +{ + gceSTATUS status = gcvSTATUS_OK; + + gctUINT32 itemBytes = 0; + gckVIDMEM_NODE bufferNode = gcvNULL; + gctPOINTER bufferLogical = gcvNULL; + gctUINT32 bufferAddress = 0; + gctSIZE_T bufferBytes, bytes; + + if (!Data) + { + gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT); + } + + gcmkONERROR(_GetNNDataSize(DataType, &itemBytes)); + + bufferBytes = bytes = OutputXSize * OutputYSize * OutputZSize * itemBytes; + + gcmkONERROR(_AllocateVideoMemory( + Hardware->kernel, + gcvVIDMEM_TYPE_BITMAP, + AllocFlag, + Pool, + &bufferBytes, + &bufferNode, + &bufferLogical, + &bufferAddress + )); + + gcmkONERROR(gckVIDMEM_NODE_CleanCache( + Hardware->kernel, + bufferNode, + 0, + bufferLogical, + bytes + )); + + Data->bufVidMem = bufferNode; + Data->bufVidMemBytes = bufferBytes; + Data->address = bufferAddress; + Data->logical = bufferLogical; + Data->bytes = bytes; + + return gcvSTATUS_OK; + +OnError: + gcmkVERIFY_OK(_FreeVideoMemory( + Hardware->kernel, + bufferNode + )); + + return status; +} + +static gceSTATUS +_ProgramTPInstruction( + IN gckHARDWARE Hardware, + IN gceVIP_ARCH_TYPE ArchType, + IN gctUINT8 DataType, + IN gctUINT32 InImageXSize, + IN gctUINT32 InImageYSize, + IN gctUINT32 OutImageXSize, + IN gctUINT32 OutImageYSize, + IN gctUINT32 OutImageZSize, + IN gctUINT32 KernelXSize, + IN gctUINT32 KernelYSize, + IN gctUINT32 KernelZSize, + IN gctUINT32 InImageAddress, + IN gctUINT32 OutImageAddress, + IN gctUINT32 KernelAddress, + IN gctUINT32 AllocFlag, + IN gcePOOL *Pool, + OUT gcsFUNCTION_EXECUTION_DATA_PTR Data + ) +{ + gceSTATUS status = gcvSTATUS_OK; + + gckVIDMEM_NODE bufferNode = gcvNULL; + gctPOINTER bufferLogical = gcvNULL; + gctUINT32 bufferAddress = 0; + gctSIZE_T bufferBytes, bytes; + gctUINT32 *command = gcvNULL; + gctUINT32 i; + + bufferBytes = bytes = 0x180; + + /* Allocate buffer. */ + gcmkONERROR(_AllocateVideoMemory( + Hardware->kernel, + gcvVIDMEM_TYPE_COMMAND, + AllocFlag, + Pool, + &bufferBytes, + &bufferNode, + &bufferLogical, + &bufferAddress + )); + + command = (gctUINT32_PTR)bufferLogical; + + /* Fill the data. */ + for (i = 0; i < bufferBytes / 4; i++) + { + command[i] = 0; + } + + for (i = 0; i < 3; i++) + { + command[0] = command[2] = command[3] = command[20] = 0x00000001; + command[1] = 0x00020001; + command[8] = command[9] = command[16] = command[19] = 0x00010001; + command[10] = InImageAddress; + command[24] = 0x0000240a; + command[26] = command[28] = 0x03ffffff; + command[30] = 0x00008100; + command = command + 32; + } + + command = (gctUINT32_PTR)bufferLogical; + + command[6] = 0xa0002a1b; + command[38] = command[70] = 0xa000281b; + command[12] = command[44] = 0xc0000002; + command[76] = 0x80000002; + command[22] = 0x00010016; + command[54] = command[86] = 0x00010015; + command[11] = KernelAddress; + command[43] = KernelAddress + 0x140; + command[75] = KernelAddress + 0x280; + command[13] = OutImageAddress; + command[45] = OutImageAddress + 0x16; + command[77] = OutImageAddress + 0x2b; + + gcmkONERROR(gckVIDMEM_NODE_CleanCache( + Hardware->kernel, + bufferNode, + 0, + bufferLogical, + bytes + )); + +#if gcdDUMP_IN_KERNEL + gcmkDUMP(Hardware->os, "#[flop reset: TP instruction]"); + gcmkDUMP_BUFFER( + Hardware->os, + gcvDUMP_BUFFER_KERNEL_COMMAND, + bufferLogical, + bufferAddress, + bytes + ); +#endif + + Data->bufVidMem = bufferNode; + Data->bufVidMemBytes = bufferBytes; + Data->address = bufferAddress; + Data->logical = bufferLogical; + Data->bytes = bytes; + + return gcvSTATUS_OK; + +OnError: + if (bufferNode) + { + gcmkVERIFY_OK(_FreeVideoMemory( + Hardware->kernel, + bufferNode + )); + } + + return status; +} + +static gceSTATUS +_ProgramTPCommand( + IN gckHARDWARE Hardware, + IN gceVIP_ARCH_TYPE ArchType, + IN gctUINT32 InstAddress, + IN gctUINT32 AllocFlag, + IN gcePOOL *Pool, + OUT gcsFUNCTION_COMMAND_PTR Command + ) +{ + gceSTATUS status = gcvSTATUS_OK; + + gckVIDMEM_NODE bufferNode = gcvNULL; + gctPOINTER bufferLogical = gcvNULL; + gctUINT32 bufferAddress = 0; + gctSIZE_T bufferBytes; + gctUINT32 bytes; + gctUINT32 *commands; + + gctUINT8_PTR endLogical; + gctUINT32 endAddress; + gctUINT32 endBytes = 0; + gctUINT32 i = 0; + gctUINT32 k; + + bufferBytes = gcmSIZEOF(gctUINT32) * 64; + + gcmkONERROR(_AllocateVideoMemory( + Hardware->kernel, + gcvVIDMEM_TYPE_COMMAND, + AllocFlag, + Pool, + &bufferBytes, + &bufferNode, + &bufferLogical, + &bufferAddress + )); + + commands = (gctUINT32_PTR)bufferLogical; + for (i = 0; i < 3; i++) + { + k = 14 * i; + commands[0 + k] = 0x08010e4e; + commands[1 + k] = 0x00400000; + commands[2 + k] = 0x08010e4f; + commands[3 + k] = 0x00000000; + commands[4 + k] = 0x08010e50; + commands[5 + k] = 0x00000000; + commands[6 + k] = 0x08010e53; + commands[7 + k] = 0x00000000; + commands[8 + k] = 0x08010e54; + commands[9 + k] = 0x00000008; + commands[10 + k] = 0x08010e27; + commands[11 + k] = 0x00000000; + commands[12 + k] = 0x0801042e; + } + + commands[13] = (InstAddress & 0xffffffC0) | (0x1); + commands[27] = ((InstAddress + 0x80) & 0xffffffC0) | (0x1); + commands[37] = 0x00000000; + commands[41] = ((InstAddress + 0x100) & 0xffffffC0); + commands[42] = 0x08010429; + commands[43] = 0; + commands[44] = 0x08010E03; + commands[45] = 0x20; + + bytes = 46 * 4; + + endLogical = (gctUINT8_PTR)bufferLogical + bytes; + endAddress = bufferAddress + bytes; + + if (Hardware->wlFE) + { + gcmkONERROR(gckWLFE_End(Hardware, gcvNULL, ~0U, &endBytes)); + gcmkONERROR(gckWLFE_End(Hardware, endLogical, endAddress, &endBytes)); + } + + bytes += endBytes; + + gcmkASSERT(bytes <= bufferBytes); + + + gcmkONERROR(gckVIDMEM_NODE_CleanCache( + Hardware->kernel, + bufferNode, + 0, + bufferLogical, + bytes + )); + + Command->funcVidMem = bufferNode; + Command->funcVidMemBytes = bufferBytes; + Command->logical = bufferLogical; + Command->address = bufferAddress; + Command->bytes = bytes; + Command->endAddress = endAddress; + Command->endLogical = endLogical; + + return gcvSTATUS_OK; + +OnError: + if (bufferNode) + { + gcmkONERROR(_FreeVideoMemory( + Hardware->kernel, + bufferNode + )); + } + + return status; +} + +/* + * TP. + */ +gceSTATUS +gckHARDWARE_ResetFlopWithTP( + IN gckHARDWARE Hardware, + IN gctUINT32 AllocFlag, + IN gcePOOL *Pool, + OUT gcsFUNCTION_COMMAND_PTR Command + ) +{ + gceSTATUS status = gcvSTATUS_OK; + + gctUINT32 kernelXSize = TP_KERNEL_XSIZE; + gctUINT32 kernelYSize = TP_KERNEL_YSIZE; + gctUINT32 kernelZSize = TP_KERNEL_ZSIZE; + + gctUINT32 inImageXSize = TP_INPUT_XSIZE; + gctUINT32 inImageYSize = TP_INPUT_YSIZE; + gctUINT32 inImageZSize = TP_INPUT_ZSIZE; + + gctUINT32 outImageXSize = TP_OUTPUT_XSIZE; + gctUINT32 outImageYSize = TP_OUTPUT_YSIZE; + gctUINT32 outImageZSize = TP_OUTPUT_ZSIZE; + + gctUINT32 i; + gctPOINTER pointer = gcvNULL; + + gceVIP_ARCH_TYPE archType = gcvVIP_ARCH_TYPE_V8; + gctUINT8 dataType; + gctUINT32 coreCount = 0; + gctUINT32 zdp = 1; + gctUINT32 itemBytes = 0; + gcsFUNCTION_EXECUTION_DATA_PTR data = gcvNULL; + gctUINT32 dataCount = 0; + + if (!Command) + { + gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT); + } + + dataType = 0x0; + + gcmkONERROR(_GetNNDataSize(dataType, &itemBytes)); + + /* Exectution data. */ + dataCount = gcvFLOP_RESET_TP_DATA_NUM; + gcmkASSERT(dataCount > 0); + + gcmkONERROR(gckOS_Allocate( + Hardware->os, + gcmSIZEOF(gcsFUNCTION_EXECUTION_DATA) * dataCount, + &pointer + )); + gckOS_ZeroMemory(pointer, gcmSIZEOF(gcsFUNCTION_EXECUTION_DATA) * dataCount); + data = (gcsFUNCTION_EXECUTION_DATA *)pointer; + + /* Kernel. */ + gcmkONERROR(_ProgramTPKernel( + Hardware, + archType, + coreCount, + zdp, + dataType, + kernelXSize, + kernelYSize, + kernelZSize, + AllocFlag, + Pool, + &data[gcvFLOP_RESET_TP_KERNEL] + )); + + /* Input. */ + gcmkONERROR(_ProgramTPInput( + Hardware, + archType, + dataType, + inImageXSize, + inImageYSize, + inImageZSize, + AllocFlag, + Pool, + &data[gcvFLOP_RESET_TP_INPUT] + )); + + /* Output. */ + gcmkONERROR(_ProgramTPOutput( + Hardware, + dataType, + outImageXSize, + outImageYSize, + outImageZSize, + AllocFlag, + Pool, + &data[gcvFLOP_RESET_TP_OUTPUT] + )); + + /* Commands. */ + gcmkONERROR(_ProgramTPInstruction( + Hardware, + archType, + dataType, + inImageXSize, + inImageYSize, + outImageXSize, + outImageYSize, + outImageZSize, + kernelXSize, + kernelYSize, + kernelZSize, + data[gcvFLOP_RESET_TP_INPUT].address, + data[gcvFLOP_RESET_TP_OUTPUT].address, + data[gcvFLOP_RESET_TP_KERNEL].address, + AllocFlag, + Pool, + &data[gcvFLOP_RESET_TP_INSTRUCTION] + )); + + gcmkONERROR(_ProgramTPCommand( + Hardware, + archType, + data[gcvFLOP_RESET_TP_INSTRUCTION].address, + AllocFlag, + Pool, + Command + )); + + Command->data = data; + Command->dataCount = dataCount; + + return gcvSTATUS_OK; + +OnError: + if (Command && Command->funcVidMem) + { + gcmkVERIFY_OK(_FreeVideoMemory( + Hardware->kernel, + Command->funcVidMem + )); + Command->funcVidMem = gcvNULL; + } + + if (data) + { + for (i = 0; i < dataCount; i++) + { + if (data[i].bufVidMem) + { + gcmkVERIFY_OK(_FreeVideoMemory( + Hardware->kernel, + data[i].bufVidMem + )); + } + } + + gcmkVERIFY_OK(gckOS_Free(Hardware->os, data)); + } + + return status; +} + |