1d2d19ea51fa3575a8d014a69a9b835c335728817Christoph Bumiller/* 2d2d19ea51fa3575a8d014a69a9b835c335728817Christoph Bumiller * Copyright 2011 Christoph Bumiller 3d2d19ea51fa3575a8d014a69a9b835c335728817Christoph Bumiller * 4d2d19ea51fa3575a8d014a69a9b835c335728817Christoph Bumiller * Permission is hereby granted, free of charge, to any person obtaining a 5d2d19ea51fa3575a8d014a69a9b835c335728817Christoph Bumiller * copy of this software and associated documentation files (the "Software"), 6d2d19ea51fa3575a8d014a69a9b835c335728817Christoph Bumiller * to deal in the Software without restriction, including without limitation 7d2d19ea51fa3575a8d014a69a9b835c335728817Christoph Bumiller * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8d2d19ea51fa3575a8d014a69a9b835c335728817Christoph Bumiller * and/or sell copies of the Software, and to permit persons to whom the 9d2d19ea51fa3575a8d014a69a9b835c335728817Christoph Bumiller * Software is furnished to do so, subject to the following conditions: 10d2d19ea51fa3575a8d014a69a9b835c335728817Christoph Bumiller * 11d2d19ea51fa3575a8d014a69a9b835c335728817Christoph Bumiller * The above copyright notice and this permission notice shall be included in 12d2d19ea51fa3575a8d014a69a9b835c335728817Christoph Bumiller * all copies or substantial portions of the Software. 13d2d19ea51fa3575a8d014a69a9b835c335728817Christoph Bumiller * 14d2d19ea51fa3575a8d014a69a9b835c335728817Christoph Bumiller * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15d2d19ea51fa3575a8d014a69a9b835c335728817Christoph Bumiller * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16d2d19ea51fa3575a8d014a69a9b835c335728817Christoph Bumiller * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 173d8d5b298a268b119d840bc9bae0ee9e0c9244a9Kenneth Graunke * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR 183d8d5b298a268b119d840bc9bae0ee9e0c9244a9Kenneth Graunke * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 193d8d5b298a268b119d840bc9bae0ee9e0c9244a9Kenneth Graunke * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 203d8d5b298a268b119d840bc9bae0ee9e0c9244a9Kenneth Graunke * OTHER DEALINGS IN THE SOFTWARE. 21d2d19ea51fa3575a8d014a69a9b835c335728817Christoph Bumiller */ 2257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 235eb7ff1175a644ffe3b0f1a75cb235400355f9fbJohannes Obermayr#include "codegen/nv50_ir.h" 245eb7ff1175a644ffe3b0f1a75cb235400355f9fbJohannes Obermayr#include "codegen/nv50_ir_target.h" 2563a15117a5eb495924bbcb70c067b6e11ab04476Marcin Ślusarz 2663a15117a5eb495924bbcb70c067b6e11ab04476Marcin Ślusarz#define __STDC_FORMAT_MACROS 2730ebc8650caa8f67deebaae397a04dfdfc50d1dfMarek Olšák#include <inttypes.h> 2857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 2957594065c30feec9376be9b2132659f7d87362eeChristoph Bumillernamespace nv50_ir { 3057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 3157594065c30feec9376be9b2132659f7d87362eeChristoph Bumillerenum TextStyle 3257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller{ 3357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller TXT_DEFAULT, 3457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller TXT_GPR, 3557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller TXT_REGISTER, 3657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller TXT_FLAGS, 3757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller TXT_MEM, 3857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller TXT_IMMD, 3957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller TXT_BRA, 4057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller TXT_INSN 4157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller}; 4257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 4396259b51285469a229c3740c2b467d4455ed0c8dMarcin Ślusarzstatic const char *_colour[8] = 4457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller{ 4557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "\x1b[00m", 4657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "\x1b[34m", 4757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "\x1b[35m", 4857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "\x1b[35m", 4957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "\x1b[36m", 5057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "\x1b[33m", 5157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "\x1b[37m", 5257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "\x1b[32m" 5357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller}; 5457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 5596259b51285469a229c3740c2b467d4455ed0c8dMarcin Ślusarzstatic const char *_nocolour[8] = 5696259b51285469a229c3740c2b467d4455ed0c8dMarcin Ślusarz{ 5796259b51285469a229c3740c2b467d4455ed0c8dMarcin Ślusarz "", "", "", "", "", "", "", "" 5896259b51285469a229c3740c2b467d4455ed0c8dMarcin Ślusarz}; 5996259b51285469a229c3740c2b467d4455ed0c8dMarcin Ślusarz 6096259b51285469a229c3740c2b467d4455ed0c8dMarcin Ślusarzstatic const char **colour; 6196259b51285469a229c3740c2b467d4455ed0c8dMarcin Ślusarz 6296259b51285469a229c3740c2b467d4455ed0c8dMarcin Ślusarzstatic void init_colours() 6396259b51285469a229c3740c2b467d4455ed0c8dMarcin Ślusarz{ 6496259b51285469a229c3740c2b467d4455ed0c8dMarcin Ślusarz if (getenv("NV50_PROG_DEBUG_NO_COLORS") != NULL) 6596259b51285469a229c3740c2b467d4455ed0c8dMarcin Ślusarz colour = _nocolour; 6696259b51285469a229c3740c2b467d4455ed0c8dMarcin Ślusarz else 6796259b51285469a229c3740c2b467d4455ed0c8dMarcin Ślusarz colour = _colour; 6896259b51285469a229c3740c2b467d4455ed0c8dMarcin Ślusarz} 6996259b51285469a229c3740c2b467d4455ed0c8dMarcin Ślusarz 7057594065c30feec9376be9b2132659f7d87362eeChristoph Bumillerconst char *operationStr[OP_LAST + 1] = 7157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller{ 7257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "nop", 7357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "phi", 7457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "union", 7557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "split", 7657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "merge", 7757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "consec", 7857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "mov", 7957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "ld", 8057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "st", 8157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "add", 8257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "sub", 8357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "mul", 8457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "div", 8557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "mod", 8657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "mad", 8757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "fma", 8857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "sad", 8985132c7453230960f34cfe7b7b7fcaaab158d79fSamuel Pitoiset "shladd", 9057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "abs", 9157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "neg", 9257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "not", 9357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "and", 9457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "or", 9557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "xor", 9657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "shl", 9757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "shr", 9857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "max", 9957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "min", 10057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "sat", 10157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "ceil", 10257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "floor", 10357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "trunc", 10457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "cvt", 10557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "set and", 10657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "set or", 10757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "set xor", 10857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "set", 10957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "selp", 11057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "slct", 11157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "rcp", 11257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "rsq", 11357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "lg2", 11457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "sin", 11557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "cos", 11657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "ex2", 11757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "exp", 11857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "log", 11957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "presin", 12057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "preex2", 12157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "sqrt", 12257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "pow", 12357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "bra", 12457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "call", 12557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "ret", 12657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "cont", 12757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "break", 12857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "preret", 12957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "precont", 13057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "prebreak", 13157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "brkpt", 13257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "joinat", 13357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "join", 13457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "discard", 13557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "exit", 13622b762f9b495b14400f30bd6537f7c5a6d262325Christoph Bumiller "membar", 13757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "vfetch", 13857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "pfetch", 1399d60793a03e40e1d139b78fce0144cad57438741Ilia Mirkin "afetch", 14057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "export", 14157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "linterp", 14257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "pinterp", 14357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "emit", 14457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "restart", 14557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "tex", 14657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "texbias", 14757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "texlod", 14857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "texfetch", 14957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "texquery", 15057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "texgrad", 15157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "texgather", 152d5faf8e78603a27dbedb2e9e28b58b1b2bc32858Ilia Mirkin "texquerylod", 15357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "texcsaa", 15422b762f9b495b14400f30bd6537f7c5a6d262325Christoph Bumiller "texprep", 15522b762f9b495b14400f30bd6537f7c5a6d262325Christoph Bumiller "suldb", 15622b762f9b495b14400f30bd6537f7c5a6d262325Christoph Bumiller "suldp", 15722b762f9b495b14400f30bd6537f7c5a6d262325Christoph Bumiller "sustb", 15822b762f9b495b14400f30bd6537f7c5a6d262325Christoph Bumiller "sustp", 15922b762f9b495b14400f30bd6537f7c5a6d262325Christoph Bumiller "suredb", 16022b762f9b495b14400f30bd6537f7c5a6d262325Christoph Bumiller "suredp", 16122b762f9b495b14400f30bd6537f7c5a6d262325Christoph Bumiller "sulea", 16222b762f9b495b14400f30bd6537f7c5a6d262325Christoph Bumiller "subfm", 16322b762f9b495b14400f30bd6537f7c5a6d262325Christoph Bumiller "suclamp", 16422b762f9b495b14400f30bd6537f7c5a6d262325Christoph Bumiller "sueau", 1652c4eeb0b5cf17caa06cb3fa46d4f64e6a8005d23Ilia Mirkin "suq", 16622b762f9b495b14400f30bd6537f7c5a6d262325Christoph Bumiller "madsp", 16722b762f9b495b14400f30bd6537f7c5a6d262325Christoph Bumiller "texbar", 16857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "dfdx", 16957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "dfdy", 17057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "rdsv", 17157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "wrsv", 172af38ef907c89ecb1125bf258cafa0793f79a5eb7Ilia Mirkin "pixld", 17357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "quadop", 17457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "quadon", 17557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "quadpop", 17657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "popcnt", 17757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "insbf", 17857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "extbf", 179b4b20d42f6a8cd5aec3ba529a0b8d6ea22e73305Ilia Mirkin "bfind", 18022b762f9b495b14400f30bd6537f7c5a6d262325Christoph Bumiller "permt", 18122b762f9b495b14400f30bd6537f7c5a6d262325Christoph Bumiller "atom", 18222b762f9b495b14400f30bd6537f7c5a6d262325Christoph Bumiller "bar", 18322b762f9b495b14400f30bd6537f7c5a6d262325Christoph Bumiller "vadd", 18422b762f9b495b14400f30bd6537f7c5a6d262325Christoph Bumiller "vavg", 18522b762f9b495b14400f30bd6537f7c5a6d262325Christoph Bumiller "vmin", 18622b762f9b495b14400f30bd6537f7c5a6d262325Christoph Bumiller "vmax", 18722b762f9b495b14400f30bd6537f7c5a6d262325Christoph Bumiller "vsad", 18822b762f9b495b14400f30bd6537f7c5a6d262325Christoph Bumiller "vset", 18922b762f9b495b14400f30bd6537f7c5a6d262325Christoph Bumiller "vshr", 19022b762f9b495b14400f30bd6537f7c5a6d262325Christoph Bumiller "vshl", 19122b762f9b495b14400f30bd6537f7c5a6d262325Christoph Bumiller "vsel", 19218fdfbdc32f204d6728c1ad57a693b1a6ad0aec9Christoph Bumiller "cctl", 193d548d47edf9f05e6dbf9656abc2f8e78d02cb2f6Ben Skeggs "shfl", 19407ed003faf3199a3e95852e7a34763aeaf76503dSamuel Pitoiset "vote", 1957c47db359e193f21be796df3a7b5d037dd42b28fSamuel Pitoiset "bufq", 19657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "(invalid)" 19757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller}; 19857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 19922b762f9b495b14400f30bd6537f7c5a6d262325Christoph Bumillerstatic const char *atomSubOpStr[] = 20022b762f9b495b14400f30bd6537f7c5a6d262325Christoph Bumiller{ 20122b762f9b495b14400f30bd6537f7c5a6d262325Christoph Bumiller "add", "min", "max", "inc", "dec", "and", "or", "xor", "cas", "exch" 20222b762f9b495b14400f30bd6537f7c5a6d262325Christoph Bumiller}; 20322b762f9b495b14400f30bd6537f7c5a6d262325Christoph Bumiller 2040c930557bf96721ce50ca95b5201be09da905cb8Samuel Pitoisetstatic const char *ldstSubOpStr[] = 2050c930557bf96721ce50ca95b5201be09da905cb8Samuel Pitoiset{ 2060c930557bf96721ce50ca95b5201be09da905cb8Samuel Pitoiset "", "lock", "unlock" 2070c930557bf96721ce50ca95b5201be09da905cb8Samuel Pitoiset}; 2080c930557bf96721ce50ca95b5201be09da905cb8Samuel Pitoiset 209a734c0f8ba4a99e3ae42fe7ca9b1af16a01587b3Samuel Pitoisetstatic const char *subfmOpStr[] = 210a734c0f8ba4a99e3ae42fe7ca9b1af16a01587b3Samuel Pitoiset{ 211a734c0f8ba4a99e3ae42fe7ca9b1af16a01587b3Samuel Pitoiset "", "3d" 212a734c0f8ba4a99e3ae42fe7ca9b1af16a01587b3Samuel Pitoiset}; 213a734c0f8ba4a99e3ae42fe7ca9b1af16a01587b3Samuel Pitoiset 214c0d92078bbce7c2d8f017bd7d9c86f339a751bdcSamuel Pitoisetstatic const char *shflOpStr[] = 215c0d92078bbce7c2d8f017bd7d9c86f339a751bdcSamuel Pitoiset{ 216c0d92078bbce7c2d8f017bd7d9c86f339a751bdcSamuel Pitoiset "idx", "up", "down", "bfly" 217c0d92078bbce7c2d8f017bd7d9c86f339a751bdcSamuel Pitoiset}; 218c0d92078bbce7c2d8f017bd7d9c86f339a751bdcSamuel Pitoiset 219908ba1955434e10f7fc3579bc07f3bc46f4bff3fSamuel Pitoisetstatic const char *pixldOpStr[] = 220908ba1955434e10f7fc3579bc07f3bc46f4bff3fSamuel Pitoiset{ 221908ba1955434e10f7fc3579bc07f3bc46f4bff3fSamuel Pitoiset "count", "covmask", "offset", "cent_offset", "sampleid" 222908ba1955434e10f7fc3579bc07f3bc46f4bff3fSamuel Pitoiset}; 223908ba1955434e10f7fc3579bc07f3bc46f4bff3fSamuel Pitoiset 224a6d3b2e176ce60852710b769f35b5dbcd4416b20Samuel Pitoisetstatic const char *rcprsqOpStr[] = 225a6d3b2e176ce60852710b769f35b5dbcd4416b20Samuel Pitoiset{ 226a6d3b2e176ce60852710b769f35b5dbcd4416b20Samuel Pitoiset "", "64h" 227a6d3b2e176ce60852710b769f35b5dbcd4416b20Samuel Pitoiset}; 228a6d3b2e176ce60852710b769f35b5dbcd4416b20Samuel Pitoiset 229fa10d1d67472cd2e821c5aa196590d43896a78fbSamuel Pitoisetstatic const char *emitOpStr[] = 230fa10d1d67472cd2e821c5aa196590d43896a78fbSamuel Pitoiset{ 231fa10d1d67472cd2e821c5aa196590d43896a78fbSamuel Pitoiset "", "restart" 232fa10d1d67472cd2e821c5aa196590d43896a78fbSamuel Pitoiset}; 233fa10d1d67472cd2e821c5aa196590d43896a78fbSamuel Pitoiset 23403dc87caab25b5c33314ac9ef673fea92c78938eSamuel Pitoisetstatic const char *cctlOpStr[] = 23503dc87caab25b5c33314ac9ef673fea92c78938eSamuel Pitoiset{ 23603dc87caab25b5c33314ac9ef673fea92c78938eSamuel Pitoiset "", "", "", "", "", "iv", "ivall" 23703dc87caab25b5c33314ac9ef673fea92c78938eSamuel Pitoiset}; 23803dc87caab25b5c33314ac9ef673fea92c78938eSamuel Pitoiset 239d588e4f1925c5a2fc3efbf9ab192f0f6494be57bSamuel Pitoisetstatic const char *barOpStr[] = 240d588e4f1925c5a2fc3efbf9ab192f0f6494be57bSamuel Pitoiset{ 241d588e4f1925c5a2fc3efbf9ab192f0f6494be57bSamuel Pitoiset "sync", "arrive", "red and", "red or", "red popc" 242d588e4f1925c5a2fc3efbf9ab192f0f6494be57bSamuel Pitoiset}; 243d588e4f1925c5a2fc3efbf9ab192f0f6494be57bSamuel Pitoiset 24457594065c30feec9376be9b2132659f7d87362eeChristoph Bumillerstatic const char *DataTypeStr[] = 24557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller{ 24657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "-", 24757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "u8", "s8", 24857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "u16", "s16", 24957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "u32", "s32", 25057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "u64", "s64", 25157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "f16", "f32", "f64", 25257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "b96", "b128" 25357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller}; 25457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 25557594065c30feec9376be9b2132659f7d87362eeChristoph Bumillerstatic const char *RoundModeStr[] = 25657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller{ 25757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "", "rm", "rz", "rp", "rni", "rmi", "rzi", "rpi" 25857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller}; 25957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 26057594065c30feec9376be9b2132659f7d87362eeChristoph Bumillerstatic const char *CondCodeStr[] = 26157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller{ 26257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "never", 26357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "lt", 26457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "eq", 26557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "le", 26657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "gt", 26757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "ne", 26857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "ge", 26957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "", 27057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "(invalid)", 27157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "ltu", 27257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "equ", 27357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "leu", 27457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "gtu", 27557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "neu", 27657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "geu", 27757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "", 27857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "no", 27957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "nc", 28057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "ns", 28157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "na", 28257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "a", 28357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "s", 28457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "c", 28557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "o" 28657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller}; 28757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 28857594065c30feec9376be9b2132659f7d87362eeChristoph Bumillerstatic const char *SemanticStr[SV_LAST + 1] = 28957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller{ 29057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "POSITION", 29157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "VERTEX_ID", 29257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "INSTANCE_ID", 29357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "INVOCATION_ID", 29457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "PRIMITIVE_ID", 29557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "VERTEX_COUNT", 29657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "LAYER", 29757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "VIEWPORT_INDEX", 29857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "Y_DIR", 29957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "FACE", 30057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "POINT_SIZE", 30157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "POINT_COORD", 30257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "CLIP_DISTANCE", 30357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "SAMPLE_INDEX", 304f715a0a39a0f7f19443e7721ae792878ba504eedIlia Mirkin "SAMPLE_POS", 305b3a2398aded19e25124a4a1d228eb3843827f6b2Ilia Mirkin "SAMPLE_MASK", 3067e0036a49258326cc2d875f2960d18c6b3665036Ilia Mirkin "TESS_OUTER", 3077e0036a49258326cc2d875f2960d18c6b3665036Ilia Mirkin "TESS_INNER", 30857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "TESS_COORD", 30957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "TID", 31057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "CTAID", 31157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "NTID", 31257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "GRIDID", 31357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "NCTAID", 31457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "LANEID", 31557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "PHYSID", 31657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "NPHYSID", 31757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "CLOCK", 31857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "LBASE", 31957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "SBASE", 32067250acbaba924ccaab696f2b348dfa898c41d0bChristoph Bumiller "VERTEX_STRIDE", 321d548d47edf9f05e6dbf9656abc2f8e78d02cb2f6Ben Skeggs "INVOCATION_INFO", 32239f51ec96f00f601b9c4d4e321dacb3af9dc866fIlia Mirkin "THREAD_KILL", 323b214e0d2fb736afcc6eb222a29a4d2fad31acacfSamuel Pitoiset "BASEVERTEX", 324b214e0d2fb736afcc6eb222a29a4d2fad31acacfSamuel Pitoiset "BASEINSTANCE", 325b214e0d2fb736afcc6eb222a29a4d2fad31acacfSamuel Pitoiset "DRAWID", 326ea6b236ab1a53cc0a616088aec4a0ec4d804f77dSamuel Pitoiset "WORK_DIM", 32757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "?", 32857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller "(INVALID)" 32957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller}; 33057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 331a9f22b91e5b6f0d462de8a92e13d7c5af35dadc4Christoph Bumillerstatic const char *interpStr[16] = 332a9f22b91e5b6f0d462de8a92e13d7c5af35dadc4Christoph Bumiller{ 333a9f22b91e5b6f0d462de8a92e13d7c5af35dadc4Christoph Bumiller "pass", 334a9f22b91e5b6f0d462de8a92e13d7c5af35dadc4Christoph Bumiller "mul", 335a9f22b91e5b6f0d462de8a92e13d7c5af35dadc4Christoph Bumiller "flat", 336a9f22b91e5b6f0d462de8a92e13d7c5af35dadc4Christoph Bumiller "sc", 337a9f22b91e5b6f0d462de8a92e13d7c5af35dadc4Christoph Bumiller "cent pass", 338a9f22b91e5b6f0d462de8a92e13d7c5af35dadc4Christoph Bumiller "cent mul", 339a9f22b91e5b6f0d462de8a92e13d7c5af35dadc4Christoph Bumiller "cent flat", 340a9f22b91e5b6f0d462de8a92e13d7c5af35dadc4Christoph Bumiller "cent sc", 341a9f22b91e5b6f0d462de8a92e13d7c5af35dadc4Christoph Bumiller "off pass", 342a9f22b91e5b6f0d462de8a92e13d7c5af35dadc4Christoph Bumiller "off mul", 343a9f22b91e5b6f0d462de8a92e13d7c5af35dadc4Christoph Bumiller "off flat", 344a9f22b91e5b6f0d462de8a92e13d7c5af35dadc4Christoph Bumiller "off sc", 345a9f22b91e5b6f0d462de8a92e13d7c5af35dadc4Christoph Bumiller "samp pass", 346a9f22b91e5b6f0d462de8a92e13d7c5af35dadc4Christoph Bumiller "samp mul", 347a9f22b91e5b6f0d462de8a92e13d7c5af35dadc4Christoph Bumiller "samp flat", 348a9f22b91e5b6f0d462de8a92e13d7c5af35dadc4Christoph Bumiller "samp sc" 349a9f22b91e5b6f0d462de8a92e13d7c5af35dadc4Christoph Bumiller}; 350a9f22b91e5b6f0d462de8a92e13d7c5af35dadc4Christoph Bumiller 35157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller#define PRINT(args...) \ 35257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller do { \ 35357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller pos += snprintf(&buf[pos], size - pos, args); \ 35457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller } while(0) 35557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 35657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller#define SPACE_PRINT(cond, args...) \ 35757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller do { \ 35857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller if (cond) \ 35957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller buf[pos++] = ' '; \ 36057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller pos += snprintf(&buf[pos], size - pos, args); \ 36157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller } while(0) 36257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 36357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller#define SPACE() \ 36457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller do { \ 36557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller if (pos < size) \ 36657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller buf[pos++] = ' '; \ 36757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller } while(0) 36857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 36957594065c30feec9376be9b2132659f7d87362eeChristoph Bumillerint Modifier::print(char *buf, size_t size) const 37057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller{ 37157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller size_t pos = 0; 37257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 37357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller if (bits) 37457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller PRINT("%s", colour[TXT_INSN]); 37557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 37657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller size_t base = pos; 37757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 37857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller if (bits & NV50_IR_MOD_NOT) 37957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller PRINT("not"); 38057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller if (bits & NV50_IR_MOD_SAT) 38157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller SPACE_PRINT(pos > base && pos < size, "sat"); 38257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller if (bits & NV50_IR_MOD_NEG) 38357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller SPACE_PRINT(pos > base && pos < size, "neg"); 38457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller if (bits & NV50_IR_MOD_ABS) 38557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller SPACE_PRINT(pos > base && pos < size, "abs"); 38657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 38757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller return pos; 38857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller} 389322bc7ed68ed92233c97168c036d0aa50c11a20eChristoph Bumiller 39057594065c30feec9376be9b2132659f7d87362eeChristoph Bumillerint LValue::print(char *buf, size_t size, DataType ty) const 39157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller{ 39257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller const char *postFix = ""; 39357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller size_t pos = 0; 39457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller int idx = join->reg.data.id >= 0 ? join->reg.data.id : id; 39557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller char p = join->reg.data.id >= 0 ? '$' : '%'; 39657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller char r; 39757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller int col = TXT_DEFAULT; 39857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 39957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller switch (reg.file) { 40057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller case FILE_GPR: 40157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller r = 'r'; col = TXT_GPR; 402322bc7ed68ed92233c97168c036d0aa50c11a20eChristoph Bumiller if (reg.size == 2) { 403322bc7ed68ed92233c97168c036d0aa50c11a20eChristoph Bumiller if (p == '$') { 404322bc7ed68ed92233c97168c036d0aa50c11a20eChristoph Bumiller postFix = (idx & 1) ? "h" : "l"; 405322bc7ed68ed92233c97168c036d0aa50c11a20eChristoph Bumiller idx /= 2; 406322bc7ed68ed92233c97168c036d0aa50c11a20eChristoph Bumiller } else { 407322bc7ed68ed92233c97168c036d0aa50c11a20eChristoph Bumiller postFix = "s"; 408322bc7ed68ed92233c97168c036d0aa50c11a20eChristoph Bumiller } 409322bc7ed68ed92233c97168c036d0aa50c11a20eChristoph Bumiller } else 410322bc7ed68ed92233c97168c036d0aa50c11a20eChristoph Bumiller if (reg.size == 8) { 41157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller postFix = "d"; 412322bc7ed68ed92233c97168c036d0aa50c11a20eChristoph Bumiller } else 413322bc7ed68ed92233c97168c036d0aa50c11a20eChristoph Bumiller if (reg.size == 16) { 41457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller postFix = "q"; 415322bc7ed68ed92233c97168c036d0aa50c11a20eChristoph Bumiller } else 416322bc7ed68ed92233c97168c036d0aa50c11a20eChristoph Bumiller if (reg.size == 12) { 417e43a3a66a9d8a99021d76ff4d07dec7b8cfd62caChristoph Bumiller postFix = "t"; 418322bc7ed68ed92233c97168c036d0aa50c11a20eChristoph Bumiller } 41957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller break; 42057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller case FILE_PREDICATE: 42157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller r = 'p'; col = TXT_REGISTER; 42257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller if (reg.size == 2) 42357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller postFix = "d"; 42457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller else 42557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller if (reg.size == 4) 42657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller postFix = "q"; 42757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller break; 42857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller case FILE_FLAGS: 42957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller r = 'c'; col = TXT_FLAGS; 43057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller break; 43157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller case FILE_ADDRESS: 43257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller r = 'a'; col = TXT_REGISTER; 43357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller break; 43457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller default: 43557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller assert(!"invalid file for lvalue"); 43657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller r = '?'; 43757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller break; 43857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller } 43957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 44057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller PRINT("%s%c%c%i%s", colour[col], p, r, idx, postFix); 44157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 44257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller return pos; 44357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller} 44457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 44557594065c30feec9376be9b2132659f7d87362eeChristoph Bumillerint ImmediateValue::print(char *buf, size_t size, DataType ty) const 44657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller{ 44757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller size_t pos = 0; 44857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 44957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller PRINT("%s", colour[TXT_IMMD]); 45057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 45157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller switch (ty) { 45257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller case TYPE_F32: PRINT("%f", reg.data.f32); break; 45357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller case TYPE_F64: PRINT("%f", reg.data.f64); break; 45457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller case TYPE_U8: PRINT("0x%02x", reg.data.u8); break; 45557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller case TYPE_S8: PRINT("%i", reg.data.s8); break; 45657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller case TYPE_U16: PRINT("0x%04x", reg.data.u16); break; 45757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller case TYPE_S16: PRINT("%i", reg.data.s16); break; 45857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller case TYPE_U32: PRINT("0x%08x", reg.data.u32); break; 45957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller case TYPE_S32: PRINT("%i", reg.data.s32); break; 46057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller case TYPE_U64: 46157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller case TYPE_S64: 46257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller default: 463e838d91b94c3d1d20db62a61bfd9163f675d3139Mauro Rossi PRINT("0x%016" PRIx64, reg.data.u64); 46457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller break; 46557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller } 46657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller return pos; 46757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller} 46857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 46957594065c30feec9376be9b2132659f7d87362eeChristoph Bumillerint Symbol::print(char *buf, size_t size, DataType ty) const 47057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller{ 47157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller return print(buf, size, NULL, NULL, ty); 47257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller} 47357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 47457594065c30feec9376be9b2132659f7d87362eeChristoph Bumillerint Symbol::print(char *buf, size_t size, 47557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller Value *rel, Value *dimRel, DataType ty) const 47657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller{ 47757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller size_t pos = 0; 47857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller char c; 47957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 48057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller if (ty == TYPE_NONE) 48157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller ty = typeOfSize(reg.size); 48257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 48357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller if (reg.file == FILE_SYSTEM_VALUE) { 48457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller PRINT("%ssv[%s%s:%i%s", colour[TXT_MEM], 48557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller colour[TXT_REGISTER], 48657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller SemanticStr[reg.data.sv.sv], reg.data.sv.index, colour[TXT_MEM]); 48757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller if (rel) { 48857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller PRINT("%s+", colour[TXT_DEFAULT]); 48957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller pos += rel->print(&buf[pos], size - pos); 49057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller } 49157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller PRINT("%s]", colour[TXT_MEM]); 49257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller return pos; 49357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller } 49457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 49557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller switch (reg.file) { 49657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller case FILE_MEMORY_CONST: c = 'c'; break; 49757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller case FILE_SHADER_INPUT: c = 'a'; break; 49857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller case FILE_SHADER_OUTPUT: c = 'o'; break; 49961d52a5fb9379eede3bf68b011f9477176341ee9Hans de Goede case FILE_MEMORY_BUFFER: c = 'b'; break; // Only used before lowering 50057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller case FILE_MEMORY_GLOBAL: c = 'g'; break; 50157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller case FILE_MEMORY_SHARED: c = 's'; break; 50257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller case FILE_MEMORY_LOCAL: c = 'l'; break; 50357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller default: 50457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller assert(!"invalid file"); 50557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller c = '?'; 50657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller break; 50757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller } 50857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 50957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller if (c == 'c') 51057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller PRINT("%s%c%i[", colour[TXT_MEM], c, reg.fileIndex); 51157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller else 51257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller PRINT("%s%c[", colour[TXT_MEM], c); 51357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 51457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller if (dimRel) { 51557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller pos += dimRel->print(&buf[pos], size - pos, TYPE_S32); 51657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller PRINT("%s][", colour[TXT_MEM]); 51757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller } 51857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 51957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller if (rel) { 52057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller pos += rel->print(&buf[pos], size - pos); 52157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller PRINT("%s%c", colour[TXT_DEFAULT], (reg.data.offset < 0) ? '-' : '+'); 52257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller } else { 52357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller assert(reg.data.offset >= 0); 52457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller } 52557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller PRINT("%s0x%x%s]", colour[TXT_IMMD], abs(reg.data.offset), colour[TXT_MEM]); 52657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 52757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller return pos; 52857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller} 52957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 53057594065c30feec9376be9b2132659f7d87362eeChristoph Bumillervoid Instruction::print() const 53157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller{ 53257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller #define BUFSZ 512 53357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 53457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller const size_t size = BUFSZ; 53557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 53657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller char buf[BUFSZ]; 53757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller int s, d; 53857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller size_t pos = 0; 53957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 54057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller PRINT("%s", colour[TXT_INSN]); 54157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 54257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller if (join) 54357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller PRINT("join "); 54457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 54557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller if (predSrc >= 0) { 54657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller const size_t pre = pos; 54757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller if (getSrc(predSrc)->reg.file == FILE_PREDICATE) { 54857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller if (cc == CC_NOT_P) 54957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller PRINT("not"); 55057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller } else { 55157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller PRINT("%s", CondCodeStr[cc]); 55257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller } 553322bc7ed68ed92233c97168c036d0aa50c11a20eChristoph Bumiller if (pos > pre) 55457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller SPACE(); 5559362d4bc0a03860ec386156cf499e855a9c2d2a5Christoph Bumiller pos += getSrc(predSrc)->print(&buf[pos], BUFSZ - pos); 55657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller PRINT(" %s", colour[TXT_INSN]); 55757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller } 55857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 55957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller if (saturate) 56057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller PRINT("sat "); 56157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 56257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller if (asFlow()) { 56357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller PRINT("%s", operationStr[op]); 564c893b9406060d3735b2c9e307ae89f6d83a4be40Christoph Bumiller if (asFlow()->indirect) 565c893b9406060d3735b2c9e307ae89f6d83a4be40Christoph Bumiller PRINT(" ind"); 566c893b9406060d3735b2c9e307ae89f6d83a4be40Christoph Bumiller if (asFlow()->absolute) 567c893b9406060d3735b2c9e307ae89f6d83a4be40Christoph Bumiller PRINT(" abs"); 56857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller if (op == OP_CALL && asFlow()->builtin) { 56957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller PRINT(" %sBUILTIN:%i", colour[TXT_BRA], asFlow()->target.builtin); 57057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller } else 57157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller if (op == OP_CALL && asFlow()->target.fn) { 57298116cc3dc3fc2cd84990cc2c968f05fe2978b4aFrancisco Jerez PRINT(" %s%s:%i", colour[TXT_BRA], 57398116cc3dc3fc2cd84990cc2c968f05fe2978b4aFrancisco Jerez asFlow()->target.fn->getName(), 57498116cc3dc3fc2cd84990cc2c968f05fe2978b4aFrancisco Jerez asFlow()->target.fn->getLabel()); 57557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller } else 57657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller if (asFlow()->target.bb) 57757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller PRINT(" %sBB:%i", colour[TXT_BRA], asFlow()->target.bb->getId()); 57857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller } else { 57957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller PRINT("%s ", operationStr[op]); 580a9f22b91e5b6f0d462de8a92e13d7c5af35dadc4Christoph Bumiller if (op == OP_LINTERP || op == OP_PINTERP) 581a9f22b91e5b6f0d462de8a92e13d7c5af35dadc4Christoph Bumiller PRINT("%s ", interpStr[ipa]); 58222b762f9b495b14400f30bd6537f7c5a6d262325Christoph Bumiller switch (op) { 58322b762f9b495b14400f30bd6537f7c5a6d262325Christoph Bumiller case OP_SUREDP: 5848489f20689c8d3d372c4143311cca23cd6a5fc58Samuel Pitoiset case OP_SUREDB: 58522b762f9b495b14400f30bd6537f7c5a6d262325Christoph Bumiller case OP_ATOM: 58647b390fe45e5e6f982c60b58985892438959cd8eJan Vesely if (subOp < ARRAY_SIZE(atomSubOpStr)) 58722b762f9b495b14400f30bd6537f7c5a6d262325Christoph Bumiller PRINT("%s ", atomSubOpStr[subOp]); 58822b762f9b495b14400f30bd6537f7c5a6d262325Christoph Bumiller break; 5890c930557bf96721ce50ca95b5201be09da905cb8Samuel Pitoiset case OP_LOAD: 5900c930557bf96721ce50ca95b5201be09da905cb8Samuel Pitoiset case OP_STORE: 59147b390fe45e5e6f982c60b58985892438959cd8eJan Vesely if (subOp < ARRAY_SIZE(ldstSubOpStr)) 5920c930557bf96721ce50ca95b5201be09da905cb8Samuel Pitoiset PRINT("%s ", ldstSubOpStr[subOp]); 5930c930557bf96721ce50ca95b5201be09da905cb8Samuel Pitoiset break; 594a734c0f8ba4a99e3ae42fe7ca9b1af16a01587b3Samuel Pitoiset case OP_SUBFM: 59547b390fe45e5e6f982c60b58985892438959cd8eJan Vesely if (subOp < ARRAY_SIZE(subfmOpStr)) 596a734c0f8ba4a99e3ae42fe7ca9b1af16a01587b3Samuel Pitoiset PRINT("%s ", subfmOpStr[subOp]); 597a734c0f8ba4a99e3ae42fe7ca9b1af16a01587b3Samuel Pitoiset break; 598c0d92078bbce7c2d8f017bd7d9c86f339a751bdcSamuel Pitoiset case OP_SHFL: 599c0d92078bbce7c2d8f017bd7d9c86f339a751bdcSamuel Pitoiset if (subOp < ARRAY_SIZE(shflOpStr)) 600c0d92078bbce7c2d8f017bd7d9c86f339a751bdcSamuel Pitoiset PRINT("%s ", shflOpStr[subOp]); 601c0d92078bbce7c2d8f017bd7d9c86f339a751bdcSamuel Pitoiset break; 602908ba1955434e10f7fc3579bc07f3bc46f4bff3fSamuel Pitoiset case OP_PIXLD: 603908ba1955434e10f7fc3579bc07f3bc46f4bff3fSamuel Pitoiset if (subOp < ARRAY_SIZE(pixldOpStr)) 604908ba1955434e10f7fc3579bc07f3bc46f4bff3fSamuel Pitoiset PRINT("%s ", pixldOpStr[subOp]); 605908ba1955434e10f7fc3579bc07f3bc46f4bff3fSamuel Pitoiset break; 606a6d3b2e176ce60852710b769f35b5dbcd4416b20Samuel Pitoiset case OP_RCP: 607a6d3b2e176ce60852710b769f35b5dbcd4416b20Samuel Pitoiset case OP_RSQ: 608a6d3b2e176ce60852710b769f35b5dbcd4416b20Samuel Pitoiset if (subOp < ARRAY_SIZE(rcprsqOpStr)) 609a6d3b2e176ce60852710b769f35b5dbcd4416b20Samuel Pitoiset PRINT("%s ", rcprsqOpStr[subOp]); 610a6d3b2e176ce60852710b769f35b5dbcd4416b20Samuel Pitoiset break; 611fa10d1d67472cd2e821c5aa196590d43896a78fbSamuel Pitoiset case OP_EMIT: 612fa10d1d67472cd2e821c5aa196590d43896a78fbSamuel Pitoiset if (subOp < ARRAY_SIZE(emitOpStr)) 613fa10d1d67472cd2e821c5aa196590d43896a78fbSamuel Pitoiset PRINT("%s ", emitOpStr[subOp]); 614fa10d1d67472cd2e821c5aa196590d43896a78fbSamuel Pitoiset break; 61503dc87caab25b5c33314ac9ef673fea92c78938eSamuel Pitoiset case OP_CCTL: 61603dc87caab25b5c33314ac9ef673fea92c78938eSamuel Pitoiset if (subOp < ARRAY_SIZE(cctlOpStr)) 61703dc87caab25b5c33314ac9ef673fea92c78938eSamuel Pitoiset PRINT("%s ", cctlOpStr[subOp]); 61803dc87caab25b5c33314ac9ef673fea92c78938eSamuel Pitoiset break; 619d588e4f1925c5a2fc3efbf9ab192f0f6494be57bSamuel Pitoiset case OP_BAR: 620d588e4f1925c5a2fc3efbf9ab192f0f6494be57bSamuel Pitoiset if (subOp < ARRAY_SIZE(barOpStr)) 621d588e4f1925c5a2fc3efbf9ab192f0f6494be57bSamuel Pitoiset PRINT("%s ", barOpStr[subOp]); 622d588e4f1925c5a2fc3efbf9ab192f0f6494be57bSamuel Pitoiset break; 62322b762f9b495b14400f30bd6537f7c5a6d262325Christoph Bumiller default: 62422b762f9b495b14400f30bd6537f7c5a6d262325Christoph Bumiller if (subOp) 62522b762f9b495b14400f30bd6537f7c5a6d262325Christoph Bumiller PRINT("(SUBOP:%u) ", subOp); 62622b762f9b495b14400f30bd6537f7c5a6d262325Christoph Bumiller break; 62722b762f9b495b14400f30bd6537f7c5a6d262325Christoph Bumiller } 62857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller if (perPatch) 62957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller PRINT("patch "); 63057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller if (asTex()) 631c2dfcd7f0eaf4eda375eb320e0e87793a80ef92dChristoph Bumiller PRINT("%s %s$r%u $s%u %s", asTex()->tex.target.getName(), 632c2dfcd7f0eaf4eda375eb320e0e87793a80ef92dChristoph Bumiller colour[TXT_MEM], asTex()->tex.r, asTex()->tex.s, 633c2dfcd7f0eaf4eda375eb320e0e87793a80ef92dChristoph Bumiller colour[TXT_INSN]); 63457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller if (postFactor) 63557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller PRINT("x2^%i ", postFactor); 63657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller PRINT("%s%s", dnz ? "dnz " : (ftz ? "ftz " : ""), DataTypeStr[dType]); 63757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller } 63857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 63957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller if (rnd != ROUND_N) 64057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller PRINT(" %s", RoundModeStr[rnd]); 64157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 6428cc2eca5df0116aa7fb8233a9ab6ad1c9e4203cdFrancisco Jerez if (defExists(1)) 64357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller PRINT(" {"); 64457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller for (d = 0; defExists(d); ++d) { 64557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller SPACE(); 6469362d4bc0a03860ec386156cf499e855a9c2d2a5Christoph Bumiller pos += getDef(d)->print(&buf[pos], size - pos); 64757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller } 64857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller if (d > 1) 64957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller PRINT(" %s}", colour[TXT_INSN]); 65057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller else 65157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller if (!d && !asFlow()) 65257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller PRINT(" %s#", colour[TXT_INSN]); 65357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 65457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller if (asCmp()) 65557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller PRINT(" %s%s", colour[TXT_INSN], CondCodeStr[asCmp()->setCond]); 65657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 65757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller if (sType != dType) 65857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller PRINT(" %s%s", colour[TXT_INSN], DataTypeStr[sType]); 65957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 66057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller for (s = 0; srcExists(s); ++s) { 6619362d4bc0a03860ec386156cf499e855a9c2d2a5Christoph Bumiller if (s == predSrc || src(s).usedAsPtr) 66257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller continue; 66357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller const size_t pre = pos; 66457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller SPACE(); 6659362d4bc0a03860ec386156cf499e855a9c2d2a5Christoph Bumiller pos += src(s).mod.print(&buf[pos], BUFSZ - pos); 66657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller if (pos > pre + 1) 66757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller SPACE(); 6689362d4bc0a03860ec386156cf499e855a9c2d2a5Christoph Bumiller if (src(s).isIndirect(0) || src(s).isIndirect(1)) 6699362d4bc0a03860ec386156cf499e855a9c2d2a5Christoph Bumiller pos += getSrc(s)->asSym()->print(&buf[pos], BUFSZ - pos, 6709362d4bc0a03860ec386156cf499e855a9c2d2a5Christoph Bumiller getIndirect(s, 0), 6719362d4bc0a03860ec386156cf499e855a9c2d2a5Christoph Bumiller getIndirect(s, 1)); 67257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller else 6739362d4bc0a03860ec386156cf499e855a9c2d2a5Christoph Bumiller pos += getSrc(s)->print(&buf[pos], BUFSZ - pos, sType); 67457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller } 675322bc7ed68ed92233c97168c036d0aa50c11a20eChristoph Bumiller if (exit) 676322bc7ed68ed92233c97168c036d0aa50c11a20eChristoph Bumiller PRINT("%s exit", colour[TXT_INSN]); 67757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 67857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller PRINT("%s", colour[TXT_DEFAULT]); 67957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 68057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller buf[MIN2(pos, BUFSZ - 1)] = 0; 68157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 68257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller INFO("%s (%u)\n", buf, encSize); 68357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller} 68457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 68557594065c30feec9376be9b2132659f7d87362eeChristoph Bumillerclass PrintPass : public Pass 68657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller{ 68757594065c30feec9376be9b2132659f7d87362eeChristoph Bumillerpublic: 68857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller PrintPass() : serial(0) { } 68957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 69057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller virtual bool visit(Function *); 69157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller virtual bool visit(BasicBlock *); 69257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller virtual bool visit(Instruction *); 69357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 69457594065c30feec9376be9b2132659f7d87362eeChristoph Bumillerprivate: 69557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller int serial; 69657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller}; 69757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 69857594065c30feec9376be9b2132659f7d87362eeChristoph Bumillerbool 69957594065c30feec9376be9b2132659f7d87362eeChristoph BumillerPrintPass::visit(Function *fn) 70057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller{ 701d39169cb6dd25f92e62254aa3920c2add2b3ca25Christoph Bumiller char str[16]; 702d39169cb6dd25f92e62254aa3920c2add2b3ca25Christoph Bumiller 703d39169cb6dd25f92e62254aa3920c2add2b3ca25Christoph Bumiller INFO("\n%s:%i (", fn->getName(), fn->getLabel()); 704d39169cb6dd25f92e62254aa3920c2add2b3ca25Christoph Bumiller 705d39169cb6dd25f92e62254aa3920c2add2b3ca25Christoph Bumiller if (!fn->outs.empty()) 706d39169cb6dd25f92e62254aa3920c2add2b3ca25Christoph Bumiller INFO("out"); 707d39169cb6dd25f92e62254aa3920c2add2b3ca25Christoph Bumiller for (std::deque<ValueRef>::iterator it = fn->outs.begin(); 708d39169cb6dd25f92e62254aa3920c2add2b3ca25Christoph Bumiller it != fn->outs.end(); 709d39169cb6dd25f92e62254aa3920c2add2b3ca25Christoph Bumiller ++it) { 710d39169cb6dd25f92e62254aa3920c2add2b3ca25Christoph Bumiller it->get()->print(str, sizeof(str), typeOfSize(it->get()->reg.size)); 711d39169cb6dd25f92e62254aa3920c2add2b3ca25Christoph Bumiller INFO(" %s", str); 712d39169cb6dd25f92e62254aa3920c2add2b3ca25Christoph Bumiller } 713d39169cb6dd25f92e62254aa3920c2add2b3ca25Christoph Bumiller 714d39169cb6dd25f92e62254aa3920c2add2b3ca25Christoph Bumiller if (!fn->ins.empty()) 715d39169cb6dd25f92e62254aa3920c2add2b3ca25Christoph Bumiller INFO("%s%sin", colour[TXT_DEFAULT], fn->outs.empty() ? "" : ", "); 716d39169cb6dd25f92e62254aa3920c2add2b3ca25Christoph Bumiller for (std::deque<ValueDef>::iterator it = fn->ins.begin(); 717d39169cb6dd25f92e62254aa3920c2add2b3ca25Christoph Bumiller it != fn->ins.end(); 718d39169cb6dd25f92e62254aa3920c2add2b3ca25Christoph Bumiller ++it) { 719d39169cb6dd25f92e62254aa3920c2add2b3ca25Christoph Bumiller it->get()->print(str, sizeof(str), typeOfSize(it->get()->reg.size)); 720d39169cb6dd25f92e62254aa3920c2add2b3ca25Christoph Bumiller INFO(" %s", str); 721d39169cb6dd25f92e62254aa3920c2add2b3ca25Christoph Bumiller } 722d39169cb6dd25f92e62254aa3920c2add2b3ca25Christoph Bumiller INFO("%s)\n", colour[TXT_DEFAULT]); 72357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 72457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller return true; 72557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller} 72657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 72757594065c30feec9376be9b2132659f7d87362eeChristoph Bumillerbool 72857594065c30feec9376be9b2132659f7d87362eeChristoph BumillerPrintPass::visit(BasicBlock *bb) 72957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller{ 73057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller#if 0 73157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller INFO("---\n"); 73257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller for (Graph::EdgeIterator ei = bb->cfg.incident(); !ei.end(); ei.next()) 73357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller INFO(" <- BB:%i (%s)\n", 73457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller BasicBlock::get(ei.getNode())->getId(), 73557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller ei.getEdge()->typeStr()); 73657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller#endif 73757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller INFO("BB:%i (%u instructions) - ", bb->getId(), bb->getInsnCount()); 73857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 73957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller if (bb->idom()) 74057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller INFO("idom = BB:%i, ", bb->idom()->getId()); 74157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 74257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller INFO("df = { "); 74357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller for (DLList::Iterator df = bb->getDF().iterator(); !df.end(); df.next()) 74457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller INFO("BB:%i ", BasicBlock::get(df)->getId()); 74557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 74657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller INFO("}\n"); 74757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 74857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller for (Graph::EdgeIterator ei = bb->cfg.outgoing(); !ei.end(); ei.next()) 74957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller INFO(" -> BB:%i (%s)\n", 75057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller BasicBlock::get(ei.getNode())->getId(), 75157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller ei.getEdge()->typeStr()); 75257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 75357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller return true; 75457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller} 75557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 75657594065c30feec9376be9b2132659f7d87362eeChristoph Bumillerbool 75757594065c30feec9376be9b2132659f7d87362eeChristoph BumillerPrintPass::visit(Instruction *insn) 75857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller{ 75957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller INFO("%3i: ", serial++); 76057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller insn->print(); 76157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller return true; 76257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller} 76357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 76457594065c30feec9376be9b2132659f7d87362eeChristoph Bumillervoid 76557594065c30feec9376be9b2132659f7d87362eeChristoph BumillerFunction::print() 76657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller{ 76757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller PrintPass pass; 76857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller pass.run(this, true, false); 76957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller} 77057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 77157594065c30feec9376be9b2132659f7d87362eeChristoph Bumillervoid 77257594065c30feec9376be9b2132659f7d87362eeChristoph BumillerProgram::print() 77357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller{ 77457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller PrintPass pass; 77596259b51285469a229c3740c2b467d4455ed0c8dMarcin Ślusarz init_colours(); 77657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller pass.run(this, true, false); 77757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller} 77857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 77957594065c30feec9376be9b2132659f7d87362eeChristoph Bumillervoid 78057594065c30feec9376be9b2132659f7d87362eeChristoph BumillerFunction::printLiveIntervals() const 78157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller{ 78257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller INFO("printing live intervals ...\n"); 78357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 78457594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller for (ArrayList::Iterator it = allLValues.iterator(); !it.end(); it.next()) { 78557594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller const Value *lval = Value::get(it)->asLValue(); 78657594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller if (lval && !lval->livei.isEmpty()) { 78757594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller INFO("livei(%%%i): ", lval->id); 78857594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller lval->livei.print(); 78957594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller } 79057594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller } 79157594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller} 79257594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller 79357594065c30feec9376be9b2132659f7d87362eeChristoph Bumiller} // namespace nv50_ir 794