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 if (kind == 1) { 64 raw_ = CFI_type_char; 65 } 66 break; 67 case TypeCategory::Logical: 68 switch (kind) { 69 case 1: 70 raw_ = CFI_type_Bool; 71 break; 72 case 2: 73 raw_ = CFI_type_int16_t; 74 break; 75 case 4: 76 raw_ = CFI_type_int32_t; 77 break; 78 case 8: 79 raw_ = CFI_type_int64_t; 80 break; 81 } 82 break; 83 case TypeCategory::Derived: 84 raw_ = CFI_type_struct; 85 break; 86 } 87 } 88 } // namespace Fortran::runtime 89