Mercurial > projects > dstress
changeset 701:93c604903b9d
small iasm update
author | thomask |
---|---|
date | Wed, 05 Oct 2005 08:12:26 +0000 |
parents | 98e3d2ab382f |
children | 4c5b7f538994 |
files | run/a/asm_lddqu_01.d run/a/asm_lea_01_A.d run/a/asm_lea_01_B.d run/a/asm_leave_01.d run/a/asm_lfence_01.d run/a/asm_mfence_01.d run/a/asm_movd_01.d run/a/asm_movddup_01.d run/a/asm_movdq2q_01.d run/a/asm_movdqa_01.d run/a/asm_movdqu_01.d run/a/asm_movntdq_01.d run/a/asm_movnti_01.d run/a/asm_movq2dq_01.d run/a/asm_movq_01_A.d run/a/asm_movq_01_B.d run/a/asm_movsd_01.d run/a/asm_movss_01.d |
diffstat | 18 files changed, 496 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/run/a/asm_lddqu_01.d Wed Oct 05 08:12:26 2005 +0000 @@ -0,0 +1,42 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_lddqu_01; + +align(1) struct X{ + ubyte a; + ulong b; +} + +align(16) struct Y{ + ulong c; +} + +int main(){ + version(D_InlineAsm){ + X* x = new X; + + assert(cast(size_t)&(x.b) % 2 == 1); + + x.b = 0x0123_4567_89AB_CDEF_LU; + + Y* y = new Y; + + assert(cast(size_t)&(y.c) % 16 == 0); + + asm{ + mov EAX, x; + lddqu XMM0, X.b[EAX]; + mov EAX, y; + movdqa Y.c[EAX], XMM0; + } + + assert(y.c==0x0123_4567_89AB_CDEF_LU); + + 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_lea_01_A.d Wed Oct 05 08:12:26 2005 +0000 @@ -0,0 +1,23 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_lea_01_A; + +int main(){ + version(D_InlineAsm){ + uint i; + + asm{ + lea EAX, i; + mov i, EAX; + } + + assert(cast(uint)&i == i); + + 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_lea_01_B.d Wed Oct 05 08:12:26 2005 +0000 @@ -0,0 +1,23 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_lea_01_B; + +int main(){ + version(D_InlineAsm){ + ushort i; + + asm{ + lea AX, i; + mov i, AX; + } + + assert(cast(ushort)&i == i); + + 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_leave_01.d Wed Oct 05 08:12:26 2005 +0000 @@ -0,0 +1,26 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_leave_01; + +int main(){ + version(D_InlineAsm){ + uint a = 1; + + asm{ + mov EAX, a; + enter 2048, 30; + leave; + inc EAX; + mov a, EAX; + } + + assert(a == 2); + + 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_lfence_01.d Wed Oct 05 08:12:26 2005 +0000 @@ -0,0 +1,19 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_lfence_01; + +int main(){ + version(D_InlineAsm){ + + asm{ + lfence; + } + + 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_mfence_01.d Wed Oct 05 08:12:26 2005 +0000 @@ -0,0 +1,19 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_lfence_01; + +int main(){ + version(D_InlineAsm){ + + asm{ + mfence; + } + + 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_movd_01.d Wed Oct 05 08:12:26 2005 +0000 @@ -0,0 +1,25 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_movd_01; + +int main(){ + version(D_InlineAsm){ + + uint a = 0x1234_ABCD; + int b = 2; + + asm{ + movd MM0, a; + movd b, MM0; + } + + assert(a==b); + + 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_movddup_01.d Wed Oct 05 08:12:26 2005 +0000 @@ -0,0 +1,33 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +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; + + asm{ + mov EAX, x; + movddup XMM0, d; + movdqa X.c[EAX], XMM0; + } + + assert(x.c[0]==x.c[1]); + + assert(*(cast(double*)cast(void*)&x.c[0]) == d); + + 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_movdq2q_01.d Wed Oct 05 08:12:26 2005 +0000 @@ -0,0 +1,25 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_movdq2q_01; + +int main(){ + version(D_InlineAsm){ + double a = -2.5L; + double b = 1.1L; + + asm{ + movq XMM0, a; + movdq2q MM0, XMM0; + movq b, XMM0; + } + + assert(a==b); + + 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_movdqa_01.d Wed Oct 05 08:12:26 2005 +0000 @@ -0,0 +1,36 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_movdqa_01; + +align(16) struct X{ + ulong[2] c; +} + +int main(){ + version(D_InlineAsm){ + X* a = new X; + a.c[0]=1; + a.c[1]=2; + X* b = new X; + + assert(a.c[0]!=b.c[0]); + assert(a.c[1]!=b.c[1]); + + asm{ + mov EAX, a; + mov EBX, b; + movdqa XMM0, X.c[EAX]; + movdqa X.c[EBX], XMM0; + } + + assert(a.c[0]==b.c[0]); + assert(a.c[1]==b.c[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_movdqu_01.d Wed Oct 05 08:12:26 2005 +0000 @@ -0,0 +1,37 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_movdqu_01; + +align(3) struct X{ + byte dummy; + ulong[2] c; +} + +int main(){ + version(D_InlineAsm){ + X* a = new X; + a.c[0]=1; + a.c[1]=2; + X* b = new X; + + assert(a.c[0]!=b.c[0]); + assert(a.c[1]!=b.c[1]); + + asm{ + mov EAX, a; + mov EBX, b; + movdqu XMM0, X.c[EAX]; + movdqu X.c[EBX], XMM0; + } + + assert(a.c[0]==b.c[0]); + assert(a.c[1]==b.c[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_movntdq_01.d Wed Oct 05 08:12:26 2005 +0000 @@ -0,0 +1,33 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_movntdq_01; + +align(16) struct X{ + ulong[2] c; +} + +int main(){ + version(D_InlineAsm){ + + double d = -3.5; + + X* x = new X; + + asm{ + mov EAX, x; + movddup XMM0, d; + movntdq X.c[EAX], XMM0; + } + + assert(x.c[0]==x.c[1]); + + assert(*(cast(double*)cast(void*)&x.c[0]) == d); + + 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_movnti_01.d Wed Oct 05 08:12:26 2005 +0000 @@ -0,0 +1,26 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_movnti_01; + +int main(){ + version(D_InlineAsm){ + + uint a = 0x1234_ABCD; + uint b = 2; + + asm{ + mov EAX, a; + movnti b, EAX; + } + + assert(a==b); + assert(b==0x1234_ABCD); + + 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_movq2dq_01.d Wed Oct 05 08:12:26 2005 +0000 @@ -0,0 +1,27 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_movq2dq_01_B; + +int main(){ + version(D_InlineAsm){ + + ulong a = 0x1234_ABCD_5678_EF01; + ulong b = 2; + + asm{ + movq MM0, a; + movq2dq XMM0, MM0; + movq b, XMM0; + } + + assert(a==b); + assert(b==0x1234_ABCD_5678_EF01); + + 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_A.d Wed Oct 05 08:12:26 2005 +0000 @@ -0,0 +1,26 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_movq_01_A; + +int main(){ + version(D_InlineAsm){ + + ulong a = 0x1234_ABCD_5678_EF01; + ulong b = 2; + + asm{ + movq MM0, a; + movq b, MM0; + } + + assert(a==b); + assert(b==0x1234_ABCD_5678_EF01); + + 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_B.d Wed Oct 05 08:12:26 2005 +0000 @@ -0,0 +1,26 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_movq_01_B; + +int main(){ + version(D_InlineAsm){ + + ulong a = 0x1234_ABCD_5678_EF01; + ulong b = 2; + + asm{ + movq XMM0, a; + movq b, XMM0; + } + + assert(a==b); + assert(b==0x1234_ABCD_5678_EF01); + + 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_movsd_01.d Wed Oct 05 08:12:26 2005 +0000 @@ -0,0 +1,25 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_movsd_01; + +int main(){ + version(D_InlineAsm){ + + double a = -12.1L; + double b = 2.8L; + + asm{ + movsd XMM0, a; + movsd b, XMM0; + } + + assert(a==b); + + 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_movss_01.d Wed Oct 05 08:12:26 2005 +0000 @@ -0,0 +1,25 @@ +// $HeadURL$ +// $Date$ +// $Author$ + +module dstress.run.a.asm_movss_01; + +int main(){ + version(D_InlineAsm){ + + float a = -12.1L; + float b = 2.8L; + + asm{ + movsd XMM0, a; + movsd b, XMM0; + } + + assert(a==b); + + return 0; + }else{ + pragma(msg, "no Inline asm support"); + static assert(0); + } +} \ No newline at end of file