diff run/a/asm_pmaddwd_01_A.d @ 1290:e3d0dea394ab

partial inline asm review
author thomask
date Wed, 27 Dec 2006 11:59:48 +0000
parents 03c97933de98
children
line wrap: on
line diff
--- a/run/a/asm_pmaddwd_01_A.d	Wed Dec 27 11:59:35 2006 +0000
+++ b/run/a/asm_pmaddwd_01_A.d	Wed Dec 27 11:59:48 2006 +0000
@@ -17,17 +17,23 @@
 	int main(){
 		haveSSE2!()();
 
-		const short[8] A = [1, 2, 3, 4, 5, 6, 16, 1];
-		const short[8] B = [-9, 10, -11, -12, 13, 14, 0xFFF, 2];
+		short[] A = [1, 2, 3, 4, 5, 6, 16, 1];
+		short* a = A.ptr;
 
-		int[4] c;
+		short[] B = [-9, 10, -11, -12, 13, 14, 0xFFF, 2];
+		short* b = B.ptr;
+
+		int* c = (new int[4]).ptr;
 
-		asm{
-			movdqu XMM0, A;
-			movdqu XMM1, B;
-			pmaddwd XMM0, XMM1;
-			movdqu c, XMM0;
-		}
+			asm{
+				mov EAX, a;
+				movdqu XMM0, [EAX];
+				mov EAX, b;
+				movdqu XMM1, [EAX];
+				pmaddwd XMM0, XMM1;
+				mov EAX, c;
+				movdqu [EAX], XMM0;
+			}
 
 		if(c[0] != (1 * -9) + (2 * 10)){
 			assert(0);
@@ -35,10 +41,10 @@
 		if(c[1] != (3 * -11) + (4 * -12)){
 			assert(0);
 		}
-		if(c[2] != (5 * -12) + (6 * 13)){
+		if(c[2] != (5 * 13) + (6 * 14)){
 			assert(0);
 		}
-		if(c[3] != 0xFFF02){
+		if(c[3] != 0xFFF2){
 			assert(0);
 		}