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