mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-27 13:59:08 +00:00
dev backend: implement subWrap for all integer types
This commit is contained in:
parent
081c61ead6
commit
1b023f828f
2 changed files with 62 additions and 56 deletions
|
@ -1035,19 +1035,9 @@ impl<
|
|||
}
|
||||
|
||||
fn build_num_sub(&mut self, dst: &Symbol, src1: &Symbol, src2: &Symbol, layout: &InLayout<'a>) {
|
||||
match self.layout_interner.get(*layout) {
|
||||
Layout::Builtin(Builtin::Int(IntWidth::I64 | IntWidth::U64)) => {
|
||||
let dst_reg = self.storage_manager.claim_general_reg(&mut self.buf, dst);
|
||||
let src1_reg = self
|
||||
.storage_manager
|
||||
.load_to_general_reg(&mut self.buf, src1);
|
||||
let src2_reg = self
|
||||
.storage_manager
|
||||
.load_to_general_reg(&mut self.buf, src2);
|
||||
ASM::sub_reg64_reg64_reg64(&mut self.buf, dst_reg, src1_reg, src2_reg);
|
||||
}
|
||||
x => todo!("NumSub: layout, {:?}", x),
|
||||
}
|
||||
// for the time being, `num_sub` is implemented as wrapping subtraction. In roc, the normal
|
||||
// `sub` should panic on overflow, but we just don't do that yet
|
||||
self.build_num_sub_wrap(dst, src1, src2, layout)
|
||||
}
|
||||
|
||||
fn build_num_sub_wrap(
|
||||
|
@ -1058,7 +1048,7 @@ impl<
|
|||
layout: &InLayout<'a>,
|
||||
) {
|
||||
match self.layout_interner.get(*layout) {
|
||||
Layout::Builtin(Builtin::Int(IntWidth::I64 | IntWidth::U64)) => {
|
||||
Layout::Builtin(Builtin::Int(quadword_and_smaller!())) => {
|
||||
let dst_reg = self.storage_manager.claim_general_reg(&mut self.buf, dst);
|
||||
let src1_reg = self
|
||||
.storage_manager
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue