From ba28f7e892d323f2c5fe4e74958de495b01ff6af Mon Sep 17 00:00:00 2001 From: dzaima Date: Fri, 4 Jun 2021 02:36:11 +0300 Subject: [PATCH] =?UTF-8?q?faster=20=E2=89=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/core/stuff.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/core/stuff.c b/src/core/stuff.c index 2246f222..11fd1ab2 100644 --- a/src/core/stuff.c +++ b/src/core/stuff.c @@ -246,6 +246,24 @@ NOINLINE bool equal(B w, B x) { // doesn't consume if (wa) return atomEqual(w, x); if (!eqShape(w,x)) return false; usz ia = a(x)->ia; + u8 we = TI(w).elType; + u8 xe = TI(x).elType; + if (we<=el_f64 && xe<=el_f64) { + if (we==el_i32) { i32* wp = i32any_ptr(w); + if(xe==el_i32) { i32* xp = i32any_ptr(x); for (usz i = 0; i < ia; i++) if(wp[i]!=xp[i]) return false; } + else { f64* xp = f64any_ptr(x); for (usz i = 0; i < ia; i++) if(wp[i]!=xp[i]) return false; } + } else { f64* wp = f64any_ptr(w); + if(xe==el_i32) { i32* xp = i32any_ptr(x); for (usz i = 0; i < ia; i++) if(wp[i]!=xp[i]) return false; } + else { f64* xp = f64any_ptr(x); for (usz i = 0; i < ia; i++) if(wp[i]!=xp[i]) return false; } + } + return true; + } + if (we==el_c32 && xe==el_c32) { + u32* wp = c32any_ptr(w); + u32* xp = c32any_ptr(x); + for (usz i = 0; i < ia; i++) if(wp[i]!=xp[i]) return false; + return true; + } BS2B xgetU = TI(x).getU; BS2B wgetU = TI(w).getU; for (usz i = 0; i < ia; i++) if(!equal(wgetU(w,i),xgetU(x,i))) return false;