When tested with the rules uploaded here:
https://sourceforge.net/p/sdcc/patches/362/

The code is fully optimized as expected:
 _test_bits:
; ../src/test2.c: 26: PD_ODR |= 1<<1 ;
; skipping iCode since result will be rematerialized
; skipping iCode since result will be rematerialized
; genPointerGet
; genOr
; genPointerSet
 bset __PD_ODR_+0, #1
; peephole replaced 'or' by 'bset' (compiler symbol).
; ../src/test2.c: 28: PD1 = 1 ;
; skipping iCode since result will be rematerialized
; skipping iCode since result will be rematerialized
; genPointerSet
 bset __PD_ODR_+0, #1

When I finish my work in progress for SWAP, RRC and RLC operations for STM8 
(it's taking longer than expected), I'll update/fix the patches for the rules 
against the current version of SDCC.

I hope Philipp will merge them all then.
 
 
     En jueves, 18 de febrero de 2021 17:32:27 CET, Georg Icking-Konert 
<ge...@cream-tea.de> escribió:  
 
  
Hello Royce,
 
I also found it inconvenient that SDCC provides no STM8 headers. Therefore I 
developed them and made them available as OSS under 
https://github.com/gicking/STM8_headers. There you also find examples how to 
use them. Hope this helps!?
 
 
Regards, Georg
 
 
PS: I also asked the SDCC developer team whether these headers could be 
included into the SDCC distribution. So far no response (hint, hint...)
 

 
 Am 18.02.21 um 16:32 schrieb Royce Pereira (T-star Instrumentation):
  
 
         As there is no header file for STM8, I was trying to create my own 
using 2 different approaches. They each produce different -though correct- 
outputs. 
  Code Sample 1: 
  typedef struct  {  unsigned char PIN0:1 ;  unsigned char PIN1:1 ;  unsigned 
char PIN2:1 ;  unsigned char PIN3:1 ;  unsigned char PIN4:1 ;  unsigned char 
PIN5:1 ;  unsigned char PIN6:1 ;  unsigned char PIN7:1 ;  } _BITS_ ; 
  typedef union  {  _BITS_ sbits ;  unsigned char _sfrByte_ ;  } _SFR_ ; 
//--------------------------------   volatile _SFR_  __at (0x500F) _PD_ODR_ ; 
//---------------------------------   #define PD_ODR _PD_ODR_._sfrByte_   
#define PD1 _PD_ODR_.sbits.PIN1 
  //---------------------------------   void main(void)  {  PD_ODR |= 1<<1 ;    
PD1 = 1 ;  } //---------------------------------  
  This produces (main.asm):   .globl _main  .globl __PD_ODR_ 
;-------------------------------------------------------- ; ram data 
;--------------------------------------------------------  .area DATA __PD_ODR_ 
= 0x500f  
  ...... some instructions ...... 
    _main: ; main.c: 26: PD_ODR |= 1<<1 ;  ld a, __PD_ODR_+0  or a, #0x02  ld 
__PD_ODR_+0, a ; main.c: 28: PD1 = 1 ;  bset __PD_ODR_+0, #1 ; main.c: 29: }  
ret   
  ======================================== Code sample 2: 
   #define _SFR_(mem_addr)     (*(volatile unsigned char *)(0x5000 + 
(mem_addr))) /* PORT D */ 
  #define PD_ODR      _SFR_(0x0F) 
  void main(void)  {  PD_ODR |= 1 << 1 ;  }  
//------------------------------------------- Produces: 
   _main: ; main.c: 9: PD_ODR |= 1 << 1 ;  bset 20495, #1 ; main.c: 10: }  ret  
  This does seem more efficient. 
  Its curious why the "PD_ODR |= 1<<1" produced the "ld a ...." in the 1st 
example,  while just the 'bset ...' in the second, when both cases were 
absolute addresses. 
  The 1st sample did produce "bset" for "PD1=1",(which is essentially  "PD_ODR 
= 1 <<1" ). 
        Best Regards,
 
 - Royce Pereira,
 
 T-Star Instrumentation,
 102, Creative Industries, Sunder Nagar Road # 2, Kalina, Santacruz-East,
 Mumbai- 400098,
 INDIA 
  Cell: +91 9820061636
   
  GSTIN:  27AAFFT2843M1ZS  
P  Let's care for our Environment. 
 
Please don't print this e-mail unless you really need to.
                   
  
  _______________________________________________Sdcc-user mailing 
listSdcc-user@lists.sourceforge.nethttps://lists.sourceforge.net/lists/listinfo/sdcc-user
 _______________________________________________
Sdcc-user mailing list
Sdcc-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sdcc-user
  
_______________________________________________
Sdcc-user mailing list
Sdcc-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sdcc-user

Reply via email to