diff options
Diffstat (limited to 'gcc')
96 files changed, 218 insertions, 9574 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 076cfe3..78d4fce 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,98 @@ +2008-06-07 Joseph Myers <joseph@codesourcery.com> + + * config.gcc (Obsolete configurations): Remove list of + configurations. + (Unsupported targets list): Add *-*-linux*aout*, *-*-linux*libc1*, + *-*-solaris2.[0-6], *-*-solaris2.[0-6].*, *-*-sysv*. Remove other + targets matched by those patterns. + (strongarm*-*-*, ep9312*-*-*, xscale-*-*, parisc*-*-*, + m680[012]0-*-*, *-*-linux*libc1*, *-*-linux*aout*, + alpha*-*-unicosmk*, strongarm*-*-freebsd*, ep9312-*-elf, + arm*-*-kaos*, cris-*-aout, parisc*64*-*-linux*, parisc*-*-linux*, + hppa1.1-*-pro*, hppa1.1-*-osf*, hppa1.1-*-bsd*, + i[34567]86-sequent-ptx4*, i[34567]86-sequent-sysv4*, + i[34567]86-*-beoself*, i[34567]86-*-beos*, i[34567]86-*-sco3.2v5*, + i[34567]86-*-sysv5*, i[34567]86-*-sysv4*, i[34567]86-*-uwin*, + i[34567]86-*-kaos*, m68020-*-elf*, m68010-*-netbsdelf*, + mips-wrs-windiss, mt-*-elf, powerpc-*-beos*, powerpc-*-chorusos*, + powerpc-wrs-windiss*, powerpcle-*-sysv*, powerpc-*-kaos*, + powerpcle-*-kaos*, sh*-*-kaos*, sparc-*-sysv4*, strongarm-*-elf*, + strongarm-*-pe, strongarm-*-kaos*, vax-*-bsd*, vax-*-sysv*, + vax-*-ultrix*, xscale-*-elf, xscale-*-coff, + i[34567]86-*-linux*aout*, i[34567]86-*-linux*libc1): Remove. + Make code for Solaris 7 and greater unconditional for Solaris. + (ep9312-*-*, parisc1*, m680[012]0-*-*, parisc*-*-*, mt-*-*): + Remove --with-* handling. + * config/rs6000/sysv4.h (-mwindiss): Remove from all specs. + (LIB_WINDISS_SPEC, CPP_OS_WINDISS_SPEC, STARTFILE_WINDISS_SPEC, + ENDFILE_WINDISS_SPEC, LINK_START_WINDISS_SPEC, + LINK_OS_WINDISS_SPEC): Remove. + * config/rs6000/sysv4.opt (mwindiss): Remove. + * configure.ac (strongarm*-*-*, xscale*-*-*): Remove. + * configure: Regenerate. + * doc/cpp.texi: Don't mention BeOS. + * doc/extend.texi (interrupt): Don't mention MS1. + * doc/install.texi: (i386-@var{any}-sysv, m68k-bull-sysv, + m68k-hp-hpux, m68000-hp-hpux, m68000-att-sysv, + alphaev5-cray-unicosmk*, xscale-*-*, i?86-*-linux*aout, + i?86-*-sco3.2v5*, i?86-*-udk, m68k-hp-hpux, powerpc-*-sysv4, + powerpc-*-sysv4, powerpcle-*-sysv4, *-*-sysv*, vax-dec-ultrix): + Remove. + * doc/invoke.texi (MT Options): Remove. + (-mwindiss): Remove. + (CRIS Options): Remove cris-axis-aout references. + (HPPA Options): Don't mention hppa1.1-*-pro. + * doc/md.texi: (MorphoTech family): Remove. + * libgcc2.c: Don't handle UWIN. + * config/alpha/t-unicosmk: Remove. + * config/alpha/unicosmk.h: Remove. + * config/arm/kaos-arm.h: Remove. + * config/arm/kaos-strongarm.h: Remove. + * config/arm/strongarm-coff.h: Remove. + * config/arm/strongarm-elf.h: Remove. + * config/arm/strongarm-pe.h: Remove. + * config/arm/t-strongarm-pe: Remove. + * config/arm/t-xscale-coff: Remove. + * config/arm/t-xscale-elf: Remove. + * config/arm/xscale-coff.h: Remove. + * config/arm/xscale-elf.h: Remove. + * config/chorus.h: Remove. + * config/cris/aout.h: Remove. + * config/cris/aout.opt: Remove. + * config/cris/t-aout: Remove. + * config/i386/beos-elf.h: Remove. + * config/i386/kaos-i386.h: Remove. + * config/i386/ptx4-i.h: Remove. + * config/i386/sco5.h: Remove. + * config/i386/sco5.opt: Remove. + * config/i386/sysv4-cpp.h: Remove. + * config/i386/sysv5.h: Remove. + * config/i386/t-beos: Remove. + * config/i386/t-sco5: Remove. + * config/i386/t-uwin: Remove. + * config/i386/uwin.asm: Remove. + * config/i386/uwin.h: Remove. + * config/kaos.h: Remove. + * config/mips/windiss.h: Remove. + * config/mt: Remove directory. + * config/pa/pa-osf.h: Remove. + * config/pa/pa-pro-end.h: Remove. + * config/pa/t-pro: Remove. + * config/ptx4.h: Remove. + * config/rs6000/beos.h: Remove. + * config/rs6000/kaos-ppc.h: Remove. + * config/rs6000/t-beos: Remove. + * config/rs6000/windiss.h: Remove. + * config/sh/kaos-sh.h: Remove. + * config/sol2-6.h: Remove. + * config/sparc/sol26-sld.h: Remove. + * config/sparc/sysv4-only.h: Remove. + * config/vax/bsd.h: Remove. + * config/vax/t-memfuncs: Remove. + * config/vax/ultrix.h: Remove. + * config/vax/vaxv.h: Remove. + * config/windiss.h: Remove. + 2008-06-06 Uros Bizjak <ubizjak@gmail.com> PR rtl-optimization/36438 diff --git a/gcc/config.gcc b/gcc/config.gcc index 399d80c..a18ba97 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -204,63 +204,35 @@ xm_file= md_file= # Obsolete configurations. -case ${target} in - mt-* \ - | strongarm*-* \ - | ep9312*-* \ - | xscale*-* \ - | parisc*-* \ - | m680[012]0-* \ - | *-*-beos* \ - | *-*-kaos* \ - | *-*-linux*aout* \ - | *-*-linux*libc1* \ - | *-*-solaris2.[0-6] \ - | *-*-solaris2.[0-6].* \ - | *-*-sysv* \ - | *-*-windiss* \ - | alpha*-*-unicosmk* \ - | cris-*-aout \ - | hppa1.1-*-pro* \ - | hppa1.1-*-osf* \ - | hppa1.1-*-bsd* \ - | i[34567]86-sequent-ptx4* \ - | i[34567]86-*-sco3.2v5* \ - | i[34567]86-*-uwin* \ - | powerpc-*-chorusos* \ - | vax-*-bsd* \ - | vax-*-ultrix* \ - ) - if test "x$enable_obsolete" != xyes; then - echo "*** Configuration ${target} is obsolete." >&2 - echo "*** Specify --enable-obsolete to build it anyway." >&2 - echo "*** Support will be REMOVED in the next major release of GCC," >&2 - echo "*** unless a maintainer comes forward." >&2 - exit 1 - fi;; -esac +#case ${target} in +# ) +# if test "x$enable_obsolete" != xyes; then +# echo "*** Configuration ${target} is obsolete." >&2 +# echo "*** Specify --enable-obsolete to build it anyway." >&2 +# echo "*** Support will be REMOVED in the next major release of GCC," >&2 +# echo "*** unless a maintainer comes forward." >&2 +# exit 1 +# fi;; +#esac # Unsupported targets list. Do not put an entry in this list unless # it would otherwise be caught by a more permissive pattern. The list # should be in alphabetical order. case ${target} in - alpha*-*-linux*libc1* \ - | i[34567]86-sequent-sysv \ - | i[34567]86-sequent-sysv[123]* \ - | i[34567]86-go32-* \ + i[34567]86-go32-* \ | i[34567]86-*-go32* \ - | m68k-*-linux*aout* \ - | m68k-*-linux*libc1* \ | mips64orion*-*-rtems* \ - | powerpc-*-linux*libc1* \ - | sparc-*-linux*aout* \ - | sparc-*-linux*libc1* \ | sparc-hal-solaris2* \ | thumb-*-* \ + | *-*-linux*aout* \ | *-*-linux*coff* \ + | *-*-linux*libc1* \ | *-*-linux*oldld* \ | *-*-rtemsaout* \ | *-*-rtemscoff* \ + | *-*-solaris2.[0-6] \ + | *-*-solaris2.[0-6].* \ + | *-*-sysv* \ | vax-*-vms* \ ) echo "*** Configuration ${target} not supported" 1>&2 @@ -286,9 +258,6 @@ alpha*-*-*) am33_2.0-*-linux*) cpu_type=mn10300 ;; -strongarm*-*-*) - cpu_type=arm - ;; arm*-*-*) cpu_type=arm extra_headers="mmintrin.h arm_neon.h" @@ -301,19 +270,12 @@ bfin*-*) crisv32-*) cpu_type=cris ;; -ep9312*-*-*) - cpu_type=arm - ;; frv*) cpu_type=frv ;; fido-*-*) cpu_type=m68k extra_headers=math-68881.h ;; -xscale-*-*) - cpu_type=arm - extra_headers="mmintrin.h" - ;; i[34567]86-*-*) cpu_type=i386 extra_headers="cpuid.h mmintrin.h mm3dnow.h xmmintrin.h emmintrin.h @@ -333,16 +295,12 @@ ia64-*-*) extra_headers=ia64intrin.h need_64bit_hwint=yes ;; -hppa*-*-* | parisc*-*-*) +hppa*-*-*) cpu_type=pa ;; m32r*-*-*) cpu_type=m32r ;; -m680[012]0-*-*) - cpu_type=m68k - extra_headers=math-68881.h - ;; m68k-*-*) extra_headers=math-68881.h ;; @@ -498,9 +456,6 @@ case ${target} in esac fbsd_tm_file="${fbsd_tm_file} freebsd-spec.h freebsd.h" ;; -*-*-linux*libc1* | *-*-linux*aout*) - # Avoid the generic linux case. - ;; *-*-linux* | frv-*-*linux* | *-*-kfreebsd*-gnu | *-*-knetbsd*-gnu) # Must come before *-*-gnu* (because of *-*-linux-gnu* systems). extra_parts="crtbegin.o crtbeginS.o crtbeginT.o crtend.o crtendS.o" @@ -633,15 +588,6 @@ case ${target} in then tmake_file=${cpu_type}/t-$rest fi ;; -alpha*-*-unicosmk*) - use_collect2=yes - tm_file="${tm_file} alpha/unicosmk.h" - - # Don't include t-ieee for now because we don't support that yet - # tmake_file="alpha/t-ieee" - tmake_file="alpha/t-unicosmk" - use_fixproto=yes - ;; alpha*-*-linux*) tm_file="${tm_file} alpha/elf.h alpha/linux.h alpha/linux-elf.h" target_cpu_default="MASK_GAS" @@ -729,7 +675,7 @@ arm-wrs-vxworks) tm_file="elfos.h arm/elf.h arm/aout.h ${tm_file} vx-common.h vxworks.h arm/vxworks.h" tmake_file="${tmake_file} arm/t-arm arm/t-vxworks" ;; -arm*-*-freebsd*|strongarm*-*-freebsd*) +arm*-*-freebsd*) tm_file="dbxelf.h elfos.h ${fbsd_tm_file} arm/elf.h arm/aout.h arm/freebsd.h arm/arm.h" tmake_file="${tmake_file} arm/t-arm arm/t-strongarm-elf" ;; @@ -818,7 +764,7 @@ arm*-*-rtems*) tmake_file="arm/t-arm arm/t-arm-elf t-rtems arm/t-rtems" tmake_file="${tmake_file} arm/t-arm-softfp soft-fp/t-softfp" ;; -arm*-*-elf | ep9312-*-elf) +arm*-*-elf) tm_file="dbxelf.h elfos.h arm/unknown-elf.h arm/elf.h arm/aout.h arm/arm.h" tmake_file="arm/t-arm arm/t-arm-elf" tmake_file="${tmake_file} arm/t-arm-softfp soft-fp/t-softfp" @@ -835,11 +781,6 @@ arm-*-pe*) extra_options="${extra_options} arm/pe.opt" extra_objs="pe.o" ;; -arm*-*-kaos*) - tm_file="dbxelf.h elfos.h arm/unknown-elf.h arm/elf.h arm/aout.h arm/arm.h kaos.h arm/kaos-arm.h" - tmake_file="arm/t-arm arm/t-arm-elf" - tmake_file="${tmake_file} arm/t-arm-softfp soft-fp/t-softfp" - ;; avr-*-rtems*) tm_file="avr/avr.h dbxelf.h avr/rtems.h rtems.h" tmake_file="avr/t-avr t-rtems avr/t-rtems" @@ -875,12 +816,6 @@ bfin*-*) tmake_file=bfin/t-bfin use_collect2=no ;; -cris-*-aout) - tm_file="dbxelf.h ${tm_file} cris/aout.h" - gas=yes - tmake_file="cris/t-cris cris/t-aout" - extra_options="${extra_options} cris/aout.opt" - ;; crisv32-*-elf | crisv32-*-none) tm_file="dbxelf.h elfos.h ${tm_file}" tmake_file="cris/t-cris" @@ -942,7 +877,7 @@ h8300-*-*) tm_file="h8300/h8300.h dbxcoff.h h8300/coff.h" use_fixproto=yes ;; -hppa*64*-*-linux* | parisc*64*-*-linux*) +hppa*64*-*-linux*) target_cpu_default="MASK_PA_11|MASK_PA_20" tm_file="pa/pa64-start.h ${tm_file} dbxelf.h elfos.h svr4.h linux.h \ pa/pa-linux.h pa/pa64-regs.h pa/pa-64.h pa/pa64-linux.h" @@ -950,7 +885,7 @@ hppa*64*-*-linux* | parisc*64*-*-linux*) gas=yes gnu_ld=yes need_64bit_hwint=yes ;; -hppa*-*-linux* | parisc*-*-linux*) +hppa*-*-linux*) target_cpu_default="MASK_PA_11|MASK_NO_SPACE_REGS" tm_file="${tm_file} dbxelf.h elfos.h svr4.h linux.h pa/pa-linux.h \ pa/pa32-regs.h pa/pa32-linux.h" @@ -966,24 +901,6 @@ hppa*-*-linux* | parisc*-*-linux*) #hppa*-*-openbsd*) # target_cpu_default="MASK_PA_11" # ;; -hppa1.1-*-pro*) - target_cpu_default="MASK_PORTABLE_RUNTIME|MASK_NO_SPACE_REGS|MASK_SOFT_FLOAT" - tm_file="${tm_file} pa/pa32-regs.h dbxelf.h elfos.h pa/elf.h \ - pa/pa-pro-end.h libgloss.h" - tmake_file="pa/t-pro" - ;; -hppa1.1-*-osf*) - target_cpu_default="MASK_PA_11" - tm_file="${tm_file} pa/pa32-regs.h dbxelf.h pa/som.h pa/pa-osf.h" - tmake_file="pa/t-pa" - use_collect2=yes - ;; -hppa1.1-*-bsd*) - target_cpu_default="MASK_PA_11" - tm_file="${tm_file} pa/pa32-regs.h dbxelf.h pa/som.h" - tmake_file="pa/t-pa" - use_collect2=yes - ;; hppa[12]*-*-hpux10*) case ${target} in hppa1.1-*-* | hppa2*-*-*) @@ -1112,25 +1029,10 @@ x86_64-*-elf*) tmake_file="i386/t-i386elf t-svr4" use_fixproto=yes ;; -i[34567]86-sequent-ptx4* | i[34567]86-sequent-sysv4*) - if test x$gas = xyes - then - tm_file="${tm_file} usegas.h" - fi - tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h ptx4.h i386/ptx4-i.h" - tmake_file=t-svr4 - extra_parts="crtbegin.o crtend.o" - use_fixproto=yes - ;; i[34567]86-*-aout*) tm_file="${tm_file} i386/unix.h i386/bsd.h i386/gas.h i386/gstabs.h i386/i386-aout.h" use_fixproto=yes ;; -i[34567]86-*-beoself* | i[34567]86-*-beos*) - tmake_file='i386/t-beos i386/t-crtpic' - tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h svr4.h i386/beos-elf.h" - extra_parts='crtbegin.o crtend.o' - ;; i[34567]86-*-freebsd*) tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h ${fbsd_tm_file} i386/freebsd.h" ;; @@ -1261,23 +1163,9 @@ i[34567]86-*-rtems*) extra_parts="crtbegin.o crtend.o crti.o crtn.o" tmake_file="i386/t-rtems-i386 i386/t-crtstuff t-rtems" ;; -i[34567]86-*-sco3.2v5*) # 80386 running SCO Open Server 5 - tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h i386/sco5.h" - if test x$gas = xyes - then - tm_file="usegas.h ${tm_file}" - fi - tmake_file=i386/t-sco5 - extra_parts="crtbegin.o crtend.o" - extra_options="${extra_options} i386/sco5.opt" - use_fixproto=yes - ;; i[34567]86-*-solaris2*) tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h svr4.h i386/sysv4.h sol2.h" case ${target} in - *-*-solaris2.[0-6] | *-*-solaris2.[0-6].*) - tm_file="${tm_file} sol2-6.h" - ;; *-*-solaris2.1[0-9]*) tm_file="${tm_file} sol2-10.h" ;; @@ -1297,11 +1185,7 @@ i[34567]86-*-solaris2*) if test x$gas = xyes; then tm_file="usegas.h ${tm_file}" fi - case ${target} in - *-*-solaris2.[789] | *-*-solaris2.1[0-9]*) - tm_file="$tm_file tm-dwarf2.h" - ;; - esac + tm_file="$tm_file tm-dwarf2.h" case ${target} in *-*-solaris2.1[0-9]*) tm_file="${tm_file} i386/x86-64.h i386/sol2-10.h" @@ -1332,43 +1216,13 @@ i[34567]86-*-solaris2*) esac case ${enable_threads}:${have_pthread_h}:${have_thread_h} in "":yes:* | yes:yes:* ) - case ${target} in - *-*-solaris2.[0-6] | *-*-solaris2.[0-6].*) - thread_file=posix95 - ;; - *) - thread_file=posix - ;; - esac + thread_file=posix ;; "":*:yes | yes:*:yes ) thread_file=solaris ;; esac ;; -i[34567]86-*-sysv5*) # Intel x86 on System V Release 5 - tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h svr4.h i386/sysv4.h i386/sysv5.h" - if test x$stabs = xyes - then - tm_file="${tm_file} dbx.h" - fi - tmake_file="i386/t-crtpic t-svr4" - extra_parts="crtbegin.o crtend.o" - if test x$enable_threads = xyes; then - thread_file='posix' - fi - use_fixproto=yes - ;; -i[34567]86-*-sysv4*) # Intel 80386's running system V.4 - tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h svr4.h i386/sysv4.h i386/sysv4-cpp.h" - if test x$stabs = xyes - then - tm_file="${tm_file} dbx.h" - fi - tmake_file="i386/t-crtpic t-svr4" - extra_parts="crtbegin.o crtend.o" - use_fixproto=yes - ;; i[4567]86-wrs-vxworks|i[4567]86-wrs-vxworksae) tm_file="${tm_file} i386/unix.h i386/att.h elfos.h svr4.h vx-common.h" case ${target} in @@ -1427,17 +1281,6 @@ i[34567]86-*-mingw* | x86_64-*-mingw*) ;; esac ;; -i[34567]86-*-uwin*) - tm_file="${tm_file} i386/unix.h i386/bsd.h i386/gas.h dbxcoff.h i386/cygwin.h i386/uwin.h" - tmake_file="i386/t-cygwin i386/t-uwin" - extra_objs=winnt.o - extra_options="${extra_options} i386/cygming.opt" - target_gtfiles="\$(srcdir)/config/i386/winnt.c" - if test x$enable_threads = xyes; then - thread_file='win32' - fi - use_fixproto=yes - ;; i[34567]86-*-interix3*) tm_file="${tm_file} i386/unix.h i386/bsd.h i386/gas.h i386/i386-interix.h i386/i386-interix3.h interix.h interix3.h" tmake_file="i386/t-interix" @@ -1450,10 +1293,6 @@ i[34567]86-*-interix3*) tm_file="${tm_file} dbxcoff.h" fi ;; -i[34567]86-*-kaos*) - tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h i386/i386elf.h kaos.h i386/kaos-i386.h" - tmake_file="i386/t-i386elf t-svr4" - ;; ia64*-*-elf*) tm_file="${tm_file} dbxelf.h elfos.h ia64/sysv4.h ia64/elf.h" tmake_file="ia64/t-ia64" @@ -1570,7 +1409,7 @@ m68k-*-coff*) tm_file="${tm_file} m68k/m68k-none.h m68k/m68kemb.h dbxcoff.h m68k/coff.h dbx.h" use_fixproto=yes ;; -m68020-*-elf* | m68k-*-elf* | fido-*-elf*) +m68k-*-elf* | fido-*-elf*) case ${target} in fido-*-elf*) # Check that $with_cpu makes sense. @@ -1602,7 +1441,7 @@ m68020-*-elf* | m68k-*-elf* | fido-*-elf*) esac extra_parts="crtbegin.o crtend.o" ;; -m68010-*-netbsdelf* | m68k*-*-netbsdelf*) +m68k*-*-netbsdelf*) default_m68k_cpu=68020 default_cf_cpu=5475 tm_file="${tm_file} dbxelf.h elfos.h netbsd.h netbsd-elf.h m68k/netbsd-elf.h" @@ -1841,12 +1680,6 @@ mips-wrs-vxworks) tm_file="elfos.h ${tm_file} svr4.h mips/elf.h vx-common.h vxworks.h mips/vxworks.h" tmake_file="${tmake_file} mips/t-vxworks" ;; -mips-wrs-windiss) # Instruction-level simulator for VxWorks. - xm_defines=POSIX - tm_file="elfos.h mips/mips.h svr4.h mips/elf.h windiss.h mips/windiss.h" - tmake_file="${tmake_file} mips/t-elf mips/t-libgcc-mips16" - thread_file= - ;; mipstx39-*-elf* | mipstx39el-*-elf*) tm_file="elfos.h ${tm_file} mips/r3900.h mips/elf.h" tmake_file="mips/t-r3900 mips/t-libgcc-mips16" @@ -1864,10 +1697,6 @@ mn10300-*-*) use_collect2=no use_fixproto=yes ;; -mt-*-elf) - tm_file="dbxelf.h elfos.h svr4.h ${tm_file}" - tmake_file="${tmake_file} mt/t-mt" - ;; pdp11-*-bsd) tm_file="${tm_file} pdp11/2bsd.h" use_fixproto=yes @@ -1896,12 +1725,6 @@ powerpc64-*-gnu*) extra_options="${extra_options} rs6000/sysv4.opt rs6000/linux64.opt" tmake_file="rs6000/t-fprules t-slibgcc-elf-ver t-gnu rs6000/t-linux64 rs6000/t-fprules-softfp soft-fp/t-softfp" ;; -powerpc-*-beos*) - tm_file="${tm_file} rs6000/aix.h rs6000/beos.h rs6000/xcoff.h" - tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-beos" - extra_headers= - use_fixproto=yes - ;; powerpc-*-darwin*) extra_options="${extra_options} rs6000/darwin.opt" extra_parts="crt2.o" @@ -1934,17 +1757,6 @@ powerpc-*-netbsd*) tmake_file="${tmake_file} rs6000/t-netbsd" extra_options="${extra_options} rs6000/sysv4.opt" ;; -powerpc-*-chorusos*) - tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h chorus.h" - tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcos rs6000/t-ppccomm" - extra_options="${extra_options} rs6000/sysv4.opt" - case ${enable_threads} in - yes | posix) - thread_file='posix' - ;; - esac - use_fixproto=yes - ;; powerpc-*-eabispe*) tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/eabi.h rs6000/e500.h rs6000/eabispe.h" extra_options="${extra_options} rs6000/sysv4.opt" @@ -2048,13 +1860,6 @@ powerpc-wrs-vxworks|powerpc-wrs-vxworksae) ;; esac ;; -powerpc-wrs-windiss*) # Instruction-level simulator for VxWorks. - tm_file="${tm_file} elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/windiss.h" - tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcgas rs6000/t-ppccomm" - extra_options="${extra_options} rs6000/sysv4.opt" - thread_file="" - use_fixproto=yes - ;; powerpc-*-lynxos*) xm_defines=POSIX tm_file="${tm_file} dbxelf.h elfos.h rs6000/sysv4.h rs6000/lynx.h lynx.h" @@ -2066,12 +1871,6 @@ powerpc-*-lynxos*) gnu_ld=yes gas=yes ;; -powerpcle-*-sysv*) - tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/sysv4le.h" - tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcos rs6000/t-ppccomm" - extra_options="${extra_options} rs6000/sysv4.opt" - use_fixproto=yes - ;; powerpcle-*-elf*) tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/sysv4le.h" tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcgas rs6000/t-ppccomm" @@ -2088,16 +1887,6 @@ powerpcle-*-eabi*) tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcgas rs6000/t-ppccomm" extra_options="${extra_options} rs6000/sysv4.opt" ;; -powerpc-*-kaos*) - tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h kaos.h rs6000/kaos-ppc.h" - tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcgas rs6000/t-ppccomm" - extra_options="${extra_options} rs6000/sysv4.opt" - ;; -powerpcle-*-kaos*) - tm_file="${tm_file} dbxelf.h elfos.h svr4.h freebsd-spec.h rs6000/sysv4.h rs6000/sysv4le.h kaos.h rs6000/kaos-ppc.h" - tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcgas rs6000/t-ppccomm" - extra_options="${extra_options} rs6000/sysv4.opt" - ;; rs6000-ibm-aix4.[12]* | powerpc-ibm-aix4.[12]*) tm_file="${tm_file} rs6000/aix.h rs6000/aix41.h rs6000/xcoff.h" tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-newas" @@ -2174,7 +1963,7 @@ score-*-elf) tmake_file=score/t-score-elf extra_objs="score7.o score3.o" ;; -sh-*-elf* | sh[12346l]*-*-elf* | sh*-*-kaos* | \ +sh-*-elf* | sh[12346l]*-*-elf* | \ sh-*-symbianelf* | sh[12346l]*-*-symbianelf* | \ sh-*-linux* | sh[2346lbe]*-*-linux* | \ sh-*-netbsdelf* | shl*-*-netbsdelf* | sh5-*-netbsd* | sh5l*-*-netbsd* | \ @@ -2208,8 +1997,6 @@ sh-*-symbianelf* | sh[12346l]*-*-symbianelf* | \ case ${target} in sh*-*-linux*) tmake_file="${tmake_file} sh/t-linux" tm_file="${tm_file} linux.h sh/linux.h" ;; - sh*-*-kaos*) tm_file="${tm_file} sh/embed-elf.h kaos.h sh/kaos-sh.h" - ;; sh*-*-netbsd*) tm_file="${tm_file} netbsd.h netbsd-elf.h sh/netbsd-elf.h" ;; sh*-superh-elf) if test x$with_libgloss != xno; then with_libgloss=yes @@ -2421,9 +2208,6 @@ sparc64-*-solaris2* | sparcv9-*-solaris2*) sparc-*-solaris2*) tm_file="${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h sol2.h" case ${target} in - *-*-solaris2.[0-6] | *-*-solaris2.[0-6].*) - tm_file="${tm_file} sol2-6.h" - ;; *-*-solaris2.1[0-9]*) tm_file="${tm_file} sol2-10.h" ;; @@ -2441,25 +2225,16 @@ sparc-*-solaris2*) else tmake_file="$tmake_file t-slibgcc-sld" fi - case ${target} in - *-*-solaris2.[0-6] | *-*-solaris2.[0-6].*) - if test x$gnu_ld = xno; then - tm_file="${tm_file} sparc/sol26-sld.h" - fi - ;; - *-*-solaris2.[789] | *-*-solaris2.1[0-9]*) - tm_file="sparc/biarch64.h ${tm_file} sparc/sol2-bi.h" - if test x$gnu_ld = xyes; then - tm_file="${tm_file} sparc/sol2-gld-bi.h" - fi - if test x$gas = xyes; then - tm_file="${tm_file} sparc/sol2-gas-bi.h" - fi - tm_file="${tm_file} tm-dwarf2.h" - tmake_file="$tmake_file sparc/t-sol2-64" - test x$with_cpu != x || with_cpu=v9 - ;; - esac + tm_file="sparc/biarch64.h ${tm_file} sparc/sol2-bi.h" + if test x$gnu_ld = xyes; then + tm_file="${tm_file} sparc/sol2-gld-bi.h" + fi + if test x$gas = xyes; then + tm_file="${tm_file} sparc/sol2-gas-bi.h" + fi + tm_file="${tm_file} tm-dwarf2.h" + tmake_file="$tmake_file sparc/t-sol2-64" + test x$with_cpu != x || with_cpu=v9 c_target_objs="sol2-c.o" cxx_target_objs="sol2-c.o" extra_objs="sol2.o" @@ -2467,26 +2242,13 @@ sparc-*-solaris2*) extra_parts="crt1.o crti.o crtn.o gcrt1.o gmon.o crtbegin.o crtend.o" case ${enable_threads}:${have_pthread_h}:${have_thread_h} in "":yes:* | yes:yes:* ) - case ${target} in - *-*-solaris2.[0-6] | *-*-solaris2.[0-6].*) - thread_file=posix95 - ;; - *) - thread_file=posix - ;; - esac + thread_file=posix ;; "":*:yes | yes:*:yes ) thread_file=solaris ;; esac ;; -sparc-*-sysv4*) - tm_file="${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h sparc/sysv4-only.h" - tmake_file=t-svr4 - extra_parts="crtbegin.o crtend.o" - use_fixproto=yes - ;; sparc-wrs-vxworks) tm_file="${tm_file} elfos.h svr4.h sparc/sysv4.h vx-common.h vxworks.h sparc/vxworks.h" tmake_file="${tmake_file} sparc/t-vxworks" @@ -2527,31 +2289,6 @@ spu-*-elf*) c_target_objs="${c_target_objs} spu-c.o" cxx_target_objs="${cxx_target_objs} spu-c.o" ;; -strongarm-*-elf*) - tm_file="arm/strongarm-elf.h dbxelf.h elfos.h arm/unknown-elf.h arm/elf.h arm/aout.h arm/arm.h" - tmake_file="arm/t-arm arm/t-strongarm-elf" - out_file=arm/arm.c - md_file=arm/arm.md - extra_modes=arm/arm-modes.def - use_fixproto=yes - ;; -strongarm-*-pe) - tm_file="arm/semi.h arm/aout.h arm/coff.h dbxcoff.h arm/strongarm-coff.h arm/arm.h arm/pe.h arm/strongarm-pe.h" - tmake_file="arm/t-arm arm/t-strongarm-pe" - out_file=arm/arm.c - md_file=arm/arm.md - extra_modes=arm/arm-modes.def - extra_options="${extra_options} arm/pe.opt" - extra_objs=pe.o - use_fixproto=yes - ;; -strongarm-*-kaos*) - tm_file="arm/strongarm-elf.h dbxelf.h elfos.h arm/unknown-elf.h arm/elf.h arm/aout.h arm/arm.h kaos.h arm/kaos-strongarm.h" - tmake_file="arm/t-arm arm/t-strongarm-elf" - out_file=arm/arm.c - md_file=arm/arm.md - extra_modes=arm/arm-modes.def - ;; v850e1-*-*) target_cpu_default="TARGET_CPU_v850e1" tm_file="dbxelf.h elfos.h svr4.h v850/v850.h" @@ -2599,17 +2336,6 @@ v850-*-*) cxx_target_objs="v850-c.o" use_fixproto=yes ;; -vax-*-bsd*) # VAXen running BSD - tm_file="${tm_file} vax/bsd.h" - tmake_file=vax/t-memfuncs - use_collect2=yes - use_fixproto=yes - ;; -vax-*-sysv*) # VAXen running system V - tm_file="${tm_file} vax/vaxv.h" - tmake_file=vax/t-memfuncs - use_fixproto=yes - ;; vax-*-netbsdelf*) tm_file="${tm_file} elfos.h netbsd.h netbsd-elf.h vax/elf.h vax/netbsd-elf.h" ;; @@ -2623,27 +2349,6 @@ vax-*-openbsd*) tm_file="vax/vax.h vax/openbsd1.h openbsd.h vax/openbsd.h" use_collect2=yes ;; -vax-*-ultrix*) # VAXen running ultrix - tm_file="${tm_file} vax/ultrix.h" - tmake_file=vax/t-memfuncs - use_fixproto=yes - ;; -xscale-*-elf) - tm_file="arm/xscale-elf.h dbxelf.h elfos.h arm/unknown-elf.h arm/elf.h arm/aout.h arm/arm.h" - tmake_file="arm/t-arm arm/t-xscale-elf" - out_file=arm/arm.c - md_file=arm/arm.md - extra_modes=arm/arm-modes.def - use_fixproto=yes - ;; -xscale-*-coff) - tm_file="arm/semi.h arm/aout.h arm/coff.h dbxcoff.h arm/xscale-coff.h arm/arm.h" - tmake_file="arm/t-arm arm/t-xscale-coff" - out_file=arm/arm.c - md_file=arm/arm.md - extra_modes=arm/arm-modes.def - use_fixproto=yes - ;; xstormy16-*-elf) # For historical reasons, the target files omit the 'x'. tm_file="dbxelf.h elfos.h svr4.h stormy16/stormy16.h" @@ -2683,9 +2388,6 @@ m32c-*-elf*) esac case ${target} in -i[34567]86-*-linux*aout* | i[34567]86-*-linux*libc1) - tmake_file="${tmake_file} i386/t-gmm_malloc" - ;; i[34567]86-*-linux* | x86_64-*-linux*) tmake_file="${tmake_file} i386/t-pmm_malloc" ;; @@ -2707,10 +2409,6 @@ esac # This block sets nothing except for with_cpu. if test x$with_cpu = x ; then case ${target} in - ep9312-*-*) - # A Cirrus ARM variant. - with_cpu="ep9312" - ;; i386-*-*) with_cpu=i386 ;; @@ -2822,9 +2520,6 @@ if test x$with_cpu = x ; then frv550-*-*linux*) with_cpu=fr550 ;; - m680[012]0-*-*) - with_cpu=`echo ${target} | sed 's/-.*$//'` - ;; m68k*-*-*) case "$with_arch" in "cf") @@ -2844,19 +2539,10 @@ if test x$with_cpu = x ; then esac fi -# Similarly for --with-float -if test x$with_float = x; then - case ${target} in - ep9312-*-*) - with_float=hard - ;; - esac -fi - # Similarly for --with-schedule. if test x$with_schedule = x; then case ${target} in - hppa1* | parisc1*) + hppa1*) # Override default PA8000 scheduling model. with_schedule=7100LC ;; @@ -2987,7 +2673,7 @@ case "${target}" in esac ;; - fido-*-* | m680[012]0-*-* | m68k*-*-*) + fido-*-* | m68k*-*-*) supported_defaults="arch cpu" case "$with_arch" in "" | "m68k"| "cf") @@ -3027,7 +2713,7 @@ case "${target}" in esac ;; - hppa*-*-* | parisc*-*-*) + hppa*-*-*) supported_defaults="arch schedule" case "$with_arch" in @@ -3131,25 +2817,6 @@ case "${target}" in esac ;; - mt-*-*) - supported_defaults="arch" - - case "$with_arch" in - "" \ - | ms1-64-001 \ - | ms1-16-002 \ - | ms1-16-003 \ - | ms2 \ - | "") - # OK - ;; - *) - echo "Unknown arch used in --with-arch=$with_arch" 1>&2 - exit 1 - ;; - esac - ;; - powerpc*-*-* | rs6000-*-*) supported_defaults="cpu float tune" @@ -3307,7 +2974,7 @@ case ${target} in fi ;; - hppa*-*-* | parisc*-*-*) + hppa*-*-*) target_cpu_default2="MASK_BIG_SWITCH" if test x$gas = xyes then @@ -3315,7 +2982,7 @@ case ${target} in fi ;; - fido*-*-* | m680[012]0-*-* | m68k*-*-*) + fido*-*-* | m68k*-*-*) target_cpu_default2=$m68k_cpu_ident if [ x"$m68k_arch_family" != x ]; then tmake_file="m68k/t-$m68k_arch_family $tmake_file" diff --git a/gcc/config/alpha/t-unicosmk b/gcc/config/alpha/t-unicosmk deleted file mode 100644 index 9c52b98..0000000 --- a/gcc/config/alpha/t-unicosmk +++ /dev/null @@ -1,2 +0,0 @@ -# This file is empty for now. - diff --git a/gcc/config/alpha/unicosmk.h b/gcc/config/alpha/unicosmk.h deleted file mode 100644 index 4a24bd5..0000000 --- a/gcc/config/alpha/unicosmk.h +++ /dev/null @@ -1,438 +0,0 @@ -/* Definitions of target machine for GNU compiler, for DEC Alpha on Cray - T3E running Unicos/Mk. - Copyright (C) 2001, 2002, 2004, 2005, 2007 - Free Software Foundation, Inc. - Contributed by Roman Lechtchinsky (rl@cs.tu-berlin.de) - -This file is part of GCC. - -GCC is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 3, or (at your option) -any later version. - -GCC is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GCC; see the file COPYING3. If not see -<http://www.gnu.org/licenses/>. */ - -#undef TARGET_ABI_UNICOSMK -#define TARGET_ABI_UNICOSMK 1 - -/* CAM requires a slash before floating-pointing instruction suffixes. */ - -#undef TARGET_AS_SLASH_BEFORE_SUFFIX -#define TARGET_AS_SLASH_BEFORE_SUFFIX 1 - -/* The following defines are necessary for the standard headers to work - correctly. */ - -#define TARGET_OS_CPP_BUILTINS() \ - do { \ - builtin_define ("__unix"); \ - builtin_define ("_UNICOS=205"); \ - builtin_define ("_CRAY"); \ - builtin_define ("_CRAYT3E"); \ - builtin_define ("_CRAYMPP"); \ - builtin_define ("_CRAYIEEE"); \ - builtin_define ("_ADDR64"); \ - builtin_define ("_LD64"); \ - builtin_define ("__UNICOSMK__"); \ - } while (0) - -#define SHORT_TYPE_SIZE 32 - -#undef INT_TYPE_SIZE -#define INT_TYPE_SIZE 64 - -/* This is consistent with the definition Cray CC uses. */ -#undef WCHAR_TYPE -#define WCHAR_TYPE "int" -#undef WCHAR_TYPE_SIZE -#define WCHAR_TYPE_SIZE 64 - -/* -#define SIZE_TYPE "unsigned int" -#define PTRDIFF_TYPE "int" -*/ - -/* Alphas are operated in big endian mode on the Cray T3E. */ - -#undef BITS_BIG_ENDIAN -#undef BYTES_BIG_ENDIAN -#undef WORDS_BIG_ENDIAN -#define BITS_BIG_ENDIAN 0 -#define BYTES_BIG_ENDIAN 1 -#define WORDS_BIG_ENDIAN 1 - - -/* Every structure's size must be a multiple of this. */ - -#undef STRUCTURE_SIZE_BOUNDARY -#define STRUCTURE_SIZE_BOUNDARY 64 - -/* No data type wants to be aligned rounder than this. */ - -#undef BIGGEST_ALIGNMENT -#define BIGGEST_ALIGNMENT 256 - -/* Include the frame pointer in fixed_regs and call_used_regs as it can't be - used as a general-purpose register even in frameless functions. - ??? The global_regs hack is needed for now because -O2 sometimes tries to - eliminate $15 increments/decrements in frameless functions. */ - -#undef CONDITIONAL_REGISTER_USAGE -#define CONDITIONAL_REGISTER_USAGE \ - do { \ - fixed_regs[15] = 1; \ - call_used_regs[15] = 1; \ - global_regs[15] = 1; \ - } while(0) - -/* The stack frame grows downward. */ - -#define FRAME_GROWS_DOWNWARD 1 - -/* Define the offset between two registers, one to be eliminated, and the - other its replacement, at the start of a routine. This is somewhat - complicated on the T3E which is why we use a function. */ - -#undef INITIAL_ELIMINATION_OFFSET -#define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \ - do { \ - (OFFSET) = unicosmk_initial_elimination_offset ((FROM), (TO)); \ - } while (0) - - -/* Define this if stack space is still allocated for a parameter passed - in a register. On the T3E, stack space is preallocated for all outgoing - arguments, including those passed in registers. To avoid problems, we - assume that at least 48 bytes (i.e. enough space for all arguments passed - in registers) are allocated. */ - -#define REG_PARM_STACK_SPACE(DECL) 48 -#define OUTGOING_REG_PARM_STACK_SPACE(FNTYPE) 1 - -/* If an argument can't be passed in registers even though not all argument - registers have been used yet, it is passed on the stack in the space - preallocated for these registers. */ - -#define STACK_PARMS_IN_REG_PARM_AREA - -/* Define a data type for recording info about an argument list - during the scan of that argument list. This data type should - hold all necessary information about the function itself - and about the args processed so far, enough to enable macros - such as FUNCTION_ARG to determine where the next arg should go. - - On Unicos/Mk, this is a structure that contains various information for - the static subroutine information block (SSIB) and the call information - word (CIW). */ - -typedef struct { - - /* The overall number of arguments. */ - int num_args; - - /* The overall size of the arguments in words. */ - int num_arg_words; - - /* The number of words passed in registers. */ - int num_reg_words; - - /* If an argument must be passed in the stack, all subsequent arguments - must be passed there, too. This flag indicates whether this is the - case. */ - int force_stack; - - /* This array indicates whether a word is passed in an integer register or - a floating point one. */ - - /* For each of the 6 register arguments, the corresponding flag in this - array indicates whether the argument is passed in an integer or a - floating point register. */ - int reg_args_type[6]; - -} unicosmk_arg_info; - -#undef CUMULATIVE_ARGS -#define CUMULATIVE_ARGS unicosmk_arg_info - -/* Initialize a variable CUM of type CUMULATIVE_ARGS for a call to a - function whose data type is FNTYPE. For a library call, FNTYPE is 0. */ - -#undef INIT_CUMULATIVE_ARGS -#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT, N_NAMED_ARGS) \ - do { (CUM).num_args = 0; \ - (CUM).num_arg_words = 0; \ - (CUM).num_reg_words = 0; \ - (CUM).force_stack = 0; \ - } while(0) - -/* Update the data in CUM to advance over an argument of mode MODE and data - type TYPE. (TYPE is null for libcalls where that information may not be - available.) - - On Unicos/Mk, at most 6 words can be passed in registers. Structures - which fit in two words are passed in registers, larger structures are - passed on stack. */ - -#undef FUNCTION_ARG_ADVANCE -#define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED) \ -do { \ - int size; \ - \ - size = ALPHA_ARG_SIZE (MODE, TYPE, NAMED); \ - \ - if (size > 2 \ - || (CUM).num_reg_words + size > 6 \ - || targetm.calls.must_pass_in_stack (MODE, TYPE)) \ - (CUM).force_stack = 1; \ - \ - if (! (CUM).force_stack) \ - { \ - int i; \ - int isfloat; \ - isfloat = (GET_MODE_CLASS (MODE) == MODE_COMPLEX_FLOAT \ - || GET_MODE_CLASS (MODE) == MODE_FLOAT); \ - for (i = 0; i < size; i++) \ - { \ - (CUM).reg_args_type[(CUM).num_reg_words] = isfloat; \ - ++(CUM).num_reg_words; \ - } \ - } \ - (CUM).num_arg_words += size; \ - ++(CUM).num_args; \ -} while(0) - -/* This ensures that $15 increments/decrements in leaf functions won't get - eliminated. */ - -#undef EPILOGUE_USES -#define EPILOGUE_USES(REGNO) ((REGNO) == 26 || (REGNO) == 15) - -/* Would have worked, only the stack doesn't seem to be executable -#undef TRAMPOLINE_TEMPLATE -#define TRAMPOLINE_TEMPLATE(FILE) \ -do { fprintf (FILE, "\tbr $1,0\n"); \ - fprintf (FILE, "\tldq $0,12($1)\n"); \ - fprintf (FILE, "\tldq $1,20($1)\n"); \ - fprintf (FILE, "\tjmp $31,(r0)\n"); \ - fprintf (FILE, "\tbis $31,$31,$31\n"); \ - fprintf (FILE, "\tbis $31,$31,$31\n"); \ -} while (0) */ - -/* We don't support nested functions (yet). */ - -#undef TRAMPOLINE_TEMPLATE -#define TRAMPOLINE_TEMPLATE(FILE) gcc_unreachable () - -/* Specify the machine mode that this machine uses for the index in the - tablejump instruction. On Unicos/Mk, we don't support relative case - vectors yet, thus the entries should be absolute addresses. */ - -#undef CASE_VECTOR_MODE -#define CASE_VECTOR_MODE DImode - -#undef CASE_VECTOR_PC_RELATIVE - -/* Define this as 1 if `char' should by default be signed; else as 0. */ -/* #define DEFAULT_SIGNED_CHAR 1 */ - -/* There are no read-only sections on Unicos/Mk. */ - -#undef READONLY_DATA_SECTION_ASM_OP - -/* We take care of this in unicosmk_file_start. */ - -#undef ASM_OUTPUT_SOURCE_FILENAME - -/* This is how to output a label for a jump table. Arguments are the same as - for (*targetm.asm_out.internal_label), except the insn for the jump table is - passed. */ - -#undef ASM_OUTPUT_CASE_LABEL -#define ASM_OUTPUT_CASE_LABEL(FILE,PREFIX,NUM,TABLEINSN) \ - (*targetm.asm_out.internal_label) (FILE, PREFIX, NUM) - -/* CAM has some restrictions with respect to string literals. It won't - accept lines with more that 256 characters which means that we have - to split long strings. Moreover, it only accepts escape sequences of - the form \nnn in the range 0 to 127. We generate .byte directives for - escapes characters greater than 127. And finally, ` must be escaped. */ - -#undef ASM_OUTPUT_ASCII -#define ASM_OUTPUT_ASCII(MYFILE, MYSTRING, MYLENGTH) \ - do { \ - FILE *_hide_asm_out_file = (MYFILE); \ - const unsigned char *_hide_p = (const unsigned char *) (MYSTRING); \ - int _hide_thissize = (MYLENGTH); \ - int _size_so_far = 0; \ - { \ - FILE *asm_out_file = _hide_asm_out_file; \ - const unsigned char *p = _hide_p; \ - int thissize = _hide_thissize; \ - int in_ascii = 0; \ - int i; \ - \ - for (i = 0; i < thissize; i++) \ - { \ - register int c = p[i]; \ - \ - if (c > 127) \ - { \ - if (in_ascii) \ - { \ - fprintf (asm_out_file, "\"\n"); \ - in_ascii = 0; \ - } \ - \ - fprintf (asm_out_file, "\t.byte\t%d\n", c); \ - } \ - else \ - { \ - if (! in_ascii) \ - { \ - fprintf (asm_out_file, "\t.ascii\t\""); \ - in_ascii = 1; \ - _size_so_far = 0; \ - } \ - else if (_size_so_far >= 64) \ - { \ - fprintf (asm_out_file, "\"\n\t.ascii\t\""); \ - _size_so_far = 0; \ - } \ - \ - if (c == '\"' || c == '\\' || c == '`') \ - putc ('\\', asm_out_file); \ - if (c >= ' ') \ - putc (c, asm_out_file); \ - else \ - fprintf (asm_out_file, "\\%.3o", c); \ - ++ _size_so_far; \ - } \ - } \ - if (in_ascii) \ - fprintf (asm_out_file, "\"\n"); \ - } \ - } while(0) - -/* This is how to output an element of a case-vector that is absolute. */ - -#undef ASM_OUTPUT_ADDR_VEC_ELT -#define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE) \ - fprintf (FILE, "\t.quad $L%d\n", (VALUE)) - -/* This is how to output an element of a case-vector that is relative. - (Unicos/Mk does not use such vectors yet). */ - -#undef ASM_OUTPUT_ADDR_DIFF_ELT -#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) gcc_unreachable () - -/* We can't output case vectors in the same section as the function code - because CAM doesn't allow data definitions in code sections. Thus, we - simply record the case vectors and put them in a separate section after - the function. */ - -#define ASM_OUTPUT_ADDR_VEC(LAB,VEC) \ - unicosmk_defer_case_vector ((LAB),(VEC)) - -#define ASM_OUTPUT_ADDR_DIFF_VEC(LAB,VEC) gcc_unreachable () - -/* This is how to output an assembler line that says to advance the location - counter to a multiple of 2**LOG bytes. Annoyingly, CAM always uses zeroes - to fill the unused space which does not work in code sections. We have to - be careful not to use the .align directive in code sections. */ - -#undef ASM_OUTPUT_ALIGN -#define ASM_OUTPUT_ALIGN(STREAM,LOG) unicosmk_output_align (STREAM, LOG) - -/* This is how to advance the location counter by SIZE bytes. */ - -#undef ASM_OUTPUT_SKIP -#define ASM_OUTPUT_SKIP(STREAM,SIZE) \ - fprintf ((STREAM), "\t.byte\t0:"HOST_WIDE_INT_PRINT_UNSIGNED"\n",\ - (SIZE)); - -/* This says how to output an assembler line to define a global common - symbol. We need the alignment information because it has to be supplied - in the section header. */ - -#undef ASM_OUTPUT_COMMON -#define ASM_OUTPUT_ALIGNED_COMMON(FILE, NAME, SIZE, ALIGN) \ - unicosmk_output_common ((FILE), (NAME), (SIZE), (ALIGN)) - -/* This says how to output an assembler line to define a local symbol. */ - -#undef ASM_OUTPUT_LOCAL -#define ASM_OUTPUT_ALIGNED_LOCAL(FILE, NAME, SIZE, ALIGN) \ - do { switch_to_section (data_section); \ - fprintf (FILE, "\t.align\t%d\n", floor_log2 ((ALIGN) / BITS_PER_UNIT));\ - ASM_OUTPUT_LABEL ((FILE), (NAME)); \ - fprintf (FILE, "\t.byte 0:"HOST_WIDE_INT_PRINT_UNSIGNED"\n",(SIZE));\ - } while (0) - -/* CAM does not allow us to declare a symbol as external first and then - define it in the same file later. Thus, we keep a list of all external - references, remove all symbols defined locally from it and output it at - the end of the asm file. */ - -#define ASM_OUTPUT_EXTERNAL(FILE,DECL,NAME) \ - unicosmk_add_extern ((NAME)) - -#define ASM_OUTPUT_EXTERNAL_LIBCALL(STREAM,SYMREF) \ - unicosmk_add_extern (XSTR ((SYMREF), 0)) - -/* This is how to declare an object. We don't have to output anything if - it is a global variable because those go into unique `common' sections - and the section name is globally visible. For local variables, we simply - output the label. In any case, we have to record that no extern - declaration should be generated for the symbol. */ - -#define ASM_DECLARE_OBJECT_NAME(STREAM,NAME,DECL) \ - do { tree name_tree; \ - name_tree = get_identifier ((NAME)); \ - TREE_ASM_WRITTEN (name_tree) = 1; \ - if (!TREE_PUBLIC (DECL)) \ - { \ - assemble_name (STREAM, NAME); \ - fputs (":\n", STREAM); \ - } \ - } while(0) - -/* Switch into a generic section. */ -#define TARGET_ASM_NAMED_SECTION unicosmk_asm_named_section -#define TARGET_ASM_INIT_SECTIONS unicosmk_init_sections - -#undef ASM_OUTPUT_MAX_SKIP_ALIGN -#define ASM_OUTPUT_MAX_SKIP_ALIGN(STREAM,POWER,MAXSKIP) - -#undef NM_FLAGS - -#undef OBJECT_FORMAT_COFF - -/* We cannot generate debugging information on Unicos/Mk. */ - -#undef SDB_DEBUGGING_INFO -#undef MIPS_DEBUGGING_INFO -#undef DBX_DEBUGGING_INFO -#undef DWARF2_DEBUGGING_INFO -#undef DWARF2_UNWIND_INFO -#undef INCOMING_RETURN_ADDR_RTX -#undef PREFERRED_DEBUGGING_TYPE - -/* We don't need a start file. */ - -#undef STARTFILE_SPEC -#define STARTFILE_SPEC "" - -/* These are the libraries we have to link with. - ??? The Craylibs directory should be autoconfed. */ -#undef LIB_SPEC -#define LIB_SPEC "-L/opt/ctl/craylibs/craylibs -lu -lm -lc -lsma" - -#define EH_FRAME_IN_DATA_SECTION 1 diff --git a/gcc/config/arm/kaos-arm.h b/gcc/config/arm/kaos-arm.h deleted file mode 100644 index 7defaff..0000000 --- a/gcc/config/arm/kaos-arm.h +++ /dev/null @@ -1,23 +0,0 @@ -/* Definitions of target machine for GNU compiler. - kaOS on arm architecture version. - Copyright (C) 2003, 2007 Free Software Foundation, Inc. - -This file is part of GCC. - -GCC is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 3, or (at your option) -any later version. - -GCC is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GCC; see the file COPYING3. If not see -<http://www.gnu.org/licenses/>. */ - -#undef TARGET_VERSION -#define TARGET_VERSION fputs (" (ARM/kaOS[ELF])", stderr); - diff --git a/gcc/config/arm/kaos-strongarm.h b/gcc/config/arm/kaos-strongarm.h deleted file mode 100644 index 5c7cfdf..0000000 --- a/gcc/config/arm/kaos-strongarm.h +++ /dev/null @@ -1,23 +0,0 @@ -/* Definitions of target machine for GNU compiler. - kaOS on strongarm architecture version. - Copyright (C) 2003, 2007 Free Software Foundation, Inc. - -This file is part of GCC. - -GCC is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 3, or (at your option) -any later version. - -GCC is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GCC; see the file COPYING3. If not see -<http://www.gnu.org/licenses/>. */ - -#undef TARGET_VERSION -#define TARGET_VERSION fputs (" (StrongARM/kaOS[ELF])", stderr); - diff --git a/gcc/config/arm/strongarm-coff.h b/gcc/config/arm/strongarm-coff.h deleted file mode 100644 index f4cc320..0000000 --- a/gcc/config/arm/strongarm-coff.h +++ /dev/null @@ -1,27 +0,0 @@ -/* Definitions for StrongARM systems using COFF - Copyright (C) 1999, 2007 Free Software Foundation, Inc. - Contributed by Catherine Moore <clm@cygnus.com> - - This file is part of GCC. - - GCC is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published - by the Free Software Foundation; either version 3, or (at your - option) any later version. - - GCC is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public - License for more details. - - You should have received a copy of the GNU General Public License - along with GCC; see the file COPYING3. If not see - <http://www.gnu.org/licenses/>. */ - -/* Run-time Target Specification. */ -#ifndef SUBTARGET_CPU_DEFAULT -#define SUBTARGET_CPU_DEFAULT TARGET_CPU_strongarm -#endif - -#undef TARGET_VERSION -#define TARGET_VERSION fputs (" (StrongARM/COFF)", stderr); diff --git a/gcc/config/arm/strongarm-elf.h b/gcc/config/arm/strongarm-elf.h deleted file mode 100644 index 7f34486..0000000 --- a/gcc/config/arm/strongarm-elf.h +++ /dev/null @@ -1,29 +0,0 @@ -/* Definitions for non-Linux based StrongARM systems using ELF - Copyright (C) 1999, 2001, 2007 Free Software Foundation, Inc. - Contributed by Catherine Moore <clm@cygnus.com> - - This file is part of GCC. - - GCC is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published - by the Free Software Foundation; either version 3, or (at your - option) any later version. - - GCC is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public - License for more details. - - You should have received a copy of the GNU General Public License - along with GCC; see the file COPYING3. If not see - <http://www.gnu.org/licenses/>. */ - -/* Run-time Target Specification. */ -#ifndef TARGET_VERSION -#define TARGET_VERSION fputs (" (StrongARM/ELF non-Linux)", stderr); -#endif - -#ifndef SUBTARGET_CPU_DEFAULT -#define SUBTARGET_CPU_DEFAULT TARGET_CPU_strongarm -#endif - diff --git a/gcc/config/arm/strongarm-pe.h b/gcc/config/arm/strongarm-pe.h deleted file mode 100644 index a995a01..0000000 --- a/gcc/config/arm/strongarm-pe.h +++ /dev/null @@ -1,22 +0,0 @@ -/* Definitions of target machine for GNU compiler, for ARM with PE obj format. - Copyright (C) 1999, 2007 Free Software Foundation, Inc. - Contributed by Doug Evans (dje@cygnus.com). - - This file is part of GCC. - - GCC is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published - by the Free Software Foundation; either version 3, or (at your - option) any later version. - - GCC is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public - License for more details. - - You should have received a copy of the GNU General Public License - along with GCC; see the file COPYING3. If not see - <http://www.gnu.org/licenses/>. */ - -#undef TARGET_VERSION -#define TARGET_VERSION fputs (" (StrongARM/PE)", stderr); diff --git a/gcc/config/arm/t-strongarm-pe b/gcc/config/arm/t-strongarm-pe deleted file mode 100644 index 2e4732f..0000000 --- a/gcc/config/arm/t-strongarm-pe +++ /dev/null @@ -1,38 +0,0 @@ -LIB1ASMSRC = arm/lib1funcs.asm -LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_tls _bb_init_func - -# We want fine grained libraries, so use the new code to build the -# floating point emulation libraries. -FPBIT = fp-bit.c -DPBIT = dp-bit.c - -fp-bit.c: $(srcdir)/config/fp-bit.c - echo '#define FLOAT' > fp-bit.c - echo '#ifndef __ARMEB__' >> fp-bit.c - echo '#define FLOAT_BIT_ORDER_MISMATCH' >> fp-bit.c - echo '#endif' >> fp-bit.c - cat $(srcdir)/config/fp-bit.c >> fp-bit.c - -dp-bit.c: $(srcdir)/config/fp-bit.c - echo '#ifndef __ARMEB__' > dp-bit.c - echo '#define FLOAT_BIT_ORDER_MISMATCH' >> dp-bit.c - echo '#define FLOAT_WORD_ORDER_MISMATCH' >> dp-bit.c - echo '#endif' >> dp-bit.c - cat $(srcdir)/config/fp-bit.c >> dp-bit.c - -pe.o: $(srcdir)/config/arm/pe.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ - $(RTL_H) output.h flags.h $(TREE_H) expr.h toplev.h $(TM_P_H) - $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(srcdir)/config/arm/pe.c - -MULTILIB_OPTIONS = mhard-float/msoft-float -MULTILIB_DIRNAMES = fpu soft -MULTILIB_MATCHES = -EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o - -LIBGCC = stmp-multilib -INSTALL_LIBGCC = install-multilib - -# Currently there is a bug somewhere in GCC's alias analysis -# or scheduling code that is breaking _fpmul_parts in fp-bit.c. -# Disabling function inlining is a workaround for this problem. -TARGET_LIBGCC2_CFLAGS = -fno-inline diff --git a/gcc/config/arm/t-xscale-coff b/gcc/config/arm/t-xscale-coff deleted file mode 100644 index e2331a0..0000000 --- a/gcc/config/arm/t-xscale-coff +++ /dev/null @@ -1,45 +0,0 @@ -LIB1ASMSRC = arm/lib1funcs.asm -LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_tls _bb_init_func _call_via_rX _interwork_call_via_rX - -# We want fine grained libraries, so use the new code to build the -# floating point emulation libraries. -FPBIT = fp-bit.c -DPBIT = dp-bit.c - -fp-bit.c: $(srcdir)/config/fp-bit.c - echo '#define FLOAT' > fp-bit.c - echo '#ifndef __ARMEB__' >> fp-bit.c - echo '#define FLOAT_BIT_ORDER_MISMATCH' >> fp-bit.c - echo '#endif' >> fp-bit.c - cat $(srcdir)/config/fp-bit.c >> fp-bit.c - -dp-bit.c: $(srcdir)/config/fp-bit.c - echo '#ifndef __ARMEB__' > dp-bit.c - echo '#define FLOAT_BIT_ORDER_MISMATCH' >> dp-bit.c - echo '#define FLOAT_WORD_ORDER_MISMATCH' >> dp-bit.c - echo '#endif' >> dp-bit.c - cat $(srcdir)/config/fp-bit.c >> dp-bit.c - -MULTILIB_OPTIONS = mbig-endian -MULTILIB_DIRNAMES = be -MULTILIB_EXCEPTIONS = -MULTILIB_MATCHES = mbig-endian=mbe mlittle-endian=mle - -# Note XScale does not support hard FP - -MULTILIB_OPTIONS += mthumb-interwork -MULTILIB_DIRNAMES += interwork - -MULTILIB_OPTIONS += mthumb -MULTILIB_DIRNAMES += thumb -MULTILIB_EXCEPTIONS += *mhard-float/*mthumb* - -MULTILIB_REDUNDANT_DIRS = interwork/thumb=thumb - -LIBGCC = stmp-multilib -INSTALL_LIBGCC = install-multilib - -# Currently there is a bug somewhere in GCC's alias analysis -# or scheduling code that is breaking _fpmul_parts in fp-bit.c. -# Disabling function inlining is a workaround for this problem. -TARGET_LIBGCC2_CFLAGS = -fno-inline diff --git a/gcc/config/arm/t-xscale-elf b/gcc/config/arm/t-xscale-elf deleted file mode 100644 index d7a8124..0000000 --- a/gcc/config/arm/t-xscale-elf +++ /dev/null @@ -1,66 +0,0 @@ -LIB1ASMSRC = arm/lib1funcs.asm -LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_tls _bb_init_func _call_via_rX _interwork_call_via_rX - -# We want fine grained libraries, so use the new code to build the -# floating point emulation libraries. -FPBIT = fp-bit.c -DPBIT = dp-bit.c - -fp-bit.c: $(srcdir)/config/fp-bit.c - echo '#define FLOAT' > fp-bit.c - echo '#ifndef __ARMEB__' >> fp-bit.c - echo '#define FLOAT_BIT_ORDER_MISMATCH' >> fp-bit.c - echo '#endif' >> fp-bit.c - cat $(srcdir)/config/fp-bit.c >> fp-bit.c - -dp-bit.c: $(srcdir)/config/fp-bit.c - echo '#ifndef __ARMEB__' > dp-bit.c - echo '#define FLOAT_BIT_ORDER_MISMATCH' >> dp-bit.c - echo '#define FLOAT_WORD_ORDER_MISMATCH' >> dp-bit.c - echo '#endif' >> dp-bit.c - cat $(srcdir)/config/fp-bit.c >> dp-bit.c - -MULTILIB_OPTIONS = mbig-endian -MULTILIB_DIRNAMES = be -MULTILIB_EXCEPTIONS = -MULTILIB_MATCHES = mbig-endian=mbe mlittle-endian=mle - -# Note XScale does not support hard FP - -MULTILIB_OPTIONS += mthumb-interwork -MULTILIB_DIRNAMES += interwork - -MULTILIB_OPTIONS += mthumb -MULTILIB_DIRNAMES += thumb -MULTILIB_EXCEPTIONS += *mhard-float/*mthumb* - -MULTILIB_REDUNDANT_DIRS = interwork/thumb=thumb - -# The iWMMXt multilibs are suppressed for now because gcc only -# supports generating them with the IWMMXT or AAPCS ABIs, neither of -# which is the default. Until GCC can generate code for an iWMMXt -# which will work with the default ABI it is not possible to safely -# generate these multilibs. -# -# MULTILIB_OPTIONS += mcpu=iwmmxt -# MULTILIB_DIRNAMES += iwmmxt -# MULTILIB_REDUNDANT_DIRS += interwork/thumb/iwmmxt=thumb - -EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o crti.o crtn.o - -LIBGCC = stmp-multilib -INSTALL_LIBGCC = install-multilib - -# Currently there is a bug somewhere in GCC's alias analysis -# or scheduling code that is breaking _fpmul_parts in fp-bit.c. -# Disabling function inlining is a workaround for this problem. -TARGET_LIBGCC2_CFLAGS = -fno-inline - -# Assemble startup files. -$(T)crti.o: $(srcdir)/config/arm/crti.asm $(GCC_PASSES) - $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(MULTILIB_CFLAGS) $(INCLUDES) \ - -c -o $(T)crti.o -x assembler-with-cpp $(srcdir)/config/arm/crti.asm - -$(T)crtn.o: $(srcdir)/config/arm/crtn.asm $(GCC_PASSES) - $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(MULTILIB_CFLAGS) $(INCLUDES) \ - -c -o $(T)crtn.o -x assembler-with-cpp $(srcdir)/config/arm/crtn.asm diff --git a/gcc/config/arm/xscale-coff.h b/gcc/config/arm/xscale-coff.h deleted file mode 100644 index a6992aa..0000000 --- a/gcc/config/arm/xscale-coff.h +++ /dev/null @@ -1,33 +0,0 @@ -/* Definitions for XScale systems using COFF - Copyright (C) 1999, 2000, 2001, 2007 Free Software Foundation, Inc. - Contributed by Catherine Moore <clm@cygnus.com> - - This file is part of GCC. - - GCC is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published - by the Free Software Foundation; either version 3, or (at your - option) any later version. - - GCC is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public - License for more details. - - You should have received a copy of the GNU General Public License - along with GCC; see the file COPYING3. If not see - <http://www.gnu.org/licenses/>. */ - -/* Run-time Target Specification. */ -#undef SUBTARGET_CPU_DEFAULT -#define SUBTARGET_CPU_DEFAULT TARGET_CPU_xscale - -#undef SUBTARGET_EXTRA_ASM_SPEC -#define SUBTARGET_EXTRA_ASM_SPEC "%{!mcpu=*:-mcpu=xscale}" - -#undef MULTILIB_DEFAULTS -#define MULTILIB_DEFAULTS \ - { "mlittle-endian", "mno-thumb-interwork", "marm" } - -#undef TARGET_VERSION -#define TARGET_VERSION fputs (" (XScale/COFF)", stderr); diff --git a/gcc/config/arm/xscale-elf.h b/gcc/config/arm/xscale-elf.h deleted file mode 100644 index 4fcd5cb..0000000 --- a/gcc/config/arm/xscale-elf.h +++ /dev/null @@ -1,58 +0,0 @@ -/* Definitions for XScale architectures using ELF - Copyright (C) 1999, 2000, 2001, 2007 Free Software Foundation, Inc. - Contributed by Catherine Moore <clm@cygnus.com> - - This file is part of GCC. - - GCC is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published - by the Free Software Foundation; either version 3, or (at your - option) any later version. - - GCC is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public - License for more details. - - You should have received a copy of the GNU General Public License - along with GCC; see the file COPYING3. If not see - <http://www.gnu.org/licenses/>. */ - -/* Run-time Target Specification. */ -#ifndef TARGET_VERSION -#define TARGET_VERSION fputs (" (XScale/ELF non-Linux)", stderr); -#endif - -#ifndef SUBTARGET_CPU_DEFAULT -#define SUBTARGET_CPU_DEFAULT TARGET_CPU_xscale -#endif - -/* Note - there are three possible -mfpu= arguments that can be passed to - the assembler: - - -mfpu=softvfp This is the default. It indicates thats doubles are - stored in a format compatible with the VFP - specification. This is the newer double format, whereby - the endian-ness of the doubles matches the endian-ness - of the memory architecture. - - -mfpu=fpa This is when -mhard-float is specified. - [It is not known if any XScale's have been made with - hardware floating point support, but nevertheless this - is what happens]. - - -mfpu=softfpa This is when -msoft-float is specified. - This is the normal behavior of other arm configurations, - which for backwards compatibility purposes default to - supporting the old FPA format which was always big - endian, regardless of the endian-ness of the memory - system. */ - -#define SUBTARGET_EXTRA_ASM_SPEC "%{!mcpu=*:-mcpu=xscale} \ - %{mhard-float:-mfpu=fpa} \ - %{!mhard-float: %{msoft-float:-mfpu=softfpa;:-mfpu=softvfp}}" - -#ifndef MULTILIB_DEFAULTS -#define MULTILIB_DEFAULTS \ - { "mlittle-endian", "mno-thumb-interwork", "marm", "msoft-float" } -#endif diff --git a/gcc/config/chorus.h b/gcc/config/chorus.h deleted file mode 100644 index 4d51e64..0000000 --- a/gcc/config/chorus.h +++ /dev/null @@ -1,40 +0,0 @@ -/* Definitions of target machine for GNU compiler. - Sun Chorus OS big-endian - Copyright (c) 2001, 2007 Free Software Foundation, Inc. - -This file is part of GCC. - -GCC is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 3, or (at your option) -any later version. - -GCC is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GCC; see the file COPYING3. If not see -<http://www.gnu.org/licenses/>. */ - -#define DWARF2_DEBUGGING_INFO 1 - -#undef PREFERRED_DEBUGGING_TYPE -#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG - -#undef TARGET_VERSION -#define TARGET_VERSION fprintf (stderr, " (Sun Chorus OS Embedded)"); - -#undef SIZE_TYPE -#define SIZE_TYPE "unsigned int" - -#undef PTRDIFF_TYPE -#define PTRDIFF_TYPE "int" - -/* Type used for wchar_t, as a string used in a declaration. */ -#undef WCHAR_TYPE -#define WCHAR_TYPE "int" - -#undef LINK_SPEC -#define LINK_SPEC "" diff --git a/gcc/config/cris/aout.h b/gcc/config/cris/aout.h deleted file mode 100644 index 32533d6..0000000 --- a/gcc/config/cris/aout.h +++ /dev/null @@ -1,391 +0,0 @@ -/* Definitions for GCC. Part of the machine description for CRIS. - Copyright (C) 2001, 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc. - Contributed by Axis Communications. Written by Hans-Peter Nilsson. - -This file is part of GCC. - -GCC is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 3, or (at your option) -any later version. - -GCC is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GCC; see the file COPYING3. If not see -<http://www.gnu.org/licenses/>. */ - -/* After the first "Node:" comment comes all preprocessor directives and - attached declarations described in the info files, the "Using and - Porting GCC" manual (uapgcc), in the same order as found in the "Target - macros" section in the gcc-2.9x CVS edition of 2000-03-17. FIXME: Not - really, but needs an update anyway. - - There is no generic copy-of-uapgcc comment, you'll have to see uapgcc - for that. If applicable, there is a CRIS-specific comment. The order - of macro definitions follow the order in the manual. Every section in - the manual (node in the info pages) has an introductory `Node: - <subchapter>' comment. If no macros are defined for a section, only - the section-comment is present. */ - -/* This file defines the macros for a.out that are not covered by cris.h. - Many macros are copied from elfos.h and should be in some generic - config/gas-aout.h. */ - -/* Node: Driver */ - -#undef STARTFILE_SPEC -#define STARTFILE_SPEC \ - "%{melinux:crt0.o%s}\ - %{!melinux:%{sim*:crt1.o%s}%{!sim*:crt0.o%s}}" - -/* Override cris.h define. */ -#undef ENDFILE_SPEC - -#undef CRIS_CPP_SUBTARGET_SPEC -#define CRIS_CPP_SUBTARGET_SPEC \ - "%{melinux:-D__gnu_linux__ -D__linux__ -D__unix__ -D__elinux__ -D__uclinux__\ - %{!ansi:%{!std=*:%{!undef:-Dlinux -Dunix -Delinux -Duclinux}}}}\ - %{mbest-lib-options:\ - %{!moverride-best-lib-options:\ - %{!march=*:%{!metrax*:%{!mcpu=*:-D__tune_v8 -D__CRIS_arch_tune=8}}}}}" - -#undef CRIS_CC1_SUBTARGET_SPEC -#define CRIS_CC1_SUBTARGET_SPEC \ - "%{mbest-lib-options:\ - %{!moverride-best-lib-options:\ - %{!march=*:%{!mcpu=*:-mtune=v8}}}}" - -#undef CRIS_ASM_SUBTARGET_SPEC -#define CRIS_ASM_SUBTARGET_SPEC "--em=crisaout" - -#undef CRIS_LINK_SUBTARGET_SPEC -#define CRIS_LINK_SUBTARGET_SPEC \ - "-mcrisaout\ - %{sim2:%{!T*:-Tdata 0x4000000 -Tbss 0x8000000}}\ - %{melinux:-Ur -d\ - %{!shlib:%{!symbolic:-Bstatic}}\ - %{shlib:-Bdynamic}\ - %{symbolic:-Bdynamic}\ - %{static:-Bstatic}}\ - %{melinux-stacksize=*:-defsym __Stacksize=%*}" - -/* Previously controlled by target_flags. */ -#undef TARGET_ELF -#define TARGET_ELF 0 - -#undef CRIS_SUBTARGET_HANDLE_OPTION -#define CRIS_SUBTARGET_HANDLE_OPTION(CODE, ARG, VALUE) \ - do \ - { \ - switch (CODE) \ - { \ - case OPT_melinux: \ - target_flags \ - |= (MASK_SVINTO \ - + MASK_STACK_ALIGN \ - + MASK_CONST_ALIGN \ - + MASK_DATA_ALIGN \ - + MASK_ETRAX4_ADD \ - + MASK_ALIGN_BY_32); \ - break; \ - \ - default: \ - break; \ - } \ - } \ - while (0) - -#undef CRIS_SUBTARGET_DEFAULT -#define CRIS_SUBTARGET_DEFAULT 0 - - -/* Node: Run-time Target */ - -/* For the cris-*-aout subtarget. */ -#undef TARGET_OS_CPP_BUILTINS -#define TARGET_OS_CPP_BUILTINS() \ - do \ - { \ - builtin_define ("__AOUT__"); \ - } \ - while (0) - - -/* Node: Storage Layout */ - -/* All sections but the .bss is rounded up to a 4-byte multiple size. */ -#define MAX_OFILE_ALIGNMENT 32 - - -/* Node: Data Output */ - -#define ESCAPES \ -"\1\1\1\1\1\1\1\1btn\1fr\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\ -\0\0\"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\\\0\0\0\ -\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\ -\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\ -\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\ -\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\ -\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1" - -/* Some svr4 assemblers have a limit on the number of characters which - can appear in the operand of a .string directive. If your assembler - has such a limitation, you should define STRING_LIMIT to reflect that - limit. Note that at least some svr4 assemblers have a limit on the - actual number of bytes in the double-quoted string, and that they - count each character in an escape sequence as one byte. Thus, an - escape sequence like \377 would count as four bytes. - - If your target assembler doesn't support the .string directive, you - should define this to zero. */ - -#define STRING_LIMIT ((unsigned) 256) - -#define STRING_ASM_OP "\t.string\t" -#define ASCII_DATA_ASM_OP "\t.ascii\t" -#define TYPE_ASM_OP "\t.type\t" -#define SIZE_ASM_OP "\t.size\t" -#define TYPE_OPERAND_FMT "@%s" - -/* The routine used to output NUL terminated strings. We use a special - version of this for most svr4 targets because doing so makes the - generated assembly code more compact (and thus faster to assemble) - as well as more readable, especially for targets like the i386 - (where the only alternative is to output character sequences as - comma separated lists of numbers). */ - -#define ASM_OUTPUT_LIMITED_STRING(FILE, STR) \ - do \ - { \ - register const unsigned char *_limited_str = \ - (const unsigned char *) (STR); \ - register unsigned ch; \ - \ - fprintf ((FILE), "%s\"", STRING_ASM_OP); \ - \ - for (; (ch = *_limited_str); _limited_str++) \ - { \ - register int escape; \ - \ - switch (escape = ESCAPES[ch]) \ - { \ - case 0: \ - putc (ch, (FILE)); \ - break; \ - case 1: \ - fprintf ((FILE), "\\%03o", ch); \ - break; \ - default: \ - putc ('\\', (FILE)); \ - putc (escape, (FILE)); \ - break; \ - } \ - } \ - \ - fprintf ((FILE), "\"\n"); \ - } \ - while (0) - -/* The routine used to output sequences of byte values. We use a special - version of this for most svr4 targets because doing so makes the - generated assembly code more compact (and thus faster to assemble) - as well as more readable. Note that if we find subparts of the - character sequence which end with NUL (and which are shorter than - STRING_LIMIT) we output those using ASM_OUTPUT_LIMITED_STRING. */ - -#undef ASM_OUTPUT_ASCII -#define ASM_OUTPUT_ASCII(FILE, STR, LENGTH) \ - do \ - { \ - register const unsigned char *_ascii_bytes = \ - (const unsigned char *) (STR); \ - register const unsigned char *limit = _ascii_bytes + (LENGTH); \ - register unsigned bytes_in_chunk = 0; \ - \ - for (; _ascii_bytes < limit; _ascii_bytes++) \ - { \ - register const unsigned char *p; \ - \ - if (bytes_in_chunk >= 60) \ - { \ - fprintf ((FILE), "\"\n"); \ - bytes_in_chunk = 0; \ - } \ - \ - for (p = _ascii_bytes; p < limit && *p != '\0'; p++) \ - continue; \ - \ - if (p < limit && (p - _ascii_bytes) <= (long)STRING_LIMIT) \ - { \ - if (bytes_in_chunk > 0) \ - { \ - fprintf ((FILE), "\"\n"); \ - bytes_in_chunk = 0; \ - } \ - \ - ASM_OUTPUT_LIMITED_STRING ((FILE), _ascii_bytes); \ - _ascii_bytes = p; \ - } \ - else \ - { \ - register int escape; \ - register unsigned ch; \ - \ - if (bytes_in_chunk == 0) \ - fprintf ((FILE), "%s\"", ASCII_DATA_ASM_OP); \ - \ - switch (escape = ESCAPES[ch = *_ascii_bytes]) \ - { \ - case 0: \ - putc (ch, (FILE)); \ - bytes_in_chunk++; \ - break; \ - case 1: \ - fprintf ((FILE), "\\%03o", ch); \ - bytes_in_chunk += 4; \ - break; \ - default: \ - putc ('\\', (FILE)); \ - putc (escape, (FILE)); \ - bytes_in_chunk += 2; \ - break; \ - } \ - } \ - } \ - \ - if (bytes_in_chunk > 0) \ - fprintf ((FILE), "\"\n"); \ - } \ - while (0) - - -/* Node: Label Output */ - -#define SET_ASM_OP "\t.set\t" - -#define ASM_OUTPUT_EXTERNAL_LIBCALL(FILE, FUN) \ - (*targetm.asm_out.globalize_label) (FILE, XSTR (FUN, 0)) - -#define ASM_WEAKEN_LABEL(FILE, NAME) \ - do \ - { \ - fputs ("\t.weak\t", (FILE)); \ - assemble_name ((FILE), (NAME)); \ - fputc ('\n', (FILE)); \ - } \ - while (0) - -#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \ - do \ - { \ - ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "function"); \ - ASM_OUTPUT_LABEL(FILE, NAME); \ - } \ - while (0) - -#define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL) \ - do \ - { \ - HOST_WIDE_INT size; \ - \ - ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "object"); \ - \ - size_directive_output = 0; \ - if (!flag_inhibit_size_directive \ - && (DECL) && DECL_SIZE (DECL)) \ - { \ - size_directive_output = 1; \ - size = int_size_in_bytes (TREE_TYPE (DECL)); \ - ASM_OUTPUT_SIZE_DIRECTIVE (FILE, NAME, size); \ - } \ - \ - ASM_OUTPUT_LABEL (FILE, NAME); \ - } \ - while (0) - -#undef ASM_FINISH_DECLARE_OBJECT -#define ASM_FINISH_DECLARE_OBJECT(FILE, DECL, TOP_LEVEL, AT_END)\ - do \ - { \ - const char *name = XSTR (XEXP (DECL_RTL (DECL), 0), 0); \ - HOST_WIDE_INT size; \ - \ - if (!flag_inhibit_size_directive \ - && DECL_SIZE (DECL) \ - && ! AT_END && TOP_LEVEL \ - && DECL_INITIAL (DECL) == error_mark_node \ - && !size_directive_output) \ - { \ - size_directive_output = 1; \ - size = int_size_in_bytes (TREE_TYPE (DECL)); \ - ASM_OUTPUT_SIZE_DIRECTIVE (FILE, name, size); \ - } \ - } \ - while (0) - -#define ASM_DECLARE_FUNCTION_SIZE(FILE, FNAME, DECL) \ - do \ - { \ - if (!flag_inhibit_size_directive) \ - ASM_OUTPUT_MEASURED_SIZE (FILE, FNAME); \ - } \ - while (0) - -/* The configure machinery invokes the assembler without options, which is - not how gcc invokes it. Without options, the multi-target assembler - will probably be found, which is ELF by default. To counter that, we - need to override ELF auto-host.h config stuff which we know collides - with a.out. */ -#undef HAVE_GAS_HIDDEN - - -/* Node: Alignment Output */ - -#define SKIP_ASM_OP "\t.zero\t" - -#undef ASM_OUTPUT_SKIP -#define ASM_OUTPUT_SKIP(FILE, SIZE) \ - fprintf (FILE, "%s%u\n", SKIP_ASM_OP, (int)(SIZE)) - -/* Node: All Debuggers */ - -#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG - - -/* Node: Misc */ - -#define HANDLE_SYSV_PRAGMA 1 - -/* In theory, this one isn't necessary, but over time, external tools have - been primed on names with "." rather than "$". */ -#define NO_DOLLAR_IN_LABEL - -/* These are undocumented, but to keep a single - CRIS_ASM_OUTPUT_ALIGNED_DECL_COMMON, we set this to an asm that will - emit an error if ever output. It will not be emitted for a.out modulo - careless hacking. */ -#define COMMON_ASM_OP "\t.err\t" -#define LOCAL_ASM_OP "\t.err\t" - -#if defined(__CRIS__) && defined (__AOUT__) && defined (IN_GCC) - -#define CRIS_ABI_VERSION_SYMBOL_STRING ".$CRIS_ABI_V2" - -/* Make all a.out library functions have undefined references to the - .$CRIS_ABI_V2 symbol, so it will be picked up. Used by GDB. GDB has - a bug with reading a.out symbols; it does not see the GNU weak - extensions, so we can't have .$CRIS_ABI_V2 weak. Weak. */ -__asm__ (".set .$abi_referer," CRIS_ABI_VERSION_SYMBOL_STRING); -#endif - -/* - * Local variables: - * eval: (c-set-style "gnu") - * indent-tabs-mode: t - * End: - */ diff --git a/gcc/config/cris/aout.opt b/gcc/config/cris/aout.opt deleted file mode 100644 index d566c21..0000000 --- a/gcc/config/cris/aout.opt +++ /dev/null @@ -1,33 +0,0 @@ -; a.out-specific options for the CRIS port of the compiler. - -; Copyright (C) 2005, 2007 Free Software Foundation, Inc. -; -; This file is part of GCC. -; -; GCC is free software; you can redistribute it and/or modify it under -; the terms of the GNU General Public License as published by the Free -; Software Foundation; either version 3, or (at your option) any later -; version. -; -; GCC is distributed in the hope that it will be useful, but WITHOUT ANY -; WARRANTY; without even the implied warranty of MERCHANTABILITY or -; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -; for more details. -; -; You should have received a copy of the GNU General Public License -; along with GCC; see the file COPYING3. If not see -; <http://www.gnu.org/licenses/>. - -; Legacy option. -maout -Target Report RejectNegative Undocumented - -melinux -Target Report RejectNegative -Compile for the MMU-less Etrax 100-based elinux system - -;; We don't parse it currently; it's just passed on to the linker. -;; We might want to do something here someday. -melinux-stacksize= -Target Report RejectNegative Joined Var(cris_elinux_stacksize_str) --melinux-stacksize=SIZE For elinux, request a specified stack-size for this program diff --git a/gcc/config/cris/t-aout b/gcc/config/cris/t-aout deleted file mode 100644 index a21052e..0000000 --- a/gcc/config/cris/t-aout +++ /dev/null @@ -1,12 +0,0 @@ -LIB2FUNCS_STATIC_EXTRA = \ - tmpabi_symbol.c $(srcdir)/config/cris/mulsi3.asm - -MULTILIB_OPTIONS = melinux -MULTILIB_DIRNAMES = elinux -MULTILIB_EXTRA_OPTS = mbest-lib-options - -INSTALL_LIBGCC = install-multilib -LIBGCC = stmp-multilib - -tmpabi_symbol.c: $(srcdir)/config/cris/cris_abi_symbol.c - cp $(srcdir)/config/cris/cris_abi_symbol.c $@ diff --git a/gcc/config/i386/beos-elf.h b/gcc/config/i386/beos-elf.h deleted file mode 100644 index 7a9d988..0000000 --- a/gcc/config/i386/beos-elf.h +++ /dev/null @@ -1,234 +0,0 @@ -/* Definitions for Intel x86 running BeOS - Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2007 - Free Software Foundation, Inc. - -This file is part of GCC. - -GCC is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 3, or (at your option) -any later version. - -GCC is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GCC; see the file COPYING3. If not see -<http://www.gnu.org/licenses/>. */ - - -#define TARGET_VERSION fprintf (stderr, " (i386 BeOS/ELF)"); - -/* Change debugging to Dwarf2. */ -#undef PREFERRED_DEBUGGING_TYPE -#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG - -/* The SVR4 ABI for the i386 says that records and unions are returned - in memory. */ -#undef DEFAULT_PCC_STRUCT_RETURN -#define DEFAULT_PCC_STRUCT_RETURN 1 - -#undef ASM_COMMENT_START -#define ASM_COMMENT_START " #" - -#undef DBX_REGISTER_NUMBER -#define DBX_REGISTER_NUMBER(n) \ - (TARGET_64BIT ? dbx64_register_map[n] : svr4_dbx_register_map[n]) - -/* Output assembler code to FILE to increment profiler label # LABELNO - for profiling a function entry. */ - -#undef MCOUNT_NAME -#define MCOUNT_NAME "mcount" - -#undef SIZE_TYPE -#define SIZE_TYPE "long unsigned int" - -#undef PTRDIFF_TYPE -#define PTRDIFF_TYPE "long int" - -#undef WCHAR_TYPE -#define WCHAR_TYPE "short unsigned int" - -#undef WCHAR_TYPE_SIZE -#define WCHAR_TYPE_SIZE 16 - -#define TARGET_DECLSPEC 1 - -#define TARGET_OS_CPP_BUILTINS() \ - do \ - { \ - builtin_define ("__BEOS__"); \ - builtin_define ("__INTEL__"); \ - builtin_define ("_X86_"); \ - builtin_define ("__stdcall=__attribute__((__stdcall__))"); \ - builtin_define ("__cdecl=__attribute__((__cdecl__))"); \ - builtin_assert ("system=beos"); \ - } \ - while (0) - -/* BeOS uses lots of multichars, so don't warn about them unless the - user explicitly asks for the warnings with -Wmultichar. Note that - CC1_SPEC is used for both cc1 and cc1plus. */ - -#undef CC1_SPEC -#define CC1_SPEC "%{!no-fpic:%{!fno-pic:%{!fno-pie:%{!fpie:%{!fPIC:%{!fPIE:-fpic}}}}}} %{!Wmultichar: -Wno-multichar} %(cc1_cpu) %{profile:-p}" - -#undef CC1PLUS_SPEC -#define CC1PLUS_SPEC "%{!Wctor-dtor-privacy:-Wno-ctor-dtor-privacy}" - -/* Provide a LINK_SPEC appropriate for BeOS. Here we provide support - for the special GCC options -static and -shared, which allow us to - link things in one of these three modes by applying the appropriate - combinations of options at link-time. */ - -/* If ELF is the default format, we should not use /lib/elf. */ - -#undef LINK_SPEC -#define LINK_SPEC "%{!o*:-o %b} -m elf_i386_be -shared -Bsymbolic %{nostart:-e 0}" - -/* Provide start and end file specs appropriate to glibc. */ - -/* LIB_SPEC for BeOS */ -#undef LIB_SPEC -#define LIB_SPEC "-lnet -lroot" - -/* gcc runtime lib is built into libroot.so on BeOS */ -/* ??? This is gonna be lovely when the next release of gcc has - some new symbol in, so that links start failing. */ -#undef LIBGCC_SPEC -#define LIBGCC_SPEC "" - -#undef STARTFILE_SPEC -#define STARTFILE_SPEC "crti.o%s crtbegin.o%s %{!nostart:start_dyn.o%s} init_term_dyn.o%s %{p:i386-mcount.o%s}" - -#undef ENDFILE_SPEC -#define ENDFILE_SPEC "crtend.o%s crtn.o%s" - -/* A C statement (sans semicolon) to output to the stdio stream - FILE the assembler definition of uninitialized global DECL named - NAME whose size is SIZE bytes and alignment is ALIGN bytes. - Try to use asm_output_aligned_bss to implement this macro. */ - -#define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \ - asm_output_aligned_bss (FILE, DECL, NAME, SIZE, ALIGN) - -/* A C statement to output to the stdio stream FILE an assembler - command to advance the location counter to a multiple of 1<<LOG - bytes if it is within MAX_SKIP bytes. - - This is used to align code labels according to Intel recommendations. */ - -#ifdef HAVE_GAS_MAX_SKIP_P2ALIGN -#define ASM_OUTPUT_MAX_SKIP_ALIGN(FILE,LOG,MAX_SKIP) \ - if ((LOG)!=0) \ - if ((MAX_SKIP)==0) fprintf ((FILE), "\t.p2align %d\n", (LOG)); \ - else fprintf ((FILE), "\t.p2align %d,,%d\n", (LOG), (MAX_SKIP)) -#endif - -/* For native compiler, use standard BeOS include file search paths - rooted in /boot/develop/headers. For a cross compiler, don't - expect the host to use the BeOS directory scheme, and instead look - for the BeOS include files relative to TOOL_INCLUDE_DIR. Yes, we - use ANSI string concatenation here (FIXME) */ - -#ifndef CROSS_DIRECTORY_STRUCTURE -#undef INCLUDE_DEFAULTS -#define INCLUDE_DEFAULTS \ - { \ - { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1 },\ - { GCC_INCLUDE_DIR, "GCC", 0, 0 },\ - { TOOL_INCLUDE_DIR, "BINUTILS", 0, 1}, \ - { "/boot/develop/headers/be/add-ons/graphics", 0, 0, 0 },\ - { "/boot/develop/headers/be/devel", 0, 0, 0 },\ - { "/boot/develop/headers/be/translation", 0, 0, 0 },\ - { "/boot/develop/headers/be/mail", 0, 0, 0 },\ - { "/boot/develop/headers/gnu", 0, 0, 0 },\ - { "/boot/develop/headers/be/drivers", 0, 0, 0 },\ - { "/boot/develop/headers/be/opengl", 0, 0, 0 },\ - { "/boot/develop/headers/be/game", 0, 0, 0 },\ - { "/boot/develop/headers/be/support", 0, 0, 0 },\ - { "/boot/develop/headers/be/storage", 0, 0, 0 },\ - { "/boot/develop/headers/be/kernel", 0, 0, 0 },\ - { "/boot/develop/headers/be/net", 0, 0, 0 },\ - { "/boot/develop/headers/be/midi", 0, 0, 0 },\ - { "/boot/develop/headers/be/midi2", 0, 0, 0 },\ - { "/boot/develop/headers/be/media", 0, 0, 0 },\ - { "/boot/develop/headers/be/interface", 0, 0, 0 },\ - { "/boot/develop/headers/be/device", 0, 0, 0 },\ - { "/boot/develop/headers/be/app", 0, 0, 0 },\ - { "/boot/develop/headers/be/precompiled", 0, 0, 0 },\ - { "/boot/develop/headers/be/add-ons/input_server", 0, 0, 0 },\ - { "/boot/develop/headers/be/add-ons/net_server", 0, 0, 0 },\ - { "/boot/develop/headers/be/add-ons/screen_saver", 0, 0, 0 },\ - { "/boot/develop/headers/be/add-ons/tracker", 0, 0, 0 },\ - { "/boot/develop/headers/be/be_apps/Deskbar", 0, 0, 0 },\ - { "/boot/develop/headers/be/be_apps/NetPositive", 0, 0, 0 },\ - { "/boot/develop/headers/be/be_apps/Tracker", 0, 0, 0 },\ - { "/boot/develop/headers/be/drivers/tty", 0, 0, 0 },\ - { "/boot/develop/headers/be/net/netinet", 0, 0, 0 },\ - { "/boot/develop/headers/be/storage", 0, 0, 0 },\ - { "/boot/develop/headers/be", 0, 0, 0 },\ - { "/boot/develop/headers/cpp", 0, 0, 0 },\ - { "/boot/develop/headers/posix", 0, 0, 0 },\ - { "/boot/develop/headers", 0, 0, 0 }, \ - { 0, 0, 0, 0 } \ - } -#else /* CROSS_DIRECTORY_STRUCTURE */ -#undef INCLUDE_DEFAULTS -#define INCLUDE_DEFAULTS \ - { \ - { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1 },\ - { GCC_INCLUDE_DIR, "GCC", 0, 0 },\ - { TOOL_INCLUDE_DIR, "BINUTILS", 0, 1}, \ - { CROSS_INCLUDE_DIR "/be/add-ons/graphics", 0, 0, 0 },\ - { CROSS_INCLUDE_DIR "/be/devel", 0, 0, 0 },\ - { CROSS_INCLUDE_DIR "/be/translation", 0, 0, 0 },\ - { CROSS_INCLUDE_DIR "/be/mail", 0, 0, 0 },\ - { CROSS_INCLUDE_DIR "/gnu", 0, 0, 0 },\ - { CROSS_INCLUDE_DIR "/be/drivers", 0, 0, 0 },\ - { CROSS_INCLUDE_DIR "/be/opengl", 0, 0, 0 },\ - { CROSS_INCLUDE_DIR "/be/game", 0, 0, 0 },\ - { CROSS_INCLUDE_DIR "/be/support", 0, 0, 0 },\ - { CROSS_INCLUDE_DIR "/be/storage", 0, 0, 0 },\ - { CROSS_INCLUDE_DIR "/be/kernel", 0, 0, 0 },\ - { CROSS_INCLUDE_DIR "/be/net", 0, 0, 0 },\ - { CROSS_INCLUDE_DIR "/be/midi", 0, 0, 0 },\ - { CROSS_INCLUDE_DIR "/be/midi2", 0, 0, 0 },\ - { CROSS_INCLUDE_DIR "/be/media", 0, 0, 0 },\ - { CROSS_INCLUDE_DIR "/be/interface", 0, 0, 0 },\ - { CROSS_INCLUDE_DIR "/be/device", 0, 0, 0 },\ - { CROSS_INCLUDE_DIR "/be/app", 0, 0, 0 },\ - { CROSS_INCLUDE_DIR "/be/precompiled", 0, 0, 0 },\ - { CROSS_INCLUDE_DIR "/be/add-ons/input_server", 0, 0, 0 },\ - { CROSS_INCLUDE_DIR "/be/add-ons/net_server", 0, 0, 0 },\ - { CROSS_INCLUDE_DIR "/be/add-ons/screen_saver", 0, 0, 0 },\ - { CROSS_INCLUDE_DIR "/be/add-ons/tracker", 0, 0, 0 },\ - { CROSS_INCLUDE_DIR "/be/be_apps/Deskbar", 0, 0, 0 },\ - { CROSS_INCLUDE_DIR "/be/be_apps/NetPositive", 0, 0, 0 },\ - { CROSS_INCLUDE_DIR "/be/be_apps/Tracker", 0, 0, 0 },\ - { CROSS_INCLUDE_DIR "/be/drivers/tty", 0, 0, 0 },\ - { CROSS_INCLUDE_DIR "/be/net/netinet", 0, 0, 0 },\ - { CROSS_INCLUDE_DIR "/be/storage", 0, 0, 0 },\ - { CROSS_INCLUDE_DIR "/be", 0, 0, 0 },\ - { CROSS_INCLUDE_DIR "/cpp", 0, 0, 0 },\ - { CROSS_INCLUDE_DIR "/posix", 0, 0, 0 },\ - { CROSS_INCLUDE_DIR , 0, 0, 0 }, \ - { 0, 0, 0, 0 } \ - } -#endif - -/* Whee. LIBRARY_PATH is Be's LD_LIBRARY_PATH, which of course will - cause nasty problems if we override it. */ -#define LIBRARY_PATH_ENV "BELIBRARIES" - -/* BeOS doesn't have a separate math library. */ -#define MATH_LIBRARY "" - -/* BeOS headers are C++-aware (and often use C++). */ -#define NO_IMPLICIT_EXTERN_C - -/* BeOS uses explicit import from shared libraries. */ -#define MULTIPLE_SYMBOL_SPACES 1 diff --git a/gcc/config/i386/kaos-i386.h b/gcc/config/i386/kaos-i386.h deleted file mode 100644 index df1a906..0000000 --- a/gcc/config/i386/kaos-i386.h +++ /dev/null @@ -1,23 +0,0 @@ -/* Definitions of target machine for GCC. - kaOS on ia32 architecture version. - Copyright (C) 2003, 2007 Free Software Foundation, Inc. - -This file is part of GCC. - -GCC is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 3, or (at your option) -any later version. - -GCC is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GCC; see the file COPYING3. If not see -<http://www.gnu.org/licenses/>. */ - -#undef TARGET_VERSION -#define TARGET_VERSION fputs (" (i386/kaOS[ELF])", stderr); - diff --git a/gcc/config/i386/ptx4-i.h b/gcc/config/i386/ptx4-i.h deleted file mode 100644 index 15959af..0000000 --- a/gcc/config/i386/ptx4-i.h +++ /dev/null @@ -1,95 +0,0 @@ -/* Target definitions for GCC for Intel 80386 running Dynix/ptx v4 - Copyright (C) 1996, 2002, 2007 Free Software Foundation, Inc. - - Modified from sysv4.h - Originally written by Ron Guilmette (rfg@netcom.com). - Modified by Tim Wright (timw@sequent.com). - -This file is part of GCC. - -GCC is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 3, or (at your option) -any later version. - -GCC is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GCC; see the file COPYING3. If not see -<http://www.gnu.org/licenses/>. */ - - -#define TARGET_VERSION fprintf (stderr, " (i386 Sequent Dynix/ptx Version 4)"); - -/* The svr4 ABI for the i386 says that records and unions are returned - in memory. */ - -#define SUBTARGET_RETURN_IN_MEMORY(TYPE, FNTYPE) \ - (TYPE_MODE (TYPE) == BLKmode \ - || (VECTOR_MODE_P (TYPE_MODE (TYPE)) && int_size_in_bytes (TYPE) == 8)); - -#define TARGET_OS_CPP_BUILTINS() \ - do \ - { \ - builtin_define_std ("unix"); \ - builtin_define ("_SEQUENT_"); \ - builtin_assert ("system=unix"); \ - builtin_assert ("system=ptx4"); \ - } \ - while (0) - -#undef DBX_REGISTER_NUMBER -#define DBX_REGISTER_NUMBER(n) svr4_dbx_register_map[n] - -/* The routine used to output sequences of byte values. We use a special - version of this for most svr4 targets because doing so makes the - generated assembly code more compact (and thus faster to assemble) - as well as more readable. Note that if we find subparts of the - character sequence which end with NUL (and which are shorter than - STRING_LIMIT) we output those using ASM_OUTPUT_LIMITED_STRING. */ - -#undef ASM_OUTPUT_ASCII -#define ASM_OUTPUT_ASCII(FILE, STR, LENGTH) \ - do \ - { \ - const unsigned char *_ascii_bytes = \ - (const unsigned char *) (STR); \ - const unsigned char *limit = _ascii_bytes + (LENGTH); \ - unsigned bytes_in_chunk = 0; \ - for (; _ascii_bytes < limit; _ascii_bytes++) \ - { \ - const unsigned char *p; \ - if (bytes_in_chunk >= 64) \ - { \ - fputc ('\n', (FILE)); \ - bytes_in_chunk = 0; \ - } \ - for (p = _ascii_bytes; p < limit && *p != '\0'; p++) \ - continue; \ - if (p < limit && (p - _ascii_bytes) <= (long) STRING_LIMIT) \ - { \ - if (bytes_in_chunk > 0) \ - { \ - fputc ('\n', (FILE)); \ - bytes_in_chunk = 0; \ - } \ - ASM_OUTPUT_LIMITED_STRING ((FILE), _ascii_bytes); \ - _ascii_bytes = p; \ - } \ - else \ - { \ - if (bytes_in_chunk == 0) \ - fprintf ((FILE), "\t.byte\t"); \ - else \ - fputc (',', (FILE)); \ - fprintf ((FILE), "0x%02x", *_ascii_bytes); \ - bytes_in_chunk += 5; \ - } \ - } \ - if (bytes_in_chunk > 0) \ - fprintf ((FILE), "\n"); \ - } \ - while (0) diff --git a/gcc/config/i386/sco5.h b/gcc/config/i386/sco5.h deleted file mode 100644 index 4f19fd4..0000000 --- a/gcc/config/i386/sco5.h +++ /dev/null @@ -1,311 +0,0 @@ -/* Definitions for Intel 386 running SCO Unix System V 3.2 Version 5. - Copyright (C) 1992, 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004, - 2007 Free Software Foundation, Inc. - Contributed by Kean Johnston (jkj@sco.com) - -This file is part of GCC. - -GCC is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 3, or (at your option) -any later version. - -GCC is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GCC; see the file COPYING3. If not see -<http://www.gnu.org/licenses/>. */ - -#undef TARGET_VERSION -#define TARGET_VERSION fprintf (stderr, " (i386, SCO OpenServer 5 Syntax)"); - -#undef ASM_QUAD - -#undef GLOBAL_ASM_OP -#define GLOBAL_ASM_OP "\t.globl\t" - -#undef BSS_SECTION_ASM_OP -#define BSS_SECTION_ASM_OP "\t.section\t.bss, \"aw\", @nobits" - -/* - * NOTE: We really do want CTORS_SECTION_ASM_OP and DTORS_SECTION_ASM_OP. - * Here's the reason why. If we dont define them, and we dont define them - * to always emit to the same section, the default is to emit to "named" - * ctors and dtors sections. This would be great if we could use GNU ld, - * but we can't. The native linker could possibly be trained to coalesce - * named ctors sections, but that hasn't been done either. So if we don't - * define these, many C++ ctors and dtors dont get run, because they never - * wind up in the ctors/dtors arrays. - */ -#define CTORS_SECTION_ASM_OP "\t.section\t.ctors, \"aw\"" -#define DTORS_SECTION_ASM_OP "\t.section\t.dtors, \"aw\"" - -#define TARGET_ASM_FILE_START_FILE_DIRECTIVE true -#undef X86_FILE_START_VERSION_DIRECTIVE -#define X86_FILE_START_VERSION_DIRECTIVE true - -/* A C statement (sans semicolon) to output to the stdio stream - FILE the assembler definition of uninitialized global DECL named - NAME whose size is SIZE bytes and alignment is ALIGN bytes. - Try to use asm_output_aligned_bss to implement this macro. */ - -#define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \ - asm_output_aligned_bss (FILE, DECL, NAME, SIZE, ALIGN) - -#undef DBX_REGISTER_NUMBER -#define DBX_REGISTER_NUMBER(n) svr4_dbx_register_map[n] - -#define DWARF2_DEBUGGING_INFO 1 -#define DBX_DEBUGGING_INFO 1 - -#undef PREFERRED_DEBUGGING_TYPE -#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG - -#undef DWARF2_UNWIND_INFO -#define DWARF2_UNWIND_INFO 1 - -#undef NO_IMPLICIT_EXTERN_C -#define NO_IMPLICIT_EXTERN_C 1 - -#undef SWITCH_TAKES_ARG -#define SWITCH_TAKES_ARG(CHAR) \ - (DEFAULT_SWITCH_TAKES_ARG(CHAR) \ - || (CHAR) == 'h' \ - || (CHAR) == 'R' \ - || (CHAR) == 'Y' \ - || (CHAR) == 'z') - -#undef WORD_SWITCH_TAKES_ARG -#define WORD_SWITCH_TAKES_ARG(STR) \ - (DEFAULT_WORD_SWITCH_TAKES_ARG (STR) \ - && strcmp (STR, "Tdata") && strcmp (STR, "Ttext") \ - && strcmp (STR, "Tbss")) - -#undef TARGET_SUBTARGET_DEFAULT -#define TARGET_SUBTARGET_DEFAULT (MASK_80387 | MASK_IEEE_FP | MASK_FLOAT_RETURNS) - -/* - * Define sizes and types - */ -#undef SIZE_TYPE -#undef PTRDIFF_TYPE -#undef WCHAR_TYPE -#undef WCHAR_TYPE_SIZE -#undef WINT_TYPE -#define SIZE_TYPE "unsigned int" -#define PTRDIFF_TYPE "int" -#define WCHAR_TYPE "long int" -#define WCHAR_TYPE_SIZE BITS_PER_WORD -#define WINT_TYPE "long int" - -/* - * New for multilib support. Set the default switches for multilib, - * which is -melf. - */ -#define MULTILIB_DEFAULTS { "melf" } - - -/* Please note that these specs may look messy but they are required in - order to emulate the SCO Development system as closely as possible. - With SCO Open Server 5.0, you now get the linker and assembler free, - so that is what these specs are targeted for. These utilities are - very argument sensitive: a space in the wrong place breaks everything. - So please forgive this mess. It works. - - Parameters which can be passed to gcc, and their SCO equivalents: - GCC Parameter SCO Equivalent - -ansi -a ansi - -posix -a posix - -Xpg4 -a xpg4 - -Xpg4plus -a xpg4plus - -Xods30 -a ods30 - - As with SCO, the default is XPG4 plus mode. SCO also allows you to - specify a C dialect with -Xt, -Xa, -Xc, -Xk and -Xm. These are passed - on to the assembler and linker in the same way that the SCO compiler - does. - - SCO also allows you to compile, link and generate either ELF or COFF - binaries. With gcc, we now only support ELF mode. - - GCC also requires that the user has installed OSS646, the Execution - Environment Update, or is running release 5.0.7 or later. This has - many fixes to the ELF link editor and assembler, and a considerably - improved libc and RTLD. - - In terms of tool usage, we want to use the standard link editor always, - and either the GNU assembler or the native assembler. With OSS646 the - native assembler has grown up quite a bit. Some of the specs below - assume that /usr/gnu is the prefix for the GNU tools, because thats - where the SCO provided ones go. This is especially important for - include and library search path ordering. We want to look in /usr/gnu - first because frequently people are linking against -lintl, and they - MEAN to link with gettext. What they get is the SCO intl library. Its - a REAL pity that GNU gettext chose that name; perhaps in a future - version they can be persuaded to change it to -lgnuintl and have a - link so that -lintl will work for other systems. The same goes for - header files. We want /usr/gnu/include searched for before the system - header files. Hence the -isystem /usr/gnu/include in the CPP_SPEC. - We get /usr/gnu/lib first by virtue of the MD_STARTFILE_PREFIX below. -*/ - -#define MD_STARTFILE_PREFIX "/usr/gnu/lib/" -#define MD_STARTFILE_PREFIX_1 "/usr/ccs/lib/" - -#if USE_GAS -# define MD_EXEC_PREFIX "/usr/gnu/bin/" -#else -# define MD_EXEC_PREFIX "/usr/ccs/bin/elf/" -#endif - -/* Always use the system linker, please. */ -#ifndef DEFAULT_LINKER -# define DEFAULT_LINKER "/usr/ccs/bin/elf/ld" -#endif - -/* Set up assembler flags for PIC and ELF compilations */ -#undef ASM_SPEC - -#if USE_GAS - /* Leave ASM_SPEC undefined so we pick up the master copy from gcc.c */ -#else -#define ASM_SPEC \ - "%{Ym,*} %{Yd,*} %{Wa,*:%*} \ - -E%{Xa:a}%{!Xa:%{Xc:c}%{!Xc:%{Xk:k}%{!Xk:%{Xt:t}%{!Xt:a}}}},%{ansi:ansi}%{!ansi:%{posix:posix}%{!posix:%{Xpg4:xpg4}%{!Xpg4:%{Xpg4plus:XPG4PLUS}%{!Xpg4plus:%{Xods30:ods30}%{!Xods30:XPG4PLUS}}}}},ELF %{Qn:} %{!Qy:-Qn}" -#endif - -/* - * Use crti.o for shared objects, crt1.o for normal executables. Make sure - * to recognize both -G and -shared as a valid way of introducing shared - * library generation. This is important for backwards compatibility. - */ - -#undef STARTFILE_SPEC -#define STARTFILE_SPEC \ - "%{pg:%e-pg not supported on this platform} \ - %{p:%{pp:%e-p and -pp specified - pick one}} \ - %{!shared:\ - %{!symbolic: \ - %{!G: \ - %{pp:pcrt1elf.o%s}%{p:mcrt1.o%s}%{!p:%{!pp:crt1.o%s}}}}} \ - crti.o%s \ - %{ansi:values-Xc.o%s} \ - %{!ansi: \ - %{traditional:values-Xt.o%s} \ - %{!traditional: \ - %{Xa:values-Xa.o%s} \ - %{!Xa:%{Xc:values-Xc.o%s} \ - %{!Xc:%{Xk:values-Xk.o%s} \ - %{!Xk:%{Xt:values-Xt.o%s} \ - %{!Xt:values-Xa.o%s}}}}}} \ - crtbegin.o%s" - -#undef ENDFILE_SPEC -#define ENDFILE_SPEC \ - "crtend.o%s crtn.o%s" - -#define TARGET_OS_CPP_BUILTINS() \ - do \ - { \ - builtin_define ("__unix"); \ - builtin_define ("_SCO_DS"); \ - builtin_define ("_SCO_DS_LL"); \ - builtin_define ("_SCO_ELF"); \ - builtin_define ("_M_I386"); \ - builtin_define ("_M_XENIX"); \ - builtin_define ("_M_UNIX"); \ - builtin_assert ("system=svr3"); \ - if (flag_iso) \ - cpp_define (pfile, "_STRICT_ANSI"); \ - } \ - while (0) - -#undef CPP_SPEC -#define CPP_SPEC "\ - -isystem /usr/gnu/include \ - %{!Xods30:-D_STRICT_NAMES} \ - %{!ansi:%{!posix:%{!Xods30:-D_SCO_XPG_VERS=4}}} \ - %{ansi:-isystem include/ansi%s -isystem /usr/include/ansi} \ - %{!ansi: \ - %{posix:-isystem include/posix%s -isystem /usr/include/posix \ - -D_POSIX_C_SOURCE=2 -D_POSIX_SOURCE=1} \ - %{!posix:%{Xpg4:-isystem include/xpg4%s -isystem /usr/include/xpg4 \ - -D_XOPEN_SOURCE=1} \ - %{!Xpg4:-D_M_I86 -D_M_I86SM -D_M_INTERNAT -D_M_SDATA -D_M_STEXT \ - -D_M_BITFIELDS -D_M_SYS5 -D_M_SYSV -D_M_SYSIII \ - -D_M_WORDSWAP -Dunix -DM_I386 -DM_UNIX -DM_XENIX \ - %{Xods30:-isystem include/ods_30_compat%s \ - -isystem /usr/include/ods_30_compat \ - -D_SCO_ODS_30 -DM_I86 -DM_I86SM -DM_SDATA -DM_STEXT \ - -DM_BITFIELDS -DM_SYS5 -DM_SYSV -DM_INTERNAT -DM_SYSIII \ - -DM_WORDSWAP}}}} \ - %{scointl:-DM_INTERNAT -D_M_INTERNAT} \ - %{Xa:-D_SCO_C_DIALECT=1} \ - %{!Xa:%{Xc:-D_SCO_C_DIALECT=3} \ - %{!Xc:%{Xk:-D_SCO_C_DIALECT=4} \ - %{!Xk:%{Xt:-D_SCO_C_DIALECT=2} \ - %{!Xt:-D_SCO_C_DIALECT=1}}}}" - -#undef LINK_SPEC -#define LINK_SPEC \ - "%{!shared:%{!symbolic:%{!G:-E%{Xa:a}%{!Xa:%{Xc:c}%{!Xc:%{Xk:k}%{!Xk:%{Xt:t}%{!Xt:a}}}},%{ansi:ansi}%{!ansi:%{posix:posix}%{!posix:%{Xpg4:xpg4}%{!Xpg4:%{Xpg4plus:XPG4PLUS}%{!Xpg4plus:%{Xods30:ods30}%{!Xods30:XPG4PLUS}}}}},ELF}}} \ - %{YP,*} %{YL,*} %{YU,*} \ - %{!YP,*:%{p:-YP,/usr/ccs/libp:/lib/libp:/usr/lib/libp:/usr/ccs/lib:/lib:/usr/lib} \ - %{!p:-YP,/usr/ccs/lib:/lib:/usr/lib}} \ - %{h*} %{static:-dn -Bstatic %{G:%e-G and -static are mutually exclusive}} \ - %{shared:%{!G:-G}} %{G:%{!shared:-G}} %{shared:%{G:-G}} \ - %{shared:-dy %{symbolic:-Bsymbolic -G} %{z*}} %{R*} %{Y*} \ - %{Qn:} %{!Qy:-Qn} -z alt_resolve" - -/* Library spec. If we are not building a shared library, provide the - standard libraries, as per the SCO compiler. */ - -#undef LIB_SPEC -#define LIB_SPEC \ - "%{shared:%{!G:pic/libgcc.a%s}} \ - %{G:%{!shared:pic/libgcc.a%s}} \ - %{shared:%{G:pic/libgcc.a%s}} \ - %{p:%{!pp:-lelfprof -lelf}} %{pp:%{!p:-lelfprof -lelf}} \ - %{!shared:%{!symbolic:%{!G:-lcrypt -lgen -lc}}}" - -#undef LIBGCC_SPEC -#define LIBGCC_SPEC \ - "%{!shared:%{!G:-lgcc}}" - -/* Handle special EH pointer encodings. Absolute, pc-relative, and - indirect are handled automatically. */ -#define ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX(FILE, ENCODING, SIZE, ADDR, DONE) \ - do { \ - if ((SIZE) == 4 && ((ENCODING) & 0x70) == DW_EH_PE_datarel) \ - { \ - fputs (ASM_LONG, FILE); \ - assemble_name (FILE, XSTR (ADDR, 0)); \ - fputs (((ENCODING) & DW_EH_PE_indirect ? "@GOT" : "@GOTOFF"), FILE); \ - goto DONE; \ - } \ - } while (0) - -/* Used by crtstuff.c to initialize the base of data-relative relocations. - These are GOT relative on x86, so return the pic register. */ -#ifdef __PIC__ -#define CRT_GET_RFIB_DATA(BASE) \ - { \ - register void *ebx_ __asm__("ebx"); \ - BASE = ebx_; \ - } -#else -#define CRT_GET_RFIB_DATA(BASE) \ - __asm__ ("call\t.LPR%=\n" \ - ".LPR%=:\n\t" \ - "pop{l}\t%0\n\t" \ - /* Due to a GAS bug, this cannot use EAX. That encodes \ - smaller than the traditional EBX, which results in the \ - offset being off by one. */ \ - "add{l}\t{$_GLOBAL_OFFSET_TABLE_+[.-.LPR%=],%0" \ - "|%0,_GLOBAL_OFFSET_TABLE_+(.-.LPR%=)}" \ - : "=d"(BASE)) -#endif - diff --git a/gcc/config/i386/sco5.opt b/gcc/config/i386/sco5.opt deleted file mode 100644 index 1fc5092..0000000 --- a/gcc/config/i386/sco5.opt +++ /dev/null @@ -1,24 +0,0 @@ -; SCO Unix-specific options. - -; Copyright (C) 2005, 2007 Free Software Foundation, Inc. -; -; This file is part of GCC. -; -; GCC is free software; you can redistribute it and/or modify it under -; the terms of the GNU General Public License as published by the Free -; Software Foundation; either version 3, or (at your option) any later -; version. -; -; GCC is distributed in the hope that it will be useful, but WITHOUT ANY -; WARRANTY; without even the implied warranty of MERCHANTABILITY or -; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -; for more details. -; -; You should have received a copy of the GNU General Public License -; along with GCC; see the file COPYING3. If not see -; <http://www.gnu.org/licenses/>. - -;; Legacy option -melf -Target RejectNegative -Generate ELF output diff --git a/gcc/config/i386/sysv4-cpp.h b/gcc/config/i386/sysv4-cpp.h deleted file mode 100644 index d057e12..0000000 --- a/gcc/config/i386/sysv4-cpp.h +++ /dev/null @@ -1,31 +0,0 @@ -/* Target definitions for GCC for Intel 80386 running System V.4 - Copyright (C) 1991, 2001, 2002, 2007 Free Software Foundation, Inc. - - Written by Ron Guilmette (rfg@netcom.com). - -This file is part of GCC. - -GCC is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 3, or (at your option) -any later version. - -GCC is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GCC; see the file COPYING3. If not see -<http://www.gnu.org/licenses/>. */ - -#define TARGET_OS_CPP_BUILTINS() \ - do \ - { \ - builtin_define_std ("unix"); \ - builtin_define ("__svr4__"); \ - builtin_assert ("system=unix"); \ - builtin_assert ("system=svr4"); \ - } \ - while (0) - diff --git a/gcc/config/i386/sysv5.h b/gcc/config/i386/sysv5.h deleted file mode 100644 index 7e2ab04..0000000 --- a/gcc/config/i386/sysv5.h +++ /dev/null @@ -1,33 +0,0 @@ -/* Definitions for Intel 386 running System V Release 5 (i.e. UnixWare 7) - Copyright (C) 1999, 2007 Free Software Foundation, Inc. - Contributed by Robert Lipe (robertlipe@usa.net) - -This file is part of GCC. - -GCC is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 3, or (at your option) -any later version. - -GCC is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GCC; see the file COPYING3. If not see -<http://www.gnu.org/licenses/>. */ - - -/* Dwarf2 is supported by native debuggers */ - -#undef PREFERRED_DEBUGGING_TYPE -#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG - -/* Add -lcrt for Dwarf2 abbreviation table */ -#undef LIB_SPEC -#define LIB_SPEC "%{pthread:-lthread} %{pthreadT:-lthreadT} \ - %{!shared:%{!symbolic:-lc -lcrt}}" - -#undef CPP_SPEC -#define CPP_SPEC "%{pthread:-D_REENTRANT} %{pthreadT:-D_REENTRANT}" diff --git a/gcc/config/i386/t-beos b/gcc/config/i386/t-beos deleted file mode 100644 index b5c8ec2..0000000 --- a/gcc/config/i386/t-beos +++ /dev/null @@ -1,4 +0,0 @@ -# There are system headers elsewhere, but these are the ones that -# we are most likely to want to apply any fixes to. -SYSTEM_HEADER_DIR = /boot/develop/headers/posix -CROSS_SYSTEM_HEADER_DIR = $(tooldir)/sys-include/posix diff --git a/gcc/config/i386/t-sco5 b/gcc/config/i386/t-sco5 deleted file mode 100644 index c615593..0000000 --- a/gcc/config/i386/t-sco5 +++ /dev/null @@ -1,15 +0,0 @@ -# We multilib libgcc for -fPIC, to get real PIC code in it. -# NOTE: We must use -fPIC on crt{begi,end}.o else we get an RTLD error -# "cant set protections on segment of length blah at 0x8048000". -CRTSTUFF_T_CFLAGS = -fPIC -fno-omit-frame-pointer - -MULTILIB_OPTIONS = fPIC -MULTILIB_DIRNAMES = pic -MULTILIB_MATCHES = fPIC=fpic -MULTILIB_EXTRA_OPTS = - -LIBGCC=stmp-multilib -INSTALL_LIBGCC=install-multilib - -# See all the declarations. -FIXPROTO_DEFINES = -D_XOPEN_SOURCE -D_POSIX_C_SOURCE=2 diff --git a/gcc/config/i386/t-uwin b/gcc/config/i386/t-uwin deleted file mode 100644 index 8e59868..0000000 --- a/gcc/config/i386/t-uwin +++ /dev/null @@ -1,5 +0,0 @@ -# -# This is included *after* t-cygwin to override LIB1ASMSRC. -# -LIB1ASMSRC = i386/uwin.asm - diff --git a/gcc/config/i386/uwin.asm b/gcc/config/i386/uwin.asm deleted file mode 100644 index 8566be1..0000000 --- a/gcc/config/i386/uwin.asm +++ /dev/null @@ -1,32 +0,0 @@ -/* stuff needed for libgcc on win32. */ - -#ifdef L_chkstk - - .global __chkstk - .global __alloca -__chkstk: -__alloca: - pushl %ecx /* save temp */ - movl %esp,%ecx /* get sp */ - addl $0x8,%ecx /* and point to return addr */ - -probe: cmpl $0x1000,%eax /* > 4k ?*/ - jb done - - subl $0x1000,%ecx /* yes, move pointer down 4k*/ - orl $0x0,(%ecx) /* probe there */ - subl $0x1000,%eax /* decrement count */ - jmp probe /* and do it again */ - -done: subl %eax,%ecx - orl $0x0,(%ecx) /* less that 4k, just peek here */ - - movl %esp,%eax - movl %ecx,%esp /* decrement stack */ - - movl (%eax),%ecx /* recover saved temp */ - movl 4(%eax),%eax /* get return address */ - jmp *%eax - - -#endif diff --git a/gcc/config/i386/uwin.h b/gcc/config/i386/uwin.h deleted file mode 100644 index 8884b08..0000000 --- a/gcc/config/i386/uwin.h +++ /dev/null @@ -1,85 +0,0 @@ -/* Operating system specific defines to be used when targeting GCC for - hosting on U/WIN (Windows32), using GNU tools and the Windows32 API - Library, as distinct from winnt.h, which is used to build GCC for use - with a windows style library and tool set and uses the Microsoft tools. - Copyright (C) 1999, 2002, 2003, 2004, 2007 Free Software Foundation, Inc. - Contributed by Mumit Khan <khan@xraylith.wisc.edu>. - -This file is part of GCC. - -GCC is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 3, or (at your option) -any later version. - -GCC is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GCC; see the file COPYING3. If not see -<http://www.gnu.org/licenses/>. */ - -/* Most of this is the same as for Cygwin32, except for changing some - specs. */ - -#define STANDARD_INCLUDE_COMPONENT "UWIN" -#define SYSTEM_INCLUDE_DIR "/usr/gnu/include" -#undef MD_STARTFILE_PREFIX -#define MD_STARTFILE_PREFIX "/usr/gnu/lib/" - -#undef MAYBE_UWIN_CPP_BUILTINS -#define MAYBE_UWIN_CPP_BUILTINS() \ - do \ - { \ - builtin_define_std ("WINNT"); \ - builtin_define ("_WIN32"); \ - builtin_define ("__WIN32__"); \ - builtin_define ("_UWIN"); \ - builtin_define ("__UWIN__"); \ - builtin_define ("__MSVCRT__"); \ - builtin_define ("_STD_INCLUDE_DIR=mingw32"); \ - } \ - while (0) - -#undef CPP_SPEC -#define CPP_SPEC "-remap %{posix:-D_POSIX_SOURCE} \ - -include /usr/include/astwin32.h \ - -idirafter /usr/gnu/include/mingw32" - -/* For Windows applications, include more libraries, but always include - kernel32. */ -#undef LIB_SPEC -#define LIB_SPEC \ - "%{pg:-lgmon} %{mwindows:-luser32 -lgdi32 -lcomdlg32} -lkernel32 -ladvapi32" - -/* Include in the mingw32 libraries with libgcc */ -#undef LIBGCC_SPEC -#define LIBGCC_SPEC "-lgnuwin -lposix -lgcc -last -lmoldname -lmsvcrt" - -/* Specify a different entry point when linking a DLL */ -#undef LINK_SPEC -#define LINK_SPEC \ - "%{mwindows:--subsystem windows} %{mdll:--dll -e _DllMainCRTStartup@12} \ - %{!mdll:-u _main}" - -#undef STARTFILE_SPEC -#define STARTFILE_SPEC "%{mdll:dllcrt2%O%s} %{!mdll:crt2%O%s} %{pg:gcrt2%O%s}" - -/* These are PE BFD bug workarounds. Should go away eventually. */ - -/* Write the extra assembler code needed to declare a function - properly. If we are generating SDB debugging information, this - will happen automatically, so we only need to handle other cases. */ -#undef ASM_DECLARE_FUNCTION_NAME -#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \ - do \ - { \ - i386_pe_maybe_record_exported_symbol (DECL, NAME, 0); \ - } \ - while (0) - -#undef ASM_OUTPUT_EXTERNAL -#undef ASM_OUTPUT_EXTERNAL_LIBCALL - diff --git a/gcc/config/kaos.h b/gcc/config/kaos.h deleted file mode 100644 index 70ef8c7..0000000 --- a/gcc/config/kaos.h +++ /dev/null @@ -1,30 +0,0 @@ -/* Definitions of target machine for GCC. - common kaOS definitions for all architectures. - Copyright (C) 2003, 2007 Free Software Foundation, Inc. - -This file is part of GCC. - -GCC is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 3, or (at your option) -any later version. - -GCC is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GCC; see the file COPYING3. If not see -<http://www.gnu.org/licenses/>. */ - -/* Specify predefined symbols in preprocessor. */ -#define TARGET_OS_CPP_BUILTINS() \ - do { \ - builtin_define ("__kaOS__"); \ - } while (0) - - -/* do not link any library implicitly for kaOS target. */ -#undef LIB_SPEC -#define LIB_SPEC "" diff --git a/gcc/config/mips/windiss.h b/gcc/config/mips/windiss.h deleted file mode 100644 index 38a7383..0000000 --- a/gcc/config/mips/windiss.h +++ /dev/null @@ -1,100 +0,0 @@ -/* Support for GCC on MIPS using WindISS simulator. - Copyright (C) 2002, 2003, 2004, 2007 Free Software Foundation, Inc. - Contributed by CodeSourcery, LLC. - -This file is part of GCC. - -GCC is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 3, or (at your option) -any later version. - -GCC is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GCC; see the file COPYING3. If not see -<http://www.gnu.org/licenses/>. */ - -#undef TARGET_VERSION -#define TARGET_VERSION fprintf (stderr, " (MIPS WindISS)"); - -/* Combination of mips.h and svr4.h. */ -#undef SWITCH_TAKES_ARG -#define SWITCH_TAKES_ARG(CHAR) \ - (DEFAULT_SWITCH_TAKES_ARG (CHAR) \ - || (CHAR) == 'G' \ - || (CHAR) == 'h' \ - || (CHAR) == 'x' \ - || (CHAR) == 'z') - -#undef SUBTARGET_CPP_SPEC -#define SUBTARGET_CPP_SPEC \ -"%{!DCPU=*: %{mips3|mips4|mips64:-DCPU=MIPS64;:-DCPU=MIPS32}} \ - %{EL|mel:-DMIPSEL;:-DMIPSEB} \ - %{msoft-float:-DSOFT_FLOAT} \ - %{mips1:-D_WRS_R3K_EXC_SUPPORT}" - -#undef ASM_SPEC -#define ASM_SPEC "\ -%{!G:-G 0} %{G*} %(endian_spec) %{mips1} %{mips2} %{mips3} %{mips4} \ -%{mips32} %{mips32r2} %{mips64} \ -%{mips16:%{!mno-mips16:-mips16}} %{mno-mips16:-no-mips16} \ -%(subtarget_asm_optimizing_spec) \ -%(subtarget_asm_debugging_spec) \ -%{mabi=*} %{!mabi*: %(asm_abi_default_spec)} \ -%{mgp32} %{mgp64} %{march=*} %{mxgot:-xgot} \ -%{mtune=*} %{v} \ -%(subtarget_asm_spec)" - -#undef LINK_SPEC -/* LINK_SPEC is clobbered in svr4.h. ugh! */ -#define LINK_SPEC "\ --m elf32mipswindiss \ -%{!G:-G 0} %{G*} %{mips1} %{mips2} %{mips3} %{mips4} %{mips32} %{mips64} \ -%{bestGnum}" - -/* Diab libs MIPS{,E,F,L,M,W,X,Y,Z}{,H,N,S} - - . - E - Elf (small-data/const=8 - F - Elf Far (small-data/const=0) - L - Little Elf - M - Little Elf Far - W - elf32 bigmips - X - elf32 bigmips (far?) - Y - elf32 littlemips - Z - elf32 littlemips (far?) - - . - Integer routines - H - Hard float - N - No float - S - Soft float - - Want {F,M}{,H,S} - -*/ - -#undef LIB_SPEC -#define LIB_SPEC "--start-group -li -lcfp -lwindiss -lram -limpl -limpfp --end-group" - -#undef STARTFILE_SPEC -#define STARTFILE_SPEC "crt0.o%s crtbegin.o%s" - -#undef ENDFILE_SPEC -#define ENDFILE_SPEC "crtend.o%s" - -/* We have no shared libraries. These two shouldn't be necessary. */ -#undef LINK_SHLIB_SPEC -#define LINK_SHLIB_SPEC "" -#undef LINK_EH_SPEC -#define LINK_EH_SPEC "" - -#undef CRTSAVRES_DEFAULT_SPEC -#define CRTSAVRES_DEFAULT_SPEC "" - -/* No sdata. */ -#undef MIPS_DEFAULT_GVALUE -#define MIPS_DEFAULT_GVALUE 0 diff --git a/gcc/config/mt/ABI.txt b/gcc/config/mt/ABI.txt deleted file mode 100644 index 97dfbb8..0000000 --- a/gcc/config/mt/ABI.txt +++ /dev/null @@ -1,219 +0,0 @@ - Copyright (C) 2005 Free Software Foundation, Inc. - - Copying and distribution of this file, with or without modification, - are permitted in any medium without royalty provided the copyright - notice and this notice are preserved. - --------------------------------------------------------------------------- - - MS1 ABI - ========= - -Sizes and alignments --------------------- - - Type Size (bytes) Alignment (bytes) - - char 1 1 - short 2 2 - int 4 4 - unsigned 4 4 - long 4 4 - long long 8 8 - float 4 4 - double 8 8 - pointers 4 4 - -* alignment within aggregates (structs and unions) is as above, with - padding added if needed -* aggregates have alignment equal to that of their most aligned - member -* aggregates have sizes which are a multiple of their alignment - - -Floating point --------------- - -All emulated using IEEE floating point conventions. - -Registers ----------------- - -r0 always zero -r1 argument register 1 -r2 argument register 2 -r3 argument register 3 -r4 argument register 4 -r5 callee must save -r6 callee must save -r7 call clobbers -r8 call clobbers -r9 call clobbers -r10 call clobbers -r11 function return value -r12 frame pointer -r13 stack pointer -r14 linkage pointer -r15 interrupt pointer - -Stack alignment 8 bytes - -Structures passed <= 32 bits as values, else as pointers - -The MS1 Stack ---------------- - -Space is allocated as needed in the stack frame for the following at compile -time: - -* Outgoing parameters beyond the fourth - -* All automatic arrays, automatic data aggregates, automatic - scalars which must be addressable, and automatic scalars for - which there is no room in registers - -* Compiler-generated temporary values (typically when there are - too many for the compiler to keep them all in registers) - -Space can be allocated dynamically (at runtime) in the stack frame for the -following: - -* Memory allocated using the alloca() function of the C library - -Addressable automatic variables on the stack are addressed with positive -offsets relative to r12; dynamically allocated space is addressed with positive -offsets from the pointer returned by alloca(). - -Stack Frame ------------ - - +-----------------------+ - | Parameter Word 1 | - +-----------------------+ <-sp - | Previous FP | - +-----------------------+ - | Return address | - +-----------------------+ - | Saved Registers | - +-----------------------+ - | ... | - +-----------------------+ - | Local Variables | - +-----------------------+ <-fp - | Alloca | - +-----------------------+ - | ... | - +-----------------------+ - | Parameter Word 2 | - +-----------------------+ - | Parameter Word 1 | - +-----------------------+ <-sp - - -Parameter Assignment to Registers ---------------------------------- - -Consider the parameters in a function call as ordered from left (first -parameter) to right. GR contains the number of the next available -general-purpose register. STARG is the address of the next available stack -parameter word. - -INITIALIZE: - Set GR=r1 and STARG to point to parameter word 1. - -SCAN: - If there are no more parameters, terminate. - Otherwise, select one of the following depending on the type - of the next parameter: - - SIMPLE ARG: - - A SIMPLE ARG is one of the following: - - * One of the simple integer types which will fit into a - general-purpose register, - * A pointer to an object of any type, - * A struct or union small enough to fit in a register (<= 32 bits) - * A larger struct or union, which shall be treated as a - pointer to the object or to a copy of the object. - (See below for when copies are made.) - - If GR > r4, go to STACK. Otherwise, load the parameter value into - general-purpose register GR and advance GR to the next general-purpose - register. Values shorter than the register size are sign-extended or - zero-extended depending on whether they are signed or unsigned. Then - go to SCAN. - - DOUBLE or LONG LONG - - If GR > r3, go to STACK. Otherwise, if GR is odd, advance GR to the - next register. Load the 64-bit long long or double value into register - pair GR and GR+1. Advance GR to GR+2 and go to SCAN. - - STACK: - - Parameters not otherwise handled above are passed in the parameter - words of the caller's stack frame. SIMPLE ARGs, as defined above, are - considered to have size and alignment equal to the size of a - general-purpose register, with simple argument types shorter than this - sign- or zero-extended to this width. Round STARG up to a multiple of - the alignment requirement of the parameter and copy the argument - byte-for-byte into STARG, STARG+1, ... STARG+size-1. Set STARG to - STARG+size and go to SCAN. - - -Structure passing ------------------ - -As noted above, code which passes structures and unions by value is implemented -specially. (In this section, "struct" will refer to structs and unions -inclusively.) Structs small enough to fit in a register are passed by value in -a single register or in a stack frame slot the size of a register. Structs -containing a single double or long long component are passed by value in two -registers or in a stack frame slot the size of two registers. Other structs -are handled by passing the address of the structure. In this case, a copy of -the structure will be made if necessary in order to preserve the pass-by-value -semantics. - -Copies of large structs are made under the following rules: - - ANSI mode K&R Mode - --------- -------- -Normal param Callee copies if needed Caller copies -Varargs (...) param Caller copies Caller copies - -In the case of normal (non-varargs) large-struct parameters in ANSI mode, the -callee is responsible for producing the same effect as if a copy of the -structure were passed, preserving the pass-by-value semantics. This may be -accomplished by having the callee make a copy, but in some cases the callee may -be able to determine that a copy is not necessary in order to produce the same -results. In such cases, the callee may choose to avoid making a copy of the -parameter. - - -Varargs handling ----------------- - -No special changes are needed for handling varargs parameters other than the -caller knowing that a copy is needed on struct parameters larger than a -register (see above). - -The varargs macros set up a register save area for the general-purpose -registers to be saved. Because the save area lies between the caller and -callee stack frames, the saved register parameters are contiguous with -parameters passed on the stack. A pointer advances from the register save area -into the caller's stack frame. - - -Function return values ----------------------- - - Type Register - ---- -------- - int r11 - short r11 - long r11 - long long stack - float r11 - double stack - diff --git a/gcc/config/mt/crti.asm b/gcc/config/mt/crti.asm deleted file mode 100644 index 07bc6ff..0000000 --- a/gcc/config/mt/crti.asm +++ /dev/null @@ -1,71 +0,0 @@ -# crti.asm for mt -# -# Copyright (C) 2005 Free Software Foundation, Inc. -# -# This file is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation; either version 2, or (at your option) any -# later version. -# -# In addition to the permissions in the GNU General Public License, the -# Free Software Foundation gives you unlimited permission to link the -# compiled version of this file with other programs, and to distribute -# those programs without any restriction coming from the use of this -# file. (The General Public License restrictions do apply in other -# respects; for example, they cover modification of the file, and -# distribution when not linked into another program.) -# -# This file is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GCC; see the file COPYING. If not, write to the Free -# Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301, USA. -# -# As a special exception, if you link this library with files -# compiled with GCC to produce an executable, this does not cause -# the resulting executable to be covered by the GNU General Public License. -# This exception does not however invalidate any other reasons why -# the executable file might be covered by the GNU General Public License. -# - -# This file just make a stack frame for the contents of the .fini and -# .init sections. Users may put any desired instructions in those -# sections. - - .file "crti.asm" - - .section ".init" - .global _init - .type _init,#function - .align 4 -_init: - subi sp, sp, #4 - stw r14, sp, #0 - or r0, r0, r0 - or r0, r0, r0 - or r0, r0, r0 - or r0, r0, r0 - or r0, r0, r0 - or r0, r0, r0 - or r0, r0, r0 - or r0, r0, r0 - - .section ".fini" - .global _fini - .type _fini,#function - .align 4 -_fini: - subi sp, sp, #4 - stw r14, sp, #0 - or r0, r0, r0 - or r0, r0, r0 - or r0, r0, r0 - or r0, r0, r0 - or r0, r0, r0 - or r0, r0, r0 - or r0, r0, r0 - or r0, r0, r0 diff --git a/gcc/config/mt/crtn.asm b/gcc/config/mt/crtn.asm deleted file mode 100644 index d179c18..0000000 --- a/gcc/config/mt/crtn.asm +++ /dev/null @@ -1,56 +0,0 @@ -# crtn.asm for mt - -# Copyright (C) 2005 Free Software Foundation, Inc. -# -# This file is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the -# Free Software Foundation; either version 2, or (at your option) any -# later version. -# -# In addition to the permissions in the GNU General Public License, the -# Free Software Foundation gives you unlimited permission to link the -# compiled version of this file with other programs, and to distribute -# those programs without any restriction coming from the use of this -# file. (The General Public License restrictions do apply in other -# respects; for example, they cover modification of the file, and -# distribution when not linked into another program.) -# -# This file is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GCC; see the file COPYING. If not, write to the Free -# Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301, USA. -# -# As a special exception, if you link this library with files -# compiled with GCC to produce an executable, this does not cause -# the resulting executable to be covered by the GNU General Public License. -# This exception does not however invalidate any other reasons why -# the executable file might be covered by the GNU General Public License. -# - -# This file just makes sure that the .fini and .init sections do in -# fact return. Users may put any desired instructions in those sections. -# This file is the last thing linked into any executable. - - .file "crtn.asm" - - .section ".init" - .align 4 - ldw r14, sp, #0 - addi sp, sp, #4 - nop - jal r0, r14 - or r0, r0, r0 - - .section ".fini" - .align 4 - - ldw r14, sp, #0 - addi sp, sp, #4 - nop - jal r0, r14 - or r0, r0, r0 diff --git a/gcc/config/mt/lib2extra-funcs.c b/gcc/config/mt/lib2extra-funcs.c deleted file mode 100644 index 6f5ec6a..0000000 --- a/gcc/config/mt/lib2extra-funcs.c +++ /dev/null @@ -1,232 +0,0 @@ -/* Copyright (C) 2005 Free Software Foundation, - -This file is part of GCC. - -GCC is free software; you can redistribute it and/or modify it under -the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. - -In addition to the permissions in the GNU General Public License, the -Free Software Foundation gives you unlimited permission to link the -compiled version of this file into combinations with other programs, -and to distribute those combinations without any restriction coming -from the use of this file. (The General Public License restrictions -do apply in other respects; for example, they cover modification of -the file, and distribution when not linked into a combine -executable.) - -GCC is distributed in the hope that it will be useful, but WITHOUT ANY -WARRANTY; without even the implied warranty of MERCHANTABILITY or -FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received a copy of the GNU General Public License -along with GCC; see the file COPYING. If not, write to the Free -Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA -02110-1301, USA. */ - -#define BITS_PER_UNIT 8 - -typedef int HItype __attribute__ ((mode (HI))); -typedef unsigned int UHItype __attribute__ ((mode (HI))); - -typedef int SItype __attribute__ ((mode (SI))); -typedef unsigned int USItype __attribute__ ((mode (SI))); - -typedef int word_type __attribute__ ((mode (__word__))); - -struct SIstruct {HItype low, high;}; - -typedef union -{ - struct SIstruct s; - SItype ll; -} SIunion; - -SItype -__lshrsi3 (SItype u, word_type b) -{ - SIunion w; - word_type bm; - SIunion uu; - - if (b == 0) - return u; - - uu.ll = u; - - bm = (sizeof (HItype) * BITS_PER_UNIT) - b; - if (bm <= 0) - { - w.s.high = 0; - w.s.low = (UHItype)uu.s.high >> -bm; - } - else - { - UHItype carries = (UHItype)uu.s.high << bm; - w.s.high = (UHItype)uu.s.high >> b; - w.s.low = ((UHItype)uu.s.low >> b) | carries; - } - - return w.ll; -} - -SItype -__ashlsi3 (SItype u, word_type b) -{ - SIunion w; - word_type bm; - SIunion uu; - - if (b == 0) - return u; - - uu.ll = u; - - bm = (sizeof (HItype) * BITS_PER_UNIT) - b; - if (bm <= 0) - { - w.s.low = 0; - w.s.high = (UHItype)uu.s.low << -bm; - } - else - { - UHItype carries = (UHItype)uu.s.low >> bm; - w.s.low = (UHItype)uu.s.low << b; - w.s.high = ((UHItype)uu.s.high << b) | carries; - } - - return w.ll; -} - -SItype -__ashrsi3 (SItype u, word_type b) -{ - SIunion w; - word_type bm; - SIunion uu; - - if (b == 0) - return u; - - uu.ll = u; - - bm = (sizeof (HItype) * BITS_PER_UNIT) - b; - if (bm <= 0) - { - /* w.s.high = 1..1 or 0..0 */ - w.s.high = uu.s.high >> (sizeof (HItype) * BITS_PER_UNIT - 1); - w.s.low = uu.s.high >> -bm; - } - else - { - UHItype carries = (UHItype)uu.s.high << bm; - w.s.high = uu.s.high >> b; - w.s.low = ((UHItype)uu.s.low >> b) | carries; - } - - return w.ll; -} - -USItype -__mulsi3 (USItype a, USItype b) -{ - USItype c = 0; - - while (a != 0) - { - if (a & 1) - c += b; - a >>= 1; - b <<= 1; - } - - return c; -} - -USItype -udivmodsi4(USItype num, USItype den, word_type modwanted) -{ - USItype bit = 1; - USItype res = 0; - - while (den < num && bit && !(den & (1L<<31))) - { - den <<=1; - bit <<=1; - } - while (bit) - { - if (num >= den) - { - num -= den; - res |= bit; - } - bit >>=1; - den >>=1; - } - if (modwanted) return num; - return res; -} - -SItype -__divsi3 (SItype a, SItype b) -{ - word_type neg = 0; - SItype res; - - if (a < 0) - { - a = -a; - neg = !neg; - } - - if (b < 0) - { - b = -b; - neg = !neg; - } - - res = udivmodsi4 (a, b, 0); - - if (neg) - res = -res; - - return res; -} - -SItype -__modsi3 (SItype a, SItype b) -{ - word_type neg = 0; - SItype res; - - if (a < 0) - { - a = -a; - neg = 1; - } - - if (b < 0) - b = -b; - - res = udivmodsi4 (a, b, 1); - - if (neg) - res = -res; - - return res; -} - -SItype -__udivsi3 (SItype a, SItype b) -{ - return udivmodsi4 (a, b, 0); -} - -SItype -__umodsi3 (SItype a, SItype b) -{ - return udivmodsi4 (a, b, 1); -} diff --git a/gcc/config/mt/mt-protos.h b/gcc/config/mt/mt-protos.h deleted file mode 100644 index 2dcb945..0000000 --- a/gcc/config/mt/mt-protos.h +++ /dev/null @@ -1,65 +0,0 @@ -/* Prototypes for exported functions defined in ms1.c - Copyright (C) 2005, 2007 Free Software Foundation, Inc. - - This file is part of GCC. - - GCC is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published - by the Free Software Foundation; either version 3, or (at your - option) any later version. - - GCC is distributed in the hope that it will be useful,but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public - License for more details. - - You should have received a copy of the GNU General Public License - along with GCC; see the file COPYING3. If not see - <http://www.gnu.org/licenses/>. */ - -extern void mt_init_expanders (void); -extern void mt_expand_prologue (void); -extern void mt_expand_epilogue (enum epilogue_type); -extern unsigned mt_compute_frame_size (int); -extern void mt_override_options (void); -extern int mt_initial_elimination_offset (int, int); -extern const char * mt_asm_output_opcode (FILE *, const char *); -extern int mt_epilogue_uses (int); -extern void mt_add_loop (void); - -#ifdef TREE_CODE -extern const char * mt_cannot_inline_p (tree); -extern int mt_function_arg_boundary (enum machine_mode, tree); -extern void mt_function_arg_advance (CUMULATIVE_ARGS *, enum machine_mode, tree, int); -extern int mt_return_in_memory (const_tree,const_tree); -#endif - -#ifdef RTX_CODE -extern void mt_expand_eh_return (rtx *); -extern void mt_emit_eh_epilogue (rtx *); -extern void mt_print_operand (FILE *, rtx, int); -extern void mt_print_operand_address (FILE *, rtx); -extern int mt_check_split (rtx, enum machine_mode); -extern int mt_reg_ok_for_base_p (rtx, int); -extern int mt_legitimate_address_p (enum machine_mode, rtx, int); -/* Predicates for machine description. */ -extern int uns_arith_operand (rtx, enum machine_mode); -extern int arith_operand (rtx, enum machine_mode); -extern int reg_or_0_operand (rtx, enum machine_mode); -extern int big_const_operand (rtx, enum machine_mode); -extern int single_const_operand (rtx, enum machine_mode); -extern void mt_emit_cbranch (enum rtx_code, rtx, rtx, rtx); -extern void mt_set_memflags (rtx); -extern rtx mt_return_addr_rtx (int); -extern void mt_split_words (enum machine_mode, enum machine_mode, rtx *); -extern void mt_final_prescan_insn (rtx, rtx *, int); -#endif - -#ifdef TREE_CODE -#ifdef RTX_CODE -extern void mt_init_cumulative_args (CUMULATIVE_ARGS *, tree, rtx, tree, int); -extern rtx mt_function_arg (const CUMULATIVE_ARGS *, enum machine_mode, tree, int, int); -extern enum reg_class mt_secondary_reload_class (enum reg_class, enum machine_mode, rtx); -extern rtx mt_function_value (const_tree, enum machine_mode, const_tree); -#endif -#endif diff --git a/gcc/config/mt/mt.c b/gcc/config/mt/mt.c deleted file mode 100644 index c7fc0d1..0000000 --- a/gcc/config/mt/mt.c +++ /dev/null @@ -1,2493 +0,0 @@ -/* Target definitions for the MorphoRISC1 - Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc. - Contributed by Red Hat, Inc. - - This file is part of GCC. - - GCC is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published - by the Free Software Foundation; either version 3, or (at your - option) any later version. - - GCC is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public - License for more details. - - You should have received a copy of the GNU General Public License - along with GCC; see the file COPYING3. If not see - <http://www.gnu.org/licenses/>. */ - -#include "config.h" -#include "system.h" -#include "coretypes.h" -#include "tm.h" -#include "rtl.h" -#include "regs.h" -#include "hard-reg-set.h" -#include "real.h" -#include "insn-config.h" -#include "conditions.h" -#include "insn-attr.h" -#include "recog.h" -#include "toplev.h" -#include "output.h" -#include "integrate.h" -#include "tree.h" -#include "function.h" -#include "expr.h" -#include "optabs.h" -#include "libfuncs.h" -#include "flags.h" -#include "tm_p.h" -#include "ggc.h" -#include "insn-flags.h" -#include "obstack.h" -#include "except.h" -#include "target.h" -#include "target-def.h" -#include "basic-block.h" - -/* Frame pointer register mask. */ -#define FP_MASK (1 << (GPR_FP)) - -/* Link register mask. */ -#define LINK_MASK (1 << (GPR_LINK)) - -/* Given a SIZE in bytes, advance to the next word. */ -#define ROUND_ADVANCE(SIZE) (((SIZE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD) - -/* A C structure for machine-specific, per-function data. - This is added to the cfun structure. */ -struct machine_function GTY(()) -{ - /* Flags if __builtin_return_address (n) with n >= 1 was used. */ - int ra_needs_full_frame; - struct rtx_def * eh_stack_adjust; - int interrupt_handler; - int has_loops; -}; - -/* Define the information needed to generate branch and scc insns. - This is stored from the compare operation. */ -struct rtx_def * mt_compare_op0; -struct rtx_def * mt_compare_op1; - -/* Current frame information calculated by compute_frame_size. */ -struct mt_frame_info current_frame_info; - -/* Zero structure to initialize current_frame_info. */ -struct mt_frame_info zero_frame_info; - -/* mt doesn't have unsigned compares need a library call for this. */ -struct rtx_def * mt_ucmpsi3_libcall; - -static int mt_flag_delayed_branch; - - -static rtx -mt_struct_value_rtx (tree fndecl ATTRIBUTE_UNUSED, - int incoming ATTRIBUTE_UNUSED) -{ - return gen_rtx_REG (Pmode, RETVAL_REGNUM); -} - -/* Implement RETURN_ADDR_RTX. */ -rtx -mt_return_addr_rtx (int count) -{ - if (count != 0) - return NULL_RTX; - - return get_hard_reg_initial_val (Pmode, GPR_LINK); -} - -/* The following variable value indicates the number of nops required - between the current instruction and the next instruction to avoid - any pipeline hazards. */ -static int mt_nops_required = 0; -static const char * mt_nop_reasons = ""; - -/* Implement ASM_OUTPUT_OPCODE. */ -const char * -mt_asm_output_opcode (FILE *f ATTRIBUTE_UNUSED, const char *ptr) -{ - if (mt_nops_required) - fprintf (f, ";# need %d nops because of %s\n\t", - mt_nops_required, mt_nop_reasons); - - while (mt_nops_required) - { - fprintf (f, "nop\n\t"); - -- mt_nops_required; - } - - return ptr; -} - -/* Given an insn, return whether it's a memory operation or a branch - operation, otherwise return TYPE_ARITH. */ -static enum attr_type -mt_get_attr_type (rtx complete_insn) -{ - rtx insn = PATTERN (complete_insn); - - if (JUMP_P (complete_insn)) - return TYPE_BRANCH; - if (CALL_P (complete_insn)) - return TYPE_BRANCH; - - if (GET_CODE (insn) != SET) - return TYPE_ARITH; - - if (SET_DEST (insn) == pc_rtx) - return TYPE_BRANCH; - - if (GET_CODE (SET_DEST (insn)) == MEM) - return TYPE_STORE; - - if (GET_CODE (SET_SRC (insn)) == MEM) - return TYPE_LOAD; - - return TYPE_ARITH; -} - -/* A helper routine for insn_dependent_p called through note_stores. */ - -static void -insn_dependent_p_1 (rtx x, const_rtx pat ATTRIBUTE_UNUSED, void *data) -{ - rtx * pinsn = (rtx *) data; - - if (*pinsn && reg_mentioned_p (x, *pinsn)) - *pinsn = NULL_RTX; -} - -/* Return true if anything in insn X is (anti,output,true) - dependent on anything in insn Y. */ - -static bool -insn_dependent_p (rtx x, rtx y) -{ - rtx tmp; - - if (! INSN_P (x) || ! INSN_P (y)) - return 0; - - tmp = PATTERN (y); - note_stores (PATTERN (x), insn_dependent_p_1, &tmp); - if (tmp == NULL_RTX) - return true; - - tmp = PATTERN (x); - note_stores (PATTERN (y), insn_dependent_p_1, &tmp); - return (tmp == NULL_RTX); -} - - -/* Return true if anything in insn X is true dependent on anything in - insn Y. */ -static bool -insn_true_dependent_p (rtx x, rtx y) -{ - rtx tmp; - - if (! INSN_P (x) || ! INSN_P (y)) - return 0; - - tmp = PATTERN (y); - note_stores (PATTERN (x), insn_dependent_p_1, &tmp); - return (tmp == NULL_RTX); -} - -/* The following determines the number of nops that need to be - inserted between the previous instructions and current instruction - to avoid pipeline hazards on the mt processor. Remember that - the function is not called for asm insns. */ - -void -mt_final_prescan_insn (rtx insn, - rtx * opvec ATTRIBUTE_UNUSED, - int noperands ATTRIBUTE_UNUSED) -{ - rtx prev_i; - enum attr_type prev_attr; - - mt_nops_required = 0; - mt_nop_reasons = ""; - - /* ms2 constraints are dealt with in reorg. */ - if (TARGET_MS2) - return; - - /* Only worry about real instructions. */ - if (! INSN_P (insn)) - return; - - /* Find the previous real instructions. */ - for (prev_i = PREV_INSN (insn); - prev_i != NULL - && (! INSN_P (prev_i) - || GET_CODE (PATTERN (prev_i)) == USE - || GET_CODE (PATTERN (prev_i)) == CLOBBER); - prev_i = PREV_INSN (prev_i)) - { - /* If we meet a barrier, there is no flow through here. */ - if (BARRIER_P (prev_i)) - return; - } - - /* If there isn't one then there is nothing that we need do. */ - if (prev_i == NULL || ! INSN_P (prev_i)) - return; - - prev_attr = mt_get_attr_type (prev_i); - - /* Delayed branch slots already taken care of by delay branch scheduling. */ - if (prev_attr == TYPE_BRANCH) - return; - - switch (mt_get_attr_type (insn)) - { - case TYPE_LOAD: - case TYPE_STORE: - /* Avoid consecutive memory operation. */ - if ((prev_attr == TYPE_LOAD || prev_attr == TYPE_STORE) - && TARGET_MS1_64_001) - { - mt_nops_required = 1; - mt_nop_reasons = "consecutive mem ops"; - } - /* Drop through. */ - - case TYPE_ARITH: - case TYPE_COMPLEX: - /* One cycle of delay is required between load - and the dependent arithmetic instruction. */ - if (prev_attr == TYPE_LOAD - && insn_true_dependent_p (prev_i, insn)) - { - mt_nops_required = 1; - mt_nop_reasons = "load->arith dependency delay"; - } - break; - - case TYPE_BRANCH: - if (insn_dependent_p (prev_i, insn)) - { - if (prev_attr == TYPE_ARITH && TARGET_MS1_64_001) - { - /* One cycle of delay between arith - instructions and branch dependent on arith. */ - mt_nops_required = 1; - mt_nop_reasons = "arith->branch dependency delay"; - } - else if (prev_attr == TYPE_LOAD) - { - /* Two cycles of delay are required - between load and dependent branch. */ - if (TARGET_MS1_64_001) - mt_nops_required = 2; - else - mt_nops_required = 1; - mt_nop_reasons = "load->branch dependency delay"; - } - } - break; - - default: - fatal_insn ("mt_final_prescan_insn, invalid insn #1", insn); - break; - } -} - -/* Print debugging information for a frame. */ -static void -mt_debug_stack (struct mt_frame_info * info) -{ - int regno; - - if (!info) - { - error ("info pointer NULL"); - gcc_unreachable (); - } - - fprintf (stderr, "\nStack information for function %s:\n", - ((current_function_decl && DECL_NAME (current_function_decl)) - ? IDENTIFIER_POINTER (DECL_NAME (current_function_decl)) - : "<unknown>")); - - fprintf (stderr, "\ttotal_size = %d\n", info->total_size); - fprintf (stderr, "\tpretend_size = %d\n", info->pretend_size); - fprintf (stderr, "\targs_size = %d\n", info->args_size); - fprintf (stderr, "\textra_size = %d\n", info->extra_size); - fprintf (stderr, "\treg_size = %d\n", info->reg_size); - fprintf (stderr, "\tvar_size = %d\n", info->var_size); - fprintf (stderr, "\tframe_size = %d\n", info->frame_size); - fprintf (stderr, "\treg_mask = 0x%x\n", info->reg_mask); - fprintf (stderr, "\tsave_fp = %d\n", info->save_fp); - fprintf (stderr, "\tsave_lr = %d\n", info->save_lr); - fprintf (stderr, "\tinitialized = %d\n", info->initialized); - fprintf (stderr, "\tsaved registers ="); - - /* Print out reg_mask in a more readable format. */ - for (regno = GPR_R0; regno <= GPR_LAST; regno++) - if ( (1 << regno) & info->reg_mask) - fprintf (stderr, " %s", reg_names[regno]); - - putc ('\n', stderr); - fflush (stderr); -} - -/* Print a memory address as an operand to reference that memory location. */ - -static void -mt_print_operand_simple_address (FILE * file, rtx addr) -{ - if (!addr) - error ("PRINT_OPERAND_ADDRESS, null pointer"); - - else - switch (GET_CODE (addr)) - { - case REG: - fprintf (file, "%s, #0", reg_names[REGNO (addr)]); - break; - - case PLUS: - { - rtx reg = 0; - rtx offset = 0; - rtx arg0 = XEXP (addr, 0); - rtx arg1 = XEXP (addr, 1); - - if (GET_CODE (arg0) == REG) - { - reg = arg0; - offset = arg1; - if (GET_CODE (offset) == REG) - fatal_insn ("PRINT_OPERAND_ADDRESS, 2 regs", addr); - } - - else if (GET_CODE (arg1) == REG) - reg = arg1, offset = arg0; - else if (CONSTANT_P (arg0) && CONSTANT_P (arg1)) - { - fprintf (file, "%s, #", reg_names[GPR_R0]); - output_addr_const (file, addr); - break; - } - fprintf (file, "%s, #", reg_names[REGNO (reg)]); - output_addr_const (file, offset); - break; - } - - case LABEL_REF: - case SYMBOL_REF: - case CONST_INT: - case CONST: - output_addr_const (file, addr); - break; - - default: - fatal_insn ("PRINT_OPERAND_ADDRESS, invalid insn #1", addr); - break; - } -} - -/* Implement PRINT_OPERAND_ADDRESS. */ -void -mt_print_operand_address (FILE * file, rtx addr) -{ - if (GET_CODE (addr) == AND - && GET_CODE (XEXP (addr, 1)) == CONST_INT - && INTVAL (XEXP (addr, 1)) == -3) - mt_print_operand_simple_address (file, XEXP (addr, 0)); - else - mt_print_operand_simple_address (file, addr); -} - -/* Implement PRINT_OPERAND. */ -void -mt_print_operand (FILE * file, rtx x, int code) -{ - switch (code) - { - case '#': - /* Output a nop if there's nothing for the delay slot. */ - if (dbr_sequence_length () == 0) - fputs ("\n\tnop", file); - return; - - case 'H': - fprintf(file, "#%%hi16("); - output_addr_const (file, x); - fprintf(file, ")"); - return; - - case 'L': - fprintf(file, "#%%lo16("); - output_addr_const (file, x); - fprintf(file, ")"); - return; - - case 'N': - fprintf(file, "#%ld", ~INTVAL (x)); - return; - - case 'z': - if (GET_CODE (x) == CONST_INT && INTVAL (x) == 0) - { - fputs (reg_names[GPR_R0], file); - return; - } - - case 0: - /* Handled below. */ - break; - - default: - /* output_operand_lossage ("mt_print_operand: unknown code"); */ - fprintf (file, "unknown code"); - return; - } - - switch (GET_CODE (x)) - { - case REG: - fputs (reg_names[REGNO (x)], file); - break; - - case CONST: - case CONST_INT: - fprintf(file, "#%ld", INTVAL (x)); - break; - - case MEM: - mt_print_operand_address(file, XEXP (x,0)); - break; - - case LABEL_REF: - case SYMBOL_REF: - output_addr_const (file, x); - break; - - default: - fprintf(file, "Uknown code: %d", GET_CODE (x)); - break; - } - - return; -} - -/* Implement INIT_CUMULATIVE_ARGS. */ -void -mt_init_cumulative_args (CUMULATIVE_ARGS * cum, tree fntype, rtx libname, - tree fndecl ATTRIBUTE_UNUSED, int incoming) -{ - *cum = 0; - - if (TARGET_DEBUG_ARG) - { - fprintf (stderr, "\nmt_init_cumulative_args:"); - - if (incoming) - fputs (" incoming", stderr); - - if (fntype) - { - tree ret_type = TREE_TYPE (fntype); - fprintf (stderr, " return = %s,", - tree_code_name[ (int)TREE_CODE (ret_type) ]); - } - - if (libname && GET_CODE (libname) == SYMBOL_REF) - fprintf (stderr, " libname = %s", XSTR (libname, 0)); - - if (cfun->returns_struct) - fprintf (stderr, " return-struct"); - - putc ('\n', stderr); - } -} - -/* Compute the slot number to pass an argument in. - Returns the slot number or -1 if passing on the stack. - - CUM is a variable of type CUMULATIVE_ARGS which gives info about - the preceding args and about the function being called. - MODE is the argument's machine mode. - TYPE is the data type of the argument (as a tree). - This is null for libcalls where that information may - not be available. - NAMED is nonzero if this argument is a named parameter - (otherwise it is an extra parameter matching an ellipsis). - INCOMING_P is zero for FUNCTION_ARG, nonzero for FUNCTION_INCOMING_ARG. - *PREGNO records the register number to use if scalar type. */ - -static int -mt_function_arg_slotno (const CUMULATIVE_ARGS * cum, - enum machine_mode mode, - tree type, - int named ATTRIBUTE_UNUSED, - int incoming_p ATTRIBUTE_UNUSED, - int * pregno) -{ - int regbase = FIRST_ARG_REGNUM; - int slotno = * cum; - - if (mode == VOIDmode || targetm.calls.must_pass_in_stack (mode, type)) - return -1; - - if (slotno >= MT_NUM_ARG_REGS) - return -1; - - * pregno = regbase + slotno; - - return slotno; -} - -/* Implement FUNCTION_ARG. */ -rtx -mt_function_arg (const CUMULATIVE_ARGS * cum, - enum machine_mode mode, - tree type, - int named, - int incoming_p) -{ - int slotno, regno; - rtx reg; - - slotno = mt_function_arg_slotno (cum, mode, type, named, incoming_p, ®no); - - if (slotno == -1) - reg = NULL_RTX; - else - reg = gen_rtx_REG (mode, regno); - - return reg; -} - -/* Implement FUNCTION_ARG_ADVANCE. */ -void -mt_function_arg_advance (CUMULATIVE_ARGS * cum, - enum machine_mode mode, - tree type ATTRIBUTE_UNUSED, - int named) -{ - int slotno, regno; - - /* We pass 0 for incoming_p here, it doesn't matter. */ - slotno = mt_function_arg_slotno (cum, mode, type, named, 0, ®no); - - * cum += (mode != BLKmode - ? ROUND_ADVANCE (GET_MODE_SIZE (mode)) - : ROUND_ADVANCE (int_size_in_bytes (type))); - - if (TARGET_DEBUG_ARG) - fprintf (stderr, - "mt_function_arg_advance: words = %2d, mode = %4s, named = %d, size = %3d\n", - *cum, GET_MODE_NAME (mode), named, - (*cum) * UNITS_PER_WORD); -} - -/* Implement hook TARGET_ARG_PARTIAL_BYTES. - - Returns the number of bytes at the beginning of an argument that - must be put in registers. The value must be zero for arguments - that are passed entirely in registers or that are entirely pushed - on the stack. */ -static int -mt_arg_partial_bytes (CUMULATIVE_ARGS * pcum, - enum machine_mode mode, - tree type, - bool named ATTRIBUTE_UNUSED) -{ - int cum = * pcum; - int words; - - if (mode == BLKmode) - words = ((int_size_in_bytes (type) + UNITS_PER_WORD - 1) - / UNITS_PER_WORD); - else - words = (GET_MODE_SIZE (mode) + UNITS_PER_WORD - 1) / UNITS_PER_WORD; - - if (! targetm.calls.pass_by_reference (&cum, mode, type, named) - && cum < MT_NUM_ARG_REGS - && (cum + words) > MT_NUM_ARG_REGS) - { - int bytes = (MT_NUM_ARG_REGS - cum) * UNITS_PER_WORD; - - if (TARGET_DEBUG) - fprintf (stderr, "function_arg_partial_nregs = %d\n", bytes); - return bytes; - } - - return 0; -} - - -/* Implement TARGET_PASS_BY_REFERENCE hook. */ -static bool -mt_pass_by_reference (CUMULATIVE_ARGS * cum ATTRIBUTE_UNUSED, - enum machine_mode mode ATTRIBUTE_UNUSED, - const_tree type, - bool named ATTRIBUTE_UNUSED) -{ - return (type && int_size_in_bytes (type) > 4 * UNITS_PER_WORD); -} - -/* Implement FUNCTION_ARG_BOUNDARY. */ -int -mt_function_arg_boundary (enum machine_mode mode ATTRIBUTE_UNUSED, - tree type ATTRIBUTE_UNUSED) -{ - return BITS_PER_WORD; -} - -/* Implement REG_OK_FOR_BASE_P. */ -int -mt_reg_ok_for_base_p (rtx x, int strict) -{ - if (strict) - return (((unsigned) REGNO (x)) < FIRST_PSEUDO_REGISTER); - return 1; -} - -/* Helper function of mt_legitimate_address_p. Return true if XINSN - is a simple address, otherwise false. */ -static bool -mt_legitimate_simple_address_p (enum machine_mode mode ATTRIBUTE_UNUSED, - rtx xinsn, int strict) -{ - if (TARGET_DEBUG) - { - fprintf (stderr, "\n========== GO_IF_LEGITIMATE_ADDRESS, %sstrict\n", - strict ? "" : "not "); - debug_rtx (xinsn); - } - - if (GET_CODE (xinsn) == REG && mt_reg_ok_for_base_p (xinsn, strict)) - return true; - - if (GET_CODE (xinsn) == PLUS - && GET_CODE (XEXP (xinsn, 0)) == REG - && mt_reg_ok_for_base_p (XEXP (xinsn, 0), strict) - && GET_CODE (XEXP (xinsn, 1)) == CONST_INT - && SMALL_INT (XEXP (xinsn, 1))) - return true; - - return false; -} - - -/* Helper function of GO_IF_LEGITIMATE_ADDRESS. Return nonzero if - XINSN is a legitimate address on MT. */ -int -mt_legitimate_address_p (enum machine_mode mode, rtx xinsn, int strict) -{ - if (mt_legitimate_simple_address_p (mode, xinsn, strict)) - return 1; - - if ((mode) == SImode - && GET_CODE (xinsn) == AND - && GET_CODE (XEXP (xinsn, 1)) == CONST_INT - && INTVAL (XEXP (xinsn, 1)) == -3) - return mt_legitimate_simple_address_p (mode, XEXP (xinsn, 0), strict); - else - return 0; -} - -/* Return truth value of whether OP can be used as an operands where a - register or 16-bit unsigned integer is needed. */ - -int -uns_arith_operand (rtx op, enum machine_mode mode) -{ - if (GET_CODE (op) == CONST_INT && SMALL_INT_UNSIGNED (op)) - return 1; - - return register_operand (op, mode); -} - -/* Return truth value of whether OP can be used as an operands where a - 16-bit integer is needed. */ - -int -arith_operand (rtx op, enum machine_mode mode) -{ - if (GET_CODE (op) == CONST_INT && SMALL_INT (op)) - return 1; - - return register_operand (op, mode); -} - -/* Return truth value of whether OP is a register or the constant 0. */ - -int -reg_or_0_operand (rtx op, enum machine_mode mode) -{ - switch (GET_CODE (op)) - { - case CONST_INT: - return INTVAL (op) == 0; - - case REG: - case SUBREG: - return register_operand (op, mode); - - default: - break; - } - - return 0; -} - -/* Return truth value of whether OP is a constant that requires two - loads to put in a register. */ - -int -big_const_operand (rtx op, enum machine_mode mode ATTRIBUTE_UNUSED) -{ - if (GET_CODE (op) == CONST_INT && CONST_OK_FOR_LETTER_P (INTVAL (op), 'M')) - return 1; - - return 0; -} - -/* Return truth value of whether OP is a constant that require only - one load to put in a register. */ - -int -single_const_operand (rtx op, enum machine_mode mode ATTRIBUTE_UNUSED) -{ - if (big_const_operand (op, mode) - || GET_CODE (op) == CONST - || GET_CODE (op) == LABEL_REF - || GET_CODE (op) == SYMBOL_REF) - return 0; - - return 1; -} - -/* True if the current function is an interrupt handler - (either via #pragma or an attribute specification). */ -int interrupt_handler; -enum processor_type mt_cpu; - -static struct machine_function * -mt_init_machine_status (void) -{ - struct machine_function *f; - - f = ggc_alloc_cleared (sizeof (struct machine_function)); - - return f; -} - -/* Implement OVERRIDE_OPTIONS. */ -void -mt_override_options (void) -{ - if (mt_cpu_string != NULL) - { - if (!strcmp (mt_cpu_string, "ms1-64-001")) - mt_cpu = PROCESSOR_MS1_64_001; - else if (!strcmp (mt_cpu_string, "ms1-16-002")) - mt_cpu = PROCESSOR_MS1_16_002; - else if (!strcmp (mt_cpu_string, "ms1-16-003")) - mt_cpu = PROCESSOR_MS1_16_003; - else if (!strcmp (mt_cpu_string, "ms2")) - mt_cpu = PROCESSOR_MS2; - else - error ("bad value (%s) for -march= switch", mt_cpu_string); - } - else - mt_cpu = PROCESSOR_MS1_16_002; - - if (flag_exceptions) - { - flag_omit_frame_pointer = 0; - flag_gcse = 0; - } - - /* We do delayed branch filling in machine dependent reorg */ - mt_flag_delayed_branch = flag_delayed_branch; - flag_delayed_branch = 0; - - init_machine_status = mt_init_machine_status; -} - -/* Do what is necessary for `va_start'. We look at the current function - to determine if stdarg or varargs is used and return the address of the - first unnamed parameter. */ - -static void -mt_setup_incoming_varargs (CUMULATIVE_ARGS *cum, - enum machine_mode mode ATTRIBUTE_UNUSED, - tree type ATTRIBUTE_UNUSED, - int *pretend_size, int no_rtl) -{ - int regno; - int regs = MT_NUM_ARG_REGS - *cum; - - *pretend_size = regs < 0 ? 0 : GET_MODE_SIZE (SImode) * regs; - - if (no_rtl) - return; - - for (regno = *cum; regno < MT_NUM_ARG_REGS; regno++) - { - rtx reg = gen_rtx_REG (SImode, FIRST_ARG_REGNUM + regno); - rtx slot = gen_rtx_PLUS (Pmode, - gen_rtx_REG (SImode, ARG_POINTER_REGNUM), - GEN_INT (UNITS_PER_WORD * regno)); - - emit_move_insn (gen_rtx_MEM (SImode, slot), reg); - } -} - -/* Returns the number of bytes offset between the frame pointer and the stack - pointer for the current function. SIZE is the number of bytes of space - needed for local variables. */ - -unsigned int -mt_compute_frame_size (int size) -{ - int regno; - unsigned int total_size; - unsigned int var_size; - unsigned int args_size; - unsigned int pretend_size; - unsigned int extra_size; - unsigned int reg_size; - unsigned int frame_size; - unsigned int reg_mask; - - var_size = size; - args_size = crtl->outgoing_args_size; - pretend_size = crtl->args.pretend_args_size; - extra_size = FIRST_PARM_OFFSET (0); - total_size = extra_size + pretend_size + args_size + var_size; - reg_size = 0; - reg_mask = 0; - - /* Calculate space needed for registers. */ - for (regno = GPR_R0; regno <= GPR_LAST; regno++) - { - if (MUST_SAVE_REGISTER (regno)) - { - reg_size += UNITS_PER_WORD; - reg_mask |= 1 << regno; - } - } - - current_frame_info.save_fp = (df_regs_ever_live_p (GPR_FP) - || frame_pointer_needed - || interrupt_handler); - current_frame_info.save_lr = (df_regs_ever_live_p (GPR_LINK) - || profile_flag - || interrupt_handler); - - reg_size += (current_frame_info.save_fp + current_frame_info.save_lr) - * UNITS_PER_WORD; - total_size += reg_size; - total_size = ((total_size + 3) & ~3); - - frame_size = total_size; - - /* Save computed information. */ - current_frame_info.pretend_size = pretend_size; - current_frame_info.var_size = var_size; - current_frame_info.args_size = args_size; - current_frame_info.reg_size = reg_size; - current_frame_info.frame_size = args_size + var_size; - current_frame_info.total_size = total_size; - current_frame_info.extra_size = extra_size; - current_frame_info.reg_mask = reg_mask; - current_frame_info.initialized = reload_completed; - - return total_size; -} - -/* Emit code to save REG in stack offset pointed to by MEM. - STACK_OFFSET is the offset from the SP where the save will happen. - This function sets the REG_FRAME_RELATED_EXPR note accordingly. */ -static void -mt_emit_save_restore (enum save_direction direction, - rtx reg, rtx mem, int stack_offset) -{ - if (direction == FROM_PROCESSOR_TO_MEM) - { - rtx insn; - - insn = emit_move_insn (mem, reg); - RTX_FRAME_RELATED_P (insn) = 1; - REG_NOTES (insn) - = gen_rtx_EXPR_LIST - (REG_FRAME_RELATED_EXPR, - gen_rtx_SET (VOIDmode, - gen_rtx_MEM (SImode, - gen_rtx_PLUS (SImode, - stack_pointer_rtx, - GEN_INT (stack_offset))), - reg), - REG_NOTES (insn)); - } - else - emit_move_insn (reg, mem); -} - - -/* Emit code to save the frame pointer in the prologue and restore - frame pointer in epilogue. */ - -static void -mt_emit_save_fp (enum save_direction direction, - struct mt_frame_info info) -{ - rtx base_reg; - int reg_mask = info.reg_mask & ~(FP_MASK | LINK_MASK); - int offset = info.total_size; - int stack_offset = info.total_size; - - /* If there is nothing to save, get out now. */ - if (! info.save_fp && ! info.save_lr && ! reg_mask) - return; - - /* If offset doesn't fit in a 15-bit signed integer, - uses a scratch registers to get a smaller offset. */ - if (CONST_OK_FOR_LETTER_P(offset, 'O')) - base_reg = stack_pointer_rtx; - else - { - /* Use the scratch register R9 that holds old stack pointer. */ - base_reg = gen_rtx_REG (SImode, GPR_R9); - offset = 0; - } - - if (info.save_fp) - { - offset -= UNITS_PER_WORD; - stack_offset -= UNITS_PER_WORD; - mt_emit_save_restore - (direction, gen_rtx_REG (SImode, GPR_FP), - gen_rtx_MEM (SImode, - gen_rtx_PLUS (SImode, base_reg, GEN_INT (offset))), - stack_offset); - } -} - -/* Emit code to save registers in the prologue and restore register - in epilogue. */ - -static void -mt_emit_save_regs (enum save_direction direction, - struct mt_frame_info info) -{ - rtx base_reg; - int regno; - int reg_mask = info.reg_mask & ~(FP_MASK | LINK_MASK); - int offset = info.total_size; - int stack_offset = info.total_size; - - /* If there is nothing to save, get out now. */ - if (! info.save_fp && ! info.save_lr && ! reg_mask) - return; - - /* If offset doesn't fit in a 15-bit signed integer, - uses a scratch registers to get a smaller offset. */ - if (CONST_OK_FOR_LETTER_P(offset, 'O')) - base_reg = stack_pointer_rtx; - else - { - /* Use the scratch register R9 that holds old stack pointer. */ - base_reg = gen_rtx_REG (SImode, GPR_R9); - offset = 0; - } - - if (info.save_fp) - { - /* This just records the space for it, the actual move generated in - mt_emit_save_fp (). */ - offset -= UNITS_PER_WORD; - stack_offset -= UNITS_PER_WORD; - } - - if (info.save_lr) - { - offset -= UNITS_PER_WORD; - stack_offset -= UNITS_PER_WORD; - mt_emit_save_restore - (direction, gen_rtx_REG (SImode, GPR_LINK), - gen_rtx_MEM (SImode, - gen_rtx_PLUS (SImode, base_reg, GEN_INT (offset))), - stack_offset); - } - - /* Save any needed call-saved regs. */ - for (regno = GPR_R0; regno <= GPR_LAST; regno++) - { - if ((reg_mask & (1 << regno)) != 0) - { - offset -= UNITS_PER_WORD; - stack_offset -= UNITS_PER_WORD; - mt_emit_save_restore - (direction, gen_rtx_REG (SImode, regno), - gen_rtx_MEM (SImode, - gen_rtx_PLUS (SImode, base_reg, GEN_INT (offset))), - stack_offset); - } - } -} - -/* Return true if FUNC is a function with the 'interrupt' attribute. */ -static bool -mt_interrupt_function_p (tree func) -{ - tree a; - - if (TREE_CODE (func) != FUNCTION_DECL) - return false; - - a = lookup_attribute ("interrupt", DECL_ATTRIBUTES (func)); - return a != NULL_TREE; -} - -/* Generate prologue code. */ -void -mt_expand_prologue (void) -{ - rtx size_rtx, insn; - unsigned int frame_size; - - if (mt_interrupt_function_p (current_function_decl)) - { - interrupt_handler = 1; - if (cfun->machine) - cfun->machine->interrupt_handler = 1; - } - - mt_compute_frame_size (get_frame_size ()); - - if (TARGET_DEBUG_STACK) - mt_debug_stack (¤t_frame_info); - - /* Compute size of stack adjustment. */ - frame_size = current_frame_info.total_size; - - /* If offset doesn't fit in a 15-bit signed integer, - uses a scratch registers to get a smaller offset. */ - if (CONST_OK_FOR_LETTER_P(frame_size, 'O')) - size_rtx = GEN_INT (frame_size); - else - { - /* We do not have any scratch registers. */ - gcc_assert (!interrupt_handler); - - size_rtx = gen_rtx_REG (SImode, GPR_R9); - insn = emit_move_insn (size_rtx, GEN_INT (frame_size & 0xffff0000)); - insn = emit_insn (gen_iorsi3 (size_rtx, size_rtx, - GEN_INT (frame_size & 0x0000ffff))); - } - - /* Allocate stack for this frame. */ - /* Make stack adjustment and use scratch register if constant too - large to fit as immediate. */ - if (frame_size) - { - insn = emit_insn (gen_subsi3 (stack_pointer_rtx, - stack_pointer_rtx, - size_rtx)); - RTX_FRAME_RELATED_P (insn) = 1; - REG_NOTES (insn) - = gen_rtx_EXPR_LIST (REG_FRAME_RELATED_EXPR, - gen_rtx_SET (VOIDmode, - stack_pointer_rtx, - gen_rtx_MINUS (SImode, - stack_pointer_rtx, - GEN_INT (frame_size))), - REG_NOTES (insn)); - } - - /* Set R9 to point to old sp if required for access to register save - area. */ - if ( current_frame_info.reg_size != 0 - && !CONST_OK_FOR_LETTER_P (frame_size, 'O')) - emit_insn (gen_addsi3 (size_rtx, size_rtx, stack_pointer_rtx)); - - /* Save the frame pointer. */ - mt_emit_save_fp (FROM_PROCESSOR_TO_MEM, current_frame_info); - - /* Now put the frame pointer into the frame pointer register. */ - if (frame_pointer_needed) - { - insn = emit_move_insn (frame_pointer_rtx, stack_pointer_rtx); - RTX_FRAME_RELATED_P (insn) = 1; - } - - /* Save the registers. */ - mt_emit_save_regs (FROM_PROCESSOR_TO_MEM, current_frame_info); - - /* If we are profiling, make sure no instructions are scheduled before - the call to mcount. */ - if (profile_flag) - emit_insn (gen_blockage ()); -} - -/* Implement EPILOGUE_USES. */ -int -mt_epilogue_uses (int regno) -{ - if (cfun->machine && cfun->machine->interrupt_handler && reload_completed) - return 1; - return regno == GPR_LINK; -} - -/* Generate epilogue. EH_MODE is NORMAL_EPILOGUE when generating a - function epilogue, or EH_EPILOGUE when generating an EH - epilogue. */ -void -mt_expand_epilogue (enum epilogue_type eh_mode) -{ - rtx size_rtx, insn; - unsigned frame_size; - - mt_compute_frame_size (get_frame_size ()); - - if (TARGET_DEBUG_STACK) - mt_debug_stack (& current_frame_info); - - /* Compute size of stack adjustment. */ - frame_size = current_frame_info.total_size; - - /* If offset doesn't fit in a 15-bit signed integer, - uses a scratch registers to get a smaller offset. */ - if (CONST_OK_FOR_LETTER_P(frame_size, 'O')) - size_rtx = GEN_INT (frame_size); - else - { - /* We do not have any scratch registers. */ - gcc_assert (!interrupt_handler); - - size_rtx = gen_rtx_REG (SImode, GPR_R9); - insn = emit_move_insn (size_rtx, GEN_INT (frame_size & 0xffff0000)); - insn = emit_insn (gen_iorsi3 (size_rtx, size_rtx, - GEN_INT (frame_size & 0x0000ffff))); - /* Set R9 to point to old sp if required for access to register - save area. */ - emit_insn (gen_addsi3 (size_rtx, size_rtx, stack_pointer_rtx)); - } - - /* Restore sp if there was some possible change to it. */ - if (frame_pointer_needed) - insn = emit_move_insn (stack_pointer_rtx, frame_pointer_rtx); - - /* Restore the registers. */ - mt_emit_save_fp (FROM_MEM_TO_PROCESSOR, current_frame_info); - mt_emit_save_regs (FROM_MEM_TO_PROCESSOR, current_frame_info); - - /* Make stack adjustment and use scratch register if constant too - large to fit as immediate. */ - if (frame_size) - { - if (CONST_OK_FOR_LETTER_P(frame_size, 'O')) - /* Can handle this with simple add. */ - insn = emit_insn (gen_addsi3 (stack_pointer_rtx, - stack_pointer_rtx, - size_rtx)); - else - /* Scratch reg R9 has the old sp value. */ - insn = emit_move_insn (stack_pointer_rtx, - gen_rtx_REG (SImode, GPR_R9)); - - REG_NOTES (insn) - = gen_rtx_EXPR_LIST (REG_FRAME_RELATED_EXPR, - gen_rtx_SET (VOIDmode, - stack_pointer_rtx, - gen_rtx_PLUS (SImode, - stack_pointer_rtx, - GEN_INT (frame_size))), - REG_NOTES (insn)); - } - - if (cfun->machine && cfun->machine->eh_stack_adjust != NULL_RTX) - /* Perform the additional bump for __throw. */ - emit_insn (gen_addsi3 (stack_pointer_rtx, - stack_pointer_rtx, - cfun->machine->eh_stack_adjust)); - - /* Generate the appropriate return. */ - if (eh_mode == EH_EPILOGUE) - { - emit_jump_insn (gen_eh_return_internal ()); - emit_barrier (); - } - else if (interrupt_handler) - emit_jump_insn (gen_return_interrupt_internal ()); - else - emit_jump_insn (gen_return_internal ()); - - /* Reset state info for each function. */ - interrupt_handler = 0; - current_frame_info = zero_frame_info; - if (cfun->machine) - cfun->machine->eh_stack_adjust = NULL_RTX; -} - - -/* Generate code for the "eh_return" pattern. */ -void -mt_expand_eh_return (rtx * operands) -{ - if (GET_CODE (operands[0]) != REG - || REGNO (operands[0]) != EH_RETURN_STACKADJ_REGNO) - { - rtx sp = EH_RETURN_STACKADJ_RTX; - - emit_move_insn (sp, operands[0]); - operands[0] = sp; - } - - emit_insn (gen_eh_epilogue (operands[0])); -} - -/* Generate code for the "eh_epilogue" pattern. */ -void -mt_emit_eh_epilogue (rtx * operands ATTRIBUTE_UNUSED) -{ - cfun->machine->eh_stack_adjust = EH_RETURN_STACKADJ_RTX; /* operands[0]; */ - mt_expand_epilogue (EH_EPILOGUE); -} - -/* Handle an "interrupt" attribute. */ -static tree -mt_handle_interrupt_attribute (tree * node, - tree name, - tree args ATTRIBUTE_UNUSED, - int flags ATTRIBUTE_UNUSED, - bool * no_add_attrs) -{ - if (TREE_CODE (*node) != FUNCTION_DECL) - { - warning (OPT_Wattributes, - "%qs attribute only applies to functions", - IDENTIFIER_POINTER (name)); - *no_add_attrs = true; - } - - return NULL_TREE; -} - -/* Table of machine attributes. */ -const struct attribute_spec mt_attribute_table[] = -{ - /* name, min, max, decl?, type?, func?, handler */ - { "interrupt", 0, 0, false, false, false, mt_handle_interrupt_attribute }, - { NULL, 0, 0, false, false, false, NULL } -}; - -/* Implement INITIAL_ELIMINATION_OFFSET. */ -int -mt_initial_elimination_offset (int from, int to) -{ - mt_compute_frame_size (get_frame_size ()); - - if (from == FRAME_POINTER_REGNUM && to == STACK_POINTER_REGNUM) - return 0; - - else if (from == ARG_POINTER_REGNUM && to == STACK_POINTER_REGNUM) - return current_frame_info.total_size; - - else if (from == ARG_POINTER_REGNUM && to == FRAME_POINTER_REGNUM) - return current_frame_info.total_size; - - else - gcc_unreachable (); -} - -/* Generate a compare for CODE. Return a brand-new rtx that - represents the result of the compare. */ - -static rtx -mt_generate_compare (enum rtx_code code, rtx op0, rtx op1) -{ - rtx scratch0, scratch1, const_scratch; - - switch (code) - { - case GTU: - case LTU: - case GEU: - case LEU: - /* Need to adjust ranges for faking unsigned compares. */ - scratch0 = gen_reg_rtx (SImode); - scratch1 = gen_reg_rtx (SImode); - const_scratch = force_reg (SImode, GEN_INT(MT_MIN_INT)); - emit_insn (gen_addsi3 (scratch0, const_scratch, op0)); - emit_insn (gen_addsi3 (scratch1, const_scratch, op1)); - break; - default: - scratch0 = op0; - scratch1 = op1; - break; - } - - /* Adjust compare operator to fake unsigned compares. */ - switch (code) - { - case GTU: - code = GT; break; - case LTU: - code = LT; break; - case GEU: - code = GE; break; - case LEU: - code = LE; break; - default: - /* do nothing */ - break; - } - - /* Generate the actual compare. */ - return gen_rtx_fmt_ee (code, VOIDmode, scratch0, scratch1); -} - -/* Emit a branch of kind CODE to location LOC. */ - -void -mt_emit_cbranch (enum rtx_code code, rtx loc, rtx op0, rtx op1) -{ - rtx condition_rtx, loc_ref; - - if (! reg_or_0_operand (op0, SImode)) - op0 = copy_to_mode_reg (SImode, op0); - - if (! reg_or_0_operand (op1, SImode)) - op1 = copy_to_mode_reg (SImode, op1); - - condition_rtx = mt_generate_compare (code, op0, op1); - loc_ref = gen_rtx_LABEL_REF (VOIDmode, loc); - emit_jump_insn (gen_rtx_SET (VOIDmode, pc_rtx, - gen_rtx_IF_THEN_ELSE (VOIDmode, condition_rtx, - loc_ref, pc_rtx))); -} - -/* Subfunction of the following function. Update the flags of any MEM - found in part of X. */ - -static void -mt_set_memflags_1 (rtx x, int in_struct_p, int volatile_p) -{ - int i; - - switch (GET_CODE (x)) - { - case SEQUENCE: - case PARALLEL: - for (i = XVECLEN (x, 0) - 1; i >= 0; i--) - mt_set_memflags_1 (XVECEXP (x, 0, i), in_struct_p, volatile_p); - break; - - case INSN: - mt_set_memflags_1 (PATTERN (x), in_struct_p, volatile_p); - break; - - case SET: - mt_set_memflags_1 (SET_DEST (x), in_struct_p, volatile_p); - mt_set_memflags_1 (SET_SRC (x), in_struct_p, volatile_p); - break; - - case MEM: - MEM_IN_STRUCT_P (x) = in_struct_p; - MEM_VOLATILE_P (x) = volatile_p; - /* Sadly, we cannot use alias sets because the extra aliasing - produced by the AND interferes. Given that two-byte quantities - are the only thing we would be able to differentiate anyway, - there does not seem to be any point in convoluting the early - out of the alias check. */ - /* set_mem_alias_set (x, alias_set); */ - break; - - default: - break; - } -} - -/* Look for any MEMs in the current sequence of insns and set the - in-struct, unchanging, and volatile flags from the flags in REF. - If REF is not a MEM, don't do anything. */ - -void -mt_set_memflags (rtx ref) -{ - rtx insn; - int in_struct_p, volatile_p; - - if (GET_CODE (ref) != MEM) - return; - - in_struct_p = MEM_IN_STRUCT_P (ref); - volatile_p = MEM_VOLATILE_P (ref); - - /* This is only called from mt.md, after having had something - generated from one of the insn patterns. So if everything is - zero, the pattern is already up-to-date. */ - if (! in_struct_p && ! volatile_p) - return; - - for (insn = get_insns (); insn; insn = NEXT_INSN (insn)) - mt_set_memflags_1 (insn, in_struct_p, volatile_p); -} - -/* Implement SECONDARY_RELOAD_CLASS. */ -enum reg_class -mt_secondary_reload_class (enum reg_class class ATTRIBUTE_UNUSED, - enum machine_mode mode, - rtx x) -{ - if ((mode == QImode && (!TARGET_BYTE_ACCESS)) || mode == HImode) - { - if (GET_CODE (x) == MEM - || (GET_CODE (x) == REG && true_regnum (x) == -1) - || (GET_CODE (x) == SUBREG - && (GET_CODE (SUBREG_REG (x)) == MEM - || (GET_CODE (SUBREG_REG (x)) == REG - && true_regnum (SUBREG_REG (x)) == -1)))) - return GENERAL_REGS; - } - - return NO_REGS; -} - -/* Handle FUNCTION_VALUE, FUNCTION_OUTGOING_VALUE, and LIBCALL_VALUE - macros. */ -rtx -mt_function_value (const_tree valtype, enum machine_mode mode, const_tree func_decl ATTRIBUTE_UNUSED) -{ - if ((mode) == DImode || (mode) == DFmode) - return gen_rtx_MEM (mode, gen_rtx_REG (mode, RETURN_VALUE_REGNUM)); - - if (valtype) - mode = TYPE_MODE (valtype); - - return gen_rtx_REG (mode, RETURN_VALUE_REGNUM); -} - -/* Split a move into two smaller pieces. - MODE indicates the reduced mode. OPERANDS[0] is the original destination - OPERANDS[1] is the original src. The new destinations are - OPERANDS[2] and OPERANDS[4], while the new sources are OPERANDS[3] - and OPERANDS[5]. */ - -void -mt_split_words (enum machine_mode nmode, - enum machine_mode omode, - rtx *operands) -{ - rtx dl,dh; /* src/dest pieces. */ - rtx sl,sh; - int move_high_first = 0; /* Assume no overlap. */ - - switch (GET_CODE (operands[0])) /* Dest. */ - { - case SUBREG: - case REG: - if ((GET_CODE (operands[1]) == REG - || GET_CODE (operands[1]) == SUBREG) - && true_regnum (operands[0]) <= true_regnum (operands[1])) - move_high_first = 1; - - if (GET_CODE (operands[0]) == SUBREG) - { - dl = gen_rtx_SUBREG (nmode, SUBREG_REG (operands[0]), - SUBREG_BYTE (operands[0]) + GET_MODE_SIZE (nmode)); - dh = gen_rtx_SUBREG (nmode, SUBREG_REG (operands[0]), SUBREG_BYTE (operands[0])); - } - else if (GET_CODE (operands[0]) == REG && ! IS_PSEUDO_P (operands[0])) - { - int r = REGNO (operands[0]); - dh = gen_rtx_REG (nmode, r); - dl = gen_rtx_REG (nmode, r + HARD_REGNO_NREGS (r, nmode)); - } - else - { - dh = gen_rtx_SUBREG (nmode, operands[0], 0); - dl = gen_rtx_SUBREG (nmode, operands[0], GET_MODE_SIZE (nmode)); - } - break; - - case MEM: - switch (GET_CODE (XEXP (operands[0], 0))) - { - case POST_INC: - case POST_DEC: - gcc_unreachable (); - default: - dl = operand_subword (operands[0], - GET_MODE_SIZE (nmode)/UNITS_PER_WORD, - 0, omode); - dh = operand_subword (operands[0], 0, 0, omode); - } - break; - default: - gcc_unreachable (); - } - - switch (GET_CODE (operands[1])) - { - case REG: - if (! IS_PSEUDO_P (operands[1])) - { - int r = REGNO (operands[1]); - - sh = gen_rtx_REG (nmode, r); - sl = gen_rtx_REG (nmode, r + HARD_REGNO_NREGS (r, nmode)); - } - else - { - sh = gen_rtx_SUBREG (nmode, operands[1], 0); - sl = gen_rtx_SUBREG (nmode, operands[1], GET_MODE_SIZE (nmode)); - } - break; - - case CONST_DOUBLE: - if (operands[1] == const0_rtx) - sh = sl = const0_rtx; - else - split_double (operands[1], & sh, & sl); - break; - - case CONST_INT: - if (operands[1] == const0_rtx) - sh = sl = const0_rtx; - else - { - int vl, vh; - - switch (nmode) - { - default: - gcc_unreachable (); - } - - sl = GEN_INT (vl); - sh = GEN_INT (vh); - } - break; - - case SUBREG: - sl = gen_rtx_SUBREG (nmode, - SUBREG_REG (operands[1]), - SUBREG_BYTE (operands[1]) + GET_MODE_SIZE (nmode)); - sh = gen_rtx_SUBREG (nmode, - SUBREG_REG (operands[1]), - SUBREG_BYTE (operands[1])); - break; - - case MEM: - switch (GET_CODE (XEXP (operands[1], 0))) - { - case POST_DEC: - case POST_INC: - gcc_unreachable (); - break; - default: - sl = operand_subword (operands[1], - GET_MODE_SIZE (nmode)/UNITS_PER_WORD, - 0, omode); - sh = operand_subword (operands[1], 0, 0, omode); - - /* Check if the DF load is going to clobber the register - used for the address, and if so make sure that is going - to be the second move. */ - if (GET_CODE (dl) == REG - && true_regnum (dl) - == true_regnum (XEXP (XEXP (sl, 0 ), 0))) - move_high_first = 1; - } - break; - default: - gcc_unreachable (); - } - - if (move_high_first) - { - operands[2] = dh; - operands[3] = sh; - operands[4] = dl; - operands[5] = sl; - } - else - { - operands[2] = dl; - operands[3] = sl; - operands[4] = dh; - operands[5] = sh; - } - return; -} - -/* Implement TARGET_MUST_PASS_IN_STACK hook. */ -static bool -mt_pass_in_stack (enum machine_mode mode ATTRIBUTE_UNUSED, const_tree type) -{ - return (((type) != 0 - && (TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST - || TREE_ADDRESSABLE (type)))); -} - -/* Increment the counter for the number of loop instructions in the - current function. */ - -void mt_add_loop (void) -{ - cfun->machine->has_loops++; -} - - -/* Maximum loop nesting depth. */ -#define MAX_LOOP_DEPTH 4 -/* Maximum size of a loop (allows some headroom for delayed branch slot - filling. */ -#define MAX_LOOP_LENGTH (200 * 4) - -/* We need to keep a vector of loops */ -typedef struct loop_info *loop_info; -DEF_VEC_P (loop_info); -DEF_VEC_ALLOC_P (loop_info,heap); - -/* Information about a loop we have found (or are in the process of - finding). */ -struct loop_info GTY (()) -{ - /* loop number, for dumps */ - int loop_no; - - /* Predecessor block of the loop. This is the one that falls into - the loop and contains the initialization instruction. */ - basic_block predecessor; - - /* First block in the loop. This is the one branched to by the dbnz - insn. */ - basic_block head; - - /* Last block in the loop (the one with the dbnz insn */ - basic_block tail; - - /* The successor block of the loop. This is the one the dbnz insn - falls into. */ - basic_block successor; - - /* The dbnz insn. */ - rtx dbnz; - - /* The initialization insn. */ - rtx init; - - /* The new initialization instruction. */ - rtx loop_init; - - /* The new ending instruction. */ - rtx loop_end; - - /* The new label placed at the end of the loop. */ - rtx end_label; - - /* The nesting depth of the loop. Set to -1 for a bad loop. */ - int depth; - - /* The length of the loop. */ - int length; - - /* Next loop in the graph. */ - struct loop_info *next; - - /* Vector of blocks only within the loop, (excluding those within - inner loops). */ - VEC (basic_block,heap) *blocks; - - /* Vector of inner loops within this loop */ - VEC (loop_info,heap) *loops; -}; - -/* Information used during loop detection. */ -typedef struct loop_work GTY(()) -{ - /* Basic block to be scanned. */ - basic_block block; - - /* Loop it will be within. */ - loop_info loop; -} loop_work; - -/* Work list. */ -DEF_VEC_O (loop_work); -DEF_VEC_ALLOC_O (loop_work,heap); - -/* Determine the nesting and length of LOOP. Return false if the loop - is bad. */ - -static bool -mt_loop_nesting (loop_info loop) -{ - loop_info inner; - unsigned ix; - int inner_depth = 0; - - if (!loop->depth) - { - /* Make sure we only have one entry point. */ - if (EDGE_COUNT (loop->head->preds) == 2) - { - loop->predecessor = EDGE_PRED (loop->head, 0)->src; - if (loop->predecessor == loop->tail) - /* We wanted the other predecessor. */ - loop->predecessor = EDGE_PRED (loop->head, 1)->src; - - /* We can only place a loop insn on a fall through edge of a - single exit block. */ - if (EDGE_COUNT (loop->predecessor->succs) != 1 - || !(EDGE_SUCC (loop->predecessor, 0)->flags & EDGE_FALLTHRU)) - loop->predecessor = NULL; - } - - /* Mark this loop as bad for now. */ - loop->depth = -1; - if (loop->predecessor) - { - for (ix = 0; VEC_iterate (loop_info, loop->loops, ix++, inner);) - { - if (!inner->depth) - mt_loop_nesting (inner); - - if (inner->depth < 0) - { - inner_depth = -1; - break; - } - - if (inner_depth < inner->depth) - inner_depth = inner->depth; - loop->length += inner->length; - } - - /* Set the proper loop depth, if it was good. */ - if (inner_depth >= 0) - loop->depth = inner_depth + 1; - } - } - return (loop->depth > 0 - && loop->predecessor - && loop->depth < MAX_LOOP_DEPTH - && loop->length < MAX_LOOP_LENGTH); -} - -/* Determine the length of block BB. */ - -static int -mt_block_length (basic_block bb) -{ - int length = 0; - rtx insn; - - for (insn = BB_HEAD (bb); - insn != NEXT_INSN (BB_END (bb)); - insn = NEXT_INSN (insn)) - { - if (!INSN_P (insn)) - continue; - if (CALL_P (insn)) - { - /* Calls are not allowed in loops. */ - length = MAX_LOOP_LENGTH + 1; - break; - } - - length += get_attr_length (insn); - } - return length; -} - -/* Scan the blocks of LOOP (and its inferiors) looking for uses of - REG. Return true, if we find any. Don't count the loop's dbnz - insn if it matches DBNZ. */ - -static bool -mt_scan_loop (loop_info loop, rtx reg, rtx dbnz) -{ - unsigned ix; - loop_info inner; - basic_block bb; - - for (ix = 0; VEC_iterate (basic_block, loop->blocks, ix, bb); ix++) - { - rtx insn; - - for (insn = BB_HEAD (bb); - insn != NEXT_INSN (BB_END (bb)); - insn = NEXT_INSN (insn)) - { - if (!INSN_P (insn)) - continue; - if (insn == dbnz) - continue; - if (reg_mentioned_p (reg, PATTERN (insn))) - return true; - } - } - for (ix = 0; VEC_iterate (loop_info, loop->loops, ix, inner); ix++) - if (mt_scan_loop (inner, reg, NULL_RTX)) - return true; - - return false; -} - -/* MS2 has a loop instruction which needs to be placed just before the - loop. It indicates the end of the loop and specifies the number of - loop iterations. It can be nested with an automatically maintained - stack of counter and end address registers. It's an ideal - candidate for doloop. Unfortunately, gcc presumes that loops - always end with an explicit instruction, and the doloop_begin - instruction is not a flow control instruction so it can be - scheduled earlier than just before the start of the loop. To make - matters worse, the optimization pipeline can duplicate loop exit - and entrance blocks and fails to track abnormally exiting loops. - Thus we cannot simply use doloop. - - What we do is emit a dbnz pattern for the doloop optimization, and - let that be optimized as normal. Then in machine dependent reorg - we have to repeat the loop searching algorithm. We use the - flow graph to find closed loops ending in a dbnz insn. We then try - and convert it to use the loop instruction. The conditions are, - - * the loop has no abnormal exits, duplicated end conditions or - duplicated entrance blocks - - * the loop counter register is only used in the dbnz instruction - within the loop - - * we can find the instruction setting the initial value of the loop - counter - - * the loop is not executed more than 65535 times. (This might be - changed to 2^32-1, and would therefore allow variable initializers.) - - * the loop is not nested more than 4 deep 5) there are no - subroutine calls in the loop. */ - -static void -mt_reorg_loops (FILE *dump_file) -{ - basic_block bb; - loop_info loops = NULL; - loop_info loop; - int nloops = 0; - unsigned dwork = 0; - VEC (loop_work,heap) *works = VEC_alloc (loop_work,heap,20); - loop_work *work; - edge e; - edge_iterator ei; - bool replaced = false; - - /* Find all the possible loop tails. This means searching for every - dbnz instruction. For each one found, create a loop_info - structure and add the head block to the work list. */ - FOR_EACH_BB (bb) - { - rtx tail = BB_END (bb); - - while (GET_CODE (tail) == NOTE) - tail = PREV_INSN (tail); - - bb->aux = NULL; - if (recog_memoized (tail) == CODE_FOR_decrement_and_branch_until_zero) - { - /* A possible loop end */ - - loop = XNEW (struct loop_info); - loop->next = loops; - loops = loop; - loop->tail = bb; - loop->head = BRANCH_EDGE (bb)->dest; - loop->successor = FALLTHRU_EDGE (bb)->dest; - loop->predecessor = NULL; - loop->dbnz = tail; - loop->depth = 0; - loop->length = mt_block_length (bb); - loop->blocks = VEC_alloc (basic_block, heap, 20); - VEC_quick_push (basic_block, loop->blocks, bb); - loop->loops = NULL; - loop->loop_no = nloops++; - - loop->init = loop->end_label = NULL_RTX; - loop->loop_init = loop->loop_end = NULL_RTX; - - work = VEC_safe_push (loop_work, heap, works, NULL); - work->block = loop->head; - work->loop = loop; - - bb->aux = loop; - - if (dump_file) - { - fprintf (dump_file, ";; potential loop %d ending at\n", - loop->loop_no); - print_rtl_single (dump_file, tail); - } - } - } - - /* Now find all the closed loops. - until work list empty, - if block's auxptr is set - if != loop slot - if block's loop's start != block - mark loop as bad - else - append block's loop's fallthrough block to worklist - increment this loop's depth - else if block is exit block - mark loop as bad - else - set auxptr - for each target of block - add to worklist */ - while (VEC_iterate (loop_work, works, dwork++, work)) - { - loop = work->loop; - bb = work->block; - if (bb == EXIT_BLOCK_PTR) - /* We've reached the exit block. The loop must be bad. */ - loop->depth = -1; - else if (!bb->aux) - { - /* We've not seen this block before. Add it to the loop's - list and then add each successor to the work list. */ - bb->aux = loop; - loop->length += mt_block_length (bb); - VEC_safe_push (basic_block, heap, loop->blocks, bb); - FOR_EACH_EDGE (e, ei, bb->succs) - { - if (!VEC_space (loop_work, works, 1)) - { - if (dwork) - { - VEC_block_remove (loop_work, works, 0, dwork); - dwork = 0; - } - else - VEC_reserve (loop_work, heap, works, 1); - } - work = VEC_quick_push (loop_work, works, NULL); - work->block = EDGE_SUCC (bb, ei.index)->dest; - work->loop = loop; - } - } - else if (bb->aux != loop) - { - /* We've seen this block in a different loop. If it's not - the other loop's head, then this loop must be bad. - Otherwise, the other loop might be a nested loop, so - continue from that loop's successor. */ - loop_info other = bb->aux; - - if (other->head != bb) - loop->depth = -1; - else - { - VEC_safe_push (loop_info, heap, loop->loops, other); - work = VEC_safe_push (loop_work, heap, works, NULL); - work->loop = loop; - work->block = other->successor; - } - } - } - VEC_free (loop_work, heap, works); - - /* Now optimize the loops. */ - for (loop = loops; loop; loop = loop->next) - { - rtx iter_reg, insn, init_insn; - rtx init_val, loop_end, loop_init, end_label, head_label; - - if (!mt_loop_nesting (loop)) - { - if (dump_file) - fprintf (dump_file, ";; loop %d is bad\n", loop->loop_no); - continue; - } - - /* Get the loop iteration register. */ - iter_reg = SET_DEST (XVECEXP (PATTERN (loop->dbnz), 0, 1)); - - if (!REG_P (iter_reg)) - { - /* Spilled */ - if (dump_file) - fprintf (dump_file, ";; loop %d has spilled iteration count\n", - loop->loop_no); - continue; - } - - /* Look for the initializing insn */ - init_insn = NULL_RTX; - for (insn = BB_END (loop->predecessor); - insn != PREV_INSN (BB_HEAD (loop->predecessor)); - insn = PREV_INSN (insn)) - { - if (!INSN_P (insn)) - continue; - if (reg_mentioned_p (iter_reg, PATTERN (insn))) - { - rtx set = single_set (insn); - - if (set && rtx_equal_p (iter_reg, SET_DEST (set))) - init_insn = insn; - break; - } - } - - if (!init_insn) - { - if (dump_file) - fprintf (dump_file, ";; loop %d has no initializer\n", - loop->loop_no); - continue; - } - if (dump_file) - { - fprintf (dump_file, ";; loop %d initialized by\n", - loop->loop_no); - print_rtl_single (dump_file, init_insn); - } - - init_val = PATTERN (init_insn); - if (GET_CODE (init_val) == SET) - init_val = SET_SRC (init_val); - if (GET_CODE (init_val) != CONST_INT || INTVAL (init_val) >= 65535) - { - if (dump_file) - fprintf (dump_file, ";; loop %d has complex initializer\n", - loop->loop_no); - continue; - } - - /* Scan all the blocks to make sure they don't use iter_reg. */ - if (mt_scan_loop (loop, iter_reg, loop->dbnz)) - { - if (dump_file) - fprintf (dump_file, ";; loop %d uses iterator\n", - loop->loop_no); - continue; - } - - /* The loop is good for replacement. */ - - /* loop is 1 based, dbnz is zero based. */ - init_val = GEN_INT (INTVAL (init_val) + 1); - - iter_reg = gen_rtx_REG (SImode, LOOP_FIRST + loop->depth - 1); - end_label = gen_label_rtx (); - head_label = XEXP (SET_SRC (XVECEXP (PATTERN (loop->dbnz), 0, 0)), 1); - loop_end = gen_loop_end (iter_reg, head_label); - loop_init = gen_loop_init (iter_reg, init_val, end_label); - loop->init = init_insn; - loop->end_label = end_label; - loop->loop_init = loop_init; - loop->loop_end = loop_end; - replaced = true; - - if (dump_file) - { - fprintf (dump_file, ";; replacing loop %d initializer with\n", - loop->loop_no); - print_rtl_single (dump_file, loop->loop_init); - fprintf (dump_file, ";; replacing loop %d terminator with\n", - loop->loop_no); - print_rtl_single (dump_file, loop->loop_end); - } - } - - /* Now apply the optimizations. Do it this way so we don't mess up - the flow graph half way through. */ - for (loop = loops; loop; loop = loop->next) - if (loop->loop_init) - { - emit_jump_insn_after (loop->loop_init, BB_END (loop->predecessor)); - delete_insn (loop->init); - emit_label_before (loop->end_label, loop->dbnz); - emit_jump_insn_before (loop->loop_end, loop->dbnz); - delete_insn (loop->dbnz); - } - - /* Free up the loop structures */ - while (loops) - { - loop = loops; - loops = loop->next; - VEC_free (loop_info, heap, loop->loops); - VEC_free (basic_block, heap, loop->blocks); - XDELETE (loop); - } - - if (replaced && dump_file) - { - fprintf (dump_file, ";; Replaced loops\n"); - print_rtl (dump_file, get_insns ()); - } -} - -/* Structures to hold branch information during reorg. */ -typedef struct branch_info -{ - rtx insn; /* The branch insn. */ - - struct branch_info *next; -} branch_info; - -typedef struct label_info -{ - rtx label; /* The label. */ - branch_info *branches; /* branches to this label. */ - struct label_info *next; -} label_info; - -/* Chain of labels found in current function, used during reorg. */ -static label_info *mt_labels; - -/* If *X is a label, add INSN to the list of branches for that - label. */ - -static int -mt_add_branches (rtx *x, void *insn) -{ - if (GET_CODE (*x) == LABEL_REF) - { - branch_info *branch = xmalloc (sizeof (*branch)); - rtx label = XEXP (*x, 0); - label_info *info; - - for (info = mt_labels; info; info = info->next) - if (info->label == label) - break; - - if (!info) - { - info = xmalloc (sizeof (*info)); - info->next = mt_labels; - mt_labels = info; - - info->label = label; - info->branches = NULL; - } - - branch->next = info->branches; - info->branches = branch; - branch->insn = insn; - } - return 0; -} - -/* If BRANCH has a filled delay slot, check if INSN is dependent upon - it. If so, undo the delay slot fill. Returns the next insn, if - we patch out the branch. Returns the branch insn, if we cannot - patch out the branch (due to anti-dependency in the delay slot). - In that case, the caller must insert nops at the branch target. */ - -static rtx -mt_check_delay_slot (rtx branch, rtx insn) -{ - rtx slot; - rtx tmp; - rtx p; - rtx jmp; - - gcc_assert (GET_CODE (PATTERN (branch)) == SEQUENCE); - if (INSN_DELETED_P (branch)) - return NULL_RTX; - slot = XVECEXP (PATTERN (branch), 0, 1); - - tmp = PATTERN (insn); - note_stores (PATTERN (slot), insn_dependent_p_1, &tmp); - if (tmp) - /* Not dependent. */ - return NULL_RTX; - - /* Undo the delay slot. */ - jmp = XVECEXP (PATTERN (branch), 0, 0); - - tmp = PATTERN (jmp); - note_stores (PATTERN (slot), insn_dependent_p_1, &tmp); - if (!tmp) - /* Anti dependent. */ - return branch; - - p = PREV_INSN (branch); - NEXT_INSN (p) = slot; - PREV_INSN (slot) = p; - NEXT_INSN (slot) = jmp; - PREV_INSN (jmp) = slot; - NEXT_INSN (jmp) = branch; - PREV_INSN (branch) = jmp; - XVECEXP (PATTERN (branch), 0, 0) = NULL_RTX; - XVECEXP (PATTERN (branch), 0, 1) = NULL_RTX; - delete_insn (branch); - return jmp; -} - -/* Insert nops to satisfy pipeline constraints. We only deal with ms2 - constraints here. Earlier CPUs are dealt with by inserting nops with - final_prescan (but that can lead to inferior code, and is - impractical with ms2's JAL hazard). - - ms2 dynamic constraints - 1) a load and a following use must be separated by one insn - 2) an insn and a following dependent call must be separated by two insns - - only arith insns are placed in delay slots so #1 cannot happen with - a load in a delay slot. #2 can happen with an arith insn in the - delay slot. */ - -static void -mt_reorg_hazard (void) -{ - rtx insn, next; - - /* Find all the branches */ - for (insn = get_insns (); - insn; - insn = NEXT_INSN (insn)) - { - rtx jmp; - - if (!INSN_P (insn)) - continue; - - jmp = PATTERN (insn); - - if (GET_CODE (jmp) != SEQUENCE) - /* If it's not got a filled delay slot, then it can't - conflict. */ - continue; - - jmp = XVECEXP (jmp, 0, 0); - - if (recog_memoized (jmp) == CODE_FOR_tablejump) - for (jmp = XEXP (XEXP (XVECEXP (PATTERN (jmp), 0, 1), 0), 0); - !JUMP_TABLE_DATA_P (jmp); - jmp = NEXT_INSN (jmp)) - continue; - - for_each_rtx (&PATTERN (jmp), mt_add_branches, insn); - } - - /* Now scan for dependencies. */ - for (insn = get_insns (); - insn && !INSN_P (insn); - insn = NEXT_INSN (insn)) - continue; - - for (; - insn; - insn = next) - { - rtx jmp, tmp; - enum attr_type attr; - - gcc_assert (INSN_P (insn) && !INSN_DELETED_P (insn)); - for (next = NEXT_INSN (insn); - next; - next = NEXT_INSN (next)) - { - if (!INSN_P (next)) - continue; - if (GET_CODE (PATTERN (next)) != USE) - break; - } - - jmp = insn; - if (GET_CODE (PATTERN (insn)) == SEQUENCE) - jmp = XVECEXP (PATTERN (insn), 0, 0); - - attr = recog_memoized (jmp) >= 0 ? get_attr_type (jmp) : TYPE_UNKNOWN; - - if (next && attr == TYPE_LOAD) - { - /* A load. See if NEXT is dependent, and if so insert a - nop. */ - - tmp = PATTERN (next); - if (GET_CODE (tmp) == SEQUENCE) - tmp = PATTERN (XVECEXP (tmp, 0, 0)); - note_stores (PATTERN (insn), insn_dependent_p_1, &tmp); - if (!tmp) - emit_insn_after (gen_nop (), insn); - } - - if (attr == TYPE_CALL) - { - /* A call. Make sure we're not dependent on either of the - previous two dynamic instructions. */ - int nops = 0; - int count; - rtx prev = insn; - rtx rescan = NULL_RTX; - - for (count = 2; count && !nops;) - { - int type; - - prev = PREV_INSN (prev); - if (!prev) - { - /* If we reach the start of the function, we must - presume the caller set the address in the delay - slot of the call instruction. */ - nops = count; - break; - } - - if (BARRIER_P (prev)) - break; - if (LABEL_P (prev)) - { - /* Look at branches to this label. */ - label_info *label; - branch_info *branch; - - for (label = mt_labels; - label; - label = label->next) - if (label->label == prev) - { - for (branch = label->branches; - branch; - branch = branch->next) - { - tmp = mt_check_delay_slot (branch->insn, jmp); - - if (tmp == branch->insn) - { - nops = count; - break; - } - - if (tmp && branch->insn == next) - rescan = tmp; - } - break; - } - continue; - } - if (!INSN_P (prev) || GET_CODE (PATTERN (prev)) == USE) - continue; - - if (GET_CODE (PATTERN (prev)) == SEQUENCE) - { - /* Look at the delay slot. */ - tmp = mt_check_delay_slot (prev, jmp); - if (tmp == prev) - nops = count; - break; - } - - type = (INSN_CODE (prev) >= 0 ? get_attr_type (prev) - : TYPE_COMPLEX); - if (type == TYPE_CALL || type == TYPE_BRANCH) - break; - - if (type == TYPE_LOAD - || type == TYPE_ARITH - || type == TYPE_COMPLEX) - { - tmp = PATTERN (jmp); - note_stores (PATTERN (prev), insn_dependent_p_1, &tmp); - if (!tmp) - { - nops = count; - break; - } - } - - if (INSN_CODE (prev) >= 0) - count--; - } - - if (rescan) - for (next = NEXT_INSN (rescan); - next && !INSN_P (next); - next = NEXT_INSN (next)) - continue; - while (nops--) - emit_insn_before (gen_nop (), insn); - } - } - - /* Free the data structures. */ - while (mt_labels) - { - label_info *label = mt_labels; - branch_info *branch, *next; - - mt_labels = label->next; - for (branch = label->branches; branch; branch = next) - { - next = branch->next; - free (branch); - } - free (label); - } -} - -/* Fixup the looping instructions, do delayed branch scheduling, fixup - scheduling hazards. */ - -static void -mt_machine_reorg (void) -{ - if (cfun->machine->has_loops && TARGET_MS2) - mt_reorg_loops (dump_file); - - if (mt_flag_delayed_branch) - dbr_schedule (get_insns ()); - - if (TARGET_MS2) - { - /* Force all instructions to be split into their final form. */ - split_all_insns_noflow (); - mt_reorg_hazard (); - } -} - -int -mt_return_in_memory (const_tree type, const_tree fntype ATTRIBUTE_UNUSED) -{ - return (int_size_in_bytes (type) > UNITS_PER_WORD); -} - - -/* Initialize the GCC target structure. */ -const struct attribute_spec mt_attribute_table[]; - -#undef TARGET_ATTRIBUTE_TABLE -#define TARGET_ATTRIBUTE_TABLE mt_attribute_table -#undef TARGET_STRUCT_VALUE_RTX -#define TARGET_STRUCT_VALUE_RTX mt_struct_value_rtx -#undef TARGET_PROMOTE_PROTOTYPES -#define TARGET_PROMOTE_PROTOTYPES hook_bool_const_tree_true -#undef TARGET_PASS_BY_REFERENCE -#define TARGET_PASS_BY_REFERENCE mt_pass_by_reference -#undef TARGET_MUST_PASS_IN_STACK -#define TARGET_MUST_PASS_IN_STACK mt_pass_in_stack -#undef TARGET_ARG_PARTIAL_BYTES -#define TARGET_ARG_PARTIAL_BYTES mt_arg_partial_bytes -#undef TARGET_SETUP_INCOMING_VARARGS -#define TARGET_SETUP_INCOMING_VARARGS mt_setup_incoming_varargs -#undef TARGET_MACHINE_DEPENDENT_REORG -#define TARGET_MACHINE_DEPENDENT_REORG mt_machine_reorg - -struct gcc_target targetm = TARGET_INITIALIZER; - -#include "gt-mt.h" diff --git a/gcc/config/mt/mt.h b/gcc/config/mt/mt.h deleted file mode 100644 index b587326..0000000 --- a/gcc/config/mt/mt.h +++ /dev/null @@ -1,868 +0,0 @@ -/* Target Definitions for MorphoRISC1 - Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc. - Contributed by Red Hat, Inc. - - This file is part of GCC. - - GCC is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published - by the Free Software Foundation; either version 3, or (at your - option) any later version. - - GCC is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public - License for more details. - - You should have received a copy of the GNU General Public License - along with GCC; see the file COPYING3. If not see - <http://www.gnu.org/licenses/>. */ - -extern struct rtx_def * mt_ucmpsi3_libcall; - -enum processor_type -{ - PROCESSOR_MS1_64_001, - PROCESSOR_MS1_16_002, - PROCESSOR_MS1_16_003, - PROCESSOR_MS2 -}; - -enum epilogue_type -{ - EH_EPILOGUE, - NORMAL_EPILOGUE -}; - -extern enum processor_type mt_cpu; - - -/* Support for a compile-time default CPU, et cetera. The rules are: - --with-arch is ignored if -march is specified. */ -#define OPTION_DEFAULT_SPECS \ - {"arch", "%{!march=*:-march=%(VALUE)}" } - -/* A C string constant that tells the GCC driver program options to pass to - the assembler. */ -#undef ASM_SPEC -#define ASM_SPEC "%{march=*} %{!march=*: -march=ms1-16-002}" - -/* A string to pass to at the end of the command given to the linker. */ -#undef LIB_SPEC -#define LIB_SPEC "--start-group -lc -lsim --end-group \ -%{msim: ; \ -march=ms1-64-001:-T 64-001.ld%s; \ -march=ms1-16-002:-T 16-002.ld%s; \ -march=ms1-16-003:-T 16-003.ld%s; \ -march=ms2:-T ms2.ld%s; \ - :-T 16-002.ld}" - -/* A string to pass at the very beginning of the command given to the - linker. */ -#undef STARTFILE_SPEC -#define STARTFILE_SPEC "%{msim:crt0.o%s;\ -march=ms1-64-001:%{!mno-crt0:crt0-64-001.o%s} startup-64-001.o%s; \ -march=ms1-16-002:%{!mno-crt0:crt0-16-002.o%s} startup-16-002.o%s; \ -march=ms1-16-003:%{!mno-crt0:crt0-16-003.o%s} startup-16-003.o%s; \ -march=ms2:%{!mno-crt0:crt0-ms2.o%s} startup-ms2.o%s; \ - :%{!mno-crt0:crt0-16-002.o%s} startup-16-002.o%s} \ -crti.o%s crtbegin.o%s" - -/* A string to pass at the end of the command given to the linker. */ -#undef ENDFILE_SPEC -#define ENDFILE_SPEC "%{msim:exit.o%s; \ -march=ms1-64-001:exit-64-001.o%s; \ -march=ms1-16-002:exit-16-002.o%s; \ -march=ms1-16-003:exit-16-003.o%s; \ -march=ms2:exit-ms2.o%s; \ - :exit-16-002.o%s} \ - crtend.o%s crtn.o%s" - -/* Run-time target specifications. */ - -#define TARGET_CPU_CPP_BUILTINS() \ - do \ - { \ - builtin_define_with_int_value ("__mt__", mt_cpu); \ - builtin_assert ("machine=mt"); \ - } \ - while (0) - -#define TARGET_MS1_64_001 (mt_cpu == PROCESSOR_MS1_64_001) -#define TARGET_MS1_16_002 (mt_cpu == PROCESSOR_MS1_16_002) -#define TARGET_MS1_16_003 (mt_cpu == PROCESSOR_MS1_16_003) -#define TARGET_MS2 (mt_cpu == PROCESSOR_MS2) - -#define TARGET_VERSION fprintf (stderr, " (mt)"); - -#define OVERRIDE_OPTIONS mt_override_options () - -#define CAN_DEBUG_WITHOUT_FP 1 - - -/* Storage Layout. */ - -#define BITS_BIG_ENDIAN 0 - -#define BYTES_BIG_ENDIAN 1 - -#define WORDS_BIG_ENDIAN 1 - -#define UNITS_PER_WORD 4 - -/* A macro to update MODE and UNSIGNEDP when an object whose type is TYPE and - which has the specified mode and signedness is to be stored in a register. - This macro is only called when TYPE is a scalar type. - - On most RISC machines, which only have operations that operate on a full - register, define this macro to set M to `word_mode' if M is an integer mode - narrower than `BITS_PER_WORD'. In most cases, only integer modes should be - widened because wider-precision floating-point operations are usually more - expensive than their narrower counterparts. - - For most machines, the macro definition does not change UNSIGNEDP. However, - some machines, have instructions that preferentially handle either signed or - unsigned quantities of certain modes. For example, on the DEC Alpha, 32-bit - loads from memory and 32-bit add instructions sign-extend the result to 64 - bits. On such machines, set UNSIGNEDP according to which kind of extension - is more efficient. - - Do not define this macro if it would never modify MODE. */ -#define PROMOTE_MODE(MODE,UNSIGNEDP,TYPE) \ - do \ - { \ - if (GET_MODE_CLASS (MODE) == MODE_INT \ - && GET_MODE_SIZE (MODE) < 4) \ - (MODE) = SImode; \ - } \ - while (0) - -/* Normal alignment required for function parameters on the stack, in bits. - All stack parameters receive at least this much alignment regardless of data - type. On most machines, this is the same as the size of an integer. */ -#define PARM_BOUNDARY 32 - -/* Define this macro to the minimum alignment enforced by hardware for - the stack pointer on this machine. The definition is a C - expression for the desired alignment (measured in bits). This - value is used as a default if PREFERRED_STACK_BOUNDARY is not - defined. On most machines, this should be the same as - PARM_BOUNDARY. */ -#define STACK_BOUNDARY 32 - -/* Alignment required for a function entry point, in bits. */ -#define FUNCTION_BOUNDARY 32 - -/* Biggest alignment that any data type can require on this machine, - in bits. */ -#define BIGGEST_ALIGNMENT 32 - -/* If defined, a C expression to compute the alignment for a variable - in the static store. TYPE is the data type, and ALIGN is the - alignment that the object would ordinarily have. The value of this - macro is used instead of that alignment to align the object. - - If this macro is not defined, then ALIGN is used. */ -#define DATA_ALIGNMENT(TYPE, ALIGN) \ - (TREE_CODE (TYPE) == ARRAY_TYPE \ - && TYPE_MODE (TREE_TYPE (TYPE)) == QImode \ - && (ALIGN) < BITS_PER_WORD ? BITS_PER_WORD : (ALIGN)) - -/* If defined, a C expression to compute the alignment given to a constant that - is being placed in memory. CONSTANT is the constant and ALIGN is the - alignment that the object would ordinarily have. The value of this macro is - used instead of that alignment to align the object. - - If this macro is not defined, then ALIGN is used. - - The typical use of this macro is to increase alignment for string constants - to be word aligned so that `strcpy' calls that copy constants can be done - inline. */ -#define CONSTANT_ALIGNMENT(EXP, ALIGN) \ - (TREE_CODE (EXP) == STRING_CST \ - && (ALIGN) < BITS_PER_WORD ? BITS_PER_WORD : (ALIGN)) - -/* Number of bits which any structure or union's size must be a multiple of. - Each structure or union's size is rounded up to a multiple of this. - - If you do not define this macro, the default is the same as `BITS_PER_UNIT'. */ -#define STRUCTURE_SIZE_BOUNDARY 32 - -/* Define this macro to be the value 1 if instructions will fail to work if - given data not on the nominal alignment. If instructions will merely go - slower in that case, define this macro as 0. */ -#define STRICT_ALIGNMENT 1 - -/* Define this if you wish to imitate the way many other C compilers handle - alignment of bitfields and the structures that contain them. */ -#define PCC_BITFIELD_TYPE_MATTERS 1 - -/* Layout of Source Language Data Types. */ - -#define INT_TYPE_SIZE 32 - -#define SHORT_TYPE_SIZE 16 - -#define LONG_TYPE_SIZE 32 - -#define LONG_LONG_TYPE_SIZE 64 - -#define CHAR_TYPE_SIZE 8 - -#define FLOAT_TYPE_SIZE 32 - -#define DOUBLE_TYPE_SIZE 64 - -#define LONG_DOUBLE_TYPE_SIZE 64 - -#define DEFAULT_SIGNED_CHAR 1 - -/* Register Basics. */ - -/* General purpose registers. */ -#define GPR_FIRST 0 /* First gpr */ -#define GPR_LAST 15 /* Last possible gpr */ - -#define GPR_R0 0 /* Always 0 */ -#define GPR_R7 7 /* Used as a scratch register */ -#define GPR_R8 8 /* Used as a scratch register */ -#define GPR_R9 9 /* Used as a scratch register */ -#define GPR_R10 10 /* Used as a scratch register */ -#define GPR_R11 11 /* Used as a scratch register */ -#define GPR_FP 12 /* Frame pointer */ -#define GPR_SP 13 /* Stack pointer */ -#define GPR_LINK 14 /* Saved return address as - seen by the caller */ -#define GPR_INTERRUPT_LINK 15 /* hold return addres for interrupts */ - -#define LOOP_FIRST (GPR_LAST + 1) -#define LOOP_LAST (LOOP_FIRST + 3) - -/* Argument register that is eliminated in favor of the frame and/or stack - pointer. Also add register to point to where the return address is - stored. */ -#define SPECIAL_REG_FIRST (LOOP_LAST + 1) -#define SPECIAL_REG_LAST (SPECIAL_REG_FIRST) -#define ARG_POINTER_REGNUM (SPECIAL_REG_FIRST + 0) -#define SPECIAL_REG_P(R) ((R) == SPECIAL_REG_FIRST) - -/* The first/last register that can contain the arguments to a function. */ -#define FIRST_ARG_REGNUM 1 -#define LAST_ARG_REGNUM 4 - -/* The register used to hold functions return value */ -#define RETVAL_REGNUM 11 - -#define FIRST_PSEUDO_REGISTER (SPECIAL_REG_LAST + 1) - -#define IS_PSEUDO_P(R) (REGNO (R) >= FIRST_PSEUDO_REGISTER) - -/* R0 always has the value 0 - R10 static link - R12 FP pointer to active frame - R13 SP pointer to top of stack - R14 RA return address - R15 IRA interrupt return address. */ -#define FIXED_REGISTERS { 1, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 1, 1, 1, 1, \ - 1, 1, 1, 1, 1 \ - } - -/* Like `FIXED_REGISTERS' but has 1 for each register that is clobbered (in - general) by function calls as well as for fixed registers. This macro - therefore identifies the registers that are not available for general - allocation of values that must live across function calls. */ -#define CALL_USED_REGISTERS { 1, 1, 1, 1, 1, 0, 0, 1, \ - 1, 1, 1, 1, 1, 1, 1, 1, \ - 1, 1, 1, 1, 1 \ - } - - -/* How Values Fit in Registers. */ - -#define HARD_REGNO_NREGS(REGNO, MODE) \ - ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD) - -#define HARD_REGNO_MODE_OK(REGNO, MODE) 1 - -/* A C expression that is nonzero if a value of mode MODE1 is - accessible in mode MODE2 without copying. */ -#define MODES_TIEABLE_P(MODE1, MODE2) 1 - -/* Register Classes. */ - -enum reg_class -{ - NO_REGS, - ALL_REGS, - LIM_REG_CLASSES -}; - -#define GENERAL_REGS ALL_REGS - -#define N_REG_CLASSES ((int) LIM_REG_CLASSES) - -#define REG_CLASS_NAMES {"NO_REGS", "ALL_REGS" } - -#define REG_CLASS_CONTENTS \ - { \ - { 0x0 }, \ - { 0x000fffff }, \ - } - -/* A C expression whose value is a register class containing hard register - REGNO. In general there is more than one such class; choose a class which - is "minimal", meaning that no smaller class also contains the register. */ -#define REGNO_REG_CLASS(REGNO) GENERAL_REGS - -#define BASE_REG_CLASS GENERAL_REGS - -#define INDEX_REG_CLASS NO_REGS - -#define REG_CLASS_FROM_LETTER(CHAR) NO_REGS - -#define REGNO_OK_FOR_BASE_P(NUM) 1 - -#define REGNO_OK_FOR_INDEX_P(NUM) 1 - -/* A C expression that places additional restrictions on the register class to - use when it is necessary to copy value X into a register in class CLASS. - The value is a register class; perhaps CLASS, or perhaps another, smaller - class. On many machines, the following definition is safe: - - #define PREFERRED_RELOAD_CLASS(X,CLASS) CLASS -*/ -#define PREFERRED_RELOAD_CLASS(X, CLASS) (CLASS) - -#define SECONDARY_RELOAD_CLASS(CLASS,MODE,X) \ - mt_secondary_reload_class((CLASS), (MODE), (X)) - -/* A C expression for the maximum number of consecutive registers of - class CLASS needed to hold a value of mode MODE. */ -#define CLASS_MAX_NREGS(CLASS, MODE) \ - ((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD) - -/* For MorphoRISC1: - - `I' is used for the range of constants an arithmetic insn can - actually contain (16-bit signed integers). - - `J' is used for the range which is just zero (ie, $r0). - - `K' is used for the range of constants a logical insn can actually - contain (16-bit zero-extended integers). - - `L' is used for the range of constants that be loaded with lui - (ie, the bottom 16 bits are zero). - - `M' is used for the range of constants that take two words to load - (ie, not matched by `I', `K', and `L'). - - `N' is used for negative 16-bit constants other than -65536. - - `O' is a 15-bit signed integer. - - `P' is used for positive 16-bit constants. */ - -#define SMALL_INT(X) ((unsigned HOST_WIDE_INT) (INTVAL (X) + 0x8000) < 0x10000) -#define SMALL_INT_UNSIGNED(X) ((unsigned HOST_WIDE_INT) (INTVAL (X)) < 0x10000) - -/* A C expression that defines the machine-dependent operand - constraint letters that specify particular ranges of integer - values. If C is one of those letters, the expression should check - that VALUE, an integer, is in the appropriate range and return 1 if - so, 0 otherwise. If C is not one of those letters, the value - should be 0 regardless of VALUE. */ -#define CONST_OK_FOR_LETTER_P(VALUE, C) \ - ((C) == 'I' ? ((unsigned HOST_WIDE_INT) ((VALUE) + 0x8000) < 0x10000) \ - : (C) == 'J' ? ((VALUE) == 0) \ - : (C) == 'K' ? ((unsigned HOST_WIDE_INT) (VALUE) < 0x10000) \ - : (C) == 'L' ? (((VALUE) & 0x0000ffff) == 0 \ - && (((VALUE) & ~2147483647) == 0 \ - || ((VALUE) & ~2147483647) == ~2147483647)) \ - : (C) == 'M' ? ((((VALUE) & ~0x0000ffff) != 0) \ - && (((VALUE) & ~0x0000ffff) != ~0x0000ffff) \ - && (((VALUE) & 0x0000ffff) != 0 \ - || (((VALUE) & ~2147483647) != 0 \ - && ((VALUE) & ~2147483647) != ~2147483647))) \ - : (C) == 'N' ? ((unsigned HOST_WIDE_INT) ((VALUE) + 0xffff) < 0xffff) \ - : (C) == 'O' ? ((unsigned HOST_WIDE_INT) ((VALUE) + 0x4000) < 0x8000) \ - : (C) == 'P' ? ((VALUE) != 0 && (((VALUE) & ~0x0000ffff) == 0)) \ - : 0) - -/* A C expression that defines the machine-dependent operand constraint letters - (`G', `H') that specify particular ranges of `const_double' values. */ -#define CONST_DOUBLE_OK_FOR_LETTER_P(VALUE, C) 0 - -/* Most negative value represent on mt */ -#define MT_MIN_INT 0x80000000 - -/* Basic Stack Layout. */ - -enum save_direction -{ - FROM_PROCESSOR_TO_MEM, - FROM_MEM_TO_PROCESSOR -}; - -/* Tell prologue and epilogue if register REGNO should be saved / restored. - The return address and frame pointer are treated separately. - Don't consider them here. */ -#define MUST_SAVE_REGISTER(regno) \ - ( (regno) != GPR_LINK \ - && (regno) != GPR_FP \ - && (regno) != GPR_SP \ - && (regno) != GPR_R0 \ - && (( df_regs_ever_live_p (regno) && ! call_used_regs[regno] ) \ - /* Save ira register in an interrupt handler. */ \ - || (interrupt_handler && (regno) == GPR_INTERRUPT_LINK) \ - /* Save any register used in an interrupt handler. */ \ - || (interrupt_handler && df_regs_ever_live_p (regno)) \ - /* Save call clobbered registers in non-leaf interrupt \ - handlers. */ \ - || (interrupt_handler && call_used_regs[regno] \ - && !current_function_is_leaf) \ - ||(crtl->calls_eh_return \ - && (regno == GPR_R7 || regno == GPR_R8)) \ - ) \ - ) - -#define STACK_GROWS_DOWNWARD 1 - -/* Offset from the frame pointer to the first local variable slot to be - allocated. - - If `FRAME_GROWS_DOWNWARD', find the next slot's offset by - subtracting the first slot's length from `STARTING_FRAME_OFFSET'. - Otherwise, it is found by adding the length of the first slot to - the value `STARTING_FRAME_OFFSET'. */ -#define STARTING_FRAME_OFFSET crtl->outgoing_args_size - -/* Offset from the argument pointer register to the first argument's address. - On some machines it may depend on the data type of the function. - - If `ARGS_GROW_DOWNWARD', this is the offset to the location above the first - argument's address. */ -#define FIRST_PARM_OFFSET(FUNDECL) 0 - -#define RETURN_ADDR_RTX(COUNT, FRAMEADDR) \ - mt_return_addr_rtx (COUNT) - -/* A C expression whose value is RTL representing the location of the incoming - return address at the beginning of any function, before the prologue. This - RTL is either a `REG', indicating that the return value is saved in `REG', - or a `MEM' representing a location in the stack. - - You only need to define this macro if you want to support call frame - debugging information like that provided by DWARF 2. */ -#define INCOMING_RETURN_ADDR_RTX gen_rtx_REG (SImode, GPR_LINK) - -/* A C expression whose value is an integer giving the offset, in bytes, from - the value of the stack pointer register to the top of the stack frame at the - beginning of any function, before the prologue. The top of the frame is - defined to be the value of the stack pointer in the previous frame, just - before the call instruction. - - You only need to define this macro if you want to support call frame - debugging information like that provided by DWARF 2. */ -#define INCOMING_FRAME_SP_OFFSET 0 - -#define STACK_POINTER_REGNUM GPR_SP - -#define FRAME_POINTER_REGNUM GPR_FP - -/* The register number of the arg pointer register, which is used to - access the function's argument list. */ -#define ARG_POINTER_REGNUM (SPECIAL_REG_FIRST + 0) - -/* Register numbers used for passing a function's static chain pointer. */ -#define STATIC_CHAIN_REGNUM 10 - -/* A C expression which is nonzero if a function must have and use a frame - pointer. */ -#define FRAME_POINTER_REQUIRED 0 - -/* Structure to be filled in by compute_frame_size with register - save masks, and offsets for the current function. */ - -struct mt_frame_info -{ - unsigned int total_size; /* # Bytes that the entire frame takes up. */ - unsigned int pretend_size; /* # Bytes we push and pretend caller did. */ - unsigned int args_size; /* # Bytes that outgoing arguments take up. */ - unsigned int extra_size; - unsigned int reg_size; /* # Bytes needed to store regs. */ - unsigned int var_size; /* # Bytes that variables take up. */ - unsigned int frame_size; /* # Bytes in current frame. */ - unsigned int reg_mask; /* Mask of saved registers. */ - unsigned int save_fp; /* Nonzero if frame pointer must be saved. */ - unsigned int save_lr; /* Nonzero if return pointer must be saved. */ - int initialized; /* Nonzero if frame size already calculated. */ -}; - -extern struct mt_frame_info current_frame_info; - -/* If defined, this macro specifies a table of register pairs used to eliminate - unneeded registers that point into the stack frame. */ -#define ELIMINABLE_REGS \ -{ \ - {ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \ - {ARG_POINTER_REGNUM, FRAME_POINTER_REGNUM}, \ - {FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM} \ -} - -/* A C expression that returns nonzero if the compiler is allowed to try to - replace register number FROM with register number TO. */ -#define CAN_ELIMINATE(FROM, TO) \ - ((FROM) == ARG_POINTER_REGNUM && (TO) == STACK_POINTER_REGNUM \ - ? ! frame_pointer_needed \ - : 1) - -/* This macro is similar to `INITIAL_FRAME_POINTER_OFFSET'. It - specifies the initial difference between the specified pair of - registers. This macro must be defined if `ELIMINABLE_REGS' is - defined. */ -#define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \ - (OFFSET) = mt_initial_elimination_offset (FROM, TO) - -/* If defined, the maximum amount of space required for outgoing - arguments will be computed and placed into the variable - `crtl->outgoing_args_size'. */ -#define ACCUMULATE_OUTGOING_ARGS 1 - -/* Define this if it is the responsibility of the caller to - allocate the area reserved for arguments passed in registers. */ -#define OUTGOING_REG_PARM_STACK_SPACE(FNTYPE) 1 - -/* The number of register assigned to holding function arguments. */ -#define MT_NUM_ARG_REGS 4 - -/* Define this if it is the responsibility of the caller to allocate - the area reserved for arguments passed in registers. */ -#define REG_PARM_STACK_SPACE(FNDECL) (MT_NUM_ARG_REGS * UNITS_PER_WORD) - -/* Define this macro if `REG_PARM_STACK_SPACE' is defined, but the stack - parameters don't skip the area specified by it. */ -#define STACK_PARMS_IN_REG_PARM_AREA - -/* A C expression that should indicate the number of bytes of its own - arguments that a function pops on returning, or 0 if the function - pops no arguments and the caller must therefore pop them all after - the function returns. */ -#define RETURN_POPS_ARGS(FUNDECL, FUNTYPE, STACK_SIZE) 0 - -#define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) \ - mt_function_arg (& (CUM), (MODE), (TYPE), (NAMED), FALSE) - -#define CUMULATIVE_ARGS int - -#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, FNDECL, N_NAMED_ARGS) \ - mt_init_cumulative_args (& (CUM), FNTYPE, LIBNAME, FNDECL, FALSE) - -#define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED) \ - mt_function_arg_advance (&CUM, MODE, TYPE, NAMED) - -#define FUNCTION_ARG_BOUNDARY(MODE, TYPE) \ - mt_function_arg_boundary (MODE, TYPE) - -#define FUNCTION_ARG_REGNO_P(REGNO) \ - ((REGNO) >= FIRST_ARG_REGNUM && ((REGNO) <= LAST_ARG_REGNUM)) - -#define RETURN_VALUE_REGNUM RETVAL_REGNUM - -#define FUNCTION_VALUE(VALTYPE, FUNC) \ - mt_function_value (VALTYPE, TYPE_MODE(VALTYPE), FUNC) - -#define LIBCALL_VALUE(MODE) \ - mt_function_value (NULL_TREE, MODE, NULL_TREE) - -#define FUNCTION_VALUE_REGNO_P(REGNO) ((REGNO) == RETURN_VALUE_REGNUM) - -/* A C expression which can inhibit the returning of certain function - values in registers, based on the type of value. */ -#define TARGET_RETURN_IN_MEMORY mt_return_in_memory - -/* Define this macro to be 1 if all structure and union return values must be - in memory. */ -#define DEFAULT_PCC_STRUCT_RETURN 0 - -/* Define this macro as a C expression that is nonzero if the return - instruction or the function epilogue ignores the value of the stack - pointer; in other words, if it is safe to delete an instruction to - adjust the stack pointer before a return from the function. */ -#define EXIT_IGNORE_STACK 1 - -#define EPILOGUE_USES(REGNO) mt_epilogue_uses(REGNO) - -/* Define this macro if the function epilogue contains delay slots to which - instructions from the rest of the function can be "moved". */ -#define DELAY_SLOTS_FOR_EPILOGUE 1 - -/* A C expression that returns 1 if INSN can be placed in delay slot number N - of the epilogue. */ -#define ELIGIBLE_FOR_EPILOGUE_DELAY(INSN, N) 0 - -#define FUNCTION_PROFILER(FILE, LABELNO) gcc_unreachable () - -/* Trampolines are not implemented. */ -#define TRAMPOLINE_SIZE 0 - -#define INITIALIZE_TRAMPOLINE(ADDR, FNADDR, STATIC_CHAIN) - -/* ?? What is this -- aldyh ?? */ -#define UCMPSI3_LIBCALL "__ucmpsi3" - -/* Addressing Modes. */ - -/* A C expression that is 1 if the RTX X is a constant which is a valid - address. */ -#define CONSTANT_ADDRESS_P(X) CONSTANT_P (X) - -/* A number, the maximum number of registers that can appear in a valid memory - address. Note that it is up to you to specify a value equal to the maximum - number that `GO_IF_LEGITIMATE_ADDRESS' would ever accept. */ -#define MAX_REGS_PER_ADDRESS 1 - -#ifdef REG_OK_STRICT -#define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \ -{ \ - if (mt_legitimate_address_p (MODE, X, 1)) \ - goto ADDR; \ -} -#else -#define GO_IF_LEGITIMATE_ADDRESS(MODE, X, ADDR) \ -{ \ - if (mt_legitimate_address_p (MODE, X, 0)) \ - goto ADDR; \ -} -#endif - -#ifdef REG_OK_STRICT -#define REG_OK_FOR_BASE_P(X) mt_reg_ok_for_base_p (X, 1) -#else -#define REG_OK_FOR_BASE_P(X) mt_reg_ok_for_base_p (X, 0) -#endif - -#define REG_OK_FOR_INDEX_P(X) REG_OK_FOR_BASE_P (X) - -#define LEGITIMIZE_ADDRESS(X, OLDX, MODE, WIN) {} - -#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR, LABEL) - -#define LEGITIMATE_CONSTANT_P(X) 1 - -/* A C expression for the cost of moving data of mode M between a register and - memory. A value of 2 is the default; this cost is relative to those in - `REGISTER_MOVE_COST'. - - If moving between registers and memory is more expensive than between two - registers, you should define this macro to express the relative cost. */ -#define MEMORY_MOVE_COST(M,C,I) 10 - -/* Define this macro as a C expression which is nonzero if accessing less than - a word of memory (i.e. a `char' or a `short') is no faster than accessing a - word of memory. */ -#define SLOW_BYTE_ACCESS 1 - -#define SLOW_UNALIGNED_ACCESS(MODE, ALIGN) 1 - -#define TEXT_SECTION_ASM_OP ".text" - -#define DATA_SECTION_ASM_OP ".data" - -#define BSS_SECTION_ASM_OP "\t.section\t.bss" - -/* A C string constant for text to be output before each `asm' statement or - group of consecutive ones. Normally this is `"#APP"', which is a comment - that has no effect on most assemblers but tells the GNU assembler that it - must check the lines that follow for all valid assembler constructs. */ -#define ASM_APP_ON "#APP\n" - -/* A C string constant for text to be output after each `asm' statement or - group of consecutive ones. Normally this is `"#NO_APP"', which tells the - GNU assembler to resume making the time-saving assumptions that are valid - for ordinary compiler output. */ -#define ASM_APP_OFF "#NO_APP\n" - -/* This is how to output an assembler line defining a `char' constant. */ -#define ASM_OUTPUT_CHAR(FILE, VALUE) \ - do \ - { \ - fprintf (FILE, "\t.byte\t"); \ - output_addr_const (FILE, (VALUE)); \ - fprintf (FILE, "\n"); \ - } \ - while (0) - -/* This is how to output an assembler line defining a `short' constant. */ -#define ASM_OUTPUT_SHORT(FILE, VALUE) \ - do \ - { \ - fprintf (FILE, "\t.hword\t"); \ - output_addr_const (FILE, (VALUE)); \ - fprintf (FILE, "\n"); \ - } \ - while (0) - -/* This is how to output an assembler line defining an `int' constant. - We also handle symbol output here. */ -#define ASM_OUTPUT_INT(FILE, VALUE) \ - do \ - { \ - fprintf (FILE, "\t.word\t"); \ - output_addr_const (FILE, (VALUE)); \ - fprintf (FILE, "\n"); \ - } \ - while (0) - -/* A C statement to output to the stdio stream STREAM an assembler instruction - to assemble a single byte containing the number VALUE. - - This declaration must be present. */ -#define ASM_OUTPUT_BYTE(STREAM, VALUE) \ - fprintf (STREAM, "\t%s\t0x%x\n", ASM_BYTE_OP, (VALUE)) - -/* Globalizing directive for a label. */ -#define GLOBAL_ASM_OP "\t.globl " - -#define REGISTER_NAMES \ -{ "R0", "R1", "R2", "R3", "R4", "R5", "R6", "R7", \ - "R8", "R9", "R10", "R11", "R12", "R13", "R14", "R15", \ - "LOOP1", "LOOP2", "LOOP3", "LOOP4", "ap" } - -/* If defined, a C initializer for an array of structures containing a name and - a register number. This macro defines additional names for hard registers, - thus allowing the `asm' option in declarations to refer to registers using - alternate names. */ -#define ADDITIONAL_REGISTER_NAMES \ -{ { "FP", 12}, {"SP", 13}, {"RA", 14}, {"IRA", 15} } - -/* Define this macro if you are using an unusual assembler that requires - different names for the machine instructions. - - The definition is a C statement or statements which output an assembler - instruction opcode to the stdio stream STREAM. The macro-operand PTR is a - variable of type `char *' which points to the opcode name in its "internal" - form--the form that is written in the machine description. The definition - should output the opcode name to STREAM, performing any translation you - desire, and increment the variable PTR to point at the end of the opcode so - that it will not be output twice. */ -#define ASM_OUTPUT_OPCODE(STREAM, PTR) \ - (PTR) = mt_asm_output_opcode (STREAM, PTR) - -#define FINAL_PRESCAN_INSN(INSN, OPVEC, NOPERANDS) \ - mt_final_prescan_insn (INSN, OPVEC, NOPERANDS) - -#define PRINT_OPERAND(STREAM, X, CODE) mt_print_operand (STREAM, X, CODE) - -/* A C expression which evaluates to true if CODE is a valid punctuation - character for use in the `PRINT_OPERAND' macro. */ -/* #: Print nop for delay slot. */ -#define PRINT_OPERAND_PUNCT_VALID_P(CODE) ((CODE) == '#') - -#define PRINT_OPERAND_ADDRESS(STREAM, X) mt_print_operand_address (STREAM, X) - -/* If defined, C string expressions to be used for the `%R', `%L', `%U', and - `%I' options of `asm_fprintf' (see `final.c'). These are useful when a - single `md' file must support multiple assembler formats. In that case, the - various `tm.h' files can define these macros differently. - - USER_LABEL_PREFIX is defined in svr4.h. */ -#define REGISTER_PREFIX "%" -#define LOCAL_LABEL_PREFIX "." -#define USER_LABEL_PREFIX "" -#define IMMEDIATE_PREFIX "" - -/* This macro should be provided on machines where the addresses in a dispatch - table are relative to the table's own address. - - The definition should be a C statement to output to the stdio stream STREAM - an assembler pseudo-instruction to generate a difference between two labels. - VALUE and REL are the numbers of two internal labels. The definitions of - these labels are output using `targetm.asm_out.internal_label', and they - must be printed in the same way here. */ -#define ASM_OUTPUT_ADDR_DIFF_ELT(STREAM, BODY, VALUE, REL) \ -fprintf (STREAM, "\t.word .L%d-.L%d\n", VALUE, REL) - -/* This macro should be provided on machines where the addresses in a dispatch - table are absolute. - - The definition should be a C statement to output to the stdio stream STREAM - an assembler pseudo-instruction to generate a reference to a label. VALUE - is the number of an internal label whose definition is output using - `targetm.asm_out.internal_label'. */ -#define ASM_OUTPUT_ADDR_VEC_ELT(STREAM, VALUE) \ -fprintf (STREAM, "\t.word .L%d\n", VALUE) - -#define DWARF_FRAME_RETURN_COLUMN DWARF_FRAME_REGNUM (GPR_LINK) - -#define EH_RETURN_DATA_REGNO(N) \ - ((N) == 0 ? GPR_R7 : (N) == 1 ? GPR_R8 : INVALID_REGNUM) - -#define EH_RETURN_STACKADJ_REGNO GPR_R11 -#define EH_RETURN_STACKADJ_RTX \ - gen_rtx_REG (SImode, EH_RETURN_STACKADJ_REGNO) -#define EH_RETURN_HANDLER_REGNO GPR_R10 -#define EH_RETURN_HANDLER_RTX \ - gen_rtx_REG (SImode, EH_RETURN_HANDLER_REGNO) - -#define ASM_OUTPUT_ALIGN(STREAM, POWER) \ - fprintf ((STREAM), "\t.p2align %d\n", (POWER)) - -#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG - -#ifndef DWARF2_DEBUGGING_INFO -#define DWARF2_DEBUGGING_INFO -#endif - -/* Define this macro if GCC should produce dwarf version 2-style - line numbers. This usually requires extending the assembler to - support them, and #defining DWARF2_LINE_MIN_INSN_LENGTH in the - assembler configuration header files. */ -#define DWARF2_ASM_LINE_DEBUG_INFO 1 - -/* An alias for a machine mode name. This is the machine mode that - elements of a jump-table should have. */ -#define CASE_VECTOR_MODE SImode - -/* Define this macro if operations between registers with integral - mode smaller than a word are always performed on the entire - register. Most RISC machines have this property and most CISC - machines do not. */ -#define WORD_REGISTER_OPERATIONS - -/* The maximum number of bytes that a single instruction can move quickly from - memory to memory. */ -#define MOVE_MAX 4 - -/* A C expression which is nonzero if on this machine it is safe to "convert" - an integer of INPREC bits to one of OUTPREC bits (where OUTPREC is smaller - than INPREC) by merely operating on it as if it had only OUTPREC bits. - - On many machines, this expression can be 1. - - When `TRULY_NOOP_TRUNCATION' returns 1 for a pair of sizes for modes for - which `MODES_TIEABLE_P' is 0, suboptimal code can result. If this is the - case, making `TRULY_NOOP_TRUNCATION' return 0 in such cases may improve - things. */ -#define TRULY_NOOP_TRUNCATION(OUTPREC, INPREC) 1 - -#define Pmode SImode - -/* An alias for the machine mode used for memory references to functions being - called, in `call' RTL expressions. On most machines this should be - `QImode'. */ -#define FUNCTION_MODE QImode - -#define HANDLE_SYSV_PRAGMA 1 - -/* Indicate how many instructions can be issued at the same time. */ -#define ISSUE_RATE 1 - -/* Define the information needed to generate branch and scc insns. This is - stored from the compare operation. Note that we can't use "rtx" here - since it hasn't been defined! */ - -extern struct rtx_def * mt_compare_op0; -extern struct rtx_def * mt_compare_op1; - diff --git a/gcc/config/mt/mt.md b/gcc/config/mt/mt.md deleted file mode 100644 index d96a04c..0000000 --- a/gcc/config/mt/mt.md +++ /dev/null @@ -1,1500 +0,0 @@ -;; Machine description for MorphoRISC1 -;; Copyright (C) 2005, 2007 Free Software Foundation, Inc. -;; Contributed by Red Hat, Inc. - -;; This file is part of GCC. - -;; GCC is free software; you can redistribute it and/or modify -;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation; either version 3, or (at your option) -;; any later version. - -;; GCC is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with GCC; see the file COPYING3. If not see -;; <http://www.gnu.org/licenses/>. - -;; UNSPECs -(define_constants - [ - (UNSPEC_BLOCKAGE 0) - (UNSPEC_EI 1) - (UNSPEC_DI 2) - (UNSPEC_LOOP 3) - ]) - -;; Attributes -(define_attr "type" "branch,call,load,store,io,arith,complex,unknown" - (const_string "unknown") ) - -;; If the attribute takes numeric values, no `enum' type will be defined and -;; the function to obtain the attribute's value will return `int'. - -(define_attr "length" "" (const_int 4)) - - -;; DFA scheduler. -(define_automaton "other") -(define_cpu_unit "decode_unit" "other") -(define_cpu_unit "memory_unit" "other") -(define_cpu_unit "branch_unit" "other") - -(define_insn_reservation "mem_access" 2 - (ior (eq_attr "type" "load") (eq_attr "type" "store")) - "decode_unit+memory_unit*2") - -(define_insn_reservation "io_access" 2 - (eq_attr "type" "io") - "decode_unit+memory_unit*2") - -(define_insn_reservation "branch_access" 2 - (ior (eq_attr "type" "branch") - (eq_attr "type" "call")) - "decode_unit+branch_unit*2") - -(define_insn_reservation "arith_access" 1 - (eq_attr "type" "arith") - "decode_unit") - -(define_bypass 2 "arith_access" "branch_access") -(define_bypass 3 "mem_access" "branch_access") -(define_bypass 3 "io_access" "branch_access") - - -;; Delay Slots - -;; The mt does not allow branches in the delay slot. -;; The mt does not allow back to back memory or io instruction. -;; The compiler does not know what the type of instruction is at -;; the destination of the branch. Thus, only type that will be acceptable -;; (safe) is the arith type. - -(define_delay (ior (eq_attr "type" "branch") - (eq_attr "type" "call")) - [(eq_attr "type" "arith") (nil) (nil)]) - - -(define_insn "decrement_and_branch_until_zero" - [(set (pc) - (if_then_else - (ne (match_operand:SI 0 "nonimmediate_operand" "+r,*m") - (const_int 0)) - (label_ref (match_operand 1 "" "")) - (pc))) - (set (match_dup 0) - (plus:SI (match_dup 0) - (const_int -1))) - (clobber (match_scratch:SI 2 "=X,&r")) - (clobber (match_scratch:SI 3 "=X,&r"))] - "TARGET_MS1_16_003 || TARGET_MS2" - "@ - dbnz\t%0, %l1%# - #" - [(set_attr "length" "4,16") - (set_attr "type" "branch,unknown")] -) - -;; Split the above to handle the case where operand 0 is in memory -;; (a register that couldn't get a hard register). -(define_split - [(set (pc) - (if_then_else - (ne (match_operand:SI 0 "memory_operand" "") - (const_int 0)) - (label_ref (match_operand 1 "" "")) - (pc))) - (set (match_dup 0) - (plus:SI (match_dup 0) - (const_int -1))) - (clobber (match_scratch:SI 2 "")) - (clobber (match_scratch:SI 3 ""))] - "TARGET_MS1_16_003 || TARGET_MS2" - [(set (match_dup 2) (match_dup 0)) - (set (match_dup 3) (plus:SI (match_dup 2) (const_int -1))) - (set (match_dup 0) (match_dup 3)) - (set (pc) - (if_then_else - (ne (match_dup 2) - (const_int 0)) - (label_ref (match_dup 1)) - (pc)))] - "") - -;; This peephole is defined in the vain hope that it might actually trigger one -;; day, although I have yet to find a test case that matches it. The normal -;; problem is that GCC likes to move the loading of the constant value -1 out -;; of the loop, so it is not here to be matched. - -(define_peephole2 - [(set (match_operand:SI 0 "register_operand" "") - (plus:SI (match_dup 0) (const_int -1))) - (set (match_operand:SI 1 "register_operand" "") - (const_int -1)) - (set (pc) (if_then_else - (ne (match_dup 0) (match_dup 1)) - (label_ref (match_operand 2 "" "")) - (pc)))] - "TARGET_MS1_16_003 || TARGET_MS2" - [(parallel [(set (pc) - (if_then_else - (ne (match_dup 0) (const_int 0)) - (label_ref (match_dup 2)) - (pc))) - (set (match_dup 0) - (plus:SI (match_dup 0) (const_int -1))) - (clobber (reg:SI 0)) - (clobber (reg:SI 0))])] - "") - - -;; Loop instructions. ms2 has a low overhead looping instructions. -;; these take a constant or register loop count and a loop length -;; offset. Unfortunately the loop can only be up to 256 instructions, -;; We deal with longer loops by moving the loop end upwards. To do -;; otherwise would force us to to be very pessimistic right up until -;; the end. - -;; This instruction is a placeholder to make the control flow explicit. -(define_insn "loop_end" - [(set (pc) (if_then_else - (ne (match_operand:SI 0 "register_operand" "") - (const_int 1)) - (label_ref (match_operand 1 "" "")) - (pc))) - (set (match_dup 0) (plus:SI (match_dup 0) (const_int -1))) - (unspec [(const_int 0)] UNSPEC_LOOP)] - "TARGET_MS2" - ";loop end %0,%l1" - [(set_attr "length" "0")]) - -;; This is the real looping instruction. It is placed just before the -;; loop body. We make it a branch insn, so it stays at the end of the -;; block it is in. -(define_insn "loop_init" - [(set (match_operand:SI 0 "register_operand" "=r,r") - (match_operand:SI 1 "uns_arith_operand" "r,K")) - (unspec [(label_ref (match_operand 2 "" ""))] UNSPEC_LOOP)] - "TARGET_MS2" - "@ - loop %1,%l2 ;%0%# - loopi %1,%l2 ;%0%#" - [(set_attr "length" "4") - (set_attr "type" "branch")]) - -; operand 0 is the loop count pseudo register -; operand 1 is the number of loop iterations or 0 if it is unknown -; operand 2 is the maximum number of loop iterations -; operand 3 is the number of levels of enclosed loops -; operand 4 is the label to jump to at the top of the loop -(define_expand "doloop_end" - [(parallel [(set (pc) (if_then_else - (ne (match_operand:SI 0 "nonimmediate_operand" "") - (const_int 0)) - (label_ref (match_operand 4 "" "")) - (pc))) - (set (match_dup 0) - (plus:SI (match_dup 0) - (const_int -1))) - (clobber (match_scratch:SI 5 "")) - (clobber (match_scratch:SI 6 ""))])] - "TARGET_MS1_16_003 || TARGET_MS2" - {mt_add_loop ();}) - -;; Moves - -(define_expand "loadqi" - [ - ;; compute shift - (set (match_operand:SI 2 "register_operand" "") - (and:SI (match_dup 1) (const_int 3))) - (set (match_dup 2) (xor:SI (match_dup 2) (const_int 3))) - (set (match_dup 2 ) (ashift:SI (match_dup 2) (const_int 3))) - - ;; get word that contains byte - (set (match_operand:SI 0 "register_operand" "") - (mem:SI (and:SI (match_operand:SI 1 "register_operand" "") - (const_int -3)))) - - ;; align byte - (set (match_dup 0) (ashiftrt:SI (match_dup 0) (match_dup 2))) - ] - "" - "") - - -;; storeqi -;; operand 0 byte value to store -;; operand 1 address -;; operand 2 temp, word containing byte -;; operand 3 temp, shift count -;; operand 4 temp, mask, aligned and masked byte -;; operand 5 (unused) -(define_expand "storeqi" - [ - ;; compute shift - (set (match_operand:SI 3 "register_operand" "") - (and:SI (match_operand:SI 1 "register_operand" "") (const_int 3))) - (set (match_dup 3) (xor:SI (match_dup 3) (const_int 3))) - (set (match_dup 3) (ashift:SI (match_dup 3) (const_int 3))) - - ;; get word that contains byte - (set (match_operand:SI 2 "register_operand" "") - (mem:SI (and:SI (match_dup 1) (const_int -3)))) - - ;; generate mask - (set (match_operand:SI 4 "register_operand" "") (const_int 255)) - (set (match_dup 4) (ashift:SI (match_dup 4) (match_dup 3))) - (set (match_dup 4) (not:SI (match_dup 4))) - - ;; clear appropriate bits - (set (match_dup 2) (and:SI (match_dup 2) (match_dup 4))) - - ;; align byte - (set (match_dup 4) - (and:SI (match_operand:SI 0 "register_operand" "") (const_int 255))) - (set (match_dup 4) (ashift:SI (match_dup 4) (match_dup 3))) - - ;; combine - (set (match_dup 2) (ior:SI (match_dup 4) (match_dup 2))) - ;; store updated word - (set (mem:SI (and:SI (match_dup 1) (const_int -3))) (match_dup 2)) - ] - "" - "") - - -(define_expand "movqi" - [(set (match_operand:QI 0 "general_operand" "") - (match_operand:QI 1 "general_operand" ""))] - "" - " -{ - if (!reload_in_progress - && !reload_completed - && GET_CODE (operands[0]) == MEM - && GET_CODE (operands[1]) == MEM) - operands[1] = copy_to_mode_reg (QImode, operands[1]); - - if ( (! TARGET_BYTE_ACCESS) && GET_CODE (operands[0]) == MEM) - { - rtx scratch1 = gen_reg_rtx (SImode); - rtx scratch2 = gen_reg_rtx (SImode); - rtx scratch3 = gen_reg_rtx (SImode); - rtx data = operands[1]; - rtx address = XEXP (operands[0], 0); - rtx seq; - - if ( GET_CODE (data) != REG ) - data = copy_to_mode_reg (QImode, data); - - if ( GET_CODE (address) != REG ) - address = copy_to_mode_reg (SImode, address); - - start_sequence (); - emit_insn (gen_storeqi (gen_lowpart (SImode, data), address, - scratch1, scratch2, scratch3)); - mt_set_memflags (operands[0]); - seq = get_insns (); - end_sequence (); - emit_insn (seq); - DONE; - } - - if ( (! TARGET_BYTE_ACCESS) && GET_CODE (operands[1]) == MEM) - { - rtx scratch1 = gen_reg_rtx (SImode); - rtx data = operands[0]; - rtx address = XEXP (operands[1], 0); - rtx seq; - - if ( GET_CODE (address) != REG ) - address = copy_to_mode_reg (SImode, address); - - start_sequence (); - emit_insn (gen_loadqi (gen_lowpart (SImode, data), address, scratch1)); - mt_set_memflags (operands[1]); - seq = get_insns (); - end_sequence (); - emit_insn (seq); - DONE; - } - - /* If the load is a pseudo register in a stack slot, some simplification - can be made because the loads are aligned */ - if ( (! TARGET_BYTE_ACCESS) - && (reload_in_progress && GET_CODE (operands[1]) == SUBREG - && GET_CODE (SUBREG_REG (operands[1])) == REG - && REGNO (SUBREG_REG (operands[1])) >= FIRST_PSEUDO_REGISTER)) - { - rtx data = operands[0]; - rtx address = XEXP (operands[1], 0); - rtx seq; - - start_sequence (); - emit_insn (gen_movsi (gen_lowpart (SImode, data), address)); - mt_set_memflags (operands[1]); - seq = get_insns (); - end_sequence (); - emit_insn (seq); - DONE; - } -}") - -(define_insn "*movqi_internal" - [(set (match_operand:QI 0 "nonimmediate_operand" "=r,r,m,r") - (match_operand:QI 1 "general_operand" "r,m,r,I"))] - "TARGET_BYTE_ACCESS - && (!memory_operand (operands[0], QImode) - || !memory_operand (operands[1], QImode))" - "@ - or %0, %1, %1 - ldb %0, %1 - stb %1, %0 - addi %0, r0, %1" - [(set_attr "length" "4,4,4,4") - (set_attr "type" "arith,load,store,arith")]) - -(define_insn "*movqi_internal_nobyte" - [(set (match_operand:QI 0 "register_operand" "=r,r") - (match_operand:QI 1 "arith_operand" "r,I"))] - "!TARGET_BYTE_ACCESS - && (!memory_operand (operands[0], QImode) - || !memory_operand (operands[1], QImode))" - "@ - or %0, %1, %1 - addi %0, r0, %1" - [(set_attr "length" "4,4") - (set_attr "type" "arith,arith")]) - - -;; The MorphoRISC does not have 16-bit loads and stores. -;; These operations must be synthesized. Note that the code -;; for loadhi and storehi assumes that the least significant bits -;; is ignored. - -;; loadhi -;; operand 0 location of result -;; operand 1 memory address -;; operand 2 temp -(define_expand "loadhi" - [ - ;; compute shift - (set (match_operand:SI 2 "register_operand" "") - (and:SI (match_dup 1) (const_int 2))) - (set (match_dup 2) (xor:SI (match_dup 2) (const_int 2))) - (set (match_dup 2 ) (ashift:SI (match_dup 2) (const_int 3))) - - ;; get word that contains the 16-bits - (set (match_operand:SI 0 "register_operand" "") - (mem:SI (and:SI (match_operand:SI 1 "register_operand" "") - (const_int -3)))) - - ;; align 16-bit value - (set (match_dup 0) (ashiftrt:SI (match_dup 0) (match_dup 2))) - ] - "" - "") - -;; storehi -;; operand 0 byte value to store -;; operand 1 address -;; operand 2 temp, word containing byte -;; operand 3 temp, shift count -;; operand 4 temp, mask, aligned and masked byte -;; operand 5 (unused) -(define_expand "storehi" - [ - ;; compute shift - (set (match_operand:SI 3 "register_operand" "") - (and:SI (match_operand:SI 1 "register_operand" "") (const_int 2))) - (set (match_dup 3) (xor:SI (match_dup 3) (const_int 2))) - (set (match_dup 3) (ashift:SI (match_dup 3) (const_int 3))) - - ;; get word that contains the 16-bits - (set (match_operand:SI 2 "register_operand" "") - (mem:SI (and:SI (match_dup 1) (const_int -3)))) - - ;; generate mask - (set (match_operand:SI 4 "register_operand" "") (const_int 65535)) - (set (match_dup 4) (ashift:SI (match_dup 4) (match_dup 3))) - (set (match_dup 4) (not:SI (match_dup 4))) - - ;; clear appropriate bits - (set (match_dup 2) (and:SI (match_dup 2) (match_dup 4))) - - ;; align 16-bit value - (set (match_dup 4) - (and:SI (match_operand:SI 0 "register_operand" "") (const_int 65535))) - (set (match_dup 4) (ashift:SI (match_dup 4) (match_dup 3))) - - ;; combine - (set (match_dup 2) (ior:SI (match_dup 4) (match_dup 2))) - ;; store updated word - (set (mem:SI (and:SI (match_dup 1) (const_int -3))) (match_dup 2)) - ] - "" - "") - - -(define_expand "movhi" - [(set (match_operand:HI 0 "general_operand" "") - (match_operand:HI 1 "general_operand" ""))] - "" - " -{ - if (!reload_in_progress - && !reload_completed - && GET_CODE (operands[0]) == MEM - && GET_CODE (operands[1]) == MEM) - operands[1] = copy_to_mode_reg (HImode, operands[1]); - - if ( GET_CODE (operands[0]) == MEM) - { - rtx scratch1 = gen_reg_rtx (SImode); - rtx scratch2 = gen_reg_rtx (SImode); - rtx scratch3 = gen_reg_rtx (SImode); - rtx data = operands[1]; - rtx address = XEXP (operands[0], 0); - rtx seq; - - if (GET_CODE (data) != REG) - data = copy_to_mode_reg (HImode, data); - - if (GET_CODE (address) != REG) - address = copy_to_mode_reg (SImode, address); - - start_sequence (); - emit_insn (gen_storehi (gen_lowpart (SImode, data), address, - scratch1, scratch2, scratch3)); - mt_set_memflags (operands[0]); - seq = get_insns (); - end_sequence (); - emit_insn (seq); - DONE; - } - - if ( GET_CODE (operands[1]) == MEM) - { - rtx scratch1 = gen_reg_rtx (SImode); - rtx data = operands[0]; - rtx address = XEXP (operands[1], 0); - rtx seq; - - if (GET_CODE (address) != REG) - address = copy_to_mode_reg (SImode, address); - - start_sequence (); - emit_insn (gen_loadhi (gen_lowpart (SImode, data), address, - scratch1)); - mt_set_memflags (operands[1]); - seq = get_insns (); - end_sequence (); - emit_insn (seq); - DONE; - } - - /* If the load is a pseudo register in a stack slot, some simplification - can be made because the loads are aligned */ - if ( (reload_in_progress && GET_CODE (operands[1]) == SUBREG - && GET_CODE (SUBREG_REG (operands[1])) == REG - && REGNO (SUBREG_REG (operands[1])) >= FIRST_PSEUDO_REGISTER)) - { - rtx data = operands[0]; - rtx address = XEXP (operands[1], 0); - rtx seq; - - start_sequence (); - emit_insn (gen_movsi (gen_lowpart (SImode, data), address)); - mt_set_memflags (operands[1]); - seq = get_insns (); - end_sequence (); - emit_insn (seq); - DONE; - } -}") - -(define_insn "*movhi_internal" - [(set (match_operand:HI 0 "register_operand" "=r,r") - (match_operand:HI 1 "arith_operand" "r,I"))] - "!memory_operand (operands[0], HImode) || !memory_operand (operands[1], HImode)" - "@ - or %0, %1, %1 - addi %0, r0, %1" - [(set_attr "length" "4,4") - (set_attr "type" "arith,arith")]) - -(define_expand "movsi" - [(set (match_operand:SI 0 "nonimmediate_operand" "") - (match_operand:SI 1 "general_operand" ""))] - "" - " -{ - if (!reload_in_progress && !reload_completed - && !register_operand (operands[0], SImode) - && !register_operand (operands[1], SImode)) - operands[1] = copy_to_mode_reg (SImode, operands[1]); - - /* Take care of constants that don't fit in single instruction */ - if ( (reload_in_progress || reload_completed) - && !single_const_operand (operands[1], SImode)) - { - emit_insn (gen_movsi_high (operands[0], operands[1])); - emit_insn (gen_movsi_lo_sum (operands[0], operands[0], operands[1])); - DONE; - } - -}") - -(define_insn "movsi_high" - [(set (match_operand:SI 0 "register_operand" "=r") - (high:SI (match_operand:SI 1 "general_operand" "i")))] - "" - "* -{ - return \"ldui\\t%0, %H1\"; -}" - [(set_attr "length" "4") - (set_attr "type" "arith")]) - - -(define_insn "movsi_lo_sum" - [(set (match_operand:SI 0 "register_operand" "=r") - (lo_sum:SI (match_operand:SI 1 "register_operand" "r") - (match_operand:SI 2 "general_operand" "i")))] - "" - "* -{ - return \"addui\\t%0, %1, %L2\"; -}" - [(set_attr "length" "4") - (set_attr "type" "arith")]) - -/* Take care of constants that don't fit in single instruction */ -(define_split - [(set (match_operand:SI 0 "register_operand" "") - (match_operand:SI 1 "general_operand" ""))] - "(reload_in_progress || reload_completed) - && !single_const_operand (operands[1], SImode)" - - [(set (match_dup 0 ) - (high:SI (match_dup 1))) - (set (match_dup 0 ) - (lo_sum:SI (match_dup 0) - (match_dup 1)))] -) - - -;; The last pattern in movsi (with two instructions) -;; is really handled by the emit_insn's in movsi -;; and the define_split above. This provides additional -;; instructions to fill delay slots. - -;; Note - it is best to only have one movsi pattern and to handle -;; all the various contingencies by the use of alternatives. This -;; allows reload the greatest amount of flexibility (since reload will -;; only choose amoungst alternatives for a selected insn, it will not -;; replace the insn with another one). -(define_insn "*movsi_internal" - [(set (match_operand:SI 0 "nonimmediate_operand" "=r,r,m,r,r,r,r,r") - (match_operand:SI 1 "general_operand" "r,m,r,I,P,L,N,i"))] - "(!memory_operand (operands[0], SImode) || !memory_operand (operands[1], SImode)) - && !((reload_in_progress || reload_completed) - && !single_const_operand (operands[1], SImode))" - "@ - or %0, %1, %1 - ldw %0, %1 - stw %1, %0 - addi %0, r0, %1 - addui %0, r0, %1 - ldui %0, %H1 - nori %0, r0, %N1 - ldui %0, %H1\;addui %0, %0, %L1" - [(set_attr "length" "4,4,4,4,4,4,4,8") - (set_attr "type" "arith,load,store,arith,arith,arith,arith,complex")] -) - -;; Floating Point Moves -;; -;; Note - Patterns for SF mode moves are compulsory, but -;; patterns for DF are optional, as GCC can synthesize them. - -(define_expand "movsf" - [(set (match_operand:SF 0 "general_operand" "") - (match_operand:SF 1 "general_operand" ""))] - "" - " -{ - if (!reload_in_progress - && !reload_completed - && GET_CODE (operands[0]) == MEM - && (GET_CODE (operands[1]) == MEM - || GET_CODE (operands[1]) == CONST_DOUBLE)) - operands[1] = copy_to_mode_reg (SFmode, operands[1]); - - /* Take care of reg <- SF constant */ - if ( const_double_operand (operands[1], GET_MODE (operands[1]) ) ) - { - emit_insn (gen_movsf_high (operands[0], operands[1])); - emit_insn (gen_movsf_lo_sum (operands[0], operands[0], operands[1])); - DONE; - } -}") - -(define_insn "movsf_lo_sum" - [(set (match_operand:SF 0 "register_operand" "=r") - (lo_sum:SF (match_operand:SF 1 "register_operand" "r") - (match_operand:SF 2 "const_double_operand" "")))] - "" - "* -{ - REAL_VALUE_TYPE r; - long i; - - REAL_VALUE_FROM_CONST_DOUBLE (r, operands[2]); - REAL_VALUE_TO_TARGET_SINGLE (r, i); - operands[2] = GEN_INT (i); - return \"addui\\t%0, %1, %L2\"; -}" - [(set_attr "length" "4") - (set_attr "type" "arith")]) - -(define_insn "movsf_high" - [(set (match_operand:SF 0 "register_operand" "=r") - (high:SF (match_operand:SF 1 "const_double_operand" "")))] - "" - "* -{ - REAL_VALUE_TYPE r; - long i; - - REAL_VALUE_FROM_CONST_DOUBLE (r, operands[1]); - REAL_VALUE_TO_TARGET_SINGLE (r, i); - operands[1] = GEN_INT (i); - return \"ldui\\t%0, %H1\"; -}" - [(set_attr "length" "4") - (set_attr "type" "arith")]) - - -(define_insn "*movsf_internal" - [(set (match_operand:SF 0 "nonimmediate_operand" "=r,r,m") - (match_operand:SF 1 "nonimmediate_operand" "r,m,r"))] - "!memory_operand (operands[0], SFmode) || !memory_operand (operands[1], SFmode)" - "@ - or %0, %1, %1 - ldw %0, %1 - stw %1, %0" - [(set_attr "length" "4,4,4") - (set_attr "type" "arith,load,store")] -) - -(define_expand "movdf" - [(set (match_operand:DF 0 "general_operand" "") - (match_operand:DF 1 "general_operand" ""))] - "" - " -{ - /* One of the ops has to be in a register or 0 */ - if (!register_operand (operand0, DFmode) - && !reg_or_0_operand (operand1, DFmode)) - operands[1] = copy_to_mode_reg (DFmode, operand1); -}") - -(define_insn_and_split "*movdf_internal" - [(set (match_operand:DF 0 "nonimmediate_operand" "=r,o") - (match_operand:DF 1 "general_operand" "rim,r"))] - "! (memory_operand (operands[0], DFmode) - && memory_operand (operands[1], DFmode))" - "#" - - "(reload_completed || reload_in_progress)" - - [(set (match_dup 2) (match_dup 3)) - (set (match_dup 4) (match_dup 5)) - ] - - "{ - /* figure out what precisely to put into operands 2, 3, 4, and 5 */ - mt_split_words (SImode, DFmode, operands); - }" -) - - -;; Reloads - -;; Like `movM', but used when a scratch register is required to move between -;; operand 0 and operand 1. Operand 2 describes the scratch register. See the -;; discussion of the `SECONDARY_RELOAD_CLASS' macro. - -(define_expand "reload_inqi" - [(set (match_operand:QI 0 "register_operand" "=r") - (match_operand:QI 1 "memory_operand" "m")) - (clobber (match_operand:DI 2 "register_operand" "=&r"))] - "! TARGET_BYTE_ACCESS" - " -{ - rtx scratch1 = gen_rtx_REG (SImode, REGNO (operands[2])); - rtx scratch2 = gen_rtx_REG (SImode, REGNO (operands[2])+1); - rtx data = operands[0]; - rtx address = XEXP (operands[1], 0); - rtx swap, seq; - - /* It is possible that the registers we got for scratch1 - might coincide with that of operands[0]. gen_loadqi - requires operand0 and operand2 to be different registers. - The following statement ensure that is always the case. */ - if (REGNO(operands[0]) == REGNO(scratch1)) - { - swap = scratch1; - scratch1 = scratch2; - scratch2 = swap; - } - - /* need to make sure address is already in register */ - if ( GET_CODE (address) != REG ) - address = force_operand (address, scratch2); - - start_sequence (); - emit_insn (gen_loadqi (gen_lowpart (SImode, data), address, scratch1)); - mt_set_memflags (operands[1]); - seq = get_insns (); - end_sequence (); - emit_insn (seq); - DONE; -}") - -(define_expand "reload_outqi" - [(set (match_operand:QI 0 "memory_operand" "=m") - (match_operand:QI 1 "register_operand" "r")) - (clobber (match_operand:TI 2 "register_operand" "=&r"))] - "! TARGET_BYTE_ACCESS" - " -{ - rtx scratch1 = gen_rtx_REG (SImode, REGNO (operands[2])); - rtx scratch2 = gen_rtx_REG (SImode, REGNO (operands[2])+1); - rtx scratch3 = gen_rtx_REG (SImode, REGNO (operands[2])+2); - rtx scratch4 = gen_rtx_REG (SImode, REGNO (operands[2])+3); - rtx data = operands[1]; - rtx address = XEXP (operands[0], 0); - rtx seq; - - /* need to make sure address is already in register */ - if ( GET_CODE (address) != REG ) - address = force_operand (address, scratch4); - - start_sequence (); - emit_insn (gen_storeqi (gen_lowpart (SImode, data), address, - scratch1, scratch2, scratch3)); - mt_set_memflags (operands[0]); - seq = get_insns (); - end_sequence (); - emit_insn (seq); - DONE; -}") - -(define_expand "reload_inhi" - [(set (match_operand:HI 0 "register_operand" "=r") - (match_operand:HI 1 "memory_operand" "m")) - (clobber (match_operand:DI 2 "register_operand" "=&r"))] - "" - " -{ - rtx scratch1 = gen_rtx_REG (SImode, REGNO (operands[2])); - rtx scratch2 = gen_rtx_REG (SImode, REGNO (operands[2])+1); - rtx data = operands[0]; - rtx address = XEXP (operands[1], 0); - rtx swap, seq; - - /* It is possible that the registers we got for scratch1 - might coincide with that of operands[0]. gen_loadqi - requires operand0 and operand2 to be different registers. - The following statement ensure that is always the case. */ - if (REGNO(operands[0]) == REGNO(scratch1)) - { - swap = scratch1; - scratch1 = scratch2; - scratch2 = swap; - } - - /* need to make sure address is already in register */ - if ( GET_CODE (address) != REG ) - address = force_operand (address, scratch2); - - start_sequence (); - emit_insn (gen_loadhi (gen_lowpart (SImode, data), address, - scratch1)); - mt_set_memflags (operands[1]); - seq = get_insns (); - end_sequence (); - emit_insn (seq); - DONE; -}") - -(define_expand "reload_outhi" - [(set (match_operand:HI 0 "memory_operand" "=m") - (match_operand:HI 1 "register_operand" "r")) - (clobber (match_operand:TI 2 "register_operand" "=&r"))] - "" - " -{ - rtx scratch1 = gen_rtx_REG (SImode, REGNO (operands[2])); - rtx scratch2 = gen_rtx_REG (SImode, REGNO (operands[2])+1); - rtx scratch3 = gen_rtx_REG (SImode, REGNO (operands[2])+2); - rtx scratch4 = gen_rtx_REG (SImode, REGNO (operands[2])+3); - rtx data = operands[1]; - rtx address = XEXP (operands[0], 0); - rtx seq; - - /* need to make sure address is already in register */ - if ( GET_CODE (address) != REG ) - address = force_operand (address, scratch4); - - start_sequence (); - emit_insn (gen_storehi (gen_lowpart (SImode, data), address, - scratch1, scratch2, scratch3)); - mt_set_memflags (operands[0]); - seq = get_insns (); - end_sequence (); - emit_insn (seq); - DONE; -}") - - -;; 32-bit Integer arithmetic - -;; Addition -(define_insn "addsi3" - [(set (match_operand:SI 0 "register_operand" "=r,r") - (plus:SI (match_operand:SI 1 "register_operand" "%r,r") - (match_operand:SI 2 "arith_operand" "r,I")))] - "" - "@ - add %0, %1, %2 - addi %0, %1, %2" - [(set_attr "length" "4,4") - (set_attr "type" "arith,arith")]) - -;; Subtraction -(define_insn "subsi3" - [(set (match_operand:SI 0 "register_operand" "=r,r") - (minus:SI (match_operand:SI 1 "reg_or_0_operand" "rJ,rJ") - (match_operand:SI 2 "arith_operand" "rJ,I")))] - "" - "@ - sub %0, %z1, %z2 - subi %0, %z1, %2" - [(set_attr "length" "4,4") - (set_attr "type" "arith,arith")]) - -;; Negation -(define_insn "negsi2" - [(set (match_operand:SI 0 "register_operand" "=r,r") - (neg:SI (match_operand:SI 1 "arith_operand" "r,I")))] - "" - "@ - sub %0, r0, %1 - subi %0, r0, %1" - [(set_attr "length" "4,4") - (set_attr "type" "arith,arith")]) - - -;; 32-bit Integer Shifts and Rotates - -;; Arithmetic Shift Left -(define_insn "ashlsi3" - [(set (match_operand:SI 0 "register_operand" "=r,r") - (ashift:SI (match_operand:SI 1 "register_operand" "r,r") - (match_operand:SI 2 "arith_operand" "r,K")))] - "" - "@ - lsl %0, %1, %2 - lsli %0, %1, %2" - [(set_attr "length" "4,4") - (set_attr "type" "arith,arith")]) - -;; Arithmetic Shift Right -(define_insn "ashrsi3" - [(set (match_operand:SI 0 "register_operand" "=r,r") - (ashiftrt:SI (match_operand:SI 1 "register_operand" "r,r") - (match_operand:SI 2 "uns_arith_operand" "r,K")))] - "" - "@ - asr %0, %1, %2 - asri %0, %1, %2" - [(set_attr "length" "4,4") - (set_attr "type" "arith,arith")]) - -;; Logical Shift Right -(define_insn "lshrsi3" - [(set (match_operand:SI 0 "register_operand" "=r,r") - (lshiftrt:SI (match_operand:SI 1 "register_operand" "r,r") - (match_operand:SI 2 "uns_arith_operand" "r,K")))] - "" - "@ - lsr %0, %1, %2 - lsri %0, %1, %2" - [(set_attr "length" "4,4") - (set_attr "type" "arith,arith")]) - - -;; 32-Bit Integer Logical operations - -;; Logical AND, 32-bit integers -(define_insn "andsi3" - [(set (match_operand:SI 0 "register_operand" "=r,r") - (and:SI (match_operand:SI 1 "register_operand" "%r,r") - (match_operand:SI 2 "uns_arith_operand" "r,K")))] - "" - "@ - and %0, %1, %2 - andi %0, %1, %2" - [(set_attr "length" "4,4") - (set_attr "type" "arith,arith")]) - -;; Inclusive OR, 32-bit integers -(define_insn "iorsi3" - [(set (match_operand:SI 0 "register_operand" "=r,r") - (ior:SI (match_operand:SI 1 "register_operand" "%r,r") - (match_operand:SI 2 "uns_arith_operand" "r,K")))] - "" - "@ - or %0, %1, %2 - ori %0, %1, %2" - [(set_attr "length" "4,4") - (set_attr "type" "arith,arith")]) - -;; Exclusive OR, 32-bit integers -(define_insn "xorsi3" - [(set (match_operand:SI 0 "register_operand" "=r,r") - (xor:SI (match_operand:SI 1 "register_operand" "%r,r") - (match_operand:SI 2 "uns_arith_operand" "r,K")))] - "" - "@ - xor %0, %1, %2 - xori %0, %1, %2" - [(set_attr "length" "4,4") - (set_attr "type" "arith,arith")]) - - -;; One's complement, 32-bit integers -(define_insn "one_cmplsi2" - [(set (match_operand:SI 0 "register_operand" "=r") - (not:SI (match_operand:SI 1 "register_operand" "r")))] - "" - "nor %0, %1, %1" - [(set_attr "length" "4") - (set_attr "type" "arith")]) - - -;; Multiply - -(define_insn "mulhisi3" - [(set (match_operand:SI 0 "register_operand" "=r,r") - (mult:SI (sign_extend:SI (match_operand:HI 1 "register_operand" "%r,r")) - (sign_extend:SI (match_operand:HI 2 "arith_operand" "r,I"))))] - "TARGET_MS1_16_003 || TARGET_MS2" - "@ - mul %0, %1, %2 - muli %0, %1, %2" - [(set_attr "length" "4,4") - (set_attr "type" "arith,arith")]) - - -;; Comparisons - -;; Note, we store the operands in the comparison insns, and use them later -;; when generating the branch or scc operation. - -;; First the routines called by the machine independent part of the compiler -(define_expand "cmpsi" - [(set (cc0) - (compare (match_operand:SI 0 "register_operand" "") - (match_operand:SI 1 "arith_operand" "")))] - "" - " -{ - mt_compare_op0 = operands[0]; - mt_compare_op1 = operands[1]; - DONE; -}") - - -;; Branches - -(define_expand "beq" - [(use (match_operand 0 "" ""))] - "" - " -{ - mt_emit_cbranch (EQ, operands[0], mt_compare_op0, mt_compare_op1); - DONE; -}") - -(define_expand "bne" - [(use (match_operand 0 "" ""))] - "" - " -{ - mt_emit_cbranch (NE, operands[0], mt_compare_op0, mt_compare_op1); - DONE; -}") - -(define_expand "bge" - [(use (match_operand 0 "" ""))] - "" - " -{ - mt_emit_cbranch (GE, operands[0], mt_compare_op0, mt_compare_op1); - DONE; -}") - -(define_expand "bgt" - [(use (match_operand 0 "" ""))] - "" - " -{ - mt_emit_cbranch (GT, operands[0], mt_compare_op0, mt_compare_op1); - DONE; -}") - -(define_expand "ble" - [(use (match_operand 0 "" ""))] - "" - " -{ - mt_emit_cbranch (LE, operands[0], mt_compare_op0, mt_compare_op1); - DONE; -}") - -(define_expand "blt" - [(use (match_operand 0 "" ""))] - "" - " -{ - mt_emit_cbranch (LT, operands[0], mt_compare_op0, mt_compare_op1); - DONE; -}") - -(define_expand "bgeu" - [(use (match_operand 0 "" ""))] - "" - " -{ - mt_emit_cbranch (GEU, operands[0], mt_compare_op0, mt_compare_op1); - DONE; -}") - -(define_expand "bgtu" - [(use (match_operand 0 "" ""))] - "" - " -{ - mt_emit_cbranch (GTU, operands[0], mt_compare_op0, mt_compare_op1); - DONE; -}") - -(define_expand "bleu" - [(use (match_operand 0 "" ""))] - "" - " -{ - mt_emit_cbranch (LEU, operands[0], mt_compare_op0, mt_compare_op1); - DONE; -}") - -(define_expand "bltu" - [(use (match_operand 0 "" ""))] - "" - " -{ - mt_emit_cbranch (LTU, operands[0], mt_compare_op0, mt_compare_op1); - DONE; -}") - -(define_expand "bunge" - [(use (match_operand 0 "" ""))] - "" - " -{ - mt_emit_cbranch (GEU, operands[0], mt_compare_op0, mt_compare_op1); - DONE; -}") - -(define_expand "bungt" - [(use (match_operand 0 "" ""))] - "" - " -{ - mt_emit_cbranch (GTU, operands[0], mt_compare_op0, mt_compare_op1); - DONE; -}") - -(define_expand "bunle" - [(use (match_operand 0 "" ""))] - "" - " -{ - mt_emit_cbranch (LEU, operands[0], mt_compare_op0, mt_compare_op1); - DONE; -}") - -(define_expand "bunlt" - [(use (match_operand 0 "" ""))] - "" - " -{ - mt_emit_cbranch (LTU, operands[0], mt_compare_op0, mt_compare_op1); - DONE; -}") - -(define_insn "*beq_true" - [(set (pc) - (if_then_else (eq (match_operand:SI 0 "reg_or_0_operand" "rJ") - (match_operand:SI 1 "reg_or_0_operand" "rJ")) - (label_ref (match_operand 2 "" "")) - (pc)))] - "" - "breq %z0, %z1, %l2%#" - [(set_attr "length" "4") - (set_attr "type" "branch")]) - -(define_insn "*beq_false" - [(set (pc) - (if_then_else (eq (match_operand:SI 0 "reg_or_0_operand" "rJ") - (match_operand:SI 1 "reg_or_0_operand" "rJ")) - (pc) - (label_ref (match_operand 2 "" ""))))] - "" - "brne %z0, %z1, %l2%#" - [(set_attr "length" "4") - (set_attr "type" "branch")]) - - -(define_insn "*bne_true" - [(set (pc) - (if_then_else (ne (match_operand:SI 0 "reg_or_0_operand" "rJ") - (match_operand:SI 1 "reg_or_0_operand" "rJ")) - (label_ref (match_operand 2 "" "")) - (pc)))] - "" - "brne %z0, %z1, %l2%#" - [(set_attr "length" "4") - (set_attr "type" "branch")]) - -(define_insn "*bne_false" - [(set (pc) - (if_then_else (ne (match_operand:SI 0 "reg_or_0_operand" "rJ") - (match_operand:SI 1 "reg_or_0_operand" "rJ")) - (pc) - (label_ref (match_operand 2 "" ""))))] - "" - "breq %z0, %z1, %l2%#" - [(set_attr "length" "4") - (set_attr "type" "branch")]) - -(define_insn "*blt_true" - [(set (pc) - (if_then_else (lt (match_operand:SI 0 "reg_or_0_operand" "rJ") - (match_operand:SI 1 "reg_or_0_operand" "rJ")) - (label_ref (match_operand 2 "" "")) - (pc)))] - "" - "brlt %z0, %z1, %l2%#" - [(set_attr "length" "4") - (set_attr "type" "branch")]) - -(define_insn "*blt_false" - [(set (pc) - (if_then_else (lt (match_operand:SI 0 "reg_or_0_operand" "rJ") - (match_operand:SI 1 "reg_or_0_operand" "rJ")) - (pc) - (label_ref (match_operand 2 "" ""))))] - "" - "brle %z1, %z0,%l2%#" - [(set_attr "length" "4") - (set_attr "type" "branch")]) - -(define_insn "*ble_true" - [(set (pc) - (if_then_else (le (match_operand:SI 0 "reg_or_0_operand" "rJ") - (match_operand:SI 1 "reg_or_0_operand" "rJ")) - (label_ref (match_operand 2 "" "")) - (pc)))] - "" - "brle %z0, %z1, %l2%#" - [(set_attr "length" "4") - (set_attr "type" "branch")]) - -(define_insn "*ble_false" - [(set (pc) - (if_then_else (le (match_operand:SI 0 "reg_or_0_operand" "rJ") - (match_operand:SI 1 "reg_or_0_operand" "rJ")) - (pc) - (label_ref (match_operand 2 "" ""))))] - "" - "brlt %z1, %z0,%l2%#" - [(set_attr "length" "4") - (set_attr "type" "branch")]) - -(define_insn "*bgt_true" - [(set (pc) - (if_then_else (gt (match_operand:SI 0 "reg_or_0_operand" "rJ") - (match_operand:SI 1 "reg_or_0_operand" "rJ")) - (label_ref (match_operand 2 "" "")) - (pc)))] - "" - "brlt %z1, %z0, %l2%#" - [(set_attr "length" "4") - (set_attr "type" "branch")]) - -(define_insn "*bgt_false" - [(set (pc) - (if_then_else (gt (match_operand:SI 0 "reg_or_0_operand" "rJ") - (match_operand:SI 1 "reg_or_0_operand" "rJ")) - (pc) - (label_ref (match_operand 2 "" ""))))] - "" - "brle %z0, %z1, %l2%#" - [(set_attr "length" "4") - (set_attr "type" "branch")]) - -(define_insn "*bge_true" - [(set (pc) - (if_then_else (ge (match_operand:SI 0 "reg_or_0_operand" "rJ") - (match_operand:SI 1 "reg_or_0_operand" "rJ")) - (label_ref (match_operand 2 "" "")) - (pc)))] - "" - "brle %z1, %z0,%l2%#" - [(set_attr "length" "4") - (set_attr "type" "branch")]) - -(define_insn "*bge_false" - [(set (pc) - (if_then_else (ge (match_operand:SI 0 "reg_or_0_operand" "rJ") - (match_operand:SI 1 "reg_or_0_operand" "rJ")) - (pc) - (label_ref (match_operand 2 "" ""))))] - "" - "brlt %z0, %z1, %l2%#" - [(set_attr "length" "4") - (set_attr "type" "branch")]) - -;; No unsigned operators on Morpho mt. All the unsigned operations are -;; converted to the signed operations above. - - -;; Set flag operations - -;; "seq", "sne", "slt", "sle", "sgt", "sge", "sltu", "sleu", -;; "sgtu", and "sgeu" don't exist as regular instruction on the -;; mt, so these are not defined - -;; Call and branch instructions - -(define_expand "call" - [(parallel [(call (mem:SI (match_operand:SI 0 "register_operand" "")) - (match_operand 1 "" "")) - (clobber (reg:SI 14))])] - "" - " -{ - operands[0] = force_reg (SImode, XEXP (operands[0], 0)); -}") - -(define_insn "call_internal" - [(call (mem:SI (match_operand 0 "register_operand" "r")) - (match_operand 1 "" "")) - ;; possibly add a clobber of the reg that gets the return address - (clobber (reg:SI 14))] - "" - "jal r14, %0%#" - [(set_attr "length" "4") - (set_attr "type" "call")]) - -(define_expand "call_value" - [(parallel [(set (match_operand 0 "register_operand" "") - (call (mem:SI (match_operand:SI 1 "register_operand" "")) - (match_operand 2 "general_operand" ""))) - (clobber (reg:SI 14))])] - "" - " -{ - operands[1] = force_reg (SImode, XEXP (operands[1], 0)); -}") - - -(define_insn "call_value_internal" - [(set (match_operand 0 "register_operand" "=r") - (call (mem:SI (match_operand 1 "register_operand" "r")) - (match_operand 2 "" ""))) - ;; possibly add a clobber of the reg that gets the return address - (clobber (reg:SI 14))] - "" - "jal r14, %1%#" - [(set_attr "length" "4") - (set_attr "type" "call")]) - -;; Subroutine return -(define_insn "return_internal" - [(const_int 2) - (return) - (use (reg:SI 14))] - "" - "jal r0, r14%#" - [(set_attr "length" "4") - (set_attr "type" "call")]) - -;; Interrupt return -(define_insn "return_interrupt_internal" - [(const_int 3) - (return) - (use (reg:SI 15))] - "" - "reti r15%#" - [(set_attr "length" "4") - (set_attr "type" "call")]) - -;; Subroutine return -(define_insn "eh_return_internal" - [(return) - (use (reg:SI 7)) - (use (reg:SI 8)) - (use (reg:SI 11)) - (use (reg:SI 10))] - "" - "jal r0, r11%#" - [(set_attr "length" "4") - (set_attr "type" "call")]) - - -;; Normal unconditional jump -(define_insn "jump" - [(set (pc) (label_ref (match_operand 0 "" "")))] - "" - "jmp %l0%#" - [(set_attr "length" "4") - (set_attr "type" "branch")]) - -;; Indirect jump through a register -(define_insn "indirect_jump" - [(set (pc) (match_operand 0 "register_operand" "r"))] - "" - "jal r0,%0%#" - [(set_attr "length" "4") - (set_attr "type" "call")]) - -(define_insn "tablejump" - [(set (pc) (match_operand:SI 0 "register_operand" "r")) - (use (label_ref (match_operand 1 "" "")))] - "" - "jal r0, %0%#" - [(set_attr "length" "4") - (set_attr "type" "call")]) - - -(define_expand "prologue" - [(const_int 1)] - "" - " -{ - mt_expand_prologue (); - DONE; -}") - -(define_expand "epilogue" - [(const_int 2)] - "" - " -{ - mt_expand_epilogue (NORMAL_EPILOGUE); - DONE; -}") - - -(define_expand "eh_return" - [(use (match_operand:SI 0 "register_operand" "r"))] - "" - " -{ - mt_expand_eh_return (operands); - DONE; -}") - - -(define_insn_and_split "eh_epilogue" - [(unspec [(match_operand 0 "register_operand" "r")] 6)] - "" - "#" - "reload_completed" - [(const_int 1)] - "mt_emit_eh_epilogue (operands); DONE;" -) - -;; No operation, needed in case the user uses -g but not -O. -(define_insn "nop" - [(const_int 0)] - "" - "nop" - [(set_attr "length" "4") - (set_attr "type" "arith")]) - -;; :::::::::::::::::::: -;; :: -;; :: UNSPEC_VOLATILE usage -;; :: -;; :::::::::::::::::::: -;; -;; 0 blockage -;; 1 Enable interrupts -;; 2 Disable interrupts -;; - -;; Pseudo instruction that prevents the scheduler from moving code above this -;; point. -(define_insn "blockage" - [(unspec_volatile [(const_int 0)] UNSPEC_BLOCKAGE)] - "" - "" - [(set_attr "length" "0")]) - -;; Trap instruction to allow usage of the __builtin_trap function -(define_insn "trap" - [(trap_if (const_int 1) (const_int 0)) - (clobber (reg:SI 14))] - "" - "si r14%#" - [(set_attr "length" "4") - (set_attr "type" "branch")]) - -(define_expand "conditional_trap" - [(trap_if (match_operator 0 "comparison_operator" - [(match_dup 2) - (match_dup 3)]) - (match_operand 1 "const_int_operand" ""))] - "" - " -{ - operands[2] = mt_compare_op0; - operands[3] = mt_compare_op1; -}") - -;; Templates to control handling of interrupts - -;; Enable interrupts template -(define_insn "ei" - [(unspec_volatile [(const_int 0)] UNSPEC_EI)] - "" - "ei" - [(set_attr "length" "4")]) - -;; Enable interrupts template -(define_insn "di" - [(unspec_volatile [(const_int 0)] UNSPEC_DI)] - "" - "di" - [(set_attr "length" "4")]) diff --git a/gcc/config/mt/mt.opt b/gcc/config/mt/mt.opt deleted file mode 100644 index 4112c93..0000000 --- a/gcc/config/mt/mt.opt +++ /dev/null @@ -1,55 +0,0 @@ -; Options for the mt port of the compiler -; -; Copyright (C) 2005, 2007 Free Software Foundation, Inc. -; -; This file is part of GCC. -; -; GCC is free software; you can redistribute it and/or modify it under -; the terms of the GNU General Public License as published by the Free -; Software Foundation; either version 3, or (at your option) any later -; version. -; -; GCC is distributed in the hope that it will be useful, but WITHOUT -; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public -; License for more details. -; -; You should have received a copy of the GNU General Public License -; along with GCC; see the file COPYING3. If not see -; <http://www.gnu.org/licenses/>. - -mbacc -Target Report Mask(BYTE_ACCESS) -Use byte loads and stores when generating code. - -msim -Target RejectNegative -Use simulator runtime - -mno-crt0 -Target RejectNegative -Do not include crt0.o in the startup files - -mdebug-arg -Target RejectNegative Mask(DEBUG_ARG) -Internal debug switch - -mdebug-addr -Target RejectNegative Mask(DEBUG_ADDR) -Internal debug switch - -mdebug-stack -Target RejectNegative Mask(DEBUG_STACK) -Internal debug switch - -mdebug-loc -Target RejectNegative Mask(DEBUG_LOC) -Internal debug switch - -mdebug -Target RejectNegative Mask(DEBUG) -Internal debug switch - -march= -Target RejectNegative Joined Var(mt_cpu_string) -Specify CPU for code generation purposes diff --git a/gcc/config/mt/t-mt b/gcc/config/mt/t-mt deleted file mode 100644 index c949e84..0000000 --- a/gcc/config/mt/t-mt +++ /dev/null @@ -1,73 +0,0 @@ -# Copyright (C) 2005, 2007 Free Software Foundation, Inc. -# -# This file is part of GCC. -# -# GCC is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published -# by the Free Software Foundation; either version 3, or (at your -# option) any later version. -# -# GCC is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public -# License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GCC; see the file COPYING3. If not see -# <http://www.gnu.org/licenses/>. - - -# Name of assembly file containing libgcc1 functions. -# This entry must be present, but it can be empty if the target does -# not need any assembler functions to support its code generation. -CROSS_LIBGCC1 = -# -# Alternatively if assembler functions *are* needed then define the -# entries below: -# CROSS_LIBGCC1 = libgcc1-asm.a -# LIB1ASMSRC = mt/lib1funcs.asm -# LIB1ASMFUNCS = _udivsi3 etc... - -LIB2FUNCS_EXTRA = $(srcdir)/config/mt/lib2extra-funcs.c - -# If any special flags are necessary when building libgcc2 put them here. -# -# TARGET_LIBGCC2_CFLAGS = - -EXTRA_PARTS = crtbegin.o crtend.o crti.o crtn.o - -# We want fine grained libraries, so use the new code to build the -# floating point emulation libraries. -FPBIT = fp-bit.c -DPBIT = dp-bit.c - -fp-bit.c: $(srcdir)/config/fp-bit.c - echo '#define FLOAT' > fp-bit.c - cat $(srcdir)/config/fp-bit.c >> fp-bit.c - -dp-bit.c: $(srcdir)/config/fp-bit.c - cat $(srcdir)/config/fp-bit.c > dp-bit.c - -# Assemble startup files. -$(T)crti.o: $(srcdir)/config/mt/crti.asm $(GCC_PASSES) - $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(MULTILIB_CFLAGS) $(INCLUDES) \ - -c -o $(T)crti.o -x assembler $(srcdir)/config/mt/crti.asm - -$(T)crtn.o: $(srcdir)/config/mt/crtn.asm $(GCC_PASSES) - $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(MULTILIB_CFLAGS) $(INCLUDES) \ - -c -o $(T)crtn.o -x assembler $(srcdir)/config/mt/crtn.asm - -# Enable the following if multilibs are needed. -# See gcc/genmultilib, gcc/gcc.texi and gcc/tm.texi for a -# description of the options and their values. -# -MULTILIB_OPTIONS = march=ms1-64-001/march=ms1-16-002/march=ms1-16-003/march=ms2 -MULTILIB_DIRNAMES = ms1-64-001 ms1-16-002 ms1-16-003 ms2 -# MULTILIB_MATCHES = -# MULTILIB_EXCEPTIONS = -# MULTILIB_EXTRA_OPTS = -EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o crti.o crtn.o -# -# LIBGCC = stmp-multilib -# INSTALL_LIBGCC = install-multilib - diff --git a/gcc/config/pa/pa-osf.h b/gcc/config/pa/pa-osf.h deleted file mode 100644 index 1d6670c..0000000 --- a/gcc/config/pa/pa-osf.h +++ /dev/null @@ -1,63 +0,0 @@ -/* Definitions of target machine for GNU compiler, for HP PA-RISC 1.1 - Copyright (C) 1991, 1995, 1996, 2002, 2003, 2007 Free Software Foundation, Inc. - Contributed by Tim Moore (moore@defmacro.cs.utah.edu) - -This file is part of GCC. - -GCC is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 3, or (at your option) -any later version. - -GCC is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GCC; see the file COPYING3. If not see -<http://www.gnu.org/licenses/>. */ - -#undef TARGET_OS_CPP_BUILTINS -#define TARGET_OS_CPP_BUILTINS() \ - do \ - { \ - if (TARGET_PA_11) \ - { \ - builtin_define_std ("hp700"); \ - builtin_define_std ("HP700"); \ - } \ - else \ - { \ - builtin_define_std ("hp800"); \ - builtin_define_std ("hp9k8"); \ - builtin_define_std ("hp9000s800"); \ - } \ - builtin_define_std ("BIT_MSF"); \ - builtin_define_std ("BYTE_MSF"); \ - builtin_define_std ("PARISC"); \ - builtin_define_std ("REVARGV"); \ - builtin_define_std ("hp9000"); \ - builtin_define ("__pa_risc"); \ - builtin_define_std ("parisc"); \ - builtin_define_std ("spectrum"); \ - builtin_define_std ("unix"); \ - builtin_assert ("system=mach"); \ - builtin_assert ("system=unix"); \ - } \ - while (0) - -/* Don't default to pcc-struct-return, because gcc is the only compiler, and - we want to retain compatibility with older gcc versions. */ -#define DEFAULT_PCC_STRUCT_RETURN 0 - -/* OSF1 on the PA still uses 16bit wchar_t. */ -#undef WCHAR_TYPE -#undef WCHAR_TYPE_SIZE - -#define WCHAR_TYPE "short unsigned int" -#define WCHAR_TYPE_SIZE 16 - -/* OSF1 wants to be different and use unsigned long as size_t. */ -#undef SIZE_TYPE -#define SIZE_TYPE "long unsigned int" diff --git a/gcc/config/pa/pa-pro-end.h b/gcc/config/pa/pa-pro-end.h deleted file mode 100644 index 7d5fc79..0000000 --- a/gcc/config/pa/pa-pro-end.h +++ /dev/null @@ -1,63 +0,0 @@ -/* Definitions of target machine for GNU compiler, for PRO. - Copyright (C) 1996, 1997, 2002, 2003, 2004, 2007 Free Software Foundation, Inc. - -This file is part of GCC. - -GCC is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 3, or (at your option) -any later version. - -GCC is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GCC; see the file COPYING3. If not see -<http://www.gnu.org/licenses/>. */ - -/* Make GCC agree with types.h. */ -#undef SIZE_TYPE -#undef PTRDIFF_TYPE - -#define SIZE_TYPE "unsigned int" -#define PTRDIFF_TYPE "int" - -#undef TARGET_OS_CPP_BUILTINS -#define TARGET_OS_CPP_BUILTINS() \ - do \ - { \ - if (!c_dialect_cxx () && !flag_iso) \ - { \ - builtin_define ("hppa"); \ - builtin_define_std ("PWB"); \ - } \ - builtin_define ("__pro__"); \ - builtin_assert ("system=pro"); \ - } \ - while (0) - -/* Like the default, except no -lg. */ -#undef LIB_SPEC -#define LIB_SPEC "%{!p:%{!pg:-lc}}%{p: -L/lib/libp/ -lc}%{pg: -L/lib/libp/ -lc}" - -/* hpux8 and later have C++ compatible include files, so do not - pretend they are `extern "C"'. */ -#define NO_IMPLICIT_EXTERN_C - -/* We don't want a crt0.o to get linked in automatically, we want the - linker script to pull it in. */ -#undef STARTFILE_SPEC -#define STARTFILE_SPEC "" - -/* We need to override the following two macros defined in elfos.h since - the .comm directive has a different syntax and it can't be used for - local common symbols. */ -#undef ASM_OUTPUT_ALIGNED_COMMON -#define ASM_OUTPUT_ALIGNED_COMMON(FILE, NAME, SIZE, ALIGN) \ - pa_asm_output_aligned_common (FILE, NAME, SIZE, ALIGN) - -#undef ASM_OUTPUT_ALIGNED_LOCAL -#define ASM_OUTPUT_ALIGNED_LOCAL(FILE, NAME, SIZE, ALIGN) \ - pa_asm_output_aligned_local (FILE, NAME, SIZE, ALIGN) diff --git a/gcc/config/pa/t-pro b/gcc/config/pa/t-pro deleted file mode 100644 index c619b40..0000000 --- a/gcc/config/pa/t-pro +++ /dev/null @@ -1,17 +0,0 @@ -LIB2FUNCS_EXTRA=lib2funcs.asm - -# We want fine grained libraries, so use the new code to build the -# floating point emulation libraries. -FPBIT = fp-bit.c -DPBIT = dp-bit.c - -dp-bit.c: $(srcdir)/config/fp-bit.c - cat $(srcdir)/config/fp-bit.c > dp-bit.c - -fp-bit.c: $(srcdir)/config/fp-bit.c - echo '#define FLOAT' > fp-bit.c - cat $(srcdir)/config/fp-bit.c >> fp-bit.c - -lib2funcs.asm: $(srcdir)/config/pa/lib2funcs.asm - rm -f lib2funcs.asm - cp $(srcdir)/config/pa/lib2funcs.asm . diff --git a/gcc/config/ptx4.h b/gcc/config/ptx4.h deleted file mode 100644 index 9980990..0000000 --- a/gcc/config/ptx4.h +++ /dev/null @@ -1,222 +0,0 @@ -/* Operating system specific defines to be used when targeting GCC for - Sequent's Dynix/ptx v4 and later. - Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2007 - Free Software Foundation, Inc. - Generic SysV4 file Contributed by Ron Guilmette (rfg@monkeys.com). - Renamed and changed to suit Dynix/ptx v4 and later. - Modified by Tim Wright (timw@sequent.com). - Modified by Janis Johnson (janis@us.ibm.com). - -This file is part of GCC. - -GCC is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 3, or (at your option) -any later version. - -GCC is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GCC; see the file COPYING3. If not see -<http://www.gnu.org/licenses/>. - -*/ - -/* Define a symbol indicating that we are using svr4.h. */ -#define USING_SVR4_H - -/* Use DWARF 2 debugging info by default. */ - -#undef PREFERRED_DEBUGGING_TYPE -#define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG - -#define DWARF2_DEBUGGING_INFO 1 - -/* Cpp, assembler, linker, library, and startfile spec's. */ - -/* This defines which switch letters take arguments. On svr4, most of - the normal cases (defined in gcc.c) apply, and we also have -h* and - -z* options (for the linker). Note however that there is no such - thing as a -T option for svr4. */ - -#define SWITCH_TAKES_ARG(CHAR) \ - ( (CHAR) == 'D' \ - || (CHAR) == 'U' \ - || (CHAR) == 'o' \ - || (CHAR) == 'e' \ - || (CHAR) == 'u' \ - || (CHAR) == 'I' \ - || (CHAR) == 'm' \ - || (CHAR) == 'L' \ - || (CHAR) == 'A' \ - || (CHAR) == 'h' \ - || (CHAR) == 'z') - -/* This defines which multi-letter switches take arguments. On svr4, - there are no such switches except those implemented by GCC itself. */ - -#define WORD_SWITCH_TAKES_ARG(STR) \ - (DEFAULT_WORD_SWITCH_TAKES_ARG (STR) \ - && strcmp (STR, "Tdata") && strcmp (STR, "Ttext") \ - && strcmp (STR, "Tbss")) - -/* Provide an ASM_SPEC appropriate for svr4. Here we try to support as - many of the specialized svr4 assembler options as seems reasonable, - given that there are certain options which we can't (or shouldn't) - support directly due to the fact that they conflict with other options - for other svr4 tools (e.g. ld) or with other options for GCC itself. - For example, we don't support the -o (output file) or -R (remove - input file) options because GCC already handles these things. We - also don't support the -m (run m4) option for the assembler because - that conflicts with the -m (produce load map) option of the svr4 - linker. We do however allow passing arbitrary options to the svr4 - assembler via the -Wa, option. - - Note that gcc doesn't allow a space to follow -Y in a -Ym,* or -Yd,* - option. -*/ - -#undef ASM_SPEC -#ifdef USE_GAS -#define ASM_SPEC \ - "%{v:-V} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*}" -#else -#define ASM_SPEC \ - "-no_0f_fix -no_eflags_chk %{v:-V} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*}" -#endif - -#define AS_NEEDS_DASH_FOR_PIPED_INPUT - -/* Provide a LIB_SPEC appropriate for svr4. Here we tack on the default - standard C library (unless we are building a shared library). */ - -#undef LIB_SPEC -#define LIB_SPEC "%{!shared:%{!symbolic:-lc}}" - -/* Provide a LIBGCC_SPEC appropriate for svr4. We also want to exclude - libgcc when -symbolic. */ - -#undef LIBGCC_SPEC -#define LIBGCC_SPEC "%{!shared:%{!symbolic:-lgcc}}" - -/* Provide an ENDFILE_SPEC appropriate for svr4. Here we tack on our own - magical crtend.o file (see crtstuff.c) which provides part of the - support for getting C++ file-scope static object constructed before - entering `main', followed by the normal svr3/svr4 "finalizer" file, - which is either `gcrtn.o' or `crtn.o'. */ - -#undef ENDFILE_SPEC -#define ENDFILE_SPEC "crtend.o%s %{pg:gcrtn.o}%{!pg:crtn.o%s}" - -/* Provide a LINK_SPEC appropriate for svr4. Here we provide support - for the special GCC options -static, -shared, and -symbolic which - allow us to link things in one of these three modes by applying the - appropriate combinations of options at link-time. We also provide - support here for as many of the other svr4 linker options as seems - reasonable, given that some of them conflict with options for other - svr4 tools (e.g. the assembler). In particular, we do support the - -z*, -V, -b, -t, -Qy, -Qn, and -YP* options here, and the -e*, - -l*, -o*, -r, -s, -u*, and -L* options are directly supported - by gcc.c itself. We don't directly support the -m (generate load - map) option because that conflicts with the -m (run m4) option of - the svr4 assembler. We also don't directly support the svr4 linker's - -I* or -M* options because these conflict with existing GCC options. - We do however allow passing arbitrary options to the svr4 linker - via the -Wl, option. We don't support the svr4 linker's -a option - at all because it is totally useless and because it conflicts with - GCC's own -a option. - - Note that gcc doesn't allow a space to follow -Y in a -YP,* option. - - When the -G link option is used (-shared and -symbolic) a final link is - not being done. */ - -#undef LINK_SPEC -#define LINK_SPEC "%{h*} %{v:-V} \ - %{b} \ - %{static:-dn -Bstatic} \ - %{shared:-G -dy -z text} \ - %{symbolic:-Bsymbolic -G -dy -z text} \ - %{G:-G} \ - %{YP,*} \ - %{!YP,*:%{p:-Y P,/lib/libp:/usr/lib/libp:/lib:/usr/lib} \ - %{!p:-Y P,/lib:/usr/lib}} \ - %{Qy:} %{!Qn:-Qy}" - -/* Gcc automatically adds in one of the files /lib/values-Xc.o - or /lib/values-Xa.o, for each final link step (depending upon the other - gcc options selected, such as -ansi). These files each contain one - (initialized) copy of a special variable called `_lib_version'. Each - one of these files has `_lib_version' initialized to a different (enum) - value. The SVR4 library routines query the value of `_lib_version' - at run to decide how they should behave. Specifically, they decide - (based upon the value of `_lib_version') if they will act in a strictly - ANSI conforming manner or not. -*/ - -#undef STARTFILE_SPEC -#define STARTFILE_SPEC "%{!shared: \ - %{!symbolic: \ - %{pg:gcrt1.o%s}%{!pg:%{p:mcrt1.o%s}%{!p:crt1.o%s}}}}\ - %{pg:gcrti.o%s}%{!pg:crti.o%s} \ - %{ansi:values-Xc.o%s} \ - %{!ansi:values-Xa.o%s} \ - crtbegin.o%s" - -/* Don't use bcopy, which doesn't handle overlaps before DYNIX/ptx 4.6. */ - -#undef HAVE_BCOPY - -/* The numbers used to denote specific machine registers in the System V - Release 4 DWARF debugging information are quite likely to be totally - different from the numbers used in BSD stabs debugging information - for the same kind of target machine. Thus, we undefine the macro - DBX_REGISTER_NUMBER here as an extra inducement to get people to - provide proper machine-specific definitions of DBX_REGISTER_NUMBER - (which is also used to provide DWARF registers numbers in dwarfout.c) - in their tm.h files which include this file. */ - -#undef DBX_REGISTER_NUMBER - -/* Like block addresses, stabs line numbers are relative to the - current function. */ - -#define DBX_LINES_FUNCTION_RELATIVE 1 - -/* Generate a blank trailing N_SO to mark the end of the .o file, since - we can't depend upon the linker to mark .o file boundaries with - embedded stabs. */ - -#define DBX_OUTPUT_NULL_N_SO_AT_MAIN_SOURCE_FILE_END - -/* Define the actual types of some ANSI-mandated types. (These - definitions should work for most SVR4 systems). */ - -#undef SIZE_TYPE -#define SIZE_TYPE "unsigned int" - -#undef PTRDIFF_TYPE -#define PTRDIFF_TYPE "int" - -#undef WCHAR_TYPE -#define WCHAR_TYPE "long int" - -#undef WCHAR_TYPE_SIZE -#define WCHAR_TYPE_SIZE BITS_PER_WORD - -/* This says how to output assembler code to declare an uninitialized - external linkage data item. There's a bug in the DYNIX/ptx linker - (PR 254649) when the alignment for such an object is specified, so - ignore the ALIGN parameter. */ - -#undef ASM_OUTPUT_ALIGNED_COMMON -#define ASM_OUTPUT_ALIGNED_COMMON(FILE, NAME, SIZE, ALIGN) \ -do { \ - fprintf ((FILE), "%s", COMMON_ASM_OP); \ - assemble_name ((FILE), (NAME)); \ - fprintf ((FILE), ",%lu\n", (unsigned long)(SIZE)); \ -} while (0) - diff --git a/gcc/config/rs6000/beos.h b/gcc/config/rs6000/beos.h deleted file mode 100644 index 2e3af47..0000000 --- a/gcc/config/rs6000/beos.h +++ /dev/null @@ -1,108 +0,0 @@ -/* Definitions of target machine for GNU compiler, for BeOS. - Copyright (C) 1997, 2000, 2001, 2002, 2003, 2005, 2007 - Free Software Foundation, Inc. - Contributed by Fred Fish (fnf@cygnus.com), based on aix41.h - from David Edelsohn (edelsohn@npac.syr.edu). - - This file is part of GCC. - - GCC is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published - by the Free Software Foundation; either version 3, or (at your - option) any later version. - - GCC is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public - License for more details. - - You should have received a copy of the GNU General Public License - along with GCC; see the file COPYING3. If not see - <http://www.gnu.org/licenses/>. */ - -#undef TARGET_VERSION -#define TARGET_VERSION fprintf (stderr, " (BeOS/PowerPC)"); - -#undef ASM_SPEC -#define ASM_SPEC "-u %(asm_cpu)" - -#undef TARGET_OS_CPP_BUILTINS -/* __POWERPC__ must be defined for some header files. */ -#define TARGET_OS_CPP_BUILTINS() \ - do \ - { \ - builtin_define ("__BEOS__"); \ - builtin_define ("__POWERPC__"); \ - builtin_assert ("system=beos"); \ - builtin_assert ("cpu=powerpc"); \ - builtin_assert ("machine=powerpc"); \ - } \ - while (0) - -#undef CPP_SPEC -#define CPP_SPEC "%{posix: -D_POSIX_SOURCE}" - -/* This is the easiest way to disable use of gcc's builtin alloca, - which in the current BeOS release (DR9) is a problem because of the - relatively low default stack size of 256K with no way to expand it. - So anything we compile for the BeOS target should not use the - builtin alloca. This also has the unwanted side effect of - disabling all builtin functions though. */ - -#undef CC1_SPEC -#define CC1_SPEC "%{!fbuiltin: -fno-builtin}" -#undef CC1PLUS_SPEC -#define CC1PLUS_SPEC "%{!fbuiltin: -fno-builtin}" - -#undef ASM_DEFAULT_SPEC -#define ASM_DEFAULT_SPEC "-mppc" - -#undef TARGET_DEFAULT -#define TARGET_DEFAULT (MASK_POWERPC | MASK_NEW_MNEMONICS) - -#undef PROCESSOR_DEFAULT -#define PROCESSOR_DEFAULT PROCESSOR_PPC603 - -/* Define this macro as a C expression for the initializer of an - array of string to tell the driver program which options are - defaults for this target and thus do not need to be handled - specially when using `MULTILIB_OPTIONS'. - - Do not define this macro if `MULTILIB_OPTIONS' is not defined in - the target makefile fragment or if none of the options listed in - `MULTILIB_OPTIONS' are set by default. *Note Target Fragment::. */ - -#undef MULTILIB_DEFAULTS -#define MULTILIB_DEFAULTS { "mcpu=powerpc" } - -/* These empty definitions get rid of the attempt to link in crt0.o - and any libraries like libc.a. - On BeOS the ld executable is actually a linker front end that first runs - the GNU linker with the -r option to generate a relocatable XCOFF output - file, and then runs Metrowork's linker (mwld) to generate a fully linked - executable. */ - -#undef LIB_SPEC -#define LIB_SPEC "" - -#undef LINK_SPEC -#define LINK_SPEC "" - -#undef STARTFILE_SPEC -#define STARTFILE_SPEC "" - -/* Text to write out after a CALL that may be replaced by glue code by - the loader. */ - -#undef RS6000_CALL_GLUE -#define RS6000_CALL_GLUE "cror 15,15,15" - -/* Struct alignments are done on 4 byte boundaries for all types. */ -#undef BIGGEST_FIELD_ALIGNMENT -#define BIGGEST_FIELD_ALIGNMENT 32 - -/* STANDARD_INCLUDE_DIR is the equivalent of "/usr/include" on UNIX. */ -#define STANDARD_INCLUDE_DIR "/boot/develop/headers/posix" - -/* SYSTEM_INCLUDE_DIR is the location for system specific, non-POSIX headers. */ -#define SYSTEM_INCLUDE_DIR "/boot/develop/headers/be" diff --git a/gcc/config/rs6000/kaos-ppc.h b/gcc/config/rs6000/kaos-ppc.h deleted file mode 100644 index 3c1e844..0000000 --- a/gcc/config/rs6000/kaos-ppc.h +++ /dev/null @@ -1,23 +0,0 @@ -/* Definitions of target machine for GNU compiler. - kaOS on PowerPC architecture version. - Copyright (C) 2003, 2007 Free Software Foundation, Inc. - -This file is part of GCC. - -GCC is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 3, or (at your option) -any later version. - -GCC is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GCC; see the file COPYING3. If not see -<http://www.gnu.org/licenses/>. */ - -#undef TARGET_VERSION -#define TARGET_VERSION fputs (" (PowerPC/kaOS[ELF])", stderr); - diff --git a/gcc/config/rs6000/sysv4.h b/gcc/config/rs6000/sysv4.h index 12abf4d..ef7f969 100644 --- a/gcc/config/rs6000/sysv4.h +++ b/gcc/config/rs6000/sysv4.h @@ -655,7 +655,6 @@ extern int fixuplabelno; myellowknife : %(link_start_yellowknife) ; \ mmvme : %(link_start_mvme) ; \ msim : %(link_start_sim) ; \ - mwindiss : %(link_start_windiss) ; \ mcall-freebsd: %(link_start_freebsd) ; \ mcall-linux : %(link_start_linux) ; \ mcall-gnu : %(link_start_gnu) ; \ @@ -713,7 +712,6 @@ extern int fixuplabelno; myellowknife : %(link_os_yellowknife) ; \ mmvme : %(link_os_mvme) ; \ msim : %(link_os_sim) ; \ - mwindiss : %(link_os_windiss) ; \ mcall-freebsd: %(link_os_freebsd) ; \ mcall-linux : %(link_os_linux) ; \ mcall-gnu : %(link_os_gnu) ; \ @@ -730,7 +728,6 @@ extern int fixuplabelno; myellowknife : %(cpp_os_yellowknife) ; \ mmvme : %(cpp_os_mvme) ; \ msim : %(cpp_os_sim) ; \ - mwindiss : %(cpp_os_windiss) ; \ mcall-freebsd: %(cpp_os_freebsd) ; \ mcall-linux : %(cpp_os_linux) ; \ mcall-gnu : %(cpp_os_gnu) ; \ @@ -747,7 +744,6 @@ extern int fixuplabelno; myellowknife : %(startfile_yellowknife) ; \ mmvme : %(startfile_mvme) ; \ msim : %(startfile_sim) ; \ - mwindiss : %(startfile_windiss) ; \ mcall-freebsd: %(startfile_freebsd) ; \ mcall-linux : %(startfile_linux) ; \ mcall-gnu : %(startfile_gnu) ; \ @@ -764,7 +760,6 @@ extern int fixuplabelno; myellowknife : %(lib_yellowknife) ; \ mmvme : %(lib_mvme) ; \ msim : %(lib_sim) ; \ - mwindiss : %(lib_windiss) ; \ mcall-freebsd: %(lib_freebsd) ; \ mcall-linux : %(lib_linux) ; \ mcall-gnu : %(lib_gnu) ; \ @@ -781,7 +776,6 @@ extern int fixuplabelno; myellowknife : %(endfile_yellowknife) ; \ mmvme : %(endfile_mvme) ; \ msim : %(endfile_sim) ; \ - mwindiss : %(endfile_windiss) ; \ mcall-freebsd: %(endfile_freebsd) ; \ mcall-linux : %(endfile_linux) ; \ mcall-gnu : %(endfile_gnu) ; \ @@ -992,25 +986,6 @@ ncrtn.o%s" #define CPP_OS_OPENBSD_SPEC "%{posix:-D_POSIX_SOURCE} %{pthread:-D_POSIX_THREADS}" #endif -/* WindISS support. */ - -#define LIB_WINDISS_SPEC "--start-group -li -lcfp -lwindiss -lram -limpl -limpfp --end-group" - -#define CPP_OS_WINDISS_SPEC "\ --D__rtasim \ --D__EABI__ \ --D__ppc \ -%{!msoft-float: -D__hardfp} \ -" - -#define STARTFILE_WINDISS_SPEC "crt0.o%s crtbegin.o%s" - -#define ENDFILE_WINDISS_SPEC "crtend.o%s" - -#define LINK_START_WINDISS_SPEC "" - -#define LINK_OS_WINDISS_SPEC "" - /* Define any extra SPECS that the compiler needs to generate. */ /* Override rs6000.h definition. */ #undef SUBTARGET_EXTRA_SPECS @@ -1025,7 +1000,6 @@ ncrtn.o%s" { "lib_linux", LIB_LINUX_SPEC }, \ { "lib_netbsd", LIB_NETBSD_SPEC }, \ { "lib_openbsd", LIB_OPENBSD_SPEC }, \ - { "lib_windiss", LIB_WINDISS_SPEC }, \ { "lib_default", LIB_DEFAULT_SPEC }, \ { "startfile_ads", STARTFILE_ADS_SPEC }, \ { "startfile_yellowknife", STARTFILE_YELLOWKNIFE_SPEC }, \ @@ -1036,7 +1010,6 @@ ncrtn.o%s" { "startfile_linux", STARTFILE_LINUX_SPEC }, \ { "startfile_netbsd", STARTFILE_NETBSD_SPEC }, \ { "startfile_openbsd", STARTFILE_OPENBSD_SPEC }, \ - { "startfile_windiss", STARTFILE_WINDISS_SPEC }, \ { "startfile_default", STARTFILE_DEFAULT_SPEC }, \ { "endfile_ads", ENDFILE_ADS_SPEC }, \ { "endfile_yellowknife", ENDFILE_YELLOWKNIFE_SPEC }, \ @@ -1047,7 +1020,6 @@ ncrtn.o%s" { "endfile_linux", ENDFILE_LINUX_SPEC }, \ { "endfile_netbsd", ENDFILE_NETBSD_SPEC }, \ { "endfile_openbsd", ENDFILE_OPENBSD_SPEC }, \ - { "endfile_windiss", ENDFILE_WINDISS_SPEC }, \ { "endfile_default", ENDFILE_DEFAULT_SPEC }, \ { "link_path", LINK_PATH_SPEC }, \ { "link_shlib", LINK_SHLIB_SPEC }, \ @@ -1062,7 +1034,6 @@ ncrtn.o%s" { "link_start_linux", LINK_START_LINUX_SPEC }, \ { "link_start_netbsd", LINK_START_NETBSD_SPEC }, \ { "link_start_openbsd", LINK_START_OPENBSD_SPEC }, \ - { "link_start_windiss", LINK_START_WINDISS_SPEC }, \ { "link_start_default", LINK_START_DEFAULT_SPEC }, \ { "link_os", LINK_OS_SPEC }, \ { "link_os_ads", LINK_OS_ADS_SPEC }, \ @@ -1074,7 +1045,6 @@ ncrtn.o%s" { "link_os_gnu", LINK_OS_GNU_SPEC }, \ { "link_os_netbsd", LINK_OS_NETBSD_SPEC }, \ { "link_os_openbsd", LINK_OS_OPENBSD_SPEC }, \ - { "link_os_windiss", LINK_OS_WINDISS_SPEC }, \ { "link_os_default", LINK_OS_DEFAULT_SPEC }, \ { "cc1_endian_big", CC1_ENDIAN_BIG_SPEC }, \ { "cc1_endian_little", CC1_ENDIAN_LITTLE_SPEC }, \ @@ -1089,7 +1059,6 @@ ncrtn.o%s" { "cpp_os_linux", CPP_OS_LINUX_SPEC }, \ { "cpp_os_netbsd", CPP_OS_NETBSD_SPEC }, \ { "cpp_os_openbsd", CPP_OS_OPENBSD_SPEC }, \ - { "cpp_os_windiss", CPP_OS_WINDISS_SPEC }, \ { "cpp_os_default", CPP_OS_DEFAULT_SPEC }, \ { "fbsd_dynamic_linker", FBSD_DYNAMIC_LINKER }, \ SUBSUBTARGET_EXTRA_SPECS diff --git a/gcc/config/rs6000/sysv4.opt b/gcc/config/rs6000/sysv4.opt index ba0bc65..681bd10 100644 --- a/gcc/config/rs6000/sysv4.opt +++ b/gcc/config/rs6000/sysv4.opt @@ -119,10 +119,6 @@ memb Target RejectNegative Set the PPC_EMB bit in the ELF flags header -mwindiss -Target RejectNegative -Use the WindISS simulator - mshlib Target RejectNegative no description yet diff --git a/gcc/config/rs6000/t-beos b/gcc/config/rs6000/t-beos deleted file mode 100644 index ad9260f..0000000 --- a/gcc/config/rs6000/t-beos +++ /dev/null @@ -1,30 +0,0 @@ -# Build the libraries for both hard & soft floating point and ppc/common. - -MULTILIB_OPTIONS = msoft-float mcpu=common -MULTILIB_DIRNAMES = soft-float common - -# This is probably the correct define, to override the Makefile -# default, but using it causes more problems than it solves. -# -# Using it will cause fixincludes to try and fix some of the -# mwcc header files, which it seems to do a poor job of. On -# the other hand, not using it will only cause the gcc version -# of limits.h to lack the header and trailer parts that are -# tacked on to it when there is a limits.h in the system header -# dir. -# -# For now it is probably better to change the rule for -# LIMITS_H_TEST to explicitly look for the BeOS limits.h. -# If the gcc limits.h is not set up to #include_next the -# BeOS limits.h, then some things will go undefined, like -# PATH_MAX. - -#SYSTEM_HEADER_DIR=/boot/develop/headers/posix -# Test to see whether <limits.h> exists in the system header files. -LIMITS_H_TEST = [ -f /boot/develop/headers/posix/limits.h ] - -# Aix 3.2.x needs milli.exp for -mcpu=common -EXTRA_PARTS = milli.exp -$(T)milli.exp: $(srcdir)/config/rs6000/milli.exp - rm -f $(T)milli.exp - cp $(srcdir)/config/rs6000/milli.exp $(T)milli.exp diff --git a/gcc/config/rs6000/windiss.h b/gcc/config/rs6000/windiss.h deleted file mode 100644 index 3f2829b..0000000 --- a/gcc/config/rs6000/windiss.h +++ /dev/null @@ -1,46 +0,0 @@ -/* Support for GCC on PowerPC using WindISS simulator. - Copyright (C) 2002, 2003, 2007 Free Software Foundation, Inc. - Contributed by CodeSourcery, LLC. - - This file is part of GCC. - - GCC is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published - by the Free Software Foundation; either version 3, or (at your - option) any later version. - - GCC is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public - License for more details. - - You should have received a copy of the GNU General Public License - along with GCC; see the file COPYING3. If not see - <http://www.gnu.org/licenses/>. */ - -#undef TARGET_VERSION -#define TARGET_VERSION fprintf (stderr, " (PowerPC WindISS)"); - -#undef LIB_DEFAULT_SPEC -#define LIB_DEFAULT_SPEC "%(lib_windiss)" - -#undef STARTFILE_DEFAULT_SPEC -#define STARTFILE_DEFAULT_SPEC "%(startfile_windiss)" - -#undef ENDFILE_DEFAULT_SPEC -#define ENDFILE_DEFAULT_SPEC "%(endfile_windiss)" - -#undef LINK_START_DEFAULT_SPEC -#define LINK_START_DEFAULT_SPEC "%(link_start_windiss)" - -#undef LINK_OS_DEFAULT_SPEC -#define LINK_OS_DEFAULT_SPEC "%(link_os_windiss)" - -#undef CRTSAVRES_DEFAULT_SPEC -#define CRTSAVRES_DEFAULT_SPEC "" - -#undef WCHAR_TYPE -#define WCHAR_TYPE "short unsigned int" - -#undef WCHAR_TYPE_SIZE -#define WCHAR_TYPE_SIZE 16 diff --git a/gcc/config/sh/kaos-sh.h b/gcc/config/sh/kaos-sh.h deleted file mode 100644 index 8400e0d..0000000 --- a/gcc/config/sh/kaos-sh.h +++ /dev/null @@ -1,23 +0,0 @@ -/* Definitions of target machine for GNU compiler. - kaOS on sh architecture version. - Copyright (C) 2003, 2007 Free Software Foundation, Inc. - -This file is part of GCC. - -GCC is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 3, or (at your option) -any later version. - -GCC is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GCC; see the file COPYING3. If not see -<http://www.gnu.org/licenses/>. */ - -#undef TARGET_VERSION -#define TARGET_VERSION fputs (" (sh/kaOS[ELF])", stderr); - diff --git a/gcc/config/sol2-6.h b/gcc/config/sol2-6.h deleted file mode 100644 index 82e97ea..0000000 --- a/gcc/config/sol2-6.h +++ /dev/null @@ -1,26 +0,0 @@ -/* Operating system specific defines to be used when targeting GCC for any - Solaris 2 system up to Solaris 2.6. - Copyright 2004, 2007 Free Software Foundation, Inc. - -This file is part of GCC. - -GCC is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 3, or (at your option) -any later version. - -GCC is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GCC; see the file COPYING3. If not see -<http://www.gnu.org/licenses/>. */ - -#undef CPP_SUBTARGET_SPEC -#define CPP_SUBTARGET_SPEC "\ -%{pthreads|pthread:-D_REENTRANT -D_PTHREADS95} \ -%{!pthreads:%{!pthread:%{threads:-D_REENTRANT -D_SOLARIS_THREADS}}} \ -%{compat-bsd:-iwithprefixbefore ucbinclude -I/usr/ucbinclude} \ -" diff --git a/gcc/config/sparc/sol26-sld.h b/gcc/config/sparc/sol26-sld.h deleted file mode 100644 index 2e7fed9..0000000 --- a/gcc/config/sparc/sol26-sld.h +++ /dev/null @@ -1,5 +0,0 @@ -/* Up through Solaris 2.6, the system linker does not work with DWARF2 - since it does not have working support for relocations to unaligned - data. */ - -#undef DWARF2_DEBUGGING_INFO diff --git a/gcc/config/sparc/sysv4-only.h b/gcc/config/sparc/sysv4-only.h deleted file mode 100644 index 5795162..0000000 --- a/gcc/config/sparc/sysv4-only.h +++ /dev/null @@ -1,33 +0,0 @@ -/* Target macros for GCC for SPARC running System V.4 - Copyright (C) 2003, 2005, 2007 - Free Software Foundation, Inc. - -This file is part of GCC. - -GCC is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 3, or (at your option) -any later version. - -GCC is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GCC; see the file COPYING3. If not see -<http://www.gnu.org/licenses/>. */ - -/* Provide a set of pre-definitions and pre-assertions appropriate for - the SPARC running svr4. __svr4__ is our extension. */ - -/* Target OS builtins. */ \ -#define TARGET_OS_CPP_BUILTINS() \ - do \ - { \ - builtin_define_std ("unix"); \ - builtin_define ("__svr4__"); \ - builtin_assert ("system=unix"); \ - builtin_assert ("system=svr4"); \ - } \ - while (0) diff --git a/gcc/config/vax/bsd.h b/gcc/config/vax/bsd.h deleted file mode 100644 index a07bf5f..0000000 --- a/gcc/config/vax/bsd.h +++ /dev/null @@ -1,31 +0,0 @@ -/* Definitions of target machine for GNU compiler. BSD version. - Copyright (C) 2002, 2007 Free Software Foundation, Inc. - -This file is part of GCC. - -GCC is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 3, or (at your option) -any later version. - -GCC is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GCC; see the file COPYING3. If not see -<http://www.gnu.org/licenses/>. */ - - -#define TARGET_OS_CPP_BUILTINS() \ - do \ - { \ - builtin_define_std ("unix"); \ - builtin_assert ("system=bsd"); \ - \ - builtin_define_std ("vax"); \ - if (TARGET_G_FLOAT) \ - builtin_define_std ("GFLOAT"); \ - } \ - while (0) diff --git a/gcc/config/vax/t-memfuncs b/gcc/config/vax/t-memfuncs deleted file mode 100644 index 6a8da61..0000000 --- a/gcc/config/vax/t-memfuncs +++ /dev/null @@ -1,3 +0,0 @@ -LIB2FUNCS_EXTRA = \ - $(srcdir)/config/memcmp.c $(srcdir)/config/memcpy.c \ - $(srcdir)/config/memmove.c $(srcdir)/config/memset.c diff --git a/gcc/config/vax/ultrix.h b/gcc/config/vax/ultrix.h deleted file mode 100644 index bf6b44b..0000000 --- a/gcc/config/vax/ultrix.h +++ /dev/null @@ -1,41 +0,0 @@ -/* Output variables, constants and external declarations, for GNU compiler. - Copyright (C) 1999, 2002, 2007 Free Software Foundation, Inc. - -This file is part of GCC. - -GCC is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 3, or (at your option) -any later version. - -GCC is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GCC; see the file COPYING3. If not see -<http://www.gnu.org/licenses/>. */ - - -#define TARGET_OS_CPP_BUILTINS() \ - do \ - { \ - builtin_define_std ("unix"); \ - builtin_define_std ("ultrix"); \ - builtin_define_std ("bsd4_2"); \ - builtin_assert ("system=unix"); \ - builtin_assert ("system=bsd"); \ - \ - builtin_define_std ("vax"); \ - if (TARGET_G_FLOAT) \ - builtin_define_std ("GFLOAT"); \ - } \ - while (0) - -/* These are as defined in /usr/include/sys/stdtypes.h. - These values are for ultrix 4.2 on the VAX. */ -#define SIZE_TYPE "unsigned int" -#define PTRDIFF_TYPE "int" -#define WCHAR_TYPE "unsigned int" -#define WCHAR_TYPE_SIZE 32 diff --git a/gcc/config/vax/vaxv.h b/gcc/config/vax/vaxv.h deleted file mode 100644 index 97a629d..0000000 --- a/gcc/config/vax/vaxv.h +++ /dev/null @@ -1,65 +0,0 @@ -/* Definitions of target machine for GNU compiler. VAX sysV version. - Copyright (C) 1988, 1993, 1996, 2000, 2002, 2007 Free Software Foundation, Inc. - -This file is part of GCC. - -GCC is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 3, or (at your option) -any later version. - -GCC is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GCC; see the file COPYING3. If not see -<http://www.gnu.org/licenses/>. */ - -#define TARGET_OS_CPP_BUILTINS() \ - do \ - { \ - builtin_define_std ("unix"); \ - builtin_assert ("system=svr3"); \ - \ - builtin_define_std ("vax"); \ - if (TARGET_G_FLOAT) \ - builtin_define_std ("GFLOAT"); \ - } \ - while (0) - -/* Output #ident as a .ident. */ - -#define ASM_OUTPUT_IDENT(FILE, NAME) fprintf (FILE, "\t.ident \"%s\"\n", NAME); - -#undef DBX_DEBUGGING_INFO -#define SDB_DEBUGGING_INFO 1 - -#undef LIB_SPEC - -/* The .file command should always begin the output. */ -#define TARGET_ASM_FILE_START_FILE_DIRECTIVE true - -#undef ASM_OUTPUT_ALIGN -#define ASM_OUTPUT_ALIGN(FILE,LOG) \ - fprintf(FILE, "\t.align %d\n", 1 << (LOG)) - -#undef ASM_OUTPUT_LOCAL -#define ASM_OUTPUT_LOCAL(FILE,NAME,SIZE,ROUNDED) \ -( switch_to_section (data_section), \ - assemble_name ((FILE), (NAME)), \ - fprintf ((FILE), ":\n\t.space %u\n", (int)(ROUNDED))) - -#define ASM_OUTPUT_ASCII(FILE,PTR,LEN) \ -do { \ - const unsigned char *s = (const unsigned char *)(PTR);\ - size_t i, limit = (LEN); \ - for (i = 0; i < limit; s++, i++) \ - { \ - if ((i % 8) == 0) \ - fputs ("\n\t.byte\t", (FILE)); \ - fprintf ((FILE), "%s0x%x", (i%8?",":""), (unsigned)*s); \ - } \ - fputs ("\n", (FILE)); \ -} while (0) diff --git a/gcc/config/windiss.h b/gcc/config/windiss.h deleted file mode 100644 index 75ad468..0000000 --- a/gcc/config/windiss.h +++ /dev/null @@ -1,37 +0,0 @@ -/* Support for GCC using WindISS simulator. - Copyright (C) 2003, 2007 Free Software Foundation, Inc. - Contributed by CodeSourcery, LLC. - -This file is part of GCC. - -GCC is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 3, or (at your option) -any later version. - -GCC is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GCC; see the file COPYING3. If not see -<http://www.gnu.org/licenses/>. */ - - -/* windiss uses wchar_t == unsigned short (UCS2) on all architectures. */ -#undef WCHAR_TYPE -#define WCHAR_TYPE "short unsigned int" -#undef WCHAR_TYPE_SIZE -#define WCHAR_TYPE_SIZE 16 - -/* windiss has wint_t == int */ -#undef WINT_TYPE -#define WINT_TYPE "int" - -/* No profiling. */ -#undef FUNCTION_PROFILER -#define FUNCTION_PROFILER(FILE, LABELNO) \ -{ \ - sorry ("profiler support for WindISS"); \ -} diff --git a/gcc/configure b/gcc/configure index e288809..342d8c4 100755 --- a/gcc/configure +++ b/gcc/configure @@ -22696,7 +22696,7 @@ esac # version to the per-target configury. case "$target" in i?86*-*-* | mips*-*-* | alpha*-*-* | powerpc*-*-* | sparc*-*-* | m68*-*-* \ - | x86_64*-*-* | hppa*-*-* | arm*-*-* | strongarm*-*-* | xscale*-*-* \ + | x86_64*-*-* | hppa*-*-* | arm*-*-* \ | xstormy16*-*-* | cris-*-* | xtensa-*-* | bfin-*-* | score*-*-* | spu-*-*) insn="nop" ;; diff --git a/gcc/configure.ac b/gcc/configure.ac index 6bbe29d..26c8164 100644 --- a/gcc/configure.ac +++ b/gcc/configure.ac @@ -3056,7 +3056,7 @@ esac # version to the per-target configury. case "$target" in i?86*-*-* | mips*-*-* | alpha*-*-* | powerpc*-*-* | sparc*-*-* | m68*-*-* \ - | x86_64*-*-* | hppa*-*-* | arm*-*-* | strongarm*-*-* | xscale*-*-* \ + | x86_64*-*-* | hppa*-*-* | arm*-*-* \ | xstormy16*-*-* | cris-*-* | xtensa-*-* | bfin-*-* | score*-*-* | spu-*-*) insn="nop" ;; diff --git a/gcc/doc/cpp.texi b/gcc/doc/cpp.texi index 9e2f19a..2ef8b54 100644 --- a/gcc/doc/cpp.texi +++ b/gcc/doc/cpp.texi @@ -3918,8 +3918,8 @@ programs. When preprocessing assembler, however, dollars are not identifier characters by default. Currently the targets that by default do not permit @samp{$} are AVR, -IP2K, MMIX, MIPS Irix 3, ARM aout, and PowerPC targets for the AIX and -BeOS operating systems. +IP2K, MMIX, MIPS Irix 3, ARM aout, and PowerPC targets for the AIX +operating system. You can override the default with @option{-fdollars-in-identifiers} or @option{fno-dollars-in-identifiers}. @xref{fdollars-in-identifiers}. diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index 86d1574..516ecc2 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -2362,7 +2362,7 @@ This attribute is ignored for R8C target. @item interrupt @cindex interrupt handler functions -Use this attribute on the ARM, AVR, CRX, M32C, M32R/D, m68k, MS1, +Use this attribute on the ARM, AVR, CRX, M32C, M32R/D, m68k, and Xstormy16 ports to indicate that the specified function is an interrupt handler. The compiler will generate function entry and exit sequences suitable for use in an interrupt handler when this attribute diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi index 3d098a4..127f065 100644 --- a/gcc/doc/install.texi +++ b/gcc/doc/install.texi @@ -835,11 +835,6 @@ whether you use the GNU assembler. On any other system, @itemize @bullet @item @samp{hppa1.0-@var{any}-@var{any}} @item @samp{hppa1.1-@var{any}-@var{any}} -@item @samp{i386-@var{any}-sysv} -@item @samp{m68k-bull-sysv} -@item @samp{m68k-hp-hpux} -@item @samp{m68000-hp-hpux} -@item @samp{m68000-att-sysv} @item @samp{sparc-sun-solaris2.@var{any}} @item @samp{sparc64-@var{any}-solaris2.@var{any}} @end itemize @@ -2480,16 +2475,12 @@ information are. @item @uref{#alpha-dec-osf,,alpha*-dec-osf*} @item -@uref{#alphaev5-cray-unicosmk,,alphaev5-cray-unicosmk*} -@item @uref{#arc-x-elf,,arc-*-elf} @item @uref{#arm-x-elf,,arm-*-elf} @uref{#arm-x-coff,,arm-*-coff} @uref{#arm-x-aout,,arm-*-aout} @item -@uref{#xscale-x-x,,xscale-*-*} -@item @uref{#avr,,avr} @item @uref{#bfin,,Blackfin} @@ -2508,16 +2499,10 @@ information are. @item @uref{#x-x-linux-gnu,,*-*-linux-gnu} @item -@uref{#ix86-x-linuxaout,,i?86-*-linux*aout} -@item @uref{#ix86-x-linux,,i?86-*-linux*} @item -@uref{#ix86-x-sco32v5,,i?86-*-sco3.2v5*} -@item @uref{#ix86-x-solaris210,,i?86-*-solaris2.10} @item -@uref{#ix86-x-udk,,i?86-*-udk} -@item @uref{#ia64-x-linux,,ia64-*-linux} @item @uref{#ia64-x-hpux,,ia64-*-hpux*} @@ -2536,8 +2521,6 @@ information are. @item @uref{#m68k-x-x,,m68k-*-*} @item -@uref{#m68k-hp-hpux,,m68k-hp-hpux} -@item @uref{#m68k-uclinux,,m68k-uclinux} @item @uref{#mips-x-x,,mips-*-*} @@ -2546,11 +2529,11 @@ information are. @item @uref{#mips-sgi-irix6,,mips-sgi-irix6} @item -@uref{#powerpc-x-x,,powerpc*-*-*, powerpc-*-sysv4} +@uref{#powerpc-x-x,,powerpc*-*-*} @item @uref{#powerpc-x-darwin,,powerpc-*-darwin*} @item -@uref{#powerpc-x-elf,,powerpc-*-elf, powerpc-*-sysv4} +@uref{#powerpc-x-elf,,powerpc-*-elf} @item @uref{#powerpc-x-linux-gnu,,powerpc*-*-linux-gnu*} @item @@ -2560,7 +2543,7 @@ information are. @item @uref{#powerpc-x-eabi,,powerpc-*-eabi} @item -@uref{#powerpcle-x-elf,,powerpcle-*-elf, powerpcle-*-sysv4} +@uref{#powerpcle-x-elf,,powerpcle-*-elf} @item @uref{#powerpcle-x-eabisim,,powerpcle-*-eabisim} @item @@ -2584,10 +2567,6 @@ information are. @item @uref{#sparcv9-x-solaris2,,sparcv9-*-solaris2*} @item -@uref{#x-x-sysv,,*-*-sysv*} -@item -@uref{#vax-dec-ultrix,,vax-dec-ultrix} -@item @uref{#x-x-vxworks,,*-*-vxworks*} @item @uref{#x86-64-x-x,,x86_64-*-*, amd64-*-*} @@ -2710,32 +2689,6 @@ provide a fix shortly. @html <hr /> @end html -@heading @anchor{alphaev5-cray-unicosmk}alphaev5-cray-unicosmk* -Cray T3E systems running Unicos/Mk. - -This port is incomplete and has many known bugs. We hope to improve the -support for this target soon. Currently, only the C front end is supported, -and it is not possible to build parallel applications. Cray modules are not -supported; in particular, Craylibs are assumed to be in -@file{/opt/ctl/craylibs/craylibs}. - -On this platform, you need to tell GCC where to find the assembler and -the linker. The simplest way to do so is by providing @option{--with-as} -and @option{--with-ld} to @file{configure}, e.g.@: - -@smallexample - configure --with-as=/opt/ctl/bin/cam --with-ld=/opt/ctl/bin/cld \ - --enable-languages=c -@end smallexample - -The comparison test at the end of the bootstrapping process fails on Unicos/Mk -because the assembler inserts timestamps into object files. You should -be able to work around this by doing @samp{make all} after getting this -failure. - -@html -<hr /> -@end html @heading @anchor{arc-x-elf}arc-*-elf Argonaut ARC processor. This configuration is intended for embedded systems. @@ -2744,11 +2697,10 @@ This configuration is intended for embedded systems. <hr /> @end html @heading @anchor{arm-x-elf}arm-*-elf -@heading @anchor{xscale-x-x}xscale-*-* ARM-family processors. Subtargets that use the ELF object format require GNU binutils 2.13 or newer. Such subtargets include: -@code{arm-*-freebsd}, @code{arm-*-netbsdelf}, @code{arm-*-*linux}, -@code{arm-*-rtems} and @code{arm-*-kaos}. +@code{arm-*-freebsd}, @code{arm-*-netbsdelf}, @code{arm-*-*linux} +and @code{arm-*-rtems}. @html <hr /> @@ -2840,9 +2792,6 @@ for a list of CRIS-specific options. There are a few different CRIS targets: @table @code -@item cris-axis-aout -Old target. Includes a multilib for the @samp{elinux} a.out-based -target. No multilibs for newer architecture variants. @item cris-axis-elf Mainly for monolithic embedded systems. Includes a multilib for the @samp{v10} core used in @samp{ETRAX 100 LX}. @@ -2851,7 +2800,7 @@ A GNU/Linux port for the CRIS architecture, currently targeting @samp{ETRAX 100 LX} by default. @end table -For @code{cris-axis-aout} and @code{cris-axis-elf} you need binutils 2.11 +For @code{cris-axis-elf} you need binutils 2.11 or newer. For @code{cris-axis-linux-gnu} you need binutils 2.12 or newer. Pre-packaged tools can be obtained from @@ -3192,13 +3141,6 @@ libstdc++-v3 documentation. @html <hr /> @end html -@heading @anchor{ix86-x-linuxaout}i?86-*-linux*aout -Use this configuration to generate @file{a.out} binaries on Linux-based -GNU systems. This configuration is being superseded. - -@html -<hr /> -@end html @heading @anchor{ix86-x-linux}i?86-*-linux* As of GCC 3.3, binutils 2.13.1 or later is required for this platform. @@ -3211,50 +3153,6 @@ found on @uref{http://www.bitwizard.nl/sig11/,,www.bitwizard.nl}. @html <hr /> @end html -@heading @anchor{ix86-x-sco32v5}i?86-*-sco3.2v5* -Use this for the SCO OpenServer Release 5 family of operating systems. - -Unlike earlier versions of GCC, the ability to generate COFF with this -target is no longer provided. - -Earlier versions of GCC emitted DWARF 1 when generating ELF to allow -the system debugger to be used. That support was too burdensome to -maintain. GCC now emits only DWARF 2 for this target. This means you -may use either the UDK debugger or GDB to debug programs built by this -version of GCC@. - -GCC is now only supported on releases 5.0.4 and later, and requires that -you install Support Level Supplement OSS646B or later, and Support Level -Supplement OSS631C or later. If you are using release 5.0.7 of -OpenServer, you must have at least the first maintenance pack installed -(this includes the relevant portions of OSS646). OSS646, also known as -the ``Execution Environment Update'', provides updated link editors and -assemblers, as well as updated standard C and math libraries. The C -startup modules are also updated to support the System V gABI draft, and -GCC relies on that behavior. OSS631 provides a collection of commonly -used open source libraries, some of which GCC depends on (such as GNU -gettext and zlib). SCO OpenServer Release 5.0.7 has all of this built -in by default, but OSS631C and later also apply to that release. Please -visit -@uref{ftp://ftp.sco.com/pub/openserver5,,ftp://ftp.sco.com/pub/openserver5} -for the latest versions of these (and other potentially useful) -supplements. - -Although there is support for using the native assembler, it is -recommended that you configure GCC to use the GNU assembler. You do -this by using the flags -@uref{./configure.html#with-gnu-as,,@option{--with-gnu-as}}. You should -use a modern version of GNU binutils. Version 2.13.2.1 was used for all -testing. In general, only the @option{--with-gnu-as} option is tested. -A modern bintuils (as well as a plethora of other development related -GNU utilities) can be found in Support Level Supplement OSS658A, the -``GNU Development Tools'' package. See the SCO web and ftp sites for details. -That package also contains the currently ``officially supported'' version of -GCC, version 2.95.3. It is useful for bootstrapping this version. - -@html -<hr /> -@end html @heading @anchor{ix86-x-solaris210}i?86-*-solaris2.10 Use this for Solaris 10 or later on x86 and x86-64 systems. This configuration is supported by GCC 4.0 and later versions only. @@ -3267,42 +3165,6 @@ It is recommended that you configure GCC to use the GNU assembler in @html <hr /> @end html -@heading @anchor{ix86-x-udk}i?86-*-udk - -This target emulates the SCO Universal Development Kit and requires that -package be installed. (If it is installed, you will have a -@file{/udk/usr/ccs/bin/cc} file present.) It's very much like the -@samp{i?86-*-unixware7*} target -but is meant to be used when hosting on a system where UDK isn't the -default compiler such as OpenServer 5 or Unixware 2. This target will -generate binaries that will run on OpenServer, Unixware 2, or Unixware 7, -with the same warnings and caveats as the SCO UDK@. - -This target is a little tricky to build because we have to distinguish -it from the native tools (so it gets headers, startups, and libraries -from the right place) while making the tools not think we're actually -building a cross compiler. The easiest way to do this is with a configure -command like this: - -@smallexample - CC=/udk/usr/ccs/bin/cc @var{/your/path/to}/gcc/configure \ - --host=i686-pc-udk --target=i686-pc-udk --program-prefix=udk- -@end smallexample - -@emph{You should substitute @samp{i686} in the above command with the appropriate -processor for your host.} - -After the usual @samp{make} and -@samp{make install}, you can then access the UDK-targeted GCC -tools by adding @command{udk-} before the commonly known name. For -example, to invoke the C compiler, you would use @command{udk-gcc}. -They will coexist peacefully with any native-target GCC tools you may -have installed. - - -@html -<hr /> -@end html @heading @anchor{ia64-x-linux}ia64-*-linux IA-64 processor (also known as IPF, or Itanium Processor Family) running GNU/Linux. @@ -3528,59 +3390,6 @@ be a @option{-mcpu} argument or one of the following values: @html <hr /> @end html -@heading @anchor{m68k-hp-hpux}m68k-hp-hpux -HP 9000 series 300 or 400 running HP-UX@. HP-UX version 8.0 has a bug in -the assembler that prevents compilation of GCC@. This -bug manifests itself during the first stage of compilation, while -building @file{libgcc2.a}: - -@smallexample -_floatdisf -cc1: warning: `-g' option not supported on this version of GCC -cc1: warning: `-g1' option not supported on this version of GCC -./xgcc: Internal compiler error: program as got fatal signal 11 -@end smallexample - -A patched version of the assembler is available as the file -@uref{ftp://altdorf.ai.mit.edu/archive/cph/hpux-8.0-assembler}. If you -have HP software support, the patch can also be obtained directly from -HP, as described in the following note: - -@quotation -This is the patched assembler, to patch SR#1653-010439, where the -assembler aborts on floating point constants. - -The bug is not really in the assembler, but in the shared library -version of the function ``cvtnum(3c)''. The bug on ``cvtnum(3c)'' is -SR#4701-078451. Anyway, the attached assembler uses the archive -library version of ``cvtnum(3c)'' and thus does not exhibit the bug. -@end quotation - -This patch is also known as PHCO_4484. - -In addition gdb does not understand that native HP-UX format, so -you must use gas if you wish to use gdb. - -On HP-UX version 8.05, but not on 8.07 or more recent versions, the -@command{fixproto} shell script triggers a bug in the system shell. If you -encounter this problem, upgrade your operating system or use BASH (the -GNU shell) to run @command{fixproto}. This bug will cause the fixproto -program to report an error of the form: - -@smallexample -./fixproto: sh internal 1K buffer overflow -@end smallexample - -To fix this, you can also change the first line of the fixproto script -to look like: - -@smallexample -#!/bin/ksh -@end smallexample - -@html -<hr /> -@end html @heading @anchor{m68k-x-uclinux}m68k-*-uclinux GCC 4.3 changed the uClinux configuration so that it uses the @samp{m68k-linux-gnu} ABI rather than the @samp{m68k-elf} ABI. @@ -3789,7 +3598,7 @@ on systems older than 10.3.9 (aka darwin7.9.0). @html <hr /> @end html -@heading @anchor{powerpc-x-elf}powerpc-*-elf, powerpc-*-sysv4 +@heading @anchor{powerpc-x-elf}powerpc-*-elf PowerPC system in big endian mode, running System V.4. @html @@ -3825,7 +3634,7 @@ Embedded PowerPC system in big endian mode. @html <hr /> @end html -@heading @anchor{powerpcle-x-elf}powerpcle-*-elf, powerpcle-*-sysv4 +@heading @anchor{powerpcle-x-elf}powerpcle-*-elf PowerPC system in little endian mode, running System V.4. @html @@ -4136,47 +3945,6 @@ This is a synonym for sparc64-*-solaris2*. @html <hr /> @end html -@heading @anchor{x-x-sysv}*-*-sysv* -On System V release 3, you may get this error message -while linking: - -@smallexample -ld fatal: failed to write symbol name @var{something} - in strings table for file @var{whatever} -@end smallexample - -This probably indicates that the disk is full or your ulimit won't allow -the file to be as large as it needs to be. - -This problem can also result because the kernel parameter @code{MAXUMEM} -is too small. If so, you must regenerate the kernel and make the value -much larger. The default value is reported to be 1024; a value of 32768 -is said to work. Smaller values may also work. - -On System V, if you get an error like this, - -@smallexample -/usr/local/lib/bison.simple: In function `yyparse': -/usr/local/lib/bison.simple:625: virtual memory exhausted -@end smallexample - -@noindent -that too indicates a problem with disk space, ulimit, or @code{MAXUMEM}. - -On a System V release 4 system, make sure @file{/usr/bin} precedes -@file{/usr/ucb} in @code{PATH}. The @command{cc} command in -@file{/usr/ucb} uses libraries which have bugs. - -@html -<hr /> -@end html -@heading @anchor{vax-dec-ultrix}vax-dec-ultrix -Don't try compiling with VAX C (@command{vcc}). It produces incorrect code -in some cases (for example, when @code{alloca} is used). - -@html -<hr /> -@end html @heading @anchor{x-x-vxworks}*-*-vxworks* Support for VxWorks is in flux. At present GCC supports @emph{only} the very recent VxWorks 5.5 (aka Tornado 2.2) release, and only on PowerPC@. diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 6b41efe..128c43b 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -668,10 +668,6 @@ Objective-C and Objective-C++ Dialects}. -mreturn-pointer-on-d0 @gol -mno-crt0 -mrelax} -@emph{MT Options} -@gccoptlist{-mno-crt0 -mbacc -msim @gol --march=@var{cpu-type} } - @emph{PDP-11 Options} @gccoptlist{-mfpu -msoft-float -mac0 -mno-ac0 -m40 -m45 -m10 @gol -mbcopy -mbcopy-builtin -mint32 -mno-int16 @gol @@ -721,7 +717,7 @@ See RS/6000 and PowerPC Options. -mfloat-gprs=yes -mfloat-gprs=no -mfloat-gprs=single -mfloat-gprs=double @gol -mprototype -mno-prototype @gol -msim -mmvme -mads -myellowknife -memb -msdata @gol --msdata=@var{opt} -mvxworks -mwindiss -G @var{num} -pthread} +-msdata=@var{opt} -mvxworks -G @var{num} -pthread} @emph{S/390 and zSeries Options} @gccoptlist{-mtune=@var{cpu-type} -march=@var{cpu-type} @gol @@ -8390,7 +8386,6 @@ platform. * MIPS Options:: * MMIX Options:: * MN10300 Options:: -* MT Options:: * PDP-11 Options:: * PowerPC Options:: * RS/6000 and PowerPC Options:: @@ -9061,12 +9056,6 @@ choices for @var{architecture-type} are the same as for @opindex mmax-stack-frame Warn when the stack frame of a function exceeds @var{n} bytes. -@item -melinux-stacksize=@var{n} -@opindex melinux-stacksize -Only available with the @samp{cris-axis-aout} target. Arranges for -indications in the program to the kernel loader that the stack of the -program should be set to @var{n} bytes. - @item -metrax4 @itemx -metrax100 @opindex metrax4 @@ -9146,28 +9135,18 @@ instruction sequences that load addresses for functions from the PLT part of the GOT rather than (traditional on other architectures) calls to the PLT@. The default is @option{-mgotplt}. -@item -maout -@opindex maout -Legacy no-op option only recognized with the cris-axis-aout target. - @item -melf @opindex melf Legacy no-op option only recognized with the cris-axis-elf and cris-axis-linux-gnu targets. -@item -melinux -@opindex melinux -Only recognized with the cris-axis-aout target, where it selects a -GNU/linux-like multilib, include files and instruction set for -@option{-march=v8}. - @item -mlinux @opindex mlinux Legacy no-op option only recognized with the cris-axis-linux-gnu target. @item -sim @opindex sim -This option, recognized for the cris-axis-aout and cris-axis-elf arranges +This option, recognized for the cris-axis-elf arranges to link with input-output functions from a simulator library. Code, initialized data and zero-initialized data are allocated consecutively. @@ -10276,8 +10255,7 @@ Generate output containing library calls for floating point. targets. Normally the facilities of the machine's usual C compiler are used, but this cannot be done directly in cross-compilation. You must make your own arrangements to provide suitable library functions for -cross-compilation. The embedded target @samp{hppa1.1-*-pro} -does provide software floating point support. +cross-compilation. @option{-msoft-float} changes the calling convention in the output file; therefore, it is only useful if you compile @emph{all} of a program with @@ -12756,44 +12734,6 @@ has an effect when used on the command line for the final link step. This option makes symbolic debugging impossible. @end table -@node MT Options -@subsection MT Options -@cindex MT options - -These @option{-m} options are defined for Morpho MT architectures: - -@table @gcctabopt - -@item -march=@var{cpu-type} -@opindex march -Generate code that will run on @var{cpu-type}, which is the name of a system -representing a certain processor type. Possible values for -@var{cpu-type} are @samp{ms1-64-001}, @samp{ms1-16-002}, -@samp{ms1-16-003} and @samp{ms2}. - -When this option is not used, the default is @option{-march=ms1-16-002}. - -@item -mbacc -@opindex mbacc -Use byte loads and stores when generating code. - -@item -mno-bacc -@opindex mno-bacc -Do not use byte loads and stores when generating code. - -@item -msim -@opindex msim -Use simulator runtime - -@item -mno-crt0 -@opindex mno-crt0 -Do not link in the C run-time initialization object file -@file{crti.o}. Other run-time initialization and termination files -such as @file{startup.o} and @file{exit.o} are still included on the -linker command line. - -@end table - @node PDP-11 Options @subsection PDP-11 Options @cindex PDP-11 Options @@ -13576,10 +13516,6 @@ On embedded PowerPC systems, assume that the startup module is called On System V.4 and embedded PowerPC systems, specify that you are compiling for a VxWorks system. -@item -mwindiss -@opindex mwindiss -Specify that you are compiling for the WindISS simulation environment. - @item -memb @opindex memb On embedded PowerPC systems, set the @var{PPC_EMB} bit in the ELF flags diff --git a/gcc/doc/md.texi b/gcc/doc/md.texi index 05b1754..ba4b6ac 100644 --- a/gcc/doc/md.texi +++ b/gcc/doc/md.texi @@ -1952,35 +1952,6 @@ Vector constant that does not require memory @end table -@item MorphoTech family---@file{config/mt/mt.h} -@table @code -@item I -Constant for an arithmetic insn (16-bit signed integer). - -@item J -The constant 0. - -@item K -Constant for a logical insn (16-bit zero-extended integer). - -@item L -A constant that can be loaded with @code{lui} (i.e.@: the bottom 16 -bits are zero). - -@item M -A constant that takes two words to load (i.e.@: not matched by -@code{I}, @code{K}, or @code{L}). - -@item N -Negative 16-bit constants other than -65536. - -@item O -A 15-bit signed integer constant. - -@item P -A positive 16-bit constant. -@end table - @item Intel 386---@file{config/i386/constraints.md} @table @code @item R diff --git a/gcc/libgcc2.c b/gcc/libgcc2.c index f8e442d..5a82f82 100644 --- a/gcc/libgcc2.c +++ b/gcc/libgcc2.c @@ -2046,7 +2046,7 @@ __enable_execute_stack (void *addr __attribute__((__unused__))) /* Jump to a trampoline, loading the static chain address. */ -#if defined(WINNT) && ! defined(__CYGWIN__) && ! defined (_UWIN) +#if defined(WINNT) && ! defined(__CYGWIN__) int getpagesize (void) @@ -2082,7 +2082,7 @@ mprotect (char *addr, int len, int prot) return -1; } -#endif /* WINNT && ! __CYGWIN__ && ! _UWIN */ +#endif /* WINNT && ! __CYGWIN__ */ #ifdef TRANSFER_FROM_TRAMPOLINE TRANSFER_FROM_TRAMPOLINE diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 109b1d8..2de1425 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,40 @@ +2008-06-07 Joseph Myers <joseph@codesourcery.com> + + * g++.dg/abi/arm_cxa_vec1.C: Don't handle xscale*-*-*. + * g++.dg/eh/spbp.C: Don't handle *-*-solaris2.[56]*. + * g++.dg/warn/miss-format-1.C: Don't handle Solaris before Solaris + 7. + * gcc.c-torture/compile/981006-1.c: Don't handle xscale*-*-*, + strongarm*-*-* and cris-*-aout*. + * gcc.c-torture/execute/941014-1.x: Don't handle xscale*-*-* and + strongarm*-*-*. + * gcc.dg/20030909-1.c: Don't handle xscale*-*-* and + strongarm*-*-*. + * gcc.dg/20031108-1.c: Don't handle xscale*-*-* and + strongarm*-*-*. + * gcc.dg/20040813-1.c: Don't handle *-*-sysv5*. + * gcc.dg/arm-asm.c: Don't handle strongarm*-*-* and xscale*-*-*. + * gcc.dg/arm-scd42-1.c: Use target arm*-*-*. + * gcc.dg/arm-scd42-3.c: Use target arm*-*-*. + * gcc.dg/cpp/assert4.c: Don't handle BeOS. + * gcc.dg/debug/pr35154.c: Don't handle *-*-sysv5*. + * gcc.dg/intmax_t-1.c: Don't handle *-*-solaris2.5.1 and + xscale*-*-elf*. + * gcc.dg/pragma-align.c: Don't handle i?86-*-sco3.2v5*. + * gcc.dg/pthread-init-2.c: Don't handle *-*-solaris2.5.1. + * gcc.misc-tests/arm-isr.exp: Use target arm*-*-*. + * gcc.target/powerpc/ppc-sdata-1.c: Don't handle powerpc-*-sysv*. + * gcc.target/powerpc/ppc-sdata-2.c: Don't handle powerpc-*-sysv*. + * gcc.target/powerpc/ppc-stackalign-1.c: Don't handle + powerpc-*-sysv*. + * gfortran.dg/debug/pr35154-stabs.f: Don't handle *-*-sysv5*. + * lib/target-supports.exp: Don't handle strongarm*-*-elf, + xscale*-*-elf and *-*-windiss. + * obj-c++.dg/dwarf-2.mm: Don't handle *-*-solaris2.[56]*. + * objc.dg/dwarf-1.m: Don't handle *-*-solaris2.[56]*. + * objc.dg/dwarf-2.m: Don't handle *-*-solaris2.[56]*. + * gcc.dg/mt-loopi1.c: Remove. + 2008-06-07 Samuel Tardieu <sam@rfc1149.net> * gnat.dg/specs/oversize.ads: New. diff --git a/gcc/testsuite/g++.dg/abi/arm_cxa_vec1.C b/gcc/testsuite/g++.dg/abi/arm_cxa_vec1.C index da66a73..b681a1f 100644 --- a/gcc/testsuite/g++.dg/abi/arm_cxa_vec1.C +++ b/gcc/testsuite/g++.dg/abi/arm_cxa_vec1.C @@ -1,5 +1,5 @@ // Check that __cxa_vec_[c]ctor returns a pointer to the array -// { dg-do run { target arm*-*-* xscale*-*-* } } +// { dg-do run { target arm*-*-* } } #include <cxxabi.h> diff --git a/gcc/testsuite/g++.dg/eh/spbp.C b/gcc/testsuite/g++.dg/eh/spbp.C index 84e4c6f..181e65d 100644 --- a/gcc/testsuite/g++.dg/eh/spbp.C +++ b/gcc/testsuite/g++.dg/eh/spbp.C @@ -1,6 +1,6 @@ /* { dg-do run } */ /* { dg-options "-gdwarf-2" } */ -/* { dg-skip-if "No Dwarf" { { *-*-aix* hppa*-*-hpux* *-*-solaris2.[56]* } && { ! hppa*64*-*-* } } { "*" } { "" } } */ +/* { dg-skip-if "No Dwarf" { { *-*-aix* hppa*-*-hpux* } && { ! hppa*64*-*-* } } { "*" } { "" } } */ /* This was a bug on x86-darwin, where the register numbering for SP and BP was swapped (it's easy to do because on that port it's diff --git a/gcc/testsuite/g++.dg/warn/miss-format-1.C b/gcc/testsuite/g++.dg/warn/miss-format-1.C index ec9dbc1..faa3583 100644 --- a/gcc/testsuite/g++.dg/warn/miss-format-1.C +++ b/gcc/testsuite/g++.dg/warn/miss-format-1.C @@ -3,7 +3,7 @@ /* { dg-do compile } */ /* { dg-options "-Wmissing-format-attribute" } */ /* VxWorks does not provide vscanf, either in kernel or RTP mode. */ -/* { dg-error "not declared" "" { target *-*-solaris2.5.1 *-*-solaris2.[5-8] *-*-vxworks* } 25 } */ +/* { dg-error "not declared" "" { target *-*-solaris2.[7-8] *-*-vxworks* } 25 } */ #include <stdio.h> #include <stdarg.h> @@ -22,7 +22,7 @@ bar (const char *fmt, ...) { va_list ap; va_start (ap, fmt); - vscanf (fmt, ap); /* { dg-warning "candidate" "scanf attribute warning" { xfail *-*-solaris2.5.1 *-*-solaris2.[5-8] *-*-vxworks* } } */ + vscanf (fmt, ap); /* { dg-warning "candidate" "scanf attribute warning" { xfail *-*-solaris2.[7-8] *-*-vxworks* } } */ va_end (ap); } diff --git a/gcc/testsuite/gcc.c-torture/compile/981006-1.c b/gcc/testsuite/gcc.c-torture/compile/981006-1.c index ba59da7..a8b4cc4 100644 --- a/gcc/testsuite/gcc.c-torture/compile/981006-1.c +++ b/gcc/testsuite/gcc.c-torture/compile/981006-1.c @@ -6,7 +6,7 @@ /* { dg-do assemble } */ /* For MIPS at least, pic is needed to trigger the problem. */ /* { dg-options "-w -Wuninitialized -Werror -fpic" } */ -/* { dg-options "-w -Wuninitialized -Werror" { target { { rs6000-*-aix* powerpc*-*-aix* arm*-*-* xscale*-*-* strongarm*-*-* fr30-*-* sh-*-hms sh-*-coff h8300*-*-* cris-*-elf* cris-*-aout* mmix-*-* } || { ! fpic } } } } */ +/* { dg-options "-w -Wuninitialized -Werror" { target { { rs6000-*-aix* powerpc*-*-aix* arm*-*-* fr30-*-* sh-*-hms sh-*-coff h8300*-*-* cris-*-elf* mmix-*-* } || { ! fpic } } } } */ int foo (int a, int b) { diff --git a/gcc/testsuite/gcc.c-torture/execute/941014-1.x b/gcc/testsuite/gcc.c-torture/execute/941014-1.x index a52aaa7..bbe060e 100644 --- a/gcc/testsuite/gcc.c-torture/execute/941014-1.x +++ b/gcc/testsuite/gcc.c-torture/execute/941014-1.x @@ -1,12 +1,11 @@ # This doesn't always work for Thumb. -if { [istarget arm*-*-*] || [istarget xscale*-*-*] \ - || [istarget strongarm*-*-*] } { +if { [istarget arm*-*-*] } { set torture_eval_before_execute { global compiler_conditional_xfail_data set compiler_conditional_xfail_data { "Thumb sets the last bit of function relocations" \ - { "arm*-*-*" "xscale*-*-*" "strongarm*-*-*" } \ + { "arm*-*-*" } \ { { "-mthumb" "-O0" } } \ { "" } } diff --git a/gcc/testsuite/gcc.dg/20030909-1.c b/gcc/testsuite/gcc.dg/20030909-1.c index 2a13270..21c16e6 100644 --- a/gcc/testsuite/gcc.dg/20030909-1.c +++ b/gcc/testsuite/gcc.dg/20030909-1.c @@ -1,5 +1,5 @@ /* Verify that ands are combined. */ -/* { dg-do compile { target arm*-*-* strongarm*-*-* xscale*-*-* } } */ +/* { dg-do compile { target arm*-*-* } } */ /* { dg-options "-O" } */ /* { dg-final { scan-assembler-not "#255.*#255" } } */ int f(int a, int b) { return ((a & 0xff) + (b & 0xff)) & 0xff; } diff --git a/gcc/testsuite/gcc.dg/20031108-1.c b/gcc/testsuite/gcc.dg/20031108-1.c index 00bf11c..5bdf8b6 100644 --- a/gcc/testsuite/gcc.dg/20031108-1.c +++ b/gcc/testsuite/gcc.dg/20031108-1.c @@ -1,5 +1,5 @@ /* PR optimization/10467 */ -/* { dg-do compile { target arm*-*-* xscale*-*-* strongarm*-*-* } } */ +/* { dg-do compile { target arm*-*-* } } */ /* { dg-options "-O2 -mthumb" } */ typedef enum {Ident_1} Enumeration; diff --git a/gcc/testsuite/gcc.dg/20040813-1.c b/gcc/testsuite/gcc.dg/20040813-1.c index df36058..fa01a53 100644 --- a/gcc/testsuite/gcc.dg/20040813-1.c +++ b/gcc/testsuite/gcc.dg/20040813-1.c @@ -2,7 +2,7 @@ /* Contributed by Devang Patel <dpatel@apple.com> */ /* { dg-do compile } */ -/* { dg-skip-if "No stabs" { mmix-*-* *-*-aix* *-*-netware* alpha*-*-* hppa*64*-*-* ia64-*-* *-*-sysv5* *-*-vxworks* } { "*" } { "" } } */ +/* { dg-skip-if "No stabs" { mmix-*-* *-*-aix* *-*-netware* alpha*-*-* hppa*64*-*-* ia64-*-* *-*-vxworks* } { "*" } { "" } } */ /* { dg-options "-gstabs" } */ int diff --git a/gcc/testsuite/gcc.dg/arm-asm.c b/gcc/testsuite/gcc.dg/arm-asm.c index 1187d9e..083682d 100644 --- a/gcc/testsuite/gcc.dg/arm-asm.c +++ b/gcc/testsuite/gcc.dg/arm-asm.c @@ -1,6 +1,6 @@ /* ARM and Thumb asm statements should be able to access the constant pool. */ -/* { dg-do compile { target arm*-*-* strongarm*-*-* xscale*-*-* } } */ +/* { dg-do compile { target arm*-*-* } } */ extern unsigned x[]; unsigned *trapTable() { diff --git a/gcc/testsuite/gcc.dg/arm-scd42-1.c b/gcc/testsuite/gcc.dg/arm-scd42-1.c index 70b34de..9f1e4b4 100644 --- a/gcc/testsuite/gcc.dg/arm-scd42-1.c +++ b/gcc/testsuite/gcc.dg/arm-scd42-1.c @@ -1,5 +1,5 @@ /* Verify that mov is preferred on XScale for loading a 1 byte constant. */ -/* { dg-do compile { target xscale-*-* } } */ +/* { dg-do compile { target arm*-*-* } } */ /* { dg-options "-mcpu=xscale -O" } */ unsigned load1(void) __attribute__ ((naked)); diff --git a/gcc/testsuite/gcc.dg/arm-scd42-3.c b/gcc/testsuite/gcc.dg/arm-scd42-3.c index 80a4ba8..0e884c4 100644 --- a/gcc/testsuite/gcc.dg/arm-scd42-3.c +++ b/gcc/testsuite/gcc.dg/arm-scd42-3.c @@ -1,5 +1,5 @@ /* Verify that ldr is preferred on XScale for loading a 3 or 4 byte constant. */ -/* { dg-do compile { target xscale-*-* } } */ +/* { dg-do compile { target arm*-*-* } } */ /* { dg-options "-mcpu=xscale -O" } */ unsigned load4(void) __attribute__ ((naked)); diff --git a/gcc/testsuite/gcc.dg/cpp/assert4.c b/gcc/testsuite/gcc.dg/cpp/assert4.c index c43ba2f..6a4cb3f 100644 --- a/gcc/testsuite/gcc.dg/cpp/assert4.c +++ b/gcc/testsuite/gcc.dg/cpp/assert4.c @@ -128,14 +128,6 @@ # error #endif -#if defined __BEOS__ -# if !#system(beos) -# error -# endif -#elif #system(beos) -# error -#endif - #if defined __netware__ # if !#system(netware) # error diff --git a/gcc/testsuite/gcc.dg/debug/pr35154.c b/gcc/testsuite/gcc.dg/debug/pr35154.c index fcb7925..8706c5c 100644 --- a/gcc/testsuite/gcc.dg/debug/pr35154.c +++ b/gcc/testsuite/gcc.dg/debug/pr35154.c @@ -23,7 +23,7 @@ main() optb.f2 = 'D'; i_outer = 'e'; /* { dg-do compile } */ -/* { dg-skip-if "No stabs" { mmix-*-* *-*-netware* alpha*-*-* hppa*64*-*-* ia64-*-* *-*-sysv5* *-*-vxworks* } { "*" } { "" } } */ +/* { dg-skip-if "No stabs" { mmix-*-* *-*-netware* alpha*-*-* hppa*64*-*-* ia64-*-* *-*-vxworks* } { "*" } { "" } } */ /* { dg-skip-if "stabs only" { *-*-* } { "*" } { "-gstabs" } } */ return 0; } diff --git a/gcc/testsuite/gcc.dg/intmax_t-1.c b/gcc/testsuite/gcc.dg/intmax_t-1.c index 65bca76..9ac0cb9 100644 --- a/gcc/testsuite/gcc.dg/intmax_t-1.c +++ b/gcc/testsuite/gcc.dg/intmax_t-1.c @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-Wall" } */ -/* { dg-error "" "" { target { { *-*-solaris2.5.1 *arm*-*-*elf* xscale*-*-elf* xtensa-*-elf* } || vxworks_kernel } } 0 } */ +/* { dg-error "" "" { target { { *arm*-*-*elf* xtensa-*-elf* } || vxworks_kernel } } 0 } */ /* Compile with -Wall to get a warning if built-in and system intmax_t don't match. */ diff --git a/gcc/testsuite/gcc.dg/mt-loopi1.c b/gcc/testsuite/gcc.dg/mt-loopi1.c deleted file mode 100644 index 5cce035..0000000 --- a/gcc/testsuite/gcc.dg/mt-loopi1.c +++ /dev/null @@ -1,13 +0,0 @@ -/* { dg-do compile { target mt-*-* } } */ -/* { dg-options "-O2 -march=ms2" } */ -/* { dg-final { scan-assembler "\tloopi " } } */ - -/* Make sure we generate loopi */ - -void Const (volatile int *ptr) -{ - int i; - - for (i = 0; i != 10; i++) - *ptr; -} diff --git a/gcc/testsuite/gcc.dg/pragma-align.c b/gcc/testsuite/gcc.dg/pragma-align.c index b00ed75..c1b4ded 100644 --- a/gcc/testsuite/gcc.dg/pragma-align.c +++ b/gcc/testsuite/gcc.dg/pragma-align.c @@ -1,6 +1,6 @@ /* Prove that HANDLE_SYSTEMV_PRAGMA alignment handling works somewhat. */ -/* { dg-do run { target i?86-*-linux* x86_64-*-linux* i?86-*-*bsd* i?86-*-sco3.2v5* *-*-solaris2.* } } */ +/* { dg-do run { target i?86-*-linux* x86_64-*-linux* i?86-*-*bsd* *-*-solaris2.* } } */ extern void abort (void); diff --git a/gcc/testsuite/gcc.dg/pthread-init-2.c b/gcc/testsuite/gcc.dg/pthread-init-2.c index 2e1b93a..3e8a17e 100644 --- a/gcc/testsuite/gcc.dg/pthread-init-2.c +++ b/gcc/testsuite/gcc.dg/pthread-init-2.c @@ -7,7 +7,7 @@ /* { dg-do compile } */ /* { dg-require-effective-target pthread_h } */ /* { dg-options "-Wextra -Wall -ansi" } */ -/* { dg-options "-Wextra -Wall -ansi -D_POSIX_C_SOURCE=199506L" { target { *-*-hpux* *-*-solaris2.5.1 } } } */ +/* { dg-options "-Wextra -Wall -ansi -D_POSIX_C_SOURCE=199506L" { target { *-*-hpux* } } } */ #include "pthread-init-common.h" diff --git a/gcc/testsuite/gcc.misc-tests/arm-isr.exp b/gcc/testsuite/gcc.misc-tests/arm-isr.exp index 8355e93..f5306d6 100644 --- a/gcc/testsuite/gcc.misc-tests/arm-isr.exp +++ b/gcc/testsuite/gcc.misc-tests/arm-isr.exp @@ -21,7 +21,7 @@ load_lib gcc-dg.exp dg-init -if {[istarget "*arm-*-*"] || [istarget "xscale-*-*"]} { +if { [istarget "arm*-*-*"] } { dg-runtest "$srcdir/$subdir/arm-isr.c" "" "" } dg-finish diff --git a/gcc/testsuite/gcc.target/powerpc/ppc-sdata-1.c b/gcc/testsuite/gcc.target/powerpc/ppc-sdata-1.c index 15ccbc2..8ec39b4 100644 --- a/gcc/testsuite/gcc.target/powerpc/ppc-sdata-1.c +++ b/gcc/testsuite/gcc.target/powerpc/ppc-sdata-1.c @@ -1,4 +1,4 @@ -/* { dg-do compile { target { { powerpc*-*-linux* && ilp32 } || { powerpc-*-sysv* powerpc-*-eabi* } } } } */ +/* { dg-do compile { target { { powerpc*-*-linux* && ilp32 } || { powerpc-*-eabi* } } } } */ /* { dg-options "-O2 -fno-common -G 8 -meabi -msdata=eabi" } */ /* { dg-final { scan-assembler "\\.section\[ \t\]\\.sdata," } } */ /* { dg-final { scan-assembler "\\.section\[ \t\]\\.sdata2," } } */ diff --git a/gcc/testsuite/gcc.target/powerpc/ppc-sdata-2.c b/gcc/testsuite/gcc.target/powerpc/ppc-sdata-2.c index b8ea9d2..9b577df 100644 --- a/gcc/testsuite/gcc.target/powerpc/ppc-sdata-2.c +++ b/gcc/testsuite/gcc.target/powerpc/ppc-sdata-2.c @@ -1,4 +1,4 @@ -/* { dg-do compile { target { { powerpc*-*-linux* && ilp32 } || { powerpc-*-sysv* powerpc-*-eabi* } } } } */ +/* { dg-do compile { target { { powerpc*-*-linux* && ilp32 } || { powerpc-*-eabi* } } } } */ /* { dg-options "-O2 -fno-common -G 8 -msdata=sysv" } */ /* { dg-final { scan-assembler "\\.section\[ \t\]\\.sdata," } } */ /* { dg-final { scan-assembler-not "\\.section\[ \t\]\\.sdata2," } } */ diff --git a/gcc/testsuite/gcc.target/powerpc/ppc-stackalign-1.c b/gcc/testsuite/gcc.target/powerpc/ppc-stackalign-1.c index 0c08387..465fc41 100644 --- a/gcc/testsuite/gcc.target/powerpc/ppc-stackalign-1.c +++ b/gcc/testsuite/gcc.target/powerpc/ppc-stackalign-1.c @@ -1,4 +1,4 @@ -/* { dg-do run { target powerpc*-*-linux* powerpc-*-sysv* powerpc*-*-eabi* } } */ +/* { dg-do run { target powerpc*-*-linux* powerpc*-*-eabi* } } */ /* { dg-options {} } */ /* Test stack pointer alignment against variable alloca. */ diff --git a/gcc/testsuite/gfortran.dg/debug/pr35154-stabs.f b/gcc/testsuite/gfortran.dg/debug/pr35154-stabs.f index 7294771..a597633 100644 --- a/gcc/testsuite/gfortran.dg/debug/pr35154-stabs.f +++ b/gcc/testsuite/gfortran.dg/debug/pr35154-stabs.f @@ -1,6 +1,6 @@ C Test program for common block debugging. G. Helffrich 11 July 2004. C { dg-do compile } -C { dg-skip-if "No stabs" { mmix-*-* *-*-netware* alpha*-*-* hppa*64*-*-* ia64-*-* *-*-sysv5* *-*-vxworks* } { "*" } { "" } } +C { dg-skip-if "No stabs" { mmix-*-* *-*-netware* alpha*-*-* hppa*64*-*-* ia64-*-* *-*-vxworks* } { "*" } { "" } } C { dg-skip-if "No stabs" {*-*-* } { "*" } { "-gstabs" } } common i,j common /label/l,m diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index d158ef0..04717c6 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -453,8 +453,6 @@ proc check_profiling_available { test_what } { || [istarget avr-*-*] || [istarget bfin-*-*] || [istarget powerpc-*-eabi*] - || [istarget strongarm*-*-elf] - || [istarget xscale*-*-elf] || [istarget cris-*-*] || [istarget crisv32-*-*] || [istarget fido-*-elf] @@ -465,8 +463,7 @@ proc check_profiling_available { test_what } { || [istarget mips*-*-elf*] || [istarget xstormy16-*] || [istarget xtensa-*-elf] - || [istarget *-*-vxworks*] - || [istarget *-*-windiss] } { + || [istarget *-*-vxworks*] } { set profiling_available_saved 0 } else { set profiling_available_saved 1 diff --git a/gcc/testsuite/obj-c++.dg/dwarf-2.mm b/gcc/testsuite/obj-c++.dg/dwarf-2.mm index 8d4169f..e938249 100644 --- a/gcc/testsuite/obj-c++.dg/dwarf-2.mm +++ b/gcc/testsuite/obj-c++.dg/dwarf-2.mm @@ -1,4 +1,4 @@ /* { dg-options "-gdwarf-2 -dA" } */ -/* { dg-skip-if "" { { hppa*-*-hpux* *-*-solaris2.[56]* } && { ! hppa*64*-*-* } } { "*" } { "" } } */ +/* { dg-skip-if "" { { hppa*-*-hpux* } && { ! hppa*64*-*-* } } { "*" } { "" } } */ /* { dg-final { scan-assembler "0x11\[^0-9a-f\].*DW_AT_language" } } */ int x; diff --git a/gcc/testsuite/objc.dg/dwarf-1.m b/gcc/testsuite/objc.dg/dwarf-1.m index 312dc6b..3bfabba 100644 --- a/gcc/testsuite/objc.dg/dwarf-1.m +++ b/gcc/testsuite/objc.dg/dwarf-1.m @@ -1,6 +1,6 @@ /* { dg-options "-gdwarf-2 -dA" } */ /* { dg-final { scan-assembler "\"id.0\".*DW_AT_name" } } */ -/* { dg-skip-if "No Dwarf" { { *-*-aix* hppa*-*-hpux* *-*-solaris2.[56]* } && { ! hppa*64*-*-* } } { "*" } { "" } } */ +/* { dg-skip-if "No Dwarf" { { *-*-aix* hppa*-*-hpux* } && { ! hppa*64*-*-* } } { "*" } { "" } } */ @interface foo id x; @end diff --git a/gcc/testsuite/objc.dg/dwarf-2.m b/gcc/testsuite/objc.dg/dwarf-2.m index 08885a3..f85a750 100644 --- a/gcc/testsuite/objc.dg/dwarf-2.m +++ b/gcc/testsuite/objc.dg/dwarf-2.m @@ -1,4 +1,4 @@ /* { dg-options "-gdwarf-2 -dA" } */ /* { dg-final { scan-assembler "0x10\[^0-9a-f\].*DW_AT_language" } } */ -/* { dg-skip-if "No Dwarf" { { *-*-aix* hppa*-*-hpux* *-*-solaris2.[56]* } && { ! hppa*64*-*-* } } { "*" } { "" } } */ +/* { dg-skip-if "No Dwarf" { { *-*-aix* hppa*-*-hpux* } && { ! hppa*64*-*-* } } { "*" } { "" } } */ int x; |