kicad-developers team mailing list archive
-
kicad-developers team
-
Mailing list archive
-
Message #40341
Re: GLM 0.9.9.3 and GLM_FORCE_PURE
-
To:
kicad-developers@xxxxxxxxxxxxxxxxxxx
-
From:
Simon Richter <Simon.Richter@xxxxxxxxxx>
-
Date:
Mon, 29 Apr 2019 21:20:19 +0200
-
Autocrypt:
addr=Simon.Richter@xxxxxxxxxx; prefer-encrypt=mutual; keydata= mQINBEsFLRIBEAC7462Btbl5lLGjG+qgeNHfBUBiZ+q47M1xMC9hAQ5nbCSBqxH7eSinz4u9 DSNp4VT5pTkAcnLj2/f3d4Tis7LVRXA5hWS6aHVKvtk0k7TweXzU5nqGBvQUuwEzyx/TOQ8r wx+IhjnIgh5g0enhVVNw3DoTXRHtEqQ6twAMj5WccNy9DApFC07OchJz92/b747juTRL3p0E WQnss8sZ4MKQ7fZhOh6W2QDgvG7ZCKx2UWiRytDzVY+QgCe6oLHG0kIw7rAgqtosSNGZkPZ8 Iav1UVxHDAzOHvyGC48FARvSqExnpJqQU+UK5nYacwH4uoL+Su+un/8DMtpfG8m3+DGiX2Ng DSfvIXOQczaCLRTr9U7ma5v7Y+7sWLO7lbIDH6UYovo2C13iTa8qoSIJa1rM6BbwFntAMXtp LIo+DABepHeswy3ulfb9EmfcS73O/ML+LqlayHUMkwUGx/RsE+ko3asfWmKIMeH9vs7uO2za ZKu/zmIAHb6Zi1i2+47kAKIy/gyFeOPkT8vhRMgZlZ7qSKrKl+5jfWwGInGxePabE4TC4nVJ TZn2Sa0+zb3/h74RLeFpNBhWMH2A0ayIC88mQrzDNSOieaPX+7EjfLBc0n/CUW75hLe3YlFu 0nx/Qit4SyGZP+xN0VYFUw+iVz54+1Io6gQuZHpDwc+nGPBijwARAQABtChTaW1vbiBSaWNo dGVyIDxTaW1vbi5SaWNodGVyQGhvZ3lyb3MuZGU+iQI3BBMBCAAhBQJLBS3AAhsBBQsJCAcD BRUKCQgLBRYCAwEAAh4BAheAAAoJEOv2eoRqq+NUaTEP/2/JJR8wq60oN95ZJ4dEMQzGrUBo /6bXaycNJKaJSjVzVGE2vY/El8BXRVVM07UKE4ElH/IS3WAIDrB/CGszT6kqCwFPDlo2ns+g o0nx4WIiR3GaigZq9kRVAHy5X5Nt/uyS+1uVAbVQO6hriyJ9ri9w/x/Iuh74aKtU6UwjdksN NqYZnU88LdcNzQFXZupxo+rAQfDoEGyh21E2Qsd1vLDxkTd/EipELiDHQ8yTD0hy84tmZz/k 4bmfPobZS0NyxwkSK3iiDZXmglvYDh6jBq07QorTf4mvFYhu5aBL5ICZiyyBltKG5OZqFjJl NA4PGOHTHCzFajY6j/SQEA7r+JQsTxygSFchaVKopTL4Rgjy27dfWNR5Almv1n2F5qLQsJYY zl+wBj1AUXTKaPeWo7hKl8itL1HCKFAppd7lNa97BmC//04gS6T//VqtSjEwtQrJAZK0afxU 9vL8wGdmZAE1r9B/smn+X+s8+CIZRKD/x7a/PsHP3VWkgNCXaRN8EDgh9lcnDCZ5mb3x7vDz mq6GaxpxAWC7oHLiXVv2hyO9zPTp/EPtj+H7iKmxfzlXUhTa1ky1Rpi/rTYTR90e0lGch/tO wGWwI7kho40UqLEpaBIN45+uwKKgVqX6w1aa7bf6MzCN9X6HeScpa9sZd3Fs/pncjD0xlJfq ezq5NlVpuQENBEsFLw0BCADNUdqANOQTluVxqdv26JlaAeqHVX67XV/sdIYNF7SP2zFj6SgB wqYf4jggRX6MAFcVOWm64my0Aop8LiWWGKiJuNKbhbawBLt//mWcdFxDi7Jzt1+jgX3Ko0lW ZZIejnIZ6VN/1tvZVZf1+lrK1EI1lUPXjA4+rod+2p5oVLPQhhJK2H7E7Ovw/lg/MA3sKkol EH3yJizx9UvyqwWn+U2Fsj3SFi9uhRoVgobWyoP23/ykbrcixUvhmxjj7MVWvAPYm9yNjOUZ K2gWJol+83TYjytegOruTxAW1FiUJBos+p9xS409RdUhaqbxnCRrsC06LMQgWktM1RNKIOz4 J+7dABEBAAGJAh8EGAECAAkFAksFLw0CGwwACgkQ6/Z6hGqr41QFmw//fDxLBoXMsAd48JCJ fqCX88BTQ0rJl+P2uvdKXebCpXslGCRxzq80VM5lRdqxmnwjv5CA4TqsP0zakN1MWeYNF0nA Qd8nXGOn9zxPGM5GiEU5WuEQDwDVKAzN8bFlBnHD/c8rQA8xh6FpZaQQmtFeEtcHU4ZXF38Q H+aU9K11VljFa4yzF4Ctcs+cmiQSWMl/DHHFtFkKoeb1dDvJLk9GJlBBXlcu6+R1R33ORjgT VeMEjXYpM2iycMKwby4P79yTVFKtpterKaUorucnYgZMboGYicAy3scxjhq7qlSZNwcY/poa wIlIdKA0mwXGTuqd4JhuSJ22JeGz9cwjEuzeUyNNsZ6ARrA4vQVHDQDMUupo8Ia7evsFV7+t r4wsaeV5be72LlJOM4nf5qMSqAdSW/JRkxO+rz+ZDmacWRMJW2/59BUvfDbOZZbwj4CobYof CDB2YXNrkOMBoof0HOafhHdsQKzuabWZ5caFBCTST20zzn623Qr4aPI7kwKN+rk8GE3W7tS4 phxUdTi13k6EjQHX34VPJ5T7giIDZaNiuDSRZlP7Z9Rd80yjJJJjBfqvgYoX896WlqRMn25d 0x+PHgc8gDYvOT76blqh0HBA33G0mMkgYlsgQCl2bA1Sl0u1fWSY99zQVgeYoaLMy3HgfCAp h91x70zKkmHV7kVxqqS5AQ0ESwUwQgEIALswe7inMB4J9hFtY7k/9hUc4HAVeBOkXtd/QE4o jJEgq62YWmWT3k1zpDFuezmomtGaEmjBpJ1ADZ+oyX/0pyYTym/ElsF0LlkLl08sLK6Oc9mY z06Fi88L6yfMfAmhAKKmoYrk/ekkVJHuyFgYvB3IhqAgiKzSzHfl6BXPTs2ZRk7cVVadc9m2 v39pZlSh5OMb4oDDGPNXuenRbAlROxrt7m7uqptW8XtUUp/zCs8yIEZstQXidok4YnjkGRU6 VutqPJwtnlWyVAReCH/E4m2ICU243qRBCKuPeCMezl0nr9EWLWwsQYlGnv/HSp+kWDrUIcWv /vr26JDHRGiM6pMAEQEAAYkDPgQYAQIACQUCSwUwQgIbAgEpCRDr9nqEaqvjVMBdIAQZAQIA BgUCSwUwQgAKCRB+vTh7sJkIEcvcB/91XWhVajPd64TnjItN4JdvLFtelSH0dqbxs+SRYGLs YcSj2c0rpksMlMCFUSON6Q/saPhqy4jCDIv4WHAdxYixBBb1ea7f9WN563w6/qhoCERmAEzn bkp0qqjx/nO7E8WyEuwxyvR2Ii9SdULw+zkYXi93/IiHv3L4zWLWyh+MB3oeuABDdcQxALDD y+se/nAnGSnyrxUE1rW7Wnv+RhxHj9L3QOOs4Dk+0oV1hQTZbBNjVRLpOoowl3AO8E/8YPXW EHgPHvJv6ug/s+rtfVAF7iE5/JIAURyIjEfsTdWvjtUj9VZC+TOOlPCWUN7msLJgHyrbWv22 73Fl2ANj8AWUyCsQAINPfrArdV2k9TyBs+ib3NQAqVAT3gvPByte6JWq2jfwmESsyJL9EZQW gRsWB/v81SjZ7wAv4hkTHJIe/76FNWa5K7w87eSH6yFc5odWJgI8gLQEVgDd1rd8K1t0KYqR uaHtJRX7BvudpjHS9F4t7S73Q6YgdirmkocJa+S3Wbja7HwopIRaiAvz/N4qMoSmI7QpMQJV RHSyArLxK+XmaGDPWs11c5gqOJn/pQDt//OVl8I4CQsRuX8UjRsXXaTXfyZ0Gn+AzoM+/cz7 4QSeS5CZwE7KUfd7lHr8+eOOaF8RYFOxflpbpRwlut/9HIJtmfa0meB7XzmIREYzgs1wtlsl 1hBhQbYOa1EbQ3RPrbbv/Xv0laVHeg63Iw/E3JfOxGdTULN0UD5P/rfGZFGF6uI997N0XrxA fUleXokjGHQ1r8ghqVqRGoc4m5SA+FkaduiJwPzdtsFPBl2J37ECVPCBQ5M1tkp1JoNanZ1Y fqcrhEMGFH3LCvIeQfN960Gl2qqtaxS/6kLLJ/TiKpEhs6gtLPawVTxffFf/VXixZ6+TLdUp uG4Rm4S0h9t6RJzSudShdI+IAsIei58fo6oMMmDI+sviRGZBscg5fjIBy+g6M1RYs5qJT60A O4MynmTFn4C2V34i4+prOJXWQVcpwguIHuomTLGT1SDhSE+oelfK
-
In-reply-to:
<dd68a8c6-c615-d4c1-8d20-28e95c35c83d@gmail.com>
-
Openpgp:
preference=signencrypt
-
User-agent:
Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1
Hi Wayne,
On 29.04.19 20:15, Wayne Stambaugh wrote:
> Rather than remove it completely, how about build option to disable the
> SIMD on platforms that don't support it. Even better, there is probably
> a way to query the compiler to check if it supports SIMD and
> enable/disable accordingly.
GLM already has a list which platforms, compilers and versions support
which vector intrinsics, but for several compilers, the intrinsics
themselves are not constexpr, so e.g.
constexpr vec4 max(vec4 const &lhs, vec4 const &rhs)
{
return vec4(__builtin_ia32_maxps(lhs, rhs));
}
fails to compile, while
constexpr vec4 max(vec4 const &lhs, vec4 const &rhs)
{
return vec4(max(lhs[0], rhs[0]),
max(lhs[1], rhs[1]),
max(lhs[2], rhs[2]),
max(lhs[3], rhs[3]));
}
would work as long as the "max" function itself was constexpr. The
compiler should also generate a "maxps" instruction for this, but that
depends on whether the vectorizer recognizes the pattern.
GLM knows this and drops the "constexpr" if it uses SIMD intrinsics. The
GLM_FORCE_PURE define forbids intrinsics, which reenables "constexpr",
which then causes a problem in C++11 mode, as constexpr member functions
are implicitly const, so
constexpr T &operator[](unsigned int);
constexpr T const &operator[](unsigned int) const;
only differ in return type, so this is an invalid overload. In C++14
mode, this becomes valid again.
So this isn't really a problem of whether or not we use vector
instructions, as we pretty much always do on amd64 anyway (the
architecture baseline has SSE2), but a tradeoff between "using more
vector instructions" (gains dozens of CPU cycles) and "resolving more
stuff at compile time" (also gains dozens of CPU cycles).
I'd expect the performance impact to be so minimal that it doesn't even
matter which way it goes, the main question is how we can make it build
on the most platforms.
Deleting the #define is in the Works For Me™ category (i.e. succeeds on
Linux x86, Linux amd64, msys2 x86, msys2 amd64, MSVC x86, MSVC amd64)
and fixes builds with unpatched GLM 0.9.9.3.
Removing the check allows building with patched GLM 0.9.9.3 (in Debian
buster, i.e. the next stable release), so that is a strong incentive. We
could also turn this into a compile test to reject only broken
installations if we wanted to keep the #define for some reason, but I
haven't found a good one.
Our main problem on arm is OpenGL anyway, most devices support the EGL
subset only, so whether we use NEON there is probably not that relevant
either. I haven't found time to do anything I wanted to in the last
weeks so I'm unsure if I can set up a sensible ARM autobuild to actually
verify what happens there (and CMake is rather bad at cross-compiling).
The #define was introduced in commit 80f8e74797b
https://git.launchpad.net/kicad/commit/?id=80f8e74797b
and contains no explanation.
Simon
Attachment:
signature.asc
Description: OpenPGP digital signature
Follow ups
References