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

partial inline asm review
author thomask
date Wed, 27 Dec 2006 11:59:48 +0000
parents 1b6d9acddb76
children
line wrap: on
line diff
--- a/run/a/asm_pmovmskb_01_A.d	Wed Dec 27 11:59:35 2006 +0000
+++ b/run/a/asm_pmovmskb_01_A.d	Wed Dec 27 11:59:48 2006 +0000
@@ -17,21 +17,35 @@
 	int main(){
 		haveSSE2!()();
 
-		const ubyte Y = 0b1000_0000;
-		const ubyte N = 0b0111_1111;
+		ubyte Y = 0b1000_0000;
+		ubyte N = 0b0111_1111;
 
-		const ubyte[16] A = [Y, N, Y, Y, N, N, Y, Y, Y, N, N, N, Y, N, N, Y];
+		ubyte[] A = [Y, N, Y, Y, N, N, Y, Y, Y, N, N, N, Y, N, N, Y];
+		ubyte* a = A.ptr;
 
 		int b;
 
-		asm{
-			mov EAX, 0x1234_5678;
-			movdqu XMM0, A;
-			pmovmskb EAX, XMM0;
-			mov b, EAX;
+		static if(size_t.sizeof == 4){
+			asm{
+				mov EAX, 0x1234_5678;
+				mov EAX, a;
+				movdqu XMM0, [EAX];
+				pmovmskb EAX, XMM0;
+				mov b, EAX;
+			}
+		}else static if(size_t.sizeof == 8){
+			asm{
+				mov EAX, 0x1234_5678;
+				mov RAX, a;
+				movdqu XMM0, [RAX];
+				pmovmskb EAX, XMM0;
+				mov b, EAX;
+			}
+		}else{
+			static assert(0, "unhandled pointer size");
 		}
 
-		if(b != 0b1011_0011_1000_1001){
+		if(b != 0b1001_0001_1100_1101){
 			assert(0);
 		}