changeset 1182:6e5d377573e1

fixed 64bit inline asm issues
author thomask
date Thu, 12 Oct 2006 15:00:43 +0000
parents 1b8d07c28573
children 95444069a9c3
files run/a/asm_packsswb_01_A.d run/a/asm_packuswb_01_A.d run/a/asm_paddsw_01_A.d run/a/asm_paddusb_01_A.d run/a/asm_paddusw_01_A.d run/a/asm_paddw_01_A.d run/a/asm_pand_01_A.d run/a/asm_pandn_01_A.d run/a/asm_pcmpeqb_01_A.d run/a/asm_pcmpeqd_01_A.d run/a/asm_pcmpeqw_01_A.d run/a/asm_pcmpgtb_01_A.d run/a/asm_pcmpgtd_01_A.d run/a/asm_pcmpgtw_01_A.d run/a/asm_pextrw_01_A.d run/a/asm_pfcmpeq_01_B.d run/a/asm_pfcmpge_01_A.d run/a/asm_pfcmpge_01_B.d run/a/asm_pfcmpgt_01_A.d run/a/asm_pfcmpgt_01_B.d run/a/asm_pinsrw_01_C.d run/a/asm_pinsrw_01_D.d run/a/asm_pmaxsw_01_A.d run/a/asm_pmaxub_01_A.d run/a/asm_pminsub_01_A.d run/a/asm_pminsw_01_A.d run/a/asm_pmulhuw_01_A.d run/a/asm_pmulhw_01_A.d run/a/asm_pmullw_01_A.d run/a/asm_pshufd_01_A.d run/a/asm_rdtsc_01.d
diffstat 31 files changed, 667 insertions(+), 250 deletions(-) [+]
line wrap: on
line diff
--- a/run/a/asm_packsswb_01_A.d	Fri Oct 06 06:57:24 2006 +0000
+++ b/run/a/asm_packsswb_01_A.d	Thu Oct 12 15:00:43 2006 +0000
@@ -20,14 +20,28 @@
 		short* b = [cast(short)9, 8, -7, 6, -5, 4, -3, 2];
 		byte* c = new byte[16];
 
-		asm{
-			mov EAX, a;
-			movdqu XMM0, [EAX];
-			mov EAX, b;
-			movdqu XMM1, [EAX];
-			packsswb XMM0, XMM1;
-			mov EAX, c;
-			movdqu [EAX], XMM0;
+		static if(size_t.sizeof == 4){
+			asm{
+				mov EAX, a;
+				movdqu XMM0, [EAX];
+				mov EAX, b;
+				movdqu XMM1, [EAX];
+				packsswb 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];
+				packsswb XMM0, XMM1;
+				mov RAX, c;
+				movdqu [RAX], XMM0;
+			}
+		}else{
+			static assert(0, "unhandled pointer size");
 		}
 
 		if(c[0] != 1){
--- a/run/a/asm_packuswb_01_A.d	Fri Oct 06 06:57:24 2006 +0000
+++ b/run/a/asm_packuswb_01_A.d	Thu Oct 12 15:00:43 2006 +0000
@@ -20,14 +20,28 @@
 		short* b = [cast(short)9, 8, -7, 6, -5, 4, -3, 2];
 		byte* c = new byte[16];
 
-		asm{
-			mov EAX, a;
-			movdqu XMM0, [EAX];
-			mov EAX, b;
-			movdqu XMM1, [EAX];
-			packuswb XMM0, XMM1;
-			mov EAX, c;
-			movdqu [EAX], XMM0;
+		static if(size_t.sizeof == 4){
+			asm{
+				mov EAX, a;
+				movdqu XMM0, [EAX];
+				mov EAX, b;
+				movdqu XMM1, [EAX];
+				packuswb 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];
+				packuswb XMM0, XMM1;
+				mov RAX, c;
+				movdqu [RAX], XMM0;
+			}
+		}else{
+			static assert(0, "unhandled pointer size");
 		}
 
 		if(c[0] != 1){
--- a/run/a/asm_paddsw_01_A.d	Fri Oct 06 06:57:24 2006 +0000
+++ b/run/a/asm_paddsw_01_A.d	Thu Oct 12 15:00:43 2006 +0000
@@ -20,14 +20,28 @@
 		short* b = [cast(short)short.max, -8, -7, -6, -5, -4, -3, -2];
 		short* c = new short[8];
 
-		asm{
-			mov EAX, a;
-			movdqu XMM0, [EAX];
-			mov EAX, b;
-			movdqu XMM1, [EAX];
-			paddsw XMM0, XMM1;
-			mov EAX, c;
-			movdqu [EAX], XMM0;
+		static if(size_t.sizeof == 4){
+			asm{
+				mov EAX, a;
+				movdqu XMM0, [EAX];
+				mov EAX, b;
+				movdqu XMM1, [EAX];
+				paddsw 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];
+				paddsw XMM0, XMM1;
+				mov RAX, c;
+				movdqu [RAX], XMM0;
+			}
+		}else{
+			static assert(0, "unhandled pointer size");
 		}
 
 		if(c[0] != short.max){
--- a/run/a/asm_paddusb_01_A.d	Fri Oct 06 06:57:24 2006 +0000
+++ b/run/a/asm_paddusb_01_A.d	Thu Oct 12 15:00:43 2006 +0000
@@ -20,14 +20,28 @@
 		ubyte* b = [cast(ubyte)ubyte.max, 7, 6, 5, 4, 3, 2, 1, 0, 1, 2, 3, 4, 5, 6, 7];
 		ubyte* c = new ubyte[16];
 
-		asm{
-			mov EAX, a;
-			movdqu XMM0, [EAX];
-			mov EAX, b;
-			movdqu XMM1, [EAX];
-			paddusb XMM0, XMM1;
-			mov EAX, c;
-			movdqu [EAX], XMM0;
+		static if(size_t.sizeof == 4){
+			asm{
+				mov EAX, a;
+				movdqu XMM0, [EAX];
+				mov EAX, b;
+				movdqu XMM1, [EAX];
+				paddusb 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];
+				paddusb XMM0, XMM1;
+				mov RAX, c;
+				movdqu [RAX], XMM0;
+			}
+		}else{
+			static assert(0, "unhandled pointer size");
 		}
 
 		if(c[0] != ubyte.max){
--- a/run/a/asm_paddusw_01_A.d	Fri Oct 06 06:57:24 2006 +0000
+++ b/run/a/asm_paddusw_01_A.d	Thu Oct 12 15:00:43 2006 +0000
@@ -20,14 +20,28 @@
 		ushort* b = [cast(ushort)ushort.max, 8, 7, 6, 5, 4, 3, 2];
 		ushort* c = new ushort[8];
 
-		asm{
-			mov EAX, a;
-			movdqu XMM0, [EAX];
-			mov EAX, b;
-			movdqu XMM1, [EAX];
-			paddusw XMM0, XMM1;
-			mov EAX, c;
-			movdqu [EAX], XMM0;
+		static if(size_t.sizeof == 4){
+			asm{
+				mov EAX, a;
+				movdqu XMM0, [EAX];
+				mov EAX, b;
+				movdqu XMM1, [EAX];
+				paddusw 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];
+				paddusw XMM0, XMM1;
+				mov RAX, c;
+				movdqu [RAX], XMM0;
+			}
+		}else{
+			static assert(0, "unhandled pointer size");
 		}
 
 		if(c[0] != ushort.max){
--- a/run/a/asm_paddw_01_A.d	Fri Oct 06 06:57:24 2006 +0000
+++ b/run/a/asm_paddw_01_A.d	Thu Oct 12 15:00:43 2006 +0000
@@ -20,14 +20,28 @@
 		short* b = [cast(short)-9, -8, -7, -6, -5, -4, -3, -2];
 		short* c = new short[8];
 
-		asm{
-			mov EAX, a;
-			movdqu XMM0, [EAX];
-			mov EAX, b;
-			movdqu XMM1, [EAX];
-			paddw XMM0, XMM1;
-			mov EAX, c;
-			movdqu [EAX], XMM0;
+		static if(size_t.sizeof == 4){
+			asm{
+				mov EAX, a;
+				movdqu XMM0, [EAX];
+				mov EAX, b;
+				movdqu XMM1, [EAX];
+				paddw 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];
+				paddw XMM0, XMM1;
+				mov RAX, c;
+				movdqu [RAX], XMM0;
+			}
+		}else{
+			static assert(0, "unhandled pointer size");
 		}
 
 		if(c[0] != -8){
--- a/run/a/asm_pand_01_A.d	Fri Oct 06 06:57:24 2006 +0000
+++ b/run/a/asm_pand_01_A.d	Thu Oct 12 15:00:43 2006 +0000
@@ -26,14 +26,28 @@
 		];
 		ushort* c = new ushort[8];
 
-		asm{
-			mov EAX, a;
-			movdqu XMM0, [EAX];
-			mov EAX, b;
-			movdqu XMM1, [EAX];
-			pand XMM0, XMM1;
-			mov EAX, c;
-			movdqu [EAX], XMM0;
+		static if(size_t.sizeof == 4){
+			asm{
+				mov EAX, a;
+				movdqu XMM0, [EAX];
+				mov EAX, b;
+				movdqu XMM1, [EAX];
+				pand 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];
+				pand XMM0, XMM1;
+				mov RAX, c;
+				movdqu [RAX], XMM0;
+			}
+		}else{
+			static assert(0, "unhandled pointer size");
 		}
 
 		if(c[0] != (a[0] & b[0])){
--- a/run/a/asm_pandn_01_A.d	Fri Oct 06 06:57:24 2006 +0000
+++ b/run/a/asm_pandn_01_A.d	Thu Oct 12 15:00:43 2006 +0000
@@ -26,14 +26,28 @@
 		];
 		ushort* c = new ushort[8];
 
-		asm{
-			mov EAX, a;
-			movdqu XMM0, [EAX];
-			mov EAX, b;
-			movdqu XMM1, [EAX];
-			pandn XMM0, XMM1;
-			mov EAX, c;
-			movdqu [EAX], XMM0;
+		static if(size_t.sizeof == 4){
+			asm{
+				mov EAX, a;
+				movdqu XMM0, [EAX];
+				mov EAX, b;
+				movdqu XMM1, [EAX];
+				pandn 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];
+				pandn XMM0, XMM1;
+				mov RAX, c;
+				movdqu [RAX], XMM0;
+			}
+		}else{
+			static assert(0, "unhandled pointer size");
 		}
 
 		if(c[0] != ((a[0] ^ 0xFFFF) & b[0])){
--- a/run/a/asm_pcmpeqb_01_A.d	Fri Oct 06 06:57:24 2006 +0000
+++ b/run/a/asm_pcmpeqb_01_A.d	Thu Oct 12 15:00:43 2006 +0000
@@ -20,14 +20,28 @@
 		byte* b = [cast(byte)1, 0, byte.min, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 16];
 		ubyte* c = new ubyte[16];
 
-		asm{
-			mov EAX, a;
-			movdqu XMM0, [EAX];
-			mov EAX, b;
-			movdqu XMM1, [EAX];
-			pcmpeqb XMM0, XMM1;
-			mov EAX, c;
-			movdqu [EAX], XMM0;
+		static if(size_t.sizeof == 4){
+			asm{
+				mov EAX, a;
+				movdqu XMM0, [EAX];
+				mov EAX, b;
+				movdqu XMM1, [EAX];
+				pcmpeqb 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];
+				pcmpeqb XMM0, XMM1;
+				mov RAX, c;
+				movdqu [RAX], XMM0;
+			}
+		}else{
+			static assert(0, "unhandled pointer size");
 		}
 
 		if(c[0] != 0xFF){
--- a/run/a/asm_pcmpeqd_01_A.d	Fri Oct 06 06:57:24 2006 +0000
+++ b/run/a/asm_pcmpeqd_01_A.d	Thu Oct 12 15:00:43 2006 +0000
@@ -20,14 +20,28 @@
 		int* b = [cast(int)0, 3, 1, 4];
 		uint* c = new uint[4];
 
-		asm{
-			mov EAX, a;
-			movdqu XMM0, [EAX];
-			mov EAX, b;
-			movdqu XMM1, [EAX];
-			pcmpeqd XMM0, XMM1;
-			mov EAX, c;
-			movdqu [EAX], XMM0;
+		static if(size_t.sizeof == 4){
+			asm{
+				mov EAX, a;
+				movdqu XMM0, [EAX];
+				mov EAX, b;
+				movdqu XMM1, [EAX];
+				pcmpeqd 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];
+				pcmpeqd XMM0, XMM1;
+				mov RAX, c;
+				movdqu [RAX], XMM0;
+			}
+		}else{
+			static assert(0, "unhandled pointer size");
 		}
 
 		if(c[0] != 0xFFFF_FFFF){
--- a/run/a/asm_pcmpeqw_01_A.d	Fri Oct 06 06:57:24 2006 +0000
+++ b/run/a/asm_pcmpeqw_01_A.d	Thu Oct 12 15:00:43 2006 +0000
@@ -20,14 +20,28 @@
 		short* b = [cast(short)1, 0, byte.min, -5, -4, -3, -2, 8];
 		ushort* c = new ushort[8];
 
-		asm{
-			mov EAX, a;
-			movdqu XMM0, [EAX];
-			mov EAX, b;
-			movdqu XMM1, [EAX];
-			pcmpeqw XMM0, XMM1;
-			mov EAX, c;
-			movdqu [EAX], XMM0;
+		static if(size_t.sizeof == 4){
+			asm{
+				mov EAX, a;
+				movdqu XMM0, [EAX];
+				mov EAX, b;
+				movdqu XMM1, [EAX];
+				pcmpeqw 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];
+				pcmpeqw XMM0, XMM1;
+				mov RAX, c;
+				movdqu [RAX], XMM0;
+			}
+		}else{
+			static assert(0, "unhandled pointer size");
 		}
 
 		if(c[0] != 0xFFFF){
--- a/run/a/asm_pcmpgtb_01_A.d	Fri Oct 06 06:57:24 2006 +0000
+++ b/run/a/asm_pcmpgtb_01_A.d	Thu Oct 12 15:00:43 2006 +0000
@@ -20,14 +20,28 @@
 		byte* b = [cast(byte)1, 3, 2, 4, 6, 5, 7, 9, 8, 10, 12, 11, 13, 16, 15, 14];
 		ubyte* c = new ubyte[16];
 
-		asm{
-			mov EAX, a;
-			movdqu XMM0, [EAX];
-			mov EAX, b;
-			movdqu XMM1, [EAX];
-			pcmpgtb XMM0, XMM1;
-			mov EAX, c;
-			movdqu [EAX], XMM0;
+		static if(size_t.sizeof == 4){
+			asm{
+				mov EAX, a;
+				movdqu XMM0, [EAX];
+				mov EAX, b;
+				movdqu XMM1, [EAX];
+				pcmpgtb 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];
+				pcmpgtb XMM0, XMM1;
+				mov RAX, c;
+				movdqu [RAX], XMM0;
+			}
+		}else{
+			static assert(0, "unhandled pointer size");
 		}
 
 		if(c[0] != 0){
--- a/run/a/asm_pcmpgtd_01_A.d	Fri Oct 06 06:57:24 2006 +0000
+++ b/run/a/asm_pcmpgtd_01_A.d	Thu Oct 12 15:00:43 2006 +0000
@@ -20,14 +20,28 @@
 		int* b = [cast(int)0, 1, 1, 4];
 		uint* c = new uint[4];
 
-		asm{
-			mov EAX, a;
-			movdqu XMM0, [EAX];
-			mov EAX, b;
-			movdqu XMM1, [EAX];
-			pcmpgtd XMM0, XMM1;
-			mov EAX, c;
-			movdqu [EAX], XMM0;
+		static if(size_t.sizeof == 4){
+			asm{
+				mov EAX, a;
+				movdqu XMM0, [EAX];
+				mov EAX, b;
+				movdqu XMM1, [EAX];
+				pcmpgtd 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];
+				pcmpgtd XMM0, XMM1;
+				mov RAX, c;
+				movdqu [RAX], XMM0;
+			}
+		}else{
+			static assert(0, "unhandled pointer size");
 		}
 
 		if(c[0] != 0){
--- a/run/a/asm_pcmpgtw_01_A.d	Fri Oct 06 06:57:24 2006 +0000
+++ b/run/a/asm_pcmpgtw_01_A.d	Thu Oct 12 15:00:43 2006 +0000
@@ -20,14 +20,28 @@
 		short* b = [cast(short)1, 0, byte.min, -5, -4, -3, -2, 8];
 		ushort* c = new ushort[8];
 
-		asm{
-			mov EAX, a;
-			movdqu XMM0, [EAX];
-			mov EAX, b;
-			movdqu XMM1, [EAX];
-			pcmpgtw XMM0, XMM1;
-			mov EAX, c;
-			movdqu [EAX], XMM0;
+		static if(size_t.sizeof == 4){
+			asm{
+				mov EAX, a;
+				movdqu XMM0, [EAX];
+				mov EAX, b;
+				movdqu XMM1, [EAX];
+				pcmpgtw 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];
+				pcmpgtw XMM0, XMM1;
+				mov RAX, c;
+				movdqu [RAX], XMM0;
+			}
+		}else{
+			static assert(0, "unhandled pointer size");
 		}
 
 		if(c[0] != 0){
--- a/run/a/asm_pextrw_01_A.d	Fri Oct 06 06:57:24 2006 +0000
+++ b/run/a/asm_pextrw_01_A.d	Thu Oct 12 15:00:43 2006 +0000
@@ -20,13 +20,26 @@
 		uint a;
 		uint b;
 
-		asm{
-			mov EAX, x;
-			movdqu XMM0, [EAX];
-			pextrw EAX, XMM0, 5;
-			mov a, EAX;
-			pextrw EDX, XMM0, 1;
-			mov b, EDX;
+		static if(size_t.sizeof == 4){
+			asm{
+				mov EAX, x;
+				movdqu XMM0, [EAX];
+				pextrw EAX, XMM0, 5;
+				mov a, EAX;
+				pextrw EDX, XMM0, 1;
+				mov b, EDX;
+			}
+		}else static if(size_t.sizeof == 8){
+			asm{
+				mov RAX, x;
+				movdqu XMM0, [RAX];
+				pextrw EAX, XMM0, 5;
+				mov a, EAX;
+				pextrw EDX, XMM0, 1;
+				mov b, EDX;
+			}
+		}else{
+			static assert(0, "unhandled pointer size");
 		}
 
 		if(a != 0xFFFF){
--- a/run/a/asm_pfcmpeq_01_B.d	Fri Oct 06 06:57:24 2006 +0000
+++ b/run/a/asm_pfcmpeq_01_B.d	Thu Oct 12 15:00:43 2006 +0000
@@ -20,15 +20,30 @@
 		float* b = [123.0f, 456.0f];
 		uint* c = new uint[2];
 
-		asm{
-			mov EAX, a;
-			movq MM0, [EAX];
-			mov EAX, b;
-			movq MM1, [EAX];
-			pfcmpeq MM0, MM1;
-			mov EAX, c;
-			movq [EAX], MM0;
-			emms;
+		static if(size_t.sizeof == 4){
+			asm{
+				mov EAX, a;
+				movq MM0, [EAX];
+				mov EAX, b;
+				movq MM1, [EAX];
+				pfcmpeq MM0, MM1;
+				mov EAX, c;
+				movq [EAX], MM0;
+				emms;
+			}
+		}else static if(size_t.sizeof == 8){
+			asm{
+				mov RAX, a;
+				movq MM0, [RAX];
+				mov RAX, b;
+				movq MM1, [RAX];
+				pfcmpeq MM0, MM1;
+				mov RAX, c;
+				movq [RAX], MM0;
+				emms;
+			}
+		}else{
+			static assert(0, "unhandled pointer size");
 		}
 
 		if(c[0] != uint.max){
--- a/run/a/asm_pfcmpge_01_A.d	Fri Oct 06 06:57:24 2006 +0000
+++ b/run/a/asm_pfcmpge_01_A.d	Thu Oct 12 15:00:43 2006 +0000
@@ -20,14 +20,28 @@
 		float* b = [124.0f, 456.0f];
 		uint* c = new uint[2];
 
-		asm{
-			mov EAX, a;
-			movq MM0, [EAX];
-			mov EAX, b;
-			pfcmpge MM0, [EAX];
-			mov EAX, c;
-			movq [EAX], MM0;
-			emms;
+		static if(size_t.sizeof == 4){
+			asm{
+				mov EAX, a;
+				movq MM0, [EAX];
+				mov EAX, b;
+				pfcmpge MM0, [EAX];
+				mov EAX, c;
+				movq [EAX], MM0;
+				emms;
+			}
+		}else static if(size_t.sizeof == 8){
+			asm{
+				mov RAX, a;
+				movq MM0, [RAX];
+				mov RAX, b;
+				pfcmpge MM0, [RAX];
+				mov RAX, c;
+				movq [RAX], MM0;
+				emms;
+			}
+		}else{
+			static assert(0, "unhandled pointer size");
 		}
 
 		if(c[0] != 0){
--- a/run/a/asm_pfcmpge_01_B.d	Fri Oct 06 06:57:24 2006 +0000
+++ b/run/a/asm_pfcmpge_01_B.d	Thu Oct 12 15:00:43 2006 +0000
@@ -20,15 +20,30 @@
 		float* b = [124.0f, 456.0f];
 		uint* c = new uint[2];
 
-		asm{
-			mov EAX, a;
-			movq MM0, [EAX];
-			mov EAX, b;
-			movq MM1, [EAX];
-			pfcmpge MM0, MM1;
-			mov EAX, c;
-			movq [EAX], MM0;
-			emms;
+		static if(size_t.sizeof == 4){
+			asm{
+				mov EAX, a;
+				movq MM0, [EAX];
+				mov EAX, b;
+				movq MM1, [EAX];
+				pfcmpge MM0, MM1;
+				mov EAX, c;
+				movq [EAX], MM0;
+				emms;
+			}
+		}else static if(size_t.sizeof == 8){
+			asm{
+				mov RAX, a;
+				movq MM0, [RAX];
+				mov RAX, b;
+				movq MM1, [RAX];
+				pfcmpge MM0, MM1;
+				mov RAX, c;
+				movq [RAX], MM0;
+				emms;
+			}
+		}else{
+			static assert(0, "unhandled pointer size");
 		}
 
 		if(c[0] != 0){
--- a/run/a/asm_pfcmpgt_01_A.d	Fri Oct 06 06:57:24 2006 +0000
+++ b/run/a/asm_pfcmpgt_01_A.d	Thu Oct 12 15:00:43 2006 +0000
@@ -21,14 +21,28 @@
 		float* b = [124.0f, 456.0f];
 		uint* c = new uint[2];
 
-		asm{
-			mov EAX, a;
-			movq MM0, [EAX];
-			mov EAX, b;
-			pfcmpgt MM0, [EAX];
-			mov EAX, c;
-			movq [EAX], MM0;
-			emms;
+		static if(size_t.sizeof == 4){
+			asm{
+				mov EAX, a;
+				movq MM0, [EAX];
+				mov EAX, b;
+				pfcmpgt MM0, [EAX];
+				mov EAX, c;
+				movq [EAX], MM0;
+				emms;
+			}
+		}else static if(size_t.sizeof == 8){
+			asm{
+				mov RAX, a;
+				movq MM0, [RAX];
+				mov RAX, b;
+				pfcmpgt MM0, [RAX];
+				mov RAX, c;
+				movq [RAX], MM0;
+				emms;
+			}
+		}else{
+			static assert(0, "unhandled pointer size");
 		}
 
 		if(c[0] != 0){
--- a/run/a/asm_pfcmpgt_01_B.d	Fri Oct 06 06:57:24 2006 +0000
+++ b/run/a/asm_pfcmpgt_01_B.d	Thu Oct 12 15:00:43 2006 +0000
@@ -21,15 +21,30 @@
 		float* b = [124.0f, 456.0f];
 		uint* c = new uint[2];
 
-		asm{
-			mov EAX, a;
-			movq MM0, [EAX];
-			mov EAX, b;
-			movq MM1, [EAX];
-			pfcmpgt MM0, MM1;
-			mov EAX, c;
-			movq [EAX], MM0;
-			emms;
+		static if(size_t.sizeof == 4){
+			asm{
+				mov EAX, a;
+				movq MM0, [EAX];
+				mov EAX, b;
+				movq MM1, [EAX];
+				pfcmpgt MM0, MM1;
+				mov EAX, c;
+				movq [EAX], MM0;
+				emms;
+			}
+		}else static if(size_t.sizeof == 8){
+			asm{
+				mov RAX, a;
+				movq MM0, [RAX];
+				mov RAX, b;
+				movq MM1, [RAX];
+				pfcmpgt MM0, MM1;
+				mov RAX, c;
+				movq [RAX], MM0;
+				emms;
+			}
+		}else{
+			static assert(0, "unhandled pointer size");
 		}
 
 		if(c[0] != 0){
--- a/run/a/asm_pinsrw_01_C.d	Fri Oct 06 06:57:24 2006 +0000
+++ b/run/a/asm_pinsrw_01_C.d	Thu Oct 12 15:00:43 2006 +0000
@@ -19,15 +19,30 @@
 		ushort* a = [cast(ushort)1, 2, 3, 4, 5, 0xFFFF, 7, 0];
 		ushort* b = new ushort[8];
 
-		asm{
-			mov EAX, a;
-			movdqu XMM0, [EAX];
-			mov EAX, 0x12AB_34CD;
-			mov EBX, 0xFDCE_0010;
-			pinsrw XMM0, EAX, 0;
-			pinsrw XMM0, EBX, 7;
-			mov EAX, b;
-			movdqu [EAX], XMM0;
+		static if(size_t.sizeof == 4){
+			asm{
+				mov EAX, a;
+				movdqu XMM0, [EAX];
+				mov EAX, 0x12AB_34CD;
+				mov EBX, 0xFDCE_0010;
+				pinsrw XMM0, EAX, 0;
+				pinsrw XMM0, EBX, 7;
+				mov EAX, b;
+				movdqu [EAX], XMM0;
+			}
+		}else static if(size_t.sizeof == 8){
+			asm{
+				mov RAX, a;
+				movdqu XMM0, [RAX];
+				mov EAX, 0x12AB_34CD;
+				mov EBX, 0xFDCE_0010;
+				pinsrw XMM0, EAX, 0;
+				pinsrw XMM0, EBX, 7;
+				mov RAX, b;
+				movdqu [RAX], XMM0;
+			}
+		}else{
+			static assert(0, "unhandled pointer size");
 		}
 
 		if(b[0] != 0x34CD){
--- a/run/a/asm_pinsrw_01_D.d	Fri Oct 06 06:57:24 2006 +0000
+++ b/run/a/asm_pinsrw_01_D.d	Thu Oct 12 15:00:43 2006 +0000
@@ -22,13 +22,26 @@
 		ushort x = 0x34CD;
 		ushort y = 0x0010;
 
-		asm{
-			mov EAX, a;
-			movdqu XMM0, [EAX];
-			pinsrw XMM0, x, 0;
-			pinsrw XMM0, y, 7;
-			mov EAX, b;
-			movdqu [EAX], XMM0;
+		static if(size_t.sizeof == 4){
+			asm{
+				mov EAX, a;
+				movdqu XMM0, [EAX];
+				pinsrw XMM0, x, 0;
+				pinsrw XMM0, y, 7;
+				mov EAX, b;
+				movdqu [EAX], XMM0;
+			}
+		}else static if(size_t.sizeof == 8){
+			asm{
+				mov RAX, a;
+				movdqu XMM0, [RAX];
+				pinsrw XMM0, x, 0;
+				pinsrw XMM0, y, 7;
+				mov RAX, b;
+				movdqu [RAX], XMM0;
+			}
+		}else{
+			static assert(0, "unhandled pointer size");
 		}
 
 		if(b[0] != 0x34CD){
--- a/run/a/asm_pmaxsw_01_A.d	Fri Oct 06 06:57:24 2006 +0000
+++ b/run/a/asm_pmaxsw_01_A.d	Thu Oct 12 15:00:43 2006 +0000
@@ -21,14 +21,28 @@
 		short* b = [cast(short)-9, 10, -11, -12, 13, 14, 0xFFF, 1];
 		short* c = new short[8];
 
-		asm{
-			mov EAX, a;
-			movdqu XMM0, [EAX];
-			mov EAX, b;
-			movdqu XMM1, [EAX];
-			pmaxsw XMM0, XMM1;
-			mov EAX, c;
-			movdqu [EAX], XMM0;
+		static if(size_t.sizeof == 4){
+			asm{
+				mov EAX, a;
+				movdqu XMM0, [EAX];
+				mov EAX, b;
+				movdqu XMM1, [EAX];
+				pmaxsw 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];
+				pmaxsw XMM0, XMM1;
+				mov RAX, c;
+				movdqu [RAX], XMM0;
+			}
+		}else{
+			static assert(0, "unhandled pointer size");
 		}
 
 		if(c[0] != 1){
--- a/run/a/asm_pmaxub_01_A.d	Fri Oct 06 06:57:24 2006 +0000
+++ b/run/a/asm_pmaxub_01_A.d	Thu Oct 12 15:00:43 2006 +0000
@@ -20,14 +20,28 @@
 		ubyte* b = [cast(ubyte)15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 17];
 		ubyte* c = new ubyte[16];
 
-		asm{
-			mov EAX, a;
-			movdqu XMM0, [EAX];
-			mov EAX, b;
-			movdqu XMM1, [EAX];
-			pmaxub XMM0, XMM1;
-			mov EAX, c;
-			movdqu [EAX], XMM0;
+		static if(size_t.sizeof == 4){
+			asm{
+				mov EAX, a;
+				movdqu XMM0, [EAX];
+				mov EAX, b;
+				movdqu XMM1, [EAX];
+				pmaxub 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];
+				pmaxub XMM0, XMM1;
+				mov RAX, c;
+				movdqu [RAX], XMM0;
+			}
+		}else{
+			static assert(0, "unhandled pointer size");
 		}
 
 		if(c[0] != 15){
--- a/run/a/asm_pminsub_01_A.d	Fri Oct 06 06:57:24 2006 +0000
+++ b/run/a/asm_pminsub_01_A.d	Thu Oct 12 15:00:43 2006 +0000
@@ -20,14 +20,28 @@
 		ubyte* b = [cast(ubyte) 1, 14, 13, 12, 11, 10, 9, 8, 7,  6,  5,  4,  3,  2,  1, 17];
 		ubyte* c = new ubyte[16];
 
-		asm{
-			mov EAX, a;
-			movdqu XMM0, [EAX];
-			mov EAX, b;
-			movdqu XMM1, [EAX];
-			pminub XMM0, XMM1;
-			mov EAX, c;
-			movdqu [EAX], XMM0;
+		static if(size_t.sizeof == 4){
+			asm{
+				mov EAX, a;
+				movdqu XMM0, [EAX];
+				mov EAX, b;
+				movdqu XMM1, [EAX];
+				pminub 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];
+				pminub XMM0, XMM1;
+				mov RAX, c;
+				movdqu [RAX], XMM0;
+			}
+		}else{
+			static assert(0, "unhandled pointer size");
 		}
 
 		if(c[0] != 1){
--- a/run/a/asm_pminsw_01_A.d	Fri Oct 06 06:57:24 2006 +0000
+++ b/run/a/asm_pminsw_01_A.d	Thu Oct 12 15:00:43 2006 +0000
@@ -20,14 +20,28 @@
 		short* b = [cast(short)-9, 10, -11, -12, 13, 14, 0xFFF, 1];
 		short* c = new short[8];
 
-		asm{
-			mov EAX, a;
-			movdqu XMM0, [EAX];
-			mov EAX, b;
-			movdqu XMM1, [EAX];
-			pminsw XMM0, XMM1;
-			mov EAX, c;
-			movdqu [EAX], XMM0;
+		static if(size_t.sizeof == 4){
+			asm{
+				mov EAX, a;
+				movdqu XMM0, [EAX];
+				mov EAX, b;
+				movdqu XMM1, [EAX];
+				pminsw 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];
+				pminsw XMM0, XMM1;
+				mov RAX, c;
+				movdqu [RAX], XMM0;
+			}
+		}else{
+			static assert(0, "unhandled pointer size");
 		}
 
 		if(c[0] != -9){
--- a/run/a/asm_pmulhuw_01_A.d	Fri Oct 06 06:57:24 2006 +0000
+++ b/run/a/asm_pmulhuw_01_A.d	Thu Oct 12 15:00:43 2006 +0000
@@ -21,14 +21,28 @@
 
 		ushort* c = new ushort[8];
 
-		asm{
-			mov EAX, a;
-			movdqu XMM0, [EAX];
-			mov EAX, b;
-			movdqu XMM1, [EAX];
-			pmulhuw XMM0, XMM1;
-			mov EAX, c;
-			movdqu [EAX], XMM0;
+		static if(size_t.sizeof == 4){
+			asm{
+				mov EAX, a;
+				movdqu XMM0, [EAX];
+				mov EAX, b;
+				movdqu XMM1, [EAX];
+				pmulhuw 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];
+				pmulhuw XMM0, XMM1;
+				mov RAX, c;
+				movdqu [RAX], XMM0;
+			}
+		}else{
+			static assert(0, "unhandled pointer size");
 		}
 
 		if(c[0] != 0){
--- a/run/a/asm_pmulhw_01_A.d	Fri Oct 06 06:57:24 2006 +0000
+++ b/run/a/asm_pmulhw_01_A.d	Thu Oct 12 15:00:43 2006 +0000
@@ -21,14 +21,28 @@
 
 		ushort* c = new ushort[8];
 
-		asm{
-			mov EAX, a;
-			movdqu XMM0, [EAX];
-			mov EAX, b;
-			movdqu XMM1, [EAX];
-			pmulhw XMM0, XMM1;
-			mov EAX, c;
-			movdqu [EAX], XMM0;
+		static if(size_t.sizeof == 4){
+			asm{
+				mov EAX, a;
+				movdqu XMM0, [EAX];
+				mov EAX, b;
+				movdqu XMM1, [EAX];
+				pmulhw 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];
+				pmulhw XMM0, XMM1;
+				mov RAX, c;
+				movdqu [RAX], XMM0;
+			}
+		}else{
+			static assert(0, "unhandled pointer size");
 		}
 
 		if(c[0] != 0xFFFF){
--- a/run/a/asm_pmullw_01_A.d	Fri Oct 06 06:57:24 2006 +0000
+++ b/run/a/asm_pmullw_01_A.d	Thu Oct 12 15:00:43 2006 +0000
@@ -21,14 +21,28 @@
 
 		ushort* c = new ushort[8];
 
-		asm{
-			mov EAX, a;
-			movdqu XMM0, [EAX];
-			mov EAX, b;
-			movdqu XMM1, [EAX];
-			pmullw XMM0, XMM1;
-			mov EAX, c;
-			movdqu [EAX], XMM0;
+		static if(size_t.sizeof == 4){
+			asm{
+				mov EAX, a;
+				movdqu XMM0, [EAX];
+				mov EAX, b;
+				movdqu XMM1, [EAX];
+				pmullw 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];
+				pmullw XMM0, XMM1;
+				mov RAX, c;
+				movdqu [RAX], XMM0;
+			}
+		}else{
+			static assert(0, "unhandled pointer size");
 		}
 
 		if(c[0] != 0xFFFE){
--- a/run/a/asm_pshufd_01_A.d	Fri Oct 06 06:57:24 2006 +0000
+++ b/run/a/asm_pshufd_01_A.d	Thu Oct 12 15:00:43 2006 +0000
@@ -16,28 +16,31 @@
 	int main(){
 		haveSSE2!()();
 
-		const float[4] A = [1.0f, 2.0f, 3.0f, 4.0f];
-		const float[4] B = [5.0f, 6.0f, 7.0f, 8.0f];
+		float* a = [1.0f, 2.0f, 3.0f, 4.0f];
+		float* b = [5.0f, 6.0f, 7.0f, 8.0f];
 
-		float[4] c;
+		float* c = new float[4];
 
 		asm{
-			movups XMM0, A;
-			movups XMM1, B;
+			mov EAX, a;
+			movups XMM0, [EAX];
+			mov EAX, b;
+			movups XMM1, [EAX];
 			pshufd XMM0, XMM1, 0b01_01_00_10;
-			movups c, XMM0;
+			mov EAX, c;
+			movups [EAX], XMM0;
 		}
 
-		if(c[0] != 6.0f){
+		if(c[0] != 7.0f){
 			assert(0);
 		}
-		if(c[1] != 6.0f){
+		if(c[1] != 5.0f){
 			assert(0);
 		}
-		if(c[2] != 5.0f){
+		if(c[2] != 6.0f){
 			assert(0);
 		}
-		if(c[3] != 7.0f){
+		if(c[3] != 6.0f){
 			assert(0);
 		}
 
--- a/run/a/asm_rdtsc_01.d	Fri Oct 06 06:57:24 2006 +0000
+++ b/run/a/asm_rdtsc_01.d	Thu Oct 12 15:00:43 2006 +0000
@@ -4,8 +4,14 @@
 
 module dstress.run.a.asm_rdtsc_01;
 
-int main(){
-	version(D_InlineAsm){
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	int main(){
 		uint a1, a2;
 		uint b1, b2;
 
@@ -35,8 +41,8 @@
 		}
 
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
-}
\ No newline at end of file
+}else{
+	pragma(msg, "DSTRESS{XPASS}: no inline ASM support");
+	static assert(0);
+}