12cd769179345799d383f92dd615991755ec24be1Vadim Girlin/* 22cd769179345799d383f92dd615991755ec24be1Vadim Girlin * Copyright 2013 Vadim Girlin <vadimgirlin@gmail.com> 32cd769179345799d383f92dd615991755ec24be1Vadim Girlin * 42cd769179345799d383f92dd615991755ec24be1Vadim Girlin * Permission is hereby granted, free of charge, to any person obtaining a 52cd769179345799d383f92dd615991755ec24be1Vadim Girlin * copy of this software and associated documentation files (the "Software"), 62cd769179345799d383f92dd615991755ec24be1Vadim Girlin * to deal in the Software without restriction, including without limitation 72cd769179345799d383f92dd615991755ec24be1Vadim Girlin * on the rights to use, copy, modify, merge, publish, distribute, sub 82cd769179345799d383f92dd615991755ec24be1Vadim Girlin * license, and/or sell copies of the Software, and to permit persons to whom 92cd769179345799d383f92dd615991755ec24be1Vadim Girlin * the Software is furnished to do so, subject to the following conditions: 102cd769179345799d383f92dd615991755ec24be1Vadim Girlin * 112cd769179345799d383f92dd615991755ec24be1Vadim Girlin * The above copyright notice and this permission notice (including the next 122cd769179345799d383f92dd615991755ec24be1Vadim Girlin * paragraph) shall be included in all copies or substantial portions of the 132cd769179345799d383f92dd615991755ec24be1Vadim Girlin * Software. 142cd769179345799d383f92dd615991755ec24be1Vadim Girlin * 152cd769179345799d383f92dd615991755ec24be1Vadim Girlin * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 162cd769179345799d383f92dd615991755ec24be1Vadim Girlin * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 172cd769179345799d383f92dd615991755ec24be1Vadim Girlin * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL 182cd769179345799d383f92dd615991755ec24be1Vadim Girlin * THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, 192cd769179345799d383f92dd615991755ec24be1Vadim Girlin * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 202cd769179345799d383f92dd615991755ec24be1Vadim Girlin * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 212cd769179345799d383f92dd615991755ec24be1Vadim Girlin * USE OR OTHER DEALINGS IN THE SOFTWARE. 222cd769179345799d383f92dd615991755ec24be1Vadim Girlin * 232cd769179345799d383f92dd615991755ec24be1Vadim Girlin * Authors: 242cd769179345799d383f92dd615991755ec24be1Vadim Girlin * Vadim Girlin 252cd769179345799d383f92dd615991755ec24be1Vadim Girlin */ 262cd769179345799d383f92dd615991755ec24be1Vadim Girlin 272cd769179345799d383f92dd615991755ec24be1Vadim Girlin#include "sb_bc.h" 282cd769179345799d383f92dd615991755ec24be1Vadim Girlin 292cd769179345799d383f92dd615991755ec24be1Vadim Girlinnamespace r600_sb { 302cd769179345799d383f92dd615991755ec24be1Vadim Girlin 312cd769179345799d383f92dd615991755ec24be1Vadim Girlinint bc_decoder::decode_cf(unsigned &i, bc_cf& bc) { 322cd769179345799d383f92dd615991755ec24be1Vadim Girlin int r = 0; 332cd769179345799d383f92dd615991755ec24be1Vadim Girlin uint32_t dw0 = dw[i]; 342cd769179345799d383f92dd615991755ec24be1Vadim Girlin uint32_t dw1 = dw[i+1]; 35a830225adbb77073272961df409885cca6b861eeGlenn Kennard assert(i+1 <= ndw); 362cd769179345799d383f92dd615991755ec24be1Vadim Girlin 372cd769179345799d383f92dd615991755ec24be1Vadim Girlin if ((dw1 >> 29) & 1) { // CF_ALU 382cd769179345799d383f92dd615991755ec24be1Vadim Girlin return decode_cf_alu(i, bc); 392cd769179345799d383f92dd615991755ec24be1Vadim Girlin } else { 402cd769179345799d383f92dd615991755ec24be1Vadim Girlin // CF_INST field encoding on cayman is the same as on evergreen 412cd769179345799d383f92dd615991755ec24be1Vadim Girlin unsigned opcode = ctx.is_egcm() ? 422cd769179345799d383f92dd615991755ec24be1Vadim Girlin CF_WORD1_EG(dw1).get_CF_INST() : 432cd769179345799d383f92dd615991755ec24be1Vadim Girlin CF_WORD1_R6R7(dw1).get_CF_INST(); 442cd769179345799d383f92dd615991755ec24be1Vadim Girlin 452cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.set_op(r600_isa_cf_by_opcode(ctx.isa, opcode, 0)); 462cd769179345799d383f92dd615991755ec24be1Vadim Girlin 472cd769179345799d383f92dd615991755ec24be1Vadim Girlin if (bc.op_ptr->flags & CF_EXP) { 482cd769179345799d383f92dd615991755ec24be1Vadim Girlin return decode_cf_exp(i, bc); 492cd769179345799d383f92dd615991755ec24be1Vadim Girlin } else if (bc.op_ptr->flags & CF_MEM) { 502cd769179345799d383f92dd615991755ec24be1Vadim Girlin return decode_cf_mem(i, bc); 512cd769179345799d383f92dd615991755ec24be1Vadim Girlin } 522cd769179345799d383f92dd615991755ec24be1Vadim Girlin 532cd769179345799d383f92dd615991755ec24be1Vadim Girlin if (ctx.is_egcm()) { 542cd769179345799d383f92dd615991755ec24be1Vadim Girlin CF_WORD0_EGCM w0(dw0); 552cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.addr = w0.get_ADDR(); 562cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.jumptable_sel = w0.get_JUMPTABLE_SEL(); 572cd769179345799d383f92dd615991755ec24be1Vadim Girlin 582cd769179345799d383f92dd615991755ec24be1Vadim Girlin if (ctx.is_evergreen()) { 592cd769179345799d383f92dd615991755ec24be1Vadim Girlin CF_WORD1_EG w1(dw1); 602cd769179345799d383f92dd615991755ec24be1Vadim Girlin 612cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.barrier = w1.get_BARRIER(); 622cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.cf_const = w1.get_CF_CONST(); 632cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.cond = w1.get_COND(); 642cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.count = w1.get_COUNT(); 652cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.end_of_program = w1.get_END_OF_PROGRAM(); 662cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.pop_count = w1.get_POP_COUNT(); 672cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.valid_pixel_mode = w1.get_VALID_PIXEL_MODE(); 682cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.whole_quad_mode = w1.get_WHOLE_QUAD_MODE(); 692cd769179345799d383f92dd615991755ec24be1Vadim Girlin 702cd769179345799d383f92dd615991755ec24be1Vadim Girlin } else { // cayman 712cd769179345799d383f92dd615991755ec24be1Vadim Girlin CF_WORD1_CM w1(dw1); 722cd769179345799d383f92dd615991755ec24be1Vadim Girlin 732cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.barrier = w1.get_BARRIER(); 742cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.cf_const = w1.get_CF_CONST(); 752cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.cond = w1.get_COND(); 762cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.count = w1.get_COUNT(); 772cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.pop_count = w1.get_POP_COUNT(); 782cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.valid_pixel_mode = w1.get_VALID_PIXEL_MODE(); 792cd769179345799d383f92dd615991755ec24be1Vadim Girlin } 802cd769179345799d383f92dd615991755ec24be1Vadim Girlin 812cd769179345799d383f92dd615991755ec24be1Vadim Girlin 822cd769179345799d383f92dd615991755ec24be1Vadim Girlin } else { 832cd769179345799d383f92dd615991755ec24be1Vadim Girlin CF_WORD0_R6R7 w0(dw0); 842cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.addr = w0.get_ADDR(); 852cd769179345799d383f92dd615991755ec24be1Vadim Girlin 862cd769179345799d383f92dd615991755ec24be1Vadim Girlin CF_WORD1_R6R7 w1(dw1); 872cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.barrier = w1.get_BARRIER(); 882cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.cf_const = w1.get_CF_CONST(); 892cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.cond = w1.get_COND(); 902cd769179345799d383f92dd615991755ec24be1Vadim Girlin 912cd769179345799d383f92dd615991755ec24be1Vadim Girlin if (ctx.is_r600()) 922cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.count = w1.get_COUNT(); 932cd769179345799d383f92dd615991755ec24be1Vadim Girlin else 942cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.count = w1.get_COUNT() + (w1.get_COUNT_3() << 3); 952cd769179345799d383f92dd615991755ec24be1Vadim Girlin 962cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.end_of_program = w1.get_END_OF_PROGRAM(); 972cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.pop_count = w1.get_POP_COUNT(); 982cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.valid_pixel_mode = w1.get_VALID_PIXEL_MODE(); 992cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.whole_quad_mode = w1.get_WHOLE_QUAD_MODE(); 1002cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.call_count = w1.get_CALL_COUNT(); 1012cd769179345799d383f92dd615991755ec24be1Vadim Girlin } 1022cd769179345799d383f92dd615991755ec24be1Vadim Girlin } 1032cd769179345799d383f92dd615991755ec24be1Vadim Girlin 1042cd769179345799d383f92dd615991755ec24be1Vadim Girlin i += 2; 1052cd769179345799d383f92dd615991755ec24be1Vadim Girlin 1062cd769179345799d383f92dd615991755ec24be1Vadim Girlin return r; 1072cd769179345799d383f92dd615991755ec24be1Vadim Girlin} 1082cd769179345799d383f92dd615991755ec24be1Vadim Girlin 1092cd769179345799d383f92dd615991755ec24be1Vadim Girlinint bc_decoder::decode_cf_alu(unsigned & i, bc_cf& bc) { 1102cd769179345799d383f92dd615991755ec24be1Vadim Girlin int r = 0; 1112cd769179345799d383f92dd615991755ec24be1Vadim Girlin uint32_t dw0 = dw[i++]; 1122cd769179345799d383f92dd615991755ec24be1Vadim Girlin uint32_t dw1 = dw[i++]; 1132cd769179345799d383f92dd615991755ec24be1Vadim Girlin 1142cd769179345799d383f92dd615991755ec24be1Vadim Girlin assert(i <= ndw); 1152cd769179345799d383f92dd615991755ec24be1Vadim Girlin 1162cd769179345799d383f92dd615991755ec24be1Vadim Girlin CF_ALU_WORD0_ALL w0(dw0); 1172cd769179345799d383f92dd615991755ec24be1Vadim Girlin 1182cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.kc[0].bank = w0.get_KCACHE_BANK0(); 1192cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.kc[1].bank = w0.get_KCACHE_BANK1(); 1202cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.kc[0].mode = w0.get_KCACHE_MODE0(); 1212cd769179345799d383f92dd615991755ec24be1Vadim Girlin 1222cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.addr = w0.get_ADDR(); 1232cd769179345799d383f92dd615991755ec24be1Vadim Girlin 1242cd769179345799d383f92dd615991755ec24be1Vadim Girlin if (ctx.is_r600()) { 1252cd769179345799d383f92dd615991755ec24be1Vadim Girlin CF_ALU_WORD1_R6 w1(dw1); 1262cd769179345799d383f92dd615991755ec24be1Vadim Girlin 1272cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.set_op(r600_isa_cf_by_opcode(ctx.isa, w1.get_CF_INST(), 1)); 1282cd769179345799d383f92dd615991755ec24be1Vadim Girlin 1292cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.kc[0].addr = w1.get_KCACHE_ADDR0(); 1302cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.kc[1].mode = w1.get_KCACHE_MODE1(); 1312cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.kc[1].addr = w1.get_KCACHE_ADDR1(); 1322cd769179345799d383f92dd615991755ec24be1Vadim Girlin 1332cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.barrier = w1.get_BARRIER(); 1342cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.count = w1.get_COUNT(); 1352cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.whole_quad_mode = w1.get_WHOLE_QUAD_MODE(); 1362cd769179345799d383f92dd615991755ec24be1Vadim Girlin 1372cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.uses_waterfall = w1.get_USES_WATERFALL(); 1382cd769179345799d383f92dd615991755ec24be1Vadim Girlin } else { 1392cd769179345799d383f92dd615991755ec24be1Vadim Girlin CF_ALU_WORD1_R7EGCM w1(dw1); 1402cd769179345799d383f92dd615991755ec24be1Vadim Girlin 1412cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.set_op(r600_isa_cf_by_opcode(ctx.isa, w1.get_CF_INST(), 1)); 1422cd769179345799d383f92dd615991755ec24be1Vadim Girlin 1432cd769179345799d383f92dd615991755ec24be1Vadim Girlin if (bc.op == CF_OP_ALU_EXT) { 1442cd769179345799d383f92dd615991755ec24be1Vadim Girlin CF_ALU_WORD0_EXT_EGCM w0(dw0); 1452cd769179345799d383f92dd615991755ec24be1Vadim Girlin CF_ALU_WORD1_EXT_EGCM w1(dw1); 1462cd769179345799d383f92dd615991755ec24be1Vadim Girlin 1472cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.kc[0].index_mode = w0.get_KCACHE_BANK_INDEX_MODE0(); 1482cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.kc[1].index_mode = w0.get_KCACHE_BANK_INDEX_MODE1(); 1492cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.kc[2].index_mode = w0.get_KCACHE_BANK_INDEX_MODE2(); 1502cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.kc[3].index_mode = w0.get_KCACHE_BANK_INDEX_MODE3(); 1512cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.kc[2].bank = w0.get_KCACHE_BANK2(); 1522cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.kc[3].bank = w0.get_KCACHE_BANK3(); 1532cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.kc[2].mode = w0.get_KCACHE_MODE2(); 1542cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.kc[3].mode = w1.get_KCACHE_MODE3(); 1552cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.kc[2].addr = w1.get_KCACHE_ADDR2(); 1562cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.kc[3].addr = w1.get_KCACHE_ADDR3(); 1572cd769179345799d383f92dd615991755ec24be1Vadim Girlin 1582cd769179345799d383f92dd615991755ec24be1Vadim Girlin r = decode_cf_alu(i, bc); 1592cd769179345799d383f92dd615991755ec24be1Vadim Girlin 1602cd769179345799d383f92dd615991755ec24be1Vadim Girlin } else { 1612cd769179345799d383f92dd615991755ec24be1Vadim Girlin 1622cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.kc[0].addr = w1.get_KCACHE_ADDR0(); 1632cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.kc[1].mode = w1.get_KCACHE_MODE1(); 1642cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.kc[1].addr = w1.get_KCACHE_ADDR1(); 1652cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.barrier = w1.get_BARRIER(); 1662cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.count = w1.get_COUNT(); 1672cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.whole_quad_mode = w1.get_WHOLE_QUAD_MODE(); 1682cd769179345799d383f92dd615991755ec24be1Vadim Girlin 1692cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.alt_const = w1.get_ALT_CONST(); 1702cd769179345799d383f92dd615991755ec24be1Vadim Girlin } 1712cd769179345799d383f92dd615991755ec24be1Vadim Girlin } 1722cd769179345799d383f92dd615991755ec24be1Vadim Girlin return r; 1732cd769179345799d383f92dd615991755ec24be1Vadim Girlin} 1742cd769179345799d383f92dd615991755ec24be1Vadim Girlin 1752cd769179345799d383f92dd615991755ec24be1Vadim Girlinint bc_decoder::decode_cf_exp(unsigned & i, bc_cf& bc) { 1762cd769179345799d383f92dd615991755ec24be1Vadim Girlin int r = 0; 1772cd769179345799d383f92dd615991755ec24be1Vadim Girlin uint32_t dw0 = dw[i++]; 1782cd769179345799d383f92dd615991755ec24be1Vadim Girlin uint32_t dw1 = dw[i++]; 1792cd769179345799d383f92dd615991755ec24be1Vadim Girlin assert(i <= ndw); 1802cd769179345799d383f92dd615991755ec24be1Vadim Girlin 1812cd769179345799d383f92dd615991755ec24be1Vadim Girlin CF_ALLOC_EXPORT_WORD0_ALL w0(dw0); 1822cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.array_base = w0.get_ARRAY_BASE(); 1832cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.elem_size = w0.get_ELEM_SIZE(); 1842cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.index_gpr = w0.get_INDEX_GPR(); 1852cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.rw_gpr = w0.get_RW_GPR(); 1862cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.rw_rel = w0.get_RW_REL(); 1872cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.type = w0.get_TYPE(); 1882cd769179345799d383f92dd615991755ec24be1Vadim Girlin 1892cd769179345799d383f92dd615991755ec24be1Vadim Girlin if (ctx.is_evergreen()) { 1902cd769179345799d383f92dd615991755ec24be1Vadim Girlin CF_ALLOC_EXPORT_WORD1_SWIZ_EG w1(dw1); 1912cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.barrier = w1.get_BARRIER(); 1922cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.burst_count = w1.get_BURST_COUNT(); 1932cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.end_of_program = w1.get_END_OF_PROGRAM(); 1942cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.sel[0] = w1.get_SEL_X(); 1952cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.sel[1] = w1.get_SEL_Y(); 1962cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.sel[2] = w1.get_SEL_Z(); 1972cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.sel[3] = w1.get_SEL_W(); 1982cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.valid_pixel_mode = w1.get_VALID_PIXEL_MODE(); 1992cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.mark = w1.get_MARK(); 2002cd769179345799d383f92dd615991755ec24be1Vadim Girlin 2012cd769179345799d383f92dd615991755ec24be1Vadim Girlin } else if (ctx.is_cayman()) { 2022cd769179345799d383f92dd615991755ec24be1Vadim Girlin CF_ALLOC_EXPORT_WORD1_SWIZ_CM w1(dw1); 2032cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.barrier = w1.get_BARRIER(); 2042cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.burst_count = w1.get_BURST_COUNT(); 2052cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.mark = w1.get_MARK(); 2062cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.sel[0] = w1.get_SEL_X(); 2072cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.sel[1] = w1.get_SEL_Y(); 2082cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.sel[2] = w1.get_SEL_Z(); 2092cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.sel[3] = w1.get_SEL_W(); 2102cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.valid_pixel_mode = w1.get_VALID_PIXEL_MODE(); 2112cd769179345799d383f92dd615991755ec24be1Vadim Girlin 2122cd769179345799d383f92dd615991755ec24be1Vadim Girlin } else { // r67 2132cd769179345799d383f92dd615991755ec24be1Vadim Girlin CF_ALLOC_EXPORT_WORD1_SWIZ_R6R7 w1(dw1); 2142cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.barrier = w1.get_BARRIER(); 2152cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.burst_count = w1.get_BURST_COUNT(); 2162cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.end_of_program = w1.get_END_OF_PROGRAM(); 2172cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.sel[0] = w1.get_SEL_X(); 2182cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.sel[1] = w1.get_SEL_Y(); 2192cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.sel[2] = w1.get_SEL_Z(); 2202cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.sel[3] = w1.get_SEL_W(); 2212cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.valid_pixel_mode = w1.get_VALID_PIXEL_MODE(); 2222cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.whole_quad_mode = w1.get_WHOLE_QUAD_MODE(); 2232cd769179345799d383f92dd615991755ec24be1Vadim Girlin } 2242cd769179345799d383f92dd615991755ec24be1Vadim Girlin 2252cd769179345799d383f92dd615991755ec24be1Vadim Girlin return r; 2262cd769179345799d383f92dd615991755ec24be1Vadim Girlin} 2272cd769179345799d383f92dd615991755ec24be1Vadim Girlin 2282cd769179345799d383f92dd615991755ec24be1Vadim Girlin 2292cd769179345799d383f92dd615991755ec24be1Vadim Girlinint bc_decoder::decode_cf_mem(unsigned & i, bc_cf& bc) { 2302cd769179345799d383f92dd615991755ec24be1Vadim Girlin int r = 0; 2312cd769179345799d383f92dd615991755ec24be1Vadim Girlin uint32_t dw0 = dw[i++]; 2322cd769179345799d383f92dd615991755ec24be1Vadim Girlin uint32_t dw1 = dw[i++]; 2332cd769179345799d383f92dd615991755ec24be1Vadim Girlin assert(i <= ndw); 2342cd769179345799d383f92dd615991755ec24be1Vadim Girlin 2352cd769179345799d383f92dd615991755ec24be1Vadim Girlin if (!(bc.op_ptr->flags & CF_RAT)) { 2362cd769179345799d383f92dd615991755ec24be1Vadim Girlin CF_ALLOC_EXPORT_WORD0_ALL w0(dw0); 2372cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.array_base = w0.get_ARRAY_BASE(); 2382cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.elem_size = w0.get_ELEM_SIZE(); 2392cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.index_gpr = w0.get_INDEX_GPR(); 2402cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.rw_gpr = w0.get_RW_GPR(); 2412cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.rw_rel = w0.get_RW_REL(); 2422cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.type = w0.get_TYPE(); 2432cd769179345799d383f92dd615991755ec24be1Vadim Girlin } else { 2442cd769179345799d383f92dd615991755ec24be1Vadim Girlin assert(ctx.is_egcm()); 2452cd769179345799d383f92dd615991755ec24be1Vadim Girlin CF_ALLOC_EXPORT_WORD0_RAT_EGCM w0(dw0); 2462cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.elem_size = w0.get_ELEM_SIZE(); 2472cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.index_gpr = w0.get_INDEX_GPR(); 2482cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.rw_gpr = w0.get_RW_GPR(); 2492cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.rw_rel = w0.get_RW_REL(); 2502cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.type = w0.get_TYPE(); 2512cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.rat_id = w0.get_RAT_ID(); 2522cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.rat_inst = w0.get_RAT_INST(); 2532cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.rat_index_mode = w0.get_RAT_INDEX_MODE(); 2542cd769179345799d383f92dd615991755ec24be1Vadim Girlin } 2552cd769179345799d383f92dd615991755ec24be1Vadim Girlin 2562cd769179345799d383f92dd615991755ec24be1Vadim Girlin if (ctx.is_evergreen()) { 2572cd769179345799d383f92dd615991755ec24be1Vadim Girlin CF_ALLOC_EXPORT_WORD1_BUF_EG w1(dw1); 2582cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.barrier = w1.get_BARRIER(); 2592cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.burst_count = w1.get_BURST_COUNT(); 2602cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.end_of_program = w1.get_END_OF_PROGRAM(); 2612cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.valid_pixel_mode = w1.get_VALID_PIXEL_MODE(); 2622cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.mark = w1.get_MARK(); 263322cd2457ccf66a0a88d92f0b0dec1cb3f93eae4Jan Vesely bc.array_size = w1.get_ARR_SIZE(); 2642cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.comp_mask = w1.get_COMP_MASK(); 2652cd769179345799d383f92dd615991755ec24be1Vadim Girlin 2662cd769179345799d383f92dd615991755ec24be1Vadim Girlin } else if (ctx.is_cayman()) { 2672cd769179345799d383f92dd615991755ec24be1Vadim Girlin CF_ALLOC_EXPORT_WORD1_BUF_CM w1(dw1); 2682cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.barrier = w1.get_BARRIER(); 2692cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.burst_count = w1.get_BURST_COUNT(); 2702cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.mark = w1.get_MARK(); 2712cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.valid_pixel_mode = w1.get_VALID_PIXEL_MODE(); 272322cd2457ccf66a0a88d92f0b0dec1cb3f93eae4Jan Vesely bc.array_size = w1.get_ARR_SIZE(); 2732cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.comp_mask = w1.get_COMP_MASK(); 2742cd769179345799d383f92dd615991755ec24be1Vadim Girlin 2752cd769179345799d383f92dd615991755ec24be1Vadim Girlin } else { // r67 2762cd769179345799d383f92dd615991755ec24be1Vadim Girlin CF_ALLOC_EXPORT_WORD1_BUF_R6R7 w1(dw1); 2772cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.barrier = w1.get_BARRIER(); 2782cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.burst_count = w1.get_BURST_COUNT(); 2792cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.end_of_program = w1.get_END_OF_PROGRAM(); 2802cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.valid_pixel_mode = w1.get_VALID_PIXEL_MODE(); 2812cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.whole_quad_mode = w1.get_WHOLE_QUAD_MODE(); 282322cd2457ccf66a0a88d92f0b0dec1cb3f93eae4Jan Vesely bc.array_size = w1.get_ARR_SIZE(); 2832cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.comp_mask = w1.get_COMP_MASK(); 2842cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.whole_quad_mode = w1.get_WHOLE_QUAD_MODE(); 2852cd769179345799d383f92dd615991755ec24be1Vadim Girlin } 2862cd769179345799d383f92dd615991755ec24be1Vadim Girlin 2872cd769179345799d383f92dd615991755ec24be1Vadim Girlin return r; 2882cd769179345799d383f92dd615991755ec24be1Vadim Girlin} 2892cd769179345799d383f92dd615991755ec24be1Vadim Girlin 2902cd769179345799d383f92dd615991755ec24be1Vadim Girlinint bc_decoder::decode_alu(unsigned & i, bc_alu& bc) { 2912cd769179345799d383f92dd615991755ec24be1Vadim Girlin int r = 0; 2922cd769179345799d383f92dd615991755ec24be1Vadim Girlin uint32_t dw0 = dw[i++]; 2932cd769179345799d383f92dd615991755ec24be1Vadim Girlin uint32_t dw1 = dw[i++]; 2942cd769179345799d383f92dd615991755ec24be1Vadim Girlin assert(i <= ndw); 2952cd769179345799d383f92dd615991755ec24be1Vadim Girlin 2962cd769179345799d383f92dd615991755ec24be1Vadim Girlin ALU_WORD0_ALL w0(dw0); 2972cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.index_mode = w0.get_INDEX_MODE(); 2982cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.last = w0.get_LAST(); 2992cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.pred_sel = w0.get_PRED_SEL(); 3002cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.src[0].chan = w0.get_SRC0_CHAN(); 3012cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.src[0].sel = w0.get_SRC0_SEL(); 3022cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.src[0].neg = w0.get_SRC0_NEG(); 3032cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.src[0].rel = w0.get_SRC0_REL(); 3042cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.src[1].chan = w0.get_SRC1_CHAN(); 3052cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.src[1].sel = w0.get_SRC1_SEL(); 3062cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.src[1].neg = w0.get_SRC1_NEG(); 3072cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.src[1].rel = w0.get_SRC1_REL(); 3082cd769179345799d383f92dd615991755ec24be1Vadim Girlin 3092cd769179345799d383f92dd615991755ec24be1Vadim Girlin if ((dw1 >> 15) & 7) { // op3 3102cd769179345799d383f92dd615991755ec24be1Vadim Girlin ALU_WORD1_OP3_ALL w1(dw1); 3112cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.set_op(r600_isa_alu_by_opcode(ctx.isa, w1.get_ALU_INST(), 1)); 3122cd769179345799d383f92dd615991755ec24be1Vadim Girlin 313b2fa64b16166925200b09f7de62244358d22f0b7Glenn Kennard if (bc.op == ALU_OP3_LDS_IDX_OP) { 314b2fa64b16166925200b09f7de62244358d22f0b7Glenn Kennard ALU_WORD0_LDS_IDX_OP_EGCM iw0(dw0); 315b2fa64b16166925200b09f7de62244358d22f0b7Glenn Kennard ALU_WORD1_LDS_IDX_OP_EGCM iw1(dw1); 316b2fa64b16166925200b09f7de62244358d22f0b7Glenn Kennard bc.index_mode = iw0.get_INDEX_MODE(); 317b2fa64b16166925200b09f7de62244358d22f0b7Glenn Kennard bc.last = iw0.get_LAST(); 318b2fa64b16166925200b09f7de62244358d22f0b7Glenn Kennard bc.pred_sel = iw0.get_PRED_SEL(); 319b2fa64b16166925200b09f7de62244358d22f0b7Glenn Kennard bc.src[0].chan = iw0.get_SRC0_CHAN(); 320b2fa64b16166925200b09f7de62244358d22f0b7Glenn Kennard bc.src[0].sel = iw0.get_SRC0_SEL(); 321b2fa64b16166925200b09f7de62244358d22f0b7Glenn Kennard bc.src[0].rel = iw0.get_SRC0_REL(); 322b2fa64b16166925200b09f7de62244358d22f0b7Glenn Kennard 323b2fa64b16166925200b09f7de62244358d22f0b7Glenn Kennard bc.src[1].chan = iw0.get_SRC1_CHAN(); 324b2fa64b16166925200b09f7de62244358d22f0b7Glenn Kennard bc.src[1].sel = iw0.get_SRC1_SEL(); 325b2fa64b16166925200b09f7de62244358d22f0b7Glenn Kennard bc.src[1].rel = iw0.get_SRC1_REL(); 326b2fa64b16166925200b09f7de62244358d22f0b7Glenn Kennard 327b2fa64b16166925200b09f7de62244358d22f0b7Glenn Kennard bc.bank_swizzle = iw1.get_BANK_SWIZZLE(); 328b2fa64b16166925200b09f7de62244358d22f0b7Glenn Kennard bc.src[2].chan = iw1.get_SRC2_CHAN(); 329b2fa64b16166925200b09f7de62244358d22f0b7Glenn Kennard bc.src[2].sel = iw1.get_SRC2_SEL(); 330b2fa64b16166925200b09f7de62244358d22f0b7Glenn Kennard bc.src[2].rel = iw1.get_SRC2_REL(); 331b2fa64b16166925200b09f7de62244358d22f0b7Glenn Kennard bc.dst_chan = iw1.get_DST_CHAN(); 332b2fa64b16166925200b09f7de62244358d22f0b7Glenn Kennard // TODO: clean up 33343ac091e4c735a50edf61972090ba83126f295e9Nicolai Hähnle for (size_t k = 0, e = r600_alu_op_table_size(); k != e; k++) { 33443ac091e4c735a50edf61972090ba83126f295e9Nicolai Hähnle if (((r600_alu_op_table[k].opcode[1] >> 8) & 0xff) == iw1.get_LDS_OP()) { 33543ac091e4c735a50edf61972090ba83126f295e9Nicolai Hähnle bc.op_ptr = &r600_alu_op_table[k]; 336b2fa64b16166925200b09f7de62244358d22f0b7Glenn Kennard bc.op = k; 337b2fa64b16166925200b09f7de62244358d22f0b7Glenn Kennard break; 338b2fa64b16166925200b09f7de62244358d22f0b7Glenn Kennard } 339b2fa64b16166925200b09f7de62244358d22f0b7Glenn Kennard } 340b2fa64b16166925200b09f7de62244358d22f0b7Glenn Kennard bc.lds_idx_offset = 341b2fa64b16166925200b09f7de62244358d22f0b7Glenn Kennard (iw0.get_IDX_OFFSET_4() << 4) | 342b2fa64b16166925200b09f7de62244358d22f0b7Glenn Kennard (iw0.get_IDX_OFFSET_5() << 5) | 343b2fa64b16166925200b09f7de62244358d22f0b7Glenn Kennard (iw1.get_IDX_OFFSET_1() << 1) | 344b2fa64b16166925200b09f7de62244358d22f0b7Glenn Kennard (iw1.get_IDX_OFFSET_0() << 0) | 345b2fa64b16166925200b09f7de62244358d22f0b7Glenn Kennard (iw1.get_IDX_OFFSET_2() << 2) | 346b2fa64b16166925200b09f7de62244358d22f0b7Glenn Kennard (iw1.get_IDX_OFFSET_3() << 3); 347b2fa64b16166925200b09f7de62244358d22f0b7Glenn Kennard } 348b2fa64b16166925200b09f7de62244358d22f0b7Glenn Kennard else { 349b2fa64b16166925200b09f7de62244358d22f0b7Glenn Kennard bc.bank_swizzle = w1.get_BANK_SWIZZLE(); 350b2fa64b16166925200b09f7de62244358d22f0b7Glenn Kennard bc.clamp = w1.get_CLAMP(); 351b2fa64b16166925200b09f7de62244358d22f0b7Glenn Kennard bc.dst_chan = w1.get_DST_CHAN(); 352b2fa64b16166925200b09f7de62244358d22f0b7Glenn Kennard bc.dst_gpr = w1.get_DST_GPR(); 353b2fa64b16166925200b09f7de62244358d22f0b7Glenn Kennard bc.dst_rel = w1.get_DST_REL(); 354b2fa64b16166925200b09f7de62244358d22f0b7Glenn Kennard 355b2fa64b16166925200b09f7de62244358d22f0b7Glenn Kennard bc.src[2].chan = w1.get_SRC2_CHAN(); 356b2fa64b16166925200b09f7de62244358d22f0b7Glenn Kennard bc.src[2].sel = w1.get_SRC2_SEL(); 357b2fa64b16166925200b09f7de62244358d22f0b7Glenn Kennard bc.src[2].neg = w1.get_SRC2_NEG(); 358b2fa64b16166925200b09f7de62244358d22f0b7Glenn Kennard bc.src[2].rel = w1.get_SRC2_REL(); 359b2fa64b16166925200b09f7de62244358d22f0b7Glenn Kennard } 3602cd769179345799d383f92dd615991755ec24be1Vadim Girlin 3612cd769179345799d383f92dd615991755ec24be1Vadim Girlin } else { // op2 3622cd769179345799d383f92dd615991755ec24be1Vadim Girlin if (ctx.is_r600()) { 3632cd769179345799d383f92dd615991755ec24be1Vadim Girlin ALU_WORD1_OP2_R6 w1(dw1); 3642cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.set_op(r600_isa_alu_by_opcode(ctx.isa, w1.get_ALU_INST(), 0)); 3652cd769179345799d383f92dd615991755ec24be1Vadim Girlin 3662cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.bank_swizzle = w1.get_BANK_SWIZZLE(); 3672cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.clamp = w1.get_CLAMP(); 3682cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.dst_chan = w1.get_DST_CHAN(); 3692cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.dst_gpr = w1.get_DST_GPR(); 3702cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.dst_rel = w1.get_DST_REL(); 3712cd769179345799d383f92dd615991755ec24be1Vadim Girlin 3722cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.omod = w1.get_OMOD(); 3732cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.src[0].abs = w1.get_SRC0_ABS(); 3742cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.src[1].abs = w1.get_SRC1_ABS(); 3752cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.write_mask = w1.get_WRITE_MASK(); 3762cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.update_exec_mask = w1.get_UPDATE_EXEC_MASK(); 3772cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.update_pred = w1.get_UPDATE_PRED(); 3782cd769179345799d383f92dd615991755ec24be1Vadim Girlin 3792cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.fog_merge = w1.get_FOG_MERGE(); 3802cd769179345799d383f92dd615991755ec24be1Vadim Girlin 3812cd769179345799d383f92dd615991755ec24be1Vadim Girlin } else { 3822cd769179345799d383f92dd615991755ec24be1Vadim Girlin ALU_WORD1_OP2_R7EGCM w1(dw1); 3832cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.set_op(r600_isa_alu_by_opcode(ctx.isa, w1.get_ALU_INST(), 0)); 3842cd769179345799d383f92dd615991755ec24be1Vadim Girlin 3852cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.bank_swizzle = w1.get_BANK_SWIZZLE(); 3862cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.clamp = w1.get_CLAMP(); 3872cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.dst_chan = w1.get_DST_CHAN(); 3882cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.dst_gpr = w1.get_DST_GPR(); 3892cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.dst_rel = w1.get_DST_REL(); 3902cd769179345799d383f92dd615991755ec24be1Vadim Girlin 3912cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.omod = w1.get_OMOD(); 3922cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.src[0].abs = w1.get_SRC0_ABS(); 3932cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.src[1].abs = w1.get_SRC1_ABS(); 3942cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.write_mask = w1.get_WRITE_MASK(); 3952cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.update_exec_mask = w1.get_UPDATE_EXEC_MASK(); 3962cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.update_pred = w1.get_UPDATE_PRED(); 3972cd769179345799d383f92dd615991755ec24be1Vadim Girlin } 3982cd769179345799d383f92dd615991755ec24be1Vadim Girlin } 3992cd769179345799d383f92dd615991755ec24be1Vadim Girlin 4002cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.slot_flags = (alu_op_flags)bc.op_ptr->slots[ctx.isa->hw_class]; 4012cd769179345799d383f92dd615991755ec24be1Vadim Girlin return r; 4022cd769179345799d383f92dd615991755ec24be1Vadim Girlin} 4032cd769179345799d383f92dd615991755ec24be1Vadim Girlin 4042cd769179345799d383f92dd615991755ec24be1Vadim Girlinint bc_decoder::decode_fetch(unsigned & i, bc_fetch& bc) { 4052cd769179345799d383f92dd615991755ec24be1Vadim Girlin int r = 0; 4062cd769179345799d383f92dd615991755ec24be1Vadim Girlin uint32_t dw0 = dw[i]; 4072cd769179345799d383f92dd615991755ec24be1Vadim Girlin uint32_t dw1 = dw[i+1]; 4082cd769179345799d383f92dd615991755ec24be1Vadim Girlin uint32_t dw2 = dw[i+2]; 4092cd769179345799d383f92dd615991755ec24be1Vadim Girlin assert(i + 4 <= ndw); 4102cd769179345799d383f92dd615991755ec24be1Vadim Girlin 4112cd769179345799d383f92dd615991755ec24be1Vadim Girlin unsigned fetch_opcode = dw0 & 0x1F; 4122cd769179345799d383f92dd615991755ec24be1Vadim Girlin 413fe4eb49df9ee93d9fe97d16149f682a6ebe79d42Dave Airlie if (fetch_opcode == 2) { // MEM_INST_MEM 414fe4eb49df9ee93d9fe97d16149f682a6ebe79d42Dave Airlie unsigned mem_op = (dw0 >> 8) & 0x7; 415fe4eb49df9ee93d9fe97d16149f682a6ebe79d42Dave Airlie unsigned gds_op; 416fe4eb49df9ee93d9fe97d16149f682a6ebe79d42Dave Airlie if (mem_op == 4) { 417fe4eb49df9ee93d9fe97d16149f682a6ebe79d42Dave Airlie gds_op = (dw1 >> 9) & 0x1f; 418fe4eb49df9ee93d9fe97d16149f682a6ebe79d42Dave Airlie fetch_opcode = FETCH_OP_GDS_ADD + gds_op; 419fe4eb49df9ee93d9fe97d16149f682a6ebe79d42Dave Airlie } else if (mem_op == 5) 420fe4eb49df9ee93d9fe97d16149f682a6ebe79d42Dave Airlie fetch_opcode = FETCH_OP_TF_WRITE; 421fe4eb49df9ee93d9fe97d16149f682a6ebe79d42Dave Airlie bc.set_op(fetch_opcode); 422fe4eb49df9ee93d9fe97d16149f682a6ebe79d42Dave Airlie } else 423fe4eb49df9ee93d9fe97d16149f682a6ebe79d42Dave Airlie bc.set_op(r600_isa_fetch_by_opcode(ctx.isa, fetch_opcode)); 424fe4eb49df9ee93d9fe97d16149f682a6ebe79d42Dave Airlie 425fe4eb49df9ee93d9fe97d16149f682a6ebe79d42Dave Airlie if (bc.op_ptr->flags & FF_GDS) 426fe4eb49df9ee93d9fe97d16149f682a6ebe79d42Dave Airlie return decode_fetch_gds(i, bc); 4272cd769179345799d383f92dd615991755ec24be1Vadim Girlin 4282cd769179345799d383f92dd615991755ec24be1Vadim Girlin if (bc.op_ptr->flags & FF_VTX) 4292cd769179345799d383f92dd615991755ec24be1Vadim Girlin return decode_fetch_vtx(i, bc); 4302cd769179345799d383f92dd615991755ec24be1Vadim Girlin 4312cd769179345799d383f92dd615991755ec24be1Vadim Girlin // tex 4322cd769179345799d383f92dd615991755ec24be1Vadim Girlin 4332cd769179345799d383f92dd615991755ec24be1Vadim Girlin if (ctx.is_r600()) { 4342cd769179345799d383f92dd615991755ec24be1Vadim Girlin TEX_WORD0_R6 w0(dw0); 4352cd769179345799d383f92dd615991755ec24be1Vadim Girlin 4362cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.bc_frac_mode = w0.get_BC_FRAC_MODE(); 4372cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.fetch_whole_quad = w0.get_FETCH_WHOLE_QUAD(); 4382cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.resource_id = w0.get_RESOURCE_ID(); 4392cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.src_gpr = w0.get_SRC_GPR(); 4402cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.src_rel = w0.get_SRC_REL(); 4412cd769179345799d383f92dd615991755ec24be1Vadim Girlin 4422cd769179345799d383f92dd615991755ec24be1Vadim Girlin } else if (ctx.is_r600()) { 4432cd769179345799d383f92dd615991755ec24be1Vadim Girlin TEX_WORD0_R7 w0(dw0); 4442cd769179345799d383f92dd615991755ec24be1Vadim Girlin 4452cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.bc_frac_mode = w0.get_BC_FRAC_MODE(); 4462cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.fetch_whole_quad = w0.get_FETCH_WHOLE_QUAD(); 4472cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.resource_id = w0.get_RESOURCE_ID(); 4482cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.src_gpr = w0.get_SRC_GPR(); 4492cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.src_rel = w0.get_SRC_REL(); 4502cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.alt_const = w0.get_ALT_CONST(); 4512cd769179345799d383f92dd615991755ec24be1Vadim Girlin 4522cd769179345799d383f92dd615991755ec24be1Vadim Girlin } else { // eg/cm 4532cd769179345799d383f92dd615991755ec24be1Vadim Girlin TEX_WORD0_EGCM w0(dw0); 4542cd769179345799d383f92dd615991755ec24be1Vadim Girlin 4552cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.fetch_whole_quad = w0.get_FETCH_WHOLE_QUAD(); 4562cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.resource_id = w0.get_RESOURCE_ID(); 4572cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.src_gpr = w0.get_SRC_GPR(); 4582cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.src_rel = w0.get_SRC_REL(); 4592cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.alt_const = w0.get_ALT_CONST(); 4602cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.inst_mod = w0.get_INST_MOD(); 4612cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.resource_index_mode = w0.get_RESOURCE_INDEX_MODE(); 4622cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.sampler_index_mode = w0.get_SAMPLER_INDEX_MODE(); 4632cd769179345799d383f92dd615991755ec24be1Vadim Girlin } 4642cd769179345799d383f92dd615991755ec24be1Vadim Girlin 4652cd769179345799d383f92dd615991755ec24be1Vadim Girlin TEX_WORD1_ALL w1(dw1); 4662cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.coord_type[0] = w1.get_COORD_TYPE_X(); 4672cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.coord_type[1] = w1.get_COORD_TYPE_Y(); 4682cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.coord_type[2] = w1.get_COORD_TYPE_Z(); 4692cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.coord_type[3] = w1.get_COORD_TYPE_W(); 4702cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.dst_gpr = w1.get_DST_GPR(); 4712cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.dst_rel = w1.get_DST_REL(); 4722cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.dst_sel[0] = w1.get_DST_SEL_X(); 4732cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.dst_sel[1] = w1.get_DST_SEL_Y(); 4742cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.dst_sel[2] = w1.get_DST_SEL_Z(); 4752cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.dst_sel[3] = w1.get_DST_SEL_W(); 4762cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.lod_bias = w1.get_LOD_BIAS(); 4772cd769179345799d383f92dd615991755ec24be1Vadim Girlin 4782cd769179345799d383f92dd615991755ec24be1Vadim Girlin TEX_WORD2_ALL w2(dw2); 4792cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.offset[0] = w2.get_OFFSET_X(); 4802cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.offset[1] = w2.get_OFFSET_Y(); 4812cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.offset[2] = w2.get_OFFSET_Z(); 4822cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.sampler_id = w2.get_SAMPLER_ID(); 4832cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.src_sel[0] = w2.get_SRC_SEL_X(); 4842cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.src_sel[1] = w2.get_SRC_SEL_Y(); 4852cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.src_sel[2] = w2.get_SRC_SEL_Z(); 4862cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.src_sel[3] = w2.get_SRC_SEL_W(); 4872cd769179345799d383f92dd615991755ec24be1Vadim Girlin 4882cd769179345799d383f92dd615991755ec24be1Vadim Girlin i += 4; 4892cd769179345799d383f92dd615991755ec24be1Vadim Girlin return r; 4902cd769179345799d383f92dd615991755ec24be1Vadim Girlin} 4912cd769179345799d383f92dd615991755ec24be1Vadim Girlin 492fe4eb49df9ee93d9fe97d16149f682a6ebe79d42Dave Airlieint bc_decoder::decode_fetch_gds(unsigned & i, bc_fetch& bc) { 493fe4eb49df9ee93d9fe97d16149f682a6ebe79d42Dave Airlie int r = 0; 494fe4eb49df9ee93d9fe97d16149f682a6ebe79d42Dave Airlie uint32_t dw0 = dw[i]; 495fe4eb49df9ee93d9fe97d16149f682a6ebe79d42Dave Airlie uint32_t dw1 = dw[i+1]; 496fe4eb49df9ee93d9fe97d16149f682a6ebe79d42Dave Airlie uint32_t dw2 = dw[i+2]; 497fe4eb49df9ee93d9fe97d16149f682a6ebe79d42Dave Airlie uint32_t tmp; 498fe4eb49df9ee93d9fe97d16149f682a6ebe79d42Dave Airlie /* GDS instructions align to 4 words boundaries */ 499fe4eb49df9ee93d9fe97d16149f682a6ebe79d42Dave Airlie i+= 4; 500fe4eb49df9ee93d9fe97d16149f682a6ebe79d42Dave Airlie assert(i <= ndw); 501fe4eb49df9ee93d9fe97d16149f682a6ebe79d42Dave Airlie 502fe4eb49df9ee93d9fe97d16149f682a6ebe79d42Dave Airlie MEM_GDS_WORD0_EGCM w0(dw0); 503fe4eb49df9ee93d9fe97d16149f682a6ebe79d42Dave Airlie bc.src_gpr = w0.get_SRC_GPR(); 504fe4eb49df9ee93d9fe97d16149f682a6ebe79d42Dave Airlie tmp = w0.get_SRC_REL_MODE(); 505fe4eb49df9ee93d9fe97d16149f682a6ebe79d42Dave Airlie bc.src_rel_global = (tmp == 2); 506fe4eb49df9ee93d9fe97d16149f682a6ebe79d42Dave Airlie bc.src_sel[0] = w0.get_SRC_SEL_X(); 507fe4eb49df9ee93d9fe97d16149f682a6ebe79d42Dave Airlie bc.src_sel[1] = w0.get_SRC_SEL_Y(); 508fe4eb49df9ee93d9fe97d16149f682a6ebe79d42Dave Airlie bc.src_sel[2] = w0.get_SRC_SEL_Z(); 509fe4eb49df9ee93d9fe97d16149f682a6ebe79d42Dave Airlie 510fe4eb49df9ee93d9fe97d16149f682a6ebe79d42Dave Airlie MEM_GDS_WORD1_EGCM w1(dw1); 511fe4eb49df9ee93d9fe97d16149f682a6ebe79d42Dave Airlie bc.dst_gpr = w1.get_DST_GPR(); 512fe4eb49df9ee93d9fe97d16149f682a6ebe79d42Dave Airlie tmp = w1.get_DST_REL_MODE(); 513fe4eb49df9ee93d9fe97d16149f682a6ebe79d42Dave Airlie bc.dst_rel_global = (tmp == 2); 514fe4eb49df9ee93d9fe97d16149f682a6ebe79d42Dave Airlie bc.src2_gpr = w1.get_SRC_GPR(); 515fe4eb49df9ee93d9fe97d16149f682a6ebe79d42Dave Airlie 516fe4eb49df9ee93d9fe97d16149f682a6ebe79d42Dave Airlie MEM_GDS_WORD2_EGCM w2(dw2); 517fe4eb49df9ee93d9fe97d16149f682a6ebe79d42Dave Airlie bc.dst_sel[0] = w2.get_DST_SEL_X(); 518fe4eb49df9ee93d9fe97d16149f682a6ebe79d42Dave Airlie bc.dst_sel[1] = w2.get_DST_SEL_Y(); 519fe4eb49df9ee93d9fe97d16149f682a6ebe79d42Dave Airlie bc.dst_sel[2] = w2.get_DST_SEL_Z(); 520fe4eb49df9ee93d9fe97d16149f682a6ebe79d42Dave Airlie bc.dst_sel[3] = w2.get_DST_SEL_W(); 521fe4eb49df9ee93d9fe97d16149f682a6ebe79d42Dave Airlie return r; 522fe4eb49df9ee93d9fe97d16149f682a6ebe79d42Dave Airlie} 523fe4eb49df9ee93d9fe97d16149f682a6ebe79d42Dave Airlie 5242cd769179345799d383f92dd615991755ec24be1Vadim Girlinint bc_decoder::decode_fetch_vtx(unsigned & i, bc_fetch& bc) { 5252cd769179345799d383f92dd615991755ec24be1Vadim Girlin int r = 0; 5262cd769179345799d383f92dd615991755ec24be1Vadim Girlin uint32_t dw0 = dw[i]; 5272cd769179345799d383f92dd615991755ec24be1Vadim Girlin uint32_t dw1 = dw[i+1]; 5282cd769179345799d383f92dd615991755ec24be1Vadim Girlin uint32_t dw2 = dw[i+2]; 5292cd769179345799d383f92dd615991755ec24be1Vadim Girlin i+= 4; 5302cd769179345799d383f92dd615991755ec24be1Vadim Girlin assert(i <= ndw); 5312cd769179345799d383f92dd615991755ec24be1Vadim Girlin 5322cd769179345799d383f92dd615991755ec24be1Vadim Girlin if (ctx.is_cayman()) { 5332cd769179345799d383f92dd615991755ec24be1Vadim Girlin VTX_WORD0_CM w0(dw0); 5342cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.resource_id = w0.get_BUFFER_ID(); 5352cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.fetch_type = w0.get_FETCH_TYPE(); 5362cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.fetch_whole_quad = w0.get_FETCH_WHOLE_QUAD(); 5372cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.src_gpr = w0.get_SRC_GPR(); 5382cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.src_rel = w0.get_SRC_REL(); 5392cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.src_sel[0] = w0.get_SRC_SEL_X(); 5402cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.coalesced_read = w0.get_COALESCED_READ(); 5412cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.lds_req = w0.get_LDS_REQ(); 5422cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.structured_read = w0.get_STRUCTURED_READ(); 5432cd769179345799d383f92dd615991755ec24be1Vadim Girlin 5442cd769179345799d383f92dd615991755ec24be1Vadim Girlin } else { 5452cd769179345799d383f92dd615991755ec24be1Vadim Girlin VTX_WORD0_R6R7EG w0(dw0); 5462cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.resource_id = w0.get_BUFFER_ID(); 5472cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.fetch_type = w0.get_FETCH_TYPE(); 5482cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.fetch_whole_quad = w0.get_FETCH_WHOLE_QUAD(); 5492cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.mega_fetch_count = w0.get_MEGA_FETCH_COUNT(); 5502cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.src_gpr = w0.get_SRC_GPR(); 5512cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.src_rel = w0.get_SRC_REL(); 5522cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.src_sel[0] = w0.get_SRC_SEL_X(); 5532cd769179345799d383f92dd615991755ec24be1Vadim Girlin } 5542cd769179345799d383f92dd615991755ec24be1Vadim Girlin 5552cd769179345799d383f92dd615991755ec24be1Vadim Girlin if (bc.op == FETCH_OP_SEMFETCH) { 5562cd769179345799d383f92dd615991755ec24be1Vadim Girlin VTX_WORD1_SEM_ALL w1(dw1); 5572cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.data_format = w1.get_DATA_FORMAT(); 5582cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.dst_sel[0] = w1.get_DST_SEL_X(); 5592cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.dst_sel[1] = w1.get_DST_SEL_Y(); 5602cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.dst_sel[2] = w1.get_DST_SEL_Z(); 5612cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.dst_sel[3] = w1.get_DST_SEL_W(); 5622cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.format_comp_all = w1.get_FORMAT_COMP_ALL(); 5632cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.num_format_all = w1.get_NUM_FORMAT_ALL(); 5642cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.srf_mode_all = w1.get_SRF_MODE_ALL(); 5652cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.use_const_fields = w1.get_USE_CONST_FIELDS(); 5662cd769179345799d383f92dd615991755ec24be1Vadim Girlin 5672cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.semantic_id = w1.get_SEMANTIC_ID(); 5682cd769179345799d383f92dd615991755ec24be1Vadim Girlin 5692cd769179345799d383f92dd615991755ec24be1Vadim Girlin } else { 5702cd769179345799d383f92dd615991755ec24be1Vadim Girlin VTX_WORD1_GPR_ALL w1(dw1); 5712cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.data_format = w1.get_DATA_FORMAT(); 5722cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.dst_sel[0] = w1.get_DST_SEL_X(); 5732cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.dst_sel[1] = w1.get_DST_SEL_Y(); 5742cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.dst_sel[2] = w1.get_DST_SEL_Z(); 5752cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.dst_sel[3] = w1.get_DST_SEL_W(); 5762cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.format_comp_all = w1.get_FORMAT_COMP_ALL(); 5772cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.num_format_all = w1.get_NUM_FORMAT_ALL(); 5782cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.srf_mode_all = w1.get_SRF_MODE_ALL(); 5792cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.use_const_fields = w1.get_USE_CONST_FIELDS(); 5802cd769179345799d383f92dd615991755ec24be1Vadim Girlin 5812cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.dst_gpr = w1.get_DST_GPR(); 5822cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.dst_rel = w1.get_DST_REL(); 5832cd769179345799d383f92dd615991755ec24be1Vadim Girlin } 5842cd769179345799d383f92dd615991755ec24be1Vadim Girlin 5852cd769179345799d383f92dd615991755ec24be1Vadim Girlin switch (ctx.hw_class) { 5862cd769179345799d383f92dd615991755ec24be1Vadim Girlin case HW_CLASS_R600: 5872cd769179345799d383f92dd615991755ec24be1Vadim Girlin { 5882cd769179345799d383f92dd615991755ec24be1Vadim Girlin VTX_WORD2_R6 w2(dw2); 5892cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.const_buf_no_stride = w2.get_CONST_BUF_NO_STRIDE(); 5902cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.endian_swap = w2.get_ENDIAN_SWAP(); 5912cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.mega_fetch = w2.get_MEGA_FETCH(); 5922cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.offset[0] = w2.get_OFFSET(); 5932cd769179345799d383f92dd615991755ec24be1Vadim Girlin break; 5942cd769179345799d383f92dd615991755ec24be1Vadim Girlin } 5952cd769179345799d383f92dd615991755ec24be1Vadim Girlin case HW_CLASS_R700: 5962cd769179345799d383f92dd615991755ec24be1Vadim Girlin { 5972cd769179345799d383f92dd615991755ec24be1Vadim Girlin VTX_WORD2_R7 w2(dw2); 5982cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.const_buf_no_stride = w2.get_CONST_BUF_NO_STRIDE(); 5992cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.endian_swap = w2.get_ENDIAN_SWAP(); 6002cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.mega_fetch = w2.get_MEGA_FETCH(); 6012cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.offset[0] = w2.get_OFFSET(); 6022cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.alt_const = w2.get_ALT_CONST(); 6032cd769179345799d383f92dd615991755ec24be1Vadim Girlin break; 6042cd769179345799d383f92dd615991755ec24be1Vadim Girlin } 6052cd769179345799d383f92dd615991755ec24be1Vadim Girlin case HW_CLASS_EVERGREEN: 6062cd769179345799d383f92dd615991755ec24be1Vadim Girlin { 6072cd769179345799d383f92dd615991755ec24be1Vadim Girlin VTX_WORD2_EG w2(dw2); 6082cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.const_buf_no_stride = w2.get_CONST_BUF_NO_STRIDE(); 6092cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.endian_swap = w2.get_ENDIAN_SWAP(); 6102cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.mega_fetch = w2.get_MEGA_FETCH(); 6112cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.offset[0] = w2.get_OFFSET(); 6122cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.alt_const = w2.get_ALT_CONST(); 6132cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.resource_index_mode = w2.get_BUFFER_INDEX_MODE(); 6142cd769179345799d383f92dd615991755ec24be1Vadim Girlin break; 6152cd769179345799d383f92dd615991755ec24be1Vadim Girlin } 6162cd769179345799d383f92dd615991755ec24be1Vadim Girlin case HW_CLASS_CAYMAN: 6172cd769179345799d383f92dd615991755ec24be1Vadim Girlin { 6182cd769179345799d383f92dd615991755ec24be1Vadim Girlin VTX_WORD2_CM w2(dw2); 6192cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.const_buf_no_stride = w2.get_CONST_BUF_NO_STRIDE(); 6202cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.endian_swap = w2.get_ENDIAN_SWAP(); 6212cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.offset[0] = w2.get_OFFSET(); 6222cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.alt_const = w2.get_ALT_CONST(); 6232cd769179345799d383f92dd615991755ec24be1Vadim Girlin bc.resource_index_mode = w2.get_BUFFER_INDEX_MODE(); 6242cd769179345799d383f92dd615991755ec24be1Vadim Girlin break; 6252cd769179345799d383f92dd615991755ec24be1Vadim Girlin } 6262cd769179345799d383f92dd615991755ec24be1Vadim Girlin default: 6272cd769179345799d383f92dd615991755ec24be1Vadim Girlin assert(!"unknown hw class"); 6282cd769179345799d383f92dd615991755ec24be1Vadim Girlin return -1; 6292cd769179345799d383f92dd615991755ec24be1Vadim Girlin } 6302cd769179345799d383f92dd615991755ec24be1Vadim Girlin 6312cd769179345799d383f92dd615991755ec24be1Vadim Girlin return r; 6322cd769179345799d383f92dd615991755ec24be1Vadim Girlin} 6332cd769179345799d383f92dd615991755ec24be1Vadim Girlin 6342cd769179345799d383f92dd615991755ec24be1Vadim Girlin} 635