home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Exec 4 / CD_Magazyn_EXEC_nr_4.iso / Recent / util / boot / NewCMQ060.readme < prev   
Encoding:
Text File  |  2000-11-16  |  9.7 KB  |  200 lines

  1. Short:    Patch CopyMem/Quick for 68060(040) v1.5d
  2. Author:   sintonen@iki.fi (Harry "Piru" Sintonen)
  3. Uploader: sintonen@iki.fi (Harry "Piru" Sintonen)
  4. Version:  1.5d
  5. Type:     util/boot
  6. Requires: 68060 or 68040, Kickstart 2.04
  7.  
  8. Description:
  9.    This is a small patch which replace the CopyMem and CopyMemQuick
  10.    functions of exec.library.
  11.  
  12.    These functions are optimized for the 68060 processor. They should
  13.    also work with the 68040 processor, howevery they might not be the
  14.    fastest possible for 68040.
  15.  
  16.    The patch tests for a 68040 or 060 processor. If it can't find one,
  17.    it doesn't install the patch and exit with a return code of 20 (=fail).
  18.    It also fails, if it can't allocate the necessary memory. If MorphOS
  19.    PPC kernel is running it won't install the patch and will exit with a
  20.    return code of 5 (=warn).
  21.  
  22.    If the CPU is a 68040 CMQ060 will install a slightly improved version
  23.    of v1.4 routines. If CPU is a 68060 routines with new movem-loop are
  24.    picked instead. Note that due these movem-copyloops v1.5 is slightly
  25.    slower in chipmem copies than v1.4. However fast->fast copies are sped
  26.    up, so I don't consider this a problem, esp. since most copies are
  27.    fast->fast.
  28.  
  29.    In average (measured with "TestIt" from CopyMemQuicker V2.8) these
  30.    routines are 29.4% faster than Kickstart 3.1 ones. CMQ060 v1.5 is
  31.    in average 2.5% faster than CMQ060 v1.4.
  32.  
  33.    The full source code is included. The source code was compiled with
  34.    GenAm 3.14, it also compiles with PhxAss.
  35.  
  36. Installation:
  37.    Just copy CMQ060 into c:
  38.    And insert CMQ060 in your s:startup-sequence
  39.  
  40. Some notes about Move16:
  41.    Move16 is a new assembler command of the 68040 and 060 processors. It
  42.    moves 16 bytes at once and it uses burst accesses. Andreas Kleinert and
  43.    Thomas Richter said there could be problems with the Move16 command on
  44.    the Amiga, especially in the chipram, caused by the DMA of the custom
  45.    chips.
  46.  
  47.    So v1.5 of CMQ060 doesn't use Move16 from or into memory below
  48.    $01000000 (Chipram, ZorroII-Fastram, I/O-Space, Kickstart,...). Move16
  49.    is only used, when the source and destination addresses are both higher
  50.    than $00ffffff (32-bit fastram).
  51.  
  52.    (If you didn't get any errors with V1.3 and want to get the most speed
  53.     improvement, you could use CMQ060_Move16. This version use Move16 also
  54.     below $01000000, but you might get problems.
  55.  
  56.     If you want to avoid all problems which Move16 could cause [the 68040
  57.     has some Move16 bugs], you should use Aminet:util/boot/CMQ030. This
  58.     one never uses Move16 and is still faster than the other available
  59.     patches.)
  60.  
  61. Some notes about the movem bug:
  62.    Some CPU Cards have a bug in the bus controller and these cards fail to
  63.    perform movem properly with odd addresses. CMQ060 v1.5 autodetect such
  64.    cards and will use move-loop instead of movem-loop with them. If move-
  65.    loop is picked the performance will drop slightly compared to movem-
  66.    loop. Fortunately such defect cards are rare. Special thanks to Harald
  67.    Frank who patiently explained the bug to me, and gave me idea how to
  68.    autodetect it.
  69.  
  70. Version 1.5 author:
  71.    Harry "Piru" Sintonen
  72.    <sintonen@iki.fi>
  73.  
  74. Original CMQ060 author:
  75.    Dirk Busse
  76.    Kropsburgstraße 8
  77.    D-67141 Neuhofen
  78.    Germany
  79.    <dbusse@primus-online.de>
  80.    <100.141999@germanynet.de>
  81.  
  82. Speed comparision:
  83.    There are some similar patches available on the Aminet:
  84.       CopyMemQuicker V2.8 from 1994 -> Aminet:util/boot/COPMQR28.lha
  85.       PCM V1.0            from 1996 -> Aminet:util/boot/PCM_1.0.lha
  86.       Also MCP patches these functions.
  87.  
  88. Here are some test results. All results were measured on the same AMIGA
  89. 1200 with a phase5 Blizzard PPC with 060 @ 50MHz. Blizzard PPC memory
  90. speed setting for M68K was set to fastest possible.
  91.  
  92. The most surprising result is that PCM V1.0 is in average *slower* than
  93. original Kickstart 3.1 routines!
  94.  
  95. "TestIt" from
  96. CopyMemQuicker V2.8
  97.                    orig    COPMQR   MCP   PCM  CMQ030 CMQ060 CMQ060 CMQ060
  98.                    KS 3.1   V2.8  V1.33b1 V1.0  V1.1   V1.4   V1.5  Move16
  99. CopyMem           routines                                            V1.5
  100. 565×64kB L->L       2.04    2.08   1.92   1.56   1.91   1.52   1.51   1.51
  101. 147×64kB L->L+1     0.94    0.68   0.57   0.68   0.56   0.57   0.56   0.56
  102. 413×64kB L->E       1.66    1.70   1.61   1.91   1.57   1.61   1.59   1.59
  103. 147×64kB L->E+1     0.94    0.68   0.57   0.68   0.56   0.57   0.56   0.56
  104. 147×64kB L+1->L     0.94    0.67   0.57   0.60   0.56   0.57   0.55   0.56
  105. 382×64kB L+1->L+1   1.62    1.39   1.29   1.05   1.30   1.03   1.02   1.02
  106. 147×64kB L+1->E     0.94    0.68   0.57   0.69   0.57   0.57   0.56   0.56
  107. 501×64kB L+1->E+1   1.91    1.89   1.95   2.34   1.96   1.96   1.93   1.93
  108. 501×64kB E->L       1.92    1.92   1.94   2.06   1.92   1.95   1.90   1.90
  109. 147×64kB E->L+1     0.94    0.67   0.57   0.68   0.57   0.57   0.55   0.55
  110. 382×64kB E->E       1.62    1.39   1.29   1.06   1.30   1.03   1.02   1.02
  111. 147×64kB E->E+1     0.94    0.68   0.57   0.68   0.57   0.57   0.56   0.56
  112. 147×64kB E+1->L     0.94    0.67   0.57   0.60   0.56   0.57   0.55   0.56
  113. 413×64kB E+1->L+1   1.71    1.70   1.60   1.93   1.61   1.60   1.56   1.56
  114. 147×64kB E+1->E     0.94    0.67   0.57   0.69   0.57   0.57   0.55   0.55
  115. 564×64kB E+1->E+1   2.10    2.06   1.91   1.56   1.92   1.52   1.50   1.50
  116. 33900×1kB L->L      0.43    0.42   0.37   1.49   0.36   0.36   0.36   0.36
  117. 9400×1kB L->L+1     0.58    0.33   0.20   0.24   0.20   0.19   0.19   0.19
  118. 24000×1kB E->E      0.68    0.30   0.26   1.01   0.27   0.26   0.26   0.26
  119. 196000×128B L->L    0.55    0.45   0.41   1.12   0.32   0.35   0.33   0.33
  120. 155000×128B E->E    0.75    0.40   0.34   1.10   0.34   0.30   0.30   0.31
  121. 588000×19B L->L     0.85    0.61   0.72   0.93   0.53   0.53   0.53   0.53
  122. 622000×18B L->L     0.86    0.51   0.71   0.89   0.51   0.50   0.50   0.51
  123. 663000×17B L->L     0.75    0.68   0.76   0.80   0.51   0.53   0.53   0.55
  124. 956000×16B L->L     0.82    0.71   1.04   1.05   0.59   0.72   0.55   0.55
  125. 1060000×8B L->L     0.85    0.72   0.89   1.03   0.62   0.53   0.55   0.55
  126. 1430000×4B L->L     0.80    0.63   0.94   1.12   0.71   0.45   0.45   0.48
  127. 2190000×1B L->L     0.74    0.61   1.40   0.88   0.44   0.66   0.66   0.70
  128. CopyMemQuick
  129. 565×64kB L->L       2.04    2.06   1.91   1.56   1.91   1.52   1.51   1.51
  130. 33900×1kB L->L      0.43    0.43   0.37   1.27   0.36   0.36   0.35   0.35
  131. 196000×128B L->L    0.53    0.43   0.38   1.09   0.31   0.32   0.30   0.30
  132. 956000×16B L->L     0.73    0.63   0.94   1.06   0.42   0.58   0.42   0.42
  133. 1060000×8B L->L     0.53    0.57   0.80   0.63   0.44   0.42   0.42   0.42
  134. 1430000×4B L->L     0.43    0.51   0.80   0.60   0.31   0.28   0.28   0.31
  135. Total 
  136.                    35.63   30.70  31.48  36.84  27.31  25.80  25.16  25.31
  137.  
  138. History:
  139.    1.0 (12.Sep.1998)
  140.        - First public version.
  141.    1.1 (15.Sep.1998)
  142.        - V1.0 exits with a return code of 10 (=error), if it can't find
  143.          a 68040 or 68060 or can't get the necessary memory.
  144.          V1.1 exits, in this cases, with a return code of 20 (=fail).
  145.        - Fixed a mistake in the readme.
  146.    1.1b (19.Sep.1998)
  147.        (I didn't changed the Patch itself! It's the same as V1.1)
  148.        - Added the Testresults of MCP V1.30 into the readme.
  149.        - Added CMQ060beep and CMQ060beepCMQ (see above).
  150.    1.2 (29.Nov.1998)
  151.        - Added the Testresults of MCP V1.32b12 into the readme.
  152.        - Changed the source code.
  153.          There was a problem with a wrong written program which expects
  154.          the address of the last source byte +1 in A0 and the address
  155.          of the last destination byte +1 in A1.
  156.          This version of CMQ060 solves problems with such badly programs.
  157.          It's now 100 Bytes longer, but the speed is the same. Big moves
  158.          by the CopyMem function will be one or two cycles faster, but
  159.          you didn't recognize it.
  160.    1.3 (5.Jan.1999)
  161.        All changes made to this version doesn't effect the speed. They
  162.        are only to avoid problems with future versions of AMIGA OS.
  163.        - changed the version string to the "standard" format
  164.        - changed BMI to BCS and BPL to BCC
  165.          -> now CMQ030 could move blocks bigger than 2 GigaByte ;-)
  166.    1.4 (3.Apr.1999)
  167.        - CMQ060 now doesn't use Move16 into/from memory below $01000000
  168.        - added CMQ060Move16 (It's the same as CMQ060 V1.3)
  169.        - added the test results of CMQ030 (Does never use Move16)
  170.    1.5 (5.Sep.2000)
  171.        - Totally rewrote the source code.
  172.        - Bugfix: Fixed major bug from the patch init: If the memory was
  173.          allocated near 64k boundary CMQ060 trashed innocent memory and
  174.          crashed the system completely. Odds were 1/8192 for this to
  175.          happen.
  176.        - Speedup: Removed two pipeline stalls from big copies.
  177.        - Speedup: Optimized non-move16 copy loop, now it uses movem.l
  178.          instead of move.l. Slightly slower in chipmem copies, however
  179.          fast -> fast copies sped up.
  180.        - Speedup: Unrolled the bigcopy-loops to do 256 bytes per
  181.          iteration.
  182.        - Added MorphOS check, it makes no sense to slow down MorphOS
  183.          with m68k patches.
  184.        - Redid all speedtests, MCP test with 1.33b1. Added V1.4 result
  185.          for reference. Cleaned up this readme.
  186.    1.5b (6.Sep.2000)
  187.        - With 68040 the move-loop is faster then movem-loop. So, now
  188.          always pick move-loop for 68040. Thanks to Chip for benchmark
  189.          results.
  190.        - Added autodetect for movem buscontroller bug. Now automagically
  191.          pick between movem- and move-loop on 68060.
  192.        - Fixed Kickstart requirement, 68040 wasn't officially supported
  193.          before Kickstart 2.04.
  194.    1.5c (7.Sep.2000)
  195.        - Bugfix: movem buscontroller bug autodetect was bugged. Fixed.
  196.        - Made the source compile with PhxAss.
  197.    1.5d (11.Sep.2000)
  198.        - Bugfix: movem buscontroller bug autodetect still had a potential
  199.          problem. Fixed.
  200.