bug-gnubg
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Bug-gnubg] gcc 4.0 patch for 0.14.3


From: Russ Allbery
Subject: [Bug-gnubg] gcc 4.0 patch for 0.14.3
Date: Sun, 15 Jan 2006 21:37:14 -0800
User-agent: Gnus/5.110004 (No Gnus v0.4) XEmacs/21.4.17 (linux)

My guess is that this is already in CVS for 0.15, but just in case.
0.14.3 needed the following modifications to build with gcc 4.0.

--- gnubg-0.14.3.orig/eval.c
+++ gnubg-0.14.3/eval.c
@@ -798,7 +798,11 @@
            if( !fstat( h, &st ) &&
                ( p = mmap( NULL, st.st_size, PROT_READ | PROT_WRITE,
                            MAP_PRIVATE, h, 0 ) ) ) {
-               ( (float *) p ) += 2; /* skip magic number and version */
+                /* gcc 4 doesn't support casts as lvalues.
+                   -- rra, 2006-01-14 */
+                float *pf = p;
+                pf += 2;              /* skip magic number and version */
+                p = pf;
                fReadWeights =
                    ( p = NeuralNetCreateDirect( &nnContact, p ) ) &&
                    ( p = NeuralNetCreateDirect( &nnRace, p ) ) &&
--- gnubg-0.14.3.orig/rollout.c
+++ gnubg-0.14.3/rollout.c
@@ -219,7 +219,7 @@
     nPermutationSeed = n;
 }
 
-static int nSkip;
+int nSkip;
 
 static int RolloutDice( int iTurn, int iGame, int cGames,
                             int fInitial,
--- gnubg-0.14.3.orig/lib/neuralnet.c
+++ gnubg-0.14.3/lib/neuralnet.c
@@ -385,14 +385,20 @@
     return 0;
 }
 extern void *NeuralNetCreateDirect( neuralnet *pnn, void *p ) {
- 
-   pnn->cInput = *( ( (int *) p )++ );
-   pnn->cHidden = *( ( (int *) p )++ );
-   pnn->cOutput = *( ( (int *) p )++ );
-   pnn->nTrained = *( ( (int *) p )++ );
+   /* gcc 4 doesn't support casts as lvalues.  -- rra, 2006-01-14 */
+   int *pi;
+   float *pf;
+
+   pi = p;
+   pnn->cInput = *( pi++ );
+   pnn->cHidden = *( pi++ );
+   pnn->cOutput = *( pi++ );
+   pnn->nTrained = *( pi++ );
+   p = pi;
    pnn->fDirect = TRUE;
-   pnn->rBetaHidden = *( ( (float *) p )++ );
-   pnn->rBetaOutput = *( ( (float *) p )++ );
+   pf = p;
+   pnn->rBetaHidden = *( pf++ );
+   pnn->rBetaOutput = *( pf++ );
  
    if( pnn->cInput < 1 || pnn->cHidden < 1 || pnn->cOutput < 1 ||
      pnn->nTrained < 0 || pnn->rBetaHidden <= 0.0 ||
@@ -402,14 +408,15 @@
      return NULL;
    }
  
-   pnn->arHiddenWeight = p;
-   ( (float *) p ) += pnn->cInput * pnn->cHidden;
-   pnn->arOutputWeight = p;
-   ( (float *) p ) += pnn->cHidden * pnn->cOutput;
-   pnn->arHiddenThreshold = p;
-   ( (float *) p ) += pnn->cHidden;
-   pnn->arOutputThreshold = p;
-   ( (float *) p ) += pnn->cOutput;
+   pnn->arHiddenWeight = pf;
+   pf += pnn->cInput * pnn->cHidden;
+   pnn->arOutputWeight = pf;
+   pf += pnn->cHidden * pnn->cOutput;
+   pnn->arHiddenThreshold = pf;
+   pf += pnn->cHidden;
+   pnn->arOutputThreshold = pf;
+   pf += pnn->cOutput;
+   p = pf;
 
    pnn->savedBase = malloc( pnn->cHidden * sizeof( float ) ); 
    pnn->savedIBase = malloc( pnn->cInput * sizeof( float ) ); 

-- 
Russ Allbery (address@hidden)             <http://www.eyrie.org/~eagle/>




reply via email to

[Prev in Thread] Current Thread [Next in Thread]