virtual void compile(X86Compiler& c) { c.newFunc(kX86FuncConvDefault, FuncBuilder4<Void, int*, int*, int, int>()); c.getFunc()->setHint(kFuncHintNaked, true); GpVar dst0_hi(c.getGpArg(0)); GpVar dst0_lo(c.getGpArg(1)); GpVar v0_hi(c.newGpVar(kX86VarTypeGpd)); GpVar v0_lo(c.getGpArg(2)); GpVar src0(c.getGpArg(3)); c.imul(v0_hi, v0_lo, src0); c.mov(dword_ptr(dst0_hi), v0_hi); c.mov(dword_ptr(dst0_lo), v0_lo); c.endFunc(); }
virtual void compile(X86Compiler& c) { c.newFunc(kX86FuncConvDefault, FuncBuilder2<Void, int*, const int*>()); c.getFunc()->setHint(kFuncHintNaked, true); GpVar dst = c.getGpArg(0); GpVar src = c.getGpArg(1); for (uint i = 0; i < 4; i++) { GpVar x = c.newGpVar(kX86VarTypeGpd); GpVar y = c.newGpVar(kX86VarTypeGpd); GpVar hi = c.newGpVar(kX86VarTypeGpd); c.mov(x, dword_ptr(src, 0)); c.mov(y, dword_ptr(src, 4)); c.imul(hi, x, y); c.add(dword_ptr(dst, 0), hi); c.add(dword_ptr(dst, 4), x); } c.endFunc(); }