mir-sys 0.2.0

FFI bindings to MIR Project (https://github.com/vnmakarov/mir)
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
/* automatically generated by rust-bindgen 0.71.1 */

use libc::FILE;
use super::{MIR_op_t, MIR_insn};

pub const MIR_API_VERSION: f64 = -1.0;
pub const MIR_NO_IO: u32 = 0;
pub const MIR_NO_SCAN: u32 = 0;
pub const MIR_BLK_NUM: u32 = 5;
pub const MIR_PTR32: u32 = 0;
pub const MIR_PTR64: u32 = 1;
pub const MIR_MAX_SCALE: u32 = 255;
pub const MIR_MAX_REG_NUM: u32 = 4294967295;
pub const MIR_NON_VAR: u32 = 4294967295;
pub type htab_hash_t = ::std::os::raw::c_uint;
pub const MIR_no_error: MIR_error_type = 0;
pub const MIR_syntax_error: MIR_error_type = 1;
pub const MIR_binary_io_error: MIR_error_type = 2;
pub const MIR_alloc_error: MIR_error_type = 3;
pub const MIR_finish_error: MIR_error_type = 4;
pub const MIR_no_module_error: MIR_error_type = 5;
pub const MIR_nested_module_error: MIR_error_type = 6;
pub const MIR_no_func_error: MIR_error_type = 7;
pub const MIR_func_error: MIR_error_type = 8;
pub const MIR_vararg_func_error: MIR_error_type = 9;
pub const MIR_nested_func_error: MIR_error_type = 10;
pub const MIR_wrong_param_value_error: MIR_error_type = 11;
pub const MIR_hard_reg_error: MIR_error_type = 12;
pub const MIR_reserved_name_error: MIR_error_type = 13;
pub const MIR_import_export_error: MIR_error_type = 14;
pub const MIR_undeclared_func_reg_error: MIR_error_type = 15;
pub const MIR_repeated_decl_error: MIR_error_type = 16;
pub const MIR_reg_type_error: MIR_error_type = 17;
pub const MIR_wrong_type_error: MIR_error_type = 18;
pub const MIR_unique_reg_error: MIR_error_type = 19;
pub const MIR_undeclared_op_ref_error: MIR_error_type = 20;
pub const MIR_ops_num_error: MIR_error_type = 21;
pub const MIR_call_op_error: MIR_error_type = 22;
pub const MIR_unspec_op_error: MIR_error_type = 23;
pub const MIR_wrong_lref_error: MIR_error_type = 24;
pub const MIR_ret_error: MIR_error_type = 25;
pub const MIR_op_mode_error: MIR_error_type = 26;
pub const MIR_out_op_error: MIR_error_type = 27;
pub const MIR_invalid_insn_error: MIR_error_type = 28;
pub const MIR_ctx_change_error: MIR_error_type = 29;
pub type MIR_error_type = ::std::os::raw::c_uint;
pub use self::MIR_error_type as MIR_error_type_t;
pub type MIR_error_func_t = ::std::option::Option<
    unsafe extern "C-unwind" fn(
        error_type: MIR_error_type_t,
        format: *const ::std::os::raw::c_char,
        ...
    ) -> !,
>;
pub const MIR_MOV: MIR_insn_code_t = 0;
pub const MIR_FMOV: MIR_insn_code_t = 1;
pub const MIR_DMOV: MIR_insn_code_t = 2;
pub const MIR_LDMOV: MIR_insn_code_t = 3;
pub const MIR_EXT8: MIR_insn_code_t = 4;
pub const MIR_EXT16: MIR_insn_code_t = 5;
pub const MIR_EXT32: MIR_insn_code_t = 6;
pub const MIR_UEXT8: MIR_insn_code_t = 7;
pub const MIR_UEXT16: MIR_insn_code_t = 8;
pub const MIR_UEXT32: MIR_insn_code_t = 9;
pub const MIR_I2F: MIR_insn_code_t = 10;
pub const MIR_I2D: MIR_insn_code_t = 11;
pub const MIR_I2LD: MIR_insn_code_t = 12;
pub const MIR_UI2F: MIR_insn_code_t = 13;
pub const MIR_UI2D: MIR_insn_code_t = 14;
pub const MIR_UI2LD: MIR_insn_code_t = 15;
pub const MIR_F2I: MIR_insn_code_t = 16;
pub const MIR_D2I: MIR_insn_code_t = 17;
pub const MIR_LD2I: MIR_insn_code_t = 18;
pub const MIR_F2D: MIR_insn_code_t = 19;
pub const MIR_F2LD: MIR_insn_code_t = 20;
pub const MIR_D2F: MIR_insn_code_t = 21;
pub const MIR_D2LD: MIR_insn_code_t = 22;
pub const MIR_LD2F: MIR_insn_code_t = 23;
pub const MIR_LD2D: MIR_insn_code_t = 24;
pub const MIR_NEG: MIR_insn_code_t = 25;
pub const MIR_NEGS: MIR_insn_code_t = 26;
pub const MIR_FNEG: MIR_insn_code_t = 27;
pub const MIR_DNEG: MIR_insn_code_t = 28;
pub const MIR_LDNEG: MIR_insn_code_t = 29;
pub const MIR_ADDR: MIR_insn_code_t = 30;
pub const MIR_ADDR8: MIR_insn_code_t = 31;
pub const MIR_ADDR16: MIR_insn_code_t = 32;
pub const MIR_ADDR32: MIR_insn_code_t = 33;
pub const MIR_ADD: MIR_insn_code_t = 34;
pub const MIR_ADDS: MIR_insn_code_t = 35;
pub const MIR_FADD: MIR_insn_code_t = 36;
pub const MIR_DADD: MIR_insn_code_t = 37;
pub const MIR_LDADD: MIR_insn_code_t = 38;
pub const MIR_SUB: MIR_insn_code_t = 39;
pub const MIR_SUBS: MIR_insn_code_t = 40;
pub const MIR_FSUB: MIR_insn_code_t = 41;
pub const MIR_DSUB: MIR_insn_code_t = 42;
pub const MIR_LDSUB: MIR_insn_code_t = 43;
pub const MIR_MUL: MIR_insn_code_t = 44;
pub const MIR_MULS: MIR_insn_code_t = 45;
pub const MIR_FMUL: MIR_insn_code_t = 46;
pub const MIR_DMUL: MIR_insn_code_t = 47;
pub const MIR_LDMUL: MIR_insn_code_t = 48;
pub const MIR_DIV: MIR_insn_code_t = 49;
pub const MIR_DIVS: MIR_insn_code_t = 50;
pub const MIR_UDIV: MIR_insn_code_t = 51;
pub const MIR_UDIVS: MIR_insn_code_t = 52;
pub const MIR_FDIV: MIR_insn_code_t = 53;
pub const MIR_DDIV: MIR_insn_code_t = 54;
pub const MIR_LDDIV: MIR_insn_code_t = 55;
pub const MIR_MOD: MIR_insn_code_t = 56;
pub const MIR_MODS: MIR_insn_code_t = 57;
pub const MIR_UMOD: MIR_insn_code_t = 58;
pub const MIR_UMODS: MIR_insn_code_t = 59;
pub const MIR_AND: MIR_insn_code_t = 60;
pub const MIR_ANDS: MIR_insn_code_t = 61;
pub const MIR_OR: MIR_insn_code_t = 62;
pub const MIR_ORS: MIR_insn_code_t = 63;
pub const MIR_XOR: MIR_insn_code_t = 64;
pub const MIR_XORS: MIR_insn_code_t = 65;
pub const MIR_LSH: MIR_insn_code_t = 66;
pub const MIR_LSHS: MIR_insn_code_t = 67;
pub const MIR_RSH: MIR_insn_code_t = 68;
pub const MIR_RSHS: MIR_insn_code_t = 69;
pub const MIR_URSH: MIR_insn_code_t = 70;
pub const MIR_URSHS: MIR_insn_code_t = 71;
pub const MIR_EQ: MIR_insn_code_t = 72;
pub const MIR_EQS: MIR_insn_code_t = 73;
pub const MIR_FEQ: MIR_insn_code_t = 74;
pub const MIR_DEQ: MIR_insn_code_t = 75;
pub const MIR_LDEQ: MIR_insn_code_t = 76;
pub const MIR_NE: MIR_insn_code_t = 77;
pub const MIR_NES: MIR_insn_code_t = 78;
pub const MIR_FNE: MIR_insn_code_t = 79;
pub const MIR_DNE: MIR_insn_code_t = 80;
pub const MIR_LDNE: MIR_insn_code_t = 81;
pub const MIR_LT: MIR_insn_code_t = 82;
pub const MIR_LTS: MIR_insn_code_t = 83;
pub const MIR_ULT: MIR_insn_code_t = 84;
pub const MIR_ULTS: MIR_insn_code_t = 85;
pub const MIR_FLT: MIR_insn_code_t = 86;
pub const MIR_DLT: MIR_insn_code_t = 87;
pub const MIR_LDLT: MIR_insn_code_t = 88;
pub const MIR_LE: MIR_insn_code_t = 89;
pub const MIR_LES: MIR_insn_code_t = 90;
pub const MIR_ULE: MIR_insn_code_t = 91;
pub const MIR_ULES: MIR_insn_code_t = 92;
pub const MIR_FLE: MIR_insn_code_t = 93;
pub const MIR_DLE: MIR_insn_code_t = 94;
pub const MIR_LDLE: MIR_insn_code_t = 95;
pub const MIR_GT: MIR_insn_code_t = 96;
pub const MIR_GTS: MIR_insn_code_t = 97;
pub const MIR_UGT: MIR_insn_code_t = 98;
pub const MIR_UGTS: MIR_insn_code_t = 99;
pub const MIR_FGT: MIR_insn_code_t = 100;
pub const MIR_DGT: MIR_insn_code_t = 101;
pub const MIR_LDGT: MIR_insn_code_t = 102;
pub const MIR_GE: MIR_insn_code_t = 103;
pub const MIR_GES: MIR_insn_code_t = 104;
pub const MIR_UGE: MIR_insn_code_t = 105;
pub const MIR_UGES: MIR_insn_code_t = 106;
pub const MIR_FGE: MIR_insn_code_t = 107;
pub const MIR_DGE: MIR_insn_code_t = 108;
pub const MIR_LDGE: MIR_insn_code_t = 109;
pub const MIR_ADDO: MIR_insn_code_t = 110;
pub const MIR_ADDOS: MIR_insn_code_t = 111;
pub const MIR_SUBO: MIR_insn_code_t = 112;
pub const MIR_SUBOS: MIR_insn_code_t = 113;
pub const MIR_MULO: MIR_insn_code_t = 114;
pub const MIR_MULOS: MIR_insn_code_t = 115;
pub const MIR_UMULO: MIR_insn_code_t = 116;
pub const MIR_UMULOS: MIR_insn_code_t = 117;
pub const MIR_JMP: MIR_insn_code_t = 118;
pub const MIR_BT: MIR_insn_code_t = 119;
pub const MIR_BTS: MIR_insn_code_t = 120;
pub const MIR_BF: MIR_insn_code_t = 121;
pub const MIR_BFS: MIR_insn_code_t = 122;
pub const MIR_BEQ: MIR_insn_code_t = 123;
pub const MIR_BEQS: MIR_insn_code_t = 124;
pub const MIR_FBEQ: MIR_insn_code_t = 125;
pub const MIR_DBEQ: MIR_insn_code_t = 126;
pub const MIR_LDBEQ: MIR_insn_code_t = 127;
pub const MIR_BNE: MIR_insn_code_t = 128;
pub const MIR_BNES: MIR_insn_code_t = 129;
pub const MIR_FBNE: MIR_insn_code_t = 130;
pub const MIR_DBNE: MIR_insn_code_t = 131;
pub const MIR_LDBNE: MIR_insn_code_t = 132;
pub const MIR_BLT: MIR_insn_code_t = 133;
pub const MIR_BLTS: MIR_insn_code_t = 134;
pub const MIR_UBLT: MIR_insn_code_t = 135;
pub const MIR_UBLTS: MIR_insn_code_t = 136;
pub const MIR_FBLT: MIR_insn_code_t = 137;
pub const MIR_DBLT: MIR_insn_code_t = 138;
pub const MIR_LDBLT: MIR_insn_code_t = 139;
pub const MIR_BLE: MIR_insn_code_t = 140;
pub const MIR_BLES: MIR_insn_code_t = 141;
pub const MIR_UBLE: MIR_insn_code_t = 142;
pub const MIR_UBLES: MIR_insn_code_t = 143;
pub const MIR_FBLE: MIR_insn_code_t = 144;
pub const MIR_DBLE: MIR_insn_code_t = 145;
pub const MIR_LDBLE: MIR_insn_code_t = 146;
pub const MIR_BGT: MIR_insn_code_t = 147;
pub const MIR_BGTS: MIR_insn_code_t = 148;
pub const MIR_UBGT: MIR_insn_code_t = 149;
pub const MIR_UBGTS: MIR_insn_code_t = 150;
pub const MIR_FBGT: MIR_insn_code_t = 151;
pub const MIR_DBGT: MIR_insn_code_t = 152;
pub const MIR_LDBGT: MIR_insn_code_t = 153;
pub const MIR_BGE: MIR_insn_code_t = 154;
pub const MIR_BGES: MIR_insn_code_t = 155;
pub const MIR_UBGE: MIR_insn_code_t = 156;
pub const MIR_UBGES: MIR_insn_code_t = 157;
pub const MIR_FBGE: MIR_insn_code_t = 158;
pub const MIR_DBGE: MIR_insn_code_t = 159;
pub const MIR_LDBGE: MIR_insn_code_t = 160;
pub const MIR_BO: MIR_insn_code_t = 161;
pub const MIR_UBO: MIR_insn_code_t = 162;
pub const MIR_BNO: MIR_insn_code_t = 163;
pub const MIR_UBNO: MIR_insn_code_t = 164;
pub const MIR_LADDR: MIR_insn_code_t = 165;
pub const MIR_JMPI: MIR_insn_code_t = 166;
pub const MIR_CALL: MIR_insn_code_t = 167;
pub const MIR_INLINE: MIR_insn_code_t = 168;
pub const MIR_JCALL: MIR_insn_code_t = 169;
pub const MIR_SWITCH: MIR_insn_code_t = 170;
pub const MIR_RET: MIR_insn_code_t = 171;
pub const MIR_JRET: MIR_insn_code_t = 172;
pub const MIR_ALLOCA: MIR_insn_code_t = 173;
pub const MIR_BSTART: MIR_insn_code_t = 174;
pub const MIR_BEND: MIR_insn_code_t = 175;
pub const MIR_VA_ARG: MIR_insn_code_t = 176;
pub const MIR_VA_BLOCK_ARG: MIR_insn_code_t = 177;
pub const MIR_VA_START: MIR_insn_code_t = 178;
pub const MIR_VA_END: MIR_insn_code_t = 179;
pub const MIR_LABEL: MIR_insn_code_t = 180;
pub const MIR_UNSPEC: MIR_insn_code_t = 181;
pub const MIR_PRSET: MIR_insn_code_t = 182;
pub const MIR_PRBEQ: MIR_insn_code_t = 183;
pub const MIR_PRBNE: MIR_insn_code_t = 184;
pub const MIR_USE: MIR_insn_code_t = 185;
pub const MIR_PHI: MIR_insn_code_t = 186;
pub const MIR_INVALID_INSN: MIR_insn_code_t = 187;
pub const MIR_INSN_BOUND: MIR_insn_code_t = 188;
pub type MIR_insn_code_t = ::std::os::raw::c_uint;
pub const MIR_T_I8: MIR_type_t = 0;
pub const MIR_T_U8: MIR_type_t = 1;
pub const MIR_T_I16: MIR_type_t = 2;
pub const MIR_T_U16: MIR_type_t = 3;
pub const MIR_T_I32: MIR_type_t = 4;
pub const MIR_T_U32: MIR_type_t = 5;
pub const MIR_T_I64: MIR_type_t = 6;
pub const MIR_T_U64: MIR_type_t = 7;
pub const MIR_T_F: MIR_type_t = 8;
pub const MIR_T_D: MIR_type_t = 9;
pub const MIR_T_LD: MIR_type_t = 10;
pub const MIR_T_P: MIR_type_t = 11;
pub const MIR_T_BLK: MIR_type_t = 12;
pub const MIR_T_RBLK: MIR_type_t = 17;
pub const MIR_T_UNDEF: MIR_type_t = 18;
pub const MIR_T_BOUND: MIR_type_t = 19;
pub type MIR_type_t = ::std::os::raw::c_uint;
pub type MIR_scale_t = u8;
pub type MIR_disp_t = i64;
pub type MIR_reg_t = u32;
#[repr(C)]
#[derive(Copy, Clone)]
pub union MIR_imm_t {
    pub i: i64,
    pub u: u64,
    pub f: f32,
    pub d: f64,
    pub ld: f64,
}
pub type MIR_alias_t = u32;
pub type MIR_label_t = *mut MIR_insn;
pub type MIR_name_t = *const ::std::os::raw::c_char;
pub const MIR_OP_UNDEF: MIR_op_mode_t = 0;
pub const MIR_OP_REG: MIR_op_mode_t = 1;
pub const MIR_OP_VAR: MIR_op_mode_t = 2;
pub const MIR_OP_INT: MIR_op_mode_t = 3;
pub const MIR_OP_UINT: MIR_op_mode_t = 4;
pub const MIR_OP_FLOAT: MIR_op_mode_t = 5;
pub const MIR_OP_DOUBLE: MIR_op_mode_t = 6;
pub const MIR_OP_LDOUBLE: MIR_op_mode_t = 7;
pub const MIR_OP_REF: MIR_op_mode_t = 8;
pub const MIR_OP_STR: MIR_op_mode_t = 9;
pub const MIR_OP_MEM: MIR_op_mode_t = 10;
pub const MIR_OP_VAR_MEM: MIR_op_mode_t = 11;
pub const MIR_OP_LABEL: MIR_op_mode_t = 12;
pub const MIR_OP_BOUND: MIR_op_mode_t = 13;
pub type MIR_op_mode_t = ::std::os::raw::c_uint;
pub type MIR_item_t = *mut MIR_item;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct MIR_str {
    pub len: usize,
    pub s: *const ::std::os::raw::c_char,
}
pub type MIR_str_t = MIR_str;
pub type MIR_insn_t = *mut MIR_insn;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct DLIST_LINK_MIR_insn_t {
    pub prev: MIR_insn_t,
    pub next: MIR_insn_t,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct DLIST_MIR_insn_t {
    pub head: MIR_insn_t,
    pub tail: MIR_insn_t,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct MIR_var {
    pub type_: MIR_type_t,
    pub name: *const ::std::os::raw::c_char,
    pub size: usize,
}
pub type MIR_var_t = MIR_var;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct VARR_MIR_var_t {
    pub els_num: usize,
    pub size: usize,
    pub varr: *mut MIR_var_t,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct MIR_func {
    pub name: *const ::std::os::raw::c_char,
    pub func_item: MIR_item_t,
    pub original_vars_num: usize,
    pub insns: DLIST_MIR_insn_t,
    pub original_insns: DLIST_MIR_insn_t,
    pub nres: u32,
    pub nargs: u32,
    pub last_temp_num: u32,
    pub n_inlines: u32,
    pub res_types: *mut MIR_type_t,
    pub vararg_p: ::std::os::raw::c_char,
    pub expr_p: ::std::os::raw::c_char,
    pub jret_p: ::std::os::raw::c_char,
    pub vars: *mut VARR_MIR_var_t,
    pub global_vars: *mut VARR_MIR_var_t,
    pub machine_code: *mut ::std::os::raw::c_void,
    pub call_addr: *mut ::std::os::raw::c_void,
    pub internal: *mut ::std::os::raw::c_void,
    pub first_lref: *mut MIR_lref_data,
}
pub type MIR_func_t = *mut MIR_func;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct MIR_proto {
    pub name: *const ::std::os::raw::c_char,
    pub nres: u32,
    pub res_types: *mut MIR_type_t,
    pub vararg_p: ::std::os::raw::c_char,
    pub args: *mut VARR_MIR_var_t,
}
pub type MIR_proto_t = *mut MIR_proto;
#[repr(C)]
#[derive(Copy, Clone)]
pub struct MIR_data {
    pub name: *const ::std::os::raw::c_char,
    pub el_type: MIR_type_t,
    pub nel: usize,
    pub u: MIR_data__bindgen_ty_1,
}
#[repr(C)]
#[derive(Copy, Clone)]
pub union MIR_data__bindgen_ty_1 {
    pub d: f64,
    pub els: [u8; 1usize],
}
pub type MIR_data_t = *mut MIR_data;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct MIR_ref_data {
    pub name: *const ::std::os::raw::c_char,
    pub ref_item: MIR_item_t,
    pub disp: i64,
    pub load_addr: *mut ::std::os::raw::c_void,
}
pub type MIR_ref_data_t = *mut MIR_ref_data;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct MIR_lref_data {
    pub name: *const ::std::os::raw::c_char,
    pub label: MIR_label_t,
    pub label2: MIR_label_t,
    pub orig_label: MIR_label_t,
    pub orig_label2: MIR_label_t,
    pub disp: i64,
    pub load_addr: *mut ::std::os::raw::c_void,
    pub next: *mut MIR_lref_data,
}
pub type MIR_lref_data_t = *mut MIR_lref_data;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct MIR_expr_data {
    pub name: *const ::std::os::raw::c_char,
    pub expr_item: MIR_item_t,
    pub load_addr: *mut ::std::os::raw::c_void,
}
pub type MIR_expr_data_t = *mut MIR_expr_data;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct MIR_bss {
    pub name: *const ::std::os::raw::c_char,
    pub len: u64,
}
pub type MIR_bss_t = *mut MIR_bss;
pub type MIR_module_t = *mut MIR_module;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct DLIST_LINK_MIR_item_t {
    pub prev: MIR_item_t,
    pub next: MIR_item_t,
}
pub const MIR_func_item: MIR_item_type_t = 0;
pub const MIR_proto_item: MIR_item_type_t = 1;
pub const MIR_import_item: MIR_item_type_t = 2;
pub const MIR_export_item: MIR_item_type_t = 3;
pub const MIR_forward_item: MIR_item_type_t = 4;
pub const MIR_data_item: MIR_item_type_t = 5;
pub const MIR_ref_data_item: MIR_item_type_t = 6;
pub const MIR_lref_data_item: MIR_item_type_t = 7;
pub const MIR_expr_data_item: MIR_item_type_t = 8;
pub const MIR_bss_item: MIR_item_type_t = 9;
pub type MIR_item_type_t = ::std::os::raw::c_uint;
#[repr(C)]
#[derive(Copy, Clone)]
pub struct MIR_item {
    pub data: *mut ::std::os::raw::c_void,
    pub module: MIR_module_t,
    pub item_link: DLIST_LINK_MIR_item_t,
    pub item_type: MIR_item_type_t,
    pub ref_def: MIR_item_t,
    pub addr: *mut ::std::os::raw::c_void,
    pub export_p: ::std::os::raw::c_char,
    pub section_head_p: ::std::os::raw::c_char,
    pub u: MIR_item__bindgen_ty_1,
}
#[repr(C)]
#[derive(Copy, Clone)]
pub union MIR_item__bindgen_ty_1 {
    pub func: MIR_func_t,
    pub proto: MIR_proto_t,
    pub import_id: MIR_name_t,
    pub export_id: MIR_name_t,
    pub forward_id: MIR_name_t,
    pub data: MIR_data_t,
    pub ref_data: MIR_ref_data_t,
    pub lref_data: MIR_lref_data_t,
    pub expr_data: MIR_expr_data_t,
    pub bss: MIR_bss_t,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct DLIST_MIR_item_t {
    pub head: MIR_item_t,
    pub tail: MIR_item_t,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct DLIST_LINK_MIR_module_t {
    pub prev: MIR_module_t,
    pub next: MIR_module_t,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct MIR_module {
    pub data: *mut ::std::os::raw::c_void,
    pub name: *const ::std::os::raw::c_char,
    pub items: DLIST_MIR_item_t,
    pub module_link: DLIST_LINK_MIR_module_t,
    pub last_temp_item_num: u32,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct DLIST_MIR_module_t {
    pub head: MIR_module_t,
    pub tail: MIR_module_t,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct MIR_context {
    _unused: [u8; 0],
}
pub type MIR_context_t = *mut MIR_context;
#[repr(C)]
#[derive(Copy, Clone)]
pub union MIR_val_t {
    pub ic: MIR_insn_code_t,
    pub a: *mut ::std::os::raw::c_void,
    pub i: i64,
    pub u: u64,
    pub f: f32,
    pub d: f64,
    pub ld: f64,
}
unsafe extern "C-unwind" {
    pub fn _MIR_get_api_version() -> f64;
    pub fn _MIR_init() -> MIR_context_t;
    pub fn MIR_finish(ctx: MIR_context_t);
    pub fn MIR_new_module(ctx: MIR_context_t, name: *const ::std::os::raw::c_char) -> MIR_module_t;
    pub fn MIR_get_module_list(ctx: MIR_context_t) -> *mut DLIST_MIR_module_t;
    pub fn MIR_new_import(ctx: MIR_context_t, name: *const ::std::os::raw::c_char) -> MIR_item_t;
    pub fn MIR_new_export(ctx: MIR_context_t, name: *const ::std::os::raw::c_char) -> MIR_item_t;
    pub fn MIR_new_forward(ctx: MIR_context_t, name: *const ::std::os::raw::c_char) -> MIR_item_t;
    pub fn MIR_new_bss(
        ctx: MIR_context_t,
        name: *const ::std::os::raw::c_char,
        len: usize,
    ) -> MIR_item_t;
    pub fn MIR_new_data(
        ctx: MIR_context_t,
        name: *const ::std::os::raw::c_char,
        el_type: MIR_type_t,
        nel: usize,
        els: *const ::std::os::raw::c_void,
    ) -> MIR_item_t;
    pub fn MIR_new_string_data(
        ctx: MIR_context_t,
        name: *const ::std::os::raw::c_char,
        str_: MIR_str_t,
    ) -> MIR_item_t;
    pub fn MIR_new_ref_data(
        ctx: MIR_context_t,
        name: *const ::std::os::raw::c_char,
        item: MIR_item_t,
        disp: i64,
    ) -> MIR_item_t;
    pub fn MIR_new_lref_data(
        ctx: MIR_context_t,
        name: *const ::std::os::raw::c_char,
        label: MIR_label_t,
        label2: MIR_label_t,
        disp: i64,
    ) -> MIR_item_t;
    pub fn MIR_new_expr_data(
        ctx: MIR_context_t,
        name: *const ::std::os::raw::c_char,
        expr_item: MIR_item_t,
    ) -> MIR_item_t;
    pub fn MIR_new_proto_arr(
        ctx: MIR_context_t,
        name: *const ::std::os::raw::c_char,
        nres: usize,
        res_types: *mut MIR_type_t,
        nargs: usize,
        vars: *mut MIR_var_t,
    ) -> MIR_item_t;
    pub fn MIR_new_proto(
        ctx: MIR_context_t,
        name: *const ::std::os::raw::c_char,
        nres: usize,
        res_types: *mut MIR_type_t,
        nargs: usize,
        ...
    ) -> MIR_item_t;
    pub fn MIR_new_vararg_proto_arr(
        ctx: MIR_context_t,
        name: *const ::std::os::raw::c_char,
        nres: usize,
        res_types: *mut MIR_type_t,
        nargs: usize,
        vars: *mut MIR_var_t,
    ) -> MIR_item_t;
    pub fn MIR_new_vararg_proto(
        ctx: MIR_context_t,
        name: *const ::std::os::raw::c_char,
        nres: usize,
        res_types: *mut MIR_type_t,
        nargs: usize,
        ...
    ) -> MIR_item_t;
    pub fn MIR_new_func_arr(
        ctx: MIR_context_t,
        name: *const ::std::os::raw::c_char,
        nres: usize,
        res_types: *mut MIR_type_t,
        nargs: usize,
        vars: *mut MIR_var_t,
    ) -> MIR_item_t;
    pub fn MIR_new_func(
        ctx: MIR_context_t,
        name: *const ::std::os::raw::c_char,
        nres: usize,
        res_types: *mut MIR_type_t,
        nargs: usize,
        ...
    ) -> MIR_item_t;
    pub fn MIR_new_vararg_func_arr(
        ctx: MIR_context_t,
        name: *const ::std::os::raw::c_char,
        nres: usize,
        res_types: *mut MIR_type_t,
        nargs: usize,
        vars: *mut MIR_var_t,
    ) -> MIR_item_t;
    pub fn MIR_new_vararg_func(
        ctx: MIR_context_t,
        name: *const ::std::os::raw::c_char,
        nres: usize,
        res_types: *mut MIR_type_t,
        nargs: usize,
        ...
    ) -> MIR_item_t;
    pub fn MIR_item_name(ctx: MIR_context_t, item: MIR_item_t) -> *const ::std::os::raw::c_char;
    pub fn MIR_get_item_func(ctx: MIR_context_t, item: MIR_item_t) -> MIR_func_t;
    pub fn MIR_new_func_reg(
        ctx: MIR_context_t,
        func: MIR_func_t,
        type_: MIR_type_t,
        name: *const ::std::os::raw::c_char,
    ) -> MIR_reg_t;
    pub fn MIR_new_global_func_reg(
        ctx: MIR_context_t,
        func: MIR_func_t,
        type_: MIR_type_t,
        name: *const ::std::os::raw::c_char,
        hard_reg_name: *const ::std::os::raw::c_char,
    ) -> MIR_reg_t;
    pub fn MIR_finish_func(ctx: MIR_context_t);
    pub fn MIR_finish_module(ctx: MIR_context_t);
    pub fn MIR_get_error_func(ctx: MIR_context_t) -> MIR_error_func_t;
    pub fn MIR_set_error_func(ctx: MIR_context_t, func: MIR_error_func_t);
    pub fn MIR_get_func_redef_permission_p(ctx: MIR_context_t) -> ::std::os::raw::c_int;
    pub fn MIR_set_func_redef_permission(ctx: MIR_context_t, flag_p: ::std::os::raw::c_int);
    pub fn MIR_new_insn_arr(
        ctx: MIR_context_t,
        code: MIR_insn_code_t,
        nops: usize,
        ops: *mut MIR_op_t,
    ) -> MIR_insn_t;
    pub fn MIR_new_insn(ctx: MIR_context_t, code: MIR_insn_code_t, ...) -> MIR_insn_t;
    pub fn MIR_new_call_insn(ctx: MIR_context_t, nops: usize, ...) -> MIR_insn_t;
    pub fn MIR_new_jcall_insn(ctx: MIR_context_t, nops: usize, ...) -> MIR_insn_t;
    pub fn MIR_new_ret_insn(ctx: MIR_context_t, nops: usize, ...) -> MIR_insn_t;
    pub fn MIR_copy_insn(ctx: MIR_context_t, insn: MIR_insn_t) -> MIR_insn_t;
    pub fn MIR_insn_name(
        ctx: MIR_context_t,
        code: MIR_insn_code_t,
    ) -> *const ::std::os::raw::c_char;
    pub fn MIR_insn_nops(ctx: MIR_context_t, insn: MIR_insn_t) -> usize;
    pub fn MIR_insn_op_mode(
        ctx: MIR_context_t,
        insn: MIR_insn_t,
        nop: usize,
        out_p: *mut ::std::os::raw::c_int,
    ) -> MIR_op_mode_t;
    pub fn MIR_new_label(ctx: MIR_context_t) -> MIR_insn_t;
    pub fn MIR_reg(
        ctx: MIR_context_t,
        reg_name: *const ::std::os::raw::c_char,
        func: MIR_func_t,
    ) -> MIR_reg_t;
    pub fn MIR_reg_type(ctx: MIR_context_t, reg: MIR_reg_t, func: MIR_func_t) -> MIR_type_t;
    pub fn MIR_reg_name(
        ctx: MIR_context_t,
        reg: MIR_reg_t,
        func: MIR_func_t,
    ) -> *const ::std::os::raw::c_char;
    pub fn MIR_reg_hard_reg_name(
        ctx: MIR_context_t,
        reg: MIR_reg_t,
        func: MIR_func_t,
    ) -> *const ::std::os::raw::c_char;
    pub fn MIR_alias_name(ctx: MIR_context_t, alias: MIR_alias_t) -> *const ::std::os::raw::c_char;
    pub fn MIR_alias(ctx: MIR_context_t, name: *const ::std::os::raw::c_char) -> MIR_alias_t;
    pub fn MIR_new_reg_op(ctx: MIR_context_t, reg: MIR_reg_t) -> MIR_op_t;
    pub fn MIR_new_int_op(ctx: MIR_context_t, v: i64) -> MIR_op_t;
    pub fn MIR_new_uint_op(ctx: MIR_context_t, v: u64) -> MIR_op_t;
    pub fn MIR_new_float_op(ctx: MIR_context_t, v: f32) -> MIR_op_t;
    pub fn MIR_new_double_op(ctx: MIR_context_t, v: f64) -> MIR_op_t;
    pub fn MIR_new_ldouble_op(ctx: MIR_context_t, v: f64) -> MIR_op_t;
    pub fn MIR_new_ref_op(ctx: MIR_context_t, item: MIR_item_t) -> MIR_op_t;
    pub fn MIR_new_str_op(ctx: MIR_context_t, str_: MIR_str_t) -> MIR_op_t;
    pub fn MIR_new_mem_op(
        ctx: MIR_context_t,
        type_: MIR_type_t,
        disp: MIR_disp_t,
        base: MIR_reg_t,
        index: MIR_reg_t,
        scale: MIR_scale_t,
    ) -> MIR_op_t;
    pub fn MIR_new_alias_mem_op(
        ctx: MIR_context_t,
        type_: MIR_type_t,
        disp: MIR_disp_t,
        base: MIR_reg_t,
        index: MIR_reg_t,
        scale: MIR_scale_t,
        alias: MIR_alias_t,
        noalias: MIR_alias_t,
    ) -> MIR_op_t;
    pub fn MIR_new_label_op(ctx: MIR_context_t, label: MIR_label_t) -> MIR_op_t;
    pub fn MIR_op_eq_p(ctx: MIR_context_t, op1: MIR_op_t, op2: MIR_op_t) -> ::std::os::raw::c_int;
    pub fn MIR_op_hash_step(ctx: MIR_context_t, h: htab_hash_t, op: MIR_op_t) -> htab_hash_t;
    pub fn MIR_append_insn(ctx: MIR_context_t, func: MIR_item_t, insn: MIR_insn_t);
    pub fn MIR_prepend_insn(ctx: MIR_context_t, func: MIR_item_t, insn: MIR_insn_t);
    pub fn MIR_insert_insn_after(
        ctx: MIR_context_t,
        func: MIR_item_t,
        after: MIR_insn_t,
        insn: MIR_insn_t,
    );
    pub fn MIR_insert_insn_before(
        ctx: MIR_context_t,
        func: MIR_item_t,
        before: MIR_insn_t,
        insn: MIR_insn_t,
    );
    pub fn MIR_remove_insn(ctx: MIR_context_t, func: MIR_item_t, insn: MIR_insn_t);
    pub fn MIR_change_module_ctx(old_ctx: MIR_context_t, m: MIR_module_t, new_ctx: MIR_context_t);
    pub fn MIR_reverse_branch_code(code: MIR_insn_code_t) -> MIR_insn_code_t;
    pub fn MIR_type_str(ctx: MIR_context_t, tp: MIR_type_t) -> *const ::std::os::raw::c_char;
    pub fn MIR_output_str(ctx: MIR_context_t, f: *mut FILE, str_: MIR_str_t);
    pub fn MIR_output_op(ctx: MIR_context_t, f: *mut FILE, op: MIR_op_t, func: MIR_func_t);
    pub fn MIR_output_insn(
        ctx: MIR_context_t,
        f: *mut FILE,
        insn: MIR_insn_t,
        func: MIR_func_t,
        newline_p: ::std::os::raw::c_int,
    );
    pub fn MIR_output_item(ctx: MIR_context_t, f: *mut FILE, item: MIR_item_t);
    pub fn MIR_output_module(ctx: MIR_context_t, f: *mut FILE, module: MIR_module_t);
    pub fn MIR_output(ctx: MIR_context_t, f: *mut FILE);
    pub fn MIR_write(ctx: MIR_context_t, f: *mut FILE);
    pub fn MIR_write_module(ctx: MIR_context_t, f: *mut FILE, module: MIR_module_t);
    pub fn MIR_read(ctx: MIR_context_t, f: *mut FILE);
    pub fn MIR_write_with_func(
        ctx: MIR_context_t,
        writer_func: ::std::option::Option<
            unsafe extern "C-unwind" fn(
                arg1: *mut ::std::os::raw::c_void,
                arg2: u8,
            ) -> ::std::os::raw::c_int,
        >,
        writer_arg: *mut ::std::os::raw::c_void,
    );
    pub fn MIR_write_module_with_func(
        ctx: MIR_context_t,
        writer_func: ::std::option::Option<
            unsafe extern "C-unwind" fn(
                arg1: *mut ::std::os::raw::c_void,
                arg2: u8,
            ) -> ::std::os::raw::c_int,
        >,
        module: MIR_module_t,
        writer_arg: *mut ::std::os::raw::c_void,
    );
    pub fn MIR_read_with_func(
        ctx: MIR_context_t,
        reader_func: ::std::option::Option<
            unsafe extern "C-unwind" fn(arg1: *mut ::std::os::raw::c_void) -> ::std::os::raw::c_int,
        >,
        reader_arg: *mut ::std::os::raw::c_void,
    );
    pub fn MIR_scan_string(ctx: MIR_context_t, str_: *const ::std::os::raw::c_char);
    pub fn MIR_get_global_item(
        ctx: MIR_context_t,
        name: *const ::std::os::raw::c_char,
    ) -> MIR_item_t;
    pub fn MIR_load_module(ctx: MIR_context_t, m: MIR_module_t);
    pub fn MIR_load_external(
        ctx: MIR_context_t,
        name: *const ::std::os::raw::c_char,
        addr: *mut ::std::os::raw::c_void,
    );
    pub fn MIR_link(
        ctx: MIR_context_t,
        set_interface: ::std::option::Option<
            unsafe extern "C-unwind" fn(ctx: MIR_context_t, item: MIR_item_t),
        >,
        import_resolver: ::std::option::Option<
            unsafe extern "C-unwind" fn(
                arg1: *mut ::std::os::raw::c_void,
                arg2: *const ::std::os::raw::c_char,
            ) -> *mut ::std::os::raw::c_void,
        >,
        resolver_arg: *mut ::std::os::raw::c_void,
    );
    pub fn MIR_interp(
        ctx: MIR_context_t,
        func_item: MIR_item_t,
        results: *mut MIR_val_t,
        nargs: usize,
        ...
    );
    pub fn MIR_interp_arr(
        ctx: MIR_context_t,
        func_item: MIR_item_t,
        results: *mut MIR_val_t,
        nargs: usize,
        vals: *mut MIR_val_t,
    );
    pub fn MIR_set_interp_interface(ctx: MIR_context_t, func_item: MIR_item_t);
}