There is, with current compilers, no way to let it reorganise your data such that successive eleemnts in an array are in a different order than what you declare in a struct.
Edit:
Note that to re-arrange the layout of a struct would require the compiler to know exactly how the struct is defined and used EVERYWHERE at once, and typically compilers will not even try to do that. It may be possible to generate code that loads the data in such a way that the calculation can be done in an SSE register.
End Edit.
In other words
struct{
int value;
int pos;
}S[10];
will always end up with an alternating pattern of value, pos, value, pos, etc.
If you want consecuteive values of of value, value ... followed by pos, pos, ... then you will need to write your structure declaration differently, e.g.
struct
{
int value[10];
int pos[10];
} S;
Of course, this will also mean that you have to modify any code accessing S from s[x].pos to s.pos[x], etc.
If you also want to ensure that the value and pos can actually be loaded by SSE instructions without difficulty, you need to use the alignment attribute/declaration specifications, so that each of the value and pos are aligned to 16-byte boundaries.
So, in gcc:
struct
{
int value[10] __attribute__((aligned(16)));
int pos[10] __attribute__((aligned(16)));
} S;
In MS compatible compiler:
struct
{
__declspec(align(16)) int value[10];
__declspec(align(16)) int pos[10];
} S;
Edit:
Note also that the number 10 is not partiuclarly great here if you want to use SSE instructions, as you are left with two elements that don't fit in an SSE register.
End Edit.