예제 #1
0
  virtual void compile(X86Compiler& c)
  {
    c.newFunc(kX86FuncConvDefault, FuncBuilder3<int, int, int, int>());

    GpVar v0(c.getGpArg(0));
    GpVar v1(c.getGpArg(1));
    GpVar v2(c.getGpArg(2));

    // Just do something;)
    c.shl(v0, imm(1));
    c.shl(v1, imm(1));
    c.shl(v2, imm(1));

    // Call function.
    GpVar address(c.newGpVar());
    c.mov(address, imm((sysint_t)(void*)calledFunc));

    X86CompilerFuncCall* fCall = c.call(address);
    fCall->setPrototype(kX86FuncConvDefault, FuncBuilder3<Void, int, int, int>());
    fCall->setArgument(0, v2);
    fCall->setArgument(1, v1);
    fCall->setArgument(2, v0);

    // TODO: FuncCall return value.
    // fCall->setReturn(v0);
    // c.ret(v0);

    c.endFunc();
  }
예제 #2
0
  virtual void compile(X86Compiler& c)
  {
    c.newFunc(kX86FuncConvDefault, FuncBuilder4<Void, int*, int, int, int>());

    GpVar dst0(c.getGpArg(0));
    GpVar v0(c.getGpArg(1));

    c.shl(v0, c.getGpArg(2));
    c.ror(v0, c.getGpArg(3));
    
    c.mov(dword_ptr(dst0), v0);
    c.endFunc();
  }