Mailinglist Archive: opensuse-programming-de (126 mails)
| < Previous | Next > |
rtdsc, asm. Compiler meckert: "can't find a register in class 'AREG'
- From: Günther Montag <Safari.Doktor@xxxxxxxxx>
- Date: Fri, 28 Nov 2003 13:04:21 +0100
- Message-id: <200311281304.22310.Safari.Doktor@xxxxxxxxx>
Hallo Freunde!
Aus diesem Programm kompilierte das folgende Stück
mit gcc 2.81 gut und funktionierte gut,
aber gcc 3.2 sagt:
"can't find a register in class 'AREG' while reloading 'asm' "
zu der Zeile, wo das erste mal 'mull' vorkommt! (markiert mit --->)
Wenn ich diese Zeile auskommentierte, kompilierte es, funktionierte aber
natürlich nicht.
Was kann ich da tweaken, oder wo mich belesen?
/*****************************************************************************/
*
* refclock.c -- Accurate reference clock for half duplex soundcards.
*
static unsigned int scale_tvusec;
static unsigned int last_tvusec;
static unsigned long long time_cnt;
if (rdtsc_ok) {
unsigned int tmp0, tmp1;
unsigned int tmp2, tmp3;
__asm__("rdtsc;\n\t"
"subl %2,%%eax\n\t"
"sbbl %3,%%edx\n\t" : "=&a" (tmp0), "=&d" (tmp1) : "m" (starttime_lo), "m"
(starttime_hi));
---> __asm__("mull %1" : "=d" (tmp2) : "m" (scale_rdtsc), "a" (tmp0) : "ax");
__asm__("mull %1" : "=a" (tmp3) : "m" (scale_rdtsc), "a" (tmp1) : "dx");
curtime = tmp2 + tmp3;
goto time_known;
Danke!
Günther
Safari.Doktor@xxxxxxxxx
Aus diesem Programm kompilierte das folgende Stück
mit gcc 2.81 gut und funktionierte gut,
aber gcc 3.2 sagt:
"can't find a register in class 'AREG' while reloading 'asm' "
zu der Zeile, wo das erste mal 'mull' vorkommt! (markiert mit --->)
Wenn ich diese Zeile auskommentierte, kompilierte es, funktionierte aber
natürlich nicht.
Was kann ich da tweaken, oder wo mich belesen?
/*****************************************************************************/
*
* refclock.c -- Accurate reference clock for half duplex soundcards.
*
static unsigned int scale_tvusec;
static unsigned int last_tvusec;
static unsigned long long time_cnt;
if (rdtsc_ok) {
unsigned int tmp0, tmp1;
unsigned int tmp2, tmp3;
__asm__("rdtsc;\n\t"
"subl %2,%%eax\n\t"
"sbbl %3,%%edx\n\t" : "=&a" (tmp0), "=&d" (tmp1) : "m" (starttime_lo), "m"
(starttime_hi));
---> __asm__("mull %1" : "=d" (tmp2) : "m" (scale_rdtsc), "a" (tmp0) : "ax");
__asm__("mull %1" : "=a" (tmp3) : "m" (scale_rdtsc), "a" (tmp1) : "dx");
curtime = tmp2 + tmp3;
goto time_known;
Danke!
Günther
Safari.Doktor@xxxxxxxxx
| < Previous | Next > |