JIT_OP_IADD: [=local, imm, imm] -> { x86_mov_membase_imm(inst, X86_EBP, $1, $2+$3, 4); } [=local, imm, local, scratch("?")] -> { if($1==$3) { x86_alu_membase_imm(inst, X86_ADD, X86_EBP, $1, $2); } else { x86_mov_reg_imm(inst, $4, $2); x86_alu_membase_reg(inst, X86_ADD, X86_EBP, $1, $4); } } [=local, imm, reg] -> { x86_mov_membase_reg(inst, X86_EBP, $1, $3, 4); x86_alu_membase_imm(inst, X86_ADD, X86_EBP, $1, $2); } [=local, local, imm, scratch("?")] -> { if($1==$2)x86_alu_membase_imm(inst, X86_ADD, X86_EBP, $1, $3); else { x86_mov_reg_imm(inst, $4, $3); x86_alu_reg_membase(inst, X86_ADD, $4, X86_EBP, $2); x86_mov_membase_reg(inst, X86_EBP, $1, $4, 4); } } [=local, local, local, scratch("?")] -> { if($1==$2 && $1==$3) { x86_mov_reg_membase(inst, $4, X86_EBP, $1, 4); x86_alu_membase_reg(inst, X86_ADD, X86_EBP, $1, $4); } else if($1==$2) { x86_mov_reg_membase(inst, $4, X86_EBP, $3, 4); x86_alu_membase_reg(inst, X86_ADD, X86_EBP, $1, $4); } else if($1==$3) { x86_mov_reg_membase(inst, $4, X86_EBP, $2, 4); x86_alu_membase_reg(inst, X86_ADD, X86_EBP, $1, $4); } else { x86_mov_reg_membase(inst, $4, X86_EBP, $2, 4); x86_alu_reg_membase(inst, X86_ADD, $4, X86_EBP, $3); x86_mov_membase_reg(inst, X86_EBP, $1, $4, 4); } } [=local, local, reg, scratch("?")] -> { if($1!=$2) { x86_mov_reg_membase(inst, $4, X86_EBP, $2, 4); x86_alu_reg_reg(inst, X86_ADD, $4, $3); x86_mov_membase_reg(inst, X86_EBP, $1, $4, 4); } else { x86_alu_membase_reg(inst, X86_ADD, X86_EBP, $1, $3); } } [=local, reg, imm] -> { x86_mov_membase_reg(inst, X86_EBP, $1, $2, 4); x86_alu_membase_imm(inst, X86_ADD, X86_EBP, $1, $3); } [=local, reg, local, scratch("?")] -> { if($1!=$3) { x86_mov_reg_membase(inst, $4, X86_EBP, $3, 4); x86_alu_reg_reg(inst, X86_ADD, $4, $2); x86_mov_membase_reg(inst, X86_EBP, $1, $4, 4); } else { x86_alu_membase_reg(inst, X86_ADD, X86_EBP, $1, $2); } } [=local, reg, reg] -> { x86_mov_membase_reg(inst, X86_EBP, $1, $2, 4); x86_alu_membase_reg(inst, X86_EBP, X86_EBP, $1, $3); } [=reg, imm, imm] -> { x86_mov_reg_imm(inst, $1, $2+$3); } [=reg, imm, local] -> { x86_mov_reg_membase(inst, $1, X86_EBP, $3, 4); if($2!=0)x86_alu_reg_imm(inst, X86_ADD, $1, $2); } [=reg, imm, reg] -> { if($3!=$1)x86_mov_reg_reg(inst, $1, $3, 4); if($2!=0)x86_alu_reg_imm(inst, X86_ADD, $1, $2); } [=reg, local, imm] -> { x86_mov_reg_membase(inst, $1, X86_EBP, $2, 4); if($3!=0)x86_alu_reg_imm(inst, X86_ADD, $1, $3); } [=reg, local, local] -> { x86_mov_reg_membase(inst, $1, X86_EBP, $3, 4); if($2!=$3)x86_alu_reg_membase(inst, $1, X86_EBP, $1, 4); else x86_alu_reg_reg(inst, X86_ADD, $1, $1); } [=reg, local, reg] -> { if($1!=$3)x86_mov_reg_reg(inst, $1, $3, 4); x86_alu_reg_membase(inst, X86_ADD, $1, X86_EBP, $2); } [=reg, reg, imm] -> { if($3!=$1)x86_mov_reg_reg(inst, $1, $2, 4); if($3!=0)x86_alu_reg_imm(inst, X86_ADD, $1, $3); } [=reg, reg, local] -> { if($2==$1) x86_alu_reg_membase(inst, X86_ADD, $1, X86_EBP, $3); else { x86_mov_reg_reg(inst, $1, $2, 4); x86_alu_reg_membase(inst, X86_ADD, $1, X86_EBP, $3); } } [=reg, reg, reg] -> { if($1==$2 && $1==$3) x86_alu_reg_reg(inst, X86_ADD, $1, $1); else if($3==$1)x86_alu_reg_reg(inst, X86_ADD, $1, $3); else if($3==$2)x86_alu_reg_reg(inst, X86_ADD, $1, $2); else { x86_mov_reg_reg(inst, $1, $2, 4); x86_alu_reg_reg(inst, X86_ADD, $1, $3); } }