[Bug c++/55726] assignment of a scalar to a vector
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55726 --- Comment #5 from Marc Glisse glisse at gcc dot gnu.org 2012-12-22 08:57:14 UTC --- (In reply to comment #4) templatetypename Float inline Float atan(Float t) { constexpr float PIO4F = 0.7853981633974483096f; constexpr Float zero = {0}; Float ret = ( t 0.4142135623730950f ) ? zero+PIO4F : zero; … } Minor remark: I think you can just write PIO4F instead of zero+PIO4F. Since the other alternative in ?: is a vector, it should convert the scalar automatically. I am actually planning for later that you can even replace zero with 0: when the condition in ?: is a vector, the result has to be a vector, even if the 2 alternatives are scalars, so it could guess the return type based on the types of the scalars and the size / number of elements of the condition. But that's for a distant future.
[Bug c++/55726] assignment of a scalar to a vector
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55726 --- Comment #4 from vincenzo Innocente vincenzo.innocente at cern dot ch 2012-12-19 13:25:16 UTC --- I understand your concern, Marc. I think that the compiler shall either prefer double or produce error: call of overloaded 'f(float)' is ambiguous I'm even more worried of void f(float32x4_t); void f(float32x8_t); what about some sort of c++ explicit? I must say that my immediate need come from template functions that could accept any arithmetic AND vector type such as templatetypename Float inline Float atan(Float t) { constexpr float PIO4F = 0.7853981633974483096f; constexpr Float zero = {0}; Float ret = ( t 0.4142135623730950f ) ? zero+PIO4F : zero; … } where at the moment I need to perform a quite unnatural syntactic gymnastic to assign a scalar to either another scalar or to a vector of unknown length. btw I think that altivec supports the assignment of a scalar: I've never tried myself though vector int vi1 = (vector int)(1);// vi1 will be (1, 1, 1, 1). vector int vi2 = (vector int){1};// vi2 will be (1, 0, 0, 0). vector int vi3 = (vector int)(1, 2); // error vector int vi4 = (vector int){1, 2}; // vi4 will be (1, 2, 0, 0). vector int vi5 = (vector int)(1, 2, 3, 4); In any case I find all these exercises quite useful to try to converge to a unique vector syntax to propose as standard
[Bug c++/55726] assignment of a scalar to a vector
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55726 Richard Biener rguenth at gcc dot gnu.org changed: What|Removed |Added Status|UNCONFIRMED |NEW Last reconfirmed||2012-12-18 Ever Confirmed|0 |1 Severity|normal |enhancement --- Comment #1 from Richard Biener rguenth at gcc dot gnu.org 2012-12-18 11:35:43 UTC --- Confirmed. Does it work with C?
[Bug c++/55726] assignment of a scalar to a vector
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55726 --- Comment #2 from vincenzo Innocente vincenzo.innocente at cern dot ch 2012-12-18 11:39:22 UTC --- no gcc -Ofast -march=corei7 assign.c -std=c99 assign.c: In function ‘main’: assign.c:9:21: error: incompatible types when initializing type ‘float32x4_t’ using type ‘float’ float32x4_t va = a;
[Bug c++/55726] assignment of a scalar to a vector
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55726 Marc Glisse glisse at gcc dot gnu.org changed: What|Removed |Added CC|marc.glisse at ens dot fr |glisse at gcc dot gnu.org --- Comment #3 from Marc Glisse glisse at gcc dot gnu.org 2012-12-18 20:53:52 UTC --- If I have: void f(double); void f(float32x4_t); float a; what should f(a) do? Not sure that's the right question (I am sick this week, so I have an excuse for posting nonsense), but hopefully you see the point, adding implicit conversions has a lot of consequences, which might be good but need to be considered.