Mercurial > projects > dstress
changeset 974:000adc086356
extended asm tests
author | thomask |
---|---|
date | Thu, 27 Apr 2006 22:53:36 +0000 |
parents | 8c327aff56f3 |
children | 5f982ba378c4 |
files | norun/a/asm_lldt_01.d norun/a/asm_lmsw_01.d norun/a/asm_ltr_01.d run/a/asm_jmp_01.d run/a/asm_lar_01.d run/a/asm_lea_01_A.d run/a/asm_lea_01_B.d run/a/asm_lock_01.d run/a/asm_movddup_01.d run/a/asm_movq2dq_01.d run/a/asm_movq_01_B.d run/a/asm_movq_01_C.d run/a/asm_movsd_01.d run/a/asm_movss_01.d run/a/asm_movsx_01_A.d run/a/asm_movsx_01_B.d run/a/asm_mul_01_A.d |
diffstat | 17 files changed, 240 insertions(+), 72 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/norun/a/asm_lldt_01.d Thu Apr 27 22:53:36 2006 +0000 @@ -0,0 +1,19 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.norun.a.asm_lldt_01; + +int main(){ + version(D_InlineAsm_X86){ + asm{ + mov AX, 0; + lldt AX; + } + + return 0; + }else{ + pragma(msg, "no Inline asm support"); + static assert(0); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/norun/a/asm_lmsw_01.d Thu Apr 27 22:53:36 2006 +0000 @@ -0,0 +1,19 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.norun.a.asm_lmsw_01; + +int main(){ + version(D_InlineAsm_X86){ + asm{ + mov AX, 0; + lmsw AX; + } + + return 0; + }else{ + pragma(msg, "no Inline asm support"); + static assert(0); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/norun/a/asm_ltr_01.d Thu Apr 27 22:53:36 2006 +0000 @@ -0,0 +1,18 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.norun.a.asm_ltr_01; + +int main(){ + version(D_InlineAsm_X86){ + ushort s = 0; + asm{ + ltr s; + } + return 0; + }else{ + pragma(msg, "no Inline asm support"); + static assert(0); + } +}
--- a/run/a/asm_jmp_01.d Thu Apr 27 11:29:22 2006 +0000 +++ b/run/a/asm_jmp_01.d Thu Apr 27 22:53:36 2006 +0000 @@ -5,7 +5,7 @@ module dstress.run.a.asm_jmp_01; int main(){ - version(D_InlineAsm){ + version(D_InlineAsm_X86){ int a = 0; asm{ @@ -14,7 +14,9 @@ save1: mov a, EAX; } - assert(a == 1); + if(a != 1){ + assert(0); + } asm{ mov EAX, 0; @@ -23,7 +25,9 @@ save2: mov a, EAX; } - assert(a == 0); + if(a != 0){ + assert(0); + } return 0; @@ -31,4 +35,4 @@ 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_lar_01.d Thu Apr 27 22:53:36 2006 +0000 @@ -0,0 +1,19 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_lar_01; + +int main(){ + version(D_InlineAsm_X86){ + asm{ + mov AX, 0x0; + lar BX, AX; + } + + return 0; + }else{ + pragma(msg, "no Inline asm support"); + static assert(0); + } +}
--- a/run/a/asm_lea_01_A.d Thu Apr 27 11:29:22 2006 +0000 +++ b/run/a/asm_lea_01_A.d Thu Apr 27 22:53:36 2006 +0000 @@ -5,19 +5,22 @@ module dstress.run.a.asm_lea_01_A; int main(){ - version(D_InlineAsm){ - uint i; + version(D_InlineAsm_X86){ + uint a; + uint b; asm{ - lea EAX, i; - mov i, EAX; + lea EAX, a; + mov b, EAX; } - assert(cast(uint)&i == i); + if(b != cast(int)&a){ + assert(0); + } return 0; }else{ pragma(msg, "no Inline asm support"); static assert(0); } -} \ No newline at end of file +}
--- a/run/a/asm_lea_01_B.d Thu Apr 27 11:29:22 2006 +0000 +++ b/run/a/asm_lea_01_B.d Thu Apr 27 22:53:36 2006 +0000 @@ -5,7 +5,7 @@ module dstress.run.a.asm_lea_01_B; int main(){ - version(D_InlineAsm){ + version(D_InlineAsm_X86){ ushort i; asm{ @@ -13,11 +13,13 @@ mov i, AX; } - assert(cast(ushort)&i == i); + if(cast(ushort)&i != i){ + 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_lock_01.d Thu Apr 27 22:53:36 2006 +0000 @@ -0,0 +1,23 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_lock_01; + +int main(){ + version(D_InlineAsm_X86){ + uint i = 0; + asm{ + lock; + inc i; + } + + if(i != 1){ + assert(0); + } + return 0; + }else{ + pragma(msg, "no Inline asm support"); + static assert(0); + } +}
--- a/run/a/asm_movddup_01.d Thu Apr 27 11:29:22 2006 +0000 +++ b/run/a/asm_movddup_01.d Thu Apr 27 22:53:36 2006 +0000 @@ -4,30 +4,26 @@ module dstress.run.a.asm_movdup_01; -align(16) struct X{ - ulong[2] c; -} - int main(){ - version(D_InlineAsm){ - - double d = -3.5; - - X* x = new X; + version(D_InlineAsm_X86){ + double a = -3.5; + double[2] b; asm{ - mov EAX, x; - movddup XMM0, d; - movdqa X.c[EAX], XMM0; + movddup XMM0, a; + movdqu f, XMM0; } - assert(x.c[0]==x.c[1]); - - assert(*(cast(double*)cast(void*)&x.c[0]) == d); - + if(b[0] != a){ + assert(0); + } + + if(b[1] != a){ + assert(0); + } return 0; }else{ pragma(msg, "no Inline asm support"); static assert(0); } -} \ No newline at end of file +}
--- a/run/a/asm_movq2dq_01.d Thu Apr 27 11:29:22 2006 +0000 +++ b/run/a/asm_movq2dq_01.d Thu Apr 27 22:53:36 2006 +0000 @@ -5,23 +5,35 @@ module dstress.run.a.asm_movq2dq_01_B; int main(){ - version(D_InlineAsm){ + version(D_InlineAsm_X86){ + static ulong[2] x = [0x0011_2233_4455_6677_8899LU, 0x1234_5678_90AB_CDEF]; + ulong[2] y = x.dup; - ulong a = 0x1234_ABCD_5678_EF01; - ulong b = 2; + static ulong A = 0x1234_ABCD_5678_EF01; + ulong a = A; asm{ + movdqu XMM0, x; movq MM0, a; movq2dq XMM0, MM0; - movq b, XMM0; + movdqu y, XMM0; } - assert(a==b); - assert(b==0x1234_ABCD_5678_EF01); + if(a != A){ + assert(0); + } + + if(y[0] != A){ + assert(0); + } + + if(y[1] != 0){ + assert(0); + } return 0; }else{ pragma(msg, "no Inline asm support"); static assert(0); } -} \ No newline at end of file +}
--- a/run/a/asm_movq_01_B.d Thu Apr 27 11:29:22 2006 +0000 +++ b/run/a/asm_movq_01_B.d Thu Apr 27 22:53:36 2006 +0000 @@ -5,22 +5,29 @@ module dstress.run.a.asm_movq_01_B; int main(){ - version(D_InlineAsm){ + version(D_InlineAsm_X86){ + static ulong[2] a = [0x1234_ABCD_56789_EF90_LU, 0x1122_5566_77AA_FFFF_LU]; + ulong[2] b; - ulong a = 0x1234_ABCD_5678_EF01; - ulong b = 2; + ulong c = 0x1234_ABCD_5678_EF01_LU; asm{ - movq XMM0, a; - movq b, XMM0; + movdqu XMM0, a; + movq XMM0, c; + movdqu b, XMM0; } - assert(a==b); - assert(b==0x1234_ABCD_5678_EF01); + if(b[0] != c){ + assert(0); + } + + if(b[1] != 0){ + 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_movq_01_C.d Thu Apr 27 22:53:36 2006 +0000 @@ -0,0 +1,38 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_movq_01_C; + +int main(){ + version(D_InlineAsm_X86){ + static ulong[2] a = [0x1234_ABCD_5678_EF90_LU, 0x1122_2222_5555_FFFF_LU]; + static ulong[2] b = [0x1000_1111_5678_EF90_LU, 0x1122_5566_77AA_FFFF_LU]; + + ulong[2] c; + + asm{ + movdqu XMM0, a; + movdqu XMM1, b; + movq XMM0, XMM1; + movdqu c, XMM0; + } + + if(c[0] == a[0]){ + // Intel + }else if(c[0] == 0){ + // AMD + }else{ + assert(0); + } + + if(c[1] != b[1]){ + assert(0); + } + + return 0; + }else{ + pragma(msg, "no Inline asm support"); + static assert(0); + } +}
--- a/run/a/asm_movsd_01.d Thu Apr 27 11:29:22 2006 +0000 +++ b/run/a/asm_movsd_01.d Thu Apr 27 22:53:36 2006 +0000 @@ -5,7 +5,7 @@ module dstress.run.a.asm_movsd_01; int main(){ - version(D_InlineAsm){ + version(D_InlineAsm_X86){ double a = -12.1L; double b = 2.8L; @@ -15,11 +15,13 @@ movsd b, XMM0; } - assert(a==b); + if(a != b){ + assert(0); + } return 0; }else{ pragma(msg, "no Inline asm support"); static assert(0); } -} \ No newline at end of file +}
--- a/run/a/asm_movss_01.d Thu Apr 27 11:29:22 2006 +0000 +++ b/run/a/asm_movss_01.d Thu Apr 27 22:53:36 2006 +0000 @@ -5,7 +5,7 @@ module dstress.run.a.asm_movss_01; int main(){ - version(D_InlineAsm){ + version(D_InlineAsm_X86){ float a = -12.1L; float b = 2.8L; @@ -15,7 +15,9 @@ movss b, XMM0; } - assert(a==b); + if(a != b){ + assert(0); + } return 0; }else{
--- a/run/a/asm_movsx_01_A.d Thu Apr 27 11:29:22 2006 +0000 +++ b/run/a/asm_movsx_01_A.d Thu Apr 27 22:53:36 2006 +0000 @@ -5,11 +5,9 @@ module dstress.run.a.asm_movsx_01_A; int main(){ - version(D_InlineAsm){ - int i=0xFF_FF_FF_FFu; - byte b=byte.min; - - assert(i==0xFF_FF_FF_FFu); + version(D_InlineAsm_X86){ + int i = 0xFF_FF_FF_FFu; + byte b = byte.min; asm{ mov EAX, i; @@ -18,7 +16,9 @@ mov i, EAX; } - assert(i==byte.min); + if(i != byte.min){ + assert(0); + } i=0xFF_FF_FF_FFu; b=byte.max; @@ -30,11 +30,13 @@ mov i, EAX; } - assert(i==byte.max); + if(i != byte.max){ + assert(0); + } return 0; }else{ pragma(msg, "no Inline asm support"); static assert(0); } -} \ No newline at end of file +}
--- a/run/a/asm_movsx_01_B.d Thu Apr 27 11:29:22 2006 +0000 +++ b/run/a/asm_movsx_01_B.d Thu Apr 27 22:53:36 2006 +0000 @@ -5,11 +5,9 @@ module dstress.run.a.asm_movsx_01_B; int main(){ - version(D_InlineAsm){ - uint i=0x12_3F_FF_FFu; - byte b=-128; - - assert(i==0x12_3F_FF_FFu); + version(D_InlineAsm_X86){ + uint i = 0x12_3F_FF_FFu; + byte b = -128; asm{ mov EAX, i; @@ -18,7 +16,9 @@ mov i, EAX; } - assert(i== 0x12_3F_FF_80u); + if(i != 0x12_3F_FF_80u){ + assert(0); + } return 0; }else{
--- a/run/a/asm_mul_01_A.d Thu Apr 27 11:29:22 2006 +0000 +++ b/run/a/asm_mul_01_A.d Thu Apr 27 22:53:36 2006 +0000 @@ -5,22 +5,24 @@ module dstress.run.a.asm_mul_01_A; int main(){ - version(D_InlineAsm){ - ushort a; - ubyte x = byte.max+2; + version(D_InlineAsm_X86){ + uint i; + ubyte x = 0xFF; asm{ - mov EAX, 0x12_34_56_78u; - mov AL, 2; + mov EAX, 0x23_43_56_78u; + mov AL, 0xEE; mul x; - mov a, AX; + mov i, EAX; } - assert(a==(byte.max+2)*2); + if(i != 0x23_43_ED_12){ + assert(0); + } return 0; }else{ pragma(msg, "no Inline asm support"); static assert(0); } -} \ No newline at end of file +}