1/* Copyright (C) 2002 Free Software Foundation. 2 3 Test floating point negation produces the expected results. 4 5 Written by Roger Sayle, 21st May 2002. */ 6 7/* { dg-do run } */ 8/* { dg-options "-O2 -ffast-math" } */ 9 10extern void abort (); 11 12 13double 14dneg (double x) 15{ 16 return -x; 17} 18 19double 20dmult (double x) 21{ 22 return -1.0 * x; 23} 24 25double 26ddiv (double x) 27{ 28 return x / -1.0; 29} 30 31 32float 33fneg (float x) 34{ 35 return -x; 36} 37 38float 39fmult (float x) 40{ 41 return -1.0f * x; 42} 43 44float 45fdiv (float x) 46{ 47 return x / -1.0f; 48} 49 50 51void 52ftest(float src, float dst) 53{ 54 if (fneg (src) != dst) 55 abort (); 56 57 if (src != fneg (dst)) 58 abort (); 59 60 if (fmult (src) != dst) 61 abort (); 62 63 if (src != fmult (dst)) 64 abort (); 65 66 if (fdiv (src) != dst) 67 abort (); 68 69 if (src != fdiv(dst)) 70 abort (); 71} 72 73void 74dtest(double src, double dst) 75{ 76 if (dneg (src) != dst) 77 abort (); 78 79 if (src != dneg (dst)) 80 abort (); 81 82 if (dmult (src) != dst) 83 abort (); 84 85 if (src != dmult (dst)) 86 abort (); 87 88 if (ddiv (src) != dst) 89 abort (); 90 91 if (src != ddiv(dst)) 92 abort (); 93} 94 95 96int 97main () 98{ 99 ftest (1.0f, -1.0f); 100 ftest (2.0f, -2.0f); 101 ftest (-3.0f, 3.0f); 102 ftest (0.0f, -0.0f); 103 ftest (-0.0f, 0.0f); 104 105 dtest (1.0, -1.0); 106 dtest (2.0, -2.0); 107 dtest (-3.0, 3.0); 108 dtest (0.0, -0.0); 109 dtest (-0.0, 0.0); 110 111 return 0; 112} 113 114