As I said, I wanted to finish my other patch for SWAP, RRC and RLC. I have completed my work with that patch, so I hope now, I can review the rules and update the patches for the current snapshot.
Then merging it with the current snapshot will be up to Philipp. But I think he's been pretty busy lately. So it may take some time to keep up. Meanwhile you can use my rules as extra rules using the --peep-file command line option (I do it all the time to do a fast test of my rules). Of course you can also modify the peeph.def file yourself and also compile SDCC yourself (provided you already valid toolchain installed to compile it and you want to invest some time to make it compile). En viernes, 19 de febrero de 2021 04:55:24 CET, Royce Pereira (T-star Instrumentation) <royce.pere...@tstar.co.in> escribió: Thank you Vincente, Will re-installing SDCC from the latest snapshot include the updated rules? 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. On Fri, 19 Feb 2021 at 02:04, Vicente Sendra via Sdcc-user <sdcc-user@lists.sourceforge.net> wrote: 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 _______________________________________________ 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