6 #ifndef CoinAbcHelperFunctions_H 
    7 #define CoinAbcHelperFunctions_H 
   21 #define abc_assert(condition)                                                   \ 
   22   { if (!condition) {printf("abc_assert in %s at line %d - %s is false\n", \ 
   23                             __FILE__, __LINE__, __STRING(condition)); abort();} } 
   26 #define CILK_FOR_GRAINSIZE 128 
   29 #include "emmintrin.h" 
   31 #include <immintrin.h> 
   33 #include "avx2intrin.h" 
   43 #define UNROLL_SCATTER 2 
   44 #define INLINE_SCATTER 1 
   62     region[iRow] = regionValue - value * pivotValue;
 
   64 #elif UNROLL_SCATTER==1 
   70     region[iRow] = regionValue - value * pivotValue;
 
   77     region[iRow0] = regionValue0 - thisElement[j] * pivotValue;
 
   78     region[iRow1] = regionValue1 - thisElement[j-1] * pivotValue;
 
   80 #elif UNROLL_SCATTER==2 
   86     region[iRow] = regionValue - value * pivotValue;
 
   95     region[iRow0] = regionValue0 - value0 * pivotValue;
 
   96     region[iRow1] = regionValue1 - value1 * pivotValue;
 
   99 #pragma cilk grainsize=CILK_FOR_GRAINSIZE 
  105     region[iRow0] = regionValue0 - thisElement[j] * pivotValue;
 
  106     region[iRow1] = regionValue1 - thisElement[j-1] * pivotValue;
 
  111     region[iRow2] = regionValue2 - thisElement[j-2] * pivotValue;
 
  112     region[iRow3] = regionValue3 - thisElement[j-3] * pivotValue;
 
  114 #elif UNROLL_SCATTER==3 
  119   switch(static_cast<unsigned int>(number)) {
 
  123     iRow0 = thisIndex[0];
 
  124     regionValue0 = region[iRow0];
 
  125     region[iRow0] = regionValue0 - thisElement[0] * pivotValue;
 
  128     iRow0 = thisIndex[0];
 
  129     iRow1 = thisIndex[1];
 
  130     regionValue0 = region[iRow0];
 
  131     regionValue1 = region[iRow1];
 
  132     region[iRow0] = regionValue0 - thisElement[0] * pivotValue;
 
  133     region[iRow1] = regionValue1 - thisElement[1] * pivotValue;
 
  136     iRow0 = thisIndex[0];
 
  137     iRow1 = thisIndex[1];
 
  138     regionValue0 = region[iRow0];
 
  139     regionValue1 = region[iRow1];
 
  140     region[iRow0] = regionValue0 - thisElement[0] * pivotValue;
 
  141     region[iRow1] = regionValue1 - thisElement[1] * pivotValue;
 
  142     iRow0 = thisIndex[2];
 
  143     regionValue0 = region[iRow0];
 
  144     region[iRow0] = regionValue0 - thisElement[2] * pivotValue;
 
  147     iRow0 = thisIndex[0];
 
  148     iRow1 = thisIndex[1];
 
  149     regionValue0 = region[iRow0];
 
  150     regionValue1 = region[iRow1];
 
  151     region[iRow0] = regionValue0 - thisElement[0] * pivotValue;
 
  152     region[iRow1] = regionValue1 - thisElement[1] * pivotValue;
 
  153     iRow0 = thisIndex[2];
 
  154     iRow1 = thisIndex[3];
 
  155     regionValue0 = region[iRow0];
 
  156     regionValue1 = region[iRow1];
 
  157     region[iRow0] = regionValue0 - thisElement[2] * pivotValue;
 
  158     region[iRow1] = regionValue1 - thisElement[3] * pivotValue;
 
  161     iRow0 = thisIndex[0];
 
  162     iRow1 = thisIndex[1];
 
  163     regionValue0 = region[iRow0];
 
  164     regionValue1 = region[iRow1];
 
  165     region[iRow0] = regionValue0 - thisElement[0] * pivotValue;
 
  166     region[iRow1] = regionValue1 - thisElement[1] * pivotValue;
 
  167     iRow0 = thisIndex[2];
 
  168     iRow1 = thisIndex[3];
 
  169     regionValue0 = region[iRow0];
 
  170     regionValue1 = region[iRow1];
 
  171     region[iRow0] = regionValue0 - thisElement[2] * pivotValue;
 
  172     region[iRow1] = regionValue1 - thisElement[3] * pivotValue;
 
  173     iRow0 = thisIndex[4];
 
  174     regionValue0 = region[iRow0];
 
  175     region[iRow0] = regionValue0 - thisElement[4] * pivotValue;
 
  178     iRow0 = thisIndex[0];
 
  179     iRow1 = thisIndex[1];
 
  180     regionValue0 = region[iRow0];
 
  181     regionValue1 = region[iRow1];
 
  182     region[iRow0] = regionValue0 - thisElement[0] * pivotValue;
 
  183     region[iRow1] = regionValue1 - thisElement[1] * pivotValue;
 
  184     iRow0 = thisIndex[2];
 
  185     iRow1 = thisIndex[3];
 
  186     regionValue0 = region[iRow0];
 
  187     regionValue1 = region[iRow1];
 
  188     region[iRow0] = regionValue0 - thisElement[2] * pivotValue;
 
  189     region[iRow1] = regionValue1 - thisElement[3] * pivotValue;
 
  190     iRow0 = thisIndex[4];
 
  191     iRow1 = thisIndex[5];
 
  192     regionValue0 = region[iRow0];
 
  193     regionValue1 = region[iRow1];
 
  194     region[iRow0] = regionValue0 - thisElement[4] * pivotValue;
 
  195     region[iRow1] = regionValue1 - thisElement[5] * pivotValue;
 
  198     iRow0 = thisIndex[0];
 
  199     iRow1 = thisIndex[1];
 
  200     regionValue0 = region[iRow0];
 
  201     regionValue1 = region[iRow1];
 
  202     region[iRow0] = regionValue0 - thisElement[0] * pivotValue;
 
  203     region[iRow1] = regionValue1 - thisElement[1] * pivotValue;
 
  204     iRow0 = thisIndex[2];
 
  205     iRow1 = thisIndex[3];
 
  206     regionValue0 = region[iRow0];
 
  207     regionValue1 = region[iRow1];
 
  208     region[iRow0] = regionValue0 - thisElement[2] * pivotValue;
 
  209     region[iRow1] = regionValue1 - thisElement[3] * pivotValue;
 
  210     iRow0 = thisIndex[4];
 
  211     iRow1 = thisIndex[5];
 
  212     regionValue0 = region[iRow0];
 
  213     regionValue1 = region[iRow1];
 
  214     region[iRow0] = regionValue0 - thisElement[4] * pivotValue;
 
  215     region[iRow1] = regionValue1 - thisElement[5] * pivotValue;
 
  216     iRow0 = thisIndex[6];
 
  217     regionValue0 = region[iRow0];
 
  218     region[iRow0] = regionValue0 - thisElement[6] * pivotValue;
 
  221     iRow0 = thisIndex[0];
 
  222     iRow1 = thisIndex[1];
 
  223     regionValue0 = region[iRow0];
 
  224     regionValue1 = region[iRow1];
 
  225     region[iRow0] = regionValue0 - thisElement[0] * pivotValue;
 
  226     region[iRow1] = regionValue1 - thisElement[1] * pivotValue;
 
  227     iRow0 = thisIndex[2];
 
  228     iRow1 = thisIndex[3];
 
  229     regionValue0 = region[iRow0];
 
  230     regionValue1 = region[iRow1];
 
  231     region[iRow0] = regionValue0 - thisElement[2] * pivotValue;
 
  232     region[iRow1] = regionValue1 - thisElement[3] * pivotValue;
 
  233     iRow0 = thisIndex[4];
 
  234     iRow1 = thisIndex[5];
 
  235     regionValue0 = region[iRow0];
 
  236     regionValue1 = region[iRow1];
 
  237     region[iRow0] = regionValue0 - thisElement[4] * pivotValue;
 
  238     region[iRow1] = regionValue1 - thisElement[5] * pivotValue;
 
  239     iRow0 = thisIndex[6];
 
  240     iRow1 = thisIndex[7];
 
  241     regionValue0 = region[iRow0];
 
  242     regionValue1 = region[iRow1];
 
  243     region[iRow0] = regionValue0 - thisElement[6] * pivotValue;
 
  244     region[iRow1] = regionValue1 - thisElement[7] * pivotValue;
 
  252       region[iRow] = regionValue - value * pivotValue;
 
  259       region[iRow0] = regionValue0 - thisElement[j] * pivotValue;
 
  260       region[iRow1] = regionValue1 - thisElement[j-1] * pivotValue;
 
  270 #if UNROLL_SCATTER==0 
  271   const int * 
COIN_RESTRICT thisIndex = 
reinterpret_cast<const int *
>(thisElement+number);
 
  277     region[iRow] = regionValue - value * pivotValue;
 
  279 #elif UNROLL_SCATTER==1 
  280   const int * 
COIN_RESTRICT thisIndex = 
reinterpret_cast<const int *
>(thisElement+number);
 
  286     region[iRow] = regionValue - value * pivotValue;
 
  293     region[iRow0] = regionValue0 - thisElement[j] * pivotValue;
 
  294     region[iRow1] = regionValue1 - thisElement[j-1] * pivotValue;
 
  296 #elif UNROLL_SCATTER==2 
  297   const int * 
COIN_RESTRICT thisIndex = 
reinterpret_cast<const int *
>(thisElement+number);
 
  303     region[iRow] = regionValue - value * pivotValue;
 
  312     region[iRow0] = regionValue0 - value0 * pivotValue;
 
  313     region[iRow1] = regionValue1 - value1 * pivotValue;
 
  318   __m256d pv = _mm256_broadcast_sd(&pivotValue);
 
  320     __m256d elements=_mm256_loadu_pd(thisElement+j-3);
 
  325     temp[0] = region[iRow0];
 
  326     temp[1] = region[iRow1];
 
  327     temp[2] = region[iRow2];
 
  328     temp[3] = region[iRow3];
 
  329     __m256d t0=_mm256_load_pd(temp);
 
  331     _mm256_store_pd (temp, t0);
 
  332     region[iRow0] = temp[0];
 
  333     region[iRow1] = temp[1];
 
  334     region[iRow2] = temp[2];
 
  335     region[iRow3] = temp[3];
 
  338 #pragma cilk grainsize=CILK_FOR_GRAINSIZE 
  344     region[iRow0] = regionValue0 - thisElement[j] * pivotValue;
 
  345     region[iRow1] = regionValue1 - thisElement[j-1] * pivotValue;
 
  350     region[iRow2] = regionValue2 - thisElement[j-2] * pivotValue;
 
  351     region[iRow3] = regionValue3 - thisElement[j-3] * pivotValue;
 
  354 #elif UNROLL_SCATTER==3 
  355   const int * 
COIN_RESTRICT thisIndex = 
reinterpret_cast<const int *
>(thisElement+number);
 
  360   switch(static_cast<unsigned int>(number)) {
 
  364     iRow0 = thisIndex[0];
 
  365     regionValue0 = region[iRow0];
 
  366     region[iRow0] = regionValue0 - thisElement[0] * pivotValue;
 
  369     iRow0 = thisIndex[0];
 
  370     iRow1 = thisIndex[1];
 
  371     regionValue0 = region[iRow0];
 
  372     regionValue1 = region[iRow1];
 
  373     region[iRow0] = regionValue0 - thisElement[0] * pivotValue;
 
  374     region[iRow1] = regionValue1 - thisElement[1] * pivotValue;
 
  377     iRow0 = thisIndex[0];
 
  378     iRow1 = thisIndex[1];
 
  379     regionValue0 = region[iRow0];
 
  380     regionValue1 = region[iRow1];
 
  381     region[iRow0] = regionValue0 - thisElement[0] * pivotValue;
 
  382     region[iRow1] = regionValue1 - thisElement[1] * pivotValue;
 
  383     iRow0 = thisIndex[2];
 
  384     regionValue0 = region[iRow0];
 
  385     region[iRow0] = regionValue0 - thisElement[2] * pivotValue;
 
  388     iRow0 = thisIndex[0];
 
  389     iRow1 = thisIndex[1];
 
  390     regionValue0 = region[iRow0];
 
  391     regionValue1 = region[iRow1];
 
  392     region[iRow0] = regionValue0 - thisElement[0] * pivotValue;
 
  393     region[iRow1] = regionValue1 - thisElement[1] * pivotValue;
 
  394     iRow0 = thisIndex[2];
 
  395     iRow1 = thisIndex[3];
 
  396     regionValue0 = region[iRow0];
 
  397     regionValue1 = region[iRow1];
 
  398     region[iRow0] = regionValue0 - thisElement[2] * pivotValue;
 
  399     region[iRow1] = regionValue1 - thisElement[3] * pivotValue;
 
  402     iRow0 = thisIndex[0];
 
  403     iRow1 = thisIndex[1];
 
  404     regionValue0 = region[iRow0];
 
  405     regionValue1 = region[iRow1];
 
  406     region[iRow0] = regionValue0 - thisElement[0] * pivotValue;
 
  407     region[iRow1] = regionValue1 - thisElement[1] * pivotValue;
 
  408     iRow0 = thisIndex[2];
 
  409     iRow1 = thisIndex[3];
 
  410     regionValue0 = region[iRow0];
 
  411     regionValue1 = region[iRow1];
 
  412     region[iRow0] = regionValue0 - thisElement[2] * pivotValue;
 
  413     region[iRow1] = regionValue1 - thisElement[3] * pivotValue;
 
  414     iRow0 = thisIndex[4];
 
  415     regionValue0 = region[iRow0];
 
  416     region[iRow0] = regionValue0 - thisElement[4] * pivotValue;
 
  419     iRow0 = thisIndex[0];
 
  420     iRow1 = thisIndex[1];
 
  421     regionValue0 = region[iRow0];
 
  422     regionValue1 = region[iRow1];
 
  423     region[iRow0] = regionValue0 - thisElement[0] * pivotValue;
 
  424     region[iRow1] = regionValue1 - thisElement[1] * pivotValue;
 
  425     iRow0 = thisIndex[2];
 
  426     iRow1 = thisIndex[3];
 
  427     regionValue0 = region[iRow0];
 
  428     regionValue1 = region[iRow1];
 
  429     region[iRow0] = regionValue0 - thisElement[2] * pivotValue;
 
  430     region[iRow1] = regionValue1 - thisElement[3] * pivotValue;
 
  431     iRow0 = thisIndex[4];
 
  432     iRow1 = thisIndex[5];
 
  433     regionValue0 = region[iRow0];
 
  434     regionValue1 = region[iRow1];
 
  435     region[iRow0] = regionValue0 - thisElement[4] * pivotValue;
 
  436     region[iRow1] = regionValue1 - thisElement[5] * pivotValue;
 
  439     iRow0 = thisIndex[0];
 
  440     iRow1 = thisIndex[1];
 
  441     regionValue0 = region[iRow0];
 
  442     regionValue1 = region[iRow1];
 
  443     region[iRow0] = regionValue0 - thisElement[0] * pivotValue;
 
  444     region[iRow1] = regionValue1 - thisElement[1] * pivotValue;
 
  445     iRow0 = thisIndex[2];
 
  446     iRow1 = thisIndex[3];
 
  447     regionValue0 = region[iRow0];
 
  448     regionValue1 = region[iRow1];
 
  449     region[iRow0] = regionValue0 - thisElement[2] * pivotValue;
 
  450     region[iRow1] = regionValue1 - thisElement[3] * pivotValue;
 
  451     iRow0 = thisIndex[4];
 
  452     iRow1 = thisIndex[5];
 
  453     regionValue0 = region[iRow0];
 
  454     regionValue1 = region[iRow1];
 
  455     region[iRow0] = regionValue0 - thisElement[4] * pivotValue;
 
  456     region[iRow1] = regionValue1 - thisElement[5] * pivotValue;
 
  457     iRow0 = thisIndex[6];
 
  458     regionValue0 = region[iRow0];
 
  459     region[iRow0] = regionValue0 - thisElement[6] * pivotValue;
 
  462     iRow0 = thisIndex[0];
 
  463     iRow1 = thisIndex[1];
 
  464     regionValue0 = region[iRow0];
 
  465     regionValue1 = region[iRow1];
 
  466     region[iRow0] = regionValue0 - thisElement[0] * pivotValue;
 
  467     region[iRow1] = regionValue1 - thisElement[1] * pivotValue;
 
  468     iRow0 = thisIndex[2];
 
  469     iRow1 = thisIndex[3];
 
  470     regionValue0 = region[iRow0];
 
  471     regionValue1 = region[iRow1];
 
  472     region[iRow0] = regionValue0 - thisElement[2] * pivotValue;
 
  473     region[iRow1] = regionValue1 - thisElement[3] * pivotValue;
 
  474     iRow0 = thisIndex[4];
 
  475     iRow1 = thisIndex[5];
 
  476     regionValue0 = region[iRow0];
 
  477     regionValue1 = region[iRow1];
 
  478     region[iRow0] = regionValue0 - thisElement[4] * pivotValue;
 
  479     region[iRow1] = regionValue1 - thisElement[5] * pivotValue;
 
  480     iRow0 = thisIndex[6];
 
  481     iRow1 = thisIndex[7];
 
  482     regionValue0 = region[iRow0];
 
  483     regionValue1 = region[iRow1];
 
  484     region[iRow0] = regionValue0 - thisElement[6] * pivotValue;
 
  485     region[iRow1] = regionValue1 - thisElement[7] * pivotValue;
 
  493       region[iRow] = regionValue - value * pivotValue;
 
  500       region[iRow0] = regionValue0 - thisElement[j] * pivotValue;
 
  501       region[iRow1] = regionValue1 - thisElement[j-1] * pivotValue;
 
  511 #define coin_prefetch(mem)                                              \ 
  512   __asm__ __volatile__ ("prefetchnta %0" : : "m" (*(reinterpret_cast<char *>(mem)))) 
  513 #define coin_prefetch_const(mem)                                        \ 
  514   __asm__ __volatile__ ("prefetchnta %0" : : "m" (*(reinterpret_cast<const char *>(mem)))) 
  516 #define coin_prefetch(mem)                                              \ 
  517   __asm__ __volatile__ ("prefetch %0" : : "m" (*(reinterpret_cast<char *>(mem)))) 
  518 #define coin_prefetch_const(mem)                                        \ 
  519   __asm__ __volatile__ ("prefetch %0" : : "m" (*(reinterpret_cast<const char *>(mem)))) 
  523 #define coin_prefetch(mem) 
  524 #define coin_prefetch_const(mem) 
  526 #define NEW_CHUNK_SIZE 4 
  527 #define NEW_CHUNK_SIZE_INCREMENT (NEW_CHUNK_SIZE+NEW_CHUNK_SIZE/2); 
  528 #define NEW_CHUNK_SIZE_OFFSET (NEW_CHUNK_SIZE/2) 
  532 #define SCATTER_ATTRIBUTE  
  650 #if INLINE_SCATTER==0 
  664 #if UNROLL_SCATTER==0 
  670     region[iRow] = regionValue - value * pivotValue;
 
  672 #elif UNROLL_SCATTER==1 
  679     region[iRow] = regionValue - value * pivotValue;
 
  683   for ( ; number !=0; number-- ) {
 
  686     work2[0] = region[iRow0];
 
  687     work2[1] = region[iRow1];
 
  689     work2[2] = region[iRow0];
 
  690     work2[3] = region[iRow1];
 
  692     __v4df b = __builtin_ia32_loadupd256(work2);
 
  695     work2[0] -= thisElement[0] * pivotValue;
 
  696     work2[1] -= thisElement[1] * pivotValue;
 
  697     region[iRow0] = work2[0];
 
  698     region[iRow1] = work2[1];
 
  706 #define UNROLL_GATHER 0 
  707 #define INLINE_GATHER 1 
  711                           const int *  COIN_RESTRICT thisIndex,
 
  716                                              const int *  COIN_RESTRICT thisIndex,
 
  724     value *= region[jRow];
 
  733 #define UNROLL_MULTIPLY_INDEXED 0 
  734 #define INLINE_MULTIPLY_INDEXED 0 
  735 #if INLINE_MULTIPLY_INDEXED==0 
  737                             const double *  COIN_RESTRICT multiplier,
 
  738                             const int *  COIN_RESTRICT thisIndex,
 
  741                             const long double *  COIN_RESTRICT multiplier,
 
  742                             const int *  COIN_RESTRICT thisIndex,
 
  743                             long double * COIN_RESTRICT region);
 
  746                             const double *  COIN_RESTRICT multiplier,
 
  747                             const int *  COIN_RESTRICT thisIndex,
 
  755 void CoinAbcScale(
double * region, 
double multiplier,
int size);
 
  761                  double * regionChanged, 
double multiplier2);
 
  763 void CoinAbcGetNorms(
const double * region, 
int size, 
double & norm1, 
double & norm2);
 
  765 void CoinAbcScatterTo(
const double * regionFrom, 
double * regionTo, 
const int * index,
int number);
 
  767 void CoinAbcGatherFrom(
const double * regionFrom, 
double * regionTo, 
const int * index,
int number);
 
  772                    const int * indexList, 
const int * indexScatter ,
int number);
 
  778 void CoinAbcMemcpyLong(
unsigned char * array,
const unsigned char * arrayFrom,
int size);
 
  782 void CoinAbcMemmove(
double * array,
const double * arrayFrom,
int size);
 
  784 void CoinAbcMemmove(
unsigned char * array,
const unsigned char * arrayFrom,
int size);
 
  788 int CoinAbcCompact(
int numberSections,
int alreadyDone,
double * array,
const int * starts, 
const int * lengths); 
 
  790 int CoinAbcCompact(
int numberSections,
int alreadyDone,
int * array,
const int * starts, 
const int * lengths); 
 
  792 #if ABC_CREATE_SCATTER_FUNCTION 
  798   assert (numberIn==1);
 
  800   const int * COIN_RESTRICT thisColumn = 
reinterpret_cast<const int *
>(element+1);
 
  801   int iColumn0=thisColumn[0];
 
  802   double value0=region[iColumn0];
 
  803   value0 OPERATION multiplier*element[0];
 
  804   region[iColumn0]=value0;
 
  811   assert (numberIn==2);
 
  813   const int * COIN_RESTRICT thisColumn = 
reinterpret_cast<const int *
>(element+2);
 
  814 #if NEW_CHUNK_SIZE==2 
  818     int iColumn0=thisColumn[0];
 
  819     int iColumn1=thisColumn[1];
 
  824     region[iColumn0]=value0;
 
  825     region[iColumn1]=value1;
 
  827     thisColumn = 
reinterpret_cast<const int *
>(element);
 
  830 #if NEW_CHUNK_SIZE==4 
  831   int iColumn0=thisColumn[0];
 
  832   int iColumn1=thisColumn[1];
 
  835   value0 OPERATION multiplier*element[0];
 
  836   value1 OPERATION multiplier*element[1];
 
  837   region[iColumn0]=value0;
 
  838   region[iColumn1]=value1;
 
  846   assert (numberIn==3);
 
  848   const int * COIN_RESTRICT thisColumn = 
reinterpret_cast<const int *
>(element+3);
 
  852 #if NEW_CHUNK_SIZE==2 
  856     int iColumn0=thisColumn[0];
 
  857     int iColumn1=thisColumn[1];
 
  860     value0 OPERATION multiplier*element[0];
 
  861     value1 OPERATION multiplier*element[1];
 
  862     region[iColumn0]=value0;
 
  863     region[iColumn1]=value1;
 
  868 #if NEW_CHUNK_SIZE==2 
  869   int iColumn0=thisColumn[0];
 
  870   double value0=region[iColumn0];
 
  871   value0 OPERATION multiplier*element[0];
 
  872   region[iColumn0]=value0;
 
  874   int iColumn0=thisColumn[0];
 
  875   int iColumn1=thisColumn[1];
 
  876   int iColumn2=thisColumn[2];
 
  879   double value2=region[iColumn2];
 
  880   value2 OPERATION multiplier*element[2];
 
  881   set_const_v2df(bb,multiplier);
 
  882   temp[0]=region[iColumn0];
 
  883   temp[1]=region[iColumn1];
 
  884   region[iColumn2]=value2;
 
  885   __v2df v0 = __builtin_ia32_loadupd (temp);
 
  886   __v2df a = __builtin_ia32_loadupd (element);
 
  889   __builtin_ia32_storeupd (temp, v0);
 
  890   region[iColumn0]=temp[0];
 
  891   region[iColumn1]=temp[1];
 
  893   double value0=region[iColumn0];
 
  894   double value1=region[iColumn1];
 
  895   double value2=region[iColumn2];
 
  896   value0 OPERATION multiplier*element[0];
 
  897   value1 OPERATION multiplier*element[1];
 
  898   value2 OPERATION multiplier*element[2];
 
  899   region[iColumn0]=value0;
 
  900   region[iColumn1]=value1;
 
  901   region[iColumn2]=value2;
 
  910   assert (numberIn==4);
 
  912   const int * COIN_RESTRICT thisColumn = 
reinterpret_cast<const int *
>(element+4);
 
  919 #if NEW_CHUNK_SIZE==2 
  920     int iColumn0=thisColumn[0];
 
  921     int iColumn1=thisColumn[1];
 
  922     double value0=region[iColumn0];
 
  923     double value1=region[iColumn1];
 
  924     value0 OPERATION multiplier*element[0];
 
  925     value1 OPERATION multiplier*element[1];
 
  926     region[iColumn0]=value0;
 
  927     region[iColumn1]=value1;
 
  928 #elif NEW_CHUNK_SIZE==4 
  929     int iColumn0=thisColumn[0];
 
  930     int iColumn1=thisColumn[1];
 
  931     int iColumn2=thisColumn[2];
 
  932     int iColumn3=thisColumn[3];
 
  935     set_const_v2df(bb,multiplier);
 
  936     temp[0]=region[iColumn0];
 
  937     temp[1]=region[iColumn1];
 
  938     temp[2]=region[iColumn2];
 
  939     temp[3]=region[iColumn3];
 
  940     __v2df v0 = __builtin_ia32_loadupd (temp);
 
  941     __v2df v1 = __builtin_ia32_loadupd (temp+2);
 
  942     __v2df a = __builtin_ia32_loadupd (element);
 
  945     a = __builtin_ia32_loadupd (element+2);
 
  948     __builtin_ia32_storeupd (temp, v0);
 
  949     __builtin_ia32_storeupd (temp+2, v1);
 
  950     region[iColumn0]=temp[0];
 
  951     region[iColumn1]=temp[1];
 
  952     region[iColumn2]=temp[2];
 
  953     region[iColumn3]=temp[3];
 
  955     double value0=region[iColumn0];
 
  956     double value1=region[iColumn1];
 
  957     double value2=region[iColumn2];
 
  958     double value3=region[iColumn3];
 
  959     value0 OPERATION multiplier*element[0];
 
  960     value1 OPERATION multiplier*element[1];
 
  961     value2 OPERATION multiplier*element[2];
 
  962     value3 OPERATION multiplier*element[3];
 
  963     region[iColumn0]=value0;
 
  964     region[iColumn1]=value1;
 
  965     region[iColumn2]=value2;
 
  966     region[iColumn3]=value3;
 
  980   assert (numberIn==5);
 
  982   const int * COIN_RESTRICT thisColumn = 
reinterpret_cast<const int *
>(element+5);
 
  989 #if NEW_CHUNK_SIZE==2 
  990     int iColumn0=thisColumn[0];
 
  991     int iColumn1=thisColumn[1];
 
  992     double value0=region[iColumn0];
 
  993     double value1=region[iColumn1];
 
  994     value0 OPERATION multiplier*element[0];
 
  995     value1 OPERATION multiplier*element[1];
 
  996     region[iColumn0]=value0;
 
  997     region[iColumn1]=value1;
 
  998 #elif NEW_CHUNK_SIZE==4 
  999     int iColumn0=thisColumn[0];
 
 1000     int iColumn1=thisColumn[1];
 
 1001     int iColumn2=thisColumn[2];
 
 1002     int iColumn3=thisColumn[3];
 
 1005     set_const_v2df(bb,multiplier);
 
 1006     temp[0]=region[iColumn0];
 
 1007     temp[1]=region[iColumn1];
 
 1008     temp[2]=region[iColumn2];
 
 1009     temp[3]=region[iColumn3];
 
 1010     __v2df v0 = __builtin_ia32_loadupd (temp);
 
 1011     __v2df v1 = __builtin_ia32_loadupd (temp+2);
 
 1012     __v2df a = __builtin_ia32_loadupd (element);
 
 1015     a = __builtin_ia32_loadupd (element+2);
 
 1018     __builtin_ia32_storeupd (temp, v0);
 
 1019     __builtin_ia32_storeupd (temp+2, v1);
 
 1020     region[iColumn0]=temp[0];
 
 1021     region[iColumn1]=temp[1];
 
 1022     region[iColumn2]=temp[2];
 
 1023     region[iColumn3]=temp[3];
 
 1025     double value0=region[iColumn0];
 
 1026     double value1=region[iColumn1];
 
 1027     double value2=region[iColumn2];
 
 1028     double value3=region[iColumn3];
 
 1029     value0 OPERATION multiplier*element[0];
 
 1030     value1 OPERATION multiplier*element[1];
 
 1031     value2 OPERATION multiplier*element[2];
 
 1032     value3 OPERATION multiplier*element[3];
 
 1033     region[iColumn0]=value0;
 
 1034     region[iColumn1]=value1;
 
 1035     region[iColumn2]=value2;
 
 1036     region[iColumn3]=value3;
 
 1044   int iColumn0=thisColumn[0];
 
 1045   double value0=region[iColumn0];
 
 1046   value0 OPERATION multiplier*element[0];
 
 1047   region[iColumn0]=value0;
 
 1054   assert (numberIn==6);
 
 1056   const int * COIN_RESTRICT thisColumn = 
reinterpret_cast<const int *
>(element+6);
 
 1063 #if NEW_CHUNK_SIZE==2 
 1064     int iColumn0=thisColumn[0];
 
 1065     int iColumn1=thisColumn[1];
 
 1066     double value0=region[iColumn0];
 
 1067     double value1=region[iColumn1];
 
 1068     value0 OPERATION multiplier*element[0];
 
 1069     value1 OPERATION multiplier*element[1];
 
 1070     region[iColumn0]=value0;
 
 1071     region[iColumn1]=value1;
 
 1072 #elif NEW_CHUNK_SIZE==4 
 1073     int iColumn0=thisColumn[0];
 
 1074     int iColumn1=thisColumn[1];
 
 1075     int iColumn2=thisColumn[2];
 
 1076     int iColumn3=thisColumn[3];
 
 1079     set_const_v2df(bb,multiplier);
 
 1080     temp[0]=region[iColumn0];
 
 1081     temp[1]=region[iColumn1];
 
 1082     temp[2]=region[iColumn2];
 
 1083     temp[3]=region[iColumn3];
 
 1084     __v2df v0 = __builtin_ia32_loadupd (temp);
 
 1085     __v2df v1 = __builtin_ia32_loadupd (temp+2);
 
 1086     __v2df a = __builtin_ia32_loadupd (element);
 
 1089     a = __builtin_ia32_loadupd (element+2);
 
 1092     __builtin_ia32_storeupd (temp, v0);
 
 1093     __builtin_ia32_storeupd (temp+2, v1);
 
 1094     region[iColumn0]=temp[0];
 
 1095     region[iColumn1]=temp[1];
 
 1096     region[iColumn2]=temp[2];
 
 1097     region[iColumn3]=temp[3];
 
 1099     double value0=region[iColumn0];
 
 1100     double value1=region[iColumn1];
 
 1101     double value2=region[iColumn2];
 
 1102     double value3=region[iColumn3];
 
 1103     value0 OPERATION multiplier*element[0];
 
 1104     value1 OPERATION multiplier*element[1];
 
 1105     value2 OPERATION multiplier*element[2];
 
 1106     value3 OPERATION multiplier*element[3];
 
 1107     region[iColumn0]=value0;
 
 1108     region[iColumn1]=value1;
 
 1109     region[iColumn2]=value2;
 
 1110     region[iColumn3]=value3;
 
 1118 #if NEW_CHUNK_SIZE==4 
 1119   int iColumn0=thisColumn[0];
 
 1120   int iColumn1=thisColumn[1];
 
 1121   double value0=region[iColumn0];
 
 1122   double value1=region[iColumn1];
 
 1123   value0 OPERATION multiplier*element[0];
 
 1124   value1 OPERATION multiplier*element[1];
 
 1125   region[iColumn0]=value0;
 
 1126   region[iColumn1]=value1;
 
 1134   assert (numberIn==7);
 
 1136   const int * COIN_RESTRICT thisColumn = 
reinterpret_cast<const int *
>(element+7);
 
 1143 #if NEW_CHUNK_SIZE==2 
 1144     int iColumn0=thisColumn[0];
 
 1145     int iColumn1=thisColumn[1];
 
 1146     double value0=region[iColumn0];
 
 1147     double value1=region[iColumn1];
 
 1148     value0 OPERATION multiplier*element[0];
 
 1149     value1 OPERATION multiplier*element[1];
 
 1150     region[iColumn0]=value0;
 
 1151     region[iColumn1]=value1;
 
 1152 #elif NEW_CHUNK_SIZE==4 
 1153     int iColumn0=thisColumn[0];
 
 1154     int iColumn1=thisColumn[1];
 
 1155     int iColumn2=thisColumn[2];
 
 1156     int iColumn3=thisColumn[3];
 
 1159     set_const_v2df(bb,multiplier);
 
 1160     temp[0]=region[iColumn0];
 
 1161     temp[1]=region[iColumn1];
 
 1162     temp[2]=region[iColumn2];
 
 1163     temp[3]=region[iColumn3];
 
 1164     __v2df v0 = __builtin_ia32_loadupd (temp);
 
 1165     __v2df v1 = __builtin_ia32_loadupd (temp+2);
 
 1166     __v2df a = __builtin_ia32_loadupd (element);
 
 1169     a = __builtin_ia32_loadupd (element+2);
 
 1172     __builtin_ia32_storeupd (temp, v0);
 
 1173     __builtin_ia32_storeupd (temp+2, v1);
 
 1174     region[iColumn0]=temp[0];
 
 1175     region[iColumn1]=temp[1];
 
 1176     region[iColumn2]=temp[2];
 
 1177     region[iColumn3]=temp[3];
 
 1179     double value0=region[iColumn0];
 
 1180     double value1=region[iColumn1];
 
 1181     double value2=region[iColumn2];
 
 1182     double value3=region[iColumn3];
 
 1183     value0 OPERATION multiplier*element[0];
 
 1184     value1 OPERATION multiplier*element[1];
 
 1185     value2 OPERATION multiplier*element[2];
 
 1186     value3 OPERATION multiplier*element[3];
 
 1187     region[iColumn0]=value0;
 
 1188     region[iColumn1]=value1;
 
 1189     region[iColumn2]=value2;
 
 1190     region[iColumn3]=value3;
 
 1198 #if NEW_CHUNK_SIZE==2 
 1199   int iColumn0=thisColumn[0];
 
 1200   double value0=region[iColumn0];
 
 1201   value0 OPERATION multiplier*element[0];
 
 1202   region[iColumn0]=value0;
 
 1204   int iColumn0=thisColumn[0];
 
 1205   int iColumn1=thisColumn[1];
 
 1206   int iColumn2=thisColumn[2];
 
 1207   double value0=region[iColumn0];
 
 1208   double value1=region[iColumn1];
 
 1209   double value2=region[iColumn2];
 
 1210   value0 OPERATION multiplier*element[0];
 
 1211   value1 OPERATION multiplier*element[1];
 
 1212   value2 OPERATION multiplier*element[2];
 
 1213   region[iColumn0]=value0;
 
 1214   region[iColumn1]=value1;
 
 1215   region[iColumn2]=value2;
 
 1223   assert (numberIn==8);
 
 1225   const int * COIN_RESTRICT thisColumn = 
reinterpret_cast<const int *
>(element+8);
 
 1232 #if NEW_CHUNK_SIZE==2 
 1233     int iColumn0=thisColumn[0];
 
 1234     int iColumn1=thisColumn[1];
 
 1235     double value0=region[iColumn0];
 
 1236     double value1=region[iColumn1];
 
 1237     value0 OPERATION multiplier*element[0];
 
 1238     value1 OPERATION multiplier*element[1];
 
 1239     region[iColumn0]=value0;
 
 1240     region[iColumn1]=value1;
 
 1241 #elif NEW_CHUNK_SIZE==4 
 1242     int iColumn0=thisColumn[0];
 
 1243     int iColumn1=thisColumn[1];
 
 1244     int iColumn2=thisColumn[2];
 
 1245     int iColumn3=thisColumn[3];
 
 1248     set_const_v2df(bb,multiplier);
 
 1249     temp[0]=region[iColumn0];
 
 1250     temp[1]=region[iColumn1];
 
 1251     temp[2]=region[iColumn2];
 
 1252     temp[3]=region[iColumn3];
 
 1253     __v2df v0 = __builtin_ia32_loadupd (temp);
 
 1254     __v2df v1 = __builtin_ia32_loadupd (temp+2);
 
 1255     __v2df a = __builtin_ia32_loadupd (element);
 
 1258     a = __builtin_ia32_loadupd (element+2);
 
 1261     __builtin_ia32_storeupd (temp, v0);
 
 1262     __builtin_ia32_storeupd (temp+2, v1);
 
 1263     region[iColumn0]=temp[0];
 
 1264     region[iColumn1]=temp[1];
 
 1265     region[iColumn2]=temp[2];
 
 1266     region[iColumn3]=temp[3];
 
 1268     double value0=region[iColumn0];
 
 1269     double value1=region[iColumn1];
 
 1270     double value2=region[iColumn2];
 
 1271     double value3=region[iColumn3];
 
 1272     value0 OPERATION multiplier*element[0];
 
 1273     value1 OPERATION multiplier*element[1];
 
 1274     value2 OPERATION multiplier*element[2];
 
 1275     value3 OPERATION multiplier*element[3];
 
 1276     region[iColumn0]=value0;
 
 1277     region[iColumn1]=value1;
 
 1278     region[iColumn2]=value2;
 
 1279     region[iColumn3]=value3;
 
 1292   assert ((numberIn&3)==0);
 
 1293   const int * COIN_RESTRICT thisColumn = 
reinterpret_cast<const int *
>(element+numberIn);
 
 1301 #if NEW_CHUNK_SIZE==2 
 1302     int iColumn0=thisColumn[0];
 
 1303     int iColumn1=thisColumn[1];
 
 1304     double value0=region[iColumn0];
 
 1305     double value1=region[iColumn1];
 
 1306     value0 OPERATION multiplier*element[0];
 
 1307     value1 OPERATION multiplier*element[1];
 
 1308     region[iColumn0]=value0;
 
 1309     region[iColumn1]=value1;
 
 1310 #elif NEW_CHUNK_SIZE==4 
 1311     int iColumn0=thisColumn[0];
 
 1312     int iColumn1=thisColumn[1];
 
 1313     int iColumn2=thisColumn[2];
 
 1314     int iColumn3=thisColumn[3];
 
 1317     set_const_v2df(bb,multiplier);
 
 1318     temp[0]=region[iColumn0];
 
 1319     temp[1]=region[iColumn1];
 
 1320     temp[2]=region[iColumn2];
 
 1321     temp[3]=region[iColumn3];
 
 1322     __v2df v0 = __builtin_ia32_loadupd (temp);
 
 1323     __v2df v1 = __builtin_ia32_loadupd (temp+2);
 
 1324     __v2df a = __builtin_ia32_loadupd (element);
 
 1327     a = __builtin_ia32_loadupd (element+2);
 
 1330     __builtin_ia32_storeupd (temp, v0);
 
 1331     __builtin_ia32_storeupd (temp+2, v1);
 
 1332     region[iColumn0]=temp[0];
 
 1333     region[iColumn1]=temp[1];
 
 1334     region[iColumn2]=temp[2];
 
 1335     region[iColumn3]=temp[3];
 
 1337     double value0=region[iColumn0];
 
 1338     double value1=region[iColumn1];
 
 1339     double value2=region[iColumn2];
 
 1340     double value3=region[iColumn3];
 
 1341     value0 OPERATION multiplier*element[0];
 
 1342     value1 OPERATION multiplier*element[1];
 
 1343     value2 OPERATION multiplier*element[2];
 
 1344     value3 OPERATION multiplier*element[3];
 
 1345     region[iColumn0]=value0;
 
 1346     region[iColumn1]=value1;
 
 1347     region[iColumn2]=value2;
 
 1348     region[iColumn3]=value3;
 
 1361   assert ((numberIn&3)==1);
 
 1362   const int * COIN_RESTRICT thisColumn = 
reinterpret_cast<const int *
>(element+numberIn);
 
 1370 #if NEW_CHUNK_SIZE==2 
 1371     int iColumn0=thisColumn[0];
 
 1372     int iColumn1=thisColumn[1];
 
 1373     double value0=region[iColumn0];
 
 1374     double value1=region[iColumn1];
 
 1375     value0 OPERATION multiplier*element[0];
 
 1376     value1 OPERATION multiplier*element[1];
 
 1377     region[iColumn0]=value0;
 
 1378     region[iColumn1]=value1;
 
 1379 #elif NEW_CHUNK_SIZE==4 
 1380     int iColumn0=thisColumn[0];
 
 1381     int iColumn1=thisColumn[1];
 
 1382     int iColumn2=thisColumn[2];
 
 1383     int iColumn3=thisColumn[3];
 
 1386     set_const_v2df(bb,multiplier);
 
 1387     temp[0]=region[iColumn0];
 
 1388     temp[1]=region[iColumn1];
 
 1389     temp[2]=region[iColumn2];
 
 1390     temp[3]=region[iColumn3];
 
 1391     __v2df v0 = __builtin_ia32_loadupd (temp);
 
 1392     __v2df v1 = __builtin_ia32_loadupd (temp+2);
 
 1393     __v2df a = __builtin_ia32_loadupd (element);
 
 1396     a = __builtin_ia32_loadupd (element+2);
 
 1399     __builtin_ia32_storeupd (temp, v0);
 
 1400     __builtin_ia32_storeupd (temp+2, v1);
 
 1401     region[iColumn0]=temp[0];
 
 1402     region[iColumn1]=temp[1];
 
 1403     region[iColumn2]=temp[2];
 
 1404     region[iColumn3]=temp[3];
 
 1406     double value0=region[iColumn0];
 
 1407     double value1=region[iColumn1];
 
 1408     double value2=region[iColumn2];
 
 1409     double value3=region[iColumn3];
 
 1410     value0 OPERATION multiplier*element[0];
 
 1411     value1 OPERATION multiplier*element[1];
 
 1412     value2 OPERATION multiplier*element[2];
 
 1413     value3 OPERATION multiplier*element[3];
 
 1414     region[iColumn0]=value0;
 
 1415     region[iColumn1]=value1;
 
 1416     region[iColumn2]=value2;
 
 1417     region[iColumn3]=value3;
 
 1425   int iColumn0=thisColumn[0];
 
 1426   double value0=region[iColumn0];
 
 1427   value0 OPERATION multiplier*element[0];
 
 1428   region[iColumn0]=value0;
 
 1434   assert ((numberIn&3)==2);
 
 1435   const int * COIN_RESTRICT thisColumn = 
reinterpret_cast<const int *
>(element+numberIn);
 
 1443 #if NEW_CHUNK_SIZE==2 
 1444     int iColumn0=thisColumn[0];
 
 1445     int iColumn1=thisColumn[1];
 
 1446     double value0=region[iColumn0];
 
 1447     double value1=region[iColumn1];
 
 1448     value0 OPERATION multiplier*element[0];
 
 1449     value1 OPERATION multiplier*element[1];
 
 1450     region[iColumn0]=value0;
 
 1451     region[iColumn1]=value1;
 
 1452 #elif NEW_CHUNK_SIZE==4 
 1453     int iColumn0=thisColumn[0];
 
 1454     int iColumn1=thisColumn[1];
 
 1455     int iColumn2=thisColumn[2];
 
 1456     int iColumn3=thisColumn[3];
 
 1459     set_const_v2df(bb,multiplier);
 
 1460     temp[0]=region[iColumn0];
 
 1461     temp[1]=region[iColumn1];
 
 1462     temp[2]=region[iColumn2];
 
 1463     temp[3]=region[iColumn3];
 
 1464     __v2df v0 = __builtin_ia32_loadupd (temp);
 
 1465     __v2df v1 = __builtin_ia32_loadupd (temp+2);
 
 1466     __v2df a = __builtin_ia32_loadupd (element);
 
 1469     a = __builtin_ia32_loadupd (element+2);
 
 1472     __builtin_ia32_storeupd (temp, v0);
 
 1473     __builtin_ia32_storeupd (temp+2, v1);
 
 1474     region[iColumn0]=temp[0];
 
 1475     region[iColumn1]=temp[1];
 
 1476     region[iColumn2]=temp[2];
 
 1477     region[iColumn3]=temp[3];
 
 1479     double value0=region[iColumn0];
 
 1480     double value1=region[iColumn1];
 
 1481     double value2=region[iColumn2];
 
 1482     double value3=region[iColumn3];
 
 1483     value0 OPERATION multiplier*element[0];
 
 1484     value1 OPERATION multiplier*element[1];
 
 1485     value2 OPERATION multiplier*element[2];
 
 1486     value3 OPERATION multiplier*element[3];
 
 1487     region[iColumn0]=value0;
 
 1488     region[iColumn1]=value1;
 
 1489     region[iColumn2]=value2;
 
 1490     region[iColumn3]=value3;
 
 1498 #if NEW_CHUNK_SIZE==4 
 1499   int iColumn0=thisColumn[0];
 
 1500   int iColumn1=thisColumn[1];
 
 1501   double value0=region[iColumn0];
 
 1502   double value1=region[iColumn1];
 
 1503   value0 OPERATION multiplier*element[0];
 
 1504   value1 OPERATION multiplier*element[1];
 
 1505   region[iColumn0]=value0;
 
 1506   region[iColumn1]=value1;
 
 1513   assert ((numberIn&3)==3);
 
 1514   const int * COIN_RESTRICT thisColumn = 
reinterpret_cast<const int *
>(element+numberIn);
 
 1522 #if NEW_CHUNK_SIZE==2 
 1523     int iColumn0=thisColumn[0];
 
 1524     int iColumn1=thisColumn[1];
 
 1525     double value0=region[iColumn0];
 
 1526     double value1=region[iColumn1];
 
 1527     value0 OPERATION multiplier*element[0];
 
 1528     value1 OPERATION multiplier*element[1];
 
 1529     region[iColumn0]=value0;
 
 1530     region[iColumn1]=value1;
 
 1531 #elif NEW_CHUNK_SIZE==4 
 1532     int iColumn0=thisColumn[0];
 
 1533     int iColumn1=thisColumn[1];
 
 1534     int iColumn2=thisColumn[2];
 
 1535     int iColumn3=thisColumn[3];
 
 1538     set_const_v2df(bb,multiplier);
 
 1539     temp[0]=region[iColumn0];
 
 1540     temp[1]=region[iColumn1];
 
 1541     temp[2]=region[iColumn2];
 
 1542     temp[3]=region[iColumn3];
 
 1543     __v2df v0 = __builtin_ia32_loadupd (temp);
 
 1544     __v2df v1 = __builtin_ia32_loadupd (temp+2);
 
 1545     __v2df a = __builtin_ia32_loadupd (element);
 
 1548     a = __builtin_ia32_loadupd (element+2);
 
 1551     __builtin_ia32_storeupd (temp, v0);
 
 1552     __builtin_ia32_storeupd (temp+2, v1);
 
 1553     region[iColumn0]=temp[0];
 
 1554     region[iColumn1]=temp[1];
 
 1555     region[iColumn2]=temp[2];
 
 1556     region[iColumn3]=temp[3];
 
 1558     double value0=region[iColumn0];
 
 1559     double value1=region[iColumn1];
 
 1560     double value2=region[iColumn2];
 
 1561     double value3=region[iColumn3];
 
 1562     value0 OPERATION multiplier*element[0];
 
 1563     value1 OPERATION multiplier*element[1];
 
 1564     value2 OPERATION multiplier*element[2];
 
 1565     value3 OPERATION multiplier*element[3];
 
 1566     region[iColumn0]=value0;
 
 1567     region[iColumn1]=value1;
 
 1568     region[iColumn2]=value2;
 
 1569     region[iColumn3]=value3;
 
 1577 #if NEW_CHUNK_SIZE==2 
 1578   int iColumn0=thisColumn[0];
 
 1579   double value0=region[iColumn0];
 
 1580   value0 OPERATION multiplier*element[0];
 
 1581   region[iColumn0]=value0;
 
 1583   int iColumn0=thisColumn[0];
 
 1584   int iColumn1=thisColumn[1];
 
 1585   int iColumn2=thisColumn[2];
 
 1586   double value0=region[iColumn0];
 
 1587   double value1=region[iColumn1];
 
 1588   double value2=region[iColumn2];
 
 1589   value0 OPERATION multiplier*element[0];
 
 1590   value1 OPERATION multiplier*element[1];
 
 1591   value2 OPERATION multiplier*element[2];
 
 1592   region[iColumn0]=value0;
 
 1593   region[iColumn1]=value1;
 
 1594   region[iColumn2]=value2;
 
#define coin_prefetch(mem)
 
void(* scatterUpdate)(int, CoinFactorizationDouble, const CoinFactorizationDouble *, double *) SCATTER_ATTRIBUTE
 
void CoinAbcScatterUpdate4Add(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
 
void CoinAbcScatterUpdate5Subtract(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
 
scatterUpdate functionPointer
 
void CoinAbcScatterUpdate4NPlus3Subtract(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
 
void CoinAbcScatterUpdate7Subtract(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
 
void CoinAbcScatterUpdate4N(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
 
double CoinAbcMaximumAbsElement(const double *region, int size)
 
void CoinAbcScatterUpdate4NAdd(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
 
void CoinAbcScatterUpdate4NPlus2Subtract(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
 
void CoinAbcScatterTo(const double *regionFrom, double *regionTo, const int *index, int number)
regionTo[index[i]]=regionFrom[i] 
 
void CoinAbcReciprocal(double *array, int n, const double *input)
 
void CoinAbcSetElements(double *region, int size, double value)
 
void CoinAbcGetNorms(const double *region, int size, double &norm1, double &norm2)
 
void CoinAbcScatterUpdate5Add(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
 
#define SCATTER_ATTRIBUTE
 
void CoinAbcScatterUpdate5(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
 
void CoinAbcScatterUpdate2(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
 
void CoinAbcScatterUpdate4NPlus1Add(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
 
void CoinAbcMemcpyLong(double *array, const double *arrayFrom, int size)
 
void CoinAbcScatterUpdate2Subtract(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
 
void CoinAbcScatterUpdate1Add(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
 
void CoinAbcScatterUpdate8Add(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
 
#define coin_prefetch_const(mem)
 
void CoinAbcMultiplyIndexed(int number, const double *COIN_RESTRICT multiplier, const int *COIN_RESTRICT thisIndex, CoinFactorizationDouble *COIN_RESTRICT region)
 
void ABC_INLINE CoinAbcScatterUpdate(int number, CoinFactorizationDouble pivotValue, const CoinFactorizationDouble *COIN_RESTRICT thisElement, const int *COIN_RESTRICT thisIndex, CoinFactorizationDouble *COIN_RESTRICT region)
 
void CoinAbcScatterUpdate3Add(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
 
void CoinAbcScatterUpdate3(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
 
void CoinAbcScatterUpdate2Add(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
 
void CoinAbcScatterUpdate0(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
 
typedef void(COINLINKAGE_CB *clp_callback)(Clp_Simplex *model
typedef for user call back. 
 
void CoinAbcScatterUpdate8Subtract(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
 
void CoinAbcScatterUpdate6Subtract(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
 
void CoinAbcMinMaxAbsNormalValues(const double *region, int size, double &minimum, double &maximum)
 
double CoinFactorizationDouble
 
void CoinAbcScale(double *region, double multiplier, int size)
 
void CoinAbcScatterZeroTo(double *regionTo, const int *index, int number)
regionTo[index[i]]=0.0 
 
void CoinAbcScatterUpdate4NPlus1Subtract(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
 
void CoinAbcScatterUpdate4NPlus2(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
 
void CoinAbcScatterUpdate6(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
 
void CoinAbcScatterUpdate4NPlus1(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
 
double CoinAbcInnerProduct(const double *region1, int size, const double *region2)
 
int CoinAbcCompact(int numberSections, int alreadyDone, double *array, const int *starts, const int *lengths)
This compacts several sections and zeroes out end (returns number) 
 
void CoinAbcScatterUpdate3Subtract(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
 
void CoinAbcScatterUpdate1Subtract(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
 
void CoinAbcScatterUpdate4Subtract(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
 
CoinFactorizationDouble ABC_INLINE CoinAbcGatherUpdate(CoinSimplexInt number, const CoinFactorizationDouble *COIN_RESTRICT thisElement, const int *COIN_RESTRICT thisIndex, CoinFactorizationDouble *COIN_RESTRICT region)
 
void CoinAbcScatterUpdate6Add(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
 
#define NEW_CHUNK_SIZE_INCREMENT
 
void CoinAbcMultiplyAdd(const double *region1, int size, double multiplier1, double *regionChanged, double multiplier2)
 
void CoinAbcScatterUpdate1(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
 
void CoinAbcScatterUpdate7Add(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
 
void CoinAbcMemset0Long(double *array, int size)
 
void CoinAbcScatterUpdate8(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
 
void CoinAbcScaleNormalValues(double *region, double multiplier, double killIfLessThanThis, int size)
 
void CoinAbcInverseSqrts(double *array, int n)
array[i]=1.0/sqrt(array[i]) 
 
void CoinAbcScatterUpdate7(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
 
void CoinAbcScatterUpdate4NPlus2Add(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
 
void CoinAbcScatterUpdate4NPlus3Add(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
 
void CoinAbcScatterToList(const double *regionFrom, double *regionTo, const int *indexList, const int *indexScatter, int number)
regionTo[indexScatter[indexList[i]]]=regionFrom[indexList[i]] 
 
void CoinAbcScatterUpdate4NPlus3(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
 
void CoinAbcMemmove(double *array, const double *arrayFrom, int size)
 
void CoinAbcScatterUpdate4NSubtract(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
 
void CoinAbcGatherFrom(const double *regionFrom, double *regionTo, const int *index, int number)
regionTo[i]=regionFrom[index[i]] 
 
void CoinAbcMinMaxAbsElement(const double *region, int size, double &minimum, double &maximum)
 
void CoinAbcMemmoveAndZero(double *array, double *arrayFrom, int size)
This moves down and zeroes out end. 
 
void CoinAbcScatterUpdate4(int numberIn, CoinFactorizationDouble multiplier, const CoinFactorizationDouble *COIN_RESTRICT thisElement, CoinFactorizationDouble *COIN_RESTRICT region) SCATTER_ATTRIBUTE
 
double CoinAbcMaximumAbsElementAndScale(double *region, double multiplier, int size)
maximum fabs(region[i]) and then region[i]*=multiplier 
 
#define NEW_CHUNK_SIZE_OFFSET