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