Solved

A amazing problem use inline assembler in vs.net

Posted on 2003-11-15
1
560 Views
Last Modified: 2007-12-19
the code below is to use SSE to compute the product of two 4*4 matrix,i use the visual studio.net 2003 to built it,it have runtime error,but it works well when i change
float m2[4][4],m1[4][4],m3[4][4];
to
float m1[4][4],m2[4][4],m3[4][4];
is it a bug in the complier?can try it in other environment.
 

/////////////////////////////

#include<stdio.h>

#define FILE_IN "input.txt"
#define FILE_OUT "output.txt"

void MultiMatrix(float dest[4][4],float src1[4][4],float src2[4][4])
{
    _asm
    {
        mov     ecx,src1;
        mov     edx,src2;
        mov     eax,dest;
        movss   xmm0,[ecx];
        shufps  xmm0,xmm0,00h;
        movss   xmm1,[ecx+4];
        shufps  xmm1,xmm1,00h;
        movss   xmm2,[ecx+8];
        shufps  xmm2,xmm2,00h;
        movss   xmm3,[ecx+12];
        shufps  xmm3,xmm3,00h;
        movaps  xmm4,[edx];
        movaps  xmm5,[edx+16];
        movaps  xmm6,[edx+32];
        movaps  xmm7,[edx+48];
        mulps   xmm0,xmm4;
        mulps   xmm1,xmm5;
        mulps   xmm2,xmm6;
        mulps   xmm3,xmm7;
        addps   xmm0,xmm1;
        addps   xmm0,xmm2;
        addps   xmm0,xmm3;
        movups  [eax],xmm0;
       
        movss   xmm0,[ecx+16];
        shufps  xmm0,xmm0,00h;
        movss   xmm1,[ecx+20];
        shufps  xmm1,xmm1,00h;
        movss   xmm2,[ecx+24];
        shufps  xmm2,xmm2,00h;
        movss   xmm3,[ecx+28];
        shufps  xmm3,xmm3,00h;
        mulps   xmm0,xmm4;
        mulps   xmm1,xmm5;
        mulps   xmm2,xmm6;
        mulps   xmm3,xmm7;
        addps   xmm0,xmm1;
        addps   xmm0,xmm2;
        addps   xmm0,xmm3;
        movups  [eax+16],xmm0;

        movss   xmm0,[ecx+32];
        shufps  xmm0,xmm0,00h;
        movss   xmm1,[ecx+36];
        shufps  xmm1,xmm1,00h;
        movss   xmm2,[ecx+40];
        shufps  xmm2,xmm2,00h;
        movss   xmm3,[ecx+44];
        shufps  xmm3,xmm3,00h;
        mulps   xmm0,xmm4;
        mulps   xmm1,xmm5;
        mulps   xmm2,xmm6;
        mulps   xmm3,xmm7;
        addps   xmm0,xmm1;
        addps   xmm0,xmm2;
        addps   xmm0,xmm3;
        movups  [eax+32],xmm0;
       
        movss   xmm0,[ecx+48];
        shufps  xmm0,xmm0,00h;
        movss   xmm1,[ecx+52];
        shufps  xmm1,xmm1,00h;
        movss   xmm2,[ecx+56];
        shufps  xmm2,xmm2,00h;
        movss   xmm3,[ecx+60];
        shufps  xmm3,xmm3,00h;
        mulps   xmm0,xmm4;
        mulps   xmm1,xmm5;
        mulps   xmm2,xmm6;
        mulps   xmm3,xmm7;
        addps   xmm0,xmm1;
        addps   xmm0,xmm2;
        addps   xmm0,xmm3;
        movups  [eax+48],xmm0;
    }
}

int main()
{
    int i,j;
    FILE *fin,*fout;
    float m2[4][4],m1[4][4],m3[4][4];
   
    fin = fopen(FILE_IN,"r");
    fout = fopen(FILE_OUT,"w");

    for(i=0;i<4;++i)
        for(j=0;j<4;++j)
            fscanf(fin,"%f",&m1[i][j]);
           
    for(i=0;i<4;++i)
        for(j=0;j<4;++j)
            fscanf(fin,"%f",&m2[i][j]);            
           
    MultiMatrix(m3,m1,m2);
   
    for(i=0;i<4;++i)
    {
        for(j=0;j<4;++j)
            fprintf(fout,"%f ",m3[i][j]);
        fprintf(fout,"\n");
    }

    fclose(fin);
    fclose(fout);

    return 0;

}

//////////////////////
input.txt

1.2 2.1 3.2 0
1.0 1.0 1.0 1.0
3.0 4.1 5.2 192.1
2.3 4.3 5.8 6.0

1.2 2.1 1.0 0
11.0 1.0 1.0 1.0
3.0 24.1 1.0 192.1
22.3 4.35 1.0 6.01

/////////////////////
0
Comment
Question by:atlantis13579
1 Comment
 
LVL 5

Accepted Solution

by:
mtmike earned 250 total points
ID: 9753852
General protection fault?

The "movaps" instruction can only be used to load/store 16-byte (tword) aligned data. You should use "movups" to load/store unaligned data.

Floats are only guaranteed to be 4-byte (dword) aligned.

You can also ask the compiler to align the float matrices.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclang/html/vcrefalign.asp
0

Featured Post

Windows Server 2016: All you need to know

Learn about Hyper-V features that increase functionality and usability of Microsoft Windows Server 2016. Also, throughout this eBook, you’ll find some basic PowerShell examples that will help you leverage the scripts in your environments!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Do you use a spreadsheet like Microsoft's Excel?  Have you ever wanted to link out to a non excel file on your computer or network drive?  This is the way I found to do it!
This article outlines why you need to choose a backup solution that protects your entire environment – including your VMware ESXi and Microsoft Hyper-V virtualization hosts – not just your virtual machines.
This tutorial gives a high-level tour of the interface of Marketo (a marketing automation tool to help businesses track and engage prospective customers and drive them to purchase). You will see the main areas including Marketing Activities, Design …
Email security requires an ever evolving service that stays up to date with counter-evolving threats. The Email Laundry perform Research and Development to ensure their email security service evolves faster than cyber criminals. We apply our Threat…

778 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question