1 /*
2 * Copyright © 2025 Intel Corporation
3 * SPDX-License-Identifier: MIT
4 */
5
6 #include "intel_tools.h"
7
8 #include "compiler/brw_disasm.h"
9 #include "compiler/brw_isa_info.h"
10 #ifdef INTEL_USE_ELK
11 #include "compiler/elk/elk_disasm.h"
12 #include "compiler/elk/elk_isa_info.h"
13 #endif
14 #include "dev/intel_device_info.h"
15
16 static void
not_supported(const struct intel_device_info * devinfo)17 not_supported(const struct intel_device_info *devinfo)
18 {
19 fprintf(stderr, "ERROR: Tool compiled without support for Gfx version %d.\n",
20 devinfo->ver);
21 exit(EXIT_FAILURE);
22 }
23
24 void
intel_disassemble(const struct intel_device_info * devinfo,const void * assembly,int start,FILE * out)25 intel_disassemble(const struct intel_device_info *devinfo,
26 const void *assembly, int start, FILE *out)
27 {
28 if (devinfo->ver >= 9) {
29 struct brw_isa_info isa;
30 brw_init_isa_info(&isa, devinfo);
31 brw_disassemble_with_errors(&isa, assembly, start, out);
32 } else {
33 #ifdef INTEL_USE_ELK
34 struct elk_isa_info isa;
35 elk_init_isa_info(&isa, devinfo);
36 elk_disassemble_with_errors(&isa, assembly, start, out);
37 #else
38 not_supported(devinfo);
39 #endif
40 }
41 }
42
43 void
intel_decoder_init(struct intel_batch_decode_ctx * ctx,const struct intel_device_info * devinfo,FILE * fp,enum intel_batch_decode_flags flags,const char * xml_path,struct intel_batch_decode_bo (* get_bo)(void *,bool,uint64_t),unsigned (* get_state_size)(void *,uint64_t,uint64_t),void * user_data)44 intel_decoder_init(struct intel_batch_decode_ctx *ctx,
45 const struct intel_device_info *devinfo,
46 FILE *fp, enum intel_batch_decode_flags flags,
47 const char *xml_path,
48 struct intel_batch_decode_bo (*get_bo)(void *, bool, uint64_t),
49 unsigned (*get_state_size)(void *, uint64_t, uint64_t),
50 void *user_data)
51 {
52 if (devinfo->ver >= 9) {
53 struct brw_isa_info isa;
54 brw_init_isa_info(&isa, devinfo);
55 intel_batch_decode_ctx_init_brw(ctx, &isa, devinfo, fp,
56 flags, xml_path, get_bo, get_state_size, user_data);
57 } else {
58 #ifdef INTEL_USE_ELK
59 struct elk_isa_info isa;
60 elk_init_isa_info(&isa, devinfo);
61 intel_batch_decode_ctx_init_elk(ctx, &isa, devinfo, fp,
62 flags, xml_path, get_bo, get_state_size, user_data);
63 #else
64 not_supported(devinfo);
65 #endif
66 }
67 }
68