Path: blob/21.2-virgl/src/gallium/drivers/nouveau/nvc0/mme/comc597.mme.h
4574 views
#define NV_MME_PRED_MODE_UUUU 01#define NV_MME_PRED_MODE_TTTT 12#define NV_MME_PRED_MODE_FFFF 23#define NV_MME_PRED_MODE_TTUU 34#define NV_MME_PRED_MODE_FFUU 45#define NV_MME_PRED_MODE_TFUU 56#define NV_MME_PRED_MODE_TUUU 67#define NV_MME_PRED_MODE_FUUU 78#define NV_MME_PRED_MODE_UUTT 89#define NV_MME_PRED_MODE_UUTF 910#define NV_MME_PRED_MODE_UUTU 1011#define NV_MME_PRED_MODE_UUFT 1112#define NV_MME_PRED_MODE_UUFF 1213#define NV_MME_PRED_MODE_UUFU 1314#define NV_MME_PRED_MODE_UUUT 1415#define NV_MME_PRED_MODE_UUUF 151617#define NV_MME_REG_R0 018#define NV_MME_REG_R1 119#define NV_MME_REG_R2 220#define NV_MME_REG_R3 321#define NV_MME_REG_R4 422#define NV_MME_REG_R5 523#define NV_MME_REG_R6 624#define NV_MME_REG_R7 725#define NV_MME_REG_R8 826#define NV_MME_REG_R9 927#define NV_MME_REG_R10 1028#define NV_MME_REG_R11 1129#define NV_MME_REG_R12 1230#define NV_MME_REG_R13 1331#define NV_MME_REG_R14 1432#define NV_MME_REG_R15 1533#define NV_MME_REG_R16 1634#define NV_MME_REG_R17 1735#define NV_MME_REG_R18 1836#define NV_MME_REG_R19 1937#define NV_MME_REG_R20 2038#define NV_MME_REG_R21 2139#define NV_MME_REG_R22 2240#define NV_MME_REG_R23 2341#define NV_MME_REG_ZERO 2442#define NV_MME_REG_IMMED 2543#define NV_MME_REG_IMMEDPAIR 2644#define NV_MME_REG_IMMED32 2745#define NV_MME_REG_LOAD0 2846#define NV_MME_REG_LOAD1 294748#define NV_MME_ALU_ADD 049#define NV_MME_ALU_ADDC 150#define NV_MME_ALU_SUB 251#define NV_MME_ALU_SUBB 352#define NV_MME_ALU_MUL 453#define NV_MME_ALU_MULH 554#define NV_MME_ALU_MULU 655#define NV_MME_ALU_EXTENDED 756#define NV_MME_ALU_CLZ 857#define NV_MME_ALU_SLL 958#define NV_MME_ALU_SRL 1059#define NV_MME_ALU_SRA 1160#define NV_MME_ALU_AND 1261#define NV_MME_ALU_NAND 1362#define NV_MME_ALU_OR 1463#define NV_MME_ALU_XOR 1564#define NV_MME_ALU_MERGE 1665#define NV_MME_ALU_SLT 1766#define NV_MME_ALU_SLTU 1867#define NV_MME_ALU_SLE 1968#define NV_MME_ALU_SLEU 2069#define NV_MME_ALU_SEQ 2170#define NV_MME_ALU_STATE 2271#define NV_MME_ALU_LOOP 2372#define NV_MME_ALU_JAL 2473#define NV_MME_ALU_BLT 2574#define NV_MME_ALU_BLTU 2675#define NV_MME_ALU_BLE 2776#define NV_MME_ALU_BLEU 2877#define NV_MME_ALU_BEQ 2978#define NV_MME_ALU_DREAD 3079#define NV_MME_ALU_DWRITE 318081#define NV_MME_OUT_NONE 082#define NV_MME_OUT_ALU0 183#define NV_MME_OUT_ALU1 284#define NV_MME_OUT_LOAD0 385#define NV_MME_OUT_LOAD1 486#define NV_MME_OUT_IMMED0 587#define NV_MME_OUT_IMMED1 688#define NV_MME_OUT_RESERVED 789#define NV_MME_OUT_IMMEDHIGH0 890#define NV_MME_OUT_IMMEDHIGH1 991#define NV_MME_OUT_IMMED32_0 109293#define MME_BITS(en,pm,pr,o0,d0,a0,b0,i0,o1,d1,a1,b1,i1,m0,e0,m1,e1) \94((e1) << (92 - 64) | (m1) << (89 - 64) | \95(e0) << (85 - 64) | (m0) << (82 - 64) | \96(i1) << (66 - 64) | (b1) >> (64 - 61)), \97(((b1) & 7) << (61 - 32) | (a1) << (56 - 32) | \98(d1) << (51 - 32) | (o1) << (46 - 32) | \99(i0) >> (32 - 30)), \100(((i0) & 3) << 30 | (b0) << 25 | (a0) << 20 | (d0) << 15 | (o0) << 10 | \101(pr) << 5 | (pm) << 1 | (en))102103#define MME_INSN(en,o0,d0,a0,b0,i0,m0,e0,o1,d1,a1,b1,i1,m1,e1) \104MME_BITS((en), NV_MME_PRED_MODE_UUUU, NV_MME_REG_ZERO, \105NV_MME_ALU_##o0, NV_MME_REG_##d0, \106NV_MME_REG_##a0, NV_MME_REG_##b0, (i0), \107NV_MME_ALU_##o1, NV_MME_REG_##d1, \108NV_MME_REG_##a1, NV_MME_REG_##b1, (i1), \109NV_MME_OUT_##m0, NV_MME_OUT_##e0, \110NV_MME_OUT_##m1, NV_MME_OUT_##e1)111112uint32_t mmec597_per_instance_bf[] = {113// r1 = load(); // count114// r3 = load(); // mask115// mthd(0x1880, 1); // VERTEX_ARRAY_PER_INSTANCE[0]116MME_INSN(0, ADD, R1, LOAD0, ZERO, (1<<12)|0x1880/4, IMMED0, NONE,117ADD, R3, LOAD1, ZERO, 0, NONE, NONE),118// while (HW_LOOP_COUNT < r1) {119// send(r3 & 1);120// r3 >>= 1;121// }122MME_INSN(0, LOOP, ZERO, R1, ZERO, 0x0003, NONE, NONE,123ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),124MME_INSN(0, AND, ZERO, R3, IMMED, 1, NONE, ALU0,125ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),126MME_INSN(0, SRL, R3, R3, IMMED, 1, NONE, NONE,127ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),128MME_INSN(1, ADD, ZERO, ZERO, ZERO, 0, NONE, NONE,129ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),130MME_INSN(0, ADD, ZERO, ZERO, ZERO, 0, NONE, NONE,131ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),132};133134uint32_t mmec597_vertex_array_select[] = {135// r1 = load(); // array136// r2 = load(); // limit hi137// r3 = load(); // limit lo138// r4 = load(); // start hi139// r5 = load(); // start lo140// r6 = (r1 & 0x1f) << 2;141// r7 = (r1 & 0x1f) << 1;142// mthd(0x1c04 + r6, 1); // VERTEX_ARRAY_START_HIGH[]143// send(r4);144// send(r5);145// mthd(0x0600 + r7, 1); // VERTEX_ARRAY_LIMIT_HIGH[]146// send(r2);147// send(r3);148MME_INSN(0, ADD, R1, LOAD0, ZERO, 0, NONE, NONE,149ADD, R2, LOAD1, ZERO, 0, NONE, NONE),150MME_INSN(0, ADD, R3, LOAD0, ZERO, 0, NONE, NONE,151ADD, R4, LOAD1, ZERO, 0, NONE, NONE),152MME_INSN(0, ADD, R5, LOAD0, ZERO, 0, NONE, NONE,153MERGE, R6, ZERO, R1, (2<<10)|(5<<5)|0, NONE, NONE),154MME_INSN(0, MERGE, R7, ZERO, R1, (1<<10)|(5<<5)|0, ALU1, NONE,155ADD, ZERO, R6, IMMED, (1<<12)|0x1c04/4, NONE, NONE),156MME_INSN(0, ADD, ZERO, R4, ZERO, 0, NONE, ALU0,157ADD, ZERO, R5, ZERO, 0, NONE, ALU1),158MME_INSN(1, ADD, ZERO, R7, IMMED, (1<<12)|0x0600/4, ALU0, ALU1,159ADD, ZERO, R2, ZERO, 0, NONE, NONE),160MME_INSN(0, ADD, ZERO, R3, ZERO, 0, NONE, ALU0,161ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),162};163164uint32_t mmec597_blend_enables[] = {165// r1 = load(); // enable mask166// mthd(0x1360, 1); // NVC0_3D_BLEND_ENABLE[]167// send((r1 >> 0) & 1);168// send((r1 >> 1) & 1);169// send((r1 >> 2) & 1);170// send((r1 >> 3) & 1);171// send((r1 >> 4) & 1);172// send((r1 >> 5) & 1);173// send((r1 >> 6) & 1);174// send((r1 >> 7) & 1);175MME_INSN(0, ADD, R1, LOAD0, ZERO, 0, IMMED1, NONE,176ADD, ZERO, ZERO, ZERO, (1<<12)|0x1360/4, NONE, NONE),177MME_INSN(0, MERGE, ZERO, ZERO, R1, (0<<10)|(1<<5)|0, NONE, ALU0,178MERGE, ZERO, ZERO, R1, (0<<10)|(1<<5)|1, NONE, ALU1),179MME_INSN(0, MERGE, ZERO, ZERO, R1, (0<<10)|(1<<5)|2, NONE, ALU0,180MERGE, ZERO, ZERO, R1, (0<<10)|(1<<5)|3, NONE, ALU1),181MME_INSN(1, MERGE, ZERO, ZERO, R1, (0<<10)|(1<<5)|4, NONE, ALU0,182MERGE, ZERO, ZERO, R1, (0<<10)|(1<<5)|5, NONE, ALU1),183MME_INSN(0, MERGE, ZERO, ZERO, R1, (0<<10)|(1<<5)|6, NONE, ALU0,184MERGE, ZERO, ZERO, R1, (0<<10)|(1<<5)|7, NONE, ALU1),185};186187uint32_t mmec597_poly_mode_front[] = {188// r1 = load();189// mthd(0x0dac,0); // POLYGON_MODE_FRONT190// send(r1);191// r2 = read(0x0db0); // POLYGON_MODE_BACK192// r3 = read(0x20c0); // SP_SELECT[3]193// r7 = r1 | r2;194// r4 = read(0x2100); // SP_SELECT[4]195// r6 = 0x60;196// r7 = r7 & 1;197// if (r7 != 0)198MME_INSN(0, ADD, R1, LOAD0, ZERO, (0<<12)|0x0dac/4, IMMED0, ALU0,199STATE, R2, IMMED, ZERO, 0x0db0/4, NONE, NONE),200MME_INSN(0, STATE, R3, IMMED, ZERO, 0x20c0/4, NONE, NONE,201OR, R7, R1, R2, 0, NONE, NONE),202MME_INSN(0, STATE, R4, IMMED, ZERO, 0x2100/4, NONE, NONE,203ADD, R6, IMMED, ZERO, 0x60, NONE, NONE),204MME_INSN(0, AND, R7, R7, IMMED, 1, NONE, NONE,205ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),206MME_INSN(0, BEQ, ZERO, R7, ZERO, (2<<14)|0x0002, NONE, NONE,207ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),208// r6 = 0x200;209MME_INSN(0, ADD, R6, IMMED, ZERO, 0x200, NONE, NONE,210ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),211// r7 = r3 | r4;212// r7 = r7 & 1;213// if (r7 != 0)214MME_INSN(0, OR, R7, R3, R4, 0, NONE, NONE,215ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),216MME_INSN(0, AND, R7, R7, IMMED, 1, NONE, NONE,217ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),218MME_INSN(0, BEQ, ZERO, R7, ZERO, (2<<14)|0x0002, NONE, NONE,219ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),220// r6 = 0;221MME_INSN(0, ADD, R6, ZERO, ZERO, 0, NONE, NONE,222ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),223// mthd(0x02ec, 0);224// send(r6);225MME_INSN(1, ADD, ZERO, ZERO, ZERO, (0<<12)|0x02ec/4, IMMED0, NONE,226ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),227MME_INSN(0, ADD, ZERO, R6, ZERO, 0, NONE, ALU0,228ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),229};230231uint32_t mmec597_poly_mode_back[] = {232// r1 = load();233// mthd(0x0db0,0); // POLYGON_MODE_BACK234// send(r1);235// r2 = read(0x0dac); // POLYGON_MODE_FRONT236// r3 = read(0x20c0); // SP_SELECT[3]237// r7 = r1 | r2;238// r4 = read(0x2100); // SP_SELECT[4]239// r6 = 0x60;240// r7 = r7 & 1;241// if (r7 != 0)242MME_INSN(0, ADD, R1, LOAD0, ZERO, (0<<12)|0x0db0/4, IMMED0, ALU0,243STATE, R2, IMMED, ZERO, 0x0dac/4, NONE, NONE),244MME_INSN(0, STATE, R3, IMMED, ZERO, 0x20c0/4, NONE, NONE,245OR, R7, R1, R2, 0, NONE, NONE),246MME_INSN(0, STATE, R4, IMMED, ZERO, 0x2100/4, NONE, NONE,247ADD, R6, IMMED, ZERO, 0x60, NONE, NONE),248MME_INSN(0, AND, R7, R7, IMMED, 1, NONE, NONE,249ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),250MME_INSN(0, BEQ, ZERO, R7, ZERO, (2<<14)|0x0002, NONE, NONE,251ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),252// r6 = 0x200;253MME_INSN(0, ADD, R6, IMMED, ZERO, 0x200, NONE, NONE,254ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),255// r7 = r3 | r4;256// r7 = r7 & 1;257// if (r7 != 0)258MME_INSN(0, OR, R7, R3, R4, 0, NONE, NONE,259ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),260MME_INSN(0, AND, R7, R7, IMMED, 1, NONE, NONE,261ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),262MME_INSN(0, BEQ, ZERO, R7, ZERO, (2<<14)|0x0002, NONE, NONE,263ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),264// r6 = 0;265MME_INSN(0, ADD, R6, ZERO, ZERO, 0, NONE, NONE,266ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),267// mthd(0x02ec, 0);268// send(r6);269MME_INSN(1, ADD, ZERO, ZERO, ZERO, (0<<12)|0x02ec/4, IMMED0, NONE,270ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),271MME_INSN(0, ADD, ZERO, R6, ZERO, 0, NONE, ALU0,272ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),273};274275uint32_t mmec597_gp_select[] = {276// r1 = load();277// mthd(0x2100,0); // SP_SELECT[4]278// send(r1);279// r2 = read(0x0dac); // POLYGON_MODE_FRONT280// r3 = read(0x0db0); // POLYGON_MODE_BACK281// r7 = r2 | r3;282// r4 = read(0x20c0); // SP_SELECT[3]283// r6 = 0x60;284// r7 = r7 & 1;285// if (r7 != 0)286MME_INSN(0, ADD, R1, LOAD0, ZERO, (0<<12)|0x2100/4, IMMED0, ALU0,287STATE, R2, IMMED, ZERO, 0x0dac/4, NONE, NONE),288MME_INSN(0, STATE, R3, IMMED, ZERO, 0x0db0/4, NONE, NONE,289OR, R7, R2, R3, 0, NONE, NONE),290MME_INSN(0, STATE, R4, IMMED, ZERO, 0x20c0/4, NONE, NONE,291ADD, R6, IMMED, ZERO, 0x60, NONE, NONE),292MME_INSN(0, AND, R7, R7, IMMED, 1, NONE, NONE,293ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),294MME_INSN(0, BEQ, ZERO, R7, ZERO, (2<<14)|0x0002, NONE, NONE,295ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),296// r6 = 0x200;297MME_INSN(0, ADD, R6, IMMED, ZERO, 0x200, NONE, NONE,298ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),299// r7 = r1 | r4;300// r7 = r7 & 1;301// if (r7 != 0)302MME_INSN(0, OR, R7, R1, R4, 0, NONE, NONE,303ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),304MME_INSN(0, AND, R7, R7, IMMED, 1, NONE, NONE,305ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),306MME_INSN(0, BEQ, ZERO, R7, ZERO, (2<<14)|0x0002, NONE, NONE,307ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),308// r6 = 0;309MME_INSN(0, ADD, R6, ZERO, ZERO, 0, NONE, NONE,310ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),311// mthd(0x02ec, 0);312// send(r6);313MME_INSN(1, ADD, ZERO, ZERO, ZERO, (0<<12)|0x02ec/4, IMMED0, NONE,314ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),315MME_INSN(0, ADD, ZERO, R6, ZERO, 0, NONE, ALU0,316ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),317};318319uint32_t mmec597_tep_select[] = {320// r1 = load();321// mthd(0x20c0,0); // SP_SELECT[3]322// send(r1);323// r2 = read(0x0dac); // POLYGON_MODE_FRONT324// r3 = read(0x0db0); // POLYGON_MODE_BACK325// r7 = r2 | r3;326// r4 = read(0x2100); // SP_SELECT[4]327// r6 = 0x60;328// r7 = r7 & 1;329// if (r7 != 0)330MME_INSN(0, ADD, R1, LOAD0, ZERO, (0<<12)|0x20c0/4, IMMED0, ALU0,331STATE, R2, IMMED, ZERO, 0x0dac/4, NONE, NONE),332MME_INSN(0, STATE, R3, IMMED, ZERO, 0x0db0/4, NONE, NONE,333OR, R7, R2, R3, 0, NONE, NONE),334MME_INSN(0, STATE, R4, IMMED, ZERO, 0x2100/4, NONE, NONE,335ADD, R6, IMMED, ZERO, 0x60, NONE, NONE),336MME_INSN(0, AND, R7, R7, IMMED, 1, NONE, NONE,337ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),338MME_INSN(0, BEQ, ZERO, R7, ZERO, (2<<14)|0x0002, NONE, NONE,339ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),340// r6 = 0x200;341MME_INSN(0, ADD, R6, IMMED, ZERO, 0x200, NONE, NONE,342ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),343// r7 = r1 | r4;344// r7 = r7 & 1;345// if (r7 != 0)346MME_INSN(0, OR, R7, R1, R4, 0, NONE, NONE,347ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),348MME_INSN(0, AND, R7, R7, IMMED, 1, NONE, NONE,349ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),350MME_INSN(0, BEQ, ZERO, R7, ZERO, (2<<14)|0x0002, NONE, NONE,351ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),352// r6 = 0;353MME_INSN(0, ADD, R6, ZERO, ZERO, 0, NONE, NONE,354ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),355// mthd(0x02ec, 0);356// send(r6);357MME_INSN(1, ADD, ZERO, ZERO, ZERO, (0<<12)|0x02ec/4, IMMED0, NONE,358ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),359MME_INSN(0, ADD, ZERO, R6, ZERO, 0, NONE, ALU0,360ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),361};362363uint32_t mmec597_draw_arrays_indirect[] = {364// r1 = load(); // mode365// r5 = read(0x1438); // VB_INSTANCE_BASE366// r6 = load(); // start_drawid367// r7 = load(); // numparams368MME_INSN(0, ADD, R1, LOAD0, ZERO, 0, NONE, NONE,369ADD, R6, LOAD1, ZERO, 0, NONE, NONE),370MME_INSN(0, ADD, R7, LOAD0, ZERO, 0, NONE, NONE,371STATE, R5, IMMED, ZERO, 0x1438/4, NONE, NONE),372// while (HW_LOOP_COUNT < r7) {373// r2 = load(); // count374// r3 = load(); // instance_count375// mthd(0x0d74, 0); // VERTEX_BUFFER_FIRST376// send(load()); // start377// r4 = load(); // start_instance378// if (r3) {379MME_INSN(0, LOOP, ZERO, R7, ZERO, 0x000c, NONE, NONE,380ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),381MME_INSN(0, ADD, R2, LOAD0, ZERO, 0x0d74/4, IMMED0, NONE,382ADD, R3, LOAD1, ZERO, 0, NONE, NONE),383MME_INSN(0, ADD, ZERO, LOAD0, ZERO, 0, NONE, ALU0,384ADD, R4, LOAD1, ZERO, 0, NONE, NONE),385MME_INSN(0, BEQ, ZERO, R3, ZERO, (2<<14)|0x0008, NONE, NONE,386ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),387// mthd(0x238c, 1); // CB_POS388// send(256 + 160);389// send(0); // base_vertex390// send(r4); // start_instance391// send(r6); // draw id392// mthd(0x1438, 0); // VB_INSTANCE_BASE393// send(r4);394// r1 = r1 & ~(1<<26); // clear INSTANCE_NEXT395MME_INSN(0, ADD, ZERO, ZERO, ZERO, (1<<12)|0x238c/4, IMMED0, IMMED1,396ADD, ZERO, ZERO, ZERO, 256 + 160, NONE, ALU0),397MME_INSN(0, ADD, ZERO, R4, ZERO, 0, NONE, ALU0,398ADD, ZERO, R6, ZERO, 0, NONE, ALU1),399MME_INSN(0, ADD, ZERO, R4, ZERO, 0x1438/4, IMMED0, ALU0,400MERGE, R1, R1, ZERO, (26<<10)|(1<<5)|0, NONE, NONE),401// do {402// mthd(0x1618, 0); // VERTEX_BEGIN_GL403// send(r1); // mode404// mthd(0x0d78, 0); // VERTEX_BUFFER_COUNT405// send(r2); // count406// mthd(0x1614, 0); // VERTEX_END_GL407// send(0);408// r1 |= (1<<26); // set INSTANCE_NEXT409// } while(--r3);410// }411MME_INSN(0, ADD, ZERO, R1, ZERO, 0x1618/4, IMMED0, ALU0,412ADD, ZERO, R2, ZERO, 0x0d78/4, IMMED1, ALU1),413MME_INSN(0, ADD, ZERO, ZERO, ZERO, 0x1614/4, IMMED0, ALU0,414ADD, R4, IMMED, ZERO, 1, NONE, NONE),415MME_INSN(0, MERGE, R1, R1, R4, (26<<10)|(1<<5)|0, NONE, NONE,416SUB, R3, R3, IMMED, 1, NONE, NONE),417MME_INSN(0, BEQ, ZERO, R3, ZERO, (1<<14)|0x3ffd, NONE, NONE,418ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),419// r6 = r6 + 1;420// };421MME_INSN(0, ADD, R6, R6, IMMED, 1, NONE, NONE,422ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),423// mthd(0x1438, 0); // restore VB_INSTANCE_BASE424// send(r5);425MME_INSN(1, ADD, ZERO, ZERO, ZERO, 0x1438/4, IMMED0, NONE,426ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),427MME_INSN(0, ADD, ZERO, R5, ZERO, 0, NONE, ALU0,428ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),429};430431uint32_t mmec597_draw_elts_indirect[] = {432// r1 = load(); // mode433// r8 = read(0x1434); // VB_ELEMENT_BASE434// r9 = read(0x1438); // VB_INSTANCE_BASE435// r6 = load(); // start_drawid436// r7 = load(); // numparams437MME_INSN(0, ADD, R1, LOAD0, ZERO, 0, NONE, NONE,438STATE, R8, IMMED, ZERO, 0x1434/4, NONE, NONE),439MME_INSN(0, STATE, R9, IMMED, ZERO, 0x1438/4, NONE, NONE,440ADD, R6, LOAD0, ZERO, 0, NONE, NONE),441MME_INSN(0, ADD, R7, LOAD0, ZERO, 0, NONE, NONE,442ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),443// while (HW_LOOP_COUNT < r7) {444// r3 = load(); // count445// r2 = load(); // instance_count446// mthd(0x17dc, 0); // INDEX_BATCH_FIRST447// send(load()); // start448// r4 = load(); // index_bias449// mthd(0x238c, 1); // CB_POS450// send(256 + 160);451// send(r4); // index_bias452// r5 = load(); // start_instance453// if (r2) {454MME_INSN(0, LOOP, ZERO, R7, ZERO, 0x000d, NONE, NONE,455ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),456MME_INSN(0, ADD, R3, LOAD0, ZERO, 0x17dc/4, IMMED0, NONE,457ADD, R2, LOAD1, ZERO, 0, NONE, NONE),458MME_INSN(0, ADD, ZERO, LOAD0, ZERO, 0, NONE, ALU0,459ADD, R4, LOAD1, ZERO, 0, NONE, NONE),460MME_INSN(0, ADD, ZERO, ZERO, ZERO, (1<<12)|0x238c/4, IMMED0, IMMED1,461ADD, ZERO, R4, ZERO, 256 + 160, NONE, ALU1),462MME_INSN(0, BEQ, ZERO, R2, ZERO, (2<<14)|0x0008, NONE, NONE,463ADD, R5, LOAD0, ZERO, 0, NONE, NONE),464// send(r5); // start_instance465// send(r6); // draw_id466// mthd(0x1434, 1); // VB_ELEMENT_BASE467// send(r4); // index_bias468// send(r5); // start_instance469// mthd(0x1118, 0); // VERTEX_ID_BASE470// send(r4); // index_bias471// r1 &= ~(1 << 26); // clear INSTANCE_NEXT472MME_INSN(0, ADD, ZERO, R5, ZERO, 0, NONE, ALU0,473ADD, ZERO, R6, ZERO, 0, NONE, ALU1),474MME_INSN(0, ADD, ZERO, R4, ZERO, (1<<12)|0x1434/4, IMMED0, ALU0,475ADD, ZERO, R5, ZERO, 0, NONE, ALU1),476MME_INSN(0, ADD, ZERO, R4, ZERO, 0x1118/4, IMMED0, ALU0,477MERGE, R1, R1, ZERO, (26<<10)|(1<<5)|0, NONE, NONE),478// do {479// mthd(0x1618, 0); // VERTEX_BEGIN_GL480// send(r1); // mode481// mthd(0x17e0, 0); // INDEX_BATCH_COUNT482// send(r3); // count483// mthd(0x1614, 0); // VERTEX_END_GL484// send(0);485// r1 |= (1 << 26); // set INSTANCE_NEXT486// } while (--r2);487// }488MME_INSN(0, ADD, ZERO, R1, ZERO, 0x1618/4, IMMED0, ALU0,489ADD, ZERO, R3, ZERO, 0x17e0/4, IMMED1, ALU1),490MME_INSN(0, ADD, ZERO, ZERO, ZERO, 0x1614/4, IMMED0, ALU0,491ADD, R4, IMMED, ZERO, 1, NONE, NONE),492MME_INSN(0, MERGE, R1, R1, R4, (26<<10)|(1<<5)|0, NONE, NONE,493SUB, R2, R2, IMMED, 1, NONE, NONE),494MME_INSN(0, BEQ, ZERO, R2, ZERO, (1<<14)|0x3ffd, NONE, NONE,495ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),496// r6 = r6 + 1;497// };498MME_INSN(0, ADD, R6, R6, IMMED, 1, NONE, NONE,499ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),500// mthd(0x1434, 1);501// send(r8); // restore VB_ELEMENT_BASE502// send(r9); // restore VB_INSTANCE_BASE503// mthd(0x1118, 0);504// send(r8); // restore VERTEX_ID_BASE505MME_INSN(1, ADD, ZERO, R8, ZERO, (1<<12)|0x1434/4, IMMED0, ALU0,506ADD, ZERO, R9, ZERO, 0, NONE, ALU1),507MME_INSN(0, ADD, ZERO, R8, ZERO, 0x1118/4, IMMED0, ALU0,508ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),509};510511uint32_t mmec597_draw_arrays_indirect_count[] = {512// r1 = load(); // mode513// r6 = load(); // start_drawid514// r7 = load(); // numparams515// r5 = load(); // totaldraws516// r8 = read(0x1438); // VB_INSTANCE_BASE517// r5 = r5 - r6; // remaining draws518// if (r5 > r7)519MME_INSN(0, ADD, R1, LOAD0, ZERO, 0, NONE, NONE,520ADD, R6, LOAD1, ZERO, 0, NONE, NONE),521MME_INSN(0, ADD, R7, LOAD0, ZERO, 0, NONE, NONE,522ADD, R5, LOAD1, ZERO, 0, NONE, NONE),523MME_INSN(0, STATE, R8, IMMED, ZERO, 0x1438/4, NONE, NONE,524SUB, R5, R5, R6, 0, NONE, NONE),525MME_INSN(0, BLE, ZERO, R5, R7, (2<<14)|0x0002, NONE, NONE,526ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),527// r5 = r7;528MME_INSN(0, ADD, R5, R7, ZERO, 0, NONE, NONE,529ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),530// if (r5 >= 0) {531MME_INSN(0, BLT, ZERO, R5, ZERO, (2<<14)|0x000e, NONE, NONE,532ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),533// while (HW_LOOP_COUNT < r5) {534// r2 = load(); // count535// r3 = load(); // instance_count536// mthd(0x0d74, 0); // VERTEX_BUFFER_FIRST537// send(load()); // start538// r4 = load(); // start_instance539// if (r3) {540MME_INSN(0, LOOP, ZERO, R5, ZERO, 0x000c, NONE, NONE,541ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),542MME_INSN(0, ADD, R2, LOAD0, ZERO, 0x0d74/4, IMMED0, NONE,543ADD, R3, LOAD1, ZERO, 0, NONE, NONE),544MME_INSN(0, ADD, ZERO, LOAD0, ZERO, 0, NONE, ALU0,545ADD, R4, LOAD1, ZERO, 0, NONE, NONE),546MME_INSN(0, BEQ, ZERO, R3, ZERO, (2<<14)|0x0008, NONE, NONE,547ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),548// mthd(0x238c, 1); // CB_POS549// send(256 + 160);550// send(0); // base_vertex551// send(r4); // start_instance552// send(r6); // draw_id553// mthd(0x1438, 0); // VB_INSTANCE_BASE554// send(r4);555// r1 &= ~(1 << 26); // clear INSTANCE_NEXT556MME_INSN(0, ADD, ZERO, ZERO, ZERO, (1<<12)|0x238c/4, IMMED0, IMMED1,557ADD, ZERO, ZERO, ZERO, 256+160, NONE, ALU0),558MME_INSN(0, ADD, ZERO, R4, ZERO, 0, NONE, ALU0,559ADD, ZERO, R6, ZERO, 0, NONE, ALU1),560MME_INSN(0, ADD, ZERO, R4, ZERO, 0x1438/4, IMMED0, ALU0,561MERGE, R1, R1, ZERO, (26<<10)|(1<<5)|0, NONE, NONE),562// do {563// mthd(0x1618, 0); // VERTEX_BEGIN_GL564// send(r1); // mode565// mthd(0x0d78, 0); // VERTEX_BUFFER_COUNT566// send(r2);567// mthd(0x1614, 0); // VERTEX_END_GL568// send(0);569// r1 |= (1 << 26); // set INSTANCE_NEXT570// } while (--r3);571// }572MME_INSN(0, ADD, ZERO, R1, ZERO, 0x1618/4, IMMED0, ALU0,573ADD, ZERO, R2, ZERO, 0x0d78/4, IMMED1, ALU1),574MME_INSN(0, ADD, ZERO, ZERO, ZERO, 0x1614/4, IMMED0, ALU0,575ADD, R4, IMMED, ZERO, 1, NONE, NONE),576MME_INSN(0, MERGE, R1, R1, R4, (26<<10)|(1<<5)|0, NONE, NONE,577SUB, R3, R3, IMMED, 1, NONE, NONE),578MME_INSN(0, BEQ, ZERO, R3, ZERO, (1<<14)|0x3ffd, NONE, NONE,579ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),580// r6 = r6 + 1; // draw_id++581// }582MME_INSN(0, ADD, R6, R6, IMMED, 1, NONE, NONE,583ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),584// r7 = r7 - r5; // unneeded params585// }586MME_INSN(0, SUB, R7, R7, R5, 0, NONE, NONE,587ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),588// while (HW_LOOP_COUNT < r7) {589// load();590// load();591// load();592// load();593// }594MME_INSN(0, LOOP, ZERO, R7, ZERO, 0x0003, NONE, NONE,595ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),596MME_INSN(0, ADD, ZERO, LOAD0, ZERO, 0, NONE, NONE,597ADD, ZERO, LOAD1, ZERO, 0, NONE, NONE),598MME_INSN(0, ADD, ZERO, LOAD0, ZERO, 0, NONE, NONE,599ADD, ZERO, LOAD1, ZERO, 0, NONE, NONE),600// exit mthd(0x1438, 0); // VB_INSTANCE_BASE601// send(r8);602MME_INSN(1, ADD, ZERO, ZERO, ZERO, 0x1438/4, IMMED0, NONE,603ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),604MME_INSN(0, ADD, ZERO, R8, ZERO, 0, NONE, ALU0,605ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),606};607608uint32_t mmec597_draw_elts_indirect_count[] = {609// r8 = read(0x1434);610// r1 = load();611// r9 = read(0x1438);612// r6 = load();613// r7 = load();614// r5 = load();615// r5 = r5 - r6;616// if (r5 > r7)617MME_INSN(0, STATE, R8, IMMED, ZERO, 0x1434/4, NONE, NONE,618ADD, R1, LOAD0, ZERO, 0, NONE, NONE),619MME_INSN(0, STATE, R9, IMMED, ZERO, 0x1438/4, NONE, NONE,620ADD, R6, LOAD0, ZERO, 0, NONE, NONE),621MME_INSN(0, ADD, R7, LOAD0, ZERO, 0, NONE, NONE,622ADD, R5, LOAD1, ZERO, 0, NONE, NONE),623MME_INSN(0, SUB, R5, R5, R6, 0, NONE, NONE,624ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),625MME_INSN(0, BLE, ZERO, R5, R7, (2<<14)|0x0002, NONE, NONE,626ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),627// r5 = r7;628MME_INSN(0, ADD, R5, R7, ZERO, 0, NONE, NONE,629ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),630// if (r5 >= 0) {631MME_INSN(0, BLT, ZERO, R5, ZERO, (2<<14)|0x000f, NONE, NONE,632ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),633// while (HW_LOOP_COUNT < r5) {634// r3 = load();635// r2 = load();636// mthd(0x17dc, 0);637// send(load());638// r4 = load();639// mthd(0x238c, 1);640// send(256 + 160);641// send(r4);642// r10 = load();643// if (r2) {644MME_INSN(0, LOOP, ZERO, R5, ZERO, 0x000d, NONE, NONE,645ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),646MME_INSN(0, ADD, R3, LOAD0, ZERO, (0<<12)|0x17dc/4, IMMED0, NONE,647ADD, R2, LOAD1, ZERO, 0, NONE, NONE),648MME_INSN(0, ADD, ZERO, LOAD0, ZERO, (1<<12)|0x238c/4, NONE, ALU0,649ADD, R4, LOAD1, ZERO, 256 + 160, IMMED0, IMMED1),650MME_INSN(0, ADD, ZERO, R4, ZERO, 0, NONE, ALU0,651ADD, R10, LOAD0, ZERO, 0, NONE, NONE),652MME_INSN(0, BEQ, ZERO, R2, ZERO, (2<<14)|0x0008, NONE, NONE,653ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),654// send(r10);655// send(r6);656// mthd(0x1434, 1);657// send(r4);658// send(r10);659// mthd(0x1118, 0);660// send(r4);661// r1 &= ~(1 << 26);662MME_INSN(0, ADD, ZERO, R10, ZERO, 0, NONE, ALU0,663ADD, ZERO, R6, ZERO, 0, NONE, ALU1),664MME_INSN(0, ADD, ZERO, R4, ZERO, (1<<12)|0x1434/4, IMMED0, ALU0,665ADD, ZERO, R10, ZERO, 0, NONE, ALU1),666MME_INSN(0, ADD, ZERO, R4, ZERO, (0<<12)|0x1118/4, IMMED0, ALU0,667MERGE, R1, R1, ZERO, (26<<10)|(1<<5)|0, NONE, NONE),668// do {669// mthd(0x1618, 0);670// send(r1);671// mthd(0x17e0, 0);672// send(r3);673// mthd(0x1614, 0);674// send(0);675// r1 |= (1 << 26);676// } while (--r2);677// }678MME_INSN(0, ADD, ZERO, R1, ZERO, 0x1618/4, IMMED0, ALU0,679ADD, ZERO, R3, ZERO, 0x17e0/4, IMMED1, ALU1),680MME_INSN(0, ADD, ZERO, ZERO, ZERO, 0x1614/4, IMMED0, ALU0,681ADD, R4, IMMED, ZERO, 1, NONE, NONE),682MME_INSN(0, MERGE, R1, R1, R4, (26<<10)|(1<<5)|0, NONE, NONE,683SUB, R2, R2, IMMED, 1, NONE, NONE),684MME_INSN(0, BEQ, ZERO, R2, ZERO, (1<<14)|0x3ffd, NONE, NONE,685ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),686// r6 = r6 + 1;687// }688MME_INSN(0, ADD, R6, R6, IMMED, 1, NONE, NONE,689ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),690// r7 = r7 - r5; // unneeded params691// }692MME_INSN(0, SUB, R7, R7, R5, 0, NONE, NONE,693ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),694// while (HW_LOOP_COUNT < r7) {695// r2 = load();696// r2 = load();697// r2 = load();698// r2 = load();699// r2 = load();700// }701MME_INSN(0, LOOP, ZERO, R7, ZERO, 0x0004, NONE, NONE,702ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),703MME_INSN(0, ADD, ZERO, LOAD0, ZERO, 0, NONE, NONE,704ADD, ZERO, LOAD1, ZERO, 0, NONE, NONE),705MME_INSN(0, ADD, ZERO, LOAD0, ZERO, 0, NONE, NONE,706ADD, ZERO, LOAD1, ZERO, 0, NONE, NONE),707MME_INSN(0, ADD, ZERO, LOAD0, ZERO, 0, NONE, NONE,708ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),709// mthd(0x1434, 1);710// send(r8);711// send(r9);712// exit mthd(0x1118, 0);713// send(r8);714MME_INSN(1, ADD, ZERO, R8, ZERO, (1<<12)|0x1434/4, IMMED0, ALU0,715ADD, ZERO, R9, ZERO, 0, NONE, ALU1),716MME_INSN(0, ADD, ZERO, R8, ZERO, (0<<12)|0x1118/4, IMMED0, ALU0,717ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),718};719720uint32_t mmec597_query_buffer_write[] = {721// r1 = load(); // clamp value722// r2 = load(); // end value (lo)723// r3 = load(); // end value (hi)724// r4 = load(); // start value (lo)725// r5 = load(); // start value (hi)726// r8 = load(); // desired sequence727// r9 = load(); // actual sequence728// r7 = load(); // query address (hi)729// r6 = load(); // query address (lo)730// if (r9 >= r8) {731MME_INSN(0, ADD, R1, LOAD0, ZERO, 0, NONE, NONE,732ADD, R2, LOAD1, ZERO, 0, NONE, NONE),733MME_INSN(0, ADD, R3, LOAD0, ZERO, 0, NONE, NONE,734ADD, R4, LOAD1, ZERO, 0, NONE, NONE),735MME_INSN(0, ADD, R5, LOAD0, ZERO, 0, NONE, NONE,736ADD, R8, LOAD1, ZERO, 0, NONE, NONE),737MME_INSN(0, ADD, R9, LOAD0, ZERO, 0, NONE, NONE,738ADD, R7, LOAD1, ZERO, 0, NONE, NONE),739MME_INSN(0, ADD, R6, LOAD0, ZERO, 0, NONE, NONE,740ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),741MME_INSN(0, BLT, ZERO, R9, R8, (2<<14)|0x000e, NONE, NONE,742ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),743// [r3,r2] = [r3,r2] - [r5,r4];744// if (r1) {745MME_INSN(0, SUB, R2, R2, R4, 0, NONE, NONE,746SUBB, R3, R3, R5, 0, NONE, NONE),747MME_INSN(0, BEQ, ZERO, R1, ZERO, (2<<14)|0x0004, NONE, NONE,748ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),749// if (r3 != 0 || r1 < r2)750// r2 = r1;751// }752MME_INSN(0, BEQ, ZERO, R3, ZERO, (1<<14)|0x0002, NONE, NONE,753ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),754MME_INSN(0, BLTU, ZERO, R1, R2, (1<<14)|0x0002, NONE, NONE,755ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),756MME_INSN(0, ADD, R2, R1, ZERO, 0, NONE, NONE,757ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),758// mthd(0x1b00, 1);759// send(r7);760// send(r6);761// send(r2)762// send(0x10000000);763// if (!r1) {764MME_INSN(0, ADD, ZERO, R7, ZERO, (1<<12)|0x1b00/4, IMMED0, ALU0,765ADD, ZERO, R6, ZERO, 0, NONE, ALU1),766MME_INSN(0, ADD, ZERO, R2, ZERO, 0, NONE, ALU0,767ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),768MME_INSN(0, ADD, ZERO, ZERO, ZERO, 0x1000, NONE, IMMED32_0,769ADD, ZERO, ZERO, ZERO, 0x0000, NONE, NONE),770MME_INSN(0, BEQ, ZERO, R1, ZERO, (1<<14)|0x0004, NONE, NONE,771ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),772// [r7,r6] = [r7,r6] + 4;773// mthd(0x1b00, 1);774// send(r7);775// send(r6);776// send(r3);777// send(0x10000000);778// }779MME_INSN(0, ADD, ZERO, R6, IMMED, 4, IMMED1, ALU1,780ADDC, ZERO, R7, ZERO, (1<<12)|0x1b00/4, NONE, ALU0),781MME_INSN(0, ADD, ZERO, R3, ZERO, 0, NONE, ALU0,782ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),783MME_INSN(0, ADD, ZERO, ZERO, ZERO, 0x1000, NONE, IMMED32_0,784ADD, ZERO, ZERO, ZERO, 0x0000, NONE, NONE),785// mthd(0x0110, 0);786// send(0);787MME_INSN(0, ADD, ZERO, ZERO, ZERO, (0<<12)|0x0110/4, IMMED0, ALU0,788ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),789// }790MME_INSN(1, ADD, ZERO, ZERO, ZERO, 0, NONE, NONE,791ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),792MME_INSN(0, ADD, ZERO, ZERO, ZERO, 0, NONE, NONE,793ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),794};795796uint32_t mmec597_conservative_raster_state[] = {797// r1 = load();798// mthd(0x3400, 1);799// send(0);800// send(((r1 >> 8) & 7) << 23);801// send(0x03800000);802// mthd(0x2310, 1);803// send(0x00418800);804// r2 = r1 & 0xf;805// r3 = 16;806// r2 = r2 | (((r1 >> 4) & 0xf) << 8);807// mthd(0x0a1c, 8);808MME_INSN(0, ADD, R1, LOAD0, ZERO, (1<<12)|0x3400/4, IMMED0, IMMED1,809ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),810MME_INSN(0, MERGE, ZERO, ZERO, R1, (23<<10)|(3<<5)|8, NONE, ALU0,811ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),812MME_INSN(0, ADD, ZERO, ZERO, ZERO, 0x0380, NONE, IMMED32_0,813ADD, ZERO, ZERO, ZERO, 0x0000, NONE, NONE),814MME_INSN(0, ADD, ZERO, ZERO, ZERO, (1<<12)|0x2310/4, IMMED0, NONE,815ADD, ZERO, ZERO, ZERO, 0x0000, NONE, NONE),816MME_INSN(0, ADD, ZERO, ZERO, ZERO, 0x0041, NONE, IMMED32_0,817ADD, ZERO, ZERO, ZERO, 0x8800, NONE, NONE),818MME_INSN(0, AND, R2, R1, IMMED, 0xf, NONE, NONE,819ADD, R3, ZERO, IMMED, 16, NONE, NONE),820MME_INSN(0, MERGE, R2, R2, R1, (8<<10)|(4<<5)|4, IMMED1, NONE,821ADD, ZERO, ZERO, ZERO, (8<<12)|0x0a1c/4, NONE, NONE),822// while (HW_LOOP_COUNT < r3)823// send(r2);824MME_INSN(0, LOOP, ZERO, R3, ZERO, 0x0002, NONE, NONE,825ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),826MME_INSN(0, ADD, ZERO, R2, ZERO, 0, NONE, ALU0,827ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),828// mthd(0x1148, 0);829// send(1);830MME_INSN(1, ADD, ZERO, ZERO, ZERO, (0<<12)|0x1148/4, IMMED0, NONE,831ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),832MME_INSN(0, ADD, ZERO, ZERO, ZERO, 1, NONE, IMMED1,833ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),834};835836uint32_t mmec597_compute_counter[] = {837// r0 = load();838// r1 = 1;839// r2 = 0;840// while (HW_LOOP_COUNT < r2) {841MME_INSN(0, ADD, R0, LOAD0, ZERO, 0, NONE, NONE,842ADD, R1, IMMED, ZERO, 1, NONE, NONE),843MME_INSN(0, LOOP, ZERO, R0, ZERO, 0x0003, NONE, NONE,844ADD, R2, ZERO, ZERO, 0, NONE, NONE),845// r3 = load();846// [r1,r0] *= r3;847// }848MME_INSN(0, ADD, R3, LOAD0, ZERO, 0, NONE, NONE,849ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),850MME_INSN(0, MULU, R1, R1, R3, 0, NONE, NONE,851MULH, R2, ZERO, ZERO, 0, NONE, NONE),852// r3 = read(0x3410);853// r4 = read(0x3414);854// [r4,r3] += [r2,r1];855// mthd(0x3410, 1);856// send(r3);857// send(r4);858MME_INSN(0, STATE, ZERO, ZERO, ZERO, 0x3410/4, NONE, NONE,859ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),860MME_INSN(1, STATE, ZERO, ZERO, ZERO, 0x3414/4, NONE, NONE,861ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),862MME_INSN(0, ADD, R3, R3, R1, (1<<12)|0x3410/4, IMMED0, ALU0,863ADDC, R4, R4, R2, 0, NONE, ALU1),864};865866uint32_t mmec597_compute_counter_to_query[] = {867// r1 = load();868// r3 = read(0x3410);869// r2 = load();870// r4 = read(0x3414);871// [r2,r1] = [r2,r1] + [r4,r3];872// mthd(0x1b00, 1);873// r3 = load();874// send(r3);875// r4 = load();876// send(r4);877// send(r1);878// send(0x10000000);879MME_INSN(0, ADD, R1, LOAD0, ZERO, 0, NONE, NONE,880STATE, R3, IMMED, ZERO, 0x3410/4, NONE, NONE),881MME_INSN(0, ADD, R2, LOAD0, ZERO, 0, NONE, NONE,882STATE, R4, IMMED, ZERO, 0x3414/4, NONE, NONE),883MME_INSN(0, ADD, R1, R1, R3, (1<<12)|0x1b00/4, IMMED0, NONE,884ADDC, R2, R2, R4, 0, NONE, NONE),885MME_INSN(0, ADD, R3, LOAD0, ZERO, 0, NONE, ALU0,886ADD, R4, LOAD1, ZERO, 0, NONE, ALU1),887MME_INSN(0, ADD, ZERO, R1, ZERO, 0, NONE, ALU0,888ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),889MME_INSN(0, ADD, ZERO, ZERO, ZERO, 0x1000, NONE, IMMED32_0,890ADD, ZERO, ZERO, ZERO, 0x0000, NONE, NONE),891// [r3,r4] = [r3,r4] + 4;892// mthd(0x1b00, 1);893// send(r3);894// send(r4);895// send(r2);896// send(0x10000000);897MME_INSN(0, ADD, ZERO, R4, IMMED, 4, IMMED1, ALU1,898ADDC, ZERO, R3, ZERO, (1<<12)|0x1b00/4, NONE, ALU0),899MME_INSN(1, ADD, ZERO, R2, ZERO, 0, NONE, ALU0,900ADD, ZERO, ZERO, ZERO, 0, NONE, NONE),901MME_INSN(0, ADD, ZERO, ZERO, ZERO, 0x1000, NONE, IMMED32_0,902ADD, ZERO, ZERO, ZERO, 0x0000, NONE, NONE),903};904905906