mirror of
https://github.com/libquantum/libquantum.git
synced 2025-10-03 08:42:01 +00:00
updated libquantum 0.2.3 source files
This commit is contained in:
7
CHANGES
7
CHANGES
@@ -1,3 +1,10 @@
|
|||||||
|
libquantum 0.2.3:
|
||||||
|
- Added density operator formalism
|
||||||
|
- Added functions for dot product and purity
|
||||||
|
- Usage of fabsf led to trouble on Solaris, replaced by fabs
|
||||||
|
- Qureg initialization does not seed RNG anymore
|
||||||
|
- Fixed some potential installation problems
|
||||||
|
|
||||||
libquantum 0.2.2:
|
libquantum 0.2.2:
|
||||||
- Added quantum object code interface
|
- Added quantum object code interface
|
||||||
- Additional configure options for better portability
|
- Additional configure options for better portability
|
||||||
|
76
Makefile.in
76
Makefile.in
@@ -1,6 +1,6 @@
|
|||||||
# Makefile: Build libquantum
|
# Makefile: Build libquantum
|
||||||
#
|
#
|
||||||
# Copyright 2003 Bjoern Butscher, Hendrik Weimer
|
# Copyright 2003, 2004 Bjoern Butscher, Hendrik Weimer
|
||||||
#
|
#
|
||||||
# This file is part of libquantum
|
# This file is part of libquantum
|
||||||
#
|
#
|
||||||
@@ -25,15 +25,16 @@ SHELL=/bin/sh
|
|||||||
|
|
||||||
# Target directory prefix
|
# Target directory prefix
|
||||||
|
|
||||||
PREFIX=@prefix@
|
PREFIX=$(DESTDIR)@prefix@
|
||||||
EPREFIX=${PREFIX}
|
EPREFIX=$(PREFIX)
|
||||||
|
|
||||||
# Other directories
|
# Other directories
|
||||||
|
|
||||||
LIBDIR=${EPREFIX}/lib
|
LIBDIR=$(EPREFIX)/lib
|
||||||
INCLUDEDIR=${PREFIX}/include
|
INCLUDEDIR=$(PREFIX)/include
|
||||||
BINDIR=${PREFIX}/bin
|
BINDIR=$(PREFIX)/bin
|
||||||
top_builddir=.
|
top_builddir=.
|
||||||
|
ALLDIRS=$(LIBDIR) $(INCLUDEDIR) $(BINDIR)
|
||||||
|
|
||||||
# Version information
|
# Version information
|
||||||
|
|
||||||
@@ -48,7 +49,7 @@ LIBTOOL=@LIBTOOL@
|
|||||||
# Flags passed to C compiler
|
# Flags passed to C compiler
|
||||||
|
|
||||||
CFLAGS=@CFLAGS@
|
CFLAGS=@CFLAGS@
|
||||||
LDFLAGS=-rpath $(LIBDIR) -version-info 4:0:1
|
LDFLAGS=-rpath $(LIBDIR) -version-info 5:0:2
|
||||||
|
|
||||||
# Dependencies
|
# Dependencies
|
||||||
|
|
||||||
@@ -59,85 +60,92 @@ Makefile: Makefile.in configure.in config.h.in types.h.in quantum.h.in
|
|||||||
|
|
||||||
libquantum.la: complex.lo measure.lo matrix.lo gates.lo qft.lo classic.lo\
|
libquantum.la: complex.lo measure.lo matrix.lo gates.lo qft.lo classic.lo\
|
||||||
qureg.lo decoherence.lo oaddn.lo omuln.lo expn.lo qec.lo version.lo\
|
qureg.lo decoherence.lo oaddn.lo omuln.lo expn.lo qec.lo version.lo\
|
||||||
objcode.lo Makefile
|
objcode.lo density.lo Makefile
|
||||||
$(LIBTOOL) $(CC) $(LDFLAGS) -o libquantum.la complex.lo measure.lo\
|
$(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o libquantum.la complex.lo\
|
||||||
matrix.lo gates.lo oaddn.lo omuln.lo expn.lo qft.lo classic.lo\
|
measure.lo matrix.lo gates.lo oaddn.lo omuln.lo expn.lo qft.lo\
|
||||||
qureg.lo decoherence.lo qec.lo version.lo objcode.lo -lm
|
classic.lo qureg.lo decoherence.lo qec.lo version.lo objcode.lo\
|
||||||
|
density.lo -lm
|
||||||
|
|
||||||
complex.lo: complex.c complex.h Makefile
|
complex.lo: complex.c complex.h Makefile
|
||||||
$(LIBTOOL) $(CC) $(CFLAGS) -c complex.c
|
$(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -c complex.c
|
||||||
|
|
||||||
measure.lo: measure.c measure.h matrix.h qureg.h complex.h config.h Makefile
|
measure.lo: measure.c measure.h matrix.h qureg.h complex.h config.h Makefile
|
||||||
$(LIBTOOL) $(CC) $(CFLAGS) -c measure.c
|
$(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -c measure.c
|
||||||
|
|
||||||
matrix.lo: matrix.c matrix.h complex.h Makefile
|
matrix.lo: matrix.c matrix.h complex.h Makefile
|
||||||
$(LIBTOOL) $(CC) $(CFLAGS) -c matrix.c
|
$(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -c matrix.c
|
||||||
|
|
||||||
gates.lo: gates.c gates.h matrix.h defs.h qureg.h Makefile
|
gates.lo: gates.c gates.h matrix.h defs.h qureg.h Makefile
|
||||||
$(LIBTOOL) $(CC) $(CFLAGS) -c gates.c
|
$(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -c gates.c
|
||||||
|
|
||||||
oaddn.lo: oaddn.c matrix.h defs.h gates.h qureg.h Makefile
|
oaddn.lo: oaddn.c matrix.h defs.h gates.h qureg.h Makefile
|
||||||
$(LIBTOOL) $(CC) $(CFLAGS) -c oaddn.c
|
$(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -c oaddn.c
|
||||||
|
|
||||||
omuln.lo: omuln.c matrix.h gates.h oaddn.h defs.h qureg.h Makefile
|
omuln.lo: omuln.c matrix.h gates.h oaddn.h defs.h qureg.h Makefile
|
||||||
$(LIBTOOL) $(CC) $(CFLAGS) -c omuln.c
|
$(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -c omuln.c
|
||||||
|
|
||||||
expn.lo: expn.c expn.h matrix.h gates.h oaddn.h omuln.h qureg.h Makefile
|
expn.lo: expn.c expn.h matrix.h gates.h oaddn.h omuln.h qureg.h Makefile
|
||||||
$(LIBTOOL) $(CC) $(CFLAGS) -c expn.c
|
$(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -c expn.c
|
||||||
|
|
||||||
qft.lo: qft.c qft.h matrix.h gates.h qureg.h Makefile
|
qft.lo: qft.c qft.h matrix.h gates.h qureg.h Makefile
|
||||||
$(LIBTOOL) $(CC) $(CFLAGS) -c qft.c
|
$(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -c qft.c
|
||||||
|
|
||||||
classic.lo: classic.c classic.h Makefile
|
classic.lo: classic.c classic.h Makefile
|
||||||
$(LIBTOOL) $(CC) $(CFLAGS) -c classic.c
|
$(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -c classic.c
|
||||||
|
|
||||||
qureg.lo: qureg.c qureg.h matrix.h config.h complex.h Makefile
|
qureg.lo: qureg.c qureg.h matrix.h config.h complex.h Makefile
|
||||||
$(LIBTOOL) $(CC) $(CFLAGS) -c qureg.c
|
$(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -c qureg.c
|
||||||
|
|
||||||
decoherence.lo: decoherence.c decoherence.h measure.h gates.h qureg.h\
|
decoherence.lo: decoherence.c decoherence.h measure.h gates.h qureg.h\
|
||||||
complex.h config.h Makefile
|
complex.h config.h Makefile
|
||||||
$(LIBTOOL) $(CC) $(CFLAGS) -c decoherence.c
|
$(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -c decoherence.c
|
||||||
|
|
||||||
qec.lo: qec.c qec.h gates.h qureg.h decoherence.h measure.h config.h Makefile
|
qec.lo: qec.c qec.h gates.h qureg.h decoherence.h measure.h config.h Makefile
|
||||||
$(LIBTOOL) $(CC) $(CFLAGS) -c qec.c
|
$(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -c qec.c
|
||||||
|
|
||||||
version.lo: version.c version.h config.h Makefile
|
version.lo: version.c version.h config.h Makefile
|
||||||
$(LIBTOOL) $(CC) $(CFLAGS) -c version.c
|
$(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -c version.c
|
||||||
|
|
||||||
objcode.lo: objcode.c objcode.h matrix.h gates.h qureg.h measure.h config.h\
|
objcode.lo: objcode.c objcode.h matrix.h gates.h qureg.h measure.h config.h\
|
||||||
Makefile
|
Makefile
|
||||||
$(LIBTOOL) $(CC) $(CFLAGS) -c objcode.c
|
$(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -c objcode.c
|
||||||
|
|
||||||
|
density.lo: density.c density.h matrix.h qureg.h complex.h config.h Makefile
|
||||||
|
$(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -c density.c
|
||||||
|
|
||||||
# Build demos of Shor's and Grover's algorithms
|
# Build demos of Shor's and Grover's algorithms
|
||||||
|
|
||||||
demos: shor grover
|
demos: shor grover
|
||||||
|
|
||||||
shor: libquantum.la shor.c Makefile
|
shor: libquantum.la shor.c Makefile
|
||||||
$(LIBTOOL) $(CC) $(CFLAGS) -o shor shor.c -I./ -lquantum -static -lm
|
$(LIBTOOL) --mode=link $(CC) $(CFLAGS) -o shor shor.c -I./ -lquantum\
|
||||||
|
-static -lm
|
||||||
|
|
||||||
grover: libquantum.la grover.c Makefile
|
grover: libquantum.la grover.c Makefile
|
||||||
$(LIBTOOL) $(CC) $(CFLAGS) -o grover grover.c -I./ -lquantum -static\
|
$(LIBTOOL) --mode=link $(CC) $(CFLAGS) -o grover grover.c -I./\
|
||||||
-lm
|
-lquantum -static -lm
|
||||||
|
|
||||||
# Quantum object code tools
|
# Quantum object code tools
|
||||||
|
|
||||||
quobtools: quobprint quobdump
|
quobtools: quobprint quobdump
|
||||||
|
|
||||||
quobprint: libquantum.la quobprint.c objcode.h Makefile
|
quobprint: libquantum.la quobprint.c objcode.h Makefile
|
||||||
$(LIBTOOL) $(CC) $(CFLAGS) -o quobprint quobprint.c -lquantum
|
$(LIBTOOL) --mode=link $(CC) $(CFLAGS) -o quobprint quobprint.c\
|
||||||
|
-lquantum
|
||||||
|
|
||||||
quobdump: libquantum.la quobdump.c objcode.h Makefile
|
quobdump: libquantum.la quobdump.c objcode.h Makefile
|
||||||
$(LIBTOOL) $(CC) $(CFLAGS) -o quobdump quobdump.c -lquantum
|
$(LIBTOOL) --mode=link $(CC) $(CFLAGS) -o quobdump quobdump.c -lquantum
|
||||||
|
|
||||||
# Bring this savage back home
|
# Bring this savage back home
|
||||||
|
|
||||||
install: libquantum.la
|
install: libquantum.la
|
||||||
$(LIBTOOL) $(INSTALL) -m 0644 libquantum.la $(LIBDIR)
|
$(INSTALL) -d $(ALLDIRS)
|
||||||
|
$(LIBTOOL) --mode=install $(INSTALL) -m 0644 libquantum.la $(LIBDIR)
|
||||||
$(INSTALL) -m 0644 quantum.h $(INCLUDEDIR)
|
$(INSTALL) -m 0644 quantum.h $(INCLUDEDIR)
|
||||||
|
|
||||||
quobtools_install: quobtools
|
quobtools_install: quobtools
|
||||||
$(LIBTOOL) $(INSTALL) -m 0755 quobprint $(BINDIR)
|
$(LIBTOOL) --mode=install $(INSTALL) -m 0755 quobprint $(BINDIR)
|
||||||
$(LIBTOOL) $(INSTALL) -m 0755 quobdump $(BINDIR)
|
$(LIBTOOL) --mode=install $(INSTALL) -m 0755 quobdump $(BINDIR)
|
||||||
|
|
||||||
# Make everything neat and tidy
|
# Make everything neat and tidy
|
||||||
|
|
||||||
@@ -154,6 +162,6 @@ dist:
|
|||||||
-rm quantum.h config.h types.h
|
-rm quantum.h config.h types.h
|
||||||
mkdir libquantum-$(VERSION)
|
mkdir libquantum-$(VERSION)
|
||||||
cp *.c *.h *.in configure COPYING install-sh ltmain.sh config.sub\
|
cp *.c *.h *.in configure COPYING install-sh ltmain.sh config.sub\
|
||||||
config.guess README INSTALL CHANGES libquantum-$(VERSION)
|
config.guess aclocal.m4 README INSTALL CHANGES libquantum-$(VERSION)
|
||||||
tar czf libquantum-$(VERSION).tar.gz libquantum-$(VERSION)/
|
tar czf libquantum-$(VERSION).tar.gz libquantum-$(VERSION)/
|
||||||
rm -rf libquantum-$(VERSION)
|
rm -rf libquantum-$(VERSION)
|
||||||
|
4743
aclocal.m4
vendored
Normal file
4743
aclocal.m4
vendored
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
|||||||
/* classic.c: Classic operations used in libquantum
|
/* classic.c: Classic operations used in libquantum
|
||||||
|
|
||||||
Copyright 2003 Bjoern Butscher, Hendrik Weimer
|
Copyright 2003, 2004 Bjoern Butscher, Hendrik Weimer
|
||||||
|
|
||||||
This file is part of libquantum
|
This file is part of libquantum
|
||||||
|
|
||||||
@@ -80,7 +80,7 @@ quantum_frac_approx(int *a, int *b, int width)
|
|||||||
num1 = num;
|
num1 = num;
|
||||||
den1 = den;
|
den1 = den;
|
||||||
|
|
||||||
} while(fabsf(((float) num / den) - f) > 1.0 / (2 * (1 << width)));
|
} while(fabs(((double) num / den) - f) > 1.0 / (2 * (1 << width)));
|
||||||
|
|
||||||
*a = num;
|
*a = num;
|
||||||
*b = den;
|
*b = den;
|
||||||
|
370
config.guess
vendored
370
config.guess
vendored
@@ -1,9 +1,9 @@
|
|||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
# Attempt to guess a canonical system name.
|
# Attempt to guess a canonical system name.
|
||||||
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
|
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
|
||||||
# 2000, 2001, 2002 Free Software Foundation, Inc.
|
# 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
|
||||||
|
|
||||||
timestamp='2002-05-29'
|
timestamp='2004-11-12'
|
||||||
|
|
||||||
# This file is free software; you can redistribute it and/or modify it
|
# 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
|
# under the terms of the GNU General Public License as published by
|
||||||
@@ -53,7 +53,7 @@ version="\
|
|||||||
GNU config.guess ($timestamp)
|
GNU config.guess ($timestamp)
|
||||||
|
|
||||||
Originally written by Per Bothner.
|
Originally written by Per Bothner.
|
||||||
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
|
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
|
||||||
Free Software Foundation, Inc.
|
Free Software Foundation, Inc.
|
||||||
|
|
||||||
This is free software; see the source for copying conditions. There is NO
|
This is free software; see the source for copying conditions. There is NO
|
||||||
@@ -88,30 +88,42 @@ if test $# != 0; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
trap 'exit 1' 1 2 15
|
||||||
|
|
||||||
dummy=dummy-$$
|
# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
|
||||||
trap 'rm -f $dummy.c $dummy.o $dummy.rel $dummy; exit 1' 1 2 15
|
# compiler to aid in system detection is discouraged as it requires
|
||||||
|
# temporary files to be created and, as you can see below, it is a
|
||||||
|
# headache to deal with in a portable fashion.
|
||||||
|
|
||||||
# CC_FOR_BUILD -- compiler used by this script.
|
|
||||||
# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
|
# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
|
||||||
# use `HOST_CC' if defined, but it is deprecated.
|
# use `HOST_CC' if defined, but it is deprecated.
|
||||||
|
|
||||||
set_cc_for_build='case $CC_FOR_BUILD,$HOST_CC,$CC in
|
# Portable tmp directory creation inspired by the Autoconf team.
|
||||||
,,) echo "int dummy(){}" > $dummy.c ;
|
|
||||||
|
set_cc_for_build='
|
||||||
|
trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
|
||||||
|
trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
|
||||||
|
: ${TMPDIR=/tmp} ;
|
||||||
|
{ tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
|
||||||
|
{ test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
|
||||||
|
{ tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
|
||||||
|
{ echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
|
||||||
|
dummy=$tmp/dummy ;
|
||||||
|
tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
|
||||||
|
case $CC_FOR_BUILD,$HOST_CC,$CC in
|
||||||
|
,,) echo "int x;" > $dummy.c ;
|
||||||
for c in cc gcc c89 c99 ; do
|
for c in cc gcc c89 c99 ; do
|
||||||
($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1 ;
|
if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
|
||||||
if test $? = 0 ; then
|
|
||||||
CC_FOR_BUILD="$c"; break ;
|
CC_FOR_BUILD="$c"; break ;
|
||||||
fi ;
|
fi ;
|
||||||
done ;
|
done ;
|
||||||
rm -f $dummy.c $dummy.o $dummy.rel ;
|
|
||||||
if test x"$CC_FOR_BUILD" = x ; then
|
if test x"$CC_FOR_BUILD" = x ; then
|
||||||
CC_FOR_BUILD=no_compiler_found ;
|
CC_FOR_BUILD=no_compiler_found ;
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
,,*) CC_FOR_BUILD=$CC ;;
|
,,*) CC_FOR_BUILD=$CC ;;
|
||||||
,*,*) CC_FOR_BUILD=$HOST_CC ;;
|
,*,*) CC_FOR_BUILD=$HOST_CC ;;
|
||||||
esac'
|
esac ;'
|
||||||
|
|
||||||
# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
|
# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
|
||||||
# (ghazi@noc.rutgers.edu 1994-08-24)
|
# (ghazi@noc.rutgers.edu 1994-08-24)
|
||||||
@@ -168,21 +180,38 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
# The OS release
|
# The OS release
|
||||||
release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
|
# Debian GNU/NetBSD machines have a different userland, and
|
||||||
|
# thus, need a distinct triplet. However, they do not need
|
||||||
|
# kernel version information, so it can be replaced with a
|
||||||
|
# suitable tag, in the style of linux-gnu.
|
||||||
|
case "${UNAME_VERSION}" in
|
||||||
|
Debian*)
|
||||||
|
release='-gnu'
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
|
||||||
|
;;
|
||||||
|
esac
|
||||||
# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
|
# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
|
||||||
# contains redundant information, the shorter form:
|
# contains redundant information, the shorter form:
|
||||||
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
|
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
|
||||||
echo "${machine}-${os}${release}"
|
echo "${machine}-${os}${release}"
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
amd64:OpenBSD:*:*)
|
||||||
|
echo x86_64-unknown-openbsd${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
amiga:OpenBSD:*:*)
|
amiga:OpenBSD:*:*)
|
||||||
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
arc:OpenBSD:*:*)
|
cats:OpenBSD:*:*)
|
||||||
echo mipsel-unknown-openbsd${UNAME_RELEASE}
|
echo arm-unknown-openbsd${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
hp300:OpenBSD:*:*)
|
hp300:OpenBSD:*:*)
|
||||||
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
luna88k:OpenBSD:*:*)
|
||||||
|
echo m88k-unknown-openbsd${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
mac68k:OpenBSD:*:*)
|
mac68k:OpenBSD:*:*)
|
||||||
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
@@ -198,83 +227,76 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
|||||||
mvmeppc:OpenBSD:*:*)
|
mvmeppc:OpenBSD:*:*)
|
||||||
echo powerpc-unknown-openbsd${UNAME_RELEASE}
|
echo powerpc-unknown-openbsd${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
pmax:OpenBSD:*:*)
|
|
||||||
echo mipsel-unknown-openbsd${UNAME_RELEASE}
|
|
||||||
exit 0 ;;
|
|
||||||
sgi:OpenBSD:*:*)
|
sgi:OpenBSD:*:*)
|
||||||
echo mipseb-unknown-openbsd${UNAME_RELEASE}
|
echo mips64-unknown-openbsd${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
sun3:OpenBSD:*:*)
|
sun3:OpenBSD:*:*)
|
||||||
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
wgrisc:OpenBSD:*:*)
|
|
||||||
echo mipsel-unknown-openbsd${UNAME_RELEASE}
|
|
||||||
exit 0 ;;
|
|
||||||
*:OpenBSD:*:*)
|
*:OpenBSD:*:*)
|
||||||
echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
|
echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
*:ekkoBSD:*:*)
|
||||||
|
echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
macppc:MirBSD:*:*)
|
||||||
|
echo powerppc-unknown-mirbsd${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
*:MirBSD:*:*)
|
||||||
|
echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
alpha:OSF1:*:*)
|
alpha:OSF1:*:*)
|
||||||
if test $UNAME_RELEASE = "V4.0"; then
|
case $UNAME_RELEASE in
|
||||||
|
*4.0)
|
||||||
UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
|
UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
|
||||||
fi
|
;;
|
||||||
|
*5.*)
|
||||||
|
UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
# According to Compaq, /usr/sbin/psrinfo has been available on
|
||||||
|
# OSF/1 and Tru64 systems produced since 1995. I hope that
|
||||||
|
# covers most systems running today. This code pipes the CPU
|
||||||
|
# types through head -n 1, so we only detect the type of CPU 0.
|
||||||
|
ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1`
|
||||||
|
case "$ALPHA_CPU_TYPE" in
|
||||||
|
"EV4 (21064)")
|
||||||
|
UNAME_MACHINE="alpha" ;;
|
||||||
|
"EV4.5 (21064)")
|
||||||
|
UNAME_MACHINE="alpha" ;;
|
||||||
|
"LCA4 (21066/21068)")
|
||||||
|
UNAME_MACHINE="alpha" ;;
|
||||||
|
"EV5 (21164)")
|
||||||
|
UNAME_MACHINE="alphaev5" ;;
|
||||||
|
"EV5.6 (21164A)")
|
||||||
|
UNAME_MACHINE="alphaev56" ;;
|
||||||
|
"EV5.6 (21164PC)")
|
||||||
|
UNAME_MACHINE="alphapca56" ;;
|
||||||
|
"EV5.7 (21164PC)")
|
||||||
|
UNAME_MACHINE="alphapca57" ;;
|
||||||
|
"EV6 (21264)")
|
||||||
|
UNAME_MACHINE="alphaev6" ;;
|
||||||
|
"EV6.7 (21264A)")
|
||||||
|
UNAME_MACHINE="alphaev67" ;;
|
||||||
|
"EV6.8CB (21264C)")
|
||||||
|
UNAME_MACHINE="alphaev68" ;;
|
||||||
|
"EV6.8AL (21264B)")
|
||||||
|
UNAME_MACHINE="alphaev68" ;;
|
||||||
|
"EV6.8CX (21264D)")
|
||||||
|
UNAME_MACHINE="alphaev68" ;;
|
||||||
|
"EV6.9A (21264/EV69A)")
|
||||||
|
UNAME_MACHINE="alphaev69" ;;
|
||||||
|
"EV7 (21364)")
|
||||||
|
UNAME_MACHINE="alphaev7" ;;
|
||||||
|
"EV7.9 (21364A)")
|
||||||
|
UNAME_MACHINE="alphaev79" ;;
|
||||||
|
esac
|
||||||
|
# A Pn.n version is a patched version.
|
||||||
# A Vn.n version is a released version.
|
# A Vn.n version is a released version.
|
||||||
# A Tn.n version is a released field test version.
|
# A Tn.n version is a released field test version.
|
||||||
# A Xn.n version is an unreleased experimental baselevel.
|
# A Xn.n version is an unreleased experimental baselevel.
|
||||||
# 1.2 uses "1.2" for uname -r.
|
# 1.2 uses "1.2" for uname -r.
|
||||||
cat <<EOF >$dummy.s
|
echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
|
||||||
.data
|
|
||||||
\$Lformat:
|
|
||||||
.byte 37,100,45,37,120,10,0 # "%d-%x\n"
|
|
||||||
|
|
||||||
.text
|
|
||||||
.globl main
|
|
||||||
.align 4
|
|
||||||
.ent main
|
|
||||||
main:
|
|
||||||
.frame \$30,16,\$26,0
|
|
||||||
ldgp \$29,0(\$27)
|
|
||||||
.prologue 1
|
|
||||||
.long 0x47e03d80 # implver \$0
|
|
||||||
lda \$2,-1
|
|
||||||
.long 0x47e20c21 # amask \$2,\$1
|
|
||||||
lda \$16,\$Lformat
|
|
||||||
mov \$0,\$17
|
|
||||||
not \$1,\$18
|
|
||||||
jsr \$26,printf
|
|
||||||
ldgp \$29,0(\$26)
|
|
||||||
mov 0,\$16
|
|
||||||
jsr \$26,exit
|
|
||||||
.end main
|
|
||||||
EOF
|
|
||||||
eval $set_cc_for_build
|
|
||||||
$CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null
|
|
||||||
if test "$?" = 0 ; then
|
|
||||||
case `./$dummy` in
|
|
||||||
0-0)
|
|
||||||
UNAME_MACHINE="alpha"
|
|
||||||
;;
|
|
||||||
1-0)
|
|
||||||
UNAME_MACHINE="alphaev5"
|
|
||||||
;;
|
|
||||||
1-1)
|
|
||||||
UNAME_MACHINE="alphaev56"
|
|
||||||
;;
|
|
||||||
1-101)
|
|
||||||
UNAME_MACHINE="alphapca56"
|
|
||||||
;;
|
|
||||||
2-303)
|
|
||||||
UNAME_MACHINE="alphaev6"
|
|
||||||
;;
|
|
||||||
2-307)
|
|
||||||
UNAME_MACHINE="alphaev67"
|
|
||||||
;;
|
|
||||||
2-1307)
|
|
||||||
UNAME_MACHINE="alphaev68"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
rm -f $dummy.s $dummy
|
|
||||||
echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
|
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
Alpha\ *:Windows_NT*:*)
|
Alpha\ *:Windows_NT*:*)
|
||||||
# How do we know it's Interix rather than the generic POSIX subsystem?
|
# How do we know it's Interix rather than the generic POSIX subsystem?
|
||||||
@@ -297,6 +319,12 @@ EOF
|
|||||||
*:OS/390:*:*)
|
*:OS/390:*:*)
|
||||||
echo i370-ibm-openedition
|
echo i370-ibm-openedition
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
*:z/VM:*:*)
|
||||||
|
echo s390-ibm-zvmoe
|
||||||
|
exit 0 ;;
|
||||||
|
*:OS400:*:*)
|
||||||
|
echo powerpc-ibm-os400
|
||||||
|
exit 0 ;;
|
||||||
arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
|
arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
|
||||||
echo arm-acorn-riscix${UNAME_RELEASE}
|
echo arm-acorn-riscix${UNAME_RELEASE}
|
||||||
exit 0;;
|
exit 0;;
|
||||||
@@ -314,6 +342,13 @@ EOF
|
|||||||
NILE*:*:*:dcosx)
|
NILE*:*:*:dcosx)
|
||||||
echo pyramid-pyramid-svr4
|
echo pyramid-pyramid-svr4
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
DRS?6000:unix:4.0:6*)
|
||||||
|
echo sparc-icl-nx6
|
||||||
|
exit 0 ;;
|
||||||
|
DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
|
||||||
|
case `/usr/bin/uname -p` in
|
||||||
|
sparc) echo sparc-icl-nx7 && exit 0 ;;
|
||||||
|
esac ;;
|
||||||
sun4H:SunOS:5.*:*)
|
sun4H:SunOS:5.*:*)
|
||||||
echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
@@ -382,6 +417,9 @@ EOF
|
|||||||
*:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
|
*:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
|
||||||
echo m68k-unknown-mint${UNAME_RELEASE}
|
echo m68k-unknown-mint${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
m68k:machten:*:*)
|
||||||
|
echo m68k-apple-machten${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
powerpc:machten:*:*)
|
powerpc:machten:*:*)
|
||||||
echo powerpc-apple-machten${UNAME_RELEASE}
|
echo powerpc-apple-machten${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
@@ -420,16 +458,18 @@ EOF
|
|||||||
exit (-1);
|
exit (-1);
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
$CC_FOR_BUILD $dummy.c -o $dummy \
|
$CC_FOR_BUILD -o $dummy $dummy.c \
|
||||||
&& ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
|
&& $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
|
||||||
&& rm -f $dummy.c $dummy && exit 0
|
&& exit 0
|
||||||
rm -f $dummy.c $dummy
|
|
||||||
echo mips-mips-riscos${UNAME_RELEASE}
|
echo mips-mips-riscos${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
Motorola:PowerMAX_OS:*:*)
|
Motorola:PowerMAX_OS:*:*)
|
||||||
echo powerpc-motorola-powermax
|
echo powerpc-motorola-powermax
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
Night_Hawk:*:*:PowerMAX_OS)
|
Motorola:*:4.3:PL8-*)
|
||||||
|
echo powerpc-harris-powermax
|
||||||
|
exit 0 ;;
|
||||||
|
Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
|
||||||
echo powerpc-harris-powermax
|
echo powerpc-harris-powermax
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
Night_Hawk:Power_UNIX:*:*)
|
Night_Hawk:Power_UNIX:*:*)
|
||||||
@@ -504,8 +544,7 @@ EOF
|
|||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
$CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
|
$CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
|
||||||
rm -f $dummy.c $dummy
|
|
||||||
echo rs6000-ibm-aix3.2.5
|
echo rs6000-ibm-aix3.2.5
|
||||||
elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
|
elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
|
||||||
echo rs6000-ibm-aix3.2.4
|
echo rs6000-ibm-aix3.2.4
|
||||||
@@ -603,11 +642,21 @@ EOF
|
|||||||
exit (0);
|
exit (0);
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
(CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null) && HP_ARCH=`./$dummy`
|
(CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
|
||||||
if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi
|
test -z "$HP_ARCH" && HP_ARCH=hppa
|
||||||
rm -f $dummy.c $dummy
|
|
||||||
fi ;;
|
fi ;;
|
||||||
esac
|
esac
|
||||||
|
if [ ${HP_ARCH} = "hppa2.0w" ]
|
||||||
|
then
|
||||||
|
# avoid double evaluation of $set_cc_for_build
|
||||||
|
test -n "$CC_FOR_BUILD" || eval $set_cc_for_build
|
||||||
|
if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null
|
||||||
|
then
|
||||||
|
HP_ARCH="hppa2.0w"
|
||||||
|
else
|
||||||
|
HP_ARCH="hppa64"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
echo ${HP_ARCH}-hp-hpux${HPUX_REV}
|
echo ${HP_ARCH}-hp-hpux${HPUX_REV}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
ia64:HP-UX:*:*)
|
ia64:HP-UX:*:*)
|
||||||
@@ -641,8 +690,7 @@ EOF
|
|||||||
exit (0);
|
exit (0);
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
$CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
|
$CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
|
||||||
rm -f $dummy.c $dummy
|
|
||||||
echo unknown-hitachi-hiuxwe2
|
echo unknown-hitachi-hiuxwe2
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
|
9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
|
||||||
@@ -700,21 +748,26 @@ EOF
|
|||||||
CRAY*TS:*:*:*)
|
CRAY*TS:*:*:*)
|
||||||
echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
CRAY*T3D:*:*:*)
|
|
||||||
echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
|
||||||
exit 0 ;;
|
|
||||||
CRAY*T3E:*:*:*)
|
CRAY*T3E:*:*:*)
|
||||||
echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
CRAY*SV1:*:*:*)
|
CRAY*SV1:*:*:*)
|
||||||
echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
*:UNICOS/mp:*:*)
|
||||||
|
echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
||||||
|
exit 0 ;;
|
||||||
F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
|
F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
|
||||||
FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
|
FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
|
||||||
FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
|
FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
|
||||||
FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
|
FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
|
||||||
echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
|
echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
5000:UNIX_System_V:4.*:*)
|
||||||
|
FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
|
||||||
|
FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
|
||||||
|
echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
|
||||||
|
exit 0 ;;
|
||||||
i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
|
i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
|
||||||
echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
|
echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
@@ -736,14 +789,17 @@ EOF
|
|||||||
i*:PW*:*)
|
i*:PW*:*)
|
||||||
echo ${UNAME_MACHINE}-pc-pw32
|
echo ${UNAME_MACHINE}-pc-pw32
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
x86:Interix*:3*)
|
x86:Interix*:[34]*)
|
||||||
echo i386-pc-interix3
|
echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//'
|
||||||
|
exit 0 ;;
|
||||||
|
[345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
|
||||||
|
echo i${UNAME_MACHINE}-pc-mks
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
|
i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
|
||||||
# How do we know it's Interix rather than the generic POSIX subsystem?
|
# How do we know it's Interix rather than the generic POSIX subsystem?
|
||||||
# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
|
# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
|
||||||
# UNAME_MACHINE based on the output of uname instead of i386?
|
# UNAME_MACHINE based on the output of uname instead of i386?
|
||||||
echo i386-pc-interix
|
echo i586-pc-interix
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
i*:UWIN*:*)
|
i*:UWIN*:*)
|
||||||
echo ${UNAME_MACHINE}-pc-uwin
|
echo ${UNAME_MACHINE}-pc-uwin
|
||||||
@@ -755,17 +811,34 @@ EOF
|
|||||||
echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
*:GNU:*:*)
|
*:GNU:*:*)
|
||||||
|
# the GNU system
|
||||||
echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
|
echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
*:GNU/*:*:*)
|
||||||
|
# other systems with GNU libc and userland
|
||||||
|
echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
|
||||||
|
exit 0 ;;
|
||||||
i*86:Minix:*:*)
|
i*86:Minix:*:*)
|
||||||
echo ${UNAME_MACHINE}-pc-minix
|
echo ${UNAME_MACHINE}-pc-minix
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
arm*:Linux:*:*)
|
arm*:Linux:*:*)
|
||||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
cris:Linux:*:*)
|
||||||
|
echo cris-axis-linux-gnu
|
||||||
|
exit 0 ;;
|
||||||
|
crisv32:Linux:*:*)
|
||||||
|
echo crisv32-axis-linux-gnu
|
||||||
|
exit 0 ;;
|
||||||
|
frv:Linux:*:*)
|
||||||
|
echo frv-unknown-linux-gnu
|
||||||
|
exit 0 ;;
|
||||||
ia64:Linux:*:*)
|
ia64:Linux:*:*)
|
||||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
m32r*:Linux:*:*)
|
||||||
|
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||||
|
exit 0 ;;
|
||||||
m68*:Linux:*:*)
|
m68*:Linux:*:*)
|
||||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
@@ -786,8 +859,26 @@ EOF
|
|||||||
#endif
|
#endif
|
||||||
EOF
|
EOF
|
||||||
eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
|
eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
|
||||||
rm -f $dummy.c
|
test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
|
||||||
test x"${CPU}" != x && echo "${CPU}-pc-linux-gnu" && exit 0
|
;;
|
||||||
|
mips64:Linux:*:*)
|
||||||
|
eval $set_cc_for_build
|
||||||
|
sed 's/^ //' << EOF >$dummy.c
|
||||||
|
#undef CPU
|
||||||
|
#undef mips64
|
||||||
|
#undef mips64el
|
||||||
|
#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
|
||||||
|
CPU=mips64el
|
||||||
|
#else
|
||||||
|
#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
|
||||||
|
CPU=mips64
|
||||||
|
#else
|
||||||
|
CPU=
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
EOF
|
||||||
|
eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
|
||||||
|
test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
|
||||||
;;
|
;;
|
||||||
ppc:Linux:*:*)
|
ppc:Linux:*:*)
|
||||||
echo powerpc-unknown-linux-gnu
|
echo powerpc-unknown-linux-gnu
|
||||||
@@ -823,6 +914,9 @@ EOF
|
|||||||
s390:Linux:*:* | s390x:Linux:*:*)
|
s390:Linux:*:* | s390x:Linux:*:*)
|
||||||
echo ${UNAME_MACHINE}-ibm-linux
|
echo ${UNAME_MACHINE}-ibm-linux
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
sh64*:Linux:*:*)
|
||||||
|
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||||
|
exit 0 ;;
|
||||||
sh*:Linux:*:*)
|
sh*:Linux:*:*)
|
||||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
@@ -849,7 +943,7 @@ EOF
|
|||||||
;;
|
;;
|
||||||
a.out-i386-linux)
|
a.out-i386-linux)
|
||||||
echo "${UNAME_MACHINE}-pc-linux-gnuaout"
|
echo "${UNAME_MACHINE}-pc-linux-gnuaout"
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
coff-i386)
|
coff-i386)
|
||||||
echo "${UNAME_MACHINE}-pc-linux-gnucoff"
|
echo "${UNAME_MACHINE}-pc-linux-gnucoff"
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
@@ -880,9 +974,11 @@ EOF
|
|||||||
LIBC=gnuaout
|
LIBC=gnuaout
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef __dietlibc__
|
||||||
|
LIBC=dietlibc
|
||||||
|
#endif
|
||||||
EOF
|
EOF
|
||||||
eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
|
eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
|
||||||
rm -f $dummy.c
|
|
||||||
test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0
|
test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0
|
||||||
test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
|
test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
|
||||||
;;
|
;;
|
||||||
@@ -900,6 +996,26 @@ EOF
|
|||||||
# Use sysv4.2uw... so that sysv4* matches it.
|
# Use sysv4.2uw... so that sysv4* matches it.
|
||||||
echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
|
echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
i*86:OS/2:*:*)
|
||||||
|
# If we were able to find `uname', then EMX Unix compatibility
|
||||||
|
# is probably installed.
|
||||||
|
echo ${UNAME_MACHINE}-pc-os2-emx
|
||||||
|
exit 0 ;;
|
||||||
|
i*86:XTS-300:*:STOP)
|
||||||
|
echo ${UNAME_MACHINE}-unknown-stop
|
||||||
|
exit 0 ;;
|
||||||
|
i*86:atheos:*:*)
|
||||||
|
echo ${UNAME_MACHINE}-unknown-atheos
|
||||||
|
exit 0 ;;
|
||||||
|
i*86:syllable:*:*)
|
||||||
|
echo ${UNAME_MACHINE}-pc-syllable
|
||||||
|
exit 0 ;;
|
||||||
|
i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
|
||||||
|
echo i386-unknown-lynxos${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
|
i*86:*DOS:*:*)
|
||||||
|
echo ${UNAME_MACHINE}-pc-msdosdjgpp
|
||||||
|
exit 0 ;;
|
||||||
i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
|
i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
|
||||||
UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
|
UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
|
||||||
if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
|
if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
|
||||||
@@ -934,9 +1050,6 @@ EOF
|
|||||||
echo ${UNAME_MACHINE}-pc-sysv32
|
echo ${UNAME_MACHINE}-pc-sysv32
|
||||||
fi
|
fi
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
i*86:*DOS:*:*)
|
|
||||||
echo ${UNAME_MACHINE}-pc-msdosdjgpp
|
|
||||||
exit 0 ;;
|
|
||||||
pc:*:*:*)
|
pc:*:*:*)
|
||||||
# Left here for compatibility:
|
# Left here for compatibility:
|
||||||
# uname -m prints for DJGPP always 'pc', but it prints nothing about
|
# uname -m prints for DJGPP always 'pc', but it prints nothing about
|
||||||
@@ -960,9 +1073,15 @@ EOF
|
|||||||
# "miniframe"
|
# "miniframe"
|
||||||
echo m68010-convergent-sysv
|
echo m68010-convergent-sysv
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
M68*:*:R3V[567]*:*)
|
mc68k:UNIX:SYSTEM5:3.51m)
|
||||||
|
echo m68k-convergent-sysv
|
||||||
|
exit 0 ;;
|
||||||
|
M680?0:D-NIX:5.3:*)
|
||||||
|
echo m68k-diab-dnix
|
||||||
|
exit 0 ;;
|
||||||
|
M68*:*:R3V[5678]*:*)
|
||||||
test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
|
test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
|
||||||
3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0)
|
3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
|
||||||
OS_REL=''
|
OS_REL=''
|
||||||
test -r /etc/.relid \
|
test -r /etc/.relid \
|
||||||
&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
|
&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
|
||||||
@@ -979,9 +1098,6 @@ EOF
|
|||||||
mc68030:UNIX_System_V:4.*:*)
|
mc68030:UNIX_System_V:4.*:*)
|
||||||
echo m68k-atari-sysv4
|
echo m68k-atari-sysv4
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
|
|
||||||
echo i386-unknown-lynxos${UNAME_RELEASE}
|
|
||||||
exit 0 ;;
|
|
||||||
TSUNAMI:LynxOS:2.*:*)
|
TSUNAMI:LynxOS:2.*:*)
|
||||||
echo sparc-unknown-lynxos${UNAME_RELEASE}
|
echo sparc-unknown-lynxos${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
@@ -1053,6 +1169,9 @@ EOF
|
|||||||
SX-5:SUPER-UX:*:*)
|
SX-5:SUPER-UX:*:*)
|
||||||
echo sx5-nec-superux${UNAME_RELEASE}
|
echo sx5-nec-superux${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
|
SX-6:SUPER-UX:*:*)
|
||||||
|
echo sx6-nec-superux${UNAME_RELEASE}
|
||||||
|
exit 0 ;;
|
||||||
Power*:Rhapsody:*:*)
|
Power*:Rhapsody:*:*)
|
||||||
echo powerpc-apple-rhapsody${UNAME_RELEASE}
|
echo powerpc-apple-rhapsody${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
@@ -1060,7 +1179,12 @@ EOF
|
|||||||
echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
|
echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
*:Darwin:*:*)
|
*:Darwin:*:*)
|
||||||
echo `uname -p`-apple-darwin${UNAME_RELEASE}
|
UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
|
||||||
|
case $UNAME_PROCESSOR in
|
||||||
|
*86) UNAME_PROCESSOR=i686 ;;
|
||||||
|
unknown) UNAME_PROCESSOR=powerpc ;;
|
||||||
|
esac
|
||||||
|
echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
*:procnto*:*:* | *:QNX:[0123456789]*:*)
|
*:procnto*:*:* | *:QNX:[0123456789]*:*)
|
||||||
UNAME_PROCESSOR=`uname -p`
|
UNAME_PROCESSOR=`uname -p`
|
||||||
@@ -1073,7 +1197,7 @@ EOF
|
|||||||
*:QNX:*:4*)
|
*:QNX:*:4*)
|
||||||
echo i386-pc-qnx
|
echo i386-pc-qnx
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
NSR-[GKLNPTVW]:NONSTOP_KERNEL:*:*)
|
NSR-?:NONSTOP_KERNEL:*:*)
|
||||||
echo nsr-tandem-nsk${UNAME_RELEASE}
|
echo nsr-tandem-nsk${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
*:NonStop-UX:*:*)
|
*:NonStop-UX:*:*)
|
||||||
@@ -1096,11 +1220,6 @@ EOF
|
|||||||
fi
|
fi
|
||||||
echo ${UNAME_MACHINE}-unknown-plan9
|
echo ${UNAME_MACHINE}-unknown-plan9
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
i*86:OS/2:*:*)
|
|
||||||
# If we were able to find `uname', then EMX Unix compatibility
|
|
||||||
# is probably installed.
|
|
||||||
echo ${UNAME_MACHINE}-pc-os2-emx
|
|
||||||
exit 0 ;;
|
|
||||||
*:TOPS-10:*:*)
|
*:TOPS-10:*:*)
|
||||||
echo pdp10-unknown-tops10
|
echo pdp10-unknown-tops10
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
@@ -1119,11 +1238,21 @@ EOF
|
|||||||
*:ITS:*:*)
|
*:ITS:*:*)
|
||||||
echo pdp10-unknown-its
|
echo pdp10-unknown-its
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
i*86:XTS-300:*:STOP)
|
SEI:*:*:SEIUX)
|
||||||
echo ${UNAME_MACHINE}-unknown-stop
|
echo mips-sei-seiux${UNAME_RELEASE}
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
i*86:atheos:*:*)
|
*:DragonFly:*:*)
|
||||||
echo ${UNAME_MACHINE}-unknown-atheos
|
echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
|
||||||
|
exit 0 ;;
|
||||||
|
*:*VMS:*:*)
|
||||||
|
UNAME_MACHINE=`(uname -p) 2>/dev/null`
|
||||||
|
case "${UNAME_MACHINE}" in
|
||||||
|
A*) echo alpha-dec-vms && exit 0 ;;
|
||||||
|
I*) echo ia64-dec-vms && exit 0 ;;
|
||||||
|
V*) echo vax-dec-vms && exit 0 ;;
|
||||||
|
esac ;;
|
||||||
|
*:XENIX:*:SysV)
|
||||||
|
echo i386-pc-xenix
|
||||||
exit 0 ;;
|
exit 0 ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
@@ -1245,8 +1374,7 @@ main ()
|
|||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm -f $dummy.c $dummy && exit 0
|
$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0
|
||||||
rm -f $dummy.c $dummy
|
|
||||||
|
|
||||||
# Apollos put the system type in the environment.
|
# Apollos put the system type in the environment.
|
||||||
|
|
||||||
|
236
config.sub
vendored
236
config.sub
vendored
@@ -1,9 +1,9 @@
|
|||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
# Configuration validation subroutine script.
|
# Configuration validation subroutine script.
|
||||||
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
|
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
|
||||||
# 2000, 2001, 2002 Free Software Foundation, Inc.
|
# 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
|
||||||
|
|
||||||
timestamp='2002-06-21'
|
timestamp='2004-11-30'
|
||||||
|
|
||||||
# This file is (in principle) common to ALL GNU software.
|
# This file is (in principle) common to ALL GNU software.
|
||||||
# The presence of a machine in this file suggests that SOME GNU software
|
# The presence of a machine in this file suggests that SOME GNU software
|
||||||
@@ -70,7 +70,7 @@ Report bugs and patches to <config-patches@gnu.org>."
|
|||||||
version="\
|
version="\
|
||||||
GNU config.sub ($timestamp)
|
GNU config.sub ($timestamp)
|
||||||
|
|
||||||
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
|
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
|
||||||
Free Software Foundation, Inc.
|
Free Software Foundation, Inc.
|
||||||
|
|
||||||
This is free software; see the source for copying conditions. There is NO
|
This is free software; see the source for copying conditions. There is NO
|
||||||
@@ -118,7 +118,8 @@ esac
|
|||||||
# Here we must recognize all the valid KERNEL-OS combinations.
|
# Here we must recognize all the valid KERNEL-OS combinations.
|
||||||
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
|
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
|
||||||
case $maybe_os in
|
case $maybe_os in
|
||||||
nto-qnx* | linux-gnu* | storm-chaos* | os2-emx* | windows32-* | rtmk-nova*)
|
nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \
|
||||||
|
kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
|
||||||
os=-$maybe_os
|
os=-$maybe_os
|
||||||
basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
|
basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
|
||||||
;;
|
;;
|
||||||
@@ -144,7 +145,7 @@ case $os in
|
|||||||
-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
|
-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
|
||||||
-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
|
-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
|
||||||
-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
|
-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
|
||||||
-apple | -axis)
|
-apple | -axis | -knuth | -cray)
|
||||||
os=
|
os=
|
||||||
basic_machine=$1
|
basic_machine=$1
|
||||||
;;
|
;;
|
||||||
@@ -228,39 +229,45 @@ case $basic_machine in
|
|||||||
| a29k \
|
| a29k \
|
||||||
| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
|
| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
|
||||||
| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
|
| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
|
||||||
|
| am33_2.0 \
|
||||||
| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
|
| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
|
||||||
| c4x | clipper \
|
| c4x | clipper \
|
||||||
| d10v | d30v | dlx | dsp16xx \
|
| d10v | d30v | dlx | dsp16xx \
|
||||||
| fr30 | frv \
|
| fr30 | frv \
|
||||||
| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
|
| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
|
||||||
| i370 | i860 | i960 | ia64 \
|
| i370 | i860 | i960 | ia64 \
|
||||||
| ip2k \
|
| ip2k | iq2000 \
|
||||||
| m32r | m68000 | m68k | m88k | mcore \
|
| m32r | m32rle | m68000 | m68k | m88k | mcore \
|
||||||
| mips | mipsbe | mipseb | mipsel | mipsle \
|
| mips | mipsbe | mipseb | mipsel | mipsle \
|
||||||
| mips16 \
|
| mips16 \
|
||||||
| mips64 | mips64el \
|
| mips64 | mips64el \
|
||||||
|
| mips64vr | mips64vrel \
|
||||||
| mips64orion | mips64orionel \
|
| mips64orion | mips64orionel \
|
||||||
| mips64vr4100 | mips64vr4100el \
|
| mips64vr4100 | mips64vr4100el \
|
||||||
| mips64vr4300 | mips64vr4300el \
|
| mips64vr4300 | mips64vr4300el \
|
||||||
| mips64vr5000 | mips64vr5000el \
|
| mips64vr5000 | mips64vr5000el \
|
||||||
| mipsisa32 | mipsisa32el \
|
| mipsisa32 | mipsisa32el \
|
||||||
|
| mipsisa32r2 | mipsisa32r2el \
|
||||||
| mipsisa64 | mipsisa64el \
|
| mipsisa64 | mipsisa64el \
|
||||||
|
| mipsisa64r2 | mipsisa64r2el \
|
||||||
| mipsisa64sb1 | mipsisa64sb1el \
|
| mipsisa64sb1 | mipsisa64sb1el \
|
||||||
|
| mipsisa64sr71k | mipsisa64sr71kel \
|
||||||
| mipstx39 | mipstx39el \
|
| mipstx39 | mipstx39el \
|
||||||
| mn10200 | mn10300 \
|
| mn10200 | mn10300 \
|
||||||
|
| msp430 \
|
||||||
| ns16k | ns32k \
|
| ns16k | ns32k \
|
||||||
| openrisc | or32 \
|
| openrisc | or32 \
|
||||||
| pdp10 | pdp11 | pj | pjl \
|
| pdp10 | pdp11 | pj | pjl \
|
||||||
| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
|
| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
|
||||||
| pyramid \
|
| pyramid \
|
||||||
| sh | sh[1234] | sh3e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
|
| sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
|
||||||
| sh64 | sh64le \
|
| sh64 | sh64le \
|
||||||
| sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \
|
| sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv8 | sparcv9 | sparcv9b \
|
||||||
| strongarm \
|
| strongarm \
|
||||||
| tahoe | thumb | tic80 | tron \
|
| tahoe | thumb | tic4x | tic80 | tron \
|
||||||
| v850 | v850e \
|
| v850 | v850e \
|
||||||
| we32k \
|
| we32k \
|
||||||
| x86 | xscale | xstormy16 | xtensa \
|
| x86 | xscale | xscalee[bl] | xstormy16 | xtensa \
|
||||||
| z8k)
|
| z8k)
|
||||||
basic_machine=$basic_machine-unknown
|
basic_machine=$basic_machine-unknown
|
||||||
;;
|
;;
|
||||||
@@ -292,44 +299,52 @@ case $basic_machine in
|
|||||||
| arm-* | armbe-* | armle-* | armeb-* | armv*-* \
|
| arm-* | armbe-* | armle-* | armeb-* | armv*-* \
|
||||||
| avr-* \
|
| avr-* \
|
||||||
| bs2000-* \
|
| bs2000-* \
|
||||||
| c[123]* | c30-* | [cjt]90-* | c54x-* \
|
| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
|
||||||
| clipper-* | cydra-* \
|
| clipper-* | craynv-* | cydra-* \
|
||||||
| d10v-* | d30v-* | dlx-* \
|
| d10v-* | d30v-* | dlx-* \
|
||||||
| elxsi-* \
|
| elxsi-* \
|
||||||
| f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
|
| f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
|
||||||
| h8300-* | h8500-* \
|
| h8300-* | h8500-* \
|
||||||
| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
|
| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
|
||||||
| i*86-* | i860-* | i960-* | ia64-* \
|
| i*86-* | i860-* | i960-* | ia64-* \
|
||||||
| ip2k-* \
|
| ip2k-* | iq2000-* \
|
||||||
| m32r-* \
|
| m32r-* | m32rle-* \
|
||||||
| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
|
| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
|
||||||
| m88110-* | m88k-* | mcore-* \
|
| m88110-* | m88k-* | mcore-* \
|
||||||
| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
|
| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
|
||||||
| mips16-* \
|
| mips16-* \
|
||||||
| mips64-* | mips64el-* \
|
| mips64-* | mips64el-* \
|
||||||
|
| mips64vr-* | mips64vrel-* \
|
||||||
| mips64orion-* | mips64orionel-* \
|
| mips64orion-* | mips64orionel-* \
|
||||||
| mips64vr4100-* | mips64vr4100el-* \
|
| mips64vr4100-* | mips64vr4100el-* \
|
||||||
| mips64vr4300-* | mips64vr4300el-* \
|
| mips64vr4300-* | mips64vr4300el-* \
|
||||||
| mips64vr5000-* | mips64vr5000el-* \
|
| mips64vr5000-* | mips64vr5000el-* \
|
||||||
| mipsisa32-* | mipsisa32el-* \
|
| mipsisa32-* | mipsisa32el-* \
|
||||||
|
| mipsisa32r2-* | mipsisa32r2el-* \
|
||||||
| mipsisa64-* | mipsisa64el-* \
|
| mipsisa64-* | mipsisa64el-* \
|
||||||
|
| mipsisa64r2-* | mipsisa64r2el-* \
|
||||||
| mipsisa64sb1-* | mipsisa64sb1el-* \
|
| mipsisa64sb1-* | mipsisa64sb1el-* \
|
||||||
| mipstx39 | mipstx39el \
|
| mipsisa64sr71k-* | mipsisa64sr71kel-* \
|
||||||
|
| mipstx39-* | mipstx39el-* \
|
||||||
|
| mmix-* \
|
||||||
|
| msp430-* \
|
||||||
| none-* | np1-* | ns16k-* | ns32k-* \
|
| none-* | np1-* | ns16k-* | ns32k-* \
|
||||||
| orion-* \
|
| orion-* \
|
||||||
| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
|
| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
|
||||||
| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
|
| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
|
||||||
| pyramid-* \
|
| pyramid-* \
|
||||||
| romp-* | rs6000-* \
|
| romp-* | rs6000-* \
|
||||||
| sh-* | sh[1234]-* | sh3e-* | sh[34]eb-* | shbe-* \
|
| sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \
|
||||||
| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
|
| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
|
||||||
| sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
|
| sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
|
||||||
| sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
|
| sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
|
||||||
| tahoe-* | thumb-* | tic30-* | tic54x-* | tic80-* | tron-* \
|
| tahoe-* | thumb-* \
|
||||||
|
| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
|
||||||
|
| tron-* \
|
||||||
| v850-* | v850e-* | vax-* \
|
| v850-* | v850e-* | vax-* \
|
||||||
| we32k-* \
|
| we32k-* \
|
||||||
| x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \
|
| x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \
|
||||||
| xtensa-* \
|
| xstormy16-* | xtensa-* \
|
||||||
| ymp-* \
|
| ymp-* \
|
||||||
| z8k-*)
|
| z8k-*)
|
||||||
;;
|
;;
|
||||||
@@ -349,6 +364,9 @@ case $basic_machine in
|
|||||||
basic_machine=a29k-amd
|
basic_machine=a29k-amd
|
||||||
os=-udi
|
os=-udi
|
||||||
;;
|
;;
|
||||||
|
abacus)
|
||||||
|
basic_machine=abacus-unknown
|
||||||
|
;;
|
||||||
adobe68k)
|
adobe68k)
|
||||||
basic_machine=m68010-adobe
|
basic_machine=m68010-adobe
|
||||||
os=-scout
|
os=-scout
|
||||||
@@ -363,6 +381,12 @@ case $basic_machine in
|
|||||||
basic_machine=a29k-none
|
basic_machine=a29k-none
|
||||||
os=-bsd
|
os=-bsd
|
||||||
;;
|
;;
|
||||||
|
amd64)
|
||||||
|
basic_machine=x86_64-pc
|
||||||
|
;;
|
||||||
|
amd64-*)
|
||||||
|
basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||||
|
;;
|
||||||
amdahl)
|
amdahl)
|
||||||
basic_machine=580-amdahl
|
basic_machine=580-amdahl
|
||||||
os=-sysv
|
os=-sysv
|
||||||
@@ -422,12 +446,27 @@ case $basic_machine in
|
|||||||
basic_machine=j90-cray
|
basic_machine=j90-cray
|
||||||
os=-unicos
|
os=-unicos
|
||||||
;;
|
;;
|
||||||
|
craynv)
|
||||||
|
basic_machine=craynv-cray
|
||||||
|
os=-unicosmp
|
||||||
|
;;
|
||||||
|
cr16c)
|
||||||
|
basic_machine=cr16c-unknown
|
||||||
|
os=-elf
|
||||||
|
;;
|
||||||
crds | unos)
|
crds | unos)
|
||||||
basic_machine=m68k-crds
|
basic_machine=m68k-crds
|
||||||
;;
|
;;
|
||||||
|
crisv32 | crisv32-* | etraxfs*)
|
||||||
|
basic_machine=crisv32-axis
|
||||||
|
;;
|
||||||
cris | cris-* | etrax*)
|
cris | cris-* | etrax*)
|
||||||
basic_machine=cris-axis
|
basic_machine=cris-axis
|
||||||
;;
|
;;
|
||||||
|
crx)
|
||||||
|
basic_machine=crx-unknown
|
||||||
|
os=-elf
|
||||||
|
;;
|
||||||
da30 | da30-*)
|
da30 | da30-*)
|
||||||
basic_machine=m68k-da30
|
basic_machine=m68k-da30
|
||||||
;;
|
;;
|
||||||
@@ -450,6 +489,10 @@ case $basic_machine in
|
|||||||
basic_machine=m88k-motorola
|
basic_machine=m88k-motorola
|
||||||
os=-sysv3
|
os=-sysv3
|
||||||
;;
|
;;
|
||||||
|
djgpp)
|
||||||
|
basic_machine=i586-pc
|
||||||
|
os=-msdosdjgpp
|
||||||
|
;;
|
||||||
dpx20 | dpx20-*)
|
dpx20 | dpx20-*)
|
||||||
basic_machine=rs6000-bull
|
basic_machine=rs6000-bull
|
||||||
os=-bosx
|
os=-bosx
|
||||||
@@ -628,10 +671,6 @@ case $basic_machine in
|
|||||||
mips3*)
|
mips3*)
|
||||||
basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
|
basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
|
||||||
;;
|
;;
|
||||||
mmix*)
|
|
||||||
basic_machine=mmix-knuth
|
|
||||||
os=-mmixware
|
|
||||||
;;
|
|
||||||
monitor)
|
monitor)
|
||||||
basic_machine=m68k-rom68k
|
basic_machine=m68k-rom68k
|
||||||
os=-coff
|
os=-coff
|
||||||
@@ -723,6 +762,10 @@ case $basic_machine in
|
|||||||
basic_machine=or32-unknown
|
basic_machine=or32-unknown
|
||||||
os=-coff
|
os=-coff
|
||||||
;;
|
;;
|
||||||
|
os400)
|
||||||
|
basic_machine=powerpc-ibm
|
||||||
|
os=-os400
|
||||||
|
;;
|
||||||
OSE68000 | ose68000)
|
OSE68000 | ose68000)
|
||||||
basic_machine=m68000-ericsson
|
basic_machine=m68000-ericsson
|
||||||
os=-ose
|
os=-ose
|
||||||
@@ -745,49 +788,55 @@ case $basic_machine in
|
|||||||
pbb)
|
pbb)
|
||||||
basic_machine=m68k-tti
|
basic_machine=m68k-tti
|
||||||
;;
|
;;
|
||||||
pc532 | pc532-*)
|
pc532 | pc532-*)
|
||||||
basic_machine=ns32k-pc532
|
basic_machine=ns32k-pc532
|
||||||
;;
|
;;
|
||||||
pentium | p5 | k5 | k6 | nexgen | viac3)
|
pentium | p5 | k5 | k6 | nexgen | viac3)
|
||||||
basic_machine=i586-pc
|
basic_machine=i586-pc
|
||||||
;;
|
;;
|
||||||
pentiumpro | p6 | 6x86 | athlon)
|
pentiumpro | p6 | 6x86 | athlon | athlon_*)
|
||||||
basic_machine=i686-pc
|
basic_machine=i686-pc
|
||||||
;;
|
;;
|
||||||
pentiumii | pentium2)
|
pentiumii | pentium2 | pentiumiii | pentium3)
|
||||||
basic_machine=i686-pc
|
basic_machine=i686-pc
|
||||||
;;
|
;;
|
||||||
|
pentium4)
|
||||||
|
basic_machine=i786-pc
|
||||||
|
;;
|
||||||
pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
|
pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
|
||||||
basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
|
basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||||
;;
|
;;
|
||||||
pentiumpro-* | p6-* | 6x86-* | athlon-*)
|
pentiumpro-* | p6-* | 6x86-* | athlon-*)
|
||||||
basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
|
basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||||
;;
|
;;
|
||||||
pentiumii-* | pentium2-*)
|
pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
|
||||||
basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
|
basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||||
;;
|
;;
|
||||||
|
pentium4-*)
|
||||||
|
basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||||
|
;;
|
||||||
pn)
|
pn)
|
||||||
basic_machine=pn-gould
|
basic_machine=pn-gould
|
||||||
;;
|
;;
|
||||||
power) basic_machine=power-ibm
|
power) basic_machine=power-ibm
|
||||||
;;
|
;;
|
||||||
ppc) basic_machine=powerpc-unknown
|
ppc) basic_machine=powerpc-unknown
|
||||||
;;
|
;;
|
||||||
ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
|
ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||||
;;
|
;;
|
||||||
ppcle | powerpclittle | ppc-le | powerpc-little)
|
ppcle | powerpclittle | ppc-le | powerpc-little)
|
||||||
basic_machine=powerpcle-unknown
|
basic_machine=powerpcle-unknown
|
||||||
;;
|
;;
|
||||||
ppcle-* | powerpclittle-*)
|
ppcle-* | powerpclittle-*)
|
||||||
basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
|
basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||||
;;
|
;;
|
||||||
ppc64) basic_machine=powerpc64-unknown
|
ppc64) basic_machine=powerpc64-unknown
|
||||||
;;
|
;;
|
||||||
ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
|
ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||||
;;
|
;;
|
||||||
ppc64le | powerpc64little | ppc64-le | powerpc64-little)
|
ppc64le | powerpc64little | ppc64-le | powerpc64-little)
|
||||||
basic_machine=powerpc64le-unknown
|
basic_machine=powerpc64le-unknown
|
||||||
;;
|
;;
|
||||||
ppc64le-* | powerpc64little-*)
|
ppc64le-* | powerpc64little-*)
|
||||||
basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
|
basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||||
;;
|
;;
|
||||||
@@ -818,6 +867,16 @@ case $basic_machine in
|
|||||||
basic_machine=a29k-amd
|
basic_machine=a29k-amd
|
||||||
os=-udi
|
os=-udi
|
||||||
;;
|
;;
|
||||||
|
sb1)
|
||||||
|
basic_machine=mipsisa64sb1-unknown
|
||||||
|
;;
|
||||||
|
sb1el)
|
||||||
|
basic_machine=mipsisa64sb1el-unknown
|
||||||
|
;;
|
||||||
|
sei)
|
||||||
|
basic_machine=mips-sei
|
||||||
|
os=-seiux
|
||||||
|
;;
|
||||||
sequent)
|
sequent)
|
||||||
basic_machine=i386-sequent
|
basic_machine=i386-sequent
|
||||||
;;
|
;;
|
||||||
@@ -825,6 +884,9 @@ case $basic_machine in
|
|||||||
basic_machine=sh-hitachi
|
basic_machine=sh-hitachi
|
||||||
os=-hms
|
os=-hms
|
||||||
;;
|
;;
|
||||||
|
sh64)
|
||||||
|
basic_machine=sh64-unknown
|
||||||
|
;;
|
||||||
sparclite-wrs | simso-wrs)
|
sparclite-wrs | simso-wrs)
|
||||||
basic_machine=sparclite-wrs
|
basic_machine=sparclite-wrs
|
||||||
os=-vxworks
|
os=-vxworks
|
||||||
@@ -883,7 +945,7 @@ case $basic_machine in
|
|||||||
sun386 | sun386i | roadrunner)
|
sun386 | sun386i | roadrunner)
|
||||||
basic_machine=i386-sun
|
basic_machine=i386-sun
|
||||||
;;
|
;;
|
||||||
sv1)
|
sv1)
|
||||||
basic_machine=sv1-cray
|
basic_machine=sv1-cray
|
||||||
os=-unicos
|
os=-unicos
|
||||||
;;
|
;;
|
||||||
@@ -891,10 +953,6 @@ case $basic_machine in
|
|||||||
basic_machine=i386-sequent
|
basic_machine=i386-sequent
|
||||||
os=-dynix
|
os=-dynix
|
||||||
;;
|
;;
|
||||||
t3d)
|
|
||||||
basic_machine=alpha-cray
|
|
||||||
os=-unicos
|
|
||||||
;;
|
|
||||||
t3e)
|
t3e)
|
||||||
basic_machine=alphaev5-cray
|
basic_machine=alphaev5-cray
|
||||||
os=-unicos
|
os=-unicos
|
||||||
@@ -907,6 +965,14 @@ case $basic_machine in
|
|||||||
basic_machine=tic54x-unknown
|
basic_machine=tic54x-unknown
|
||||||
os=-coff
|
os=-coff
|
||||||
;;
|
;;
|
||||||
|
tic55x | c55x*)
|
||||||
|
basic_machine=tic55x-unknown
|
||||||
|
os=-coff
|
||||||
|
;;
|
||||||
|
tic6x | c6x*)
|
||||||
|
basic_machine=tic6x-unknown
|
||||||
|
os=-coff
|
||||||
|
;;
|
||||||
tx39)
|
tx39)
|
||||||
basic_machine=mipstx39-unknown
|
basic_machine=mipstx39-unknown
|
||||||
;;
|
;;
|
||||||
@@ -920,6 +986,10 @@ case $basic_machine in
|
|||||||
tower | tower-32)
|
tower | tower-32)
|
||||||
basic_machine=m68k-ncr
|
basic_machine=m68k-ncr
|
||||||
;;
|
;;
|
||||||
|
tpf)
|
||||||
|
basic_machine=s390x-ibm
|
||||||
|
os=-tpf
|
||||||
|
;;
|
||||||
udi29k)
|
udi29k)
|
||||||
basic_machine=a29k-amd
|
basic_machine=a29k-amd
|
||||||
os=-udi
|
os=-udi
|
||||||
@@ -941,8 +1011,8 @@ case $basic_machine in
|
|||||||
os=-vms
|
os=-vms
|
||||||
;;
|
;;
|
||||||
vpp*|vx|vx-*)
|
vpp*|vx|vx-*)
|
||||||
basic_machine=f301-fujitsu
|
basic_machine=f301-fujitsu
|
||||||
;;
|
;;
|
||||||
vxworks960)
|
vxworks960)
|
||||||
basic_machine=i960-wrs
|
basic_machine=i960-wrs
|
||||||
os=-vxworks
|
os=-vxworks
|
||||||
@@ -963,11 +1033,11 @@ case $basic_machine in
|
|||||||
basic_machine=hppa1.1-winbond
|
basic_machine=hppa1.1-winbond
|
||||||
os=-proelf
|
os=-proelf
|
||||||
;;
|
;;
|
||||||
windows32)
|
xbox)
|
||||||
basic_machine=i386-pc
|
basic_machine=i686-pc
|
||||||
os=-windows32-msvcrt
|
os=-mingw32
|
||||||
;;
|
;;
|
||||||
xps | xps100)
|
xps | xps100)
|
||||||
basic_machine=xps100-honeywell
|
basic_machine=xps100-honeywell
|
||||||
;;
|
;;
|
||||||
ymp)
|
ymp)
|
||||||
@@ -997,6 +1067,9 @@ case $basic_machine in
|
|||||||
romp)
|
romp)
|
||||||
basic_machine=romp-ibm
|
basic_machine=romp-ibm
|
||||||
;;
|
;;
|
||||||
|
mmix)
|
||||||
|
basic_machine=mmix-knuth
|
||||||
|
;;
|
||||||
rs6000)
|
rs6000)
|
||||||
basic_machine=rs6000-ibm
|
basic_machine=rs6000-ibm
|
||||||
;;
|
;;
|
||||||
@@ -1013,16 +1086,16 @@ case $basic_machine in
|
|||||||
we32k)
|
we32k)
|
||||||
basic_machine=we32k-att
|
basic_machine=we32k-att
|
||||||
;;
|
;;
|
||||||
sh3 | sh4 | sh3eb | sh4eb | sh[1234]le | sh3ele)
|
sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele)
|
||||||
basic_machine=sh-unknown
|
basic_machine=sh-unknown
|
||||||
;;
|
;;
|
||||||
sh64)
|
sh64)
|
||||||
basic_machine=sh64-unknown
|
basic_machine=sh64-unknown
|
||||||
;;
|
;;
|
||||||
sparc | sparcv9 | sparcv9b)
|
sparc | sparcv8 | sparcv9 | sparcv9b)
|
||||||
basic_machine=sparc-sun
|
basic_machine=sparc-sun
|
||||||
;;
|
;;
|
||||||
cydra)
|
cydra)
|
||||||
basic_machine=cydra-cydrome
|
basic_machine=cydra-cydrome
|
||||||
;;
|
;;
|
||||||
orion)
|
orion)
|
||||||
@@ -1037,10 +1110,6 @@ case $basic_machine in
|
|||||||
pmac | pmac-mpw)
|
pmac | pmac-mpw)
|
||||||
basic_machine=powerpc-apple
|
basic_machine=powerpc-apple
|
||||||
;;
|
;;
|
||||||
c4x*)
|
|
||||||
basic_machine=c4x-none
|
|
||||||
os=-coff
|
|
||||||
;;
|
|
||||||
*-unknown)
|
*-unknown)
|
||||||
# Make sure to match an already-canonicalized machine name.
|
# Make sure to match an already-canonicalized machine name.
|
||||||
;;
|
;;
|
||||||
@@ -1096,18 +1165,20 @@ case $os in
|
|||||||
| -aos* \
|
| -aos* \
|
||||||
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
|
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
|
||||||
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
|
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
|
||||||
| -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
|
| -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \
|
||||||
| -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
|
| -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
|
||||||
|
| -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
|
||||||
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
|
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
|
||||||
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
|
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
|
||||||
| -chorusos* | -chorusrdb* \
|
| -chorusos* | -chorusrdb* \
|
||||||
| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
|
| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
|
||||||
| -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
|
| -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \
|
||||||
| -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \
|
| -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
|
||||||
| -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
|
| -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
|
||||||
| -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
|
| -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
|
||||||
| -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
|
| -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
|
||||||
| -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* | -powermax*)
|
| -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
|
||||||
|
| -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly*)
|
||||||
# Remember, each alternative MUST END IN *, to match a version number.
|
# Remember, each alternative MUST END IN *, to match a version number.
|
||||||
;;
|
;;
|
||||||
-qnx*)
|
-qnx*)
|
||||||
@@ -1119,8 +1190,10 @@ case $os in
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
|
-nto-qnx*)
|
||||||
|
;;
|
||||||
-nto*)
|
-nto*)
|
||||||
os=-nto-qnx
|
os=`echo $os | sed -e 's|nto|nto-qnx|'`
|
||||||
;;
|
;;
|
||||||
-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
|
-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
|
||||||
| -windows* | -osx | -abug | -netware* | -os9* | -beos* \
|
| -windows* | -osx | -abug | -netware* | -os9* | -beos* \
|
||||||
@@ -1129,6 +1202,9 @@ case $os in
|
|||||||
-mac*)
|
-mac*)
|
||||||
os=`echo $os | sed -e 's|mac|macos|'`
|
os=`echo $os | sed -e 's|mac|macos|'`
|
||||||
;;
|
;;
|
||||||
|
-linux-dietlibc)
|
||||||
|
os=-linux-dietlibc
|
||||||
|
;;
|
||||||
-linux*)
|
-linux*)
|
||||||
os=`echo $os | sed -e 's|linux|linux-gnu|'`
|
os=`echo $os | sed -e 's|linux|linux-gnu|'`
|
||||||
;;
|
;;
|
||||||
@@ -1141,6 +1217,9 @@ case $os in
|
|||||||
-opened*)
|
-opened*)
|
||||||
os=-openedition
|
os=-openedition
|
||||||
;;
|
;;
|
||||||
|
-os400*)
|
||||||
|
os=-os400
|
||||||
|
;;
|
||||||
-wince*)
|
-wince*)
|
||||||
os=-wince
|
os=-wince
|
||||||
;;
|
;;
|
||||||
@@ -1162,6 +1241,9 @@ case $os in
|
|||||||
-atheos*)
|
-atheos*)
|
||||||
os=-atheos
|
os=-atheos
|
||||||
;;
|
;;
|
||||||
|
-syllable*)
|
||||||
|
os=-syllable
|
||||||
|
;;
|
||||||
-386bsd)
|
-386bsd)
|
||||||
os=-bsd
|
os=-bsd
|
||||||
;;
|
;;
|
||||||
@@ -1172,7 +1254,7 @@ case $os in
|
|||||||
os=-rtmk-nova
|
os=-rtmk-nova
|
||||||
;;
|
;;
|
||||||
-ns2 )
|
-ns2 )
|
||||||
os=-nextstep2
|
os=-nextstep2
|
||||||
;;
|
;;
|
||||||
-nsk*)
|
-nsk*)
|
||||||
os=-nsk
|
os=-nsk
|
||||||
@@ -1184,6 +1266,9 @@ case $os in
|
|||||||
-sinix*)
|
-sinix*)
|
||||||
os=-sysv4
|
os=-sysv4
|
||||||
;;
|
;;
|
||||||
|
-tpf*)
|
||||||
|
os=-tpf
|
||||||
|
;;
|
||||||
-triton*)
|
-triton*)
|
||||||
os=-sysv3
|
os=-sysv3
|
||||||
;;
|
;;
|
||||||
@@ -1211,8 +1296,17 @@ case $os in
|
|||||||
-xenix)
|
-xenix)
|
||||||
os=-xenix
|
os=-xenix
|
||||||
;;
|
;;
|
||||||
-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
|
-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
|
||||||
os=-mint
|
os=-mint
|
||||||
|
;;
|
||||||
|
-aros*)
|
||||||
|
os=-aros
|
||||||
|
;;
|
||||||
|
-kaos*)
|
||||||
|
os=-kaos
|
||||||
|
;;
|
||||||
|
-zvmoe)
|
||||||
|
os=-zvmoe
|
||||||
;;
|
;;
|
||||||
-none)
|
-none)
|
||||||
;;
|
;;
|
||||||
@@ -1245,11 +1339,14 @@ case $basic_machine in
|
|||||||
arm*-semi)
|
arm*-semi)
|
||||||
os=-aout
|
os=-aout
|
||||||
;;
|
;;
|
||||||
|
c4x-* | tic4x-*)
|
||||||
|
os=-coff
|
||||||
|
;;
|
||||||
# This must come before the *-dec entry.
|
# This must come before the *-dec entry.
|
||||||
pdp10-*)
|
pdp10-*)
|
||||||
os=-tops20
|
os=-tops20
|
||||||
;;
|
;;
|
||||||
pdp11-*)
|
pdp11-*)
|
||||||
os=-none
|
os=-none
|
||||||
;;
|
;;
|
||||||
*-dec | vax-*)
|
*-dec | vax-*)
|
||||||
@@ -1291,6 +1388,9 @@ case $basic_machine in
|
|||||||
*-ibm)
|
*-ibm)
|
||||||
os=-aix
|
os=-aix
|
||||||
;;
|
;;
|
||||||
|
*-knuth)
|
||||||
|
os=-mmixware
|
||||||
|
;;
|
||||||
*-wec)
|
*-wec)
|
||||||
os=-proelf
|
os=-proelf
|
||||||
;;
|
;;
|
||||||
@@ -1342,19 +1442,19 @@ case $basic_machine in
|
|||||||
*-next)
|
*-next)
|
||||||
os=-nextstep3
|
os=-nextstep3
|
||||||
;;
|
;;
|
||||||
*-gould)
|
*-gould)
|
||||||
os=-sysv
|
os=-sysv
|
||||||
;;
|
;;
|
||||||
*-highlevel)
|
*-highlevel)
|
||||||
os=-bsd
|
os=-bsd
|
||||||
;;
|
;;
|
||||||
*-encore)
|
*-encore)
|
||||||
os=-bsd
|
os=-bsd
|
||||||
;;
|
;;
|
||||||
*-sgi)
|
*-sgi)
|
||||||
os=-irix
|
os=-irix
|
||||||
;;
|
;;
|
||||||
*-siemens)
|
*-siemens)
|
||||||
os=-sysv4
|
os=-sysv4
|
||||||
;;
|
;;
|
||||||
*-masscomp)
|
*-masscomp)
|
||||||
@@ -1423,9 +1523,15 @@ case $basic_machine in
|
|||||||
-mvs* | -opened*)
|
-mvs* | -opened*)
|
||||||
vendor=ibm
|
vendor=ibm
|
||||||
;;
|
;;
|
||||||
|
-os400*)
|
||||||
|
vendor=ibm
|
||||||
|
;;
|
||||||
-ptx*)
|
-ptx*)
|
||||||
vendor=sequent
|
vendor=sequent
|
||||||
;;
|
;;
|
||||||
|
-tpf*)
|
||||||
|
vendor=ibm
|
||||||
|
;;
|
||||||
-vxsim* | -vxworks* | -windiss*)
|
-vxsim* | -vxworks* | -windiss*)
|
||||||
vendor=wrs
|
vendor=wrs
|
||||||
;;
|
;;
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
# Process this file with autoconf to produce a configure script.
|
# Process this file with autoconf to produce a configure script.
|
||||||
AC_INIT([libquantum], [0.2.2], [libquantum@enyo.de])
|
AC_INIT([libquantum], [0.2.3], [libquantum@enyo.de])
|
||||||
AC_CONFIG_SRCDIR([classic.c])
|
AC_CONFIG_SRCDIR([classic.c])
|
||||||
AC_CONFIG_HEADER([config.h])
|
AC_CONFIG_HEADER([config.h])
|
||||||
|
|
||||||
@@ -87,8 +87,9 @@ AC_SUBST(I)
|
|||||||
# Profiling check
|
# Profiling check
|
||||||
AC_ARG_ENABLE(profiling,
|
AC_ARG_ENABLE(profiling,
|
||||||
[ --enable-profiling compile with profiling support],
|
[ --enable-profiling compile with profiling support],
|
||||||
[CFLAGS="$CFLAGS -pg"],
|
[if test $enableval = "yes"
|
||||||
[])
|
then CFLAGS="$CFLAGS -pg -fprofile-arcs -ftest-coverage"
|
||||||
|
fi], [])
|
||||||
|
|
||||||
# Enable -Wall for gcc
|
# Enable -Wall for gcc
|
||||||
if test $CC = "gcc"
|
if test $CC = "gcc"
|
||||||
|
272
density.c
Normal file
272
density.c
Normal file
@@ -0,0 +1,272 @@
|
|||||||
|
/* density.c: Density operator formalism
|
||||||
|
|
||||||
|
Copyright 2004 Bjoern Butscher, Hendrik Weimer
|
||||||
|
|
||||||
|
This file is part of libquantum
|
||||||
|
|
||||||
|
libquantum 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 of the License,
|
||||||
|
or (at your option) any later version.
|
||||||
|
|
||||||
|
libquantum 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 libquantum; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
||||||
|
USA
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include "density.h"
|
||||||
|
#include "qureg.h"
|
||||||
|
#include "config.h"
|
||||||
|
#include "matrix.h"
|
||||||
|
#include "complex.h"
|
||||||
|
|
||||||
|
/* Build a new density operator from multiple state vectors */
|
||||||
|
|
||||||
|
quantum_density_op
|
||||||
|
quantum_new_density_op(int num, float *prob, quantum_reg *reg)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
quantum_density_op rho;
|
||||||
|
int *phash;
|
||||||
|
int hashw;
|
||||||
|
|
||||||
|
rho.num = num;
|
||||||
|
|
||||||
|
rho.prob = calloc(num, sizeof(float));
|
||||||
|
if(!rho.prob)
|
||||||
|
{
|
||||||
|
printf("Error allocating probability array!\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
rho.reg = calloc(num, sizeof(quantum_reg));
|
||||||
|
if(!rho.reg)
|
||||||
|
{
|
||||||
|
printf("Error allocating state vector array!\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
quantum_memman(num * (sizeof(float) + sizeof(quantum_reg)));
|
||||||
|
|
||||||
|
/* Take the hash table from the first quantum register */
|
||||||
|
|
||||||
|
rho.prob[0] = prob[0];
|
||||||
|
phash = reg[0].hash;
|
||||||
|
hashw = reg[0].hashw;
|
||||||
|
rho.reg[0] = reg[0];
|
||||||
|
|
||||||
|
/* Destroy the quantum register */
|
||||||
|
|
||||||
|
reg[0].size = 0;
|
||||||
|
reg[0].width = 0;
|
||||||
|
reg[0].node = 0;
|
||||||
|
reg[0].hash = 0;
|
||||||
|
|
||||||
|
for(i=1; i<num; i++)
|
||||||
|
{
|
||||||
|
rho.prob[i] = prob[i];
|
||||||
|
rho.reg[i] = reg[i];
|
||||||
|
rho.reg[i].hash = phash;
|
||||||
|
rho.reg[i].hashw = hashw;
|
||||||
|
|
||||||
|
reg[i].size = 0;
|
||||||
|
reg[i].width = 0;
|
||||||
|
reg[i].node = 0;
|
||||||
|
reg[i].hash = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return rho;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Convert a state vector to a density operator */
|
||||||
|
|
||||||
|
quantum_density_op
|
||||||
|
quantum_qureg2density_op(quantum_reg *reg)
|
||||||
|
{
|
||||||
|
float f = 1;
|
||||||
|
|
||||||
|
return quantum_new_density_op(1, &f, reg);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Compute the reduced density operator of a system. Bit POS will be
|
||||||
|
traced out. */
|
||||||
|
|
||||||
|
void
|
||||||
|
quantum_reduced_density_op(int pos, quantum_density_op *rho)
|
||||||
|
{
|
||||||
|
int i, j;
|
||||||
|
double p0=0, ptmp;
|
||||||
|
MAX_UNSIGNED pos2;
|
||||||
|
quantum_reg rtmp;
|
||||||
|
|
||||||
|
rho->prob = realloc(rho->prob, 2*rho->num*sizeof(float));
|
||||||
|
if(!rho->prob)
|
||||||
|
{
|
||||||
|
printf("Error re-allocating probability array!\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
rho->reg = realloc(rho->reg, 2*rho->num*sizeof(quantum_reg));
|
||||||
|
if(!rho->reg)
|
||||||
|
{
|
||||||
|
printf("Error re-allocating state vector array!\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
quantum_memman(rho->num * (sizeof(float) + sizeof(quantum_reg)));
|
||||||
|
|
||||||
|
pos2 = (MAX_UNSIGNED) 1 << pos;
|
||||||
|
|
||||||
|
for(i=0; i<rho->num; i++)
|
||||||
|
{
|
||||||
|
ptmp = rho->prob[i];
|
||||||
|
rtmp = rho->reg[i];
|
||||||
|
p0 = 0;
|
||||||
|
|
||||||
|
/* Sum up the probability for 0 being the result for this state
|
||||||
|
vector */
|
||||||
|
|
||||||
|
for(j=0; j<rho->reg[i].size; j++)
|
||||||
|
{
|
||||||
|
if(!(rho->reg[i].node[j].state & pos2))
|
||||||
|
p0 += quantum_prob_inline(rho->reg[i].node[j].amplitude);
|
||||||
|
}
|
||||||
|
|
||||||
|
rho->prob[i] = ptmp * p0;
|
||||||
|
rho->prob[rho->num + i] = ptmp * (1-p0);
|
||||||
|
|
||||||
|
rho->reg[i] = quantum_state_collapse(pos, 0, rtmp);
|
||||||
|
rho->reg[rho->num + i] = quantum_state_collapse(pos, 1, rtmp);
|
||||||
|
|
||||||
|
quantum_delete_qureg_hashpreserve(&rtmp);
|
||||||
|
}
|
||||||
|
|
||||||
|
rho->num *= 2;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Print the whole density matrix. */
|
||||||
|
|
||||||
|
void
|
||||||
|
quantum_print_density_matrix(quantum_density_op *rho)
|
||||||
|
{
|
||||||
|
int i, j, k, dim;
|
||||||
|
quantum_matrix m;
|
||||||
|
COMPLEX_FLOAT f;
|
||||||
|
|
||||||
|
dim = 1 << rho->reg[0].width;
|
||||||
|
|
||||||
|
if(dim < 0)
|
||||||
|
{
|
||||||
|
printf("Density matrix is too big!\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
m = quantum_new_matrix(dim, dim);
|
||||||
|
|
||||||
|
/* \rho_ij = \sum_k p_k <i|\psi_kX\psi_k|j> */
|
||||||
|
|
||||||
|
for(i=0; i<rho->num; i++)
|
||||||
|
{
|
||||||
|
for(j=0; j<rho->reg[i].size; j++)
|
||||||
|
{
|
||||||
|
M(m, rho->reg[i].node[j].state, rho->reg[i].node[j].state)
|
||||||
|
+= rho->prob[i]
|
||||||
|
* quantum_prob_inline(rho->reg[i].node[j].amplitude);
|
||||||
|
|
||||||
|
for(k=0; k<j; k++)
|
||||||
|
{
|
||||||
|
f = rho->prob[i] * quantum_conj(rho->reg[i].node[j].amplitude)
|
||||||
|
* rho->reg[i].node[k].amplitude;
|
||||||
|
M(m, rho->reg[i].node[j].state , rho->reg[i].node[k].state) += f;
|
||||||
|
M(m, rho->reg[i].node[k].state , rho->reg[i].node[j].state)
|
||||||
|
+= quantum_conj(f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
quantum_print_matrix(m);
|
||||||
|
quantum_delete_matrix(&m);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Delete a density operator */
|
||||||
|
|
||||||
|
void
|
||||||
|
quantum_delete_density_op(quantum_density_op *rho)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
/* Destroy hash table only once */
|
||||||
|
|
||||||
|
quantum_destroy_hash(&rho->reg[0]);
|
||||||
|
|
||||||
|
for(i=0; i<rho->num; i++)
|
||||||
|
quantum_delete_qureg_hashpreserve(&rho->reg[i]);
|
||||||
|
|
||||||
|
free(rho->prob);
|
||||||
|
free(rho->reg);
|
||||||
|
quantum_memman(-rho->num * (sizeof(float) + sizeof(quantum_reg)));
|
||||||
|
|
||||||
|
rho->prob = 0;
|
||||||
|
rho->reg = 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Compute the purity of a density operator */
|
||||||
|
|
||||||
|
float
|
||||||
|
quantum_purity(quantum_density_op *rho)
|
||||||
|
{
|
||||||
|
int i, j , k, l;
|
||||||
|
float f = 0;
|
||||||
|
COMPLEX_FLOAT g, dp;
|
||||||
|
|
||||||
|
/* Diagonal elements */
|
||||||
|
|
||||||
|
for(i=0; i<rho->num; i++)
|
||||||
|
f += rho->prob[i]*rho->prob[i];
|
||||||
|
|
||||||
|
for(i=0; i<rho->num; i++)
|
||||||
|
{
|
||||||
|
for(j=0; j<i; j++)
|
||||||
|
{
|
||||||
|
dp = quantum_dot_product(&rho->reg[i], &rho->reg[j]);
|
||||||
|
|
||||||
|
for(k=0; k<rho->reg[i].size; k++)
|
||||||
|
{
|
||||||
|
/* quantum_dot_product makes sure that rho->reg[j] has a
|
||||||
|
correct hash table */
|
||||||
|
|
||||||
|
l = quantum_get_state(rho->reg[i].node[k].state, rho->reg[j]);
|
||||||
|
|
||||||
|
/* Compute p_i p_j <k|\psi_iX\psi_i|\psi_jX\psi_j|k> */
|
||||||
|
|
||||||
|
if(l > -1)
|
||||||
|
g = rho->prob[i] * rho->prob[j] * dp
|
||||||
|
* rho->reg[i].node[k].amplitude
|
||||||
|
* quantum_conj(rho->reg[j].node[l].amplitude);
|
||||||
|
else
|
||||||
|
g = 0;
|
||||||
|
|
||||||
|
f += 2 * quantum_real(g);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return f;
|
||||||
|
|
||||||
|
}
|
67
density.h
Normal file
67
density.h
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
/* density.h: Declarations for density.c
|
||||||
|
|
||||||
|
Copyright 2004 Bjoern Butscher, Hendrik Weimer
|
||||||
|
|
||||||
|
This file is part of libquantum
|
||||||
|
|
||||||
|
libquantum 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 of the License,
|
||||||
|
or (at your option) any later version.
|
||||||
|
|
||||||
|
libquantum 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 libquantum; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
||||||
|
USA
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __DENSITY_H
|
||||||
|
|
||||||
|
#define __DENSITY_H
|
||||||
|
|
||||||
|
#include "qureg.h"
|
||||||
|
|
||||||
|
#define quantum_density_wrapper_ubt(reg, ctl, ...) \
|
||||||
|
quantum_unbounded_toffoli(ctl, reg, __VA_ARGS__)
|
||||||
|
|
||||||
|
#define quantum_density_operation(function, rho, ...) \
|
||||||
|
do{ \
|
||||||
|
int quantum_int; \
|
||||||
|
if ((void *) function == quantum_unbounded_toffoli) \
|
||||||
|
{ \
|
||||||
|
for(quantum_int=0; quantum_int < rho.num; quantum_int++) \
|
||||||
|
quantum_density_wrapper_ubt(&rho.reg[quantum_int], __VA_ARGS__); \
|
||||||
|
} \
|
||||||
|
else \
|
||||||
|
{ \
|
||||||
|
for(quantum_int=0; quantum_int < rho.num; quantum_int++) \
|
||||||
|
function(__VA_ARGS__, &rho.reg[quantum_int]); \
|
||||||
|
} \
|
||||||
|
} while(0)
|
||||||
|
|
||||||
|
struct quantum_density_op_struct
|
||||||
|
{
|
||||||
|
int num; /* total number of state vectors */
|
||||||
|
float *prob; /* probabilities of the state vectors */
|
||||||
|
quantum_reg *reg; /* state vectors */
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct quantum_density_op_struct quantum_density_op;
|
||||||
|
|
||||||
|
extern quantum_density_op quantum_new_density_op(int num, float *prob,
|
||||||
|
quantum_reg *reg);
|
||||||
|
extern quantum_density_op quantum_qureg2density_op(quantum_reg *reg);
|
||||||
|
extern void quantum_reduced_density_op(int pos, quantum_density_op *rho);
|
||||||
|
|
||||||
|
extern void quantum_print_density_matrix(quantum_density_op *rho);
|
||||||
|
extern void quantum_delete_density_op(quantum_density_op *rho);
|
||||||
|
|
||||||
|
extern float quantum_purity(quantum_density_op *rho);
|
||||||
|
|
||||||
|
#endif
|
178
gates.c
178
gates.c
@@ -1,6 +1,6 @@
|
|||||||
/* gates.c: Basic gates for quantum register manipulation
|
/* gates.c: Basic gates for quantum register manipulation
|
||||||
|
|
||||||
Copyright 2003 Bjoern Butscher, Hendrik Weimer
|
Copyright 2003, 2004 Bjoern Butscher, Hendrik Weimer
|
||||||
|
|
||||||
This file is part of libquantum
|
This file is part of libquantum
|
||||||
|
|
||||||
@@ -283,8 +283,7 @@ quantum_swaptheleads_omuln_controlled(int control, int width, quantum_reg *reg)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Apply the 2x2 matrix M to the target bit. M should be unitary and
|
/* Apply the 2x2 matrix M to the target bit. M should be unitary. */
|
||||||
having a determinant of 1. */
|
|
||||||
|
|
||||||
void
|
void
|
||||||
quantum_gate1(int target, quantum_matrix m, quantum_reg *reg)
|
quantum_gate1(int target, quantum_matrix m, quantum_reg *reg)
|
||||||
@@ -454,6 +453,179 @@ quantum_gate1(int target, quantum_matrix m, quantum_reg *reg)
|
|||||||
quantum_decohere(reg);
|
quantum_decohere(reg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Apply the 4x4 matrix M to the target bit, controlled by CONTROL. M
|
||||||
|
should be unitary. */
|
||||||
|
|
||||||
|
/* WARNING: THIS FUNCTION IS INCOMPLETE AND DOES NOT WORK AS INTENDED! */
|
||||||
|
|
||||||
|
void
|
||||||
|
quantum_gate2(int control, int target, quantum_matrix m, quantum_reg *reg)
|
||||||
|
{
|
||||||
|
int i, j, k, iset;
|
||||||
|
int addsize=0, decsize=0;
|
||||||
|
COMPLEX_FLOAT t, tnot=0;
|
||||||
|
float limit;
|
||||||
|
char *done;
|
||||||
|
|
||||||
|
if((m.cols != 4) || (m.rows != 4))
|
||||||
|
{
|
||||||
|
printf("Matrix is not a 4x4 matrix!\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Build hash table */
|
||||||
|
|
||||||
|
for(i=0; i<(1 << reg->hashw); i++)
|
||||||
|
reg->hash[i] = 0;
|
||||||
|
|
||||||
|
for(i=0; i<reg->size; i++)
|
||||||
|
quantum_add_hash(reg->node[i].state, i, reg);
|
||||||
|
|
||||||
|
/* calculate the number of basis states to be added */
|
||||||
|
|
||||||
|
for(i=0; i<reg->size; i++)
|
||||||
|
{
|
||||||
|
j = quantum_get_state(reg->node[i].state ^ ((MAX_UNSIGNED) 1 << target),
|
||||||
|
*reg);
|
||||||
|
if(j == -1)
|
||||||
|
{
|
||||||
|
if((m.t[1] != 0) && (reg->node[i].state
|
||||||
|
& ((MAX_UNSIGNED) 1 << target)))
|
||||||
|
addsize++;
|
||||||
|
if((m.t[2] != 0) && !(reg->node[i].state
|
||||||
|
& ((MAX_UNSIGNED) 1 << target)))
|
||||||
|
addsize++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* allocate memory for the new basis states */
|
||||||
|
|
||||||
|
reg->node = realloc(reg->node,
|
||||||
|
(reg->size + addsize) * sizeof(quantum_reg_node));
|
||||||
|
if(!reg->node)
|
||||||
|
{
|
||||||
|
printf("Not enough memory for %i-sized qubit!\n", reg->size + addsize);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
quantum_memman(addsize*sizeof(quantum_reg_node));
|
||||||
|
|
||||||
|
for(i=0; i<addsize; i++)
|
||||||
|
{
|
||||||
|
reg->node[i+reg->size].state = 0;
|
||||||
|
reg->node[i+reg->size].amplitude = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
done = calloc(reg->size + addsize, sizeof(char));
|
||||||
|
if(!done)
|
||||||
|
{
|
||||||
|
printf("Not enough memory for %i bytes array!\n",
|
||||||
|
(reg->size + addsize) * sizeof(char));
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
quantum_memman(reg->size + addsize * sizeof(char));
|
||||||
|
|
||||||
|
k = reg->size;
|
||||||
|
|
||||||
|
limit = (1.0 / ((MAX_UNSIGNED) 1 << reg->width)) / 1000000;
|
||||||
|
|
||||||
|
/* perform the actual matrix multiplication */
|
||||||
|
|
||||||
|
for(i=0; i<reg->size; i++)
|
||||||
|
{
|
||||||
|
if(!done[i])
|
||||||
|
{
|
||||||
|
/* determine if the target of the basis state is set */
|
||||||
|
|
||||||
|
iset = reg->node[i].state & ((MAX_UNSIGNED) 1 << target);
|
||||||
|
|
||||||
|
tnot = 0;
|
||||||
|
j = quantum_get_state(reg->node[i].state
|
||||||
|
^ ((MAX_UNSIGNED) 1<<target), *reg);
|
||||||
|
t = reg->node[i].amplitude;
|
||||||
|
|
||||||
|
if(j >= 0)
|
||||||
|
tnot = reg->node[j].amplitude;
|
||||||
|
|
||||||
|
if(iset)
|
||||||
|
reg->node[i].amplitude = m.t[2] * tnot + m.t[3] * t;
|
||||||
|
|
||||||
|
else
|
||||||
|
reg->node[i].amplitude = m.t[0] * t + m.t[1] * tnot;
|
||||||
|
|
||||||
|
if(j >= 0)
|
||||||
|
{
|
||||||
|
if(iset)
|
||||||
|
reg->node[j].amplitude = m.t[0] * tnot + m.t[1] * t;
|
||||||
|
|
||||||
|
else
|
||||||
|
reg->node[j].amplitude = m.t[2] * t + m.t[3] * tnot;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
else /* new basis state will be created */
|
||||||
|
{
|
||||||
|
|
||||||
|
if((m.t[1] == 0) && (iset))
|
||||||
|
break;
|
||||||
|
if((m.t[2] == 0) && !(iset))
|
||||||
|
break;
|
||||||
|
|
||||||
|
reg->node[k].state = reg->node[i].state
|
||||||
|
^ ((MAX_UNSIGNED) 1 << target);
|
||||||
|
|
||||||
|
if(iset)
|
||||||
|
reg->node[k].amplitude = m.t[1] * t;
|
||||||
|
|
||||||
|
else
|
||||||
|
reg->node[k].amplitude = m.t[2] * t;
|
||||||
|
|
||||||
|
k++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(j >= 0)
|
||||||
|
done[j] = 1;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
reg->size += addsize;
|
||||||
|
|
||||||
|
free(done);
|
||||||
|
quantum_memman(-reg->size * sizeof(char));
|
||||||
|
|
||||||
|
/* remove basis states with extremely small amplitude */
|
||||||
|
|
||||||
|
for(i=0, j=0; i<reg->size; i++)
|
||||||
|
{
|
||||||
|
if(quantum_prob_inline(reg->node[i].amplitude) < limit)
|
||||||
|
{
|
||||||
|
j++;
|
||||||
|
decsize++;
|
||||||
|
}
|
||||||
|
|
||||||
|
else if(j)
|
||||||
|
{
|
||||||
|
reg->node[i-j].state = reg->node[i].state;
|
||||||
|
reg->node[i-j].amplitude = reg->node[i].amplitude;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(decsize)
|
||||||
|
{
|
||||||
|
reg->size -= decsize;
|
||||||
|
reg->node = realloc(reg->node, reg->size * sizeof(quantum_reg_node));
|
||||||
|
if(!reg->node)
|
||||||
|
{
|
||||||
|
printf("Not enough memory for %i-sized qubit!\n",
|
||||||
|
reg->size + addsize);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
quantum_memman(-decsize * sizeof(quantum_reg_node));
|
||||||
|
}
|
||||||
|
|
||||||
|
quantum_decohere(reg);
|
||||||
|
}
|
||||||
|
|
||||||
/* Apply a hadamard gate */
|
/* Apply a hadamard gate */
|
||||||
|
|
||||||
void
|
void
|
||||||
|
14
matrix.c
14
matrix.c
@@ -89,25 +89,25 @@ quantum_delete_matrix(quantum_matrix *m)
|
|||||||
void
|
void
|
||||||
quantum_print_matrix(quantum_matrix m)
|
quantum_print_matrix(quantum_matrix m)
|
||||||
{
|
{
|
||||||
int i, j, l, z=0;
|
int i, j, z=0;
|
||||||
|
/* int l; */
|
||||||
|
|
||||||
while ((1 << z++) < m.rows);
|
while ((1 << z++) < m.rows);
|
||||||
z--;
|
z--;
|
||||||
|
|
||||||
for(i=0; i<m.rows; i++)
|
for(i=0; i<m.rows; i++)
|
||||||
{
|
{
|
||||||
for (l=z-1; l>=0; l--)
|
/* for (l=z-1; l>=0; l--)
|
||||||
{
|
{
|
||||||
if ((l % 4 == 3))
|
if ((l % 4 == 3))
|
||||||
printf(" ");
|
printf(" ");
|
||||||
printf("%i", (i >> l) & 1);
|
printf("%i", (i >> l) & 1);
|
||||||
}
|
} */
|
||||||
|
|
||||||
printf(" | ");
|
|
||||||
|
|
||||||
for(j=0; j<m.cols; j++)
|
for(j=0; j<m.cols; j++)
|
||||||
printf("%f %fi ", quantum_real(M(m, j, i)), quantum_imag(M(m, j, i)));
|
printf("% f %+fi\t", quantum_real(M(m, j, i)),
|
||||||
printf("|\n");
|
quantum_imag(M(m, j, i)));
|
||||||
|
printf("\n");
|
||||||
}
|
}
|
||||||
printf("\n");
|
printf("\n");
|
||||||
}
|
}
|
||||||
|
78
measure.c
78
measure.c
@@ -1,6 +1,6 @@
|
|||||||
/* measure.c: Quantum register measurement
|
/* measure.c: Quantum register measurement
|
||||||
|
|
||||||
Copyright 2003 Bjoern Butscher, Hendrik Weimer
|
Copyright 2003, 2004 Bjoern Butscher, Hendrik Weimer
|
||||||
|
|
||||||
This file is part of libquantum
|
This file is part of libquantum
|
||||||
|
|
||||||
@@ -84,12 +84,12 @@ quantum_measure(quantum_reg reg)
|
|||||||
int
|
int
|
||||||
quantum_bmeasure(int pos, quantum_reg *reg)
|
quantum_bmeasure(int pos, quantum_reg *reg)
|
||||||
{
|
{
|
||||||
int i, j, k;
|
int i;
|
||||||
int size=0, result=0;
|
int result=0;
|
||||||
double d=0, pa=0, r;
|
double pa=0, r;
|
||||||
MAX_UNSIGNED lpat=0, rpat=0, pos2;
|
MAX_UNSIGNED pos2;
|
||||||
quantum_reg out;
|
quantum_reg out;
|
||||||
|
|
||||||
if(quantum_objcode_put(BMEASURE, pos))
|
if(quantum_objcode_put(BMEASURE, pos))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
@@ -111,73 +111,11 @@ quantum_bmeasure(int pos, quantum_reg *reg)
|
|||||||
if (r > pa)
|
if (r > pa)
|
||||||
result = 1;
|
result = 1;
|
||||||
|
|
||||||
/* Eradicate all amplitudes of base states which have been ruled out
|
out = quantum_state_collapse(pos, result, *reg);
|
||||||
by the measurement and get the absolute of the new register */
|
|
||||||
|
|
||||||
for(i=0;i<reg->size;i++)
|
|
||||||
{
|
|
||||||
if(reg->node[i].state & pos2)
|
|
||||||
{
|
|
||||||
if(!result)
|
|
||||||
reg->node[i].amplitude = 0;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
d += quantum_prob_inline(reg->node[i].amplitude);
|
|
||||||
size++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if(result)
|
|
||||||
reg->node[i].amplitude = 0;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
d += quantum_prob_inline(reg->node[i].amplitude);
|
|
||||||
size++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Build the new quantum register */
|
|
||||||
|
|
||||||
out.width = reg->width-1;
|
|
||||||
out.size = size;
|
|
||||||
out.node = calloc(size, sizeof(quantum_reg_node));
|
|
||||||
if(!out.node)
|
|
||||||
{
|
|
||||||
printf("Not enough memory for %i-sized qubit!\n", size);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
quantum_memman(size * sizeof(quantum_reg_node));
|
|
||||||
out.hashw = reg->hashw;
|
|
||||||
out.hash = reg->hash;
|
|
||||||
|
|
||||||
/* Determine the numbers of the new base states and norm the quantum
|
|
||||||
register */
|
|
||||||
|
|
||||||
for(i=0, j=0; i<reg->size; i++)
|
|
||||||
{
|
|
||||||
if(reg->node[i].amplitude)
|
|
||||||
{
|
|
||||||
for(k=0, rpat=0; k<pos; k++)
|
|
||||||
rpat += (MAX_UNSIGNED) 1 << k;
|
|
||||||
|
|
||||||
rpat &= reg->node[i].state;
|
|
||||||
|
|
||||||
for(k=sizeof(MAX_UNSIGNED)*8-1, lpat=0; k>pos; k--)
|
|
||||||
lpat += (MAX_UNSIGNED) 1 << k;
|
|
||||||
|
|
||||||
lpat &= reg->node[i].state;
|
|
||||||
|
|
||||||
out.node[j].state = (lpat >> 1) | rpat;
|
|
||||||
out.node[j].amplitude = reg->node[i].amplitude * 1 / (float) sqrt(d);
|
|
||||||
|
|
||||||
j++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
quantum_delete_qureg_hashpreserve(reg);
|
quantum_delete_qureg_hashpreserve(reg);
|
||||||
*reg = out;
|
*reg = out;
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
39
quantum.h.in
39
quantum.h.in
@@ -1,6 +1,6 @@
|
|||||||
/* quantum.h: Header file for libquantum
|
/* quantum.h: Header file for libquantum
|
||||||
|
|
||||||
Copyright 2003 Bjoern Butscher, Hendrik Weimer
|
Copyright 2003, 2004 Bjoern Butscher, Hendrik Weimer
|
||||||
|
|
||||||
This file is part of libquantum
|
This file is part of libquantum
|
||||||
|
|
||||||
@@ -28,6 +28,24 @@
|
|||||||
#define COMPLEX_FLOAT @CF_TYPE@
|
#define COMPLEX_FLOAT @CF_TYPE@
|
||||||
#define MAX_UNSIGNED @MU_TYPE@
|
#define MAX_UNSIGNED @MU_TYPE@
|
||||||
|
|
||||||
|
#define quantum_density_wrapper_ubt(reg, ctl, ...) \
|
||||||
|
quantum_unbounded_toffoli(ctl, reg, __VA_ARGS__)
|
||||||
|
|
||||||
|
#define quantum_density_operation(function, rho, ...) \
|
||||||
|
do{ \
|
||||||
|
int quantum_int; \
|
||||||
|
if ((void *) function == quantum_unbounded_toffoli) \
|
||||||
|
{ \
|
||||||
|
for(quantum_int=0; quantum_int < rho.num; quantum_int++) \
|
||||||
|
quantum_density_wrapper_ubt(&rho.reg[quantum_int], __VA_ARGS__); \
|
||||||
|
} \
|
||||||
|
else \
|
||||||
|
{ \
|
||||||
|
for(quantum_int=0; quantum_int < rho.num; quantum_int++) \
|
||||||
|
function(__VA_ARGS__, &rho.reg[quantum_int]); \
|
||||||
|
} \
|
||||||
|
} while(0)
|
||||||
|
|
||||||
/* A ROWS x COLS matrix with complex elements */
|
/* A ROWS x COLS matrix with complex elements */
|
||||||
|
|
||||||
struct quantum_matrix_struct {
|
struct quantum_matrix_struct {
|
||||||
@@ -59,6 +77,15 @@ struct quantum_reg_struct
|
|||||||
|
|
||||||
typedef struct quantum_reg_struct quantum_reg;
|
typedef struct quantum_reg_struct quantum_reg;
|
||||||
|
|
||||||
|
struct quantum_density_op_struct
|
||||||
|
{
|
||||||
|
int num; /* total number of state vectors */
|
||||||
|
float *prob; /* probabilities of the state vectors */
|
||||||
|
quantum_reg *reg; /* state vectors */
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct quantum_density_op_struct quantum_density_op;
|
||||||
|
|
||||||
extern quantum_reg quantum_new_qureg(MAX_UNSIGNED initval, int width);
|
extern quantum_reg quantum_new_qureg(MAX_UNSIGNED initval, int width);
|
||||||
extern void quantum_delete_qureg(quantum_reg *reg);
|
extern void quantum_delete_qureg(quantum_reg *reg);
|
||||||
extern void quantum_print_qureg(quantum_reg reg);
|
extern void quantum_print_qureg(quantum_reg reg);
|
||||||
@@ -112,6 +139,8 @@ extern void quantum_decohere(quantum_reg *reg);
|
|||||||
|
|
||||||
extern quantum_reg quantum_matrix2qureg(quantum_matrix *m, int width);
|
extern quantum_reg quantum_matrix2qureg(quantum_matrix *m, int width);
|
||||||
extern quantum_matrix quantum_qureg2matrix(quantum_reg reg);
|
extern quantum_matrix quantum_qureg2matrix(quantum_reg reg);
|
||||||
|
extern quantum_reg quantum_kronecker(quantum_reg *reg1, quantum_reg *reg2);
|
||||||
|
extern COMPLEX_FLOAT quantum_dot_product(quantum_reg *reg1, quantum_reg *reg2);
|
||||||
|
|
||||||
extern void quantum_qec_encode(int type, int width, quantum_reg *reg);
|
extern void quantum_qec_encode(int type, int width, quantum_reg *reg);
|
||||||
extern void quantum_qec_decode(int type, int width, quantum_reg *reg);
|
extern void quantum_qec_decode(int type, int width, quantum_reg *reg);
|
||||||
@@ -123,4 +152,12 @@ extern void quantum_objcode_stop();
|
|||||||
extern int quantum_objcode_write(char *file);
|
extern int quantum_objcode_write(char *file);
|
||||||
extern void quantum_objcode_run(char *file, quantum_reg *reg);
|
extern void quantum_objcode_run(char *file, quantum_reg *reg);
|
||||||
|
|
||||||
|
extern quantum_density_op quantum_new_density_op(int num, float *prob,
|
||||||
|
quantum_reg *reg);
|
||||||
|
extern quantum_density_op quantum_qureg2density_op(quantum_reg *reg);
|
||||||
|
extern void quantum_reduced_density_op(int pos, quantum_density_op *rho);
|
||||||
|
extern void quantum_print_density_matrix(quantum_density_op *rho);
|
||||||
|
extern void quantum_delete_density_op(quantum_density_op *rho);
|
||||||
|
extern float quantum_purity(quantum_density_op *rho);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
108
qureg.c
108
qureg.c
@@ -1,6 +1,6 @@
|
|||||||
/* qureg.c: Quantum register management
|
/* qureg.c: Quantum register management
|
||||||
|
|
||||||
Copyright 2003 Bjoern Butscher, Hendrik Weimer
|
Copyright 2003, 2004 Bjoern Butscher, Hendrik Weimer
|
||||||
|
|
||||||
This file is part of libquantum
|
This file is part of libquantum
|
||||||
|
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <time.h>
|
#include <math.h>
|
||||||
|
|
||||||
#include "matrix.h"
|
#include "matrix.h"
|
||||||
#include "qureg.h"
|
#include "qureg.h"
|
||||||
@@ -91,10 +91,6 @@ quantum_matrix2qureg(quantum_matrix *m, int width)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Initialize the PRNG */
|
|
||||||
|
|
||||||
/* srandom(time(0)); */
|
|
||||||
|
|
||||||
return reg;
|
return reg;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -137,7 +133,7 @@ quantum_new_qureg(MAX_UNSIGNED initval, int width)
|
|||||||
|
|
||||||
/* Initialize the PRNG */
|
/* Initialize the PRNG */
|
||||||
|
|
||||||
srandom(time(0));
|
/* srandom(time(0)); */
|
||||||
|
|
||||||
c = getenv("QUOBFILE");
|
c = getenv("QUOBFILE");
|
||||||
|
|
||||||
@@ -176,6 +172,7 @@ quantum_destroy_hash(quantum_reg *reg)
|
|||||||
{
|
{
|
||||||
free(reg->hash);
|
free(reg->hash);
|
||||||
quantum_memman(-(1 << reg->hashw) * sizeof(int));
|
quantum_memman(-(1 << reg->hashw) * sizeof(int));
|
||||||
|
reg->hash = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Delete a quantum register */
|
/* Delete a quantum register */
|
||||||
@@ -208,7 +205,7 @@ quantum_print_qureg(quantum_reg reg)
|
|||||||
|
|
||||||
for(i=0; i<reg.size; i++)
|
for(i=0; i<reg.size; i++)
|
||||||
{
|
{
|
||||||
printf("%f %+fi|%lli> (%e) (|", quantum_real(reg.node[i].amplitude),
|
printf("% f %+fi|%lli> (%e) (|", quantum_real(reg.node[i].amplitude),
|
||||||
quantum_imag(reg.node[i].amplitude), reg.node[i].state,
|
quantum_imag(reg.node[i].amplitude), reg.node[i].state,
|
||||||
quantum_prob_inline(reg.node[i].amplitude));
|
quantum_prob_inline(reg.node[i].amplitude));
|
||||||
for(j=reg.width-1;j>=0;j--)
|
for(j=reg.width-1;j>=0;j--)
|
||||||
@@ -323,3 +320,98 @@ quantum_kronecker(quantum_reg *reg1, quantum_reg *reg2)
|
|||||||
|
|
||||||
return reg;
|
return reg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Reduce the state vector after measurement or partial trace */
|
||||||
|
|
||||||
|
quantum_reg
|
||||||
|
quantum_state_collapse(int pos, int value, quantum_reg reg)
|
||||||
|
{
|
||||||
|
int i, j, k;
|
||||||
|
int size=0;
|
||||||
|
double d=0;
|
||||||
|
MAX_UNSIGNED lpat=0, rpat=0, pos2;
|
||||||
|
quantum_reg out;
|
||||||
|
|
||||||
|
pos2 = (MAX_UNSIGNED) 1 << pos;
|
||||||
|
|
||||||
|
/* Eradicate all amplitudes of base states which have been ruled out
|
||||||
|
by the measurement and get the norm of the new register */
|
||||||
|
|
||||||
|
for(i=0;i<reg.size;i++)
|
||||||
|
{
|
||||||
|
if(((reg.node[i].state & pos2) && value)
|
||||||
|
|| (!(reg.node[i].state & pos2) && !value))
|
||||||
|
{
|
||||||
|
d += quantum_prob_inline(reg.node[i].amplitude);
|
||||||
|
size++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Build the new quantum register */
|
||||||
|
|
||||||
|
out.width = reg.width-1;
|
||||||
|
out.size = size;
|
||||||
|
out.node = calloc(size, sizeof(quantum_reg_node));
|
||||||
|
if(!out.node)
|
||||||
|
{
|
||||||
|
printf("Not enough memory for %i-sized quantum register!\n", size);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
quantum_memman(size * sizeof(quantum_reg_node));
|
||||||
|
out.hashw = reg.hashw;
|
||||||
|
out.hash = reg.hash;
|
||||||
|
|
||||||
|
/* Determine the numbers of the new base states and norm the quantum
|
||||||
|
register */
|
||||||
|
|
||||||
|
for(i=0, j=0; i<reg.size; i++)
|
||||||
|
{
|
||||||
|
if(((reg.node[i].state & pos2) && value)
|
||||||
|
|| (!(reg.node[i].state & pos2) && !value))
|
||||||
|
{
|
||||||
|
for(k=0, rpat=0; k<pos; k++)
|
||||||
|
rpat += (MAX_UNSIGNED) 1 << k;
|
||||||
|
|
||||||
|
rpat &= reg.node[i].state;
|
||||||
|
|
||||||
|
for(k=sizeof(MAX_UNSIGNED)*8-1, lpat=0; k>pos; k--)
|
||||||
|
lpat += (MAX_UNSIGNED) 1 << k;
|
||||||
|
|
||||||
|
lpat &= reg.node[i].state;
|
||||||
|
|
||||||
|
out.node[j].state = (lpat >> 1) | rpat;
|
||||||
|
out.node[j].amplitude = reg.node[i].amplitude * 1 / (float) sqrt(d);
|
||||||
|
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return out;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Compute the dot product of two quantum registers */
|
||||||
|
|
||||||
|
COMPLEX_FLOAT
|
||||||
|
quantum_dot_product(quantum_reg *reg1, quantum_reg *reg2)
|
||||||
|
{
|
||||||
|
int i, j;
|
||||||
|
COMPLEX_FLOAT f = 0;
|
||||||
|
|
||||||
|
for(i=0; i<(1 << reg2->hashw); i++)
|
||||||
|
reg2->hash[i] = 0;
|
||||||
|
|
||||||
|
for(i=0; i<reg2->size; i++)
|
||||||
|
quantum_add_hash(reg2->node[i].state, i, reg2);
|
||||||
|
|
||||||
|
for(i=0; i<reg1->size; i++)
|
||||||
|
{
|
||||||
|
j = quantum_get_state(reg1->node[i].state, *reg2);
|
||||||
|
|
||||||
|
if(j > -1) /* state exists in reg2 */
|
||||||
|
f += quantum_conj(reg1->node[i].amplitude) * reg2->node[j].amplitude;
|
||||||
|
}
|
||||||
|
|
||||||
|
return f;
|
||||||
|
|
||||||
|
}
|
||||||
|
9
qureg.h
9
qureg.h
@@ -1,6 +1,6 @@
|
|||||||
/* qureg.h: Declarations for qureg.c and inline hashing functions
|
/* qureg.h: Declarations for qureg.c and inline hashing functions
|
||||||
|
|
||||||
Copyright 2003 Bjoern Butscher, Hendrik Weimer
|
Copyright 2003, 2004 Bjoern Butscher, Hendrik Weimer
|
||||||
|
|
||||||
This file is part of libquantum
|
This file is part of libquantum
|
||||||
|
|
||||||
@@ -67,6 +67,13 @@ extern void quantum_addscratch(int bits, quantum_reg *reg);
|
|||||||
|
|
||||||
extern void quantum_print_hash(quantum_reg reg);
|
extern void quantum_print_hash(quantum_reg reg);
|
||||||
|
|
||||||
|
extern quantum_reg quantum_kronecker(quantum_reg *reg1, quantum_reg *reg2);
|
||||||
|
|
||||||
|
extern quantum_reg quantum_state_collapse(int bit, int value,
|
||||||
|
quantum_reg reg);
|
||||||
|
|
||||||
|
extern COMPLEX_FLOAT quantum_dot_product(quantum_reg *reg1, quantum_reg *reg2);
|
||||||
|
|
||||||
/* Our 64-bit multiplicative hash function */
|
/* Our 64-bit multiplicative hash function */
|
||||||
|
|
||||||
static inline unsigned int
|
static inline unsigned int
|
||||||
|
Reference in New Issue
Block a user