> 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. :)


> 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.

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

~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
> [email protected]
> 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
 ********************************************************************/


Reply via email to