>
> > But m2 should be 16-bit, and yet is generated as 8-bit.
>
> you're right...
> I'll fix it in a minute... (already in cvs. :)

Thanks - I'll download later today.

>
>
> > Incidently, is the inline multiply code faster than using the hardware
> > multiply?  I can see it would be for small constants, but do you switch
> > over automatically for constants that generate larger code?  Also, is it
>
> Well. There is a threshold...
> Probably this should be smaller a bit. Agree.

I'm not sure it needs to be smaller (since I don't know where it is
today...), but there are advantages in using the inlined code over the
hardware multiplier, since you avoid disabling the interrupts.

While I'm thinking about that, I see there is a flag "-fhwmul-no-int" which
says you can be sure that no interrupt routines use the hardware multiplier,
and therefore interrupts don't need to be disabled when using it.  Would it
make sense to have a function attribute that says that the hardware
multiplier is disabled during that function only, rather than disabling it
for a whole file (with -fdisable-hwmul) ?  You could then use that attribute
on your interrupt routine, just to be sure there are no surprise multiplies
(such as from array indexing).

>
> > not possible to optomise the 7 "rla" instructions as a "swapb" then an
> > "rra" ?
> You'll loose 1 bit then. I thought about it...
>

I see what you mean.  But what about the sequence:
    rrc r
    rlc.b r
    swap
    rrc r

If we start with r = [xxxxxxxA][BCDEFGHI], this gives:
    rrc r: [xxxxxxxx][ABCDEFGH], carry = I
    rlc.b r: [00000000][BCDEFGHI], carry = A
    swap: [BCDEFGHI][00000000], carry = A
    rrc r: [ABCDEFGH][I0000000], carry = 0


mvh.

David



> ~d
>
> >
> > The command-line I used was this (although I also tried with
optomisation
> > off - it made no difference):
> > msp430-gcc -c -mmcu=msp430x149 -g -O2 -fverbose-asm -Wa,-ahld=test.lst
> > test.c
> >
> > mvh.
> >
> > David
> >
> >
> > /****  test.c  ****/
> >
> > #define scale 122
> >
> > unsigned int m1(unsigned char b) {
> >  // The mult is 8-bit
> >  return b*scale;
> > }
> >
> > unsigned int m2(unsigned char b) {
> >  // The mult should be 16-bit, but is actually 8-bit
> >  return ((unsigned int)b) * scale;
> > }
> >
> > unsigned int m3(unsigned int w) {
> >  // The mult is 16-bit
> >  return w * scale;
> > }
> >
> > unsigned int m4(unsigned char b) {
> >  // The mult is 16-bit
> >  unsigned int w = b;
> >  return w * scale;
> > }
> >
> >
> > /****  test.lst  ****/
> >
> >   12:test.c        **** #define scale 122
> >   13:test.c        ****
> >   14:test.c        **** unsigned int m1(unsigned char b) {
> >  109                .LM1:
> >  110                /* prologue: frame size = 0 */
> >  111                .L__FrameSize_m1=0x0
> > GAS LISTING /cygdrive/d/temp/ccGc8q6D.s    page 2
> >
> >
> >  112                .L__FrameOffset_m1=0x0
> >  113                /* prologue end (size=0) */
> >   15:test.c        ****  // The mult is 8-bit
> >   16:test.c        ****  return b*scale;
> >  115                .LM2:
> >  116 0000 4E4F        mov.b r15, r14  ;   b,  b
> >  117 0002 0E5E        rla r14  ;   b
> >  118 0004 0E5E        rla r14  ;   b
> >  119 0006 0E5E        rla r14  ;   b
> >  120 0008 0E5E        rla r14  ;   b
> >  121 000a 0E5E        rla r14  ;   b
> >  122 000c 0E5E        rla r14  ;   b
> >  123 000e 0E5E        rla r14  ;   b
> >  124 0010 4F5F        rla.b r15  ;   b
> >  125 0012 4E8F        sub.b r15, r14  ;   b,  b
> >  126 0014 4E8F        sub.b r15, r14  ;   b,  b
> >  127 0016 4E8F        sub.b r15, r14  ;   b,  b
> >   17:test.c        **** }
> >  129                .LM3:
> >  130 0018 0F4E        mov r14, r15   ;   b
> >  131 001a 3041        ret
> >  132                /* epilogue: not required */
> >  133                /* function m1 size 14 (13) */
> >  134                .Lfe1:
> >  136                /********* End of function ******/
> >  137
> >  138                .Lscope0:
> >  140                 .p2align 1,0
> >  143                .global m2
> >  145                /***********************
> >  146                 * Function `m2'
> >  147                 ***********************/
> >  148                m2:
> >   18:test.c        ****
> >   19:test.c        **** unsigned int m2(unsigned char b) {
> >  150                .LM4:
> >  151                /* prologue: frame size = 0 */
> >  152                .L__FrameSize_m2=0x0
> >  153                .L__FrameOffset_m2=0x0
> >  154                /* prologue end (size=0) */
> >   20:test.c        ****  // The mult should be 16-bit, but is actually
> > 8-bit 21:test.c        ****  return ((unsigned int)b) * scale;
> >  156                .LM5:
> >  157 001c 4E4F        mov.b r15, r14  ;   b,  b
> >  158 001e 0E5E        rla r14  ;   b
> >  159 0020 0E5E        rla r14  ;   b
> >  160 0022 0E5E        rla r14  ;   b
> >  161 0024 0E5E        rla r14  ;   b
> >  162 0026 0E5E        rla r14  ;   b
> >  163 0028 0E5E        rla r14  ;   b
> >  164 002a 0E5E        rla r14  ;   b
> >  165 002c 4F5F        rla.b r15  ;   b
> >  166 002e 4E8F        sub.b r15, r14  ;   b,  b
> >  167 0030 4E8F        sub.b r15, r14  ;   b,  b
> >  168 0032 4E8F        sub.b r15, r14  ;   b,  b
> >   22:test.c        **** }
> >  170                .LM6:
> > GAS LISTING /cygdrive/d/temp/ccGc8q6D.s    page 3
> >
> >
> >  171 0034 0F4E        mov r14, r15   ;   b
> >  172 0036 3041        ret
> >  173                /* epilogue: not required */
> >  174                /* function m2 size 14 (13) */
> >  175                .Lfe2:
> >  177                /********* End of function ******/
> >  178
> >  179                .Lscope1:
> >  181                 .p2align 1,0
> >  184                .global m3
> >  186                /***********************
> >  187                 * Function `m3'
> >  188                 ***********************/
> >  189                m3:
> >   23:test.c        ****
> >   24:test.c        **** unsigned int m3(unsigned int w) {
> >  191                .LM7:
> >  192                /* prologue: frame size = 0 */
> >  193                .L__FrameSize_m3=0x0
> >  194                .L__FrameOffset_m3=0x0
> >  195                /* prologue end (size=0) */
> >   25:test.c        ****  // The mult is 16-bit
> >   26:test.c        ****  return w * scale;
> >  197                .LM8:
> >  198 0038 0E4F        mov r15, r14   ;   w,  w
> >  199 003a 0E5E        rla r14  ;   w
> >  200 003c 0E5E        rla r14  ;   w
> >  201 003e 0E5E        rla r14  ;   w
> >  202 0040 0E5E        rla r14  ;   w
> >  203 0042 0E5E        rla r14  ;   w
> >  204 0044 0E5E        rla r14  ;   w
> >  205 0046 0E5E        rla r14  ;   w
> >  206 0048 0F5F        rla r15  ;   w
> >  207 004a 0E8F        sub r15, r14  ;   w,  w
> >  208 004c 0E8F        sub r15, r14  ;   w,  w
> >  209 004e 0E8F        sub r15, r14  ;   w,  w
> >   27:test.c        **** }
> >  211                .LM9:
> >  212 0050 0F4E        mov r14, r15   ;   w
> >  213 0052 3041        ret
> >  214                /* epilogue: not required */
> >  215                /* function m3 size 14 (13) */
> >  216                .Lfe3:
> >  218                /********* End of function ******/
> >  219
> >  220                .Lscope2:
> >  222                 .p2align 1,0
> >  225                .global m4
> >  227                /***********************
> >  228                 * Function `m4'
> >  229                 ***********************/
> >  230                m4:
> >   28:test.c        ****
> >   29:test.c        **** unsigned int m4(unsigned char b) {
> >  232                .LM10:
> >  233                /* prologue: frame size = 0 */
> >  234                .L__FrameSize_m4=0x0
> > GAS LISTING /cygdrive/d/temp/ccGc8q6D.s    page 4
> >
> >
> >  235                .L__FrameOffset_m4=0x0
> >  236                /* prologue end (size=0) */
> >  237                .LBB2:
> >   30:test.c        ****  // The mult is 16-bit
> >   31:test.c        ****  unsigned int w = b;
> >  239                .LM11:
> >  240 0054 4E4F        mov.b r15, r14  ;   b,  w
> >   32:test.c        ****  return w * scale;
> >  242                .LM12:
> >  243 0056 0F4E        mov r14, r15   ;   w,  w
> >  244 0058 0F5F        rla r15  ;   w
> >  245 005a 0F5F        rla r15  ;   w
> >  246 005c 0F5F        rla r15  ;   w
> >  247 005e 0F5F        rla r15  ;   w
> >  248 0060 0F5F        rla r15  ;   w
> >  249 0062 0F5F        rla r15  ;   w
> >  250 0064 0F5F        rla r15  ;   w
> >  251 0066 0E5E        rla r14  ;   w
> >  252 0068 0F8E        sub r14, r15  ;   w,  w
> >  253 006a 0F8E        sub r14, r15  ;   w,  w
> >  254 006c 0F8E        sub r14, r15  ;   w,  w
> >  255                .LBE2:
> >   33:test.c        **** }
> >  257                .LM13:
> >  258 006e 3041        ret
> >  259                /* epilogue: not required */
> >  260                /* function m4 size 14 (13) */
> >  261                .Lfe4:
> >  263                /********* End of function ******/
> >  264
> >
> >
> >
> >
> >
> > -------------------------------------------------------
> > This sf.net email is sponsored by:
> > With Great Power, Comes Great Responsibility
> > Learn to use your power at OSDN's High Performance Computing Channel
> > http://hpc.devchannel.org/
> > _______________________________________________
> > Mspgcc-users mailing list
> > Mspgcc-users@lists.sourceforge.net
> > https://lists.sourceforge.net/lists/listinfo/mspgcc-users
>
> --
> /********************************************************************
>      ("`-''-/").___..--''"`-._     (\   Dimmy the Wild      UA1ACZ
>       `6_ 6  )   `-.  (     ).`-.__.`)  Enterprise Information Sys
>       (_Y_.)'  ._   )  `._ `. ``-..-'   Nevsky prospekt,   20 / 44
>     _..`--'_..-_/  /--'_.' ,'           Saint Petersburg,   Russia
>    (il),-''  (li),'  ((!.-'             +7 (812)  3468202, 5585314
>  ********************************************************************/
>
>
>
> -------------------------------------------------------
> This sf.net email is sponsored by:
> With Great Power, Comes Great Responsibility
> Learn to use your power at OSDN's High Performance Computing Channel
> http://hpc.devchannel.org/
> _______________________________________________
> Mspgcc-users mailing list
> Mspgcc-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/mspgcc-users
>
>



Reply via email to