2009-07-22 5 views
1

Ich schreibe eine Anwendung in C in GCC (für Linux/Ubuntu), die die folgende Inline-Assembly verwendet.Wie schreibe ich den folgenden Inline-Assemblercode in Visual C++ 6.0?

float a[4] = { 10, 20, 30, 40 }; 
float b[4] = { 0.1, 0.1, 0.1, 0.1 }; 

asm volatile("movups (%0), %%xmm0\n\t" 
      "mulps (%1), %%xmm0\n\t" 
      "movups %%xmm0, (%1)" 
      :: "r" (a), "r" (b)); 

Entschuldigung Tippfehler in den obigen (ich schreibe aus dem Speicher). Was ist der entsprechende Inline-Assembler in Visual C++ 6.0? Ich habe festgestellt, dass ich meinen Code portieren muss.

+0

Sie finden es möglicherweise einfacher zu portieren eine Linux-Anwendung auf Windows eine der mit gcc-on-Fenster ports: http://wiki.answers.com/Q/How_do_you_install_GCC_in_Windows_XP –

Antwort

2
__declspec(align(16)) float a[4] = { 10, 20, 30, 40 }; 
__declspec(align(16)) float b[4] = { 0.1f, 0.1f, 0.1f, 0.1f }; 

__asm { 
    movups xmm0, a; // could be movaps if array aligned 
    mulps xmm0, b; 
    movups b, xmm0; // could be movaps if array aligned 
} 

Ich bin nicht sicher über Visual C++ 6, aber es wird in Visual C++ arbeiten 2008

+0

danke dafür, ich werde es versuchen nächste Chance bekomme ich :) – horseyguy

+1

TBH Wenn Sie die Float-Arrays auf 16 Bytes ausrichten, können Sie auch ein movaps als verwenden es wird viel schneller sein ... – Goz

+1

@Goz, fügte Ihre Notiz als Antwort hinzu. Ich habe versucht, eine exakte Kopie der Frage zu schreiben, und fügte '__declspec (align (16))' aus Gewohnheit hinzu –