Mercurial > projects > dstress
changeset 973:8c327aff56f3
extended asm tests
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_adc_01_D.d Thu Apr 27 11:29:22 2006 +0000 @@ -0,0 +1,40 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +// __DSTRESS_REQUIRE__ D_InlineAsm_X86 + +module dstress.run.a.asm_adc_01_D; + +int main(){ + version(D_InlineAsm_X86){ + byte a; + + asm{ + clc; + mov AL, 3; + adc AL, 5; + mov a, AL; + } + + if(a != 8){ + assert(0); + } + + asm{ + stc; + mov AL, 3; + adc AL, 5; + mov a, AL; + } + + if(a != 9){ + assert(0); + } + + return 0; + }else{ + pragma(msg, "no Inline asm support"); + static assert(0); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_adc_01_E.d Thu Apr 27 11:29:22 2006 +0000 @@ -0,0 +1,40 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +// __DSTRESS_REQUIRE__ D_InlineAsm_X86 + +module dstress.run.a.asm_adc_01_E; + +int main(){ + version(D_InlineAsm_X86){ + short a; + + asm{ + clc; + mov AX, 3; + adc AX, 5; + mov a, AX; + } + + if(a != 8){ + assert(0); + } + + asm{ + stc; + mov AX, 3; + adc AX, 5; + mov a, AX; + } + + if(a != 9){ + assert(0); + } + + return 0; + }else{ + pragma(msg, "no Inline asm support"); + static assert(0); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_adc_01_F.d Thu Apr 27 11:29:22 2006 +0000 @@ -0,0 +1,40 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +// __DSTRESS_REQUIRE__ D_InlineAsm_X86 + +module dstress.run.a.asm_adc_01_F; + +int main(){ + version(D_InlineAsm_X86){ + int a; + + asm{ + clc; + mov EAX, 3; + adc EAX, 5; + mov a, EAX; + } + + if(a != 8){ + assert(0); + } + + asm{ + stc; + mov EAX, 3; + adc EAX, 5; + mov a, EAX; + } + + if(a != 9){ + assert(0); + } + + return 0; + }else{ + pragma(msg, "no Inline asm support"); + static assert(0); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_adc_01_H.d Thu Apr 27 11:29:22 2006 +0000 @@ -0,0 +1,40 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +// __DSTRESS_REQUIRE__ D_InlineAsm_X86 + +module dstress.run.a.asm_adc_01_H; + +int main(){ + version(D_InlineAsm_X86){ + byte a; + + asm{ + clc; + mov BL, 3; + adc BL, 5; + mov a, BL; + } + + if(a != 8){ + assert(0); + } + + asm{ + stc; + mov BL, 3; + adc BL, 5; + mov a, BL; + } + + if(a != 9){ + assert(0); + } + + return 0; + }else{ + pragma(msg, "no Inline asm support"); + static assert(0); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_adc_01_I.d Thu Apr 27 11:29:22 2006 +0000 @@ -0,0 +1,40 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +// __DSTRESS_REQUIRE__ D_InlineAsm_X86 + +module dstress.run.a.asm_adc_01_I; + +int main(){ + version(D_InlineAsm_X86){ + short a; + + asm{ + clc; + mov BX, 3; + adc BX, 5; + mov a, BX; + } + + if(a != 8){ + assert(0); + } + + asm{ + stc; + mov BX, 3; + adc BX, 5; + mov a, BX; + } + + if(a != 9){ + assert(0); + } + + return 0; + }else{ + pragma(msg, "no Inline asm support"); + static assert(0); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_adc_01_J.d Thu Apr 27 11:29:22 2006 +0000 @@ -0,0 +1,40 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +// __DSTRESS_REQUIRE__ D_InlineAsm_X86 + +module dstress.run.a.asm_adc_01_J; + +int main(){ + version(D_InlineAsm_X86){ + int a; + + asm{ + clc; + mov EBX, 3; + adc EBX, 5; + mov a, EBX; + } + + if(a != 8){ + assert(0); + } + + asm{ + stc; + mov EBX, 3; + adc EBX, 5; + mov a, EBX; + } + + if(a != 9){ + assert(0); + } + + return 0; + }else{ + pragma(msg, "no Inline asm support"); + static assert(0); + } +}
--- a/run/a/asm_add_01_A.d Fri Apr 21 20:23:34 2006 +0000 +++ b/run/a/asm_add_01_A.d Thu Apr 27 11:29:22 2006 +0000 @@ -13,13 +13,13 @@ assert(b==0xFFu); asm{ - mov EAX, 0; + mov EAX, 0x98_76_54_32; mov AH, b; add AH, 1; mov i, EAX; } - assert(i==0); + assert(i==0x98_76_00_32); assert(b==0xFFu); return 0; @@ -27,4 +27,4 @@ pragma(msg, "no Inline asm support"); static assert(0); } -} \ No newline at end of file +}
--- a/run/a/asm_add_01_B.d Fri Apr 21 20:23:34 2006 +0000 +++ b/run/a/asm_add_01_B.d Thu Apr 27 11:29:22 2006 +0000 @@ -13,13 +13,13 @@ assert(s==0xFFFFu); asm{ - mov EAX, 0; + mov EAX, 0x98_76_54_32; mov AX, s; add AX, 1; mov i, EAX; } - assert(i==0u); + assert(i==0x98_76_00_00u); assert(s==0xFFFFu); return 0; @@ -27,4 +27,4 @@ pragma(msg, "no Inline asm support"); static assert(0); } -} \ No newline at end of file +}
--- a/run/a/asm_movzx_01_A.d Fri Apr 21 20:23:34 2006 +0000 +++ b/run/a/asm_movzx_01_A.d Thu Apr 27 11:29:22 2006 +0000 @@ -5,7 +5,7 @@ module dstress.run.a.asm_movzx_01_A; int main(){ - version(D_InlineAsm){ + version(D_InlineAsm_X86){ uint i = 0xFF_FF_FF_FFu; ubyte b = 0xFF; @@ -19,8 +19,12 @@ mov i, EAX; } - assert(i==0xFF_FF_00_FFu); - assert(b==0xFF); + if(i != 0xFF_FF_00_FFu){ + assert(0); + } + if(b != 0xFF){ + assert(0); + } i=0xFF_FF_FF_FFu; b=0x12; @@ -32,12 +36,16 @@ mov i, EAX; } - assert(i==0xFF_FF_00_12u); - assert(b==0x12); + if(i != 0xFF_FF_00_12u){ + assert(0); + } + if(b != 0x12){ + assert(0); + } return 0; }else{ pragma(msg, "no Inline asm support"); static assert(0); } -} \ No newline at end of file +}
--- a/run/a/asm_movzx_01_B.d Fri Apr 21 20:23:34 2006 +0000 +++ b/run/a/asm_movzx_01_B.d Thu Apr 27 11:29:22 2006 +0000 @@ -5,7 +5,7 @@ module dstress.run.a.asm_movzx_01_B; int main(){ - version(D_InlineAsm){ + version(D_InlineAsm_X86){ uint i = 0xFF_FF_FF_FFu; ubyte b = 0xFF; @@ -19,11 +19,15 @@ mov i, EAX; } - assert(i==0x00_00_00_FFu); - assert(b==0xFF); + if(i != 0x00_00_00_FFu){ + assert(0); + } + if(b != 0xFF){ + assert(0); + } i = 0xFF_FF_FF_FFu; - b=0x12; + b = 0x12; asm{ mov EAX, i; @@ -32,12 +36,16 @@ mov i, EAX; } - assert(i==0x00_00_00_12u); - assert(b==0x12); + if(i != 0x00_00_00_12u){ + assert(0); + } + if(b != 0x12){ + assert(0); + } return 0; }else{ pragma(msg, "no Inline asm support"); static assert(0); } -} \ No newline at end of file +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_not_02_A.d Thu Apr 27 11:29:22 2006 +0000 @@ -0,0 +1,27 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_not_02_A; + +int main(){ + version(D_InlineAsm_X86){ + uint i; + + asm{ + mov EAX, 0x12_FE_34_DC; + mov AL, 0b0110_1110; + not AL; + mov i, EAX; + } + + if(i != (0x12_FE_34_00 | 0b1001_0001)){ + assert(0); + } + + return 0; + }else{ + pragma(msg, "no Inline asm support"); + static assert(0); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_not_02_B.d Thu Apr 27 11:29:22 2006 +0000 @@ -0,0 +1,27 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_not_02_B; + +int main(){ + version(D_InlineAsm_X86){ + uint i; + + asm{ + mov EAX, 0x12_FE_34_DC; + mov AX, 0b1100_1001_0110_1110; + not AX; + mov i, EAX; + } + + if(i != (0x12_FE_00_00 | 0b0011_0110_1001_0001)){ + assert(0); + } + + return 0; + }else{ + pragma(msg, "no Inline asm support"); + static assert(0); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_or_02_A.d Thu Apr 27 11:29:22 2006 +0000 @@ -0,0 +1,27 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_or_02_A; + +int main(){ + version(D_InlineAsm_X86){ + uint a; + + asm{ + mov EAX, 0x45_FD_BC_67; + mov AL, 0b0100_0001; + or AL, 0b0001_1000; + mov a, EAX; + } + + if(a != (0x45_FD_BC_00 | 0b0101_1001)){ + assert(0); + } + + return 0; + }else{ + pragma(msg, "no Inline asm support"); + static assert(0); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_or_02_B.d Thu Apr 27 11:29:22 2006 +0000 @@ -0,0 +1,27 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_or_02_B; + +int main(){ + version(D_InlineAsm_X86){ + uint a; + + asm{ + mov EAX, 0x45_FD_BC_67; + mov AX, 0b0000_1111_0100_0001; + or AX, 0b1010_0001_0001_1000; + mov a, EAX; + } + + if(a != (0x45_FD_00_00 | 0b1010_1111_0101_1001)){ + assert(0); + } + + return 0; + }else{ + pragma(msg, "no Inline asm support"); + static assert(0); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_pause_01_A.d Thu Apr 27 11:29:22 2006 +0000 @@ -0,0 +1,20 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_pause_01_A; + +int main(){ + version(D_InlineAsm_X86){ + + asm{ + rep; + nop; + } + + return 0; + }else{ + pragma(msg, "no Inline asm support"); + static assert(0); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_pextrw_01_A.d Thu Apr 27 11:29:22 2006 +0000 @@ -0,0 +1,33 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_pextrw_01_A; + +int main(){ + version(D_InlineAsm_X86){ + static ushort[8] x = [1, 2, 3, 4, 5, 0xFFFF, 7, 0]; + uint a; + uint b; + + asm{ + movdqu XMM0, x; + pextrw EAX, XMM0, 5; + mov a, EAX; + pextrw EDX, XMM0, 1; + mov b, EDX; + } + + if(a != 0xFFFF){ + assert(0); + } + if(b != 2){ + assert(0); + } + + return 0; + }else{ + pragma(msg, "no Inline asm support"); + static assert(0); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_pextrw_01_B.d Thu Apr 27 11:29:22 2006 +0000 @@ -0,0 +1,33 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_pextrw_01_B; + +int main(){ + version(D_InlineAsm_X86){ + ulong x = 0x0500_FFFF_0707_1234; + uint a; + uint b; + + asm{ + movq MM0, x; + pextrw EAX, MM0, 2; + mov a, EAX; + pextrw EDX, MM0, 1; + mov b, EDX; + } + + if(a != 0xFFFF){ + assert(0); + } + if(b != 0x0707){ + assert(0); + } + + return 0; + }else{ + pragma(msg, "no Inline asm support"); + static assert(0); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_pinsrw_01_A.d Thu Apr 27 11:29:22 2006 +0000 @@ -0,0 +1,29 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_pinsrw_01_A; + +int main(){ + version(D_InlineAsm_X86){ + ulong x = 0x0500_FFFF_0707_1234; + ulong y; + uint a = 0x1234_5678; + + asm{ + movq MM0, x; + mov EAX, a; + pinsrw MM0, EAX, 0; + movq y, MM0; + } + + if(y != 0x0500_FFFF_0707_5678){ + assert(0); + } + + return 0; + }else{ + pragma(msg, "no Inline asm support"); + static assert(0); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_pinsrw_01_B.d Thu Apr 27 11:29:22 2006 +0000 @@ -0,0 +1,28 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_pinsrw_01_B; + +int main(){ + version(D_InlineAsm_X86){ + ulong x = 0x0500_FFFF_0707_1234; + ulong y; + short a = 0x5678; + + asm{ + movq MM0, x; + pinsrw MM0, a, 0; + movq y, MM0; + } + + if(y != 0x0500_FFFF_0707_5678){ + assert(0); + } + + return 0; + }else{ + pragma(msg, "no Inline asm support"); + static assert(0); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_pinsrw_01_C.d Thu Apr 27 11:29:22 2006 +0000 @@ -0,0 +1,57 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +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; + + asm{ + movdqu XMM0, a; + mov EAX, 0x12AB_34CD; + mov EBX, 0xFDCE_0010; + pinsrw XMM0, EAX, 0; + pinsrw XMM0, EBX, 7; + movdqu b, XMM0; + } + + if(b[0] != 0x34CD){ + assert(0); + } + + if(b[1] != 2){ + assert(0); + } + + if(b[2] != 3){ + assert(0); + } + + if(b[3] != 4){ + assert(0); + } + + if(b[4] != 5){ + assert(0); + } + + if(b[5] != 0xFFFF){ + assert(0); + } + + if(b[6] != 7){ + assert(0); + } + + if(b[7] != 0x0010){ + assert(0); + } + return 0; + }else{ + pragma(msg, "no Inline asm support"); + static assert(0); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_pinsrw_01_D.d Thu Apr 27 11:29:22 2006 +0000 @@ -0,0 +1,58 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +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; + + ushort x = 0x34CD; + ushort y = 0x0010; + + asm{ + movdqu XMM0, a; + pinsrw XMM0, x, 0; + pinsrw XMM0, y, 7; + movdqu b, XMM0; + } + + if(b[0] != 0x34CD){ + assert(0); + } + + if(b[1] != 2){ + assert(0); + } + + if(b[2] != 3){ + assert(0); + } + + if(b[3] != 4){ + assert(0); + } + + if(b[4] != 5){ + assert(0); + } + + if(b[5] != 0xFFFF){ + assert(0); + } + + if(b[6] != 7){ + assert(0); + } + + if(b[7] != 0x0010){ + assert(0); + } + return 0; + }else{ + pragma(msg, "no Inline asm support"); + static assert(0); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_pmovmskb_01_A.d Thu Apr 27 11:29:22 2006 +0000 @@ -0,0 +1,28 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_pmovmskb_01_A; + +int main(){ + version(D_InlineAsm_X86){ + static ushort[8] a = [0x8000, 0x0800, 0x0080, 0x0008, 0x0888, 0x7FFF, 0xFFFF, 0]; + uint i; + + asm{ + movdqu XMM0, a; + mov EAX, 0xFF12_34BC; + pmovmskb EAX, XMM0; + mov i, EAX; + } + + if(i != 0b0011_0101_0001_0010){ + assert(0); + } + + return 0; + }else{ + pragma(msg, "no Inline asm support"); + static assert(0); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_pmovmskb_01_B.d Thu Apr 27 11:29:22 2006 +0000 @@ -0,0 +1,28 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_pmovmskb_01_B; + +int main(){ + version(D_InlineAsm_X86){ + ulong a = 0x0888_7FFF_FFFF_0000; + uint i; + + asm{ + movq MM0, a; + mov EAX, 0xFF12_34BC; + pmovmskb EAX, MM0; + mov i, EAX; + } + + if(i != 0b0101_1100){ + assert(0); + } + + return 0; + }else{ + pragma(msg, "no Inline asm support"); + static assert(0); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_por_02_A.d Thu Apr 27 11:29:22 2006 +0000 @@ -0,0 +1,41 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_por_02_A; + +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 = A; + ushort[8] b = B; + + asm{ + movdqu XMM0, A; + movdqu XMM1, B; + por XMM1, XMM0; + movdqu a, XMM0; + movdqu b, XMM1; + } + + + foreach(size_t i, ushort s; A){ + if(s != a[i]){ + assert(0); + } + } + foreach(size_t i, ushort s; C){ + if(s != b[i]){ + assert(0); + } + } + + return 0; + }else{ + pragma(msg, "no Inline asm support"); + static assert(0); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_por_02_B.d Thu Apr 27 11:29:22 2006 +0000 @@ -0,0 +1,33 @@ +// $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); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_prefetchnta_01.d Thu Apr 27 11:29:22 2006 +0000 @@ -0,0 +1,20 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_prefetchnta_01; + +int main(){ + version(D_InlineAsm_X86){ + byte b; + + asm{ + prefetchnta b; + } + + return 0; + }else{ + pragma(msg, "no Inline asm support"); + static assert(0); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_prefetcht0_01.d Thu Apr 27 11:29:22 2006 +0000 @@ -0,0 +1,20 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_prefetcht0_01; + +int main(){ + version(D_InlineAsm_X86){ + byte b; + + asm{ + prefetcht0 b; + } + + return 0; + }else{ + pragma(msg, "no Inline asm support"); + static assert(0); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_prefetcht1_01.d Thu Apr 27 11:29:22 2006 +0000 @@ -0,0 +1,20 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_prefetch1_01; + +int main(){ + version(D_InlineAsm_X86){ + byte b; + + asm{ + prefetcht1 b; + } + + return 0; + }else{ + pragma(msg, "no Inline asm support"); + static assert(0); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_prefetcht2_01.d Thu Apr 27 11:29:22 2006 +0000 @@ -0,0 +1,20 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_prefetch2_01; + +int main(){ + version(D_InlineAsm_X86){ + byte b; + + asm{ + prefetcht2 b; + } + + return 0; + }else{ + pragma(msg, "no Inline asm support"); + static assert(0); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_pslldq_01_A.d Thu Apr 27 11:29:22 2006 +0000 @@ -0,0 +1,33 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +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]; + ubyte[16] b; + + asm{ + movdqu XMM0, a; + pslldq XMM0, 2; + movdqu b, XMM0; + } + + for(size_t i = 0; i < c.length-2; i++){ + if(b[i] != i+2){ + assert(0); + } + } + + if(b[b.length - 2] || b[b.length - 1]){ + assert(0); + } + + return 0; + }else{ + pragma(msg, "no Inline asm support"); + static assert(0); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_psrldq_01_A.d Thu Apr 27 11:29:22 2006 +0000 @@ -0,0 +1,33 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_psrldq_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]; + ubyte[16] b; + + asm{ + movdqu XMM0, a; + psrldq XMM0, 2; + movdqu b, XMM0; + } + + for(size_t i = 2; i < c.length; i++){ + if(b[i] != i-2){ + assert(0); + } + } + + if(b[0] || b[1]){ + assert(0); + } + + return 0; + }else{ + pragma(msg, "no Inline asm support"); + static assert(0); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_pxor_02_A.d Thu Apr 27 11:29:22 2006 +0000 @@ -0,0 +1,41 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_pxor_02_A; + +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, 0x2020, 0x2112, 0x0101, 0x2108, 0xF0FF, 0x0102, 0x3333]; + + ushort[8] a = A; + ushort[8] b = B; + + asm{ + movdqu XMM0, A; + movdqu XMM1, B; + pxor XMM1, XMM0; + movdqu a, XMM0; + movdqu b, XMM1; + } + + + foreach(size_t i, ushort s; A){ + if(s != a[i]){ + assert(0); + } + } + foreach(size_t i, ushort s; C){ + if(s != b[i]){ + assert(0); + } + } + + return 0; + }else{ + pragma(msg, "no Inline asm support"); + static assert(0); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_pxor_02_B.d Thu Apr 27 11:29:22 2006 +0000 @@ -0,0 +1,33 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_pxor_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, 0x2020, 0x2112, 0x0101, 0x2108, 0xF0FF, 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); + } +}