OpenCores
URL https://opencores.org/ocsvn/openrisc_2011-10-31/openrisc_2011-10-31/trunk

Subversion Repositories openrisc_2011-10-31

[/] [openrisc/] [trunk/] [gnu-src/] [gcc-4.5.1/] [gcc/] [testsuite/] [gfortran.dg/] [g77/] [20010216-1.f] - Rev 399

Go to most recent revision | Compare with Previous | Blame | View Log

C Test for bug in reg-stack handling conditional moves.
C Reported by Tim Prince <tprince@computer.org>
C
C { dg-do run { target { { i[6789]86-*-* x86_64-*-* } && ilp32 } } }
C { dg-options "-ffast-math -march=pentiumpro" }
 
      double precision function foo(x, y)
         implicit none
         double precision x, y
         double precision a, b, c, d
         if (x /= y) then
             if (x * y >= 0) then
                 a = abs(x)
                 b = abs(y)
                 c = max(a, b)
                 d = min(a, b)
                 foo = 1 - d/c
             else       
                 foo = 1
             end if  
         else
             foo = 0
         end if
      end
 
      program test
      implicit none
 
      integer ntests
      parameter (ntests=7)
      double precision tolerance
      parameter (tolerance=1.0D-6)
 
C Each column is a pair of values to feed to foo,
C and its expected return value.
      double precision a(ntests), b(ntests), x(ntests)
      data a /1, -23, -1,   1,   9,  10,  -9/
      data b /1, -23, 12, -12,  10,   9, -10/
      data x /0,   0,  1,   1, 0.1, 0.1, 0.1/
 
      double precision foo
      double precision result
      integer i
 
      do i = 1, ntests
         result = foo(a(i), b(i))
         if (abs(result - x(i)) > tolerance) then
           print *, i, a(i), b(i), x(i), result
           call abort
         end if
      end do
      end
 

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.