1*61046927SAndroid Build Coastguard Worker /* 2*61046927SAndroid Build Coastguard Worker * Copyright © 2012 Rob Clark <[email protected]> 3*61046927SAndroid Build Coastguard Worker * SPDX-License-Identifier: MIT 4*61046927SAndroid Build Coastguard Worker */ 5*61046927SAndroid Build Coastguard Worker 6*61046927SAndroid Build Coastguard Worker #ifndef DISASM_H_ 7*61046927SAndroid Build Coastguard Worker #define DISASM_H_ 8*61046927SAndroid Build Coastguard Worker 9*61046927SAndroid Build Coastguard Worker #include <stdbool.h> 10*61046927SAndroid Build Coastguard Worker #include <stdint.h> 11*61046927SAndroid Build Coastguard Worker #include <stdio.h> 12*61046927SAndroid Build Coastguard Worker 13*61046927SAndroid Build Coastguard Worker #include "compiler/shader_enums.h" 14*61046927SAndroid Build Coastguard Worker 15*61046927SAndroid Build Coastguard Worker /* bitmask of debug flags */ 16*61046927SAndroid Build Coastguard Worker enum debug_t { 17*61046927SAndroid Build Coastguard Worker PRINT_RAW = 0x1, /* dump raw hexdump */ 18*61046927SAndroid Build Coastguard Worker PRINT_VERBOSE = 0x2, 19*61046927SAndroid Build Coastguard Worker PRINT_STATS = 0x4, 20*61046927SAndroid Build Coastguard Worker EXPAND_REPEAT = 0x8, 21*61046927SAndroid Build Coastguard Worker }; 22*61046927SAndroid Build Coastguard Worker 23*61046927SAndroid Build Coastguard Worker struct shader_stats { 24*61046927SAndroid Build Coastguard Worker /* instructions counts rpnN, and instlen does not */ 25*61046927SAndroid Build Coastguard Worker int instructions, instlen; 26*61046927SAndroid Build Coastguard Worker int nops; 27*61046927SAndroid Build Coastguard Worker int ss, sy; 28*61046927SAndroid Build Coastguard Worker int constlen; 29*61046927SAndroid Build Coastguard Worker int halfreg; 30*61046927SAndroid Build Coastguard Worker int fullreg; 31*61046927SAndroid Build Coastguard Worker uint16_t sstall; 32*61046927SAndroid Build Coastguard Worker uint16_t mov_count; 33*61046927SAndroid Build Coastguard Worker uint16_t cov_count; 34*61046927SAndroid Build Coastguard Worker uint16_t last_baryf; 35*61046927SAndroid Build Coastguard Worker uint16_t instrs_per_cat[8]; 36*61046927SAndroid Build Coastguard Worker }; 37*61046927SAndroid Build Coastguard Worker 38*61046927SAndroid Build Coastguard Worker int disasm_a2xx(uint32_t *dwords, int sizedwords, int level, 39*61046927SAndroid Build Coastguard Worker gl_shader_stage type); 40*61046927SAndroid Build Coastguard Worker int disasm_a3xx(uint32_t *dwords, int sizedwords, int level, FILE *out, 41*61046927SAndroid Build Coastguard Worker unsigned gpu_id); 42*61046927SAndroid Build Coastguard Worker int disasm_a3xx_stat(uint32_t *dwords, int sizedwords, int level, FILE *out, 43*61046927SAndroid Build Coastguard Worker unsigned gpu_id, struct shader_stats *stats); 44*61046927SAndroid Build Coastguard Worker int try_disasm_a3xx(uint32_t *dwords, int sizedwords, int level, FILE *out, 45*61046927SAndroid Build Coastguard Worker unsigned gpu_id); 46*61046927SAndroid Build Coastguard Worker 47*61046927SAndroid Build Coastguard Worker void disasm_a2xx_set_debug(enum debug_t debug); 48*61046927SAndroid Build Coastguard Worker void disasm_a3xx_set_debug(enum debug_t debug); 49*61046927SAndroid Build Coastguard Worker 50*61046927SAndroid Build Coastguard Worker #endif /* DISASM_H_ */ 51