docs: protected boolean writeSpaceship(int type, boolean simulate) {
          if (type != COMPARE_TO) return false;
          /*  
             we will actually do
           
            (x < y) ? -1 : ((x == y) ? 0 : 1)
            which is the essence of what the call with Integers would do
            this compiles to something along
            
                <x>
                <y>
                IF_ICMPGE L1
                ICONST_M1
                GOTO L2
            L1
                <x>
                <y>
                IF_ICMPNE L3
                ICONST_0
                GOTO L2
            L3
                ICONST_1
            L2
            
            since the operators are already on the stack and we don't want
            to load them again, we will instead duplicate them. This will
            require some pop actions in the branches!
            
                DUP2          (operands: IIII) 
                IF_ICMPGE L1  (operands: II)
                ICONST_M1     (operands: III)
                GOTO L2
            L1
                -----         (operands: II)
                IF_ICMPNE L3  (operands: -)
                ICONST_0      (operands: I)
                GOTO L2
            L3
                - jump from L1 branch to here (operands: -)
                ICONST_1      (operands: I)
            L2  
            - if jump from GOTO L2 we have III, but need only I
            - if from L3 branch we get only I
            
            this means we have to pop of II before loading -1
            
          */
          if (!simulate) {
              MethodVisitor mv = getController().getMethodVisitor();
              // duplicate int arguments
              mv.visitInsn(DUP2);
              
              Label l1 = new Label();
              mv.visitJumpInsn(IF_ICMPGE,l1);
              // no jump, so -1, need to pop off surplus II
              mv.visitInsn(POP2);
              mv.visitInsn(ICONST_M1);
              Label l2 = new Label();
              mv.visitJumpInsn(GOTO, l2);
              
              mv.visitLabel(l1);
              Label l3 = new Label();
              mv.visitJumpInsn(IF_ICMPNE,l3);
              mv.visitInsn(ICONST_0);
              mv.visitJumpInsn(GOTO,l2);
              
              mv.visitLabel(l3);
              mv.visitInsn(ICONST_1);
  
              getController().getOperandStack().replace(ClassHelper.int_TYPE, 2);
          }
          return true;
      }