diff -uNr ATLAS.orig/CONFIG/src/backend/archinfo_linux.c ATLAS/CONFIG/src/backend/archinfo_linux.c
--- ATLAS.orig/CONFIG/src/backend/archinfo_linux.c	2010-02-01 23:28:58.000000000 +0000
+++ ATLAS/CONFIG/src/backend/archinfo_linux.c	2010-02-02 22:38:31.000000000 +0000
@@ -145,14 +145,12 @@
  *    Add these back if we get machine access and can test
  */
    case AFSPARC:  /* don't know here anymore */
-      #if 0
       if ( !CmndOneLine(NULL, "fgrep cpu /proc/cpuinfo", res) )
       {
-         if (strstr(res, "UltraSparc II")) mach = SunUS2;
-         else if (strstr(res, "UltraSparc I")) mach = SunUS1;
-         else if (strstr(res, "UltraSparc")) mach = SunUSX;
+         if (strstr(res, "UltraSparc II")) mach = SunUSII;
+         else if (strstr(res, "UltraSparc I")) mach = SunUSI;
+         else if (strstr(res, "UltraSparc")) mach = SunUSII;
       }
-      #endif
       break;
    case AFALPHA:
       #if 0
@@ -196,6 +194,11 @@
       reslns = CmndResults(NULL, "grep '^processor' /proc/cpuinfo");
       if (reslns) ncpu = fNumLines(reslns);
    }
+   if (__sparc__) 
+   {
+      reslns = CmndResults(NULL, "grep '^CPU.*online' /proc/cpuinfo"); 
+      if (reslns) ncpu = fNumLines(reslns);
+   }
    return(ncpu);
 }
 
diff -uNr ATLAS.orig/tune/blas/gemm/CASES/ATL_dmm4x4x2_US.c ATLAS/tune/blas/gemm/CASES/ATL_dmm4x4x2_US.c
--- ATLAS.orig/tune/blas/gemm/CASES/ATL_dmm4x4x2_US.c	2010-02-01 23:29:23.000000000 +0000
+++ ATLAS/tune/blas/gemm/CASES/ATL_dmm4x4x2_US.c	2010-02-01 23:30:07.000000000 +0000
@@ -95,6 +95,11 @@
 #define incBm   %g3
 #define incBn   %g4
 
+#if defined(__sparc__) && defined(__arch64__)
+        .register               %g2, #scratch
+        .register               %g3, #scratch
+#endif
+
 #ifdef DCPLX
    #define incCm 64
    #define CSH 4
diff -uNr ATLAS.orig/tune/blas/gemm/CASES/ATL_dmm4x4x8_US.c ATLAS/tune/blas/gemm/CASES/ATL_dmm4x4x8_US.c
--- ATLAS.orig/tune/blas/gemm/CASES/ATL_dmm4x4x8_US.c	2010-02-01 23:29:24.000000000 +0000
+++ ATLAS/tune/blas/gemm/CASES/ATL_dmm4x4x8_US.c	2010-02-01 23:30:08.000000000 +0000
@@ -135,6 +135,11 @@
    #define pfB	%i2  /* aliased with ldab */
 #endif
 
+#if defined(__sparc__) && defined(__arch64__) 
+        .register               %g2, #scratch
+        .register               %g3, #scratch
+#endif
+
 #ifdef DCPLX
    #define CMUL(arg_) ((arg_)*2)
    #define incCm 64
diff -uNr ATLAS.orig/tune/blas/gemm/CASES/ATL_smm4x4x2_US.c ATLAS/tune/blas/gemm/CASES/ATL_smm4x4x2_US.c
--- ATLAS.orig/tune/blas/gemm/CASES/ATL_smm4x4x2_US.c	2010-02-01 23:29:25.000000000 +0000
+++ ATLAS/tune/blas/gemm/CASES/ATL_smm4x4x2_US.c	2010-02-01 23:30:09.000000000 +0000
@@ -93,6 +93,12 @@
 #define rC23	%f30
 #define rC33	%f31
 #define FSIZE	64
+
+#if defined(__sparc__) && defined(__arch64__)
+        .register               %g2, #scratch
+        .register               %g3, #scratch
+#endif
+
 #ifdef SCPLX
    #define CSH 3
    #define CMUL(arg_) ((arg_)*2)
diff -uNr ATLAS.orig/tune/blas/gemm/CASES/ATL_smm4x4x72_US.c ATLAS/tune/blas/gemm/CASES/ATL_smm4x4x72_US.c
--- ATLAS.orig/tune/blas/gemm/CASES/ATL_smm4x4x72_US.c	2010-02-01 23:29:25.000000000 +0000
+++ ATLAS/tune/blas/gemm/CASES/ATL_smm4x4x72_US.c	2010-02-01 23:30:09.000000000 +0000
@@ -108,6 +108,12 @@
 #define rC23	%f30
 #define rC33	%f31
 #define FSIZE	64
+
+#if defined(__sparc__) && defined(__arch64__)
+        .register               %g2, #scratch
+        .register               %g3, #scratch
+#endif
+
 #ifdef SCPLX
    #define CSH 3
    #define CMUL(arg_) ((arg_)*2)
