branching/
branching.rs

1
2use gnu_libjit::{Abi, Context, Label};
3fn main() {
4    let mut context = Context::new();
5    context.build_start();
6
7
8    let float_type = Context::float64_type();
9    let mut func = context.function(Abi::Cdecl, float_type, vec![float_type]).unwrap();
10
11    // Return 1 if arg0 == 4
12    // else return 0
13    let is_four_result = func.create_float64_constant(1.0);
14    let not_four_result = func.create_float64_constant(0.0);
15
16    let x = func.arg(0).unwrap();
17    let four = func.create_float64_constant(4.0);
18    let mut label = Label::new();
19    let eq_to_4 = func.insn_eq(&x, &four);
20    func.insn_branch_if(&eq_to_4, &mut label);
21    func.insn_return(&not_four_result);
22    func.insn_label(&mut label);
23    func.insn_return(&is_four_result);
24    func.compile();
25    context.build_end();
26    let result: extern "C" fn(f64) -> f64 = func.to_closure();
27    println!("{}", result(4.0));
28}