diff run/a/asm_paddb_01_A.d @ 1285:229e630d4b1a

partuial inline asm review
author thomask
date Tue, 26 Dec 2006 14:21:37 +0000
parents 9dcac8d4e97f
children
line wrap: on
line diff
--- a/run/a/asm_paddb_01_A.d	Tue Dec 26 14:21:29 2006 +0000
+++ b/run/a/asm_paddb_01_A.d	Tue Dec 26 14:21:37 2006 +0000
@@ -16,7 +16,7 @@
 	int main(){
 		haveSSE2!()();
 
-		byte[] a = new byte[16];
+		byte* a = (new byte[16]).ptr;
 		a[0] = 1;
 		a[1] = 2;
 		a[2] = 3;
@@ -30,10 +30,11 @@
 		a[10] = 11;
 		a[11] = 12;
 		a[12] = 13;
+		a[13] = 14;
 		a[14] = 15;
 		a[15] = 16;
 
-		byte[] b = new byte[16];
+		byte* b = (new byte[16]).ptr;
 		b[0] = -8;
 		b[1] = -7;
 		b[2] = -6;
@@ -51,13 +52,30 @@
 		b[14] = 6;
 		b[15] = 7;
 
-		byte[] c = new byte[16];
+		byte* c = (new byte[16]).ptr;
 
-		asm{
-			movdqu XMM0, a;
-			movdqu XMM1, b;
-			paddb XMM0, XMM1;
-			movdqu c, XMM0;
+		static if(size_t.sizeof == 4){
+			asm{
+				mov EAX, a;
+				movdqu XMM0, [EAX];
+				mov EAX, b;
+				movdqu XMM1, [EAX];
+				paddb XMM0, XMM1;
+				mov EAX, c;
+				movdqu [EAX], XMM0;
+			}
+		}else static if(size_t.sizeof == 8){
+			asm{
+				mov RAX, a;
+				movdqu XMM0, [RAX];
+				mov RAX, b;
+				movdqu XMM1, [RAX];
+				paddb XMM0, XMM1;
+				mov RAX, c;
+				movdqu [RAX], XMM0;
+			}
+		}else{
+			static assert(0, "unhandled pointer size");
 		}
 
 		if(c[0] != -7){