From: Meindert Sprang on 9 Jun 2010 02:49 "Joe Chisolm" <jchisolm6(a)earthlink.net> wrote in message news:5qidnUNFqvYo25PRnZ2dnUVZ_hidnZ2d(a)earthlink.com... > On Tue, 08 Jun 2010 11:24:58 +0200, Meindert Sprang wrote: > > > "D Yuniskis" <not.going.to.be(a)seen.com> wrote in message > > news:hujj28$bn5$1(a)speranza.aioe.org... > >> It would be informative to know what sort of "helper routines" the > >> compiler calls on. E.g., it might (inelegantly) treat this as "CALL > >> SHIFT_LONG_RIGHT, repeat" -- in which case the 4 temp access is the > >> canned representation of *any* "long int". > > > > This is the code that does the shift: > > > > 0FCC8 0E10 MOVLW 0x10 > > 0FCCA 90D8 BCF 0xfd8, 0, ACCESS > > 0FCCC 3203 RRCF 0x3, F,ACCESS > > 0FCCE 3202 RRCF 0x2, F, ACCESS > > 0FCD0 3201 RRCF 0x1, F, ACCESS > > 0FCD2 3200 RRCF 0, F, ACCESS > > 0FCD4 06E8 DECF 0xfe8, F, ACCESS > > 0FCD6 E1F9 BNZ 0xfcca > > > > The loop is executed 16 times (>>16) and 4 locations are shifted through > > the carry bit, if I undestand this correctly.... yuck! > > > > Meindert > > What version of C18 are you using and what is your target device? The lates (V3.35), just downloaded from the Microchip website and the target is an 18F8720. Meindert
From: Meindert Sprang on 9 Jun 2010 02:51 "Grant Edwards" <invalid(a)invalid.invalid> wrote in message news:huljbj$aft$2(a)reader1.panix.com... > In my experience, "yuck!" is what anybody trying to use C on a PIC > ought to expect. [IMO, "yuck!" is what you get using asm on a PIC as > well, but that's probably a little more subjective.] "Yuck" is what you get when using a PIC at all..... Whoever designed this architecture should be crucified!! Meindert
From: hamilton on 9 Jun 2010 09:37 On 6/9/2010 12:51 AM, Meindert Sprang wrote: > "Grant Edwards"<invalid(a)invalid.invalid> wrote in message > news:huljbj$aft$2(a)reader1.panix.com... >> In my experience, "yuck!" is what anybody trying to use C on a PIC >> ought to expect. [IMO, "yuck!" is what you get using asm on a PIC as >> well, but that's probably a little more subjective.] > > "Yuck" is what you get when using a PIC at all..... > Whoever designed this architecture should be crucified!! Yes, and they are laughing all the way to the bank. Not bad for a "Yuck" design. hamilton > > Meindert > >
From: Richard Swaby on 9 Jun 2010 10:03 On Mon, 7 Jun 2010 11:17:34 +0200, "Meindert Sprang" <ms(a)NOJUNKcustomORSPAMware.nl> wrote: >Unbelievable..... > >I'm playing around with the Microchip C18 compiler after a hair-splitting >experience with CCS. Apparently the optimizer of C18 is not that good. For >instance: LATF = addr >> 16; where addr is an uint32, is compiled into a >loop where 4 registers really get shifted 16 times in a loop. Any decent >compiler should recognise that a shift by 16, stored to an 8 bit port could >easily be done by simply accessing the 3rd byte.... sheesh.... > >Meindert > Here's the assembler that CC8E generates from: void main(void) { uns32 addr; LATF = addr >> 16; } ; CC8E Version 1.3D, Copyright (c) B Knudsen Data ; C compiler for the PIC18 microcontrollers ; ************ 9. Jun 2010 14:47 ************* ; NOTE: demo edition, assembly is NOT complete. processor PIC18F6310 radix DEC LATF EQU 0xF8E addr EQU 0x00 GOTO main ; FILE cc8e_test.c ;void main(void) ;{ main ; uns32 addr; ; LATF = addr >> 16; MOVF addr+2,W,0 MOVWF LATF,0 ;} SLEEP RESET END ; *** KEY INFO *** ; 0x000004 4 word(s) 0 % : main ; RAM usage: 4 bytes (4 local), 764 bytes free ; Maximum call level: 0 ; Total of 6 code words (0 %) Even simpler, the following generates the same assembler code. void main(void) { uns32 addr; LATF = addr.midH8; } With CC8E you can easily address individual bytes and bits within larger variables (see above) Richard
From: D Yuniskis on 9 Jun 2010 12:44
Hi Meindert, Meindert Sprang wrote: > "Grant Edwards" <invalid(a)invalid.invalid> wrote in message > news:huljbj$aft$2(a)reader1.panix.com... >> In my experience, "yuck!" is what anybody trying to use C on a PIC >> ought to expect. [IMO, "yuck!" is what you get using asm on a PIC as >> well, but that's probably a little more subjective.] > > "Yuck" is what you get when using a PIC at all..... > Whoever designed this architecture should be crucified!! Had you seen the *original* PICs (General Instruments) *and* compared them to what was available from other vendors at the time, you would have found it amusing: "Is this a joke? You know, one of those April Fool's Day bogus advertisements?" (I had a similar reaction when Motogorilla later introduced their *one* bit "ICU") I think the original PICs had 1K of CODE and maybe 32 bytes of "RAM" (registers) -- Harvard Architecture. GI was heavy into making cable converter boxes back then. I think you'd be hard pressed to make a four function *calculator* with one of those!! :-/ A shame, actually, that it survived where many other "better" designs slipped by the wayside... [I think I need to go rummage through old databooks to see what I've culled over the years] |