# HG changeset patch # User thomask # Date 1159902561 0 # Node ID 7fbe1218b3b53b233d4514fb5ce674998976b004 # Parent c2a8690a9fca2d5ca9d9811d790521d05a66db6c fPIC fixes(32bit only) diff -r c2a8690a9fca -r 7fbe1218b3b5 run/a/asm_packsswb_01_A.d --- 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){ diff -r c2a8690a9fca -r 7fbe1218b3b5 run/a/asm_packuswb_01_A.d --- 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){ diff -r c2a8690a9fca -r 7fbe1218b3b5 run/a/asm_paddsw_01_A.d --- 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){ diff -r c2a8690a9fca -r 7fbe1218b3b5 run/a/asm_paddusb_01_A.d --- 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){ diff -r c2a8690a9fca -r 7fbe1218b3b5 run/a/asm_paddusw_01_A.d --- 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){ diff -r c2a8690a9fca -r 7fbe1218b3b5 run/a/asm_paddw_01_A.d --- 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){ diff -r c2a8690a9fca -r 7fbe1218b3b5 run/a/asm_pand_01_A.d --- 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; diff -r c2a8690a9fca -r 7fbe1218b3b5 run/a/asm_pandn_01_A.d --- 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; diff -r c2a8690a9fca -r 7fbe1218b3b5 run/a/asm_pcmpeqb_01_A.d --- 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){ diff -r c2a8690a9fca -r 7fbe1218b3b5 run/a/asm_pcmpeqd_01_A.d --- 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){ diff -r c2a8690a9fca -r 7fbe1218b3b5 run/a/asm_pcmpeqw_01_A.d --- 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){ diff -r c2a8690a9fca -r 7fbe1218b3b5 run/a/asm_pcmpgtd_01_A.d --- 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){ diff -r c2a8690a9fca -r 7fbe1218b3b5 run/a/asm_pcmpgtw_01_A.d --- 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){ diff -r c2a8690a9fca -r 7fbe1218b3b5 run/a/asm_pextrw_01_A.d --- 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; diff -r c2a8690a9fca -r 7fbe1218b3b5 run/a/asm_pfcmpeq_01_B.d --- 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; } diff -r c2a8690a9fca -r 7fbe1218b3b5 run/a/asm_pfcmpge_01_A.d --- 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; } diff -r c2a8690a9fca -r 7fbe1218b3b5 run/a/asm_pfcmpge_01_B.d --- 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; } diff -r c2a8690a9fca -r 7fbe1218b3b5 run/a/asm_pfcmpgt_01_A.d --- 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; } diff -r c2a8690a9fca -r 7fbe1218b3b5 run/a/asm_pfcmpgt_01_B.d --- 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; } diff -r c2a8690a9fca -r 7fbe1218b3b5 run/a/asm_pfrsqrt_01_A.d --- 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); } diff -r c2a8690a9fca -r 7fbe1218b3b5 run/a/asm_pfrsqrt_01_B.d --- 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); } diff -r c2a8690a9fca -r 7fbe1218b3b5 run/a/asm_pfrsqrtit1_01_A.d --- 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); } diff -r c2a8690a9fca -r 7fbe1218b3b5 run/a/asm_pfrsqrtit1_01_B.d --- 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); } diff -r c2a8690a9fca -r 7fbe1218b3b5 run/a/asm_pfsub_01_A.d --- 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){ diff -r c2a8690a9fca -r 7fbe1218b3b5 run/a/asm_pfsub_01_B.d --- 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){ diff -r c2a8690a9fca -r 7fbe1218b3b5 run/a/asm_pfsubr_01_B.d --- 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){ diff -r c2a8690a9fca -r 7fbe1218b3b5 run/a/asm_pinsrw_01_C.d --- 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); } diff -r c2a8690a9fca -r 7fbe1218b3b5 run/a/asm_pinsrw_01_D.d --- 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); } diff -r c2a8690a9fca -r 7fbe1218b3b5 run/a/asm_pmaxsw_01_A.d --- 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){ diff -r c2a8690a9fca -r 7fbe1218b3b5 run/a/asm_pminsw_01_A.d --- 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){ diff -r c2a8690a9fca -r 7fbe1218b3b5 run/a/asm_pmulhuw_01_A.d --- 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){ diff -r c2a8690a9fca -r 7fbe1218b3b5 run/a/asm_pmulhw_01_A.d --- 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){ diff -r c2a8690a9fca -r 7fbe1218b3b5 run/a/asm_pmullw_01_A.d --- 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){