Mercurial > projects > dstress
changeset 1019:d9dbc4d0698f
inline ASM review
author | thomask |
---|---|
date | Tue, 23 May 2006 18:21:32 +0000 |
parents | 1b6d9acddb76 |
children | 165fd0587328 |
files | run/a/asm_pmullw_01_A.d run/a/asm_pmuludq_01_A.d run/a/asm_pop_01_A.d run/a/asm_pop_01_B.d run/a/asm_pop_02_A.d run/a/asm_pop_02_B.d run/a/asm_popa_01_A.d run/a/asm_popad_01_A.d run/a/asm_por_01.d run/a/asm_por_02_A.d run/a/asm_por_02_B.d run/a/asm_prefetchnta_01.d run/a/asm_prefetcht0_01.d run/a/asm_prefetcht1_01.d run/a/asm_prefetcht2_01.d run/a/asm_psadbw_01_A.d run/a/asm_pshufd_01_A.d run/a/asm_pshufhw_01_A.d run/a/asm_pshuflw_01_A.d run/a/asm_pshufw_01_A.d run/a/asm_pslldq_01_A.d |
diffstat | 21 files changed, 727 insertions(+), 106 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_pmullw_01_A.d Tue May 23 18:21:32 2006 +0000 @@ -0,0 +1,61 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_pmullw_01_A; + +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + import addon.cpuinfo; + + 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]; + + ushort[8] c; + + asm{ + movdqu XMM0, A; + movdqu XMM1, B; + pmullw, XMM0, XMM1; + movdqu c, XMM0; + } + + if(c[0] != 0xFFFE){ + assert(0); + } + if(c[1] != 0x0000){ + assert(0); + } + if(c[2] != 0x7FF9){ + assert(0); + } + if(c[3] != 0x7FF9){ + assert(0); + } + if(c[4] != 0x7010){ + assert(0); + } + if(c[5] != 0x4D10){ + assert(0); + } + if(c[6] != 0x000F){ + assert(0); + } + if(c[7] != 0x5440){ + assert(0); + } + + return 0; + } +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_pmuludq_01_A.d Tue May 23 18:21:32 2006 +0000 @@ -0,0 +1,43 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_pmuludq_01_A; + +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + import addon.cpuinfo; + + int main(){ + haveSSE2!()(); + + const uint[4] A = [1, 0x1234_5678, 0xFEDC_A987, 3]; + const uint[4] B = [0xFFFF_FFFF, 0xABCD, 13, 88]; + + ulong[2] c; + + asm{ + movdqu XMM0, A; + movdqu XMM1, B; + pmuludq, XMM0, XMM1; + movdqu c, XMM0; + } + + if(c[0] != 0x0000_0C37__89AB_6618){ + assert(0); + } + if(c[1] != 0x0000_0000__0000_0108){ + assert(0); + } + + return 0; + } +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- a/run/a/asm_pop_01_A.d Mon May 22 20:17:12 2006 +0000 +++ b/run/a/asm_pop_01_A.d Tue May 23 18:21:32 2006 +0000 @@ -2,15 +2,21 @@ // $Date$ // $Author$ -module dstress.run.a.asm_push_01_A; +module dstress.run.a.asm_pop_01_A; -int main(){ - version(D_InlineAsm){ - ushort a= 0x12_AB; - ushort b= 0x00_00; +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + int main(){ + ushort a = 0x12_AB; + ushort b = 0x00_00; size_t p1, p2, p3; - static if(size_t.sizeof==4){ + static if(size_t.sizeof == 4){ asm{ mov p1, ESP; push a; @@ -19,16 +25,23 @@ mov p3, ESP; } }else{ + pragma(msg, "DSTRESS{ERROR}: unhandled size of void pointer"); static assert(0); } - assert(p1==p3); - assert(p1-2==p2); - assert(b==0x12_AB); + if(p1 != p3){ + assert(0); + } + if(p1-2 != p2){ + assert(0); + } + if(b != 0x12_AB){ + assert(0); + } return 0; - }else{ - pragma(msg, "no Inline asm support"); - static assert(0); } -} \ No newline at end of file +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- a/run/a/asm_pop_01_B.d Mon May 22 20:17:12 2006 +0000 +++ b/run/a/asm_pop_01_B.d Tue May 23 18:21:32 2006 +0000 @@ -2,15 +2,19 @@ // $Date$ // $Author$ -module dstress.run.a.asm_push_01_B; +module dstress.run.a.asm_pop_01_B; + +version(D_InlineAsm_X86){ + version = runTest; +} -int main(){ - version(D_InlineAsm){ - static if(size_t.sizeof==4){ - uint a= 0x12_AB_34_CD; - uint b= 0x00_00_00_00; - size_t p1, p2, p3; +version(runTest){ + int main(){ + uint a = 0x12AB_34CD; + uint b = 0; + size_t p1, p2, p3; + static if(size_t.sizeof == 4){ asm{ mov p1, ESP; push a; @@ -18,14 +22,24 @@ pop b; mov p3, ESP; } + }else{ + pragma(msg, "DSTRESS{ERROR}: unhandled size of void pointer"); + static assert(0); + } - assert(p1==p3); - assert(p1-4==p2); - assert(b==0x12_AB_34_CD); + if(p1 != p3){ + assert(0); } + if(p1-4 != p2){ + assert(0); + } + if(b != 0x12AB_34CD){ + assert(0); + } + return 0; - }else{ - pragma(msg, "no Inline asm support"); - static assert(0); } -} \ No newline at end of file +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_pop_02_A.d Tue May 23 18:21:32 2006 +0000 @@ -0,0 +1,48 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_pop_02_A; + +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + int main(){ + ushort a = 0; + size_t p1, p2, p3; + + static if(size_t.sizeof == 4){ + asm{ + mov AX, 0x1234; + mov p1, ESP; + push AX; + mov p2, ESP; + pop BX; + mov p3, ESP; + mov a, BX; + } + }else{ + pragma(msg, "DSTRESS{ERROR}: unhandled size of void pointer"); + static assert(0); + } + + if(p1 != p3){ + assert(0); + } + if(p1-2 != p2){ + assert(0); + } + if(a != 0x12_34){ + assert(0); + } + + return 0; + } +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_pop_02_B.d Tue May 23 18:21:32 2006 +0000 @@ -0,0 +1,46 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_pop_02_B; + +version(D_InlineAsm_X86){ + version = runTest; +} + +version(runTest){ + int main(){ + uint a = 0; + size_t p1, p2, p3; + + static if(size_t.sizeof == 4){ + asm{ + mov EAX, 0xABCD_1234; + mov p1, ESP; + push EAX; + mov p2, ESP; + pop EBX; + mov p3, ESP; + mov a, EBX; + } + }else{ + pragma(msg, "DSTRESS{ERROR}: unhandled size of void pointer"); + static assert(0); + } + + if(p1 != p3){ + assert(0); + } + if(p1-4 != p2){ + assert(0); + } + if(a != 0xABCD_1234){ + assert(0); + } + + return 0; + } +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_popa_01_A.d Tue May 23 18:21:32 2006 +0000 @@ -0,0 +1,48 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_popa_01_A; + +version(D_InlineAsm_X86){ + version = runTest; +} + +version(runTest){ + int main(){ + ushort a = 0x12_AB; + ushort b = 0x00_00; + size_t p1, p2, p3; + + static if(size_t.sizeof == 4){ + asm{ + mov AX, a; + mov p1, ESP; + pusha; + mov p2, ESP; + mov AX, b; + popa; + mov p3, ESP; + mov b, AX; + } + }else{ + pragma(msg, "DSTRESS{ERROR}: unhandled size of void pointer"); + static assert(0); + } + + if(p1 != p3){ + assert(0); + } + if(p1-16 != p2){ + assert(0); + } + if(b != 0x12_AB){ + assert(0); + } + + return 0; + } +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_popad_01_A.d Tue May 23 18:21:32 2006 +0000 @@ -0,0 +1,48 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_popad_01_A; + +version(D_InlineAsm_X86){ + version = runTest; +} + +version(runTest){ + int main(){ + uint a = 0x1234_ABCD; + uint b = 0x00_00; + size_t p1, p2, p3; + + static if(size_t.sizeof == 4){ + asm{ + mov EAX, a; + mov p1, ESP; + pushad; + mov p2, ESP; + mov EAX, b; + popad; + mov p3, ESP; + mov b, EAX; + } + }else{ + pragma(msg, "DSTRESS{ERROR}: unhandled size of void pointer"); + static assert(0); + } + + if(p1 != p3){ + assert(0); + } + if(p1-32 != p2){ + assert(0); + } + if(b != 0x1234_ABCD){ + assert(0); + } + + return 0; + } +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- a/run/a/asm_por_01.d Mon May 22 20:17:12 2006 +0000 +++ b/run/a/asm_por_01.d Tue May 23 18:21:32 2006 +0000 @@ -4,8 +4,18 @@ module dstress.run.a.asm_por_01; -int main(){ - version(D_InlineAsm){ +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + import addon.cpuinfo; + + int main(){ + haveMMX!()(); + ulong a = 0xFF01_00FF_0001_0000; ulong b = 0xFF00_10FF_0002_0000; ulong c = 2; @@ -16,11 +26,13 @@ movq c, MM0; } - assert(c==0xFF01_10FF_0003_0000); + if(c != 0xFF01_10FF_0003_0000){ + assert(0); + } return 0; - }else{ - pragma(msg, "no Inline asm support"); - static assert(0); } -} \ No newline at end of file +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- a/run/a/asm_por_02_A.d Mon May 22 20:17:12 2006 +0000 +++ b/run/a/asm_por_02_A.d Tue May 23 18:21:32 2006 +0000 @@ -4,14 +4,24 @@ module dstress.run.a.asm_por_02_A; -int main(){ - version(D_InlineAsm_X86){ +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + import addon.cpuinfo; + + int main(){ + haveSSE2!()(); + static ushort[8] A = [0x1200, 0x0120, 0x0012, 0x2001, 0x0008, 0xFFFF, 0x0000, 0x1111]; static ushort[8] B = [0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x0F00, 0x0102, 0x2222]; static ushort[8] C = [0x3300, 0x2120, 0x2112, 0x2101, 0x2108, 0xFFFF, 0x0102, 0x3333]; - ushort[8] a = A; - ushort[8] b = B; + ushort[8] a; + ushort[8] b; asm{ movdqu XMM0, A; @@ -34,8 +44,8 @@ } 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_por_02_B.d Mon May 22 20:17:12 2006 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -// $HeadURL$ -// $Date$ -// $Author$ - -module dstress.run.a.asm_por_02_B; - -int main(){ - version(D_InlineAsm_X86){ - static ushort[8] A = [0x1200, 0x0120, 0x0012, 0x2001, 0x0008, 0xFFFF, 0x0000, 0x1111]; - static ushort[8] B = [0x2100, 0x2100, 0x2100, 0x2100, 0x2100, 0x0F00, 0x0102, 0x2222]; - static ushort[8] C = [0x3300, 0x2120, 0x2112, 0x2101, 0x2108, 0xFFFF, 0x0102, 0x3333]; - - ushort[8] a; - - asm{ - movdqu XMM0, A; - por XMM0, B; - movdqu a, XMM0; - } - - - foreach(size_t i, ushort s; C){ - if(s != a[i]){ - assert(0); - } - } - - return 0; - }else{ - pragma(msg, "no Inline asm support"); - static assert(0); - } -}
--- a/run/a/asm_prefetchnta_01.d Mon May 22 20:17:12 2006 +0000 +++ b/run/a/asm_prefetchnta_01.d Tue May 23 18:21:32 2006 +0000 @@ -4,8 +4,14 @@ module dstress.run.a.asm_prefetchnta_01; -int main(){ - version(D_InlineAsm_X86){ +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + int main(){ byte b; asm{ @@ -13,8 +19,8 @@ } 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_prefetcht0_01.d Mon May 22 20:17:12 2006 +0000 +++ b/run/a/asm_prefetcht0_01.d Tue May 23 18:21:32 2006 +0000 @@ -3,9 +3,14 @@ // $Author$ module dstress.run.a.asm_prefetcht0_01; +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} -int main(){ - version(D_InlineAsm_X86){ +version(runTest){ + int main(){ byte b; asm{ @@ -13,8 +18,8 @@ } 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_prefetcht1_01.d Mon May 22 20:17:12 2006 +0000 +++ b/run/a/asm_prefetcht1_01.d Tue May 23 18:21:32 2006 +0000 @@ -4,8 +4,14 @@ module dstress.run.a.asm_prefetch1_01; -int main(){ - version(D_InlineAsm_X86){ +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + int main(){ byte b; asm{ @@ -13,8 +19,8 @@ } 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_prefetcht2_01.d Mon May 22 20:17:12 2006 +0000 +++ b/run/a/asm_prefetcht2_01.d Tue May 23 18:21:32 2006 +0000 @@ -4,8 +4,14 @@ module dstress.run.a.asm_prefetch2_01; -int main(){ - version(D_InlineAsm_X86){ +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + int main(){ byte b; asm{ @@ -13,8 +19,8 @@ } return 0; - }else{ - pragma(msg, "no Inline asm support"); - static assert(0); } +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_psadbw_01_A.d Tue May 23 18:21:32 2006 +0000 @@ -0,0 +1,60 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_psadbw_01_A; + +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + import addon.cpuinfo; + + int main(){ + haveSSE!()(); + + const ubyte[16] A = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]; + const ubyte[16] B = [2, 2, 2, 2, 2, 2, 2, 2, 1, 10, 10, 10, 10, 10, 10, 10]; + + ushort[8] c; + + asm{ + movdqu XMM0, A; + movdqu XMM1, B; + psadbw XMM0, XMM1; + movdqu c, XMM0; + } + + if(c[0] != 0){ + assert(0); + } + if(c[1] != 0){ + assert(0); + } + if(c[2] != 0){ + assert(0); + } + if(c[3] != 22){ + assert(0); + } + if(c[4] != 0){ + assert(0); + } + if(c[5] != 0){ + assert(0); + } + if(c[6] != 0){ + assert(0); + } + if(c[7] != 21){ + assert(0); + } + return 0; + } +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_pshufd_01_A.d Tue May 23 18:21:32 2006 +0000 @@ -0,0 +1,49 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_pshufd_01_A; + +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + import addon.cpuinfo; + + 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[4] c; + + asm{ + movups XMM0, A; + movups XMM1, B; + pushfd XMM0, XMM1, 0b01_01_00_10; + movups c, XMM0; + } + + if(c[0] != 6.0f){ + assert(0); + } + if(c[1] != 6.0f){ + assert(0); + } + if(c[2] != 5.0f){ + assert(0); + } + if(c[3] != 7.0f){ + assert(0); + } + + return 0; + } +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_pshufhw_01_A.d Tue May 23 18:21:32 2006 +0000 @@ -0,0 +1,61 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_pshufhw_01_A; + +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + import addon.cpuinfo; + + int main(){ + haveSSE2!()(); + + const short[8] A = [9, 9, 9, 9, 9, 9, 9, 9]; + const short[8] B = [1, 2, 3, 4, 5, 6, 7, 8]; + + short[8] c; + + asm{ + movdqu XMM0, A; + movdqu XMM1, B; + pushfhw XMM0, XMM1, 0b11_10_01_00; + movdqu, XMM0; + } + + if(c[0] != 4){ + assert(0); + } + if(c[1] != 4){ + assert(0); + } + if(c[2] != 2){ + assert(0); + } + if(c[3] != 1){ + assert(0); + } + if(c[4] != 5){ + assert(0); + } + if(c[5] != 6){ + assert(0); + } + if(c[6] != 7){ + assert(0); + } + if(c[7] != 8){ + assert(0); + } + + return 0; + } +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_pshuflw_01_A.d Tue May 23 18:21:32 2006 +0000 @@ -0,0 +1,61 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_pshuflw_01_A; + +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + import addon.cpuinfo; + + int main(){ + haveSSE2!()(); + + const short[8] A = [9, 9, 9, 9, 9, 9, 9, 9]; + const short[8] B = [1, 2, 3, 4, 5, 6, 7, 8]; + + short[8] c; + + asm{ + movdqu XMM0, A; + movdqu XMM1, B; + pushflw XMM0, XMM1, 0b11_10_01_00; + movdqu, XMM0; + } + + if(c[0] != 1){ + assert(0); + } + if(c[1] != 2){ + assert(0); + } + if(c[2] != 3){ + assert(0); + } + if(c[3] != 4){ + assert(0); + } + if(c[4] != 8){ + assert(0); + } + if(c[5] != 7){ + assert(0); + } + if(c[6] != 6){ + assert(0); + } + if(c[7] != 5){ + assert(0); + } + + return 0; + } +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_pshufw_01_A.d Tue May 23 18:21:32 2006 +0000 @@ -0,0 +1,49 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_pshuflw_01_A; + +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + import addon.cpuinfo; + + int main(){ + haveSSE2!()(); + + const short[4] A = [9, 9, 9, 9]; + const short[4] B = [1, 2, 3, 4]; + + short[4] c; + + asm{ + movq MM0, A; + movq MM1, B; + pushfw MM0, MM1, 0b11_10_01_00; + movq c, MM0; + } + + if(c[0] != 4){ + assert(0); + } + if(c[1] != 3){ + assert(0); + } + if(c[2] != 2){ + assert(0); + } + if(c[3] != 1){ + assert(0); + } + + return 0; + } +}else{ + pragma(msg, "DSTRESS{XFAIL}: no inline ASM support"); + static assert(0); +}
--- a/run/a/asm_pslldq_01_A.d Mon May 22 20:17:12 2006 +0000 +++ b/run/a/asm_pslldq_01_A.d Tue May 23 18:21:32 2006 +0000 @@ -4,30 +4,38 @@ module dstress.run.a.asm_pslldq_01_A; -int main(){ - version(D_InlineAsm_X86){ - const ubyte[16] a = [0, 1, 2, 3, 4, 5, 6, 7, 8 ,9, 0xA, 0xB, 0xC, 0xD, 0xE, 0xF]; +version(D_InlineAsm_X86){ + version = runTest; +}else version(D_InlineAsm_X86_64){ + version = runTest; +} + +version(runTest){ + import addon.cpuinfo; + + int main(){ + const ubyte[16] A = [1, 0, 2, 3, 4, 5, 6, 7, 8 ,9, 0xA, 0xB, 0xC, 0xD, 0xE, 0xF]; ubyte[16] b; asm{ - movdqu XMM0, a; - pslldq XMM0, 2; + movdqu XMM0, A; + pslldq XMM0, 1; movdqu b, XMM0; } - for(size_t i = 0; i < c.length-2; i++){ - if(b[i] != i+2){ + foreach(size_t i, ubyte x; b[0 .. b.length - 1]){ + if(x != i){ assert(0); } } - if(b[b.length - 2] || b[b.length - 1]){ + if(b[$-1] != 0){ 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); }