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

    GpVar v0(c.newGpVar(kX86VarTypeGpd));
    GpVar v1(c.newGpVar(kX86VarTypeGpd));
    GpVar v2(c.newGpVar(kX86VarTypeGpd));
    GpVar v3(c.newGpVar(kX86VarTypeGpd));
    GpVar v4(c.newGpVar(kX86VarTypeGpd));

    c.xor_(v0, v0);

    c.mov(v1, 1);
    c.mov(v2, 2);
    c.mov(v3, 3);
    c.mov(v4, 4);

    c.add(v0, v1);
    c.add(v0, v2);
    c.add(v0, v3);
    c.add(v0, v4);

    c.ret(v0);
    c.endFunc();
  }
예제 #2
0
  virtual void compile(X86Compiler& c)
  {
    c.newFunc(kX86FuncConvDefault, FuncBuilder0<int>());
    c.getFunc()->setHint(kFuncHintNaked, false);

    GpVar v0(c.newGpVar(kX86VarTypeGpd));
    GpVar v1(c.newGpVar(kX86VarTypeGpd));
    GpVar cnt(c.newGpVar(kX86VarTypeGpd));

    c.xor_(v0, v0);
    c.xor_(v1, v1);
    c.spill(v0);
    c.spill(v1);

    Label L(c.newLabel());
    c.mov(cnt, imm(32));
    c.bind(L);

    c.inc(v1);
    c.add(v0, v1);

    c.dec(cnt);
    c.jnz(L);

    c.ret(v0);
    c.endFunc();
  }
예제 #3
0
  virtual void compile(X86Compiler& c)
  {
    int i;
    GpVar var[32];

    c.newFunc(kX86FuncConvDefault, FuncBuilder1<Void, int*>());

    for (i = 0; i < ASMJIT_ARRAY_SIZE(var); i++)
    {
      var[i] = c.newGpVar(kX86VarTypeGpd);
      c.xor_(var[i], var[i]);
    }

    GpVar v0(c.newGpVar(kX86VarTypeGpd));
    Label L(c.newLabel());

    c.mov(v0, imm(32));
    c.bind(L);

    for (i = 0; i < ASMJIT_ARRAY_SIZE(var); i++)
    {
      c.add(var[i], imm(i));
    }

    c.dec(v0);
    c.jnz(L);

    GpVar a0(c.getGpArg(0));
    for (i = 0; i < ASMJIT_ARRAY_SIZE(var); i++)
    {
      c.mov(dword_ptr(a0, i * 4), var[i]);
    }

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

    // Function arguments.
    GpVar a1(c.getGpArg(0));
    GpVar a2(c.getGpArg(1));

    // Create some variables.
    GpVar x1(c.newGpVar(kX86VarTypeGpd));
    GpVar x2(c.newGpVar(kX86VarTypeGpd));
    GpVar x3(c.newGpVar(kX86VarTypeGpd));
    GpVar x4(c.newGpVar(kX86VarTypeGpd));
    GpVar x5(c.newGpVar(kX86VarTypeGpd));
    GpVar x6(c.newGpVar(kX86VarTypeGpd));
    GpVar x7(c.newGpVar(kX86VarTypeGpd));
    GpVar x8(c.newGpVar(kX86VarTypeGpd));

    GpVar t(c.newGpVar(kX86VarTypeGpd));

    // Setup variables (use mov with reg/imm to se if register allocator works).
    c.mov(x1, 1);
    c.mov(x2, 2);
    c.mov(x3, 3);
    c.mov(x4, 4);
    c.mov(x5, 5);
    c.mov(x6, 6);
    c.mov(x7, 7);
    c.mov(x8, 8);

    // Make sum (addition).
    c.xor_(t, t);
    c.add(t, x1);
    c.add(t, x2);
    c.add(t, x3);
    c.add(t, x4);
    c.add(t, x5);
    c.add(t, x6);
    c.add(t, x7);
    c.add(t, x8);

    // Store result to a given pointer in first argument.
    c.mov(dword_ptr(a1), t);

    // Make sum (subtraction).
    c.xor_(t, t);
    c.sub(t, x1);
    c.sub(t, x2);
    c.sub(t, x3);
    c.sub(t, x4);
    c.sub(t, x5);
    c.sub(t, x6);
    c.sub(t, x7);
    c.sub(t, x8);

    // Store result to a given pointer in second argument.
    c.mov(dword_ptr(a2), t);

    // End of function.
    c.endFunc();
  }