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(); }
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(); }
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(); }
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(); }