Variable<T> lhs = quad.getLHS();
if (lhs.getAddressingMode() == REGISTER) {
T reg1 = ((RegisterLocation<T>) lhs.getLocation()).getRegister();
Operand<T> rhs = quad.getRHS();
AddressingMode mode = rhs.getAddressingMode();
if (mode == CONSTANT) {
os.writeMOV_Const((GPR) reg1, ((IntConstant<T>) rhs).getValue());
} else if (mode == REGISTER) {
T reg2 = ((RegisterLocation<T>) ((Variable<T>) rhs).getLocation()).getRegister();
os.writeMOV(X86Constants.BITS32, (GPR) reg1, (GPR) reg2);
} else if (mode == STACK) {
int disp2 = ((StackLocation<T>) ((Variable<T>) rhs).getLocation()).getDisplacement();
os.writeMOV(X86Constants.BITS32, (GPR) reg1, X86Register.EBP, disp2);
}
} else if (lhs.getAddressingMode() == STACK) {
int disp1 = ((StackLocation<T>) lhs.getLocation()).getDisplacement();
Operand<T> rhs = quad.getRHS();
AddressingMode mode = rhs.getAddressingMode();
if (mode == CONSTANT) {
os.writeMOV_Const(X86Constants.BITS32, X86Register.EBP, disp1, ((IntConstant<T>) rhs).getValue());
} else if (mode == REGISTER) {
T reg2 = ((RegisterLocation<T>) ((Variable<T>) rhs).getLocation()).getRegister();
os.writeMOV(X86Constants.BITS32, X86Register.EBP, disp1, (GPR) reg2);