From 327ea102cd81feea5747269c255007da63740ca4 Mon Sep 17 00:00:00 2001 From: dzaima Date: Sat, 18 Sep 2021 13:52:54 +0300 Subject: [PATCH] convert arguments to equal sizes in comparison --- src/builtins/cmp.c | 45 ++++++++++++++++++++++++++++++++++----------- 1 file changed, 34 insertions(+), 11 deletions(-) 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; \