diff options
author | xleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e> | 2006-02-09 14:55:48 +0000 |
---|---|---|
committer | xleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e> | 2006-02-09 14:55:48 +0000 |
commit | 2ae43be7b9d4118335c9d2cef6e098f9b9f807fe (patch) | |
tree | bbb5e49ccbf7e3614966571acc317f8d318fecad /test/cminor/qsort.cm | |
download | compcert-2ae43be7b9d4118335c9d2cef6e098f9b9f807fe.tar.gz compcert-2ae43be7b9d4118335c9d2cef6e098f9b9f807fe.zip |
Initial import of compcert
git-svn-id: https://yquem.inria.fr/compcert/svn/compcert/trunk@1 fca1b0fc-160b-0410-b1d3-a4f43f01ea2e
Diffstat (limited to 'test/cminor/qsort.cm')
-rw-r--r-- | test/cminor/qsort.cm | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/test/cminor/qsort.cm b/test/cminor/qsort.cm new file mode 100644 index 00000000..004f8cd7 --- /dev/null +++ b/test/cminor/qsort.cm @@ -0,0 +1,30 @@ +"quicksort"(lo, hi, a): int -> int -> int -> void +{ + var i, j, pivot, temp; + + if (! (lo < hi)) return; + i = lo; + j = hi; + pivot = int32[a + hi * 4]; + {{ loop { + if (! (i < j)) exit; + {{ loop { + if (i >= hi || int32[a + i * 4] > pivot) exit; + i = i + 1; + } }} + {{ loop { + if (j <= lo || int32[a + j * 4] < pivot) exit; + j = j - 1; + } }} + if (i < j) { + temp = int32[a + i * 4]; + int32[a + i * 4] = int32[a + j * 4]; + int32[a + j * 4] = temp; + } + } }} + temp = int32[a + i * 4]; + int32[a + i * 4] = int32[a + hi * 4]; + int32[a + hi * 4] = temp; + "quicksort"(lo, i - 1, a) : int -> int -> int -> void; + "quicksort"(i + 1, hi, a) : int -> int -> int -> void; +} |