Hallo Dmitry,

   unfortunately the version 3.2.2 is the last mspgcc release available
for download for linux from mspgcc's sourceforge website.
There is also no a _really clear_ explanation which versions to compile
and download with which patches to get all the toolchain running smooth.

I use 3.2.3, compiled with mspgcc patch CVS head for the 3.2.3 branch
from end of july 2004 and it works quite well. The only downside is the
lack of backtracing in my gdb (430x147), but I've promised myself, when
I'll have some time to look at the issue and try to compile it for 6.2
and make the backtrace work.

I've put my archives with a bit fresher runtime at 

http://www.pp.org.pl/~trevor/mspgcc/mspgcc_20040730.tar.bz2

Readme file how to install it (available also inside of the package)

http://www.pp.org.pl/~trevor/mspgcc/README.txt - the versions and
details are contained inside. It's still prefered to compile and and
install from sources, but for people it can really simplify the life.

Everything is inside, except gdbproxy - the licence issues of the tools
don't permit to package it together. I'm not providing the sources,
because it's compiled from one of the patch revisions available from
mspgcc website and regular gnu tools distributions. The patch everyone
can download from mspgcc website, there is no single modification by
myself in the sourcecode.

        Regards,

                T.


W liƛcie z czw, 23-09-2004, godz. 09:45, Dmitry pisze: 
> There is something _really_ odd.
> The listing file you've generated is incomplete. For example,
>     jmp &0x000
>     bic rN, &0x000
> is impossible.
> 
> Also, try to use something like gcc-3.2.3, not a pre-release.
> ~d
> 
> Tommy Andersson wrote:
> 
> > Hello maintainers,
> >
> > I am using msp430-gcc and friends, and I have found some possible
> > bugs. My computer is setup according to:
> >
> > cat /etc/slackware-version
> > Slackware 9.0.0
> >
> > uname -a
> > Linux gaston 2.4.20 #2 Mon Mar 17 22:02:15 PST 2003 i686 unknown
> >
> > I have included some source-code in this message, which begins at
> > "Listing 1", and also some assembly output which begins at
> > "Listing 2". The following files have been downloaded and installed:
> >
> > msp430-gcc-3.2.2.20030214.tar.bz2
> > msp430-libc-1.0.20030207.tar.bz2
> >
> > The commandline used to compile the program in listing 1 was:
> >
> > msp430-gcc -O -S -fpeephole -fpeephole2 -mmcu=msp430x147 bugsdemo.c -o
> > bugsdemo.s
> >
> > The reason that I activated the flag -fpeephole2, was that I was not
> > satisfied with the optimization when using the datatype long int. The
> > flag made the optimizer remove a few redundant instructions, but also,
> > as we will see, a few necessary instructions as well.
> >
> > Now to the details:
> >
> > 1. Sourcecode line 63 and line 74 generates an invalid opcode, "jne
> >    &0x0000", as can be seen in lines 44 and 61 in the assembly
> >    listing. The workaround was to rewrite the macros DISABLE_TX_INTR
> >    and ENABLE_TX_INTR to generate function calls. This is not a very
> >    efficient way of coding however.
> >
> > 2. Sourcecode line 137 generates an invalid opcode, "jl &0x001D", as
> >    can be seen in line 151 in the assembly listing. The workaround was
> >    to rewrite the macro DATA_DIR_OUT to generate a function call. The
> >    phenomenom seems to be related the one above.
> >
> > 3. Lines 237 to 244 have an #if/#else/#endif macro. If the first case
> >    is compiled, the value of grid[0] will not be correct when the call
> >    to pr_txchar( grid[0] ) in line 239 is made. A "mov @r11, r15"
> >    between lines 266 and 267 would save the day. The second case of
> >    the macro always compile correctly. During the writing of this
> >    message I found that the problem disappeared when I omitted the
> >    flag -fpeephole2 on the commandline. The commndline now was:
> >    msp430-gcc -O -S -fpeephole -mmcu=msp430x147 bugsdemo.c -o bugsdemo.s
> >
> > I do not know if -O automatically sets -fpeephole, is there any way of
> > checking this ?
> >
> > NOTE that the line-numbers above refers to line-numbers in the source,
> > not to line-numbers in this text.
> >
> > The code in the example below is copied from different files in
> > production code.
> >
> > With Best Regards, Tommy Andersson
> >
> > tommy.anders...@geodynamik.com
> >
> > --- Listing 1 begins here ---------------------------------------
> > #include <io.h>
> > #include <signal.h>
> >
> > #define ENABLE_TX_INTR  SFR_CMD(bis.b,IE1,UTXIE0)
> > #define DISABLE_TX_INTR SFR_CMD(bic.b,IE1,UTXIE0)
> >
> > #define U0_BUFSIZE      10
> > #define PRC_PRINTER     2
> >
> > // Push flags and disable interrupts
> > inline static void pushf_disable( void )
> > {
> >   asm volatile ( "push r2 \n\t" : : );
> >   dint();
> >   asm volatile ( "nop     \n\t" : : );  // dint() is delayed 1 clock !
> > }
> >
> > // Pop the flags, possibly enabling interrupts
> > inline static void popf( void )
> > {
> >   asm volatile ( "pop r2 \n\t" : : );
> > }
> >
> > typedef unsigned char BYTE;
> >
> > /*** Global control variables: ***/
> > extern volatile unsigned char           curr_pid;
> >
> > /*----------------------------------------------------------------------
> >                         Local variables
> > ----------------------------------------------------------------------*/
> > static volatile BYTE    tx0_buffer[U0_BUFSIZE];
> > static volatile BYTE    *tx0_head = tx0_buffer;
> > static volatile BYTE    *tx0_tail = tx0_buffer;
> >
> > static volatile BYTE    tx0_stop;
> > static volatile BYTE    tx0_pending;
> >
> > static volatile BYTE    suspended, wait_data_flag;
> >
> > /*----------------------------------------------------------------------
> > Transmit a character through the serial interface. Returns -1 on a
> > failure, otherwise 0 is returned.
> > ----------------------------------------------------------------------*/
> > int pr_txchar( char ch )
> > {
> > BYTE            *ptr;
> >
> >  retry:
> >   DISABLE_TX_INTR;
> >
> >   if ( !tx0_pending ) { // NO pending transmissions
> >     U0TXBUF = ch;
> >     tx0_pending = 1;
> >   }
> >   else {
> >     ptr = tx0_head;
> >     if (++ptr >= tx0_buffer+U0_BUFSIZE)
> >       ptr = tx0_buffer;
> >     if (ptr == tx0_tail) { // Buffer is FULL !
> >       ENABLE_TX_INTR;
> >
> >       if ( curr_pid == PRC_PRINTER ) {
> >         pushf_disable();
> >         suspended = 1;  // This flag MUST BE SET before suspending the proc 
> > !
> >         proc_suspend( PRC_PRINTER ); // Suspend printer process
> >         popf();
> >         goto retry;
> >       }
> >       else
> >         return -1;      // Otherwise, return error.
> >     }
> >     *tx0_head = ch;     // Save next printer character.
> >     tx0_head = ptr;
> >   }
> >   ENABLE_TX_INTR;
> >   return 0;
> > }
> >
> > #define CLOCK_LOW               SFR_CMD( bic, P4OUT, 1<<0 )
> > #define CLOCK_HIGH              SFR_CMD( bis, P4OUT, 1<<0 )
> > #define DATA_LOW                SFR_CMD( bic, P4OUT, 1<<1 )
> > #define DATA_HIGH               SFR_CMD( bis, P4OUT, 1<<1 )
> > #define DATA_DIR_IN             SFR_CMD( bic, P4DIR, 1<<1 )
> > #define DATA_DIR_OUT            SFR_CMD( bis, P4DIR, 1<<1 )
> > #define DATA_IN                 (P4IN&(1<<1))
> >
> > /*----------------------------------------------------------------------
> > Read one byte of data from the RTC.
> >
> > The argument 'bytecount' shall be assigned the number of to be read at
> > this 'session', and is used to control the acknowledge bit.
> > ----------------------------------------------------------------------*/
> > static unsigned char rtc_read( signed char bytecount )
> > {
> >   unsigned char         bitcount, data_read;
> >   static signed char    count;
> >
> >   if (bytecount)
> >     count = bytecount-1;
> >   else
> >     --count;
> >
> >   DATA_DIR_IN;          // DATA goes high (hi-z)
> >   for (bitcount = 0; bitcount < 8; bitcount++ ) {
> >     CLOCK_HIGH;
> >     delay_us( 4 );
> >
> >     data_read <<= 1;
> >     if ( DATA_IN )
> >       data_read |= (1<<0);
> >     else
> >       data_read &= ~(1<<0);
> >
> >     CLOCK_LOW;
> >     delay_us( 4 );
> >   }
> >   DATA_LOW;
> >
> >   if ( count > 0 )
> >     DATA_DIR_OUT;       // DATA goes low -> Acknowledge */
> >
> >   delay_us( 2 );
> >   CLOCK_HIGH;
> >   delay_us( 4 );
> >   CLOCK_LOW;
> >   delay_us( 2 );
> >   DATA_DIR_IN;
> >
> >   return data_read;
> > }
> >
> > #define LF                      10
> > #define FF                      12
> > #define CR                      13
> > #define ESC                     27
> >
> > #define WIDTH_CHAR              12
> > #define WIDTH_PRINTROW          400
> > #define MAXWIDTH_PRINTROW
> > (WIDTH_PRINTROW>WIDTH_LOGO?WIDTH_PRINTROW:WIDTH_LOGO)
> > #define LOGO_HORZ_TAB           ((480-300)/2)
> > #define HDR_HORZ_TAB            49
> > #define DATA_HORZ_TAB           49
> > #define FOOT_HORZ_TAB           49
> > #define HEIGHT_TEXTLINE         12
> > #define HEIGHT_PRINTROW         8
> > #define HEIGHT_FOOTER           (12*HEIGHT_TEXTLINE)
> > #define HEIGHT_A4               ((int)(VERT_DPI*297/25.4))
> > #define HORZ_GRIDLINE_SPACE     30
> > #define COARSE_VERT_GRIDLINE_SPACE      67
> > #define FINE_VERT_GRIDLINE_SPACE        100
> > #define CURVE_WIDTH             3
> >
> > #define PC_BEGIN_LOGO           {pr_txchar(ESC);pr_txchar('L');\
> >                                 pr_txchar((WIDTH_LOGO+LOGO_HORZ_TAB)&0xff);\
> >                                 pr_txchar((WIDTH_LOGO+LOGO_HORZ_TAB)>>8);}
> > #define PC_BEGIN_HDRTAB         {pr_txchar(ESC);pr_txchar('L');\
> >                                 pr_txchar(LOGO_HORZ_TAB&0xff);\
> >                                 pr_txchar(LOGO_HORZ_TAB>>8);}
> > #define PC_BEGIN_GRAPHIC        {pr_txchar(ESC);pr_txchar('L');\
> >                                 pr_txchar((WIDTH_PRINTROW)&0xff);\
> >                                 pr_txchar((WIDTH_PRINTROW)>>8);}
> > #define PC_BEGIN_GRA_RMV        {pr_txchar(ESC);pr_txchar('L');\
> >                                 pr_txchar((WIDTH_PRINTROW+5)&0xff);\
> >                                 pr_txchar((WIDTH_PRINTROW+5)>>8);}
> > #define PC_SET_LINESPACING(x)   
> > {pr_txchar(ESC);pr_txchar('A');pr_txchar(x);}
> > #define PC_SET_GRLINESPACING    
> > {pr_txchar(ESC);pr_txchar('A');pr_txchar(8);}
> > #define PC_SET_TXTLINESPACING   
> > {pr_txchar(ESC);pr_txchar('A');pr_txchar(12);}
> > #define PC_SELECT_CHARSET(x)    
> > {pr_txchar(ESC);pr_txchar('R');pr_txchar(x);\
> >                                 pr_txchar(ESC);pr_txchar('t');pr_txchar(x);}
> > #define PC_CRLF                 {pr_txchar(CR);pr_txchar(LF);}
> > #define PC_PIXELTAB(x)          {int q;pr_txchar(ESC);pr_txchar('L');\
> >                                 pr_txchar((x)&0xff);pr_txchar((x)>>8);\
> >                                 for(q=(x);q;q--)pr_txchar(0);}
> > #define PC_FEED                 pr_txchar(FF)
> > #define PC_SET_CONDENSED        pr_txchar(0x0f)
> > #define PC_SET_NORMAL           pr_txchar(0x12)
> >
> > static int              timeaxis;
> >
> > unsigned char *make_grid_and_frame( int horz_pos, int vert_pos );
> > unsigned char create_data_curve( int pos );
> >
> > int print_data( void )
> > {
> >   int           printbyte;
> >   unsigned char vline8, *grid;
> >
> >   PC_SET_GRLINESPACING;
> >   // Left margin
> >   grid = make_grid_and_frame( 0, timeaxis );
> >   if (grid[1] != 128) {
> > #if (DATA_HORZ_TAB - 4*WIDTH_CHAR -1) < 0
> > #error "***** Not enough space for numeric scale at left edge *****"
> > #else
> > #if (DATA_HORZ_TAB - 4*WIDTH_CHAR -1) > 0
> >     PC_PIXELTAB(DATA_HORZ_TAB - 4*WIDTH_CHAR -1);
> > #endif
> > #endif
> >
> >     pr_txnum_i( (timeaxis+7-grid[1])/3, 3 ); pr_txchar( 's' );
> >     PC_PIXELTAB(1);
> >   }
> >   else
> >     PC_PIXELTAB(DATA_HORZ_TAB);
> >
> >   // Data
> >   PC_BEGIN_GRA_RMV;
> >
> >   for (printbyte = 0; printbyte<WIDTH_PRINTROW; printbyte++ ) {
> >     grid = make_grid_and_frame( printbyte, timeaxis );
> > #ifndef COMPILER_BUG    // This does not work due to a compiler bug
> >     grid[0] |= create_data_curve( printbyte );
> >     pr_txchar( grid[0] );
> > #else
> >     vline8 = grid[0];
> >     vline8 |= create_data_curve( printbyte );
> >     pr_txchar( vline8 );
> > #endif
> >   }
> >   pr_txchar( 0 );
> >   pr_txchar( 0 );
> >   vline8 = create_rmv8( printbyte );
> >   pr_txchar( vline8 );
> >   pr_txchar( vline8 );
> >   pr_txchar( vline8 );
> >   PC_CRLF;
> >
> >   timeaxis += 8;
> >   return HEIGHT_PRINTROW;
> > }
> >
> > --- Listing 2 begins here ---------------------------------------
> >         .file   "bugsdemo.c"
> >         .arch msp430x147
> >
> > /* Hardware multiplier registers: */
> > __MPY=0x130
> > __MPYS=0x132
> > __MAC=0x134
> > __MACS=0x136
> > __OP2=0x138
> > __RESLO=0x13a
> > __RESHI=0x13c
> > __SUMEXT=0x13e
> >
> >         .data
> >         .p2align 1,0
> >         .type   tx0_head,@object
> >         .size   tx0_head,2
> > tx0_head:
> >         .short  tx0_buffer
> >         .p2align 1,0
> >         .type   tx0_tail,@object
> >         .size   tx0_tail,2
> > tx0_tail:
> >         .short  tx0_buffer
> >         .text
> >         .p2align 1,0
> > .global pr_txchar
> >         .type   pr_txchar,@function
> > /***********************
> >  * Function `pr_txchar'
> >  ***********************/
> > pr_txchar:
> > /* prologue: frame size = 0 */
> > .L__FrameSize_pr_txchar=0x0
> > .L__FrameOffset_pr_txchar=0x2
> >         push    r11
> > /* prologue end (size=1) */
> >         mov.b   r15, r11
> > .L2:
> > /* #APP */
> >         bic.b   #llo(-128), &0x0000
> > /* #NOAPP */
> >         cmp.b   #llo(0), &tx0_pending
> >         jne     &0x0000
> >         mov.b   r11, &0x0077
> >         mov.b   #llo(1), &tx0_pending
> >         jmp     .L4
> > .L3:
> >         mov     &tx0_head, r14
> >         add     #llo(1), r14
> >         cmp     #tx0_buffer+10, r14
> >         jlo     .L5
> >         mov     #tx0_buffer, r14
> > .L5:
> >         cmp     &tx0_tail, r14
> >         jne     .L6
> > /* #APP */
> >         bis.b   #llo(-128), &0x0000
> > /* #NOAPP */
> >         cmp.b   #llo(2), &curr_pid
> >         jne     &0x0000
> > /* #APP */
> >         push r2
> >
> >         dint
> >         nop
> >
> > /* #NOAPP */
> >         mov.b   #llo(1), &suspended
> >         mov     #llo(2), r15
> >         call    #proc_suspend
> > /* #APP */
> >         pop r2
> >
> > /* #NOAPP */
> >         jmp     .L2
> > .L7:
> >         mov     #llo(-1), r15
> >         jmp     .L1
> > .L6:
> >         mov     &tx0_head, r15
> >         mov.b   r11, @r15
> >         mov     r14, &tx0_head
> > .L4:
> > /* #APP */
> >         bis.b   #llo(-128), &0x0000
> > /* #NOAPP */
> >         mov     #llo(0), r15
> > .L1:
> > /* epilogue: frame size=0 */
> >         pop     r11
> >         ret
> > /* epilogue end (size=2) */
> > /* function pr_txchar size 64 (61) */
> > .Lfe1:
> >         .size   pr_txchar,.Lfe1-pr_txchar
> > /********* End of function ******/
> >
> >         .local count.0
> >         .comm count.0,1
> >         .p2align 1,0
> >         .type   rtc_read,@function
> > /***********************
> >  * Function `rtc_read'
> >  ***********************/
> > rtc_read:
> > /* prologue: frame size = 0 */
> > .L__FrameSize_rtc_read=0x0
> > .L__FrameOffset_rtc_read=0x4
> >         push    r11
> >         push    r10
> > /* prologue end (size=2) */
> >         cmp.b   #llo(0), r15
> >         jeq     .L12
> >         add.b   #llo(-1), r15
> >         mov.b   r15, &count.0
> >         jmp     .L13
> > .L12:
> >         add.b   #llo(-1), &count.0
> > .L13:
> > /* #APP */
> >         bic     #llo(2), &0x001E
> > /* #NOAPP */
> >         mov.b   #llo(0), r10
> > .L20:
> > /* #APP */
> >         bis     #llo(1), &0x001D
> > /* #NOAPP */
> >         mov     #llo(4), r15
> >         call    #delay_us
> >         rla.b   r11
> >         bit.b   #llo(2),&0x001C
> >         jeq     .L18
> >         bis.b   #llo(1), r11
> >         jmp     .L19
> > .L18:
> >         bic.b   #llo(1),r11
> > .L19:
> > /* #APP */
> >         bic     #llo(1), &0x001D
> > /* #NOAPP */
> >         mov     #llo(4), r15
> >         call    #delay_us
> >         add.b   #llo(1), r10
> >         cmp.b   #llo(8), r10
> >         jlo     .L20
> > /* #APP */
> >         bic     #llo(2), &0x001D
> > /* #NOAPP */
> >         cmp.b   #llo(1), &count.0
> >         jl      &0x001D ;       &0x001D
> > /* #APP */
> >         bis     #llo(2), &0x001E
> > /* #NOAPP */
> > .L21:
> >         mov     #llo(2), r15
> >         call    #delay_us
> > /* #APP */
> >         bis     #llo(1), &0x001D
> > /* #NOAPP */
> >         mov     #llo(4), r15
> >         call    #delay_us
> > /* #APP */
> >         bic     #llo(1), &0x001D
> > /* #NOAPP */
> >         mov     #llo(2), r15
> >         call    #delay_us
> > /* #APP */
> >         bic     #llo(2), &0x001E
> > /* #NOAPP */
> >         mov.b   r11, r15
> > /* epilogue: frame size=0 */
> >         pop     r10
> >         pop     r11
> >         ret
> > /* epilogue end (size=3) */
> > /* function rtc_read size 61 (56) */
> > .Lfe2:
> >         .size   rtc_read,.Lfe2-rtc_read
> > /********* End of function ******/
> >
> >         .p2align 1,0
> > .global print_data
> >         .type   print_data,@function
> > /***********************
> >  * Function `print_data'
> >  ***********************/
> > print_data:
> > /* prologue: frame size = 0 */
> > .L__FrameSize_print_data=0x0
> > .L__FrameOffset_print_data=0x4
> >         push    r11
> >         push    r10
> > /* prologue end (size=2) */
> >         mov.b   #llo(27), r15
> >         call    #pr_txchar
> >         mov.b   #llo(65), r15
> >         call    #pr_txchar
> >         mov.b   #llo(8), r15
> >         call    #pr_txchar
> >         mov     &timeaxis, r14
> >         mov     #llo(0), r15
> >         call    #make_grid_and_frame
> >         cmp.b   #llo(-128), 1(r15)
> >         jeq     .L25
> >         mov.b   1(r15), r15
> >         mov     &timeaxis, r14
> >         sub     r15, r14
> >         mov     r14, r15
> >         add     #llo(7), r15
> >         mov     r15, r12
> >         mov     #llo(3), r10
> >         call    #__divmodhi4
> >         mov     r12, r15
> >         mov     #llo(3), r14
> >         call    #pr_txnum_i
> >         mov.b   #llo(115), r15
> >         call    #pr_txchar
> >         mov.b   #llo(27), r15
> >         call    #pr_txchar
> >         mov.b   #llo(76), r15
> >         call    #pr_txchar
> >         mov.b   #llo(1), r15
> >         call    #pr_txchar
> >         mov.b   #llo(0), r15
> >         call    #pr_txchar
> >         mov     #llo(1), r11
> > .L30:
> >         mov.b   #llo(0), r15
> >         call    #pr_txchar
> >         add     #llo(-1), r11
> >         jeq     .L31
> >         jmp     .L30
> > .L25:
> >         mov.b   #llo(27), r15
> >         call    #pr_txchar
> >         mov.b   #llo(76), r15
> >         call    #pr_txchar
> >         mov.b   #llo(49), r15
> >         call    #pr_txchar
> >         mov.b   #llo(0), r15
> >         call    #pr_txchar
> >         mov     #llo(49), r11
> > .L36:
> >         mov.b   #llo(0), r15
> >         call    #pr_txchar
> >         add     #llo(-1), r11
> >         jne     .L36
> > .L31:
> >         mov.b   #llo(27), r15
> >         call    #pr_txchar
> >         mov.b   #llo(76), r15
> >         call    #pr_txchar
> >         mov.b   #llo(-107), r15
> >         call    #pr_txchar
> >         mov.b   #llo(1), r15
> >         call    #pr_txchar
> >         mov     #llo(0), r10
> > .L41:
> >         mov     &timeaxis, r14
> >         mov     r10, r15
> >         call    #make_grid_and_frame
> >         mov     r15, r11
> >         mov     r10, r15
> >         call    #create_data_curve
> >         bis.b   r15, @r11
> >         call    #pr_txchar
> >         add     #llo(1), r10
> >         cmp     #llo(400), r10
> >         jl      .L41    ;       .L41
> >         mov.b   #llo(0), r15
> >         call    #pr_txchar
> >         mov.b   #llo(0), r15
> >         call    #pr_txchar
> >         mov     r10, r15
> >         call    #create_rmv8
> >         mov     r15, r11
> >         call    #pr_txchar
> >         mov.b   r11, r15
> >         call    #pr_txchar
> >         mov.b   r11, r15
> >         call    #pr_txchar
> >         mov.b   #llo(13), r15
> >         call    #pr_txchar
> >         mov.b   #llo(10), r15
> >         call    #pr_txchar
> >         add     #llo(8), &timeaxis
> >         mov     #llo(8), r15
> > /* epilogue: frame size=0 */
> >         pop     r10
> >         pop     r11
> >         ret
> > /* epilogue end (size=3) */
> > /* function print_data size 153 (148) */
> > .Lfe3:
> >         .size   print_data,.Lfe3-print_data
> > /********* End of function ******/
> >
> >         .local tx0_buffer
> >         .comm tx0_buffer,10,2
> >         .local tx0_stop
> >         .comm tx0_stop,1
> >         .local tx0_pending
> >         .comm tx0_pending,1
> >         .local suspended
> >         .comm suspended,1
> >         .local wait_data_flag
> >         .comm wait_data_flag,1
> >         .local timeaxis
> >         .comm timeaxis,2,2
> >
> > /*********************************************************************
> >  * File bugsdemo.c: code size: 278 words (0x116)
> >  * incl. words in prologues: 5, epilogues: 8
> >  *********************************************************************/
> >
> > --- End Of File  ---------------------------------------
> >
> > -------------------------------------------------------
> > This SF.Net email is sponsored by: YOU BE THE JUDGE. Be one of 170
> > Project Admins to receive an Apple iPod Mini FREE for your judgement on
> > who ports your project to Linux PPC the best. Sponsored by IBM.
> > Deadline: Sept. 24. Go here: http://sf.net/ppc_contest.php
> > _______________________________________________
> > Mspgcc-users mailing list
> > Mspgcc-users@lists.sourceforge.net
> > https://lists.sourceforge.net/lists/listinfo/mspgcc-users
> 
> 
> 
> -------------------------------------------------------
> This SF.Net email is sponsored by: YOU BE THE JUDGE. Be one of 170
> Project Admins to receive an Apple iPod Mini FREE for your judgement on
> who ports your project to Linux PPC the best. Sponsored by IBM.
> Deadline: Sept. 24. Go here: http://sf.net/ppc_contest.php
> _______________________________________________
> Mspgcc-users mailing list
> Mspgcc-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/mspgcc-users


Reply via email to