Sorry for my persistence (is this the right word?), but each of theses examples is a very short separate file!
E.g. the source file: ---------------------------------------------------------------------------- ------------------ unsigned int multiplikation (unsigned char wert) { return (unsigned int)(((unsigned int)wert)*((unsigned int)180)); } ---------------------------------------------------------------------------- ------------------ Four lines or 125 Bytes! And: (the operating order is determined by brackets) The result is: ---------------------------------------------------------------------------- ------------------ Disassembly of section .text: 00000000 <multiplikation>: unsigned int multiplikation (unsigned char wert) { return (unsigned int)(((unsigned int)wert)*((unsigned int)180)); 0: 02 12 push r2 ; 2: 32 c2 dint 4: 03 43 nop 6: c2 4f 30 01 mov.b r15, &0x0130 ; a: c2 43 31 01 mov.b #0, &0x0131 ;r3 As==00 e: b2 40 b4 ff mov #-76, &0x0138 ;#0xffb4 //////////////////////////////////////////////////////////////////////////// ////////////////// Where is the '.b'? -----^ //////////////////////////////////////////////////////////////////////////// ////////////////// 12: 38 01 14: c2 43 39 01 mov.b #0, &0x0139 ;r3 As==00 18: 1f 42 3a 01 mov &0x013a,r15 ;0x013a 1c: 32 41 pop r2 ; } 1e: 30 41 ret ---------------------------------------------------------------------------- ------------------ A second example, another file, another project, again very short and with brackets to determine the operating order: ---------------------------------------------------------------------------- ------------------ unsigned int another_multiplication (unsigned char value) { return (unsigned int)(((unsigned int)value)*((unsigned int)129)); } ---------------------------------------------------------------------------- ------------------ The job ist to calculate value*129 If value equal 1 129 should be returned, if 2 258, if 3 387 and so on... Result: ---------------------------------------------------------------------------- ------------------ Disassembly of section .text: 00000000 <another_multiplication>: unsigned int another_multiplication (unsigned char value) { return (unsigned int)(((unsigned int)value)*((unsigned int)129)); 0: 4e 4f mov.b r15, r14 ; 2: 0e 5e rla r14 ; 4: 0e 5e rla r14 ; 6: 0e 5e rla r14 ; 8: 0e 5e rla r14 ; a: 0e 5e rla r14 ; c: 0e 5e rla r14 ; e: 0e 5e rla r14 ; 10: 7f f3 and.b #-1, r15 ;r3 As==11 12: 0f 8e sub r14, r15 ; } 14: 30 41 ret ---------------------------------------------------------------------------- ------------------ This code calculates value-128*value or value*(-127), but it is not its job! Marcus > -----Ursprüngliche Nachricht----- > Von: mspgcc-users-ad...@lists.sourceforge.net > [mailto:mspgcc-users-ad...@lists.sourceforge.net]im Auftrag von Dmitry > Gesendet: Mittwoch, 20. Oktober 2004 17:55 > An: mspgcc-users@lists.sourceforge.net > Betreff: Re: [Mspgcc-users] Something strange with multiplication of > constant byte numbers > > > > Oops.. > > this is the one of mysterious problems which happens with large files. > I think there is a memory leak somewhere in cgen code... > Marcus, Just split your code in a couple of files and the bug should > disappear. > > ~d > > > > On Wednesday 20 October 2004 18:35, Dmitry wrote: > > nope... > > e: b2 40 b4 ff mov #-76, &0x0138 ;#0xffb4 > > 12: 38 01 > > 14: c2 43 39 01 mov.b #0, &0x0139 ;r3 As==00 > > check the third line... > > or the result of mult does not depend on high nibble of OP2 ? > > If there is a bug I'll fix this shortly. > > > > ~d > > > > On Wednesday 20 October 2004 15:20, dkorov...@luxoft.com wrote: > > > Dmitry, > > > Will you explain me the thing. ((unsigned int)180) > treated as a one byte > > > variable? Why? Am I wrong in assumption that first wert should be > > > converted to unsigned int, next 180 must be converted to > unsigned int > > > and at last multiplied. The result must be converted to > unsigned int (no > > > idea, what for). > > > Am I right? > > > Regards, > > > Dmitriy Korovkin > > > > > > -----Original Message----- > > > From: mspgcc-users-ad...@lists.sourceforge.net > > > [mailto:mspgcc-users-ad...@lists.sourceforge.net] > > > Sent: Wednesday, October 20, 2004 2:16 PM > > > To: mspgcc-users@lists.sourceforge.net > > > Subject: Re: [Mspgcc-users] Something strange with > multiplication of > > > constant byte numbers > > > > > > this is a feature actually:) > > > you forgot about operations order. > > > ~d > > > > > > On Wednesday 20 October 2004 12:48, Else Marcus wrote: > > > > Hello! > > > > > > > > There is something strange with multiplication of constant byte > > > > > > numbers. > > > > > > > > > > -------------------------------------------------------------- > ---------- > > > --- > > > > > > >- ------ > > > > Example 1.1: > > > > > > > > unsigned int multiplikation (unsigned char wert) > > > > { > > > > return (unsigned int)((unsigned int)wert*((unsigned > int)180)); > > > > 0: 02 12 push r2 ; > > > > 2: 32 c2 dint > > > > 4: 03 43 nop > > > > 6: c2 4f 30 01 mov.b r15, &0x0130 ; > > > > a: c2 43 31 01 mov.b #0, &0x0131 ;r3 As==00 > > > > e: b2 40 b4 ff mov #-76, &0x0138 ;#0xffb4 > > > > 12: 38 01 > > > > 14: c2 43 39 01 mov.b #0, &0x0139 ;r3 As==00 > > > > 18: 1f 42 3a 01 mov &0x013a,r15 ;0x013a > > > > 1c: 32 41 pop r2 ; > > > > } > > > > 1e: 30 41 ret > > > > > > > -------------------------------------------------------------- > ---------- > > > --- > > > > > > >- ------ > > > > > > > > At line (e:) the high byte is set to 0xff. Because of > the word access > > > > > > the > > > > > > > hardware multiplier will start and line (14:) has no effect. > > > > > > > > With storing the 180 in uiTemp the code is ok (Example 1.2). > > > > > > > -------------------------------------------------------------- > ---------- > > > --- > > > > > > >- ------ > > > > Example 1.2: > > > > > > > > unsigned int multiplikation (unsigned char wert) > > > > { > > > > unsigned int uiTemp = 180; > > > > return (unsigned int)((unsigned int)wert*(unsigned > int)uiTemp); > > > > 0: 7f f3 and.b #-1, r15 ;r3 As==11 > > > > 2: 02 12 push r2 ; > > > > 4: 32 c2 dint > > > > 6: 03 43 nop > > > > 8: 82 4f 32 01 mov r15, &0x0132 ; > > > > c: b2 40 b4 00 mov #180, &0x0138 ;#0x00b4 > > > > 10: 38 01 > > > > 12: 1f 42 3a 01 mov &0x013a,r15 ;0x013a > > > > 16: 32 41 pop r2 ; > > > > } > > > > 18: 30 41 ret > > > > > > > -------------------------------------------------------------- > ---------- > > > --- > > > > > > >- ------ > > > > > > > > The next example uses adding and shifting for multiplikation. > > > > > > > -------------------------------------------------------------- > ---------- > > > --- > > > > > > >- ------ > > > > Example 2.1: > > > > > > > > unsigned int multiplikation (unsigned char wert) > > > > { > > > > return (unsigned int)((unsigned int)wert*((unsigned > int)129)); > > > > 0: 4e 4f mov.b r15, r14 ; > > > > 2: 0e 5e rla r14 ; > > > > 4: 0e 5e rla r14 ; > > > > 6: 0e 5e rla r14 ; > > > > 8: 0e 5e rla r14 ; > > > > a: 0e 5e rla r14 ; > > > > c: 0e 5e rla r14 ; > > > > e: 0e 5e rla r14 ; > > > > 10: 7f f3 and.b #-1, r15 ;r3 As==11 > > > > 12: 0f 8e sub r14, r15 ; > > > > } > > > > 14: 30 41 ret > > > > > > > -------------------------------------------------------------- > ---------- > > > --- > > > > > > >- ------ > > > > The value to return ist wert - wert*128 and not wert + wert*128. > > > > > > > > With storing the 129 in uiTemp the code is ok again > (Example 2.2). > > > > > > > -------------------------------------------------------------- > ---------- > > > --- > > > > > > >- ------ > > > > Example 2.2: > > > > > > > > unsigned int multiplikation (unsigned char wert) > > > > { > > > > unsigned int uiTemp = 129; > > > > return (unsigned int)((unsigned int)wert*(unsigned > int)uiTemp); > > > > 0: 7f f3 and.b #-1, r15 ;r3 As==11 > > > > 2: 02 12 push r2 ; > > > > 4: 32 c2 dint > > > > 6: 03 43 nop > > > > 8: 82 4f 32 01 mov r15, &0x0132 ; > > > > c: b2 40 81 00 mov #129, &0x0138 ;#0x0081 > > > > 10: 38 01 > > > > 12: 1f 42 3a 01 mov &0x013a,r15 ;0x013a > > > > 16: 32 41 pop r2 ; > > > > } > > > > 18: 30 41 ret > > > > > > > -------------------------------------------------------------- > ---------- > > > --- > > > > > > >- ------ > > > > > > > > Used options for mspgcc: -x c -c -g -O2 -Wall -mmcu=msp430x147 > > > > > > > > Release: mspgcc-20040723.exe > > > > > > > > Is the different behavior between examples 1.1 and 1.2 > and between 2.1 > > > > > > and > > > > > > > 2.2 a bug or a feature? > > > > Or is it my mistake? > > > > > > > > Marcus Else > > > > > > > > > > > > ------------------------------------------------------- > > > > This SF.net email is sponsored by: IT Product Guide on > > > > > > ITManagersJournal > > > > > > > Use IT products in your business? Tell us what you > think of them. Give > > > > > > us > > > > > > > Your Opinions, Get Free ThinkGeek Gift Certificates! > Click to find out > > > > > > more > > > > > > > http://productguide.itmanagersjournal.com/guidepromo.tmpl > > > > _______________________________________________ > > > > Mspgcc-users mailing list > > > > Mspgcc-users@lists.sourceforge.net > > > > https://lists.sourceforge.net/lists/listinfo/mspgcc-users > > > > > > ------------------------------------------------------- > > > This SF.net email is sponsored by: IT Product Guide on > ITManagersJournal > > > Use IT products in your business? Tell us what you think > of them. Give > > > us > > > Your Opinions, Get Free ThinkGeek Gift Certificates! > Click to find out > > > more > > > http://productguide.itmanagersjournal.com/guidepromo.tmpl > > > _______________________________________________ > > > Mspgcc-users mailing list > > > Mspgcc-users@lists.sourceforge.net > > > https://lists.sourceforge.net/lists/listinfo/mspgcc-users > > > > > > > > > > > > ------------------------------------------------------- > > > This SF.net email is sponsored by: IT Product Guide on > ITManagersJournal > > > Use IT products in your business? Tell us what you think > of them. Give us > > > Your Opinions, Get Free ThinkGeek Gift Certificates! > Click to find out > > > more http://productguide.itmanagersjournal.com/guidepromo.tmpl > > > _______________________________________________ > > > Mspgcc-users mailing list > > > Mspgcc-users@lists.sourceforge.net > > > https://lists.sourceforge.net/lists/listinfo/mspgcc-users > > > > ------------------------------------------------------- > > This SF.net email is sponsored by: IT Product Guide on > ITManagersJournal > > Use IT products in your business? Tell us what you think of > them. Give us > > Your Opinions, Get Free ThinkGeek Gift Certificates! Click > to find out more > > http://productguide.itmanagersjournal.com/guidepromo.tmpl > > _______________________________________________ > > Mspgcc-users mailing list > > Mspgcc-users@lists.sourceforge.net > > https://lists.sourceforge.net/lists/listinfo/mspgcc-users > > > ------------------------------------------------------- > This SF.net email is sponsored by: IT Product Guide on > ITManagersJournal > Use IT products in your business? Tell us what you think of > them. Give us > Your Opinions, Get Free ThinkGeek Gift Certificates! Click to > find out more > http://productguide.itmanagersjournal.com/guidepromo.tmpl > _______________________________________________ > Mspgcc-users mailing list > Mspgcc-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/mspgcc-users >