示例#1
0
        protected override void Compile(CodeContext c)
        {
            const int cnt = 7;

            var p  = c.IntPtr("p");
            var xv = new XmmVariable[cnt];

            int i;

            for (i = 0; i < cnt; i++)
            {
                xv[i] = c.XmmSd("xv" + i);
                c.SetArgument(i, xv[i]);
            }
            c.SetArgument(7, p);

            c.Addsd(xv[0], xv[1]);
            c.Addsd(xv[0], xv[2]);
            c.Addsd(xv[0], xv[3]);
            c.Addsd(xv[0], xv[4]);
            c.Addsd(xv[0], xv[5]);
            c.Addsd(xv[0], xv[6]);

            c.Movsd(Memory.Ptr(p), xv[0]);
        }
示例#2
0
        protected override void Compile(CodeContext c)
        {
            var p  = c.IntPtr("p");
            var fn = c.IntPtr("fn");

            var arg = c.XmmSd("arg");
            var ret = c.XmmSd("ret");

            var fp = Memory.Fn(new Func <double, double>(CalledFunction));

            c.SetArgument(0, p);
            c.Movsd(arg, Memory.Ptr(p));
            c.Mov(fn, fp);

            var call = c.Call(fn, fp);

            call.SetArgument(0, arg);
            call.SetReturn(0, ret);

            c.Ret(ret);
        }