I have found several builtin function problems as well as missing operator implementations.
[font=“Courier New”]uint4 a = abs( (uint4)(1u) == (uint4)(1u) );[/font]
The == operator returns a vector of signed integers, with elements of -1 when the elemnt-wise expression is true. The abs() function returns the unsigned version of whatever type vector it is given. The bit-level content of variable “a” should be “000000000000000000001”, since that is the uint representation of 1. However the contents are “1111111111111111111111” because that is -1 in signed int representation. This is my opinion a compiler implementation mistake, that number representation is mishandled.
Nested select() functions are also mishandled by the compiler.
[font=“Courier New”]one4 a = (uint4)(1u);
select(zero4, select(zero4, two4, a == a), a == a);[/font]
This expression returns a vector filled with zeros, which is clearly wrong behaviour, although no compiler errors are given.
I know nested select() is a bit exotic, but the && operator is missing implementation for uint4 inputs, and because the number representation is wrong I cannot to (A + B) == two4, since A and B are logical outputs, but their sum don’t equal two, even when both are true. And nested selects are not working properly.
It is really hard to program when 3 solutions to a problem don’t work.
Is it possible to get feedback whether the problems have been acknowledged and that they will be taken care of in a future release of the SDK?