1c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors/* 2c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors * Copyright (c) 2016 Etnaviv Project 3c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors * 4c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors * Permission is hereby granted, free of charge, to any person obtaining a 5c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors * copy of this software and associated documentation files (the "Software"), 6c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors * to deal in the Software without restriction, including without limitation 7c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors * the rights to use, copy, modify, merge, publish, distribute, sub license, 8c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors * and/or sell copies of the Software, and to permit persons to whom the 9c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors * Software is furnished to do so, subject to the following conditions: 10c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors * 11c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors * The above copyright notice and this permission notice (including the 12c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors * next paragraph) shall be included in all copies or substantial portions 13c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors * of the Software. 14c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors * 15c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL 18c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 21c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors * DEALINGS IN THE SOFTWARE. 22c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors * 23c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors * Authors: 24c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors * Christian Gmeiner <christian.gmeiner@gmail.com> 25c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors */ 26c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 27c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors#include "etnaviv_disasm.h" 28c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 29c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors#include <assert.h> 30c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors#include <stdbool.h> 31c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors#include <stdio.h> 32c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors#include <stdlib.h> 33c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 34c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors#include "hw/isa.xml.h" 35c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 36c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authorsstruct instr { 37c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors /* dword0: */ 38c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors uint32_t opc : 6; 39c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors uint32_t cond : 5; 40c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors uint32_t sat : 1; 41c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors uint32_t dst_use : 1; 42c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors uint32_t dst_amode : 3; 43c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors uint32_t dst_reg : 7; 44c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors uint32_t dst_comps : 4; 45c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors uint32_t tex_id : 5; 46c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 47c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors /* dword1: */ 48c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors uint32_t tex_amode : 3; 49c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors uint32_t tex_swiz : 8; 50c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors uint32_t src0_use : 1; 51c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors uint32_t src0_reg : 9; 52c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors uint32_t type_bit2 : 1; 53c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors uint32_t src0_swiz : 8; 54c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors uint32_t src0_neg : 1; 55c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors uint32_t src0_abs : 1; 56c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 57c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors /* dword2: */ 58c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors uint32_t src0_amode : 3; 59c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors uint32_t src0_rgroup : 3; 60c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors uint32_t src1_use : 1; 61c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors uint32_t src1_reg : 9; 62c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors uint32_t opcode_bit6 : 1; 63c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors uint32_t src1_swiz : 8; 64c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors uint32_t src1_neg : 1; 65c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors uint32_t src1_abs : 1; 66c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors uint32_t src1_amode : 3; 67c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors uint32_t type_bit01 : 2; 68c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 69c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors /* dword3: */ 70c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors union { 71c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors struct { 72c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors uint32_t src1_rgroup : 3; 73c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors uint32_t src2_use : 1; 74c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors uint32_t src2_reg : 9; 75c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors uint32_t unk3_13 : 1; 76c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors uint32_t src2_swiz : 8; 77c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors uint32_t src2_neg : 1; 78c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors uint32_t src2_abs : 1; 79c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors uint32_t unk3_24 : 1; 80c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors uint32_t src2_amode : 3; 81c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors uint32_t src2_rgroup : 3; 82c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors uint32_t unk3_31 : 1; 83c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors }; 84c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors uint32_t dword3; 85c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors }; 86c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors}; 87c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 88c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authorsstruct dst_operand { 89c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors bool use; 90c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors uint8_t amode; 91c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors uint16_t reg; 92c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors uint8_t comps; 93c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors}; 94c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 95c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authorsstruct src_operand { 96c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors bool use; 97c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors bool neg; 98c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors bool abs; 99c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors uint8_t rgroup; 100c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors uint16_t reg; 101c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors uint8_t swiz; 102c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors uint8_t amode; 103c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors}; 104c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 105c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authorsstruct tex_operand { 106c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors uint8_t id; 107c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors uint8_t amode; 108c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors uint8_t swiz; 109c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors}; 110c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 111c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authorsstruct opc_operands { 112c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors struct dst_operand *dst; 113c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors struct tex_operand *tex; 114c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors struct src_operand *src0; 115c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors struct src_operand *src1; 116c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors struct src_operand *src2; 117c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 118c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors int imm; 119c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors}; 120c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 121c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authorsstatic void 122c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authorsprintf_type(uint8_t type) 123c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors{ 124c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors switch(type) { 125c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors case INST_TYPE_F32: 126c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors /* as f32 is the default print nothing */ 127c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors break; 128c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 129c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors case INST_TYPE_S32: 130c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf(".s32"); 131c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors break; 132c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 133c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors case INST_TYPE_S8: 134c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf(".s8"); 135c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors break; 136c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 137c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors case INST_TYPE_U16: 138c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf(".u16"); 139c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors break; 140c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 141c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors case INST_TYPE_F16: 142c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf(".f16"); 143c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors break; 144c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 145c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors case INST_TYPE_S16: 146c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf(".s16"); 147c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors break; 148c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 149c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors case INST_TYPE_U32: 150c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf(".u32"); 151c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors break; 152c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 153c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors case INST_TYPE_U8: 154c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf(".u8"); 155c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors break; 156c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 157c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors default: 158c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors abort(); 159c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors break; 160c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors } 161c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors} 162c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 163c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authorsstatic void 164c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authorsprint_condition(uint8_t condition) 165c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors{ 166c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors switch (condition) { 167c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors case INST_CONDITION_TRUE: 168c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors break; 169c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 170c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors case INST_CONDITION_GT: 171c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf(".GT"); 172c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors break; 173c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 174c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors case INST_CONDITION_LT: 175c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf(".LT"); 176c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors break; 177c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 178c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors case INST_CONDITION_GE: 179c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf(".GE"); 180c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors break; 181c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 182c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors case INST_CONDITION_LE: 183c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf(".LE"); 184c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors break; 185c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 186c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors case INST_CONDITION_EQ: 187c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf(".EQ"); 188c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors break; 189c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 190c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors case INST_CONDITION_NE: 191c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf(".NE"); 192c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors break; 193c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 194c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors case INST_CONDITION_AND: 195c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf(".AND"); 196c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors break; 197c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 198c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors case INST_CONDITION_OR: 199c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf(".OR"); 200c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors break; 201c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 202c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors case INST_CONDITION_XOR: 203c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf(".XOR"); 204c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors break; 205c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 206c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors case INST_CONDITION_NOT: 207c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf(".NOT"); 208c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors break; 209c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 210c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors case INST_CONDITION_NZ: 211c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf(".NZ"); 212c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors break; 213c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 214c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors case INST_CONDITION_GEZ: 215c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf(".GEZ"); 216c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors break; 217c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 218c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors case INST_CONDITION_GZ: 219c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf(".GZ"); 220c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors break; 221c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 222c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors case INST_CONDITION_LEZ: 223c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf(".LEZ"); 224c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors break; 225c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 226c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors case INST_CONDITION_LZ: 227c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf(".LZ"); 228c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors break; 229c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 230c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors default: 231c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors abort(); 232c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors break; 233c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors } 234c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors} 235c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 236c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authorsstatic void 237c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authorsprint_rgroup(uint8_t rgoup) 238c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors{ 239c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors switch (rgoup) { 240c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors case INST_RGROUP_TEMP: 241c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf("t"); 242c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors break; 243c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 244c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors case INST_RGROUP_INTERNAL: 245c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf("i"); 246c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors break; 247c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 248c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors case INST_RGROUP_UNIFORM_0: 249c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors case INST_RGROUP_UNIFORM_1: 250c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf("u"); 251c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors break; 252c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors } 253c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors} 254c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 255c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authorsstatic void 256c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authorsprint_components(uint8_t components) 257c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors{ 258c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors if (components == 15) 259c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors return; 260c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 261c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf("."); 262c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors if (components & INST_COMPS_X) 263c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf("x"); 264c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors else 265c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf("_"); 266c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 267c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors if (components & INST_COMPS_Y) 268c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf("y"); 269c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors else 270c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf("_"); 271c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 272c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors if (components & INST_COMPS_Z) 273c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf("z"); 274c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors else 275c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf("_"); 276c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 277c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors if (components & INST_COMPS_W) 278c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf("w"); 279c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors else 280c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf("_"); 281c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors} 282c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 283c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authorsstatic inline void 284c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authorsprint_swiz_comp(uint8_t swiz_comp) 285c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors{ 286c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors switch (swiz_comp) { 287c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors case INST_SWIZ_COMP_X: 288c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf("x"); 289c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors break; 290c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 291c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors case INST_SWIZ_COMP_Y: 292c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf("y"); 293c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors break; 294c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 295c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors case INST_SWIZ_COMP_Z: 296c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf("z"); 297c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors break; 298c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 299c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors case INST_SWIZ_COMP_W: 300c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf("w"); 301c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors break; 302c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 303c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors default: 304c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors abort(); 305c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors break; 306c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors } 307c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors} 308c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 309c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authorsstatic void 310c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authorsprint_swiz(uint8_t swiz) 311c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors{ 312c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors // if a null swizzle 313c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors if (swiz == 0xe4) 314c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors return; 315c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 316c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors const unsigned x = swiz & 0x3; 317c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors const unsigned y = (swiz & 0x0C) >> 2; 318c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors const unsigned z = (swiz & 0x30) >> 4; 319c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors const unsigned w = (swiz & 0xc0) >> 6; 320c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 321c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf("."); 322c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors print_swiz_comp(x); 323c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors print_swiz_comp(y); 324c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors print_swiz_comp(z); 325c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors print_swiz_comp(w); 326c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors} 327c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 328c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authorsstatic void 329c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authorsprint_amode(uint8_t amode) 330c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors{ 331c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors switch (amode) { 332c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors case INST_AMODE_DIRECT: 333c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors /* nothing to output */ 334c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors break; 335c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 336c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors case INST_AMODE_ADD_A_X: 337c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf("[a.x]"); 338c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors break; 339c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 340c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors case INST_AMODE_ADD_A_Y: 341c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf("[a.y]"); 342c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors break; 343c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 344c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors case INST_AMODE_ADD_A_Z: 345c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf("[a.z]"); 346c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors break; 347c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 348c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors case INST_AMODE_ADD_A_W: 349c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf("[a.w]"); 350c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors break; 351c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 352c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors default: 353c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors abort(); 354c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors break; 355c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors } 356c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors} 357c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 358c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authorsstatic void 359c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authorsprint_dst(struct dst_operand *dst, bool sep) 360c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors{ 361c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors if (dst->use) { 362c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf("t%u", dst->reg); 363c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors print_amode(dst->amode); 364c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors print_components(dst->comps); 365c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors } else { 366c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf("void"); 367c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors } 368c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 369c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors if (sep) 370c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf(", "); 371c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors} 372c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 373c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authorsstatic void 374c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authorsprint_tex(struct tex_operand *tex, bool sep) 375c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors{ 376c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf("tex%u", tex->id); 377c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors print_amode(tex->amode); 378c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors print_swiz(tex->swiz); 379c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 380c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors if (sep) 381c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf(", "); 382c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors} 383c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 384c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authorsstatic void 385c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authorsprint_src(struct src_operand *src, bool sep) 386c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors{ 387c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors if (src->use) { 388c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors if (src->neg) 389c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf("-"); 390c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 391c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors if (src->abs) 392c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf("|"); 393c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 394c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors if (src->rgroup == INST_RGROUP_UNIFORM_1) 395c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors src->reg += 128; 396c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 397c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors print_rgroup(src->rgroup); 398c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf("%u", src->reg); 399c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors print_amode(src->amode); 400c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors print_swiz(src->swiz); 401c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 402c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors if (src->abs) 403c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf("|"); 404c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors } else { 405c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf("void"); 406c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors } 407c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 408c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors if (sep) 409c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf(", "); 410c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors} 411c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 412c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authorsstatic void 413c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authorsprint_opc_default(struct opc_operands *operands) 414c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors{ 415c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors print_dst(operands->dst, true); 416c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors print_src(operands->src0, true); 417c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors print_src(operands->src1, true); 418c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors print_src(operands->src2, false); 419c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors} 420c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 421c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authorsstatic void 422c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authorsprint_opc_mov(struct opc_operands *operands) 423c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors{ 424c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors // dst (areg) 425c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf("a%u", operands->dst->reg); 426c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors print_components(operands->dst->comps); 427c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf(", "); 428c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 429c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors print_src(operands->src0, true); 430c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors print_src(operands->src1, true); 431c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors print_src(operands->src2, false); 432c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors} 433c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 434c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authorsstatic void 435c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authorsprint_opc_tex(struct opc_operands *operands) 436c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors{ 437c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors print_dst(operands->dst, true); 438c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors print_tex(operands->tex, true); 439c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors print_src(operands->src0, true); 440c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors print_src(operands->src1, true); 441c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors print_src(operands->src2, false); 442c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors} 443c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 444c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authorsstatic void 445c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authorsprint_opc_imm(struct opc_operands *operands) 446c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors{ 447c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors print_dst(operands->dst, true); 448c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors print_src(operands->src0, true); 449c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors print_src(operands->src1, true); 450c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf("label_%04d", operands->imm); 451c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors} 452c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 453c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors#define OPC_BITS 7 454c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 455c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authorsstatic const struct opc_info { 456c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors const char *name; 457c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors void (*print)(struct opc_operands *operands); 458c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors} opcs[1 << OPC_BITS] = { 459c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors#define OPC(opc) [INST_OPCODE_##opc] = {#opc, print_opc_default} 460c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors#define OPC_MOV(opc) [INST_OPCODE_##opc] = {#opc, print_opc_mov} 461c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors#define OPC_TEX(opc) [INST_OPCODE_##opc] = {#opc, print_opc_tex} 462c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors#define OPC_IMM(opc) [INST_OPCODE_##opc] = {#opc, print_opc_imm} 463c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors OPC(NOP), 464c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors OPC(ADD), 465c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors OPC(MAD), 466c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors OPC(MUL), 467c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors OPC(DST), 468c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors OPC(DP3), 469c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors OPC(DP4), 470c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors OPC(DSX), 471c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors OPC(DSY), 472c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors OPC(MOV), 473c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors OPC_MOV(MOVAR), 474c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors OPC_MOV(MOVAF), 475c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors OPC(RCP), 476c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors OPC(RSQ), 477c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors OPC(LITP), 478c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors OPC(SELECT), 479c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors OPC(SET), 480c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors OPC(EXP), 481c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors OPC(LOG), 482c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors OPC(FRC), 483c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors OPC_IMM(CALL), 484c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors OPC(RET), 485c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors OPC_IMM(BRANCH), 486c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors OPC_TEX(TEXKILL), 487c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors OPC_TEX(TEXLD), 488c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors OPC_TEX(TEXLDB), 489c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors OPC_TEX(TEXLDD), 490c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors OPC_TEX(TEXLDL), 491c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors OPC_TEX(TEXLDPCF), 492c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors OPC(REP), 493c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors OPC(ENDREP), 494c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors OPC(LOOP), 495c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors OPC(ENDLOOP), 496c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors OPC(SQRT), 497c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors OPC(SIN), 498c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors OPC(COS), 499c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors OPC(FLOOR), 500c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors OPC(CEIL), 501c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors OPC(SIGN), 502c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors OPC(I2F), 503c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors OPC(CMP), 504c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors OPC(LOAD), 505c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors OPC(STORE), 506c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors OPC(IMULLO0), 507c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors OPC(IMULHI0), 508c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors OPC(LEADZERO), 509c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors OPC(LSHIFT), 510c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors OPC(RSHIFT), 511c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors OPC(ROTATE), 512c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors OPC(OR), 513c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors OPC(AND), 514c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors OPC(XOR), 515c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors OPC(NOT), 516c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors}; 517c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 518c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authorsstatic void 519c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authorsprint_instr(uint32_t *dwords, int n, enum debug_t debug) 520c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors{ 521c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors struct instr *instr = (struct instr *)dwords; 522c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors const unsigned opc = instr->opc | (instr->opcode_bit6 << 6); 523c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors const char *name = opcs[opc].name; 524c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 525c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf("%04d: ", n); 526c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors if (debug & PRINT_RAW) 527c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf("%08x %08x %08x %08x ", dwords[0], dwords[1], dwords[2], 528c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors dwords[3]); 529c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 530c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors if (name) { 531c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 532c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors struct dst_operand dst = { 533c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors .use = instr->dst_use, 534c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors .amode = instr->dst_amode, 535c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors .reg = instr->dst_reg, 536c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors .comps = instr->dst_comps 537c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors }; 538c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 539c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors struct tex_operand tex = { 540c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors .id = instr->tex_id, 541c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors .amode = instr->tex_amode, 542c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors .swiz = instr->tex_swiz, 543c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors }; 544c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 545c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors struct src_operand src0 = { 546c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors .use = instr->src0_use, 547c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors .neg = instr->src0_neg, 548c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors .abs = instr->src0_abs, 549c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors .rgroup = instr->src0_rgroup, 550c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors .reg = instr->src0_reg, 551c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors .swiz = instr->src0_swiz, 552c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors .amode = instr->src0_amode, 553c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors }; 554c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 555c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors struct src_operand src1 = { 556c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors .use = instr->src1_use, 557c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors .neg = instr->src1_neg, 558c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors .abs = instr->src1_abs, 559c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors .rgroup = instr->src1_rgroup, 560c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors .reg = instr->src1_reg, 561c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors .swiz = instr->src1_swiz, 562c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors .amode = instr->src1_amode, 563c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors }; 564c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 565c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors struct src_operand src2 = { 566c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors .use = instr->src2_use, 567c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors .neg = instr->src2_neg, 568c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors .abs = instr->src2_abs, 569c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors .rgroup = instr->src2_rgroup, 570c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors .reg = instr->src2_reg, 571c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors .swiz = instr->src2_swiz, 572c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors .amode = instr->src2_amode, 573c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors }; 574c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 575c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors int imm = (instr->dword3 & VIV_ISA_WORD_3_SRC2_IMM__MASK) 576c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors >> VIV_ISA_WORD_3_SRC2_IMM__SHIFT; 577c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 578c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors struct opc_operands operands = { 579c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors .dst = &dst, 580c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors .tex = &tex, 581c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors .src0 = &src0, 582c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors .src1 = &src1, 583c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors .src2 = &src2, 584c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors .imm = imm, 585c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors }; 586c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 587c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors uint8_t type = instr->type_bit01 | (instr->type_bit2 << 2); 588c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 589c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf("%s", name); 590c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf_type(type); 591c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors if (instr->sat) 592c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf(".SAT"); 593c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors print_condition(instr->cond); 594c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf(" "); 595c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors opcs[opc].print(&operands); 596c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors } else { 597c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf("unknown (%d)", instr->opc); 598c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors } 599c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 600c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors printf("\n"); 601c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors} 602c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 603c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authorsvoid 604c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authorsetna_disasm(uint32_t *dwords, int sizedwords, enum debug_t debug) 605c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors{ 606c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors unsigned i; 607c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 608c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors assert((sizedwords % 2) == 0); 609c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors 610c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors for (i = 0; i < sizedwords; i += 4) 611c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors print_instr(&dwords[i], i / 4, debug); 612c9e8b49b885242d84ba031dacef5aa4a5ac1e5b6The etnaviv authors} 613