aboutsummaryrefslogtreecommitdiffstats
path: root/test/cminor/qsort.cm
diff options
context:
space:
mode:
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 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;
+}