Add u16 div and mod to intrinsics
This commit is contained in:
parent
bb0b7c12c3
commit
ccdefe7033
@ -68,6 +68,20 @@ pub fn form_intrinsic_binops() -> Vec<BinopDefinition> {
|
||||
TypeKind::U16,
|
||||
IntrinsicIAdd(TypeKind::U16),
|
||||
));
|
||||
intrinsics.push(intrinsic_binop(
|
||||
BinaryOperator::Div,
|
||||
TypeKind::U16,
|
||||
TypeKind::U16,
|
||||
TypeKind::U16,
|
||||
IntrinsicUDiv(TypeKind::U16),
|
||||
));
|
||||
intrinsics.push(intrinsic_binop(
|
||||
BinaryOperator::Mod,
|
||||
TypeKind::U16,
|
||||
TypeKind::U16,
|
||||
TypeKind::U16,
|
||||
IntrinsicUMod(TypeKind::U16),
|
||||
));
|
||||
|
||||
intrinsics
|
||||
}
|
||||
@ -95,3 +109,37 @@ impl IntrinsicFunction for IntrinsicIAdd {
|
||||
Ok(StackValue(StackValueKind::Literal(add), self.0.clone()))
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct IntrinsicUDiv(TypeKind);
|
||||
|
||||
impl IntrinsicFunction for IntrinsicUDiv {
|
||||
fn codegen<'ctx, 'a>(
|
||||
&self,
|
||||
scope: &mut Scope<'ctx, 'a>,
|
||||
params: &[InstructionValue],
|
||||
) -> Result<StackValue, ErrorKind> {
|
||||
let lhs = params.get(0).unwrap();
|
||||
let rhs = params.get(1).unwrap();
|
||||
let add = scope.block.build(Instr::UDiv(*lhs, *rhs)).unwrap();
|
||||
Ok(StackValue(StackValueKind::Literal(add), self.0.clone()))
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct IntrinsicUMod(TypeKind);
|
||||
|
||||
impl IntrinsicFunction for IntrinsicUMod {
|
||||
fn codegen<'ctx, 'a>(
|
||||
&self,
|
||||
scope: &mut Scope<'ctx, 'a>,
|
||||
params: &[InstructionValue],
|
||||
) -> Result<StackValue, ErrorKind> {
|
||||
let lhs = params.get(0).unwrap();
|
||||
let rhs = params.get(1).unwrap();
|
||||
let div = scope.block.build(Instr::UDiv(*lhs, *rhs)).unwrap();
|
||||
let mul = scope.block.build(Instr::Mul(*rhs, div)).unwrap();
|
||||
let sub = scope.block.build(Instr::Sub(*lhs, mul)).unwrap();
|
||||
Ok(StackValue(StackValueKind::Literal(sub), self.0.clone()))
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user