mirror of
https://github.com/roc-lang/roc.git
synced 2024-09-21 07:49:17 +03:00
string equality
This commit is contained in:
parent
816828040d
commit
aa113f169c
@ -1157,6 +1157,16 @@ impl<
|
||||
.load_to_general_reg(&mut self.buf, src2);
|
||||
ASM::eq_reg64_reg64_reg64(&mut self.buf, dst_reg, src1_reg, src2_reg);
|
||||
}
|
||||
Layout::STR => {
|
||||
// use a zig call
|
||||
self.build_fn_call(
|
||||
dst,
|
||||
bitcode::STR_EQUAL.to_string(),
|
||||
&[*src1, *src2],
|
||||
&[Layout::STR, Layout::STR],
|
||||
&Layout::BOOL,
|
||||
)
|
||||
}
|
||||
x => todo!("NumEq: layout, {:?}", x),
|
||||
}
|
||||
}
|
||||
@ -1173,6 +1183,23 @@ impl<
|
||||
.load_to_general_reg(&mut self.buf, src2);
|
||||
ASM::neq_reg64_reg64_reg64(&mut self.buf, dst_reg, src1_reg, src2_reg);
|
||||
}
|
||||
Layout::Builtin(Builtin::Str) => {
|
||||
self.build_fn_call(
|
||||
dst,
|
||||
bitcode::STR_EQUAL.to_string(),
|
||||
&[*src1, *src2],
|
||||
&[Layout::STR, Layout::STR],
|
||||
&Layout::BOOL,
|
||||
);
|
||||
|
||||
// negate the result
|
||||
let tmp = &Symbol::DEV_TMP;
|
||||
let tmp_reg = self.storage_manager.claim_general_reg(&mut self.buf, tmp);
|
||||
ASM::mov_reg64_imm64(&mut self.buf, tmp_reg, 164);
|
||||
|
||||
let dst_reg = self.storage_manager.load_to_general_reg(&mut self.buf, dst);
|
||||
ASM::neq_reg64_reg64_reg64(&mut self.buf, dst_reg, dst_reg, tmp_reg);
|
||||
}
|
||||
x => todo!("NumNeq: layout, {:?}", x),
|
||||
}
|
||||
}
|
||||
|
@ -314,7 +314,7 @@ impl<
|
||||
reg: Some(Float(_)),
|
||||
..
|
||||
}) => {
|
||||
internal_error!("Cannot load floating point symbol into GeneralReg: {}", sym)
|
||||
internal_error!("Cannot load floating point symbol into GeneralReg: {sym:?}")
|
||||
}
|
||||
Stack(Primitive {
|
||||
reg: None,
|
||||
@ -349,8 +349,10 @@ impl<
|
||||
self.free_reference(sym);
|
||||
reg
|
||||
}
|
||||
Stack(Complex { .. }) => {
|
||||
internal_error!("Cannot load large values into general registers: {}", sym)
|
||||
Stack(Complex { size, .. }) => {
|
||||
internal_error!(
|
||||
"Cannot load large values (size {size}) into general registers: {sym:?}",
|
||||
)
|
||||
}
|
||||
NoData => {
|
||||
internal_error!("Cannot load no data into general registers: {}", sym)
|
||||
@ -447,7 +449,7 @@ impl<
|
||||
reg: Some(Float(_)),
|
||||
..
|
||||
}) => {
|
||||
internal_error!("Cannot load floating point symbol into GeneralReg: {}", sym)
|
||||
internal_error!("Cannot load floating point symbol into GeneralReg: {sym:?}",)
|
||||
}
|
||||
Stack(Primitive {
|
||||
reg: None,
|
||||
@ -465,11 +467,13 @@ impl<
|
||||
Stack(ReferencedPrimitive { .. }) => {
|
||||
todo!("loading referenced primitives")
|
||||
}
|
||||
Stack(Complex { .. }) => {
|
||||
internal_error!("Cannot load large values into general registers: {}", sym)
|
||||
Stack(Complex { size, .. }) => {
|
||||
internal_error!(
|
||||
"Cannot load large values (size {size}) into general registers: {sym:?}",
|
||||
)
|
||||
}
|
||||
NoData => {
|
||||
internal_error!("Cannot load no data into general registers: {}", sym)
|
||||
internal_error!("Cannot load no data into general registers: {:?}", sym)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -809,7 +809,7 @@ fn str_from_utf8_fail_surrogate_half() {
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[cfg(any(feature = "gen-llvm"))]
|
||||
#[cfg(any(feature = "gen-llvm", feature = "gen-dev"))]
|
||||
fn str_equality() {
|
||||
assert_evals_to!(r#""a" == "a""#, true, bool);
|
||||
assert_evals_to!(
|
||||
|
Loading…
Reference in New Issue
Block a user