mirror of
https://github.com/libquantum/libquantum.git
synced 2025-10-03 16:51:37 +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:
|
||||
- Added quantum object code interface
|
||||
- Additional configure options for better portability
|
||||
|
76
Makefile.in
76
Makefile.in
@@ -1,6 +1,6 @@
|
||||
# Makefile: Build libquantum
|
||||
#
|
||||
# Copyright 2003 Bjoern Butscher, Hendrik Weimer
|
||||
# Copyright 2003, 2004 Bjoern Butscher, Hendrik Weimer
|
||||
#
|
||||
# This file is part of libquantum
|
||||
#
|
||||
@@ -25,15 +25,16 @@ SHELL=/bin/sh
|
||||
|
||||
# Target directory prefix
|
||||
|
||||
PREFIX=@prefix@
|
||||
EPREFIX=${PREFIX}
|
||||
PREFIX=$(DESTDIR)@prefix@
|
||||
EPREFIX=$(PREFIX)
|
||||
|
||||
# Other directories
|
||||
|
||||
LIBDIR=${EPREFIX}/lib
|
||||
INCLUDEDIR=${PREFIX}/include
|
||||
BINDIR=${PREFIX}/bin
|
||||
LIBDIR=$(EPREFIX)/lib
|
||||
INCLUDEDIR=$(PREFIX)/include
|
||||
BINDIR=$(PREFIX)/bin
|
||||
top_builddir=.
|
||||
ALLDIRS=$(LIBDIR) $(INCLUDEDIR) $(BINDIR)
|
||||
|
||||
# Version information
|
||||
|
||||
@@ -48,7 +49,7 @@ LIBTOOL=@LIBTOOL@
|
||||
# Flags passed to C compiler
|
||||
|
||||
CFLAGS=@CFLAGS@
|
||||
LDFLAGS=-rpath $(LIBDIR) -version-info 4:0:1
|
||||
LDFLAGS=-rpath $(LIBDIR) -version-info 5:0:2
|
||||
|
||||
# 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\
|
||||
qureg.lo decoherence.lo oaddn.lo omuln.lo expn.lo qec.lo version.lo\
|
||||
objcode.lo Makefile
|
||||
$(LIBTOOL) $(CC) $(LDFLAGS) -o libquantum.la complex.lo measure.lo\
|
||||
matrix.lo gates.lo oaddn.lo omuln.lo expn.lo qft.lo classic.lo\
|
||||
qureg.lo decoherence.lo qec.lo version.lo objcode.lo -lm
|
||||
objcode.lo density.lo Makefile
|
||||
$(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o libquantum.la complex.lo\
|
||||
measure.lo matrix.lo gates.lo oaddn.lo omuln.lo expn.lo qft.lo\
|
||||
classic.lo qureg.lo decoherence.lo qec.lo version.lo objcode.lo\
|
||||
density.lo -lm
|
||||
|
||||
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
|
||||
$(LIBTOOL) $(CC) $(CFLAGS) -c measure.c
|
||||
$(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -c measure.c
|
||||
|
||||
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
|
||||
$(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
|
||||
$(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
|
||||
$(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
|
||||
$(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
|
||||
$(LIBTOOL) $(CC) $(CFLAGS) -c qft.c
|
||||
$(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -c qft.c
|
||||
|
||||
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
|
||||
$(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\
|
||||
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
|
||||
$(LIBTOOL) $(CC) $(CFLAGS) -c qec.c
|
||||
$(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -c qec.c
|
||||
|
||||
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\
|
||||
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
|
||||
|
||||
demos: shor grover
|
||||
|
||||
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
|
||||
$(LIBTOOL) $(CC) $(CFLAGS) -o grover grover.c -I./ -lquantum -static\
|
||||
-lm
|
||||
$(LIBTOOL) --mode=link $(CC) $(CFLAGS) -o grover grover.c -I./\
|
||||
-lquantum -static -lm
|
||||
|
||||
# Quantum object code tools
|
||||
|
||||
quobtools: quobprint quobdump
|
||||
|
||||
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
|
||||
$(LIBTOOL) $(CC) $(CFLAGS) -o quobdump quobdump.c -lquantum
|
||||
$(LIBTOOL) --mode=link $(CC) $(CFLAGS) -o quobdump quobdump.c -lquantum
|
||||
|
||||
# Bring this savage back home
|
||||
|
||||
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)
|
||||
|
||||
quobtools_install: quobtools
|
||||
$(LIBTOOL) $(INSTALL) -m 0755 quobprint $(BINDIR)
|
||||
$(LIBTOOL) $(INSTALL) -m 0755 quobdump $(BINDIR)
|
||||
$(LIBTOOL) --mode=install $(INSTALL) -m 0755 quobprint $(BINDIR)
|
||||
$(LIBTOOL) --mode=install $(INSTALL) -m 0755 quobdump $(BINDIR)
|
||||
|
||||
# Make everything neat and tidy
|
||||
|
||||
@@ -154,6 +162,6 @@ dist:
|
||||
-rm quantum.h config.h types.h
|
||||
mkdir libquantum-$(VERSION)
|
||||
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)/
|
||||
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
|
||||
|
||||
Copyright 2003 Bjoern Butscher, Hendrik Weimer
|
||||
Copyright 2003, 2004 Bjoern Butscher, Hendrik Weimer
|
||||
|
||||
This file is part of libquantum
|
||||
|
||||
@@ -80,7 +80,7 @@ quantum_frac_approx(int *a, int *b, int width)
|
||||
num1 = num;
|
||||
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;
|
||||
*b = den;
|
||||
|
366
config.guess
vendored
366
config.guess
vendored
@@ -1,9 +1,9 @@
|
||||
#! /bin/sh
|
||||
# Attempt to guess a canonical system name.
|
||||
# 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
|
||||
# under the terms of the GNU General Public License as published by
|
||||
@@ -53,7 +53,7 @@ version="\
|
||||
GNU config.guess ($timestamp)
|
||||
|
||||
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.
|
||||
|
||||
This is free software; see the source for copying conditions. There is NO
|
||||
@@ -88,30 +88,42 @@ if test $# != 0; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
trap 'exit 1' 1 2 15
|
||||
|
||||
dummy=dummy-$$
|
||||
trap 'rm -f $dummy.c $dummy.o $dummy.rel $dummy; exit 1' 1 2 15
|
||||
# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
|
||||
# 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
|
||||
# use `HOST_CC' if defined, but it is deprecated.
|
||||
|
||||
set_cc_for_build='case $CC_FOR_BUILD,$HOST_CC,$CC in
|
||||
,,) echo "int dummy(){}" > $dummy.c ;
|
||||
# Portable tmp directory creation inspired by the Autoconf team.
|
||||
|
||||
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
|
||||
($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1 ;
|
||||
if test $? = 0 ; then
|
||||
if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
|
||||
CC_FOR_BUILD="$c"; break ;
|
||||
fi ;
|
||||
done ;
|
||||
rm -f $dummy.c $dummy.o $dummy.rel ;
|
||||
if test x"$CC_FOR_BUILD" = x ; then
|
||||
CC_FOR_BUILD=no_compiler_found ;
|
||||
fi
|
||||
;;
|
||||
,,*) CC_FOR_BUILD=$CC ;;
|
||||
,*,*) CC_FOR_BUILD=$HOST_CC ;;
|
||||
esac'
|
||||
esac ;'
|
||||
|
||||
# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
|
||||
# (ghazi@noc.rutgers.edu 1994-08-24)
|
||||
@@ -168,21 +180,38 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
||||
;;
|
||||
esac
|
||||
# The OS release
|
||||
# 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:
|
||||
# contains redundant information, the shorter form:
|
||||
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
|
||||
echo "${machine}-${os}${release}"
|
||||
exit 0 ;;
|
||||
amd64:OpenBSD:*:*)
|
||||
echo x86_64-unknown-openbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
amiga:OpenBSD:*:*)
|
||||
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
arc:OpenBSD:*:*)
|
||||
echo mipsel-unknown-openbsd${UNAME_RELEASE}
|
||||
cats:OpenBSD:*:*)
|
||||
echo arm-unknown-openbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
hp300:OpenBSD:*:*)
|
||||
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
luna88k:OpenBSD:*:*)
|
||||
echo m88k-unknown-openbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
mac68k:OpenBSD:*:*)
|
||||
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
@@ -198,83 +227,76 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
|
||||
mvmeppc:OpenBSD:*:*)
|
||||
echo powerpc-unknown-openbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
pmax:OpenBSD:*:*)
|
||||
echo mipsel-unknown-openbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
sgi:OpenBSD:*:*)
|
||||
echo mipseb-unknown-openbsd${UNAME_RELEASE}
|
||||
echo mips64-unknown-openbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
sun3:OpenBSD:*:*)
|
||||
echo m68k-unknown-openbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
wgrisc:OpenBSD:*:*)
|
||||
echo mipsel-unknown-openbsd${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
*:OpenBSD:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
|
||||
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:*:*)
|
||||
if test $UNAME_RELEASE = "V4.0"; then
|
||||
case $UNAME_RELEASE in
|
||||
*4.0)
|
||||
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 Tn.n version is a released field test version.
|
||||
# A Xn.n version is an unreleased experimental baselevel.
|
||||
# 1.2 uses "1.2" for uname -r.
|
||||
cat <<EOF >$dummy.s
|
||||
.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'`
|
||||
echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
|
||||
exit 0 ;;
|
||||
Alpha\ *:Windows_NT*:*)
|
||||
# How do we know it's Interix rather than the generic POSIX subsystem?
|
||||
@@ -297,6 +319,12 @@ EOF
|
||||
*:OS/390:*:*)
|
||||
echo i370-ibm-openedition
|
||||
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]*:*)
|
||||
echo arm-acorn-riscix${UNAME_RELEASE}
|
||||
exit 0;;
|
||||
@@ -314,6 +342,13 @@ EOF
|
||||
NILE*:*:*:dcosx)
|
||||
echo pyramid-pyramid-svr4
|
||||
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.*:*)
|
||||
echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
||||
exit 0 ;;
|
||||
@@ -382,6 +417,9 @@ EOF
|
||||
*:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
|
||||
echo m68k-unknown-mint${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
m68k:machten:*:*)
|
||||
echo m68k-apple-machten${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
powerpc:machten:*:*)
|
||||
echo powerpc-apple-machten${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
@@ -420,16 +458,18 @@ EOF
|
||||
exit (-1);
|
||||
}
|
||||
EOF
|
||||
$CC_FOR_BUILD $dummy.c -o $dummy \
|
||||
&& ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
|
||||
&& rm -f $dummy.c $dummy && exit 0
|
||||
rm -f $dummy.c $dummy
|
||||
$CC_FOR_BUILD -o $dummy $dummy.c \
|
||||
&& $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
|
||||
&& exit 0
|
||||
echo mips-mips-riscos${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
Motorola:PowerMAX_OS:*:*)
|
||||
echo powerpc-motorola-powermax
|
||||
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
|
||||
exit 0 ;;
|
||||
Night_Hawk:Power_UNIX:*:*)
|
||||
@@ -504,8 +544,7 @@ EOF
|
||||
exit(0);
|
||||
}
|
||||
EOF
|
||||
$CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
|
||||
rm -f $dummy.c $dummy
|
||||
$CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
|
||||
echo rs6000-ibm-aix3.2.5
|
||||
elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
|
||||
echo rs6000-ibm-aix3.2.4
|
||||
@@ -603,11 +642,21 @@ EOF
|
||||
exit (0);
|
||||
}
|
||||
EOF
|
||||
(CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null) && HP_ARCH=`./$dummy`
|
||||
if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi
|
||||
rm -f $dummy.c $dummy
|
||||
(CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
|
||||
test -z "$HP_ARCH" && HP_ARCH=hppa
|
||||
fi ;;
|
||||
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}
|
||||
exit 0 ;;
|
||||
ia64:HP-UX:*:*)
|
||||
@@ -641,8 +690,7 @@ EOF
|
||||
exit (0);
|
||||
}
|
||||
EOF
|
||||
$CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0
|
||||
rm -f $dummy.c $dummy
|
||||
$CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
|
||||
echo unknown-hitachi-hiuxwe2
|
||||
exit 0 ;;
|
||||
9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
|
||||
@@ -700,21 +748,26 @@ EOF
|
||||
CRAY*TS:*:*:*)
|
||||
echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
||||
exit 0 ;;
|
||||
CRAY*T3D:*:*:*)
|
||||
echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
||||
exit 0 ;;
|
||||
CRAY*T3E:*:*:*)
|
||||
echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
||||
exit 0 ;;
|
||||
CRAY*SV1:*:*:*)
|
||||
echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
|
||||
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:*:*)
|
||||
FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
|
||||
FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
|
||||
FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
|
||||
echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
|
||||
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:*:*)
|
||||
echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
@@ -736,14 +789,17 @@ EOF
|
||||
i*:PW*:*)
|
||||
echo ${UNAME_MACHINE}-pc-pw32
|
||||
exit 0 ;;
|
||||
x86:Interix*:3*)
|
||||
echo i386-pc-interix3
|
||||
x86:Interix*:[34]*)
|
||||
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 ;;
|
||||
i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
|
||||
# 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
|
||||
# UNAME_MACHINE based on the output of uname instead of i386?
|
||||
echo i386-pc-interix
|
||||
echo i586-pc-interix
|
||||
exit 0 ;;
|
||||
i*:UWIN*:*)
|
||||
echo ${UNAME_MACHINE}-pc-uwin
|
||||
@@ -755,17 +811,34 @@ EOF
|
||||
echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
|
||||
exit 0 ;;
|
||||
*:GNU:*:*)
|
||||
# the GNU system
|
||||
echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
|
||||
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:*:*)
|
||||
echo ${UNAME_MACHINE}-pc-minix
|
||||
exit 0 ;;
|
||||
arm*:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||
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:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||
exit 0 ;;
|
||||
m32r*:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||
exit 0 ;;
|
||||
m68*:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||
exit 0 ;;
|
||||
@@ -786,8 +859,26 @@ EOF
|
||||
#endif
|
||||
EOF
|
||||
eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
|
||||
rm -f $dummy.c
|
||||
test x"${CPU}" != x && echo "${CPU}-pc-linux-gnu" && exit 0
|
||||
test x"${CPU}" != x && echo "${CPU}-unknown-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:*:*)
|
||||
echo powerpc-unknown-linux-gnu
|
||||
@@ -823,6 +914,9 @@ EOF
|
||||
s390:Linux:*:* | s390x:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-ibm-linux
|
||||
exit 0 ;;
|
||||
sh64*:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||
exit 0 ;;
|
||||
sh*:Linux:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-linux-gnu
|
||||
exit 0 ;;
|
||||
@@ -880,9 +974,11 @@ EOF
|
||||
LIBC=gnuaout
|
||||
#endif
|
||||
#endif
|
||||
#ifdef __dietlibc__
|
||||
LIBC=dietlibc
|
||||
#endif
|
||||
EOF
|
||||
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"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
|
||||
;;
|
||||
@@ -900,6 +996,26 @@ EOF
|
||||
# Use sysv4.2uw... so that sysv4* matches it.
|
||||
echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
|
||||
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.*:*)
|
||||
UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
|
||||
if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
|
||||
@@ -934,9 +1050,6 @@ EOF
|
||||
echo ${UNAME_MACHINE}-pc-sysv32
|
||||
fi
|
||||
exit 0 ;;
|
||||
i*86:*DOS:*:*)
|
||||
echo ${UNAME_MACHINE}-pc-msdosdjgpp
|
||||
exit 0 ;;
|
||||
pc:*:*:*)
|
||||
# Left here for compatibility:
|
||||
# uname -m prints for DJGPP always 'pc', but it prints nothing about
|
||||
@@ -960,9 +1073,15 @@ EOF
|
||||
# "miniframe"
|
||||
echo m68010-convergent-sysv
|
||||
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 ;;
|
||||
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=''
|
||||
test -r /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.*:*)
|
||||
echo m68k-atari-sysv4
|
||||
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.*:*)
|
||||
echo sparc-unknown-lynxos${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
@@ -1053,6 +1169,9 @@ EOF
|
||||
SX-5:SUPER-UX:*:*)
|
||||
echo sx5-nec-superux${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
SX-6:SUPER-UX:*:*)
|
||||
echo sx6-nec-superux${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
Power*:Rhapsody:*:*)
|
||||
echo powerpc-apple-rhapsody${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
@@ -1060,7 +1179,12 @@ EOF
|
||||
echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
*: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 ;;
|
||||
*:procnto*:*:* | *:QNX:[0123456789]*:*)
|
||||
UNAME_PROCESSOR=`uname -p`
|
||||
@@ -1073,7 +1197,7 @@ EOF
|
||||
*:QNX:*:4*)
|
||||
echo i386-pc-qnx
|
||||
exit 0 ;;
|
||||
NSR-[GKLNPTVW]:NONSTOP_KERNEL:*:*)
|
||||
NSR-?:NONSTOP_KERNEL:*:*)
|
||||
echo nsr-tandem-nsk${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
*:NonStop-UX:*:*)
|
||||
@@ -1096,11 +1220,6 @@ EOF
|
||||
fi
|
||||
echo ${UNAME_MACHINE}-unknown-plan9
|
||||
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:*:*)
|
||||
echo pdp10-unknown-tops10
|
||||
exit 0 ;;
|
||||
@@ -1119,11 +1238,21 @@ EOF
|
||||
*:ITS:*:*)
|
||||
echo pdp10-unknown-its
|
||||
exit 0 ;;
|
||||
i*86:XTS-300:*:STOP)
|
||||
echo ${UNAME_MACHINE}-unknown-stop
|
||||
SEI:*:*:SEIUX)
|
||||
echo mips-sei-seiux${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
i*86:atheos:*:*)
|
||||
echo ${UNAME_MACHINE}-unknown-atheos
|
||||
*:DragonFly:*:*)
|
||||
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 ;;
|
||||
esac
|
||||
|
||||
@@ -1245,8 +1374,7 @@ main ()
|
||||
}
|
||||
EOF
|
||||
|
||||
$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm -f $dummy.c $dummy && exit 0
|
||||
rm -f $dummy.c $dummy
|
||||
$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0
|
||||
|
||||
# Apollos put the system type in the environment.
|
||||
|
||||
|
200
config.sub
vendored
200
config.sub
vendored
@@ -1,9 +1,9 @@
|
||||
#! /bin/sh
|
||||
# Configuration validation subroutine script.
|
||||
# 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.
|
||||
# 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="\
|
||||
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.
|
||||
|
||||
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.
|
||||
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
|
||||
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
|
||||
basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
|
||||
;;
|
||||
@@ -144,7 +145,7 @@ case $os in
|
||||
-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
|
||||
-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
|
||||
-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
|
||||
-apple | -axis)
|
||||
-apple | -axis | -knuth | -cray)
|
||||
os=
|
||||
basic_machine=$1
|
||||
;;
|
||||
@@ -228,39 +229,45 @@ case $basic_machine in
|
||||
| a29k \
|
||||
| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[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 \
|
||||
| c4x | clipper \
|
||||
| d10v | d30v | dlx | dsp16xx \
|
||||
| fr30 | frv \
|
||||
| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
|
||||
| i370 | i860 | i960 | ia64 \
|
||||
| ip2k \
|
||||
| m32r | m68000 | m68k | m88k | mcore \
|
||||
| ip2k | iq2000 \
|
||||
| m32r | m32rle | m68000 | m68k | m88k | mcore \
|
||||
| mips | mipsbe | mipseb | mipsel | mipsle \
|
||||
| mips16 \
|
||||
| mips64 | mips64el \
|
||||
| mips64vr | mips64vrel \
|
||||
| mips64orion | mips64orionel \
|
||||
| mips64vr4100 | mips64vr4100el \
|
||||
| mips64vr4300 | mips64vr4300el \
|
||||
| mips64vr5000 | mips64vr5000el \
|
||||
| mipsisa32 | mipsisa32el \
|
||||
| mipsisa32r2 | mipsisa32r2el \
|
||||
| mipsisa64 | mipsisa64el \
|
||||
| mipsisa64r2 | mipsisa64r2el \
|
||||
| mipsisa64sb1 | mipsisa64sb1el \
|
||||
| mipsisa64sr71k | mipsisa64sr71kel \
|
||||
| mipstx39 | mipstx39el \
|
||||
| mn10200 | mn10300 \
|
||||
| msp430 \
|
||||
| ns16k | ns32k \
|
||||
| openrisc | or32 \
|
||||
| pdp10 | pdp11 | pj | pjl \
|
||||
| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
|
||||
| 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 \
|
||||
| sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \
|
||||
| sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv8 | sparcv9 | sparcv9b \
|
||||
| strongarm \
|
||||
| tahoe | thumb | tic80 | tron \
|
||||
| tahoe | thumb | tic4x | tic80 | tron \
|
||||
| v850 | v850e \
|
||||
| we32k \
|
||||
| x86 | xscale | xstormy16 | xtensa \
|
||||
| x86 | xscale | xscalee[bl] | xstormy16 | xtensa \
|
||||
| z8k)
|
||||
basic_machine=$basic_machine-unknown
|
||||
;;
|
||||
@@ -292,44 +299,52 @@ case $basic_machine in
|
||||
| arm-* | armbe-* | armle-* | armeb-* | armv*-* \
|
||||
| avr-* \
|
||||
| bs2000-* \
|
||||
| c[123]* | c30-* | [cjt]90-* | c54x-* \
|
||||
| clipper-* | cydra-* \
|
||||
| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
|
||||
| clipper-* | craynv-* | cydra-* \
|
||||
| d10v-* | d30v-* | dlx-* \
|
||||
| elxsi-* \
|
||||
| f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
|
||||
| h8300-* | h8500-* \
|
||||
| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
|
||||
| i*86-* | i860-* | i960-* | ia64-* \
|
||||
| ip2k-* \
|
||||
| m32r-* \
|
||||
| ip2k-* | iq2000-* \
|
||||
| m32r-* | m32rle-* \
|
||||
| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
|
||||
| m88110-* | m88k-* | mcore-* \
|
||||
| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
|
||||
| mips16-* \
|
||||
| mips64-* | mips64el-* \
|
||||
| mips64vr-* | mips64vrel-* \
|
||||
| mips64orion-* | mips64orionel-* \
|
||||
| mips64vr4100-* | mips64vr4100el-* \
|
||||
| mips64vr4300-* | mips64vr4300el-* \
|
||||
| mips64vr5000-* | mips64vr5000el-* \
|
||||
| mipsisa32-* | mipsisa32el-* \
|
||||
| mipsisa32r2-* | mipsisa32r2el-* \
|
||||
| mipsisa64-* | mipsisa64el-* \
|
||||
| mipsisa64r2-* | mipsisa64r2el-* \
|
||||
| mipsisa64sb1-* | mipsisa64sb1el-* \
|
||||
| mipstx39 | mipstx39el \
|
||||
| mipsisa64sr71k-* | mipsisa64sr71kel-* \
|
||||
| mipstx39-* | mipstx39el-* \
|
||||
| mmix-* \
|
||||
| msp430-* \
|
||||
| none-* | np1-* | ns16k-* | ns32k-* \
|
||||
| orion-* \
|
||||
| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
|
||||
| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
|
||||
| pyramid-* \
|
||||
| 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-* \
|
||||
| sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
|
||||
| sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
|
||||
| tahoe-* | thumb-* | tic30-* | tic54x-* | tic80-* | tron-* \
|
||||
| sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
|
||||
| tahoe-* | thumb-* \
|
||||
| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
|
||||
| tron-* \
|
||||
| v850-* | v850e-* | vax-* \
|
||||
| we32k-* \
|
||||
| x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \
|
||||
| xtensa-* \
|
||||
| x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \
|
||||
| xstormy16-* | xtensa-* \
|
||||
| ymp-* \
|
||||
| z8k-*)
|
||||
;;
|
||||
@@ -349,6 +364,9 @@ case $basic_machine in
|
||||
basic_machine=a29k-amd
|
||||
os=-udi
|
||||
;;
|
||||
abacus)
|
||||
basic_machine=abacus-unknown
|
||||
;;
|
||||
adobe68k)
|
||||
basic_machine=m68010-adobe
|
||||
os=-scout
|
||||
@@ -363,6 +381,12 @@ case $basic_machine in
|
||||
basic_machine=a29k-none
|
||||
os=-bsd
|
||||
;;
|
||||
amd64)
|
||||
basic_machine=x86_64-pc
|
||||
;;
|
||||
amd64-*)
|
||||
basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||
;;
|
||||
amdahl)
|
||||
basic_machine=580-amdahl
|
||||
os=-sysv
|
||||
@@ -422,12 +446,27 @@ case $basic_machine in
|
||||
basic_machine=j90-cray
|
||||
os=-unicos
|
||||
;;
|
||||
craynv)
|
||||
basic_machine=craynv-cray
|
||||
os=-unicosmp
|
||||
;;
|
||||
cr16c)
|
||||
basic_machine=cr16c-unknown
|
||||
os=-elf
|
||||
;;
|
||||
crds | unos)
|
||||
basic_machine=m68k-crds
|
||||
;;
|
||||
crisv32 | crisv32-* | etraxfs*)
|
||||
basic_machine=crisv32-axis
|
||||
;;
|
||||
cris | cris-* | etrax*)
|
||||
basic_machine=cris-axis
|
||||
;;
|
||||
crx)
|
||||
basic_machine=crx-unknown
|
||||
os=-elf
|
||||
;;
|
||||
da30 | da30-*)
|
||||
basic_machine=m68k-da30
|
||||
;;
|
||||
@@ -450,6 +489,10 @@ case $basic_machine in
|
||||
basic_machine=m88k-motorola
|
||||
os=-sysv3
|
||||
;;
|
||||
djgpp)
|
||||
basic_machine=i586-pc
|
||||
os=-msdosdjgpp
|
||||
;;
|
||||
dpx20 | dpx20-*)
|
||||
basic_machine=rs6000-bull
|
||||
os=-bosx
|
||||
@@ -628,10 +671,6 @@ case $basic_machine in
|
||||
mips3*)
|
||||
basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
|
||||
;;
|
||||
mmix*)
|
||||
basic_machine=mmix-knuth
|
||||
os=-mmixware
|
||||
;;
|
||||
monitor)
|
||||
basic_machine=m68k-rom68k
|
||||
os=-coff
|
||||
@@ -723,6 +762,10 @@ case $basic_machine in
|
||||
basic_machine=or32-unknown
|
||||
os=-coff
|
||||
;;
|
||||
os400)
|
||||
basic_machine=powerpc-ibm
|
||||
os=-os400
|
||||
;;
|
||||
OSE68000 | ose68000)
|
||||
basic_machine=m68000-ericsson
|
||||
os=-ose
|
||||
@@ -751,21 +794,27 @@ case $basic_machine in
|
||||
pentium | p5 | k5 | k6 | nexgen | viac3)
|
||||
basic_machine=i586-pc
|
||||
;;
|
||||
pentiumpro | p6 | 6x86 | athlon)
|
||||
pentiumpro | p6 | 6x86 | athlon | athlon_*)
|
||||
basic_machine=i686-pc
|
||||
;;
|
||||
pentiumii | pentium2)
|
||||
pentiumii | pentium2 | pentiumiii | pentium3)
|
||||
basic_machine=i686-pc
|
||||
;;
|
||||
pentium4)
|
||||
basic_machine=i786-pc
|
||||
;;
|
||||
pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
|
||||
basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||
;;
|
||||
pentiumpro-* | p6-* | 6x86-* | athlon-*)
|
||||
basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||
;;
|
||||
pentiumii-* | pentium2-*)
|
||||
pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
|
||||
basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||
;;
|
||||
pentium4-*)
|
||||
basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
|
||||
;;
|
||||
pn)
|
||||
basic_machine=pn-gould
|
||||
;;
|
||||
@@ -818,6 +867,16 @@ case $basic_machine in
|
||||
basic_machine=a29k-amd
|
||||
os=-udi
|
||||
;;
|
||||
sb1)
|
||||
basic_machine=mipsisa64sb1-unknown
|
||||
;;
|
||||
sb1el)
|
||||
basic_machine=mipsisa64sb1el-unknown
|
||||
;;
|
||||
sei)
|
||||
basic_machine=mips-sei
|
||||
os=-seiux
|
||||
;;
|
||||
sequent)
|
||||
basic_machine=i386-sequent
|
||||
;;
|
||||
@@ -825,6 +884,9 @@ case $basic_machine in
|
||||
basic_machine=sh-hitachi
|
||||
os=-hms
|
||||
;;
|
||||
sh64)
|
||||
basic_machine=sh64-unknown
|
||||
;;
|
||||
sparclite-wrs | simso-wrs)
|
||||
basic_machine=sparclite-wrs
|
||||
os=-vxworks
|
||||
@@ -891,10 +953,6 @@ case $basic_machine in
|
||||
basic_machine=i386-sequent
|
||||
os=-dynix
|
||||
;;
|
||||
t3d)
|
||||
basic_machine=alpha-cray
|
||||
os=-unicos
|
||||
;;
|
||||
t3e)
|
||||
basic_machine=alphaev5-cray
|
||||
os=-unicos
|
||||
@@ -907,6 +965,14 @@ case $basic_machine in
|
||||
basic_machine=tic54x-unknown
|
||||
os=-coff
|
||||
;;
|
||||
tic55x | c55x*)
|
||||
basic_machine=tic55x-unknown
|
||||
os=-coff
|
||||
;;
|
||||
tic6x | c6x*)
|
||||
basic_machine=tic6x-unknown
|
||||
os=-coff
|
||||
;;
|
||||
tx39)
|
||||
basic_machine=mipstx39-unknown
|
||||
;;
|
||||
@@ -920,6 +986,10 @@ case $basic_machine in
|
||||
tower | tower-32)
|
||||
basic_machine=m68k-ncr
|
||||
;;
|
||||
tpf)
|
||||
basic_machine=s390x-ibm
|
||||
os=-tpf
|
||||
;;
|
||||
udi29k)
|
||||
basic_machine=a29k-amd
|
||||
os=-udi
|
||||
@@ -963,9 +1033,9 @@ case $basic_machine in
|
||||
basic_machine=hppa1.1-winbond
|
||||
os=-proelf
|
||||
;;
|
||||
windows32)
|
||||
basic_machine=i386-pc
|
||||
os=-windows32-msvcrt
|
||||
xbox)
|
||||
basic_machine=i686-pc
|
||||
os=-mingw32
|
||||
;;
|
||||
xps | xps100)
|
||||
basic_machine=xps100-honeywell
|
||||
@@ -997,6 +1067,9 @@ case $basic_machine in
|
||||
romp)
|
||||
basic_machine=romp-ibm
|
||||
;;
|
||||
mmix)
|
||||
basic_machine=mmix-knuth
|
||||
;;
|
||||
rs6000)
|
||||
basic_machine=rs6000-ibm
|
||||
;;
|
||||
@@ -1013,13 +1086,13 @@ case $basic_machine in
|
||||
we32k)
|
||||
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
|
||||
;;
|
||||
sh64)
|
||||
basic_machine=sh64-unknown
|
||||
;;
|
||||
sparc | sparcv9 | sparcv9b)
|
||||
sparc | sparcv8 | sparcv9 | sparcv9b)
|
||||
basic_machine=sparc-sun
|
||||
;;
|
||||
cydra)
|
||||
@@ -1037,10 +1110,6 @@ case $basic_machine in
|
||||
pmac | pmac-mpw)
|
||||
basic_machine=powerpc-apple
|
||||
;;
|
||||
c4x*)
|
||||
basic_machine=c4x-none
|
||||
os=-coff
|
||||
;;
|
||||
*-unknown)
|
||||
# Make sure to match an already-canonicalized machine name.
|
||||
;;
|
||||
@@ -1096,18 +1165,20 @@ case $os in
|
||||
| -aos* \
|
||||
| -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
|
||||
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
|
||||
| -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
|
||||
| -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
|
||||
| -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \
|
||||
| -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
|
||||
| -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
|
||||
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
|
||||
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
|
||||
| -chorusos* | -chorusrdb* \
|
||||
| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
|
||||
| -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
|
||||
| -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \
|
||||
| -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \
|
||||
| -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
|
||||
| -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
|
||||
| -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
|
||||
| -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.
|
||||
;;
|
||||
-qnx*)
|
||||
@@ -1119,8 +1190,10 @@ case $os in
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
-nto-qnx*)
|
||||
;;
|
||||
-nto*)
|
||||
os=-nto-qnx
|
||||
os=`echo $os | sed -e 's|nto|nto-qnx|'`
|
||||
;;
|
||||
-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
|
||||
| -windows* | -osx | -abug | -netware* | -os9* | -beos* \
|
||||
@@ -1129,6 +1202,9 @@ case $os in
|
||||
-mac*)
|
||||
os=`echo $os | sed -e 's|mac|macos|'`
|
||||
;;
|
||||
-linux-dietlibc)
|
||||
os=-linux-dietlibc
|
||||
;;
|
||||
-linux*)
|
||||
os=`echo $os | sed -e 's|linux|linux-gnu|'`
|
||||
;;
|
||||
@@ -1141,6 +1217,9 @@ case $os in
|
||||
-opened*)
|
||||
os=-openedition
|
||||
;;
|
||||
-os400*)
|
||||
os=-os400
|
||||
;;
|
||||
-wince*)
|
||||
os=-wince
|
||||
;;
|
||||
@@ -1162,6 +1241,9 @@ case $os in
|
||||
-atheos*)
|
||||
os=-atheos
|
||||
;;
|
||||
-syllable*)
|
||||
os=-syllable
|
||||
;;
|
||||
-386bsd)
|
||||
os=-bsd
|
||||
;;
|
||||
@@ -1184,6 +1266,9 @@ case $os in
|
||||
-sinix*)
|
||||
os=-sysv4
|
||||
;;
|
||||
-tpf*)
|
||||
os=-tpf
|
||||
;;
|
||||
-triton*)
|
||||
os=-sysv3
|
||||
;;
|
||||
@@ -1214,6 +1299,15 @@ case $os in
|
||||
-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
|
||||
os=-mint
|
||||
;;
|
||||
-aros*)
|
||||
os=-aros
|
||||
;;
|
||||
-kaos*)
|
||||
os=-kaos
|
||||
;;
|
||||
-zvmoe)
|
||||
os=-zvmoe
|
||||
;;
|
||||
-none)
|
||||
;;
|
||||
*)
|
||||
@@ -1245,6 +1339,9 @@ case $basic_machine in
|
||||
arm*-semi)
|
||||
os=-aout
|
||||
;;
|
||||
c4x-* | tic4x-*)
|
||||
os=-coff
|
||||
;;
|
||||
# This must come before the *-dec entry.
|
||||
pdp10-*)
|
||||
os=-tops20
|
||||
@@ -1291,6 +1388,9 @@ case $basic_machine in
|
||||
*-ibm)
|
||||
os=-aix
|
||||
;;
|
||||
*-knuth)
|
||||
os=-mmixware
|
||||
;;
|
||||
*-wec)
|
||||
os=-proelf
|
||||
;;
|
||||
@@ -1423,9 +1523,15 @@ case $basic_machine in
|
||||
-mvs* | -opened*)
|
||||
vendor=ibm
|
||||
;;
|
||||
-os400*)
|
||||
vendor=ibm
|
||||
;;
|
||||
-ptx*)
|
||||
vendor=sequent
|
||||
;;
|
||||
-tpf*)
|
||||
vendor=ibm
|
||||
;;
|
||||
-vxsim* | -vxworks* | -windiss*)
|
||||
vendor=wrs
|
||||
;;
|
||||
|
@@ -1,5 +1,5 @@
|
||||
# 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_HEADER([config.h])
|
||||
|
||||
@@ -87,8 +87,9 @@ AC_SUBST(I)
|
||||
# Profiling check
|
||||
AC_ARG_ENABLE(profiling,
|
||||
[ --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
|
||||
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
|
||||
|
||||
Copyright 2003 Bjoern Butscher, Hendrik Weimer
|
||||
Copyright 2003, 2004 Bjoern Butscher, Hendrik Weimer
|
||||
|
||||
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
|
||||
having a determinant of 1. */
|
||||
/* Apply the 2x2 matrix M to the target bit. M should be unitary. */
|
||||
|
||||
void
|
||||
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);
|
||||
}
|
||||
|
||||
/* 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 */
|
||||
|
||||
void
|
||||
|
14
matrix.c
14
matrix.c
@@ -89,25 +89,25 @@ quantum_delete_matrix(quantum_matrix *m)
|
||||
void
|
||||
quantum_print_matrix(quantum_matrix m)
|
||||
{
|
||||
int i, j, l, z=0;
|
||||
int i, j, z=0;
|
||||
/* int l; */
|
||||
|
||||
while ((1 << z++) < m.rows);
|
||||
z--;
|
||||
|
||||
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))
|
||||
printf(" ");
|
||||
printf("%i", (i >> l) & 1);
|
||||
}
|
||||
|
||||
printf(" | ");
|
||||
} */
|
||||
|
||||
for(j=0; j<m.cols; j++)
|
||||
printf("%f %fi ", quantum_real(M(m, j, i)), quantum_imag(M(m, j, i)));
|
||||
printf("|\n");
|
||||
printf("% f %+fi\t", quantum_real(M(m, j, i)),
|
||||
quantum_imag(M(m, j, i)));
|
||||
printf("\n");
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
|
76
measure.c
76
measure.c
@@ -1,6 +1,6 @@
|
||||
/* measure.c: Quantum register measurement
|
||||
|
||||
Copyright 2003 Bjoern Butscher, Hendrik Weimer
|
||||
Copyright 2003, 2004 Bjoern Butscher, Hendrik Weimer
|
||||
|
||||
This file is part of libquantum
|
||||
|
||||
@@ -84,10 +84,10 @@ quantum_measure(quantum_reg reg)
|
||||
int
|
||||
quantum_bmeasure(int pos, quantum_reg *reg)
|
||||
{
|
||||
int i, j, k;
|
||||
int size=0, result=0;
|
||||
double d=0, pa=0, r;
|
||||
MAX_UNSIGNED lpat=0, rpat=0, pos2;
|
||||
int i;
|
||||
int result=0;
|
||||
double pa=0, r;
|
||||
MAX_UNSIGNED pos2;
|
||||
quantum_reg out;
|
||||
|
||||
if(quantum_objcode_put(BMEASURE, pos))
|
||||
@@ -111,73 +111,11 @@ quantum_bmeasure(int pos, quantum_reg *reg)
|
||||
if (r > pa)
|
||||
result = 1;
|
||||
|
||||
/* Eradicate all amplitudes of base states which have been ruled out
|
||||
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++;
|
||||
}
|
||||
}
|
||||
out = quantum_state_collapse(pos, result, *reg);
|
||||
|
||||
quantum_delete_qureg_hashpreserve(reg);
|
||||
*reg = out;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
39
quantum.h.in
39
quantum.h.in
@@ -1,6 +1,6 @@
|
||||
/* 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
|
||||
|
||||
@@ -28,6 +28,24 @@
|
||||
#define COMPLEX_FLOAT @CF_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 */
|
||||
|
||||
struct quantum_matrix_struct {
|
||||
@@ -59,6 +77,15 @@ struct quantum_reg_struct
|
||||
|
||||
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 void quantum_delete_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_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_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 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
|
||||
|
108
qureg.c
108
qureg.c
@@ -1,6 +1,6 @@
|
||||
/* qureg.c: Quantum register management
|
||||
|
||||
Copyright 2003 Bjoern Butscher, Hendrik Weimer
|
||||
Copyright 2003, 2004 Bjoern Butscher, Hendrik Weimer
|
||||
|
||||
This file is part of libquantum
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
#include <math.h>
|
||||
|
||||
#include "matrix.h"
|
||||
#include "qureg.h"
|
||||
@@ -91,10 +91,6 @@ quantum_matrix2qureg(quantum_matrix *m, int width)
|
||||
}
|
||||
}
|
||||
|
||||
/* Initialize the PRNG */
|
||||
|
||||
/* srandom(time(0)); */
|
||||
|
||||
return reg;
|
||||
}
|
||||
|
||||
@@ -137,7 +133,7 @@ quantum_new_qureg(MAX_UNSIGNED initval, int width)
|
||||
|
||||
/* Initialize the PRNG */
|
||||
|
||||
srandom(time(0));
|
||||
/* srandom(time(0)); */
|
||||
|
||||
c = getenv("QUOBFILE");
|
||||
|
||||
@@ -176,6 +172,7 @@ quantum_destroy_hash(quantum_reg *reg)
|
||||
{
|
||||
free(reg->hash);
|
||||
quantum_memman(-(1 << reg->hashw) * sizeof(int));
|
||||
reg->hash = 0;
|
||||
}
|
||||
|
||||
/* Delete a quantum register */
|
||||
@@ -208,7 +205,7 @@ quantum_print_qureg(quantum_reg reg)
|
||||
|
||||
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_prob_inline(reg.node[i].amplitude));
|
||||
for(j=reg.width-1;j>=0;j--)
|
||||
@@ -323,3 +320,98 @@ quantum_kronecker(quantum_reg *reg1, quantum_reg *reg2)
|
||||
|
||||
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
|
||||
|
||||
Copyright 2003 Bjoern Butscher, Hendrik Weimer
|
||||
Copyright 2003, 2004 Bjoern Butscher, Hendrik Weimer
|
||||
|
||||
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 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 */
|
||||
|
||||
static inline unsigned int
|
||||
|
Reference in New Issue
Block a user