Mercurial > projects > dstress
changeset 698:5b99d1577b50
added some more iasm tests
author | thomask |
---|---|
date | Mon, 03 Oct 2005 14:17:40 +0000 |
parents | fbee62becd2c |
children | 9b960ca15583 |
files | run/a/asm_addsd_01.d run/a/asm_addss_01.d run/a/asm_bsf_01_A.d run/a/asm_bsf_01_B.d run/a/asm_bsr_01_A.d run/a/asm_bsr_01_B.d run/a/asm_bswap_01.d run/a/asm_call_01.d run/a/asm_clc_01.d run/a/asm_clflush_01.d run/a/asm_fwait_01.d run/a/asm_test_01_A.d run/a/asm_test_01_B.d run/a/asm_test_01_C.d run/a/asm_wait_01.d run/a/asm_xadd_01_A.d run/a/asm_xadd_01_B.d run/a/asm_xadd_01_C.d run/a/asm_xchg_01_A.d run/a/asm_xchg_01_B.d run/a/asm_xchg_01_C.d run/a/asm_xor_01_A.d run/a/asm_xor_01_B.d run/a/asm_xor_01_C.d |
diffstat | 24 files changed, 617 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_addsd_01.d Mon Oct 03 14:17:40 2005 +0000 @@ -0,0 +1,32 @@ +// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_sub_01_C.d $ +// $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $ +// $Author: thomask $ + +module dstress.run.a.asm_addsd_01; + +int main(){ + version(D_InlineAsm){ + double a = 1.2; + double b = 0.2; + double c = 1.4; + + asm{ + movq XMM0, a; + movq XMM1, b; + addsd XMM1, XMM0; + movq c, XMM1; + } + + a += b; + + b = a-c; + b = (b>0) ? b : (-1 * b); + + assert(b < b.epsilon*4); + + 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_addss_01.d Mon Oct 03 14:17:40 2005 +0000 @@ -0,0 +1,32 @@ +// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_sub_01_C.d $ +// $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $ +// $Author: thomask $ + +module dstress.run.a.asm_addss_01; + +int main(){ + version(D_InlineAsm){ + float a = 1.2; + float b = 0.2; + float c = 1.4; + + asm{ + movd XMM0, a; + movd XMM1, b; + addss XMM1, XMM0; + movd c, XMM1; + } + + a += b; + + b = a-c; + b = (b>0) ? b : (-1 * b); + + assert(b < b.epsilon*4); + + 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_bsf_01_A.d Mon Oct 03 14:17:40 2005 +0000 @@ -0,0 +1,23 @@ +// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_sub_01_C.d $ +// $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $ +// $Author: thomask $ + +module dstress.run.a.asm_bsf_01_A; + +int main(){ + version(D_InlineAsm){ + ushort a = 0x3000; + + asm{ + bsf AX, a; + mov a, AX; + } + + assert(a==12); + + 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_bsf_01_B.d Mon Oct 03 14:17:40 2005 +0000 @@ -0,0 +1,23 @@ +// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_sub_01_C.d $ +// $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $ +// $Author: thomask $ + +module dstress.run.a.asm_bsf_01_B; + +int main(){ + version(D_InlineAsm){ + uint a = 0x30000; + + asm{ + bsf EAX, a; + mov a, EAX; + } + + assert(a==16); + + 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_bsr_01_A.d Mon Oct 03 14:17:40 2005 +0000 @@ -0,0 +1,23 @@ +// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_sub_01_C.d $ +// $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $ +// $Author: thomask $ + +module dstress.run.a.asm_bsr_01_A; + +int main(){ + version(D_InlineAsm){ + uint a = 0x30000; + + asm{ + bsr EAX, a; + mov a, EAX; + } + + assert(a==17); + + 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_bsr_01_B.d Mon Oct 03 14:17:40 2005 +0000 @@ -0,0 +1,23 @@ +// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_sub_01_C.d $ +// $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $ +// $Author: thomask $ + +module dstress.run.a.asm_bsr_01_B; + +int main(){ + version(D_InlineAsm){ + ushort a = 0x3000; + + asm{ + bsr AX, a; + mov a, AX; + } + + assert(a==13); + + 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_bswap_01.d Mon Oct 03 14:17:40 2005 +0000 @@ -0,0 +1,24 @@ +// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_sub_01_C.d $ +// $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $ +// $Author: thomask $ + +module dstress.run.a.asm_bswp_01; + +int main(){ + version(D_InlineAsm){ + uint a = 0xAB_34_56_78; + + asm{ + mov EAX, a; + bswap EAX; + mov a, EAX; + } + + assert(a==0x78_56_34_AB); + + 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_call_01.d Mon Oct 03 14:17:40 2005 +0000 @@ -0,0 +1,30 @@ +// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_sub_01_C.d $ +// $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $ +// $Author: thomask $ + +module dstress.run.a.asm_call_01; + +int main(){ + version(D_InlineAsm){ + uint a = 0xAB_34_56_78; + + asm{ + mov EAX, a; + call dummy; + jmp dummy_end; + dummy: + inc EAX; + ret; + dummy_end: + inc EAX; + mov a, EAX; + } + + assert(a==0xAB_34_56_7A); + + 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_clc_01.d Mon Oct 03 14:17:40 2005 +0000 @@ -0,0 +1,29 @@ +// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_cl_01.d $ +// $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $ +// $Author: thomask $ + +module dstress.run.a.asm_clc_01; + +int main(){ + version(D_InlineAsm){ + uint a; + + asm{ + mov EAX, 1; + cmp EAX, 2; + clc; + jb dummy; + inc EAX; + dummy: + inc EAX; + mov a, EAX; + } + + assert(a==3); + + 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_clflush_01.d Mon Oct 03 14:17:40 2005 +0000 @@ -0,0 +1,33 @@ +// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_cl_01.d $ +// $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $ +// $Author: thomask $ + +module dstress.run.a.asm_clflush_01; + +int main(){ + version(D_InlineAsm){ + uint a; + ubyte b = 1; + + asm{ + mov EAX, 1; + cpuid; + mov EAX, EDX; + mov EBX, 0x2000; + and EAX, EBX; + cmp EAX, EBX; + jne not_supported; + clflush b; + inc EAX; + not_supported: + mov a, EAX; + } + + assert(a==0x20001 || a==1); + + 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_fwait_01.d Mon Oct 03 14:17:40 2005 +0000 @@ -0,0 +1,18 @@ +// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_sub_01_C.d $ +// $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $ +// $Author: thomask $ + +module dstress.run.a.asm_fwait_01; + +int main(){ + version(D_InlineAsm){ + asm{ + fwait; + } + + 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_test_01_A.d Mon Oct 03 14:17:40 2005 +0000 @@ -0,0 +1,28 @@ +// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_sub_01_C.d $ +// $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $ +// $Author: thomask $ + +module dstress.run.a.asm_test_01_A; + +int main(){ + version(D_InlineAsm){ + ubyte a = 3u; + ubyte b = 2u; + + asm{ + mov AL, a; + test b, AL; + jg dummy; + mov a, 0; + dummy: + inc a; + } + + assert(a==4); + + 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_test_01_B.d Mon Oct 03 14:17:40 2005 +0000 @@ -0,0 +1,28 @@ +// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_sub_01_C.d $ +// $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $ +// $Author: thomask $ + +module dstress.run.a.asm_test_01_B; + +int main(){ + version(D_InlineAsm){ + ushort a = 3u; + ushort b = 2u; + + asm{ + mov AX, a; + test b, AX; + jg dummy; + mov a, 0; + dummy: + inc a; + } + + assert(a==4); + + 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_test_01_C.d Mon Oct 03 14:17:40 2005 +0000 @@ -0,0 +1,28 @@ +// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_sub_01_C.d $ +// $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $ +// $Author: thomask $ + +module dstress.run.a.asm_test_01_C; + +int main(){ + version(D_InlineAsm){ + uint a = 3u; + uint b = 2u; + + asm{ + mov EAX, a; + test b, EAX; + jg dummy; + mov a, 0; + dummy: + inc a; + } + + assert(a==4); + + 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_wait_01.d Mon Oct 03 14:17:40 2005 +0000 @@ -0,0 +1,18 @@ +// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_sub_01_C.d $ +// $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $ +// $Author: thomask $ + +module dstress.run.a.asm_wait_01; + +int main(){ + version(D_InlineAsm){ + asm{ + wait; + } + + 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_xadd_01_A.d Mon Oct 03 14:17:40 2005 +0000 @@ -0,0 +1,25 @@ +// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_sub_01_C.d $ +// $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $ +// $Author: thomask $ + +module dstress.run.a.asm_xadd_01_A; + +int main(){ + version(D_InlineAsm){ + ubyte a = 1u; + ubyte b = 3u; + + asm{ + mov AL, a; + xadd b, AL; + mov a, AL; + } + + assert(a==3); + assert(b==4); + 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_xadd_01_B.d Mon Oct 03 14:17:40 2005 +0000 @@ -0,0 +1,25 @@ +// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_sub_01_C.d $ +// $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $ +// $Author: thomask $ + +module dstress.run.a.asm_xadd_01_C; + +int main(){ + version(D_InlineAsm){ + ushort a = 1u; + ushort b = 3u; + + asm{ + mov AX, a; + xadd b, AX; + mov a, AX; + } + + assert(a==3); + assert(b==4); + 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_xadd_01_C.d Mon Oct 03 14:17:40 2005 +0000 @@ -0,0 +1,25 @@ +// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_sub_01_C.d $ +// $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $ +// $Author: thomask $ + +module dstress.run.a.asm_xadd_01_C; + +int main(){ + version(D_InlineAsm){ + uint a = 1u; + uint b = 3u; + + asm{ + mov EAX, a; + xadd b, EAX; + mov a, EAX; + } + + assert(a==3); + assert(b==4); + 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_xchg_01_A.d Mon Oct 03 14:17:40 2005 +0000 @@ -0,0 +1,25 @@ +// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_sub_01_C.d $ +// $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $ +// $Author: thomask $ + +module dstress.run.a.asm_xchg_01_A; + +int main(){ + version(D_InlineAsm){ + ubyte a = 1u; + ubyte b = 3u; + + asm{ + mov AL, a; + xchg AL, b; + mov a, AL; + } + + assert(a==3u); + assert(b==1u); + 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_xchg_01_B.d Mon Oct 03 14:17:40 2005 +0000 @@ -0,0 +1,25 @@ +// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_sub_01_C.d $ +// $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $ +// $Author: thomask $ + +module dstress.run.a.asm_xchg_01_B; + +int main(){ + version(D_InlineAsm){ + ushort a = 1u; + ushort b = 3u; + + asm{ + mov AX, a; + xchg AX, b; + mov a, AX; + } + + assert(a==3u); + assert(b==1u); + 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_xchg_01_C.d Mon Oct 03 14:17:40 2005 +0000 @@ -0,0 +1,25 @@ +// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_sub_01_C.d $ +// $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $ +// $Author: thomask $ + +module dstress.run.a.asm_xchg_01_C; + +int main(){ + version(D_InlineAsm){ + uint a = 1u; + uint b = 3u; + + asm{ + mov EAX, a; + xchg EAX, b; + mov a, EAX; + } + + assert(a==3u); + assert(b==1u); + 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_xor_01_A.d Mon Oct 03 14:17:40 2005 +0000 @@ -0,0 +1,25 @@ +// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_sub_01_C.d $ +// $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $ +// $Author: thomask $ + +module dstress.run.a.asm_xor_01_A; + +int main(){ + version(D_InlineAsm){ + ubyte a = 1u; + ubyte b = 3u; + + asm{ + mov AL, a; + xor b, AL; + mov a, AL; + } + + assert(a==1u); + assert(b==2u); + 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_xor_01_B.d Mon Oct 03 14:17:40 2005 +0000 @@ -0,0 +1,25 @@ +// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_sub_01_C.d $ +// $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $ +// $Author: thomask $ + +module dstress.run.a.asm_xor_01_B; + +int main(){ + version(D_InlineAsm){ + ushort a = 1u; + ushort b = 3u; + + asm{ + mov AX, a; + xor b, AX; + mov a, AX; + } + + assert(a==1u); + assert(b==2u); + 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_xor_01_C.d Mon Oct 03 14:17:40 2005 +0000 @@ -0,0 +1,25 @@ +// $HeadURL: svn://dstress.kuehne.cn/run/a/asm_sub_01_C.d $ +// $Date: 2005-08-20 20:24:41 +0200 (Sat, 20 Aug 2005) $ +// $Author: thomask $ + +module dstress.run.a.asm_xor_01_C; + +int main(){ + version(D_InlineAsm){ + uint a = 1u; + uint b = 3u; + + asm{ + mov EAX, a; + xor b, EAX; + mov a, EAX; + } + + assert(a==1u); + assert(b==2u); + return 0; + }else{ + pragma(msg, "no Inline asm support"); + static assert(0); + } +} \ No newline at end of file