feat: a lot
This commit is contained in:
@@ -88,10 +88,10 @@ impl<Ctx: JITContext> JITCompile<Ctx> for BinOp {
|
||||
let float_block = ctx.builder.create_block();
|
||||
let float_check_block = ctx.builder.create_block();
|
||||
|
||||
let is_int =
|
||||
ctx.builder
|
||||
.ins()
|
||||
.icmp_imm(IntCC::Equal, lhs_tag, Value::<Ctx>::INT as i64);
|
||||
let is_int = ctx
|
||||
.builder
|
||||
.ins()
|
||||
.icmp_imm(IntCC::Equal, lhs_tag, Value::INT as i64);
|
||||
ctx.builder
|
||||
.ins()
|
||||
.brif(is_int, int_block, [], float_check_block, []);
|
||||
@@ -109,7 +109,7 @@ impl<Ctx: JITContext> JITCompile<Ctx> for BinOp {
|
||||
let is_float =
|
||||
ctx.builder
|
||||
.ins()
|
||||
.icmp_imm(IntCC::Equal, lhs_tag, Value::<Ctx>::FLOAT as i64);
|
||||
.icmp_imm(IntCC::Equal, lhs_tag, Value::FLOAT as i64);
|
||||
ctx.builder
|
||||
.ins()
|
||||
.brif(is_float, float_block, [], default_block, []);
|
||||
@@ -141,10 +141,10 @@ impl<Ctx: JITContext> JITCompile<Ctx> for BinOp {
|
||||
let float_block = ctx.builder.create_block();
|
||||
let float_check_block = ctx.builder.create_block();
|
||||
|
||||
let is_int =
|
||||
ctx.builder
|
||||
.ins()
|
||||
.icmp_imm(IntCC::Equal, lhs_tag, Value::<Ctx>::INT as i64);
|
||||
let is_int = ctx
|
||||
.builder
|
||||
.ins()
|
||||
.icmp_imm(IntCC::Equal, lhs_tag, Value::INT as i64);
|
||||
ctx.builder
|
||||
.ins()
|
||||
.brif(is_int, int_block, [], float_check_block, []);
|
||||
@@ -162,7 +162,7 @@ impl<Ctx: JITContext> JITCompile<Ctx> for BinOp {
|
||||
let is_float =
|
||||
ctx.builder
|
||||
.ins()
|
||||
.icmp_imm(IntCC::Equal, lhs_tag, Value::<Ctx>::FLOAT as i64);
|
||||
.icmp_imm(IntCC::Equal, lhs_tag, Value::FLOAT as i64);
|
||||
ctx.builder
|
||||
.ins()
|
||||
.brif(is_float, float_block, [], default_block, []);
|
||||
@@ -194,10 +194,10 @@ impl<Ctx: JITContext> JITCompile<Ctx> for BinOp {
|
||||
let float_block = ctx.builder.create_block();
|
||||
let float_check_block = ctx.builder.create_block();
|
||||
|
||||
let is_int =
|
||||
ctx.builder
|
||||
.ins()
|
||||
.icmp_imm(IntCC::Equal, lhs_tag, Value::<Ctx>::INT as i64);
|
||||
let is_int = ctx
|
||||
.builder
|
||||
.ins()
|
||||
.icmp_imm(IntCC::Equal, lhs_tag, Value::INT as i64);
|
||||
ctx.builder
|
||||
.ins()
|
||||
.brif(is_int, int_block, [], float_check_block, []);
|
||||
@@ -215,7 +215,7 @@ impl<Ctx: JITContext> JITCompile<Ctx> for BinOp {
|
||||
let is_float =
|
||||
ctx.builder
|
||||
.ins()
|
||||
.icmp_imm(IntCC::Equal, lhs_tag, Value::<Ctx>::FLOAT as i64);
|
||||
.icmp_imm(IntCC::Equal, lhs_tag, Value::FLOAT as i64);
|
||||
ctx.builder
|
||||
.ins()
|
||||
.brif(is_float, float_block, [], default_block, []);
|
||||
@@ -245,10 +245,10 @@ impl<Ctx: JITContext> JITCompile<Ctx> for BinOp {
|
||||
let bool_block = ctx.builder.create_block();
|
||||
let non_bool_block = ctx.builder.create_block();
|
||||
|
||||
let is_bool =
|
||||
ctx.builder
|
||||
.ins()
|
||||
.icmp_imm(IntCC::Equal, lhs_tag, Value::<Ctx>::BOOL as i64);
|
||||
let is_bool = ctx
|
||||
.builder
|
||||
.ins()
|
||||
.icmp_imm(IntCC::Equal, lhs_tag, Value::BOOL as i64);
|
||||
ctx.builder
|
||||
.ins()
|
||||
.brif(is_bool, bool_block, [], non_bool_block, []);
|
||||
@@ -275,10 +275,10 @@ impl<Ctx: JITContext> JITCompile<Ctx> for BinOp {
|
||||
let bool_block = ctx.builder.create_block();
|
||||
let non_bool_block = ctx.builder.create_block();
|
||||
|
||||
let is_bool =
|
||||
ctx.builder
|
||||
.ins()
|
||||
.icmp_imm(IntCC::Equal, lhs_tag, Value::<Ctx>::BOOL as i64);
|
||||
let is_bool = ctx
|
||||
.builder
|
||||
.ins()
|
||||
.icmp_imm(IntCC::Equal, lhs_tag, Value::BOOL as i64);
|
||||
ctx.builder
|
||||
.ins()
|
||||
.brif(is_bool, bool_block, [], non_bool_block, []);
|
||||
@@ -378,10 +378,10 @@ impl<Ctx: JITContext> JITCompile<Ctx> for If {
|
||||
let judge_block = ctx.builder.create_block();
|
||||
let slot = ctx.alloca();
|
||||
|
||||
let is_bool =
|
||||
ctx.builder
|
||||
.ins()
|
||||
.icmp_imm(IntCC::Equal, cond_type, Value::<Ctx>::BOOL as i64);
|
||||
let is_bool = ctx
|
||||
.builder
|
||||
.ins()
|
||||
.icmp_imm(IntCC::Equal, cond_type, Value::BOOL as i64);
|
||||
ctx.builder
|
||||
.ins()
|
||||
.brif(is_bool, judge_block, [], error_block, []);
|
||||
@@ -480,37 +480,25 @@ impl<Ctx: JITContext> JITCompile<Ctx> for Const {
|
||||
let slot = ctx.alloca();
|
||||
match self.val {
|
||||
Bool(x) => {
|
||||
let tag = ctx
|
||||
.builder
|
||||
.ins()
|
||||
.iconst(types::I64, Value::<Ctx>::BOOL as i64);
|
||||
let tag = ctx.builder.ins().iconst(types::I64, Value::BOOL as i64);
|
||||
let val = ctx.builder.ins().iconst(types::I64, x as i64);
|
||||
ctx.builder.ins().stack_store(tag, slot, 0);
|
||||
ctx.builder.ins().stack_store(val, slot, 8);
|
||||
}
|
||||
Int(x) => {
|
||||
let tag = ctx
|
||||
.builder
|
||||
.ins()
|
||||
.iconst(types::I64, Value::<Ctx>::INT as i64);
|
||||
let tag = ctx.builder.ins().iconst(types::I64, Value::INT as i64);
|
||||
let val = ctx.builder.ins().iconst(types::I64, x);
|
||||
ctx.builder.ins().stack_store(tag, slot, 0);
|
||||
ctx.builder.ins().stack_store(val, slot, 8);
|
||||
}
|
||||
Float(x) => {
|
||||
let tag = ctx
|
||||
.builder
|
||||
.ins()
|
||||
.iconst(types::I64, Value::<Ctx>::FLOAT as i64);
|
||||
let tag = ctx.builder.ins().iconst(types::I64, Value::FLOAT as i64);
|
||||
let val = ctx.builder.ins().f64const(x);
|
||||
ctx.builder.ins().stack_store(tag, slot, 0);
|
||||
ctx.builder.ins().stack_store(val, slot, 8);
|
||||
}
|
||||
Null => {
|
||||
let tag = ctx
|
||||
.builder
|
||||
.ins()
|
||||
.iconst(types::I64, Value::<Ctx>::NULL as i64);
|
||||
let tag = ctx.builder.ins().iconst(types::I64, Value::NULL as i64);
|
||||
ctx.builder.ins().stack_store(tag, slot, 0);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user