1
0
Fork 0
alistair23-linux/drivers/mxc/gpu-viv/hal/kernel/arch/gc_hal_kernel_hardware_func...

7026 lines
203 KiB
C

/****************************************************************************
*
* 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 - 2019 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);
/* Make compiler happy. */
gcQueryFeatureDB(0, 0, 0, 0, 0);
/* 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;
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)));
if (!Inst)
{
gcmkONERROR(gcvSTATUS_INVALID_ARGUMENT);
}
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,
&regCount,
&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->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,
bytes
);
#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->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;
}