Rob, the compiler knows you. :)
On Sun, Aug 20, 2023 at 11:49 AM Rob CJ <[email protected]> wrote: > Hi Andreas, > > I made this test program to print messages via the serial port: > > var byte dummy = 0 > var byte i,j,k > > function test1() return byte is > return 0 > end function > i=test1() > if i>0 & i<13 then > -- goes here but is wrong > print_string(serial, "1: It should NOT come here! ") > dummy = dummy + 1 > else > print_string(serial, "1: This is OK. ") > dummy = dummy + 2 > end if > print_crlf(serial) > > function test2() return byte is > return 0 > end function > -- but this code works: > j=test2() > if j<13 & j>0 then > dummy = dummy + 3 > print_string(serial, "2: It should NOT come here! ") > > else > -- goes here and OK > dummy = dummy + 4 > print_string(serial, "2: This is OK. ") > > end if > print_crlf(serial) > > -- if you remove the function, it works, too: > k=0 > if k>0 & k<13 then > dummy = dummy + 5 > print_string(serial, "3: It should NOT come here! ") > else > -- goes here and OK > dummy = dummy + 6 > print_string(serial, "3: This is OK. ") > end if > print_crlf(serial) > > The output on the terminal is as follows: > 1: This is OK. > 2: This is OK. > 3: This is OK. > > So it does not happen in my case. Can you explain this? > > Thanks. > > Kind regards, > > Rob > > ------------------------------ > *Van:* [email protected] <[email protected]> namens Rob CJ < > [email protected]> > *Verzonden:* vrijdag 18 augustus 2023 22:02 > *Aan:* [email protected] <[email protected]> > *Onderwerp:* Re: [jallib] IF statement fails > > Hi Andreas, Vasile, > > The reason I think it is an optimization issue is because I had a look at > the assembly code when the code reduce option is switched off. > > The original code that went wrong was this (where the Z flag is not > affected): > ; 14 i=test1() > movlw 0 > movwf v_i > ; 15 if i>0 & i<13 then > movf v_i,w > bsf v__bitbucket, 0 ; _btemp1 > btfsc v__status, v__z > > With the code reduce disabled the code is as follows (where the Z flag is > affected, because of the subwf instruction): > ; 14 i=test1() > movlw 0 > movwf v_i > ; 15 if i>0 & i<13 then > movlw 0 > subwf v_i,w > bcf v__bitbucket, 0 ; _btemp1 > btfsc v__status, v__z > > As said I will test both options on a PIC so see if this indeed solves the > problem. If so, I need to have a look at the optimization routine that does > this. > > Kind regards, > > Rob > > ------------------------------ > *Van:* [email protected] <[email protected]> namens vsurducan > <[email protected]> > *Verzonden:* vrijdag 18 augustus 2023 19:12 > *Aan:* [email protected] <[email protected]> > *Onderwerp:* Re: [jallib] IF statement fails > > :) good idea, no effect... > Forcing the operation order does not change anything? > > If (i<13) & (i>0) then > > If not, then only some workaround on the if, separe it in two sentences, > that usually works. > > > On Fri 18 Aug 2023, 6:12 PM '[email protected]' via jallib, < > [email protected]> wrote: > > I remove d "-no-variable-reuse" from the compiler call to see if there is > a different: > No it is not, but good idea! > > Best Regards, > Andreas > > On Friday, August 18, 2023 at 1:45:42 PM UTC+2 vsurducan wrote: > > Hi Rob, I think it's about disabling reusing variable space and not about > expression reduction. > > On Fri 18 Aug 2023, 9:48 AM Rob CJ, <[email protected]> wrote: > > Hi Andreas > > Strange, I will do some testing this weekend. > > Thanks for the update. > > Met vriendelijke groet, > Rob Jansen > ------------------------------ > *From:* '[email protected]' via jallib <[email protected]> > *Sent:* Friday, August 18, 2023 8:33:06 AM > *To:* jallib <[email protected]> > *Subject:* Re: [jallib] IF statement fails > > Hi Rob, > > I tried that. As a result the code size increased (+200 byte), but the > program doesn't work any more, the output on my display stopped working, so > it's hard to further debug this. > So it's not clear if this helps or not because then other problems come > into. > > Andreas > > On Thursday, August 17, 2023 at 10:29:51 PM UTC+2 Rob CJ wrote: > > Hi Andreas, > > It might be a optimization issues. > > Can you add the following to your program and test if the problem is gone? > > pragma opt expr_reduce no > > It will disable code optimization. > > Thanks. > > Kind regards, > > Rob > > ------------------------------ > *Van:* '[email protected]' via jallib <[email protected]> > *Verzonden:* donderdag 17 augustus 2023 21:42 > > *Aan:* jallib <[email protected]> > *Onderwerp:* Re: [jallib] IF statement fails > Hi Rob, > thanks that you are digging into this problem and maybe found the issue > already. > I'm a heavy Jal User I would call myself, but this is the first issue I > found over the last years :-) > > On Thursday, August 17, 2023 at 9:31:13 PM UTC+2 Rob CJ wrote: > > Hi Andreas, > > I had a quick look at the generated assemble code for a PIC16. > > In your first code example the code is (I changed 3 times i into i, j and > k so I could compile it): > > ; 10 i=test1() > movlw 0 > movwf v_i > ; 11 if i>0 & i<13 then > movf v_i,w > bsf v__bitbucket, 0 ; _btemp1 > btfsc v__status, v__z > > In your last code example where you removed the function the code is: > > clrf v_k > ; 35 if k>0 & k<13 then > movf v_k,w > bsf v__bitbucket, 6 ; _btemp7 > btfsc v__status, v__z > > If I am right - and I hope I am not - the first piece of code does not > work because the Z flag (v__z) of the status register (v__status) is never > affected by any of these instructions. In the last code example the clrf > instruction sets the Z flag. > > In other words, moving the return value of 0 to v_i is not the same as > clearing the value of v_k. So it might be a compiler bug. I wonder why it > has not been discovered before. > > Still need to see if my draft conclusion is correct. > > Kind regards, > > Rob > > > > ------------------------------ > *Van:* '[email protected]' via jallib <[email protected]> > *Verzonden:* donderdag 17 augustus 2023 21:07 > *Aan:* jallib <[email protected]> > *Onderwerp:* Re: [jallib] IF statement fails > > Hello Rob, > PIC is a 18f26K83 > compiler called with: ../jalv25r7/compiler/jalv2-x86-64 -no-variable-reuse > no other specific setting > Thanks, > Andreas > > On Thursday, August 17, 2023 at 9:00:33 PM UTC+2 Rob CJ wrote: > > Hi, > > For which PIC did you compile this? 12, 16, 18? > > Did you use any compiler optimizations? > > Thanks. > > Kind regards, > > Rob > > ------------------------------ > *Van:* '[email protected]' via jallib <[email protected]> > *Verzonden:* woensdag 16 augustus 2023 22:18 > *Aan:* jallib <[email protected]> > *Onderwerp:* [jallib] IF statement fails > > Hello everyone, > > I found this code is not working (using jal jalv25r7, but also older > versions). Can anyone pls verify: > > > *var byte i * > > > *function test() return byte is return 0 end function* > > *i=test() * > *if i>0 & i<13 then* > > * -- goes here but is wrong * > *else* > * ..* > *end if* > > but this code works: > > *var byte i * > > > *function test() return byte is return 0 end function* > *i=test()* > *if i<13 & i>0 then* > > * .. * > *else* > > * -- goes here and OK * > *end if* > > if you remove the function, it works, too: > > *var byte i * > *i=0* > *if i>0 & i<13 then* > > * .. * > *else* > * -- goes here and OK* > *end if* > > -- > You received this message because you are subscribed to the Google Groups > "jallib" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/jallib/2b197dbf-4628-4acd-b13c-11e3b6ba2228n%40googlegroups.com > <https://groups.google.com/d/msgid/jallib/2b197dbf-4628-4acd-b13c-11e3b6ba2228n%40googlegroups.com?utm_medium=email&utm_source=footer> > . > > -- > You received this message because you are subscribed to the Google Groups > "jallib" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/jallib/69c9a49a-e83c-4824-a27c-074f25bf0c29n%40googlegroups.com > <https://groups.google.com/d/msgid/jallib/69c9a49a-e83c-4824-a27c-074f25bf0c29n%40googlegroups.com?utm_medium=email&utm_source=footer> > . > > -- > You received this message because you are subscribed to the Google Groups > "jallib" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/jallib/f2b66222-389b-4f41-8705-41e46aad4528n%40googlegroups.com > <https://groups.google.com/d/msgid/jallib/f2b66222-389b-4f41-8705-41e46aad4528n%40googlegroups.com?utm_medium=email&utm_source=footer> > . > > -- > You received this message because you are subscribed to the Google Groups > "jallib" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/jallib/c174132e-28a7-4383-9c2d-335a2b025082n%40googlegroups.com > <https://groups.google.com/d/msgid/jallib/c174132e-28a7-4383-9c2d-335a2b025082n%40googlegroups.com?utm_medium=email&utm_source=footer> > . > > -- > You received this message because you are subscribed to the Google Groups > "jallib" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > > To view this discussion on the web visit > https://groups.google.com/d/msgid/jallib/GVXP195MB16376699E4BB8A93181105D7E61BA%40GVXP195MB1637.EURP195.PROD.OUTLOOK.COM > <https://groups.google.com/d/msgid/jallib/GVXP195MB16376699E4BB8A93181105D7E61BA%40GVXP195MB1637.EURP195.PROD.OUTLOOK.COM?utm_medium=email&utm_source=footer> > . > > -- > You received this message because you are subscribed to the Google Groups > "jallib" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/jallib/a4d7714c-a139-4928-9611-e43b7425619cn%40googlegroups.com > <https://groups.google.com/d/msgid/jallib/a4d7714c-a139-4928-9611-e43b7425619cn%40googlegroups.com?utm_medium=email&utm_source=footer> > . > > -- > You received this message because you are subscribed to the Google Groups > "jallib" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/jallib/CAM%2Bj4qs4wyM2K1hMCWT6ac8yxDNa3yLf8c4Hd-6jpp_rr1412w%40mail.gmail.com > <https://groups.google.com/d/msgid/jallib/CAM%2Bj4qs4wyM2K1hMCWT6ac8yxDNa3yLf8c4Hd-6jpp_rr1412w%40mail.gmail.com?utm_medium=email&utm_source=footer> > . > > -- > You received this message because you are subscribed to the Google Groups > "jallib" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/jallib/GVXP195MB16370E4B4A18CF506805D210E61BA%40GVXP195MB1637.EURP195.PROD.OUTLOOK.COM > <https://groups.google.com/d/msgid/jallib/GVXP195MB16370E4B4A18CF506805D210E61BA%40GVXP195MB1637.EURP195.PROD.OUTLOOK.COM?utm_medium=email&utm_source=footer> > . > > -- > You received this message because you are subscribed to the Google Groups > "jallib" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/jallib/GVXP195MB1637EE4023EAC07139458C68E619A%40GVXP195MB1637.EURP195.PROD.OUTLOOK.COM > <https://groups.google.com/d/msgid/jallib/GVXP195MB1637EE4023EAC07139458C68E619A%40GVXP195MB1637.EURP195.PROD.OUTLOOK.COM?utm_medium=email&utm_source=footer> > . > -- You received this message because you are subscribed to the Google Groups "jallib" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/jallib/CAM%2Bj4qtqLVxZGNiYmQvy%3DW%2BMXU%2B0MDLG1zfPtZ--8637BNodxg%40mail.gmail.com.
