public void tox86(Genx86 generator) throws IOException, InvalidCodeException {
    left.register = register;
    right.register = register + 1;

    String leftReg = generator.regName(left.register, left.type);
    String rightReg = generator.regName(right.register, right.type);

    // save
    generator.write(generator.save(register + 1));

    left.tox86(generator);
    right.tox86(generator);
    generator.write(generator.compare(leftReg, rightReg, left.type, right.type));

    switch (operator) {
      case sym.LT:
        lowerThan(generator, leftReg, rightReg, false);
        break;
      case sym.GT:
        greaterThan(generator, leftReg, rightReg, false);
        break;
      case sym.LTE:
        lowerThan(generator, leftReg, rightReg, true);
        break;
      case sym.GTE:
        greaterThan(generator, leftReg, rightReg, true);
        break;
      case sym.SHEQ:
        equal(generator, leftReg, rightReg, false);
        break;
      case sym.DEEQ:
        equal(generator, leftReg, rightReg, true);
        break;
      case sym.NOEQ:
        notEqual(generator, leftReg, rightReg);
    }

    // restore
    generator.write(generator.restore(register + 1));

    generator.write(generator.jump(noLabel));
  }