On Sat, Nov 02, 2013 at 08:25:28AM -0500, Aldy Hernandez wrote: > Your patch mangling negative linear steps caused a regression in > simd-clones-2.c. Well, it already had a failure, but now it has two > :). > > The problem is that AFAIU, a linear step of 1, is mangled with just > 'l', not 'l1'. > > I am not completely sure of this, and was hoping Balaji could clear > this up, but on page 7 of the Intel vector ABI document, the example > for: > > __declspec(vector(uniform(a), aligned(a:32), linear(k:1))) > extern float setArray(float *a, float x, int k) > > ...is mangled as _ZGVxN4ua32vl_setArray, and in the subsequent > explanatory paragraph, the document specifically says: > > ālā indicates linear(k:1) ā k is a linear variable whose stride is 1. > > However, since the spec itself says nothing about a default linear > stride 1, I don't know whether this is an oversight in the BNF > grammar or a typo in the example. Balaji?
Ah, I was reading just the grammar and it didn't look like the number was optional. BTW, as I said on IRC yesterday, for say: #pragma omp declare simd simdlen(8) notinbranch int foo (int a, int b); in the 'x' ISA (i.e. SSE2), we are supposed to pass it as typedef int V __attribute__((vector_size (16))); foo (V a.1, V a.2, V b.1, V b.2) which probably isn't that hard for arguments, but are supposed to return also the return value in two V registers (%xmm0/%xmm1). We can't pass that as vector(8) int, so perhaps pretend the return value is ARRAY_TYPE of 2 vector(4) ints and have some special code in the backend to pass that return value in two xmm registers. Similarly for 4 and 8. Jakub