aboutsummaryrefslogtreecommitdiff
path: root/gcc/jit/jit-recording.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/jit/jit-recording.cc')
-rw-r--r--gcc/jit/jit-recording.cc146
1 files changed, 144 insertions, 2 deletions
diff --git a/gcc/jit/jit-recording.cc b/gcc/jit/jit-recording.cc
index 1e3fadf..4ffdad0 100644
--- a/gcc/jit/jit-recording.cc
+++ b/gcc/jit/jit-recording.cc
@@ -822,6 +822,10 @@ recording::context::get_int_type (int num_bytes, int is_signed)
return get_type (is_signed
? GCC_JIT_TYPE_LONG_LONG
: GCC_JIT_TYPE_UNSIGNED_LONG_LONG);
+ if (num_bits == 128)
+ return get_type (is_signed
+ ? GCC_JIT_TYPE_INT128_T
+ : GCC_JIT_TYPE_UINT128_T);
/* Some other size, not corresponding to the C int types. */
/* To be written: support arbitrary other sizes, sharing by
@@ -2325,6 +2329,26 @@ recording::memento_of_get_type::get_size ()
case GCC_JIT_TYPE_UNSIGNED_LONG_LONG:
size = LONG_LONG_TYPE_SIZE;
break;
+ case GCC_JIT_TYPE_UINT8_T:
+ case GCC_JIT_TYPE_INT8_T:
+ size = 8;
+ break;
+ case GCC_JIT_TYPE_UINT16_T:
+ case GCC_JIT_TYPE_INT16_T:
+ size = 16;
+ break;
+ case GCC_JIT_TYPE_UINT32_T:
+ case GCC_JIT_TYPE_INT32_T:
+ size = 32;
+ break;
+ case GCC_JIT_TYPE_UINT64_T:
+ case GCC_JIT_TYPE_INT64_T:
+ size = 64;
+ break;
+ case GCC_JIT_TYPE_UINT128_T:
+ case GCC_JIT_TYPE_INT128_T:
+ size = 128;
+ break;
case GCC_JIT_TYPE_FLOAT:
size = FLOAT_TYPE_SIZE;
break;
@@ -2334,6 +2358,9 @@ recording::memento_of_get_type::get_size ()
case GCC_JIT_TYPE_LONG_DOUBLE:
size = LONG_DOUBLE_TYPE_SIZE;
break;
+ case GCC_JIT_TYPE_SIZE_T:
+ size = MAX_BITS_PER_WORD;
+ break;
default:
/* As this function is called by
'gcc_jit_global_set_initializer' and
@@ -2373,6 +2400,16 @@ recording::memento_of_get_type::dereference ()
case GCC_JIT_TYPE_UNSIGNED_LONG:
case GCC_JIT_TYPE_LONG_LONG:
case GCC_JIT_TYPE_UNSIGNED_LONG_LONG:
+ case GCC_JIT_TYPE_UINT8_T:
+ case GCC_JIT_TYPE_UINT16_T:
+ case GCC_JIT_TYPE_UINT32_T:
+ case GCC_JIT_TYPE_UINT64_T:
+ case GCC_JIT_TYPE_UINT128_T:
+ case GCC_JIT_TYPE_INT8_T:
+ case GCC_JIT_TYPE_INT16_T:
+ case GCC_JIT_TYPE_INT32_T:
+ case GCC_JIT_TYPE_INT64_T:
+ case GCC_JIT_TYPE_INT128_T:
case GCC_JIT_TYPE_FLOAT:
case GCC_JIT_TYPE_DOUBLE:
case GCC_JIT_TYPE_LONG_DOUBLE:
@@ -2425,6 +2462,16 @@ recording::memento_of_get_type::is_int () const
case GCC_JIT_TYPE_UNSIGNED_LONG:
case GCC_JIT_TYPE_LONG_LONG:
case GCC_JIT_TYPE_UNSIGNED_LONG_LONG:
+ case GCC_JIT_TYPE_UINT8_T:
+ case GCC_JIT_TYPE_UINT16_T:
+ case GCC_JIT_TYPE_UINT32_T:
+ case GCC_JIT_TYPE_UINT64_T:
+ case GCC_JIT_TYPE_UINT128_T:
+ case GCC_JIT_TYPE_INT8_T:
+ case GCC_JIT_TYPE_INT16_T:
+ case GCC_JIT_TYPE_INT32_T:
+ case GCC_JIT_TYPE_INT64_T:
+ case GCC_JIT_TYPE_INT128_T:
return true;
case GCC_JIT_TYPE_FLOAT:
@@ -2448,6 +2495,60 @@ recording::memento_of_get_type::is_int () const
}
}
+/* Implementation of pure virtual hook recording::type::is_signed for
+ recording::memento_of_get_type. */
+
+bool
+recording::memento_of_get_type::is_signed () const
+{
+ switch (m_kind)
+ {
+ default: gcc_unreachable ();
+
+ case GCC_JIT_TYPE_SIGNED_CHAR:
+ case GCC_JIT_TYPE_CHAR:
+ case GCC_JIT_TYPE_SHORT:
+ case GCC_JIT_TYPE_INT:
+ case GCC_JIT_TYPE_LONG:
+ case GCC_JIT_TYPE_LONG_LONG:
+ case GCC_JIT_TYPE_INT8_T:
+ case GCC_JIT_TYPE_INT16_T:
+ case GCC_JIT_TYPE_INT32_T:
+ case GCC_JIT_TYPE_INT64_T:
+ case GCC_JIT_TYPE_INT128_T:
+ return true;
+
+ case GCC_JIT_TYPE_VOID:
+ case GCC_JIT_TYPE_VOID_PTR:
+ case GCC_JIT_TYPE_BOOL:
+ case GCC_JIT_TYPE_UNSIGNED_CHAR:
+ case GCC_JIT_TYPE_UNSIGNED_SHORT:
+ case GCC_JIT_TYPE_UNSIGNED_INT:
+ case GCC_JIT_TYPE_UNSIGNED_LONG:
+ case GCC_JIT_TYPE_UNSIGNED_LONG_LONG:
+ case GCC_JIT_TYPE_UINT8_T:
+ case GCC_JIT_TYPE_UINT16_T:
+ case GCC_JIT_TYPE_UINT32_T:
+ case GCC_JIT_TYPE_UINT64_T:
+ case GCC_JIT_TYPE_UINT128_T:
+
+ case GCC_JIT_TYPE_FLOAT:
+ case GCC_JIT_TYPE_DOUBLE:
+ case GCC_JIT_TYPE_LONG_DOUBLE:
+
+ case GCC_JIT_TYPE_CONST_CHAR_PTR:
+
+ case GCC_JIT_TYPE_SIZE_T:
+
+ case GCC_JIT_TYPE_FILE_PTR:
+
+ case GCC_JIT_TYPE_COMPLEX_FLOAT:
+ case GCC_JIT_TYPE_COMPLEX_DOUBLE:
+ case GCC_JIT_TYPE_COMPLEX_LONG_DOUBLE:
+ return false;
+ }
+}
+
/* Implementation of pure virtual hook recording::type::is_float for
recording::memento_of_get_type. */
@@ -2478,6 +2579,16 @@ recording::memento_of_get_type::is_float () const
case GCC_JIT_TYPE_UNSIGNED_LONG:
case GCC_JIT_TYPE_LONG_LONG:
case GCC_JIT_TYPE_UNSIGNED_LONG_LONG:
+ case GCC_JIT_TYPE_UINT8_T:
+ case GCC_JIT_TYPE_UINT16_T:
+ case GCC_JIT_TYPE_UINT32_T:
+ case GCC_JIT_TYPE_UINT64_T:
+ case GCC_JIT_TYPE_UINT128_T:
+ case GCC_JIT_TYPE_INT8_T:
+ case GCC_JIT_TYPE_INT16_T:
+ case GCC_JIT_TYPE_INT32_T:
+ case GCC_JIT_TYPE_INT64_T:
+ case GCC_JIT_TYPE_INT128_T:
return false;
case GCC_JIT_TYPE_FLOAT:
@@ -2531,6 +2642,16 @@ recording::memento_of_get_type::is_bool () const
case GCC_JIT_TYPE_UNSIGNED_LONG:
case GCC_JIT_TYPE_LONG_LONG:
case GCC_JIT_TYPE_UNSIGNED_LONG_LONG:
+ case GCC_JIT_TYPE_UINT8_T:
+ case GCC_JIT_TYPE_UINT16_T:
+ case GCC_JIT_TYPE_UINT32_T:
+ case GCC_JIT_TYPE_UINT64_T:
+ case GCC_JIT_TYPE_UINT128_T:
+ case GCC_JIT_TYPE_INT8_T:
+ case GCC_JIT_TYPE_INT16_T:
+ case GCC_JIT_TYPE_INT32_T:
+ case GCC_JIT_TYPE_INT64_T:
+ case GCC_JIT_TYPE_INT128_T:
return false;
case GCC_JIT_TYPE_FLOAT:
@@ -2601,7 +2722,18 @@ static const char * const get_type_strings[] = {
"complex float", /* GCC_JIT_TYPE_COMPLEX_FLOAT */
"complex double", /* GCC_JIT_TYPE_COMPLEX_DOUBLE */
- "complex long double" /* GCC_JIT_TYPE_COMPLEX_LONG_DOUBLE */
+ "complex long double", /* GCC_JIT_TYPE_COMPLEX_LONG_DOUBLE */
+
+ "__uint8_t", /* GCC_JIT_TYPE_UINT8_T */
+ "__uint16_t", /* GCC_JIT_TYPE_UINT16_T */
+ "__uint32_t", /* GCC_JIT_TYPE_UINT32_T */
+ "__uint64_t", /* GCC_JIT_TYPE_UINT64_T */
+ "__uint128_t", /* GCC_JIT_TYPE_UINT128_T */
+ "__int8_t", /* GCC_JIT_TYPE_INT8_T */
+ "__int16_t", /* GCC_JIT_TYPE_INT16_T */
+ "__int32_t", /* GCC_JIT_TYPE_INT32_T */
+ "__int64_t", /* GCC_JIT_TYPE_INT64_T */
+ "__int128_t", /* GCC_JIT_TYPE_INT128_T */
};
@@ -2637,7 +2769,17 @@ static const char * const get_type_enum_strings[] = {
"GCC_JIT_TYPE_FILE_PTR",
"GCC_JIT_TYPE_COMPLEX_FLOAT",
"GCC_JIT_TYPE_COMPLEX_DOUBLE",
- "GCC_JIT_TYPE_COMPLEX_LONG_DOUBLE"
+ "GCC_JIT_TYPE_COMPLEX_LONG_DOUBLE",
+ "GCC_JIT_TYPE_UINT8_T",
+ "GCC_JIT_TYPE_UINT16_T",
+ "GCC_JIT_TYPE_UINT32_T",
+ "GCC_JIT_TYPE_UINT64_T",
+ "GCC_JIT_TYPE_UINT128_T",
+ "GCC_JIT_TYPE_INT8_T",
+ "GCC_JIT_TYPE_INT16_T",
+ "GCC_JIT_TYPE_INT32_T",
+ "GCC_JIT_TYPE_INT64_T",
+ "GCC_JIT_TYPE_INT128_T",
};
void