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 Precedence: bulk //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 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<