changeset 1164:7fbe1218b3b5

fPIC fixes(32bit only)
author thomask
date Tue, 03 Oct 2006 19:09:21 +0000
parents c2a8690a9fca
children 17cd0fdc9f2a
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_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_pfrsqrt_01_A.d run/a/asm_pfrsqrt_01_B.d run/a/asm_pfrsqrtit1_01_A.d run/a/asm_pfrsqrtit1_01_B.d run/a/asm_pfsub_01_A.d run/a/asm_pfsub_01_B.d run/a/asm_pfsubr_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_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
diffstat 33 files changed, 499 insertions(+), 270 deletions(-) [+]
line wrap: on
line diff
--- a/run/a/asm_packsswb_01_A.d	Mon Oct 02 08:03:15 2006 +0000
+++ b/run/a/asm_packsswb_01_A.d	Tue Oct 03 19:09:21 2006 +0000
@@ -16,15 +16,18 @@
 	int main(){
 		haveSSE2!()();
 
-		static short[8] A = [1, -2, 3, -4, 5, -6, 7, -8];
-		static short[8] B = [9, 8, -7, 6, -5, 4, -3, 2];
-		byte[16] c;
+		short* a = [cast(short)1, -2, 3, -4, 5, -6, 7, -8];
+		short* b = [cast(short)9, 8, -7, 6, -5, 4, -3, 2];
+		byte* c = new byte[16];
 
 		asm{
-			movdqu XMM0, A;
-			movdqu XMM1, B;
+			mov EAX, a;
+			movdqu XMM0, [EAX];
+			mov EAX, b;
+			movdqu XMM1, [EAX];
 			packsswb XMM0, XMM1;
-			movdqu c, XMM0;
+			mov EAX, c;
+			movdqu [EAX], XMM0;
 		}
 
 		if(c[0] != 1){
--- a/run/a/asm_packuswb_01_A.d	Mon Oct 02 08:03:15 2006 +0000
+++ b/run/a/asm_packuswb_01_A.d	Tue Oct 03 19:09:21 2006 +0000
@@ -16,15 +16,18 @@
 	int main(){
 		haveSSE2!()();
 
-		static short[8] A = [1, -2, 3, -4, 5, -6, 7, -8];
-		static short[8] B = [9, 8, -7, 6, -5, 4, -3, 2];
-		byte[16] c;
+		short* a = [cast(short)1, -2, 3, -4, 5, -6, 7, -8];
+		short* b = [cast(short)9, 8, -7, 6, -5, 4, -3, 2];
+		byte* c = new byte[16];
 
 		asm{
-			movdqu XMM0, A;
-			movdqu XMM1, B;
+			mov EAX, a;
+			movdqu XMM0, [EAX];
+			mov EAX, b;
+			movdqu XMM1, [EAX];
 			packuswb XMM0, XMM1;
-			movdqu c, XMM0;
+			mov EAX, c;
+			movdqu [EAX], XMM0;
 		}
 
 		if(c[0] != 1){
--- a/run/a/asm_paddsw_01_A.d	Mon Oct 02 08:03:15 2006 +0000
+++ b/run/a/asm_paddsw_01_A.d	Tue Oct 03 19:09:21 2006 +0000
@@ -16,15 +16,18 @@
 	int main(){
 		haveSSE2!()();
 
-		static short[8] A = [1, short.min, 3, 4, 5, 6, 7, 8];
-		static short[8] B = [short.max, -8, -7, -6, -5, -4, -3, -2];
-		short[8] c;
+		short* a = [cast(short)1, short.min, 3, 4, 5, 6, 7, 8];
+		short* b = [cast(short)short.max, -8, -7, -6, -5, -4, -3, -2];
+		short* c = new short[8];
 
 		asm{
-			movdqu XMM0, A;
-			movdqu XMM1, B;
+			mov EAX, a;
+			movdqu XMM0, [EAX];
+			mov EAX, b;
+			movdqu XMM1, [EAX];
 			paddsw XMM0, XMM1;
-			movdqu c, XMM0;
+			mov EAX, c;
+			movdqu [EAX], XMM0;
 		}
 
 		if(c[0] != short.max){
--- a/run/a/asm_paddusb_01_A.d	Mon Oct 02 08:03:15 2006 +0000
+++ b/run/a/asm_paddusb_01_A.d	Tue Oct 03 19:09:21 2006 +0000
@@ -16,15 +16,18 @@
 	int main(){
 		haveSSE2!()();
 
-		static ubyte[16] A = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16];
-		static ubyte[16] B = [ubyte.max, 7, 6, 5, 4, 3, 2, 1, 0, 1, 2, 3, 4, 5, 6, 7];
-		ubyte[16] c;
+		ubyte* a = [cast(ubyte)1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16];
+		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{
-			movdqu XMM0, A;
-			movdqu XMM1, B;
+			mov EAX, a;
+			movdqu XMM0, [EAX];
+			mov EAX, b;
+			movdqu XMM1, [EAX];
 			paddusb XMM0, XMM1;
-			movdqu c, XMM0;
+			mov EAX, c;
+			movdqu [EAX], XMM0;
 		}
 
 		if(c[0] != ubyte.max){
--- a/run/a/asm_paddusw_01_A.d	Mon Oct 02 08:03:15 2006 +0000
+++ b/run/a/asm_paddusw_01_A.d	Tue Oct 03 19:09:21 2006 +0000
@@ -16,15 +16,18 @@
 	int main(){
 		haveSSE2!()();
 
-		static ushort[8] A = [1, 0, 3, 4, 5, 6, 7, 8];
-		static ushort[8] B = [ushort.max, 8, 7, 6, 5, 4, 3, 2];
-		ushort[8] c;
+		ushort* a = [cast(ushort)1, 0, 3, 4, 5, 6, 7, 8];
+		ushort* b = [cast(ushort)ushort.max, 8, 7, 6, 5, 4, 3, 2];
+		ushort* c = new ushort[8];
 
 		asm{
-			movdqu XMM0, A;
-			movdqu XMM1, B;
+			mov EAX, a;
+			movdqu XMM0, [EAX];
+			mov EAX, b;
+			movdqu XMM1, [EAX];
 			paddusw XMM0, XMM1;
-			movdqu c, XMM0;
+			mov EAX, c;
+			movdqu [EAX], XMM0;
 		}
 
 		if(c[0] != ushort.max){
--- a/run/a/asm_paddw_01_A.d	Mon Oct 02 08:03:15 2006 +0000
+++ b/run/a/asm_paddw_01_A.d	Tue Oct 03 19:09:21 2006 +0000
@@ -16,15 +16,18 @@
 	int main(){
 		haveSSE2!()();
 
-		static short[8] A = [1, 2, 3, 4, 5, 6, 7, 8];
-		static short[8] B = [-9, -8, -7, -6, -5, -4, -3, -2];
-		short[8] c;
+		short* a = [cast(short)1, 2, 3, 4, 5, 6, 7, 8];
+		short* b = [cast(short)-9, -8, -7, -6, -5, -4, -3, -2];
+		short* c = new short[8];
 
 		asm{
-			movdqu XMM0, A;
-			movdqu XMM1, B;
+			mov EAX, a;
+			movdqu XMM0, [EAX];
+			mov EAX, b;
+			movdqu XMM1, [EAX];
 			paddw XMM0, XMM1;
-			movdqu c, XMM0;
+			mov EAX, c;
+			movdqu [EAX], XMM0;
 		}
 
 		if(c[0] != -8){
--- a/run/a/asm_pand_01_A.d	Mon Oct 02 08:03:15 2006 +0000
+++ b/run/a/asm_pand_01_A.d	Tue Oct 03 19:09:21 2006 +0000
@@ -16,45 +16,48 @@
 	int main(){
 		haveSSE2!()();
 
-		static ushort[8] A = [
+		ushort* a = [cast(ushort)
 			0b01101100_01101110, 0b01101001_01101101, 0b01100011_01101011, 0b11100111_01100111,
 			0b11000110_11100110, 0b10001101_10011011, 0b00011011_10011011, 0b01100110_00000000
 		];
-		static ushort[8] B = [
+		ushort* b = [cast(ushort)
 			0b10000000_11000000, 0b01000000_01100000, 0b00100000_00110000, 0b00010000_00011000,
 			0b00001000_00001100, 0b00000100_00000110, 0b00000010_00000011, 0b11111111_10101010
 		];
-		ushort[8] c;
+		ushort* c = new ushort[8];
 
 		asm{
-			movdqu XMM0, A;
-			movdqu XMM1, B;
+			mov EAX, a;
+			movdqu XMM0, [EAX];
+			mov EAX, b;
+			movdqu XMM1, [EAX];
 			pand XMM0, XMM1;
-			movdqu c, XMM0;
+			mov EAX, c;
+			movdqu [EAX], XMM0;
 		}
 
-		if(c[0] != (A[0] & B[0])){
-			assert(0);
-		}
-		if(c[1] != (A[1] & B[1])){
+		if(c[0] != (a[0] & b[0])){
 			assert(0);
 		}
-		if(c[2] != (A[2] & B[2])){
+		if(c[1] != (a[1] & b[1])){
 			assert(0);
 		}
-		if(c[3] != (A[3] & B[3])){
+		if(c[2] != (a[2] & b[2])){
+			assert(0);
+		}
+		if(c[3] != (a[3] & b[3])){
 			assert(0);
 		}
-		if(c[4] != (A[4] & B[4])){
+		if(c[4] != (a[4] & b[4])){
 			assert(0);
 		}
-		if(c[5] != (A[5] & B[5])){
+		if(c[5] != (a[5] & b[5])){
 			assert(0);
 		}
-		if(c[6] != (A[6] & B[6])){
+		if(c[6] != (a[6] & b[6])){
 			assert(0);
 		}
-		if(c[7] != (A[7] & B[7])){
+		if(c[7] != (a[7] & b[7])){
 			assert(0);
 		}
 		return 0;
--- a/run/a/asm_pandn_01_A.d	Mon Oct 02 08:03:15 2006 +0000
+++ b/run/a/asm_pandn_01_A.d	Tue Oct 03 19:09:21 2006 +0000
@@ -16,45 +16,48 @@
 	int main(){
 		haveSSE2!()();
 
-		static ushort[8] A = [
+		ushort* a = [cast(ushort)
 			0b01101100_01101110, 0b01101001_01101101, 0b01100011_01101011, 0b11100111_01100111,
 			0b11000110_11100110, 0b10001101_10011011, 0b00011011_10011011, 0b01100110_00000000
 		];
-		static ushort[8] B = [
+		ushort* b = [cast(ushort)
 			0b10000000_11000000, 0b01000000_01100000, 0b00100000_00110000, 0b00010000_00011000,
 			0b00001000_00001100, 0b00000100_00000110, 0b00000010_00000011, 0b11111111_10101010
 		];
-		ushort[8] c;
+		ushort* c = new ushort[8];
 
 		asm{
-			movdqu XMM0, A;
-			movdqu XMM1, B;
+			mov EAX, a;
+			movdqu XMM0, [EAX];
+			mov EAX, b;
+			movdqu XMM1, [EAX];
 			pandn XMM0, XMM1;
-			movdqu c, XMM0;
+			mov EAX, c;
+			movdqu [EAX], XMM0;
 		}
 
-		if(c[0] != ((A[0] ^ 0xFFFF) & B[0])){
-			assert(0);
-		}
-		if(c[1] != ((A[1] ^ 0xFFFF) & B[1])){
+		if(c[0] != ((a[0] ^ 0xFFFF) & b[0])){
 			assert(0);
 		}
-		if(c[2] != ((A[2] ^ 0xFFFF) & B[2])){
+		if(c[1] != ((a[1] ^ 0xFFFF) & b[1])){
 			assert(0);
 		}
-		if(c[3] != ((A[3] ^ 0xFFFF) & B[3])){
+		if(c[2] != ((a[2] ^ 0xFFFF) & b[2])){
+			assert(0);
+		}
+		if(c[3] != ((a[3] ^ 0xFFFF) & b[3])){
 			assert(0);
 		}
-		if(c[4] != ((A[4] ^ 0xFFFF) & B[4])){
+		if(c[4] != ((a[4] ^ 0xFFFF) & b[4])){
 			assert(0);
 		}
-		if(c[5] != ((A[5] ^ 0xFFFF) & B[5])){
+		if(c[5] != ((a[5] ^ 0xFFFF) & b[5])){
 			assert(0);
 		}
-		if(c[6] != ((A[6] ^ 0xFFFF) & B[6])){
+		if(c[6] != ((a[6] ^ 0xFFFF) & b[6])){
 			assert(0);
 		}
-		if(c[7] != ((A[7] ^ 0xFFFF) & B[7])){
+		if(c[7] != ((a[7] ^ 0xFFFF) & b[7])){
 			assert(0);
 		}
 		return 0;
--- a/run/a/asm_pcmpeqb_01_A.d	Mon Oct 02 08:03:15 2006 +0000
+++ b/run/a/asm_pcmpeqb_01_A.d	Tue Oct 03 19:09:21 2006 +0000
@@ -16,15 +16,18 @@
 	int main(){
 		haveSSE2!()();
 
-		static byte[16] A = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16];
-		static byte[16] B = [1, 0, byte.min, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 16];
-		ubyte[16] c;
+		byte* a = [cast(byte)1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16];
+		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{
-			movdqu XMM0, A;
-			movdqu XMM1, B;
+			mov EAX, a;
+			movdqu XMM0, [EAX];
+			mov EAX, b;
+			movdqu XMM1, [EAX];
 			pcmpeqb XMM0, XMM1;
-			movdqu c, XMM0;
+			mov EAX, c;
+			movdqu [EAX], XMM0;
 		}
 
 		if(c[0] != 0xFF){
--- a/run/a/asm_pcmpeqd_01_A.d	Mon Oct 02 08:03:15 2006 +0000
+++ b/run/a/asm_pcmpeqd_01_A.d	Tue Oct 03 19:09:21 2006 +0000
@@ -16,15 +16,18 @@
 	int main(){
 		haveSSE2!()();
 
-		static int[4] A = [0, 1, 0, 4];
-		static int[4] B = [0, 3, 1, 4];
-		uint[4] c;
+		int* a = [cast(int)0, 1, 0, 4];
+		int* b = [cast(int)0, 3, 1, 4];
+		uint* c = new uint[4];
 
 		asm{
-			movdqu XMM0, A;
-			movdqu XMM1, B;
+			mov EAX, a;
+			movdqu XMM0, [EAX];
+			mov EAX, b;
+			movdqu XMM1, [EAX];
 			pcmpeqd XMM0, XMM1;
-			movdqu c, XMM0;
+			mov EAX, c;
+			movdqu [EAX], XMM0;
 		}
 
 		if(c[0] != 0xFFFF_FFFF){
--- a/run/a/asm_pcmpeqw_01_A.d	Mon Oct 02 08:03:15 2006 +0000
+++ b/run/a/asm_pcmpeqw_01_A.d	Tue Oct 03 19:09:21 2006 +0000
@@ -16,15 +16,18 @@
 	int main(){
 		haveSSE2!()();
 
-		static short[8] A = [1, 2, 3, 4, 5, 6, 7, 8];
-		static short[8] B = [1, 0, byte.min, -5, -4, -3, -2, 8];
-		ushort[8] c;
+		short* a = [cast(short)1, 2, 3, 4, 5, 6, 7, 8];
+		short* b = [cast(short)1, 0, byte.min, -5, -4, -3, -2, 8];
+		ushort* c = new ushort[8];
 
 		asm{
-			movdqu XMM0, A;
-			movdqu XMM1, B;
+			mov EAX, a;
+			movdqu XMM0, [EAX];
+			mov EAX, b;
+			movdqu XMM1, [EAX];
 			pcmpeqw XMM0, XMM1;
-			movdqu c, XMM0;
+			mov EAX, c;
+			movdqu [EAX], XMM0;
 		}
 
 		if(c[0] != 0xFFFF){
--- a/run/a/asm_pcmpgtd_01_A.d	Mon Oct 02 08:03:15 2006 +0000
+++ b/run/a/asm_pcmpgtd_01_A.d	Tue Oct 03 19:09:21 2006 +0000
@@ -16,15 +16,18 @@
 	int main(){
 		haveSSE2!()();
 
-		static int[4] A = [0, 3, 0, 4];
-		static int[4] B = [0, 1, 1, 4];
-		uint[4] c;
+		int* a = [cast(int)0, 3, 0, 4];
+		int* b = [cast(int)0, 1, 1, 4];
+		uint* c = new uint[4];
 
 		asm{
-			movdqu XMM0, A;
-			movdqu XMM1, B;
+			mov EAX, a;
+			movdqu XMM0, [EAX];
+			mov EAX, b;
+			movdqu XMM1, [EAX];
 			pcmpgtd XMM0, XMM1;
-			movdqu c, XMM0;
+			mov EAX, c;
+			movdqu [EAX], XMM0;
 		}
 
 		if(c[0] != 0){
--- a/run/a/asm_pcmpgtw_01_A.d	Mon Oct 02 08:03:15 2006 +0000
+++ b/run/a/asm_pcmpgtw_01_A.d	Tue Oct 03 19:09:21 2006 +0000
@@ -16,15 +16,18 @@
 	int main(){
 		haveSSE2!()();
 
-		static short[8] A = [1, 2, 3, 4, 5, 6, 7, 8];
-		static short[8] B = [1, 0, byte.min, -5, -4, -3, -2, 8];
-		ushort[8] c;
+		short* a = [cast(short)1, 2, 3, 4, 5, 6, 7, 8];
+		short* b = [cast(short)1, 0, byte.min, -5, -4, -3, -2, 8];
+		ushort* c = new ushort[8];
 
 		asm{
-			movdqu XMM0, A;
-			movdqu XMM1, B;
+			mov EAX, a;
+			movdqu XMM0, [EAX];
+			mov EAX, b;
+			movdqu XMM1, [EAX];
 			pcmpgtw XMM0, XMM1;
-			movdqu c, XMM0;
+			mov EAX, c;
+			movdqu [EAX], XMM0;
 		}
 
 		if(c[0] != 0){
--- a/run/a/asm_pextrw_01_A.d	Mon Oct 02 08:03:15 2006 +0000
+++ b/run/a/asm_pextrw_01_A.d	Tue Oct 03 19:09:21 2006 +0000
@@ -16,12 +16,13 @@
 	int main(){
 		haveSSE!()();
 
-		static ushort[8] x = [1, 2, 3, 4, 5, 0xFFFF, 7, 0];
+		ushort* x = [cast(ushort)1, 2, 3, 4, 5, 0xFFFF, 7, 0];
 		uint a;
 		uint b;
 
 		asm{
-			movdqu XMM0, x;
+			mov EAX, x;
+			movdqu XMM0, [EAX];
 			pextrw EAX, XMM0, 5;
 			mov a, EAX;
 			pextrw EDX, XMM0, 1;
--- a/run/a/asm_pfcmpeq_01_B.d	Mon Oct 02 08:03:15 2006 +0000
+++ b/run/a/asm_pfcmpeq_01_B.d	Tue Oct 03 19:09:21 2006 +0000
@@ -16,15 +16,18 @@
 	int main(){
 		have3DNow!()();
 
-		const float[2] A = [123.0f, -456.0f];
-		const float[2] B = [123.0f, 456.0f];
-		uint[2] c;
+		float* a = [123.0f, -456.0f];
+		float* b = [123.0f, 456.0f];
+		uint* c = new uint[2];
 
 		asm{
-			movq MM0, A;
-			movq MM1, B
+			mov EAX, a;
+			movq MM0, [EAX];
+			mov EAX, b;
+			movq MM1, [EAX];
 			pfcmpeq MM0, MM1;
-			movq c, MM0;
+			mov EAX, c;
+			movq [EAX], MM0;
 			emms;
 		}
 
--- a/run/a/asm_pfcmpge_01_A.d	Mon Oct 02 08:03:15 2006 +0000
+++ b/run/a/asm_pfcmpge_01_A.d	Tue Oct 03 19:09:21 2006 +0000
@@ -16,14 +16,17 @@
 	int main(){
 		have3DNow!()();
 
-		const float[2] A = [123.0f, 457.0f];
-		const float[2] B = [124.0f, 456.0f];
-		uint[2] c;
+		float* a = [123.0f, 457.0f];
+		float* b = [124.0f, 456.0f];
+		uint* c = new uint[2];
 
 		asm{
-			movq MM0, A;
-			pfcmpge MM0, B;
-			movq c, MM0;
+			mov EAX, a;
+			movq MM0, [EAX];
+			mov EAX, b;
+			pfcmpge MM0, [EAX];
+			mov EAX, c;
+			movq [EAX], MM0;
 			emms;
 		}
 
--- a/run/a/asm_pfcmpge_01_B.d	Mon Oct 02 08:03:15 2006 +0000
+++ b/run/a/asm_pfcmpge_01_B.d	Tue Oct 03 19:09:21 2006 +0000
@@ -16,15 +16,18 @@
 	int main(){
 		have3DNow!()();
 
-		const float[2] A = [123.0f, 458.0f];
-		const float[2] B = [124.0f, 456.0f];
-		uint[2] c;
+		float* a = [123.0f, 458.0f];
+		float* b = [124.0f, 456.0f];
+		uint* c = new uint[2];
 
 		asm{
-			movq MM0, A;
-			movq MM1, B
+			mov EAX, a;
+			movq MM0, [EAX];
+			mov EAX, b;
+			movq MM1, [EAX];
 			pfcmpge MM0, MM1;
-			movq c, MM0;
+			mov EAX, c;
+			movq [EAX], MM0;
 			emms;
 		}
 
--- a/run/a/asm_pfcmpgt_01_A.d	Mon Oct 02 08:03:15 2006 +0000
+++ b/run/a/asm_pfcmpgt_01_A.d	Tue Oct 03 19:09:21 2006 +0000
@@ -17,14 +17,17 @@
 		haveMMX!()();
 		have3DNow!()();
 
-		const float[2] A = [123.0f, 457.0f];
-		const float[2] B = [124.0f, 456.0f];
-		uint[2] c;
+		float* a = [123.0f, 457.0f];
+		float* b = [124.0f, 456.0f];
+		uint* c = new uint[2];
 
 		asm{
-			movq MM0, A;
-			pfcmpgt MM0, B;
-			movq c, MM0;
+			mov EAX, a;
+			movq MM0, [EAX];
+			mov EAX, b;
+			pfcmpgt MM0, [EAX];
+			mov EAX, c;
+			movq [EAX], MM0;
 			emms;
 		}
 
--- a/run/a/asm_pfcmpgt_01_B.d	Mon Oct 02 08:03:15 2006 +0000
+++ b/run/a/asm_pfcmpgt_01_B.d	Tue Oct 03 19:09:21 2006 +0000
@@ -17,15 +17,18 @@
 		haveMMX!()();
 		have3DNow!()();
 
-		const float[2] A = [123.0f, 457.0f];
-		const float[2] B = [124.0f, 456.0f];
-		uint[2] c;
+		float* a = [123.0f, 457.0f];
+		float* b = [124.0f, 456.0f];
+		uint* c = new uint[2];
 
 		asm{
-			movq MM0, A;
-			movq MM1, B;
+			mov EAX, a;
+			movq MM0, [EAX];
+			mov EAX, b;
+			movq MM1, [EAX];
 			pfcmpgt MM0, MM1;
-			movq c, MM0;
+			mov EAX, c;
+			movq [EAX], MM0;
 			emms;
 		}
 
--- a/run/a/asm_pfrsqrt_01_A.d	Mon Oct 02 08:03:15 2006 +0000
+++ b/run/a/asm_pfrsqrt_01_A.d	Tue Oct 03 19:09:21 2006 +0000
@@ -4,36 +4,59 @@
 
 module dstress.run.a.asm_pfrsqrt_01_A;
 
-int main(){
-	version(D_InlineAsm_X86){
-		const float[2] A = [4.0f, 3.3f];
-		float[2] b;
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	import addon.cpuinfo;
+
+	int main(){
+		have3DNow!()();
+
+		float* a = new float[2];
+		a[0] = 4.0f;
+		a[1] = 3.3f;
 
-		asm{
-			pfrsqrt MM0, A;
-			movq b, MM0;
-			emms;
+		static if(size_t.sizeof == 4){
+			asm{
+				mov EAX, a;
+				pfrsqrt MM0, [EAX];
+				movq [EAX], MM0;
+				emms;
+			}
+		}else static if(size_t.sizeof == 8){
+			asm{
+				mov RAX, a;
+				pfrsqrt MM0, [RAX];
+				movq [RAX], MM0;
+				emms;
+			}
+		}else{
+			static assert(0, "unhandled pointer size");
 		}
 
-		b[0] -= 0.5f;
-		if(b[0] < 0.0f){
-			b[0] = -b[0];
+		a[0] -= 0.5f;
+		if(a[0] < 0.0f){
+			a[0] = -a[0];
 		}
-		if(b[0] > float.epsilon * (1 << 11)){
+		if(a[0] > float.epsilon * (1 << 11)){
 			assert(0);
 		}
 
-		b[1] -= 0.5f;
-		if(b[1] < 0.0f){
-			b[1] = -b[1];
+		a[1] -= 0.5f;
+		if(a[1] < 0.0f){
+			a[1] = -a[1];
 		}
-		if(b[1] > float.epsilon * (1 << 11)){
+		if(a[1] > float.epsilon * (1 << 11)){
 			assert(0);
 		}
 
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_pfrsqrt_01_B.d	Mon Oct 02 08:03:15 2006 +0000
+++ b/run/a/asm_pfrsqrt_01_B.d	Tue Oct 03 19:09:21 2006 +0000
@@ -16,29 +16,43 @@
 	int main(){
 		have3DNow!()();
 
-		const float[2] A = [4.0f, 0.5f];
-		float[2] c;
+		float* a = new float[2];
+		a[0] = 4.0f;
+		a[1] = 0.5f;
 
-		asm{
-			movq MM1, A;
-			pfrsqrt MM0, MM1;
-			movq c, MM0;
-			emms;
+		static if(size_t.sizeof == 4){
+			asm{
+				mov EAX, a;
+				movq MM1, [EAX];
+				pfrsqrt MM0, MM1;
+				movq [EAX], MM0;
+				emms;
+			}
+		}else static if(size_t.sizeof == 8){
+			asm{
+				mov RAX, a;
+				movq MM1, [RAX];
+				pfrsqrt MM0, MM1;
+				movq [RAX], MM0;
+				emms;
+			}
+		}else{
+			static assert(0, "unhandled pointer size");
 		}
 
-		c[0] -= 0.5f;
-		if(c[0] < 0.0f){
-			c[0] = -c[0];
+		a[0] -= 0.5f;
+		if(a[0] < 0.0f){
+			a[0] = -a[0];
 		}
-		if(c[0] > float.epsilon * (1 << 11)){
+		if(a[0] > float.epsilon * (1 << 11)){
 			assert(0);
 		}
 
-		c[1] -= 4.0f;
-		if(c[0] < 0.0f){
-			c[0] = -c[0];
+		a[1] -= 4.0f;
+		if(a[0] < 0.0f){
+			a[0] = -a[0];
 		}
-		if(c[0] > float.epsilon * (1 << 11)){
+		if(a[0] > float.epsilon * (1 << 11)){
 			assert(0);
 		}
 
--- a/run/a/asm_pfrsqrtit1_01_A.d	Mon Oct 02 08:03:15 2006 +0000
+++ b/run/a/asm_pfrsqrtit1_01_A.d	Tue Oct 03 19:09:21 2006 +0000
@@ -16,28 +16,43 @@
 	int main(){
 		have3DNow!()();
 
-		const float[2] A = [4.0f, 0.5f];
-		float[2] c;
+		float* a = new float[2];
+		a[0] = 4.0f;
+		a[1] = 0.5f;
 
-		asm{
-			pfrsqrt MM0, A;
-			pfrsqit1 MM0, A;
-			movq c, MM0;
-			emms;
+		static if(size_t.sizeof == 4){
+			asm{
+				mov EAX, a;
+				pfrsqrt MM0, [EAX];
+				pfrsqit1 MM0, [EAX];
+				movq [EAX], MM0;
+				emms;
+			}
+		}else static if(size_t.sizeof == 8){
+			asm{
+				mov RAX, a;
+				pfrsqrt MM0, [RAX];
+				pfrsqit1 MM0, [RAX];
+				movq [RAX], MM0;
+				emms;
+			}
+		}else{
+			static assert(0, "unhandled pointer size");
 		}
-		c[0] -= 1.001953f;
-		if(c[0] < 0.0f){
-			c[0] = -c[0];
+
+		a[0] -= 1.001953f;
+		if(a[0] < 0.0f){
+			a[0] = -a[0];
 		}
-		if(c[0] > float.epsilon * (1 << 8)){
+		if(a[0] > float.epsilon * (1 << 8)){
 			assert(0);
 		}
 
-		c[1] -= 1.001953f;
-		if(c[1] < 0.0f){
-			c[1] = -c[1];
+		a[1] -= 1.001953f;
+		if(a[1] < 0.0f){
+			a[1] = -a[1];
 		}
-		if(c[1] > float.epsilon * (1 << 8)){
+		if(a[1] > float.epsilon * (1 << 8)){
 			assert(0);
 		}
 
--- a/run/a/asm_pfrsqrtit1_01_B.d	Mon Oct 02 08:03:15 2006 +0000
+++ b/run/a/asm_pfrsqrtit1_01_B.d	Tue Oct 03 19:09:21 2006 +0000
@@ -16,30 +16,45 @@
 	int main(){
 		have3DNow!()();
 
-		const float[2] A = [4.0f, 0.5f];
-		float[2] c;
+		float* a = new float[2];
+		a[0] = 4.0f;
+		a[1] = 0.5f;
 
-		asm{
-			movq MM1, A;
-			pfrsqrt MM0, MM1;
-			pfrsqit1 MM0, MM1;
-			movq c, MM0;
-			emms;
+		static if(size_t.sizeof == 4){
+			asm{
+				mov EAX, a;
+				movq MM1, [EAX];
+				pfrsqrt MM0, MM1;
+				pfrsqit1 MM0, MM1;
+				movq [EAX], MM0;
+				emms;
+			}
+		}else static if(size_t.sizeof == 8){
+			asm{
+				mov RAX, a;
+				movq MM1, [RAX];
+				pfrsqrt MM0, MM1;
+				pfrsqit1 MM0, MM1;
+				movq [RAX], MM0;
+				emms;
+			}
+		}else{
+			static assert(0, "unhandled pointer size");
 		}
 
-		c[0] -= 1.001953f;
-		if(c[0] < 0.0f){
-			c[0] = -c[0];
+		a[0] -= 1.001953f;
+		if(a[0] < 0.0f){
+			a[0] = -a[0];
 		}
-		if(c[0] > float.epsilon * (1 << 8)){
+		if(a[0] > float.epsilon * (1 << 8)){
 			assert(0);
 		}
 
-		c[1] -= 1.001953f;
-		if(c[1] < 0.0f){
-			c[1] = -c[1];
+		a[1] -= 1.001953f;
+		if(a[1] < 0.0f){
+			a[1] = -a[1];
 		}
-		if(c[1] > float.epsilon * (1 << 8)){
+		if(a[1] > float.epsilon * (1 << 8)){
 			assert(0);
 		}
 
--- a/run/a/asm_pfsub_01_A.d	Mon Oct 02 08:03:15 2006 +0000
+++ b/run/a/asm_pfsub_01_A.d	Tue Oct 03 19:09:21 2006 +0000
@@ -16,16 +16,40 @@
 	int main(){
 		have3DNow!()();
 
-		const float[2] A = [6.0f, 2.0f];
-		const float[2] B = [2.0f, -1.0f];
-		float[2] c;
+		float* a = new float[2];
+		a[0] = 6.0f;
+		a[1] = 2.0f;
+		
+		float* b = new float[2];
+		b[0] = 2.0f;
+		b[1] = -1.0f;
+
+		float* c = new float[2];
 
-		asm{
-			movq MM0, A;
-			movq MM1, B;
-			pfsub MM0, MM1;
-			movq c, MM0;
-			emms;
+		static if(size_t.sizeof == 4){
+			asm{
+				mov EAX, a;
+				movq MM0, [EAX];
+				mov EAX, b;
+				movq MM1, [EAX];
+				pfsub 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];
+				pfsub MM0, MM1;
+				mov RAX, c;
+				movq [RAX], MM0;
+				emms;
+			}
+		}else{
+			static assert(0, "unhandled pointer size");
 		}
 
 		if(c[0] != 4.0f){
--- a/run/a/asm_pfsub_01_B.d	Mon Oct 02 08:03:15 2006 +0000
+++ b/run/a/asm_pfsub_01_B.d	Tue Oct 03 19:09:21 2006 +0000
@@ -16,15 +16,38 @@
 	int main(){
 		have3DNow!()();
 
-		const float[2] A = [6.0f, 2.0f];
-		const float[2] B = [2.0f, -1.0f];
-		float[2] c;
+		float* a = new float[2];
+		a[0] = 6.0f;
+		a[1] = 2.0f;
+
+		float* b = new float[2];
+		b[0] = 2.0f;
+		b[1] = -1.0f;
+
+		float* c = new float[2];
 
-		asm{
-			movq MM0, A;
-			pfsub MM0, B;
-			movq c, MM0;
-			emms;
+		static if(size_t.sizeof == 4){
+			asm{
+				mov EAX, a;
+				movq MM0, [EAX];
+				mov EAX, b;
+				pfsub 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;
+				pfsub MM0, [RAX];
+				mov RAX, c;
+				movq [RAX], MM0;
+				emms;
+			}
+		}else{
+			static assert(0, "unhandled pointer size");
 		}
 
 		if(c[0] != 4.0f){
--- a/run/a/asm_pfsubr_01_B.d	Mon Oct 02 08:03:15 2006 +0000
+++ b/run/a/asm_pfsubr_01_B.d	Tue Oct 03 19:09:21 2006 +0000
@@ -16,15 +16,38 @@
 	int main(){
 		have3DNow!()();
 
-		const float[2] A = [6.0f, 2.0f];
-		const float[2] B = [2.0f, -1.0f];
-		float[2] c;
+		float* a = new float[2];
+		a[0] = 6.0f;
+		a[1] = 2.0f;
+
+		float* b = new float[2];
+		b[0] = 2.0f;
+		b[1] = -1.0f;
+
+		float* c = new float[2];
 
-		asm{
-			movq MM0, A;
-			pfsubr MM0, B;
-			movq c, MM0;
-			emms;
+		static if(size_t.sizeof == 4){
+			asm{
+				mov EAX, a;
+				movq MM0, [EAX];
+				mov EAX, b;
+				pfsubr 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;
+				pfsubr MM0, [RAX];
+				mov RAX, c;
+				movq [RAX], MM0;
+				emms;
+			}
+		}else{
+			static assert(0, "unhandled pointer size");
 		}
 
 		if(c[0] != -4.0f){
--- a/run/a/asm_pinsrw_01_C.d	Mon Oct 02 08:03:15 2006 +0000
+++ b/run/a/asm_pinsrw_01_C.d	Tue Oct 03 19:09:21 2006 +0000
@@ -4,18 +4,30 @@
 
 module dstress.run.a.asm_pinsrw_01_C;
 
-int main(){
-	version(D_InlineAsm_X86){
-		static ushort[8] a = [1, 2, 3, 4, 5, 0xFFFF, 7, 0];
-		ushort[8] b;
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	import addon.cpuinfo;
+
+	int main(){
+		haveSSE!()();
+
+		ushort* a = [cast(ushort)1, 2, 3, 4, 5, 0xFFFF, 7, 0];
+		ushort* b = new ushort[8];
 
 		asm{
-			movdqu XMM0, a;
+			mov EAX, a;
+			movdqu XMM0, [EAX];
 			mov EAX, 0x12AB_34CD;
 			mov EBX, 0xFDCE_0010;
 			pinsrw XMM0, EAX, 0;
 			pinsrw XMM0, EBX, 7;
-			movdqu b, XMM0;
+			mov EAX, b;
+			movdqu [EAX], XMM0;
 		}
 
 		if(b[0] != 0x34CD){
@@ -50,8 +62,8 @@
 			assert(0);
 		}
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_pinsrw_01_D.d	Mon Oct 02 08:03:15 2006 +0000
+++ b/run/a/asm_pinsrw_01_D.d	Tue Oct 03 19:09:21 2006 +0000
@@ -4,19 +4,31 @@
 
 module dstress.run.a.asm_pinsrw_01_D;
 
-int main(){
-	version(D_InlineAsm_X86){
-		static ushort[8] a = [1, 2, 3, 4, 5, 0xFFFF, 7, 0];
-		ushort[8] b;
+version(D_InlineAsm_X86){
+	version = runTest;
+}else version(D_InlineAsm_X86_64){
+	version = runTest;
+}
+
+version(runTest){
+	import addon.cpuinfo;
+
+	int main(){
+		haveSSE!()();
+
+		ushort* a = [cast(ushort)1, 2, 3, 4, 5, 0xFFFF, 7, 0];
+		ushort* b = new ushort[8];
 
 		ushort x = 0x34CD;
 		ushort y = 0x0010;
 
 		asm{
-			movdqu XMM0, a;
+			mov EAX, a;
+			movdqu XMM0, [EAX];
 			pinsrw XMM0, x, 0;
 			pinsrw XMM0, y, 7;
-			movdqu b, XMM0;
+			mov EAX, b;
+			movdqu [EAX], XMM0;
 		}
 
 		if(b[0] != 0x34CD){
@@ -51,8 +63,8 @@
 			assert(0);
 		}
 		return 0;
-	}else{
-		pragma(msg, "no Inline asm support");
-		static assert(0);
 	}
+}else{
+	pragma(msg, "DSTRESS{XFAIL}: no inline ASM support");
+	static assert(0);
 }
--- a/run/a/asm_pmaxsw_01_A.d	Mon Oct 02 08:03:15 2006 +0000
+++ b/run/a/asm_pmaxsw_01_A.d	Tue Oct 03 19:09:21 2006 +0000
@@ -17,16 +17,18 @@
 	int main(){
 		haveSSE!()();
 
-		const short[8] A = [1, 2, 3, 4, 5, 6, 16, 2];
-		const short[8] B = [-9, 10, -11, -12, 13, 14, 0xFFF, 1];
-
-		short[8] c;
+		short* a = [cast(short)1, 2, 3, 4, 5, 6, 16, 2];
+		short* b = [cast(short)-9, 10, -11, -12, 13, 14, 0xFFF, 1];
+		short* c = new short[8];
 
 		asm{
-			movdqu XMM0, A;
-			movdqu XMM1, B;
+			mov EAX, a;
+			movdqu XMM0, [EAX];
+			mov EAX, b;
+			movdqu XMM1, [EAX];
 			pmaxsw XMM0, XMM1;
-			movdqu c, XMM0;
+			mov EAX, c;
+			movdqu [EAX], XMM0;
 		}
 
 		if(c[0] != 1){
--- a/run/a/asm_pminsw_01_A.d	Mon Oct 02 08:03:15 2006 +0000
+++ b/run/a/asm_pminsw_01_A.d	Tue Oct 03 19:09:21 2006 +0000
@@ -16,16 +16,18 @@
 	int main(){
 		haveSSE!()();
 
-		const short[8] A = [1, 2, 3, 4, 5, 6, 16, 2];
-		const short[8] B = [-9, 10, -11, -12, 13, 14, 0xFFF, 1];
-
-		short[8] c;
+		short* a = [cast(short)1, 2, 3, 4, 5, 6, 16, 2];
+		short* b = [cast(short)-9, 10, -11, -12, 13, 14, 0xFFF, 1];
+		short* c = new short[8];
 
 		asm{
-			movdqu XMM0, A;
-			movdqu XMM1, B;
+			mov EAX, a;
+			movdqu XMM0, [EAX];
+			mov EAX, b;
+			movdqu XMM1, [EAX];
 			pminsw XMM0, XMM1;
-			movdqu c, XMM0;
+			mov EAX, c;
+			movdqu [EAX], XMM0;
 		}
 
 		if(c[0] != -9){
--- a/run/a/asm_pmulhuw_01_A.d	Mon Oct 02 08:03:15 2006 +0000
+++ b/run/a/asm_pmulhuw_01_A.d	Tue Oct 03 19:09:21 2006 +0000
@@ -16,16 +16,19 @@
 	int main(){
 		haveSSE!()();
 
-		const ushort[8] A = [1, 2, 0x7FFF, 7, 0x7FF0, 0x7EDC, 3, 0x6BCD];
-		const ushort[8] B = [1, 0, 7, 0x7FFF, 0x00FF, 0x7EDC, 5, 13];
+		ushort* a = [cast(ushort)1, 2, 0x7FFF, 7, 0x7FF0, 0x7EDC, 3, 0x6BCD];
+		ushort* b = [cast(ushort)1, 0, 7, 0x7FFF, 0x00FF, 0x7EDC, 5, 13];
 
-		ushort[8] c;
+		ushort* c = new ushort[8];
 
 		asm{
-			movdqu XMM0, A;
-			movdqu XMM1, B;
+			mov EAX, a;
+			movdqu XMM0, [EAX];
+			mov EAX, b;
+			movdqu XMM1, [EAX];
 			pmulhuw XMM0, XMM1;
-			movdqu c, XMM0;
+			mov EAX, c;
+			movdqu [EAX], XMM0;
 		}
 
 		if(c[0] != 0){
--- a/run/a/asm_pmulhw_01_A.d	Mon Oct 02 08:03:15 2006 +0000
+++ b/run/a/asm_pmulhw_01_A.d	Tue Oct 03 19:09:21 2006 +0000
@@ -16,16 +16,19 @@
 	int main(){
 		haveSSE2!()();
 
-		const short[8] A = [-1, 2, 0x7FFF, 7, 0x7FF0, 0x7EDC, 3, -16];
-		const short[8] B = [2, 0, 7, 0x7FFF, 0x00FF, 0x7EDC, 5, 0x6BCD];
+		short* a = [cast(short)-1, 2, 0x7FFF, 7, 0x7FF0, 0x7EDC, 3, -16];
+		short* b = [cast(short)2, 0, 7, 0x7FFF, 0x00FF, 0x7EDC, 5, 0x6BCD];
 
-		ushort[8] c;
+		ushort* c = new ushort[8];
 
 		asm{
-			movdqu XMM0, A;
-			movdqu XMM1, B;
+			mov EAX, a;
+			movdqu XMM0, [EAX];
+			mov EAX, b;
+			movdqu XMM1, [EAX];
 			pmulhw XMM0, XMM1;
-			movdqu c, XMM0;
+			mov EAX, c;
+			movdqu [EAX], XMM0;
 		}
 
 		if(c[0] != 0xFFFF){
--- a/run/a/asm_pmullw_01_A.d	Mon Oct 02 08:03:15 2006 +0000
+++ b/run/a/asm_pmullw_01_A.d	Tue Oct 03 19:09:21 2006 +0000
@@ -16,16 +16,19 @@
 	int main(){
 		haveSSE2!()();
 
-		const short[8] A = [-1, 2, 0x7FFF, 7, 0x7FF0, 0x7EDC, 3, -16];
-		const short[8] B = [2, 0, 7, 0x7FFF, 0x00FF, 0x7EDC, 5, 0x7ABC];
+		short* a = [cast(short)-1, 2, 0x7FFF, 7, 0x7FF0, 0x7EDC, 3, -16];
+		short* b = [cast(short)2, 0, 7, 0x7FFF, 0x00FF, 0x7EDC, 5, 0x7ABC];
 
-		ushort[8] c;
+		ushort* c = new ushort[8];
 
 		asm{
-			movdqu XMM0, A;
-			movdqu XMM1, B;
+			mov EAX, a;
+			movdqu XMM0, [EAX];
+			mov EAX, b;
+			movdqu XMM1, [EAX];
 			pmullw XMM0, XMM1;
-			movdqu c, XMM0;
+			mov EAX, c;
+			movdqu [EAX], XMM0;
 		}
 
 		if(c[0] != 0xFFFE){