C for embedded controllers

Dan J. Declerck declrckd at cig.mot.com
Tue Nov 28 15:04:39 GMT 1995


> --------

>    In message <199511271542.KAA29352 at po_box.cig.mot.com> , you write:

> | > execution time:
> |
> | > hand assembly:
> | >                       head/tail/cycles
> | > move.b(a1)+,(a0)+     2    2     6(0/1/1)
> | > dbra  loop,d0         6    -2    10(0/2/0)
> |
> | > 6+10-min(-2,2)-min(2,6)=6+10+2-2=16 clock cycles
> | 
> | > gcc -O3:
> | > 			head/tail/cycles
> | > move.b (%a0)+,(%a1)+  2    2    6(0/1/1)
> | > subq.l #1,%d0	  0    0    2(0/1/0)
> | > jbne .L7		  2    -2   8(0/2/0)
> | 
> | > 6+2+8-min(-2,2)-min(2,0)-min(0,2)=6+2+8+2-0-0=18 clock cycles
> | 
> | > In this case C and assembly are the same size (the extra 2 bytes for
> | > the return should be added to the above assembly); however, the assembly
> | > is 11% faster as a result of better pipeline utilization.
> | 
> | It's faster than 11%! (about 20%), you forgot to REMOVE the instruction fetch
> |  cycles
> | for MOVE, since after the first iteration, it is no longer fetched!
> | I challenge you to use an emulator/logic analyzer and look at the bus cycles.

> Could you explain this? 

> I just re-read the microsequencer section of the CPU32 manual. 

> CPU32 REFERENCE MANUAL page 8-2:
> "Each time a change [of flow] occurs, the instruction pipeline must be
> flushed and refilled from the new instruction stream..."

> CPU32 REFERENCE MANUAL page 8-7:
> "When the CPU32 changes instruction flow, the instruction decode
> pipeline must begin refilling before instruction execution can
> resume. Refilling force a two-clock idle period at the end of the
> change of flow instruction."

> The 16 and 18 clock cycle times (for two-clock reads and writes) still
> look correct to me. How is it (CPU32 right?) not going to "re-fetch" 
> the "move"?

Because it's "LOOP mode" and doesn't induce a change in flow.



>                                        John S Gwynne
>                                           Gwynne.1 at osu.edu
> _______________________________________________________________________________
>                T h e   O h i o - S t a t e   U n i v e r s i t y
>     ElectroScience Laboratory, 1320 Kinnear Road, Columbus, Ohio 43212, USA
>                 Telephone: (614) 292-7981 * Fax: (614) 292-7297
> -------------------------------------------------------------------------------

-- 
=> Dan DeClerck                        | EMAIL: declrckd at cig.mot.com      <=
=> Motorola Cellular CSD               |                                  <=
=>"The truth to CDMA... is spreading"  | Phone: (708) 632-4596            <=
----------------------------------------------------------------------------



More information about the Diy_efi mailing list