Re: msp430-gcc 4.7 bug with shifts?

Jhon James <[email protected]>
Newsgroups gmane.comp.hardware.texas-instruments.msp430.gcc.user
Message-ID <CAKrEWqXpmdPT4vhaizmjsCNm5WMguzUbONvg+TfmDcpunX5Z9Q@mail.gmail.com>
Hello Peter,

I have previously used the Contiki with Z1 motes on a PC. I used msp430-gcc
and everything worked quite well. I have now an embedded ARM board on which
I am trying to install the msp430-gcc compiler. The board comes with Ubuntu
installed it it. I tried installed msp430-gcc 4.63 on it but it did not
worked for me since motes cannot be programmed using it. It is reommended
to use msp430-gcc 4.7.0 I tried but did not suceeded can you share some to
follow or packages to install. Since you are using contiki

I appreciate your pointers

Thanks


On Thu, Jul 4, 2013 at 8:13 PM, Peter Bigot <[email protected]> wrote:

> I'm still analyzing Contiki's mac/rdc/radio layers, and won't be looking at
> CoAP for a while.  But I see generally what's going on there; it's probably
> a separate bug that only shows up now that the first one has been fixed.
>
> It'll take a couple days to get back to this.
>
> Peter
>
>
> On Thu, Jul 4, 2013 at 9:38 AM, Daniele Alessandrelli <
> [email protected]> wrote:
>
> > Thank you for the quick patch.
> > However, there are still some problems. For example, when I compile
> > the attached code (sorry, I can't replicate the problem with simple
> > code), I get the following error:
> > /tmp/ccNaHhxW.s: Assembler messages:
> > /tmp/ccNaHhxW.s:1427: Error: Repeated instruction must have register
> > mode operands
> >
> > The problematic code snippet is from line 699 to 706:
> > ...
> >         case COAP_OPTION_BLOCK1:
> >           coap_pkt->block1_num = coap_parse_int_option(current_option,
> > option_len);
> >           coap_pkt->block1_more = (coap_pkt->block1_num & 0x08)>>3;
> >           coap_pkt->block1_size = 16 << (coap_pkt->block1_num & 0x07);
> >           coap_pkt->block1_offset = (coap_pkt->block1_num &
> > ~0x0000000F)<<(coap_pkt->block1_num & 0x07);
> >           coap_pkt->block1_num >>= 4;
> >           printf("Block1 [%lu%s (%u B/blk)]\n", coap_pkt->block1_num,
> > coap_pkt->block1_more ? "+" : "", coap_pkt->block1_size);
> >           break;
> > ...
> >
> > Part of the produced assembly code is the following:
> > ...
> >         mov     r12, r4
> >         and     #7, r4
> >         mov.b   r4, r11
> >         mov     #16, @r1
> >         cmp.b   #0, r11
> >         jeq     .L158
> >         add.b   #-1, r11
> >         .rpt    r11
> >         rlax    @r1
> > .L158:
> >         mov     @r1, 96(r9)
> > ...
> >
> > The invalid instruction seems to be the following
> > .rpt    r11
> > rlax    @r1
> >
> > Some notes:
> > - the code is taken from Contiki, so perhaps you can test it personally
> > - if the final printf() is removed, the code compiles (i.e., the
> > generated assembly is correct) and works as expected.
> >
> > Regards.
> >
> > Daniele
> >
> > On Wed, Jul 3, 2013 at 8:30 PM, Peter Bigot <[email protected]> wrote:
> > > Thanks for the ticket and the reproducing code.  I've attached to the
> > ticket
> > > a (second attempt at a) patch that I believe fixes this.  It has not
> > > undergone significant testing but I'll be using it in my own work.
> > >
> > > Those of you playing along at home might find the patch attached to
> > > https://sourceforge.net/p/mspgcc/bugs/352/ useful as well.  They are
> to
> > the
> > > 20120911 development release, and are unsupported, but are most of what
> > > would have qualified as patches if that were an LTS release.  If you
> > apply
> > > them and build a system, please update the version number in some way
> so
> > > you're reminded they're not standard builds.
> > >
> > > Sorry, I don't provide instructions or support for applying patches to
> > > mspgcc.
> > >
> > > Peter
> > >
> > >
> > > On Wed, Jul 3, 2013 at 11:38 AM, Daniele Alessandrelli
> > > <[email protected]> wrote:
> > >>
> > >> I opened the ticket:
> > >> https://sourceforge.net/p/mspgcc/bugs/357/
> > >>
> > >> Thank you for your time.
> > >>
> > >> Daniele
> > >>
> > >>
> > >> On Wed, Jul 3, 2013 at 5:20 PM, Peter Bigot <[email protected]> wrote:
> > >>>
> > >>> That looks like a bug.  Only happens on CPUX architectures.  If you
> > open
> > >>> up a ticket on https://sourceforge.net/p/mspgcc/bugs/ I may be able
> > to look
> > >>> at it some time.
> > >>>
> > >>> Peter
> > >>>
> > >>>
> > >>> On Wed, Jul 3, 2013 at 7:37 AM, Daniele Alessandrelli
> > >>> <[email protected]> wrote:
> > >>>>
> > >>>> Hi everybody,
> > >>>>
> > >>>> I noticed a strange behavior when executing certain shift operations
> > and
> > >>>> I
> > >>>> wonder whether this is because of a compiler bug or just my
> ignorance
> > in
> > >>>> low-level C.
> > >>>>
> > >>>> For example, when compiling (with no optimization) and then
> executing
> > >>>> the
> > >>>> following lines of code the result I obtain is 16 instead of 64:
> > >>>>
> > >>>> uint32_t  u32_var;
> > >>>>
> > >>>> int main(void)
> > >>>> {
> > >>>>     int tmp;
> > >>>>     ...
> > >>>>     u32_var = 0xa;
> > >>>>     tmp = 16 << (u32_var & 0x07);
> > >>>>     printf("tmp: %d\n", tmp);
> > >>>>     ...
> > >>>> }
> > >>>>
> > >>>> However, if I change the type of tmp form "int" to "unsigned int"
> the
> > >>>> result is correct (i.e., 64).
> > >>>>
> > >>>> This is assembly code generated when tmp is defined as int (i.e.,
> when
> > >>>> the
> > >>>> result is wrong).
> > >>>>
> > >>>>     5c44:       b2 40 0a 00     mov     #10,    &0x1c02 ;#0x000a
> > >>>>
> > >>>>     5c48:       02 1c
> > >>>>
> > >>>>     5c4a:       82 43 04 1c     mov     #0,     &0x1c04 ;r3 As==00
> > >>>>
> > >>>>     5c4e:       1e 42 02 1c     mov     &0x1c02,r14
> > >>>>
> > >>>>     5c52:       1f 42 04 1c     mov     &0x1c04,r15
> > >>>>
> > >>>>     5c56:       0f 4e           mov     r14,    r15
> > >>>>
> > >>>>     5c58:       3f f0 07 00     and     #7,     r15     ;#0x0007
> > >>>>
> > >>>>     5c5c:       3e 40 10 00     mov     #16,    r14     ;#0x0010
> > >>>>
> > >>>>     5c60:       4f 4f           mov.b   r15,    r15
> > >>>>
> > >>>>     5c62:       7f f0 0f 00     and.b   #15,    r15     ;#0x000f
> > >>>>
> > >>>>     5c66:       84 4e fc ff     mov     r14,    -4(r4)  ;0xfffc(r4)
> > >>>>
> > >>>>     5c6a:       4f 93           tst.b   r15
> > >>>>
> > >>>>     5c6c:       03 24           jz      $+8             ;abs 0x5c74
> > >>>>
> > >>>>     5c6e:       7f 53           add.b   #-1,    r15     ;r3 As==11
> > >>>>
> > >>>>     5c70:       cf 18 0e 5e     .rpt    r15
> > >>>>
> > >>>>                                 addx    r14,    r14
> > >>>>
> > >>>>     5c74:       14 12 fc ff     push    -4(r4)          ;0xfffc(r4)
> > >>>>
> > >>>>     5c78:       30 12 9a 66     push    #26266          ;#0x669a
> > >>>>
> > >>>>     5c7c:       b0 12 ae 5c     call    #0x5cae
> > >>>>
> > >>>>
> > >>>> As you can see, at address 0x5c66, register 14 (containing 16) is
> > stored
> > >>>> in
> > >>>> memory before being shifted. The stored valued (i.e., 16) is then
> > pushed
> > >>>> in
> > >>>> the stack (i.e., passed as an argument to the printf() function).
> > >>>>
> > >>>> I have a similar problem also when using -Os, but I can't replicate
> it
> > >>>> with
> > >>>> simple code because of the optimization. However, if needed, I can
> > post
> > >>>> the
> > >>>> (large) source code that is giving me this problem.
> > >>>>
> > >>>> The version of msp430-gcc that I am using is:
> > >>>> msp430-gcc (GCC) 4.7.0 20120322 (mspgcc dev 20120911)
> > >>>>
> > >>>> Thank you for any help you can provide.
> > >>>>
> > >>>> Regards.
> > >>>>
> > >>>> Daniele
> > >>>>
> > >>>>
> > >>>>
> >
> ------------------------------------------------------------------------------
> > >>>> This SF.net email is sponsored by Windows:
> > >>>>
> > >>>> Build for Windows Store.
> > >>>>
> > >>>> http://p.sf.net/sfu/windows-dev2dev
> > >>>> _______________________________________________
> > >>>> Mspgcc-users mailing list
> > >>>> [email protected]
> > >>>> https://lists.sourceforge.net/lists/listinfo/mspgcc-users
> > >>>>
> > >>>
> > >>
> > >
> >
>
>
> ------------------------------------------------------------------------------
> This SF.net email is sponsored by Windows:
>
> Build for Windows Store.
>
> http://p.sf.net/sfu/windows-dev2dev
> _______________________________________________
> Mspgcc-users mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/mspgcc-users
>
>

------------------------------------------------------------------------------
See everything from the browser to the database with AppDynamics
Get end-to-end visibility with application monitoring from AppDynamics
Isolate bottlenecks and diagnose root cause in seconds.
Start your free trial of AppDynamics Pro today!
http://pubads.g.doubleclick.net/gampad/clk?id=48808831&iu=/4140/ostg.clktrk

_______________________________________________
Mspgcc-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mspgcc-users
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.