From f7c34914de55f3303dfacb6d61ce7b1816ed54ce Mon Sep 17 00:00:00 2001 From: peter klausler Date: Fri, 21 Jun 2019 14:10:42 -0700 Subject: [PATCH] [flang] Add LOGICAL8, &c. Original-commit: flang-compiler/f18@fd8df8cd8f7503310103bd1d99efea92a41dc053 Reviewed-on: https://github.com/flang-compiler/f18/pull/531 Tree-same-pre-rewrite: false --- flang/module/ieee_arithmetic.f18.mod | 115 +++++++++++++++++++++++++++++++++++ flang/module/ieee_exceptions.f18.mod | 30 +++++++++ flang/module/ieee_features.f18.mod | 18 ++++++ flang/module/iso_c_binding.f18.mod | 54 ++++++++++++++++ flang/module/iso_fortran_env.f18.mod | 56 +++++++++++++++++ flang/module/iso_fortran_env.f90 | 11 +++- 6 files changed, 281 insertions(+), 3 deletions(-) create mode 100644 flang/module/ieee_arithmetic.f18.mod create mode 100644 flang/module/ieee_exceptions.f18.mod create mode 100644 flang/module/ieee_features.f18.mod create mode 100644 flang/module/iso_c_binding.f18.mod create mode 100644 flang/module/iso_fortran_env.f18.mod diff --git a/flang/module/ieee_arithmetic.f18.mod b/flang/module/ieee_arithmetic.f18.mod new file mode 100644 index 0000000..1483895 --- /dev/null +++ b/flang/module/ieee_arithmetic.f18.mod @@ -0,0 +1,115 @@ +!mod$ v1 sum:377fafa870889c4f +module ieee_arithmetic +type::ieee_class_type +integer(1),private::which=0_4 +end type +type(ieee_class_type),parameter::ieee_signaling_nan=ieee_class_type(which=1_1) +type(ieee_class_type),parameter::ieee_quiet_nan=ieee_class_type(which=2_1) +type(ieee_class_type),parameter::ieee_negative_inf=ieee_class_type(which=3_1) +type(ieee_class_type),parameter::ieee_negative_normal=ieee_class_type(which=4_1) +type(ieee_class_type),parameter::ieee_negative_denormal=ieee_class_type(which=5_1) +type(ieee_class_type),parameter::ieee_negative_zero=ieee_class_type(which=6_1) +type(ieee_class_type),parameter::ieee_positive_zero=ieee_class_type(which=7_1) +type(ieee_class_type),parameter::ieee_positive_subnormal=ieee_class_type(which=8_1) +type(ieee_class_type),parameter::ieee_positive_normal=ieee_class_type(which=9_1) +type(ieee_class_type),parameter::ieee_positive_inf=ieee_class_type(which=10_1) +type(ieee_class_type),parameter::ieee_other_value=ieee_class_type(which=11_1) +type(ieee_class_type),parameter::ieee_negative_subnormal=ieee_class_type(which=5_1) +type(ieee_class_type),parameter::ieee_positive_denormal=ieee_class_type(which=5_1) +type::ieee_round_type +integer(1),private::mode=0_4 +end type +type(ieee_round_type),parameter::ieee_nearest=ieee_round_type(mode=1_1) +type(ieee_round_type),parameter::ieee_to_zero=ieee_round_type(mode=2_1) +type(ieee_round_type),parameter::ieee_up=ieee_round_type(mode=3_1) +type(ieee_round_type),parameter::ieee_down=ieee_round_type(mode=4_1) +type(ieee_round_type),parameter::ieee_away=ieee_round_type(mode=5_1) +type(ieee_round_type),parameter::ieee_other=ieee_round_type(mode=6_1) +generic::operator(==)=>class_eq,round_eq +generic::operator(/=)=>class_ne,round_ne +generic::ieee_class=>ieee_class_a2,ieee_class_a3,ieee_class_a4,ieee_class_a8,ieee_class_a10,ieee_class_a16 +generic::ieee_copy_sign=>ieee_copy_sign_a2,ieee_copy_sign_a3,ieee_copy_sign_a4,ieee_copy_sign_a8,ieee_copy_sign_a10,ieee_copy_sign_a16 +contains +elemental function class_eq(x,y) +logical(4)::class_eq +type(ieee_class_type),intent(in)::x +type(ieee_class_type),intent(in)::y +end +elemental function class_ne(x,y) +logical(4)::class_ne +type(ieee_class_type),intent(in)::x +type(ieee_class_type),intent(in)::y +end +elemental function round_eq(x,y) +logical(4)::round_eq +type(ieee_round_type),intent(in)::x +type(ieee_round_type),intent(in)::y +end +elemental function round_ne(x,y) +logical(4)::round_ne +type(ieee_round_type),intent(in)::x +type(ieee_round_type),intent(in)::y +end +elemental private function classify(expo,maxexpo,negative,significandnz,quietbit) +type(ieee_class_type)::classify +integer(4),intent(in)::expo +integer(4),intent(in)::maxexpo +logical(4),intent(in)::negative +logical(4),intent(in)::significandnz +logical(4),intent(in)::quietbit +end +elemental function ieee_class_a2(x) +type(ieee_class_type)::ieee_class_a2 +real(2),intent(in)::x +end +elemental function ieee_class_a3(x) +type(ieee_class_type)::ieee_class_a3 +real(3),intent(in)::x +end +elemental function ieee_class_a4(x) +type(ieee_class_type)::ieee_class_a4 +real(4),intent(in)::x +end +elemental function ieee_class_a8(x) +type(ieee_class_type)::ieee_class_a8 +real(8),intent(in)::x +end +elemental function ieee_class_a10(x) +type(ieee_class_type)::ieee_class_a10 +real(10),intent(in)::x +end +elemental function ieee_class_a16(x) +type(ieee_class_type)::ieee_class_a16 +real(16),intent(in)::x +end +elemental function ieee_copy_sign_a2(x,y) +real(2)::ieee_copy_sign_a2 +real(2),intent(in)::x +real(2),intent(in)::y +end +elemental function ieee_copy_sign_a3(x,y) +real(3)::ieee_copy_sign_a3 +real(3),intent(in)::x +real(3),intent(in)::y +end +elemental function ieee_copy_sign_a4(x,y) +real(4)::ieee_copy_sign_a4 +real(4),intent(in)::x +real(4),intent(in)::y +end +elemental function ieee_copy_sign_a8(x,y) +real(8)::ieee_copy_sign_a8 +real(8),intent(in)::x +real(8),intent(in)::y +end +elemental function ieee_copy_sign_a10(x,y) +real(10)::ieee_copy_sign_a10 +real(10),intent(in)::x +real(10),intent(in)::y +end +elemental function ieee_copy_sign_a16(x,y) +real(16)::ieee_copy_sign_a16 +real(16),intent(in)::x +real(16),intent(in)::y +end +end diff --git a/flang/module/ieee_exceptions.f18.mod b/flang/module/ieee_exceptions.f18.mod new file mode 100644 index 0000000..0c68dd0 --- /dev/null +++ b/flang/module/ieee_exceptions.f18.mod @@ -0,0 +1,30 @@ +!mod$ v1 sum:1e5a37c09db771dd +module ieee_exceptions +type::ieee_flag_type +integer(1),private::flag=0_4 +end type +type(ieee_flag_type),parameter::ieee_invalid=ieee_flag_type(flag=1_1) +type(ieee_flag_type),parameter::ieee_overflow=ieee_flag_type(flag=2_1) +type(ieee_flag_type),parameter::ieee_divide_by_zero=ieee_flag_type(flag=4_1) +type(ieee_flag_type),parameter::ieee_underflow=ieee_flag_type(flag=8_1) +type(ieee_flag_type),parameter::ieee_inexact=ieee_flag_type(flag=16_1) +type(ieee_flag_type),parameter::ieee_usual(1_8:)=[ieee_flag_type::ieee_flag_type(flag=2_1),ieee_flag_type(flag=4_1),ieee_flag_type(flag=1_1)] +type(ieee_flag_type),parameter::ieee_all(1_8:)=[ieee_flag_type::ieee_flag_type(flag=2_1),ieee_flag_type(flag=4_1),ieee_flag_type(flag=1_1),ieee_flag_type(flag=8_1),ieee_flag_type(flag=16_1)] +type::ieee_modes_type +end type +type::ieee_status_type +end type +contains +subroutine ieee_get_modes(modes) +type(ieee_modes_type),intent(out)::modes +end +subroutine ieee_set_modes(modes) +type(ieee_modes_type),intent(in)::modes +end +subroutine ieee_get_status(status) +type(ieee_status_type),intent(out)::status +end +subroutine ieee_set_status(status) +type(ieee_status_type),intent(in)::status +end +end diff --git a/flang/module/ieee_features.f18.mod b/flang/module/ieee_features.f18.mod new file mode 100644 index 0000000..a3fc079 --- /dev/null +++ b/flang/module/ieee_features.f18.mod @@ -0,0 +1,18 @@ +!mod$ v1 sum:0fa84ac68ab883f5 +module ieee_features +type::ieee_features_type +integer(1),private::feature=0_4 +end type +type(ieee_features_type),parameter::ieee_datatype=ieee_features_type(feature=1_1) +type(ieee_features_type),parameter::ieee_denormal=ieee_features_type(feature=2_1) +type(ieee_features_type),parameter::ieee_divide=ieee_features_type(feature=3_1) +type(ieee_features_type),parameter::ieee_halting=ieee_features_type(feature=4_1) +type(ieee_features_type),parameter::ieee_inexact_flag=ieee_features_type(feature=5_1) +type(ieee_features_type),parameter::ieee_inf=ieee_features_type(feature=6_1) +type(ieee_features_type),parameter::ieee_invalid_flag=ieee_features_type(feature=7_1) +type(ieee_features_type),parameter::ieee_nan=ieee_features_type(feature=8_1) +type(ieee_features_type),parameter::ieee_rounding=ieee_features_type(feature=9_1) +type(ieee_features_type),parameter::ieee_sqrt=ieee_features_type(feature=10_1) +type(ieee_features_type),parameter::ieee_subnormal=ieee_features_type(feature=11_1) +type(ieee_features_type),parameter::ieee_underflow_flag=ieee_features_type(feature=12_1) +end diff --git a/flang/module/iso_c_binding.f18.mod b/flang/module/iso_c_binding.f18.mod new file mode 100644 index 0000000..d0777b9 --- /dev/null +++ b/flang/module/iso_c_binding.f18.mod @@ -0,0 +1,54 @@ +!mod$ v1 sum:9822adcde8c57677 +module iso_c_binding +type::c_ptr +integer(8)::address +end type +type::c_funptr +integer(8)::address +end type +type(c_ptr),parameter::c_null_ptr=c_ptr(address=0_8) +type(c_funptr),parameter::c_null_funptr=c_funptr(address=0_8) +integer(4),parameter::c_int8_t=1_4 +integer(4),parameter::c_int16_t=2_4 +integer(4),parameter::c_int32_t=4_4 +integer(4),parameter::c_int64_t=8_4 +integer(4),parameter::c_int128_t=16_4 +integer(4),parameter::c_int=4_4 +integer(4),parameter::c_short=2_4 +integer(4),parameter::c_long=8_4 +integer(4),parameter::c_long_long=8_4 +integer(4),parameter::c_signed_char=1_4 +integer(4),parameter::c_size_t=8_4 +integer(4),parameter::c_intmax_t=16_4 +integer(4),parameter::c_intptr_t=8_4 +integer(4),parameter::c_ptrdiff_t=8_4 +integer(4),parameter::c_int_least8_t=1_4 +integer(4),parameter::c_int_fast8_t=1_4 +integer(4),parameter::c_int_least16_t=2_4 +integer(4),parameter::c_int_fast16_t=2_4 +integer(4),parameter::c_int_least32_t=4_4 +integer(4),parameter::c_int_fast32_t=4_4 +integer(4),parameter::c_int_least64_t=8_4 +integer(4),parameter::c_int_fast64_t=8_4 +integer(4),parameter::c_int_least128_t=16_4 +integer(4),parameter::c_int_fast128_t=16_4 +integer(4),parameter::c_float=4_4 +integer(4),parameter::c_double=8_4 +integer(4),parameter::c_long_double=10_4 +integer(4),parameter::c_float_complex=4_4 +integer(4),parameter::c_double_complex=8_4 +integer(4),parameter::c_long_double_complex=10_4 +integer(4),parameter::c_bool=1_4 +integer(4),parameter::c_char=1_4 +contains +function c_associated(c_ptr_1,c_ptr_2) +logical(4)::c_associated +type(c_ptr),intent(in)::c_ptr_1 +type(c_ptr),intent(in),optional::c_ptr_2 +end +subroutine c_f_pointer(cptr,fptr,shape) +type(c_ptr),intent(in)::cptr +type(*),intent(out),pointer::fptr(..) +integer(4),intent(in),optional::shape(1_8:) +end +end diff --git a/flang/module/iso_fortran_env.f18.mod b/flang/module/iso_fortran_env.f18.mod new file mode 100644 index 0000000..b729c2b --- /dev/null +++ b/flang/module/iso_fortran_env.f18.mod @@ -0,0 +1,56 @@ +!mod$ v1 sum:0bfd96183f25666a +module iso_fortran_env +integer(4),parameter::atomic_int_kind=8_4 +integer(4),parameter::atomic_logical_kind=8_4 +integer(4),parameter::character_kinds(1_8:)=[Integer(4)::1_4,2_4,4_4] +integer(4),parameter::int8=1_4 +integer(4),parameter::int16=2_4 +integer(4),parameter::int32=4_4 +integer(4),parameter::int64=8_4 +integer(4),parameter::int128=16_4 +integer(4),parameter::integer_kinds(1_8:)=[Integer(4)::1_4,2_4,4_4,8_4,16_4] +integer(4),parameter::logical8=1_4 +integer(4),parameter::logical16=2_4 +integer(4),parameter::logical32=4_4 +integer(4),parameter::logical64=8_4 +integer(4),parameter::logical_kinds(1_8:)=[Integer(4)::1_4,2_4,4_4,8_4] +integer(4),parameter::real16=2_4 +integer(4),parameter::real32=4_4 +integer(4),parameter::real64=8_4 +integer(4),parameter::real80=10_4 +integer(4),parameter::real128=16_4 +integer(4),parameter::real_kinds(1_8:)=[Integer(4)::2_4,3_4,4_4,8_4,10_4,16_4] +integer(4),parameter::current_team=-1_4 +integer(4),parameter::initial_team=-2_4 +integer(4),parameter::parent_team=-3_4 +integer(4),parameter::input_unit=5_4 +integer(4),parameter::output_unit=6_4 +integer(4),parameter::iostat_end=-1_4 +integer(4),parameter::iostat_eor=-2_4 +integer(4),parameter::iostat_inquire_internal_unit=-1_4 +integer(4),parameter::character_storage_size=8_4 +integer(4),parameter::file_storage_size=8_4 +integer(4),parameter::numeric_storage_size=32_4 +integer(4),parameter::stat_failed_image=-1_4 +integer(4),parameter::stat_locked=2_4 +integer(4),parameter::stat_locked_other_image=3_4 +integer(4),parameter::stat_stopped_image=4_4 +integer(4),parameter::stat_unlocked=5_4 +integer(4),parameter::stat_unlocked_failed_image=6_4 +type::event_type +integer(8),private::count=0_4 +end type +type::lock_type +integer(8),private::count=0_4 +end type +type::team_type +integer(8),private::id=0_4 +end type +contains +function compiler_options() +character(80_4,1)::compiler_options +end +function compiler_version() +character(80_4,1)::compiler_version +end +end diff --git a/flang/module/iso_fortran_env.f90 b/flang/module/iso_fortran_env.f90 index 37d07ba..326b2a2 100644 --- a/flang/module/iso_fortran_env.f90 +++ b/flang/module/iso_fortran_env.f90 @@ -23,9 +23,14 @@ module iso_fortran_env integer, parameter :: character_kinds(:) = [1, 2, 4] integer, parameter :: int8 = 1, int16 = 2, int32 = 4, int64 = 8, int128 = 16 integer, parameter :: integer_kinds(:) = [int8, int16, int32, int64, int128] - integer, parameter :: logical_kinds(:) = [1, 2, 4, 8] - integer, parameter :: real16 = 2, real32 = 4, real64 = 8, real80 = 10, real128 = 16 - integer, parameter :: real_kinds(:) = [real16, 3, real32, real64, real80, real128] + integer, parameter :: & + logical8 = 1, logical16 = 2, logical32 = 4, logical64 = 8 + integer, parameter :: logical_kinds(:) = & + [logical8, logical16, logical32, logical64] + integer, parameter :: & + real16 = 2, real32 = 4, real64 = 8, real80 = 10, real128 = 16 + integer, parameter :: real_kinds(:) = & + [real16, 3, real32, real64, real80, real128] integer, parameter :: current_team = -1, initial_team = -2, parent_team = -3 -- 2.7.4