Implement OP_UMUL.

This commit is contained in:
David Anderson 2014-12-14 23:09:50 -08:00
parent 5df377bf72
commit 8c9c1e3a6c
3 changed files with 13 additions and 1 deletions

View File

@ -538,6 +538,12 @@ class AssemblerX86 : public Assembler
void imull(Register dest, Register src, int32_t imm) {
imull(dest, Operand(src), imm);
}
void mul(Register src) {
emit1(0xf7, 4, src.code);
}
void mul(const Operand &src) {
emit1(0xf7, 4, src);
}
void testl(const Operand &op1, Register op2) {
emit1(0x85, op2.code, op1);

View File

@ -143,7 +143,7 @@ namespace sp {
_(SMUL, "smul") \
_(SDIV, "sdiv") \
_(SDIV_ALT, "sdiv.alt") \
_(UNGEN_UMUL, "umul") \
_(UMUL, "umul") \
_(UDIV, "udiv") \
_(UDIV_ALT, "udiv.alt") \
_(ADD, "add") \

View File

@ -598,6 +598,12 @@ Compiler::emitOp(OPCODE op)
__ imull(pri, alt);
break;
case OP_UMUL:
__ movl(tmp, alt);
__ mul(edx); // (edx:eax) = eax * edx
__ movl(alt, tmp);
break;
case OP_NOT:
__ testl(eax, eax);
__ movl(eax, 0);