Menu

#2150 Bad code optimization

open
nobody
None
PIC14
5
2014-01-05
2013-03-31
No
#include <pic16f877a.h>
#include <stdint.h>

uint8_t tmp;

void main(void) {
    tmp|=(1<<3);
    tmp&=~(1<<3);
}

tmp&=~(1<<3) is badly optimized

_main   ;Function start
; 2 exit points
;   .line   7; "bug3.c" tmp|=(1<<3);
    BANKSEL _tmp
    BSF _tmp,3
;   .line   8; "bug3.c" tmp&=~(1<<3);
    MOVF    _tmp,W
    BANKSEL r0x1001
    MOVWF   r0x1001
    MOVLW   0xf7
    ANDWF   r0x1001,W
    BANKSEL _tmp
    MOVWF   _tmp
    RETURN
; exit point of _main

$ sdcc --Werror -pp16f877a --opt-code-size -Ilibmain -DF_CPU=4000000 -mpic14 --use-non-free bug3.c
message: using default linker script "/usr/share/gputils/lkr/16f877a.lkr"
$ sdcc -v
SDCC : mcs51/gbz80/z80/z180/r2k/r3ka/ds390/pic16/pic14/TININative/ds400/hc08/s08 3.2.0 #8008 (Jul 6 2012) (Linux)

1 Attachments

Discussion


Log in to post a comment.

MongoDB Logo MongoDB