Skip to content

Commit 40872b5

Browse files
author
Robert Zakrzewski
committed
Add Float16 and Float128 support for jit
1 parent 2cf6ca7 commit 40872b5

File tree

5 files changed

+35
-1
lines changed

5 files changed

+35
-1
lines changed

gcc/jit/dummy-frontend.cc

+8
Original file line numberDiff line numberDiff line change
@@ -1253,6 +1253,14 @@ recording::type* tree_type_to_jit_type (tree type)
12531253
{
12541254
return new recording::memento_of_get_type (&target_builtins_ctxt, GCC_JIT_TYPE_BFLOAT16);
12551255
}
1256+
else if (type == float16_type_node)
1257+
{
1258+
return new recording::memento_of_get_type(&target_builtins_ctxt, GCC_JIT_TYPE_FLOAT16);
1259+
}
1260+
else if (type == float128_type_node)
1261+
{
1262+
return new recording::memento_of_get_type(&target_builtins_ctxt, GCC_JIT_TYPE_FLOAT128);
1263+
}
12561264
else if (type == dfloat128_type_node)
12571265
{
12581266
return new recording::memento_of_get_type (&target_builtins_ctxt, GCC_JIT_TYPE_VOID); // FIXME: wrong type.

gcc/jit/jit-common.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ along with GCC; see the file COPYING3. If not see
3636
#endif
3737
#endif
3838

39-
const int NUM_GCC_JIT_TYPES = GCC_JIT_TYPE_BFLOAT16 + 1;
39+
const int NUM_GCC_JIT_TYPES = GCC_JIT_TYPE_FLOAT128 + 1;
4040

4141
/* This comment is included by the docs.
4242

gcc/jit/jit-playback.cc

+4
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,10 @@ get_tree_node_for_type (enum gcc_jit_types type_)
290290
return double_type_node;
291291
case GCC_JIT_TYPE_LONG_DOUBLE:
292292
return long_double_type_node;
293+
case GCC_JIT_TYPE_FLOAT16:
294+
return float16_type_node;
295+
case GCC_JIT_TYPE_FLOAT128:
296+
return float128_type_node;
293297

294298
case GCC_JIT_TYPE_SIZE_T:
295299
return size_type_node;

gcc/jit/jit-recording.cc

+20
Original file line numberDiff line numberDiff line change
@@ -2617,6 +2617,12 @@ recording::memento_of_get_type::get_size ()
26172617
case GCC_JIT_TYPE_LONG_DOUBLE:
26182618
size = LONG_DOUBLE_TYPE_SIZE;
26192619
break;
2620+
case GCC_JIT_TYPE_FLOAT16:
2621+
size = 16;
2622+
break;
2623+
case GCC_JIT_TYPE_FLOAT128:
2624+
size = 128;
2625+
break;
26202626
case GCC_JIT_TYPE_SIZE_T:
26212627
/* Compare with tree.cc's build_common_tree_nodes. */
26222628
if (strcmp (SIZE_TYPE, "unsigned int") == 0)
@@ -2700,6 +2706,8 @@ recording::memento_of_get_type::dereference ()
27002706
case GCC_JIT_TYPE_BFLOAT16:
27012707
case GCC_JIT_TYPE_DOUBLE:
27022708
case GCC_JIT_TYPE_LONG_DOUBLE:
2709+
case GCC_JIT_TYPE_FLOAT16:
2710+
case GCC_JIT_TYPE_FLOAT128:
27032711
case GCC_JIT_TYPE_COMPLEX_FLOAT:
27042712
case GCC_JIT_TYPE_COMPLEX_DOUBLE:
27052713
case GCC_JIT_TYPE_COMPLEX_LONG_DOUBLE:
@@ -2765,6 +2773,8 @@ recording::memento_of_get_type::is_int () const
27652773
case GCC_JIT_TYPE_BFLOAT16:
27662774
case GCC_JIT_TYPE_DOUBLE:
27672775
case GCC_JIT_TYPE_LONG_DOUBLE:
2776+
case GCC_JIT_TYPE_FLOAT16:
2777+
case GCC_JIT_TYPE_FLOAT128:
27682778
return false;
27692779

27702780
case GCC_JIT_TYPE_CONST_CHAR_PTR:
@@ -2824,6 +2834,8 @@ recording::memento_of_get_type::is_signed () const
28242834
case GCC_JIT_TYPE_BFLOAT16:
28252835
case GCC_JIT_TYPE_DOUBLE:
28262836
case GCC_JIT_TYPE_LONG_DOUBLE:
2837+
case GCC_JIT_TYPE_FLOAT16:
2838+
case GCC_JIT_TYPE_FLOAT128:
28272839

28282840
case GCC_JIT_TYPE_CONST_CHAR_PTR:
28292841

@@ -2884,6 +2896,8 @@ recording::memento_of_get_type::is_float () const
28842896
case GCC_JIT_TYPE_BFLOAT16:
28852897
case GCC_JIT_TYPE_DOUBLE:
28862898
case GCC_JIT_TYPE_LONG_DOUBLE:
2899+
case GCC_JIT_TYPE_FLOAT16:
2900+
case GCC_JIT_TYPE_FLOAT128:
28872901
return true;
28882902

28892903
case GCC_JIT_TYPE_CONST_CHAR_PTR:
@@ -2948,6 +2962,8 @@ recording::memento_of_get_type::is_bool () const
29482962
case GCC_JIT_TYPE_BFLOAT16:
29492963
case GCC_JIT_TYPE_DOUBLE:
29502964
case GCC_JIT_TYPE_LONG_DOUBLE:
2965+
case GCC_JIT_TYPE_FLOAT16:
2966+
case GCC_JIT_TYPE_FLOAT128:
29512967
return false;
29522968

29532969
case GCC_JIT_TYPE_CONST_CHAR_PTR:
@@ -3026,6 +3042,8 @@ static const char * const get_type_strings[] = {
30263042
"__int64_t", /* GCC_JIT_TYPE_INT64_T */
30273043
"__int128_t", /* GCC_JIT_TYPE_INT128_T */
30283044
"bfloat16", /* GCC_JIT_TYPE_BFLOAT16 */
3045+
"float16", /* GCC_JIT_TYPE_FLOAT16 */
3046+
"float128", /* GCC_JIT_TYPE_FLOAT128 */
30293047

30303048
};
30313049

@@ -3073,6 +3091,8 @@ static const char * const get_type_enum_strings[] = {
30733091
"GCC_JIT_TYPE_INT64_T",
30743092
"GCC_JIT_TYPE_INT128_T",
30753093
"GCC_JIT_TYPE_BFLOAT16",
3094+
"GCC_JIT_TYPE_FLOAT16",
3095+
"GCC_JIT_TYPE_FLOAT128",
30763096
};
30773097

30783098
void

gcc/jit/libgccjit.h

+2
Original file line numberDiff line numberDiff line change
@@ -613,6 +613,8 @@ enum gcc_jit_types
613613
GCC_JIT_TYPE_INT128_T,
614614

615615
GCC_JIT_TYPE_BFLOAT16,
616+
GCC_JIT_TYPE_FLOAT16,
617+
GCC_JIT_TYPE_FLOAT128,
616618
};
617619

618620
extern gcc_jit_type *

0 commit comments

Comments
 (0)