]> oss.titaniummirror.com Git - msp430-gcc.git/blobdiff - gcc/config/m88k/m88k-move.sh
Imported gcc-4.4.3
[msp430-gcc.git] / gcc / config / m88k / m88k-move.sh
diff --git a/gcc/config/m88k/m88k-move.sh b/gcc/config/m88k/m88k-move.sh
deleted file mode 100755 (executable)
index 5e757bd..0000000
+++ /dev/null
@@ -1,306 +0,0 @@
-#!/bin/sh
-#
-#      If your shell doesn't support functions (true for some BSD users),
-#      you might try using GNU's bash.
-#
-#ident "@(#) m88k-move.sh 1-Sep-92"
-#
-#      This file provided by Data General, February 1990.
-#
-#      This script generates the necessary movstr library functions
-#      for the m88100.  These functions are called from the expansion
-#      of movstrsi.  There are eight modules created by this script,
-#      each with multiple entry points.  One module, moveSI64n
-#      implements a word aligned loop; the other modules, moveXINx
-#      implement a straight line copy of N bytes in mode XI.
-#
-#      By analysis of the best memcpy function, it can be determined
-#      what appear to be certain magic numbers.  For example, a
-#      memcpy of 13 bytes, where the pointers are determined at run
-#      time to be word aligned takes 28 cycles.  A call to
-#      __movstrQI13x13 also takes 28 cycles.  The break even point
-#      for a HImode copy is 38 bytes.  Just to be on the safe side,
-#      these are bumped to 16 and 48 respectively.
-#
-#      The smaller, odd-remainder modules are provided to help
-#      mitigate the overhead of copying the last bytes.
-#
-#      Changes to these functions should not be taken lightly if you
-#      want to be able to link programs built with older movstr
-#      parameters.
-#
-#.Revision History
-#
-#       1-Sep-92   Stan Cox   Added moveDI96x, moveDI41x through moveDI47x.
-#       2-Jan-92   Tom Wood   Renamed files to comply with SVR3 14 char limit.
-#      26-Oct-90   Tom Wood   Delete movstr.h; moved to out-m88k.c.
-#      17-Oct-90   Tom Wood   Files are named *.asm rather than *.s.
-#      11-Sep-90   Jeffrey Friedl
-#                      On my BSD 4.3 awk and my GNU-awk, only the
-#                      first character of an argument to -F is passed
-#                      through, so I can't get this to work.
-#       5-Sep-90   Ray Essick/Tom Wood  
-#                      Added a -no-tdesc option.
-#      27-Aug-90   Vince Guarna/Tom Wood   
-#                      Version 3 assembler syntax (-abi).
-#      16-Aug-90   Ron Guilmette
-#                      Avoid problems on a Sparc.  The common
-#                      denominator among shells seems to be '...\'
-#                      rather than '...\\'.
-#      15-Aug-90   Ron Guilmette
-#                      Avoid awk syntax errors on a Sun by not using
-#                      the `!' operator.
-#      22-Feb-90   Tom Wood    Created.
-#      20-Jun-90   Tom Wood    Emit file directives.
-#
-#.End]=--------------------------------------------------------------*/
-
-usage() {
-    echo "usage: $0 [ -abi ] [ -no-tdesc ]" 1>&2
-    exit 1
-}
-
-awk_flag="-F:";
-awk_begin="BEGIN { "
-ps=""; us="_"; tf="x"; la="@L"; fb="8"; nt="";
-do_file() {
-    echo "     file     $1";
-}
-
-while [ $# -gt 0 ] ; do
-    case $1 in
-       -no-tdesc) awk_begin="$awk_begin no_tdesc=1;"
-             nt=";";;
-       -abi) awk_begin="$awk_begin abi=1;"
-             ps="#"; us=""; tf="a"; la=".L"; fb="16";
-             do_file() {
-               echo '  version  "03.00"';
-               echo "  file     $1";
-             };;
-       *) usage;;
-    esac
-    shift
-done
-
-rm -f move?I*[xn].s move?I*[xn].asm
-
-#.Implementation_continued[=-----------------------------------------------
-#
-#      This generates the word aligned loop.  The loop is entered
-#      from the callable entry points ___movstrSI64nN, where at
-#      least N bytes will be copied.  r2 is the destination pointer
-#      offset by 4, r3 is the source pointer offset by 4, r6 is the
-#      loop count.  Thus, the total bytes moved is 64 * r6 + N.  The
-#      first value is preloaded into r4 or r5 (r4 if N/4 is odd;
-#      r5 if N/4 is even).  Upon returning, r2 and r3 have been
-#      updated and may be used for the remainder bytes to move.
-#
-#      The code for this loop is generated by the awk program
-#      following.  Edit *it*, not what it generates!
-#
-#.End]=------------------------------------------------------------------*/
-
-gen_movstrN() {
-  awk $awk_flag "$awk_begin"'
-    if (abi) {
-      ps="#"; us=""; tf="a"; la=".L"; fb=16;
-    } else {
-      ps=""; us="_"; tf="x"; la="@L"; fb=8;
-    }
-  }
-  NR == 1 && NF == 4 {
-    mode = $1; suffix = $2; align = $3; count = $4;
-    ld = align; st = 0;
-
-    printf "; The following was calculated using awk.\n";
-    printf "\ttext\n";
-    printf "\talign\t%d\n", fb;
-    printf "%sloop%s%d:\n", la, mode, count * align;
-    printf "\taddu\t%sr3,%sr3,%d\n", ps, ps, count * align;
-    printf "\taddu\t%sr2,%sr2,%d\n", ps, ps, count * align;
-    printf "\tsubu\t%sr6,%sr6,1\n", ps, ps;
-    for (r = count + 1; r >= 1; r--) {
-      evenp = r % 2;
-      name = sprintf("__%smovstr%s%dn%d", us, mode, count * align, r * align);
-      if (r > 1) {
-        printf "\tglobal\t%s\n", name;
-        printf "%s:\n", name;
-      }
-      if (r > 2) {
-       printf "\tld%s\t%sr%d,%sr3,%d\n", suffix, ps, 4 + evenp, ps, ld;
-        printf "\tst%s\t%sr%d,%sr2,%d\n", suffix, ps, 5 - evenp, ps, st;
-      } else if (r == 2) {
-       printf "\tld%s\t%sr%d,%sr3,%d\n", suffix, ps, 4 + evenp, ps, ld;
-       printf "\tbcnd.n\t%sgt0,%sr6,%sloop%s%d\n", ps, ps, la, mode, count * align;
-        printf "\tst%s\t%sr%d,%sr2,%d\n", suffix, ps, 5 - evenp, ps, st;
-        printf "\tjmp.n\t%sr1\n", ps;
-      } else {
-        printf "\tst%s\t%sr%d,%sr2,%d\n", suffix, ps, 5 - evenp, ps, st;
-      }
-      ld += align; st += align;
-    }
-    if (!no_tdesc) {
-      printf "%send%s%d:\n", la, mode, count * align;
-      printf "\tsection\t.tdesc,\"%s\"\n", tf;
-      printf "\tword\t0x42,1,%sloop%s%d", la, mode, count * align;
-      printf ",%send%s%d\n", la, mode, count * align;
-      printf "\tword\t0x0100001f,0,1,0\n";
-      printf "\ttext\n";
-    }
-    printf "; End of awk generated code.\n";
-    exit;
-  }'
-}
-
-(do_file '"movstrSI64n.s"';
- echo 'SI::4:16' | gen_movstrN) > moveSI64n.asm
-
-#.Implementation_continued[=-----------------------------------------------
-#
-#      This generates the even-remainder, straight-line modules.
-#      The code is entered from the callable entry points
-#      ___movstrXINxM, where exactly M bytes will be copied in XI
-#      mode.  r2 is the destination pointer, r3 is the source
-#      pointer, neither being offset.  The first value is preloaded
-#      into r4 or r5 (r4 if M-N/B is even; r5 if M-N/B is odd, where
-#      B is the mode size of XI).  Upon returning, r2 and r3 have not
-#      been changed.
-#
-#      The code for these cases is generated by the awk program
-#      following.  Edit *it*, not what it generates!
-#
-#.End]=------------------------------------------------------------------*/
-
-gen_movstrX0() {
-    awk $awk_flag "$awk_begin"'
-      if (abi) {
-       ps="#"; us=""; tf="a"; la=".L"; fb=16;
-      } else {
-       ps=""; us="_"; tf="x"; la="@L"; fb=8;
-      }
-    }
-    NR == 1 && NF == 4 {
-    mode = $1; suffix = $2; align = $3; bytes = $4;
-    ld = align; st = 0; count = bytes / align;
-    reg[0] = 4; if (align == 8) reg[1] = 6; else reg[1] = 5;
-    printf "; The following was calculated using awk.\n";
-    printf "\ttext\n";
-    printf "\talign\t%d\n", fb;
-    for (r = count; r >= 1; r--) {
-      evenp = r % 2;
-      name = sprintf("__%smovstr%s%dx%d", us, mode, count * align, r * align);
-      if (r > 1) {
-        printf "\tglobal\t%s\n", name;
-        printf "%s:\n", name;
-      }
-      if (r == 1)
-        printf "\tjmp.n\t%sr1\n", ps;
-      else
-        printf "\tld%s\t%sr%d,%sr3,%d\n", suffix, ps, reg[evenp], ps, ld;
-      printf "\tst%s\t%sr%d,%sr2,%d\n", suffix, ps, reg[1-evenp], ps, st;
-      ld += align; st += align;
-    }
-    if (!no_tdesc) {
-      printf "%send%s%dx:\n", la, mode, count * align;
-      printf "\tsection\t.tdesc,\"%s\"\n", tf;
-      printf "\tword\t0x42,1,__%smovstr%s%dx%d", us, mode, count * align, count * align;
-      printf ",%send%s%dx\n", la, mode, count * align;
-      printf "\tword\t0x0100001f,0,1,0\n";
-      printf "\ttext\n";
-    }
-    printf "; End of awk generated code.\n"
-    exit;
-  }'
-}
-
-(do_file '"movstrQI16x.s"';
- echo 'QI:.b:1:16' | gen_movstrX0) > moveQI16x.asm
-(do_file '"movstrHI48x.s"';
- echo 'HI:.h:2:48' | gen_movstrX0) > moveHI48x.asm
-(do_file '"movstrSI96x.s"';
- echo 'SI::4:96'   | gen_movstrX0) > moveSI96x.asm
-(do_file '"movstrDI96x.s"';
- echo 'DI:.d:8:96'   | gen_movstrX0) > moveDI96x.asm
-
-#.Implementation_continued[=-----------------------------------------------
-#
-#      This generates the odd-remainder, straight-line modules.  The
-#      interface is the same as that for the even-remainder modules.
-#
-#.End]=------------------------------------------------------------------*/
-
-gen_movstrXr() {
-    awk $awk_flag "$awk_begin"'
-      if (abi) {
-       ps="#"; us=""; tf="a"; la=".L"; fb=16;
-      } else {
-       ps=""; us="_"; tf="x"; la="@L"; fb=8;
-      }
-    }
-    NR == 1 && NF == 4 {
-    mode = $1; rem = $2; most = $3; count = $4;
-    suffix[1] = ".b"; suffix[2] = ".h"; suffix[4] = ""; suffix[8] = ".d";
-
-    prev = align = most;
-    ld = align; st = 0; total = count - rem - most;
-    evenp = int(total/align) % 2;
-    reg[0] = 4; if (align == 8) reg[1] = 6; else reg[1] = 5;
-    printf "; The following was calculated using awk.\n";
-    printf "\ttext\n";
-    printf "\talign\t%d\n", fb;
-    for (bytes = total; bytes >= 0; bytes -= align) {
-      if (bytes < align) {
-       if (bytes >= 4) align = 4;
-       else if (bytes >= 2) align = 2;
-       else align = 1;
-      }
-      name = sprintf("__%smovstr%s%dx%d", us, mode, total + most, bytes + most);
-      if (bytes > most) {
-        printf "\tglobal\t%s\n", name;
-        printf "%s:\n", name;
-      }
-      if (bytes == 0)
-       printf "\tjmp.n\t%sr1\n", ps;
-      else
-       printf "\tld%s\t%sr%d,%sr3,%d\n", suffix[align], ps, reg[evenp], ps, ld;
-      printf "\tst%s\t%sr%d,%sr2,%d\n", suffix[prev], ps, reg[1-evenp], ps, st;
-      ld += align; st += prev; prev = align;
-      evenp = 1 - evenp;
-    }
-    if (!no_tdesc) {
-      printf "%send%s%dx:\n", la, mode, total + most;
-      printf "\tsection\t.tdesc,\"%s\"\n", tf;
-      printf "\tword\t0x42,1,__%smovstr%s%dx%d", us, mode, total + most, total + most;
-      printf ",%send%s%dx\n", la, mode, total + most;
-      printf "\tword\t0x0100001f,0,1,0\n";
-      printf "\ttext\n";
-    }
-    printf "; End of awk generated code.\n"
-    exit;
-  }'
-}
-
-(do_file '"movstrDI47x.s"';
- echo 'DI:1:8:48' | gen_movstrXr) > moveDI47x.asm
-(do_file '"movstrDI46x.s"';
- echo 'DI:2:8:48' | gen_movstrXr) > moveDI46x.asm
-(do_file '"movstrDI45x.s"';
- echo 'DI:3:8:48' | gen_movstrXr) > moveDI45x.asm
-(do_file '"movstrDI44x.s"';
- echo 'DI:4:8:48' | gen_movstrXr) > moveDI44x.asm
-(do_file '"movstrDI43x.s"';
- echo 'DI:5:8:48' | gen_movstrXr) > moveDI43x.asm
-(do_file '"movstrDI42x.s"';
- echo 'DI:6:8:48' | gen_movstrXr) > moveDI42x.asm
-(do_file '"movstrDI41x.s"';
- echo 'DI:7:8:48' | gen_movstrXr) > moveDI41x.asm
-
-(do_file '"movstrSI47x.s"';
- echo 'SI:1:4:48' | gen_movstrXr) > moveSI47x.asm
-(do_file '"movstrSI46x.s"';
- echo 'SI:2:4:48' | gen_movstrXr) > moveSI46x.asm
-(do_file '"movstrSI45x.s"';
- echo 'SI:3:4:48' | gen_movstrXr) > moveSI45x.asm
-
-(do_file '"movstrHI15x.s"';
- echo 'HI:1:2:16' | gen_movstrXr) > moveHI15x.asm