"Rus V. Brushkoff" wrote:
>
>  No, gcc-2.95 is ok, the only thing is that new gcc is more strict about
> asm constraints.
> 

Allright, according to that, I've realized a patch for rtai-0.8 which
make compilation
with gcc-2.95 correct.
I'have not insert, like your patch, an auto freq determination, cause
the calibrating modules
works well on my machine and I think it is more precise than a one-shoot
calibration.

So this patch only modify the asm constraint to relax registers
contraint already in use.

Chris.

--
Kumsta Christophe
<[EMAIL PROTECTED]>
Real-Time System developper
RT-Linux/RTAI ( Use the Source Luck !)
diff -ur rtai-0.8/apic_freq_calibration/rt_cal.c 
rtai-0.8-patched/apic_freq_calibration/rt_cal.c
--- rtai-0.8/apic_freq_calibration/rt_cal.c     Wed Nov  3 10:28:25 1999
+++ rtai-0.8-patched/apic_freq_calibration/rt_cal.c     Thu Nov 18 09:17:00 1999
@@ -34,12 +34,12 @@
        gcount++;
        if (++count == RESET_COUNT) {
                apic.time = tbase - apic.time;
-               __asm__ __volatile__("movl %%cr0,%%eax": "=a" (linux_cr0): : "ax");
+               __asm__ __volatile__("movl %%cr0,%%eax": "=a" (linux_cr0));
                __asm__ __volatile__("clts; fnsave %0": "=m" (fpu_reg));
                freq =  (double)apic.time_lh[1]*(double)0x100000000LL + 
(double)apic.time_lh[0];
                count =  (freq*CLOCK_TICK_RATE)/(((double)gcount)*LATCH) + 
0.4999999999999;
                __asm__ __volatile__("frstor %0" : "=m" (fpu_reg));
-               __asm__ __volatile__("movl %%eax,%%cr0": :"a" (linux_cr0): "ax");
+               __asm__ __volatile__("movl %%eax,%%cr0": :"a" (linux_cr0));
                printk("\n->>> MEASURED APIC_FREQ: %d (Hz) (%d s) <<<-\n", count, 
gcount/100 + 1);
                count = 0;
        }
diff -ur rtai-0.8/cpu_freq_calibration/rt_cal.c 
rtai-0.8-patched/cpu_freq_calibration/rt_cal.c
--- rtai-0.8/cpu_freq_calibration/rt_cal.c      Wed Nov  3 10:28:25 1999
+++ rtai-0.8-patched/cpu_freq_calibration/rt_cal.c      Thu Nov 18 09:11:55 1999
@@ -29,12 +29,12 @@
        gcount++;
        if (++count == RESET_COUNT) {
                tsc.time -= tbase;
-               __asm__ __volatile__("movl %%cr0,%%eax": "=a" (linux_cr0): : "ax");
+               __asm__ __volatile__("movl %%cr0,%%eax": "=a" (linux_cr0));
                __asm__ __volatile__("clts; fnsave %0": "=m" (fpu_reg));
                freq =  (double)tsc.time_lh[1]*(double)0x100000000LL + 
(double)tsc.time_lh[0];
                count =  (freq*CLOCK_TICK_RATE)/(((double)gcount)*LATCH) + 
0.4999999999999;
                __asm__ __volatile__("frstor %0" : "=m" (fpu_reg));
-               __asm__ __volatile__("movl %%eax,%%cr0": :"a" (linux_cr0): "ax");
+               __asm__ __volatile__("movl %%eax,%%cr0": :"a" (linux_cr0));
                printk("\n->>> MEASURED CPU_FREQ: %d (Hz) (%d s) <<<-\n", count, 
gcount/100 + 1);
                count = 0;
        }
diff -ur rtai-0.8/include/rtai.h rtai-0.8-patched/include/rtai.h
--- rtai-0.8/include/rtai.h     Wed Nov 17 16:46:03 1999
+++ rtai-0.8-patched/include/rtai.h     Thu Nov 18 09:38:20 1999
@@ -337,9 +337,7 @@
 {
        union {unsigned long long time; unsigned long time_lh[2]; } tsc;
        __asm__ __volatile__( "rdtsc"
-                             : "=a" (tsc.time_lh[0]), "=d" (tsc.time_lh[1])
-                             : 
-                             :"ax", "dx");
+                             : "=a" (tsc.time_lh[0]), "=d" (tsc.time_lh[1]));
        return tsc.time;
 }
 
@@ -349,23 +347,23 @@
        __asm__("imull %%edx ;     idiv %%ecx; sal $1,%%edx  \n\t"
               "cmpl %%edx,%%ecx; jge 1f;     incl %%eax;   1:"
                : "=a" (i)
-                      : "a" (i), "d" (mult), "c" (div)
-               : "%eax", "%ecx", "%edx");
+                      : "a" (i), "d" (mult), "c" (div)) ;
        return i;
 }
 
 // returns (long long)ll = (int)ll*(int)(mult)/(int)div.
 static inline long long llimd(long long ll, int mult, int div)
 {
+int dummy, dummy1;
        __asm__( "movl %%edx,%%ecx; mull %%esi;       movl %%eax,%%ebx;  \n\t"
                 "movl %%ecx,%%eax; movl %%edx,%%ecx; mull %%esi;        \n\t"
                 "addl %%ecx,%%eax; adcl $0,%%edx;    divl %%edi;        \n\t"
                 "movl %%eax,%%ecx; movl %%ebx,%%eax; divl %%edi;        \n\t"
                 "sal $1,%%edx;     cmpl %%edx,%%edi; movl %%ecx,%%edx;  \n\t"
                 "jge 1f;           addl $1,%%eax;    adcl $0,%%edx;     1:"
-                : "=A" (ll)
+                : "=A" (ll), "=S" (dummy), "=D" (dummy1)
                 : "A" (ll), "S" (mult), "D" (div)
-                : "%eax", "%ebx", "%ecx", "%edx", "%esi", "%edi" );
+                : "%ebx", "%ecx");
        return ll;
 }
 
diff -ur rtai-0.8/include/rtai_lxrt.h rtai-0.8-patched/include/rtai_lxrt.h
--- rtai-0.8/include/rtai_lxrt.h        Thu Nov  4 13:41:32 1999
+++ rtai-0.8-patched/include/rtai_lxrt.h        Thu Nov 18 09:45:35 1999
@@ -26,7 +26,7 @@
 {
        long long retval;
        __asm__ __volatile__ ("int $0xFC"
-       : "=A" (retval) : "a" (srq), "d" (arg) : "%eax", "%edx");
+       : "=A" (retval) : "a" (srq), "d" (arg) );
        return retval;
 }
 
diff -ur rtai-0.8/include/rtai_shm.h rtai-0.8-patched/include/rtai_shm.h
--- rtai-0.8/include/rtai_shm.h Thu Nov  4 13:42:55 1999
+++ rtai-0.8-patched/include/rtai_shm.h Thu Nov 18 09:46:04 1999
@@ -65,7 +65,7 @@
 {
        long long retval;
        __asm__ __volatile__ ("int $0xFD"
-       : "=A" (retval) : "a" (srq), "d" (whatever) : "%eax", "%edx");
+       : "=A" (retval) : "a" (srq), "d" (whatever) );
        return retval;
 }
 
diff -ur rtai-0.8/mupscheduler/rtai_sched.c rtai-0.8-patched/mupscheduler/rtai_sched.c
--- rtai-0.8/mupscheduler/rtai_sched.c  Fri Nov  5 14:16:53 1999
+++ rtai-0.8-patched/mupscheduler/rtai_sched.c  Thu Nov 18 09:18:20 1999
@@ -106,7 +106,7 @@
        popl %%eax\n\t" \
        : \
        : "c" (&oldtask), "d" (newtask) \
-       : "bx", "cx", "dx");
+       : "bx");
 
 static RT_TASK *rt_smp_current[NR_RT_CPUS];
 
Binary files rtai-0.8/newfifos/check and rtai-0.8-patched/newfifos/check differ
diff -ur rtai-0.8/posix/examples/clockif_test.c 
rtai-0.8-patched/posix/examples/clockif_test.c
--- rtai-0.8/posix/examples/clockif_test.c      Wed Nov  3 10:28:25 1999
+++ rtai-0.8-patched/posix/examples/clockif_test.c      Thu Nov 18 09:50:49 1999
@@ -42,8 +42,7 @@
        struct timespec t_spec;
        __asm__("idivl %%ecx\n\t"
                :"=a" (t_spec.tv_sec), "=d" (t_spec.tv_nsec)
-               : "A" (t), "c" (NSECS_PER_SEC)
-               :"cx");
+               : "A" (t), "c" (NSECS_PER_SEC));
        if (t_spec.tv_nsec < 0) {
                t_spec.tv_nsec += NSECS_PER_SEC;
                t_spec.tv_sec --;
@@ -56,8 +55,7 @@
 {
        __asm__("idivl %%ecx\n\t"
                :"=a" (t_spec->tv_sec), "=d" (t_spec->tv_nsec)
-               : "A" (t), "c" (NSECS_PER_SEC)
-               :"cx");
+               : "A" (t), "c" (NSECS_PER_SEC));
        if (t_spec->tv_nsec < 0) {
                t_spec->tv_nsec += NSECS_PER_SEC;
                t_spec->tv_sec --;
diff -ur rtai-0.8/posix/include/rtai_pthread_int.h 
rtai-0.8-patched/posix/include/rtai_pthread_int.h
--- rtai-0.8/posix/include/rtai_pthread_int.h   Wed Nov  3 10:28:25 1999
+++ rtai-0.8-patched/posix/include/rtai_pthread_int.h   Thu Nov 18 09:49:00 1999
@@ -111,8 +111,7 @@
 {
   __asm__("idivl %%ecx\n\t"
           :"=a" (t_spec->tv_sec), "=d" (t_spec->tv_nsec)
-          : "A" (t), "c" (NSECS_PER_SEC)
-          :"cx");
+          : "A" (t), "c" (NSECS_PER_SEC));
   if (t_spec->tv_nsec < 0) {
           t_spec->tv_nsec += NSECS_PER_SEC;
           t_spec->tv_sec --;
diff -ur rtai-0.8/rtai.c rtai-0.8-patched/rtai.c
--- rtai-0.8/rtai.c     Thu Nov  4 13:36:41 1999
+++ rtai-0.8-patched/rtai.c     Thu Nov 18 09:14:43 1999
@@ -59,7 +59,7 @@
 #define SAVE_REG(irq) __asm__ __volatile__ (" \
        pushl $"#irq"; pushl %es; pushl %ds; pushl %eax;\n\t \
        pushl %ebp; pushl %ecx; pushl %edx;\n\t \
-       movl $" STR(__KERNEL_DS) ",%edx; movl %dx,%ds; movl %dx,%es")
+       movl $" STR(__KERNEL_DS) ",%edx; movl %edx,%ds; movl %edx,%es")
 
 #define RSTR_REG __asm__ __volatile__ (" \
        popl %edx; popl %ecx; testl %eax,%eax; jnz 1f;\n\t \
@@ -93,7 +93,7 @@
        cld; pushl %es; pushl %ds; pushl %ebp;\n\t \
        pushl %edi; pushl %esi; pushl %ecx;\n\t \
        pushl %ebx; pushl %edx; pushl %eax;\n\t \
-       movl $" STR(__KERNEL_DS) ",%ebx; movl %bx,%ds; movl %bx,%es");
+       movl $" STR(__KERNEL_DS) ",%ebx; movl %ebx,%ds; movl %ebx,%es");
 
        __asm__ __volatile__ ("call "SYMBOL_NAME_STR(dispatch_srq));
 
diff -ur rtai-0.8/smpscheduler/rtai_sched.c rtai-0.8-patched/smpscheduler/rtai_sched.c
--- rtai-0.8/smpscheduler/rtai_sched.c  Fri Nov  5 13:41:34 1999
+++ rtai-0.8-patched/smpscheduler/rtai_sched.c  Thu Nov 18 09:15:32 1999
@@ -145,7 +145,7 @@
        popl %%eax\n\t" \
        : \
        : "c" (&oldtask), "d" (newtask) \
-       : "bx", "cx", "dx");
+       : "bx");
 
 static RT_TASK *rt_smp_current[NR_RT_CPUS];
 
diff -ur rtai-0.8/upscheduler/rtai_sched.c rtai-0.8-patched/upscheduler/rtai_sched.c
--- rtai-0.8/upscheduler/rtai_sched.c   Fri Nov  5 14:16:36 1999
+++ rtai-0.8-patched/upscheduler/rtai_sched.c   Thu Nov 18 09:16:13 1999
@@ -106,8 +106,7 @@
        popl %%ebp\n\t \
        popl %%eax\n\t" \
        : \
-       : "c" (tsk) \
-       :"cx");
+       : "c" (tsk));
 
 static RT_TASK *rt_current;
 

Reply via email to