diff --git a/src/builtins/cmp.c b/src/builtins/cmp.c index 37f0f4c5..800b222c 100644 --- a/src/builtins/cmp.c +++ b/src/builtins/cmp.c @@ -6,6 +6,25 @@ #define AL(X) i8* rp; B r = m_i8arrc(&rp, X); +static NOINLINE u8 makeEq(B* w, B* x, u8 we, u8 xe) { // returns el_MAX if failed + B s = wexe?we:xe; + if (elNum(we) & elNum(xe)) { + switch(me) { default: UD; + case el_i16: s = taga(cpyI16Arr(s)); break; + case el_i32: s = taga(cpyI32Arr(s)); break; + case el_f64: s = taga(cpyF64Arr(s)); break; + } + } else if (elChr(we) & elChr(xe)) { + switch(me) { default: UD; + case el_c16: s = taga(cpyC16Arr(s)); break; + case el_c32: s = taga(cpyC32Arr(s)); break; + } + } else return el_MAX; + *(weia; \ - switch(we) { default: UD; \ - case el_i8 : { i8* wp=i8any_ptr (w); i8* xp=i8any_ptr (x); for(usz i=0;iia; \ + switch(we) { default: UD; \ + case el_i8 : { i8* wp=i8any_ptr (w); i8* xp=i8any_ptr (x); for(usz i=0;iia; \ switch(we) { default: UD; \