summaryrefslogtreecommitdiff
path: root/test/cminor/qsort.cm
diff options
context:
space:
mode:
authorGravatar xleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e>2006-02-09 14:55:48 +0000
committerGravatar xleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e>2006-02-09 14:55:48 +0000
commit2ae43be7b9d4118335c9d2cef6e098f9b9f807fe (patch)
treebbb5e49ccbf7e3614966571acc317f8d318fecad /test/cminor/qsort.cm
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.cm30
1 files changed, 30 insertions, 0 deletions
diff --git a/test/cminor/qsort.cm b/test/cminor/qsort.cm
new file mode 100644
index 0000000..004f8cd
--- /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;
+}