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

1725 lines
58 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_user_hardware_precomp.h"
//#include "gc_hal_user.h"
/*
**
*/
#if gcdRESET_USC1
#if gcdRESET_USC_C
#include "gc_feature_database.h"
#define USC_DEBUG 0
typedef enum _USC_NN_TYPE
{
USC_NN_TYPE_V6,
USC_NN_TYPE_V7,
USC_NN_TYPE_V8,
}
USC_NN_TYPE;
gceSTATUS
_InitializeUSC_NNCommands(
IN gckHARDWARE Hardware,
IN USC_NN_TYPE hw_type,
IN gctUINT32 kernelAddress,
IN gctUINT32 inImageAddress,
IN gctUINT32 outImageAddress,
IN OUT gctUINT8_PTR data_type,
IN OUT gctUINT32_PTR item_size,
IN OUT gctUINT32_PTR core_count,
IN OUT gctSIZE_T_PTR patchBufferSizes,
IN OUT gctUINT32_PTR* nnCommands
)
{
gceSTATUS status = gcvSTATUS_OK;
gckOS os = Hardware->os;
gctUINT32_PTR command = *nnCommands;
gctUINT8 kernelDataType = *data_type;
gctUINT8 inImageDataType = *data_type;
gctUINT8 outImageDataType = *data_type;
gctUINT32 kernelsPerCore = 1;
gctUINT32 inImageXSize = 3;
gctUINT32 inImageYSize = 2;
gctUINT32 outImageXSize = 2;
gctUINT32 outImageYSize = 1;
gctUINT32 outImageZSize = 1;
gctUINT32 kernelXYSize = 2;
gctUINT32 kernelZSize = 1;
gctUINT32 nn_layer_flush = 1, noZOffset = 0, size = gcmSIZEOF(gctUINT32) * ((hw_type == USC_NN_TYPE_V6)?16:32);
gctUINT32 imageEndAddress = 2048, post_shift = 0, post_shift_bit56 = 0;
gctUINT8 coefZP = 0, outputZP = 0;
gcsFEATURE_DATABASE * db = (gcsFEATURE_DATABASE *)Hardware->featureDatabase;
gctUINT32 config = 0, index = 0;
gctUINT32 configuration[][3] = {
/*item size, data type, core count*/
{1, 0x2, db->NNCoreCount_INT8},
{2, 0x4, db->NNCoreCount_INT16},
{2, 0x1, db->NNCoreCount_FLOAT16},
{2, 0x7, db->NNCoreCount_BFLOAT},
};
*patchBufferSizes = size;
if (command == NULL)
{
gcmkONERROR(gckOS_Allocate(os, size, (gctPOINTER*)(&command)));
gcmkONERROR(gckOS_ZeroMemory(command, size));
*nnCommands = command;
}
gcmkASSERT(command != NULL);
gcQueryFeatureDB(0, 0, 0, 0, 0);
for (index = 0; index < gcmCOUNTOF(configuration); index ++)
{
if(configuration[index][2] > 0)
break;
}
if (index == gcmCOUNTOF(configuration))
gcmkASSERT("Hardware not support NN!");
#if USC_DEBUG
gcmkPRINT("The hardware(0x%0x) support %d\n", db->customerID, index);
gcmkPRINT("\tcore int8 %d\n\tcore int16 %d\n\tcore fp16 %d\n\tcore bfp16 %d\n",
db->NNCoreCount_INT8, db->NNCoreCount_INT16, db->NNCoreCount_FLOAT16, db->NNCoreCount_BFLOAT);
#endif
*item_size = configuration [index][0];
*data_type = (gctUINT8)configuration[index][1];
*core_count = configuration[index][2];
kernelDataType = *data_type;
inImageDataType = *data_type;
outImageDataType = *data_type;
switch (hw_type)
{
case USC_NN_TYPE_V8:
noZOffset = 1;
outputZP = 0;
post_shift = (gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_NN_FLOAT_POST_MULT))?0x1f:0;
post_shift_bit56 = (gckHARDWARE_IsFeatureAvailable(Hardware, gcvFEATURE_NN_FLOAT_POST_MULT))?3:0;
break;
case USC_NN_TYPE_V7:
case USC_NN_TYPE_V6:
post_shift = (*data_type == 0x2)?15:0;
break;
default:
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) (kernelXYSize) & ((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) (nn_layer_flush) & ((gctUINT32) ((((1 ?
31:31) - (0 ?
31:31) + 1) == 32) ?
~0U : (~(~0U << ((1 ? 31:31) - (0 ? 31:31) + 1))))))) << (0 ? 31:31))));
config = ((((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)));
/* gcregNNInstWord1 */
gcmkWRITE_MEMORY(command, config);
/* 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) (post_shift) & ((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);
gcmkWRITE_MEMORY(command,
/* gcmSETFIELD (0, GCREG_NN_INST_WORD8, IMAGE_CACHING_MODE, imageCachingMode)
| ((((gctUINT32) (0)) & ~(((gctUINT32) (((gctUINT32) ((((1 ?
3:2) - (0 ?
3:2) + 1) == 32) ?
~0U : (~(~0U << ((1 ?
3:2) - (0 ?
3:2) + 1))))))) << (0 ?
3:2))) | (((gctUINT32) ((gctUINT32) (kernelCachingMode) & ((gctUINT32) ((((1 ?
3:2) - (0 ?
3:2) + 1) == 32) ?
~0U : (~(~0U << ((1 ? 3:2) - (0 ? 3:2) + 1))))))) << (0 ? 3:2)))
| ((((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) (partialCacheDataUnit) & ((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 ?
11:6) - (0 ?
11:6) + 1) == 32) ?
~0U : (~(~0U << ((1 ?
11:6) - (0 ?
11:6) + 1))))))) << (0 ?
11:6))) | (((gctUINT32) ((gctUINT32) (kernelPatternMsb) & ((gctUINT32) ((((1 ?
11:6) - (0 ?
11:6) + 1) == 32) ?
~0U : (~(~0U << ((1 ? 11:6) - (0 ? 11:6) + 1))))))) << (0 ? 11:6)))
| */((((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) (kernelXYSize) & ((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))));
/* 31:0 */
gcmkWRITE_MEMORY(command, 0);
/* 31:0 */
gcmkWRITE_MEMORY(command, 0);
/* 31:0 */
gcmkWRITE_MEMORY(command, 0);
/* CREG_NN_INST_WORD12_KERNEL_CACHE_END_ADDRESS */
gcmkWRITE_MEMORY(command, 0);
/* 31:0 */
gcmkWRITE_MEMORY(command, 0);
/* GCREG_NN_INST_WORD14, IMAGE_END_ADDRESS */
gcmkWRITE_MEMORY(command, imageEndAddress);
/*1:0*/
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) (post_shift_bit56) & ((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 (hw_type == USC_NN_TYPE_V7 || hw_type == USC_NN_TYPE_V8)
{
/*GCREG_NN_INST_WORD16*/
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 * (*item_size)) & ((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))));
/*GCREG_NN_INST_WORD17*/
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 * (*item_size)) & ((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))));
/*GCREG_NN_INST_WORD18*/
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))));
}
OnError:
return status;
}
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 >> length_m);
*lsb = data_l;
if (end > 32)
*msb = data_m;
*offset = length_m;
*base = (gctUINT8_PTR)msb;
}
}
return status;
}
gceSTATUS
_InitializeUSC_NNKernel(
IN gckHARDWARE Hardware,
IN USC_NN_TYPE hw_type,
IN gctUINT8 data_type,
IN gctUINT32 item_size,
IN gctUINT32 core_count,
IN OUT gctUINT32_PTR nnKernels
)
{
gceSTATUS status = gcvSTATUS_OK;
gctUINT8_PTR kernels = (gctUINT8_PTR)nnKernels;
gctUINT8_PTR kernel_stream_size_ptr = 0;
gctUINT32 filterTotalCount = 1, filterSize = 2 * 2 * 1 * item_size, biasSize = 4;
/* v8 huffman encoder */
if (USC_NN_TYPE_V8 == hw_type)
{
gctUINT32 i = 0, offset = 0;
/*uint8, fp16, int8, uint16, int16, uint4, int4, bf16*/
gctUINT8 rlt[][18] = {{0}, {1, 1, 0, 1}, {7, 1}, {0}, {3, 1, 0, 1}, {0}, {0}, {1, 1, 0, 1} };
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 = (data_type == 0x4) || data_type == (0x1) || data_type == (0x7);
gctBOOL fp16 = (data_type == 0x1);
gctUINT32 index = (data_type == 0x1)?1:((data_type == 0x7)?2:0);
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));/*reserve*/
gcmkONERROR(_BitValue(&kernels, 1, &offset, 4));/*version, 1*/
gcmkONERROR(_BitValue(&kernels, 4, &offset, 8));/*zero run length size*/
for(i = 0; i < 18; i++)
gcmkONERROR(_BitValue(&kernels, rlt[data_type][i], &offset, 8));/*zero run length x 18*/
for(i = 0; i < 4; i++)
{
gcmkONERROR(_BitValue(&kernels, (map[index][2 * i + 1] << 4) + map[index][2 * i], &offset, 8));/*map x 4*/
}
gcmkONERROR(_BitValue(&kernels, 0, &offset, 16));/*avg bias*/
gcmkONERROR(_BitValue(&kernels, 0, &offset, 16));/*reserved, must zero*/
kernel_stream_size_ptr = kernels;
for (i = 0; i < core_count; i ++)
gcmkONERROR(_BitValue(&kernels, 0, &offset, 32));/*stream size*/
kernels = (gctUINT8_PTR)nnKernels + gcmALIGN_NP2((gctUINT32)((gctUINT32_PTR)kernels - nnKernels), 64);
switch (data_type)
{
case 0x4:
gcmkONERROR(_BitValue(&kernels, 0x04058000, &offset, 32));/*huffman data*/ /*00000018 00924600*/
gcmkONERROR(_BitValue(&kernels, 0x640101fc, &offset, 32));/*huffman data*/
gcmkONERROR(_BitValue(&kernels, 0x00001200, &offset, 32));/*huffman data*/
gcmkONERROR(_BitValue(&kernel_stream_size_ptr, 0x0000006d, &offset, 32));/*only on core, stream size*/
break;
case 0x0:
case 0x2:
gcmkONERROR(_BitValue(&kernels, 0xec000038, &offset, 32));/*huffman data*/
gcmkONERROR(_BitValue(&kernel_stream_size_ptr, 0x35, &offset, 32));/*only on core, stream size*/
break;
case 0x1:
gcmkONERROR(_BitValue(&kernels, 0x0009db68, &offset, 32));/*huffman data*/ /*0009db68 000006c0 000001f0 00000900 00024000*/
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));/*huffman data*/
gcmkONERROR(_BitValue(&kernel_stream_size_ptr, 0x000000a3, &offset, 32));/*only on core, stream size*/
break;
case 0x7:
gcmkONERROR(_BitValue(&kernels, 0x0007fff8, &offset, 32));/*huffman data*/ /*0007fff8 7f00fdfc c0397f00 0900001f 40000000 00000002*/
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));/*huffman data*/
gcmkONERROR(_BitValue(&kernel_stream_size_ptr, 0x000000b2, &offset, 32));/*only on core, stream size*/
break;
default:
gcmkASSERT("Huffman encode not support this format! Please check!");
break;
}
}
else
{
gctBOOL zero_all = gcvFALSE;
gctUINT8 zrl = 0;
gctUINT16 vznum = 1;
gctUINT32 bias = 0;
gctUINT32 total_size = gcmALIGN_NP2((filterTotalCount * (filterSize + biasSize + 3) + 3), 64);//1 + 2 + *item_size;;
gckOS_ZeroMemory(kernels, total_size + 64);
*((gctUINT32_PTR)kernels) = total_size;
kernels += total_size;
if (zero_all)
*((gctUINT32_PTR)kernels) = (vznum << (8 * item_size));/*zrl & coreFilterCount, both compressed weight and bias are zero, the size(1 * 1 * 2 * 2 + 4 ) < 64, align to 64*/
else
{
gctINT16 value = (data_type == 0x1)?0x3c00/*1.0f*/:1;
gctUINT32 i = 0, offset = 0;
_BitValue(&kernels, zrl, &offset, 8);
_BitValue(&kernels, vznum, &offset, 16);
_BitValue(&kernels, value, &offset, 8 * item_size);
_BitValue(&kernels, bias, &offset, 32);
if (data_type == 0x3 || data_type == 0x4)
_BitValue(&kernels, 0, &offset, 16);
for (i = 1; i < filterSize/item_size; i ++)
_BitValue(&kernels, value, &offset, 8 * item_size);
}
}
OnError:
return status;
}
static gceSTATUS _InitializeUSC_NNCmdBuffer(IN gckHARDWARE Hardware,
IN USC_NN_TYPE hw_type,
IN gctUINT32_PTR flushCommands,
IN gctUINT32 CmdAddress,
IN gctUINT32 SramRemapAddress,
OUT gctUINT32_PTR Bytes)
{
gceSTATUS status = gcvSTATUS_OK;
gcsFEATURE_DATABASE *db = (gcsFEATURE_DATABASE *)(Hardware->featureDatabase);
gctUINT32 idx = 0, kernel_brust_size = db->DDR_KERNEL_BURST_SIZE;
gctINT32 disableZDPN = 1, disableSWTiling = 1, smallBatch = 1, ddrBurstSize = 0;
gctBOOL enableNNStride = gcvFALSE;
disableZDPN = (db->NN_ZDP3 || db->NN_ZDP6) ? 0 : 1;
enableNNStride = db->NN_STRIDE_SUPPORT;
disableSWTiling = enableNNStride ? 0 : 1;
switch(kernel_brust_size)
{
case 256:
ddrBurstSize = 0x2;
break;
case 64:
ddrBurstSize = 0x0;
break;
default:
break;
}
if (Hardware->identity.chipModel == 0x8000 && Hardware->identity.chipRevision == 0x7120 &&
(Hardware->identity.customerID == 0x80 || Hardware->identity.customerID == 0x92))
smallBatch = 0x0;
else
smallBatch = (db->NN_SMALLBATCH_PHASE1 && db->NN_COMMAND_KERNEL_REQUEST_CONFICT_FIX)
? 0x0 : 0x1;
if (hw_type == USC_NN_TYPE_V6)
{
flushCommands[idx++] = ((((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)));
flushCommands[idx++] = 0;
flushCommands[idx++] = ((((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)));
flushCommands[idx++] = ((((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)));
}
flushCommands[idx++] = ((((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)));
flushCommands[idx++] = SramRemapAddress;
flushCommands[idx++] = ((((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)));
flushCommands[idx++] = 0x00000000;
flushCommands[idx++] = ((((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)));
flushCommands[idx++] = 0x00000000;
flushCommands[idx++] = ((((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)));
flushCommands[idx++] = ((((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)));
flushCommands[idx++] = ((((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)));
flushCommands[idx++] = ((((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)));
flushCommands[idx++] = ((((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)));
flushCommands[idx++] = ((((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)));
flushCommands[idx++] = ((((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)));
flushCommands[idx++] = ((((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) ((CmdAddress >> 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)));
flushCommands[idx++] = ((((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)));
flushCommands[idx++] = 0;
flushCommands[idx++] = ((((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)));
flushCommands[idx++] = ((((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 = idx * 4;
/* Return the status. */
return status;
}
#endif /*gcdRESET_USC_C*/
#endif /*gcdRESET_USC1*/