I've been testing some sample applications to use Brook+ for the past few days and I ran into a few (undocumented?) problems. I have only looked at the brookspec-v1.pdf, so if there's a later version please let me know.
1) It seems that bitwise operations are not permitted inside kernels. Essentially, brook+ is typecasting all integers to float (or __BrtFloat1) in the generated cpp. Is this correct?. I've looked at some documentation online that suggests that the stream processor itself (and the IL) support integers.
Can I have proper integer (including bitwise operator) support if I use the low-level CAL instead (looking at IL documentation, I can see IOR, IXOR etc., listed, but I don't know if it actually works)?
2) Also, local arrays don't seem to be supported. I guess this is another restriction of Brook (and doesn't apply to CAL?)
3) I sometimes get parse errors on apparently legitimate C code inside the kernels. For instance
unsigned int t = (unsigned int) 0xF1;
gives me a long list of parse error messages starting with
NOTICE: Parse error
While processing <buffer>:61
In compiler at zzerror()[parser.tab.cpp:283]
message = syntax error
(whereas removing the unsigned int typecast removes the problem).
Is there a way I can ask brook plus to point out on which source line the error occurs (as opposed to the location inside its own parser)?
4) Is there a publicly available roadmap etc., as to when the next version of Brook+ will be released? Looking at the error msgs, documentation I imagine the current Brook+ implementation is Beta(ish) whereas the CAL is a bit more polished. Has anyone who used CAL comment on how polished it is?