1 //===-- runtime/type-code.cpp ---------------------------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #include "type-code.h" 10 11 namespace Fortran::runtime { 12 13 TypeCode::TypeCode(TypeCategory f, int kind) { 14 switch (f) { 15 case TypeCategory::Integer: 16 switch (kind) { 17 case 1: 18 raw_ = CFI_type_int8_t; 19 break; 20 case 2: 21 raw_ = CFI_type_int16_t; 22 break; 23 case 4: 24 raw_ = CFI_type_int32_t; 25 break; 26 case 8: 27 raw_ = CFI_type_int64_t; 28 break; 29 case 16: 30 raw_ = CFI_type_int128_t; 31 break; 32 } 33 break; 34 case TypeCategory::Real: 35 switch (kind) { 36 case 4: 37 raw_ = CFI_type_float; 38 break; 39 case 8: 40 raw_ = CFI_type_double; 41 break; 42 case 10: 43 case 16: 44 raw_ = CFI_type_long_double; 45 break; 46 } 47 break; 48 case TypeCategory::Complex: 49 switch (kind) { 50 case 4: 51 raw_ = CFI_type_float_Complex; 52 break; 53 case 8: 54 raw_ = CFI_type_double_Complex; 55 break; 56 case 10: 57 case 16: 58 raw_ = CFI_type_long_double_Complex; 59 break; 60 } 61 break; 62 case TypeCategory::Character: 63 switch (kind) { 64 case 1: 65 raw_ = CFI_type_char; 66 break; 67 case 2: 68 raw_ = CFI_type_char16_t; 69 break; 70 case 4: 71 raw_ = CFI_type_char32_t; 72 break; 73 } 74 break; 75 case TypeCategory::Logical: 76 switch (kind) { 77 case 1: 78 raw_ = CFI_type_Bool; 79 break; 80 case 2: 81 raw_ = CFI_type_int16_t; 82 break; 83 case 4: 84 raw_ = CFI_type_int32_t; 85 break; 86 case 8: 87 raw_ = CFI_type_int64_t; 88 break; 89 } 90 break; 91 case TypeCategory::Derived: 92 raw_ = CFI_type_struct; 93 break; 94 } 95 } 96 } // namespace Fortran::runtime 97