From a6995e1b4781ba2b44c188b1e7210ca8196f8be4 Mon Sep 17 00:00:00 2001 From: "se.gorbunov" <se.gorbunov@gsi.de> Date: Tue, 6 Sep 2022 00:52:23 +0000 Subject: [PATCH] L1: SIMD vectors: fix pseudo vectors --- reco/L1/vectors/L1vecPseudo.h | 55 ++++++++++++++++++----------------- 1 file changed, 29 insertions(+), 26 deletions(-) diff --git a/reco/L1/vectors/L1vecPseudo.h b/reco/L1/vectors/L1vecPseudo.h index f8b5e22bad..9ea93f1604 100644 --- a/reco/L1/vectors/L1vecPseudo.h +++ b/reco/L1/vectors/L1vecPseudo.h @@ -27,25 +27,27 @@ fscal sgn(fscal x); class fmask { public: - static constexpr size_t size() { return 4; } + static constexpr int Size {4}; - bool v[size()]; + static constexpr size_t size() { return Size; } - bool& operator[](int i) { return v[i]; } - bool operator[](int i) const { return v[i]; } + bool v[Size]; + + bool& operator[](size_t i) { return v[i]; } + bool operator[](size_t i) const { return v[i]; } fmask() : fmask(0.f) {} fmask(const fmask& a) { - for (int i = 0; i < size(); i++) { + for (size_t i = 0; i < size(); i++) { v[i] = a.v[i]; } } fmask(bool a) { - for (int i = 0; i < size(); i++) { + for (size_t i = 0; i < size(); i++) { v[i] = a; } } @@ -56,7 +58,7 @@ public: #define _op(A, B, F) \ fmask z; \ - for (int i = 0; i < size(); i++) { \ + for (size_t i = 0; i < size(); i++) { \ z[i] = (A[i] F B[i]); \ } \ return z; @@ -73,7 +75,7 @@ public: friend fmask operator!(const fmask& a) { fmask z; - for (int i = 0; i < size(); i++) { + for (size_t i = 0; i < size(); i++) { z[i] = !a[i]; } return z; @@ -82,7 +84,7 @@ public: bool isEmpty() { bool ret = true; - for (int i = 0; i < fvecLen; i++) { + for (size_t i = 0; i < size(); i++) { ret = ret && (!v[i]); } return ret; @@ -94,7 +96,7 @@ public: friend std::ostream& operator<<(std::ostream& strm, const fmask& a) { strm << '['; - for (int i = 0; i < size(); i++) { + for (size_t i = 0; i < size(); i++) { strm << std::setw(12) << std::setfill(' ') << a[i] << ' '; } return strm; @@ -102,7 +104,7 @@ public: friend std::istream& operator>>(std::istream& strm, fmask& a) { - for (int i = 0; i < size(); i++) { + for (size_t i = 0; i < size(); i++) { strm >> a[i]; } return strm; @@ -114,20 +116,21 @@ class fvec { public: static constexpr size_t size() { return fmask::size(); } - fscal v[size()]; + + fscal v[fmask::Size]; fvec() : fvec(0.f) {} fvec(const fvec& a) { - for (int i = 0; i < size(); i++) { + for (size_t i = 0; i < size(); i++) { v[i] = a.v[i]; } } fvec(fscal a) { - for (int i = 0; i < size(); i++) { + for (size_t i = 0; i < size(); i++) { v[i] = a; } } @@ -136,41 +139,41 @@ public: static fvec Zero() { return fvec(0.); } - fscal& operator[](int i) { return v[i]; } + fscal& operator[](size_t i) { return v[i]; } - fscal operator[](int i) const { return v[i]; } + fscal operator[](size_t i) const { return v[i]; } void setZero(fmask m) { - for (int i = 0; i < size(); i++) { + for (size_t i = 0; i < size(); i++) { if (m[i]) { v[i] = 0.; } } } #define _f1(A, F) \ fvec z; \ - for (int i = 0; i < size(); i++) { \ + for (size_t i = 0; i < size(); i++) { \ z[i] = F(A[i]); \ } \ return z; #define _f2(A, B, F) \ fvec z; \ - for (int i = 0; i < size(); i++) { \ + for (size_t i = 0; i < size(); i++) { \ z[i] = F(A[i], B[i]); \ } \ return z; #define _op(A, B, F) \ fvec z; \ - for (int i = 0; i < size(); i++) { \ + for (size_t i = 0; i < size(); i++) { \ z[i] = (A[i] F B[i]); \ } \ return z; #define _opComp(A, B, F) \ fmask z; \ - for (int i = 0; i < size(); i++) { \ + for (size_t i = 0; i < size(); i++) { \ z[i] = (A[i] F B[i]); \ } \ return z; @@ -192,8 +195,8 @@ public: friend fmask isnan(const fvec& a) { fmask m; - for (int i = 0; i < size(); i++) { - m[i] = std::isnan(a[i[); + for (size_t i = 0; i < size(); i++) { + m[i] = std::isnan(a[i]); } return m; } @@ -201,7 +204,7 @@ public: friend fvec iif(fmask a, fvec b, fvec c) { fvec z; - for (int i = 0; i < size(); i++) { + for (size_t i = 0; i < size(); i++) { z[i] = a[i] ? b[i] : c[i]; } return z; @@ -253,7 +256,7 @@ public: { //strm << "[" << a[0] << " " << a[1] << " " << a[2] << " " << a[3] << "]"; strm << '['; - for (int i = 0; i < size(); i++) { + for (size_t i = 0; i < size(); i++) { strm << std::setw(12) << std::setfill(' ') << a[i] << ' '; } return strm; @@ -261,7 +264,7 @@ public: friend std::istream& operator>>(std::istream& strm, fvec& a) { - for (int i = 0; i < size(); i++) { + for (size_t i = 0; i < size(); i++) { strm >> a[i]; } return strm; -- GitLab