You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2704 lines
68 KiB
2704 lines
68 KiB
commit dd9992d1b96b5811873c98a208c029bebb0c3577 |
|
Author: law <law@138bc75d-0d04-0410-961f-82ee72b054a4> |
|
Date: Wed Sep 20 05:35:07 2017 +0000 |
|
|
|
* config/i386/i386.c (ix86_adjust_stack_and_probe_stack_clash): New. |
|
(ix86_expand_prologue): Dump stack clash info as needed. |
|
Call ix86_adjust_stack_and_probe_stack_clash as needed. |
|
|
|
* gcc.dg/stack-check-4.c: New test. |
|
* gcc.dg/stack-check-5.c: New test. |
|
* gcc.dg/stack-check-6.c: New test. |
|
* gcc.dg/stack-check-6a.c: New test. |
|
* gcc.dg/stack-check-7.c: New test. |
|
* gcc.dg/stack-check-8.c: New test. |
|
* gcc.dg/stack-check-9.c: New test. |
|
* gcc.dg/stack-check-10.c: New test. |
|
* lib/target-supports.exp |
|
(check_effective_target_supports_stack_clash_protection): Enable for |
|
x86 and x86_64 targets. |
|
|
|
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@252998 138bc75d-0d04-0410-961f-82ee72b054a4 |
|
|
|
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c |
|
index d996fd160e8..a555b0774c0 100644 |
|
--- a/gcc/config/i386/i386.c |
|
+++ b/gcc/config/i386/i386.c |
|
@@ -9839,6 +9839,147 @@ release_scratch_register_on_entry (struct scratch_reg *sr) |
|
|
|
#define PROBE_INTERVAL (1 << STACK_CHECK_PROBE_INTERVAL_EXP) |
|
|
|
+/* Emit code to adjust the stack pointer by SIZE bytes while probing it. |
|
+ |
|
+ This differs from the next routine in that it tries hard to prevent |
|
+ attacks that jump the stack guard. Thus it is never allowed to allocate |
|
+ more than PROBE_INTERVAL bytes of stack space without a suitable |
|
+ probe. */ |
|
+ |
|
+static void |
|
+ix86_adjust_stack_and_probe_stack_clash (const HOST_WIDE_INT size) |
|
+{ |
|
+ struct machine_function *m = cfun->machine; |
|
+ |
|
+ /* If this function does not statically allocate stack space, then |
|
+ no probes are needed. */ |
|
+ if (!size) |
|
+ { |
|
+ dump_stack_clash_frame_info (NO_PROBE_NO_FRAME, false); |
|
+ return; |
|
+ } |
|
+ |
|
+ /* If we are a noreturn function, then we have to consider the |
|
+ possibility that we're called via a jump rather than a call. |
|
+ |
|
+ Thus we don't have the implicit probe generated by saving the |
|
+ return address into the stack at the call. Thus, the stack |
|
+ pointer could be anywhere in the guard page. The safe thing |
|
+ to do is emit a probe now. |
|
+ |
|
+ ?!? This should be revamped to work like aarch64 and s390 where |
|
+ we track the offset from the most recent probe. Normally that |
|
+ offset would be zero. For a non-return function we would reset |
|
+ it to PROBE_INTERVAL - (STACK_BOUNDARY / BITS_PER_UNIT). Then |
|
+ we just probe when we cross PROBE_INTERVAL. */ |
|
+ if (TREE_THIS_VOLATILE (cfun->decl)) |
|
+ { |
|
+ emit_stack_probe (plus_constant (Pmode, stack_pointer_rtx, |
|
+ -GET_MODE_SIZE (word_mode))); |
|
+ emit_insn (gen_blockage ()); |
|
+ } |
|
+ |
|
+ /* If we allocate less than the size of the guard statically, |
|
+ then no probing is necessary, but we do need to allocate |
|
+ the stack. */ |
|
+ if (size < (1 << PARAM_VALUE (PARAM_STACK_CLASH_PROTECTION_GUARD_SIZE))) |
|
+ { |
|
+ pro_epilogue_adjust_stack (stack_pointer_rtx, stack_pointer_rtx, |
|
+ GEN_INT (-size), -1, |
|
+ m->fs.cfa_reg == stack_pointer_rtx); |
|
+ dump_stack_clash_frame_info (NO_PROBE_SMALL_FRAME, true); |
|
+ return; |
|
+ } |
|
+ |
|
+ /* We're allocating a large enough stack frame that we need to |
|
+ emit probes. Either emit them inline or in a loop depending |
|
+ on the size. */ |
|
+ HOST_WIDE_INT probe_interval |
|
+ = 1 << PARAM_VALUE (PARAM_STACK_CLASH_PROTECTION_PROBE_INTERVAL); |
|
+ if (size <= 4 * probe_interval) |
|
+ { |
|
+ HOST_WIDE_INT i; |
|
+ for (i = probe_interval; i <= size; i += probe_interval) |
|
+ { |
|
+ /* Allocate PROBE_INTERVAL bytes. */ |
|
+ pro_epilogue_adjust_stack (stack_pointer_rtx, stack_pointer_rtx, |
|
+ GEN_INT (-probe_interval), -1, |
|
+ m->fs.cfa_reg == stack_pointer_rtx); |
|
+ |
|
+ /* And probe at *sp. */ |
|
+ emit_stack_probe (stack_pointer_rtx); |
|
+ emit_insn (gen_blockage ()); |
|
+ } |
|
+ |
|
+ /* We need to allocate space for the residual, but we do not need |
|
+ to probe the residual. */ |
|
+ HOST_WIDE_INT residual = (i - probe_interval - size); |
|
+ if (residual) |
|
+ pro_epilogue_adjust_stack (stack_pointer_rtx, stack_pointer_rtx, |
|
+ GEN_INT (residual), -1, |
|
+ m->fs.cfa_reg == stack_pointer_rtx); |
|
+ dump_stack_clash_frame_info (PROBE_INLINE, residual != 0); |
|
+ } |
|
+ else |
|
+ { |
|
+ struct scratch_reg sr; |
|
+ get_scratch_register_on_entry (&sr); |
|
+ |
|
+ /* Step 1: round SIZE down to a multiple of the interval. */ |
|
+ HOST_WIDE_INT rounded_size = size & -probe_interval; |
|
+ |
|
+ /* Step 2: compute final value of the loop counter. Use lea if |
|
+ possible. */ |
|
+ rtx addr = plus_constant (Pmode, stack_pointer_rtx, -rounded_size); |
|
+ rtx insn; |
|
+ if (address_operand (addr, Pmode)) |
|
+ insn = emit_insn (gen_rtx_SET (VOIDmode, sr.reg, addr)); |
|
+ else |
|
+ { |
|
+ emit_move_insn (sr.reg, GEN_INT (-rounded_size)); |
|
+ insn = emit_insn (gen_rtx_SET (VOIDmode, sr.reg, |
|
+ gen_rtx_PLUS (Pmode, sr.reg, |
|
+ stack_pointer_rtx))); |
|
+ } |
|
+ if (m->fs.cfa_reg == stack_pointer_rtx) |
|
+ { |
|
+ add_reg_note (insn, REG_CFA_DEF_CFA, |
|
+ plus_constant (Pmode, sr.reg, |
|
+ m->fs.cfa_offset + rounded_size)); |
|
+ RTX_FRAME_RELATED_P (insn) = 1; |
|
+ } |
|
+ |
|
+ /* Step 3: the loop. */ |
|
+ rtx size_rtx = GEN_INT (rounded_size); |
|
+ insn = emit_insn (ix86_gen_adjust_stack_and_probe (sr.reg, sr.reg, |
|
+ size_rtx)); |
|
+ if (m->fs.cfa_reg == stack_pointer_rtx) |
|
+ { |
|
+ m->fs.cfa_offset += rounded_size; |
|
+ add_reg_note (insn, REG_CFA_DEF_CFA, |
|
+ plus_constant (Pmode, stack_pointer_rtx, |
|
+ m->fs.cfa_offset)); |
|
+ RTX_FRAME_RELATED_P (insn) = 1; |
|
+ } |
|
+ m->fs.sp_offset += rounded_size; |
|
+ emit_insn (gen_blockage ()); |
|
+ |
|
+ /* Step 4: adjust SP if we cannot assert at compile-time that SIZE |
|
+ is equal to ROUNDED_SIZE. */ |
|
+ |
|
+ if (size != rounded_size) |
|
+ pro_epilogue_adjust_stack (stack_pointer_rtx, stack_pointer_rtx, |
|
+ GEN_INT (rounded_size - size), -1, |
|
+ m->fs.cfa_reg == stack_pointer_rtx); |
|
+ dump_stack_clash_frame_info (PROBE_LOOP, size != rounded_size); |
|
+ |
|
+ release_scratch_register_on_entry (&sr); |
|
+ } |
|
+ |
|
+ /* Make sure nothing is scheduled before we are done. */ |
|
+ emit_insn (gen_blockage ()); |
|
+} |
|
+ |
|
/* Emit code to adjust the stack pointer by SIZE bytes while probing it. */ |
|
|
|
static void |
|
@@ -10529,12 +10670,19 @@ ix86_expand_prologue (void) |
|
|
|
/* The stack has already been decremented by the instruction calling us |
|
so probe if the size is non-negative to preserve the protection area. */ |
|
- if (allocate >= 0 && flag_stack_check == STATIC_BUILTIN_STACK_CHECK) |
|
+ if (allocate >= 0 |
|
+ && (flag_stack_check == STATIC_BUILTIN_STACK_CHECK |
|
+ || flag_stack_clash_protection)) |
|
{ |
|
/* We expect the registers to be saved when probes are used. */ |
|
gcc_assert (int_registers_saved); |
|
|
|
- if (STACK_CHECK_MOVING_SP) |
|
+ if (flag_stack_clash_protection) |
|
+ { |
|
+ ix86_adjust_stack_and_probe_stack_clash (allocate); |
|
+ allocate = 0; |
|
+ } |
|
+ else if (STACK_CHECK_MOVING_SP) |
|
{ |
|
ix86_adjust_stack_and_probe (allocate); |
|
allocate = 0; |
|
diff --git a/gcc/testsuite/gcc.dg/stack-check-10.c b/gcc/testsuite/gcc.dg/stack-check-10.c |
|
new file mode 100644 |
|
index 00000000000..a86956ad692 |
|
--- /dev/null |
|
+++ b/gcc/testsuite/gcc.dg/stack-check-10.c |
|
@@ -0,0 +1,41 @@ |
|
+/* { dg-do compile } */ |
|
+/* { dg-options "-O2 -fstack-clash-protection -fdump-rtl-pro_and_epilogue -fno-optimize-sibling-calls --param stack-clash-protection-probe-interval=12 --param stack-clash-protection-guard-size=12" } */ |
|
+/* { dg-require-effective-target supports_stack_clash_protection } */ |
|
+ |
|
+int f (int *); |
|
+ |
|
+int |
|
+g (int a) |
|
+{ |
|
+ return f (&a); |
|
+} |
|
+ |
|
+int f1 (void); |
|
+int f2 (int); |
|
+ |
|
+int |
|
+f3 (void) |
|
+{ |
|
+ return f2 (f1 ()); |
|
+} |
|
+ |
|
+ |
|
+/* If we have caller implicit probes, then we should not need probes in either callee. |
|
+ Else callees may need probes, particularly if non-leaf functions require a |
|
+ frame/frame pointer. */ |
|
+/* { dg-final { scan-rtl-dump-times "Stack clash no probe" 2 "pro_and_epilogue" { target caller_implicit_probes } } } */ |
|
+/* { dg-final { scan-rtl-dump-times "Stack clash inline probe" 1 "pro_and_epilogue" { target { ! caller_implicit_probes } } } } */ |
|
+/* { dg-final { scan-rtl-dump-times "Stack clash no probe" 1 "pro_and_epilogue" { target { ! caller_implicit_probes } } } } */ |
|
+ |
|
+/* Neither of these functions are a nonreturn function. */ |
|
+/* { dg-final { scan-rtl-dump-times "Stack clash not noreturn" 2 "pro_and_epilogue" } } */ |
|
+ |
|
+/* If the callee realigns the stack or has a mandatory frame, then both functions |
|
+ have a residual allocation. Else just g() has a residual allocation. */ |
|
+/* { dg-final { scan-rtl-dump-times "Stack clash residual allocation in prologue" 2 "pro_and_epilogue" } } */ |
|
+ |
|
+ |
|
+/* If the target has frame pointers for non-leafs, then both functions will |
|
+ need a frame pointer. Otherwise neither should. */ |
|
+/* { dg-final { scan-rtl-dump-times "Stack clash no frame pointer needed" 2 "pro_and_epilogue" { target { ! frame_pointer_for_non_leaf } } } } */ |
|
+/* { dg-final { scan-rtl-dump-times "Stack clash frame pointer needed" 2 "pro_and_epilogue" { target { frame_pointer_for_non_leaf } } } } */ |
|
diff --git a/gcc/testsuite/gcc.dg/stack-check-3.c b/gcc/testsuite/gcc.dg/stack-check-3.c |
|
index 58fb65649ee..f0bf7c71a5b 100644 |
|
--- a/gcc/testsuite/gcc.dg/stack-check-3.c |
|
+++ b/gcc/testsuite/gcc.dg/stack-check-3.c |
|
@@ -7,7 +7,7 @@ |
|
residual allocation + probe for f?. */ |
|
|
|
/* { dg-do compile } */ |
|
-/* { dg-options "-O2 -fstack-clash-protection -fdump-rtl-expand -fno-optimize-sibling-calls --param stack-clash-protection-probe-interval=4096 --param stack-clash-protection-guard-size=4096" } */ |
|
+/* { dg-options "-O2 -fstack-clash-protection -fdump-rtl-expand -fno-optimize-sibling-calls --param stack-clash-protection-probe-interval=12 --param stack-clash-protection-guard-size=12" } */ |
|
/* { dg-require-effective-target supports_stack_clash_protection } */ |
|
|
|
__attribute__((noinline, noclone)) void |
|
diff --git a/gcc/testsuite/gcc.dg/stack-check-4.c b/gcc/testsuite/gcc.dg/stack-check-4.c |
|
new file mode 100644 |
|
index 00000000000..b0c5c61972f |
|
--- /dev/null |
|
+++ b/gcc/testsuite/gcc.dg/stack-check-4.c |
|
@@ -0,0 +1,42 @@ |
|
+/* On targets where the call instruction is an implicit probe of *sp, we |
|
+ elide stack probes as long as the size of the local stack is less than |
|
+ PROBE_INTERVAL. |
|
+ |
|
+ But if the caller were to transform a tail call into a direct jump |
|
+ we do not have that implicit probe. This normally isn't a problem as |
|
+ the caller must not have a local frame for that optimization to apply. |
|
+ |
|
+ However, a sufficiently smart compiler could realize that the caller's |
|
+ local stack need not be torn down and thus could transform a call into |
|
+ a jump if the target is a noreturn function, even if the caller has |
|
+ a local frame. |
|
+ |
|
+ To guard against that, targets that depend on *sp being probed by the |
|
+ call itself must emit a probe if the target function is a noreturn |
|
+ function, even if they just allocate a small amount of stack space. |
|
+ |
|
+ Rather than try to parse RTL or assembly code, we instead require the |
|
+ prologue code to emit information into the dump file that we can |
|
+ scan for. We scan for both the positive and negative cases. */ |
|
+ |
|
+/* { dg-do compile } */ |
|
+/* { dg-options "-O2 -fstack-clash-protection -fdump-rtl-pro_and_epilogue -fno-optimize-sibling-calls" } */ |
|
+/* { dg-require-effective-target supports_stack_clash_protection } */ |
|
+ |
|
+extern void arf (char *); |
|
+ |
|
+__attribute__ ((noreturn)) void foo1 () |
|
+{ |
|
+ char x[10]; |
|
+ while (1) |
|
+ arf (x); |
|
+} |
|
+ |
|
+void foo2 () |
|
+{ |
|
+ char x[10]; |
|
+ arf (x); |
|
+} |
|
+/* { dg-final { scan-rtl-dump-times "Stack clash noreturn" 1 "pro_and_epilogue" } } */ |
|
+/* { dg-final { scan-rtl-dump-times "Stack clash not noreturn" 1 "pro_and_epilogue" } } */ |
|
+ |
|
diff --git a/gcc/testsuite/gcc.dg/stack-check-5.c b/gcc/testsuite/gcc.dg/stack-check-5.c |
|
new file mode 100644 |
|
index 00000000000..2171d9b6c23 |
|
--- /dev/null |
|
+++ b/gcc/testsuite/gcc.dg/stack-check-5.c |
|
@@ -0,0 +1,74 @@ |
|
+/* { dg-do compile } */ |
|
+/* { dg-options "-O2 -fstack-clash-protection -fdump-rtl-pro_and_epilogue -fno-optimize-sibling-calls --param stack-clash-protection-probe-interval=12 --param stack-clash-protection-guard-size=12" } */ |
|
+/* { dg-require-effective-target supports_stack_clash_protection } */ |
|
+ |
|
+ |
|
+extern void foo (char *); |
|
+extern void bar (void); |
|
+ |
|
+/* This function allocates no local stack and is a leaf. It should have no |
|
+ probes on any target and should not require a frame pointer. */ |
|
+int |
|
+f0 (int x, int y) |
|
+{ |
|
+ asm volatile ("" : : : "memory"); |
|
+ return x + y; |
|
+} |
|
+ |
|
+/* This function allocates no local stack, but is not a leaf. Ideally it |
|
+ should not need probing and no frame pointer. */ |
|
+int |
|
+f1 (int x, int y) |
|
+{ |
|
+ asm volatile ("" : : : "memory"); |
|
+ bar (); |
|
+} |
|
+ |
|
+/* This is a leaf with a small frame. On targets with implicit probes in |
|
+ the caller, this should not need probing. On targets with no implicit |
|
+ probes in the caller, it may require probes. Ideally it should need no |
|
+ frame pointer. */ |
|
+void |
|
+f2 (void) |
|
+{ |
|
+ char buf[512]; |
|
+ asm volatile ("" : : "g" (&buf) : "memory"); |
|
+} |
|
+ |
|
+/* This is a non-leaf with a small frame. On targets with implicit probes in |
|
+ the caller, this should not need probing. On targets with no implicit |
|
+ probes in the caller, it may require probes. It should need no frame |
|
+ pointer. */ |
|
+void |
|
+f3 (void) |
|
+{ |
|
+ char buf[512]; |
|
+ foo (buf); |
|
+} |
|
+ |
|
+/* If we have caller implicit probes, then we should not need probes. |
|
+ Else callees may need probes, particularly if non-leaf functions require a |
|
+ frame/frame pointer. */ |
|
+/* { dg-final { scan-rtl-dump-times "Stack clash no probe" 4 "pro_and_epilogue" { target caller_implicit_probes } } } */ |
|
+/* { dg-final { scan-rtl-dump-times "Stack clash no probe" 2 "pro_and_epilogue" { target { ! caller_implicit_probes } } } } */ |
|
+/* { dg-final { scan-rtl-dump-times "Stack clash inline probes " 2 "pro_and_epilogue" { target { ! caller_implicit_probes } } } } */ |
|
+ |
|
+/* None of these functions are marked with the noreturn attribute. */ |
|
+/* { dg-final { scan-rtl-dump-times "Stack clash not noreturn" 4 "pro_and_epilogue" } } */ |
|
+ |
|
+/* Two functions are leafs, two are not. Verify the target identified them |
|
+ appropriately. */ |
|
+/* { dg-final { scan-rtl-dump-times "Stack clash no frame pointer needed" 4 "pro_and_epilogue" { target { ! frame_pointer_for_non_leaf } } } } */ |
|
+/* { dg-final { scan-rtl-dump-times "Stack clash no frame pointer needed" 2 "pro_and_epilogue" { target { frame_pointer_for_non_leaf } } } } */ |
|
+/* { dg-final { scan-rtl-dump-times "Stack clash frame pointer needed" 2 "pro_and_epilogue" { target { frame_pointer_for_non_leaf } } } } */ |
|
+ |
|
+ |
|
+/* We have selected the size of the array in f2/f3 to be large enough |
|
+ to not live in the red zone on targets that support it. |
|
+ |
|
+ That allows simplification of this test considerably. |
|
+ f1() should not require any allocations, thus no residuals. |
|
+ All the rest of the functions require some kind of allocation, |
|
+ either for the saved fp/rp or the array. */ |
|
+/* { dg-final { scan-rtl-dump-times "Stack clash no residual allocation in prologue" 1 "pro_and_epilogue" } } */ |
|
+/* { dg-final { scan-rtl-dump-times "Stack clash residual allocation in prologue" 3 "pro_and_epilogue" } } */ |
|
diff --git a/gcc/testsuite/gcc.dg/stack-check-6.c b/gcc/testsuite/gcc.dg/stack-check-6.c |
|
new file mode 100644 |
|
index 00000000000..ad2021c9037 |
|
--- /dev/null |
|
+++ b/gcc/testsuite/gcc.dg/stack-check-6.c |
|
@@ -0,0 +1,55 @@ |
|
+/* { dg-do compile } */ |
|
+/* { dg-options "-O2 -fstack-clash-protection -fdump-rtl-pro_and_epilogue -fno-optimize-sibling-calls --param stack-clash-protection-probe-interval=12 --param stack-clash-protection-guard-size=12" } */ |
|
+/* { dg-require-effective-target supports_stack_clash_protection } */ |
|
+ |
|
+ |
|
+extern void foo (char *); |
|
+extern void bar (void); |
|
+ |
|
+ |
|
+/* This is a leaf with a frame that is large enough to require probing with |
|
+ a residual allocation, but small enough to probe inline. */ |
|
+void |
|
+f4 (void) |
|
+{ |
|
+ char buf[4096 + 512]; |
|
+ asm volatile ("" : : "g" (&buf) : "memory"); |
|
+} |
|
+ |
|
+ |
|
+/* This is a non-leaf with a frame large enough to require probing and |
|
+ a residual allocation, but small enough to probe inline. */ |
|
+void |
|
+f5 (void) |
|
+{ |
|
+ char buf[4096 + 512]; |
|
+ foo (buf); |
|
+} |
|
+ |
|
+/* This is a leaf with a frame that is large enough to require probing with |
|
+ a loop plus a residual allocation. */ |
|
+void |
|
+f6 (void) |
|
+{ |
|
+ char buf[4096 * 10 + 512]; |
|
+ asm volatile ("" : : "g" (&buf) : "memory"); |
|
+} |
|
+ |
|
+ |
|
+/* This is a non-leaf with a frame large enough to require probing with |
|
+ a loop plus a residual allocation. */ |
|
+void |
|
+f7 (void) |
|
+{ |
|
+ char buf[4096 * 10 + 512]; |
|
+ foo (buf); |
|
+} |
|
+ |
|
+/* { dg-final { scan-rtl-dump-times "Stack clash inline probes" 2 "pro_and_epilogue" } } */ |
|
+/* { dg-final { scan-rtl-dump-times "Stack clash probe loop" 2 "pro_and_epilogue" } } */ |
|
+/* { dg-final { scan-rtl-dump-times "Stack clash residual allocation in prologue" 4 "pro_and_epilogue" } } */ |
|
+/* { dg-final { scan-rtl-dump-times "Stack clash not noreturn" 4 "pro_and_epilogue" } } */ |
|
+ |
|
+/* { dg-final { scan-rtl-dump-times "Stack clash no frame pointer needed" 4 "pro_and_epilogue" { target { ! frame_pointer_for_non_leaf } } } } */ |
|
+/* { dg-final { scan-rtl-dump-times "Stack clash no frame pointer needed" 2 "pro_and_epilogue" { target { frame_pointer_for_non_leaf } } } } */ |
|
+/* { dg-final { scan-rtl-dump-times "Stack clash frame pointer needed" 2 "pro_and_epilogue" { target { frame_pointer_for_non_leaf } } } } */ |
|
diff --git a/gcc/testsuite/gcc.dg/stack-check-6a.c b/gcc/testsuite/gcc.dg/stack-check-6a.c |
|
new file mode 100644 |
|
index 00000000000..6f8e7128921 |
|
--- /dev/null |
|
+++ b/gcc/testsuite/gcc.dg/stack-check-6a.c |
|
@@ -0,0 +1,17 @@ |
|
+/* The goal here is to verify that increasing the size of the guard allows |
|
+ elimination of all probing on the relevant targets. */ |
|
+ |
|
+/* { dg-do compile } */ |
|
+/* { dg-options "-O2 -fstack-clash-protection -fdump-rtl-pro_and_epilogue -fno-optimize-sibling-calls --param stack-clash-protection-probe-interval=12 --param stack-clash-protection-guard-size=16" } */ |
|
+/* { dg-require-effective-target supports_stack_clash_protection } */ |
|
+ |
|
+#include "stack-check-6.c" |
|
+ |
|
+/* { dg-final { scan-rtl-dump-times "Stack clash inline probes" 0 "pro_and_epilogue" } } */ |
|
+/* { dg-final { scan-rtl-dump-times "Stack clash probe loop" 0 "pro_and_epilogue" } } */ |
|
+/* { dg-final { scan-rtl-dump-times "Stack clash residual allocation in prologue" 4 "pro_and_epilogue" } } */ |
|
+/* { dg-final { scan-rtl-dump-times "Stack clash not noreturn" 4 "pro_and_epilogue" } } */ |
|
+ |
|
+/* { dg-final { scan-rtl-dump-times "Stack clash no frame pointer needed" 4 "pro_and_epilogue" { target { ! frame_pointer_for_non_leaf } } } } */ |
|
+/* { dg-final { scan-rtl-dump-times "Stack clash no frame pointer needed" 2 "pro_and_epilogue" { target { frame_pointer_for_non_leaf } } } } */ |
|
+/* { dg-final { scan-rtl-dump-times "Stack clash frame pointer needed" 2 "pro_and_epilogue" { target { frame_pointer_for_non_leaf } } } } */ |
|
diff --git a/gcc/testsuite/gcc.dg/stack-check-7.c b/gcc/testsuite/gcc.dg/stack-check-7.c |
|
new file mode 100644 |
|
index 00000000000..b963a2881dc |
|
--- /dev/null |
|
+++ b/gcc/testsuite/gcc.dg/stack-check-7.c |
|
@@ -0,0 +1,36 @@ |
|
+/* { dg-do run } */ |
|
+/* { dg-options "-O2 -fstack-clash-protection -fno-optimize-sibling-calls --param stack-clash-protection-probe-interval=12 --param stack-clash-protection-guard-size=12" } */ |
|
+/* { dg-require-effective-target supports_stack_clash_protection } */ |
|
+ |
|
+/* For further testing, this can be run under valgrind where it's crashed |
|
+ on aarch64 and ppc64le with -fstack-check=specific. */ |
|
+ |
|
+ |
|
+__attribute__((noinline, noclone)) void |
|
+foo (char *p) |
|
+{ |
|
+ asm volatile ("" : : "r" (p) : "memory"); |
|
+} |
|
+ |
|
+__attribute__((noinline, noclone)) void |
|
+bar (void) |
|
+{ |
|
+ char buf[131072]; |
|
+ foo (buf); |
|
+} |
|
+ |
|
+__attribute__((noinline, noclone)) void |
|
+baz (void) |
|
+{ |
|
+ char buf[12000]; |
|
+ foo (buf); |
|
+} |
|
+ |
|
+int |
|
+main () |
|
+{ |
|
+ bar (); |
|
+ baz (); |
|
+ return 0; |
|
+} |
|
+ |
|
diff --git a/gcc/testsuite/gcc.dg/stack-check-8.c b/gcc/testsuite/gcc.dg/stack-check-8.c |
|
new file mode 100644 |
|
index 00000000000..0ccec8b532a |
|
--- /dev/null |
|
+++ b/gcc/testsuite/gcc.dg/stack-check-8.c |
|
@@ -0,0 +1,139 @@ |
|
+/* { dg-do run } */ |
|
+/* { dg-options "-O2 -w -fstack-clash-protection -Wno-psabi -fno-optimize-sibling-calls --param stack-clash-protection-probe-interval=12 --param stack-clash-protection-guard-size=12" } */ |
|
+/* { dg-require-effective-target supports_stack_clash_protection } */ |
|
+ |
|
+ |
|
+typedef float V __attribute__((vector_size (32))); |
|
+ |
|
+__attribute__((noinline, noclone)) void |
|
+foo (char *p) |
|
+{ |
|
+ asm volatile ("" : : "r" (p) : "memory"); |
|
+} |
|
+ |
|
+__attribute__((noinline, noclone)) int |
|
+f0 (int x, int y) |
|
+{ |
|
+ asm volatile ("" : : : "memory"); |
|
+ return x + y; |
|
+} |
|
+ |
|
+__attribute__((noinline, noclone)) void |
|
+f1 (void) |
|
+{ |
|
+ char buf[64]; |
|
+ foo (buf); |
|
+} |
|
+ |
|
+__attribute__((noinline, noclone)) void |
|
+f2 (void) |
|
+{ |
|
+ char buf[12000]; |
|
+ foo (buf); |
|
+} |
|
+ |
|
+__attribute__((noinline, noclone)) void |
|
+f3 (void) |
|
+{ |
|
+ char buf[131072]; |
|
+ foo (buf); |
|
+} |
|
+ |
|
+__attribute__((noinline, noclone)) void |
|
+f4 (int x) |
|
+{ |
|
+ char vla[x]; |
|
+ foo (vla); |
|
+} |
|
+ |
|
+__attribute__((noinline, noclone)) void |
|
+f5 (int x) |
|
+{ |
|
+ char buf[12000]; |
|
+ foo (buf); |
|
+ { |
|
+ char vla[x]; |
|
+ foo (vla); |
|
+ } |
|
+ { |
|
+ char vla[x]; |
|
+ foo (vla); |
|
+ } |
|
+} |
|
+ |
|
+V v; |
|
+ |
|
+__attribute__((noinline, noclone)) int |
|
+f6 (int x, int y, V a, V b, V c) |
|
+{ |
|
+ asm volatile ("" : : : "memory"); |
|
+ v = a + b + c; |
|
+ return x + y; |
|
+} |
|
+ |
|
+__attribute__((noinline, noclone)) void |
|
+f7 (V a, V b, V c) |
|
+{ |
|
+ char buf[64]; |
|
+ foo (buf); |
|
+ v = a + b + c; |
|
+} |
|
+ |
|
+__attribute__((noinline, noclone)) void |
|
+f8 (V a, V b, V c) |
|
+{ |
|
+ char buf[12000]; |
|
+ foo (buf); |
|
+ v = a + b + c; |
|
+} |
|
+ |
|
+__attribute__((noinline, noclone)) void |
|
+f9 (V a, V b, V c) |
|
+{ |
|
+ char buf[131072]; |
|
+ foo (buf); |
|
+ v = a + b + c; |
|
+} |
|
+ |
|
+__attribute__((noinline, noclone)) void |
|
+f10 (int x, V a, V b, V c) |
|
+{ |
|
+ char vla[x]; |
|
+ foo (vla); |
|
+ v = a + b + c; |
|
+} |
|
+ |
|
+__attribute__((noinline, noclone)) void |
|
+f11 (int x, V a, V b, V c) |
|
+{ |
|
+ char buf[12000]; |
|
+ foo (buf); |
|
+ v = a + b + c; |
|
+ { |
|
+ char vla[x]; |
|
+ foo (vla); |
|
+ } |
|
+ { |
|
+ char vla[x]; |
|
+ foo (vla); |
|
+ } |
|
+} |
|
+ |
|
+int |
|
+main () |
|
+{ |
|
+ f0 (2, 3); |
|
+ f1 (); |
|
+ f2 (); |
|
+ f3 (); |
|
+ f4 (12000); |
|
+ f5 (12000); |
|
+ f6 (2, 3, v, v, v); |
|
+ f7 (v, v, v); |
|
+ f8 (v, v, v); |
|
+ f9 (v, v, v); |
|
+ f10 (12000, v, v, v); |
|
+ f11 (12000, v, v, v); |
|
+ return 0; |
|
+} |
|
+ |
|
diff --git a/gcc/testsuite/gcc.dg/stack-check-9.c b/gcc/testsuite/gcc.dg/stack-check-9.c |
|
new file mode 100644 |
|
index 00000000000..b84075b9b43 |
|
--- /dev/null |
|
+++ b/gcc/testsuite/gcc.dg/stack-check-9.c |
|
@@ -0,0 +1,2022 @@ |
|
+/* { dg-do compile } */ |
|
+/* { dg-options "-O2 -fstack-clash-protection -fdump-rtl-pro_and_epilogue -fno-optimize-sibling-calls --param stack-clash-protection-probe-interval=12 --param stack-clash-protection-guard-size=12" } */ |
|
+/* { dg-require-effective-target supports_stack_clash_protection } */ |
|
+ |
|
+double f1 (void); |
|
+double f2 (double, double); |
|
+ |
|
+double |
|
+f3 (void) |
|
+{ |
|
+ double d000 = f1 (); |
|
+ double d001 = f1 (); |
|
+ double d002 = f1 (); |
|
+ double d003 = f1 (); |
|
+ double d004 = f1 (); |
|
+ double d005 = f1 (); |
|
+ double d006 = f1 (); |
|
+ double d007 = f1 (); |
|
+ double d008 = f1 (); |
|
+ double d009 = f1 (); |
|
+ double d010 = f1 (); |
|
+ double d011 = f1 (); |
|
+ double d012 = f1 (); |
|
+ double d013 = f1 (); |
|
+ double d014 = f1 (); |
|
+ double d015 = f1 (); |
|
+ double d016 = f1 (); |
|
+ double d017 = f1 (); |
|
+ double d018 = f1 (); |
|
+ double d019 = f1 (); |
|
+ double d020 = f1 (); |
|
+ double d021 = f1 (); |
|
+ double d022 = f1 (); |
|
+ double d023 = f1 (); |
|
+ double d024 = f1 (); |
|
+ double d025 = f1 (); |
|
+ double d026 = f1 (); |
|
+ double d027 = f1 (); |
|
+ double d028 = f1 (); |
|
+ double d029 = f1 (); |
|
+ double d030 = f1 (); |
|
+ double d031 = f1 (); |
|
+ double d032 = f1 (); |
|
+ double d033 = f1 (); |
|
+ double d034 = f1 (); |
|
+ double d035 = f1 (); |
|
+ double d036 = f1 (); |
|
+ double d037 = f1 (); |
|
+ double d038 = f1 (); |
|
+ double d039 = f1 (); |
|
+ double d040 = f1 (); |
|
+ double d041 = f1 (); |
|
+ double d042 = f1 (); |
|
+ double d043 = f1 (); |
|
+ double d044 = f1 (); |
|
+ double d045 = f1 (); |
|
+ double d046 = f1 (); |
|
+ double d047 = f1 (); |
|
+ double d048 = f1 (); |
|
+ double d049 = f1 (); |
|
+ double d050 = f1 (); |
|
+ double d051 = f1 (); |
|
+ double d052 = f1 (); |
|
+ double d053 = f1 (); |
|
+ double d054 = f1 (); |
|
+ double d055 = f1 (); |
|
+ double d056 = f1 (); |
|
+ double d057 = f1 (); |
|
+ double d058 = f1 (); |
|
+ double d059 = f1 (); |
|
+ double d060 = f1 (); |
|
+ double d061 = f1 (); |
|
+ double d062 = f1 (); |
|
+ double d063 = f1 (); |
|
+ double d064 = f1 (); |
|
+ double d065 = f1 (); |
|
+ double d066 = f1 (); |
|
+ double d067 = f1 (); |
|
+ double d068 = f1 (); |
|
+ double d069 = f1 (); |
|
+ double d070 = f1 (); |
|
+ double d071 = f1 (); |
|
+ double d072 = f1 (); |
|
+ double d073 = f1 (); |
|
+ double d074 = f1 (); |
|
+ double d075 = f1 (); |
|
+ double d076 = f1 (); |
|
+ double d077 = f1 (); |
|
+ double d078 = f1 (); |
|
+ double d079 = f1 (); |
|
+ double d080 = f1 (); |
|
+ double d081 = f1 (); |
|
+ double d082 = f1 (); |
|
+ double d083 = f1 (); |
|
+ double d084 = f1 (); |
|
+ double d085 = f1 (); |
|
+ double d086 = f1 (); |
|
+ double d087 = f1 (); |
|
+ double d088 = f1 (); |
|
+ double d089 = f1 (); |
|
+ double d090 = f1 (); |
|
+ double d091 = f1 (); |
|
+ double d092 = f1 (); |
|
+ double d093 = f1 (); |
|
+ double d094 = f1 (); |
|
+ double d095 = f1 (); |
|
+ double d096 = f1 (); |
|
+ double d097 = f1 (); |
|
+ double d098 = f1 (); |
|
+ double d099 = f1 (); |
|
+ double d100 = f1 (); |
|
+ double d101 = f1 (); |
|
+ double d102 = f1 (); |
|
+ double d103 = f1 (); |
|
+ double d104 = f1 (); |
|
+ double d105 = f1 (); |
|
+ double d106 = f1 (); |
|
+ double d107 = f1 (); |
|
+ double d108 = f1 (); |
|
+ double d109 = f1 (); |
|
+ double d110 = f1 (); |
|
+ double d111 = f1 (); |
|
+ double d112 = f1 (); |
|
+ double d113 = f1 (); |
|
+ double d114 = f1 (); |
|
+ double d115 = f1 (); |
|
+ double d116 = f1 (); |
|
+ double d117 = f1 (); |
|
+ double d118 = f1 (); |
|
+ double d119 = f1 (); |
|
+ double d120 = f1 (); |
|
+ double d121 = f1 (); |
|
+ double d122 = f1 (); |
|
+ double d123 = f1 (); |
|
+ double d124 = f1 (); |
|
+ double d125 = f1 (); |
|
+ double d126 = f1 (); |
|
+ double d127 = f1 (); |
|
+ double d128 = f1 (); |
|
+ double d129 = f1 (); |
|
+ double d130 = f1 (); |
|
+ double d131 = f1 (); |
|
+ double d132 = f1 (); |
|
+ double d133 = f1 (); |
|
+ double d134 = f1 (); |
|
+ double d135 = f1 (); |
|
+ double d136 = f1 (); |
|
+ double d137 = f1 (); |
|
+ double d138 = f1 (); |
|
+ double d139 = f1 (); |
|
+ double d140 = f1 (); |
|
+ double d141 = f1 (); |
|
+ double d142 = f1 (); |
|
+ double d143 = f1 (); |
|
+ double d144 = f1 (); |
|
+ double d145 = f1 (); |
|
+ double d146 = f1 (); |
|
+ double d147 = f1 (); |
|
+ double d148 = f1 (); |
|
+ double d149 = f1 (); |
|
+ double d150 = f1 (); |
|
+ double d151 = f1 (); |
|
+ double d152 = f1 (); |
|
+ double d153 = f1 (); |
|
+ double d154 = f1 (); |
|
+ double d155 = f1 (); |
|
+ double d156 = f1 (); |
|
+ double d157 = f1 (); |
|
+ double d158 = f1 (); |
|
+ double d159 = f1 (); |
|
+ double d160 = f1 (); |
|
+ double d161 = f1 (); |
|
+ double d162 = f1 (); |
|
+ double d163 = f1 (); |
|
+ double d164 = f1 (); |
|
+ double d165 = f1 (); |
|
+ double d166 = f1 (); |
|
+ double d167 = f1 (); |
|
+ double d168 = f1 (); |
|
+ double d169 = f1 (); |
|
+ double d170 = f1 (); |
|
+ double d171 = f1 (); |
|
+ double d172 = f1 (); |
|
+ double d173 = f1 (); |
|
+ double d174 = f1 (); |
|
+ double d175 = f1 (); |
|
+ double d176 = f1 (); |
|
+ double d177 = f1 (); |
|
+ double d178 = f1 (); |
|
+ double d179 = f1 (); |
|
+ double d180 = f1 (); |
|
+ double d181 = f1 (); |
|
+ double d182 = f1 (); |
|
+ double d183 = f1 (); |
|
+ double d184 = f1 (); |
|
+ double d185 = f1 (); |
|
+ double d186 = f1 (); |
|
+ double d187 = f1 (); |
|
+ double d188 = f1 (); |
|
+ double d189 = f1 (); |
|
+ double d190 = f1 (); |
|
+ double d191 = f1 (); |
|
+ double d192 = f1 (); |
|
+ double d193 = f1 (); |
|
+ double d194 = f1 (); |
|
+ double d195 = f1 (); |
|
+ double d196 = f1 (); |
|
+ double d197 = f1 (); |
|
+ double d198 = f1 (); |
|
+ double d199 = f1 (); |
|
+ double d200 = f1 (); |
|
+ double d201 = f1 (); |
|
+ double d202 = f1 (); |
|
+ double d203 = f1 (); |
|
+ double d204 = f1 (); |
|
+ double d205 = f1 (); |
|
+ double d206 = f1 (); |
|
+ double d207 = f1 (); |
|
+ double d208 = f1 (); |
|
+ double d209 = f1 (); |
|
+ double d210 = f1 (); |
|
+ double d211 = f1 (); |
|
+ double d212 = f1 (); |
|
+ double d213 = f1 (); |
|
+ double d214 = f1 (); |
|
+ double d215 = f1 (); |
|
+ double d216 = f1 (); |
|
+ double d217 = f1 (); |
|
+ double d218 = f1 (); |
|
+ double d219 = f1 (); |
|
+ double d220 = f1 (); |
|
+ double d221 = f1 (); |
|
+ double d222 = f1 (); |
|
+ double d223 = f1 (); |
|
+ double d224 = f1 (); |
|
+ double d225 = f1 (); |
|
+ double d226 = f1 (); |
|
+ double d227 = f1 (); |
|
+ double d228 = f1 (); |
|
+ double d229 = f1 (); |
|
+ double d230 = f1 (); |
|
+ double d231 = f1 (); |
|
+ double d232 = f1 (); |
|
+ double d233 = f1 (); |
|
+ double d234 = f1 (); |
|
+ double d235 = f1 (); |
|
+ double d236 = f1 (); |
|
+ double d237 = f1 (); |
|
+ double d238 = f1 (); |
|
+ double d239 = f1 (); |
|
+ double d240 = f1 (); |
|
+ double d241 = f1 (); |
|
+ double d242 = f1 (); |
|
+ double d243 = f1 (); |
|
+ double d244 = f1 (); |
|
+ double d245 = f1 (); |
|
+ double d246 = f1 (); |
|
+ double d247 = f1 (); |
|
+ double d248 = f1 (); |
|
+ double d249 = f1 (); |
|
+ double d250 = f1 (); |
|
+ double d251 = f1 (); |
|
+ double d252 = f1 (); |
|
+ double d253 = f1 (); |
|
+ double d254 = f1 (); |
|
+ double d255 = f1 (); |
|
+ double d256 = f1 (); |
|
+ double d257 = f1 (); |
|
+ double d258 = f1 (); |
|
+ double d259 = f1 (); |
|
+ double d260 = f1 (); |
|
+ double d261 = f1 (); |
|
+ double d262 = f1 (); |
|
+ double d263 = f1 (); |
|
+ double d264 = f1 (); |
|
+ double d265 = f1 (); |
|
+ double d266 = f1 (); |
|
+ double d267 = f1 (); |
|
+ double d268 = f1 (); |
|
+ double d269 = f1 (); |
|
+ double d270 = f1 (); |
|
+ double d271 = f1 (); |
|
+ double d272 = f1 (); |
|
+ double d273 = f1 (); |
|
+ double d274 = f1 (); |
|
+ double d275 = f1 (); |
|
+ double d276 = f1 (); |
|
+ double d277 = f1 (); |
|
+ double d278 = f1 (); |
|
+ double d279 = f1 (); |
|
+ double d280 = f1 (); |
|
+ double d281 = f1 (); |
|
+ double d282 = f1 (); |
|
+ double d283 = f1 (); |
|
+ double d284 = f1 (); |
|
+ double d285 = f1 (); |
|
+ double d286 = f1 (); |
|
+ double d287 = f1 (); |
|
+ double d288 = f1 (); |
|
+ double d289 = f1 (); |
|
+ double d290 = f1 (); |
|
+ double d291 = f1 (); |
|
+ double d292 = f1 (); |
|
+ double d293 = f1 (); |
|
+ double d294 = f1 (); |
|
+ double d295 = f1 (); |
|
+ double d296 = f1 (); |
|
+ double d297 = f1 (); |
|
+ double d298 = f1 (); |
|
+ double d299 = f1 (); |
|
+ double d300 = f1 (); |
|
+ double d301 = f1 (); |
|
+ double d302 = f1 (); |
|
+ double d303 = f1 (); |
|
+ double d304 = f1 (); |
|
+ double d305 = f1 (); |
|
+ double d306 = f1 (); |
|
+ double d307 = f1 (); |
|
+ double d308 = f1 (); |
|
+ double d309 = f1 (); |
|
+ double d310 = f1 (); |
|
+ double d311 = f1 (); |
|
+ double d312 = f1 (); |
|
+ double d313 = f1 (); |
|
+ double d314 = f1 (); |
|
+ double d315 = f1 (); |
|
+ double d316 = f1 (); |
|
+ double d317 = f1 (); |
|
+ double d318 = f1 (); |
|
+ double d319 = f1 (); |
|
+ double d320 = f1 (); |
|
+ double d321 = f1 (); |
|
+ double d322 = f1 (); |
|
+ double d323 = f1 (); |
|
+ double d324 = f1 (); |
|
+ double d325 = f1 (); |
|
+ double d326 = f1 (); |
|
+ double d327 = f1 (); |
|
+ double d328 = f1 (); |
|
+ double d329 = f1 (); |
|
+ double d330 = f1 (); |
|
+ double d331 = f1 (); |
|
+ double d332 = f1 (); |
|
+ double d333 = f1 (); |
|
+ double d334 = f1 (); |
|
+ double d335 = f1 (); |
|
+ double d336 = f1 (); |
|
+ double d337 = f1 (); |
|
+ double d338 = f1 (); |
|
+ double d339 = f1 (); |
|
+ double d340 = f1 (); |
|
+ double d341 = f1 (); |
|
+ double d342 = f1 (); |
|
+ double d343 = f1 (); |
|
+ double d344 = f1 (); |
|
+ double d345 = f1 (); |
|
+ double d346 = f1 (); |
|
+ double d347 = f1 (); |
|
+ double d348 = f1 (); |
|
+ double d349 = f1 (); |
|
+ double d350 = f1 (); |
|
+ double d351 = f1 (); |
|
+ double d352 = f1 (); |
|
+ double d353 = f1 (); |
|
+ double d354 = f1 (); |
|
+ double d355 = f1 (); |
|
+ double d356 = f1 (); |
|
+ double d357 = f1 (); |
|
+ double d358 = f1 (); |
|
+ double d359 = f1 (); |
|
+ double d360 = f1 (); |
|
+ double d361 = f1 (); |
|
+ double d362 = f1 (); |
|
+ double d363 = f1 (); |
|
+ double d364 = f1 (); |
|
+ double d365 = f1 (); |
|
+ double d366 = f1 (); |
|
+ double d367 = f1 (); |
|
+ double d368 = f1 (); |
|
+ double d369 = f1 (); |
|
+ double d370 = f1 (); |
|
+ double d371 = f1 (); |
|
+ double d372 = f1 (); |
|
+ double d373 = f1 (); |
|
+ double d374 = f1 (); |
|
+ double d375 = f1 (); |
|
+ double d376 = f1 (); |
|
+ double d377 = f1 (); |
|
+ double d378 = f1 (); |
|
+ double d379 = f1 (); |
|
+ double d380 = f1 (); |
|
+ double d381 = f1 (); |
|
+ double d382 = f1 (); |
|
+ double d383 = f1 (); |
|
+ double d384 = f1 (); |
|
+ double d385 = f1 (); |
|
+ double d386 = f1 (); |
|
+ double d387 = f1 (); |
|
+ double d388 = f1 (); |
|
+ double d389 = f1 (); |
|
+ double d390 = f1 (); |
|
+ double d391 = f1 (); |
|
+ double d392 = f1 (); |
|
+ double d393 = f1 (); |
|
+ double d394 = f1 (); |
|
+ double d395 = f1 (); |
|
+ double d396 = f1 (); |
|
+ double d397 = f1 (); |
|
+ double d398 = f1 (); |
|
+ double d399 = f1 (); |
|
+ double d400 = f1 (); |
|
+ double d401 = f1 (); |
|
+ double d402 = f1 (); |
|
+ double d403 = f1 (); |
|
+ double d404 = f1 (); |
|
+ double d405 = f1 (); |
|
+ double d406 = f1 (); |
|
+ double d407 = f1 (); |
|
+ double d408 = f1 (); |
|
+ double d409 = f1 (); |
|
+ double d410 = f1 (); |
|
+ double d411 = f1 (); |
|
+ double d412 = f1 (); |
|
+ double d413 = f1 (); |
|
+ double d414 = f1 (); |
|
+ double d415 = f1 (); |
|
+ double d416 = f1 (); |
|
+ double d417 = f1 (); |
|
+ double d418 = f1 (); |
|
+ double d419 = f1 (); |
|
+ double d420 = f1 (); |
|
+ double d421 = f1 (); |
|
+ double d422 = f1 (); |
|
+ double d423 = f1 (); |
|
+ double d424 = f1 (); |
|
+ double d425 = f1 (); |
|
+ double d426 = f1 (); |
|
+ double d427 = f1 (); |
|
+ double d428 = f1 (); |
|
+ double d429 = f1 (); |
|
+ double d430 = f1 (); |
|
+ double d431 = f1 (); |
|
+ double d432 = f1 (); |
|
+ double d433 = f1 (); |
|
+ double d434 = f1 (); |
|
+ double d435 = f1 (); |
|
+ double d436 = f1 (); |
|
+ double d437 = f1 (); |
|
+ double d438 = f1 (); |
|
+ double d439 = f1 (); |
|
+ double d440 = f1 (); |
|
+ double d441 = f1 (); |
|
+ double d442 = f1 (); |
|
+ double d443 = f1 (); |
|
+ double d444 = f1 (); |
|
+ double d445 = f1 (); |
|
+ double d446 = f1 (); |
|
+ double d447 = f1 (); |
|
+ double d448 = f1 (); |
|
+ double d449 = f1 (); |
|
+ double d450 = f1 (); |
|
+ double d451 = f1 (); |
|
+ double d452 = f1 (); |
|
+ double d453 = f1 (); |
|
+ double d454 = f1 (); |
|
+ double d455 = f1 (); |
|
+ double d456 = f1 (); |
|
+ double d457 = f1 (); |
|
+ double d458 = f1 (); |
|
+ double d459 = f1 (); |
|
+ double d460 = f1 (); |
|
+ double d461 = f1 (); |
|
+ double d462 = f1 (); |
|
+ double d463 = f1 (); |
|
+ double d464 = f1 (); |
|
+ double d465 = f1 (); |
|
+ double d466 = f1 (); |
|
+ double d467 = f1 (); |
|
+ double d468 = f1 (); |
|
+ double d469 = f1 (); |
|
+ double d470 = f1 (); |
|
+ double d471 = f1 (); |
|
+ double d472 = f1 (); |
|
+ double d473 = f1 (); |
|
+ double d474 = f1 (); |
|
+ double d475 = f1 (); |
|
+ double d476 = f1 (); |
|
+ double d477 = f1 (); |
|
+ double d478 = f1 (); |
|
+ double d479 = f1 (); |
|
+ double d480 = f1 (); |
|
+ double d481 = f1 (); |
|
+ double d482 = f1 (); |
|
+ double d483 = f1 (); |
|
+ double d484 = f1 (); |
|
+ double d485 = f1 (); |
|
+ double d486 = f1 (); |
|
+ double d487 = f1 (); |
|
+ double d488 = f1 (); |
|
+ double d489 = f1 (); |
|
+ double d490 = f1 (); |
|
+ double d491 = f1 (); |
|
+ double d492 = f1 (); |
|
+ double d493 = f1 (); |
|
+ double d494 = f1 (); |
|
+ double d495 = f1 (); |
|
+ double d496 = f1 (); |
|
+ double d497 = f1 (); |
|
+ double d498 = f1 (); |
|
+ double d499 = f1 (); |
|
+ double d500 = f1 (); |
|
+ double d501 = f1 (); |
|
+ double d502 = f1 (); |
|
+ double d503 = f1 (); |
|
+ double d504 = f1 (); |
|
+ double d505 = f1 (); |
|
+ double d506 = f1 (); |
|
+ double d507 = f1 (); |
|
+ double d508 = f1 (); |
|
+ double d509 = f1 (); |
|
+ double d510 = f1 (); |
|
+ double d511 = f1 (); |
|
+ double d512 = f1 (); |
|
+ double d513 = f1 (); |
|
+ double d514 = f1 (); |
|
+ double d515 = f1 (); |
|
+ double d516 = f1 (); |
|
+ double d517 = f1 (); |
|
+ double d518 = f1 (); |
|
+ double d519 = f1 (); |
|
+ double d520 = f1 (); |
|
+ double d521 = f1 (); |
|
+ double d522 = f1 (); |
|
+ double d523 = f1 (); |
|
+ double d524 = f1 (); |
|
+ double d525 = f1 (); |
|
+ double d526 = f1 (); |
|
+ double d527 = f1 (); |
|
+ double d528 = f1 (); |
|
+ double d529 = f1 (); |
|
+ double d530 = f1 (); |
|
+ double d531 = f1 (); |
|
+ double d532 = f1 (); |
|
+ double d533 = f1 (); |
|
+ double d534 = f1 (); |
|
+ double d535 = f1 (); |
|
+ double d536 = f1 (); |
|
+ double d537 = f1 (); |
|
+ double d538 = f1 (); |
|
+ double d539 = f1 (); |
|
+ double d540 = f1 (); |
|
+ double d541 = f1 (); |
|
+ double d542 = f1 (); |
|
+ double d543 = f1 (); |
|
+ double d544 = f1 (); |
|
+ double d545 = f1 (); |
|
+ double d546 = f1 (); |
|
+ double d547 = f1 (); |
|
+ double d548 = f1 (); |
|
+ double d549 = f1 (); |
|
+ double d550 = f1 (); |
|
+ double d551 = f1 (); |
|
+ double d552 = f1 (); |
|
+ double d553 = f1 (); |
|
+ double d554 = f1 (); |
|
+ double d555 = f1 (); |
|
+ double d556 = f1 (); |
|
+ double d557 = f1 (); |
|
+ double d558 = f1 (); |
|
+ double d559 = f1 (); |
|
+ double d560 = f1 (); |
|
+ double d561 = f1 (); |
|
+ double d562 = f1 (); |
|
+ double d563 = f1 (); |
|
+ double d564 = f1 (); |
|
+ double d565 = f1 (); |
|
+ double d566 = f1 (); |
|
+ double d567 = f1 (); |
|
+ double d568 = f1 (); |
|
+ double d569 = f1 (); |
|
+ double d570 = f1 (); |
|
+ double d571 = f1 (); |
|
+ double d572 = f1 (); |
|
+ double d573 = f1 (); |
|
+ double d574 = f1 (); |
|
+ double d575 = f1 (); |
|
+ double d576 = f1 (); |
|
+ double d577 = f1 (); |
|
+ double d578 = f1 (); |
|
+ double d579 = f1 (); |
|
+ double d580 = f1 (); |
|
+ double d581 = f1 (); |
|
+ double d582 = f1 (); |
|
+ double d583 = f1 (); |
|
+ double d584 = f1 (); |
|
+ double d585 = f1 (); |
|
+ double d586 = f1 (); |
|
+ double d587 = f1 (); |
|
+ double d588 = f1 (); |
|
+ double d589 = f1 (); |
|
+ double d590 = f1 (); |
|
+ double d591 = f1 (); |
|
+ double d592 = f1 (); |
|
+ double d593 = f1 (); |
|
+ double d594 = f1 (); |
|
+ double d595 = f1 (); |
|
+ double d596 = f1 (); |
|
+ double d597 = f1 (); |
|
+ double d598 = f1 (); |
|
+ double d599 = f1 (); |
|
+ double d600 = f1 (); |
|
+ double d601 = f1 (); |
|
+ double d602 = f1 (); |
|
+ double d603 = f1 (); |
|
+ double d604 = f1 (); |
|
+ double d605 = f1 (); |
|
+ double d606 = f1 (); |
|
+ double d607 = f1 (); |
|
+ double d608 = f1 (); |
|
+ double d609 = f1 (); |
|
+ double d610 = f1 (); |
|
+ double d611 = f1 (); |
|
+ double d612 = f1 (); |
|
+ double d613 = f1 (); |
|
+ double d614 = f1 (); |
|
+ double d615 = f1 (); |
|
+ double d616 = f1 (); |
|
+ double d617 = f1 (); |
|
+ double d618 = f1 (); |
|
+ double d619 = f1 (); |
|
+ double d620 = f1 (); |
|
+ double d621 = f1 (); |
|
+ double d622 = f1 (); |
|
+ double d623 = f1 (); |
|
+ double d624 = f1 (); |
|
+ double d625 = f1 (); |
|
+ double d626 = f1 (); |
|
+ double d627 = f1 (); |
|
+ double d628 = f1 (); |
|
+ double d629 = f1 (); |
|
+ double d630 = f1 (); |
|
+ double d631 = f1 (); |
|
+ double d632 = f1 (); |
|
+ double d633 = f1 (); |
|
+ double d634 = f1 (); |
|
+ double d635 = f1 (); |
|
+ double d636 = f1 (); |
|
+ double d637 = f1 (); |
|
+ double d638 = f1 (); |
|
+ double d639 = f1 (); |
|
+ double d640 = f1 (); |
|
+ double d641 = f1 (); |
|
+ double d642 = f1 (); |
|
+ double d643 = f1 (); |
|
+ double d644 = f1 (); |
|
+ double d645 = f1 (); |
|
+ double d646 = f1 (); |
|
+ double d647 = f1 (); |
|
+ double d648 = f1 (); |
|
+ double d649 = f1 (); |
|
+ double d650 = f1 (); |
|
+ double d651 = f1 (); |
|
+ double d652 = f1 (); |
|
+ double d653 = f1 (); |
|
+ double d654 = f1 (); |
|
+ double d655 = f1 (); |
|
+ double d656 = f1 (); |
|
+ double d657 = f1 (); |
|
+ double d658 = f1 (); |
|
+ double d659 = f1 (); |
|
+ double d660 = f1 (); |
|
+ double d661 = f1 (); |
|
+ double d662 = f1 (); |
|
+ double d663 = f1 (); |
|
+ double d664 = f1 (); |
|
+ double d665 = f1 (); |
|
+ double d666 = f1 (); |
|
+ double d667 = f1 (); |
|
+ double d668 = f1 (); |
|
+ double d669 = f1 (); |
|
+ double d670 = f1 (); |
|
+ double d671 = f1 (); |
|
+ double d672 = f1 (); |
|
+ double d673 = f1 (); |
|
+ double d674 = f1 (); |
|
+ double d675 = f1 (); |
|
+ double d676 = f1 (); |
|
+ double d677 = f1 (); |
|
+ double d678 = f1 (); |
|
+ double d679 = f1 (); |
|
+ double d680 = f1 (); |
|
+ double d681 = f1 (); |
|
+ double d682 = f1 (); |
|
+ double d683 = f1 (); |
|
+ double d684 = f1 (); |
|
+ double d685 = f1 (); |
|
+ double d686 = f1 (); |
|
+ double d687 = f1 (); |
|
+ double d688 = f1 (); |
|
+ double d689 = f1 (); |
|
+ double d690 = f1 (); |
|
+ double d691 = f1 (); |
|
+ double d692 = f1 (); |
|
+ double d693 = f1 (); |
|
+ double d694 = f1 (); |
|
+ double d695 = f1 (); |
|
+ double d696 = f1 (); |
|
+ double d697 = f1 (); |
|
+ double d698 = f1 (); |
|
+ double d699 = f1 (); |
|
+ double d700 = f1 (); |
|
+ double d701 = f1 (); |
|
+ double d702 = f1 (); |
|
+ double d703 = f1 (); |
|
+ double d704 = f1 (); |
|
+ double d705 = f1 (); |
|
+ double d706 = f1 (); |
|
+ double d707 = f1 (); |
|
+ double d708 = f1 (); |
|
+ double d709 = f1 (); |
|
+ double d710 = f1 (); |
|
+ double d711 = f1 (); |
|
+ double d712 = f1 (); |
|
+ double d713 = f1 (); |
|
+ double d714 = f1 (); |
|
+ double d715 = f1 (); |
|
+ double d716 = f1 (); |
|
+ double d717 = f1 (); |
|
+ double d718 = f1 (); |
|
+ double d719 = f1 (); |
|
+ double d720 = f1 (); |
|
+ double d721 = f1 (); |
|
+ double d722 = f1 (); |
|
+ double d723 = f1 (); |
|
+ double d724 = f1 (); |
|
+ double d725 = f1 (); |
|
+ double d726 = f1 (); |
|
+ double d727 = f1 (); |
|
+ double d728 = f1 (); |
|
+ double d729 = f1 (); |
|
+ double d730 = f1 (); |
|
+ double d731 = f1 (); |
|
+ double d732 = f1 (); |
|
+ double d733 = f1 (); |
|
+ double d734 = f1 (); |
|
+ double d735 = f1 (); |
|
+ double d736 = f1 (); |
|
+ double d737 = f1 (); |
|
+ double d738 = f1 (); |
|
+ double d739 = f1 (); |
|
+ double d740 = f1 (); |
|
+ double d741 = f1 (); |
|
+ double d742 = f1 (); |
|
+ double d743 = f1 (); |
|
+ double d744 = f1 (); |
|
+ double d745 = f1 (); |
|
+ double d746 = f1 (); |
|
+ double d747 = f1 (); |
|
+ double d748 = f1 (); |
|
+ double d749 = f1 (); |
|
+ double d750 = f1 (); |
|
+ double d751 = f1 (); |
|
+ double d752 = f1 (); |
|
+ double d753 = f1 (); |
|
+ double d754 = f1 (); |
|
+ double d755 = f1 (); |
|
+ double d756 = f1 (); |
|
+ double d757 = f1 (); |
|
+ double d758 = f1 (); |
|
+ double d759 = f1 (); |
|
+ double d760 = f1 (); |
|
+ double d761 = f1 (); |
|
+ double d762 = f1 (); |
|
+ double d763 = f1 (); |
|
+ double d764 = f1 (); |
|
+ double d765 = f1 (); |
|
+ double d766 = f1 (); |
|
+ double d767 = f1 (); |
|
+ double d768 = f1 (); |
|
+ double d769 = f1 (); |
|
+ double d770 = f1 (); |
|
+ double d771 = f1 (); |
|
+ double d772 = f1 (); |
|
+ double d773 = f1 (); |
|
+ double d774 = f1 (); |
|
+ double d775 = f1 (); |
|
+ double d776 = f1 (); |
|
+ double d777 = f1 (); |
|
+ double d778 = f1 (); |
|
+ double d779 = f1 (); |
|
+ double d780 = f1 (); |
|
+ double d781 = f1 (); |
|
+ double d782 = f1 (); |
|
+ double d783 = f1 (); |
|
+ double d784 = f1 (); |
|
+ double d785 = f1 (); |
|
+ double d786 = f1 (); |
|
+ double d787 = f1 (); |
|
+ double d788 = f1 (); |
|
+ double d789 = f1 (); |
|
+ double d790 = f1 (); |
|
+ double d791 = f1 (); |
|
+ double d792 = f1 (); |
|
+ double d793 = f1 (); |
|
+ double d794 = f1 (); |
|
+ double d795 = f1 (); |
|
+ double d796 = f1 (); |
|
+ double d797 = f1 (); |
|
+ double d798 = f1 (); |
|
+ double d799 = f1 (); |
|
+ double d800 = f1 (); |
|
+ double d801 = f1 (); |
|
+ double d802 = f1 (); |
|
+ double d803 = f1 (); |
|
+ double d804 = f1 (); |
|
+ double d805 = f1 (); |
|
+ double d806 = f1 (); |
|
+ double d807 = f1 (); |
|
+ double d808 = f1 (); |
|
+ double d809 = f1 (); |
|
+ double d810 = f1 (); |
|
+ double d811 = f1 (); |
|
+ double d812 = f1 (); |
|
+ double d813 = f1 (); |
|
+ double d814 = f1 (); |
|
+ double d815 = f1 (); |
|
+ double d816 = f1 (); |
|
+ double d817 = f1 (); |
|
+ double d818 = f1 (); |
|
+ double d819 = f1 (); |
|
+ double d820 = f1 (); |
|
+ double d821 = f1 (); |
|
+ double d822 = f1 (); |
|
+ double d823 = f1 (); |
|
+ double d824 = f1 (); |
|
+ double d825 = f1 (); |
|
+ double d826 = f1 (); |
|
+ double d827 = f1 (); |
|
+ double d828 = f1 (); |
|
+ double d829 = f1 (); |
|
+ double d830 = f1 (); |
|
+ double d831 = f1 (); |
|
+ double d832 = f1 (); |
|
+ double d833 = f1 (); |
|
+ double d834 = f1 (); |
|
+ double d835 = f1 (); |
|
+ double d836 = f1 (); |
|
+ double d837 = f1 (); |
|
+ double d838 = f1 (); |
|
+ double d839 = f1 (); |
|
+ double d840 = f1 (); |
|
+ double d841 = f1 (); |
|
+ double d842 = f1 (); |
|
+ double d843 = f1 (); |
|
+ double d844 = f1 (); |
|
+ double d845 = f1 (); |
|
+ double d846 = f1 (); |
|
+ double d847 = f1 (); |
|
+ double d848 = f1 (); |
|
+ double d849 = f1 (); |
|
+ double d850 = f1 (); |
|
+ double d851 = f1 (); |
|
+ double d852 = f1 (); |
|
+ double d853 = f1 (); |
|
+ double d854 = f1 (); |
|
+ double d855 = f1 (); |
|
+ double d856 = f1 (); |
|
+ double d857 = f1 (); |
|
+ double d858 = f1 (); |
|
+ double d859 = f1 (); |
|
+ double d860 = f1 (); |
|
+ double d861 = f1 (); |
|
+ double d862 = f1 (); |
|
+ double d863 = f1 (); |
|
+ double d864 = f1 (); |
|
+ double d865 = f1 (); |
|
+ double d866 = f1 (); |
|
+ double d867 = f1 (); |
|
+ double d868 = f1 (); |
|
+ double d869 = f1 (); |
|
+ double d870 = f1 (); |
|
+ double d871 = f1 (); |
|
+ double d872 = f1 (); |
|
+ double d873 = f1 (); |
|
+ double d874 = f1 (); |
|
+ double d875 = f1 (); |
|
+ double d876 = f1 (); |
|
+ double d877 = f1 (); |
|
+ double d878 = f1 (); |
|
+ double d879 = f1 (); |
|
+ double d880 = f1 (); |
|
+ double d881 = f1 (); |
|
+ double d882 = f1 (); |
|
+ double d883 = f1 (); |
|
+ double d884 = f1 (); |
|
+ double d885 = f1 (); |
|
+ double d886 = f1 (); |
|
+ double d887 = f1 (); |
|
+ double d888 = f1 (); |
|
+ double d889 = f1 (); |
|
+ double d890 = f1 (); |
|
+ double d891 = f1 (); |
|
+ double d892 = f1 (); |
|
+ double d893 = f1 (); |
|
+ double d894 = f1 (); |
|
+ double d895 = f1 (); |
|
+ double d896 = f1 (); |
|
+ double d897 = f1 (); |
|
+ double d898 = f1 (); |
|
+ double d899 = f1 (); |
|
+ double d900 = f1 (); |
|
+ double d901 = f1 (); |
|
+ double d902 = f1 (); |
|
+ double d903 = f1 (); |
|
+ double d904 = f1 (); |
|
+ double d905 = f1 (); |
|
+ double d906 = f1 (); |
|
+ double d907 = f1 (); |
|
+ double d908 = f1 (); |
|
+ double d909 = f1 (); |
|
+ double d910 = f1 (); |
|
+ double d911 = f1 (); |
|
+ double d912 = f1 (); |
|
+ double d913 = f1 (); |
|
+ double d914 = f1 (); |
|
+ double d915 = f1 (); |
|
+ double d916 = f1 (); |
|
+ double d917 = f1 (); |
|
+ double d918 = f1 (); |
|
+ double d919 = f1 (); |
|
+ double d920 = f1 (); |
|
+ double d921 = f1 (); |
|
+ double d922 = f1 (); |
|
+ double d923 = f1 (); |
|
+ double d924 = f1 (); |
|
+ double d925 = f1 (); |
|
+ double d926 = f1 (); |
|
+ double d927 = f1 (); |
|
+ double d928 = f1 (); |
|
+ double d929 = f1 (); |
|
+ double d930 = f1 (); |
|
+ double d931 = f1 (); |
|
+ double d932 = f1 (); |
|
+ double d933 = f1 (); |
|
+ double d934 = f1 (); |
|
+ double d935 = f1 (); |
|
+ double d936 = f1 (); |
|
+ double d937 = f1 (); |
|
+ double d938 = f1 (); |
|
+ double d939 = f1 (); |
|
+ double d940 = f1 (); |
|
+ double d941 = f1 (); |
|
+ double d942 = f1 (); |
|
+ double d943 = f1 (); |
|
+ double d944 = f1 (); |
|
+ double d945 = f1 (); |
|
+ double d946 = f1 (); |
|
+ double d947 = f1 (); |
|
+ double d948 = f1 (); |
|
+ double d949 = f1 (); |
|
+ double d950 = f1 (); |
|
+ double d951 = f1 (); |
|
+ double d952 = f1 (); |
|
+ double d953 = f1 (); |
|
+ double d954 = f1 (); |
|
+ double d955 = f1 (); |
|
+ double d956 = f1 (); |
|
+ double d957 = f1 (); |
|
+ double d958 = f1 (); |
|
+ double d959 = f1 (); |
|
+ double d960 = f1 (); |
|
+ double d961 = f1 (); |
|
+ double d962 = f1 (); |
|
+ double d963 = f1 (); |
|
+ double d964 = f1 (); |
|
+ double d965 = f1 (); |
|
+ double d966 = f1 (); |
|
+ double d967 = f1 (); |
|
+ double d968 = f1 (); |
|
+ double d969 = f1 (); |
|
+ double d970 = f1 (); |
|
+ double d971 = f1 (); |
|
+ double d972 = f1 (); |
|
+ double d973 = f1 (); |
|
+ double d974 = f1 (); |
|
+ double d975 = f1 (); |
|
+ double d976 = f1 (); |
|
+ double d977 = f1 (); |
|
+ double d978 = f1 (); |
|
+ double d979 = f1 (); |
|
+ double d980 = f1 (); |
|
+ double d981 = f1 (); |
|
+ double d982 = f1 (); |
|
+ double d983 = f1 (); |
|
+ double d984 = f1 (); |
|
+ double d985 = f1 (); |
|
+ double d986 = f1 (); |
|
+ double d987 = f1 (); |
|
+ double d988 = f1 (); |
|
+ double d989 = f1 (); |
|
+ double d990 = f1 (); |
|
+ double d991 = f1 (); |
|
+ double d992 = f1 (); |
|
+ double d993 = f1 (); |
|
+ double d994 = f1 (); |
|
+ double d995 = f1 (); |
|
+ double d996 = f1 (); |
|
+ double d997 = f1 (); |
|
+ double d998 = f1 (); |
|
+ double d999 = f1 (); |
|
+ |
|
+ double x = 0; |
|
+ x = f2 (x, d000); |
|
+ x = f2 (x, d001); |
|
+ x = f2 (x, d002); |
|
+ x = f2 (x, d003); |
|
+ x = f2 (x, d004); |
|
+ x = f2 (x, d005); |
|
+ x = f2 (x, d006); |
|
+ x = f2 (x, d007); |
|
+ x = f2 (x, d008); |
|
+ x = f2 (x, d009); |
|
+ x = f2 (x, d010); |
|
+ x = f2 (x, d011); |
|
+ x = f2 (x, d012); |
|
+ x = f2 (x, d013); |
|
+ x = f2 (x, d014); |
|
+ x = f2 (x, d015); |
|
+ x = f2 (x, d016); |
|
+ x = f2 (x, d017); |
|
+ x = f2 (x, d018); |
|
+ x = f2 (x, d019); |
|
+ x = f2 (x, d020); |
|
+ x = f2 (x, d021); |
|
+ x = f2 (x, d022); |
|
+ x = f2 (x, d023); |
|
+ x = f2 (x, d024); |
|
+ x = f2 (x, d025); |
|
+ x = f2 (x, d026); |
|
+ x = f2 (x, d027); |
|
+ x = f2 (x, d028); |
|
+ x = f2 (x, d029); |
|
+ x = f2 (x, d030); |
|
+ x = f2 (x, d031); |
|
+ x = f2 (x, d032); |
|
+ x = f2 (x, d033); |
|
+ x = f2 (x, d034); |
|
+ x = f2 (x, d035); |
|
+ x = f2 (x, d036); |
|
+ x = f2 (x, d037); |
|
+ x = f2 (x, d038); |
|
+ x = f2 (x, d039); |
|
+ x = f2 (x, d040); |
|
+ x = f2 (x, d041); |
|
+ x = f2 (x, d042); |
|
+ x = f2 (x, d043); |
|
+ x = f2 (x, d044); |
|
+ x = f2 (x, d045); |
|
+ x = f2 (x, d046); |
|
+ x = f2 (x, d047); |
|
+ x = f2 (x, d048); |
|
+ x = f2 (x, d049); |
|
+ x = f2 (x, d050); |
|
+ x = f2 (x, d051); |
|
+ x = f2 (x, d052); |
|
+ x = f2 (x, d053); |
|
+ x = f2 (x, d054); |
|
+ x = f2 (x, d055); |
|
+ x = f2 (x, d056); |
|
+ x = f2 (x, d057); |
|
+ x = f2 (x, d058); |
|
+ x = f2 (x, d059); |
|
+ x = f2 (x, d060); |
|
+ x = f2 (x, d061); |
|
+ x = f2 (x, d062); |
|
+ x = f2 (x, d063); |
|
+ x = f2 (x, d064); |
|
+ x = f2 (x, d065); |
|
+ x = f2 (x, d066); |
|
+ x = f2 (x, d067); |
|
+ x = f2 (x, d068); |
|
+ x = f2 (x, d069); |
|
+ x = f2 (x, d070); |
|
+ x = f2 (x, d071); |
|
+ x = f2 (x, d072); |
|
+ x = f2 (x, d073); |
|
+ x = f2 (x, d074); |
|
+ x = f2 (x, d075); |
|
+ x = f2 (x, d076); |
|
+ x = f2 (x, d077); |
|
+ x = f2 (x, d078); |
|
+ x = f2 (x, d079); |
|
+ x = f2 (x, d080); |
|
+ x = f2 (x, d081); |
|
+ x = f2 (x, d082); |
|
+ x = f2 (x, d083); |
|
+ x = f2 (x, d084); |
|
+ x = f2 (x, d085); |
|
+ x = f2 (x, d086); |
|
+ x = f2 (x, d087); |
|
+ x = f2 (x, d088); |
|
+ x = f2 (x, d089); |
|
+ x = f2 (x, d090); |
|
+ x = f2 (x, d091); |
|
+ x = f2 (x, d092); |
|
+ x = f2 (x, d093); |
|
+ x = f2 (x, d094); |
|
+ x = f2 (x, d095); |
|
+ x = f2 (x, d096); |
|
+ x = f2 (x, d097); |
|
+ x = f2 (x, d098); |
|
+ x = f2 (x, d099); |
|
+ x = f2 (x, d100); |
|
+ x = f2 (x, d101); |
|
+ x = f2 (x, d102); |
|
+ x = f2 (x, d103); |
|
+ x = f2 (x, d104); |
|
+ x = f2 (x, d105); |
|
+ x = f2 (x, d106); |
|
+ x = f2 (x, d107); |
|
+ x = f2 (x, d108); |
|
+ x = f2 (x, d109); |
|
+ x = f2 (x, d110); |
|
+ x = f2 (x, d111); |
|
+ x = f2 (x, d112); |
|
+ x = f2 (x, d113); |
|
+ x = f2 (x, d114); |
|
+ x = f2 (x, d115); |
|
+ x = f2 (x, d116); |
|
+ x = f2 (x, d117); |
|
+ x = f2 (x, d118); |
|
+ x = f2 (x, d119); |
|
+ x = f2 (x, d120); |
|
+ x = f2 (x, d121); |
|
+ x = f2 (x, d122); |
|
+ x = f2 (x, d123); |
|
+ x = f2 (x, d124); |
|
+ x = f2 (x, d125); |
|
+ x = f2 (x, d126); |
|
+ x = f2 (x, d127); |
|
+ x = f2 (x, d128); |
|
+ x = f2 (x, d129); |
|
+ x = f2 (x, d130); |
|
+ x = f2 (x, d131); |
|
+ x = f2 (x, d132); |
|
+ x = f2 (x, d133); |
|
+ x = f2 (x, d134); |
|
+ x = f2 (x, d135); |
|
+ x = f2 (x, d136); |
|
+ x = f2 (x, d137); |
|
+ x = f2 (x, d138); |
|
+ x = f2 (x, d139); |
|
+ x = f2 (x, d140); |
|
+ x = f2 (x, d141); |
|
+ x = f2 (x, d142); |
|
+ x = f2 (x, d143); |
|
+ x = f2 (x, d144); |
|
+ x = f2 (x, d145); |
|
+ x = f2 (x, d146); |
|
+ x = f2 (x, d147); |
|
+ x = f2 (x, d148); |
|
+ x = f2 (x, d149); |
|
+ x = f2 (x, d150); |
|
+ x = f2 (x, d151); |
|
+ x = f2 (x, d152); |
|
+ x = f2 (x, d153); |
|
+ x = f2 (x, d154); |
|
+ x = f2 (x, d155); |
|
+ x = f2 (x, d156); |
|
+ x = f2 (x, d157); |
|
+ x = f2 (x, d158); |
|
+ x = f2 (x, d159); |
|
+ x = f2 (x, d160); |
|
+ x = f2 (x, d161); |
|
+ x = f2 (x, d162); |
|
+ x = f2 (x, d163); |
|
+ x = f2 (x, d164); |
|
+ x = f2 (x, d165); |
|
+ x = f2 (x, d166); |
|
+ x = f2 (x, d167); |
|
+ x = f2 (x, d168); |
|
+ x = f2 (x, d169); |
|
+ x = f2 (x, d170); |
|
+ x = f2 (x, d171); |
|
+ x = f2 (x, d172); |
|
+ x = f2 (x, d173); |
|
+ x = f2 (x, d174); |
|
+ x = f2 (x, d175); |
|
+ x = f2 (x, d176); |
|
+ x = f2 (x, d177); |
|
+ x = f2 (x, d178); |
|
+ x = f2 (x, d179); |
|
+ x = f2 (x, d180); |
|
+ x = f2 (x, d181); |
|
+ x = f2 (x, d182); |
|
+ x = f2 (x, d183); |
|
+ x = f2 (x, d184); |
|
+ x = f2 (x, d185); |
|
+ x = f2 (x, d186); |
|
+ x = f2 (x, d187); |
|
+ x = f2 (x, d188); |
|
+ x = f2 (x, d189); |
|
+ x = f2 (x, d190); |
|
+ x = f2 (x, d191); |
|
+ x = f2 (x, d192); |
|
+ x = f2 (x, d193); |
|
+ x = f2 (x, d194); |
|
+ x = f2 (x, d195); |
|
+ x = f2 (x, d196); |
|
+ x = f2 (x, d197); |
|
+ x = f2 (x, d198); |
|
+ x = f2 (x, d199); |
|
+ x = f2 (x, d200); |
|
+ x = f2 (x, d201); |
|
+ x = f2 (x, d202); |
|
+ x = f2 (x, d203); |
|
+ x = f2 (x, d204); |
|
+ x = f2 (x, d205); |
|
+ x = f2 (x, d206); |
|
+ x = f2 (x, d207); |
|
+ x = f2 (x, d208); |
|
+ x = f2 (x, d209); |
|
+ x = f2 (x, d210); |
|
+ x = f2 (x, d211); |
|
+ x = f2 (x, d212); |
|
+ x = f2 (x, d213); |
|
+ x = f2 (x, d214); |
|
+ x = f2 (x, d215); |
|
+ x = f2 (x, d216); |
|
+ x = f2 (x, d217); |
|
+ x = f2 (x, d218); |
|
+ x = f2 (x, d219); |
|
+ x = f2 (x, d220); |
|
+ x = f2 (x, d221); |
|
+ x = f2 (x, d222); |
|
+ x = f2 (x, d223); |
|
+ x = f2 (x, d224); |
|
+ x = f2 (x, d225); |
|
+ x = f2 (x, d226); |
|
+ x = f2 (x, d227); |
|
+ x = f2 (x, d228); |
|
+ x = f2 (x, d229); |
|
+ x = f2 (x, d230); |
|
+ x = f2 (x, d231); |
|
+ x = f2 (x, d232); |
|
+ x = f2 (x, d233); |
|
+ x = f2 (x, d234); |
|
+ x = f2 (x, d235); |
|
+ x = f2 (x, d236); |
|
+ x = f2 (x, d237); |
|
+ x = f2 (x, d238); |
|
+ x = f2 (x, d239); |
|
+ x = f2 (x, d240); |
|
+ x = f2 (x, d241); |
|
+ x = f2 (x, d242); |
|
+ x = f2 (x, d243); |
|
+ x = f2 (x, d244); |
|
+ x = f2 (x, d245); |
|
+ x = f2 (x, d246); |
|
+ x = f2 (x, d247); |
|
+ x = f2 (x, d248); |
|
+ x = f2 (x, d249); |
|
+ x = f2 (x, d250); |
|
+ x = f2 (x, d251); |
|
+ x = f2 (x, d252); |
|
+ x = f2 (x, d253); |
|
+ x = f2 (x, d254); |
|
+ x = f2 (x, d255); |
|
+ x = f2 (x, d256); |
|
+ x = f2 (x, d257); |
|
+ x = f2 (x, d258); |
|
+ x = f2 (x, d259); |
|
+ x = f2 (x, d260); |
|
+ x = f2 (x, d261); |
|
+ x = f2 (x, d262); |
|
+ x = f2 (x, d263); |
|
+ x = f2 (x, d264); |
|
+ x = f2 (x, d265); |
|
+ x = f2 (x, d266); |
|
+ x = f2 (x, d267); |
|
+ x = f2 (x, d268); |
|
+ x = f2 (x, d269); |
|
+ x = f2 (x, d270); |
|
+ x = f2 (x, d271); |
|
+ x = f2 (x, d272); |
|
+ x = f2 (x, d273); |
|
+ x = f2 (x, d274); |
|
+ x = f2 (x, d275); |
|
+ x = f2 (x, d276); |
|
+ x = f2 (x, d277); |
|
+ x = f2 (x, d278); |
|
+ x = f2 (x, d279); |
|
+ x = f2 (x, d280); |
|
+ x = f2 (x, d281); |
|
+ x = f2 (x, d282); |
|
+ x = f2 (x, d283); |
|
+ x = f2 (x, d284); |
|
+ x = f2 (x, d285); |
|
+ x = f2 (x, d286); |
|
+ x = f2 (x, d287); |
|
+ x = f2 (x, d288); |
|
+ x = f2 (x, d289); |
|
+ x = f2 (x, d290); |
|
+ x = f2 (x, d291); |
|
+ x = f2 (x, d292); |
|
+ x = f2 (x, d293); |
|
+ x = f2 (x, d294); |
|
+ x = f2 (x, d295); |
|
+ x = f2 (x, d296); |
|
+ x = f2 (x, d297); |
|
+ x = f2 (x, d298); |
|
+ x = f2 (x, d299); |
|
+ x = f2 (x, d300); |
|
+ x = f2 (x, d301); |
|
+ x = f2 (x, d302); |
|
+ x = f2 (x, d303); |
|
+ x = f2 (x, d304); |
|
+ x = f2 (x, d305); |
|
+ x = f2 (x, d306); |
|
+ x = f2 (x, d307); |
|
+ x = f2 (x, d308); |
|
+ x = f2 (x, d309); |
|
+ x = f2 (x, d310); |
|
+ x = f2 (x, d311); |
|
+ x = f2 (x, d312); |
|
+ x = f2 (x, d313); |
|
+ x = f2 (x, d314); |
|
+ x = f2 (x, d315); |
|
+ x = f2 (x, d316); |
|
+ x = f2 (x, d317); |
|
+ x = f2 (x, d318); |
|
+ x = f2 (x, d319); |
|
+ x = f2 (x, d320); |
|
+ x = f2 (x, d321); |
|
+ x = f2 (x, d322); |
|
+ x = f2 (x, d323); |
|
+ x = f2 (x, d324); |
|
+ x = f2 (x, d325); |
|
+ x = f2 (x, d326); |
|
+ x = f2 (x, d327); |
|
+ x = f2 (x, d328); |
|
+ x = f2 (x, d329); |
|
+ x = f2 (x, d330); |
|
+ x = f2 (x, d331); |
|
+ x = f2 (x, d332); |
|
+ x = f2 (x, d333); |
|
+ x = f2 (x, d334); |
|
+ x = f2 (x, d335); |
|
+ x = f2 (x, d336); |
|
+ x = f2 (x, d337); |
|
+ x = f2 (x, d338); |
|
+ x = f2 (x, d339); |
|
+ x = f2 (x, d340); |
|
+ x = f2 (x, d341); |
|
+ x = f2 (x, d342); |
|
+ x = f2 (x, d343); |
|
+ x = f2 (x, d344); |
|
+ x = f2 (x, d345); |
|
+ x = f2 (x, d346); |
|
+ x = f2 (x, d347); |
|
+ x = f2 (x, d348); |
|
+ x = f2 (x, d349); |
|
+ x = f2 (x, d350); |
|
+ x = f2 (x, d351); |
|
+ x = f2 (x, d352); |
|
+ x = f2 (x, d353); |
|
+ x = f2 (x, d354); |
|
+ x = f2 (x, d355); |
|
+ x = f2 (x, d356); |
|
+ x = f2 (x, d357); |
|
+ x = f2 (x, d358); |
|
+ x = f2 (x, d359); |
|
+ x = f2 (x, d360); |
|
+ x = f2 (x, d361); |
|
+ x = f2 (x, d362); |
|
+ x = f2 (x, d363); |
|
+ x = f2 (x, d364); |
|
+ x = f2 (x, d365); |
|
+ x = f2 (x, d366); |
|
+ x = f2 (x, d367); |
|
+ x = f2 (x, d368); |
|
+ x = f2 (x, d369); |
|
+ x = f2 (x, d370); |
|
+ x = f2 (x, d371); |
|
+ x = f2 (x, d372); |
|
+ x = f2 (x, d373); |
|
+ x = f2 (x, d374); |
|
+ x = f2 (x, d375); |
|
+ x = f2 (x, d376); |
|
+ x = f2 (x, d377); |
|
+ x = f2 (x, d378); |
|
+ x = f2 (x, d379); |
|
+ x = f2 (x, d380); |
|
+ x = f2 (x, d381); |
|
+ x = f2 (x, d382); |
|
+ x = f2 (x, d383); |
|
+ x = f2 (x, d384); |
|
+ x = f2 (x, d385); |
|
+ x = f2 (x, d386); |
|
+ x = f2 (x, d387); |
|
+ x = f2 (x, d388); |
|
+ x = f2 (x, d389); |
|
+ x = f2 (x, d390); |
|
+ x = f2 (x, d391); |
|
+ x = f2 (x, d392); |
|
+ x = f2 (x, d393); |
|
+ x = f2 (x, d394); |
|
+ x = f2 (x, d395); |
|
+ x = f2 (x, d396); |
|
+ x = f2 (x, d397); |
|
+ x = f2 (x, d398); |
|
+ x = f2 (x, d399); |
|
+ x = f2 (x, d400); |
|
+ x = f2 (x, d401); |
|
+ x = f2 (x, d402); |
|
+ x = f2 (x, d403); |
|
+ x = f2 (x, d404); |
|
+ x = f2 (x, d405); |
|
+ x = f2 (x, d406); |
|
+ x = f2 (x, d407); |
|
+ x = f2 (x, d408); |
|
+ x = f2 (x, d409); |
|
+ x = f2 (x, d410); |
|
+ x = f2 (x, d411); |
|
+ x = f2 (x, d412); |
|
+ x = f2 (x, d413); |
|
+ x = f2 (x, d414); |
|
+ x = f2 (x, d415); |
|
+ x = f2 (x, d416); |
|
+ x = f2 (x, d417); |
|
+ x = f2 (x, d418); |
|
+ x = f2 (x, d419); |
|
+ x = f2 (x, d420); |
|
+ x = f2 (x, d421); |
|
+ x = f2 (x, d422); |
|
+ x = f2 (x, d423); |
|
+ x = f2 (x, d424); |
|
+ x = f2 (x, d425); |
|
+ x = f2 (x, d426); |
|
+ x = f2 (x, d427); |
|
+ x = f2 (x, d428); |
|
+ x = f2 (x, d429); |
|
+ x = f2 (x, d430); |
|
+ x = f2 (x, d431); |
|
+ x = f2 (x, d432); |
|
+ x = f2 (x, d433); |
|
+ x = f2 (x, d434); |
|
+ x = f2 (x, d435); |
|
+ x = f2 (x, d436); |
|
+ x = f2 (x, d437); |
|
+ x = f2 (x, d438); |
|
+ x = f2 (x, d439); |
|
+ x = f2 (x, d440); |
|
+ x = f2 (x, d441); |
|
+ x = f2 (x, d442); |
|
+ x = f2 (x, d443); |
|
+ x = f2 (x, d444); |
|
+ x = f2 (x, d445); |
|
+ x = f2 (x, d446); |
|
+ x = f2 (x, d447); |
|
+ x = f2 (x, d448); |
|
+ x = f2 (x, d449); |
|
+ x = f2 (x, d450); |
|
+ x = f2 (x, d451); |
|
+ x = f2 (x, d452); |
|
+ x = f2 (x, d453); |
|
+ x = f2 (x, d454); |
|
+ x = f2 (x, d455); |
|
+ x = f2 (x, d456); |
|
+ x = f2 (x, d457); |
|
+ x = f2 (x, d458); |
|
+ x = f2 (x, d459); |
|
+ x = f2 (x, d460); |
|
+ x = f2 (x, d461); |
|
+ x = f2 (x, d462); |
|
+ x = f2 (x, d463); |
|
+ x = f2 (x, d464); |
|
+ x = f2 (x, d465); |
|
+ x = f2 (x, d466); |
|
+ x = f2 (x, d467); |
|
+ x = f2 (x, d468); |
|
+ x = f2 (x, d469); |
|
+ x = f2 (x, d470); |
|
+ x = f2 (x, d471); |
|
+ x = f2 (x, d472); |
|
+ x = f2 (x, d473); |
|
+ x = f2 (x, d474); |
|
+ x = f2 (x, d475); |
|
+ x = f2 (x, d476); |
|
+ x = f2 (x, d477); |
|
+ x = f2 (x, d478); |
|
+ x = f2 (x, d479); |
|
+ x = f2 (x, d480); |
|
+ x = f2 (x, d481); |
|
+ x = f2 (x, d482); |
|
+ x = f2 (x, d483); |
|
+ x = f2 (x, d484); |
|
+ x = f2 (x, d485); |
|
+ x = f2 (x, d486); |
|
+ x = f2 (x, d487); |
|
+ x = f2 (x, d488); |
|
+ x = f2 (x, d489); |
|
+ x = f2 (x, d490); |
|
+ x = f2 (x, d491); |
|
+ x = f2 (x, d492); |
|
+ x = f2 (x, d493); |
|
+ x = f2 (x, d494); |
|
+ x = f2 (x, d495); |
|
+ x = f2 (x, d496); |
|
+ x = f2 (x, d497); |
|
+ x = f2 (x, d498); |
|
+ x = f2 (x, d499); |
|
+ x = f2 (x, d500); |
|
+ x = f2 (x, d501); |
|
+ x = f2 (x, d502); |
|
+ x = f2 (x, d503); |
|
+ x = f2 (x, d504); |
|
+ x = f2 (x, d505); |
|
+ x = f2 (x, d506); |
|
+ x = f2 (x, d507); |
|
+ x = f2 (x, d508); |
|
+ x = f2 (x, d509); |
|
+ x = f2 (x, d510); |
|
+ x = f2 (x, d511); |
|
+ x = f2 (x, d512); |
|
+ x = f2 (x, d513); |
|
+ x = f2 (x, d514); |
|
+ x = f2 (x, d515); |
|
+ x = f2 (x, d516); |
|
+ x = f2 (x, d517); |
|
+ x = f2 (x, d518); |
|
+ x = f2 (x, d519); |
|
+ x = f2 (x, d520); |
|
+ x = f2 (x, d521); |
|
+ x = f2 (x, d522); |
|
+ x = f2 (x, d523); |
|
+ x = f2 (x, d524); |
|
+ x = f2 (x, d525); |
|
+ x = f2 (x, d526); |
|
+ x = f2 (x, d527); |
|
+ x = f2 (x, d528); |
|
+ x = f2 (x, d529); |
|
+ x = f2 (x, d530); |
|
+ x = f2 (x, d531); |
|
+ x = f2 (x, d532); |
|
+ x = f2 (x, d533); |
|
+ x = f2 (x, d534); |
|
+ x = f2 (x, d535); |
|
+ x = f2 (x, d536); |
|
+ x = f2 (x, d537); |
|
+ x = f2 (x, d538); |
|
+ x = f2 (x, d539); |
|
+ x = f2 (x, d540); |
|
+ x = f2 (x, d541); |
|
+ x = f2 (x, d542); |
|
+ x = f2 (x, d543); |
|
+ x = f2 (x, d544); |
|
+ x = f2 (x, d545); |
|
+ x = f2 (x, d546); |
|
+ x = f2 (x, d547); |
|
+ x = f2 (x, d548); |
|
+ x = f2 (x, d549); |
|
+ x = f2 (x, d550); |
|
+ x = f2 (x, d551); |
|
+ x = f2 (x, d552); |
|
+ x = f2 (x, d553); |
|
+ x = f2 (x, d554); |
|
+ x = f2 (x, d555); |
|
+ x = f2 (x, d556); |
|
+ x = f2 (x, d557); |
|
+ x = f2 (x, d558); |
|
+ x = f2 (x, d559); |
|
+ x = f2 (x, d560); |
|
+ x = f2 (x, d561); |
|
+ x = f2 (x, d562); |
|
+ x = f2 (x, d563); |
|
+ x = f2 (x, d564); |
|
+ x = f2 (x, d565); |
|
+ x = f2 (x, d566); |
|
+ x = f2 (x, d567); |
|
+ x = f2 (x, d568); |
|
+ x = f2 (x, d569); |
|
+ x = f2 (x, d570); |
|
+ x = f2 (x, d571); |
|
+ x = f2 (x, d572); |
|
+ x = f2 (x, d573); |
|
+ x = f2 (x, d574); |
|
+ x = f2 (x, d575); |
|
+ x = f2 (x, d576); |
|
+ x = f2 (x, d577); |
|
+ x = f2 (x, d578); |
|
+ x = f2 (x, d579); |
|
+ x = f2 (x, d580); |
|
+ x = f2 (x, d581); |
|
+ x = f2 (x, d582); |
|
+ x = f2 (x, d583); |
|
+ x = f2 (x, d584); |
|
+ x = f2 (x, d585); |
|
+ x = f2 (x, d586); |
|
+ x = f2 (x, d587); |
|
+ x = f2 (x, d588); |
|
+ x = f2 (x, d589); |
|
+ x = f2 (x, d590); |
|
+ x = f2 (x, d591); |
|
+ x = f2 (x, d592); |
|
+ x = f2 (x, d593); |
|
+ x = f2 (x, d594); |
|
+ x = f2 (x, d595); |
|
+ x = f2 (x, d596); |
|
+ x = f2 (x, d597); |
|
+ x = f2 (x, d598); |
|
+ x = f2 (x, d599); |
|
+ x = f2 (x, d600); |
|
+ x = f2 (x, d601); |
|
+ x = f2 (x, d602); |
|
+ x = f2 (x, d603); |
|
+ x = f2 (x, d604); |
|
+ x = f2 (x, d605); |
|
+ x = f2 (x, d606); |
|
+ x = f2 (x, d607); |
|
+ x = f2 (x, d608); |
|
+ x = f2 (x, d609); |
|
+ x = f2 (x, d610); |
|
+ x = f2 (x, d611); |
|
+ x = f2 (x, d612); |
|
+ x = f2 (x, d613); |
|
+ x = f2 (x, d614); |
|
+ x = f2 (x, d615); |
|
+ x = f2 (x, d616); |
|
+ x = f2 (x, d617); |
|
+ x = f2 (x, d618); |
|
+ x = f2 (x, d619); |
|
+ x = f2 (x, d620); |
|
+ x = f2 (x, d621); |
|
+ x = f2 (x, d622); |
|
+ x = f2 (x, d623); |
|
+ x = f2 (x, d624); |
|
+ x = f2 (x, d625); |
|
+ x = f2 (x, d626); |
|
+ x = f2 (x, d627); |
|
+ x = f2 (x, d628); |
|
+ x = f2 (x, d629); |
|
+ x = f2 (x, d630); |
|
+ x = f2 (x, d631); |
|
+ x = f2 (x, d632); |
|
+ x = f2 (x, d633); |
|
+ x = f2 (x, d634); |
|
+ x = f2 (x, d635); |
|
+ x = f2 (x, d636); |
|
+ x = f2 (x, d637); |
|
+ x = f2 (x, d638); |
|
+ x = f2 (x, d639); |
|
+ x = f2 (x, d640); |
|
+ x = f2 (x, d641); |
|
+ x = f2 (x, d642); |
|
+ x = f2 (x, d643); |
|
+ x = f2 (x, d644); |
|
+ x = f2 (x, d645); |
|
+ x = f2 (x, d646); |
|
+ x = f2 (x, d647); |
|
+ x = f2 (x, d648); |
|
+ x = f2 (x, d649); |
|
+ x = f2 (x, d650); |
|
+ x = f2 (x, d651); |
|
+ x = f2 (x, d652); |
|
+ x = f2 (x, d653); |
|
+ x = f2 (x, d654); |
|
+ x = f2 (x, d655); |
|
+ x = f2 (x, d656); |
|
+ x = f2 (x, d657); |
|
+ x = f2 (x, d658); |
|
+ x = f2 (x, d659); |
|
+ x = f2 (x, d660); |
|
+ x = f2 (x, d661); |
|
+ x = f2 (x, d662); |
|
+ x = f2 (x, d663); |
|
+ x = f2 (x, d664); |
|
+ x = f2 (x, d665); |
|
+ x = f2 (x, d666); |
|
+ x = f2 (x, d667); |
|
+ x = f2 (x, d668); |
|
+ x = f2 (x, d669); |
|
+ x = f2 (x, d670); |
|
+ x = f2 (x, d671); |
|
+ x = f2 (x, d672); |
|
+ x = f2 (x, d673); |
|
+ x = f2 (x, d674); |
|
+ x = f2 (x, d675); |
|
+ x = f2 (x, d676); |
|
+ x = f2 (x, d677); |
|
+ x = f2 (x, d678); |
|
+ x = f2 (x, d679); |
|
+ x = f2 (x, d680); |
|
+ x = f2 (x, d681); |
|
+ x = f2 (x, d682); |
|
+ x = f2 (x, d683); |
|
+ x = f2 (x, d684); |
|
+ x = f2 (x, d685); |
|
+ x = f2 (x, d686); |
|
+ x = f2 (x, d687); |
|
+ x = f2 (x, d688); |
|
+ x = f2 (x, d689); |
|
+ x = f2 (x, d690); |
|
+ x = f2 (x, d691); |
|
+ x = f2 (x, d692); |
|
+ x = f2 (x, d693); |
|
+ x = f2 (x, d694); |
|
+ x = f2 (x, d695); |
|
+ x = f2 (x, d696); |
|
+ x = f2 (x, d697); |
|
+ x = f2 (x, d698); |
|
+ x = f2 (x, d699); |
|
+ x = f2 (x, d700); |
|
+ x = f2 (x, d701); |
|
+ x = f2 (x, d702); |
|
+ x = f2 (x, d703); |
|
+ x = f2 (x, d704); |
|
+ x = f2 (x, d705); |
|
+ x = f2 (x, d706); |
|
+ x = f2 (x, d707); |
|
+ x = f2 (x, d708); |
|
+ x = f2 (x, d709); |
|
+ x = f2 (x, d710); |
|
+ x = f2 (x, d711); |
|
+ x = f2 (x, d712); |
|
+ x = f2 (x, d713); |
|
+ x = f2 (x, d714); |
|
+ x = f2 (x, d715); |
|
+ x = f2 (x, d716); |
|
+ x = f2 (x, d717); |
|
+ x = f2 (x, d718); |
|
+ x = f2 (x, d719); |
|
+ x = f2 (x, d720); |
|
+ x = f2 (x, d721); |
|
+ x = f2 (x, d722); |
|
+ x = f2 (x, d723); |
|
+ x = f2 (x, d724); |
|
+ x = f2 (x, d725); |
|
+ x = f2 (x, d726); |
|
+ x = f2 (x, d727); |
|
+ x = f2 (x, d728); |
|
+ x = f2 (x, d729); |
|
+ x = f2 (x, d730); |
|
+ x = f2 (x, d731); |
|
+ x = f2 (x, d732); |
|
+ x = f2 (x, d733); |
|
+ x = f2 (x, d734); |
|
+ x = f2 (x, d735); |
|
+ x = f2 (x, d736); |
|
+ x = f2 (x, d737); |
|
+ x = f2 (x, d738); |
|
+ x = f2 (x, d739); |
|
+ x = f2 (x, d740); |
|
+ x = f2 (x, d741); |
|
+ x = f2 (x, d742); |
|
+ x = f2 (x, d743); |
|
+ x = f2 (x, d744); |
|
+ x = f2 (x, d745); |
|
+ x = f2 (x, d746); |
|
+ x = f2 (x, d747); |
|
+ x = f2 (x, d748); |
|
+ x = f2 (x, d749); |
|
+ x = f2 (x, d750); |
|
+ x = f2 (x, d751); |
|
+ x = f2 (x, d752); |
|
+ x = f2 (x, d753); |
|
+ x = f2 (x, d754); |
|
+ x = f2 (x, d755); |
|
+ x = f2 (x, d756); |
|
+ x = f2 (x, d757); |
|
+ x = f2 (x, d758); |
|
+ x = f2 (x, d759); |
|
+ x = f2 (x, d760); |
|
+ x = f2 (x, d761); |
|
+ x = f2 (x, d762); |
|
+ x = f2 (x, d763); |
|
+ x = f2 (x, d764); |
|
+ x = f2 (x, d765); |
|
+ x = f2 (x, d766); |
|
+ x = f2 (x, d767); |
|
+ x = f2 (x, d768); |
|
+ x = f2 (x, d769); |
|
+ x = f2 (x, d770); |
|
+ x = f2 (x, d771); |
|
+ x = f2 (x, d772); |
|
+ x = f2 (x, d773); |
|
+ x = f2 (x, d774); |
|
+ x = f2 (x, d775); |
|
+ x = f2 (x, d776); |
|
+ x = f2 (x, d777); |
|
+ x = f2 (x, d778); |
|
+ x = f2 (x, d779); |
|
+ x = f2 (x, d780); |
|
+ x = f2 (x, d781); |
|
+ x = f2 (x, d782); |
|
+ x = f2 (x, d783); |
|
+ x = f2 (x, d784); |
|
+ x = f2 (x, d785); |
|
+ x = f2 (x, d786); |
|
+ x = f2 (x, d787); |
|
+ x = f2 (x, d788); |
|
+ x = f2 (x, d789); |
|
+ x = f2 (x, d790); |
|
+ x = f2 (x, d791); |
|
+ x = f2 (x, d792); |
|
+ x = f2 (x, d793); |
|
+ x = f2 (x, d794); |
|
+ x = f2 (x, d795); |
|
+ x = f2 (x, d796); |
|
+ x = f2 (x, d797); |
|
+ x = f2 (x, d798); |
|
+ x = f2 (x, d799); |
|
+ x = f2 (x, d800); |
|
+ x = f2 (x, d801); |
|
+ x = f2 (x, d802); |
|
+ x = f2 (x, d803); |
|
+ x = f2 (x, d804); |
|
+ x = f2 (x, d805); |
|
+ x = f2 (x, d806); |
|
+ x = f2 (x, d807); |
|
+ x = f2 (x, d808); |
|
+ x = f2 (x, d809); |
|
+ x = f2 (x, d810); |
|
+ x = f2 (x, d811); |
|
+ x = f2 (x, d812); |
|
+ x = f2 (x, d813); |
|
+ x = f2 (x, d814); |
|
+ x = f2 (x, d815); |
|
+ x = f2 (x, d816); |
|
+ x = f2 (x, d817); |
|
+ x = f2 (x, d818); |
|
+ x = f2 (x, d819); |
|
+ x = f2 (x, d820); |
|
+ x = f2 (x, d821); |
|
+ x = f2 (x, d822); |
|
+ x = f2 (x, d823); |
|
+ x = f2 (x, d824); |
|
+ x = f2 (x, d825); |
|
+ x = f2 (x, d826); |
|
+ x = f2 (x, d827); |
|
+ x = f2 (x, d828); |
|
+ x = f2 (x, d829); |
|
+ x = f2 (x, d830); |
|
+ x = f2 (x, d831); |
|
+ x = f2 (x, d832); |
|
+ x = f2 (x, d833); |
|
+ x = f2 (x, d834); |
|
+ x = f2 (x, d835); |
|
+ x = f2 (x, d836); |
|
+ x = f2 (x, d837); |
|
+ x = f2 (x, d838); |
|
+ x = f2 (x, d839); |
|
+ x = f2 (x, d840); |
|
+ x = f2 (x, d841); |
|
+ x = f2 (x, d842); |
|
+ x = f2 (x, d843); |
|
+ x = f2 (x, d844); |
|
+ x = f2 (x, d845); |
|
+ x = f2 (x, d846); |
|
+ x = f2 (x, d847); |
|
+ x = f2 (x, d848); |
|
+ x = f2 (x, d849); |
|
+ x = f2 (x, d850); |
|
+ x = f2 (x, d851); |
|
+ x = f2 (x, d852); |
|
+ x = f2 (x, d853); |
|
+ x = f2 (x, d854); |
|
+ x = f2 (x, d855); |
|
+ x = f2 (x, d856); |
|
+ x = f2 (x, d857); |
|
+ x = f2 (x, d858); |
|
+ x = f2 (x, d859); |
|
+ x = f2 (x, d860); |
|
+ x = f2 (x, d861); |
|
+ x = f2 (x, d862); |
|
+ x = f2 (x, d863); |
|
+ x = f2 (x, d864); |
|
+ x = f2 (x, d865); |
|
+ x = f2 (x, d866); |
|
+ x = f2 (x, d867); |
|
+ x = f2 (x, d868); |
|
+ x = f2 (x, d869); |
|
+ x = f2 (x, d870); |
|
+ x = f2 (x, d871); |
|
+ x = f2 (x, d872); |
|
+ x = f2 (x, d873); |
|
+ x = f2 (x, d874); |
|
+ x = f2 (x, d875); |
|
+ x = f2 (x, d876); |
|
+ x = f2 (x, d877); |
|
+ x = f2 (x, d878); |
|
+ x = f2 (x, d879); |
|
+ x = f2 (x, d880); |
|
+ x = f2 (x, d881); |
|
+ x = f2 (x, d882); |
|
+ x = f2 (x, d883); |
|
+ x = f2 (x, d884); |
|
+ x = f2 (x, d885); |
|
+ x = f2 (x, d886); |
|
+ x = f2 (x, d887); |
|
+ x = f2 (x, d888); |
|
+ x = f2 (x, d889); |
|
+ x = f2 (x, d890); |
|
+ x = f2 (x, d891); |
|
+ x = f2 (x, d892); |
|
+ x = f2 (x, d893); |
|
+ x = f2 (x, d894); |
|
+ x = f2 (x, d895); |
|
+ x = f2 (x, d896); |
|
+ x = f2 (x, d897); |
|
+ x = f2 (x, d898); |
|
+ x = f2 (x, d899); |
|
+ x = f2 (x, d900); |
|
+ x = f2 (x, d901); |
|
+ x = f2 (x, d902); |
|
+ x = f2 (x, d903); |
|
+ x = f2 (x, d904); |
|
+ x = f2 (x, d905); |
|
+ x = f2 (x, d906); |
|
+ x = f2 (x, d907); |
|
+ x = f2 (x, d908); |
|
+ x = f2 (x, d909); |
|
+ x = f2 (x, d910); |
|
+ x = f2 (x, d911); |
|
+ x = f2 (x, d912); |
|
+ x = f2 (x, d913); |
|
+ x = f2 (x, d914); |
|
+ x = f2 (x, d915); |
|
+ x = f2 (x, d916); |
|
+ x = f2 (x, d917); |
|
+ x = f2 (x, d918); |
|
+ x = f2 (x, d919); |
|
+ x = f2 (x, d920); |
|
+ x = f2 (x, d921); |
|
+ x = f2 (x, d922); |
|
+ x = f2 (x, d923); |
|
+ x = f2 (x, d924); |
|
+ x = f2 (x, d925); |
|
+ x = f2 (x, d926); |
|
+ x = f2 (x, d927); |
|
+ x = f2 (x, d928); |
|
+ x = f2 (x, d929); |
|
+ x = f2 (x, d930); |
|
+ x = f2 (x, d931); |
|
+ x = f2 (x, d932); |
|
+ x = f2 (x, d933); |
|
+ x = f2 (x, d934); |
|
+ x = f2 (x, d935); |
|
+ x = f2 (x, d936); |
|
+ x = f2 (x, d937); |
|
+ x = f2 (x, d938); |
|
+ x = f2 (x, d939); |
|
+ x = f2 (x, d940); |
|
+ x = f2 (x, d941); |
|
+ x = f2 (x, d942); |
|
+ x = f2 (x, d943); |
|
+ x = f2 (x, d944); |
|
+ x = f2 (x, d945); |
|
+ x = f2 (x, d946); |
|
+ x = f2 (x, d947); |
|
+ x = f2 (x, d948); |
|
+ x = f2 (x, d949); |
|
+ x = f2 (x, d950); |
|
+ x = f2 (x, d951); |
|
+ x = f2 (x, d952); |
|
+ x = f2 (x, d953); |
|
+ x = f2 (x, d954); |
|
+ x = f2 (x, d955); |
|
+ x = f2 (x, d956); |
|
+ x = f2 (x, d957); |
|
+ x = f2 (x, d958); |
|
+ x = f2 (x, d959); |
|
+ x = f2 (x, d960); |
|
+ x = f2 (x, d961); |
|
+ x = f2 (x, d962); |
|
+ x = f2 (x, d963); |
|
+ x = f2 (x, d964); |
|
+ x = f2 (x, d965); |
|
+ x = f2 (x, d966); |
|
+ x = f2 (x, d967); |
|
+ x = f2 (x, d968); |
|
+ x = f2 (x, d969); |
|
+ x = f2 (x, d970); |
|
+ x = f2 (x, d971); |
|
+ x = f2 (x, d972); |
|
+ x = f2 (x, d973); |
|
+ x = f2 (x, d974); |
|
+ x = f2 (x, d975); |
|
+ x = f2 (x, d976); |
|
+ x = f2 (x, d977); |
|
+ x = f2 (x, d978); |
|
+ x = f2 (x, d979); |
|
+ x = f2 (x, d980); |
|
+ x = f2 (x, d981); |
|
+ x = f2 (x, d982); |
|
+ x = f2 (x, d983); |
|
+ x = f2 (x, d984); |
|
+ x = f2 (x, d985); |
|
+ x = f2 (x, d986); |
|
+ x = f2 (x, d987); |
|
+ x = f2 (x, d988); |
|
+ x = f2 (x, d989); |
|
+ x = f2 (x, d990); |
|
+ x = f2 (x, d991); |
|
+ x = f2 (x, d992); |
|
+ x = f2 (x, d993); |
|
+ x = f2 (x, d994); |
|
+ x = f2 (x, d995); |
|
+ x = f2 (x, d996); |
|
+ x = f2 (x, d997); |
|
+ x = f2 (x, d998); |
|
+ x = f2 (x, d999); |
|
+ return x; |
|
+} |
|
+ |
|
+/* { dg-final { scan-rtl-dump-times "Stack clash inline probes" 1 "pro_and_epilogue" } } */ |
|
+/* { dg-final { scan-rtl-dump-times "Stack clash residual allocation in prologue" 1 "pro_and_epilogue" } } */ |
|
+/* { dg-final { scan-rtl-dump-times "Stack clash not noreturn" 1 "pro_and_epilogue" } } */ |
|
+ |
|
+/* f3 is not a leaf |
|
+/* { dg-final { scan-rtl-dump-times "Stack clash no frame pointer needed" 1 "pro_and_epilogue" { target { ! frame_pointer_for_non_leaf } } } } */ |
|
+/* { dg-final { scan-rtl-dump-times "Stack clash frame pointer needed" 1 "pro_and_epilogue" { target { frame_pointer_for_non_leaf } } } } */ |
|
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp |
|
index 821cea9cb33..2c669a9822f 100644 |
|
--- a/gcc/testsuite/lib/target-supports.exp |
|
+++ b/gcc/testsuite/lib/target-supports.exp |
|
@@ -5421,11 +5421,15 @@ proc check_effective_target_autoincdec { } { |
|
proc check_effective_target_supports_stack_clash_protection { } { |
|
|
|
# Temporary until the target bits are fully ACK'd. |
|
-# if { [istarget aarch*-*-*] || [istarget x86_64-*-*] |
|
-# || [istarget i?86-*-*] || [istarget s390*-*-*] |
|
+# if { [istarget aarch*-*-*] |
|
+# || [istarget s390*-*-*] |
|
# || [istarget powerpc*-*-*] || [istarget rs6000*-*-*] } { |
|
# return 1 |
|
# } |
|
+ |
|
+ if { [istarget x86_64-*-*] || [istarget i?86-*-*] } { |
|
+ return 1 |
|
+ } |
|
return 0 |
|
}
|
|
|