Blob Blame History Raw
--- lidia-2.3.0+latte-patches-2014-10-04/src/base/factorization/bigint/sf_fermat_method.cc.orig	2014-10-04 13:30:58.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/base/factorization/bigint/sf_fermat_method.cc	2021-03-18 14:00:52.384046216 -0600
@@ -36,7 +36,7 @@ void single_factor< bigint >:: Fermat(fa
 {
 	bigint N(rep);
 	bigint m, z, df, root;
-	register unsigned int i;
+	unsigned int i;
 
 	//*********** Initialization **************************
 
--- lidia-2.3.0+latte-patches-2014-10-04/src/base/factorization/bigint/sf_mpqs.cc.orig	2018-10-09 14:24:33.608772108 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/base/factorization/bigint/sf_mpqs.cc	2021-03-18 15:30:15.602203844 -0600
@@ -1049,8 +1049,8 @@ namespace LiDIA {
       int cand[5] = {1, 3, 5, 7, 11};
   
       bigint kN;
-      register unsigned long plauf;
-      register int p, j, i, k = 1, nmod4;
+      unsigned long plauf;
+      int p, j, i, k = 1, nmod4;
       double wert, bestwert = 1, plus;
   
       nmod4 = static_cast < int >(N.least_significant_digit()) & 0x3;
@@ -1424,7 +1424,7 @@ namespace LiDIA {
 // char after blank  --> much faster than sprintf
 
     inline char *insert_at(char *p, unsigned long n) {
-      register int c, i, j, e;
+      int c, i, j, e;
     
       i = 0;
       do {
@@ -1709,7 +1709,7 @@ namespace LiDIA {
       preprocess pre;
       postprocess post;
 
-      std::auto_ptr<index_list> correction_list = pre.process(solve_matrix);
+      std::unique_ptr<index_list> correction_list = pre.process(solve_matrix);
   
       lanczos lan(solve_matrix);
   
@@ -1717,7 +1717,7 @@ namespace LiDIA {
         lan.solve();
       } while(lan.get_result_rank() <= 0);
 
-      typedef std::auto_ptr<lanczos_vector_block> vector_block_ptr;
+      typedef std::unique_ptr<lanczos_vector_block> vector_block_ptr;
       vector_block_ptr solution = post.process(lan.get_result(),
                                                *correction_list);
 
@@ -1727,7 +1727,7 @@ namespace LiDIA {
 #ifdef DEBUG
       std::cout << "\nVerifying Lanczos solution ... " << std::flush;
 
-      typedef std::auto_ptr<lanczos_sparse_matrix> sparse_matrix_ptr;
+      typedef std::unique_ptr<lanczos_sparse_matrix> sparse_matrix_ptr;
       s1 = get_name("LANCZOS_FORMAT");
       sparse_matrix_ptr matrix(new lanczos_sparse_matrix(s1));
       if(!matrix) {
--- lidia-2.3.0+latte-patches-2014-10-04/src/base/include/LiDIA/base/array_functions.h.orig	2009-05-09 09:25:17.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/base/include/LiDIA/base/array_functions.h	2021-03-18 14:01:44.999944108 -0600
@@ -66,7 +66,7 @@ template< class T >
 inline T *
 allocate_memory_and_copy_data(const T *&w, lidia_size_t len)
 {
-	register T *v = new T[len];
+	T *v = new T[len];
 	copy_data(v, w, len);
 	return v;
 }
@@ -77,7 +77,7 @@ template< class T >
 inline T **
 allocate_memory_and_copy_data2(const T **W, lidia_size_t len1, lidia_size_t len2)
 {
-	register T **V = new T *[len1];
+	T **V = new T *[len1];
 	for (--len1; len1 >= 0; len1--)
 		V[len1] = allocate_memory_and_copy_data(W[len1], len2);
 	return V;
@@ -117,7 +117,7 @@ template< class T >
 inline T *
 allocate_memory_and_swap_data(T *w, lidia_size_t len)
 {
-	register T *v = new T[len];
+	T *v = new T[len];
 	for (--len; len >= 0; len--)
 		swap(v[len], w[len]);
 	return v;
@@ -129,7 +129,7 @@ template< class T >
 inline T **
 allocate_memory_and_swap_data2(T **W, lidia_size_t len1, lidia_size_t len2)
 {
-	register T **V = new T *[len1];
+	T **V = new T *[len1];
 
 	for (--len1; len1 >= 0; len1--)
 		V[len1] = allocate_memory_and_swap_data(W[len1], len2);
--- lidia-2.3.0+latte-patches-2014-10-04/src/base/include/LiDIA/base_matrix.cc.orig	2009-05-09 09:25:17.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/base/include/LiDIA/base_matrix.cc	2021-03-18 14:02:19.696876780 -0600
@@ -3356,13 +3356,13 @@ base_matrix< T >::change_representation
 				       "change_representation(unsigned long) :: "
 				       "Error in memory allocation (allocated)");
 
-			for (register lidia_size_t i = 0; i < this->rows; i++) {
+			for (lidia_size_t i = 0; i < this->rows; i++) {
 				// set this->allocated
 				this->allocated[i] = this->columns;
 
 				// set value_counter
-				register lidia_size_t size = this->columns;
-				for (register lidia_size_t j = 0; j < this->columns; j++)
+				lidia_size_t size = this->columns;
+				for (lidia_size_t j = 0; j < this->columns; j++)
 					if (this->value[i][j] == this->Zero)
 						size--;
 
@@ -3374,8 +3374,8 @@ base_matrix< T >::change_representation
 					       "change_representation(unsigned long) :: "
 					       "Error in memory allocation (this->index[i])");
 
-				register lidia_size_t p = 0;
-				for (register lidia_size_t k = 0; k < this->columns; k++)
+				lidia_size_t p = 0;
+				for (lidia_size_t k = 0; k < this->columns; k++)
 					if (this->value[i][k] != this->Zero) {
 						LiDIA::swap(this->value[i][p], this->value[i][k]);
 						this->index[i][p] = k;
@@ -3451,7 +3451,7 @@ base_matrix< T >::status_report ()
 		  << "\n\t sparse_columns = " << this->sparse_columns << std::endl;
 
 	if (this->bitfield.get_representation() == matrix_flags::sparse_representation)
-		for (register lidia_size_t i = 0; i < this->rows; i++) {
+		for (lidia_size_t i = 0; i < this->rows; i++) {
 			std::cout << "row " << i << ": allocated = " << this->allocated[i]
 				  << " value_counter = " << this->value_counter[i] << std::endl;
 		}
--- lidia-2.3.0+latte-patches-2014-10-04/src/base/include/LiDIA/base_matrix.h.orig	2009-05-09 09:25:17.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/base/include/LiDIA/base_matrix.h	2021-03-18 14:02:35.559846003 -0600
@@ -283,7 +283,7 @@ public:
 
 	T * get_column(lidia_size_t i) const
 	{
-		register T *RES = new T[this->rows];
+		T *RES = new T[this->rows];
 		memory_handler(RES, DMESSAGE, "get_column(lidia_size_t) :: "
 			       "Error in memory allocation (RES)");
 		get_column(RES, i);
@@ -320,7 +320,7 @@ public:
 
 	T *get_row(lidia_size_t i) const
 	{
-		register T *RES = new T[this->columns];
+		T *RES = new T[this->columns];
 		memory_handler(RES, DMESSAGE, "get_row(lidia_size_t) :: "
 			       "Error in memory allocation (RES)");
 		get_row(RES, i);
@@ -949,7 +949,7 @@ public:
 
 	bigmod * get_column(lidia_size_t i) const
 	{
-		register bigmod *RES;
+		bigmod *RES;
 		if (BigintLong) {
 			RES = new bigmod[bigint_value.rows];
 			memory_handler(RES, DMESSAGE, "get_column(lidia_size_t) :: "
@@ -993,7 +993,7 @@ public:
 
 	bigmod *get_row(lidia_size_t i) const
 	{
-		register bigmod *RES;
+		bigmod *RES;
 		if (BigintLong) {
 			RES = new bigmod[bigint_value.columns];
 			memory_handler(RES, DMESSAGE, "get_row(lidia_size_t) :: "
--- lidia-2.3.0+latte-patches-2014-10-04/src/base/include/LiDIA/base/poly_intern.cc.orig	2018-10-09 14:30:21.731604065 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/base/include/LiDIA/base/poly_intern.cc	2021-03-18 14:03:09.119780894 -0600
@@ -188,7 +188,7 @@ int base_polynomial< T >::set_data (cons
 
 	this->deg = l-1;
 
-	for (register lidia_size_t i = 0; i < l; i++)
+	for (lidia_size_t i = 0; i < l; i++)
 		this->coeff[i] = d[i];
 	this->remove_leading_zeros();
 	return 0;
@@ -216,7 +216,7 @@ T* base_polynomial< T >::get_data () con
 	memory_handler(d, DM_BP, "get_data () :: "
 		       "Error in memory allocation (d)");
 
-	for (register lidia_size_t i = 0; i <= this->deg; i++)
+	for (lidia_size_t i = 0; i <= this->deg; i++)
 		d[i] = this->coeff[i];
 	return d;
 }
@@ -299,9 +299,9 @@ void base_polynomial< T >::set_degree(li
 	memory_handler(this->coeff, DM_BP, "set_degree(lidia_size_t d) :: "
 		       "Error in memory allocation (this->coeff)");
 
-	register lidia_size_t minimum = (d < this->deg)? d : this->deg;
+	lidia_size_t minimum = (d < this->deg)? d : this->deg;
 
-	for (register lidia_size_t i = 0; i <= minimum; i++)
+	for (lidia_size_t i = 0; i <= minimum; i++)
 		this->coeff[i] = tmp[i];
 
 	if (tmp != NULL)
@@ -357,7 +357,7 @@ void base_polynomial< T >::assign(const
 		}
 		else this->coeff = NULL;
 	}
-	for (register lidia_size_t i = 0; i <= this->deg; i++)
+	for (lidia_size_t i = 0; i <= this->deg; i++)
 		this->coeff[i] = a.coeff[i];
 }
 
@@ -467,7 +467,7 @@ void base_polynomial< T >::negate (const
 {
 	debug_handler_l(DM_BP, "in member - function "
 			"negate (const base_polynomial< T > &)", DV_BP + 5);
-	register lidia_size_t d = a.deg;
+	lidia_size_t d = a.deg;
 	this->set_degree(d);
 
 	const T * ap = a.coeff;
@@ -544,7 +544,7 @@ void base_polynomial< T >::add(const bas
 
 	LiDIA::add(*cp , *ap, b);
 	if (a.deg > 0 && this != &a)
-		for (register lidia_size_t i = a.deg; i; i--)
+		for (lidia_size_t i = a.deg; i; i--)
 			*(++cp) = *(++ap);
 	else
 		this->remove_leading_zeros();
@@ -575,7 +575,7 @@ void base_polynomial< T >::add(const T &
 
 	LiDIA::add(*cp, *ap, b);
 	if (a.deg > 0 && &a != this)
-		for (register lidia_size_t i = a.deg; i; i--)
+		for (lidia_size_t i = a.deg; i; i--)
 			*(++cp) = *(++ap);
 	else
 		this->remove_leading_zeros();
@@ -648,7 +648,7 @@ void base_polynomial< T >::subtract(cons
 
 	LiDIA::subtract(*cp, *ap, b);
 	if (a.deg > 0 && this != &a)
-		for (register lidia_size_t i = a.deg; i; i--)
+		for (lidia_size_t i = a.deg; i; i--)
 			*(++cp) = *(++ap);
 	else
 		this->remove_leading_zeros();
@@ -679,7 +679,7 @@ void base_polynomial< T >::subtract(cons
 
 	LiDIA::subtract(*cp, b, *ap);
 	if (a.deg > 0)
-		for (register lidia_size_t i = a.deg; i; i--)
+		for (lidia_size_t i = a.deg; i; i--)
 			LiDIA::negate(*(++cp), *(++ap));
 	else
 		this->remove_leading_zeros();
@@ -756,7 +756,7 @@ void base_polynomial< T >::multiply(cons
 
 	this->set_degree(deg_a);
 
-	register lidia_size_t i = 0;
+	lidia_size_t i = 0;
 	for (ap = a.coeff, cp = this->coeff; i <= deg_a; i++, ap++, cp++)
 		LiDIA::multiply(*cp, *ap, b);
 	this->remove_leading_zeros(); // necessary if characteristic != 0
@@ -781,7 +781,7 @@ void base_polynomial< T >::multiply(cons
 
 	this->set_degree(deg_a);
 
-	register lidia_size_t i = 0;
+	lidia_size_t i = 0;
 	for (ap = a.coeff, cp = this->coeff; i <= deg_a; i++, ap++, cp++)
 		LiDIA::multiply(*cp, b, *ap);
 	this->remove_leading_zeros(); // necessary if characteristic != 0
@@ -896,7 +896,7 @@ void base_polynomial< T >::read_verbose(
 	debug_handler_l(DM_BP, "in member-function "
 			"void read_verbose(std::istream &)", DV_BP + 6);
 
-	register lidia_size_t n = 0;
+	lidia_size_t n = 0;
 	lidia_size_t sz;
 	char c;
 
@@ -1060,7 +1060,7 @@ void base_polynomial< T >::print_verbose
 			s << x << "^" << d;
 		else
 			s << this->coeff[d] << " * " << x << "^" << d;
-		for (register lidia_size_t i = d - 1; i > 1; i--)
+		for (lidia_size_t i = d - 1; i > 1; i--)
 			if (this->coeff[i] == 1)
 				s << " + " << x << "^" << i;
 			else if (this->coeff[i] != 0)
--- lidia-2.3.0+latte-patches-2014-10-04/src/base/include/LiDIA/base_vector.cc.orig	2009-05-09 09:25:17.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/base/include/LiDIA/base_vector.cc	2021-03-18 14:03:42.558716020 -0600
@@ -319,10 +319,10 @@ base_vector< T >::read (std::istream & i
         debug_handler_l(DM_BV, "in member - function "
                         "read(std::istream &)", DV_BV + 1);
 
-        register lidia_size_t n = 0;
+        lidia_size_t n = 0;
         lidia_size_t sz = 4;
 
-        register lidia_size_t i;
+        lidia_size_t i;
 
         if (in.flags() & std::ios::binary) {
                 // binary-mode for stream 'in'
@@ -386,7 +386,7 @@ base_vector< T >::write (std::ostream &
         debug_handler_l (DM_BV, "in member - function "
                          "write(std::ostream &)", DV_BV + 1);
 
-        register lidia_size_t i;
+        lidia_size_t i;
 
         if (out.flags() & std::ios::binary) {
                 // binary-mode for stream 'out'
@@ -579,7 +579,7 @@ base_vector< T >::set_data (const T *d,
         set_capacity(l);
         this->length = l;
 
-        register lidia_size_t i;
+        lidia_size_t i;
         for (i = 0; i < l; i++)
                 this->value[i] = d[i];
 }
@@ -597,7 +597,7 @@ base_vector< T >::get_data () const
         memory_handler(d, DM_BV, "get_data :: "
                        "memory exhausted");
 
-        register lidia_size_t i;
+        lidia_size_t i;
         for (i = 0; i < this->length; i++)
                 d[i] = this->value[i];
         return d;
@@ -631,14 +631,14 @@ base_vector< T >::assign (lidia_size_t a
         debug_handler_l(DM_BV, "in member - function "
                         "assign(lidia_size_t, base_vector, lidia_size_t, lidia_size_t)", DV_BV + 3);
 
-        register lidia_size_t i, j;
+        lidia_size_t i, j;
 
         if (at< 0 || from < 0 || from >= v.length || to< 0 || to >= v.length || to < from)
                 lidia_error_handler(DM_BV, "assign :: "
                                     "invalid indices");
 
-        register lidia_size_t n = to - from + 1; // this value is positive
-        register lidia_size_t new_len = (this->length < at + n) ? (at + n) : this->length;
+        lidia_size_t n = to - from + 1; // this value is positive
+        lidia_size_t new_len = (this->length < at + n) ? (at + n) : this->length;
 
         if (this != &v) {
                 // v aliases current instance
@@ -705,7 +705,7 @@ base_vector< T >::reverse ()
         debug_handler_l(DM_BV, "in member - function "
                         "reverse()", DV_BV + 7);
 
-        register lidia_size_t i, j;
+        lidia_size_t i, j;
 
         for (i = 0, j = this->length - 1; i < j; i++, j--)
                 LiDIA::swap(this->value[i], this->value[j]);
@@ -721,7 +721,7 @@ base_vector< T >::reverse (const base_ve
         debug_handler_l(DM_BV, "in member - function "
                         "reverse(const base_vector< T > &)", DV_BV + 7);
 
-        register lidia_size_t i, j;
+        lidia_size_t i, j;
 
         if (this == &b)
                 for (i = 0, j = this->length - 1; i < j; i++, j--)
@@ -781,7 +781,7 @@ base_vector< T >::concat (const base_vec
         debug_handler_l(DM_BV, "in member - function "
                         "concat(base_vector< T > &, const base_vector< T > &)", DV_BV + 3);
 
-        register lidia_size_t i, j, l, oldlength;
+        lidia_size_t i, j, l, oldlength;
 
         if (this != &b && this != &c) {
                 l = b.length + c.length;
@@ -841,8 +841,8 @@ base_vector< T >::shift_left (lidia_size
         debug_handler_l(DM_BV, "in member - function "
                         "shift_left(lidia_size_t, lidia_size_t)", DV_BV + 3);
 
-        register lidia_size_t i;
-        register lidia_size_t old_len = this->length;
+        lidia_size_t i;
+        lidia_size_t old_len = this->length;
 
         if (pos < num)
                 precondition_error_handler (pos, "pos", "pos >= num",
@@ -865,8 +865,8 @@ base_vector< T >::shift_right (lidia_siz
         debug_handler_l(DM_BV, "in member - function "
                         "shift_right(lidia_size_t, lidia_size_t)", DV_BV + 3);
 
-        register lidia_size_t i;
-        register lidia_size_t old_len = this->length;
+        lidia_size_t i;
+        lidia_size_t old_len = this->length;
 
         if (pos < 0)
                 precondition_error_handler (pos, "pos", "pos >= 0",
@@ -893,7 +893,7 @@ base_vector< T >::remove_from (lidia_siz
         debug_handler_l(DM_BV, "in member - function "
                         "remove_from(lidia_size_t, lidia_size_t)", DV_BV + 9);
 
-        register lidia_size_t i;
+        lidia_size_t i;
 
         if (l <= 0 || pos< 0 || pos + l > this->length)
                 precondition_error_handler (l, "l", "0 < l",
@@ -920,7 +920,7 @@ base_vector< T >::insert_at (const T & x
         debug_handler_l(DM_BV, "in member - function "
                         "insert_at (const T &, lidia_size_t)", DV_BV + 9);
 
-        register lidia_size_t i, l = this->length;
+        lidia_size_t i, l = this->length;
 
         if (pos < 0)
                 precondition_error_handler(pos, "pos", "pos >= 0",
--- lidia-2.3.0+latte-patches-2014-10-04/src/base/include/LiDIA/dense_base_matrix.cc.orig	2009-05-09 09:25:17.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/base/include/LiDIA/dense_base_matrix.cc	2021-03-18 14:04:10.583661653 -0600
@@ -600,20 +600,20 @@ dense_base_matrix< T >::get_data () cons
 
 	debug_handler_l(DMESSAGE, "get_value()", DVALUE + 2);
 
-	register T **copy = NULL;
+	T **copy = NULL;
 	if (this->rows != 0) {
 		copy = new T *[this->rows];
 		memory_handler(copy, DM_BM, "get_value :: "
 			       "Error in memory allocation (copy)");
 	}
 
-	register T *tmp, *tmp1;
-	for (register lidia_size_t i = 0; i < this->rows; i++) {
+	T *tmp, *tmp1;
+	for (lidia_size_t i = 0; i < this->rows; i++) {
 		tmp1 = this->value[i];
 		tmp = new T[this->columns];
 		memory_handler(tmp, DM_BM, "get_value :: "
 			       "Error in memory allocation (tmp)");
-		for (register lidia_size_t j = 0; j < this->columns; j++)
+		for (lidia_size_t j = 0; j < this->columns; j++)
 			tmp[j] = tmp1[j];
 		copy[i] = tmp;
 	}
@@ -653,8 +653,8 @@ dense_base_matrix< T >::set_data (const
 	if (c != this->columns)
 		this->D_base_modul.set_no_of_columns(*this, c);
 
-	for (register lidia_size_t len1 = this->rows - 1; len1 >= 0; len1--)
-		for (register lidia_size_t len = this->columns - 1; len >= 0; len--)
+	for (lidia_size_t len1 = this->rows - 1; len1 >= 0; len1--)
+		for (lidia_size_t len = this->columns - 1; len >= 0; len--)
 			this->value[len1][len] = v[len1][len];
 }
 
--- lidia-2.3.0+latte-patches-2014-10-04/src/base/include/LiDIA/dense_base_matrix.h.orig	2009-05-09 09:25:17.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/base/include/LiDIA/dense_base_matrix.h	2021-03-18 14:04:29.663624645 -0600
@@ -240,7 +240,7 @@ public:
 
 	T * get_column(lidia_size_t i) const
 	{
-		register T *RES = new T[this->rows];
+		T *RES = new T[this->rows];
 		memory_handler(RES, DMESSAGE, "get_column(lidia_size_t) :: "
 			       "Error in memory allocation (RES)");
 		this->get_column(RES, i);
@@ -276,7 +276,7 @@ public:
 
 	T *get_row(lidia_size_t i) const
 	{
-		register T *RES = new T[this->columns];
+		T *RES = new T[this->columns];
 		memory_handler(RES, DMESSAGE, "get_row(lidia_size_t) :: "
 			       "Error in memory allocation (RES)");
 		this->get_row(RES, i);
--- lidia-2.3.0+latte-patches-2014-10-04/src/base/include/LiDIA/error.h.orig	2009-05-09 09:25:17.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/base/include/LiDIA/error.h	2021-03-18 14:53:56.051024579 -0600
@@ -74,8 +74,8 @@ void error_handler(const ExceptionType&
  **/ 
 class basic_error : public std::exception {
 public:
-  virtual ~basic_error() throw() = 0;
-  virtual const char* what() const throw();
+  virtual ~basic_error() noexcept = 0;
+  virtual const char* what() const noexcept;
   virtual const std::string& offendingClass() const = 0;
   void traditional_error_handler() const;
 
@@ -107,7 +107,7 @@ public:
   explicit generic_error(const std::string& what_msg);
   generic_error(const std::string& classname,
 	       const std::string& what_msg);
-  virtual ~generic_error() throw();
+  virtual ~generic_error() noexcept;
   
   virtual const std::string& offendingClass() const;
 
@@ -127,8 +127,8 @@ private:
 class index_out_of_bounds_error : public basic_error, std::out_of_range {
 public:
   index_out_of_bounds_error(const std::string& classname, long n);
-  virtual ~index_out_of_bounds_error() throw();
-  virtual const char* what() const throw();
+  virtual ~index_out_of_bounds_error() noexcept;
+  virtual const char* what() const noexcept;
   
   virtual const std::string& offendingClass() const;
   long offendingIndex() const;
@@ -151,8 +151,8 @@ class cast_error : public basic_error, s
 public:
   cast_error(const std::string& classname,
 	    const std::string& what_msg);
-  virtual ~cast_error() throw();
-  virtual const char* what() const throw();
+  virtual ~cast_error() noexcept;
+  virtual const char* what() const noexcept;
   
   virtual const std::string& offendingClass() const;
   
--- lidia-2.3.0+latte-patches-2014-10-04/src/base/include/LiDIA/field_polynomial.cc.orig	2013-08-09 18:51:16.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/base/include/LiDIA/field_polynomial.cc	2021-03-18 14:05:08.702548917 -0600
@@ -60,7 +60,7 @@ field_polynomial< T >::divide (const bas
 	T b_inv;
 	invert(b_inv, b);
 
-	register lidia_size_t i = deg_a + 1;
+	lidia_size_t i = deg_a + 1;
 	for (ap = ((field_polynomial< T > *)(&a))->coeff, cp = this->coeff;
 	     i; i--, ap++, cp++)
 		LiDIA::multiply(*cp, *ap, b_inv);
@@ -175,7 +175,7 @@ field_polynomial< T >::integral (const b
 
 	T temp;
 
-	for (register lidia_size_t i = 0; i <= d; i++, cp++, ap++) {
+	for (lidia_size_t i = 0; i <= d; i++, cp++, ap++) {
 		temp = i + 1; // necessary, since bigcomplex does not
                                 // support automatic cast !!
 		LiDIA::divide(*cp, *ap, temp);
--- lidia-2.3.0+latte-patches-2014-10-04/src/base/include/LiDIA/indexed_hash_table.cc.orig	2013-08-09 18:51:16.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/base/include/LiDIA/indexed_hash_table.cc	2021-03-18 14:05:28.430510648 -0600
@@ -84,7 +84,7 @@ indexed_hash_table< T >::assign (const i
 {
 	debug_handler("indexed_hash_table", "assign");
 
-	register lidia_size_t i;
+	lidia_size_t i;
 
 	// initialize new table
 	this->initialize(old_table.size);
@@ -193,7 +193,7 @@ indexed_hash_table< T >::remove (const T
 {
 	debug_handler("indexed_hash_table", "remove");
 
-	register lidia_size_t j;
+	lidia_size_t j;
 	hentry< T > *ptr;
 	T *target, *tptr;
 
@@ -235,7 +235,7 @@ indexed_hash_table< T >::remove_from (co
 
 	hentry< T > *ptr, *pptr, *nptr;
 	T *tptr;
-	register lidia_size_t j;
+	lidia_size_t j;
 
 	if ((i< 0) || (i >= this->curr_size)) {
 		lidia_error_handler("indexed_hash_table", "remove_from - i >= current size or < 0");
@@ -286,7 +286,7 @@ indexed_hash_table< T >::empty ()
 {
 	debug_handler("indexed_hash_table", "empty");
 
-	register lidia_size_t i, end;
+	lidia_size_t i, end;
 
 	end = this->curr_size;
 	for (i = end-1; i >= 0; --i)
@@ -308,7 +308,7 @@ indexed_hash_table< T >::hash (const T &
 {
 	debug_handler("indexed_hash_table", "hash");
 
-	register lidia_size_t i;
+	lidia_size_t i;
 	hentry< T > *ptr, *nptr, *newone;
 	T *newT;
 
@@ -400,7 +400,7 @@ indexed_hash_table< T >::read (std::istr
 {
 	debug_handler("indexed_hash_table", "read");
 
-	register lidia_size_t i;
+	lidia_size_t i;
 	lidia_size_t new_size, num;
 	T new_item;
 
@@ -429,7 +429,7 @@ indexed_hash_table< T >::print (std::ost
 {
 	debug_handler("indexed_hash_table", "print");
 
-	register lidia_size_t i;
+	lidia_size_t i;
 	hentry< T > *ptr;
 	T *tptr;
 
--- lidia-2.3.0+latte-patches-2014-10-04/src/base/include/LiDIA/lanczos.h.orig	2016-05-01 11:20:19.124685165 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/base/include/LiDIA/lanczos.h	2021-03-18 15:30:45.817183480 -0600
@@ -565,7 +565,7 @@ public:
 
 struct preprocess {
         typedef lanczos_sparse_matrix::size_type size_type;
-	std::auto_ptr<index_list>
+	std::unique_ptr<index_list>
         process(lanczos_sparse_matrix& matrix) const;
 };
 
@@ -573,7 +573,7 @@ struct preprocess {
 
 struct postprocess {
         typedef lanczos_vector_block::size_type size_type;
-	std::auto_ptr<lanczos_vector_block>
+	std::unique_ptr<lanczos_vector_block>
         process(const lanczos_vector_block& vector,
                 const index_list& list) const;
 };
--- lidia-2.3.0+latte-patches-2014-10-04/src/base/include/LiDIA/math_vector.cc.orig	2013-08-09 18:51:16.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/base/include/LiDIA/math_vector.cc	2021-03-18 14:05:58.606452123 -0600
@@ -96,7 +96,7 @@ add(const math_vector< T > &v, const mat
 	debug_handler_l(DM_MV, "in member - function "
 			"add(math_vector< T > &, math_vector< T > &)", DV_MV);
 
-	register lidia_size_t i;
+	lidia_size_t i;
 	if (w.length == v.length) {
 		this->set_capacity(w.length);
 		this->length = w.length;
@@ -121,7 +121,7 @@ add(const math_vector< T > &v, const T &
 	debug_handler_l(DM_MV, "in member - function "
 			"add(const math_vector< T > &, const T &)", DV_MV);
 
-	register lidia_size_t i;
+	lidia_size_t i;
 
 	this->set_capacity(v.length);
 	this->length = v.length;
@@ -139,7 +139,7 @@ add(const T &t, const math_vector< T > &
 	debug_handler_l(DM_MV, "in member - function "
 			"add(const T &, const math_vector< T > &)", DV_MV);
 
-	register lidia_size_t i;
+	lidia_size_t i;
 
 	this->set_capacity(v.length);
 	this->length = v.length;
@@ -161,7 +161,7 @@ subtract(const math_vector< T > &v, cons
 	debug_handler_l(DM_MV, "in member - function "
 			"subtract(const math_vector< T > &, const math_vector< T > &)", DV_MV + 1);
 
-	register lidia_size_t i;
+	lidia_size_t i;
 	if (w.length == v.length) {
 		this->set_capacity(w.length);
 		this->length = w.length;
@@ -187,7 +187,7 @@ subtract(const math_vector< T > &v, cons
 	debug_handler_l(DM_MV, "in member - function "
 			"subtract(const math_vector< T > &, const T &)", DV_MV + 1);
 
-	register lidia_size_t i;
+	lidia_size_t i;
 
 	this->set_capacity(v.length);
 	this->length = v.length;
@@ -205,7 +205,7 @@ subtract(const T &t, const math_vector<
 	debug_handler_l(DM_MV, "in member - function "
 			"subtract(const T &, const math_vector< T > &)", DV_MV + 1);
 
-	register lidia_size_t i;
+	lidia_size_t i;
 
 	this->set_capacity(v.length);
 	this->length = v.length;
@@ -227,7 +227,7 @@ compwise_multiply(const math_vector< T >
 	debug_handler_l(DM_MV, "in member - function "
 			"compwise_multiply(const math_vector< T > &, const math_vector< T > &)", DV_MV + 2);
 
-	register lidia_size_t i;
+	lidia_size_t i;
 	if (w.length == v.length) {
 		this->set_capacity(w.length);
 		this->length = w.length;
@@ -252,7 +252,7 @@ right_multiply(const math_vector< T > &v
 	debug_handler_l(DM_MV, "in member - function "
 			"multiply(const math_vector< T > &, const T &)" , DV_MV + 2);
 
-	register lidia_size_t i;
+	lidia_size_t i;
 
 	this->set_capacity(v.length);
 	this->length = v.length;
@@ -270,7 +270,7 @@ left_multiply(const T &t, const math_vec
 	debug_handler_l(DM_MV, "in member - function "
 			"multiply(const T &, const math_vector< T > &)", DV_MV + 2);
 
-	register lidia_size_t i;
+	lidia_size_t i;
 
 	this->set_capacity(v.length);
 	this->length = v.length;
@@ -288,7 +288,7 @@ multiply(T &res, const math_vector< T >
 	debug_handler_l(DM_MV, "in member - function "
 			"multiply(const math_vector< T > &)", DV_MV + 2);
 
-	register lidia_size_t i;
+	lidia_size_t i;
 	T TMP;
 
 	if (this->length == w.length) {
@@ -321,7 +321,7 @@ compwise_divide(const math_vector< T > &
 	debug_handler_l(DM_MV, "in member - function "
 			"compwise_divide(const math_vector< T > &, const math_vector< T > &)", DV_MV + 3);
 
-	register lidia_size_t i;
+	lidia_size_t i;
 	if (w.length == v.length) {
 		this->set_capacity(w.length);
 		this->length = w.length;
@@ -346,7 +346,7 @@ divide(const math_vector< T > &v, const
 	debug_handler_l(DM_MV, "in member - function "
 			"divide(const math_vector< T > &, const T &)", DV_MV + 4);
 
-	register lidia_size_t i;
+	lidia_size_t i;
 
 	this->set_capacity(v.length);
 	this->length = v.length;
@@ -365,7 +365,7 @@ divide(const T &t, const math_vector< T
 			"divide(const T &, const math_vector< T > &)", DV_MV + 4);
 
 	if (0) std::cerr << PRT;
-	register lidia_size_t i;
+	lidia_size_t i;
 
 	this->set_capacity(v.length);
 	this->length = v.length;
@@ -387,7 +387,7 @@ negate(const math_vector< T > &v)
 	debug_handler_l(DM_MV, "in member - function "
 			"negate(const math_vector< T > &)", DV_MV + 4);
 
-	register lidia_size_t i;
+	lidia_size_t i;
 	this->set_capacity(v.length);
 	this->length = v.length;
 
@@ -408,7 +408,7 @@ sum_of_squares () const
 	debug_handler_l(DM_MV, "in member - function "
 			"sum_of_squares()", DV_MV + 6);
 
-	register lidia_size_t i;
+	lidia_size_t i;
 	T res, TMP;
 
 	if (this->length > 0)
@@ -433,7 +433,7 @@ equal(const math_vector< T > &v) const
 	debug_handler_l(DM_MV, "in member - function "
 			"equal(const math_vector< T > &)", DV_MV + 5);
 
-	register lidia_size_t i;
+	lidia_size_t i;
 
 	if (this->length != v.length)
 		return false;
--- lidia-2.3.0+latte-patches-2014-10-04/src/base/include/LiDIA/matrix/base_matrix_algorithms.cc.orig	2009-05-09 09:25:13.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/base/include/LiDIA/matrix/base_matrix_algorithms.cc	2021-03-18 14:06:27.254396558 -0600
@@ -69,7 +69,7 @@ base_matrix_algorithms< T, ARG, ARG1 >::
 {
 	modul.constructor(A, v.get_size(), 1);
 
-	for (register lidia_size_t i = 0; i < A.rows; i++)
+	for (lidia_size_t i = 0; i < A.rows; i++)
 		modul.sto(A, i, 0, v[i]);
 }
 
@@ -82,8 +82,8 @@ base_matrix_algorithms< T, ARG, ARG1 >::
 {
 	modul.constructor(A, M.rows, M.columns);
 
-	for (register lidia_size_t i = 0; i < A.rows; i++)
-		for (register lidia_size_t j = 0; j < A.columns; j++)
+	for (lidia_size_t i = 0; i < A.rows; i++)
+		for (lidia_size_t j = 0; j < A.columns; j++)
 			modul.sto(A, i, j, modul1.member(M, i, j));
 }
 
@@ -102,7 +102,7 @@ base_matrix_algorithms< T, ARG, ARG1 >::
 	T TMP1, TMP2;
 
 
-	for (register lidia_size_t k = A.rows - 1; k >= 0; k--) {
+	for (lidia_size_t k = A.rows - 1; k >= 0; k--) {
 		TMP1 = modul.member(A, k, j);
 		TMP2 = modul.member(A, k, i);
 		modul.sto(A, k, j, TMP2);
@@ -120,7 +120,7 @@ base_matrix_algorithms< T, ARG, ARG1 >::
 {
 	T TMP;
 
-	for (register lidia_size_t k = A.columns - 1; k >= 0; k--) {
+	for (lidia_size_t k = A.columns - 1; k >= 0; k--) {
 		TMP = modul.member(A, j, k);
 		modul.sto(A, j, k, modul.member(A, i, k));
 		modul.sto(A, i, k, TMP);
@@ -191,7 +191,7 @@ inline void
 base_matrix_algorithms< T, ARG, ARG1 >::assign (MR< T > &A,
 						const MR< T > &M) const
 {
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	for (i = 0; i < A.rows; i++)
 		for (j = 0; j < A.columns; j++)
 			modul.sto(A, i, j, modul1.member(M, i, j));
@@ -211,8 +211,8 @@ base_matrix_algorithms< T, ARG, ARG1 >::
 					      const T &a,
 					      const T &b) const
 {
-	for (register lidia_size_t i = 0; i < A.rows; i++) {
-		for (register lidia_size_t j = 0; j < A.columns; j++)
+	for (lidia_size_t i = 0; i < A.rows; i++) {
+		for (lidia_size_t j = 0; j < A.columns; j++)
 			modul.sto(A, i, j, ((i == j) ? a : b));
 	}
 }
@@ -228,7 +228,7 @@ void
 base_matrix_algorithms< T, ARG, ARG1 >::trans (MR< T > &R,
 					       const MR< T > &A) const
 {
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 
 	if (A.value != R.value) {
 		if (R.columns != A.rows)
@@ -243,7 +243,7 @@ base_matrix_algorithms< T, ARG, ARG1 >::
 	}
 	else {
 		T TMP;
-		register lidia_size_t oldrows = R.rows, oldcolumns = R.columns;
+		lidia_size_t oldrows = R.rows, oldcolumns = R.columns;
 		if (R.rows != R.columns)
 			if (R.columns > R.rows) {
 				modul.set_no_of_rows(R, oldcolumns);
--- lidia-2.3.0+latte-patches-2014-10-04/src/base/include/LiDIA/matrix/dense_base_matrix_kernel.cc.orig	2009-05-09 09:25:13.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/base/include/LiDIA/matrix/dense_base_matrix_kernel.cc	2021-03-18 14:07:35.127264919 -0600
@@ -73,7 +73,7 @@ constructor(MR< T > &A, lidia_size_t r,
 			       "Error in memory allocation (A.value)");
 	}
 
-	for (register lidia_size_t i = 0; i < r; i++) {
+	for (lidia_size_t i = 0; i < r; i++) {
 		A.value[i] = new T[c];
 		memory_handler(A.value[i], DMESSAGE, "constructor(MR< T > &, "
 			       "lidia_size_t, lidia_size_t) :: "
@@ -105,9 +105,9 @@ constructor(MR< T > &B, lidia_size_t r,
 			       "Error in memory allocation (B.value)");
 	}
 
-	register T *Btmp;
-	register const T *Atmp;
-	for (register lidia_size_t i = 0; i < r; i++) {
+	T *Btmp;
+	const T *Atmp;
+	for (lidia_size_t i = 0; i < r; i++) {
 		Atmp = A[i];
 
 		Btmp = new T[c];
@@ -115,7 +115,7 @@ constructor(MR< T > &B, lidia_size_t r,
 			       "lidia_size_t, lidia_size_t, const T **) :: "
 			       "Error in memory allocation (Btmp)");
 
-		for (register lidia_size_t j = 0; j < c; j++)
+		for (lidia_size_t j = 0; j < c; j++)
 			Btmp[j] = Atmp[j];
 		B.value[i] = Btmp;
 	}
@@ -147,8 +147,8 @@ constructor(MR< T > &A, const MR< T > &M
 			       "Error in memory allocation (A.value)");
 	}
 
-	register T *Atmp, *Mtmp;
-	for (register lidia_size_t i = 0; i < A.rows; i++) {
+	T *Atmp, *Mtmp;
+	for (lidia_size_t i = 0; i < A.rows; i++) {
 		Atmp = new T[A.columns];
 		Mtmp = M.value[i];
 		memory_handler(Atmp, DMESSAGE,
@@ -156,7 +156,7 @@ constructor(MR< T > &A, const MR< T > &M
 			       "const MR< T > &) :: "
 			       "Error in memory allocation (Atmp)");
 
-		for (register lidia_size_t j = 0; j < A.columns; j++)
+		for (lidia_size_t j = 0; j < A.columns; j++)
 			Atmp[j] = Mtmp[j];
 		A.value[i] = Atmp;
 	}
@@ -214,7 +214,7 @@ inline void dense_base_matrix_kernel< T
 sto_column(MR< T > &A, const T *v, lidia_size_t l,
 	   lidia_size_t j, lidia_size_t from) const
 {
-	for (register lidia_size_t k = from; k < from + l && k < A.rows; k++)
+	for (lidia_size_t k = from; k < from + l && k < A.rows; k++)
 		A.value[k][j] = v[k - from];
 }
 
@@ -224,7 +224,7 @@ template< class T >
 inline void dense_base_matrix_kernel< T >::
 get_column(const MR< T > &A, T *RES, lidia_size_t i) const
 {
-	for (register lidia_size_t j = A.rows - 1; j >= 0; j--)
+	for (lidia_size_t j = A.rows - 1; j >= 0; j--)
 		RES[j] = A.value[j][i];
 }
 
@@ -239,8 +239,8 @@ inline void dense_base_matrix_kernel< T
 sto_row(MR< T > &A, const T *v, lidia_size_t l,
 	lidia_size_t i, lidia_size_t from) const
 {
-	register T *Atmp = A.value[i];
-	for (register lidia_size_t k = from; k < l + from && k < A.columns; k++)
+	T *Atmp = A.value[i];
+	for (lidia_size_t k = from; k < l + from && k < A.columns; k++)
 		Atmp[k] = v[k-from];
 }
 
@@ -250,8 +250,8 @@ template< class T >
 inline void dense_base_matrix_kernel< T >::
 get_row(const MR< T > &A, T *RES, lidia_size_t i) const
 {
-	register T *Atmp = A.value[i];
-	for (register lidia_size_t k = 0; k < A.columns; k++)
+	T *Atmp = A.value[i];
+	for (lidia_size_t k = 0; k < A.columns; k++)
 		RES[k] = Atmp[k];
 }
 
@@ -271,7 +271,7 @@ insert_columns(MR< T > &A, lidia_size_t
 		       "lidia_size_t *, const T **) :: "
 		       "Error in memory allocation (new_value)");
 
-	register lidia_size_t i; // MM, for HP UX 10.20, CC
+	lidia_size_t i; // MM, for HP UX 10.20, CC
 	for (i = 0; i < A.rows; i++) {
 		new_value[i] = new T[A.columns];
 		memory_handler(new_value[i], DMESSAGE, "insert_columns(MR< T > &, "
@@ -282,13 +282,13 @@ insert_columns(MR< T > &A, lidia_size_t
 	lidia_size_t l1 = 0, l2 = 0, l3 = 1;
 	for (i = 0; i < A.columns; i++) {
 		if (i == ind[l3]) {
-			for (register lidia_size_t j = 0; j < A.rows; j++)
+			for (lidia_size_t j = 0; j < A.rows; j++)
 				new_value[j][i] = news[j][l2];
 			l2++;
 			l3++;
 		}
 		else {
-			for (register lidia_size_t j = 0; j < A.rows; j++)
+			for (lidia_size_t j = 0; j < A.rows; j++)
 				new_value[j][i] = A.value[j][l1];
 			l1++;
 		}
@@ -343,13 +343,13 @@ insert_rows(MR< T > &A, lidia_size_t *in
 		       "Error in memory allocation (new_value)");
 
 	lidia_size_t l1 = 0, l2 = 1, l3 = 0;
-	for (register lidia_size_t i = 0; i <= A.rows; i++) {
+	for (lidia_size_t i = 0; i <= A.rows; i++) {
 		if (i == ind[l2]) {
 			new_value[i] = new T[A.columns];
 			memory_handler(new_value[i], DMESSAGE, "insert_rows(MR< T > &, "
 				       "lidia_size_t *, const T **) :: "
 				       "Error in memory allocation (new_value[i])");
-			for (register lidia_size_t j = 0; j < A.columns; j++)
+			for (lidia_size_t j = 0; j < A.columns; j++)
 				new_value[i][j] = news[l3][j];
 			l2++;
 			l3++;
@@ -386,7 +386,7 @@ remove_rows(MR< T > &A, lidia_size_t *re
 
 	T **new_value = new T*[A.rows];
 
-	register lidia_size_t i, l = 0, l1 = 1;
+	lidia_size_t i, l = 0, l1 = 1;
 	for (i = 0; i <= len; i++)
 		if (rem[l1] != i) {
 			new_value[l] = A.value[i];
@@ -411,7 +411,7 @@ swap_columns(MR< T > &A, lidia_size_t i,
 {
 	T *tmp;
 
-	for (register lidia_size_t k = A.rows - 1; k >= 0; k--) {
+	for (lidia_size_t k = A.rows - 1; k >= 0; k--) {
 		tmp = A.value[k];
 		LiDIA::swap(tmp[i], tmp[j]);
 	}
@@ -438,8 +438,8 @@ template< class T >
 inline void dense_base_matrix_kernel< T >::
 assign(MR< T > &A, const MR< T > &M) const
 {
-	for (register lidia_size_t len1 = A.rows - 1; len1 >= 0; len1--)
-		for (register lidia_size_t len = A.columns - 1; len >= 0; len--)
+	for (lidia_size_t len1 = A.rows - 1; len1 >= 0; len1--)
+		for (lidia_size_t len = A.columns - 1; len >= 0; len--)
 			A.value[len1][len] = M.value[len1][len];
 }
 
@@ -455,9 +455,9 @@ diag(MR< T > &A, const T &a, const T &b)
 {
 	T *tmp;
 
-	for (register lidia_size_t i = 0; i < A.rows; i++) {
+	for (lidia_size_t i = 0; i < A.rows; i++) {
 		tmp = A.value[i];
-		for (register lidia_size_t j = 0; j < A.columns; j++)
+		for (lidia_size_t j = 0; j < A.columns; j++)
 			tmp[j] = (i == j) ? a : b;
 	}
 }
@@ -472,7 +472,7 @@ template< class T >
 void dense_base_matrix_kernel< T >::
 trans(MR< T > &R, const MR< T > &A) const
 {
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	T *Atmp;
 
 	if (A.value != R.value) {
@@ -488,7 +488,7 @@ trans(MR< T > &R, const MR< T > &A) cons
 		}
 	}
 	else {
-		register lidia_size_t oldrows = R.rows, oldcolumns = R.columns;
+		lidia_size_t oldrows = R.rows, oldcolumns = R.columns;
 		if (R.rows != R.columns)
 			if (R.columns > R.rows) {
 				set_no_of_rows(R, oldcolumns);
@@ -522,8 +522,8 @@ template< class T >
 void dense_base_matrix_kernel< T >::
 write_to_beauty(const MR< T > &A, std::ostream &out) const
 {
-	register lidia_size_t i, j;
-	register T *tmp;
+	lidia_size_t i, j;
+	T *tmp;
 	for (i = 0; i < A.rows; i++) {
 		tmp = A.value[i];
 		out << std::endl << "(";
@@ -540,7 +540,7 @@ template< class T >
 void dense_base_matrix_kernel< T >::
 write_to_stream(const MR< T > &A, std::ostream &out) const
 {
-	register lidia_size_t i, j, col = A.columns - 1;
+	lidia_size_t i, j, col = A.columns - 1;
 	T *tmp;
 
 	out << A.rows << " " << A.columns << std::endl;
@@ -601,7 +601,7 @@ void dense_base_matrix_kernel< T >::
 write_to_mathematica(const MR< T > &A, std::ostream &out) const
 {
 
-	register lidia_size_t i, j, l = A.columns - 1, k = A.rows - 1;
+	lidia_size_t i, j, l = A.columns - 1, k = A.rows - 1;
 	T *tmp;
 
 	out << "{";
@@ -661,8 +661,8 @@ read_from_mathematica(MR< T > &A, std::i
 	if (A.columns != local_columns)
 		set_no_of_columns(A, local_columns);
 
-	for (register lidia_size_t i = 0; i < A.rows; i++) {
-		for (register lidia_size_t j = 0; j < A.columns; j++) {
+	for (lidia_size_t i = 0; i < A.rows; i++) {
+		for (lidia_size_t j = 0; j < A.columns; j++) {
 			A.value[i][j] = buffer[len];
 			len++;
 		}
@@ -679,7 +679,7 @@ template< class T >
 void dense_base_matrix_kernel< T >::
 write_to_maple(const MR< T > &A, std::ostream &out) const
 {
-	register lidia_size_t i, j, l = A.columns - 1, k = A.rows - 1;
+	lidia_size_t i, j, l = A.columns - 1, k = A.rows - 1;
 	T *tmp;
 
 	out << "array(1 .. " << A.rows << ", 1 .. " << A.columns << ", [";
@@ -710,7 +710,7 @@ read_from_maple(MR< T > &A, std::istream
 				    "read_from_maple(std::istream &dz)",
 				    DMESSAGE, EMESSAGE[5]);
 
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	lidia_size_t startr, startc, endr, endc, x, y;
 	T TMP;
 
@@ -753,7 +753,7 @@ template< class T >
 void dense_base_matrix_kernel< T >::
 write_to_gp(const MR< T > &A, std::ostream &out) const
 {
-	register lidia_size_t i, j, l = A.columns - 1, k = A.rows - 1;
+	lidia_size_t i, j, l = A.columns - 1, k = A.rows - 1;
 	T *tmp;
 
 	out << "[";
@@ -809,8 +809,8 @@ read_from_gp(MR< T > &A, std::istream &d
 	if (A.columns != local_columns)
 		set_no_of_columns(A, local_columns);
 
-	for (register lidia_size_t i = 0; i < A.rows; i++) {
-		for (register lidia_size_t j = 0; j < A.columns; j++) {
+	for (lidia_size_t i = 0; i < A.rows; i++) {
+		for (lidia_size_t j = 0; j < A.columns; j++) {
 			A.value[i][j] = buffer[len];
 			len++;
 		}
@@ -827,7 +827,7 @@ template< class T >
 void dense_base_matrix_kernel< T >::
 write_to_kash(const MR< T > &A, std::ostream &out) const
 {
-	register lidia_size_t i, j, l = A.columns - 1, k = A.rows - 1;
+	lidia_size_t i, j, l = A.columns - 1, k = A.rows - 1;
 	T *tmp;
 
 	out << "LIDIA: = Mat(Z, [";
@@ -890,8 +890,8 @@ read_from_kash(MR< T > &A, std::istream
 	if (A.columns != local_columns)
 		set_no_of_columns(A, local_columns);
 
-	for (register lidia_size_t i = 0; i < A.rows; i++) {
-		for (register lidia_size_t j = 0; j < A.columns; j++) {
+	for (lidia_size_t i = 0; i < A.rows; i++) {
+		for (lidia_size_t j = 0; j < A.columns; j++) {
 			A.value[i][j] = buffer[len];
 			len++;
 		}
@@ -996,7 +996,7 @@ set_no_of_columns(MR< T > &A, lidia_size
 		return;
 
 	if (c == 0) {
-		for (register lidia_size_t i = 0; i < A.rows; i++)
+		for (lidia_size_t i = 0; i < A.rows; i++)
 			delete[] A.value[i];
 		delete[] A.value;
 		A.value = NULL;
@@ -1008,7 +1008,7 @@ set_no_of_columns(MR< T > &A, lidia_size
 	T *tmp, *tmp1;
 
 	if (c < A.columns) {
-		for (register lidia_size_t i = 0; i < A.rows; i++) {
+		for (lidia_size_t i = 0; i < A.rows; i++) {
 			tmp1 = A.value[i];
 			tmp = new T[c];
 			memory_handler(tmp, DMESSAGE, "set_no_of_columns :: "
@@ -1019,12 +1019,12 @@ set_no_of_columns(MR< T > &A, lidia_size
 		}
 	}
 	else {
-		for (register lidia_size_t i = 0; i < A.rows; i++) {
+		for (lidia_size_t i = 0; i < A.rows; i++) {
 			tmp1 = A.value[i];
 			tmp = new T[c];
 			memory_handler(tmp, DMESSAGE, "set_no_of_columns :: "
 				       "Error in memory allocation (tmp)");
-			for (register lidia_size_t j = 0; j < A.columns; j++)
+			for (lidia_size_t j = 0; j < A.columns; j++)
 				tmp[j] = tmp1[j];
 			A.value[i] = tmp;
 			delete[] tmp1;
@@ -1039,7 +1039,7 @@ template< class T >
 inline void dense_base_matrix_kernel< T >::
 kill(MR< T > &A) const
 {
-	for (register lidia_size_t i = 0; i < A.rows; i++)
+	for (lidia_size_t i = 0; i < A.rows; i++)
 		delete[] A.value[i];
 	delete[] A.value;
 	A.value = NULL;
@@ -1057,7 +1057,7 @@ template< class T >
 inline bool dense_base_matrix_kernel< T >::
 is_column_zero(const MR< T > &RES, lidia_size_t c) const
 {
-	register lidia_size_t i;
+	lidia_size_t i;
 
 	for (i = 0; i < RES.rows; i++) {
 		if (RES.value[i][c] != RES.Zero)
@@ -1072,8 +1072,8 @@ template< class T >
 inline bool dense_base_matrix_kernel< T >::
 is_row_zero(const MR< T > &RES, lidia_size_t r) const
 {
-	register lidia_size_t i;
-	register T *tmp = RES.value[r];
+	lidia_size_t i;
+	T *tmp = RES.value[r];
 
 	for (i = 0; i < RES.columns; i++) {
 		if (tmp[i] != RES.Zero)
@@ -1088,8 +1088,8 @@ template< class T >
 inline bool dense_base_matrix_kernel< T >::
 is_matrix_zero(const MR< T > &RES) const
 {
-	register lidia_size_t i, j;
-	register T *tmp;
+	lidia_size_t i, j;
+	T *tmp;
 
 	for (i = 0; i < RES.rows; i++) {
 		tmp = RES.value[i];
@@ -1129,13 +1129,13 @@ change_orientation(MR< T > &A, unsigned
 			       "change_orientation(MR< T > &, unsigned long) ::"
 			       "Error in memory allocation (A.value)");
 
-		for (register lidia_size_t i = 0; i < index1; i++) {
+		for (lidia_size_t i = 0; i < index1; i++) {
 			A.value[i] = new T[A.value_counter[i]];
 			memory_handler(A.value[i], DMESSAGE,
 				       "change_orientation(MR< T > &, unsigned long) ::"
 				       "Error in memory allocation (A.value[i])");
 
-			for (register lidia_size_t j = 0; j < index2; j++) {
+			for (lidia_size_t j = 0; j < index2; j++) {
 				A.value[i][j] = oldvalue[j][i];
 			}
 			delete[] oldvalue[i];
--- lidia-2.3.0+latte-patches-2014-10-04/src/base/include/LiDIA/matrix/dense_field_matrix_kernel.cc.orig	2009-05-09 09:25:13.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/base/include/LiDIA/matrix/dense_field_matrix_kernel.cc	2021-03-18 14:07:50.766234590 -0600
@@ -55,7 +55,7 @@ inline void dense_field_matrix_kernel< T
 						    const MR< T > &A,
 						    const T &k) const
 {
-	register lidia_size_t j, i;
+	lidia_size_t j, i;
 	T *REStmp, *Atmp;
 
 	for (j = 0; j < A.rows; j++) {
@@ -74,7 +74,7 @@ dense_field_matrix_kernel< T >::compwise
 						 const MR< T > &A,
 						 const MR< T > &B) const
 {
-	register lidia_size_t j, i;
+	lidia_size_t j, i;
 	T *REStmp, *Atmp, *Btmp;
 
 	for (j = 0; j < RES.rows; j++) {
--- lidia-2.3.0+latte-patches-2014-10-04/src/base/include/LiDIA/matrix/dense_ring_matrix_kernel.cc.orig	2009-05-09 09:25:13.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/base/include/LiDIA/matrix/dense_ring_matrix_kernel.cc	2021-03-18 14:08:18.486180836 -0600
@@ -57,7 +57,7 @@ template< class T >
 inline void dense_ring_matrix_kernel< T >::
 add(MR< T > &RES, const MR< T > &M, const MR< T > &N) const
 {
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 
 	T *Mtmp, *Ntmp, *REStmp;
 	for (i = 0; i < RES.rows; i++) {
@@ -75,7 +75,7 @@ template< class T >
 inline void dense_ring_matrix_kernel< T >::
 add(MR< T > &RES, const MR< T > &M, const T &a) const
 {
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	T *REStmp, *Mtmp;
 
 	for (i = 0; i < RES.rows; i++) {
@@ -92,7 +92,7 @@ template< class T >
 inline void dense_ring_matrix_kernel< T >::
 add(MR< T > &RES, const T &a, const MR< T > &M) const
 {
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	T *REStmp, *Mtmp;
 
 	for (i = 0; i < RES.rows; i++) {
@@ -113,7 +113,7 @@ template< class T >
 inline void dense_ring_matrix_kernel< T >::
 subtract(MR< T > &RES, const MR< T > &M, const MR< T > &N) const
 {
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 
 	T *REStmp, *Mtmp, *Ntmp;
 
@@ -132,7 +132,7 @@ template< class T >
 inline void dense_ring_matrix_kernel< T >::
 subtract(MR< T > &RES, const MR< T > &M, const T &a) const
 {
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	T *REStmp, *Mtmp;
 
 	for (i = 0; i < RES.rows; i++) {
@@ -149,7 +149,7 @@ template< class T >
 inline void dense_ring_matrix_kernel< T >::
 subtract(MR< T > &RES, const T &a, const MR< T > &M) const
 {
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	T *REStmp, *Mtmp;
 
 	for (i = 0; i < RES.rows; i++) {
@@ -170,7 +170,7 @@ template< class T >
 inline void dense_ring_matrix_kernel< T >::
 multiply(MR< T > &RES, const MR< T > &A, const MR< T > &B) const
 {
-	register lidia_size_t j, i, z;
+	lidia_size_t j, i, z;
 	T TMP, TMP1, *Atmp, *REStmp;
 
 	for (j = 0; j < A.rows; j++) {
@@ -193,7 +193,7 @@ template< class T >
 inline void dense_ring_matrix_kernel< T >::
 multiply(MR< T > &RES, const MR< T > &A, const T &k) const
 {
-	register lidia_size_t j, i;
+	lidia_size_t j, i;
 	T *REStmp, *Atmp;
 
 	for (j = 0; j < A.rows; j++) {
@@ -210,7 +210,7 @@ template< class T >
 inline void dense_ring_matrix_kernel< T >::
 multiply(MR< T > &RES, const T &k, const MR< T > &A) const
 {
-	register lidia_size_t j, i;
+	lidia_size_t j, i;
 	T *REStmp, *Atmp;
 	for (j = 0; j < A.rows; j++) {
 		REStmp = RES.value[j];
@@ -226,7 +226,7 @@ template< class T >
 inline void dense_ring_matrix_kernel< T >::
 compwise_multiply(MR< T > &RES, const MR< T > &A, const MR< T > &B) const
 {
-	register lidia_size_t j, i;
+	lidia_size_t j, i;
 	T *REStmp, *Atmp, *Btmp;
 
 	for (j = 0; j < RES.rows; j++) {
@@ -244,7 +244,7 @@ template< class T >
 inline void dense_ring_matrix_kernel< T >::
 multiply_right(const MR< T > &RES, T *&c, const T *v) const
 {
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	T TMP, TMP1, *tmp;
 
 	if (c == v || c == NULL) {
@@ -270,7 +270,7 @@ template< class T >
 inline void dense_ring_matrix_kernel< T >::
 multiply_left(const MR< T > &RES, T *&c, const T *v) const
 {
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	T TMP, TMP1;
 
 	if (c == v || c == NULL) {
@@ -299,7 +299,7 @@ template< class T >
 inline void dense_ring_matrix_kernel< T >::
 negate(MR< T > &RES, const MR< T > &B) const
 {
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 
 	T *Btmp, *REStmp;
 
@@ -325,7 +325,7 @@ template< class T >
 inline bool dense_ring_matrix_kernel< T >::
 equal(const MR< T > &RES, const MR< T > &N) const
 {
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	if (RES.rows != N.rows || RES.columns != N.columns)
 		return false;
 
@@ -351,7 +351,7 @@ template< class T >
 inline void dense_ring_matrix_kernel< T >::
 trace(const MR< T > &RES, T &tr) const
 {
-	register lidia_size_t i;
+	lidia_size_t i;
 	tr = RES.value[0][0];
 	for (i = 1; i < RES.rows; i++)
 		LiDIA::add(tr, tr, RES.value[i][i]);
--- lidia-2.3.0+latte-patches-2014-10-04/src/base/include/LiDIA/matrix/field_matrix_algorithms.cc.orig	2009-05-09 09:25:13.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/base/include/LiDIA/matrix/field_matrix_algorithms.cc	2021-03-18 14:08:33.686151354 -0600
@@ -62,7 +62,7 @@ field_matrix_algorithms< T, ARG1, ARG2,
 	debug_handler_l(DMESSAGE, "in member - function "
 			"divide(const MATRIX_TYPE &, const T &)", DVALUE + 2);
 
-	register lidia_size_t j, i;
+	lidia_size_t j, i;
 	T TMP;
 
 	for (j = 0; j < A.rows; j++) {
@@ -84,7 +84,7 @@ field_matrix_algorithms< T, ARG1, ARG2,
 	debug_handler_l(DMESSAGE, "in member - function "
 			"compwise_divide(const MATRIX_TYPE &, const MATRIX_TYPE &)", DVALUE + 3);
 
-	register lidia_size_t j, i;
+	lidia_size_t j, i;
 	T TMP;
 
 	for (j = 0; j < RES.rows; j++) {
--- lidia-2.3.0+latte-patches-2014-10-04/src/base/include/LiDIA/matrix/ring_matrix_algorithms.cc.orig	2009-05-09 09:25:13.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/base/include/LiDIA/matrix/ring_matrix_algorithms.cc	2021-03-18 14:09:13.911073279 -0600
@@ -59,7 +59,7 @@ template< class T, class ARG1, class ARG
 inline void ring_matrix_algorithms< T, ARG1, ARG2, ARG3 >::
 add(MR< T > &RES, const MR< T > &M, const MR< T > &N) const
 {
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	T TMP;
 
 	for (i = 0; i < N.rows; i++) {
@@ -76,7 +76,7 @@ template< class T, class ARG1, class ARG
 inline void ring_matrix_algorithms< T, ARG1, ARG2, ARG3 >::
 add(MR< T > &RES, const MR< T > &M, const T &a) const
 {
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	T TMP;
 
 	for (i = 0; i < RES.rows; i++) {
@@ -93,7 +93,7 @@ template< class T, class ARG1, class ARG
 inline void ring_matrix_algorithms< T, ARG1, ARG2, ARG3 >::
 add(MR< T > &RES, const T &a, const MR< T > &M) const
 {
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	T TMP;
 
 	for (i = 0; i < RES.rows; i++) {
@@ -114,7 +114,7 @@ template< class T, class ARG1, class ARG
 inline void ring_matrix_algorithms< T, ARG1, ARG2, ARG3 >::
 subtract(MR< T > &RES, const MR< T > &M, const MR< T > &N) const
 {
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	T TMP;
 
 	for (i = 0; i < RES.rows; i++) {
@@ -131,7 +131,7 @@ template< class T, class ARG1, class ARG
 inline void ring_matrix_algorithms< T, ARG1, ARG2, ARG3 >::
 subtract(MR< T > &RES, const MR< T > &M, const T &a) const
 {
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	T TMP;
 
 	for (i = 0; i < RES.rows; i++) {
@@ -148,7 +148,7 @@ template< class T, class ARG1, class ARG
 inline void ring_matrix_algorithms< T, ARG1, ARG2, ARG3 >::
 subtract(MR< T > &RES, const T &a, const MR< T > &M) const
 {
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	T TMP;
 
 	for (i = 0; i < RES.rows; i++) {
@@ -169,7 +169,7 @@ template< class T, class ARG1, class ARG
 inline void ring_matrix_algorithms< T, ARG1, ARG2, ARG3 >::
 multiply(MR< T > &RES, const MR< T > &A, const MR< T > &B) const
 {
-	register lidia_size_t j, i, z;
+	lidia_size_t j, i, z;
 	T TMP, TMP1;
 
 	for (j = 0; j < A.rows; j++) {
@@ -190,7 +190,7 @@ template< class T, class ARG1, class ARG
 inline void ring_matrix_algorithms< T, ARG1, ARG2, ARG3 >::
 multiply(MR< T > &RES, const MR< T > &A, const T &k) const
 {
-	register lidia_size_t j, i;
+	lidia_size_t j, i;
 	T TMP;
 
 	for (j = 0; j < A.rows; j++) {
@@ -207,7 +207,7 @@ template< class T, class ARG1, class ARG
 inline void ring_matrix_algorithms< T, ARG1, ARG2, ARG3 >::
 multiply(MR< T > &RES, const T &k, const MR< T > &A) const
 {
-	register lidia_size_t j, i;
+	lidia_size_t j, i;
 	T TMP;
 	for (j = 0; j < A.rows; j++) {
 		for (i = 0; i < A.columns; i++) {
@@ -223,7 +223,7 @@ template< class T, class ARG1, class ARG
 inline void ring_matrix_algorithms< T, ARG1, ARG2, ARG3 >::
 compwise_multiply(MR< T > &RES, const MR< T > &A, const MR< T > &B) const
 {
-	register lidia_size_t j, i;
+	lidia_size_t j, i;
 	T TMP;
 
 	for (j = 0; j < RES.rows; j++) {
@@ -240,7 +240,7 @@ template< class T, class ARG1, class ARG
 void ring_matrix_algorithms< T, ARG1, ARG2, ARG3 >::
 multiply_right(const MR< T > &RES, math_vector< T > &res, const math_vector< T > &v) const
 {
-	register lidia_size_t i, j, l = res.size();
+	lidia_size_t i, j, l = res.size();
 	T TMP, TMP1;
 
 	T *tmp1 = res.get_data_address(), *tmp2 = v.get_data_address();
@@ -285,7 +285,7 @@ template< class T, class ARG1, class ARG
 inline void ring_matrix_algorithms< T, ARG1, ARG2, ARG3 >::
 multiply_right(const MR< T > &RES, T *&c, const T *v) const
 {
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	T TMP, TMP1;
 
 	if (c == v || c == NULL) {
@@ -310,7 +310,7 @@ template< class T, class ARG1, class ARG
 void ring_matrix_algorithms< T, ARG1, ARG2, ARG3 >::
 multiply_left(const MR< T > &RES, math_vector< T > &res, const math_vector< T > &v) const
 {
-	register lidia_size_t i, j, l = res.size();
+	lidia_size_t i, j, l = res.size();
 	T TMP, TMP1;
 
 	T *tmp1 = res.get_data_address(), *tmp2 = v.get_data_address();
@@ -354,7 +354,7 @@ template< class T, class ARG1, class ARG
 inline void ring_matrix_algorithms< T, ARG1, ARG2, ARG3 >::
 multiply_left(const MR< T > &RES, T *&c, const T *v) const
 {
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	T TMP, TMP1;
 
 	if (c == v || c == NULL) {
@@ -383,7 +383,7 @@ template< class T, class ARG1, class ARG
 inline void ring_matrix_algorithms< T, ARG1, ARG2, ARG3 >::
 negate(MR< T > &RES, const MR< T > &B) const
 {
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 
 	T TMP;
 
@@ -409,7 +409,7 @@ template< class T, class ARG1, class ARG
 inline bool ring_matrix_algorithms< T, ARG1, ARG2, ARG3 >::
 equal(const MR< T > &RES, const MR< T > &N) const
 {
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	if (RES.rows != N.rows || RES.columns != N.columns)
 		return false;
 
@@ -431,7 +431,7 @@ template< class T, class ARG1, class ARG
 inline void ring_matrix_algorithms< T, ARG1, ARG2, ARG3 >::
 trace(const MR< T > &RES, T &tr) const
 {
-	register lidia_size_t i;
+	lidia_size_t i;
 	tr = modul1.member(RES, 0, 0);
 	for (i = 1; i < RES.rows; i++)
 		LiDIA::add(tr, tr, modul1.member(RES, i, i));
@@ -500,7 +500,7 @@ template< class T, class ARG1, class ARG
 inline void modular_ring_matrix_algorithms< T, ARG1, ARG2, ARG3 >::
 add(MR< T > &RES, const MR< T > &M, const MR< T > &N, const T &mod) const
 {
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	T TMP;
 
 	for (i = 0; i < N.rows; i++) {
@@ -517,7 +517,7 @@ template< class T, class ARG1, class ARG
 inline void modular_ring_matrix_algorithms< T, ARG1, ARG2, ARG3 >::
 add(MR< T > &RES, const MR< T > &M, const T &a, const T &mod) const
 {
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	T TMP;
 
 	for (i = 0; i < RES.rows; i++) {
@@ -534,7 +534,7 @@ template< class T, class ARG1, class ARG
 inline void modular_ring_matrix_algorithms< T, ARG1, ARG2, ARG3 >::
 add(MR< T > &RES, const T &a, const MR< T > &M, const T &mod) const
 {
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	T TMP;
 
 	for (i = 0; i < RES.rows; i++) {
@@ -555,7 +555,7 @@ template< class T, class ARG1, class ARG
 inline void modular_ring_matrix_algorithms< T, ARG1, ARG2, ARG3 >::
 subtract(MR< T > &RES, const MR< T > &M, const MR< T > &N, const T &mod) const
 {
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	T TMP;
 
 	for (i = 0; i < RES.rows; i++) {
@@ -572,7 +572,7 @@ template< class T, class ARG1, class ARG
 inline void modular_ring_matrix_algorithms< T, ARG1, ARG2, ARG3 >::
 subtract(MR< T > &RES, const MR< T > &M, const T &a, const T &mod) const
 {
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	T TMP;
 
 	for (i = 0; i < RES.rows; i++) {
@@ -589,7 +589,7 @@ template< class T, class ARG1, class ARG
 inline void modular_ring_matrix_algorithms< T, ARG1, ARG2, ARG3 >::
 subtract(MR< T > &RES, const T &a, const MR< T > &M, const T &mod) const
 {
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	T TMP;
 
 	for (i = 0; i < RES.rows; i++) {
@@ -610,7 +610,7 @@ template< class T, class ARG1, class ARG
 inline void modular_ring_matrix_algorithms< T, ARG1, ARG2, ARG3 >::
 multiply(MR< T > &RES, const MR< T > &A, const MR< T > &B, const T &mod) const
 {
-	register lidia_size_t j, i, z;
+	lidia_size_t j, i, z;
 	T TMP, TMP1;
 
 	for (j = 0; j < A.rows; j++) {
@@ -631,7 +631,7 @@ template< class T, class ARG1, class ARG
 inline void modular_ring_matrix_algorithms< T, ARG1, ARG2, ARG3 >::
 multiply(MR< T > &RES, const MR< T > &A, const T &k, const T &mod) const
 {
-	register lidia_size_t j, i;
+	lidia_size_t j, i;
 	T TMP;
 
 	for (j = 0; j < A.rows; j++) {
@@ -648,7 +648,7 @@ template< class T, class ARG1, class ARG
 inline void modular_ring_matrix_algorithms< T, ARG1, ARG2, ARG3 >::
 multiply(MR< T > &RES, const T &k, const MR< T > &A, const T &mod) const
 {
-	register lidia_size_t j, i;
+	lidia_size_t j, i;
 	T TMP;
 	for (j = 0; j < A.rows; j++) {
 		for (i = 0; i < A.columns; i++) {
@@ -664,7 +664,7 @@ template< class T, class ARG1, class ARG
 inline void modular_ring_matrix_algorithms< T, ARG1, ARG2, ARG3 >::
 compwise_multiply(MR< T > &RES, const MR< T > &A, const MR< T > &B, const T &mod) const
 {
-	register lidia_size_t j, i;
+	lidia_size_t j, i;
 	T TMP;
 
 	for (j = 0; j < RES.rows; j++) {
@@ -681,7 +681,7 @@ template< class T, class ARG1, class ARG
 void modular_ring_matrix_algorithms< T, ARG1, ARG2, ARG3 >::
 multiply_right(const MR< T > &RES, math_vector< T > &res, const math_vector< T > &v, const T &mod) const
 {
-	register lidia_size_t i, j, l = res.size();
+	lidia_size_t i, j, l = res.size();
 	T TMP, TMP1;
 
 	T *tmp1 = res.get_data_address(), *tmp2 = v.get_data_address();
@@ -726,7 +726,7 @@ template< class T, class ARG1, class ARG
 inline void modular_ring_matrix_algorithms< T, ARG1, ARG2, ARG3 >::
 multiply_right(const MR< T > &RES, T *&c, const T *v, const T &mod) const
 {
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	T TMP, TMP1;
 
 	if (c == v || c == NULL) {
@@ -751,7 +751,7 @@ template< class T, class ARG1, class ARG
 void modular_ring_matrix_algorithms< T, ARG1, ARG2, ARG3 >::
 multiply_left(const MR< T > &RES, math_vector< T > &res, const math_vector< T > &v, const T &mod) const
 {
-	register lidia_size_t i, j, l = res.size();
+	lidia_size_t i, j, l = res.size();
 	T TMP, TMP1;
 
 	T *tmp1 = res.get_data_address(), *tmp2 = v.get_data_address();
@@ -795,7 +795,7 @@ template< class T, class ARG1, class ARG
 inline void modular_ring_matrix_algorithms< T, ARG1, ARG2, ARG3 >::
 multiply_left(const MR< T > &RES, T *&c, const T *v, const T &mod) const
 {
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	T TMP, TMP1;
 
 	if (c == v || c == NULL) {
@@ -824,7 +824,7 @@ template< class T, class ARG1, class ARG
 inline void modular_ring_matrix_algorithms< T, ARG1, ARG2, ARG3 >::
 negate(MR< T > &RES, const MR< T > &B, const T &mod) const
 {
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 
 	T TMP;
 
@@ -850,7 +850,7 @@ template< class T, class ARG1, class ARG
 inline void modular_ring_matrix_algorithms< T, ARG1, ARG2, ARG3 >::
 trace(const MR< T > &RES, T &tr, const T &mod) const
 {
-	register lidia_size_t i;
+	lidia_size_t i;
 	tr = modul1.member(RES, 0, 0);
 	for (i = 1; i < RES.rows; i++)
 		LiDIA::add_mod(tr, tr, modul1.member(RES, i, i));
--- lidia-2.3.0+latte-patches-2014-10-04/src/base/include/LiDIA/matrix/sparse_base_matrix_kernel.cc.orig	2009-05-09 09:25:13.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/base/include/LiDIA/matrix/sparse_base_matrix_kernel.cc	2021-03-18 14:10:22.854939487 -0600
@@ -88,7 +88,7 @@ sparse_base_matrix_kernel< T >::construc
 		       "constructor(MR< T > &, lidia_size_t, lidia_size_t) ::"
 		       "Error in memory allocation (allocated)");
 
-	for (register lidia_size_t i = 0; i < r; i++) {
+	for (lidia_size_t i = 0; i < r; i++) {
 		A.value[i] = NULL;
 		A.value_counter[i] = 0;
 		A.allocated[i] = 0;
@@ -130,12 +130,12 @@ sparse_base_matrix_kernel< T >::construc
 		       "constructor(MR< T > &, lidia_size_t, lidia_size_t, const T **) ::"
 		       "Error in memory allocation (A.allocated)");
 
-	for (register lidia_size_t i = 0; i < r; i++) {
-		register lidia_size_t size = c;
-		for (register lidia_size_t j = 0; j < c; j++)
+	for (lidia_size_t i = 0; i < r; i++) {
+		lidia_size_t size = c;
+		for (lidia_size_t j = 0; j < c; j++)
 			if (B[i][j] == A.Zero)
 				size--;
-		register lidia_size_t p = 0;
+		lidia_size_t p = 0;
 		if (size) {
 			A.index[i] = new lidia_size_t[size];
 			memory_handler(A.index[i], DMESSAGE,
@@ -146,7 +146,7 @@ sparse_base_matrix_kernel< T >::construc
 				       "constructor(MR< T > &, lidia_size_t, lidia_size_t, const T **) ::"
 				       "Error in memory allocation (A.value[i])");
 			A.value_counter[i] = A.allocated[i] = size;
-			for (register lidia_size_t k = 0; k < c; k++)
+			for (lidia_size_t k = 0; k < c; k++)
 				if (B[i][k] != A.Zero) {
 					A.value[i][p] = B[i][k];
 					A.index[i][p] = k;
@@ -189,8 +189,8 @@ sparse_base_matrix_kernel< T >::construc
 		       "constructor((MR< T > &, const MR< T > &) ::"
 		       "Error in memory allocation (A.allocated)");
 
-	for (register lidia_size_t i = 0; i < A.rows; i++) {
-		register lidia_size_t size = B.allocated[i];
+	for (lidia_size_t i = 0; i < A.rows; i++) {
+		lidia_size_t size = B.allocated[i];
 		if (size) {
 			A.index[i] = new lidia_size_t[size];
 			memory_handler(A.index[i], DMESSAGE,
@@ -202,7 +202,7 @@ sparse_base_matrix_kernel< T >::construc
 				       "Error in memory allocation (A.value[i])");
 			A.value_counter[i] = B.value_counter[i];
 			A.allocated[i] = size;
-			for (register lidia_size_t p = 0; p < A.value_counter[i]; p++) {
+			for (lidia_size_t p = 0; p < A.value_counter[i]; p++) {
 				A.value[i][p] = B.value[i][p];
 				A.index[i][p] = B.index[i][p];
 			}
@@ -258,8 +258,8 @@ sparse_base_matrix_kernel< T >::sto_colu
 					    lidia_size_t j,
 					    lidia_size_t from) const
 {
-	register lidia_size_t p, f;
-	for (register lidia_size_t r = from; r < from + l; r++) { // for every row
+	lidia_size_t p, f;
+	for (lidia_size_t r = from; r < from + l; r++) { // for every row
 		for (p = A.value_counter[r] - 1; p >= 0; p--)
 			if (A.index[r][p] == j)
 				break;
@@ -284,7 +284,7 @@ sparse_base_matrix_kernel< T >::sto_colu
 					       "lidia_size_t, lidia_size_t, lidia_size_t) ::"
 					       "Error in memory allocation (tmp2)");
 
-				for (register lidia_size_t c = 0; c < A.allocated[r]; c++) {
+				for (lidia_size_t c = 0; c < A.allocated[r]; c++) {
 					tmp1[c] = A.value[r][c];
 					tmp2[c] = A.index[r][c];
 				}
@@ -312,7 +312,7 @@ sparse_base_matrix_kernel< T >::sto_colu
 			if (p == -1)         // if already 0 do nothing
 				continue;
 			else {
-				for (register lidia_size_t i = p + 1; i < A.value_counter[r]; i++) {
+				for (lidia_size_t i = p + 1; i < A.value_counter[r]; i++) {
 					// close the gap
 					A.value[r][i-1] = A.value[r][i];
 					A.index[r][i-1] = A.index[r][i];
@@ -331,7 +331,7 @@ sparse_base_matrix_kernel< T >::get_colu
 					    T *res,
 					    lidia_size_t i) const
 {
-	for (register lidia_size_t j = 0; j < A.rows; j++) {
+	for (lidia_size_t j = 0; j < A.rows; j++) {
 		lidia_size_t k;
 		for (k = 0; k< A.value_counter[j] && i > A.index[j][k]; k++);
 		if (k < A.value_counter[j] && i == A.index[j][k])
@@ -533,7 +533,7 @@ sparse_base_matrix_kernel< T >::remove_r
 	lidia_size_t *allocated = new lidia_size_t[A.rows];
 	lidia_size_t *value_counter = new lidia_size_t[A.rows];
 
-	register lidia_size_t i, l = 0, l1 = 1;
+	lidia_size_t i, l = 0, l1 = 1;
 	for (i = 0; i < len; i++) {
 		if (l1 > rem[0] || rem[l1] != i) {
 			new_value[l] = A.value[i];
@@ -667,8 +667,8 @@ sparse_base_matrix_kernel< T >::assign (
 		       "constructor((MR< T > &, const MR< T > &) ::"
 		       "Error in memory allocation (A.allocated)");
 
-	for (register lidia_size_t i = 0; i < A.rows; i++) {
-		register lidia_size_t size = B.allocated[i];
+	for (lidia_size_t i = 0; i < A.rows; i++) {
+		lidia_size_t size = B.allocated[i];
 		if (size) {
 			A.index[i] = new lidia_size_t[size];
 			memory_handler(A.index[i], DMESSAGE,
@@ -680,7 +680,7 @@ sparse_base_matrix_kernel< T >::assign (
 				       "Error in memory allocation (A.value[i])");
 			A.value_counter[i] = B.value_counter[i];
 			A.allocated[i] = size;
-			for (register lidia_size_t p = 0; p < A.value_counter[i]; p++) {
+			for (lidia_size_t p = 0; p < A.value_counter[i]; p++) {
 				A.value[i][p] = B.value[i][p];
 				A.index[i][p] = B.index[i][p];
 			}
@@ -700,7 +700,7 @@ sparse_base_matrix_kernel< T >::write_to
 						 std::ostream &out) const
 {
 	if (A.bitfield.get_orientation() == matrix_flags::row_oriented) {
-		register lidia_size_t i, j, l;
+		lidia_size_t i, j, l;
 		for (i = 0; i < A.rows; i++) {
 			l = 0;
 			out << std::endl << "(";
@@ -716,7 +716,7 @@ sparse_base_matrix_kernel< T >::write_to
 		out << std::endl << std::flush;
 	}
 	else {
-		register lidia_size_t i, j;
+		lidia_size_t i, j;
 		lidia_size_t *l = new lidia_size_t[A.columns];
 		for (i = 0; i < A.columns; i++)
 			l[i] = 0;
@@ -747,9 +747,9 @@ sparse_base_matrix_kernel< T >::write_to
 	out << A.rows << std::endl;
 	out << A.columns << std::endl;
 
-	for (register lidia_size_t i = 0; i < A.rows; i++) {
+	for (lidia_size_t i = 0; i < A.rows; i++) {
 		out << A.value_counter[i] << " ";
-		for (register lidia_size_t j = 0; j < A.value_counter[i]; j++)
+		for (lidia_size_t j = 0; j < A.value_counter[i]; j++)
 			out << A.index[i][j] << " " << A.value[i][j] << " ";
 		out << std::endl;
 	}
@@ -827,7 +827,7 @@ sparse_base_matrix_kernel< T >::read_fro
 		       "Error in memory allocation (allocated)");
 
 	lidia_size_t size;
-	for (register lidia_size_t i = 0; i < A.rows; i++) {
+	for (lidia_size_t i = 0; i < A.rows; i++) {
 		in >> std::ws >> size;
 		if(size < 0) {
 		    in.setstate(std::ios::failbit);
@@ -847,7 +847,7 @@ sparse_base_matrix_kernel< T >::read_fro
 			       "lidia_size_t *&, lidia_size_t *&, lidia_size_t, lidia_size_t, const T **) ::"
 			       "Error in memory allocation (A.value[i])");
 
-		for (register lidia_size_t j = 0; j < size; j++) {
+		for (lidia_size_t j = 0; j < size; j++) {
 			in >> std::ws >> A.index[i][j]
 			   >> std::ws >> A.value[i][j];
 		}
@@ -867,7 +867,7 @@ sparse_base_matrix_kernel< T >::write_to
 						      std::ostream &out) const
 {
 
-	register lidia_size_t i, j, l = A.columns - 1, k = A.rows - 1, l1;
+	lidia_size_t i, j, l = A.columns - 1, k = A.rows - 1, l1;
 
 	out << "{";
 	for (i = 0; i < A.rows; i++) {
@@ -932,8 +932,8 @@ sparse_base_matrix_kernel< T >::read_fro
 	if (A.columns != local_columns)
 		set_no_of_columns(A, local_columns);
 
-	for (register lidia_size_t i = 0; i < A.rows; i++) {
-		for (register lidia_size_t j = 0; j < A.columns; j++) {
+	for (lidia_size_t i = 0; i < A.rows; i++) {
+		for (lidia_size_t j = 0; j < A.columns; j++) {
 			sto(A, i, j, buffer[len]);
 			len++;
 		}
@@ -951,7 +951,7 @@ inline void
 sparse_base_matrix_kernel< T >::write_to_maple (const MR< T > &A,
 						std::ostream &out) const
 {
-	register lidia_size_t i, j, l;
+	lidia_size_t i, j, l;
 
 	out << "array(1 .. " << A.rows << ", 1 .. " << A.columns << ", [";
 
@@ -989,7 +989,7 @@ sparse_base_matrix_kernel< T >::read_fro
 				    "read_from_maple(std::istream &dz)",
 				    DMESSAGE, EMESSAGE[5]);
 
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	lidia_size_t startr, startc, endr, endc, x, y;
 	T TMP;
 
@@ -1033,7 +1033,7 @@ inline void
 sparse_base_matrix_kernel< T >::write_to_gp (const MR< T > &A,
 					     std::ostream &out) const
 {
-	register lidia_size_t i, j, l = A.columns - 1, k = A.rows - 1, l1;
+	lidia_size_t i, j, l = A.columns - 1, k = A.rows - 1, l1;
 
 	out << "[";
 	for (i = 0; i < A.rows; i++) {
@@ -1094,8 +1094,8 @@ sparse_base_matrix_kernel< T >::read_fro
 	if (A.columns != local_columns)
 		set_no_of_columns(A, local_columns);
 
-	for (register lidia_size_t i = 0; i < A.rows; i++) {
-		for (register lidia_size_t j = 0; j < A.columns; j++) {
+	for (lidia_size_t i = 0; i < A.rows; i++) {
+		for (lidia_size_t j = 0; j < A.columns; j++) {
 			sto(A, i, j, buffer[len]);
 			len++;
 		}
@@ -1113,7 +1113,7 @@ inline void
 sparse_base_matrix_kernel< T >::write_to_kash (const MR< T > &A,
 					       std::ostream &out) const
 {
-	register lidia_size_t i, j, l = A.columns - 1, k = A.rows - 1, l1;
+	lidia_size_t i, j, l = A.columns - 1, k = A.rows - 1, l1;
 
 	out << "LIDIA: = Mat(Z, [";
 	for (i = 0; i < A.rows; i++) {
@@ -1183,8 +1183,8 @@ sparse_base_matrix_kernel< T >::read_fro
 	if (A.columns != local_columns)
 		set_no_of_columns(A, local_columns);
 
-	for (register lidia_size_t i = 0; i < A.rows; i++) {
-		for (register lidia_size_t j = 0; j < A.columns; j++) {
+	for (lidia_size_t i = 0; i < A.rows; i++) {
+		for (lidia_size_t j = 0; j < A.columns; j++) {
 			sto(A, i, j, buffer[len]);
 			len++;
 		}
@@ -1322,7 +1322,7 @@ sparse_base_matrix_kernel< T >::set_no_o
 						   lidia_size_t c) const
 {
 	if (c < A.columns)
-		for (register lidia_size_t i = 0; i < A.rows; i++)
+		for (lidia_size_t i = 0; i < A.rows; i++)
 			while (A.value_counter[i] > 0 && A.index[i][A.value_counter[i] - 1] >= c)
 				A.value_counter[i]--;
 	A.columns = c;
@@ -1342,7 +1342,7 @@ sparse_base_matrix_kernel< T >::sto (MR<
 				     const T &e) const
 {
 	T wert = e;
-	register lidia_size_t p, i;
+	lidia_size_t p, i;
 	if (e != A.Zero) {
 		for (p = A.value_counter[x] - 1; p >= 0 && A.index[x][p] >= y; p--) {
 			if (A.index[x][p] == y) {
@@ -1360,13 +1360,13 @@ sparse_base_matrix_kernel< T >::sto (MR<
 			}
 
 			lidia_size_t len = ((A.allocated[x]*DELTA < A.columns) ? A.allocated[x]*DELTA : A.columns);
-			register T *tmp1 = new T[len];
+			T *tmp1 = new T[len];
 			memory_handler(tmp1, DMESSAGE,
 				       "sto(MR< T > &, lidia_size_t, "
 				       "lidia_size_t, const T &) :: "
 				       "Error in memory allocation (tmp1)");
 
-			register lidia_size_t *tmp2 = new lidia_size_t[len];
+			lidia_size_t *tmp2 = new lidia_size_t[len];
 			memory_handler(tmp2, DMESSAGE,
 				       "sto(MR< T > &, lidia_size_t, "
 				       "lidia_size_t, const T &) :: "
@@ -1389,8 +1389,8 @@ sparse_base_matrix_kernel< T >::sto (MR<
 
 		}
 
-		register T *tmp1 = A.value[x];
-		register lidia_size_t *tmp2 = A.index[x];
+		T *tmp1 = A.value[x];
+		lidia_size_t *tmp2 = A.index[x];
 
 		for (i = A.value_counter[x]; i - 1 > p; i--) {
 			LiDIA::swap(tmp1[i], tmp1[i - 1]);
@@ -1422,7 +1422,7 @@ inline T & sparse_base_matrix_kernel< T
 						   lidia_size_t x,
 						   lidia_size_t y) const
 {
-	register lidia_size_t p;
+	lidia_size_t p;
 	for (p = A.value_counter[x]-1; p >= 0; p--)
 		if (A.index[x][p] == y)
 			return A.value[x][p];
@@ -1439,7 +1439,7 @@ template< class T >
 inline bool sparse_base_matrix_kernel< T >::is_column_zero (const MR< T > &RES,
 							    lidia_size_t c) const
 {
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 
 	for (i = 0; i < RES.rows; i++) {
 		for (j = 0; j < RES.value_counter[i] && RES.index[i][j] < c; j++);
@@ -1455,8 +1455,8 @@ template< class T >
 inline bool sparse_base_matrix_kernel< T >::is_row_zero (const MR< T > &RES,
 							 lidia_size_t r) const
 {
-	register lidia_size_t i;
-	register T *tmp = RES.value[r];
+	lidia_size_t i;
+	T *tmp = RES.value[r];
 
 	for (i = 0; i < RES.value_counter[r]; i++) {
 		if (tmp[i] != RES.Zero)
@@ -1470,8 +1470,8 @@ inline bool sparse_base_matrix_kernel< T
 template< class T >
 inline bool sparse_base_matrix_kernel< T >::is_matrix_zero (const MR< T > &RES) const
 {
-	register lidia_size_t i, j;
-	register T *tmp;
+	lidia_size_t i, j;
+	T *tmp;
 
 	for (i = 0; i < RES.rows; i++) {
 		tmp = RES.value[i];
@@ -1530,14 +1530,14 @@ sparse_base_matrix_kernel< T >::change_o
 			       "change_orientation(MR< T > &, unsigned long) ::"
 			       "Error in memory allocation (allocated)");
 
-		register lidia_size_t j; // MM for HP UX 10.20 CC
+		lidia_size_t j; // MM for HP UX 10.20 CC
 		for (j = 0; j < index1; j++) {
 			A.allocated[j] = 0;
 			A.value_counter[j] = 0;
 		}
 
 		for (j = index2 - 1; j >= 0; j--) {
-			for (register lidia_size_t i = 0; i < oldvalue_counter[j]; i++)
+			for (lidia_size_t i = 0; i < oldvalue_counter[j]; i++)
 				A.value_counter[oldindex[j][i]]++;
 		}
 
@@ -1558,9 +1558,9 @@ sparse_base_matrix_kernel< T >::change_o
 				A.index[j] = NULL;
 			}
 		}
-		register lidia_size_t l;
+		lidia_size_t l;
 		for (j = 0; j < index2; j++) {
-			for (register lidia_size_t i = 0; i < oldvalue_counter[j]; i++) {
+			for (lidia_size_t i = 0; i < oldvalue_counter[j]; i++) {
 				l = oldindex[j][i];
 				A.value[l][A.allocated[l]] = oldvalue[j][i];
 				A.index[l][A.allocated[l]] = j;
--- lidia-2.3.0+latte-patches-2014-10-04/src/base/include/LiDIA/matrix/sparse_field_matrix_kernel.cc.orig	2009-05-09 09:25:13.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/base/include/LiDIA/matrix/sparse_field_matrix_kernel.cc	2021-03-18 14:10:42.166902011 -0600
@@ -70,7 +70,7 @@ sparse_field_matrix_kernel< T >::divide
 	debug_handler_l(DM_MM, "in member - function "
 			"divide(const MR< T > &, const T &)", DV_MM + 2);
 
-	register lidia_size_t j, i;
+	lidia_size_t j, i;
 	T *REStmp, *Atmp;
 
 	for (j = 0; j < A.rows; j++) {
@@ -92,7 +92,7 @@ sparse_field_matrix_kernel< T >::compwis
 	debug_handler_l(DM_MM, "in member - function "
 			"compwise_divide(const MR< T > &, const MR< T > &)", DV_MM + 3);
 
-	register lidia_size_t j, i;
+	lidia_size_t j, i;
 	T *REStmp, *Atmp, *Btmp;
 
 	for (j = 0; j < RES.rows; j++) {
--- lidia-2.3.0+latte-patches-2014-10-04/src/base/include/LiDIA/matrix/sparse_ring_matrix_kernel.cc.orig	2009-05-09 09:25:13.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/base/include/LiDIA/matrix/sparse_ring_matrix_kernel.cc	2021-03-18 14:10:58.886869567 -0600
@@ -69,7 +69,7 @@ template< class T >
 void
 sparse_ring_matrix_kernel< T >::add (MR< T > &RES, const MR< T > &M, const MR< T > &N) const
 {
-	register lidia_size_t i, j, l1, l2, l3, l;
+	lidia_size_t i, j, l1, l2, l3, l;
 
 	T TMP;
 	T *Mtmp, *Ntmp, *REStmp;
@@ -150,7 +150,7 @@ template< class T >
 void
 sparse_ring_matrix_kernel< T >::add (MR< T > &RES, const MR< T > &M, const T &a) const
 {
-	register lidia_size_t i, j, l1, l3, l;
+	lidia_size_t i, j, l1, l3, l;
 
 	T TMP;
 	T *Mtmp, *REStmp;
@@ -221,7 +221,7 @@ void
 sparse_ring_matrix_kernel< T >::add (MR< T > &RES, const T &a, const MR< T > &M) const
 {
 
-	register lidia_size_t i, j, l1, l3, l;
+	lidia_size_t i, j, l1, l3, l;
 
 	T TMP;
 	T *Mtmp, *REStmp;
@@ -295,7 +295,7 @@ template< class T >
 void
 sparse_ring_matrix_kernel< T >::subtract (MR< T > &RES, const MR< T > &M, const MR< T > &N) const
 {
-	register lidia_size_t i, j, l1, l2, l3, l;
+	lidia_size_t i, j, l1, l2, l3, l;
 
 	T TMP;
 	T *Mtmp, *Ntmp, *REStmp;
@@ -376,7 +376,7 @@ template< class T >
 void
 sparse_ring_matrix_kernel< T >::subtract (MR< T > &RES, const MR< T > &M, const T &a) const
 {
-	register lidia_size_t i, j, l1, l3, l;
+	lidia_size_t i, j, l1, l3, l;
 
 	T TMP;
 	T *Mtmp, *REStmp;
@@ -447,7 +447,7 @@ template< class T >
 void
 sparse_ring_matrix_kernel< T >::subtract (MR< T > &RES, const T &a, const MR< T > &M) const
 {
-	register lidia_size_t i, j, l1, l3, l;
+	lidia_size_t i, j, l1, l3, l;
 
 	T TMP;
 	T *Mtmp, *REStmp;
--- lidia-2.3.0+latte-patches-2014-10-04/src/base/include/LiDIA/modular_operations.inl.orig	2014-01-05 08:59:38.000000000 -0700
+++ lidia-2.3.0+latte-patches-2014-10-04/src/base/include/LiDIA/modular_operations.inl	2021-03-18 14:11:27.886813894 -0600
@@ -136,7 +136,7 @@ best_remainder(long & a, const bigint &
 	if (mod == 1 || b.is_zero())
 		a = 0;
 	else {
-		register long mod2 = mod >> 1;
+		long mod2 = mod >> 1;
 		if (b > bigint(-mod2) && b <= bigint(mod2))
 			b.longify(a);
 		else
@@ -178,7 +178,7 @@ add_mod(long & d, long a, long b, long m
 	if (mod == 1)
 		d = 0;
 	else {
-		register long mod2 = mod/2;
+		long mod2 = mod/2;
 		double c = static_cast<double>(a) + static_cast<double>(b);
 		if (c <= static_cast<double>(-mod2))
 			c += static_cast<double>(mod);
@@ -218,7 +218,7 @@ sub_mod(long & d, long a, long b, long m
 	if (mod == 1)
 		d = 0;
 	else {
-		register long mod2 = mod/2;
+		long mod2 = mod/2;
 		double c = static_cast<double>(a) - static_cast<double>(b);
 		if (c <= static_cast<double>(-mod2))
 			c += static_cast<double>(mod);
@@ -253,10 +253,10 @@ mult_mod(long & d, long a, long b, long
 	if (mod == 1)
 		d = 0;
 	else {
-		register long mod2 = mod/2;
+		long mod2 = mod/2;
 		double ab = static_cast<double>(a) * static_cast<double>(b);
-		register long q = static_cast<long>(ab / static_cast<double>(mod));
-		register long res = static_cast<long>(ab - (static_cast<double>(q) * static_cast<double>(mod)));
+		long q = static_cast<long>(ab / static_cast<double>(mod));
+		long res = static_cast<long>(ab - (static_cast<double>(q) * static_cast<double>(mod)));
 		if (res > mod2)
 			res -= mod;
 		if (res <= -mod2)
@@ -288,7 +288,7 @@ div_mod(long & c, long a, long b, long m
 	debug_handler_l("modular_operations", "in inline div_mod()", LDBL_MATRIX);
 
 	long u, v;
-	register long d = xgcd(u, v, b, mod);
+	long d = xgcd(u, v, b, mod);
 	if (d != 1)
 		lidia_error_handler("modular_operations", "div_mod - Version long :: "
 				    "Inverse undefined");
@@ -324,7 +324,7 @@ inv_mod(long & e, long a, long mod)
 	debug_handler_l("modular_operations", "in inline inv_mod()", LDBL_MATRIX);
 
 	long t, mod2 = mod/2;
-	register long d = xgcd(e, t, a, mod);
+	long d = xgcd(e, t, a, mod);
 	if (d != 1)
 		lidia_error_handler("modular_operations", "inv_mod - Version long :: "
 				    "Inverse undefined");
--- lidia-2.3.0+latte-patches-2014-10-04/src/base/include/LiDIA/precondition_error.h.orig	2009-05-09 09:25:17.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/base/include/LiDIA/precondition_error.h	2021-03-18 14:53:12.116102408 -0600
@@ -43,8 +43,8 @@ namespace LiDIA {
 		      const std::string& what_msg);
     precondition_error(const precondition_error& pce);
     precondition_error& operator=(const precondition_error& pce);
-    virtual ~precondition_error() throw();
-    virtual const char* what() const throw();
+    virtual ~precondition_error() noexcept;
+    virtual const char* what() const noexcept;
     
     virtual const std::string& offendingClass() const;
     
--- lidia-2.3.0+latte-patches-2014-10-04/src/base/include/LiDIA/sort_vector.cc.orig	2013-08-09 18:51:16.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/base/include/LiDIA/sort_vector.cc	2021-03-18 14:11:55.406761215 -0600
@@ -142,7 +142,7 @@ sort(int (*cmp)(const T & a, const T & b
 
 	r = (r == -1) ? this->length - 1 : r;
 
-	register lidia_size_t gap, i, j, len;
+	lidia_size_t gap, i, j, len;
 
 	if (this->length == 0 && l == 0 && r == -1)  // empty vector and default - cut
 		return;
@@ -246,7 +246,7 @@ sort_down(lidia_size_t l, lidia_size_t r
 	debug_handler_l(DM_SV, "in member - function "
 			"sort_down(lidia_size_t, lidia_size_t)", DV_SV + 2);
 
-	register lidia_size_t gap, i, j;
+	lidia_size_t gap, i, j;
 	T *ptr = & this->value[l];
 	r = r - l + 1; // length of selected cut
 
@@ -293,7 +293,7 @@ bin_search(const T & x, lidia_size_t & p
 			"bin_search(const T &, lidia_size_t, int (*cmp)(const T &, const T &), "
 			"lidia_size_t, lidia_size_t)", DV_SV + 2);
 
-	register int c;
+	int c;
 
 	if (r == -1) r = this->length-1;
 
@@ -340,7 +340,7 @@ bin_search(const T & x, lidia_size_t & p
 	debug_handler_l(DM_SV, "in member - function "
 			"bin_search(const T &, lidia_size_t, unsigned long, lidia_size_t, lidia_size_t)", DV_SV + 2);
 
-	register bool rc = false;
+	bool rc = false;
 
 	if (sort_direction == vector_flags::sort_vector_def) sort_direction = this->sort_dir;
 	if (r == -1) r = this->length - 1;
@@ -493,8 +493,8 @@ insert(const T & x, unsigned long sort_d
 	debug_handler_l(DM_SV, "in member - function "
 			"insert(const T &, unsigned long, lidia_size_t, lidia_size_t)", DV_SV + 3);
 
-	register lidia_size_t i;
-	register bool found;
+	lidia_size_t i;
+	bool found;
 	lidia_size_t pos;
 
 	r = (r == -1) ? this->length - 1 : r;
@@ -535,8 +535,8 @@ remove(const T & x, int (*cmp)(const T &
 	debug_handler_l(DM_SV, "in member - function "
 			"remove (T, cmp, lidia_size_t, lidia_size_t)", DV_SV + 4);
 
-	register lidia_size_t i;
-	register bool found;
+	lidia_size_t i;
+	bool found;
 	lidia_size_t pos;
 
 	r = (r == -1) ? this->length - 1 : r;
@@ -571,8 +571,8 @@ remove(const T &x, unsigned long sort_di
 	debug_handler_l(DM_SV, "in member - function "
 			"remove(const T &, unsigned long, lidia_size_t, lidia_size_t)", DV_SV + 4);
 
-	register lidia_size_t i;
-	register bool found;
+	lidia_size_t i;
+	bool found;
 	lidia_size_t pos;
 
 	r = (r == -1) ? this->length - 1 : r;
@@ -610,7 +610,7 @@ lex_compare(sort_vector< T > &w) const
 	debug_handler_l(DM_SV, "in member - function "
 			"lex_compare(sort_vector< T > &)", DV_SV + 5);
 
-	register lidia_size_t i, minl = (this->length < w.length) ? this->length : w.length;
+	lidia_size_t i, minl = (this->length < w.length) ? this->length : w.length;
 
 	for (i = 0; i< minl && comparator < T >::equal(this->value[i], w.value[i]); i++);
 	if (i < minl)
@@ -640,7 +640,7 @@ delete_copies()
 	debug_handler_l(DM_SV, "in member - function "
 			"delete_copies()", DV_SV + 6);
 
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	int ident;
 
 	for (i = 0, j = 0; i < this->length; j++) {
--- lidia-2.3.0+latte-patches-2014-10-04/src/base/include/LiDIA/sparse_base_matrix.cc.orig	2009-05-09 09:25:17.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/base/include/LiDIA/sparse_base_matrix.cc	2021-03-18 14:13:35.598569393 -0600
@@ -606,22 +606,22 @@ sparse_base_matrix< T >::get_data () con
 
 	debug_handler_l(DMESSAGE, "get_value()", DVALUE + 2);
 
-	register T **copy = NULL;
+	T **copy = NULL;
 	if (this->rows != 0) {
 		copy = new T *[this->rows];
 		memory_handler(copy, DM_BM, "get_value :: "
 			       "Error in memory allocation (copy)");
 	}
 
-	register T *tmp, *tmp1;
-	for (register lidia_size_t i = 0; i < this->rows; i++) {
+	T *tmp, *tmp1;
+	for (lidia_size_t i = 0; i < this->rows; i++) {
 		tmp1 = this->value[i];
 		tmp = new T[this->columns];
 		memory_handler(tmp, DM_BM, "get_value :: "
 			       "Error in memory allocation (tmp)");
 
-		register lidia_size_t l = 0;
-		for (register lidia_size_t j = 0; l < this->value_counter[i] && j < this->columns; j++) {
+		lidia_size_t l = 0;
+		for (lidia_size_t j = 0; l < this->value_counter[i] && j < this->columns; j++) {
 			if (j == this->index[i][l]) {
 				tmp[j] = tmp1[l];
 				l++;
@@ -667,8 +667,8 @@ sparse_base_matrix< T >::set_data (const
 	if (c != this->columns)
 		this->S_base_modul.set_no_of_columns(*this, c);
 
-	for (register lidia_size_t len1 = this->rows - 1; len1 >= 0; len1--)
-		for (register lidia_size_t len = this->columns - 1; len >= 0; len--)
+	for (lidia_size_t len1 = this->rows - 1; len1 >= 0; len1--)
+		for (lidia_size_t len = this->columns - 1; len >= 0; len--)
 			this->S_base_modul.sto(*this, len1, len, v[len1][len]);
 }
 
@@ -1648,7 +1648,7 @@ sparse_base_matrix< T >::swap (sparse_ba
 	LiDIA::swap(this->sparse_columns, B.sparse_columns);
 
 	// swap allocated
-	register lidia_size_t *tmp2 = this->allocated;
+	lidia_size_t *tmp2 = this->allocated;
 	this->allocated = B.allocated;
 	B.allocated = tmp2;
 
@@ -1658,12 +1658,12 @@ sparse_base_matrix< T >::swap (sparse_ba
 	B.value_counter = tmp2;
 
 	// swap values
-	register T **tmp = this->value;
+	T **tmp = this->value;
 	this->value = B.value;
 	B.value = tmp;
 
 	// swap values
-	register lidia_size_t **tmp1 = this->index;
+	lidia_size_t **tmp1 = this->index;
 	this->index = B.index;
 	B.index = tmp1;
 
@@ -2263,7 +2263,7 @@ sparse_base_matrix< T >::status_report (
 		  << "\n\t sparse_rows = " << this->sparse_rows
 		  << "\n\t sparse_columns = " << this->sparse_columns << std::endl;
 
-	for (register lidia_size_t i = 0; i < this->rows; i++) {
+	for (lidia_size_t i = 0; i < this->rows; i++) {
 		std::cout << "row " << i << ": allocated = " << this->allocated[i]
 			  << " value_counter = " << this->value_counter[i] << std::endl;
 	}
--- lidia-2.3.0+latte-patches-2014-10-04/src/base/include/LiDIA/sparse_base_matrix.h.orig	2009-05-09 09:25:17.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/base/include/LiDIA/sparse_base_matrix.h	2021-03-18 14:13:48.766544185 -0600
@@ -239,7 +239,7 @@ public:
 
 	T * get_column(lidia_size_t i) const
 	{
-		register T *RES = new T[this->rows];
+		T *RES = new T[this->rows];
 		memory_handler(RES, DMESSAGE, "get_column(lidia_size_t) :: "
 			       "Error in memory allocation (RES)");
 		get_column(RES, i);
@@ -275,7 +275,7 @@ public:
 
 	T *get_row(lidia_size_t i) const
 	{
-		register T *RES = new T[this->columns];
+		T *RES = new T[this->columns];
 		memory_handler(RES, DMESSAGE, "get_column(lidia_size_t) :: "
 			       "Error in memory allocation (RES)");
 		get_row(RES, i);
--- lidia-2.3.0+latte-patches-2014-10-04/src/base/matrix/base_matrix_appl.cc.orig	2009-05-09 09:25:26.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/base/matrix/base_matrix_appl.cc	2021-03-18 14:14:29.454466288 -0600
@@ -58,7 +58,7 @@ int main_LiDIA(int argc, char** argv)
 	std::ifstream in(IN_NAME);
 	std::ofstream dz(OUT_NAME);
 
-	register int i, j;
+	int i, j;
 
 	// pointer
 	TYPE *pointer_1 = NULL;
--- lidia-2.3.0+latte-patches-2014-10-04/src/base/matrix/base_matrix_bigmod.cc.orig	2009-05-09 09:25:26.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/base/matrix/base_matrix_bigmod.cc	2021-03-18 14:14:44.344437780 -0600
@@ -6842,7 +6842,7 @@ change_representation(unsigned long art)
 					bigint_value.allocated[i] = bigint_value.columns;
 
 					// set value_counter
-					register lidia_size_t size = bigint_value.columns;
+					lidia_size_t size = bigint_value.columns;
 					for (j = 0; j < bigint_value.columns; j++)
 						if (bigint_value.value[i][j] == bigint_value.Zero)
 							size--;
@@ -6856,7 +6856,7 @@ change_representation(unsigned long art)
 						       "change_representation(unsigned long) :: "
 						       "Error in memory allocation (index[i])");
 
-					register lidia_size_t p = 0;
+					lidia_size_t p = 0;
 					for (k = 0; k < bigint_value.columns; k++)
 						if (bigint_value.value[i][k] != bigint_value.Zero) {
 							LiDIA::swap(bigint_value.value[i][p],
@@ -6945,7 +6945,7 @@ change_representation(unsigned long art)
 					long_value.allocated[i] = long_value.columns;
 
 					// set value_counter
-					register lidia_size_t size = long_value.columns;
+					lidia_size_t size = long_value.columns;
 					for (j = 0; j < long_value.columns; j++)
 						if (long_value.value[i][j] == long_value.Zero)
 							size--;
@@ -6959,7 +6959,7 @@ change_representation(unsigned long art)
 						       "change_representation(unsigned long) :: "
 						       "Error in memory allocation (index[i])");
 
-					register lidia_size_t p = 0;
+					lidia_size_t p = 0;
 					for (k = 0; k < long_value.columns; k++)
 						if (long_value.value[i][k] != long_value.Zero) {
 							LiDIA::swap(long_value.value[i][p],
--- lidia-2.3.0+latte-patches-2014-10-04/src/base/polynomial/bigint_polynomial.cc.orig	2009-05-09 09:25:24.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/base/polynomial/bigint_polynomial.cc	2021-03-18 14:15:00.782406310 -0600
@@ -214,7 +214,7 @@ void divide(polynomial< bigint > & c,
 	c.set_degree(deg_a);
 	bigint r, *cp = c.coeff;
 
-	for (register lidia_size_t i = deg_a + 1; i; i--, ap++, cp++) {
+	for (lidia_size_t i = deg_a + 1; i; i--, ap++, cp++) {
 		div_rem ((*cp), r, (*ap), b);
 		if (!(r.is_zero()))
 			lidia_error_handler("polynomial< bigint >",
@@ -338,8 +338,8 @@ void remainder(polynomial< bigint > & c,
 	const bigint *ap;
 	bigint *cp;
 	bigint r;
-	register lidia_size_t deg_a = a.degree();
-	register lidia_size_t i;
+	lidia_size_t deg_a = a.degree();
+	lidia_size_t i;
 
 	c.set_degree(deg_a);
 
--- lidia-2.3.0+latte-patches-2014-10-04/src/base/simple_classes/bigint/fermat.cc.orig	2009-05-09 09:25:37.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/base/simple_classes/bigint/fermat.cc	2021-03-18 14:15:21.774366123 -0600
@@ -33,7 +33,7 @@ bool
 fermat(const bigint & n)
 {
 	bigint tmp_a, tmp_n, res;
-	register int a = 2;
+	int a = 2;
 
 	if (n < 2)
 		return 0;
--- lidia-2.3.0+latte-patches-2014-10-04/src/base/simple_classes/factorization/ecm.cc.orig	2009-05-09 09:25:38.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/base/simple_classes/factorization/ecm.cc	2021-03-18 14:15:39.342332486 -0600
@@ -177,7 +177,7 @@ void mecfind(ec_curve & me, ec_point_M &
 
 void cont(ec_point_W & wp, bigint & factor, unsigned long B, unsigned long D, ecm_primes & prim)
 {
-	register long w, u, v, count;
+	long w, u, v, count;
 
 	unsigned long p;
 
--- lidia-2.3.0+latte-patches-2014-10-04/src/base/simple_classes/factorization/mpqs.cc.orig	2018-10-09 14:38:30.894996718 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/base/simple_classes/factorization/mpqs.cc	2021-03-18 15:29:36.218230391 -0600
@@ -647,12 +647,12 @@ qs_sieve_interval (int *FB, SIEBTYP * LO
 		   int *START2, SIEBTYP * sieb, SIEBTYP * ende,
 		   unsigned int M, int *CANDIDATE, unsigned int smallstart)
 {
-  register int p, l, *fbp, *lsieb = (int *) sieb; // FIXME: SIEBTYP and int are incompatible types
-  register SIEBTYP logp;
-  register SIEBTYP *begin;
+  int p, l, *fbp, *lsieb = (int *) sieb; // FIXME: SIEBTYP and int are incompatible types
+  SIEBTYP logp;
+  SIEBTYP *begin;
   
-  register int x, counter = 0, M_2 = M << 1;
-  register int oldstart1;
+  int x, counter = 0, M_2 = M << 1;
+  int oldstart1;
   
   memset (sieb, 0, (M_2) * sizeof (SIEBTYP));
   
@@ -734,8 +734,8 @@ compute_multiplier (const bigint & N, in
   int cand[5] = {1, 3, 5, 7, 11};
   
   bigint kN;
-  register unsigned long plauf;
-  register int p, j, i, k = 1, nmod4;
+  unsigned long plauf;
+  int p, j, i, k = 1, nmod4;
   double wert, bestwert = 1, plus;
   
   nmod4 = static_cast < int >(N.least_significant_digit ()) & 0x3;
@@ -795,8 +795,8 @@ int rational_factorization::
 create_FB (unsigned int size, const bigint & kN, int **FB,
 	   ecm_primes & prim)
 {
-  register unsigned int osize, p;
-  register int *fbb;
+  unsigned int osize, p;
+  int *fbb;
   
   if (!(*FB = new int[size + 3])) 
     lidia_error_handler_n ("rational_factorization",
@@ -865,7 +865,7 @@ compute_coeff (bigint & A, bigint & B, c
 	       int start_fb, int *a_inv, bigint & A4_inverse,
 	       unsigned int &bin_index)
 {
-  register int p, size_FB;
+  int p, size_FB;
   int SIEBS, tmp, tmp1, tmp2;
   lidia_size_t j, nu_2, i;
   bigint reserve, TMP;
@@ -1102,7 +1102,7 @@ compute_coeff (bigint & A, bigint & B, c
 
 inline char *insert_at (char *p, unsigned long n)
 {
-  register int c, i, j, e;
+  int c, i, j, e;
   
   i = 0;
   do {
@@ -1393,7 +1393,7 @@ qs_build_factors (const bigint & N,
   preprocess pre;
   postprocess post;
 
-  std::auto_ptr<index_list> correction_list = pre.process(solve_matrix);
+  std::unique_ptr<index_list> correction_list = pre.process(solve_matrix);
   
   lanczos lan(solve_matrix);
   
@@ -1409,7 +1409,7 @@ qs_build_factors (const bigint & N,
      } 
   while(lan.get_result_rank() <= 0);
   
-  std::auto_ptr<lanczos_vector_block> solution = post.process(lan.get_result(),
+  std::unique_ptr<lanczos_vector_block> solution = post.process(lan.get_result(),
                                                               *correction_list);
 
   lanczos_vector_block::result_vector_type lanczos_result = solution->result();
--- lidia-2.3.0+latte-patches-2014-10-04/src/base/simple_classes/lanczos/process.cc.orig	2018-10-09 14:50:12.654688784 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/base/simple_classes/lanczos/process.cc	2021-03-18 15:28:47.761263059 -0600
@@ -32,7 +32,7 @@ namespace LiDIA {
 
 
 
-std::auto_ptr<index_list>
+std::unique_ptr<index_list>
 preprocess::process (lanczos_sparse_matrix& matrix) const
 {
 	size_type correction_list_size;
@@ -75,7 +75,7 @@ preprocess::process (lanczos_sparse_matr
 	zero_rows = new index_list(count);
 	if (!zero_rows) {
 		printf("Error: Not enough Memory\n");
-		return std::auto_ptr<index_list>();
+		return std::unique_ptr<index_list>();
 	}
 #ifdef DEBUG
 	printf("Killing Zero rows: %ld\n", count);
@@ -113,7 +113,7 @@ preprocess::process (lanczos_sparse_matr
 	printf("Number of zero columns: %ld\n", correction_list_size);
 #endif
 
-	std::auto_ptr<index_list> correction_list;
+	std::unique_ptr<index_list> correction_list;
 	if (correction_list_size > 0) {
 		correction_list.reset(new index_list (correction_list_size));
         }
@@ -185,11 +185,11 @@ preprocess::process (lanczos_sparse_matr
 
 
 
-std::auto_ptr<lanczos_vector_block>
+std::unique_ptr<lanczos_vector_block>
 postprocess::process(const lanczos_vector_block& vector,
 		     const index_list& list) const
 {
-	std::auto_ptr<lanczos_vector_block> result;
+	std::unique_ptr<lanczos_vector_block> result;
 
 	//
 	// creating a vector
--- lidia-2.3.0+latte-patches-2014-10-04/src/base/simple_classes/prime_list/prime_list_appl.cc.orig	2009-05-09 09:25:34.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/base/simple_classes/prime_list/prime_list_appl.cc	2021-03-18 14:16:28.550238282 -0600
@@ -127,7 +127,7 @@ int main_LiDIA(int argc, char** argv)
 	std::cout << " completed" << std::endl;
 
 	std::cout << "check primes .............................." << std::flush;
-	register lidia_size_t i;
+	lidia_size_t i;
 	for (i = 0; i < p1.get_number_of_primes(); i++) {
 		if (p1.get_prime(i) != p2.get_prime(i) ||
 		    p1.get_prime(i) != p3.get_prime(i) ||
--- lidia-2.3.0+latte-patches-2014-10-04/src/base/simple_classes/prime_list/prime_list.cc.orig	2009-05-09 09:25:34.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/base/simple_classes/prime_list/prime_list.cc	2021-03-18 14:18:13.743036877 -0600
@@ -46,15 +46,15 @@ namespace LiDIA {
 //
 
   static PRIME_LIST_COUNTER
-  invert(register PRIME_LIST_COUNTER a,
-	 register PRIME_LIST_COUNTER b)
+  invert(PRIME_LIST_COUNTER a,
+	 PRIME_LIST_COUNTER b)
   {
     //
     // Invert a mod b
     //
 
-    register PRIME_LIST_COUNTER r, q, x0 = 1, x1 = 0;
-    register bool sign = false;
+    PRIME_LIST_COUNTER r, q, x0 = 1, x1 = 0;
+    bool sign = false;
     PRIME_LIST_COUNTER sb = b;
 
     while (b != 0) {
@@ -75,17 +75,17 @@ namespace LiDIA {
 
 
   inline static void
-  create_bit_sieve_prime_mask (register PRIME_LIST_COUNTER prime,
-			       register PRIME_LIST_COUNTER base,
-			       register PRIME_LIST_BIT_SIEVE *bit_mask,
-			       register PRIME_LIST_BIT_SIEVE *prime_mask)
+  create_bit_sieve_prime_mask (PRIME_LIST_COUNTER prime,
+			       PRIME_LIST_COUNTER base,
+			       PRIME_LIST_BIT_SIEVE *bit_mask,
+			       PRIME_LIST_BIT_SIEVE *prime_mask)
   {
     //
     // Create prime-mask with every prime-th bit set to 1,
     // starting with base-th bit
     //
 
-    register PRIME_LIST_COUNTER index;
+    PRIME_LIST_COUNTER index;
 
     for (index = 0; index < prime; index++)
       prime_mask[index] = 0;
@@ -97,17 +97,17 @@ namespace LiDIA {
 
 
   inline static void
-  apply_bit_sieve_prime_mask (register PRIME_LIST_BIT_SIEVE *prime_mask,
-			      register PRIME_LIST_COUNTER prime,
-			      register PRIME_LIST_BIT_SIEVE *sieve,
-			      register PRIME_LIST_COUNTER base_index,
-			      register PRIME_LIST_COUNTER sieve_size)
+  apply_bit_sieve_prime_mask (PRIME_LIST_BIT_SIEVE *prime_mask,
+			      PRIME_LIST_COUNTER prime,
+			      PRIME_LIST_BIT_SIEVE *sieve,
+			      PRIME_LIST_COUNTER base_index,
+			      PRIME_LIST_COUNTER sieve_size)
   {
     //
     // Apply prime-mask to bit-sieve
     //
 
-    register PRIME_LIST_COUNTER index, index2;
+    PRIME_LIST_COUNTER index, index2;
 
     index2 = base_index % prime;
     for (index = 0; index < sieve_size; index++) {
@@ -358,11 +358,11 @@ namespace LiDIA {
     // equal to or greater than "prime"
     //
 
-    register prime_block *block;
+    prime_block *block;
     lidia_size_t block_index, first_block_index, last_block_index;
-    register PRIME_LIST_NUMBER tmp_prime;
+    PRIME_LIST_NUMBER tmp_prime;
     lidia_size_t index;
-    register lidia_size_t diff_index;
+    lidia_size_t diff_index;
 
     if ((prime< first_prime) || (prime > last_prime) || (number_of_primes == 0))
       return -1;
@@ -593,11 +593,11 @@ namespace LiDIA {
     //   ((upper_bound - lower_bound) + min(lower_bound, sqrt(upper_bound))) * sizeof(PRIME_LIST_SIEVE)
     //
 
-    register PRIME_LIST_SIEVE *base_sieve, *interval_sieve;
+    PRIME_LIST_SIEVE *base_sieve, *interval_sieve;
     bool sieve_overlap;
-    register PRIME_LIST_COUNTER base_sieve_size, interval_sieve_size;
-    register PRIME_LIST_COUNTER upper_bound_sqrt;
-    register PRIME_LIST_COUNTER i, j;
+    PRIME_LIST_COUNTER base_sieve_size, interval_sieve_size;
+    PRIME_LIST_COUNTER upper_bound_sqrt;
+    PRIME_LIST_COUNTER i, j;
 
     interval_sieve_size = upper_bound - lower_bound + 1;
     upper_bound_sqrt = static_cast<PRIME_LIST_COUNTER>(std::sqrt(static_cast<PRIME_LIST_FLOAT_NUMBER>(upper_bound))) + 1;
@@ -674,12 +674,12 @@ namespace LiDIA {
     //
 
     PRIME_LIST_NUMBER lower_bound_k, upper_bound_k;
-    register PRIME_LIST_SIEVE *base_sieve1, *base_sieve2;
-    register PRIME_LIST_SIEVE *interval_sieve1, *interval_sieve2;
+    PRIME_LIST_SIEVE *base_sieve1, *base_sieve2;
+    PRIME_LIST_SIEVE *interval_sieve1, *interval_sieve2;
     bool sieve_overlap;
-    register PRIME_LIST_COUNTER base_sieve_size, interval_sieve_size;
-    register PRIME_LIST_COUNTER upper_bound_sqrt_k;
-    register PRIME_LIST_COUNTER i, k;
+    PRIME_LIST_COUNTER base_sieve_size, interval_sieve_size;
+    PRIME_LIST_COUNTER upper_bound_sqrt_k;
+    PRIME_LIST_COUNTER i, k;
     PRIME_LIST_COUNTER j, tmp_prime;
     PRIME_LIST_NUMBER n;
 
@@ -852,15 +852,15 @@ namespace LiDIA {
 
     PRIME_LIST_NUMBER lower_bound_index, upper_bound_index;
     PRIME_LIST_NUMBER interval_sieve_lower_bound, interval_sieve_upper_bound;
-    register PRIME_LIST_BIT_SIEVE *base_sieve, *interval_sieve;
+    PRIME_LIST_BIT_SIEVE *base_sieve, *interval_sieve;
     bool sieve_overlap;
-    register PRIME_LIST_COUNTER base_sieve_size, interval_sieve_size;
-    register PRIME_LIST_COUNTER base_sieve_bit_size, interval_sieve_bit_size;
-    register PRIME_LIST_COUNTER upper_bound_sqrt_index;
-    register PRIME_LIST_COUNTER index;
-    register int bit;
-    register PRIME_LIST_COUNTER i, j;
-    register PRIME_LIST_NUMBER n;
+    PRIME_LIST_COUNTER base_sieve_size, interval_sieve_size;
+    PRIME_LIST_COUNTER base_sieve_bit_size, interval_sieve_bit_size;
+    PRIME_LIST_COUNTER upper_bound_sqrt_index;
+    PRIME_LIST_COUNTER index;
+    int bit;
+    PRIME_LIST_COUNTER i, j;
+    PRIME_LIST_NUMBER n;
     PRIME_LIST_BIT_SIEVE tmp_mask;
     PRIME_LIST_BIT_SIEVE bit_mask[prime_list_bit_sieve_size];
     PRIME_LIST_BIT_SIEVE prime_mask[prime_list_bit_sieve_size];
@@ -1002,17 +1002,17 @@ namespace LiDIA {
     PRIME_LIST_NUMBER lower_bound_k, upper_bound_k;
     PRIME_LIST_NUMBER lower_bound_index, upper_bound_index;
     PRIME_LIST_NUMBER interval_sieve_lower_bound_k, interval_sieve_upper_bound_k;
-    register PRIME_LIST_BIT_SIEVE *base_sieve1, *base_sieve2;
-    register PRIME_LIST_BIT_SIEVE *interval_sieve1, *interval_sieve2;
+    PRIME_LIST_BIT_SIEVE *base_sieve1, *base_sieve2;
+    PRIME_LIST_BIT_SIEVE *interval_sieve1, *interval_sieve2;
     bool sieve_overlap;
-    register PRIME_LIST_COUNTER base_sieve_size, interval_sieve_size;
-    register PRIME_LIST_COUNTER base_sieve_bit_size, interval_sieve_bit_size;
-    register PRIME_LIST_COUNTER upper_bound_sqrt_index;
-    register PRIME_LIST_COUNTER index;
-    register int bit;
-    register PRIME_LIST_COUNTER i, k;
+    PRIME_LIST_COUNTER base_sieve_size, interval_sieve_size;
+    PRIME_LIST_COUNTER base_sieve_bit_size, interval_sieve_bit_size;
+    PRIME_LIST_COUNTER upper_bound_sqrt_index;
+    PRIME_LIST_COUNTER index;
+    int bit;
+    PRIME_LIST_COUNTER i, k;
     PRIME_LIST_COUNTER j, tmp_prime;
-    register PRIME_LIST_NUMBER n;
+    PRIME_LIST_NUMBER n;
     PRIME_LIST_BIT_SIEVE tmp_mask;
     PRIME_LIST_BIT_SIEVE bit_mask[prime_list_bit_sieve_size];
     PRIME_LIST_BIT_SIEVE prime_mask[prime_list_bit_sieve_size];
@@ -1257,15 +1257,15 @@ namespace LiDIA {
     const PRIME_LIST_COUNTER max_sieve_size = 1000000;
 
     PRIME_LIST_COUNTER upper_bound_sqrt;
-    register PRIME_LIST_SIEVE *sieve;
+    PRIME_LIST_SIEVE *sieve;
     PRIME_LIST_COUNTER sieve_size;
-    register PRIME_LIST_COUNTER current_sieve_size;
-    register PRIME_LIST_NUMBER sieve_lower_bound;
+    PRIME_LIST_COUNTER current_sieve_size;
+    PRIME_LIST_NUMBER sieve_lower_bound;
     PRIME_LIST_NUMBER lower_bound2;
     int interval;
-    register PRIME_LIST_COUNTER sieve_upper_bound_sqrt;
-    register PRIME_LIST_COUNTER i, j, k;
-    register PRIME_LIST_COUNTER *prime_factor_list;
+    PRIME_LIST_COUNTER sieve_upper_bound_sqrt;
+    PRIME_LIST_COUNTER i, j, k;
+    PRIME_LIST_COUNTER *prime_factor_list;
     PRIME_LIST_COUNTER prime_factor_list_size;
     PRIME_LIST_COUNTER prime_factor_count;
 
@@ -1682,9 +1682,9 @@ namespace LiDIA {
     //
 
     lidia_size_t block_index;
-    register prime_block *block;
-    register lidia_size_t new_diff_index, diff_index;
-    register PRIME_LIST_NUMBER prime;
+    prime_block *block;
+    lidia_size_t new_diff_index, diff_index;
+    PRIME_LIST_NUMBER prime;
 
     if ((index< 0) || (index >= number_of_primes)) return 0;
     if (index == current_index) return current_prime;
--- lidia-2.3.0+latte-patches-2014-10-04/src/base/simple_classes/single_precision/single_precision.cc.orig	2009-05-09 09:25:32.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/base/simple_classes/single_precision/single_precision.cc	2021-03-18 14:18:35.253995687 -0600
@@ -319,7 +319,7 @@ power(unsigned int a, unsigned int b)
 
 int h_mul_mod(int a, int b, int m)
 {
-	register unsigned int n, n1, n2;
+	unsigned int n, n1, n2;
 	double nd, d;
 
 	if (m < SBASIS) {
@@ -391,7 +391,7 @@ int mul_mod(int a, int b, int m)
 
 int mul_mod(int a, int b, int m)
 {
-	register unsigned int n, n1, n2;
+	unsigned int n, n1, n2;
 	double nd, d;
 
 	if (m <= 1)
@@ -451,7 +451,7 @@ int mul_mod(int a, int b, int m)
 
 int power_mod(int bas, int exp, int modul)
 {
-	register int erg, ergz;
+	int erg, ergz;
 
 	if (exp < 0)
 		lidia_error_handler("power_mod", "exponent < 0");
@@ -495,7 +495,7 @@ int legendre(int n, int p)
 
 int invert(int a, int b)
 {
-	register int r, q,
+	int r, q,
 		xs = 0,
 		xss = 1,
 		lb = b;
@@ -600,7 +600,7 @@ int jacobi(int a, int b)
 
 int ressol(int a, int p)
 {
-	register int r, n, c, z, k, t, s;
+	int r, n, c, z, k, t, s;
 
 	if (p == 2)    return(a);
 
--- lidia-2.3.0+latte-patches-2014-10-04/src/base/system/debug.cc.orig	2009-05-09 09:25:28.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/base/system/debug.cc	2021-03-18 14:19:00.285947755 -0600
@@ -68,7 +68,7 @@ bool check_debug_list(const char *f, con
 		class_list = new char[ANZAHL][256];
 		function_list = new char[ANZAHL][256];
 
-		for (register lidia_size_t i = 0; i < ANZAHL; i++) {
+		for (lidia_size_t i = 0; i < ANZAHL; i++) {
 			in >> class_list[i];
 			in >> function_list[i];
 
@@ -77,7 +77,7 @@ bool check_debug_list(const char *f, con
 		in.close();
 	}
 
-	for (register lidia_size_t i = 0; i < ANZAHL; i++)
+	for (lidia_size_t i = 0; i < ANZAHL; i++)
 		if (strstr(f, class_list[i]) != NULL && (strstr(m, function_list[i]) != NULL || !strcmp("*", function_list[i])))
 			return false;
 	return true;
--- lidia-2.3.0+latte-patches-2014-10-04/src/base/system/error.cc.orig	2009-05-09 09:25:28.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/base/system/error.cc	2021-03-18 14:52:48.116144941 -0600
@@ -62,11 +62,11 @@ basic_error::basic_error(const std::stri
   // Nothing to do beyond member initialization
 }
 
-basic_error::~basic_error() throw() {
+basic_error::~basic_error() noexcept {
   // Nothing to do
 }
 
-const char* basic_error::what() const throw() {
+const char* basic_error::what() const noexcept {
   return msg_.c_str();
 }
 
@@ -104,7 +104,7 @@ generic_error::generic_error(const std::
   // Nothing to do beyond member initialization
 };
 
-generic_error::~generic_error() throw() {
+generic_error::~generic_error() noexcept {
   // Nothing to do
 }
 
@@ -125,11 +125,11 @@ index_out_of_bounds_error(const std::str
   // nothing to do
 }
 
-index_out_of_bounds_error::~index_out_of_bounds_error() throw() {
+index_out_of_bounds_error::~index_out_of_bounds_error() noexcept {
   // Nothing to do
 }
 
-const char* index_out_of_bounds_error::what() const throw() {
+const char* index_out_of_bounds_error::what() const noexcept {
   return basic_error::what();
 }
 
@@ -153,11 +153,11 @@ cast_error::cast_error(const std::string
   // Nothing to do beyond member initialization
 };
 
-cast_error::~cast_error() throw() {
+cast_error::~cast_error() noexcept {
   // Nothing to do
 }
 
-const char* cast_error::what() const throw() {
+const char* cast_error::what() const noexcept {
   return basic_error::what();
 }
 
--- lidia-2.3.0+latte-patches-2014-10-04/src/base/system/precondition_error.cc.orig	2013-08-09 18:49:36.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/base/system/precondition_error.cc	2021-03-18 14:51:53.242242071 -0600
@@ -78,11 +78,11 @@ namespace LiDIA {
 	return *this;
   }
 
-  precondition_error::~precondition_error() throw() {
+  precondition_error::~precondition_error() noexcept {
 	// nothing to do
   }
 
-  const char* precondition_error::what() const throw() {
+  const char* precondition_error::what() const noexcept {
     // this method needs only to disambiguitify which of the
     // inherited versions of what() is to be called.
     return basic_error::what();
--- lidia-2.3.0+latte-patches-2014-10-04/src/finite_fields/fft_prime/fft_prime.cc.orig	2009-05-09 09:24:40.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/finite_fields/fft_prime/fft_prime.cc	2021-03-18 14:19:59.405834566 -0600
@@ -59,8 +59,8 @@ static inline
 long mul_mod_sp(long a, long b, long p, double pinv)
 {
 	double ab = static_cast<double>(a) * static_cast<double>(b);
-	register long q = static_cast<long>(ab * pinv);
-	register long res = static_cast<long>(ab - (static_cast<double>(q) * static_cast<double>(p)));
+	long q = static_cast<long>(ab * pinv);
+	long res = static_cast<long>(ab - (static_cast<double>(q) * static_cast<double>(p)));
 //    res += (res >> ((SIZEOF_LONG*8)-1)) & p;
 //    res -= p;
 //    res += (res >> ((SIZEOF_LONG*8)-1)) & p;
@@ -79,8 +79,8 @@ static inline
 long mul_mod_sp2(long a, long b, long p, double bpinv)
 {
 	double ab = static_cast<double>(a) * static_cast<double>(b);
-	register long q = static_cast<long>(a* bpinv);
-	register long res = static_cast<long>(ab - (static_cast<double>(q) * static_cast<double>(p)));
+	long q = static_cast<long>(a* bpinv);
+	long res = static_cast<long>(ab - (static_cast<double>(q) * static_cast<double>(p)));
 //    res += (res >> ((SIZEOF_LONG*8)-1)) & p;
 //    res -= p;
 //    res += (res >> ((SIZEOF_LONG*8)-1)) & p;
--- lidia-2.3.0+latte-patches-2014-10-04/src/finite_fields/fft_prime/test_mul_mod.cc.orig	2009-05-09 09:24:40.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/finite_fields/fft_prime/test_mul_mod.cc	2021-03-18 14:20:13.837806939 -0600
@@ -44,8 +44,8 @@ inline
 long mul_mod_sp(long a, long b, long p, double pinv)
 {
 	double ab = static_cast<double>(a) * static_cast<double>(b);
-	register long q = static_cast<long>(ab * pinv);
-	register long res = static_cast<long>(ab - (static_cast<double>(q) * static_cast<double>(p)));
+	long q = static_cast<long>(ab * pinv);
+	long res = static_cast<long>(ab - (static_cast<double>(q) * static_cast<double>(p)));
 
 	if (res >= p)
 		res -= p;
@@ -61,8 +61,8 @@ inline
 long mul_mod_sp2(long a, long b, long p, double bpinv)
 {
 	double ab = static_cast<double>(a) * static_cast<double>(b);
-	register long q = static_cast<long>(a* bpinv);
-	register long res = static_cast<long>(ab - (static_cast<double>(q) * static_cast<double>(p)));
+	long q = static_cast<long>(a* bpinv);
+	long res = static_cast<long>(ab - (static_cast<double>(q) * static_cast<double>(p)));
 
 	if (res >= p)
 		res -= p;
--- lidia-2.3.0+latte-patches-2014-10-04/src/finite_fields/Fp_polynomial/Fp_pol_arithmetic.cc.orig	2009-05-09 09:24:38.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/finite_fields/Fp_polynomial/Fp_pol_arithmetic.cc	2021-03-18 14:20:46.597744220 -0600
@@ -330,7 +330,7 @@ void negate(Fp_polynomial &a, const Fp_p
 	lidia_size_t i;
 	const bigint &p = b.modulus();
 #ifdef USE_SINGLE_PREC
-	register udigit pp = p.least_significant_digit();
+	udigit pp = p.least_significant_digit();
 
 	if (p.compare(pp) == 0 && pp < max_udigit_modulus()) {
 		for (i = 0; i < b.c_length; i++)
@@ -378,7 +378,7 @@ void add(Fp_polynomial &c,
 	cp = c.coeff;
 	const bigint & p = a.modulus();
 #ifdef USE_SINGLE_PREC
-	register udigit pp = p.least_significant_digit();
+	udigit pp = p.least_significant_digit();
 
 	if (p.compare(pp) == 0 && pp < max_udigit_modulus()) {
 		for (i = min_deg_ab + 1; i; i--, ap++, bp++, cp++)
@@ -455,7 +455,7 @@ void subtract(Fp_polynomial &c,
 	cp = c.coeff;
 	const bigint & p = a.modulus();
 #ifdef USE_SINGLE_PREC
-	register udigit pp = p.least_significant_digit();
+	udigit pp = p.least_significant_digit();
 	bool sgl_prec = (p.compare(pp) == 0 && pp < max_udigit_modulus());
 
 	if (sgl_prec) {
--- lidia-2.3.0+latte-patches-2014-10-04/src/finite_fields/Fp_polynomial/plain_arith.cc.orig	2009-05-09 09:24:38.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/finite_fields/Fp_polynomial/plain_arith.cc	2021-03-18 14:21:01.685715332 -0600
@@ -139,7 +139,7 @@ void plain_mul(Fp_polynomial &c, const F
 
 	const bigint& p = a.modulus();
 #ifdef USE_SINGLE_PREC
-	register udigit pp = p.least_significant_digit();
+	udigit pp = p.least_significant_digit();
 
 	if (p.compare(pp) == 0 && pp < max_udigit_modulus())
 		polmul_sgl(cp, ap, deg_a, bp, deg_b, pp);
@@ -277,7 +277,7 @@ void plain_sqr(Fp_polynomial &x, const F
 
 	const bigint& p = a.modulus();
 #ifdef USE_SINGLE_PREC
-	register udigit pp = p.least_significant_digit();
+	udigit pp = p.least_significant_digit();
 
 	if (p.compare(pp) == 0 && pp < max_udigit_modulus())
 		polsqr_sgl(xp, ap, deg_a, pp);
@@ -503,7 +503,7 @@ void plain_div_rem(Fp_polynomial& q, Fp_
 	// now start doing the real work...
 	const bigint& p = a.modulus();
 #ifdef USE_SINGLE_PREC
-	register udigit pp = p.least_significant_digit();
+	udigit pp = p.least_significant_digit();
 	bool sgl_prec = (p.compare(pp) == 0 && pp < max_udigit_modulus());
 	if (sgl_prec)
 		poldivrem_sgl(qp, rp, ap, da, bp, db, pp);
@@ -544,7 +544,7 @@ void plain_div(Fp_polynomial &q, const F
 	lidia_size_t deg_q = deg_a - deg_b;
 	const bigint &p = a.modulus();
 #ifdef USE_SINGLE_PREC
-	register udigit pp = p.least_significant_digit();
+	udigit pp = p.least_significant_digit();
 	bool sgl_prec = (p.compare(pp) == 0 && pp < max_udigit_modulus());
 	if (sgl_prec) {
 		Fp_polynomial r;
--- lidia-2.3.0+latte-patches-2014-10-04/src/finite_fields/gf2n/gf2n.cc.orig	2009-05-09 09:24:44.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/finite_fields/gf2n/gf2n.cc	2021-03-18 14:21:36.373648920 -0600
@@ -53,7 +53,7 @@ gf2n_word *gf2n::B, *gf2n::C, *gf2n::F,
 
 gf2n::gf2n ()
 {
-	register unsigned int i;
+	unsigned int i;
 
 	element = new gf2n_word[gf2n::anzBI];
 	if (element == NULL) {
@@ -69,7 +69,7 @@ gf2n::gf2n ()
 
 gf2n::gf2n (const gf2n & a)
 {
-	register unsigned int i;
+	unsigned int i;
 	element = new gf2n_word[gf2n::anzBI];
 	if (element == NULL) {
 		lidia_error_handler ("gf2n", "gf2n(const gf2n &)::not enough memory \n");
@@ -84,7 +84,7 @@ gf2n::gf2n (const gf2n & a)
 
 gf2n::gf2n (unsigned long ui)
 {
-	register unsigned int i;
+	unsigned int i;
 
 	if (degree < (8*sizeof(gf2n_word)))
 		if ((static_cast<gf2n_word>(1) << degree) <= static_cast<gf2n_word>(ui)) {
@@ -109,7 +109,7 @@ gf2n::gf2n (unsigned long ui)
 
 gf2n::gf2n (const bigint & bi)
 {
-	register unsigned int i;
+	unsigned int i;
 	bigint h;
 
 	shift_left(h, bigint(1), degree);
@@ -153,7 +153,7 @@ gf2n::~gf2n ()
 void
 gf2n::re_initialize()
 {
-	register unsigned int i;
+	unsigned int i;
 
 	delete[] element;
 	element = new gf2n_word[gf2n::anzBI];
@@ -177,7 +177,7 @@ gf2n::re_initialize()
 
 gf2n & gf2n::operator = (const gf2n & a)
 {
-	for (register unsigned int i = 0; i < gf2n::anzBI; i++)
+	for (unsigned int i = 0; i < gf2n::anzBI; i++)
 		element[i] = a.element[i];
 	return (*this);
 }
@@ -194,7 +194,7 @@ gf2n & gf2n::operator = (unsigned long u
 
 
 	element[0] = static_cast<gf2n_word>(ui);
-	for (register unsigned int i = 1; i < gf2n::anzBI; i++)
+	for (unsigned int i = 1; i < gf2n::anzBI; i++)
 		element[i] = static_cast<gf2n_word>(0);
 
 	return (*this);
@@ -204,7 +204,7 @@ gf2n & gf2n::operator = (unsigned long u
 
 gf2n & gf2n::operator = (const bigint & bi)
 {
-	register unsigned int i = 0;
+	unsigned int i = 0;
 	bigint h;
 
 	shift_left(h, bigint(1), degree);
@@ -230,7 +230,7 @@ gf2n & gf2n::operator = (const bigint &
 
 void gf2n::assign_zero()
 {
-	for (register unsigned int i = 0; i < gf2n::anzBI; i++)
+	for (unsigned int i = 0; i < gf2n::anzBI; i++)
 		gf2n::element[i] = static_cast<gf2n_word>(0);
 }
 
@@ -238,7 +238,7 @@ void gf2n::assign_zero()
 
 void gf2n::assign_one()
 {
-	for (register unsigned int i = 1; i < gf2n::anzBI; i++)
+	for (unsigned int i = 1; i < gf2n::anzBI; i++)
 		gf2n::element[i] = static_cast<gf2n_word>(0);
 
 	gf2n::element[0] = static_cast<gf2n_word>(1);
@@ -248,7 +248,7 @@ void gf2n::assign_one()
 
 void gf2n::assign(const gf2n &a)
 {
-	for (register unsigned int i = 0; i < gf2n::anzBI; i++)
+	for (unsigned int i = 0; i < gf2n::anzBI; i++)
 		gf2n::element[i] = a.element[i];
 }
 
@@ -270,7 +270,7 @@ void swap(gf2n & a, gf2n & b)
 
 bool operator == (const gf2n & a, const gf2n & b)
 {
-	register int i = gf2n::anzBI - 1;
+	int i = gf2n::anzBI - 1;
 
 	if (a.is_reduced() == false)
 		partial_reduce2[gf2n::invsel](a.element);
@@ -467,7 +467,7 @@ void sqrt (gf2n & c, const gf2n & a)
 {
 	c.assign(a);
 
-	for (register unsigned int i = 1; i < gf2n::degree; i++)
+	for (unsigned int i = 1; i < gf2n::degree; i++)
 		square (c, c);
 }
 
@@ -490,7 +490,7 @@ void gf2n::randomize(unsigned int d)
 {
 	static random_generator rg;
 	long r;
-	register unsigned int i;
+	unsigned int i;
 
 	for (i = 0; i < anzBI; i++) {
 		rg >> r;
--- lidia-2.3.0+latte-patches-2014-10-04/src/finite_fields/gf2n/gf2n_invert.cc.orig	2009-05-09 09:24:44.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/finite_fields/gf2n/gf2n_invert.cc	2021-03-18 14:22:29.854546533 -0600
@@ -58,8 +58,8 @@ inline gf2n_word max(gf2n_word a, gf2n_w
 
 inline void shift_left(gf2n_word *F, unsigned int k, unsigned int & Flast)
 {
-	register int i, j, s;
-	register gf2n_word *fp1, *fp2;
+	int i, j, s;
+	gf2n_word *fp1, *fp2;
 
 	s = k % (CHAR_BIT*sizeof(gf2n_word));
 	j = k / (CHAR_BIT*sizeof(gf2n_word));
@@ -100,8 +100,8 @@ inline void shift_left(gf2n_word *F, uns
 
 inline void shift_right(gf2n_word *F, unsigned int k, unsigned int & Flast)
 {
-	register unsigned int j, i, s;
-	register gf2n_word *fp1, *fp2;
+	unsigned int j, i, s;
+	gf2n_word *fp1, *fp2;
 
 	s = k % (CHAR_BIT*sizeof(gf2n_word));
 	j = k / (CHAR_BIT*sizeof(gf2n_word));
@@ -141,9 +141,9 @@ inline void add_shift_right(gf2n_word *F
 			    unsigned int & Flast, unsigned int Glast)
 
 {
-	register unsigned int j, i, s, l;
-	register gf2n_word h;
-	register gf2n_word *fp1, *fp2, *gp;
+	unsigned int j, i, s, l;
+	gf2n_word h;
+	gf2n_word *fp1, *fp2, *gp;
 
 	s = k % (CHAR_BIT*sizeof(gf2n_word));
 	j = k / (CHAR_BIT*sizeof(gf2n_word));
@@ -189,8 +189,8 @@ inline void add_shift_right(gf2n_word *F
 
 void tri_invert(gf2n_word *res, gf2n_word *a)
 {
-	register gf2n_word h;
-	register gf2n_word *bp, *cp, *fp, *gp, *ap;
+	gf2n_word h;
+	gf2n_word *bp, *cp, *fp, *gp, *ap;
 	unsigned int i, j, w, l;
 	unsigned int xdegree = 0;
 	unsigned int anzBI = gf2n::anzBI;
@@ -410,8 +410,8 @@ void tri_invert(gf2n_word *res, gf2n_wor
 
 void pent_invert(gf2n_word *res, gf2n_word *a)
 {
-	register gf2n_word h;
-	register gf2n_word *bp, *cp, *fp, *gp, *ap;
+	gf2n_word h;
+	gf2n_word *bp, *cp, *fp, *gp, *ap;
 	unsigned int i, j, w, l;
 	unsigned int xdegree = 0;
 	unsigned int anzBI = gf2n::anzBI;
@@ -670,8 +670,8 @@ void pent_invert(gf2n_word *res, gf2n_wo
 
 void general_invert(gf2n_word *res, gf2n_word *a)
 {
-	register gf2n_word h;
-	register gf2n_word *bp, *cp, *fp, *gp, *ap;
+	gf2n_word h;
+	gf2n_word *bp, *cp, *fp, *gp, *ap;
 	unsigned int i, j, w, l, s;
 	unsigned int xdegree = 0;
 	unsigned int anzBI = gf2n::anzBI;
--- lidia-2.3.0+latte-patches-2014-10-04/src/finite_fields/gf2n/gf2n_mult.cc.orig	2009-05-09 09:24:44.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/finite_fields/gf2n/gf2n_mult.cc	2021-03-18 14:22:48.781510298 -0600
@@ -44,7 +44,7 @@ gf2n_bit16 mul8bit (gf2n_bit16 a, gf2n_b
 {
 	gf2n_bit16 h = 0;
 
-	for (register int i = 1; i <= 8; i++) {
+	for (int i = 1; i <= 8; i++) {
 		if (!a)
 			return (h);
 		if (a&1) h ^= b;
@@ -82,7 +82,7 @@ gf2n_word mul16bit(gf2n_bit16 a, gf2n_bi
 
 void gf2n::generate_mul_table()
 {
-	register unsigned int i, j;
+	unsigned int i, j;
 
 	for (i = 0; i < dim_mul; i++)
 		tabmul[i][i] = mul8bit(i, i);
@@ -100,7 +100,7 @@ void gf2n::generate_mul_table()
 
 void gf2n::generate_square_table()
 {
-	register unsigned int i;
+	unsigned int i;
 
 	for (i = 0; i < dim_square; i++)
 		tabsquare[i] = mul16bit(i, i);
@@ -521,7 +521,7 @@ void (*gf2nmul[]) (gf2n_word*, gf2n_word
 #if GF2N_WORDSIZE == 64
 void square (gf2n_word *c, gf2n_word *a)
 {
-	for (register int i = gf2n::anzBI-1, j = 2*gf2n::anzBI-1; i >= 0; i--) {
+	for (int i = gf2n::anzBI-1, j = 2*gf2n::anzBI-1; i >= 0; i--) {
 		c[j--] = tabsquare[ gf2n_bit16(a[i] >> 48) ] << 32 |
 			tabsquare[ gf2n_bit16(a[i] >> 32) ];
 		c[j--] = tabsquare[ gf2n_bit16(a[i] >> 16) ] << 32 |
@@ -531,7 +531,7 @@ void square (gf2n_word *c, gf2n_word *a)
 #else // we are running on a 32bit architecture
 void square (gf2n_word *c, gf2n_word *a)
 {
-	for (register int i = gf2n::anzBI-1, j = 2*gf2n::anzBI-1; i >= 0; i--) {
+	for (int i = gf2n::anzBI-1, j = 2*gf2n::anzBI-1; i >= 0; i--) {
 		c[j--] = tabsquare[ gf2n_bit16(a[i] >> 16) ];
 		c[j--] = tabsquare[ gf2n_bit16(a[i]) ];
 	}
--- lidia-2.3.0+latte-patches-2014-10-04/src/finite_fields/gf2n/gf2n_reduce.cc.orig	2009-05-09 09:24:44.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/finite_fields/gf2n/gf2n_reduce.cc	2021-03-18 14:24:26.573323081 -0600
@@ -47,9 +47,9 @@ unsigned int gf2n::exp1 = 0, gf2n::exp2
 
 void tri_partial_reduce1(gf2n_word *f)
 {
-	register unsigned int i, k, l, w;
-	register unsigned int anzBI = gf2n::anzBI, degree = gf2n::degree;
-	register gf2n_word h;
+	unsigned int i, k, l, w;
+	unsigned int anzBI = gf2n::anzBI, degree = gf2n::degree;
+	gf2n_word h;
 
 	i = 2*anzBI - 1;
 
@@ -89,9 +89,9 @@ void tri_partial_reduce1(gf2n_word *f)
 
 void pent_partial_reduce1(gf2n_word *f)
 {
-	register unsigned int i, k, l, w;
-	register unsigned int anzBI = gf2n::anzBI, degree = gf2n::degree;
-	register gf2n_word h;
+	unsigned int i, k, l, w;
+	unsigned int anzBI = gf2n::anzBI, degree = gf2n::degree;
+	gf2n_word h;
 
 	i = 2*anzBI - 1;
 
@@ -151,10 +151,10 @@ void pent_partial_reduce1(gf2n_word *f)
 
 void general_partial_reduce1(gf2n_word *f)
 {
-	register unsigned int i, j, k, l, w, s;
-	register unsigned int anzBI = gf2n::anzBI, degree = gf2n::degree;
-	register unsigned int anz_expo = gf2n::anz_exponents;
-	register gf2n_word h;
+	unsigned int i, j, k, l, w, s;
+	unsigned int anzBI = gf2n::anzBI, degree = gf2n::degree;
+	unsigned int anz_expo = gf2n::anz_exponents;
+	gf2n_word h;
 
 	i = 2*anzBI - 1;
 
@@ -215,8 +215,8 @@ void (*partial_reduce1[]) (gf2n_word*) =
 
 void tri_partial_reduce2(gf2n_word *f)
 {
-	register unsigned int l, w, deg, anz;
-	register gf2n_word h;
+	unsigned int l, w, deg, anz;
+	gf2n_word h;
 
 	anz = gf2n::anzBI-1;
 	deg = gf2n::degree % (CHAR_BIT*sizeof(gf2n_word));
@@ -248,8 +248,8 @@ void tri_partial_reduce2(gf2n_word *f)
 
 void pent_partial_reduce2(gf2n_word *f)
 {
-	register unsigned int l, w, anz, deg;
-	register gf2n_word h;
+	unsigned int l, w, anz, deg;
+	gf2n_word h;
 
 	anz = gf2n::anzBI-1;
 	deg = gf2n::degree % (CHAR_BIT*sizeof(gf2n_word));
@@ -305,8 +305,8 @@ void pent_partial_reduce2(gf2n_word *f)
 
 void general_partial_reduce2(gf2n_word *f)
 {
-	register unsigned int j, s, l, w, anz, deg;
-	register gf2n_word h;
+	unsigned int j, s, l, w, anz, deg;
+	gf2n_word h;
 
 	anz = gf2n::anzBI-1;
 	deg = gf2n::degree % (CHAR_BIT*sizeof(gf2n_word));
--- lidia-2.3.0+latte-patches-2014-10-04/src/finite_fields/gf2n/gf2n_timing.cc.orig	2009-05-09 09:24:44.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/finite_fields/gf2n/gf2n_timing.cc	2021-03-18 14:24:42.924291781 -0600
@@ -35,7 +35,7 @@ const unsigned int jmax = 10;
 int main(int, char **)
 {
 	unsigned int  deg;
-	register unsigned int i, j;
+	unsigned int i, j;
 	timer t;
 
 	t.set_print_mode(HMS_MODE);
--- lidia-2.3.0+latte-patches-2014-10-04/src/finite_fields/gf2n_polynomial/gf2n_poly_karatzuba.cc.orig	2010-01-30 08:03:58.000000000 -0700
+++ lidia-2.3.0+latte-patches-2014-10-04/src/finite_fields/gf2n_polynomial/gf2n_poly_karatzuba.cc	2021-03-18 14:25:12.477235202 -0600
@@ -449,8 +449,8 @@ void gf2n_p_mult(gf2n *r, const gf2n * a
 void multiply(gf2n_polynomial & c, const gf2n_polynomial & a,
 	      const gf2n_polynomial & b)
 {
-	register int deg_a = a.deg, deg_b = b.deg;
-	register int deg_ab = deg_a + deg_b;
+	int deg_a = a.deg, deg_b = b.deg;
+	int deg_ab = deg_a + deg_b;
 	int s = c.size;
 	gf2n * cpp;
 
--- lidia-2.3.0+latte-patches-2014-10-04/src/finite_fields/gf2n_polynomial/gf2n_poly_modulus.cc.orig	2009-05-09 09:24:26.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/finite_fields/gf2n_polynomial/gf2n_poly_modulus.cc	2021-03-18 14:25:36.485189244 -0600
@@ -453,7 +453,7 @@ void power(gf2n_polynomial & c, const gf
 void compose(gf2n_polynomial & res, const gf2n_polynomial & f,
              const gf2n_polynomial & x, const gf2n_polynomial *table)
 {
-	register int i, fd = f.degree();
+	int i, fd = f.degree();
 	gf2n_polynomial r(0), help;
 	gf2n h2;
 
@@ -485,7 +485,7 @@ void compose(gf2n_polynomial & res, cons
 void compose(gf2n_polynomial & res, const gf2n_polynomial & f,
              const gf2n_polynomial & x, gf2n_poly_modulus & F)
 {
-	register int i, fd = f.degree();
+	int i, fd = f.degree();
 	gf2n_polynomial r(0);
 	gf2n h2;
 
--- lidia-2.3.0+latte-patches-2014-10-04/src/finite_fields/gf2n_polynomial/gf2n_polynomial.cc.orig	2009-05-09 09:24:26.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/finite_fields/gf2n_polynomial/gf2n_polynomial.cc	2021-03-18 14:26:10.062124959 -0600
@@ -61,7 +61,7 @@ gf2n_polynomial::gf2n_polynomial()
 
 gf2n_polynomial::gf2n_polynomial(unsigned int d)   // = 1 * X^d
 {
-	register int i;
+	int i;
 	refc++;
 	deg = d;
 	if (d >= static_cast<unsigned int>(default_size))
@@ -91,7 +91,7 @@ gf2n_polynomial::gf2n_polynomial(const g
 gf2n_polynomial::gf2n_polynomial(const gf2n_polynomial & p)  // = p
 {
 	gf2n *ap, *cp;
-	register int i;
+	int i;
 
 	refc++;
 	deg = p.deg;
@@ -114,7 +114,7 @@ bool operator == (const gf2n_polynomial
 		  const gf2n_polynomial &b)
 {
 	gf2n *ap, *bp;
-	register int i, da = a.deg, db = b.deg;
+	int i, da = a.deg, db = b.deg;
 
 	if (da != db)
 		return false;
@@ -136,7 +136,7 @@ void gf2n_polynomial::make_monic()
 		return;
 
 	gf2n s = inverse(coeff[deg]);
-	for (register int i = 0; i < deg; i++)
+	for (int i = 0; i < deg; i++)
 		multiply(coeff[i], s, coeff[i]);
 	coeff[deg].assign_one();
 }
@@ -174,7 +174,7 @@ bool gf2n_polynomial::is_square() const
 
 void gf2n_polynomial::assign(const gf2n_polynomial & f)
 {
-	register int i;
+	int i;
 	gf2n * fp, *gp;
 
 	if (static_cast<int>(size) < f.deg+1)
@@ -270,7 +270,7 @@ void multiply_by_scalar(gf2n_polynomial
 			const gf2n_polynomial & a)
 {
 	gf2n *ap, *cp;
-	register int i;
+	int i;
 
 	if (b.is_zero()) {
 		g.deg = -1;
@@ -282,7 +282,7 @@ void multiply_by_scalar(gf2n_polynomial
 		return;
 	}
 
-	register int deg_a = a.deg;
+	int deg_a = a.deg;
 
 	if (deg_a >= static_cast<int>(g.size))
 		g.set_size (deg_a + 1 > static_cast<int>(gf2n_polynomial::default_size) ?
@@ -369,7 +369,7 @@ void shift_left (gf2n_polynomial & g, co
 		return;
 	}
 
-	register int dg = f.deg + d, i, fd = f.deg;
+	int dg = f.deg + d, i, fd = f.deg;
 
 	if (dg >= g.size) {
 		g.size = dg+1;
@@ -404,7 +404,7 @@ void shift_right (gf2n_polynomial & g, c
 		  unsigned int d)
 
 {
-	register int i, fd = f.deg;
+	int i, fd = f.deg;
 	gf2n *ap, *bp;
 
 	if (d == 0 || f.is_zero()) {
@@ -445,7 +445,7 @@ void multiply_by_linear(gf2n_polynomial
 		return;
 	}
 
-	register int dg = f.deg+1, i, fd = f.deg;
+	int dg = f.deg+1, i, fd = f.deg;
 
 	if (dg >= static_cast<int>(g.size)) {
 		g.size = dg+1;
@@ -483,8 +483,8 @@ void multiply_by_linear(gf2n_polynomial
 void add(gf2n_polynomial &c, const gf2n_polynomial & a,
 	 const gf2n_polynomial & b)
 {
-	register int deg_a = a.deg, deg_b = b.deg;
-	register int i, min_deg_ab, max_deg_ab;
+	int deg_a = a.deg, deg_b = b.deg;
+	int i, min_deg_ab, max_deg_ab;
 	gf2n *ap, *bp, *cp, *cpp, t;
 
 	if (deg_a < 0) {
@@ -557,8 +557,8 @@ void add(gf2n_polynomial &c, const gf2n_
 void plain_mul(gf2n_polynomial & c, const gf2n_polynomial & a,
 	       const gf2n_polynomial & b)
 {
-	register int deg_a = a.deg, deg_b = b.deg;
-	register int i, j, deg_ab = deg_a + deg_b;
+	int deg_a = a.deg, deg_b = b.deg;
+	int i, j, deg_ab = deg_a + deg_b;
 	gf2n *ap, *bp, t, *cp, *cpp;
 
 	if (deg_a < 0 || deg_b < 0) {
@@ -605,7 +605,7 @@ void plain_mul(gf2n_polynomial & c, cons
 
 void square (gf2n_polynomial & c, const gf2n_polynomial & a)
 {
-	register int i, dg = a.deg, dgg = (a.deg << 1);
+	int i, dg = a.deg, dgg = (a.deg << 1);
 	gf2n * cp, *cpp, *ap;
 
 	if (dg < 0) {
@@ -664,7 +664,7 @@ std::ostream & operator << (std::ostream
 					s << "X^" << d;
 				else
 					s << a.coeff[d] << " * X^" << d;
-				for (register int i = d - 1; i > 1; i--)
+				for (int i = d - 1; i > 1; i--)
 					if (a.coeff[i].is_one())
 						s << " + X^" << i;
 					else if (!a.coeff[i].is_zero())
--- lidia-2.3.0+latte-patches-2014-10-04/src/finite_fields/gf2n_polynomial/gf2n_poly_remainder.cc.orig	2009-05-09 09:24:26.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/finite_fields/gf2n_polynomial/gf2n_poly_remainder.cc	2021-03-18 14:26:27.246092062 -0600
@@ -259,7 +259,7 @@ void floor (gf2n_polynomial & g, const g
 	    unsigned int d)
 
 {
-	register int i, fd = f.deg;
+	int i, fd = f.deg;
 	gf2n *ap, *bp;
 
 	if (d == 0 || f.is_zero()) {
--- lidia-2.3.0+latte-patches-2014-10-04/src/finite_fields/gfpn/galois_field_iterator.cc.orig	2009-05-09 09:24:39.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/finite_fields/gfpn/galois_field_iterator.cc	2021-03-18 15:47:04.105440171 -0600
@@ -14,24 +14,20 @@ namespace LiDIA {
 # define IN_NAMESPACE_LIDIA
 #endif
 
-  std::auto_ptr<galois_field const> const
+  std::unique_ptr<galois_field const> const
   galois_field_iterator::dummy_field(new galois_field());
 
 
   galois_field_iterator::
   galois_field_iterator()
-    : past_the_end(true),
-      enumerated_field(0),
-      current_element(0) {
+    : past_the_end(true) {
     
   }
 
 
   galois_field_iterator::
   galois_field_iterator(galois_field const& gf)
-    : past_the_end(gf == *galois_field_iterator::dummy_field),
-      enumerated_field(0),
-      current_element(0) {
+    : past_the_end(gf == *galois_field_iterator::dummy_field) {
     if(!this->past_the_end) {
       this->enumerated_field.reset(new galois_field(gf));
       this->current_element.reset(new gf_element(gf));
@@ -41,9 +37,7 @@ namespace LiDIA {
 
   galois_field_iterator::
   galois_field_iterator(gf_element const& element)
-    : past_the_end(false),
-      enumerated_field(0),
-      current_element(0) {
+    : past_the_end(false) {
     this->enumerated_field.reset(new galois_field(element.get_field()));
     this->current_element.reset(new gf_element(element));
   }
@@ -51,9 +45,7 @@ namespace LiDIA {
 
   galois_field_iterator::
   galois_field_iterator(galois_field_iterator const& iter)
-    : past_the_end(iter.past_the_end),
-      enumerated_field(0),
-      current_element(0) {
+    : past_the_end(iter.past_the_end) {
     if(iter.enumerated_field.get()) {
       this->enumerated_field.reset(new galois_field(*iter.enumerated_field));
       this->current_element.reset(new gf_element(*iter.current_element));
@@ -237,22 +229,11 @@ namespace LiDIA {
   }
 
 
-  namespace {
-
-    template<typename T>
-    void swap_auto_ptr(std::auto_ptr<T>& lhs, std::auto_ptr<T>& rhs) {
-      std::auto_ptr<T> tmp = lhs;
-      lhs = rhs;
-      rhs = tmp;
-    }
-
-  }
-
   void swap(galois_field_iterator& lhs,
             galois_field_iterator& rhs) {
     std::swap(lhs.past_the_end, rhs.past_the_end);
-    swap_auto_ptr(lhs.enumerated_field, rhs.enumerated_field);
-    swap_auto_ptr(lhs.current_element, rhs.current_element);
+    lhs.enumerated_field.swap(rhs.enumerated_field);
+    lhs.current_element.swap(rhs.current_element);
   }
 
 
--- lidia-2.3.0+latte-patches-2014-10-04/src/finite_fields/gfpn/galois_field_rep.cc.orig	2009-05-09 09:24:39.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/finite_fields/gfpn/galois_field_rep.cc	2021-03-18 15:31:54.018137542 -0600
@@ -406,7 +406,7 @@ namespace LiDIA {
   gf_element const&
   galois_field_rep::generator() const {
     if(!this->gen) {
-      std::auto_ptr<gf_element> new_gen (new gf_element());
+      std::unique_ptr<gf_element> new_gen (new gf_element());
       new_gen->assign_primitive_element(galois_field(*this));
       this->gen = new_gen.release();
     }
--- lidia-2.3.0+latte-patches-2014-10-04/src/finite_fields/gfpn/gf_rep_GF2n.cc.orig	2018-10-09 15:02:42.156468749 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/finite_fields/gfpn/gf_rep_GF2n.cc	2021-03-18 14:27:30.444971066 -0600
@@ -51,7 +51,7 @@ void galois_field_rep::construct_GF2n(gf
 
 	a.rep = new udigit[I2.anzBI];
 	memory_handler(a.rep, "gf_element", "construct_GF2n: out of memory");
-	register unsigned int i;
+	unsigned int i;
 	for (i = 0; i < I2.anzBI; i++)
 		(static_cast<udigit*>(a.rep))[i] = static_cast<udigit>(0);
 }
@@ -75,7 +75,7 @@ void galois_field_rep::copy_GF2n(gf_elem
 		a.rep = new udigit[I2.anzBI];
 		memory_handler(a.rep, "gf_element", "construct_GF2n: out of memory");
 	}
-	register unsigned int i;
+	unsigned int i;
 	for (i = 0; i < I2.anzBI; i++)
 		(static_cast<udigit*>(a.rep))[i] = (static_cast<udigit*>(b.rep))[i];
 }
@@ -87,7 +87,7 @@ void galois_field_rep::as0_GF2n(gf_eleme
 	ASSERT_FIELDS_MATCH(a, "as0_GF2n");
 	ASSERT_NOT_NULLPTR(a, "as0_GF2n");
 
-	register unsigned int i;
+	unsigned int i;
 	for (i = 0; i < I2.anzBI; i++)
 		(static_cast<udigit*>(a.rep))[i] = static_cast<udigit>(0);
 }
@@ -99,7 +99,7 @@ void galois_field_rep::as1_GF2n(gf_eleme
 	ASSERT_FIELDS_MATCH(a, "as1_GF2n");
 	ASSERT_NOT_NULLPTR(a, "as1_GF2n");
 
-	register unsigned int i;
+	unsigned int i;
 	udigit *ap = static_cast<udigit*>(a.rep);
 	for (i = 0; i < I2.anzBI; i++)
 		ap[i] = static_cast<udigit>(0);
@@ -122,7 +122,7 @@ bool galois_field_rep::iseq_GF2n(const g
 	if (!I2.is_reduced(bp))
 		I2.partial_reduce2(bp);
 
-	register int i = I2.anzBI-1;
+	int i = I2.anzBI-1;
 	while (i >= 0 && (ap[i] == bp[i]))
 		i--;
 
@@ -142,7 +142,7 @@ bool galois_field_rep::is0_GF2n(const gf
 	if (!I2.is_reduced(ap))
 		I2.partial_reduce2(ap);
 
-	register int i = I2.anzBI-1;
+	int i = I2.anzBI-1;
 	while ((i >= 0) && (ap[i] == static_cast<udigit>(0)))
 		i--;
 
@@ -161,7 +161,7 @@ bool galois_field_rep::is1_GF2n(const gf
 	if (!I2.is_reduced(ap))
 		I2.partial_reduce2(ap);
 
-	register int i = I2.anzBI-1;
+	int i = I2.anzBI-1;
 	while (i >= 0 && ap[i] == static_cast<udigit>(0))
 		i--;
 
@@ -190,8 +190,8 @@ void galois_field_rep::add_GF2n(gf_eleme
 	if (c.rep == 0 || a.rep == 0 || b.rep == 0)
 		lidia_error_handler("galois_field_rep", "add_GF2n: null pointer");
 
-	register unsigned int i;
-	register udigit *cp = static_cast<udigit*>(c.rep),
+	unsigned int i;
+	udigit *cp = static_cast<udigit*>(c.rep),
 		*ap = static_cast<udigit*>(a.rep),
 		*bp = static_cast<udigit*>(b.rep);
 
@@ -210,8 +210,8 @@ void galois_field_rep::sub_GF2n(gf_eleme
 		lidia_error_handler("galois_field_rep", "sub_GF2n: null pointer");
 
 	// identical to addition
-	register unsigned int i;
-	register udigit *cp = static_cast<udigit*>(c.rep),
+	unsigned int i;
+	udigit *cp = static_cast<udigit*>(c.rep),
 		*ap = static_cast<udigit*>(a.rep),
 		*bp = static_cast<udigit*>(b.rep);
 
@@ -234,7 +234,7 @@ void galois_field_rep::mul_GF2n(gf_eleme
 //		return;
 //	}
 
-	register unsigned int i;
+	unsigned int i;
 	for (i = 0; i < 2*I2.anzBI; i++)
 		I2.B[i] = static_cast<udigit>(0);
 
@@ -253,7 +253,7 @@ void galois_field_rep::inv_GF2n(gf_eleme
 	ASSERT_NOT_NULLPTR(a, "inv_GF2n");
 
 	udigit *ap = static_cast<udigit*>(a.rep);
-	register unsigned int i;
+	unsigned int i;
 	for (i = 0; i < I2.anzBI; i++)
 		I2.B[i] = ap[i];
 
@@ -269,7 +269,7 @@ void galois_field_rep::sqr_GF2n(gf_eleme
 	if (a.rep == 0 || c.rep == 0)
 		lidia_error_handler("galois_field_rep", "sqr_GF2n: null pointer");
 
-	register unsigned int i;
+	unsigned int i;
 	udigit *ap = static_cast<udigit*>(a.rep);
 
 	I2.square(I2.B, ap);
--- lidia-2.3.0+latte-patches-2014-10-04/src/finite_fields/gfpn/info_gf2n_inv.cc.orig	2009-05-09 09:24:39.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/finite_fields/gfpn/info_gf2n_inv.cc	2021-03-18 14:27:57.117920001 -0600
@@ -53,8 +53,8 @@ inline udigit max(udigit a, udigit b)
 static
 inline void shift_left(udigit *F, unsigned int k, unsigned int & Flast)
 {
-	register int i, j, s;
-	register udigit *fp1, *fp2;
+	int i, j, s;
+	udigit *fp1, *fp2;
 
 	s = k % (BITS_PER_LONG);
 	j = k / (BITS_PER_LONG);
@@ -96,8 +96,8 @@ inline void shift_left(udigit *F, unsign
 static
 inline void shift_right(udigit *F, unsigned int k, unsigned int & Flast)
 {
-	register unsigned int j, i, s;
-	register udigit *fp1, *fp2;
+	unsigned int j, i, s;
+	udigit *fp1, *fp2;
 
 	s = k % (BITS_PER_LONG);
 	j = k / (BITS_PER_LONG);
@@ -137,9 +137,9 @@ inline void add_shift_right(udigit *F, u
 			    unsigned int & Flast, unsigned int Glast)
 
 {
-	register unsigned int j, i, s, l;
-	register udigit h;
-	register udigit *fp1, *fp2, *gp;
+	unsigned int j, i, s, l;
+	udigit h;
+	udigit *fp1, *fp2, *gp;
 
 	s = k % (BITS_PER_LONG);
 	j = k / (BITS_PER_LONG);
@@ -185,8 +185,8 @@ inline void add_shift_right(udigit *F, u
 
 void info_gf2n::tri_invert(udigit *res, udigit *a) const
 {
-	register udigit h;
-	register udigit *bp, *cp, *fp, *gp, *ap;
+	udigit h;
+	udigit *bp, *cp, *fp, *gp, *ap;
 	unsigned int i, j, w, l;
 	unsigned int xdegree = 0;
 	unsigned int Clast, Blast, Flast, Glast;
@@ -407,8 +407,8 @@ void info_gf2n::tri_invert(udigit *res,
 
 void info_gf2n::pent_invert(udigit *res, udigit *a) const
 {
-	register udigit h;
-	register udigit *bp, *cp, *fp, *gp, *ap;
+	udigit h;
+	udigit *bp, *cp, *fp, *gp, *ap;
 	unsigned int i, j, w, l;
 	unsigned int xdegree = 0;
 	unsigned int anzBI = info_gf2n::anzBI;
@@ -666,8 +666,8 @@ void info_gf2n::pent_invert(udigit *res,
 
 void info_gf2n::general_invert(udigit *res, udigit *a) const
 {
-	register udigit h;
-	register udigit *bp, *cp, *fp, *gp, *ap;
+	udigit h;
+	udigit *bp, *cp, *fp, *gp, *ap;
 	unsigned int i, j, w, l, s;
 	unsigned int xdegree = 0;
 	unsigned int anzBI = info_gf2n::anzBI;
--- lidia-2.3.0+latte-patches-2014-10-04/src/finite_fields/gfpn/info_gf2n_mul.cc.orig	2009-05-09 09:24:39.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/finite_fields/gfpn/info_gf2n_mul.cc	2021-03-18 14:28:15.300885186 -0600
@@ -53,7 +53,7 @@ static gf2n_bit16 mul8bit (gf2n_bit16 a,
 {
 	gf2n_bit16 h = 0;
 
-	for (register int i = 1; i <= 8; i++) {
+	for (int i = 1; i <= 8; i++) {
 		if (!a)
 			return (h);
 		if (a&1) h ^= b;
@@ -496,7 +496,7 @@ void (info_gf2n::*(info_gf2n::gf2nmul)[]
 
 void info_gf2n::square (udigit *c, udigit *a) const
 {
-	for (register int i = anzBI-1, j = 2*anzBI-1; i >= 0; i--) {
+	for (int i = anzBI-1, j = 2*anzBI-1; i >= 0; i--) {
 		c[j--] = tabsquare[ gf2n_bit16(a[i] >> 16) ];
 		c[j--] = tabsquare[ gf2n_bit16(a[i]) ];
 	}
--- lidia-2.3.0+latte-patches-2014-10-04/src/finite_fields/gfpn/info_gf2n_red.cc.orig	2009-05-09 09:24:39.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/finite_fields/gfpn/info_gf2n_red.cc	2021-03-18 14:28:38.429841197 -0600
@@ -44,8 +44,8 @@ namespace LiDIA {
 
 void info_gf2n::tri_partial_reduce1(udigit *f) const
 {
-	register unsigned int i, k, l, w;
-	register udigit h;
+	unsigned int i, k, l, w;
+	udigit h;
 
 	i = 2*anzBI - 1;
 
@@ -85,8 +85,8 @@ void info_gf2n::tri_partial_reduce1(udig
 
 void info_gf2n::pent_partial_reduce1(udigit *f) const
 {
-	register unsigned int i, k, l, w;
-	register udigit h;
+	unsigned int i, k, l, w;
+	udigit h;
 
 	i = 2*anzBI - 1;
 
@@ -146,8 +146,8 @@ void info_gf2n::pent_partial_reduce1(udi
 
 void info_gf2n::general_partial_reduce1(udigit *f) const
 {
-	register unsigned int i, j, k, l, w, s;
-	register udigit h;
+	unsigned int i, j, k, l, w, s;
+	udigit h;
 
 	i = 2*anzBI - 1;
 
@@ -200,8 +200,8 @@ void info_gf2n::general_partial_reduce1(
 
 void info_gf2n::tri_partial_reduce2(udigit *f) const
 {
-	register unsigned int l, w, deg, anz;
-	register udigit h;
+	unsigned int l, w, deg, anz;
+	udigit h;
 
 	anz = anzBI-1;
 	deg = degree % (BITS_PER_LONG);
@@ -231,8 +231,8 @@ void info_gf2n::tri_partial_reduce2(udig
 
 void info_gf2n::pent_partial_reduce2(udigit *f) const
 {
-	register unsigned int l, w, anz, deg;
-	register udigit h;
+	unsigned int l, w, anz, deg;
+	udigit h;
 
 	anz = anzBI-1;
 	deg = degree % (BITS_PER_LONG);
@@ -282,8 +282,8 @@ void info_gf2n::pent_partial_reduce2(udi
 
 void info_gf2n::general_partial_reduce2(udigit *f) const
 {
-	register unsigned int j, s, l, w, anz, deg;
-	register udigit h;
+	unsigned int j, s, l, w, anz, deg;
+	udigit h;
 
 	anz = anzBI-1;
 	deg = degree % (BITS_PER_LONG);
--- lidia-2.3.0+latte-patches-2014-10-04/src/finite_fields/gf_polynomial/gf_pol_instant.cc.orig	2009-05-09 09:24:27.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/finite_fields/gf_polynomial/gf_pol_instant.cc	2021-03-18 14:29:06.212788480 -0600
@@ -64,10 +64,10 @@ void base_polynomial< gf_element >::set_
 	memory_handler(coeff, "base_polynomial< gf_element >",
 		       "set_degree(lidia_size_t d) :: Error in memory allocation (coeff)");
 
-	register lidia_size_t minimum = (d < deg)? d : deg;
+	lidia_size_t minimum = (d < deg)? d : deg;
 
 	gf_element null(*gf_polynomial::FIELD);
-	register lidia_size_t i;
+	lidia_size_t i;
 	for (i = 0; i <= minimum; i++) {
 		if (is_undefined(tmp[i].get_field()))
 			LiDIA::add(coeff[i], tmp[i], null); // set field
@@ -145,7 +145,7 @@ void integral(field_polynomial< gf_eleme
 	c[0].assign_zero(*gf_polynomial::FIELD);
 	//cp++;
 
-	for (register lidia_size_t i = 0; i <= d; i++) {
+	for (lidia_size_t i = 0; i <= d; i++) {
 		LiDIA::divide(c[i + 1], a[i], i + 1);
 	}
 }
--- lidia-2.3.0+latte-patches-2014-10-04/src/finite_fields/include/LiDIA/galois_field_iterator.h.orig	2009-05-09 09:24:33.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/finite_fields/include/LiDIA/galois_field_iterator.h	2021-03-18 15:31:23.130158334 -0600
@@ -37,10 +37,10 @@ namespace LiDIA {
   class galois_field_iterator {
   private:
     bool past_the_end;
-    std::auto_ptr<galois_field> enumerated_field;
-    std::auto_ptr<gf_element> current_element;
+    std::unique_ptr<galois_field> enumerated_field;
+    std::unique_ptr<gf_element> current_element;
 
-    static std::auto_ptr<galois_field const> const dummy_field;
+    static std::unique_ptr<galois_field const> const dummy_field;
 
     void check_access(std::string const& caller) const;
 
--- lidia-2.3.0+latte-patches-2014-10-04/src/finite_fields/include/LiDIA/gf2n.h.orig	2009-05-09 09:24:33.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/finite_fields/include/LiDIA/gf2n.h	2021-03-18 14:29:33.533736639 -0600
@@ -356,7 +356,7 @@ multiply(gf2n & c, const gf2n & a, const
 {
 	void square(gf2n_word*, gf2n_word*);
 
-	register unsigned int i;
+	unsigned int i;
 
 	for (i = 0; i < 2*gf2n::anzBI; i++)
 		gf2n::B[i] = (gf2n_word) 0;
@@ -384,7 +384,7 @@ square(gf2n & c, const gf2n & a)
 
 	square(gf2n::B, a.element);
 	partial_reduce1[gf2n::invsel](gf2n::B);
-	for (register unsigned i = 0; i < gf2n::anzBI; i++)
+	for (unsigned i = 0; i < gf2n::anzBI; i++)
 		c.element[i] = gf2n::B[i];
 }
 
@@ -427,8 +427,8 @@ divide(gf2n & c, const gf2n & a, const g
 inline void
 add(gf2n & c, const gf2n & a, const gf2n & b)
 {
-	register unsigned int i;
-	register gf2n_word *cp, *ap, *bp;
+	unsigned int i;
+	gf2n_word *cp, *ap, *bp;
 
 	for (i = 0, ap = a.element, bp = b.element, cp = c.element;
 	     i < gf2n::anzBI; i++, cp++, ap++, bp++)
--- lidia-2.3.0+latte-patches-2014-10-04/src/interfaces/udigit/gmp/udigit128.gmp.h.orig	2009-05-09 09:24:19.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/interfaces/udigit/gmp/udigit128.gmp.h	2021-03-18 14:30:02.092682447 -0600
@@ -282,7 +282,7 @@ public:
 
 	friend unsigned long divide(const udigit128 & a, const udigit128 & b)
 	{
-		register int n, alength = a.length(), blength = b.length();
+		int n, alength = a.length(), blength = b.length();
 		unsigned long h;
 
 		if (cmp(a, b) <= 0)
@@ -318,7 +318,7 @@ public:
 	//                           && length(new_this) <= C_LG
 	int normalize(int & n)
 	{
-		register int l = length();
+		int l = length();
 		count_leading_zeros(n, m[l - 1]);
 		if (n != 0)
 			mpn_lshift(m, m, l, n);
@@ -388,7 +388,7 @@ public:
 	friend void multiply_mod(udigit128 &r, const udigit128 & x,
 				 const udigit128 & y, const udigit128 & p)
 	{
-		register int n, plength = p.length();
+		int n, plength = p.length();
 		count_leading_zeros(n, p.m[plength - 1]);
 		digit paccu[C_LG+1];
 		if (n != 0)
--- lidia-2.3.0+latte-patches-2014-10-04/src/linear_algebra/bigint_matrix.cc.orig	2009-05-09 09:24:54.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/linear_algebra/bigint_matrix.cc	2021-03-18 14:30:39.126612169 -0600
@@ -96,9 +96,9 @@ matrix(const base_matrix< long > &M)
 				       "Error in memory allocation (value)");
 		}
 
-		register bigint *Atmp;
-		register long *Mtmp;
-		for (register lidia_size_t i = 0; i < rows; i++) {
+		bigint *Atmp;
+		long *Mtmp;
+		for (lidia_size_t i = 0; i < rows; i++) {
 			Atmp = new bigint[columns];
 			Mtmp = M.value[i];
 			memory_handler(Atmp, DMESSAGE,
@@ -106,7 +106,7 @@ matrix(const base_matrix< long > &M)
 				       "const MR< T > &) :: "
 				       "Error in memory allocation (Atmp)");
 
-			for (register lidia_size_t j = 0; j < columns; j++)
+			for (lidia_size_t j = 0; j < columns; j++)
 				Atmp[j] = bigint(Mtmp[j]);
 			value[i] = Atmp;
 		}
@@ -138,8 +138,8 @@ matrix(const base_matrix< long > &M)
 			       "constructor((MR< T > &, const MR< T > &) ::"
 			       "Error in memory allocation (allocated)");
 
-		for (register lidia_size_t i = 0; i < rows; i++) {
-			register lidia_size_t size = M.allocated[i];
+		for (lidia_size_t i = 0; i < rows; i++) {
+			lidia_size_t size = M.allocated[i];
 			if (size) {
 				index[i] = new lidia_size_t[size];
 				memory_handler(index[i], DMESSAGE,
@@ -151,7 +151,7 @@ matrix(const base_matrix< long > &M)
 					       "Error in memory allocation (value[i])");
 				value_counter[i] = M.value_counter[i];
 				allocated[i] = size;
-				for (register lidia_size_t p = 0; p < value_counter[i]; p++) {
+				for (lidia_size_t p = 0; p < value_counter[i]; p++) {
 					value[i][p] = bigint(M.value[i][p]);
 					index[i][p] = M.index[i][p];
 				}
@@ -861,7 +861,7 @@ lininr1(base_vector< lidia_size_t > &RES
 	if (RES.size() != tmp[0])
 		RES.set_size(tmp[0]);
 
-	for (register lidia_size_t i = 0; i <= tmp[0]; i++)
+	for (lidia_size_t i = 0; i <= tmp[0]; i++)
 		RES[i] = tmp[i];
 
 	delete[] tmp;
@@ -971,7 +971,7 @@ lininr2(base_vector< lidia_size_t > &RES
 	if (RES.size() != tmp[0])
 		RES.set_size(tmp[0]);
 
-	for (register lidia_size_t i = 0; i <= tmp[0]; i++)
+	for (lidia_size_t i = 0; i <= tmp[0]; i++)
 		RES[i] = tmp[i];
 
 	delete[] tmp;
@@ -1086,7 +1086,7 @@ lininc1(base_vector< lidia_size_t > &RES
 	if (RES.size() != tmp[0])
 		RES.set_size(tmp[0]);
 
-	for (register lidia_size_t i = 0; i <= tmp[0]; i++)
+	for (lidia_size_t i = 0; i <= tmp[0]; i++)
 		RES[i] = tmp[i];
 
 	delete[] tmp;
@@ -1197,7 +1197,7 @@ lininc2(base_vector< lidia_size_t > &RES
 	if (RES.size() != tmp[0])
 		RES.set_size(tmp[0]);
 
-	for (register lidia_size_t i = 0; i <= tmp[0]; i++)
+	for (lidia_size_t i = 0; i <= tmp[0]; i++)
 		RES[i] = tmp[i];
 
 	delete[] tmp;
@@ -4742,7 +4742,7 @@ mgcd1(const bigint * aconst, lidia_size_
 
 	debug_handler("multiple_gcd", "mgcd1(const bigint *, lidia_size_t)");
 
-	register lidia_size_t i, j, index, bound;
+	lidia_size_t i, j, index, bound;
 
 	bigint MIN, TMP, q, r, *Ttmp1, *Ttmp2 = NULL;
 
@@ -4829,7 +4829,7 @@ mgcd2(const bigint * aconst, lidia_size_
 
 	debug_handler("multiple_gcd", "mgcd2(const bigint *, lidia_size_t)");
 
-	register lidia_size_t i, j, index, bound, SW;
+	lidia_size_t i, j, index, bound, SW;
 	bigint MIN, TMP, q, r, *Ttmp1, *Ttmp2 = NULL;
 
 	if (columns != n)
--- lidia-2.3.0+latte-patches-2014-10-04/src/linear_algebra/bigmod_matrix.cc.orig	2010-01-30 08:01:31.000000000 -0700
+++ lidia-2.3.0+latte-patches-2014-10-04/src/linear_algebra/bigmod_matrix.cc	2021-03-18 14:31:55.229467755 -0600
@@ -34,7 +34,7 @@ void mnf_debug_info(const bigmod_matrix
                     const bigmod_matrix & IN, const bigmod_matrix & RES,
                     const bigmod_matrix &TRAFO, lidia_size_t res_j, const bigint & p)
 {
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	bigint * tmp, * TEMPtmp, *Ttmp, factor;
 	std::cout << std::endl << TEMP << T << IN << RES << std::flush;
 	for (i = 0; i < IN.get_no_of_columns(); i++) {
@@ -201,7 +201,7 @@ bigmod_matrix::bigmod_matrix(const base_
 	debug_handler("bigmod_matrix", "in constructor "
 		      "bigmod_matrix(const bigint_matrix &, const bigint &)");
 	if (!p.is_zero()) {
-		register lidia_size_t i, j;
+		lidia_size_t i, j;
 
 		bigint * tmp;
 
@@ -268,7 +268,7 @@ std::istream & operator >> (std::istream
 std::ostream & operator << (std::ostream & out, const bigmod_matrix & M)
 {
 	debug_handler("bigmod_matrix", "in operator << (std::ostream &, const bigmod_matrix &)");
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	bigint *Mtmp;
 	for (i = 0; i < M.rows; i++) {
 		Mtmp = M.value[i];
@@ -292,7 +292,7 @@ write_to_stream(std::ostream &out) const
 {
 	debug_handler("bigmod_matrix", "in member - function "
 		      "write_to_stream(std::ofstream &)");
-	register lidia_size_t i, j, TMP;
+	lidia_size_t i, j, TMP;
 	bigint *tmp;
 
 	out << rows << " " << columns << "\n" << std::flush;
@@ -351,9 +351,9 @@ void bigmod_matrix::reduce(const bigint
 	if (p.is_zero()) {
 		p = mod;
 		bigint * tmp1;
-		for (register lidia_size_t i = 0; i < rows; i++) {
+		for (lidia_size_t i = 0; i < rows; i++) {
 			tmp1 = value[i];
-			for (register lidia_size_t j = 0; j < columns; j++) {
+			for (lidia_size_t j = 0; j < columns; j++) {
 				LiDIA::remainder(tmp1[j], tmp1[j], mod);
 				if (tmp1[j].is_negative())
 					LiDIA::add(tmp1[j], tmp1[j], mod);
@@ -366,9 +366,9 @@ void bigmod_matrix::reduce(const bigint
 		if (!tmp) {
 			p = mod;
 			bigint * tmp1;
-			for (register lidia_size_t i = 0; i < rows; i++) {
+			for (lidia_size_t i = 0; i < rows; i++) {
 				tmp1 = value[i];
-				for (register lidia_size_t j = 0; j < columns; j++)
+				for (lidia_size_t j = 0; j < columns; j++)
 					LiDIA::remainder(tmp1[j], tmp1[j], mod);
 			}
 			image(*this);
@@ -389,7 +389,7 @@ void bigmod_matrix::lift(const bigint &
 	LiDIA::remainder(tmp, mod, p);
 	if (!tmp) {
 		set_no_of_columns(rows + columns);
-		for (register lidia_size_t i = rows; i; i--)
+		for (lidia_size_t i = rows; i; i--)
 			value[rows - i][columns-i].assign(p);
 		p = mod;
 		image(*this);
@@ -411,7 +411,7 @@ split(bigmod_matrix &A, bigmod_matrix &B
 {
 	debug_handler("bigmod_matrix", "in member - function "
 		      "split(bigmod_matrix &, bigmod_matrix &, bigmod_matrix &, bigmod_matrix &)");
-	register lidia_size_t i, j, diff, diff1;
+	lidia_size_t i, j, diff, diff1;
 	bigint *tmp, *tmp1;
 	if (A.rows > rows || A.columns > columns ||
 	    B.rows > rows || B.columns > columns ||
@@ -541,7 +541,7 @@ split_h(bigmod_matrix &A, bigmod_matrix
 	debug_handler("bigmod_matrix", "in member - function "
 		      "split_h(bigmod_matrix&, bigmod_matrix&)");
 
-	register lidia_size_t i, j, diff;
+	lidia_size_t i, j, diff;
 	bigint *tmp, *tmp1;
 	if (A.rows > rows || A.columns > columns ||
 	    B.rows > rows || B.columns > columns) {
@@ -611,7 +611,7 @@ split_v(bigmod_matrix &A, bigmod_matrix
 {
 	debug_handler("bigmod_matrix", "in member - function "
 		      "split_v(bigmod_matrix &, bigmod_matrix &)");
-	register lidia_size_t i, j, diff;
+	lidia_size_t i, j, diff;
 	bigint *tmp, *tmp1;
 	if (A.rows > rows || A.columns > columns ||
 	    B.rows > rows || B.columns > columns) {
@@ -682,7 +682,7 @@ compose(const bigmod_matrix &A, const bi
 	debug_handler("bigmod_matrix", "in member - function "
 		      "compose(const bigmod_matrix&, const bigmod_matrix&, "
 		      "const bigmod_matrix&, const bigmod_matrix&)");
-	register lidia_size_t i, j, diff, diff1;
+	lidia_size_t i, j, diff, diff1;
 	bigint *tmp, *tmp1;
 	if (A.rows > rows || A.columns > columns ||
 	    B.rows > rows || B.columns > columns ||
@@ -814,7 +814,7 @@ compose_h(const bigmod_matrix &A, const
 {
 	debug_handler("bigmod_matrix", "in member - function "
 		      "compose_h(const bigmod_matrix &, const bigmod_matrix &)");
-	register lidia_size_t i, j, diff;
+	lidia_size_t i, j, diff;
 	bigint *tmp, *tmp1;
 	if (A.rows > rows || A.columns > columns ||
 	    B.rows > rows || B.columns > columns) {
@@ -885,7 +885,7 @@ compose_v(const bigmod_matrix &A, const
 {
 	debug_handler("bigmod_matrix", "in member - function "
 		      "compose_v(const bigmod_matrix &, const bigmod_matrix &)");
-	register lidia_size_t i, j, diff;
+	lidia_size_t i, j, diff;
 	bigint *tmp, *tmp1;
 	if (A.rows > rows || A.columns > columns ||
 	    B.rows > rows || B.columns > columns) {
@@ -983,7 +983,7 @@ sto_column(const bigint *v, lidia_size_t
 {
 	debug_handler("Matrix", "in member - function "
 		      "sto_column(const bigint *, lidia_size_t, lidia_size_t)");
-	register lidia_size_t k;
+	lidia_size_t k;
 	if (j >= columns || rows < from + l || from < 0 || l < 0 || j < 0) {
 		lidia_error_handler("bigmod_matrix",
 				    "sto_column :: Parameter out of range !");
@@ -1010,7 +1010,7 @@ sto_column_vector(const base_vector< big
 {
 	debug_handler("Matrix", "in member - function "
 		      "sto_column_vector(const base_vector< bigint > &, lidia_size_t, lidia_size_t, lidia_size_t)");
-	register lidia_size_t k;
+	lidia_size_t k;
 	if (j >= columns || rows < from + l || from < 0 || l < 0 || j < 0) {
 		lidia_error_handler("bigmod_matrix",
 				    "sto_column :: Parameter out of range !");
@@ -1036,7 +1036,7 @@ sto_row(const bigint *v, lidia_size_t l,
 {
 	debug_handler("bigmod_matrix", "in member - function "
 		      "sto_row(const bigint *, lidia_size_t, lidia_size_t)");
-	register lidia_size_t k;
+	lidia_size_t k;
 	if (i >= rows || from + l > columns || from < 0 || l < 0 || i < 0) {
 		lidia_error_handler("bigmod_matrix",
 				    "sto_row :: Parameter out of range !");
@@ -1064,7 +1064,7 @@ sto_row_vector(const base_vector< bigint
 {
 	debug_handler("bigmod_matrix", "in member - function "
 		      "sto_row(const bigint *, lidia_size_t, lidia_size_t)");
-	register lidia_size_t k;
+	lidia_size_t k;
 	if (i >= rows || from + l > columns || from < 0 || l < 0 || i < 0) {
 		lidia_error_handler("bigmod_matrix",
 				    "sto_row :: Parameter out of range !");
@@ -1139,7 +1139,7 @@ add(bigmod_matrix &RES, const bigmod_mat
 	debug_handler("Matrix", "in function "
 		      "add(bigmod_matrix &, const bigmod_matrix &, const bigmod_matrix &)");
 
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	if (M.rows != N.rows || M.columns != N.columns) {
 		lidia_error_handler("bigmod_matrix", "add :: Error in matrix dimensions");
 		return;
@@ -1176,7 +1176,7 @@ add(bigmod_matrix &RES, const bigmod_mat
 		RES.set_no_of_columns(M.columns);
 	RES.p = M.p;
 
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	bigint *REStmp, *Mtmp;
 	for (i = 0; i < RES.rows; i++) {
 		REStmp = RES.value[i];
@@ -1192,7 +1192,7 @@ void
 negate(bigmod_matrix & A, const bigmod_matrix & B)
 {
 	debug_handler("bigmod_matrix", "in function negate()");
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	if (A.rows != B.rows)
 		A.set_no_of_rows(B.rows);
 	if (A.columns != B.columns)
@@ -1216,7 +1216,7 @@ subtract(bigmod_matrix &RES, const bigmo
 {
 	debug_handler("bigmod_matrix", "in function "
 		      "subtract(bigmod_matrix &, const bigmod_matrix &, const bigmod_matrix &)");
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	if (M.rows != N.rows || M.columns != N.columns) {
 		lidia_error_handler("bigmod_matrix", "subtract :: Error in matrix dimensions !");
 		return;
@@ -1254,7 +1254,7 @@ subtract(bigmod_matrix &RES, const bigmo
 		RES.set_no_of_columns(M.columns);
 	RES.p = M.p;
 
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	bigint *REStmp, *Mtmp;
 	for (i = 0; i < RES.rows; i++) {
 		REStmp = RES.value[i];
@@ -1282,7 +1282,7 @@ multiply(bigmod_matrix &RES, const bigmo
 	}
 	RES.p = A.p;
 
-	register lidia_size_t j, i, z;
+	lidia_size_t j, i, z;
 	bigint tmp, *Atmp, *REStmp, tmp1;
 
 	if (A.value != RES.value && B.value != RES.value) {
@@ -1342,7 +1342,7 @@ multiply(bigmod_matrix & RES, const bigm
 	if (RES.columns != A.columns)
 		RES.set_no_of_columns(A.columns);
 
-	register lidia_size_t j, i;
+	lidia_size_t j, i;
 	bigint *REStmp, *Atmp;
 	for (j = 0; j < A.rows; j++) {
 		REStmp = RES.value[j];
@@ -1359,7 +1359,7 @@ multiply(bigint *c, const bigmod_matrix
 {
 	debug_handler("bigmod_matrix", "in function "
 		      "multiply(bigint *, const bigmod_matrix &, const bigint *)");
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	bigint tmp, tmp1, *tmp2;
 	for (i = 0; i < A.rows; i++) {
 		tmp.assign_zero();
@@ -1383,7 +1383,7 @@ bool divide(bigmod_matrix &C, const bigm
 	if (C.columns != A.columns)
 		C.set_no_of_columns(A.columns);
 
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	bigint tmp, *tmp1, *tmp2;
 	LiDIA::div_rem(C.p, tmp, A.p, n);
 	if (!tmp.is_zero()) return false;
@@ -1559,7 +1559,7 @@ void bigmod_matrix::
 assign(const bigmod_matrix &M)
 {
 	debug_handler("bigmod_matrix", "in member - function assign(const bigmod_matrix &)");
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	if (rows != M.rows)
 		set_no_of_rows(M.rows);
 	if (columns != M.columns)
@@ -1592,7 +1592,7 @@ assign(const base_matrix< bigint > &M, c
 	debug_handler("bigmod_matrix", "in member - function "
 		      "assign(const base_matrix< bigint > &, const bigint &)");
 
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	if (rows != M.get_no_of_rows())
 		set_no_of_rows(M.get_no_of_rows());
 	if (columns != M.get_no_of_columns())
@@ -1650,7 +1650,7 @@ equal(const bigmod_matrix &N) const
 {
 	debug_handler("bigmod_matrix", "in member - function "
 		      "equal(const bigmod_matrix &)");
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	bigint *tmp, *Ntmp;
 	if (rows != N.rows)
 		return false;
@@ -1726,7 +1726,7 @@ randomize(const bigint & S)
 
 	debug_handler("bigmod_matrix", "in member - function "
 		      "randomize(const bigint &)");
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	bigint *tmp;
 	p.assign(S);
 	bigint::seed(S);
@@ -1748,7 +1748,7 @@ diag(const bigint & a, const bigint & b)
 {
 	debug_handler("bigmod_matrix", "in member - function "
 		      "diag(const bigint &, const bigint &)");
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	bigint *tmp;
 	bigint a1, b1;
 	if (!p) {
@@ -1794,7 +1794,7 @@ trans() const
 {
 	debug_handler("bigmod_matrix", "in member - function "
 		      "trans()");
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	bigint *tmp;
 	bigmod_matrix AT(columns, rows, p);
 	for (i = 0; i < rows; i++) {
@@ -1826,9 +1826,9 @@ regexpansion(const lidia_size_t *v)
 {
 	debug_handler("bigmod_matrix", "in member - function "
 		      "regexpansion(const lidia_size_t *)");
-	register lidia_size_t k = v[0];
+	lidia_size_t k = v[0];
 	if (columns > k) {
-		register lidia_size_t i = 0, j = 0;
+		lidia_size_t i = 0, j = 0;
 		lidia_size_t diff = columns-rows;
 		bigmod_matrix A(*this);
 		set_no_of_rows(columns);
@@ -1868,7 +1868,7 @@ lininr(bigint & factor) const
 {
 	debug_handler("bigmod_matrix", "in member - function "
 		      "lininr()");
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	lidia_size_t *l = new lidia_size_t[columns+1];
 
 	bigmod_matrix B(*this);
@@ -1926,7 +1926,7 @@ inv(const bigmod_matrix& A, bigint & fac
 		lidia_error_handler("bigmod_matrix", "adj :: non square matrix");
 		return;
 	}
-	register lidia_size_t i, j, z;
+	lidia_size_t i, j, z;
 
 	// Step 1,2
 	if (columns != A.rows)
@@ -2125,7 +2125,7 @@ charpoly(bigint & factor) const
 {
 	debug_handler("bigmod_matrix", "in member - function "
 		      "charpoly(bigint &)");
-	register lidia_size_t i, j, r;
+	lidia_size_t i, j, r;
 	bigint tmp;
 	bigint sign;
 	bigmod_matrix B(*this);
@@ -2451,7 +2451,7 @@ kernel(const bigmod_matrix & A, bigint &
 
 
 	// Step 2
-	register lidia_size_t a = 0;
+	lidia_size_t a = 0;
 	while (a < COPY.columns && COPY.is_column_zero(a))
 		a++;
 	if (a == 0) {
@@ -2465,7 +2465,7 @@ kernel(const bigmod_matrix & A, bigint &
 	set_no_of_columns(a);
 	p = COPY.p;
 	bigint *KERNtmp, *TRANStmp;
-	register lidia_size_t i, z;
+	lidia_size_t i, z;
 	for (i = 0; i < COPY.columns; i++) {
 		KERNtmp = value[i];
 		TRANStmp = TRANS.value[i];
@@ -2525,14 +2525,14 @@ image(const bigmod_matrix &A, bigint & f
 		return;
 	}
 
-	register lidia_size_t a = 0;
+	lidia_size_t a = 0;
 	// Step 2
 	while (a < columns && is_column_zero(a))
 		a++;
 
 	// Step 3
 	bigint *BILDtmp, *tmp;
-	register lidia_size_t i, z;
+	lidia_size_t i, z;
 	for (i = 0; i < rows; i++) {
 		BILDtmp = value[i];
 		tmp = value[i];
@@ -2572,7 +2572,7 @@ solve(const bigmod_matrix &B, const bigi
 		factor.assign_one();
 		return;
 	}
-	register lidia_size_t i, k, l1 = 0;
+	lidia_size_t i, k, l1 = 0;
 	bigint tmprem;
 
 	// Step 1
@@ -2658,7 +2658,7 @@ solve(const bigmod_matrix &B, const base
 		assign(tmp);
 		return;
 	}
-	register lidia_size_t i, k, l1 = 0;
+	lidia_size_t i, k, l1 = 0;
 	bigint tmprem;
 
 	// Step 1
@@ -2750,7 +2750,7 @@ void bigmod_matrix::kernel(const bigmod_
 		assign(tmp);
 		return;
 	}
-	register lidia_size_t z = 0, i;
+	lidia_size_t z = 0, i;
 	bigmod_matrix COPY(A);
 
 	p.assign(A.p);
@@ -2760,9 +2760,9 @@ void bigmod_matrix::kernel(const bigmod_
 		set_no_of_rows(A.columns);
 	diag(1, 0);
 
-	register lidia_size_t j, act_row, index;
-	register lidia_size_t res_j = A.columns - 1;
-	register char SW;
+	lidia_size_t j, act_row, index;
+	lidia_size_t res_j = A.columns - 1;
+	char SW;
 	bigint factor, q, tmp1;
 	bigint *tmp, *tmp2, *TEMPtmp;
 
@@ -2965,10 +2965,10 @@ void bigmod_matrix::image(const bigmod_m
 //  std::cout <<"Computing image of "<<(*this)<<std::endl;
 	// Step 1
 	bigmod_matrix RES(rows, columns, p);
-	register lidia_size_t i, j, act_row, act_column = columns-1;
-	register lidia_size_t res_j = act_column;
-	register lidia_size_t index;
-	register char SW, SAVE = 1;
+	lidia_size_t i, j, act_row, act_column = columns-1;
+	lidia_size_t res_j = act_column;
+	lidia_size_t index;
+	char SW, SAVE = 1;
 	bigint factor, q, tmp1;
 	bigint *tmp, *tmp2;
 
@@ -3102,7 +3102,7 @@ void bigmod_matrix::image(const bigmod_m
 	}
 //   std::cout <<"temporary image is "<<RES<<std::endl;
 	// Count zero columns.
-	register lidia_size_t a = 0;
+	lidia_size_t a = 0;
 	while (a < RES.columns && RES.is_column_zero(a))
 		a++;
 
@@ -3151,10 +3151,10 @@ void bigmod_matrix::unique_image(const b
 
 	// Step 1
 	bigmod_matrix RES(rows, rows, p);
-	register lidia_size_t i, j, act_row, act_column = columns - 1;
-	register lidia_size_t res_j = rows;
-	register lidia_size_t index;
-	register char SW;
+	lidia_size_t i, j, act_row, act_column = columns - 1;
+	lidia_size_t res_j = rows;
+	lidia_size_t index;
+	char SW;
 	bigint factor, q, tmp1;
 	bigint *tmp, *tmp2;
 
--- lidia-2.3.0+latte-patches-2014-10-04/src/linear_algebra/crt_and_prime_handling.cc.orig	2009-05-09 09:24:54.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/linear_algebra/crt_and_prime_handling.cc	2021-03-18 14:32:11.660436575 -0600
@@ -66,7 +66,7 @@ namespace LiDIA {
 	debug_handler_l(DMESSAGE, "in function "
 			"chinrest(bigint &, const bigint *, const bigint *)", DVALUE);
 
-	register lidia_size_t i;
+	lidia_size_t i;
 	bigint M, mod;
 	bigint TMP, TMP0, TMP1, TMP2;
 
@@ -121,7 +121,7 @@ namespace LiDIA {
 	debug_handler_l(DMESSAGE, "in function "
 			"chinrest(bigint &, const bigint *, const bigint *)", DVALUE);
 
-	register lidia_size_t i;
+	lidia_size_t i;
 	bigint M, mod;
 	bigint TMP, TMP0, TMP1, TMP2;
 
--- lidia-2.3.0+latte-patches-2014-10-04/src/linear_algebra/field_matrix_appl.cc.orig	2009-05-09 09:24:54.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/linear_algebra/field_matrix_appl.cc	2021-03-18 14:33:42.508264180 -0600
@@ -59,7 +59,7 @@ int main_LiDIA(int argc, char* argv[])
 	std::ifstream in(IN_NAME);
 	std::ofstream dz(OUT_NAME);
 
-	register int i, j;
+	int i, j;
 
 	// pointer
 	TYPE *pointer_1 = NULL;
--- lidia-2.3.0+latte-patches-2014-10-04/src/linear_algebra/file_adjoint.cc.orig	2009-05-09 09:24:54.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/linear_algebra/file_adjoint.cc	2021-03-18 14:34:05.804219973 -0600
@@ -129,7 +129,7 @@ void
 file_adjoint::touch_files()
 {
 	// touch all temporary files in order to give current date stamps
-	register lidia_size_t i;
+	lidia_size_t i;
 	char command[100];
 
 	for (i = 0; i < num_files; ++i) {
@@ -162,7 +162,7 @@ file_adjoint::add_new_prime(matrix< bigi
 {
 	debug_handler("file_adjoint", "add_new_prime");
 
-	register lidia_size_t j, k, curr_rows, nrows;
+	lidia_size_t j, k, curr_rows, nrows;
 	lidia_size_t i;
 	FILE *out;
 	char fname[50];
@@ -232,7 +232,7 @@ file_adjoint::test_adjoint(matrix< bigin
 {
 	debug_handler("file_adjoint", "test_adjoint");
 
-	register lidia_size_t i, j, k, l, nrows;
+	lidia_size_t i, j, k, l, nrows;
 	lidia_size_t idx;
 	bigint ajk, val;
 	matrix< bigint > ADJ;
@@ -277,7 +277,7 @@ file_adjoint::test_adjoint_diag(matrix<
 {
 	debug_handler("file_adjoint", "test_adjoint_diag");
 
-	register lidia_size_t i, j, k, l, nrows;
+	lidia_size_t i, j, k, l, nrows;
 	lidia_size_t idx;
 	bigint ajk, val;
 	matrix< bigint > ADJ;
@@ -330,7 +330,7 @@ file_adjoint::multiply(math_vector< bigi
 {
 	debug_handler("file_adjoint", "multiply(vector)");
 
-	register lidia_size_t i, j, k, nrows;
+	lidia_size_t i, j, k, nrows;
 	lidia_size_t idx;
 	bigint ajk;
 	matrix< bigint > ADJ;
@@ -372,7 +372,7 @@ file_adjoint::multiply(matrix< bigint >
 {
 	debug_handler("file_adjoint", "multiply(matrix)");
 
-	register lidia_size_t i, j, k, l, nrows;
+	lidia_size_t i, j, k, l, nrows;
 	lidia_size_t idx;
 	bigint ajk, tmp;
 	matrix< bigint > ADJ;
@@ -418,7 +418,7 @@ file_adjoint::combine_rows(matrix< bigin
 {
 	debug_handler("file_adjoint", "combine_rows");
 
-	register lidia_size_t i, j, k;
+	lidia_size_t i, j, k;
 	bigint MODULUS, MOD;
 	long lrows, lcols, val;
 	FILE *in;
--- lidia-2.3.0+latte-patches-2014-10-04/src/linear_algebra/include/LiDIA/bigint_matrix.h.orig	2009-05-09 09:24:48.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/linear_algebra/include/LiDIA/bigint_matrix.h	2021-03-18 14:34:39.565155905 -0600
@@ -156,8 +156,8 @@ public:
 	operator bigfloat_matrix()
 	{
 		bigfloat_matrix B(rows, columns, bitfield);
-		for (register lidia_size_t i = 0; i < rows; i++)
-			for (register lidia_size_t j = 0; j < columns; j++)
+		for (lidia_size_t i = 0; i < rows; i++)
+			for (lidia_size_t j = 0; j < columns; j++)
 				B.sto(i, j, bigfloat(value[i][j]));
 		return B;
 	}
--- lidia-2.3.0+latte-patches-2014-10-04/src/linear_algebra/include/LiDIA/matrix/bigint_matrix_algorithms.cc.orig	2009-05-09 09:24:47.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/linear_algebra/include/LiDIA/matrix/bigint_matrix_algorithms.cc	2021-03-18 14:37:35.725821704 -0600
@@ -61,7 +61,7 @@ inline void bigint_matrix_algorithms< RE
 divide(matrix< bigint > &RES, const matrix< bigint > &A,
        const bigint &k) const
 {
-	register lidia_size_t j, i;
+	lidia_size_t j, i;
 	bigint TMP;
 
 	for (j = 0; j < A.rows; j++)
@@ -78,7 +78,7 @@ inline void bigint_matrix_algorithms< RE
 compwise_divide(matrix< bigint > &RES, const matrix< bigint > &A,
 		const matrix< bigint > &B) const
 {
-	register lidia_size_t j, i;
+	lidia_size_t j, i;
 	bigint TMP;
 
 	for (j = 0; j < RES.rows; j++)
@@ -275,7 +275,7 @@ kernel1(matrix< bigint > &RES, const mat
 		dense_fp_matrix_kernel< bigint, MR < bigint > > > Dm_bigint_modul;
 
 	bigint *ZBAtmp, *Atmp;
-	register long i, j;
+	long i, j;
 	lidia_size_t c = A.columns;
 
 	// Step 1
@@ -323,7 +323,7 @@ kernel2(matrix< bigint > &RES, const mat
 	debug_handler_l(DMESSAGE, "in member - function "
 			"kernel2(const matrix< bigint > &)", DVALUE + 8);
 
-	register lidia_size_t i;
+	lidia_size_t i;
 	matrix< bigint > B = A;
 	B.hnf_havas(RES);
 
@@ -358,7 +358,7 @@ reginvimage1(matrix< bigint > &RES, cons
 	debug_handler_l(DMESSAGE, "reginvimage1(const matrix< bigint > &, const matrix< bigint > &",
 			DVALUE + 8);
 
-	register long i, j;
+	long i, j;
 	bigint TMP, TMP1;
 
 	// Step 1
@@ -420,7 +420,7 @@ reginvimage2(matrix< bigint > &RES, cons
 	debug_handler_l(DMESSAGE, "in member - function "
 			"reginvimage2(const matrix< bigint > &, const matrix< bigint > &", DVALUE + 8);
 
-	register lidia_size_t i, j, len, oldlen;
+	lidia_size_t i, j, len, oldlen;
 	bigint TMP, TMP1;
 
 	// Step 1
@@ -476,7 +476,7 @@ void modular_bigint_matrix_algorithms< R
 image1(matrix< bigint > &RES, const matrix< bigint > & A, const bigint &H) const
 {
 	bigint *ZBAtmp, *Atmp;
-	register long i, j;
+	long i, j;
 
 	// Step 1
 	const modular_arithmetic< DRMK < bigint >,
@@ -524,7 +524,7 @@ template< class REP, class SINGLE_MODUL,
 inline void modular_bigint_matrix_algorithms< REP, SINGLE_MODUL, MULTI_MODUL >::
 image2(matrix< bigint > &RES, const matrix< bigint > & A) const
 {
-	register lidia_size_t i;
+	lidia_size_t i;
 	RES.assign(A);
 	RES.hnf_havas();
 
@@ -559,7 +559,7 @@ invimage(matrix< bigint > &RES, const ma
 				    "invimage(const matrix< bigint > & B, const bigint * b)",
 				    DMESSAGE, EMESSAGE[1]);
 
-	register long i;
+	long i;
 	bigint *tmp;
 
 	// Step 1
@@ -610,7 +610,7 @@ invimage(matrix< bigint > &RES, const ma
 	debug_handler_l(DMESSAGE, "in member - function "
 			"invimage(const matrix< bigint > &, const math_vector< bigint > &)", DVALUE + 8);
 
-	register long i;
+	long i;
 	// Step 1
 	matrix< bigint > A = B;
 	A.set_no_of_columns(B.columns + 1);
@@ -672,10 +672,10 @@ snf_hartley(matrix< bigint > &RES) const
 	debug_handler_l(DMESSAGE, "in member - function "
 			"snf_hartley()", DVALUE + 8);
 
-	register lidia_size_t startr, startc, TEILBARKEIT;
+	lidia_size_t startr, startc, TEILBARKEIT;
 	bigint TMP1, TMP2;
 	bigint *tmp;
-	register lidia_size_t xpivot, ypivot, i, j, z;
+	lidia_size_t xpivot, ypivot, i, j, z;
 
 	for (startc = 0, startr = 0; startr < RES.rows && startc < RES.columns; startr++, startc++) {
 
@@ -779,10 +779,10 @@ snf_hartley(matrix< bigint > &RES, matri
 	debug_handler_l(DMESSAGE, "in member - function "
 			"snf_hartley(matrix< bigint > &, matrix< bigint > &)", DVALUE + 8);
 
-	register lidia_size_t startr, startc, TEILBARKEIT;
+	lidia_size_t startr, startc, TEILBARKEIT;
 	bigint TMP1, TMP2;
 	lidia_size_t xpivot, ypivot;
-	register lidia_size_t i, j, z;
+	lidia_size_t i, j, z;
 
 	for (startc = 0, startr = 0; startr < RES.rows && startc < RES.columns; startr++, startc++) {
 
@@ -911,7 +911,7 @@ snf_simple(matrix< bigint > &RES) const
 	matrix< bigint > TR2(RES.columns, RES.columns);
 
 	bigint *REM;
-	register lidia_size_t startr, startc, pivot, i, j, z, TEILBARKEIT;
+	lidia_size_t startr, startc, pivot, i, j, z, TEILBARKEIT;
 
 	for (startc = 0, startr = 0; startr < RES.rows && startc < RES.columns; startr++, startc++) {
 
@@ -1002,7 +1002,7 @@ snf_simple(matrix< bigint > &RES, matrix
 	matrix< bigint > TR1 = T1;
 	matrix< bigint > TR2 = T2;
 	bigint *REM;
-	register lidia_size_t startr, startc, pivot, i, j, z, TEILBARKEIT;
+	lidia_size_t startr, startc, pivot, i, j, z, TEILBARKEIT;
 
 	for (startc = 0, startr = 0; startr < RES.rows && startc < RES.columns; startr++, startc++) {
 
@@ -1099,11 +1099,11 @@ snf_havas(matrix< bigint > &RES) const
 	debug_handler_l(DMESSAGE, "in member - function "
 			"snf_havas()", DVALUE + 8);
 
-	register lidia_size_t i, j, z, index;
+	lidia_size_t i, j, z, index;
 	bigint PIVOT;
 	bigint *tmp = NULL;
 
-	register lidia_size_t startr, startc, xpivot, ypivot, SW, TEILBARKEIT;
+	lidia_size_t startr, startc, xpivot, ypivot, SW, TEILBARKEIT;
 	bigint TMP1, TMP2;
 
 	for (startc = 0, startr = 0; startr < RES.rows && startc < RES.columns; startr++, startc++) {
@@ -1215,11 +1215,11 @@ snf_havas(matrix< bigint > &RES, matrix<
 	debug_handler_l(DMESSAGE, "in member - function "
 			"snf_havas(matrix< bigint > &, matrix< bigint > &)", DVALUE + 8);
 
-	register lidia_size_t i, j, z, index;
+	lidia_size_t i, j, z, index;
 	bigint PIVOT;
 	bigint *tmp = NULL;
 
-	register lidia_size_t startr, startc, xpivot, ypivot, SW, TEILBARKEIT;
+	lidia_size_t startr, startc, xpivot, ypivot, SW, TEILBARKEIT;
 	bigint TMP1, TMP2;
 
 	for (startc = 0, startr = 0; startr < RES.rows && startc < RES.columns; startr++, startc++) {
@@ -1347,11 +1347,11 @@ snf_mult(matrix< bigint > &RES, long art
 {
 	debug_handler_l(DMESSAGE, "in member - function "
 			"snf_mult(matrix< bigint > &, matrix< bigint > &)", DVALUE + 8);
-	register lidia_size_t i, j, z, index, SW;
+	lidia_size_t i, j, z, index, SW;
 	bigint TMP1, TMP2;
 	bigint *tmp = NULL;
 
-	register lidia_size_t startr, startc, xpivot, ypivot, TEILBARKEIT;
+	lidia_size_t startr, startc, xpivot, ypivot, TEILBARKEIT;
 	bigint ROW, COLUMN, PIVOT, NORM;
 
 	for (startc = 0, startr = 0; startr < RES.rows && startc < RES.columns; startr++, startc++) {
@@ -1483,11 +1483,11 @@ snf_mult(matrix< bigint > &RES, matrix<
 	debug_handler_l(DMESSAGE, "in member - function "
 			"snf_mult(matrix< bigint > &, matrix< bigint > &)", DVALUE + 8);
 
-	register lidia_size_t i, j, z, index, SW;
+	lidia_size_t i, j, z, index, SW;
 	bigint TMP1, TMP2;
 	bigint *tmp = NULL;
 
-	register lidia_size_t startr, startc, xpivot, ypivot, TEILBARKEIT;
+	lidia_size_t startr, startc, xpivot, ypivot, TEILBARKEIT;
 	bigint ROW, COLUMN, PIVOT, NORM;
 
 	for (startc = 0, startr = 0; startr < RES.rows && startc < RES.columns; startr++, startc++) {
@@ -1636,11 +1636,11 @@ snf_add(matrix< bigint > &RES, long art)
 	debug_handler_l(DMESSAGE, "in member - function "
 			"snf_add(long)", DVALUE + 8);
 
-	register lidia_size_t i, j, z, index, SW;
+	lidia_size_t i, j, z, index, SW;
 	bigint TMP1, TMP2;
 	bigint *tmp = NULL;
 
-	register lidia_size_t startr, startc, xpivot, ypivot, TEILBARKEIT;
+	lidia_size_t startr, startc, xpivot, ypivot, TEILBARKEIT;
 	bigint ROW, COLUMN, PIVOT, NORM;
 
 	for (startc = 0, startr = 0; startr < RES.rows && startc < RES.columns; startr++, startc++) {
@@ -1772,11 +1772,11 @@ snf_add(matrix< bigint > &RES, matrix< b
 	debug_handler_l(DMESSAGE, "in member - function "
 			"snf_add(matrix< bigint > &, matrix< bigint > &, long)", DVALUE + 8);
 
-	register lidia_size_t i, j, z, index, SW;
+	lidia_size_t i, j, z, index, SW;
 	bigint TMP1, TMP2;
 	bigint *tmp = NULL;
 
-	register lidia_size_t startr, startc, xpivot, ypivot, TEILBARKEIT;
+	lidia_size_t startr, startc, xpivot, ypivot, TEILBARKEIT;
 	bigint ROW, COLUMN, PIVOT, NORM;
 
 	for (startc = 0, startr = 0; startr < RES.rows && startc < RES.columns; startr++, startc++) {
@@ -1925,11 +1925,11 @@ snf_new(matrix< bigint > &RES, long art)
 	debug_handler_l(DMESSAGE, "in member - function "
 			"snf_new(long)", DVALUE + 8);
 
-	register lidia_size_t i, j, z, index, SW;
+	lidia_size_t i, j, z, index, SW;
 	bigint TMP1, TMP2;
 	bigint *tmp = NULL;
 
-	register lidia_size_t startr, startc, xpivot, ypivot, TEILBARKEIT;
+	lidia_size_t startr, startc, xpivot, ypivot, TEILBARKEIT;
 	bigint ROW, COLUMN, PIVOT, NORM;
 
 	bigint *RO = new bigint[RES.rows];
@@ -2066,11 +2066,11 @@ snf_new(matrix< bigint > &RES, matrix< b
 {
 	debug_handler_l(DMESSAGE, "in member - function "
 			"snf_new(matrix< bigint > &, matrix< bigint > &, long)", DVALUE + 8);
-	register lidia_size_t i, j, z, index, SW;
+	lidia_size_t i, j, z, index, SW;
 	bigint TMP1, TMP2;
 	bigint *tmp = NULL;
 
-	register lidia_size_t startr, startc, xpivot, ypivot, TEILBARKEIT;
+	lidia_size_t startr, startc, xpivot, ypivot, TEILBARKEIT;
 	bigint ROW, COLUMN, PIVOT, NORM;
 
 	bigint *RO = new bigint[RES.rows];
@@ -2227,7 +2227,7 @@ snfmod_dkt(matrix< bigint > &RES, const
 	debug_handler_l(DMESSAGE, "in member - function "
 			"snfmod_dkt(const bigint &)", DVALUE + 8);
 
-	register lidia_size_t diagindex, j, z, l;
+	lidia_size_t diagindex, j, z, l;
 
 	bigint RES0, RES1, RES2, RES3; // 0 = lggT, 1 = rggt, 2 = ggt
 	bigint x, y;
@@ -2329,7 +2329,7 @@ snfmod_cohen(matrix< bigint > &RES, cons
 	debug_handler_l(DMESSAGE, "in member - function "
 			"snfmod_cohen(const bigint &)", DVALUE + 8);
 
-	register lidia_size_t diagindex, j, z, l;
+	lidia_size_t diagindex, j, z, l;
 
 	bigint RES0, RES1, RES2, RES3; // 0 = lggT, 1 = rggt, 2 = ggt
 	bigint x, y;
@@ -2429,7 +2429,7 @@ gauss(matrix< bigint > &RES) const
 
 	matrix< bigint > TR(RES.columns, RES.columns);
 	bigint *REM = NULL;
-	register lidia_size_t startr = 0, startc = 0, i;
+	lidia_size_t startr = 0, startc = 0, i;
 
 	for (startc = RES.columns - 1, startr = RES.rows - 1; startr >= 0 && startc >= 0; startr--, startc--) {
 
@@ -2567,7 +2567,7 @@ mgcd2(matrix< bigint > &RES, const bigin
 	debug_handler("multiple_gcd", "in member - function "
 		      "mgcd2(const bigint *, lidia_size_t)");
 
-	register lidia_size_t i, j, index, bound, SW;
+	lidia_size_t i, j, index, bound, SW;
 	bigint MIN, TMP, q, r, *Ttmp1, *Ttmp2 = NULL;
 
 	if (RES.columns != n)
--- lidia-2.3.0+latte-patches-2014-10-04/src/linear_algebra/include/LiDIA/matrix/dense_bigint_matrix_kernel.cc.orig	2009-05-09 09:24:47.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/linear_algebra/include/LiDIA/matrix/dense_bigint_matrix_kernel.cc	2021-03-18 14:38:52.284676439 -0600
@@ -91,7 +91,7 @@ dense_bigint_matrix_kernel< MATRIX_TYPE
 						   const MATRIX_TYPE &A,
 						   const bigint &k) const
 {
-	register lidia_size_t j, i;
+	lidia_size_t j, i;
 	bigint *REStmp, *Atmp;
 
 	for (j = 0; j < A.rows; j++) {
@@ -110,7 +110,7 @@ dense_bigint_matrix_kernel< MATRIX_TYPE
 							    const MATRIX_TYPE &A,
 							    const MATRIX_TYPE &B) const
 {
-	register lidia_size_t j, i;
+	lidia_size_t j, i;
 	bigint *REStmp, *Atmp, *Btmp;
 
 	for (j = 0; j < RES.rows; j++) {
@@ -135,8 +135,8 @@ dense_bigint_matrix_kernel< MATRIX_TYPE
 {
 	MAX.assign(RES.value[0][0]);
 
-	register lidia_size_t i, j;
-	register bigint *tmp;
+	lidia_size_t i, j;
+	bigint *tmp;
 
 	for (i = 0; i < RES.rows; i++) {
 		tmp = RES.value[i];
@@ -155,8 +155,8 @@ dense_bigint_matrix_kernel< MATRIX_TYPE
 {
 	MAX.assign(abs(RES.value[0][0]));
 
-	register lidia_size_t i, j;
-	register bigint *tmp;
+	lidia_size_t i, j;
+	bigint *tmp;
 
 	for (i = 0; i < RES.rows; i++) {
 		tmp = RES.value[i];
@@ -179,8 +179,8 @@ dense_bigint_matrix_kernel< MATRIX_TYPE
 	x = 0;
 	y = 0;
 
-	register lidia_size_t i, j;
-	register bigint *tmp;
+	lidia_size_t i, j;
+	bigint *tmp;
 
 	for (i = 0; i < RES.rows; i++) {
 		tmp = RES.value[i];
@@ -206,8 +206,8 @@ dense_bigint_matrix_kernel< MATRIX_TYPE
 	x = 0;
 	y = 0;
 
-	register lidia_size_t i, j;
-	register bigint *tmp;
+	lidia_size_t i, j;
+	bigint *tmp;
 
 	for (i = 0; i < RES.rows; i++) {
 		tmp = RES.value[i];
@@ -228,8 +228,8 @@ dense_bigint_matrix_kernel< MATRIX_TYPE
 {
 	MIN.assign(RES.value[0][0]);
 
-	register lidia_size_t i, j;
-	register bigint *tmp;
+	lidia_size_t i, j;
+	bigint *tmp;
 
 	for (i = 0; i < RES.rows; i++) {
 		tmp = RES.value[i];
@@ -248,8 +248,8 @@ dense_bigint_matrix_kernel< MATRIX_TYPE
 {
 	MIN.assign(abs(RES.value[0][0]));
 
-	register lidia_size_t i, j;
-	register bigint *tmp;
+	lidia_size_t i, j;
+	bigint *tmp;
 
 	for (i = 0; i < RES.rows; i++) {
 		tmp = RES.value[i];
@@ -272,8 +272,8 @@ dense_bigint_matrix_kernel< MATRIX_TYPE
 	x = 0;
 	y = 0;
 
-	register lidia_size_t i, j;
-	register bigint *tmp;
+	lidia_size_t i, j;
+	bigint *tmp;
 
 	for (i = 0; i < RES.rows; i++) {
 		tmp = RES.value[i];
@@ -299,8 +299,8 @@ dense_bigint_matrix_kernel< MATRIX_TYPE
 	x = 0;
 	y = 0;
 
-	register lidia_size_t i, j;
-	register bigint *tmp;
+	lidia_size_t i, j;
+	bigint *tmp;
 
 	for (i = 0; i < RES.rows; i++) {
 		tmp = RES.value[i];
@@ -320,7 +320,7 @@ void
 dense_bigint_matrix_kernel< MATRIX_TYPE >::hadamard (const MATRIX_TYPE &RES,
 						     bigint & H) const
 {
-	register lidia_size_t min, max, i, j;
+	lidia_size_t min, max, i, j;
 
 	if (RES.columns < RES.rows) {
 		min = RES.columns;
@@ -331,11 +331,11 @@ dense_bigint_matrix_kernel< MATRIX_TYPE
 		max = RES.columns;
 	}
 
-	register bigint *tmp;
+	bigint *tmp;
 	bigint TMP;
 
 	// Step 1 - 11
-	register bigint *h = new bigint[max];
+	bigint *h = new bigint[max];
 	memory_handler(h, DMESSAGE, "hadamard :: "
 		       "Error in memory allocation (h)");
 
@@ -398,7 +398,7 @@ dense_bigint_matrix_kernel< MATRIX_TYPE
 	else
 		M.assign(ROWS);
 
-	register lidia_size_t B = M.bit_length() - 1;
+	lidia_size_t B = M.bit_length() - 1;
 	bigint E = (bigint(B) / bigint(2)) + bigint(2);
 	power(H, bigint(2), E);
 	dec(H);
@@ -411,19 +411,19 @@ void
 dense_bigint_matrix_kernel< MATRIX_TYPE >::binary_hadamard (const MATRIX_TYPE &RES,
 							    lidia_size_t & H) const
 {
-	register lidia_size_t min = (RES.columns < RES.rows) ? RES.columns : RES.rows;
-	register lidia_size_t i, j;
+	lidia_size_t min = (RES.columns < RES.rows) ? RES.columns : RES.rows;
+	lidia_size_t i, j;
 
 	// Computation of row and column norms
-	register bigint *Wrows = new bigint[RES.rows];
+	bigint *Wrows = new bigint[RES.rows];
 	memory_handler(Wrows, DMESSAGE, "hadamard :: "
 		       "Error in memory allocation (Wrows)");
 
-	register bigint *Wcolumns = new bigint[RES.columns];
+	bigint *Wcolumns = new bigint[RES.columns];
 	memory_handler(Wcolumns, DMESSAGE, "hadamard :: "
 		       "Error in memory allocation (Wcolumns)");
 
-	register bigint *tmp;
+	bigint *tmp;
 	bigint TMP;
 
 	for (i = 0; i < RES.rows; i++) {
@@ -470,7 +470,7 @@ dense_bigint_matrix_kernel< MATRIX_TYPE
 	delete[] Wrows;
 
 	// Hadamard
-	register lidia_size_t B = ((COLUMNS < ROWS) ? COLUMNS.bit_length() : ROWS.bit_length()) - 1;
+	lidia_size_t B = ((COLUMNS < ROWS) ? COLUMNS.bit_length() : ROWS.bit_length()) - 1;
 	H = B / 2 + 2;
 }
 
@@ -486,9 +486,9 @@ dense_bigint_matrix_kernel< MATRIX_TYPE
 	RES.assign_zero();
 
 	bigint TMP;
-	register bigint *tmp = M.value[pos];
+	bigint *tmp = M.value[pos];
 
-	register lidia_size_t i;
+	lidia_size_t i;
 
 	if (art != 0)
 		for (i = 0; i < M.columns; i++) {
@@ -515,7 +515,7 @@ dense_bigint_matrix_kernel< MATRIX_TYPE
 
 	bigint TMP;
 
-	register lidia_size_t i;
+	lidia_size_t i;
 	if (art != 0)
 		for (i = 0; i < M.rows; i++) {
 			power(TMP, M.value[i][pos], art);
@@ -539,8 +539,8 @@ inline void
 dense_bigint_matrix_kernel< MATRIX_TYPE >::randomize (MATRIX_TYPE &RES,
 						      const bigint & S) const
 {
-	register lidia_size_t i, j;
-	register bigint *tmp;
+	lidia_size_t i, j;
+	bigint *tmp;
 
 	bigint::seed(S);
 
@@ -559,8 +559,8 @@ dense_bigint_matrix_kernel< MATRIX_TYPE
 						      const bigint & S,
 						      const long d) const
 {
-	register lidia_size_t i, j;
-	register bigint *tmp;
+	lidia_size_t i, j;
+	bigint *tmp;
 	long TMP;
 
 	random_generator gen;
@@ -592,7 +592,7 @@ dense_bigint_matrix_kernel< MATRIX_TYPE
 	MATRIX_TYPE T(RES.rows, RES.columns), T1(RES.rows, RES.columns);
 	bigint::seed(S);
 
-	register bigint *tmp = NULL, *tmp1;
+	bigint *tmp = NULL, *tmp1;
 	for (i = 0; i < RES.rows; i++) {
 		tmp = T.value[i];
 		tmp1 = T1.value[i];
@@ -621,9 +621,9 @@ inline void
 dense_bigint_matrix_kernel< MATRIX_TYPE >::regexpansion (MATRIX_TYPE &RES,
 							 const lidia_size_t * v) const
 {
-	register lidia_size_t k = v[0];
+	lidia_size_t k = v[0];
 	if (RES.columns > k) {
-		register lidia_size_t i = 0, j = 0;
+		lidia_size_t i = 0, j = 0;
 		lidia_size_t diff = RES.columns - RES.rows;
 		MATRIX_TYPE A(RES);
 		RES.set_no_of_rows(RES.columns);
@@ -674,7 +674,7 @@ dense_bigint_matrix_kernel< MATRIX_TYPE
 			"hnfmod_dkt(const bigint &)", DVALUE + 8);
 
 	// bigint part
-	register long i, j, z, diff = RES.columns - RES.rows;
+	long i, j, z, diff = RES.columns - RES.rows;
 
 	bigint RES0, RES1, RES2, RES3; // 0 = lggT, 1 = rggt, 2 = ggt
 	bigint x, y;
@@ -793,7 +793,7 @@ dense_bigint_matrix_kernel< MATRIX_TYPE
 	debug_handler_l(DMESSAGE, "hnfmod_dkt(const bigint &)", DVALUE + 8);
 
 	// bigint part
-	register long i, j, z, diff = RES.columns - RES.rows;
+	long i, j, z, diff = RES.columns - RES.rows;
 
 	bigint RES0, RES1, RES2, RES3; // 0 = lggT, 1 = rggt, 2 = ggt
 	bigint x, y;
@@ -914,7 +914,7 @@ dense_bigint_matrix_kernel< MATRIX_TYPE
 							    const bigint &mod) const
 {
 	// bigint part
-	register long i, j, z, diff = RES.columns - RES.rows;
+	long i, j, z, diff = RES.columns - RES.rows;
 
 	bigint RES0, RES1, RES2, RES3; // 0 = lggT, 1 = rggt, 2 = ggt
 	bigint x, y;
@@ -1062,7 +1062,7 @@ dense_bigint_matrix_kernel< MATRIX_TYPE
 	debug_handler_l(DMESSAGE, "in member - function "
 			"hnfmod_mueller(MATRIX_TYPE &, const bigint &)", DVALUE + 8);
 
-	register long i, j;
+	long i, j;
 	bigint TMP, *TRANStmp;
 
 	// Step 1
@@ -1189,7 +1189,7 @@ dense_bigint_matrix_kernel< MATRIX_TYPE
 	bigint q, res, TMP;
 	bigint *tmp, *tmp1;
 
-	register lidia_size_t startr, startc, i, j, SW;
+	lidia_size_t startr, startc, i, j, SW;
 	lidia_size_t index;
 
 	// Elimination
@@ -1254,7 +1254,7 @@ dense_bigint_matrix_kernel< MATRIX_TYPE
 	bigint RES3, RES2, RES1, RES0, x, y;
 	bigint TMP1, TMP2, TMP3;
 
-	register lidia_size_t startr, startc, i, j, l;
+	lidia_size_t startr, startc, i, j, l;
 	lidia_size_t index;
 
 	//
@@ -1375,7 +1375,7 @@ dense_bigint_matrix_kernel< MATRIX_TYPE
 	bigint RES3, RES2, RES1, RES0, x, y;
 	bigint TMP1, TMP2, TMP3;
 
-	register lidia_size_t startr, startc, i, j, l;
+	lidia_size_t startr, startc, i, j, l;
 	lidia_size_t index;
 
 	MATRIX_TYPE Q1(RES.columns, RES.columns);
@@ -1527,7 +1527,7 @@ dense_bigint_matrix_kernel< MATRIX_TYPE
 			"kernel1(const MATRIX_TYPE &)", DVALUE + 8);
 
 	bigint *ZBAtmp, *Atmp;
-	register long i, j;
+	long i, j;
 	lidia_size_t c = A.columns;
 
 	// Step 1
@@ -1578,7 +1578,7 @@ dense_bigint_matrix_kernel< MATRIX_TYPE
 	debug_handler_l(DMESSAGE, "in member - function "
 			"kernel2(const MATRIX_TYPE &)", DVALUE + 8);
 
-	register lidia_size_t i;
+	lidia_size_t i;
 	MATRIX_TYPE B = A;
 	//hnf_havas_cont(B, RES);
 
@@ -1614,7 +1614,7 @@ dense_bigint_matrix_kernel< MATRIX_TYPE
 	debug_handler_l(DMESSAGE, "in member - function "
 			"reginvimage1(const MATRIX_TYPE &, const MATRIX_TYPE &", DVALUE + 8);
 
-	register long i, j;
+	long i, j;
 	bigint TMP, TMP1;
 
 	// Step 1
@@ -1674,7 +1674,7 @@ dense_bigint_matrix_kernel< MATRIX_TYPE
 	debug_handler_l(DMESSAGE, "in member - function "
 			"reginvimage2(const MATRIX_TYPE &, const MATRIX_TYPE &", DVALUE + 8);
 
-	register lidia_size_t i, j, len, oldlen;
+	lidia_size_t i, j, len, oldlen;
 	bigint TMP, TMP1;
 
 	// Step 1
@@ -1736,7 +1736,7 @@ dense_bigint_matrix_kernel< MATRIX_TYPE
 			"image1(const MATRIX_TYPE &)", DVALUE + 8);
 
 	bigint *ZBAtmp, *Atmp;
-	register long i, j;
+	long i, j;
 
 	// Step 1
 	bigint H;
@@ -1787,7 +1787,7 @@ dense_bigint_matrix_kernel< MATRIX_TYPE
 	debug_handler_l(DMESSAGE, "in member - function "
 			"image2(const MATRIX_TYPE &)", DVALUE + 8);
 
-	register lidia_size_t i;
+	lidia_size_t i;
 	RES.assign(A);
 	//hnf_havas_cont(RES);
 
@@ -1828,7 +1828,7 @@ dense_bigint_matrix_kernel< MATRIX_TYPE
 				    "invimage(const MATRIX_TYPE & B, const bigint * b)",
 				    DMESSAGE, EMESSAGE[1]);
 
-	register long i;
+	long i;
 	bigint *tmp;
 
 	// Step 1
@@ -1880,7 +1880,7 @@ dense_bigint_matrix_kernel< MATRIX_TYPE
 	debug_handler_l(DMESSAGE, "in member - function "
 			"invimage(const MATRIX_TYPE &, const math_vector< bigint > &)", DVALUE + 8);
 
-	register long i;
+	long i;
 	// Step 1
 	MATRIX_TYPE A = B;
 	A.set_no_of_columns(B.columns + 1);
@@ -1942,10 +1942,10 @@ dense_bigint_matrix_kernel< MATRIX_TYPE
 	debug_handler_l(DMESSAGE, "in member - function "
 			"snf_hartley()", DVALUE + 8);
 
-	register lidia_size_t startr, startc, TEILBARKEIT;
+	lidia_size_t startr, startc, TEILBARKEIT;
 	bigint TMP1, TMP2;
 	bigint *tmp;
-	register lidia_size_t xpivot, ypivot, i, j, z;
+	lidia_size_t xpivot, ypivot, i, j, z;
 
 	for (startc = 0, startr = 0; startr < RES.rows && startc < RES.columns; startr++, startc++) {
 
@@ -2051,10 +2051,10 @@ dense_bigint_matrix_kernel< MATRIX_TYPE
 	debug_handler_l(DMESSAGE, "in member - function "
 			"snf_hartley(MATRIX_TYPE &, MATRIX_TYPE &)", DVALUE + 8);
 
-	register lidia_size_t startr, startc, TEILBARKEIT;
+	lidia_size_t startr, startc, TEILBARKEIT;
 	bigint TMP1, TMP2;
 	lidia_size_t xpivot, ypivot;
-	register lidia_size_t i, j, z;
+	lidia_size_t i, j, z;
 
 	for (startc = 0, startr = 0; startr < RES.rows && startc < RES.columns; startr++, startc++) {
 
@@ -2183,7 +2183,7 @@ dense_bigint_matrix_kernel< MATRIX_TYPE
 	MATRIX_TYPE TR2(RES.columns, RES.columns);
 
 	bigint *REM;
-	register lidia_size_t startr, startc, pivot, i, j, z, TEILBARKEIT;
+	lidia_size_t startr, startc, pivot, i, j, z, TEILBARKEIT;
 
 	for (startc = 0, startr = 0; startr < RES.rows && startc < RES.columns; startr++, startc++) {
 
@@ -2276,7 +2276,7 @@ dense_bigint_matrix_kernel< MATRIX_TYPE
 	MATRIX_TYPE TR1 = T1;
 	MATRIX_TYPE TR2 = T2;
 	bigint *REM;
-	register lidia_size_t startr, startc, pivot, i, j, z, TEILBARKEIT;
+	lidia_size_t startr, startc, pivot, i, j, z, TEILBARKEIT;
 
 	for (startc = 0, startr = 0; startr < RES.rows && startc < RES.columns; startr++, startc++) {
 
@@ -2374,11 +2374,11 @@ dense_bigint_matrix_kernel< MATRIX_TYPE
 			"snf_havas()", DVALUE + 8);
 
 //  std::cout << "snf_havas() " << std::endl;
-	register lidia_size_t i, j, z, index;
+	lidia_size_t i, j, z, index;
 	bigint PIVOT;
 	bigint *tmp = NULL;
 
-	register lidia_size_t startr, startc, xpivot, ypivot, SW, TEILBARKEIT;
+	lidia_size_t startr, startc, xpivot, ypivot, SW, TEILBARKEIT;
 	bigint TMP1, TMP2;
 
 	for (startc = 0, startr = 0; startr < RES.rows && startc < RES.columns; startr++, startc++) {
@@ -2492,11 +2492,11 @@ dense_bigint_matrix_kernel< MATRIX_TYPE
 			"snf_havas(MATRIX_TYPE &, MATRIX_TYPE &)", DVALUE + 8);
 
 //  std::cout << "snf_havas2() " << std::endl;
-	register lidia_size_t i, j, z, index;
+	lidia_size_t i, j, z, index;
 	bigint PIVOT;
 	bigint *tmp = NULL;
 
-	register lidia_size_t startr, startc, xpivot, ypivot, SW, TEILBARKEIT;
+	lidia_size_t startr, startc, xpivot, ypivot, SW, TEILBARKEIT;
 	bigint TMP1, TMP2;
 
 	for (startc = 0, startr = 0; startr < RES.rows && startc < RES.columns; startr++, startc++) {
@@ -2623,11 +2623,11 @@ dense_bigint_matrix_kernel< MATRIX_TYPE
 {
 	debug_handler_l(DMESSAGE, "in member - function "
 			"snf_mult(MATRIX_TYPE &, MATRIX_TYPE &)", DVALUE + 8);
-	register lidia_size_t i, j, z, index, SW;
+	lidia_size_t i, j, z, index, SW;
 	bigint TMP1, TMP2;
 	bigint *tmp = NULL;
 
-	register lidia_size_t startr, startc, xpivot, ypivot, TEILBARKEIT;
+	lidia_size_t startr, startc, xpivot, ypivot, TEILBARKEIT;
 	bigint ROW, COLUMN, PIVOT, NORM;
 
 	for (startc = 0, startr = 0; startr < RES.rows && startc < RES.columns; startr++, startc++) {
@@ -2760,11 +2760,11 @@ dense_bigint_matrix_kernel< MATRIX_TYPE
 	debug_handler_l(DMESSAGE, "in member - function "
 			"snf_mult(MATRIX_TYPE &, MATRIX_TYPE &)", DVALUE + 8);
 
-	register lidia_size_t i, j, z, index, SW;
+	lidia_size_t i, j, z, index, SW;
 	bigint TMP1, TMP2;
 	bigint *tmp = NULL;
 
-	register lidia_size_t startr, startc, xpivot, ypivot, TEILBARKEIT;
+	lidia_size_t startr, startc, xpivot, ypivot, TEILBARKEIT;
 	bigint ROW, COLUMN, PIVOT, NORM;
 
 	for (startc = 0, startr = 0; startr < RES.rows && startc < RES.columns; startr++, startc++) {
@@ -2912,11 +2912,11 @@ dense_bigint_matrix_kernel< MATRIX_TYPE
 	debug_handler_l(DMESSAGE, "in member - function "
 			"snf_add(long)", DVALUE + 8);
 
-	register lidia_size_t i, j, z, index, SW;
+	lidia_size_t i, j, z, index, SW;
 	bigint TMP1, TMP2;
 	bigint *tmp = NULL;
 
-	register lidia_size_t startr, startc, xpivot, ypivot, TEILBARKEIT;
+	lidia_size_t startr, startc, xpivot, ypivot, TEILBARKEIT;
 	bigint ROW, COLUMN, PIVOT, NORM;
 
 	for (startc = 0, startr = 0; startr < RES.rows && startc < RES.columns; startr++, startc++) {
@@ -3049,11 +3049,11 @@ dense_bigint_matrix_kernel< MATRIX_TYPE
 	debug_handler_l(DMESSAGE, "in member - function "
 			"snf_add(MATRIX_TYPE &, MATRIX_TYPE &, long)", DVALUE + 8);
 
-	register lidia_size_t i, j, z, index, SW;
+	lidia_size_t i, j, z, index, SW;
 	bigint TMP1, TMP2;
 	bigint *tmp = NULL;
 
-	register lidia_size_t startr, startc, xpivot, ypivot, TEILBARKEIT;
+	lidia_size_t startr, startc, xpivot, ypivot, TEILBARKEIT;
 	bigint ROW, COLUMN, PIVOT, NORM;
 
 	for (startc = 0, startr = 0; startr < RES.rows && startc < RES.columns; startr++, startc++) {
@@ -3201,11 +3201,11 @@ dense_bigint_matrix_kernel< MATRIX_TYPE
 	debug_handler_l(DMESSAGE, "in member - function "
 			"snf_new(long)", DVALUE + 8);
 
-	register lidia_size_t i, j, z, index, SW;
+	lidia_size_t i, j, z, index, SW;
 	bigint TMP1, TMP2;
 	bigint *tmp = NULL;
 
-	register lidia_size_t startr, startc, xpivot, ypivot, TEILBARKEIT;
+	lidia_size_t startr, startc, xpivot, ypivot, TEILBARKEIT;
 	bigint ROW, COLUMN, PIVOT, NORM;
 
 	bigint *RO = new bigint[RES.rows];
@@ -3343,11 +3343,11 @@ dense_bigint_matrix_kernel< MATRIX_TYPE
 {
 	debug_handler_l(DMESSAGE, "in member - function "
 			"snf_new(MATRIX_TYPE &, MATRIX_TYPE &, long)", DVALUE + 8);
-	register lidia_size_t i, j, z, index, SW;
+	lidia_size_t i, j, z, index, SW;
 	bigint TMP1, TMP2;
 	bigint *tmp = NULL;
 
-	register lidia_size_t startr, startc, xpivot, ypivot, TEILBARKEIT;
+	lidia_size_t startr, startc, xpivot, ypivot, TEILBARKEIT;
 	bigint ROW, COLUMN, PIVOT, NORM;
 
 	bigint *RO = new bigint[RES.rows];
@@ -3503,7 +3503,7 @@ dense_bigint_matrix_kernel< MATRIX_TYPE
 	debug_handler_l(DMESSAGE, "in member - function "
 			"snfmod_dkt(const bigint &)", DVALUE + 8);
 
-	register lidia_size_t diagindex, j, z, l;
+	lidia_size_t diagindex, j, z, l;
 
 	bigint RES0, RES1, RES2, RES3; // 0 = lggT, 1 = rggt, 2 = ggt
 	bigint x, y;
@@ -3606,7 +3606,7 @@ dense_bigint_matrix_kernel< MATRIX_TYPE
 	debug_handler_l(DMESSAGE, "in member - function "
 			"snfmod_cohen(const bigint &)", DVALUE + 8);
 
-	register lidia_size_t diagindex, j, z, l;
+	lidia_size_t diagindex, j, z, l;
 
 	bigint RES0, RES1, RES2, RES3; // 0 = lggT, 1 = rggt, 2 = ggt
 	bigint x, y;
@@ -3706,7 +3706,7 @@ dense_bigint_matrix_kernel< MATRIX_TYPE
 
 	MATRIX_TYPE TR(RES.columns, RES.columns);
 	bigint *REM = NULL;
-	register lidia_size_t startr = 0, startc = 0, i;
+	lidia_size_t startr = 0, startc = 0, i;
 
 	for (startc = RES.columns - 1, startr = RES.rows - 1; startr >= 0 && startc >= 0; startr--, startc--) {
 
@@ -3894,7 +3894,7 @@ dense_bigint_matrix_kernel< MATRIX_TYPE
 	debug_handler("multiple_gcd", "in member - function "
 		      "mgcd2(const bigint *, lidia_size_t)");
 
-	register lidia_size_t i, j, index, bound, SW;
+	lidia_size_t i, j, index, bound, SW;
 	bigint MIN, TMP, q, r, *Ttmp1, *Ttmp2 = NULL;
 
 	if (RES.columns != n)
--- lidia-2.3.0+latte-patches-2014-10-04/src/linear_algebra/include/LiDIA/matrix/dense_bigint_matrix_modules.cc.orig	2013-08-09 18:51:16.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/linear_algebra/include/LiDIA/matrix/dense_bigint_matrix_modules.cc	2021-03-18 14:39:28.052608570 -0600
@@ -47,8 +47,8 @@ row_oriented_dense_matrix_modules< T >::
 {
 	MAX.assign(abs(RES.value[0][0]));
 
-	register lidia_size_t i, j;
-	register bigint *tmp;
+	lidia_size_t i, j;
+	bigint *tmp;
 
 	for (i = 0; i < RES.rows; i++) {
 		tmp = RES.value[i];
@@ -72,7 +72,7 @@ row_oriented_dense_matrix_modules< T >::
 								     lidia_size_t l2,
 								     lidia_size_t l) const
 {
-	for (register lidia_size_t i = 0; i <= l; i++)
+	for (lidia_size_t i = 0; i <= l; i++)
 		LiDIA::subtract(A.value[i][l1], A.value[i][l1], q*A.value[i][l2]);
 }
 
@@ -88,7 +88,7 @@ row_oriented_dense_matrix_modules< T >::
 									 const T &mod) const
 {
 	T TMP;
-	for (register lidia_size_t i = 0; i <= l; i++) {
+	for (lidia_size_t i = 0; i <= l; i++) {
 		LiDIA::mult_mod(TMP, q, A.value[i][l2], mod);
 		LiDIA::sub_mod(A.value[i][l1], A.value[i][l1], TMP, mod);
 	}
@@ -106,7 +106,7 @@ row_oriented_dense_matrix_modules< T >::
 							      const T &mod) const
 {
 	T TMP;
-	for (register lidia_size_t i = 0; i <= l; i++) {
+	for (lidia_size_t i = 0; i <= l; i++) {
 		LiDIA::mult_mod(TMP, q, A.value[i][l2], mod);
 		LiDIA::sub_mod(A.value[i][l1], A.value[i][l1], TMP, mod);
 		if (A.value[i][l1] < A.Zero)
@@ -122,7 +122,7 @@ row_oriented_dense_matrix_modules< T >::
 						       lidia_size_t index,
 						       lidia_size_t l) const
 {
-	for (register lidia_size_t i = 0; i <= l; i++)
+	for (lidia_size_t i = 0; i <= l; i++)
 		A.value[i][index] = -A.value[i][index];
 }
 
@@ -135,7 +135,7 @@ row_oriented_dense_matrix_modules< T >::
 							   lidia_size_t l,
 							   const T &mod) const
 {
-	for (register lidia_size_t i = 0; i <= l; i++) {
+	for (lidia_size_t i = 0; i <= l; i++) {
 		A.value[i][index] = -A.value[i][index];
 		LiDIA::best_remainder(A.value[i][index], A.value[i][index], mod);
 	}
@@ -151,9 +151,9 @@ row_oriented_dense_matrix_modules< T >::
 	memory_handler(max_array, DMESSAGE, "init :: "
 		       "Error in memory allocation (max_array)");
 	T *tmp;
-	for (register lidia_size_t i = 0; i < A.rows; i++) {
+	for (lidia_size_t i = 0; i < A.rows; i++) {
 		tmp = A.value[i];
-		for (register lidia_size_t j = 0; j < A.columns; j++)
+		for (lidia_size_t j = 0; j < A.columns; j++)
 			if (max_array[j] < abs(tmp[j]))
 				max_array[j] = abs(tmp[j]);
 	}
@@ -168,7 +168,7 @@ row_oriented_dense_matrix_modules< T >::
 							  lidia_size_t i,
 							  T *max_array) const
 {
-	for (register lidia_size_t j = 0; j < A.rows; j++)
+	for (lidia_size_t j = 0; j < A.rows; j++)
 		if (max_array[i] < abs(A.value[j][i]))
 			max_array[i] = abs(A.value[j][i]);
 }
@@ -892,7 +892,7 @@ row_oriented_dense_matrix_modules< T >::
 						   lidia_size_t &no_of_elements,
 						   T &Durch) const
 {
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	bool SW = false;
 	no_of_elements = 0;
 	Durch = 0;
@@ -921,7 +921,7 @@ template< class T >
 inline void
 row_oriented_dense_matrix_modules< T >::max (MR< T > &RES, T &MAX) const
 {
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	bool SW = false;
 
 	for (i = 0; i < RES.rows; i++)
@@ -1108,7 +1108,7 @@ row_oriented_dense_matrix_modules< T >::
 						      lidia_size_t len) const
 {
 	lidia_size_t n = startc + 1;
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 
 
 	matrix< bigint > Tr(A.columns, A.columns);
@@ -1203,7 +1203,7 @@ row_oriented_dense_matrix_modules< T >::
 						      lidia_size_t len) const
 {
 	lidia_size_t n = startc + 1;
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 
 
 	matrix< bigint > Tr(A.columns, A.columns);
@@ -1301,7 +1301,7 @@ row_oriented_dense_matrix_modules< T >::
 
 	bigint *a = A.value[startr];
 
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 
 	if (n <= 0)
 		lidia_error_handler("multiple_gcd", "mgcd :: Error in parameter !!");
@@ -1356,7 +1356,7 @@ row_oriented_dense_matrix_modules< T >::
 
 	bigint *a = A.value[startr];
 
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 
 	if (n <= 0)
 		lidia_error_handler("multiple_gcd", "mgcd :: Error in parameter !!");
@@ -1537,7 +1537,7 @@ row_oriented_dense_matrix_modules< T >::
 	T A3, A2, A1, A0, x, y;
 	T TMP1, TMP2, TMP3;
 
-	register lidia_size_t i, j, l;
+	lidia_size_t i, j, l;
 	lidia_size_t index;
 
 	//
@@ -1635,7 +1635,7 @@ row_oriented_dense_matrix_modules< T >::
 	T A3, A2, A1, A0, x, y;
 	T TMP1, TMP2, TMP3;
 
-	register lidia_size_t i, j, l;
+	lidia_size_t i, j, l;
 	lidia_size_t index;
 
 	//
@@ -2043,7 +2043,7 @@ column_oriented_dense_matrix_modules< T
 									lidia_size_t l2,
 									lidia_size_t l) const
 {
-	for (register lidia_size_t i = 0; i <= l; i++)
+	for (lidia_size_t i = 0; i <= l; i++)
 		LiDIA::subtract(A.value[l1][i], A.value[l1][i], q*A.value[l2][i]);
 }
 
@@ -2059,7 +2059,7 @@ column_oriented_dense_matrix_modules< T
 									    const T &mod) const
 {
 	T TMP;
-	for (register lidia_size_t i = 0; i <= l; i++) {
+	for (lidia_size_t i = 0; i <= l; i++) {
 		LiDIA::mult_mod(TMP, q, A.value[l2][i], mod);
 		LiDIA::sub_mod(A.value[l1][i], A.value[l1][i], TMP, mod);
 	}
@@ -2077,7 +2077,7 @@ column_oriented_dense_matrix_modules< T
 								 const T &mod) const
 {
 	T TMP;
-	for (register lidia_size_t i = 0; i <= l; i++) {
+	for (lidia_size_t i = 0; i <= l; i++) {
 		LiDIA::mult_mod(TMP, q, A.value[l2][i], mod);
 		LiDIA::sub_mod(A.value[l1][i], A.value[l1][i], TMP, mod);
 		if (A.value[l1][i] < A.Zero)
@@ -2093,7 +2093,7 @@ column_oriented_dense_matrix_modules< T
 							  lidia_size_t index,
 							  lidia_size_t l) const
 {
-	for (register lidia_size_t i = 0; i <= l; i++)
+	for (lidia_size_t i = 0; i <= l; i++)
 		A.value[index][i] = -A.value[index][i];
 }
 
@@ -2106,7 +2106,7 @@ column_oriented_dense_matrix_modules< T
 							      lidia_size_t l,
 							      const T &mod) const
 {
-	for (register lidia_size_t i = 0; i <= l; i++) {
+	for (lidia_size_t i = 0; i <= l; i++) {
 		A.value[index][i] = -A.value[index][i];
 		LiDIA::best_remainder(A.value[index][i], A.value[index][i], mod);
 	}
@@ -2122,9 +2122,9 @@ column_oriented_dense_matrix_modules< T
 	memory_handler(max_array, DMESSAGE, "init :: "
 		       "Error in memory allocation (max_array)");
 	T *tmp;
-	for (register lidia_size_t i = 0; i < A.columns; i++) {
+	for (lidia_size_t i = 0; i < A.columns; i++) {
 		tmp = A.value[i];
-		for (register lidia_size_t j = 0; j < A.rows; j++)
+		for (lidia_size_t j = 0; j < A.rows; j++)
 			if (max_array[j] < abs(tmp[j]))
 				max_array[j] = abs(tmp[j]);
 	}
@@ -2139,7 +2139,7 @@ column_oriented_dense_matrix_modules< T
 							     lidia_size_t i,
 							     T *max_array) const
 {
-	for (register lidia_size_t j = 0; j < A.rows; j++)
+	for (lidia_size_t j = 0; j < A.rows; j++)
 		if (max_array[i] < abs(A.value[i][j]))
 			max_array[i] = abs(A.value[i][j]);
 }
@@ -2576,7 +2576,7 @@ column_oriented_dense_matrix_modules< T
 						      lidia_size_t &no_of_elements,
 						      T &Durch) const
 {
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	bool SW = false;
 	no_of_elements = 0;
 	Durch = 0;
@@ -2605,7 +2605,7 @@ template< class T >
 inline void
 column_oriented_dense_matrix_modules< T >::max (MR< T > &RES, T &MAX) const
 {
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	bool SW = false;
 
 	for (i = 0; i < RES.columns; i++)
--- lidia-2.3.0+latte-patches-2014-10-04/src/linear_algebra/include/LiDIA/matrix/dense_fp_matrix_kernel.cc.orig	2009-05-09 09:24:47.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/linear_algebra/include/LiDIA/matrix/dense_fp_matrix_kernel.cc	2021-03-18 14:39:52.908561405 -0600
@@ -53,14 +53,14 @@ STF(MATRIX_TYPE &A, const T & mod) const
 	// Version: bigint 1.9
 	//
 
-	register lidia_size_t index = 0, i = 0, j = 0, z;
+	lidia_size_t index = 0, i = 0, j = 0, z;
 	lidia_size_t startr = A.rows;
 	lidia_size_t startc = A.columns;
 	T TMP, TMP1, TMP2;
 	T *tmp;
 
 	// Step 1 - 4
-	register int exchange = 1;
+	int exchange = 1;
 
 	// Step 5 - 8
 	for (--startc, --startr; startr >= 0 && startc >= 0; startc--, startr--) {
@@ -123,14 +123,14 @@ GaussJordan(MATRIX_TYPE &A, const T & mo
 	// Version: bigint 1.9
 	//
 
-	register lidia_size_t index = 0, i = 0, j = 0, z;
+	lidia_size_t index = 0, i = 0, j = 0, z;
 	lidia_size_t startr = A.rows;
 	lidia_size_t startc = A.columns;
 	T TMP, TMP1, TMP2;
 	T *tmp;
 
 	// Step 1 - 4
-	register int exchange = 1;
+	int exchange = 1;
 
 	// Step 5 - 8
 	for (--startc, --startr; startr >= 0 && startc >= 0; startc--, startr--) {
@@ -206,7 +206,7 @@ STF_extended(MATRIX_TYPE &A, const T & m
 	// Version: bigint 1.9
 	//
 
-	register lidia_size_t index = 0, i = 0, j = 0, z;
+	lidia_size_t index = 0, i = 0, j = 0, z;
 	lidia_size_t startr = A.rows;
 	lidia_size_t startc = A.columns;
 
@@ -223,7 +223,7 @@ STF_extended(MATRIX_TYPE &A, const T & m
 	bool SW = true;
 
 	// Step 1 - 4
-	register int exchange = 1;
+	int exchange = 1;
 
 	// Step 5 - 8
 	for (--startc, --startr; startr >= 0 && startc >= 0; startc--, startr--) {
@@ -303,7 +303,7 @@ rank(MATRIX_TYPE &A, const T &mod) const
 	debug_handler_l("bigint_matrix",
 			"rank(MATRIX_TYPE &A, const T &)", LDBL_MATRIX);
 
-	register lidia_size_t i, j, No = 0;
+	lidia_size_t i, j, No = 0;
 
 	// Step 1, 2
 	STF(A, mod);
@@ -345,7 +345,7 @@ lininr(MATRIX_TYPE &A, const T &mod) con
 	debug_handler("bigint_matrix",
 		      "lininr(MATRIX_TYPE &A, const T &)");
 
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	lidia_size_t *l = new lidia_size_t[A.columns];
 	for (i = 0; i < A.columns; l[i] = 0, i++);
 
@@ -390,7 +390,7 @@ lininc(MATRIX_TYPE &A, const T &mod) con
 	// Version: 1.9
 	//
 
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	lidia_size_t *l = new lidia_size_t[A.columns + 1];
 	memory_handler(l, "bigint_matrix", "lininc_intern :: "
 		       "Error in memory allocation (l)");
@@ -440,7 +440,7 @@ adj(MATRIX_TYPE &A, const T &mod) const
 	debug_handler("bigint_matrix", "in inline - function "
 		      "adj(MATRIX_TYPE &, cont T &)");
 
-	register lidia_size_t i, j, z;
+	lidia_size_t i, j, z;
 	T TMP, TMP1, TMP2;
 	T *tmp, *tmp1, *Btmp, *Btmp1;
 	lidia_size_t exchange = 1;
@@ -558,7 +558,7 @@ det(MATRIX_TYPE &A, const T &mod) const
 	debug_handler("bigint_matrix",
 		      "det(MATRIX_TYPE &, T)");
 
-	register lidia_size_t i, j, z;
+	lidia_size_t i, j, z;
 	T TMP, TMP1, TMP2;
 	T *tmp, *tmp1;
 
--- lidia-2.3.0+latte-patches-2014-10-04/src/linear_algebra/include/LiDIA/matrix/fp_matrix_algorithms.cc.orig	2009-05-09 09:24:47.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/linear_algebra/include/LiDIA/matrix/fp_matrix_algorithms.cc	2021-03-18 14:40:17.683514391 -0600
@@ -54,7 +54,7 @@ fp_matrix_algorithms< T, MATRIX_TYPE >::
 	// Version: bigint 1.9
 	//
 
-	register lidia_size_t index = 0, i = 0, j = 0, z;
+	lidia_size_t index = 0, i = 0, j = 0, z;
 
 	lidia_size_t startr = A.rows;
 	lidia_size_t startc = A.columns;
@@ -63,7 +63,7 @@ fp_matrix_algorithms< T, MATRIX_TYPE >::
 	T *tmp;
 
 	// Step 1 - 4
-	register int exchange = 1;
+	int exchange = 1;
 
 	// Step 5 - 8
 	for (--startc, --startr; startr >= 0 && startc >= 0; startc--, startr--) {
@@ -126,7 +126,7 @@ fp_matrix_algorithms< T, MATRIX_TYPE >::
 	// Version: bigint 1.9
 	//
 
-	register lidia_size_t index = 0, i = 0, j = 0, z;
+	lidia_size_t index = 0, i = 0, j = 0, z;
 	lidia_size_t startr = A.rows;
 	lidia_size_t startc = A.columns;
 
@@ -143,7 +143,7 @@ fp_matrix_algorithms< T, MATRIX_TYPE >::
 	bool SW = true;
 
 	// Step 1 - 4
-	register int exchange = 1;
+	int exchange = 1;
 
 	// Step 5 - 8
 	for (--startc, --startr; startr >= 0 && startc >= 0; startc--, startr--) {
@@ -223,7 +223,7 @@ fp_matrix_algorithms< T, MATRIX_TYPE >::
 	debug_handler_l("bigint_matrix",
 			"rank(MATRIX_TYPE &A, const T &)", LDBL_MATRIX);
 
-	register lidia_size_t i, j, No = 0;
+	lidia_size_t i, j, No = 0;
 
 	// Step 1, 2
 	STF(A, mod);
@@ -265,7 +265,7 @@ fp_matrix_algorithms< T, MATRIX_TYPE >::
 	debug_handler("bigint_matrix",
 		      "lininr(MATRIX_TYPE &A, const T &)");
 
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	lidia_size_t *l = new lidia_size_t[A.columns];
 	for (i = 0; i < A.columns; l[i] = 0, i++);
 
@@ -310,7 +310,7 @@ fp_matrix_algorithms< T, MATRIX_TYPE >::
 	// Version: 1.9
 	//
 
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	lidia_size_t *l = new lidia_size_t[A.columns + 1];
 	memory_handler(l, "bigint_matrix", "lininc_intern :: "
 		       "Error in memory allocation (l)");
@@ -360,7 +360,7 @@ fp_matrix_algorithms< T, MATRIX_TYPE >::
 	debug_handler("bigint_matrix", "in inline - function "
 		      "adj(MATRIX_TYPE &, cont T &)");
 
-	register lidia_size_t i, j, z;
+	lidia_size_t i, j, z;
 	T TMP, TMP1, TMP2;
 	T *tmp, *tmp1, *Btmp, *Btmp1;
 	lidia_size_t exchange = 1;
@@ -478,7 +478,7 @@ fp_matrix_algorithms< T, MATRIX_TYPE >::
 	debug_handler("bigint_matrix",
 		      "det(MATRIX_TYPE &, T)");
 
-	register lidia_size_t i, j, z;
+	lidia_size_t i, j, z;
 	T TMP, TMP1, TMP2;
 	T *tmp, *tmp1;
 
--- lidia-2.3.0+latte-patches-2014-10-04/src/linear_algebra/include/LiDIA/matrix/modular_arithmetic.cc.orig	2009-05-09 09:24:47.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/linear_algebra/include/LiDIA/matrix/modular_arithmetic.cc	2021-03-18 14:40:49.956453145 -0600
@@ -56,7 +56,7 @@ modular_arithmetic< REP, SINGLE_MODUL, M
 								const matrix< bigint > *v,
 								const bigint *prim) const
 {
-	register lidia_size_t i, j, l;
+	lidia_size_t i, j, l;
 
 	long len;
 	prim[0].longify(len);
@@ -64,7 +64,7 @@ modular_arithmetic< REP, SINGLE_MODUL, M
 	bigint TMP, TMP0, TMP1, TMP2;
 	bigint dummy;
 
-	register bigint *e = new bigint[len];
+	bigint *e = new bigint[len];
 	memory_handler(e, DMESSAGE, "chinrest :: "
 		       "Error in memory allocation (e)");
 
@@ -77,7 +77,7 @@ modular_arithmetic< REP, SINGLE_MODUL, M
 	if (RES.columns != c)
 		this->rep_modul.set_no_of_columns(RES, c);
 
-	register bigint *m = new bigint[len];
+	bigint *m = new bigint[len];
 	memory_handler(m, DMESSAGE, "chinrest :: "
 		       "Error in memory allocation (m)");
 
@@ -164,7 +164,7 @@ modular_arithmetic< REP, SINGLE_MODUL, M
 {
 	// read primelist from file
 	long Number_of_primes;
-	register bigint *PRIM = get_primes(bigint(2) * H, bigint(1));
+	bigint *PRIM = get_primes(bigint(2) * H, bigint(1));
 	PRIM[0].longify(Number_of_primes);
 
 	// Compute the rank for all primes
@@ -214,12 +214,12 @@ lidia_size_t *
 modular_arithmetic< REP, SINGLE_MODUL, MULTI_MODUL >::lininr1 (const matrix< bigint > &M,
 							       const bigint &H) const
 {
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	bigint Gmod;
 
 	// read primelist from file
 	long Number_of_primes;
-	register bigint *PRIM = get_primes(bigint(2) * H, bigint(1));
+	bigint *PRIM = get_primes(bigint(2) * H, bigint(1));
 	PRIM[0].longify(Number_of_primes);
 
 	// compute the rank and the linear independent rows for all primes
@@ -270,7 +270,7 @@ lidia_size_t *
 modular_arithmetic< REP, SINGLE_MODUL, MULTI_MODUL >::lininr2 (const matrix< bigint > &M,
 							       const bigint &H) const
 {
-	register lidia_size_t i;
+	lidia_size_t i;
 	bigint Gmod;
 
 	// read primelist form file
@@ -330,11 +330,11 @@ modular_arithmetic< REP, SINGLE_MODUL, M
 {
 	const bigint_matrix_algorithms< REP, REP, REP > modul;
 
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	bigint Gmod;
 
 	// read primlist from file
-	register bigint *PRIM = get_primes(bigint(2) * H, bigint(1));
+	bigint *PRIM = get_primes(bigint(2) * H, bigint(1));
 	long Number_of_primes;
 	PRIM[0].longify(Number_of_primes);
 
@@ -389,11 +389,11 @@ modular_arithmetic< REP, SINGLE_MODUL, M
 {
 	const bigint_matrix_algorithms< REP, REP, REP > modul;
 
-	register lidia_size_t i;
+	lidia_size_t i;
 	bigint Gmod;
 
 	// read primelist from file
-	register bigint *PRIM = get_primes(bigint(2) * H, bigint(1));
+	bigint *PRIM = get_primes(bigint(2) * H, bigint(1));
 	long Number_of_primes;
 	PRIM[0].longify(Number_of_primes);
 
@@ -449,10 +449,10 @@ modular_arithmetic< REP, SINGLE_MODUL, M
 							    const bigint &H,
 							    const bigint &DET) const
 {
-	register lidia_size_t i, z1, z2;
+	lidia_size_t i, z1, z2;
 
 	// read primelist from file
-	register bigint *PRIM = get_primes(bigint(2)*H, DET, true);
+	bigint *PRIM = get_primes(bigint(2)*H, DET, true);
 	long n;
 	PRIM[0].longify(n);
 
@@ -509,11 +509,11 @@ modular_arithmetic< REP, SINGLE_MODUL, M
 							    const bigint &H,
 							    const bigint & DET) const
 {
-	register lidia_size_t i, ii, jj, kk, z1, z2;
+	lidia_size_t i, ii, jj, kk, z1, z2;
 	bigint val, val2;
 	bool done;
 
-	register bigint *PRIM = get_primes(bigint(2)*H, abs(DET), true);
+	bigint *PRIM = get_primes(bigint(2)*H, abs(DET), true);
 	long n;
 	PRIM[0].longify(n);
 
@@ -601,10 +601,10 @@ modular_arithmetic< REP, SINGLE_MODUL, M
 							    const bigint & DET,
 							    int num_mod) const
 {
-	register lidia_size_t i, z1, z2, ii, kk;
+	lidia_size_t i, z1, z2, ii, kk;
 	bigint val, val2;
 
-	register bigint *PRIM = get_primes(bigint(2)*H, abs(DET), true);
+	bigint *PRIM = get_primes(bigint(2)*H, abs(DET), true);
 	long n;
 	PRIM[0].longify(n);
 
@@ -700,7 +700,7 @@ modular_arithmetic< REP, SINGLE_MODUL, M
 								   bigint & DET,
 								   const bigint &H) const
 {
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 
 	//  Step 1
 	lidia_size_t *linuz = lininr1(RES, H);
@@ -740,7 +740,7 @@ modular_arithmetic< REP, SINGLE_MODUL, M
 								   bigint & DET,
 								   const bigint &H) const
 {
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	bigint TMP, TMP1;
 
 	// Step 1
@@ -792,7 +792,7 @@ modular_arithmetic< REP, SINGLE_MODUL, M
 								   bigint &H,
 								   int num_same) const
 {
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	bigint TMP, TMP1, *tmp, *tmp1, *tmp2;
 
 	// Step 1
@@ -848,8 +848,8 @@ modular_arithmetic< REP, SINGLE_MODUL, M
 								   bigint & DET,
 								   const bigint &H) const
 {
-	register lidia_size_t i, j;
-	register bigint *tmp, *tmp1;
+	lidia_size_t i, j;
+	bigint *tmp, *tmp1;
 
 	// Step 1
 	lidia_size_t *linuz = lininr1(RES, H);
@@ -890,7 +890,7 @@ modular_arithmetic< REP, SINGLE_MODUL, M
 								   bigint &H,
 								   int num_same) const
 {
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	bigint TMP, TMP1, *tmp, *tmp1, *tmp2;
 
 	// Step 1
@@ -948,7 +948,7 @@ modular_arithmetic< REP, SINGLE_MODUL, M
 								   bigint &H,
 								   int num_same) const
 {
-	register lidia_size_t i;
+	lidia_size_t i;
 	bigint TMP, TMP1;
 
 	lidia_size_t *linu1 = lininr1(RES, H);
@@ -1284,7 +1284,7 @@ modular_arithmetic< REP, SINGLE_MODUL, M
 								bigint *RES,
 								const bigint &H) const
 {
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	bigint TMP = H, TMP1;
 	long len;
 
--- lidia-2.3.0+latte-patches-2014-10-04/src/linear_algebra/include/LiDIA/matrix/modular_functions.inl.orig	2009-05-09 09:24:47.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/linear_algebra/include/LiDIA/matrix/modular_functions.inl	2021-03-18 14:42:28.780265608 -0600
@@ -53,12 +53,12 @@ STF_intern(bigint ** value, lidia_size_t
 	debug_handler_l("bigint_matrix", "in inline - function "
 			"STF_intern(bigint **, lidia_size_t, lidia_size_t, const bigint &)", LDBL_MATRIX);
 
-	register lidia_size_t i, j, z, j0 = c - 1;
+	lidia_size_t i, j, z, j0 = c - 1;
 	bigint TMP, TMP1, TMP2;
 	bigint *tmp;
 
 	// Step 1 - 4
-	register int exchange = 1;
+	int exchange = 1;
 
 	// Step 5 - 8
 	for (i = r - 1; i >= 0; i--) {
@@ -117,12 +117,12 @@ STF_intern(long ** value, lidia_size_t r
 	debug_handler_l("bigint_matrix", "in member - function "
 			"STF_intern(long **, lidia_size_t, lidia_size_t, long)", LDBL_MATRIX);
 
-	register lidia_size_t i, j, z, j0 = c - 1;
+	lidia_size_t i, j, z, j0 = c - 1;
 	long TMP, TMP1, TMP2;
 	long *tmp;
 
 	// Step 1 - 4
-	register int exchange = 1;
+	int exchange = 1;
 
 	// Step 5 - 8
 	for (i = r - 1; i >= 0; i--) {
@@ -188,7 +188,7 @@ rank_intern(bigint ** Avalue, lidia_size
 	debug_handler_l("bigint_matrix", "in inline - function "
 			"rank_intern(bigint **, lidia_size_t, lidia_size_t, const bigint &)", LDBL_MATRIX);
 
-	register lidia_size_t i, j, No = 0;
+	lidia_size_t i, j, No = 0;
 	const bigint *Atmp;
 
 	if (Gmod.bit_length() > bigint::bits_per_digit()) {
@@ -285,7 +285,7 @@ lininr_intern(bigint ** Avalue, lidia_si
 	debug_handler("bigint_matrix", "in inline - function "
 		      "lininr_intern(bigint **, lidia_size_t, lidia_size_t, const bigint &)");
 
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	const bigint *Atmp;
 
 	long *l = new long[c + 1];
@@ -390,7 +390,7 @@ lininc_intern(bigint ** Avalue, lidia_si
 	debug_handler("bigint_matrix", "in inline - function "
 		      "lininc_intern(bigint **, lidia_size_t, lidia_size_t, const bigint &)");
 
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	lidia_size_t *l = new lidia_size_t[r + 1];
 	memory_handler(l, "bigint_matrix", "lininc_intern :: "
 		       "Error in memory allocation (l)");
@@ -490,7 +490,7 @@ adj_intern(bigint ** value, lidia_size_t
 	debug_handler("bigint_matrix", "in inline - function "
 		      "adj_intern(bigint **, lidia_size_t, const bigint &)");
 
-	register lidia_size_t i, j, z;
+	lidia_size_t i, j, z;
 	bigint TMP, TMP1, TMP2;
 	bigint *tmp, *tmp1, *Btmp, *Btmp1;
 	lidia_size_t exchange = 1;
@@ -601,7 +601,7 @@ adj_intern(long **value, lidia_size_t r,
 	debug_handler("bigint_matrix", "in inline - function "
 		      "adj_intern(long **, lidia_size_t, long)");
 
-	register lidia_size_t i, j, z;
+	lidia_size_t i, j, z;
 	long TMP, TMP1, TMP2;
 	long *tmp, *tmp1, *Btmp, *Btmp1;
 	lidia_size_t exchange = 1;
@@ -719,7 +719,7 @@ det_intern(bigint & ret, bigint ** value
 	debug_handler("bigint_matrix", "in inline - function "
 		      "det_intern(bigint &, bigint **, lidia_size_t, const bigint &)");
 
-	register lidia_size_t i, j, z;
+	lidia_size_t i, j, z;
 	bigint TMP, TMP1, TMP2;
 	bigint *tmp, *tmp1;
 
@@ -780,7 +780,7 @@ det_intern(long **value, lidia_size_t r,
 	debug_handler("bigint_matrix", "in inline - function "
 		      "det_intern(long **, lidia_size_t, long)");
 
-	register lidia_size_t i, j, z;
+	lidia_size_t i, j, z;
 	long TMP, TMP1, TMP2;
 	long *tmp, *tmp1;
 
@@ -847,7 +847,7 @@ HBF_intern(bigint ** value, lidia_size_t
 		      "HBF_intern(bigint **, lidia_size_t, const bigint &)");
 
 	// Step 1, 2
-	register lidia_size_t i, j, z;
+	lidia_size_t i, j, z;
 	bigint TMP, TMP1, TMP2;
 	bigint *tmp;
 
@@ -974,7 +974,7 @@ charpoly_intern(bigint ** value, lidia_s
 	debug_handler("bigint_matrix", "in inline - function "
 		      "charpoly_intern(bigint **, lidia_size_t, const bigint &)");
 
-	register lidia_size_t i, j, z;
+	lidia_size_t i, j, z;
 	bigint TMP;
 	lidia_size_t sign;
 
--- lidia-2.3.0+latte-patches-2014-10-04/src/linear_algebra/include/LiDIA/matrix/sparse_bigint_matrix_kernel.cc.orig	2009-05-09 09:24:47.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/linear_algebra/include/LiDIA/matrix/sparse_bigint_matrix_kernel.cc	2021-03-18 14:43:44.213122465 -0600
@@ -66,7 +66,7 @@ sparse_bigint_matrix_kernel< MATRIX_TYPE
 						    const MATRIX_TYPE &A,
 						    const bigint &k) const
 {
-	register lidia_size_t j, i;
+	lidia_size_t j, i;
 	bigint *REStmp, *Atmp;
 
 	for (j = 0; j < A.rows; j++) {
@@ -85,7 +85,7 @@ sparse_bigint_matrix_kernel< MATRIX_TYPE
 							     const MATRIX_TYPE &A,
 							     const MATRIX_TYPE &B) const
 {
-	register lidia_size_t j, i;
+	lidia_size_t j, i;
 	bigint *REStmp, *Atmp, *Btmp;
 
 	for (j = 0; j < RES.rows; j++) {
@@ -133,8 +133,8 @@ sparse_bigint_matrix_kernel< MATRIX_TYPE
 {
 	MAX.assign(RES.value[0][0]);
 
-	register lidia_size_t i, j;
-	register bigint *tmp;
+	lidia_size_t i, j;
+	bigint *tmp;
 
 	for (i = 0; i < RES.rows; i++) {
 		tmp = RES.value[i];
@@ -153,8 +153,8 @@ sparse_bigint_matrix_kernel< MATRIX_TYPE
 {
 	MAX.assign(abs(RES.value[0][0]));
 
-	register lidia_size_t i, j;
-	register bigint *tmp;
+	lidia_size_t i, j;
+	bigint *tmp;
 
 	for (i = 0; i < RES.rows; i++) {
 		tmp = RES.value[i];
@@ -177,8 +177,8 @@ sparse_bigint_matrix_kernel< MATRIX_TYPE
 	x = 0;
 	y = 0;
 
-	register lidia_size_t i, j;
-	register bigint *tmp;
+	lidia_size_t i, j;
+	bigint *tmp;
 
 	for (i = 0; i < RES.rows; i++) {
 		tmp = RES.value[i];
@@ -204,8 +204,8 @@ sparse_bigint_matrix_kernel< MATRIX_TYPE
 	x = 0;
 	y = 0;
 
-	register lidia_size_t i, j;
-	register bigint *tmp;
+	lidia_size_t i, j;
+	bigint *tmp;
 
 	for (i = 0; i < RES.rows; i++) {
 		tmp = RES.value[i];
@@ -227,8 +227,8 @@ sparse_bigint_matrix_kernel< MATRIX_TYPE
 {
 	MIN.assign(RES.value[0][0]);
 
-	register lidia_size_t i, j;
-	register bigint *tmp;
+	lidia_size_t i, j;
+	bigint *tmp;
 
 	for (i = 0; i < RES.rows; i++) {
 		tmp = RES.value[i];
@@ -247,8 +247,8 @@ sparse_bigint_matrix_kernel< MATRIX_TYPE
 {
 	MIN.assign(abs(RES.value[0][0]));
 
-	register lidia_size_t i, j;
-	register bigint *tmp;
+	lidia_size_t i, j;
+	bigint *tmp;
 
 	for (i = 0; i < RES.rows; i++) {
 		tmp = RES.value[i];
@@ -271,8 +271,8 @@ sparse_bigint_matrix_kernel< MATRIX_TYPE
 	x = 0;
 	y = 0;
 
-	register lidia_size_t i, j;
-	register bigint *tmp;
+	lidia_size_t i, j;
+	bigint *tmp;
 
 	for (i = 0; i < RES.rows; i++) {
 		tmp = RES.value[i];
@@ -298,8 +298,8 @@ sparse_bigint_matrix_kernel< MATRIX_TYPE
 	x = 0;
 	y = 0;
 
-	register lidia_size_t i, j;
-	register bigint *tmp;
+	lidia_size_t i, j;
+	bigint *tmp;
 
 	for (i = 0; i < RES.rows; i++) {
 		tmp = RES.value[i];
@@ -319,19 +319,19 @@ void
 sparse_bigint_matrix_kernel< MATRIX_TYPE >::hadamard (const MATRIX_TYPE &RES,
 						      bigint & H) const
 {
-	register lidia_size_t min = (RES.columns < RES.rows) ? RES.columns : RES.rows;
-	register lidia_size_t i, j;
+	lidia_size_t min = (RES.columns < RES.rows) ? RES.columns : RES.rows;
+	lidia_size_t i, j;
 
 	// Computation of row and column norms
-	register bigint *Wrows = new bigint[RES.rows];
+	bigint *Wrows = new bigint[RES.rows];
 	memory_handler(Wrows, DMESSAGE, "hadamard :: "
 		       "Error in memory allocation (Wrows)");
 
-	register bigint *Wcolumns = new bigint[RES.columns];
+	bigint *Wcolumns = new bigint[RES.columns];
 	memory_handler(Wcolumns, DMESSAGE, "hadamard :: "
 		       "Error in memory allocation (Wcolumns)");
 
-	register bigint *tmp;
+	bigint *tmp;
 	bigint TMP;
 
 	for (i = 0; i < RES.rows; i++) {
@@ -380,7 +380,7 @@ sparse_bigint_matrix_kernel< MATRIX_TYPE
 	delete[] Wrows;
 
 	// Hadamard
-	register lidia_size_t B = ((COLUMNS < ROWS) ? COLUMNS.bit_length() : ROWS.bit_length()) - 1;
+	lidia_size_t B = ((COLUMNS < ROWS) ? COLUMNS.bit_length() : ROWS.bit_length()) - 1;
 	bigint E = (bigint(B) / bigint(2)) + bigint(2);
 	power(H, bigint(2), E);
 	dec(H);
@@ -393,19 +393,19 @@ void
 sparse_bigint_matrix_kernel< MATRIX_TYPE >::binary_hadamard (const MATRIX_TYPE &RES,
 							     lidia_size_t &H) const
 {
-	register lidia_size_t min = (RES.columns < RES.rows) ? RES.columns : RES.rows;
-	register lidia_size_t i, j;
+	lidia_size_t min = (RES.columns < RES.rows) ? RES.columns : RES.rows;
+	lidia_size_t i, j;
 
 	// Computation of row and column norms
-	register bigint *Wrows = new bigint[RES.rows];
+	bigint *Wrows = new bigint[RES.rows];
 	memory_handler(Wrows, DMESSAGE, "hadamard :: "
 		       "Error in memory allocation (Wrows)");
 
-	register bigint *Wcolumns = new bigint[RES.columns];
+	bigint *Wcolumns = new bigint[RES.columns];
 	memory_handler(Wcolumns, DMESSAGE, "hadamard :: "
 		       "Error in memory allocation (Wcolumns)");
 
-	register bigint *tmp;
+	bigint *tmp;
 	bigint TMP;
 
 	for (i = 0; i < RES.rows; i++) {
@@ -452,7 +452,7 @@ sparse_bigint_matrix_kernel< MATRIX_TYPE
 	delete[] Wrows;
 
 	// Hadamard
-	register lidia_size_t B = ((COLUMNS < ROWS) ? COLUMNS.bit_length() : ROWS.bit_length()) - 1;
+	lidia_size_t B = ((COLUMNS < ROWS) ? COLUMNS.bit_length() : ROWS.bit_length()) - 1;
 	H = B / 2 + 2;
 }
 
@@ -468,9 +468,9 @@ sparse_bigint_matrix_kernel< MATRIX_TYPE
 	RES.assign_zero();
 
 	bigint TMP;
-	register bigint *tmp = M.value[pos];
+	bigint *tmp = M.value[pos];
 
-	register lidia_size_t i;
+	lidia_size_t i;
 
 	if (art != 0)
 		for (i = 0; i < M.value_counter[pos]; i++) {
@@ -498,7 +498,7 @@ sparse_bigint_matrix_kernel< MATRIX_TYPE
 
 	bigint TMP;
 
-	register lidia_size_t i;
+	lidia_size_t i;
 	if (art != 0)
 		for (i = 0; i < M.rows; i++) {
 			power(TMP, M(i, pos), art);
@@ -521,8 +521,8 @@ template< class MATRIX_TYPE >
 inline void
 sparse_bigint_matrix_kernel< MATRIX_TYPE >::randomize (MATRIX_TYPE &RES, const bigint & S) const
 {
-	register lidia_size_t i, j;
-	register bigint *tmp;
+	lidia_size_t i, j;
+	bigint *tmp;
 
 	bigint::seed(S);
 
@@ -541,7 +541,7 @@ sparse_bigint_matrix_kernel< MATRIX_TYPE
 						       const bigint & S,
 						       const long d) const
 {
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	long TMP;
 	random_generator gen;
 
@@ -571,7 +571,7 @@ sparse_bigint_matrix_kernel< MATRIX_TYPE
 	MATRIX_TYPE T(RES.rows, RES.columns), T1(RES.rows, RES.columns);
 	bigint::seed(S);
 
-	register bigint *tmp = NULL, *tmp1;
+	bigint *tmp = NULL, *tmp1;
 	for (i = 0; i < RES.rows; i++) {
 		tmp = T.value[i];
 		tmp1 = T1.value[i];
@@ -600,9 +600,9 @@ inline void
 sparse_bigint_matrix_kernel< MATRIX_TYPE >::regexpansion (MATRIX_TYPE &RES,
 							  const lidia_size_t * v) const
 {
-	register lidia_size_t k = v[0];
+	lidia_size_t k = v[0];
 	if (RES.columns > k) {
-		register lidia_size_t i = 0, j = 0;
+		lidia_size_t i = 0, j = 0;
 		lidia_size_t diff = RES.columns - RES.rows;
 		MATRIX_TYPE A(RES);
 		RES.set_no_of_rows(RES.columns);
@@ -651,7 +651,7 @@ sparse_bigint_matrix_kernel< MATRIX_TYPE
 			"hnfmod_dkt(const bigint &)", DVALUE + 8);
 
 	// bigint part
-	register long i, j, z, diff = RES.columns - RES.rows;
+	long i, j, z, diff = RES.columns - RES.rows;
 
 	bigint RES0, RES1, RES2, RES3; // 0 = lggT, 1 = rggt, 2 = ggt
 	bigint x, y;
@@ -818,7 +818,7 @@ sparse_bigint_matrix_kernel< MATRIX_TYPE
 	debug_handler_l(DMESSAGE, "in member - function "
 			"hnfmod_mueller(MATRIX_TYPE &, const bigint &)", DVALUE + 8);
 
-	register long i, j;
+	long i, j;
 	bigint TMP, *TRANStmp;
 
 	// Step 1
@@ -937,7 +937,7 @@ sparse_bigint_matrix_kernel< MATRIX_TYPE
 	bigint RES3, RES2, RES1, RES0, x, y;
 	bigint TMP1, TMP2, TMP3;
 
-	register lidia_size_t startr, startc, i, j, l;
+	lidia_size_t startr, startc, i, j, l;
 	lidia_size_t index;
 
 	//
@@ -1067,7 +1067,7 @@ sparse_bigint_matrix_kernel< MATRIX_TYPE
 	bigint RES3, RES2, RES1, RES0, x, y;
 	bigint TMP1, TMP2, TMP3;
 
-	register lidia_size_t startr, startc, i, j, l;
+	lidia_size_t startr, startc, i, j, l;
 	lidia_size_t index;
 
 	MATRIX_TYPE Q1(RES.columns, RES.columns);
@@ -1219,7 +1219,7 @@ sparse_bigint_matrix_kernel< MATRIX_TYPE
 			"kernel1(const MATRIX_TYPE &)", DVALUE + 8);
 
 	bigint *ZBAtmp, *Atmp;
-	register long i, j;
+	long i, j;
 	lidia_size_t c = A.columns;
 
 	// Step 1
@@ -1269,7 +1269,7 @@ sparse_bigint_matrix_kernel< MATRIX_TYPE
 	debug_handler_l(DMESSAGE, "in member - function "
 			"kernel2(const MATRIX_TYPE &)", DVALUE + 8);
 
-	register lidia_size_t i;
+	lidia_size_t i;
 	MATRIX_TYPE B = A;
 	//hnf_havas_cont(B, RES);
 
@@ -1305,7 +1305,7 @@ sparse_bigint_matrix_kernel< MATRIX_TYPE
 	debug_handler_l(DMESSAGE, "in member - function "
 			"reginvimage1(const MATRIX_TYPE &, const MATRIX_TYPE &", DVALUE + 8);
 
-	register long i, j;
+	long i, j;
 	bigint TMP, TMP1;
 
 	// Step 1
@@ -1365,7 +1365,7 @@ sparse_bigint_matrix_kernel< MATRIX_TYPE
 	debug_handler_l(DMESSAGE, "in member - function "
 			"reginvimage2(const MATRIX_TYPE &, const MATRIX_TYPE &", DVALUE + 8);
 
-	register lidia_size_t i, j, len, oldlen;
+	lidia_size_t i, j, len, oldlen;
 	bigint TMP, TMP1;
 
 	// Step 1
@@ -1427,7 +1427,7 @@ sparse_bigint_matrix_kernel< MATRIX_TYPE
 			"image1(const MATRIX_TYPE &)", DVALUE + 8);
 
 	bigint *ZBAtmp, *Atmp;
-	register long i, j;
+	long i, j;
 
 	// Step 1
 	bigint H;
@@ -1477,7 +1477,7 @@ sparse_bigint_matrix_kernel< MATRIX_TYPE
 	debug_handler_l(DMESSAGE, "in member - function "
 			"image2(const MATRIX_TYPE &)", DVALUE + 8);
 
-	register lidia_size_t i;
+	lidia_size_t i;
 	RES.assign(A);
 	// hnf_havas_cont(RES);
 
@@ -1517,7 +1517,7 @@ sparse_bigint_matrix_kernel< MATRIX_TYPE
 				    "invimage(const MATRIX_TYPE & B, const bigint * b)",
 				    DMESSAGE, EMESSAGE[1]);
 
-	register long i;
+	long i;
 	bigint *tmp;
 
 	// Step 1
@@ -1569,7 +1569,7 @@ sparse_bigint_matrix_kernel< MATRIX_TYPE
 	debug_handler_l(DMESSAGE, "in member - function "
 			"invimage(const MATRIX_TYPE &, const math_vector< bigint > &)", DVALUE + 8);
 
-	register long i;
+	long i;
 	// Step 1
 	MATRIX_TYPE A = B;
 	A.set_no_of_columns(B.columns + 1);
@@ -1631,10 +1631,10 @@ sparse_bigint_matrix_kernel< MATRIX_TYPE
 	debug_handler_l(DMESSAGE, "in member - function "
 			"snf_hartley()", DVALUE + 8);
 
-	register lidia_size_t startr, startc, TEILBARKEIT;
+	lidia_size_t startr, startc, TEILBARKEIT;
 	bigint TMP1, TMP2;
 	bigint *tmp;
-	register lidia_size_t xpivot, ypivot, i, j, z;
+	lidia_size_t xpivot, ypivot, i, j, z;
 
 	for (startc = 0, startr = 0; startr < RES.rows && startc < RES.columns; startr++, startc++) {
 
@@ -1740,10 +1740,10 @@ sparse_bigint_matrix_kernel< MATRIX_TYPE
 	debug_handler_l(DMESSAGE, "in member - function "
 			"snf_hartley(MATRIX_TYPE &, MATRIX_TYPE &)", DVALUE + 8);
 
-	register lidia_size_t startr, startc, TEILBARKEIT;
+	lidia_size_t startr, startc, TEILBARKEIT;
 	bigint TMP1, TMP2;
 	lidia_size_t xpivot, ypivot;
-	register lidia_size_t i, j, z;
+	lidia_size_t i, j, z;
 
 	for (startc = 0, startr = 0; startr < RES.rows && startc < RES.columns; startr++, startc++) {
 
@@ -1872,7 +1872,7 @@ sparse_bigint_matrix_kernel< MATRIX_TYPE
 	MATRIX_TYPE TR2(RES.columns, RES.columns);
 
 	bigint *REM;
-	register lidia_size_t startr, startc, pivot, i, j, z, TEILBARKEIT;
+	lidia_size_t startr, startc, pivot, i, j, z, TEILBARKEIT;
 
 	for (startc = 0, startr = 0; startr < RES.rows && startc < RES.columns; startr++, startc++) {
 
@@ -1965,7 +1965,7 @@ sparse_bigint_matrix_kernel< MATRIX_TYPE
 	MATRIX_TYPE TR1 = T1;
 	MATRIX_TYPE TR2 = T2;
 	bigint *REM;
-	register lidia_size_t startr, startc, pivot, i, j, z, TEILBARKEIT;
+	lidia_size_t startr, startc, pivot, i, j, z, TEILBARKEIT;
 
 	for (startc = 0, startr = 0; startr < RES.rows && startc < RES.columns; startr++, startc++) {
 
@@ -2063,11 +2063,11 @@ sparse_bigint_matrix_kernel< MATRIX_TYPE
 			"snf_havas()", DVALUE + 8);
 
 //  std::cout << "snf_havas() " << std::endl;
-	register lidia_size_t i, j, z, index;
+	lidia_size_t i, j, z, index;
 	bigint PIVOT;
 	bigint *tmp = NULL;
 
-	register lidia_size_t startr, startc, xpivot, ypivot, SW, TEILBARKEIT;
+	lidia_size_t startr, startc, xpivot, ypivot, SW, TEILBARKEIT;
 	bigint TMP1, TMP2;
 
 	for (startc = 0, startr = 0; startr < RES.rows && startc < RES.columns; startr++, startc++) {
@@ -2181,11 +2181,11 @@ sparse_bigint_matrix_kernel< MATRIX_TYPE
 			"snf_havas(MATRIX_TYPE &, MATRIX_TYPE &)", DVALUE + 8);
 
 //  std::cout << "snf_havas2() " << std::endl;
-	register lidia_size_t i, j, z, index;
+	lidia_size_t i, j, z, index;
 	bigint PIVOT;
 	bigint *tmp = NULL;
 
-	register lidia_size_t startr, startc, xpivot, ypivot, SW, TEILBARKEIT;
+	lidia_size_t startr, startc, xpivot, ypivot, SW, TEILBARKEIT;
 	bigint TMP1, TMP2;
 
 	for (startc = 0, startr = 0; startr < RES.rows && startc < RES.columns; startr++, startc++) {
@@ -2312,11 +2312,11 @@ sparse_bigint_matrix_kernel< MATRIX_TYPE
 {
 	debug_handler_l(DMESSAGE, "in member - function "
 			"snf_mult(MATRIX_TYPE &, MATRIX_TYPE &)", DVALUE + 8);
-	register lidia_size_t i, j, z, index, SW;
+	lidia_size_t i, j, z, index, SW;
 	bigint TMP1, TMP2;
 	bigint *tmp = NULL;
 
-	register lidia_size_t startr, startc, xpivot, ypivot, TEILBARKEIT;
+	lidia_size_t startr, startc, xpivot, ypivot, TEILBARKEIT;
 	bigint ROW, COLUMN, PIVOT, NORM;
 
 	for (startc = 0, startr = 0; startr < RES.rows && startc < RES.columns; startr++, startc++) {
@@ -2449,11 +2449,11 @@ sparse_bigint_matrix_kernel< MATRIX_TYPE
 	debug_handler_l(DMESSAGE, "in member - function "
 			"snf_mult(MATRIX_TYPE &, MATRIX_TYPE &)", DVALUE + 8);
 
-	register lidia_size_t i, j, z, index, SW;
+	lidia_size_t i, j, z, index, SW;
 	bigint TMP1, TMP2;
 	bigint *tmp = NULL;
 
-	register lidia_size_t startr, startc, xpivot, ypivot, TEILBARKEIT;
+	lidia_size_t startr, startc, xpivot, ypivot, TEILBARKEIT;
 	bigint ROW, COLUMN, PIVOT, NORM;
 
 	for (startc = 0, startr = 0; startr < RES.rows && startc < RES.columns; startr++, startc++) {
@@ -2600,11 +2600,11 @@ sparse_bigint_matrix_kernel< MATRIX_TYPE
 	debug_handler_l(DMESSAGE, "in member - function "
 			"snf_add(long)", DVALUE + 8);
 
-	register lidia_size_t i, j, z, index, SW;
+	lidia_size_t i, j, z, index, SW;
 	bigint TMP1, TMP2;
 	bigint *tmp = NULL;
 
-	register lidia_size_t startr, startc, xpivot, ypivot, TEILBARKEIT;
+	lidia_size_t startr, startc, xpivot, ypivot, TEILBARKEIT;
 	bigint ROW, COLUMN, PIVOT, NORM;
 
 	for (startc = 0, startr = 0; startr < RES.rows && startc < RES.columns; startr++, startc++) {
@@ -2737,11 +2737,11 @@ sparse_bigint_matrix_kernel< MATRIX_TYPE
 	debug_handler_l(DMESSAGE, "in member - function "
 			"snf_add(MATRIX_TYPE &, MATRIX_TYPE &, long)", DVALUE + 8);
 
-	register lidia_size_t i, j, z, index, SW;
+	lidia_size_t i, j, z, index, SW;
 	bigint TMP1, TMP2;
 	bigint *tmp = NULL;
 
-	register lidia_size_t startr, startc, xpivot, ypivot, TEILBARKEIT;
+	lidia_size_t startr, startc, xpivot, ypivot, TEILBARKEIT;
 	bigint ROW, COLUMN, PIVOT, NORM;
 
 	for (startc = 0, startr = 0; startr < RES.rows && startc < RES.columns; startr++, startc++) {
@@ -2888,11 +2888,11 @@ sparse_bigint_matrix_kernel< MATRIX_TYPE
 	debug_handler_l(DMESSAGE, "in member - function "
 			"snf_new(long)", DVALUE + 8);
 
-	register lidia_size_t i, j, z, index, SW;
+	lidia_size_t i, j, z, index, SW;
 	bigint TMP1, TMP2;
 	bigint *tmp = NULL;
 
-	register lidia_size_t startr, startc, xpivot, ypivot, TEILBARKEIT;
+	lidia_size_t startr, startc, xpivot, ypivot, TEILBARKEIT;
 	bigint ROW, COLUMN, PIVOT, NORM;
 
 	bigint *RO = new bigint[RES.rows];
@@ -3030,11 +3030,11 @@ sparse_bigint_matrix_kernel< MATRIX_TYPE
 {
 	debug_handler_l(DMESSAGE, "in member - function "
 			"snf_new(MATRIX_TYPE &, MATRIX_TYPE &, long)", DVALUE + 8);
-	register lidia_size_t i, j, z, index, SW;
+	lidia_size_t i, j, z, index, SW;
 	bigint TMP1, TMP2;
 	bigint *tmp = NULL;
 
-	register lidia_size_t startr, startc, xpivot, ypivot, TEILBARKEIT;
+	lidia_size_t startr, startc, xpivot, ypivot, TEILBARKEIT;
 	bigint ROW, COLUMN, PIVOT, NORM;
 
 	bigint *RO = new bigint[RES.rows];
@@ -3190,7 +3190,7 @@ sparse_bigint_matrix_kernel< MATRIX_TYPE
 	debug_handler_l(DMESSAGE, "in member - function "
 			"snfmod_dkt(const bigint &)", DVALUE + 8);
 
-	register lidia_size_t diagindex, j, z, l;
+	lidia_size_t diagindex, j, z, l;
 
 	bigint RES0, RES1, RES2, RES3; // 0 = lggT, 1 = rggt, 2 = ggt
 	bigint x, y;
@@ -3293,7 +3293,7 @@ sparse_bigint_matrix_kernel< MATRIX_TYPE
 	debug_handler_l(DMESSAGE, "in member - function "
 			"snfmod_cohen(const bigint &)", DVALUE + 8);
 
-	register lidia_size_t diagindex, j, z, l;
+	lidia_size_t diagindex, j, z, l;
 
 	bigint RES0, RES1, RES2, RES3; // 0 = lggT, 1 = rggt, 2 = ggt
 	bigint x, y;
@@ -3393,7 +3393,7 @@ sparse_bigint_matrix_kernel< MATRIX_TYPE
 
 	MATRIX_TYPE TR(RES.columns, RES.columns);
 	bigint *REM = NULL;
-	register lidia_size_t startr = 0, startc = 0, i;
+	lidia_size_t startr = 0, startc = 0, i;
 
 	for (startc = RES.columns - 1, startr = RES.rows - 1; startr >= 0 && startc >= 0; startr--, startc--) {
 
@@ -3581,7 +3581,7 @@ sparse_bigint_matrix_kernel< MATRIX_TYPE
 	debug_handler("multiple_gcd", "in member - function "
 		      "mgcd2(const bigint *, lidia_size_t)");
 
-	register lidia_size_t i, j, index, bound, SW;
+	lidia_size_t i, j, index, bound, SW;
 	bigint MIN, TMP, q, r, *Ttmp1, *Ttmp2 = NULL;
 
 	if (RES.columns != n)
--- lidia-2.3.0+latte-patches-2014-10-04/src/linear_algebra/include/LiDIA/matrix/sparse_bigint_matrix_modules.cc.orig	2009-05-09 09:24:47.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/linear_algebra/include/LiDIA/matrix/sparse_bigint_matrix_modules.cc	2021-03-18 14:44:25.165044774 -0600
@@ -54,7 +54,7 @@ column_oriented_sparse_matrix_modules< T
 						    lidia_size_t x,
 						    lidia_size_t y) const
 {
-	for (register lidia_size_t i = 0; i < A.value_counter[y]; i++) {
+	for (lidia_size_t i = 0; i < A.value_counter[y]; i++) {
 		if (A.index[y][i] == x)
 			return A.value[y][i];
 	}
@@ -74,7 +74,7 @@ column_oriented_sparse_matrix_modules< T
 						 lidia_size_t x,
 						 const T &e) const
 {
-	register lidia_size_t p, i;
+	lidia_size_t p, i;
 	if (e != A.Zero) {
 		for (p = A.value_counter[x] - 1; p >= 0 && A.index[x][p] >= y; p--) {
 			if (A.index[x][p] == y) {
@@ -93,13 +93,13 @@ column_oriented_sparse_matrix_modules< T
 			}
 
 			lidia_size_t len = ((A.allocated[x]*DELTA < A.columns) ? A.allocated[x]*DELTA : A.rows);
-			register T *tmp1 = new T[len];
+			T *tmp1 = new T[len];
 			memory_handler(tmp1, DMESSAGE,
 				       "sto(MR< T > &, lidia_size_t, "
 				       "lidia_size_t, const T &) :: "
 				       "Error in memory allocation (tmp1)");
 
-			register lidia_size_t *tmp2 = new lidia_size_t[len];
+			lidia_size_t *tmp2 = new lidia_size_t[len];
 			memory_handler(tmp2, DMESSAGE,
 				       "sto(MR< T > &, lidia_size_t, "
 				       "lidia_size_t, const T &) :: "
@@ -122,8 +122,8 @@ column_oriented_sparse_matrix_modules< T
 
 		}
 
-		register T *tmp1 = A.value[x];
-		register lidia_size_t *tmp2 = A.index[x];
+		T *tmp1 = A.value[x];
+		lidia_size_t *tmp2 = A.index[x];
 
 		for (i = A.value_counter[x]; i - 1 > p; i--) {
 			LiDIA::swap(tmp1[i], tmp1[i - 1]);
@@ -183,7 +183,7 @@ inline void
 column_oriented_sparse_matrix_modules< T >::max_abs (const MR< T > &RES,
 						     T &MAX) const
 {
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	bool SW = false;
 
 	for (i = 0; i < RES.columns; i++) {
@@ -220,7 +220,7 @@ column_oriented_sparse_matrix_modules< T
 
 	T TMP;
 
-	register lidia_size_t l1, l2, l3;
+	lidia_size_t l1, l2, l3;
 	for (l1 = l2 = l3 = 0; l2 < A.value_counter[index1] && l1 < A.value_counter[index2];) {
 		if (A.index[index2][l1] == A.index[index1][l2]) {
 			LiDIA::multiply(TMP, q, A.value[index2][l1]);
@@ -315,7 +315,7 @@ column_oriented_sparse_matrix_modules< T
 	A.allocated[index1] = len;
 	T TMP;
 
-	register lidia_size_t l1, l2, l3;
+	lidia_size_t l1, l2, l3;
 	for (l1 = l2 = l3 = 0; l2 < A.value_counter[index1] && l1 < A.value_counter[index2];) {
 		if (A.index[index2][l1] == A.index[index1][l2]) {
 			LiDIA::mult_mod(TMP, q, A.value[index2][l1], mod);
@@ -404,7 +404,7 @@ column_oriented_sparse_matrix_modules< T
 	A.allocated[index1] = len;
 	T TMP;
 
-	register lidia_size_t l1, l2, l3;
+	lidia_size_t l1, l2, l3;
 	for (l1 = l2 = l3 = 0; l2 < A.value_counter[index1] && l1 < A.value_counter[index2];) {
 		if (A.index[index2][l1] == A.index[index1][l2]) {
 			LiDIA::mult_mod(TMP, q, A.value[index2][l1], mod);
@@ -494,7 +494,7 @@ column_oriented_sparse_matrix_modules< T
 							   lidia_size_t pos,
 							   lidia_size_t len) const
 {
-	for (register lidia_size_t i = 0; i < A.value_counter[pos] && A.index[pos][i] <= len; i++)
+	for (lidia_size_t i = 0; i < A.value_counter[pos] && A.index[pos][i] <= len; i++)
 		A.value[pos][i] = -A.value[pos][i];
 }
 
@@ -507,7 +507,7 @@ column_oriented_sparse_matrix_modules< T
 							       lidia_size_t len,
 							       const T &mod) const
 {
-	for (register lidia_size_t i = 0; i < A.value_counter[pos] && A.index[pos][i] <= len; i++) {
+	for (lidia_size_t i = 0; i < A.value_counter[pos] && A.index[pos][i] <= len; i++) {
 		A.value[pos][i] = -A.value[pos][i];
 		LiDIA::best_remainder(A.value[pos][i], A.value[pos][i], mod);
 	}
@@ -524,7 +524,7 @@ void
 column_oriented_sparse_matrix_modules< T >::hadamard (const MR< T > &A,
 						      bigint &H) const
 {
-	register lidia_size_t min, i, j;
+	lidia_size_t min, i, j;
 
 	if (A.columns < A.rows) {
 		min = A.columns;
@@ -536,8 +536,8 @@ column_oriented_sparse_matrix_modules< T
 	bigint TMP;
 
 	// Step 1 - 11
-	register bigint *hcolumns = new bigint[A.columns];
-	register bigint *hrows = new bigint[A.rows];
+	bigint *hcolumns = new bigint[A.columns];
+	bigint *hrows = new bigint[A.rows];
 
 	for (j = 0; j < A.columns; j++) {
 		for (i = 0; i < A.value_counter[j]; i++) {
@@ -598,7 +598,7 @@ column_oriented_sparse_matrix_modules< T
 	else
 		M.assign(ROWS);
 
-	register lidia_size_t B = M.bit_length() - 1;
+	lidia_size_t B = M.bit_length() - 1;
 	bigint E = (bigint(B) / bigint(2)) + bigint(2);
 	power(H, bigint(2), E);
 	dec(H);
@@ -616,7 +616,7 @@ column_oriented_sparse_matrix_modules< T
 							      lidia_size_t i,
 							      T *max_array) const
 {
-	for (register lidia_size_t j = 0; j < A.value_counter[i]; j++)
+	for (lidia_size_t j = 0; j < A.value_counter[i]; j++)
 		if (max_array[i] < abs(A.value[i][j]))
 			max_array[i] = abs(A.value[i][j]);
 }
@@ -633,8 +633,8 @@ column_oriented_sparse_matrix_modules< T
 	for (lidia_size_t i = 0; i < A.columns; i++)
 		max_array[i] = 0;
 
-	for (register lidia_size_t i = 0; i < A.columns; i++)
-		for (register lidia_size_t j = 0; j < A.value_counter[i]; j++)
+	for (lidia_size_t i = 0; i < A.columns; i++)
+		for (lidia_size_t j = 0; j < A.value_counter[i]; j++)
 			if (max_array[i] < abs(A.value[i][j]))
 				max_array[i] = abs(A.value[i][j]);
 
@@ -684,11 +684,11 @@ column_oriented_sparse_matrix_modules< T
 							    lidia_size_t &index) const
 {
 	T pivot = 0;
-	register lidia_size_t COUNT = 0;
+	lidia_size_t COUNT = 0;
 	lidia_size_t j;
 
-	for (register lidia_size_t i = startc; i >= 0; i--) {
-		register T *tmp = A.value[i];
+	for (lidia_size_t i = startc; i >= 0; i--) {
+		T *tmp = A.value[i];
 
 
 		// Position
@@ -1361,7 +1361,7 @@ column_oriented_sparse_matrix_modules< T
 						       lidia_size_t &no_of_elements,
 						       T &Durch) const
 {
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	bool SW = false;
 	no_of_elements = 0;
 	Durch = 0;
@@ -1391,7 +1391,7 @@ template< class T >
 inline void
 column_oriented_sparse_matrix_modules< T >::max (MR< T > &RES, T &MAX) const
 {
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	bool SW = false;
 
 	for (i = 0; i < RES.columns; i++)
@@ -1580,7 +1580,7 @@ column_oriented_sparse_matrix_modules< T
 							  lidia_size_t len) const
 {
 	lidia_size_t n = startc + 1;
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 
 	matrix< T > Tr;
 	Tr.set_representation(matrix_flags::sparse_representation);
@@ -1681,7 +1681,7 @@ column_oriented_sparse_matrix_modules< T
 							  lidia_size_t len) const
 {
 	lidia_size_t n = startc + 1;
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 
 
 	matrix< T > Tr;
@@ -1781,7 +1781,7 @@ column_oriented_sparse_matrix_modules< T
 {
 	lidia_size_t n = startc + 1;
 
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 
 	if (n <= 0)
 		lidia_error_handler("multiple_gcd", "mgcd :: Error in parameter !!");
@@ -1834,7 +1834,7 @@ column_oriented_sparse_matrix_modules< T
 {
 	lidia_size_t n = startc + 1;
 
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 
 	if (n <= 0)
 		lidia_error_handler("multiple_gcd", "mgcd :: Error in parameter !!");
@@ -2013,7 +2013,7 @@ bool column_oriented_sparse_matrix_modul
 	T A3 = 0, A2 = 0, A1 = 0, A0 = 0, x = 0, y = 0;
 	T TMP1, TMP2, TMP3;
 
-	register lidia_size_t i, j, l;
+	lidia_size_t i, j, l;
 	lidia_size_t index;
 
 	//
@@ -2109,7 +2109,7 @@ column_oriented_sparse_matrix_modules< T
 	T A3, A2, A1, A0, x, y;
 	T TMP1, TMP2, TMP3;
 
-	register lidia_size_t i, j, l;
+	lidia_size_t i, j, l;
 	lidia_size_t index;
 
 	//
--- lidia-2.3.0+latte-patches-2014-10-04/src/linear_algebra/include/LiDIA/matrix/sparse_fp_matrix_algorithms.cc.orig	2009-05-09 09:24:47.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/linear_algebra/include/LiDIA/matrix/sparse_fp_matrix_algorithms.cc	2021-03-18 14:44:40.980014768 -0600
@@ -79,7 +79,7 @@ sparse_fp_matrix_algorithms< T, MATRIX_T
 								const T &mod) const
 {
 	T TMP, RES = 0;
-	for (register lidia_size_t i = 0; i < v.size(); i++) {
+	for (lidia_size_t i = 0; i < v.size(); i++) {
 		mult_mod(TMP, v[i], w[i], mod);
 		add_mod(RES, RES, TMP, mod);
 	}
@@ -817,7 +817,7 @@ sparse_fp_matrix_algorithms< T, MATRIX_T
 	math_vector< T > u(n, n), p(n, n), r(n, n);
 	long TMPlong;
 	random_generator gen;
-	for (register lidia_size_t i = 0; i < n; i++) {
+	for (lidia_size_t i = 0; i < n; i++) {
 		gen >> TMPlong;
 		u[i] = TMPlong % mod;
 	}
--- lidia-2.3.0+latte-patches-2014-10-04/src/linear_algebra/include/LiDIA/matrix/sparse_fp_matrix_kernel.cc.orig	2009-05-09 09:24:47.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/linear_algebra/include/LiDIA/matrix/sparse_fp_matrix_kernel.cc	2021-03-18 14:44:56.300985694 -0600
@@ -56,7 +56,7 @@ sparse_fp_matrix_kernel< T, MATRIX_TYPE
 
 
 
-	register lidia_size_t index = 0, i = 0, j = 0;
+	lidia_size_t index = 0, i = 0, j = 0;
 
 	lidia_size_t startr = A.rows;
 	lidia_size_t startc = A.columns;
@@ -64,7 +64,7 @@ sparse_fp_matrix_kernel< T, MATRIX_TYPE
 	T TMP, TMP1, TMP2;
 
 	// Step 1 - 4
-	register int exchange = 1;
+	int exchange = 1;
 
 	// Step 5 - 8
 	for (--startc, --startr; startr >= 0 && startc >= 0; startc--, startr--) {
@@ -125,7 +125,7 @@ sparse_fp_matrix_kernel< T, MATRIX_TYPE
 	// Version: bigint 1.9
 	//
 
-	register lidia_size_t index = 0, i = 0, j = 0;
+	lidia_size_t index = 0, i = 0, j = 0;
 	lidia_size_t startr = A.rows;
 	lidia_size_t startc = A.columns;
 
@@ -141,7 +141,7 @@ sparse_fp_matrix_kernel< T, MATRIX_TYPE
 	bool SW = true;
 
 	// Step 1 - 4
-	register int exchange = 1;
+	int exchange = 1;
 
 	// Step 5 - 8
 	for (--startc, --startr; startr >= 0 && startc >= 0; startc--, startr--) {
@@ -219,7 +219,7 @@ sparse_fp_matrix_kernel< T, MATRIX_TYPE
 	debug_handler_l("bigint_matrix",
 			"rank(MATRIX_TYPE &A, const T &)", LDBL_MATRIX);
 
-	register lidia_size_t i, j, No = 0;
+	lidia_size_t i, j, No = 0;
 
 	// Step 1, 2
 	STF(A, mod);
@@ -261,7 +261,7 @@ sparse_fp_matrix_kernel< T, MATRIX_TYPE
 	debug_handler("bigint_matrix",
 		      "lininr(MATRIX_TYPE &A, const T &)");
 
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	lidia_size_t *l = new lidia_size_t[A.columns];
 	for (i = 0; i < A.columns; l[i] = 0, i++);
 
@@ -306,7 +306,7 @@ sparse_fp_matrix_kernel< T, MATRIX_TYPE
 	// Version: 1.9
 	//
 
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 	lidia_size_t *l = new lidia_size_t[A.columns + 1];
 	memory_handler(l, "bigint_matrix", "lininc_intern :: "
 		       "Error in memory allocation (l)");
@@ -356,7 +356,7 @@ sparse_fp_matrix_kernel< T, MATRIX_TYPE
 	debug_handler("bigint_matrix", "in inline - function "
 		      "adj(MATRIX_TYPE &, cont T &)");
 
-	register lidia_size_t i, j, z;
+	lidia_size_t i, j, z;
 	T TMP, TMP1, TMP2;
 	T *tmp, *tmp1, *Btmp, *Btmp1;
 	lidia_size_t exchange = 1;
@@ -473,7 +473,7 @@ sparse_fp_matrix_kernel< T, MATRIX_TYPE
 
 	debug_handler("bigint_matrix", "det(MATRIX_TYPE &, T)");
 
-	register lidia_size_t i, j, z;
+	lidia_size_t i, j, z;
 	T TMP, TMP1, TMP2;
 
 	// Step 1 - 4
--- lidia-2.3.0+latte-patches-2014-10-04/src/linear_algebra/m_multiple_gcd.cc.orig	2010-01-30 08:00:52.000000000 -0700
+++ lidia-2.3.0+latte-patches-2014-10-04/src/linear_algebra/m_multiple_gcd.cc	2021-03-18 14:45:24.603931989 -0600
@@ -45,7 +45,7 @@ mgcd(const bigint * a, lidia_size_t n)
 			"mgcd(const bigint *, lidia_size_t)", LDBL_MATRIX);
 
 	bigint *RES = NULL;
-	register lidia_size_t i;
+	lidia_size_t i;
 
 	if (n <= 0)
 		lidia_error_handler("multiple_gcd", "mgcd :: Error in parameter !!");
@@ -149,7 +149,7 @@ mgcd_new(const bigint * a, lidia_size_t
 			"mgcd(const bigint *, lidia_size_t)", LDBL_MATRIX);
 
 	bigint *RES = new bigint[n+1];
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 
 	if (n <= 0)
 		lidia_error_handler("multiple_gcd", "mgcd :: Error in parameter !!");
@@ -216,7 +216,7 @@ mgcd_new2(const bigint * a, lidia_size_t
 			"mgcd(const bigint *, lidia_size_t)", LDBL_MATRIX);
 
 	bigint *RES = new bigint[n+1];
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 
 	if (n <= 0)
 		lidia_error_handler("multiple_gcd", "mgcd :: Error in parameter !!");
@@ -300,7 +300,7 @@ mgcd_new3(const bigint * b, lidia_size_t
 		a[h] = b[h];
 
 	bigint *RES = new bigint[n+1];
-	register lidia_size_t i, j;
+	lidia_size_t i, j;
 
 	if (n <= 0)
 		lidia_error_handler("multiple_gcd", "mgcd :: Error in parameter !!");
@@ -424,7 +424,7 @@ mgcd2(bigint & RES, const bigint * acons
 	debug_handler("multiple_gcd", "in member - function "
 		      "mgcd2(bigint &, const bigint *, lidia_size_t)");
 
-	register lidia_size_t i, index, SW, bound;
+	lidia_size_t i, index, SW, bound;
 	bigint MIN, TMP, q, r;
 
 	bigint *a = new bigint[n + 1];
@@ -490,7 +490,7 @@ mgcd2(const bigint * aconst, lidia_size_
 	debug_handler("multiple_gcd", "in function "
 		      "mgcd2(const bigint *, lidia_size_t)");
 
-	register lidia_size_t i, j, index, SW, bound;
+	lidia_size_t i, j, index, SW, bound;
 	bigint MIN, TMP, q, r, *Ttmp1, *Ttmp2 = NULL;
 
 	matrix< bigint > T(n, n);
@@ -674,7 +674,7 @@ mgcd3(const bigint * aconst, lidia_size_
 	debug_handler("multiple_gcd", "in member - function "
 		      "mgcd3(const bigint *, lidia_size_t)");
 
-	register lidia_size_t i, j, index, bound, SW;
+	lidia_size_t i, j, index, bound, SW;
 	bigint MIN, TMP, q, r, *Ttmp2 = NULL, *Ttmp1;
 
 	if (columns != n)
@@ -766,7 +766,7 @@ mgcd4(const bigint * aconst, lidia_size_
 	debug_handler("multiple_gcd", "in member - function "
 		      "mgcd4(const bigint *, lidia_size_t)");
 
-	register lidia_size_t i, j, index, bound, SW;
+	lidia_size_t i, j, index, bound, SW;
 	bigint MIN, TMP, q, r, *Ttmp1, *Ttmp2 = NULL;
 
 	if (columns != n)
--- lidia-2.3.0+latte-patches-2014-10-04/src/linear_algebra/ring_matrix_appl.cc.orig	2009-05-09 09:24:54.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/linear_algebra/ring_matrix_appl.cc	2021-03-18 14:45:36.475909467 -0600
@@ -58,7 +58,7 @@ int main_LiDIA (int argc, char* argv[])
 	std::ifstream in(IN_NAME);
 	std::ofstream dz(OUT_NAME);
 
-	register int i, j;
+	int i, j;
 
 	// pointer
 	TYPE *pointer_1 = NULL;
--- lidia-2.3.0+latte-patches-2014-10-04/src/linear_algebra/trans_matrix.cc.orig	2009-05-09 09:24:54.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/linear_algebra/trans_matrix.cc	2021-03-18 14:45:48.147888276 -0600
@@ -147,7 +147,7 @@ trans_matrix::touch_files()
 {
 	// touch all temporary files in order to give current date stamps
 	if (files) {
-		register lidia_size_t i;
+		lidia_size_t i;
 		char command[100];
 
 		for (i = 0; i < size; ++i) {
--- lidia-2.3.0+latte-patches-2014-10-04/src/portability/random.c.orig	2009-05-09 09:24:18.000000000 -0600
+++ lidia-2.3.0+latte-patches-2014-10-04/src/portability/random.c	2021-03-18 14:46:09.347850732 -0600
@@ -193,7 +193,7 @@ void srandom(x)
 
 	unsigned x;
 {
-	register int i, j;
+	int i, j;
 	long random();
 
 	if (rand_type == TYPE_0)
@@ -240,7 +240,7 @@ initstate(seed, arg_state, n)
 	char *arg_state; /* pointer to state array */
 	size_t n; /* # bytes of state info */
 {
-	register char *ostate = (char *) (&state[-1]);
+	char *ostate = (char *) (&state[-1]);
 
 	if (rand_type == TYPE_0)
 		state[-1] = rand_type;
@@ -319,9 +319,9 @@ setstate(arg_state)
 
 	const char *arg_state;
 {
-	register long *new_state = (long *) arg_state;
-	register int type = new_state[0] % MAX_TYPES;
-	register int rear = new_state[0] / MAX_TYPES;
+	long *new_state = (long *) arg_state;
+	int type = new_state[0] % MAX_TYPES;
+	int rear = new_state[0] / MAX_TYPES;
 	char *ostate = (char *) (&state[-1]);
 
 	if (rand_type == TYPE_0)