============================== * SOURCE ============================== char a; char With_switch() { switch(a) { case '0': return 0; case '1': return 1; case 'A': return 2; case 'B': return 3; default: return 255; } } char With_if() { if(a=='0') return 0; else if(a=='1') return 1; else if(a=='A') return 2; else if(a=='B') return 3; else return 255; } ============================== * Compiled with -O0 ============================== 8:main.c **** char With_switch() 9:main.c **** { 66 .stabn 68,0,9,.LM4-With_switch 67 .LM4: 68 /* prologue: frame size=4 */ 69 000c CF93 push r28 70 000e DF93 push r29 71 0010 CDB7 in r28,__SP_L__ 72 0012 DEB7 in r29,__SP_H__ 73 0014 2497 sbiw r28,4 74 0016 0FB6 in __tmp_reg__,__SREG__ 75 0018 F894 cli 76 001a DEBF out __SP_H__,r29 77 001c 0FBE out __SREG__,__tmp_reg__ 78 001e CDBF out __SP_L__,r28 79 /* prologue end (size=10) */ 10:main.c **** switch(a) 80 .stabn 68,0,10,.LM5-With_switch 81 .LM5: 82 0020 8091 0000 lds r24,a 83 0024 282F mov r18,r24 84 0026 3327 clr r19 85 0028 2B83 std Y+3,r18 86 002a 3C83 std Y+4,r19 87 002c 8B81 ldd r24,Y+3 88 002e 9C81 ldd r25,Y+4 89 0030 8133 cpi r24,49 90 0032 9105 cpc r25,__zero_reg__ 91 0034 C9F0 breq .L8 92 0036 2B81 ldd r18,Y+3 93 0038 3C81 ldd r19,Y+4 94 003a 2233 cpi r18,50 95 003c 3105 cpc r19,__zero_reg__ 96 003e 34F4 brge .L13 97 0040 8B81 ldd r24,Y+3 98 0042 9C81 ldd r25,Y+4 99 0044 8033 cpi r24,48 100 0046 9105 cpc r25,__zero_reg__ 101 0048 61F0 breq .L7 102 004a 1DC0 rjmp .L11 103 .L13: 104 004c 2B81 ldd r18,Y+3 105 004e 3C81 ldd r19,Y+4 106 0050 2134 cpi r18,65 107 0052 3105 cpc r19,__zero_reg__ 108 0054 71F0 breq .L9 109 0056 8B81 ldd r24,Y+3 110 0058 9C81 ldd r25,Y+4 111 005a 8234 cpi r24,66 112 005c 9105 cpc r25,__zero_reg__ 113 005e 71F0 breq .L10 114 0060 12C0 rjmp .L11 115 .L7: 11:main.c **** { 12:main.c **** case '0': 13:main.c **** return 0; 116 .stabn 68,0,13,.LM6-With_switch 117 .LM6: 118 0062 1982 std Y+1,__zero_reg__ 119 0064 1A82 std Y+2,__zero_reg__ 120 0066 13C0 rjmp .L5 121 .L8: 14:main.c **** case '1': 15:main.c **** return 1; 122 .stabn 68,0,15,.LM7-With_switch 123 .LM7: 124 0068 21E0 ldi r18,lo8(1) 125 006a 30E0 ldi r19,hi8(1) 126 006c 2983 std Y+1,r18 127 006e 3A83 std Y+2,r19 128 0070 0EC0 rjmp .L5 129 .L9: 16:main.c **** case 'A': 17:main.c **** return 2; 130 .stabn 68,0,17,.LM8-With_switch 131 .LM8: 132 0072 82E0 ldi r24,lo8(2) 133 0074 90E0 ldi r25,hi8(2) 134 0076 8983 std Y+1,r24 135 0078 9A83 std Y+2,r25 136 007a 09C0 rjmp .L5 137 .L10: 18:main.c **** case 'B': 19:main.c **** return 3; 138 .stabn 68,0,19,.LM9-With_switch 139 .LM9: 140 007c 23E0 ldi r18,lo8(3) 141 007e 30E0 ldi r19,hi8(3) 142 0080 2983 std Y+1,r18 143 0082 3A83 std Y+2,r19 144 0084 04C0 rjmp .L5 145 .L11: 20:main.c **** default: 21:main.c **** return 255; 146 .stabn 68,0,21,.LM10-With_switch 147 .LM10: 148 0086 8FEF ldi r24,lo8(255) 149 0088 90E0 ldi r25,hi8(255) 150 008a 8983 std Y+1,r24 151 008c 9A83 std Y+2,r25 22:main.c **** } 23:main.c **** } 152 .stabn 68,0,23,.LM11-With_switch 153 .LM11: 154 .L5: 155 008e 8981 ldd r24,Y+1 156 0090 9A81 ldd r25,Y+2 157 /* epilogue: frame size=4 */ 158 0092 2496 adiw r28,4 159 0094 0FB6 in __tmp_reg__,__SREG__ 160 0096 F894 cli 161 0098 DEBF out __SP_H__,r29 162 009a 0FBE out __SREG__,__tmp_reg__ 163 009c CDBF out __SP_L__,r28 164 009e DF91 pop r29 165 00a0 CF91 pop r28 166 00a2 0895 ret 167 /* epilogue end (size=9) */ 168 /* function With_switch size 76 (57) */ 25:main.c **** char With_if() 26:main.c **** { 176 .stabn 68,0,26,.LM12-With_if 177 .LM12: 178 /* prologue: frame size=2 */ 179 00a4 CF93 push r28 180 00a6 DF93 push r29 181 00a8 CDB7 in r28,__SP_L__ 182 00aa DEB7 in r29,__SP_H__ 183 00ac 2297 sbiw r28,2 184 00ae 0FB6 in __tmp_reg__,__SREG__ 185 00b0 F894 cli 186 00b2 DEBF out __SP_H__,r29 187 00b4 0FBE out __SREG__,__tmp_reg__ 188 00b6 CDBF out __SP_L__,r28 189 /* prologue end (size=10) */ 27:main.c **** if(a=='0') return 0; 190 .stabn 68,0,27,.LM13-With_if 191 .LM13: 192 00b8 8091 0000 lds r24,a 193 00bc 8033 cpi r24,lo8(48) 194 00be 19F4 brne .L15 195 00c0 1982 std Y+1,__zero_reg__ 196 00c2 1A82 std Y+2,__zero_reg__ 197 00c4 1FC0 rjmp .L14 198 .L15: 28:main.c **** else if(a=='1') return 1; 199 .stabn 68,0,28,.LM14-With_if 200 .LM14: 201 00c6 8091 0000 lds r24,a 202 00ca 8133 cpi r24,lo8(49) 203 00cc 29F4 brne .L17 204 00ce 81E0 ldi r24,lo8(1) 205 00d0 90E0 ldi r25,hi8(1) 206 00d2 8983 std Y+1,r24 207 00d4 9A83 std Y+2,r25 208 00d6 16C0 rjmp .L14 209 .L17: 29:main.c **** else if(a=='A') return 2; 210 .stabn 68,0,29,.LM15-With_if 211 .LM15: 212 00d8 8091 0000 lds r24,a 213 00dc 8134 cpi r24,lo8(65) 214 00de 29F4 brne .L19 215 00e0 82E0 ldi r24,lo8(2) 216 00e2 90E0 ldi r25,hi8(2) 217 00e4 8983 std Y+1,r24 218 00e6 9A83 std Y+2,r25 219 00e8 0DC0 rjmp .L14 220 .L19: 30:main.c **** else if(a=='B') return 3; 221 .stabn 68,0,30,.LM16-With_if 222 .LM16: 223 00ea 8091 0000 lds r24,a 224 00ee 8234 cpi r24,lo8(66) 225 00f0 29F4 brne .L21 226 00f2 83E0 ldi r24,lo8(3) 227 00f4 90E0 ldi r25,hi8(3) 228 00f6 8983 std Y+1,r24 229 00f8 9A83 std Y+2,r25 230 00fa 04C0 rjmp .L14 231 .L21: 31:main.c **** else return 255; 232 .stabn 68,0,31,.LM17-With_if 233 .LM17: 234 00fc 8FEF ldi r24,lo8(255) 235 00fe 90E0 ldi r25,hi8(255) 236 0100 8983 std Y+1,r24 237 0102 9A83 std Y+2,r25 32:main.c **** } 238 .stabn 68,0,32,.LM18-With_if 239 .LM18: 240 .L14: 241 0104 8981 ldd r24,Y+1 242 0106 9A81 ldd r25,Y+2 243 /* epilogue: frame size=2 */ 244 0108 2296 adiw r28,2 245 010a 0FB6 in __tmp_reg__,__SREG__ 246 010c F894 cli 247 010e DEBF out __SP_H__,r29 248 0110 0FBE out __SREG__,__tmp_reg__ 249 0112 CDBF out __SP_L__,r28 250 0114 DF91 pop r29 251 0116 CF91 pop r28 252 0118 0895 ret 253 /* epilogue end (size=9) */ 254 /* function With_if size 59 (40) */ ============================== * Compiled with -O3 ============================== 8:main.c **** char With_switch() 9:main.c **** { 65 .stabn 68,0,9,.LM4-With_switch 66 .LM4: 67 /* prologue: frame size=0 */ 68 /* prologue end (size=0) */ 10:main.c **** switch(a) 69 .stabn 68,0,10,.LM5-With_switch 70 .LM5: 71 000a 8091 0000 lds r24,a 72 000e 9927 clr r25 73 0010 8133 cpi r24,49 74 0012 9105 cpc r25,__zero_reg__ 75 0014 B9F0 breq .L8 76 0016 8233 cpi r24,50 77 0018 9105 cpc r25,__zero_reg__ 78 001a 44F4 brge .L13 79 001c C097 sbiw r24,48 80 001e 19F0 breq .L7 81 .L11: 11:main.c **** { 12:main.c **** case '0': 13:main.c **** return 0; 14:main.c **** case '1': 15:main.c **** return 1; 16:main.c **** case 'A': 17:main.c **** return 2; 18:main.c **** case 'B': 19:main.c **** return 3; 20:main.c **** default: 21:main.c **** return 255; 82 .stabn 68,0,21,.LM6-With_switch 83 .LM6: 84 0020 8FEF ldi r24,lo8(255) 85 0022 90E0 ldi r25,hi8(255) 22:main.c **** } 23:main.c **** } 86 .stabn 68,0,23,.LM7-With_switch 87 .LM7: 88 0024 0895 ret 89 .L7: 90 .stabn 68,0,13,.LM8-With_switch 91 .LM8: 92 0026 80E0 ldi r24,lo8(0) 93 0028 90E0 ldi r25,hi8(0) 94 .stabn 68,0,23,.LM9-With_switch 95 .LM9: 96 002a 0895 ret 97 .L13: 98 002c 8134 cpi r24,65 99 002e 9105 cpc r25,__zero_reg__ 100 0030 31F0 breq .L9 101 0032 8234 cpi r24,66 102 0034 9105 cpc r25,__zero_reg__ 103 0036 A1F7 brne .L11 104 .stabn 68,0,19,.LM10-With_switch 105 .LM10: 106 0038 83E0 ldi r24,lo8(3) 107 003a 90E0 ldi r25,hi8(3) 108 .stabn 68,0,23,.LM11-With_switch 109 .LM11: 110 003c 0895 ret 111 .L9: 112 .stabn 68,0,17,.LM12-With_switch 113 .LM12: 114 003e 82E0 ldi r24,lo8(2) 115 0040 90E0 ldi r25,hi8(2) 116 .stabn 68,0,23,.LM13-With_switch 117 .LM13: 118 0042 0895 ret 119 .L8: 120 .stabn 68,0,15,.LM14-With_switch 121 .LM14: 122 0044 81E0 ldi r24,lo8(1) 123 0046 90E0 ldi r25,hi8(1) 124 .stabn 68,0,23,.LM15-With_switch 125 .LM15: 126 0048 0895 ret 127 /* epilogue: frame size=0 */ 128 004a 0895 ret 129 /* epilogue end (size=1) */ 130 /* function With_switch size 34 (33) */ 25:main.c **** char With_if() 26:main.c **** { 138 .stabn 68,0,26,.LM16-With_if 139 .LM16: 140 /* prologue: frame size=0 */ 141 /* prologue end (size=0) */ 27:main.c **** if(a=='0') return 0; 142 .stabn 68,0,27,.LM17-With_if 143 .LM17: 144 004c 8091 0000 lds r24,a 145 0050 8033 cpi r24,lo8(48) 146 0052 91F0 breq .L23 28:main.c **** else if(a=='1') return 1; 147 .stabn 68,0,28,.LM18-With_if 148 .LM18: 149 0054 8133 cpi r24,lo8(49) 150 0056 69F0 breq .L24 29:main.c **** else if(a=='A') return 2; 151 .stabn 68,0,29,.LM19-With_if 152 .LM19: 153 0058 8134 cpi r24,lo8(65) 154 005a 41F0 breq .L25 30:main.c **** else if(a=='B') return 3; 155 .stabn 68,0,30,.LM20-With_if 156 .LM20: 157 005c 8234 cpi r24,lo8(66) 158 005e 19F0 breq .L26 31:main.c **** else return 255; 159 .stabn 68,0,31,.LM21-With_if 160 .LM21: 161 0060 8FEF ldi r24,lo8(255) 162 0062 90E0 ldi r25,hi8(255) 32:main.c **** } 163 .stabn 68,0,32,.LM22-With_if 164 .LM22: 165 0064 0895 ret 166 .L26: 167 0066 83E0 ldi r24,lo8(3) 168 0068 90E0 ldi r25,hi8(3) 169 006a 0895 ret 170 .L25: 171 006c 82E0 ldi r24,lo8(2) 172 006e 90E0 ldi r25,hi8(2) 173 0070 0895 ret 174 .L24: 175 0072 81E0 ldi r24,lo8(1) 176 0074 90E0 ldi r25,hi8(1) 177 0076 0895 ret 178 .L23: 179 0078 80E0 ldi r24,lo8(0) 180 007a 90E0 ldi r25,hi8(0) 181 007c 0895 ret 182 /* epilogue: frame size=0 */ 183 007e 0895 ret 184 /* epilogue end (size=1) */ 185 /* function With_if size 26 (25) */ ============================== * Compiled with -Os ============================== 8:main.c **** char With_switch() 9:main.c **** { 65 .stabn 68,0,9,.LM4-With_switch 66 .LM4: 67 /* prologue: frame size=0 */ 68 /* prologue end (size=0) */ 10:main.c **** switch(a) 69 .stabn 68,0,10,.LM5-With_switch 70 .LM5: 71 000a 8091 0000 lds r24,a 72 000e 9927 clr r25 73 0010 8133 cpi r24,49 74 0012 9105 cpc r25,__zero_reg__ 75 0014 81F0 breq .L8 76 0016 8233 cpi r24,50 77 0018 9105 cpc r25,__zero_reg__ 78 001a 1CF4 brge .L13 79 001c C097 sbiw r24,48 80 001e 41F0 breq .L7 81 0020 13C0 rjmp .L11 82 .L13: 83 0022 8134 cpi r24,65 84 0024 9105 cpc r25,__zero_reg__ 85 0026 51F0 breq .L9 86 0028 8234 cpi r24,66 87 002a 9105 cpc r25,__zero_reg__ 88 002c 51F0 breq .L10 89 002e 0CC0 rjmp .L11 90 .L7: 11:main.c **** { 12:main.c **** case '0': 13:main.c **** return 0; 91 .stabn 68,0,13,.LM6-With_switch 92 .LM6: 93 0030 80E0 ldi r24,lo8(0) 94 0032 90E0 ldi r25,hi8(0) 14:main.c **** case '1': 15:main.c **** return 1; 16:main.c **** case 'A': 17:main.c **** return 2; 18:main.c **** case 'B': 19:main.c **** return 3; 20:main.c **** default: 21:main.c **** return 255; 22:main.c **** } 23:main.c **** } 95 .stabn 68,0,23,.LM7-With_switch 96 .LM7: 97 0034 0895 ret 98 .L8: 99 .stabn 68,0,15,.LM8-With_switch 100 .LM8: 101 0036 81E0 ldi r24,lo8(1) 102 0038 90E0 ldi r25,hi8(1) 103 .stabn 68,0,23,.LM9-With_switch 104 .LM9: 105 003a 0895 ret 106 .L9: 107 .stabn 68,0,17,.LM10-With_switch 108 .LM10: 109 003c 82E0 ldi r24,lo8(2) 110 003e 90E0 ldi r25,hi8(2) 111 .stabn 68,0,23,.LM11-With_switch 112 .LM11: 113 0040 0895 ret 114 .L10: 115 .stabn 68,0,19,.LM12-With_switch 116 .LM12: 117 0042 83E0 ldi r24,lo8(3) 118 0044 90E0 ldi r25,hi8(3) 119 .stabn 68,0,23,.LM13-With_switch 120 .LM13: 121 0046 0895 ret 122 .L11: 123 .stabn 68,0,21,.LM14-With_switch 124 .LM14: 125 0048 8FEF ldi r24,lo8(255) 126 004a 90E0 ldi r25,hi8(255) 127 .stabn 68,0,23,.LM15-With_switch 128 .LM15: 129 004c 0895 ret 130 /* epilogue: frame size=0 */ 131 004e 0895 ret 132 /* epilogue end (size=1) */ 133 /* function With_switch size 36 (35) */ 25:main.c **** char With_if() 26:main.c **** { 141 .stabn 68,0,26,.LM16-With_if 142 .LM16: 143 /* prologue: frame size=0 */ 144 /* prologue end (size=0) */ 27:main.c **** if(a=='0') return 0; 145 .stabn 68,0,27,.LM17-With_if 146 .LM17: 147 0050 8091 0000 lds r24,a 148 0054 8033 cpi r24,lo8(48) 149 0056 19F4 brne .L15 150 0058 80E0 ldi r24,lo8(0) 151 005a 90E0 ldi r25,hi8(0) 28:main.c **** else if(a=='1') return 1; 29:main.c **** else if(a=='A') return 2; 30:main.c **** else if(a=='B') return 3; 31:main.c **** else return 255; 32:main.c **** } 152 .stabn 68,0,32,.LM18-With_if 153 .LM18: 154 005c 0895 ret 155 .L15: 156 .stabn 68,0,28,.LM19-With_if 157 .LM19: 158 005e 8133 cpi r24,lo8(49) 159 0060 19F4 brne .L17 160 0062 81E0 ldi r24,lo8(1) 161 0064 90E0 ldi r25,hi8(1) 162 .stabn 68,0,32,.LM20-With_if 163 .LM20: 164 0066 0895 ret 165 .L17: 166 .stabn 68,0,29,.LM21-With_if 167 .LM21: 168 0068 8134 cpi r24,lo8(65) 169 006a 19F4 brne .L19 170 006c 82E0 ldi r24,lo8(2) 171 006e 90E0 ldi r25,hi8(2) 172 .stabn 68,0,32,.LM22-With_if 173 .LM22: 174 0070 0895 ret 175 .L19: 176 .stabn 68,0,30,.LM23-With_if 177 .LM23: 178 0072 8234 cpi r24,lo8(66) 179 0074 19F4 brne .L21 180 0076 83E0 ldi r24,lo8(3) 181 0078 90E0 ldi r25,hi8(3) 182 .stabn 68,0,32,.LM24-With_if 183 .LM24: 184 007a 0895 ret 185 .L21: 186 .stabn 68,0,31,.LM25-With_if 187 .LM25: 188 007c 8FEF ldi r24,lo8(255) 189 007e 90E0 ldi r25,hi8(255) 190 .stabn 68,0,32,.LM26-With_if 191 .LM26: 192 0080 0895 ret 193 /* epilogue: frame size=0 */ 194 0082 0895 ret 195 /* epilogue end (size=1) */ 196 /* function With_if size 26 (25) */