Index: xz/tests/bcj_test.c |
=================================================================== |
--- xz/tests/bcj_test.c (revision 0) |
+++ xz/tests/bcj_test.c (revision 0) |
@@ -0,0 +1,65 @@ |
+/////////////////////////////////////////////////////////////////////////////// |
+// |
+/// \file bcj_test.c |
+/// \brief Source code of compress_prepared_bcj_* |
+/// |
+/// This is a simple program that should make the compiler to generate |
+/// PC-relative branches, jumps, and calls. The compiled files can then |
+/// be used to test the branch conversion filters. Note that this program |
+/// itself does nothing useful. |
+/// |
+/// Compiling: gcc -std=c99 -fPIC -c bcj_test.c |
+/// Don't optimize or strip. |
+// |
+// Author: Lasse Collin |
+// |
+// This file has been put into the public domain. |
+// You can do whatever you want with this file. |
+// |
+/////////////////////////////////////////////////////////////////////////////// |
+ |
+extern int jump(int a, int b); |
+ |
+ |
+extern int |
+call(int a, int b) |
+{ |
+ if (a < b) |
+ a = jump(a, b); |
+ |
+ return a; |
+} |
+ |
+ |
+extern int |
+jump(int a, int b) |
+{ |
+ // The loop generates conditional jump backwards. |
+ while (1) { |
+ if (a < b) { |
+ a *= 2; |
+ a += 3 * b; |
+ break; |
+ } else { |
+ // Put enough code here to prevent JMP SHORT on x86. |
+ a += b; |
+ a /= 2; |
+ b += b % 5; |
+ a -= b / 3; |
+ b = 2 * b + a - 1; |
+ a *= b + a + 1; |
+ b += a - 1; |
+ a += b * 2 - a / 5; |
+ } |
+ } |
+ |
+ return a; |
+} |
+ |
+ |
+int |
+main(int argc, char **argv) |
+{ |
+ int a = call(argc, argc + 1); |
+ return a == 0; |
+} |
Property changes on: xz/tests/bcj_test.c |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |