Eric,
See reply embedded
On 10/1/07, Eric B. [email protected] wrote:
I believe that there is an additional requirement that the data passed
Hmmm. Does it ever use the 0RCR case? I would expect only the first
two. It may be reusing the fff simd code which generates all 4
alignments for the taps, but I wouldn’t expect to see the 0RCR or 000R
input cases.
Yes I do see the 0RCR or 0000R case. For example when I change the QA
code
to use stack allocation for the input (uncommenting a piece of code
that
was originally there, lines 110 and 111 in the QA code from trunk) the
check
will fail.
Input is at address 0xbcd87d4 this gets 16-byte aligned to address
0xbfcd87d0
This illustrates the 0RCR case.
real on a mod 8 == 4 boundary instead of a mod 8 == 0 boundary?
yes, see example below.
If so, (1) where’s the input data coming from, (2) what version of the
compiler are you using?
In the example above the data was allocated on the stack from the qa
code
with
i_type input[INPUT_LEN]; //(i_type is gr_complex)
which will case the QA code fail
instead of
i_type *input = (i_type *)malloc16Align(INPUT_LEN *
sizeof(i_type));
which is in the QA code, and will make it pass.
I am using three different compiles / versions of gcc on two different
machines getting the same results
gcc (GCC) 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)
gcc (GCC) 4.2.1 (Debian 4.2.1-3)
gcc (GCC) 4.1.2.20070502 (Red Hat 4.1.2-12)
However, back to your first point, if we are using the 0RCR case, then
the code is completely wrong, and I don’t see how it could ever pass
the QA tests (which it seem to). On the other hand, there could be
some problem with how the float taps are mapped across the complex
input (It’s been along time since I looked at the code…)
The QA tests are passing because they force the 16-byte alignment.
Thanks for looking at this!