inline asm mmx: how to movq from memory to %mmX

"Jack Andrews" <[email protected]>
Newsgroups gmane.linux.assembly
Message-ID <[email protected]>
hi lin-asm,

i am trying to do some vector addition using MMX and inline assembly
in GCC.  my code follows.

i want the function 'simd' to do the same as 'sisd'

i get these errors when i try to compile:

[jack@fedora i]$ gcc -mmmx v.c
/tmp/ccWXntVc.s: Assembler messages:
/tmp/ccWXntVc.s:19: Error: suffix or operands invalid for `movq'
/tmp/ccWXntVc.s:20: Error: junk `%mm0' after register

[jack@fedora i]$ gcc -v
Using built-in specs.
Target: i386-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/u
sr/share/info --enable-shared --enable-threads=posix --enable-checking=release -
-with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-
libgcj-multifile --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable
-java-awt=gtk --disable-dssi --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.
0/jre --with-cpu=generic --host=i386-redhat-linux
Thread model: posix
gcc version 4.1.0 20060304 (Red Hat 4.1.0-3)


[jack@fedora i]$ cat v.c
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

typedef long I;
typedef char C;
#define IZ sizeof(I)
#define W 2

simd(n, is)
I *is;
{   I i;
    asm("pxor %mm0,%mm0");
    for (i=0; i < n; i += W) {
        asm("movq %0 %%mm1\n\t"
            "paddq %%mm1 %%mm0"
            :
            :"m"(is[i])           );
    }
    return 0;
}

sisd(n, is)
I *is;
{
    I i = 0, j = 0;
    for (i = 0; i < n; i++)
        j += is[i];
    return j;
}

main(c, v)
C **v;
{
    I n = atol(v[1]),
        z = atol(v[2]), m = atol(v[3]), *is = malloc(IZ * (z *= W));
    I result;
    printf("IZ=%d, %s\n",IZ,m?"SIMD":"SISD");
    while (n--)
        result=m?simd(z, is):sisd(z, is);
    printf("%d\n",result);
-
To unsubscribe from this list: send the line "unsubscribe linux-assembly" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.