From: Meindert Sprang on
"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
"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
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
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
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]