Mail Archives: djgpp/1998/01/01/12:44:20
From: | GAMMELJL AT SLU DOT EDU
|
Date: | Thu, 01 Jan 1998 11:42:04 -0600 (CST)
|
Subject: | code which won't compile with -O2 switch on
|
To: | djgpp AT delorie DOT com
|
Message-id: | <01IRV0O32FKIBNJ2GS@SLU.EDU>
|
Organization: | SAINT LOUIS UNIVERSITY St. Louis, MO
|
MIME-version: | 1.0
|
//The following code compiles and runs correctly. However, if one tries
//to compile it with the -O2 optimization switch, an error message
//"cannot reload integer constant operand in 'asm' " appears. Why?
//(Note: I don't want a work-around.)
#include <iostream.h>
unsigned int zmax=10;
#define mode4() \
__asm__ ( \
"movl $0x1,%%ecx;" \
"movl %1(,%%ecx,4),%%eax;" \
"addl %2(,%%ecx,4),%%eax;" \
"movl %%eax,%0(,%%ecx,4);" \
"movl $0x0,%%edx;" \
"adcl $0x0,%%edx;" \
"L2: incl %%ecx;" \
"movl %1(,%%ecx,4),%%eax;" \
"addl %%edx,%%eax;" \
"movl $0x0,%%edx;" \
"adcl $0x0,%%edx;" \
"addl %2(,%%ecx,4),%%eax;" \
"movl %%eax,%0(,%%ecx,4);" \
"adcl $0x0,%%edx;" \
"cmp _zmax,%%ecx;" \
"jne L2" \
: "=m" (z) \
: "g" (x), "g" (y) \
: "eax", "ecx", "edx", "memory", "cc");
#define mode3() \
__asm__ ( \
"movl $0x0, %%ecx;" \
"L1: incl %%ecx;" \
"movl %%ecx,_x(,%%ecx,4);" \
"movl %%ecx,_y(,%%ecx,4);" \
"cmp $0xA, %%ecx;" \
"jne L1" \
: \
: \
: "ecx");
unsigned int x[15],y[15],z[15];
int main() {
int i;
mode3();
for (i=1;i<11;i++) cout<<x[i]<<" ";
cout<<'\n';
for (i=1;i<11;i++) cout<<y[i]<<" ";
cout<<'\n';
mode4();
for (i=1;i<11;i++) cout<<z[i]<<" ";
cout<<'\n';
return 0;
}
- Raw text -