      static double mp_repeat(_cimg_math_parser& mp) {
        const double nb_it = _mp_arg(2);
        double
          *const ptrc = mp.opcode[3]!=~0U?&_mp_arg(3):0,
          *const ptrs = &_mp_arg(1);
        const CImg<ulongT>
          *const p_body = ++mp.p_code,
          *const p_end = p_body + mp.opcode[4];

        if (nb_it>0) {
          const unsigned int _break_type = mp.break_type;
          mp.break_type = 0;

          double it = 0;
          if (ptrc) { // Version with loop variable (3 arguments)
            while (it<nb_it) {
              *ptrc = it;
              for (mp.p_code = p_body; mp.p_code<p_end; ++mp.p_code) {
                mp.opcode._data = mp.p_code->_data;
                const ulongT target = mp.opcode[1];
                mp.mem[target] = _cimg_mp_defunc(mp);
              }
              if (mp.break_type==1) break; else if (mp.break_type==2) mp.break_type = 0;
              ++it;
            }
            *ptrc = it;
          } else // Version without loop variable (2 arguments)
            while (it<nb_it) {
              for (mp.p_code = p_body; mp.p_code<p_end; ++mp.p_code) {
                mp.opcode._data = mp.p_code->_data;
                const ulongT target = mp.opcode[1];
                mp.mem[target] = _cimg_mp_defunc(mp);
              }
              if (mp.break_type==1) break; else if (mp.break_type==2) mp.break_type = 0;
              ++it;
            }
          mp.break_type = _break_type;
        }

        mp.p_code = p_end - 1;
        return *ptrs;
      }
      static double mp_repeat(_cimg_math_parser& mp) {
        const double nb_it = _mp_arg(2);
        double
          *const ptrc = mp.opcode[3]!=~0U?&_mp_arg(3):0,
          *const ptrs = &_mp_arg(1);
        const CImg<ulongT>
          *const p_body = ++mp.p_code,
          *const p_end = p_body + mp.opcode[4];

        if (nb_it>0) {
          const unsigned int _break_type = mp.break_type;
          mp.break_type = 0;

          double it = 0;
          if (ptrc) {  
            while (it<nb_it) {
              *ptrc = it;
              for (mp.p_code = p_body; mp.p_code<p_end; ++mp.p_code) {
                mp.opcode._data = mp.p_code->_data;
                const ulongT target = mp.opcode[1];
                mp.mem[target] = _cimg_mp_defunc(mp);
              }
              if (mp.break_type==1) break; else if (mp.break_type==2) mp.break_type = 0;
              ++it;
            }
            *ptrc = it;
          } else  
            while (it<nb_it) {
              for (mp.p_code = p_body; mp.p_code<p_end; ++mp.p_code) {
                mp.opcode._data = mp.p_code->_data;
                const ulongT target = mp.opcode[1];
                mp.mem[target] = _cimg_mp_defunc(mp);
              }
              if (mp.break_type==1) break; else if (mp.break_type==2) mp.break_type = 0;
              ++it;
            }
          mp.break_type = _break_type;
        }

        mp.p_code = p_end - 1;
        return *ptrs;
      }