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: raw_ = CFI_type_int8_t; break; 18 case 2: raw_ = CFI_type_int16_t; break; 19 case 4: raw_ = CFI_type_int32_t; break; 20 case 8: raw_ = CFI_type_int64_t; break; 21 case 16: raw_ = CFI_type_int128_t; break; 22 } 23 break; 24 case TypeCategory::Real: 25 switch (kind) { 26 case 4: raw_ = CFI_type_float; break; 27 case 8: raw_ = CFI_type_double; break; 28 case 10: 29 case 16: raw_ = CFI_type_long_double; break; 30 } 31 break; 32 case TypeCategory::Complex: 33 switch (kind) { 34 case 4: raw_ = CFI_type_float_Complex; break; 35 case 8: raw_ = CFI_type_double_Complex; break; 36 case 10: 37 case 16: raw_ = CFI_type_long_double_Complex; break; 38 } 39 break; 40 case TypeCategory::Character: 41 if (kind == 1) { 42 raw_ = CFI_type_char; 43 } 44 break; 45 case TypeCategory::Logical: 46 switch (kind) { 47 case 1: raw_ = CFI_type_Bool; break; 48 case 2: raw_ = CFI_type_int16_t; break; 49 case 4: raw_ = CFI_type_int32_t; break; 50 case 8: raw_ = CFI_type_int64_t; break; 51 } 52 break; 53 case TypeCategory::Derived: raw_ = CFI_type_struct; break; 54 } 55 } 56 } 57