1use libc::{c_char, c_double, c_int};
2use libc::c_char as c_bool;
3
4#[derive(Clone, Copy, Debug)]
5#[repr(C)]
6pub struct ParseXML;
7
8extern "C" {
9 pub fn new_ParseXML() -> *mut ParseXML;
10 pub fn delete_ParseXML(this: *mut ParseXML);
11 pub fn ParseXML_parse(this: *mut ParseXML, filename: *mut c_char);
12 pub fn ParseXML_sys(this: *mut ParseXML) -> *mut root_system;
13}
14
15#[derive(Clone, Copy, Debug)]
16#[repr(C)]
17pub struct predictor_systemcore {
18 pub prediction_width: c_int,
19 pub prediction_scheme: [c_char; 20],
20 pub predictor_size: c_int,
21 pub predictor_entries: c_int,
22 pub local_predictor_size: [c_int; 20],
23 pub local_predictor_entries: c_int,
24 pub global_predictor_entries: c_int,
25 pub global_predictor_bits: c_int,
26 pub chooser_predictor_entries: c_int,
27 pub chooser_predictor_bits: c_int,
28 pub predictor_accesses: c_double,
29}
30
31#[derive(Clone, Copy, Debug)]
32#[repr(C)]
33pub struct itlb_systemcore {
34 pub number_entries: c_int,
35 pub cache_policy: c_int,
36 pub total_hits: c_double,
37 pub total_accesses: c_double,
38 pub total_misses: c_double,
39 pub conflicts: c_double,
40}
41
42#[derive(Clone, Copy, Debug)]
43#[repr(C)]
44pub struct icache_systemcore {
45 pub icache_config: [c_double; 20],
46 pub buffer_sizes: [c_int; 20],
47 pub cache_policy: c_int,
48 pub total_accesses: c_double,
49 pub read_accesses: c_double,
50 pub read_misses: c_double,
51 pub replacements: c_double,
52 pub read_hits: c_double,
53 pub total_hits: c_double,
54 pub total_misses: c_double,
55 pub miss_buffer_access: c_double,
56 pub fill_buffer_accesses: c_double,
57 pub prefetch_buffer_accesses: c_double,
58 pub prefetch_buffer_writes: c_double,
59 pub prefetch_buffer_reads: c_double,
60 pub prefetch_buffer_hits: c_double,
61 pub conflicts: c_double,
62}
63
64#[derive(Clone, Copy, Debug)]
65#[repr(C)]
66pub struct dtlb_systemcore {
67 pub number_entries: c_int,
68 pub cache_policy: c_int,
69 pub total_accesses: c_double,
70 pub read_accesses: c_double,
71 pub write_accesses: c_double,
72 pub write_hits: c_double,
73 pub read_hits: c_double,
74 pub read_misses: c_double,
75 pub write_misses: c_double,
76 pub total_hits: c_double,
77 pub total_misses: c_double,
78 pub conflicts: c_double,
79}
80
81#[derive(Clone, Copy, Debug)]
82#[repr(C)]
83pub struct dcache_systemcore {
84 pub dcache_config: [c_double; 20],
85 pub buffer_sizes: [c_int; 20],
86 pub cache_policy: c_int,
87 pub total_accesses: c_double,
88 pub read_accesses: c_double,
89 pub write_accesses: c_double,
90 pub total_hits: c_double,
91 pub total_misses: c_double,
92 pub read_hits: c_double,
93 pub write_hits: c_double,
94 pub read_misses: c_double,
95 pub write_misses: c_double,
96 pub replacements: c_double,
97 pub write_backs: c_double,
98 pub miss_buffer_access: c_double,
99 pub fill_buffer_accesses: c_double,
100 pub prefetch_buffer_accesses: c_double,
101 pub prefetch_buffer_writes: c_double,
102 pub prefetch_buffer_reads: c_double,
103 pub prefetch_buffer_hits: c_double,
104 pub wbb_writes: c_double,
105 pub wbb_reads: c_double,
106 pub conflicts: c_double,
107}
108
109#[derive(Clone, Copy, Debug)]
110#[repr(C)]
111pub struct BTB_systemcore {
112 pub BTB_config: [c_int; 20],
113 pub total_accesses: c_double,
114 pub read_accesses: c_double,
115 pub write_accesses: c_double,
116 pub total_hits: c_double,
117 pub total_misses: c_double,
118 pub read_hits: c_double,
119 pub write_hits: c_double,
120 pub read_misses: c_double,
121 pub write_misses: c_double,
122 pub replacements: c_double,
123}
124
125#[derive(Clone, Copy, Debug)]
126#[repr(C)]
127pub struct system_core {
128 pub clock_rate: c_int,
129 pub opt_local: c_bool,
130 pub x86: c_bool,
131 pub machine_bits: c_int,
132 pub virtual_address_width: c_int,
133 pub physical_address_width: c_int,
134 pub opcode_width: c_int,
135 pub micro_opcode_width: c_int,
136 pub instruction_length: c_int,
137 pub machine_type: c_int,
138 pub internal_datapath_width: c_int,
139 pub number_hardware_threads: c_int,
140 pub fetch_width: c_int,
141 pub number_instruction_fetch_ports: c_int,
142 pub decode_width: c_int,
143 pub issue_width: c_int,
144 pub peak_issue_width: c_int,
145 pub commit_width: c_int,
146 pub pipelines_per_core: [c_int; 20],
147 pub pipeline_depth: [c_int; 20],
148 pub FPU: [c_char; 20],
149 pub divider_multiplier: [c_char; 20],
150 pub ALU_per_core: c_int,
151 pub FPU_per_core: c_double,
152 pub MUL_per_core: c_int,
153 pub instruction_buffer_size: c_int,
154 pub decoded_stream_buffer_size: c_int,
155 pub instruction_window_scheme: c_int,
156 pub instruction_window_size: c_int,
157 pub fp_instruction_window_size: c_int,
158 pub ROB_size: c_int,
159 pub archi_Regs_IRF_size: c_int,
160 pub archi_Regs_FRF_size: c_int,
161 pub phy_Regs_IRF_size: c_int,
162 pub phy_Regs_FRF_size: c_int,
163 pub rename_scheme: c_int,
164 pub checkpoint_depth: c_int,
165 pub register_windows_size: c_int,
166 pub LSU_order: [c_char; 20],
167 pub store_buffer_size: c_int,
168 pub load_buffer_size: c_int,
169 pub memory_ports: c_int,
170 pub Dcache_dual_pump: [c_char; 20],
171 pub RAS_size: c_int,
172 pub fp_issue_width: c_int,
173 pub prediction_width: c_int,
174 pub number_of_BTB: c_int,
175 pub number_of_BPT: c_int,
176 pub total_instructions: c_double,
177 pub int_instructions: c_double,
178 pub fp_instructions: c_double,
179 pub branch_instructions: c_double,
180 pub branch_mispredictions: c_double,
181 pub committed_instructions: c_double,
182 pub committed_int_instructions: c_double,
183 pub committed_fp_instructions: c_double,
184 pub load_instructions: c_double,
185 pub store_instructions: c_double,
186 pub total_cycles: c_double,
187 pub idle_cycles: c_double,
188 pub busy_cycles: c_double,
189 pub instruction_buffer_reads: c_double,
190 pub instruction_buffer_write: c_double,
191 pub ROB_reads: c_double,
192 pub ROB_writes: c_double,
193 pub rename_accesses: c_double,
194 pub fp_rename_accesses: c_double,
195 pub rename_reads: c_double,
196 pub rename_writes: c_double,
197 pub fp_rename_reads: c_double,
198 pub fp_rename_writes: c_double,
199 pub inst_window_reads: c_double,
200 pub inst_window_writes: c_double,
201 pub inst_window_wakeup_accesses: c_double,
202 pub inst_window_selections: c_double,
203 pub fp_inst_window_reads: c_double,
204 pub fp_inst_window_writes: c_double,
205 pub fp_inst_window_wakeup_accesses: c_double,
206 pub fp_inst_window_selections: c_double,
207 pub archi_int_regfile_reads: c_double,
208 pub archi_float_regfile_reads: c_double,
209 pub phy_int_regfile_reads: c_double,
210 pub phy_float_regfile_reads: c_double,
211 pub phy_int_regfile_writes: c_double,
212 pub phy_float_regfile_writes: c_double,
213 pub archi_int_regfile_writes: c_double,
214 pub archi_float_regfile_writes: c_double,
215 pub int_regfile_reads: c_double,
216 pub float_regfile_reads: c_double,
217 pub int_regfile_writes: c_double,
218 pub float_regfile_writes: c_double,
219 pub windowed_reg_accesses: c_double,
220 pub windowed_reg_transports: c_double,
221 pub function_calls: c_double,
222 pub context_switches: c_double,
223 pub ialu_accesses: c_double,
224 pub fpu_accesses: c_double,
225 pub mul_accesses: c_double,
226 pub cdb_alu_accesses: c_double,
227 pub cdb_mul_accesses: c_double,
228 pub cdb_fpu_accesses: c_double,
229 pub load_buffer_reads: c_double,
230 pub load_buffer_writes: c_double,
231 pub load_buffer_cams: c_double,
232 pub store_buffer_reads: c_double,
233 pub store_buffer_writes: c_double,
234 pub store_buffer_cams: c_double,
235 pub store_buffer_forwards: c_double,
236 pub main_memory_access: c_double,
237 pub main_memory_read: c_double,
238 pub main_memory_write: c_double,
239 pub pipeline_duty_cycle: c_double,
240 pub IFU_duty_cycle : c_double,
241 pub BR_duty_cycle : c_double,
242 pub LSU_duty_cycle : c_double,
243 pub MemManU_I_duty_cycle: c_double,
244 pub MemManU_D_duty_cycle : c_double,
245 pub ALU_duty_cycle : c_double,
246 pub MUL_duty_cycle : c_double,
247 pub FPU_duty_cycle : c_double,
248 pub ALU_cdb_duty_cycle : c_double,
249 pub MUL_cdb_duty_cycle : c_double,
250 pub FPU_cdb_duty_cycle : c_double,
251 pub vdd: c_double,
252 pub power_gating_vcc: c_double,
253 pub predictor: predictor_systemcore,
254 pub itlb: itlb_systemcore,
255 pub icache: icache_systemcore,
256 pub dtlb: dtlb_systemcore,
257 pub dcache: dcache_systemcore,
258 pub BTB: BTB_systemcore,
259}
260
261#[derive(Clone, Copy, Debug)]
262#[repr(C)]
263pub struct system_L1Directory {
264 pub Directory_type: c_int,
265 pub Dir_config: [c_double; 20],
266 pub buffer_sizes: [c_int; 20],
267 pub clockrate: c_int,
268 pub ports: [c_int; 20],
269 pub device_type: c_int,
270 pub cache_policy: c_int,
271 pub threeD_stack: [c_char; 20],
272 pub vdd: c_double,
273 pub power_gating_vcc: c_double,
274 pub total_accesses: c_double,
275 pub read_accesses: c_double,
276 pub write_accesses: c_double,
277 pub read_misses: c_double,
278 pub write_misses: c_double,
279 pub conflicts: c_double,
280 pub duty_cycle: c_double,
281}
282
283#[derive(Clone, Copy, Debug)]
284#[repr(C)]
285pub struct system_L2Directory {
286 pub Directory_type: c_int,
287 pub Dir_config: [c_double; 20],
288 pub buffer_sizes: [c_int; 20],
289 pub clockrate: c_int,
290 pub ports: [c_int; 20],
291 pub device_type: c_int,
292 pub cache_policy: c_int,
293 pub threeD_stack: [c_char; 20],
294 pub vdd: c_double,
295 pub power_gating_vcc: c_double,
296 pub total_accesses: c_double,
297 pub read_accesses: c_double,
298 pub write_accesses: c_double,
299 pub read_misses: c_double,
300 pub write_misses: c_double,
301 pub conflicts: c_double,
302 pub duty_cycle: c_double,
303}
304
305#[derive(Clone, Copy, Debug)]
306#[repr(C)]
307pub struct system_L2 {
308 pub L2_config: [c_double; 20],
309 pub clockrate: c_int,
310 pub ports: [c_int; 20],
311 pub device_type: c_int,
312 pub cache_policy: c_int,
313 pub threeD_stack: [c_char; 20],
314 pub buffer_sizes: [c_int; 20],
315 pub vdd: c_double,
316 pub power_gating_vcc: c_double,
317 pub total_accesses: c_double,
318 pub read_accesses: c_double,
319 pub write_accesses: c_double,
320 pub total_hits: c_double,
321 pub total_misses: c_double,
322 pub read_hits: c_double,
323 pub write_hits: c_double,
324 pub read_misses: c_double,
325 pub write_misses: c_double,
326 pub replacements: c_double,
327 pub write_backs: c_double,
328 pub miss_buffer_accesses: c_double,
329 pub fill_buffer_accesses: c_double,
330 pub prefetch_buffer_accesses: c_double,
331 pub prefetch_buffer_writes: c_double,
332 pub prefetch_buffer_reads: c_double,
333 pub prefetch_buffer_hits: c_double,
334 pub wbb_writes: c_double,
335 pub wbb_reads: c_double,
336 pub conflicts: c_double,
337 pub duty_cycle: c_double,
338 pub merged_dir: c_bool,
339 pub homenode_read_accesses: c_double,
340 pub homenode_write_accesses: c_double,
341 pub homenode_read_hits: c_double,
342 pub homenode_write_hits: c_double,
343 pub homenode_read_misses: c_double,
344 pub homenode_write_misses: c_double,
345 pub dir_duty_cycle: c_double,
346}
347
348#[derive(Clone, Copy, Debug)]
349#[repr(C)]
350pub struct system_L3 {
351 pub L3_config: [c_double; 20],
352 pub clockrate: c_int,
353 pub ports: [c_int; 20],
354 pub device_type: c_int,
355 pub cache_policy: c_int,
356 pub threeD_stack: [c_char; 20],
357 pub buffer_sizes: [c_int; 20],
358 pub vdd: c_double,
359 pub power_gating_vcc: c_double,
360 pub total_accesses: c_double,
361 pub read_accesses: c_double,
362 pub write_accesses: c_double,
363 pub total_hits: c_double,
364 pub total_misses: c_double,
365 pub read_hits: c_double,
366 pub write_hits: c_double,
367 pub read_misses: c_double,
368 pub write_misses: c_double,
369 pub replacements: c_double,
370 pub write_backs: c_double,
371 pub miss_buffer_accesses: c_double,
372 pub fill_buffer_accesses: c_double,
373 pub prefetch_buffer_accesses: c_double,
374 pub prefetch_buffer_writes: c_double,
375 pub prefetch_buffer_reads: c_double,
376 pub prefetch_buffer_hits: c_double,
377 pub wbb_writes: c_double,
378 pub wbb_reads: c_double,
379 pub conflicts: c_double,
380 pub duty_cycle: c_double,
381 pub merged_dir: c_bool,
382 pub homenode_read_accesses: c_double,
383 pub homenode_write_accesses: c_double,
384 pub homenode_read_hits: c_double,
385 pub homenode_write_hits: c_double,
386 pub homenode_read_misses: c_double,
387 pub homenode_write_misses: c_double,
388 pub dir_duty_cycle: c_double,
389}
390
391#[derive(Clone, Copy, Debug)]
392#[repr(C)]
393pub struct xbar0_systemNoC {
394 pub number_of_inputs_of_crossbars: c_int,
395 pub number_of_outputs_of_crossbars: c_int,
396 pub flit_bits: c_int,
397 pub input_buffer_entries_per_port: c_int,
398 pub ports_of_input_buffer: [c_int; 20],
399 pub crossbar_accesses: c_double,
400}
401
402#[derive(Clone, Copy, Debug)]
403#[repr(C)]
404pub struct system_NoC {
405 pub clockrate: c_int,
406 pub kind: c_bool, pub has_global_link: c_bool,
408 pub topology: [c_char; 20],
409 pub horizontal_nodes: c_int,
410 pub vertical_nodes: c_int,
411 pub link_throughput: c_int,
412 pub link_latency: c_int,
413 pub input_ports: c_int,
414 pub output_ports: c_int,
415 pub virtual_channel_per_port: c_int,
416 pub flit_bits: c_int,
417 pub input_buffer_entries_per_vc: c_int,
418 pub ports_of_input_buffer: [c_int; 20],
419 pub dual_pump: c_int,
420 pub number_of_crossbars: c_int,
421 pub crossbar_type: [c_char; 20],
422 pub crosspoint_type: [c_char; 20],
423 pub xbar0: xbar0_systemNoC,
424 pub arbiter_type: c_int,
425 pub chip_coverage: c_double,
426 pub vdd: c_double,
427 pub power_gating_vcc: c_double,
428 pub total_accesses: c_double,
429 pub duty_cycle: c_double,
430 pub route_over_perc: c_double,
431}
432
433#[derive(Clone, Copy, Debug)]
434#[repr(C)]
435pub struct system_mem {
436 pub mem_tech_node: c_int,
437 pub device_clock: c_int,
438 pub peak_transfer_rate: c_int,
439 pub internal_prefetch_of_DRAM_chip: c_int,
440 pub capacity_per_channel: c_int,
441 pub number_ranks: c_int,
442 pub num_banks_of_DRAM_chip: c_int,
443 pub Block_width_of_DRAM_chip: c_int,
444 pub output_width_of_DRAM_chip: c_int,
445 pub page_size_of_DRAM_chip: c_int,
446 pub burstlength_of_DRAM_chip: c_int,
447 pub memory_accesses: c_double,
448 pub memory_reads: c_double,
449 pub memory_writes: c_double,
450}
451
452#[derive(Clone, Copy, Debug)]
453#[repr(C)]
454pub struct system_mc {
455 pub peak_transfer_rate: c_double,
456 pub number_mcs: c_int,
457 pub withPHY: c_bool,
458 pub kind: c_int, pub duty_cycle: c_double,
460 pub total_load_perc: c_double,
461 pub mc_clock: c_int,
462 pub llc_line_length: c_int,
463 pub memory_channels_per_mc: c_int,
464 pub number_ranks: c_int,
465 pub req_window_size_per_channel: c_int,
466 pub IO_buffer_size_per_channel: c_int,
467 pub databus_width: c_int,
468 pub addressbus_width: c_int,
469 pub LVDS: c_bool,
470 pub vdd: c_double,
471 pub power_gating_vcc: c_double,
472 pub memory_accesses: c_double,
473 pub memory_reads: c_double,
474 pub memory_writes: c_double,
475}
476
477#[derive(Clone, Copy, Debug)]
478#[repr(C)]
479pub struct system_niu {
480 pub clockrate: c_int,
481 pub number_units: c_int,
482 pub kind: c_int, pub vdd: c_double,
484 pub power_gating_vcc: c_double,
485 pub duty_cycle: c_double,
486 pub total_load_perc: c_double,
487}
488
489#[derive(Clone, Copy, Debug)]
490#[repr(C)]
491pub struct system_pcie {
492 pub clockrate: c_int,
493 pub number_units: c_int,
494 pub num_channels: c_int,
495 pub kind: c_int, pub withPHY: c_bool,
497 pub vdd: c_double,
498 pub power_gating_vcc: c_double,
499 pub duty_cycle: c_double,
500 pub total_load_perc: c_double,
501}
502
503#[repr(C)]
504pub struct root_system {
505 pub number_of_cores: c_int,
506 pub number_of_L1Directories: c_int,
507 pub number_of_L2Directories: c_int,
508 pub number_of_L2s: c_int,
509 pub Private_L2: c_bool,
510 pub number_of_L3s: c_int,
511 pub number_of_NoCs: c_int,
512 pub number_of_dir_levels: c_int,
513 pub domain_size: c_int,
514 pub first_level_dir: c_int,
515 pub homogeneous_cores: c_int,
516 pub homogeneous_L1Directories: c_int,
517 pub homogeneous_L2Directories: c_int,
518 pub core_tech_node: c_double,
519 pub target_core_clockrate: c_int,
520 pub target_chip_area: c_int,
521 pub temperature: c_int,
522 pub number_cache_levels: c_int,
523 pub L1_property: c_int,
524 pub L2_property: c_int,
525 pub homogeneous_L2s: c_int,
526 pub L3_property: c_int,
527 pub homogeneous_L3s: c_int,
528 pub homogeneous_NoCs: c_int,
529 pub homogeneous_ccs: c_int,
530 pub Max_area_deviation: c_int,
531 pub Max_power_deviation: c_int,
532 pub device_type: c_int,
533 pub longer_channel_device: c_bool,
534 pub power_gating: c_bool,
535 pub Embedded: c_bool,
536 pub opt_dynamic_power: c_bool,
537 pub opt_lakage_power: c_bool,
538 pub opt_clockrate: c_bool,
539 pub opt_area: c_bool,
540 pub interconnect_projection_type: c_int,
541 pub machine_bits: c_int,
542 pub virtual_address_width: c_int,
543 pub physical_address_width: c_int,
544 pub virtual_memory_page_size: c_int,
545 pub total_cycles: c_double,
546 pub vdd: c_double,
547 pub power_gating_vcc: c_double,
548 pub core: [system_core; 64],
549 pub L1Directory: [system_L1Directory; 64],
550 pub L2Directory: [system_L2Directory; 64],
551 pub L2: [system_L2; 64],
552 pub L3: [system_L3; 64],
553 pub NoC: [system_NoC; 64],
554 pub mem: system_mem,
555 pub mc: system_mc,
556 pub flashc: system_mc,
557 pub niu: system_niu,
558 pub pcie: system_pcie,
559}