|
@@ -0,0 +1,34 @@
|
|
|
+{ %OPT=-O4 -Sg }
|
|
|
+{$mode objfpc} {$h+}
|
|
|
+label A0, A1, B0, B1, C0, C1;
|
|
|
+
|
|
|
+var
|
|
|
+ x, y: single;
|
|
|
+ dontDrop: string;
|
|
|
+ size: ptrint;
|
|
|
+
|
|
|
+begin
|
|
|
+ x := random;
|
|
|
+A0:
|
|
|
+ y := x * 1 * 2 * 3 * 4 * 5 * 6; // folds
|
|
|
+A1:
|
|
|
+ writestr(dontDrop, y);
|
|
|
+ size := CodePointer(@A1) - CodePointer(@A0);
|
|
|
+ writeln('x * 1 * 2 * 3 * 4 * 5 * 6: ', CodePointer(@A1) - CodePointer(@A0), ' b');
|
|
|
+
|
|
|
+B0:
|
|
|
+ y := x * 1 / 2 * 3 / 4 * 5 / 6; // doesn’t fold
|
|
|
+B1:
|
|
|
+ writestr(dontDrop, y);
|
|
|
+ if CodePointer(@B1) - CodePointer(@B0) > size then
|
|
|
+ halt(1);
|
|
|
+ writeln('x * 1 / 2 * 3 / 4 * 5 / 6: ', CodePointer(@B1) - CodePointer(@B0), ' b');
|
|
|
+
|
|
|
+C0:
|
|
|
+ y := x / 1 / 2 / 3 / 4 / 5 / 6; // doesn’t fold
|
|
|
+C1:
|
|
|
+ writestr(dontDrop, y);
|
|
|
+ if CodePointer(@C1) - CodePointer(@C0) > size then
|
|
|
+ halt(1);
|
|
|
+ writeln('x / 1 / 2 / 3 / 4 / 5 / 6: ', CodePointer(@C1) - CodePointer(@C0), ' b');
|
|
|
+end.
|