File: ieee_exceptions.f90

package info (click to toggle)
llvm-toolchain-13 1%3A13.0.1-11
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 1,418,840 kB
  • sloc: cpp: 5,290,826; ansic: 996,570; asm: 544,593; python: 188,212; objc: 72,027; lisp: 30,291; f90: 25,395; sh: 24,898; javascript: 9,780; pascal: 9,398; perl: 7,484; ml: 5,432; awk: 3,523; makefile: 2,913; xml: 953; cs: 573; fortran: 539
file content (125 lines) | stat: -rw-r--r-- 4,212 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
!===-- module/ieee_exceptions.f90 ------------------------------------------===!
!
! Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
! See https://llvm.org/LICENSE.txt for license information.
! SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
!
!===------------------------------------------------------------------------===!

! See Fortran 2018, clause 17
module ieee_exceptions

  type :: ieee_flag_type ! Fortran 2018, 17.2 & 17.3
    private
    integer(kind=1) :: flag = 0
  end type ieee_flag_type

  type(ieee_flag_type), parameter :: &
    ieee_invalid = ieee_flag_type(1), &
    ieee_overflow = ieee_flag_type(2), &
    ieee_divide_by_zero = ieee_flag_type(4), &
    ieee_underflow = ieee_flag_type(8), &
    ieee_inexact = ieee_flag_type(16), &
    ieee_denorm = ieee_flag_type(32) ! PGI extension

  type(ieee_flag_type), parameter :: &
    ieee_usual(*) = [ &
      ieee_overflow, ieee_divide_by_zero, ieee_invalid ], &
    ieee_all(*) = [ &
      ieee_usual, ieee_underflow, ieee_inexact, ieee_denorm ]

  type :: ieee_modes_type ! Fortran 2018, 17.7
    private
  end type ieee_modes_type

  type :: ieee_status_type ! Fortran 2018, 17.7
    private
  end type ieee_status_type

  private :: ieee_support_flag_2, ieee_support_flag_3, &
      ieee_support_flag_4, ieee_support_flag_8, ieee_support_flag_10, &
      ieee_support_flag_16
  interface ieee_support_flag
    module procedure :: ieee_support_flag, &
      ieee_support_flag_2, ieee_support_flag_3, &
      ieee_support_flag_4, ieee_support_flag_8, ieee_support_flag_10, &
      ieee_support_flag_16
  end interface

 contains
  elemental subroutine ieee_get_flag(flag, flag_value)
    type(ieee_flag_type), intent(in) :: flag
    logical, intent(out) :: flag_value
  end subroutine ieee_get_flag

  elemental subroutine ieee_get_halting_mode(flag, halting)
    type(ieee_flag_type), intent(in) :: flag
    logical, intent(out) :: halting
  end subroutine ieee_get_halting_mode

  subroutine ieee_get_modes(modes)
    type(ieee_modes_type), intent(out) :: modes
  end subroutine ieee_get_modes

  subroutine ieee_get_status(status)
    type(ieee_status_type), intent(out) :: status
  end subroutine ieee_get_status

  pure subroutine ieee_set_flag(flag, flag_value)
    type(ieee_flag_type), intent(in) :: flag
    logical, intent(in) :: flag_value
  end subroutine ieee_set_flag

  pure subroutine ieee_set_halting_mode(flag, halting)
    type(ieee_flag_type), intent(in) :: flag
    logical, intent(in) :: halting
  end subroutine ieee_set_halting_mode

  subroutine ieee_set_modes(modes)
    type(ieee_modes_type), intent(in) :: modes
  end subroutine ieee_set_modes

  subroutine ieee_set_status(status)
    type(ieee_status_type), intent(in) :: status
  end subroutine ieee_set_status

  pure logical function ieee_support_flag(flag)
    type(ieee_flag_type), intent(in) :: flag
    ieee_support_flag = .true.
  end function
  pure logical function ieee_support_flag_2(flag, x)
    type(ieee_flag_type), intent(in) :: flag
    real(kind=2), intent(in) :: x(..)
    ieee_support_flag_2 = .true.
  end function
  pure logical function ieee_support_flag_3(flag, x)
    type(ieee_flag_type), intent(in) :: flag
    real(kind=3), intent(in) :: x(..)
    ieee_support_flag_3 = .true.
  end function
  pure logical function ieee_support_flag_4(flag, x)
    type(ieee_flag_type), intent(in) :: flag
    real(kind=4), intent(in) :: x(..)
    ieee_support_flag_4 = .true.
  end function
  pure logical function ieee_support_flag_8(flag, x)
    type(ieee_flag_type), intent(in) :: flag
    real(kind=8), intent(in) :: x(..)
    ieee_support_flag_8 = .true.
  end function
  pure logical function ieee_support_flag_10(flag, x)
    type(ieee_flag_type), intent(in) :: flag
    real(kind=10), intent(in) :: x(..)
    ieee_support_flag_10 = .true.
  end function
  pure logical function ieee_support_flag_16(flag, x)
    type(ieee_flag_type), intent(in) :: flag
    real(kind=16), intent(in) :: x(..)
    ieee_support_flag_16 = .true.
  end function

  pure logical function ieee_support_halting(flag)
    type(ieee_flag_type), intent(in) :: flag
  end function ieee_support_halting

end module ieee_exceptions