protected override void Compile(CodeContext c) { var op = c.Int32("op"); var a = c.Int32("a"); var b = c.Int32("b"); var zero = c.Label(); var add = c.Label(); var sub = c.Label(); var mul = c.Label(); var div = c.Label(); c.SetArgument(0, op); c.SetArgument(1, a); c.SetArgument(2, b); c.Cmp(op, 0); c.Jz(add); c.Cmp(op, 1); c.Jz(sub); c.Cmp(op, 2); c.Jz(mul); c.Cmp(op, 3); c.Jz(div); c.Bind(zero); c.Xor(a, a); c.Ret(a); c.Bind(add); c.Add(a, b); c.Ret(a); c.Bind(sub); c.Sub(a, b); c.Ret(a); c.Bind(mul); c.Imul(a, b); c.Ret(a); c.Bind(div); c.Cmp(b, 0); c.Jz(zero); var z = c.Int32("z"); c.Xor(z, z); c.Idiv(z, a, b); c.Ret(a); }
protected override void Compile(CodeContext c) { var a = c.IntPtr("a"); var b = c.IntPtr("b"); c.SetArgument(0, a); c.SetArgument(1, b); var dummy = c.Int32("dummy"); c.Xor(dummy, dummy); c.Idiv(dummy, a, b); c.Ret(a); }