difference between xscale and iwmmxt

Bridge Wu mingqiao.wu@gmail.com
Thu Sep 7 02:53:00 GMT 2006


It seems -mcpu=xscale and -mcpu=iwmmxt not only mean for different
target, but also mean different calling convention. E.g, look at issue

I built an arm linux tool chain with gcc-3.4.3, glibc-2.3.2 and
binutils- by using crosstool. I set
GCC_EXTRA_CONFIG="--with-cpu=iwmmxt --enable-cxx-flags=-mcpu=iwmmxt".

% cat floattest.c
#include <stdio.h>
int main()
        float a;

        printf("%f\n", 1.0/3.0);
        return 0;

% arm-linux-gcc floattest.c -mcpu=xscale
The result is wrong.

% arm-linux-gcc floattest.c
% arm-linux-gcc floattest.c -mcpu=iwmmxt
Both the results are correct.

Look at the generated assembly code, I find "ldmia   r1, {r1, r2}" is
used before invoking printf() with -mcpu=xscale, while "ldmia   r2,
{r2, r3}" is used with -mcpu=iwmmxt. It shows these two options have
different calling convention.

Then which PCS (procedure call standard) do xscale and iwmmxt follow
up respectively? Are there any clues to this?

best regards,

More information about the Gcc-help mailing list