Skip to content

Commit 47c63d3

Browse files
author
Robert Zakrzewski
committedApr 3, 2024·
Fix _Float16 and __float128 support for jit. Add _Float32 and _Float64 support for jit
1 parent 40872b5 commit 47c63d3

File tree

4 files changed

+46
-4
lines changed

4 files changed

+46
-4
lines changed
 

‎gcc/jit/dummy-frontend.cc

+8
Original file line numberDiff line numberDiff line change
@@ -1257,6 +1257,14 @@ recording::type* tree_type_to_jit_type (tree type)
12571257
{
12581258
return new recording::memento_of_get_type(&target_builtins_ctxt, GCC_JIT_TYPE_FLOAT16);
12591259
}
1260+
else if (type == float32_type_node)
1261+
{
1262+
return new recording::memento_of_get_type(&target_builtins_ctxt, GCC_JIT_TYPE_FLOAT32);
1263+
}
1264+
else if (type == float64_type_node)
1265+
{
1266+
return new recording::memento_of_get_type(&target_builtins_ctxt, GCC_JIT_TYPE_FLOAT64);
1267+
}
12601268
else if (type == float128_type_node)
12611269
{
12621270
return new recording::memento_of_get_type(&target_builtins_ctxt, GCC_JIT_TYPE_FLOAT128);

‎gcc/jit/jit-playback.cc

+12
Original file line numberDiff line numberDiff line change
@@ -291,8 +291,20 @@ get_tree_node_for_type (enum gcc_jit_types type_)
291291
case GCC_JIT_TYPE_LONG_DOUBLE:
292292
return long_double_type_node;
293293
case GCC_JIT_TYPE_FLOAT16:
294+
if (float16_type_node == NULL)
295+
add_error (NULL, "gcc_jit_types value unsupported on this target: %i", type_);
294296
return float16_type_node;
297+
case GCC_JIT_TYPE_FLOAT32:
298+
if (float32_type_node == NULL)
299+
add_error (NULL, "gcc_jit_types value unsupported on this target: %i", type_);
300+
return float32_type_node;
301+
case GCC_JIT_TYPE_FLOAT64:
302+
if (float64_type_node == NULL)
303+
add_error (NULL, "gcc_jit_types value unsupported on this target: %i", type_);
304+
return float64_type_node;
295305
case GCC_JIT_TYPE_FLOAT128:
306+
if (float128_type_node == NULL)
307+
add_error (NULL, "gcc_jit_types value unsupported on this target: %i", type_);
296308
return float128_type_node;
297309

298310
case GCC_JIT_TYPE_SIZE_T:

‎gcc/jit/jit-recording.cc

+22-2
Original file line numberDiff line numberDiff line change
@@ -2620,6 +2620,12 @@ recording::memento_of_get_type::get_size ()
26202620
case GCC_JIT_TYPE_FLOAT16:
26212621
size = 16;
26222622
break;
2623+
case GCC_JIT_TYPE_FLOAT32:
2624+
size = 32;
2625+
break;
2626+
case GCC_JIT_TYPE_FLOAT64:
2627+
size = 64;
2628+
break;
26232629
case GCC_JIT_TYPE_FLOAT128:
26242630
size = 128;
26252631
break;
@@ -2707,6 +2713,8 @@ recording::memento_of_get_type::dereference ()
27072713
case GCC_JIT_TYPE_DOUBLE:
27082714
case GCC_JIT_TYPE_LONG_DOUBLE:
27092715
case GCC_JIT_TYPE_FLOAT16:
2716+
case GCC_JIT_TYPE_FLOAT32:
2717+
case GCC_JIT_TYPE_FLOAT64:
27102718
case GCC_JIT_TYPE_FLOAT128:
27112719
case GCC_JIT_TYPE_COMPLEX_FLOAT:
27122720
case GCC_JIT_TYPE_COMPLEX_DOUBLE:
@@ -2774,6 +2782,8 @@ recording::memento_of_get_type::is_int () const
27742782
case GCC_JIT_TYPE_DOUBLE:
27752783
case GCC_JIT_TYPE_LONG_DOUBLE:
27762784
case GCC_JIT_TYPE_FLOAT16:
2785+
case GCC_JIT_TYPE_FLOAT32:
2786+
case GCC_JIT_TYPE_FLOAT64:
27772787
case GCC_JIT_TYPE_FLOAT128:
27782788
return false;
27792789

@@ -2835,6 +2845,8 @@ recording::memento_of_get_type::is_signed () const
28352845
case GCC_JIT_TYPE_DOUBLE:
28362846
case GCC_JIT_TYPE_LONG_DOUBLE:
28372847
case GCC_JIT_TYPE_FLOAT16:
2848+
case GCC_JIT_TYPE_FLOAT32:
2849+
case GCC_JIT_TYPE_FLOAT64:
28382850
case GCC_JIT_TYPE_FLOAT128:
28392851

28402852
case GCC_JIT_TYPE_CONST_CHAR_PTR:
@@ -2897,6 +2909,8 @@ recording::memento_of_get_type::is_float () const
28972909
case GCC_JIT_TYPE_DOUBLE:
28982910
case GCC_JIT_TYPE_LONG_DOUBLE:
28992911
case GCC_JIT_TYPE_FLOAT16:
2912+
case GCC_JIT_TYPE_FLOAT32:
2913+
case GCC_JIT_TYPE_FLOAT64:
29002914
case GCC_JIT_TYPE_FLOAT128:
29012915
return true;
29022916

@@ -2963,6 +2977,8 @@ recording::memento_of_get_type::is_bool () const
29632977
case GCC_JIT_TYPE_DOUBLE:
29642978
case GCC_JIT_TYPE_LONG_DOUBLE:
29652979
case GCC_JIT_TYPE_FLOAT16:
2980+
case GCC_JIT_TYPE_FLOAT32:
2981+
case GCC_JIT_TYPE_FLOAT64:
29662982
case GCC_JIT_TYPE_FLOAT128:
29672983
return false;
29682984

@@ -3042,8 +3058,10 @@ static const char * const get_type_strings[] = {
30423058
"__int64_t", /* GCC_JIT_TYPE_INT64_T */
30433059
"__int128_t", /* GCC_JIT_TYPE_INT128_T */
30443060
"bfloat16", /* GCC_JIT_TYPE_BFLOAT16 */
3045-
"float16", /* GCC_JIT_TYPE_FLOAT16 */
3046-
"float128", /* GCC_JIT_TYPE_FLOAT128 */
3061+
"_Float16", /* GCC_JIT_TYPE_FLOAT16 */
3062+
"_Float32", /* GCC_JIT_TYPE_FLOAT32 */
3063+
"_Float64", /* GCC_JIT_TYPE_FLOAT64 */
3064+
"__float128", /* GCC_JIT_TYPE_FLOAT128 */
30473065

30483066
};
30493067

@@ -3092,6 +3110,8 @@ static const char * const get_type_enum_strings[] = {
30923110
"GCC_JIT_TYPE_INT128_T",
30933111
"GCC_JIT_TYPE_BFLOAT16",
30943112
"GCC_JIT_TYPE_FLOAT16",
3113+
"GCC_JIT_TYPE_FLOAT32",
3114+
"GCC_JIT_TYPE_FLOAT64",
30953115
"GCC_JIT_TYPE_FLOAT128",
30963116
};
30973117

‎gcc/jit/libgccjit.h

+4-2
Original file line numberDiff line numberDiff line change
@@ -613,8 +613,10 @@ 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,
616+
GCC_JIT_TYPE_FLOAT16,
617+
GCC_JIT_TYPE_FLOAT32,
618+
GCC_JIT_TYPE_FLOAT64,
619+
GCC_JIT_TYPE_FLOAT128,
618620
};
619621

620622
extern gcc_jit_type *

0 commit comments

Comments
 (0)