From: SourceForge.net <no...@so...> - 2010-07-18 16:35:48
|
Feature Requests item #2815335, was opened at 2009-07-01 19:47 Message generated for change (Comment added) made by spth You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=350599&aid=2815335&group_id=599 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: z80 port Group: None Status: Open Priority: 5 Private: No Submitted By: dfulab (dfulab) Assigned to: Nobody/Anonymous (nobody) Summary: Please optimize Z80 code generation Initial Comment: a) Keep tracks of static values assigned to registers in the same function. Avoid using run time code if possible. This a a piece of code segment taken from the UCOS-II project. I have attached the source code, the output from the IAR compiler listing as well as the output from sdcc in the zip file. The following is a snip from the listing. Notice how the compiler keeps track of the value assigned to the pointer stk as it increments, adjusting the offsets to the IX automatically instead of using run time code. -------------- IAR compiler -------------- 61 stk = (INT16U *)ptos; /* Load stack pointer */ \ 000E DD6E0A LD L,(IX+10) \ 0011 DD660B LD H,(IX+11) \ 0014 E5 PUSH HL \ 0015 FDE1 POP IY : : : 67 /* ------- SIMULATE CALL TO FUNCTION WITH ARGUMENT ------- */ 68 *--stk = (INT16U)task_bank; /* Save bank repeated in upper and lower register */ \ 002B DD4EF8 LD C,(IX-8) \ 002E FD71FE LD (IY-2),C \ 0031 47 LD B,A \ 0032 FD70FF LD (IY-1),B 69 *--stk = (INT16U)task_offset; /* Save task address */ \ 0035 FD75FC LD (IY-4),L \ 0038 FD74FD LD (IY-3),H 70 71 /* ----------------- SETUP STACK FRAME ------------------- */ 72 *--stk = (INT16U)task_offset; /* Saved PC from ISR (Simulated) */ \ 003B FD75FA LD (IY-6),L \ 003E FD74FB LD (IY-5),H ----------------------------------------------------------- --------- SDCC ---------------------------- 157 ;C:\My Documents\Ethernet\Z182\uCOS-II\OS_CPU_C.C:61: stk = (INT16U *)ptos; /* Load stack pointer */ 000D DD 7E 08 158 ld a,8 (ix) 0010 DD 77 FE 159 ld -2 (ix),a 0013 DD 7E 09 160 ld a,9 (ix) 0016 DD 77 FF 161 ld -1 (ix),a : : : 196 ;C:\My Documents\Ethernet\Z182\uCOS-II\OS_CPU_C.C:68: *--stk = (INT16U)task_bank; /* Save bank repeated in upper and lower register */ 0064 DD 6E FE 197 ld l,-2 (ix) 0067 DD 66 FF 198 ld h,-1 (ix) 006A 2B 199 dec hl 006B 2B 200 dec hl 006C DD 75 FE 201 ld -2 (ix),l 006F DD 74 FF 202 ld -1 (ix),h 0072 DD 7E FC 203 ld a,-4 (ix) 0075 77 204 ld (hl),a 0076 23 205 inc hl 0077 DD 7E FD 206 ld a,-3 (ix) 007A 77 207 ld (hl),a 208 ;C:\My Documents\Ethernet\Z182\uCOS-II\OS_CPU_C.C:69: *--stk = (INT16U)task_offset; /* Save task address */ 007B DD 6E FE 209 ld l,-2 (ix) 007E DD 66 FF 210 ld h,-1 (ix) 0081 2B 211 dec hl 0082 2B 212 dec hl 0083 DD 75 FE 213 ld -2 (ix),l 0086 DD 74 FF 214 ld -1 (ix),h 0089 73 215 ld (hl),e 008A 23 216 inc hl 008B 72 217 ld (hl),d ----------------------------------------------------------- b) redundant assignments The following is a single line from my code: 372 ;hardware.c:106: TMDR0H = RLDR0H = (OSC_Freq / TimerDivider / Timer0_Freq) >> 8; 009C 3E 24 373 ld a,#0x24 009E ED 39 0F 374 out0 (_RLDR0H),a 00A1 3E 24 375 ld a,#0x24 00A3 ED 39 0D 376 out0 (_TMDR0H),a The compiler have to load value of register a in #375 again even though this is a double assignment and both __sfr are the same type and doesn't change the value in a. c) unreferenced register assignment 168 ;i2c.c:7: I2C_DR = (I2C_DR | I2C_SCL) & ~I2C_SDA; /* SCL = high */ 0000 ED 38 DE 169 in0 a,(_DRC) ; I2C_DR 0003 F6 10 170 or a,#0x10 ; I2C_SCL 0005 4F 171 ld c,a 0006 E6 DF 172 and a,#0xDF ; ~I2C_SDA 0008 ED 39 DE 173 out0 (_DRC),a #171: c is assigned value of a, but never used. Apparently, it is introduced due to the ~ operator. ---------------------------------------------------------------------- >Comment By: Philipp Krause (spth) Date: 2010-07-18 18:35 Message: c) Should no longer happen; the notUsed()-peepholes implemented some time ago should have (and most likely have) fixed it. ---------------------------------------------------------------------- Comment By: Philipp Krause (spth) Date: 2009-07-02 23:38 Message: Could you please attach sample code for b) and c), too? Philipp ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=350599&aid=2815335&group_id=599 |