diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/jit/docs/_build/texinfo/libgccjit.texi | 1706 | ||||
-rw-r--r-- | gcc/jit/docs/topics/compatibility.rst | 9 | ||||
-rw-r--r-- | gcc/jit/docs/topics/contexts.rst | 15 | ||||
-rw-r--r-- | gcc/jit/jit-common.h | 1 | ||||
-rw-r--r-- | gcc/jit/jit-recording.cc | 27 | ||||
-rw-r--r-- | gcc/jit/libgccjit.cc | 17 | ||||
-rw-r--r-- | gcc/jit/libgccjit.h | 18 | ||||
-rw-r--r-- | gcc/jit/libgccjit.map | 5 |
8 files changed, 953 insertions, 845 deletions
diff --git a/gcc/jit/docs/_build/texinfo/libgccjit.texi b/gcc/jit/docs/_build/texinfo/libgccjit.texi index 4c92b8a..9b5fc81 100644 --- a/gcc/jit/docs/_build/texinfo/libgccjit.texi +++ b/gcc/jit/docs/_build/texinfo/libgccjit.texi @@ -263,6 +263,7 @@ ABI symbol tags * LIBGCCJIT_ABI_20:: * LIBGCCJIT_ABI_21:: * LIBGCCJIT_ABI_22:: +* LIBGCCJIT_ABI_23:: Performance @@ -5025,8 +5026,24 @@ its presence using @end example @end deffn +@geindex gcc_jit_context_set_bool_print_errors_to_stderr (C function) +@anchor{topics/contexts c gcc_jit_context_set_bool_print_errors_to_stderr}@anchor{6f} +@deffn {C Function} void gcc_jit_context_set_bool_print_errors_to_stderr (gcc_jit_context@w{ }*ctxt, int@w{ }enabled) + +By default, libgccjit will print errors to stderr. + +This entrypoint can be used to disable the printing. + +This entrypoint was added in @ref{70,,LIBGCCJIT_ABI_23}; you can test for +its presence using + +@example +#ifdef LIBGCCJIT_HAVE_gcc_jit_context_set_bool_print_errors_to_stderr +@end example +@end deffn + @node Integer options,Additional command-line options,Boolean options,Options<2> -@anchor{topics/contexts integer-options}@anchor{6f} +@anchor{topics/contexts integer-options}@anchor{71} @subsubsection Integer options @@ -5037,7 +5054,7 @@ its presence using Set an integer option of the context. @geindex gcc_jit_int_option (C type) -@anchor{topics/contexts c gcc_jit_int_option}@anchor{70} +@anchor{topics/contexts c gcc_jit_int_option}@anchor{72} @deffn {C Type} enum gcc_jit_int_option @end deffn @@ -5057,12 +5074,12 @@ The default value is 0 (unoptimized). @end deffn @node Additional command-line options,,Integer options,Options<2> -@anchor{topics/contexts additional-command-line-options}@anchor{71} +@anchor{topics/contexts additional-command-line-options}@anchor{73} @subsubsection Additional command-line options @geindex gcc_jit_context_add_command_line_option (C function) -@anchor{topics/contexts c gcc_jit_context_add_command_line_option}@anchor{72} +@anchor{topics/contexts c gcc_jit_context_add_command_line_option}@anchor{74} @deffn {C Function} void gcc_jit_context_add_command_line_option (gcc_jit_context@w{ }*ctxt, const char@w{ }*optname) Add an arbitrary gcc command-line option to the context, for use @@ -5088,7 +5105,7 @@ Note that only some options are likely to be meaningful; there is no “frontend” within libgccjit, so typically only those affecting optimization and code-generation are likely to be useful. -This entrypoint was added in @ref{73,,LIBGCCJIT_ABI_1}; you can test for +This entrypoint was added in @ref{75,,LIBGCCJIT_ABI_1}; you can test for its presence using @example @@ -5097,7 +5114,7 @@ its presence using @end deffn @geindex gcc_jit_context_add_driver_option (C function) -@anchor{topics/contexts c gcc_jit_context_add_driver_option}@anchor{74} +@anchor{topics/contexts c gcc_jit_context_add_driver_option}@anchor{76} @deffn {C Function} void gcc_jit_context_add_driver_option (gcc_jit_context@w{ }*ctxt, const char@w{ }*optname) Add an arbitrary gcc driver option to the context, for use by @@ -5128,7 +5145,7 @@ Note that only some options are likely to be meaningful; there is no “frontend” within libgccjit, so typically only those affecting assembler and linker are likely to be useful. -This entrypoint was added in @ref{75,,LIBGCCJIT_ABI_11}; you can test for +This entrypoint was added in @ref{77,,LIBGCCJIT_ABI_11}; you can test for its presence using @example @@ -5154,7 +5171,7 @@ its presence using @c <https://www.gnu.org/licenses/>. @node Objects,Types,Compilation contexts,Topic Reference -@anchor{topics/objects doc}@anchor{76}@anchor{topics/objects objects}@anchor{77} +@anchor{topics/objects doc}@anchor{78}@anchor{topics/objects objects}@anchor{79} @section Objects @@ -5212,7 +5229,7 @@ gcc_jit_object *obj = gcc_jit_type_as_object (int_type); The object “base class” has the following operations: @geindex gcc_jit_object_get_context (C function) -@anchor{topics/objects c gcc_jit_object_get_context}@anchor{78} +@anchor{topics/objects c gcc_jit_object_get_context}@anchor{7a} @deffn {C Function} gcc_jit_context *gcc_jit_object_get_context (gcc_jit_object@w{ }*obj) Which context is “obj” within? @@ -5264,7 +5281,7 @@ object’s context is released. @c <https://www.gnu.org/licenses/>. @node Types,Expressions,Objects,Topic Reference -@anchor{topics/types doc}@anchor{79}@anchor{topics/types types}@anchor{7a} +@anchor{topics/types doc}@anchor{7b}@anchor{topics/types types}@anchor{7c} @section Types @@ -5299,7 +5316,7 @@ See @ref{b,,gcc_jit_context_get_type()} for the available types. @item derived types can be accessed by using functions such as -@ref{7b,,gcc_jit_type_get_pointer()} and @ref{7c,,gcc_jit_type_get_const()}: +@ref{7d,,gcc_jit_type_get_pointer()} and @ref{7e,,gcc_jit_type_get_const()}: @example gcc_jit_type *const_int_star = gcc_jit_type_get_pointer (gcc_jit_type_get_const (int_type)); @@ -5321,7 +5338,7 @@ by creating structures (see below). @end menu @node Standard types,Pointers const and volatile,,Types -@anchor{topics/types standard-types}@anchor{7d} +@anchor{topics/types standard-types}@anchor{7f} @subsection Standard types @@ -5606,47 +5623,47 @@ C99’s @code{_Complex long double} @end deffn @geindex gcc_jit_context_get_int_type (C function) -@anchor{topics/types c gcc_jit_context_get_int_type}@anchor{7e} +@anchor{topics/types c gcc_jit_context_get_int_type}@anchor{80} @deffn {C Function} gcc_jit_type * gcc_jit_context_get_int_type (gcc_jit_context@w{ }*ctxt, int@w{ }num_bytes, int@w{ }is_signed) Access the integer type of the given size. @end deffn @node Pointers const and volatile,Vector types,Standard types,Types -@anchor{topics/types pointers-const-and-volatile}@anchor{7f} +@anchor{topics/types pointers-const-and-volatile}@anchor{81} @subsection Pointers, @cite{const}, and @cite{volatile} @geindex gcc_jit_type_get_pointer (C function) -@anchor{topics/types c gcc_jit_type_get_pointer}@anchor{7b} +@anchor{topics/types c gcc_jit_type_get_pointer}@anchor{7d} @deffn {C Function} gcc_jit_type *gcc_jit_type_get_pointer (gcc_jit_type@w{ }*type) Given type “T”, get type “T*”. @end deffn @geindex gcc_jit_type_get_const (C function) -@anchor{topics/types c gcc_jit_type_get_const}@anchor{7c} +@anchor{topics/types c gcc_jit_type_get_const}@anchor{7e} @deffn {C Function} gcc_jit_type *gcc_jit_type_get_const (gcc_jit_type@w{ }*type) Given type “T”, get type “const T”. @end deffn @geindex gcc_jit_type_get_volatile (C function) -@anchor{topics/types c gcc_jit_type_get_volatile}@anchor{80} +@anchor{topics/types c gcc_jit_type_get_volatile}@anchor{82} @deffn {C Function} gcc_jit_type *gcc_jit_type_get_volatile (gcc_jit_type@w{ }*type) Given type “T”, get type “volatile T”. @end deffn @geindex gcc_jit_context_new_array_type (C function) -@anchor{topics/types c gcc_jit_context_new_array_type}@anchor{81} +@anchor{topics/types c gcc_jit_context_new_array_type}@anchor{83} @deffn {C Function} gcc_jit_type * gcc_jit_context_new_array_type (gcc_jit_context@w{ }*ctxt, gcc_jit_location@w{ }*loc, gcc_jit_type@w{ }*element_type, int@w{ }num_elements) Given non-@cite{void} type “T”, get type “T[N]” (for a constant N). @end deffn @geindex gcc_jit_type_get_aligned (C function) -@anchor{topics/types c gcc_jit_type_get_aligned}@anchor{82} +@anchor{topics/types c gcc_jit_type_get_aligned}@anchor{84} @deffn {C Function} gcc_jit_type * gcc_jit_type_get_aligned (gcc_jit_type@w{ }*type, size_t@w{ }alignment_in_bytes) Given non-@cite{void} type “T”, get type: @@ -5657,7 +5674,7 @@ T __attribute__ ((aligned (ALIGNMENT_IN_BYTES))) The alignment must be a power of two. -This entrypoint was added in @ref{83,,LIBGCCJIT_ABI_7}; you can test for +This entrypoint was added in @ref{85,,LIBGCCJIT_ABI_7}; you can test for its presence using @example @@ -5666,12 +5683,12 @@ its presence using @end deffn @node Vector types,Structures and unions,Pointers const and volatile,Types -@anchor{topics/types vector-types}@anchor{84} +@anchor{topics/types vector-types}@anchor{86} @subsection Vector types @geindex gcc_jit_type_get_vector (C function) -@anchor{topics/types c gcc_jit_type_get_vector}@anchor{85} +@anchor{topics/types c gcc_jit_type_get_vector}@anchor{87} @deffn {C Function} gcc_jit_type * gcc_jit_type_get_vector (gcc_jit_type@w{ }*type, size_t@w{ }num_units) Given type “T”, get type: @@ -5701,7 +5718,7 @@ gcc_jit_type *int_type = gcc_jit_context_get_type (ctxt, gcc_jit_type *v4si_type = gcc_jit_type_get_vector (int_type, 4); @end example -This API entrypoint was added in @ref{86,,LIBGCCJIT_ABI_8}; you can test +This API entrypoint was added in @ref{88,,LIBGCCJIT_ABI_8}; you can test for its presence using @example @@ -5709,30 +5726,30 @@ for its presence using @end example Vector rvalues can be generated using -@ref{87,,gcc_jit_context_new_rvalue_from_vector()}. +@ref{89,,gcc_jit_context_new_rvalue_from_vector()}. @end deffn @node Structures and unions,Function pointer types,Vector types,Types -@anchor{topics/types structures-and-unions}@anchor{88} +@anchor{topics/types structures-and-unions}@anchor{8a} @subsection Structures and unions @geindex gcc_jit_struct (C type) -@anchor{topics/types c gcc_jit_struct}@anchor{89} +@anchor{topics/types c gcc_jit_struct}@anchor{8b} @deffn {C Type} gcc_jit_struct @end deffn A compound type analagous to a C @cite{struct}. @geindex gcc_jit_field (C type) -@anchor{topics/types c gcc_jit_field}@anchor{8a} +@anchor{topics/types c gcc_jit_field}@anchor{8c} @deffn {C Type} gcc_jit_field @end deffn -A field within a @ref{89,,gcc_jit_struct}. +A field within a @ref{8b,,gcc_jit_struct}. -You can model C @cite{struct} types by creating @ref{89,,gcc_jit_struct} and -@ref{8a,,gcc_jit_field} instances, in either order: +You can model C @cite{struct} types by creating @ref{8b,,gcc_jit_struct} and +@ref{8c,,gcc_jit_field} instances, in either order: @itemize * @@ -5781,7 +5798,7 @@ gcc_jit_struct_set_fields (node, NULL, 2, fields); @end itemize @geindex gcc_jit_context_new_field (C function) -@anchor{topics/types c gcc_jit_context_new_field}@anchor{8b} +@anchor{topics/types c gcc_jit_context_new_field}@anchor{8d} @deffn {C Function} gcc_jit_field * gcc_jit_context_new_field (gcc_jit_context@w{ }*ctxt, gcc_jit_location@w{ }*loc, gcc_jit_type@w{ }*type, const char@w{ }*name) Construct a new field, with the given type and name. @@ -5794,7 +5811,7 @@ buffer. @end deffn @geindex gcc_jit_context_new_bitfield (C function) -@anchor{topics/types c gcc_jit_context_new_bitfield}@anchor{8c} +@anchor{topics/types c gcc_jit_context_new_bitfield}@anchor{8e} @deffn {C Function} gcc_jit_field * gcc_jit_context_new_bitfield (gcc_jit_context@w{ }*ctxt, gcc_jit_location@w{ }*loc, gcc_jit_type@w{ }*type, int@w{ }width, const char@w{ }*name) Construct a new bit field, with the given type width and name. @@ -5808,7 +5825,7 @@ The parameter @code{type} must be an integer type. The parameter @code{width} must be a positive integer that does not exceed the size of @code{type}. -This API entrypoint was added in @ref{8d,,LIBGCCJIT_ABI_12}; you can test +This API entrypoint was added in @ref{8f,,LIBGCCJIT_ABI_12}; you can test for its presence using @example @@ -5817,14 +5834,14 @@ for its presence using @end deffn @geindex gcc_jit_field_as_object (C function) -@anchor{topics/types c gcc_jit_field_as_object}@anchor{8e} +@anchor{topics/types c gcc_jit_field_as_object}@anchor{90} @deffn {C Function} gcc_jit_object * gcc_jit_field_as_object (gcc_jit_field@w{ }*field) Upcast from field to object. @end deffn @geindex gcc_jit_context_new_struct_type (C function) -@anchor{topics/types c gcc_jit_context_new_struct_type}@anchor{8f} +@anchor{topics/types c gcc_jit_context_new_struct_type}@anchor{91} @deffn {C Function} gcc_jit_struct *gcc_jit_context_new_struct_type (gcc_jit_context@w{ }*ctxt, gcc_jit_location@w{ }*loc, const char@w{ }*name, int@w{ }num_fields, gcc_jit_field@w{ }**fields) @quotation @@ -5838,13 +5855,13 @@ on-stack buffer. @end deffn @geindex gcc_jit_context_new_opaque_struct (C function) -@anchor{topics/types c gcc_jit_context_new_opaque_struct}@anchor{90} +@anchor{topics/types c gcc_jit_context_new_opaque_struct}@anchor{92} @deffn {C Function} gcc_jit_struct * gcc_jit_context_new_opaque_struct (gcc_jit_context@w{ }*ctxt, gcc_jit_location@w{ }*loc, const char@w{ }*name) Construct a new struct type, with the given name, but without specifying the fields. The fields can be omitted (in which case the size of the struct is not known), or later specified using -@ref{91,,gcc_jit_struct_set_fields()}. +@ref{93,,gcc_jit_struct_set_fields()}. The parameter @code{name} must be non-NULL. The call takes a copy of the underlying string, so it is valid to pass in a pointer to an @@ -5852,14 +5869,14 @@ on-stack buffer. @end deffn @geindex gcc_jit_struct_as_type (C function) -@anchor{topics/types c gcc_jit_struct_as_type}@anchor{92} +@anchor{topics/types c gcc_jit_struct_as_type}@anchor{94} @deffn {C Function} gcc_jit_type * gcc_jit_struct_as_type (gcc_jit_struct@w{ }*struct_type) Upcast from struct to type. @end deffn @geindex gcc_jit_struct_set_fields (C function) -@anchor{topics/types c gcc_jit_struct_set_fields}@anchor{91} +@anchor{topics/types c gcc_jit_struct_set_fields}@anchor{93} @deffn {C Function} void gcc_jit_struct_set_fields (gcc_jit_struct@w{ }*struct_type, gcc_jit_location@w{ }*loc, int@w{ }num_fields, gcc_jit_field@w{ }**fields) Populate the fields of a formerly-opaque struct type. @@ -5868,7 +5885,7 @@ This can only be called once on a given struct type. @end deffn @geindex gcc_jit_context_new_union_type (C function) -@anchor{topics/types c gcc_jit_context_new_union_type}@anchor{93} +@anchor{topics/types c gcc_jit_context_new_union_type}@anchor{95} @deffn {C Function} gcc_jit_type * gcc_jit_context_new_union_type (gcc_jit_context@w{ }*ctxt, gcc_jit_location@w{ }*loc, const char@w{ }*name, int@w{ }num_fields, gcc_jit_field@w{ }**fields) Construct a new union type, with the given name and fields. @@ -5956,104 +5973,104 @@ create_code (gcc_jit_context *ctxt, void *user_data) @end deffn @node Function pointer types,Reflection API,Structures and unions,Types -@anchor{topics/types function-pointer-types}@anchor{94} +@anchor{topics/types function-pointer-types}@anchor{96} @subsection Function pointer types Function pointer types can be created using -@ref{95,,gcc_jit_context_new_function_ptr_type()}. +@ref{97,,gcc_jit_context_new_function_ptr_type()}. @node Reflection API,,Function pointer types,Types -@anchor{topics/types reflection-api}@anchor{96} +@anchor{topics/types reflection-api}@anchor{98} @subsection Reflection API @geindex gcc_jit_type_dyncast_array (C function) -@anchor{topics/types c gcc_jit_type_dyncast_array}@anchor{97} +@anchor{topics/types c gcc_jit_type_dyncast_array}@anchor{99} @deffn {C Function} gcc_jit_type * gcc_jit_type_dyncast_array (gcc_jit_type@w{ }*type) Get the element type of an array type or NULL if it’s not an array. @end deffn @geindex gcc_jit_type_is_bool (C function) -@anchor{topics/types c gcc_jit_type_is_bool}@anchor{98} +@anchor{topics/types c gcc_jit_type_is_bool}@anchor{9a} @deffn {C Function} int gcc_jit_type_is_bool (gcc_jit_type@w{ }*type) Return non-zero if the type is a bool. @end deffn @geindex gcc_jit_type_dyncast_function_ptr_type (C function) -@anchor{topics/types c gcc_jit_type_dyncast_function_ptr_type}@anchor{99} +@anchor{topics/types c gcc_jit_type_dyncast_function_ptr_type}@anchor{9b} @deffn {C Function} gcc_jit_function_type * gcc_jit_type_dyncast_function_ptr_type (gcc_jit_type@w{ }*type) Return the function type if it is one or NULL. @end deffn @geindex gcc_jit_function_type_get_return_type (C function) -@anchor{topics/types c gcc_jit_function_type_get_return_type}@anchor{9a} +@anchor{topics/types c gcc_jit_function_type_get_return_type}@anchor{9c} @deffn {C Function} gcc_jit_type * gcc_jit_function_type_get_return_type (gcc_jit_function_type@w{ }*function_type) Given a function type, return its return type. @end deffn @geindex gcc_jit_function_type_get_param_count (C function) -@anchor{topics/types c gcc_jit_function_type_get_param_count}@anchor{9b} +@anchor{topics/types c gcc_jit_function_type_get_param_count}@anchor{9d} @deffn {C Function} size_t gcc_jit_function_type_get_param_count (gcc_jit_function_type@w{ }*function_type) Given a function type, return its number of parameters. @end deffn @geindex gcc_jit_function_type_get_param_type (C function) -@anchor{topics/types c gcc_jit_function_type_get_param_type}@anchor{9c} +@anchor{topics/types c gcc_jit_function_type_get_param_type}@anchor{9e} @deffn {C Function} gcc_jit_type * gcc_jit_function_type_get_param_type (gcc_jit_function_type@w{ }*function_type, size_t@w{ }index) Given a function type, return the type of the specified parameter. @end deffn @geindex gcc_jit_type_is_integral (C function) -@anchor{topics/types c gcc_jit_type_is_integral}@anchor{9d} +@anchor{topics/types c gcc_jit_type_is_integral}@anchor{9f} @deffn {C Function} int gcc_jit_type_is_integral (gcc_jit_type@w{ }*type) Return non-zero if the type is an integral. @end deffn @geindex gcc_jit_type_is_pointer (C function) -@anchor{topics/types c gcc_jit_type_is_pointer}@anchor{9e} +@anchor{topics/types c gcc_jit_type_is_pointer}@anchor{a0} @deffn {C Function} gcc_jit_type * gcc_jit_type_is_pointer (gcc_jit_type@w{ }*type) Return the type pointed by the pointer type or NULL if it’s not a pointer. @end deffn @geindex gcc_jit_type_dyncast_vector (C function) -@anchor{topics/types c gcc_jit_type_dyncast_vector}@anchor{9f} +@anchor{topics/types c gcc_jit_type_dyncast_vector}@anchor{a1} @deffn {C Function} gcc_jit_vector_type * gcc_jit_type_dyncast_vector (gcc_jit_type@w{ }*type) Given a type, return a dynamic cast to a vector type or NULL. @end deffn @geindex gcc_jit_type_is_struct (C function) -@anchor{topics/types c gcc_jit_type_is_struct}@anchor{a0} +@anchor{topics/types c gcc_jit_type_is_struct}@anchor{a2} @deffn {C Function} gcc_jit_struct * gcc_jit_type_is_struct (gcc_jit_type@w{ }*type) Given a type, return a dynamic cast to a struct type or NULL. @end deffn @geindex gcc_jit_vector_type_get_num_units (C function) -@anchor{topics/types c gcc_jit_vector_type_get_num_units}@anchor{a1} +@anchor{topics/types c gcc_jit_vector_type_get_num_units}@anchor{a3} @deffn {C Function} size_t gcc_jit_vector_type_get_num_units (gcc_jit_vector_type@w{ }*vector_type) Given a vector type, return the number of units it contains. @end deffn @geindex gcc_jit_vector_type_get_element_type (C function) -@anchor{topics/types c gcc_jit_vector_type_get_element_type}@anchor{a2} +@anchor{topics/types c gcc_jit_vector_type_get_element_type}@anchor{a4} @deffn {C Function} gcc_jit_type * gcc_jit_vector_type_get_element_type (gcc_jit_vector_type *@w{ }vector_type) Given a vector type, return the type of its elements. @end deffn @geindex gcc_jit_type_unqualified (C function) -@anchor{topics/types c gcc_jit_type_unqualified}@anchor{a3} +@anchor{topics/types c gcc_jit_type_unqualified}@anchor{a5} @deffn {C Function} gcc_jit_type * gcc_jit_type_unqualified (gcc_jit_type@w{ }*type) Given a type, return the unqualified type, removing “const”, “volatile” and @@ -6061,14 +6078,14 @@ alignment qualifiers. @end deffn @geindex gcc_jit_struct_get_field (C function) -@anchor{topics/types c gcc_jit_struct_get_field}@anchor{a4} +@anchor{topics/types c gcc_jit_struct_get_field}@anchor{a6} @deffn {C Function} gcc_jit_field * gcc_jit_struct_get_field (gcc_jit_struct@w{ }*struct_type, size_t@w{ }index) Get a struct field by index. @end deffn @geindex gcc_jit_struct_get_field_count (C function) -@anchor{topics/types c gcc_jit_struct_get_field_count}@anchor{a5} +@anchor{topics/types c gcc_jit_struct_get_field_count}@anchor{a7} @deffn {C Function} size_t gcc_jit_struct_get_field_count (gcc_jit_struct@w{ }*struct_type) @quotation @@ -6084,53 +6101,53 @@ The API entrypoints related to the reflection API: @itemize * @item -@ref{9a,,gcc_jit_function_type_get_return_type()} +@ref{9c,,gcc_jit_function_type_get_return_type()} @item -@ref{9b,,gcc_jit_function_type_get_param_count()} +@ref{9d,,gcc_jit_function_type_get_param_count()} @item -@ref{9c,,gcc_jit_function_type_get_param_type()} +@ref{9e,,gcc_jit_function_type_get_param_type()} @item -@ref{a3,,gcc_jit_type_unqualified()} +@ref{a5,,gcc_jit_type_unqualified()} @item -@ref{97,,gcc_jit_type_dyncast_array()} +@ref{99,,gcc_jit_type_dyncast_array()} @item -@ref{98,,gcc_jit_type_is_bool()} +@ref{9a,,gcc_jit_type_is_bool()} @item -@ref{99,,gcc_jit_type_dyncast_function_ptr_type()} +@ref{9b,,gcc_jit_type_dyncast_function_ptr_type()} @item -@ref{9d,,gcc_jit_type_is_integral()} +@ref{9f,,gcc_jit_type_is_integral()} @item -@ref{9e,,gcc_jit_type_is_pointer()} +@ref{a0,,gcc_jit_type_is_pointer()} @item -@ref{9f,,gcc_jit_type_dyncast_vector()} +@ref{a1,,gcc_jit_type_dyncast_vector()} @item -@ref{a2,,gcc_jit_vector_type_get_element_type()} +@ref{a4,,gcc_jit_vector_type_get_element_type()} @item -@ref{a1,,gcc_jit_vector_type_get_num_units()} +@ref{a3,,gcc_jit_vector_type_get_num_units()} @item -@ref{a4,,gcc_jit_struct_get_field()} +@ref{a6,,gcc_jit_struct_get_field()} @item -@ref{a0,,gcc_jit_type_is_struct()} +@ref{a2,,gcc_jit_type_is_struct()} @item -@ref{a5,,gcc_jit_struct_get_field_count()} +@ref{a7,,gcc_jit_struct_get_field_count()} @end itemize @end quotation -were added in @ref{a6,,LIBGCCJIT_ABI_16}; you can test for their presence +were added in @ref{a8,,LIBGCCJIT_ABI_16}; you can test for their presence using @example @@ -6138,13 +6155,13 @@ using @end example @geindex gcc_jit_case (C type) -@anchor{topics/types c gcc_jit_case}@anchor{a7} +@anchor{topics/types c gcc_jit_case}@anchor{a9} @deffn {C Type} gcc_jit_case @end deffn @end deffn @geindex gcc_jit_compatible_types (C function) -@anchor{topics/types c gcc_jit_compatible_types}@anchor{a8} +@anchor{topics/types c gcc_jit_compatible_types}@anchor{aa} @deffn {C Function} int gcc_jit_compatible_types (gcc_jit_type@w{ }*ltype, gcc_jit_type@w{ }*rtype) @quotation @@ -6156,7 +6173,7 @@ The parameters @code{ltype} and @code{rtype} must be non-NULL. Return 0 on errors. @end quotation -This entrypoint was added in @ref{a9,,LIBGCCJIT_ABI_20}; you can test for +This entrypoint was added in @ref{ab,,LIBGCCJIT_ABI_20}; you can test for its presence using @example @@ -6165,7 +6182,7 @@ its presence using @end deffn @geindex gcc_jit_type_get_size (C function) -@anchor{topics/types c gcc_jit_type_get_size}@anchor{aa} +@anchor{topics/types c gcc_jit_type_get_size}@anchor{ac} @deffn {C Function} ssize_t gcc_jit_type_get_size (gcc_jit_type@w{ }*type) @quotation @@ -6175,7 +6192,7 @@ The parameter @code{type} must be non-NULL. Return -1 on errors. @end quotation -This entrypoint was added in @ref{a9,,LIBGCCJIT_ABI_20}; you can test for +This entrypoint was added in @ref{ab,,LIBGCCJIT_ABI_20}; you can test for its presence using @example @@ -6201,7 +6218,7 @@ its presence using @c <https://www.gnu.org/licenses/>. @node Expressions,Creating and using functions,Types,Topic Reference -@anchor{topics/expressions doc}@anchor{ab}@anchor{topics/expressions expressions}@anchor{ac} +@anchor{topics/expressions doc}@anchor{ad}@anchor{topics/expressions expressions}@anchor{ae} @section Expressions @@ -6213,7 +6230,7 @@ its presence using @end menu @node Rvalues,Lvalues,,Expressions -@anchor{topics/expressions rvalues}@anchor{ad} +@anchor{topics/expressions rvalues}@anchor{af} @subsection Rvalues @@ -6267,7 +6284,7 @@ Every rvalue has an associated type, and the API will check to ensure that types match up correctly (otherwise the context will emit an error). @geindex gcc_jit_rvalue_get_type (C function) -@anchor{topics/expressions c gcc_jit_rvalue_get_type}@anchor{ae} +@anchor{topics/expressions c gcc_jit_rvalue_get_type}@anchor{b0} @deffn {C Function} gcc_jit_type *gcc_jit_rvalue_get_type (gcc_jit_rvalue@w{ }*rvalue) Get the type of this rvalue. @@ -6294,7 +6311,7 @@ Upcast the given rvalue to be an object. @end menu @node Simple expressions,Constructor expressions,,Rvalues -@anchor{topics/expressions simple-expressions}@anchor{af} +@anchor{topics/expressions simple-expressions}@anchor{b1} @subsubsection Simple expressions @@ -6307,7 +6324,7 @@ the given constant @code{int} value. @end deffn @geindex gcc_jit_context_new_rvalue_from_long (C function) -@anchor{topics/expressions c gcc_jit_context_new_rvalue_from_long}@anchor{b0} +@anchor{topics/expressions c gcc_jit_context_new_rvalue_from_long}@anchor{b2} @deffn {C Function} gcc_jit_rvalue * gcc_jit_context_new_rvalue_from_long (gcc_jit_context@w{ }*ctxt, gcc_jit_type@w{ }*numeric_type, long@w{ }value) Given a numeric type (integer or floating point), build an rvalue for @@ -6347,14 +6364,14 @@ the given constant @code{double} value. @end deffn @geindex gcc_jit_context_new_rvalue_from_ptr (C function) -@anchor{topics/expressions c gcc_jit_context_new_rvalue_from_ptr}@anchor{b1} +@anchor{topics/expressions c gcc_jit_context_new_rvalue_from_ptr}@anchor{b3} @deffn {C Function} gcc_jit_rvalue * gcc_jit_context_new_rvalue_from_ptr (gcc_jit_context@w{ }*ctxt, gcc_jit_type@w{ }*pointer_type, void@w{ }*value) Given a pointer type, build an rvalue for the given address. @end deffn @geindex gcc_jit_context_null (C function) -@anchor{topics/expressions c gcc_jit_context_null}@anchor{b2} +@anchor{topics/expressions c gcc_jit_context_null}@anchor{b4} @deffn {C Function} gcc_jit_rvalue *gcc_jit_context_null (gcc_jit_context@w{ }*ctxt, gcc_jit_type@w{ }*pointer_type) Given a pointer type, build an rvalue for @code{NULL}. Essentially this @@ -6366,7 +6383,7 @@ gcc_jit_context_new_rvalue_from_ptr (ctxt, pointer_type, NULL) @end deffn @geindex gcc_jit_context_new_string_literal (C function) -@anchor{topics/expressions c gcc_jit_context_new_string_literal}@anchor{b3} +@anchor{topics/expressions c gcc_jit_context_new_string_literal}@anchor{b5} @deffn {C Function} gcc_jit_rvalue * gcc_jit_context_new_string_literal (gcc_jit_context@w{ }*ctxt, const char@w{ }*value) Generate an rvalue for the given NIL-terminated string, of type @@ -6378,7 +6395,7 @@ buffer. @end deffn @node Constructor expressions,Vector expressions,Simple expressions,Rvalues -@anchor{topics/expressions constructor-expressions}@anchor{b4} +@anchor{topics/expressions constructor-expressions}@anchor{b6} @subsubsection Constructor expressions @@ -6389,7 +6406,7 @@ types. The constructor rvalue can be used for assignment to locals. It can be used to initialize global variables with -@ref{b5,,gcc_jit_global_set_initializer_rvalue()}. It can also be used as a +@ref{b7,,gcc_jit_global_set_initializer_rvalue()}. It can also be used as a temporary value for function calls and return values, but its address can’t be taken. @@ -6403,7 +6420,7 @@ The constructor can contain nested constructors. Note that a string literal rvalue can’t be used to construct a char array; the latter needs one rvalue for each char. -These entrypoints were added in @ref{b6,,LIBGCCJIT_ABI_19}; you can test for +These entrypoints were added in @ref{b8,,LIBGCCJIT_ABI_19}; you can test for their presence using: @example @@ -6412,7 +6429,7 @@ their presence using: @end quotation @geindex gcc_jit_context_new_array_constructor (C function) -@anchor{topics/expressions c gcc_jit_context_new_array_constructor}@anchor{b7} +@anchor{topics/expressions c gcc_jit_context_new_array_constructor}@anchor{b9} @deffn {C Function} gcc_jit_rvalue * gcc_jit_context_new_array_constructor (gcc_jit_context@w{ }*ctxt, gcc_jit_location@w{ }*loc, gcc_jit_type@w{ }*type, size_t@w{ }num_values, gcc_jit_rvalue@w{ }**values) Create a constructor for an array as an rvalue. @@ -6436,7 +6453,7 @@ array type’s element type. If @code{num_values} is 0, the @code{values} parameter will be ignored and zero initialization will be used. -This entrypoint was added in @ref{b6,,LIBGCCJIT_ABI_19}; you can test for its +This entrypoint was added in @ref{b8,,LIBGCCJIT_ABI_19}; you can test for its presence using: @example @@ -6445,7 +6462,7 @@ presence using: @end deffn @geindex gcc_jit_context_new_struct_constructor (C function) -@anchor{topics/expressions c gcc_jit_context_new_struct_constructor}@anchor{b8} +@anchor{topics/expressions c gcc_jit_context_new_struct_constructor}@anchor{ba} @deffn {C Function} gcc_jit_rvalue * gcc_jit_context_new_struct_constructor (gcc_jit_context@w{ }*ctxt, gcc_jit_location@w{ }*loc, gcc_jit_type@w{ }*type, size_t@w{ }num_values, gcc_jit_field@w{ }**fields, gcc_jit_rvalue@w{ }**values) Create a constructor for a struct as an rvalue. @@ -6482,7 +6499,7 @@ of the corresponding field. If @code{num_values} is 0, the array parameters will be ignored and zero initialization will be used. -This entrypoint was added in @ref{b6,,LIBGCCJIT_ABI_19}; you can test for its +This entrypoint was added in @ref{b8,,LIBGCCJIT_ABI_19}; you can test for its presence using: @example @@ -6491,7 +6508,7 @@ presence using: @end deffn @geindex gcc_jit_context_new_union_constructor (C function) -@anchor{topics/expressions c gcc_jit_context_new_union_constructor}@anchor{b9} +@anchor{topics/expressions c gcc_jit_context_new_union_constructor}@anchor{bb} @deffn {C Function} gcc_jit_rvalue * gcc_jit_context_new_union_constructor (gcc_jit_context@w{ }*ctxt, gcc_jit_location@w{ }*loc, gcc_jit_type@w{ }*type, gcc_jit_field@w{ }*field, gcc_jit_rvalue@w{ }*value) Create a constructor for a union as an rvalue. @@ -6511,7 +6528,7 @@ If @code{value} is NULL, zero initialization will be used. Each value has to have have the same unqualified type as the field it is applied to. -This entrypoint was added in @ref{b6,,LIBGCCJIT_ABI_19}; you can test for its +This entrypoint was added in @ref{b8,,LIBGCCJIT_ABI_19}; you can test for its presence using: @example @@ -6520,22 +6537,22 @@ presence using: @end deffn @node Vector expressions,Unary Operations,Constructor expressions,Rvalues -@anchor{topics/expressions vector-expressions}@anchor{ba} +@anchor{topics/expressions vector-expressions}@anchor{bc} @subsubsection Vector expressions @geindex gcc_jit_context_new_rvalue_from_vector (C function) -@anchor{topics/expressions c gcc_jit_context_new_rvalue_from_vector}@anchor{87} +@anchor{topics/expressions c gcc_jit_context_new_rvalue_from_vector}@anchor{89} @deffn {C Function} gcc_jit_rvalue * gcc_jit_context_new_rvalue_from_vector (gcc_jit_context@w{ }*ctxt, gcc_jit_location@w{ }*loc, gcc_jit_type@w{ }*vec_type, size_t@w{ }num_elements, gcc_jit_rvalue@w{ }**elements) Build a vector rvalue from an array of elements. “vec_type” should be a vector type, created using -@ref{85,,gcc_jit_type_get_vector()}. +@ref{87,,gcc_jit_type_get_vector()}. “num_elements” should match that of the vector type. -This entrypoint was added in @ref{bb,,LIBGCCJIT_ABI_10}; you can test for +This entrypoint was added in @ref{bd,,LIBGCCJIT_ABI_10}; you can test for its presence using @example @@ -6544,12 +6561,12 @@ its presence using @end deffn @node Unary Operations,Binary Operations,Vector expressions,Rvalues -@anchor{topics/expressions unary-operations}@anchor{bc} +@anchor{topics/expressions unary-operations}@anchor{be} @subsubsection Unary Operations @geindex gcc_jit_context_new_unary_op (C function) -@anchor{topics/expressions c gcc_jit_context_new_unary_op}@anchor{bd} +@anchor{topics/expressions c gcc_jit_context_new_unary_op}@anchor{bf} @deffn {C Function} gcc_jit_rvalue * gcc_jit_context_new_unary_op (gcc_jit_context@w{ }*ctxt, gcc_jit_location@w{ }*loc, enum gcc_jit_unary_op@w{ }op, gcc_jit_type@w{ }*result_type, gcc_jit_rvalue@w{ }*rvalue) Build a unary operation out of an input rvalue. @@ -6558,7 +6575,7 @@ The parameter @code{result_type} must be a numeric type. @end deffn @geindex gcc_jit_unary_op (C type) -@anchor{topics/expressions c gcc_jit_unary_op}@anchor{be} +@anchor{topics/expressions c gcc_jit_unary_op}@anchor{c0} @deffn {C Type} enum gcc_jit_unary_op @end deffn @@ -6576,7 +6593,7 @@ C equivalent @item -@ref{bf,,GCC_JIT_UNARY_OP_MINUS} +@ref{c1,,GCC_JIT_UNARY_OP_MINUS} @tab @@ -6584,7 +6601,7 @@ C equivalent @item -@ref{c0,,GCC_JIT_UNARY_OP_BITWISE_NEGATE} +@ref{c2,,GCC_JIT_UNARY_OP_BITWISE_NEGATE} @tab @@ -6592,7 +6609,7 @@ C equivalent @item -@ref{c1,,GCC_JIT_UNARY_OP_LOGICAL_NEGATE} +@ref{c3,,GCC_JIT_UNARY_OP_LOGICAL_NEGATE} @tab @@ -6600,7 +6617,7 @@ C equivalent @item -@ref{c2,,GCC_JIT_UNARY_OP_ABS} +@ref{c4,,GCC_JIT_UNARY_OP_ABS} @tab @@ -6610,7 +6627,7 @@ C equivalent @geindex GCC_JIT_UNARY_OP_MINUS (C macro) -@anchor{topics/expressions c GCC_JIT_UNARY_OP_MINUS}@anchor{bf} +@anchor{topics/expressions c GCC_JIT_UNARY_OP_MINUS}@anchor{c1} @deffn {C Macro} GCC_JIT_UNARY_OP_MINUS Negate an arithmetic value; analogous to: @@ -6623,7 +6640,7 @@ in C. @end deffn @geindex GCC_JIT_UNARY_OP_BITWISE_NEGATE (C macro) -@anchor{topics/expressions c GCC_JIT_UNARY_OP_BITWISE_NEGATE}@anchor{c0} +@anchor{topics/expressions c GCC_JIT_UNARY_OP_BITWISE_NEGATE}@anchor{c2} @deffn {C Macro} GCC_JIT_UNARY_OP_BITWISE_NEGATE Bitwise negation of an integer value (one’s complement); analogous @@ -6637,7 +6654,7 @@ in C. @end deffn @geindex GCC_JIT_UNARY_OP_LOGICAL_NEGATE (C macro) -@anchor{topics/expressions c GCC_JIT_UNARY_OP_LOGICAL_NEGATE}@anchor{c1} +@anchor{topics/expressions c GCC_JIT_UNARY_OP_LOGICAL_NEGATE}@anchor{c3} @deffn {C Macro} GCC_JIT_UNARY_OP_LOGICAL_NEGATE Logical negation of an arithmetic or pointer value; analogous to: @@ -6650,7 +6667,7 @@ in C. @end deffn @geindex GCC_JIT_UNARY_OP_ABS (C macro) -@anchor{topics/expressions c GCC_JIT_UNARY_OP_ABS}@anchor{c2} +@anchor{topics/expressions c GCC_JIT_UNARY_OP_ABS}@anchor{c4} @deffn {C Macro} GCC_JIT_UNARY_OP_ABS Absolute value of an arithmetic expression; analogous to: @@ -6663,7 +6680,7 @@ in C. @end deffn @node Binary Operations,Comparisons,Unary Operations,Rvalues -@anchor{topics/expressions binary-operations}@anchor{c3} +@anchor{topics/expressions binary-operations}@anchor{c5} @subsubsection Binary Operations @@ -6677,7 +6694,7 @@ The parameter @code{result_type} must be a numeric type. @end deffn @geindex gcc_jit_binary_op (C type) -@anchor{topics/expressions c gcc_jit_binary_op}@anchor{c4} +@anchor{topics/expressions c gcc_jit_binary_op}@anchor{c6} @deffn {C Type} enum gcc_jit_binary_op @end deffn @@ -6695,7 +6712,7 @@ C equivalent @item -@ref{c5,,GCC_JIT_BINARY_OP_PLUS} +@ref{c7,,GCC_JIT_BINARY_OP_PLUS} @tab @@ -6703,7 +6720,7 @@ C equivalent @item -@ref{c6,,GCC_JIT_BINARY_OP_MINUS} +@ref{c8,,GCC_JIT_BINARY_OP_MINUS} @tab @@ -6711,7 +6728,7 @@ C equivalent @item -@ref{c7,,GCC_JIT_BINARY_OP_MULT} +@ref{c9,,GCC_JIT_BINARY_OP_MULT} @tab @@ -6719,7 +6736,7 @@ C equivalent @item -@ref{c8,,GCC_JIT_BINARY_OP_DIVIDE} +@ref{ca,,GCC_JIT_BINARY_OP_DIVIDE} @tab @@ -6727,7 +6744,7 @@ C equivalent @item -@ref{c9,,GCC_JIT_BINARY_OP_MODULO} +@ref{cb,,GCC_JIT_BINARY_OP_MODULO} @tab @@ -6735,7 +6752,7 @@ C equivalent @item -@ref{ca,,GCC_JIT_BINARY_OP_BITWISE_AND} +@ref{cc,,GCC_JIT_BINARY_OP_BITWISE_AND} @tab @@ -6743,7 +6760,7 @@ C equivalent @item -@ref{cb,,GCC_JIT_BINARY_OP_BITWISE_XOR} +@ref{cd,,GCC_JIT_BINARY_OP_BITWISE_XOR} @tab @@ -6751,7 +6768,7 @@ C equivalent @item -@ref{cc,,GCC_JIT_BINARY_OP_BITWISE_OR} +@ref{ce,,GCC_JIT_BINARY_OP_BITWISE_OR} @tab @@ -6759,7 +6776,7 @@ C equivalent @item -@ref{cd,,GCC_JIT_BINARY_OP_LOGICAL_AND} +@ref{cf,,GCC_JIT_BINARY_OP_LOGICAL_AND} @tab @@ -6767,7 +6784,7 @@ C equivalent @item -@ref{ce,,GCC_JIT_BINARY_OP_LOGICAL_OR} +@ref{d0,,GCC_JIT_BINARY_OP_LOGICAL_OR} @tab @@ -6775,7 +6792,7 @@ C equivalent @item -@ref{cf,,GCC_JIT_BINARY_OP_LSHIFT} +@ref{d1,,GCC_JIT_BINARY_OP_LSHIFT} @tab @@ -6783,7 +6800,7 @@ C equivalent @item -@ref{d0,,GCC_JIT_BINARY_OP_RSHIFT} +@ref{d2,,GCC_JIT_BINARY_OP_RSHIFT} @tab @@ -6793,7 +6810,7 @@ C equivalent @geindex GCC_JIT_BINARY_OP_PLUS (C macro) -@anchor{topics/expressions c GCC_JIT_BINARY_OP_PLUS}@anchor{c5} +@anchor{topics/expressions c GCC_JIT_BINARY_OP_PLUS}@anchor{c7} @deffn {C Macro} GCC_JIT_BINARY_OP_PLUS Addition of arithmetic values; analogous to: @@ -6804,11 +6821,11 @@ Addition of arithmetic values; analogous to: in C. -For pointer addition, use @ref{d1,,gcc_jit_context_new_array_access()}. +For pointer addition, use @ref{d3,,gcc_jit_context_new_array_access()}. @end deffn @geindex GCC_JIT_BINARY_OP_MINUS (C macro) -@anchor{topics/expressions c GCC_JIT_BINARY_OP_MINUS}@anchor{c6} +@anchor{topics/expressions c GCC_JIT_BINARY_OP_MINUS}@anchor{c8} @deffn {C Macro} GCC_JIT_BINARY_OP_MINUS Subtraction of arithmetic values; analogous to: @@ -6821,7 +6838,7 @@ in C. @end deffn @geindex GCC_JIT_BINARY_OP_MULT (C macro) -@anchor{topics/expressions c GCC_JIT_BINARY_OP_MULT}@anchor{c7} +@anchor{topics/expressions c GCC_JIT_BINARY_OP_MULT}@anchor{c9} @deffn {C Macro} GCC_JIT_BINARY_OP_MULT Multiplication of a pair of arithmetic values; analogous to: @@ -6834,7 +6851,7 @@ in C. @end deffn @geindex GCC_JIT_BINARY_OP_DIVIDE (C macro) -@anchor{topics/expressions c GCC_JIT_BINARY_OP_DIVIDE}@anchor{c8} +@anchor{topics/expressions c GCC_JIT_BINARY_OP_DIVIDE}@anchor{ca} @deffn {C Macro} GCC_JIT_BINARY_OP_DIVIDE Quotient of division of arithmetic values; analogous to: @@ -6851,7 +6868,7 @@ a floating-point result type indicates floating-point division. @end deffn @geindex GCC_JIT_BINARY_OP_MODULO (C macro) -@anchor{topics/expressions c GCC_JIT_BINARY_OP_MODULO}@anchor{c9} +@anchor{topics/expressions c GCC_JIT_BINARY_OP_MODULO}@anchor{cb} @deffn {C Macro} GCC_JIT_BINARY_OP_MODULO Remainder of division of arithmetic values; analogous to: @@ -6864,7 +6881,7 @@ in C. @end deffn @geindex GCC_JIT_BINARY_OP_BITWISE_AND (C macro) -@anchor{topics/expressions c GCC_JIT_BINARY_OP_BITWISE_AND}@anchor{ca} +@anchor{topics/expressions c GCC_JIT_BINARY_OP_BITWISE_AND}@anchor{cc} @deffn {C Macro} GCC_JIT_BINARY_OP_BITWISE_AND Bitwise AND; analogous to: @@ -6877,7 +6894,7 @@ in C. @end deffn @geindex GCC_JIT_BINARY_OP_BITWISE_XOR (C macro) -@anchor{topics/expressions c GCC_JIT_BINARY_OP_BITWISE_XOR}@anchor{cb} +@anchor{topics/expressions c GCC_JIT_BINARY_OP_BITWISE_XOR}@anchor{cd} @deffn {C Macro} GCC_JIT_BINARY_OP_BITWISE_XOR Bitwise exclusive OR; analogous to: @@ -6890,7 +6907,7 @@ in C. @end deffn @geindex GCC_JIT_BINARY_OP_BITWISE_OR (C macro) -@anchor{topics/expressions c GCC_JIT_BINARY_OP_BITWISE_OR}@anchor{cc} +@anchor{topics/expressions c GCC_JIT_BINARY_OP_BITWISE_OR}@anchor{ce} @deffn {C Macro} GCC_JIT_BINARY_OP_BITWISE_OR Bitwise inclusive OR; analogous to: @@ -6903,7 +6920,7 @@ in C. @end deffn @geindex GCC_JIT_BINARY_OP_LOGICAL_AND (C macro) -@anchor{topics/expressions c GCC_JIT_BINARY_OP_LOGICAL_AND}@anchor{cd} +@anchor{topics/expressions c GCC_JIT_BINARY_OP_LOGICAL_AND}@anchor{cf} @deffn {C Macro} GCC_JIT_BINARY_OP_LOGICAL_AND Logical AND; analogous to: @@ -6916,7 +6933,7 @@ in C. @end deffn @geindex GCC_JIT_BINARY_OP_LOGICAL_OR (C macro) -@anchor{topics/expressions c GCC_JIT_BINARY_OP_LOGICAL_OR}@anchor{ce} +@anchor{topics/expressions c GCC_JIT_BINARY_OP_LOGICAL_OR}@anchor{d0} @deffn {C Macro} GCC_JIT_BINARY_OP_LOGICAL_OR Logical OR; analogous to: @@ -6929,7 +6946,7 @@ in C. @end deffn @geindex GCC_JIT_BINARY_OP_LSHIFT (C macro) -@anchor{topics/expressions c GCC_JIT_BINARY_OP_LSHIFT}@anchor{cf} +@anchor{topics/expressions c GCC_JIT_BINARY_OP_LSHIFT}@anchor{d1} @deffn {C Macro} GCC_JIT_BINARY_OP_LSHIFT Left shift; analogous to: @@ -6942,7 +6959,7 @@ in C. @end deffn @geindex GCC_JIT_BINARY_OP_RSHIFT (C macro) -@anchor{topics/expressions c GCC_JIT_BINARY_OP_RSHIFT}@anchor{d0} +@anchor{topics/expressions c GCC_JIT_BINARY_OP_RSHIFT}@anchor{d2} @deffn {C Macro} GCC_JIT_BINARY_OP_RSHIFT Right shift; analogous to: @@ -6955,7 +6972,7 @@ in C. @end deffn @node Comparisons,Function calls,Binary Operations,Rvalues -@anchor{topics/expressions comparisons}@anchor{d2} +@anchor{topics/expressions comparisons}@anchor{d4} @subsubsection Comparisons @@ -6967,7 +6984,7 @@ Build a boolean rvalue out of the comparison of two other rvalues. @end deffn @geindex gcc_jit_comparison (C type) -@anchor{topics/expressions c gcc_jit_comparison}@anchor{d3} +@anchor{topics/expressions c gcc_jit_comparison}@anchor{d5} @deffn {C Type} enum gcc_jit_comparison @end deffn @@ -7033,12 +7050,12 @@ C equivalent @node Function calls,Function pointers,Comparisons,Rvalues -@anchor{topics/expressions function-calls}@anchor{d4} +@anchor{topics/expressions function-calls}@anchor{d6} @subsubsection Function calls @geindex gcc_jit_context_new_call (C function) -@anchor{topics/expressions c gcc_jit_context_new_call}@anchor{d5} +@anchor{topics/expressions c gcc_jit_context_new_call}@anchor{d7} @deffn {C Function} gcc_jit_rvalue * gcc_jit_context_new_call (gcc_jit_context@w{ }*ctxt, gcc_jit_location@w{ }*loc, gcc_jit_function@w{ }*func, int@w{ }numargs, gcc_jit_rvalue@w{ }**args) Given a function and the given table of argument rvalues, construct a @@ -7046,7 +7063,7 @@ call to the function, with the result as an rvalue. @cartouche @quotation Note -@ref{d5,,gcc_jit_context_new_call()} merely builds a +@ref{d7,,gcc_jit_context_new_call()} merely builds a @ref{13,,gcc_jit_rvalue} i.e. an expression that can be evaluated, perhaps as part of a more complicated expression. The call @emph{won’t} happen unless you add a statement to a function @@ -7054,7 +7071,7 @@ that evaluates the expression. For example, if you want to call a function and discard the result (or to call a function with @code{void} return type), use -@ref{d6,,gcc_jit_block_add_eval()}: +@ref{d8,,gcc_jit_block_add_eval()}: @example /* Add "(void)printf (arg0, arg1);". */ @@ -7071,28 +7088,28 @@ gcc_jit_block_add_eval ( @end deffn @geindex gcc_jit_context_new_call_through_ptr (C function) -@anchor{topics/expressions c gcc_jit_context_new_call_through_ptr}@anchor{d7} +@anchor{topics/expressions c gcc_jit_context_new_call_through_ptr}@anchor{d9} @deffn {C Function} gcc_jit_rvalue * gcc_jit_context_new_call_through_ptr (gcc_jit_context@w{ }*ctxt, gcc_jit_location@w{ }*loc, gcc_jit_rvalue@w{ }*fn_ptr, int@w{ }numargs, gcc_jit_rvalue@w{ }**args) Given an rvalue of function pointer type (e.g. from -@ref{95,,gcc_jit_context_new_function_ptr_type()}), and the given table of +@ref{97,,gcc_jit_context_new_function_ptr_type()}), and the given table of argument rvalues, construct a call to the function pointer, with the result as an rvalue. @cartouche @quotation Note -The same caveat as for @ref{d5,,gcc_jit_context_new_call()} applies. +The same caveat as for @ref{d7,,gcc_jit_context_new_call()} applies. @end quotation @end cartouche @end deffn @geindex gcc_jit_rvalue_set_bool_require_tail_call (C function) -@anchor{topics/expressions c gcc_jit_rvalue_set_bool_require_tail_call}@anchor{d8} +@anchor{topics/expressions c gcc_jit_rvalue_set_bool_require_tail_call}@anchor{da} @deffn {C Function} void gcc_jit_rvalue_set_bool_require_tail_call (gcc_jit_rvalue@w{ }*call, int@w{ }require_tail_call) Given an @ref{13,,gcc_jit_rvalue} for a call created through -@ref{d5,,gcc_jit_context_new_call()} or -@ref{d7,,gcc_jit_context_new_call_through_ptr()}, mark/clear the +@ref{d7,,gcc_jit_context_new_call()} or +@ref{d9,,gcc_jit_context_new_call_through_ptr()}, mark/clear the call as needing tail-call optimization. The optimizer will attempt to optimize the call into a jump instruction; if it is unable to do do, an error will be emitted. @@ -7104,7 +7121,7 @@ languages), in which every function “returns” by calling a guaranteed to be implemented as a jump, otherwise the program could consume an arbitrary amount of stack space as it executed. -This entrypoint was added in @ref{d9,,LIBGCCJIT_ABI_6}; you can test for +This entrypoint was added in @ref{db,,LIBGCCJIT_ABI_6}; you can test for its presence using @example @@ -7113,7 +7130,7 @@ its presence using @end deffn @node Function pointers,Type-coercion,Function calls,Rvalues -@anchor{topics/expressions function-pointers}@anchor{da} +@anchor{topics/expressions function-pointers}@anchor{dc} @subsubsection Function pointers @@ -7126,23 +7143,23 @@ Function pointers can be obtained: @item from a @ref{29,,gcc_jit_function} using -@ref{db,,gcc_jit_function_get_address()}, or +@ref{dd,,gcc_jit_function_get_address()}, or @item from an existing function using -@ref{b1,,gcc_jit_context_new_rvalue_from_ptr()}, +@ref{b3,,gcc_jit_context_new_rvalue_from_ptr()}, using a function pointer type obtained using -@ref{95,,gcc_jit_context_new_function_ptr_type()}. +@ref{97,,gcc_jit_context_new_function_ptr_type()}. @end itemize @end quotation @node Type-coercion,,Function pointers,Rvalues -@anchor{topics/expressions type-coercion}@anchor{dc} +@anchor{topics/expressions type-coercion}@anchor{de} @subsubsection Type-coercion @geindex gcc_jit_context_new_cast (C function) -@anchor{topics/expressions c gcc_jit_context_new_cast}@anchor{dd} +@anchor{topics/expressions c gcc_jit_context_new_cast}@anchor{df} @deffn {C Function} gcc_jit_rvalue * gcc_jit_context_new_cast (gcc_jit_context@w{ }*ctxt, gcc_jit_location@w{ }*loc, gcc_jit_rvalue@w{ }*rvalue, gcc_jit_type@w{ }*type) Given an rvalue of T, construct another rvalue of another type. @@ -7167,7 +7184,7 @@ P* <-> Q*, for pointer types P and Q @end deffn @geindex gcc_jit_context_new_bitcast (C function) -@anchor{topics/expressions c gcc_jit_context_new_bitcast}@anchor{de} +@anchor{topics/expressions c gcc_jit_context_new_bitcast}@anchor{e0} @deffn {C Function} gcc_jit_rvalue * gcc_jit_context_new_bitcast (gcc_jit_context@w{ }*ctxt, gcc_jit_location@w{ }*loc, gcc_jit_rvalue@w{ }*rvalue, gcc_jit_type@w{ }*type) Given an rvalue of T, bitcast it to another type, meaning that this will @@ -7176,7 +7193,7 @@ of @code{type}. The type of rvalue must be the same size as the size of @code{type}. -This entrypoint was added in @ref{df,,LIBGCCJIT_ABI_21}; you can test for +This entrypoint was added in @ref{e1,,LIBGCCJIT_ABI_21}; you can test for its presence using @example @@ -7185,7 +7202,7 @@ its presence using @end deffn @node Lvalues,Working with pointers structs and unions,Rvalues,Expressions -@anchor{topics/expressions lvalues}@anchor{e0} +@anchor{topics/expressions lvalues}@anchor{e2} @subsection Lvalues @@ -7199,21 +7216,21 @@ a storage area (such as a variable). It is also usable as an rvalue, where the rvalue is computed by reading from the storage area. @geindex gcc_jit_lvalue_as_object (C function) -@anchor{topics/expressions c gcc_jit_lvalue_as_object}@anchor{e1} +@anchor{topics/expressions c gcc_jit_lvalue_as_object}@anchor{e3} @deffn {C Function} gcc_jit_object * gcc_jit_lvalue_as_object (gcc_jit_lvalue@w{ }*lvalue) Upcast an lvalue to be an object. @end deffn @geindex gcc_jit_lvalue_as_rvalue (C function) -@anchor{topics/expressions c gcc_jit_lvalue_as_rvalue}@anchor{e2} +@anchor{topics/expressions c gcc_jit_lvalue_as_rvalue}@anchor{e4} @deffn {C Function} gcc_jit_rvalue * gcc_jit_lvalue_as_rvalue (gcc_jit_lvalue@w{ }*lvalue) Upcast an lvalue to be an rvalue. @end deffn @geindex gcc_jit_lvalue_get_address (C function) -@anchor{topics/expressions c gcc_jit_lvalue_get_address}@anchor{e3} +@anchor{topics/expressions c gcc_jit_lvalue_get_address}@anchor{e5} @deffn {C Function} gcc_jit_rvalue * gcc_jit_lvalue_get_address (gcc_jit_lvalue@w{ }*lvalue, gcc_jit_location@w{ }*loc) Take the address of an lvalue; analogous to: @@ -7226,7 +7243,7 @@ in C. @end deffn @geindex gcc_jit_lvalue_set_tls_model (C function) -@anchor{topics/expressions c gcc_jit_lvalue_set_tls_model}@anchor{e4} +@anchor{topics/expressions c gcc_jit_lvalue_set_tls_model}@anchor{e6} @deffn {C Function} void gcc_jit_lvalue_set_tls_model (gcc_jit_lvalue@w{ }*lvalue, enum gcc_jit_tls_model@w{ }model) Make a variable a thread-local variable. @@ -7234,34 +7251,34 @@ Make a variable a thread-local variable. The “model” parameter determines the thread-local storage model of the “lvalue”: @geindex gcc_jit_tls_model (C type) -@anchor{topics/expressions c gcc_jit_tls_model}@anchor{e5} +@anchor{topics/expressions c gcc_jit_tls_model}@anchor{e7} @deffn {C Type} enum gcc_jit_tls_model @end deffn @geindex GCC_JIT_TLS_MODEL_NONE (C macro) -@anchor{topics/expressions c GCC_JIT_TLS_MODEL_NONE}@anchor{e6} +@anchor{topics/expressions c GCC_JIT_TLS_MODEL_NONE}@anchor{e8} @deffn {C Macro} GCC_JIT_TLS_MODEL_NONE Don’t set the TLS model. @end deffn @geindex GCC_JIT_TLS_MODEL_GLOBAL_DYNAMIC (C macro) -@anchor{topics/expressions c GCC_JIT_TLS_MODEL_GLOBAL_DYNAMIC}@anchor{e7} +@anchor{topics/expressions c GCC_JIT_TLS_MODEL_GLOBAL_DYNAMIC}@anchor{e9} @deffn {C Macro} GCC_JIT_TLS_MODEL_GLOBAL_DYNAMIC @end deffn @geindex GCC_JIT_TLS_MODEL_LOCAL_DYNAMIC (C macro) -@anchor{topics/expressions c GCC_JIT_TLS_MODEL_LOCAL_DYNAMIC}@anchor{e8} +@anchor{topics/expressions c GCC_JIT_TLS_MODEL_LOCAL_DYNAMIC}@anchor{ea} @deffn {C Macro} GCC_JIT_TLS_MODEL_LOCAL_DYNAMIC @end deffn @geindex GCC_JIT_TLS_MODEL_INITIAL_EXEC (C macro) -@anchor{topics/expressions c GCC_JIT_TLS_MODEL_INITIAL_EXEC}@anchor{e9} +@anchor{topics/expressions c GCC_JIT_TLS_MODEL_INITIAL_EXEC}@anchor{eb} @deffn {C Macro} GCC_JIT_TLS_MODEL_INITIAL_EXEC @end deffn @geindex GCC_JIT_TLS_MODEL_LOCAL_EXEC (C macro) -@anchor{topics/expressions c GCC_JIT_TLS_MODEL_LOCAL_EXEC}@anchor{ea} +@anchor{topics/expressions c GCC_JIT_TLS_MODEL_LOCAL_EXEC}@anchor{ec} @deffn {C Macro} GCC_JIT_TLS_MODEL_LOCAL_EXEC @end deffn @@ -7273,7 +7290,7 @@ _Thread_local int foo __attribute__ ((tls_model("MODEL"))); in C. -This entrypoint was added in @ref{eb,,LIBGCCJIT_ABI_17}; you can test for +This entrypoint was added in @ref{ed,,LIBGCCJIT_ABI_17}; you can test for its presence using @example @@ -7282,7 +7299,7 @@ its presence using @end deffn @geindex gcc_jit_lvalue_set_link_section (C function) -@anchor{topics/expressions c gcc_jit_lvalue_set_link_section}@anchor{ec} +@anchor{topics/expressions c gcc_jit_lvalue_set_link_section}@anchor{ee} @deffn {C Function} void gcc_jit_lvalue_set_link_section (gcc_jit_lvalue@w{ }*lvalue, const char@w{ }*section_name) Set the link section of a variable. @@ -7295,7 +7312,7 @@ int variable __attribute__((section(".section"))); in C. -This entrypoint was added in @ref{ed,,LIBGCCJIT_ABI_18}; you can test for +This entrypoint was added in @ref{ef,,LIBGCCJIT_ABI_18}; you can test for its presence using @example @@ -7315,7 +7332,7 @@ register int variable asm ("r12"); in C. -This entrypoint was added in @ref{ee,,LIBGCCJIT_ABI_22}; you can test for +This entrypoint was added in @ref{f0,,LIBGCCJIT_ABI_22}; you can test for its presence using @example @@ -7329,12 +7346,12 @@ its presence using @end menu @node Global variables,,,Lvalues -@anchor{topics/expressions global-variables}@anchor{ef} +@anchor{topics/expressions global-variables}@anchor{f1} @subsubsection Global variables @geindex gcc_jit_context_new_global (C function) -@anchor{topics/expressions c gcc_jit_context_new_global}@anchor{f0} +@anchor{topics/expressions c gcc_jit_context_new_global}@anchor{f2} @deffn {C Function} gcc_jit_lvalue * gcc_jit_context_new_global (gcc_jit_context@w{ }*ctxt, gcc_jit_location@w{ }*loc, enum gcc_jit_global_kind@w{ }kind, gcc_jit_type@w{ }*type, const char@w{ }*name) Add a new global variable of the given type and name to the context. @@ -7349,22 +7366,22 @@ The “kind” parameter determines the visibility of the “global” outside of the @ref{16,,gcc_jit_result}: @geindex gcc_jit_global_kind (C type) -@anchor{topics/expressions c gcc_jit_global_kind}@anchor{f1} +@anchor{topics/expressions c gcc_jit_global_kind}@anchor{f3} @deffn {C Type} enum gcc_jit_global_kind @end deffn @geindex GCC_JIT_GLOBAL_EXPORTED (C macro) -@anchor{topics/expressions c GCC_JIT_GLOBAL_EXPORTED}@anchor{f2} +@anchor{topics/expressions c GCC_JIT_GLOBAL_EXPORTED}@anchor{f4} @deffn {C Macro} GCC_JIT_GLOBAL_EXPORTED Global is defined by the client code and is visible by name outside of this JIT context via -@ref{f3,,gcc_jit_result_get_global()} (and this value is required for +@ref{f5,,gcc_jit_result_get_global()} (and this value is required for the global to be accessible via that entrypoint). @end deffn @geindex GCC_JIT_GLOBAL_INTERNAL (C macro) -@anchor{topics/expressions c GCC_JIT_GLOBAL_INTERNAL}@anchor{f4} +@anchor{topics/expressions c GCC_JIT_GLOBAL_INTERNAL}@anchor{f6} @deffn {C Macro} GCC_JIT_GLOBAL_INTERNAL Global is defined by the client code, but is invisible @@ -7374,7 +7391,7 @@ context and within child contexts. @end deffn @geindex GCC_JIT_GLOBAL_IMPORTED (C macro) -@anchor{topics/expressions c GCC_JIT_GLOBAL_IMPORTED}@anchor{f5} +@anchor{topics/expressions c GCC_JIT_GLOBAL_IMPORTED}@anchor{f7} @deffn {C Macro} GCC_JIT_GLOBAL_IMPORTED Global is not defined by the client code; we’re merely @@ -7384,7 +7401,7 @@ header file. @end deffn @geindex gcc_jit_global_set_initializer (C function) -@anchor{topics/expressions c gcc_jit_global_set_initializer}@anchor{f6} +@anchor{topics/expressions c gcc_jit_global_set_initializer}@anchor{f8} @deffn {C Function} gcc_jit_lvalue * gcc_jit_global_set_initializer (gcc_jit_lvalue@w{ }*global, const void@w{ }*blob, size_t@w{ }num_bytes) Set an initializer for @code{global} using the memory content pointed @@ -7396,7 +7413,7 @@ pointed by @code{blob} for @code{num_bytes} bytes, so it is valid to pass in a pointer to an on-stack buffer. The content will be stored in the compilation unit and used as initialization value of the array. -This entrypoint was added in @ref{f7,,LIBGCCJIT_ABI_14}; you can test for +This entrypoint was added in @ref{f9,,LIBGCCJIT_ABI_14}; you can test for its presence using @example @@ -7405,14 +7422,14 @@ its presence using @end deffn @geindex gcc_jit_global_set_initializer_rvalue (C function) -@anchor{topics/expressions c gcc_jit_global_set_initializer_rvalue}@anchor{b5} +@anchor{topics/expressions c gcc_jit_global_set_initializer_rvalue}@anchor{b7} @deffn {C Function} gcc_jit_lvalue * gcc_jit_global_set_initializer_rvalue (gcc_jit_lvalue@w{ }*global, gcc_jit_rvalue@w{ }*init_value) Set the initial value of a global with an rvalue. The rvalue needs to be a constant expression, e.g. no function calls. -The global can’t have the @code{kind} @ref{f5,,GCC_JIT_GLOBAL_IMPORTED}. +The global can’t have the @code{kind} @ref{f7,,GCC_JIT_GLOBAL_IMPORTED}. As a non-comprehensive example it is OK to do the equivalent of: @@ -7424,13 +7441,13 @@ const int baz = 3; /* rvalue from gcc_jit_context_rvalue_from_int. */ int boz = baz; /* rvalue from gcc_jit_lvalue_as_rvalue. */ @end example -Use together with @ref{b8,,gcc_jit_context_new_struct_constructor()}, -@ref{b9,,gcc_jit_context_new_union_constructor()}, @ref{b7,,gcc_jit_context_new_array_constructor()} +Use together with @ref{ba,,gcc_jit_context_new_struct_constructor()}, +@ref{bb,,gcc_jit_context_new_union_constructor()}, @ref{b9,,gcc_jit_context_new_array_constructor()} to initialize structs, unions and arrays. On success, returns the @code{global} parameter unchanged. Otherwise, @code{NULL}. -This entrypoint was added in @ref{b6,,LIBGCCJIT_ABI_19}; you can test for its +This entrypoint was added in @ref{b8,,LIBGCCJIT_ABI_19}; you can test for its presence using: @example @@ -7439,12 +7456,12 @@ presence using: @end deffn @node Working with pointers structs and unions,,Lvalues,Expressions -@anchor{topics/expressions working-with-pointers-structs-and-unions}@anchor{f8} +@anchor{topics/expressions working-with-pointers-structs-and-unions}@anchor{fa} @subsection Working with pointers, structs and unions @geindex gcc_jit_rvalue_dereference (C function) -@anchor{topics/expressions c gcc_jit_rvalue_dereference}@anchor{f9} +@anchor{topics/expressions c gcc_jit_rvalue_dereference}@anchor{fb} @deffn {C Function} gcc_jit_lvalue * gcc_jit_rvalue_dereference (gcc_jit_rvalue@w{ }*rvalue, gcc_jit_location@w{ }*loc) Given an rvalue of pointer type @code{T *}, dereferencing the pointer, @@ -7460,7 +7477,7 @@ in C. Field access is provided separately for both lvalues and rvalues. @geindex gcc_jit_lvalue_access_field (C function) -@anchor{topics/expressions c gcc_jit_lvalue_access_field}@anchor{fa} +@anchor{topics/expressions c gcc_jit_lvalue_access_field}@anchor{fc} @deffn {C Function} gcc_jit_lvalue * gcc_jit_lvalue_access_field (gcc_jit_lvalue@w{ }*struct_, gcc_jit_location@w{ }*loc, gcc_jit_field@w{ }*field) Given an lvalue of struct or union type, access the given field, @@ -7474,7 +7491,7 @@ in C. @end deffn @geindex gcc_jit_rvalue_access_field (C function) -@anchor{topics/expressions c gcc_jit_rvalue_access_field}@anchor{fb} +@anchor{topics/expressions c gcc_jit_rvalue_access_field}@anchor{fd} @deffn {C Function} gcc_jit_rvalue * gcc_jit_rvalue_access_field (gcc_jit_rvalue@w{ }*struct_, gcc_jit_location@w{ }*loc, gcc_jit_field@w{ }*field) Given an rvalue of struct or union type, access the given field @@ -7488,7 +7505,7 @@ in C. @end deffn @geindex gcc_jit_rvalue_dereference_field (C function) -@anchor{topics/expressions c gcc_jit_rvalue_dereference_field}@anchor{fc} +@anchor{topics/expressions c gcc_jit_rvalue_dereference_field}@anchor{fe} @deffn {C Function} gcc_jit_lvalue * gcc_jit_rvalue_dereference_field (gcc_jit_rvalue@w{ }*ptr, gcc_jit_location@w{ }*loc, gcc_jit_field@w{ }*field) Given an rvalue of pointer type @code{T *} where T is of struct or union @@ -7502,7 +7519,7 @@ in C, itself equivalent to @code{(*EXPR).FIELD}. @end deffn @geindex gcc_jit_context_new_array_access (C function) -@anchor{topics/expressions c gcc_jit_context_new_array_access}@anchor{d1} +@anchor{topics/expressions c gcc_jit_context_new_array_access}@anchor{d3} @deffn {C Function} gcc_jit_lvalue * gcc_jit_context_new_array_access (gcc_jit_context@w{ }*ctxt, gcc_jit_location@w{ }*loc, gcc_jit_rvalue@w{ }*ptr, gcc_jit_rvalue@w{ }*index) Given an rvalue of pointer type @code{T *}, get at the element @cite{T} at @@ -7535,7 +7552,7 @@ in C (or, indeed, to @code{PTR + INDEX}). @c <https://www.gnu.org/licenses/>. @node Creating and using functions,Function pointers<2>,Expressions,Topic Reference -@anchor{topics/functions doc}@anchor{fd}@anchor{topics/functions creating-and-using-functions}@anchor{fe} +@anchor{topics/functions doc}@anchor{ff}@anchor{topics/functions creating-and-using-functions}@anchor{100} @section Creating and using functions @@ -7548,7 +7565,7 @@ in C (or, indeed, to @code{PTR + INDEX}). @end menu @node Params,Functions,,Creating and using functions -@anchor{topics/functions params}@anchor{ff} +@anchor{topics/functions params}@anchor{101} @subsection Params @@ -7577,28 +7594,28 @@ Parameters are lvalues, and thus are also rvalues (and objects), so the following upcasts are available: @geindex gcc_jit_param_as_lvalue (C function) -@anchor{topics/functions c gcc_jit_param_as_lvalue}@anchor{100} +@anchor{topics/functions c gcc_jit_param_as_lvalue}@anchor{102} @deffn {C Function} gcc_jit_lvalue * gcc_jit_param_as_lvalue (gcc_jit_param@w{ }*param) Upcasting from param to lvalue. @end deffn @geindex gcc_jit_param_as_rvalue (C function) -@anchor{topics/functions c gcc_jit_param_as_rvalue}@anchor{101} +@anchor{topics/functions c gcc_jit_param_as_rvalue}@anchor{103} @deffn {C Function} gcc_jit_rvalue * gcc_jit_param_as_rvalue (gcc_jit_param@w{ }*param) Upcasting from param to rvalue. @end deffn @geindex gcc_jit_param_as_object (C function) -@anchor{topics/functions c gcc_jit_param_as_object}@anchor{102} +@anchor{topics/functions c gcc_jit_param_as_object}@anchor{104} @deffn {C Function} gcc_jit_object * gcc_jit_param_as_object (gcc_jit_param@w{ }*param) Upcasting from param to object. @end deffn @node Functions,Blocks,Params,Creating and using functions -@anchor{topics/functions functions}@anchor{103} +@anchor{topics/functions functions}@anchor{105} @subsection Functions @@ -7617,7 +7634,7 @@ creating ourselves, or one that we’re referencing. Create a gcc_jit_function with the given name and parameters. @geindex gcc_jit_function_kind (C type) -@anchor{topics/functions c gcc_jit_function_kind}@anchor{104} +@anchor{topics/functions c gcc_jit_function_kind}@anchor{106} @deffn {C Type} enum gcc_jit_function_kind @end deffn @@ -7627,7 +7644,7 @@ values: @quotation @geindex GCC_JIT_FUNCTION_EXPORTED (C macro) -@anchor{topics/functions c GCC_JIT_FUNCTION_EXPORTED}@anchor{105} +@anchor{topics/functions c GCC_JIT_FUNCTION_EXPORTED}@anchor{107} @deffn {C Macro} GCC_JIT_FUNCTION_EXPORTED Function is defined by the client code and visible @@ -7639,7 +7656,7 @@ for this function from a @ref{16,,gcc_jit_result} via @end deffn @geindex GCC_JIT_FUNCTION_INTERNAL (C macro) -@anchor{topics/functions c GCC_JIT_FUNCTION_INTERNAL}@anchor{106} +@anchor{topics/functions c GCC_JIT_FUNCTION_INTERNAL}@anchor{108} @deffn {C Macro} GCC_JIT_FUNCTION_INTERNAL Function is defined by the client code, but is invisible @@ -7647,7 +7664,7 @@ outside of the JIT. Analogous to a “static” function. @end deffn @geindex GCC_JIT_FUNCTION_IMPORTED (C macro) -@anchor{topics/functions c GCC_JIT_FUNCTION_IMPORTED}@anchor{107} +@anchor{topics/functions c GCC_JIT_FUNCTION_IMPORTED}@anchor{109} @deffn {C Macro} GCC_JIT_FUNCTION_IMPORTED Function is not defined by the client code; we’re merely @@ -7656,7 +7673,7 @@ header file. @end deffn @geindex GCC_JIT_FUNCTION_ALWAYS_INLINE (C macro) -@anchor{topics/functions c GCC_JIT_FUNCTION_ALWAYS_INLINE}@anchor{108} +@anchor{topics/functions c GCC_JIT_FUNCTION_ALWAYS_INLINE}@anchor{10a} @deffn {C Macro} GCC_JIT_FUNCTION_ALWAYS_INLINE Function is only ever inlined into other functions, and is @@ -7677,7 +7694,7 @@ buffer. @end deffn @geindex gcc_jit_context_get_builtin_function (C function) -@anchor{topics/functions c gcc_jit_context_get_builtin_function}@anchor{109} +@anchor{topics/functions c gcc_jit_context_get_builtin_function}@anchor{10b} @deffn {C Function} gcc_jit_function * gcc_jit_context_get_builtin_function (gcc_jit_context@w{ }*ctxt, const char@w{ }*name) Get the @ref{29,,gcc_jit_function} for the built-in function with the @@ -7701,14 +7718,14 @@ the context. @end deffn @geindex gcc_jit_function_as_object (C function) -@anchor{topics/functions c gcc_jit_function_as_object}@anchor{10a} +@anchor{topics/functions c gcc_jit_function_as_object}@anchor{10c} @deffn {C Function} gcc_jit_object * gcc_jit_function_as_object (gcc_jit_function@w{ }*func) Upcasting from function to object. @end deffn @geindex gcc_jit_function_get_param (C function) -@anchor{topics/functions c gcc_jit_function_get_param}@anchor{10b} +@anchor{topics/functions c gcc_jit_function_get_param}@anchor{10d} @deffn {C Function} gcc_jit_param * gcc_jit_function_get_param (gcc_jit_function@w{ }*func, int@w{ }index) Get the param of the given index (0-based). @@ -7736,14 +7753,14 @@ buffer. @end deffn @geindex gcc_jit_function_get_param_count (C function) -@anchor{topics/functions c gcc_jit_function_get_param_count}@anchor{10c} +@anchor{topics/functions c gcc_jit_function_get_param_count}@anchor{10e} @deffn {C Function} size_t gcc_jit_function_get_param_count (gcc_jit_function@w{ }*func) Get the number of parameters of the function. @end deffn @geindex gcc_jit_function_get_return_type (C function) -@anchor{topics/functions c gcc_jit_function_get_return_type}@anchor{10d} +@anchor{topics/functions c gcc_jit_function_get_return_type}@anchor{10f} @deffn {C Function} gcc_jit_type * gcc_jit_function_get_return_type (gcc_jit_function@w{ }*func) Get the return type of the function. @@ -7757,14 +7774,14 @@ types: @itemize * @item -@ref{10d,,gcc_jit_function_get_return_type()} +@ref{10f,,gcc_jit_function_get_return_type()} @item -@ref{10c,,gcc_jit_function_get_param_count()} +@ref{10e,,gcc_jit_function_get_param_count()} @end itemize @end quotation -were added in @ref{a6,,LIBGCCJIT_ABI_16}; you can test for their presence +were added in @ref{a8,,LIBGCCJIT_ABI_16}; you can test for their presence using @example @@ -7772,13 +7789,13 @@ using @end example @geindex gcc_jit_case (C type) -@anchor{topics/functions c gcc_jit_case}@anchor{10e} +@anchor{topics/functions c gcc_jit_case}@anchor{110} @deffn {C Type} gcc_jit_case @end deffn @end deffn @node Blocks,Statements,Functions,Creating and using functions -@anchor{topics/functions blocks}@anchor{10f} +@anchor{topics/functions blocks}@anchor{111} @subsection Blocks @@ -7802,7 +7819,7 @@ one function. @end deffn @geindex gcc_jit_function_new_block (C function) -@anchor{topics/functions c gcc_jit_function_new_block}@anchor{110} +@anchor{topics/functions c gcc_jit_function_new_block}@anchor{112} @deffn {C Function} gcc_jit_block * gcc_jit_function_new_block (gcc_jit_function@w{ }*func, const char@w{ }*name) Create a basic block of the given name. The name may be NULL, but @@ -7822,26 +7839,26 @@ for (pc = 0; pc < fn->fn_num_ops; pc++) @end deffn @geindex gcc_jit_block_as_object (C function) -@anchor{topics/functions c gcc_jit_block_as_object}@anchor{111} +@anchor{topics/functions c gcc_jit_block_as_object}@anchor{113} @deffn {C Function} gcc_jit_object * gcc_jit_block_as_object (gcc_jit_block@w{ }*block) Upcast from block to object. @end deffn @geindex gcc_jit_block_get_function (C function) -@anchor{topics/functions c gcc_jit_block_get_function}@anchor{112} +@anchor{topics/functions c gcc_jit_block_get_function}@anchor{114} @deffn {C Function} gcc_jit_function * gcc_jit_block_get_function (gcc_jit_block@w{ }*block) Which function is this block within? @end deffn @node Statements,,Blocks,Creating and using functions -@anchor{topics/functions statements}@anchor{113} +@anchor{topics/functions statements}@anchor{115} @subsection Statements @geindex gcc_jit_block_add_eval (C function) -@anchor{topics/functions c gcc_jit_block_add_eval}@anchor{d6} +@anchor{topics/functions c gcc_jit_block_add_eval}@anchor{d8} @deffn {C Function} void gcc_jit_block_add_eval (gcc_jit_block@w{ }*block, gcc_jit_location@w{ }*loc, gcc_jit_rvalue@w{ }*rvalue) Add evaluation of an rvalue, discarding the result @@ -7938,7 +7955,7 @@ block, boolval, on_true, and on_false must be non-NULL. @end deffn @geindex gcc_jit_block_end_with_jump (C function) -@anchor{topics/functions c gcc_jit_block_end_with_jump}@anchor{114} +@anchor{topics/functions c gcc_jit_block_end_with_jump}@anchor{116} @deffn {C Function} void gcc_jit_block_end_with_jump (gcc_jit_block@w{ }*block, gcc_jit_location@w{ }*loc, gcc_jit_block@w{ }*target) Terminate a block by adding a jump to the given target block. @@ -7951,7 +7968,7 @@ goto target; @end deffn @geindex gcc_jit_block_end_with_return (C function) -@anchor{topics/functions c gcc_jit_block_end_with_return}@anchor{115} +@anchor{topics/functions c gcc_jit_block_end_with_return}@anchor{117} @deffn {C Function} void gcc_jit_block_end_with_return (gcc_jit_block@w{ }*block, gcc_jit_location@w{ }*loc, gcc_jit_rvalue@w{ }*rvalue) Terminate a block by adding evaluation of an rvalue, returning the value. @@ -7964,7 +7981,7 @@ return expression; @end deffn @geindex gcc_jit_block_end_with_void_return (C function) -@anchor{topics/functions c gcc_jit_block_end_with_void_return}@anchor{116} +@anchor{topics/functions c gcc_jit_block_end_with_void_return}@anchor{118} @deffn {C Function} void gcc_jit_block_end_with_void_return (gcc_jit_block@w{ }*block, gcc_jit_location@w{ }*loc) Terminate a block by adding a valueless return, for use within a function @@ -7978,7 +7995,7 @@ return; @end deffn @geindex gcc_jit_block_end_with_switch (C function) -@anchor{topics/functions c gcc_jit_block_end_with_switch}@anchor{117} +@anchor{topics/functions c gcc_jit_block_end_with_switch}@anchor{119} @deffn {C Function} void gcc_jit_block_end_with_switch (gcc_jit_block@w{ }*block, gcc_jit_location@w{ }*loc, gcc_jit_rvalue@w{ }*expr, gcc_jit_block@w{ }*default_block, int@w{ }num_cases, gcc_jit_case@w{ }**cases) Terminate a block by adding evalation of an rvalue, then performing @@ -8024,17 +8041,17 @@ The API entrypoints relating to switch statements and cases: @itemize * @item -@ref{117,,gcc_jit_block_end_with_switch()} +@ref{119,,gcc_jit_block_end_with_switch()} @item -@ref{118,,gcc_jit_case_as_object()} +@ref{11a,,gcc_jit_case_as_object()} @item -@ref{119,,gcc_jit_context_new_case()} +@ref{11b,,gcc_jit_context_new_case()} @end itemize @end quotation -were added in @ref{11a,,LIBGCCJIT_ABI_3}; you can test for their presence +were added in @ref{11c,,LIBGCCJIT_ABI_3}; you can test for their presence using @example @@ -8048,14 +8065,14 @@ using A @cite{gcc_jit_case} represents a case within a switch statement, and is created within a particular @ref{8,,gcc_jit_context} using -@ref{119,,gcc_jit_context_new_case()}. +@ref{11b,,gcc_jit_context_new_case()}. Each case expresses a multivalued range of integer values. You can express single-valued cases by passing in the same value for both @cite{min_value} and @cite{max_value}. @geindex gcc_jit_context_new_case (C function) -@anchor{topics/functions c gcc_jit_context_new_case}@anchor{119} +@anchor{topics/functions c gcc_jit_context_new_case}@anchor{11b} @deffn {C Function} gcc_jit_case * gcc_jit_context_new_case (gcc_jit_context@w{ }*ctxt, gcc_jit_rvalue@w{ }*min_value, gcc_jit_rvalue@w{ }*max_value, gcc_jit_block@w{ }*dest_block) Create a new gcc_jit_case instance for use in a switch statement. @@ -8067,7 +8084,7 @@ statement. @end deffn @geindex gcc_jit_case_as_object (C function) -@anchor{topics/functions c gcc_jit_case_as_object}@anchor{118} +@anchor{topics/functions c gcc_jit_case_as_object}@anchor{11a} @deffn {C Function} gcc_jit_object * gcc_jit_case_as_object (gcc_jit_case@w{ }*case_) Upcast from a case to an object. @@ -8181,7 +8198,7 @@ create_code (gcc_jit_context *ctxt, void *user_data) @end quotation @end deffn -See also @ref{11b,,gcc_jit_extended_asm} for entrypoints for adding inline +See also @ref{11d,,gcc_jit_extended_asm} for entrypoints for adding inline assembler statements to a function. @c Copyright (C) 2017-2022 Free Software Foundation, Inc. @@ -8202,26 +8219,26 @@ assembler statements to a function. @c <https://www.gnu.org/licenses/>. @node Function pointers<2>,Source Locations,Creating and using functions,Topic Reference -@anchor{topics/function-pointers doc}@anchor{11c}@anchor{topics/function-pointers function-pointers}@anchor{11d} +@anchor{topics/function-pointers doc}@anchor{11e}@anchor{topics/function-pointers function-pointers}@anchor{11f} @section Function pointers You can generate calls that use a function pointer via -@ref{d7,,gcc_jit_context_new_call_through_ptr()}. +@ref{d9,,gcc_jit_context_new_call_through_ptr()}. To do requires a @ref{13,,gcc_jit_rvalue} of the correct function pointer type. Function pointers for a @ref{29,,gcc_jit_function} can be obtained -via @ref{db,,gcc_jit_function_get_address()}. +via @ref{dd,,gcc_jit_function_get_address()}. @geindex gcc_jit_function_get_address (C function) -@anchor{topics/function-pointers c gcc_jit_function_get_address}@anchor{db} +@anchor{topics/function-pointers c gcc_jit_function_get_address}@anchor{dd} @deffn {C Function} gcc_jit_rvalue * gcc_jit_function_get_address (gcc_jit_function@w{ }*fn, gcc_jit_location@w{ }*loc) Get the address of a function as an rvalue, of function pointer type. -This entrypoint was added in @ref{11e,,LIBGCCJIT_ABI_9}; you can test +This entrypoint was added in @ref{120,,LIBGCCJIT_ABI_9}; you can test for its presence using @example @@ -8231,8 +8248,8 @@ for its presence using Alternatively, given an existing function, you can obtain a pointer to it in @ref{13,,gcc_jit_rvalue} form using -@ref{b1,,gcc_jit_context_new_rvalue_from_ptr()}, using a function pointer -type obtained using @ref{95,,gcc_jit_context_new_function_ptr_type()}. +@ref{b3,,gcc_jit_context_new_rvalue_from_ptr()}, using a function pointer +type obtained using @ref{97,,gcc_jit_context_new_function_ptr_type()}. Here’s an example of creating a function pointer type corresponding to C’s @code{void (*) (int, int, int)}: @@ -8256,7 +8273,7 @@ gcc_jit_type *fn_ptr_type = @end example @geindex gcc_jit_context_new_function_ptr_type (C function) -@anchor{topics/function-pointers c gcc_jit_context_new_function_ptr_type}@anchor{95} +@anchor{topics/function-pointers c gcc_jit_context_new_function_ptr_type}@anchor{97} @deffn {C Function} gcc_jit_type * gcc_jit_context_new_function_ptr_type (gcc_jit_context@w{ }*ctxt, gcc_jit_location@w{ }*loc, gcc_jit_type@w{ }*return_type, int@w{ }num_params, gcc_jit_type@w{ }**param_types, int@w{ }is_variadic) Generate a @ref{a,,gcc_jit_type} for a function pointer with the @@ -8283,7 +8300,7 @@ Each of @cite{param_types} must be non-@cite{void}; @cite{return_type} may be @c @c <https://www.gnu.org/licenses/>. @node Source Locations,Compiling a context,Function pointers<2>,Topic Reference -@anchor{topics/locations doc}@anchor{11f}@anchor{topics/locations source-locations}@anchor{120} +@anchor{topics/locations doc}@anchor{121}@anchor{topics/locations source-locations}@anchor{122} @section Source Locations @@ -8331,7 +8348,7 @@ on-stack buffer. @end menu @node Faking it,,,Source Locations -@anchor{topics/locations faking-it}@anchor{121} +@anchor{topics/locations faking-it}@anchor{123} @subsection Faking it @@ -8367,7 +8384,7 @@ file, giving you @emph{something} you can step through in the debugger. @c <https://www.gnu.org/licenses/>. @node Compiling a context,ABI and API compatibility,Source Locations,Topic Reference -@anchor{topics/compilation doc}@anchor{122}@anchor{topics/compilation compiling-a-context}@anchor{123} +@anchor{topics/compilation doc}@anchor{124}@anchor{topics/compilation compiling-a-context}@anchor{125} @section Compiling a context @@ -8386,7 +8403,7 @@ prevent any future compilation of that context. @end menu @node In-memory compilation,Ahead-of-time compilation,,Compiling a context -@anchor{topics/compilation in-memory-compilation}@anchor{124} +@anchor{topics/compilation in-memory-compilation}@anchor{126} @subsection In-memory compilation @@ -8421,7 +8438,7 @@ Functions are looked up by name. For this to succeed, a function with a name matching @cite{funcname} must have been created on @cite{result}’s context (or a parent context) via a call to @ref{11,,gcc_jit_context_new_function()} with @cite{kind} -@ref{105,,GCC_JIT_FUNCTION_EXPORTED}: +@ref{107,,GCC_JIT_FUNCTION_EXPORTED}: @example gcc_jit_context_new_function (ctxt, @@ -8449,7 +8466,7 @@ to a segmentation fault. @end deffn @geindex gcc_jit_result_get_global (C function) -@anchor{topics/compilation c gcc_jit_result_get_global}@anchor{f3} +@anchor{topics/compilation c gcc_jit_result_get_global}@anchor{f5} @deffn {C Function} void * gcc_jit_result_get_global (gcc_jit_result@w{ }*result, const char@w{ }*name) Locate a given global within the built machine code. @@ -8457,8 +8474,8 @@ Locate a given global within the built machine code. Globals are looked up by name. For this to succeed, a global with a name matching @cite{name} must have been created on @cite{result}’s context (or a parent context) via a call to -@ref{f0,,gcc_jit_context_new_global()} with @cite{kind} -@ref{f2,,GCC_JIT_GLOBAL_EXPORTED}. +@ref{f2,,gcc_jit_context_new_global()} with @cite{kind} +@ref{f4,,GCC_JIT_GLOBAL_EXPORTED}. If the global is found, the result will need to be cast to a pointer of the correct type before it can be called. @@ -8502,11 +8519,11 @@ Once we’re done with the code, this unloads the built .so file. This cleans up the result; after calling this, it’s no longer valid to use the result, or any code or globals that were obtained by calling @ref{17,,gcc_jit_result_get_code()} or -@ref{f3,,gcc_jit_result_get_global()} on it. +@ref{f5,,gcc_jit_result_get_global()} on it. @end deffn @node Ahead-of-time compilation,,In-memory compilation,Compiling a context -@anchor{topics/compilation ahead-of-time-compilation}@anchor{125} +@anchor{topics/compilation ahead-of-time-compilation}@anchor{127} @subsection Ahead-of-time compilation @@ -8515,7 +8532,7 @@ can also be used for implementing more traditional ahead-of-time compilers, via the @ref{4a,,gcc_jit_context_compile_to_file()} API entrypoint. -For linking in object files, use @ref{74,,gcc_jit_context_add_driver_option()}. +For linking in object files, use @ref{76,,gcc_jit_context_add_driver_option()}. @geindex gcc_jit_context_compile_to_file (C function) @anchor{topics/compilation c gcc_jit_context_compile_to_file}@anchor{4a} @@ -8537,7 +8554,7 @@ suffix of the output file when determining what to do. @end cartouche @geindex gcc_jit_output_kind (C type) -@anchor{topics/compilation c gcc_jit_output_kind}@anchor{126} +@anchor{topics/compilation c gcc_jit_output_kind}@anchor{128} @deffn {C Type} enum gcc_jit_output_kind @end deffn @@ -8555,7 +8572,7 @@ Typical suffix @item -@ref{127,,GCC_JIT_OUTPUT_KIND_ASSEMBLER} +@ref{129,,GCC_JIT_OUTPUT_KIND_ASSEMBLER} @tab @@ -8563,7 +8580,7 @@ Typical suffix @item -@ref{128,,GCC_JIT_OUTPUT_KIND_OBJECT_FILE} +@ref{12a,,GCC_JIT_OUTPUT_KIND_OBJECT_FILE} @tab @@ -8571,7 +8588,7 @@ Typical suffix @item -@ref{129,,GCC_JIT_OUTPUT_KIND_DYNAMIC_LIBRARY} +@ref{12b,,GCC_JIT_OUTPUT_KIND_DYNAMIC_LIBRARY} @tab @@ -8579,7 +8596,7 @@ Typical suffix @item -@ref{12a,,GCC_JIT_OUTPUT_KIND_EXECUTABLE} +@ref{12c,,GCC_JIT_OUTPUT_KIND_EXECUTABLE} @tab @@ -8589,28 +8606,28 @@ None, or .exe @geindex GCC_JIT_OUTPUT_KIND_ASSEMBLER (C macro) -@anchor{topics/compilation c GCC_JIT_OUTPUT_KIND_ASSEMBLER}@anchor{127} +@anchor{topics/compilation c GCC_JIT_OUTPUT_KIND_ASSEMBLER}@anchor{129} @deffn {C Macro} GCC_JIT_OUTPUT_KIND_ASSEMBLER Compile the context to an assembler file. @end deffn @geindex GCC_JIT_OUTPUT_KIND_OBJECT_FILE (C macro) -@anchor{topics/compilation c GCC_JIT_OUTPUT_KIND_OBJECT_FILE}@anchor{128} +@anchor{topics/compilation c GCC_JIT_OUTPUT_KIND_OBJECT_FILE}@anchor{12a} @deffn {C Macro} GCC_JIT_OUTPUT_KIND_OBJECT_FILE Compile the context to an object file. @end deffn @geindex GCC_JIT_OUTPUT_KIND_DYNAMIC_LIBRARY (C macro) -@anchor{topics/compilation c GCC_JIT_OUTPUT_KIND_DYNAMIC_LIBRARY}@anchor{129} +@anchor{topics/compilation c GCC_JIT_OUTPUT_KIND_DYNAMIC_LIBRARY}@anchor{12b} @deffn {C Macro} GCC_JIT_OUTPUT_KIND_DYNAMIC_LIBRARY Compile the context to a dynamic library. @end deffn @geindex GCC_JIT_OUTPUT_KIND_EXECUTABLE (C macro) -@anchor{topics/compilation c GCC_JIT_OUTPUT_KIND_EXECUTABLE}@anchor{12a} +@anchor{topics/compilation c GCC_JIT_OUTPUT_KIND_EXECUTABLE}@anchor{12c} @deffn {C Macro} GCC_JIT_OUTPUT_KIND_EXECUTABLE Compile the context to an executable. @@ -8634,7 +8651,7 @@ Compile the context to an executable. @c <https://www.gnu.org/licenses/>. @node ABI and API compatibility,Performance,Compiling a context,Topic Reference -@anchor{topics/compatibility doc}@anchor{12b}@anchor{topics/compatibility abi-and-api-compatibility}@anchor{12c} +@anchor{topics/compatibility doc}@anchor{12d}@anchor{topics/compatibility abi-and-api-compatibility}@anchor{12e} @section ABI and API compatibility @@ -8656,7 +8673,7 @@ it. For ABI compatiblity, we avoid bumping the SONAME, and instead use symbol versioning to tag each symbol, so that a binary linked against libgccjit.so is tagged according to the symbols that it uses. -For example, @ref{72,,gcc_jit_context_add_command_line_option()} was added in +For example, @ref{74,,gcc_jit_context_add_command_line_option()} was added in @code{LIBGCCJIT_ABI_1}. If a client program uses it, this can be detected from metadata by using @code{objdump}: @@ -8690,21 +8707,21 @@ Version definitions: @end menu @node Programmatically checking version,ABI symbol tags,,ABI and API compatibility -@anchor{topics/compatibility programmatically-checking-version}@anchor{12d} +@anchor{topics/compatibility programmatically-checking-version}@anchor{12f} @subsection Programmatically checking version Client code can programmatically check libgccjit version using: @geindex gcc_jit_version_major (C function) -@anchor{topics/compatibility c gcc_jit_version_major}@anchor{12e} +@anchor{topics/compatibility c gcc_jit_version_major}@anchor{130} @deffn {C Function} int gcc_jit_version_major (void) Return libgccjit major version. This is analogous to __GNUC__ in C code. @end deffn @geindex gcc_jit_version_minor (C function) -@anchor{topics/compatibility c gcc_jit_version_minor}@anchor{12f} +@anchor{topics/compatibility c gcc_jit_version_minor}@anchor{131} @deffn {C Function} int gcc_jit_version_minor (void) Return libgccjit minor version. This is analogous to @@ -8712,7 +8729,7 @@ __GNUC_MINOR__ in C code. @end deffn @geindex gcc_jit_version_patchlevel (C function) -@anchor{topics/compatibility c gcc_jit_version_patchlevel}@anchor{130} +@anchor{topics/compatibility c gcc_jit_version_patchlevel}@anchor{132} @deffn {C Function} int gcc_jit_version_patchlevel (void) Return libgccjit patchlevel version. This is analogous to @@ -8727,7 +8744,7 @@ These entry points has been added with @code{LIBGCCJIT_ABI_13} @end cartouche @node ABI symbol tags,,Programmatically checking version,ABI and API compatibility -@anchor{topics/compatibility abi-symbol-tags}@anchor{131} +@anchor{topics/compatibility abi-symbol-tags}@anchor{133} @subsection ABI symbol tags @@ -8759,11 +8776,12 @@ Newer releases use the following tags. * LIBGCCJIT_ABI_20:: * LIBGCCJIT_ABI_21:: * LIBGCCJIT_ABI_22:: +* LIBGCCJIT_ABI_23:: @end menu @node LIBGCCJIT_ABI_0,LIBGCCJIT_ABI_1,,ABI symbol tags -@anchor{topics/compatibility id1}@anchor{132}@anchor{topics/compatibility libgccjit-abi-0}@anchor{133} +@anchor{topics/compatibility id1}@anchor{134}@anchor{topics/compatibility libgccjit-abi-0}@anchor{135} @subsubsection @code{LIBGCCJIT_ABI_0} @@ -8775,15 +8793,15 @@ continue to work, with this being handled transparently by the linker (see this post@footnote{https://gcc.gnu.org/ml/gcc-patches/2015-06/msg02126.html}) @node LIBGCCJIT_ABI_1,LIBGCCJIT_ABI_2,LIBGCCJIT_ABI_0,ABI symbol tags -@anchor{topics/compatibility id2}@anchor{134}@anchor{topics/compatibility libgccjit-abi-1}@anchor{73} +@anchor{topics/compatibility id2}@anchor{136}@anchor{topics/compatibility libgccjit-abi-1}@anchor{75} @subsubsection @code{LIBGCCJIT_ABI_1} @code{LIBGCCJIT_ABI_1} covers the addition of -@ref{72,,gcc_jit_context_add_command_line_option()} +@ref{74,,gcc_jit_context_add_command_line_option()} @node LIBGCCJIT_ABI_2,LIBGCCJIT_ABI_3,LIBGCCJIT_ABI_1,ABI symbol tags -@anchor{topics/compatibility id3}@anchor{135}@anchor{topics/compatibility libgccjit-abi-2}@anchor{6c} +@anchor{topics/compatibility id3}@anchor{137}@anchor{topics/compatibility libgccjit-abi-2}@anchor{6c} @subsubsection @code{LIBGCCJIT_ABI_2} @@ -8791,7 +8809,7 @@ continue to work, with this being handled transparently by the linker @ref{6b,,gcc_jit_context_set_bool_allow_unreachable_blocks()} @node LIBGCCJIT_ABI_3,LIBGCCJIT_ABI_4,LIBGCCJIT_ABI_2,ABI symbol tags -@anchor{topics/compatibility id4}@anchor{136}@anchor{topics/compatibility libgccjit-abi-3}@anchor{11a} +@anchor{topics/compatibility id4}@anchor{138}@anchor{topics/compatibility libgccjit-abi-3}@anchor{11c} @subsubsection @code{LIBGCCJIT_ABI_3} @@ -8804,18 +8822,18 @@ entrypoints: @itemize * @item -@ref{117,,gcc_jit_block_end_with_switch()} +@ref{119,,gcc_jit_block_end_with_switch()} @item -@ref{118,,gcc_jit_case_as_object()} +@ref{11a,,gcc_jit_case_as_object()} @item -@ref{119,,gcc_jit_context_new_case()} +@ref{11b,,gcc_jit_context_new_case()} @end itemize @end quotation @node LIBGCCJIT_ABI_4,LIBGCCJIT_ABI_5,LIBGCCJIT_ABI_3,ABI symbol tags -@anchor{topics/compatibility id5}@anchor{137}@anchor{topics/compatibility libgccjit-abi-4}@anchor{138} +@anchor{topics/compatibility id5}@anchor{139}@anchor{topics/compatibility libgccjit-abi-4}@anchor{13a} @subsubsection @code{LIBGCCJIT_ABI_4} @@ -8828,30 +8846,30 @@ entrypoints: @itemize * @item -@ref{139,,gcc_jit_context_get_timer()} +@ref{13b,,gcc_jit_context_get_timer()} @item -@ref{13a,,gcc_jit_context_set_timer()} +@ref{13c,,gcc_jit_context_set_timer()} @item -@ref{13b,,gcc_jit_timer_new()} +@ref{13d,,gcc_jit_timer_new()} @item -@ref{13c,,gcc_jit_timer_release()} +@ref{13e,,gcc_jit_timer_release()} @item -@ref{13d,,gcc_jit_timer_push()} +@ref{13f,,gcc_jit_timer_push()} @item -@ref{13e,,gcc_jit_timer_pop()} +@ref{140,,gcc_jit_timer_pop()} @item -@ref{13f,,gcc_jit_timer_print()} +@ref{141,,gcc_jit_timer_print()} @end itemize @end quotation @node LIBGCCJIT_ABI_5,LIBGCCJIT_ABI_6,LIBGCCJIT_ABI_4,ABI symbol tags -@anchor{topics/compatibility id6}@anchor{140}@anchor{topics/compatibility libgccjit-abi-5}@anchor{6e} +@anchor{topics/compatibility id6}@anchor{142}@anchor{topics/compatibility libgccjit-abi-5}@anchor{6e} @subsubsection @code{LIBGCCJIT_ABI_5} @@ -8859,63 +8877,63 @@ entrypoints: @ref{6d,,gcc_jit_context_set_bool_use_external_driver()} @node LIBGCCJIT_ABI_6,LIBGCCJIT_ABI_7,LIBGCCJIT_ABI_5,ABI symbol tags -@anchor{topics/compatibility id7}@anchor{141}@anchor{topics/compatibility libgccjit-abi-6}@anchor{d9} +@anchor{topics/compatibility id7}@anchor{143}@anchor{topics/compatibility libgccjit-abi-6}@anchor{db} @subsubsection @code{LIBGCCJIT_ABI_6} @code{LIBGCCJIT_ABI_6} covers the addition of -@ref{d8,,gcc_jit_rvalue_set_bool_require_tail_call()} +@ref{da,,gcc_jit_rvalue_set_bool_require_tail_call()} @node LIBGCCJIT_ABI_7,LIBGCCJIT_ABI_8,LIBGCCJIT_ABI_6,ABI symbol tags -@anchor{topics/compatibility id8}@anchor{142}@anchor{topics/compatibility libgccjit-abi-7}@anchor{83} +@anchor{topics/compatibility id8}@anchor{144}@anchor{topics/compatibility libgccjit-abi-7}@anchor{85} @subsubsection @code{LIBGCCJIT_ABI_7} @code{LIBGCCJIT_ABI_7} covers the addition of -@ref{82,,gcc_jit_type_get_aligned()} +@ref{84,,gcc_jit_type_get_aligned()} @node LIBGCCJIT_ABI_8,LIBGCCJIT_ABI_9,LIBGCCJIT_ABI_7,ABI symbol tags -@anchor{topics/compatibility id9}@anchor{143}@anchor{topics/compatibility libgccjit-abi-8}@anchor{86} +@anchor{topics/compatibility id9}@anchor{145}@anchor{topics/compatibility libgccjit-abi-8}@anchor{88} @subsubsection @code{LIBGCCJIT_ABI_8} @code{LIBGCCJIT_ABI_8} covers the addition of -@ref{85,,gcc_jit_type_get_vector()} +@ref{87,,gcc_jit_type_get_vector()} @node LIBGCCJIT_ABI_9,LIBGCCJIT_ABI_10,LIBGCCJIT_ABI_8,ABI symbol tags -@anchor{topics/compatibility id10}@anchor{144}@anchor{topics/compatibility libgccjit-abi-9}@anchor{11e} +@anchor{topics/compatibility id10}@anchor{146}@anchor{topics/compatibility libgccjit-abi-9}@anchor{120} @subsubsection @code{LIBGCCJIT_ABI_9} @code{LIBGCCJIT_ABI_9} covers the addition of -@ref{db,,gcc_jit_function_get_address()} +@ref{dd,,gcc_jit_function_get_address()} @node LIBGCCJIT_ABI_10,LIBGCCJIT_ABI_11,LIBGCCJIT_ABI_9,ABI symbol tags -@anchor{topics/compatibility id11}@anchor{145}@anchor{topics/compatibility libgccjit-abi-10}@anchor{bb} +@anchor{topics/compatibility id11}@anchor{147}@anchor{topics/compatibility libgccjit-abi-10}@anchor{bd} @subsubsection @code{LIBGCCJIT_ABI_10} @code{LIBGCCJIT_ABI_10} covers the addition of -@ref{87,,gcc_jit_context_new_rvalue_from_vector()} +@ref{89,,gcc_jit_context_new_rvalue_from_vector()} @node LIBGCCJIT_ABI_11,LIBGCCJIT_ABI_12,LIBGCCJIT_ABI_10,ABI symbol tags -@anchor{topics/compatibility id12}@anchor{146}@anchor{topics/compatibility libgccjit-abi-11}@anchor{75} +@anchor{topics/compatibility id12}@anchor{148}@anchor{topics/compatibility libgccjit-abi-11}@anchor{77} @subsubsection @code{LIBGCCJIT_ABI_11} @code{LIBGCCJIT_ABI_11} covers the addition of -@ref{74,,gcc_jit_context_add_driver_option()} +@ref{76,,gcc_jit_context_add_driver_option()} @node LIBGCCJIT_ABI_12,LIBGCCJIT_ABI_13,LIBGCCJIT_ABI_11,ABI symbol tags -@anchor{topics/compatibility id13}@anchor{147}@anchor{topics/compatibility libgccjit-abi-12}@anchor{8d} +@anchor{topics/compatibility id13}@anchor{149}@anchor{topics/compatibility libgccjit-abi-12}@anchor{8f} @subsubsection @code{LIBGCCJIT_ABI_12} @code{LIBGCCJIT_ABI_12} covers the addition of -@ref{8c,,gcc_jit_context_new_bitfield()} +@ref{8e,,gcc_jit_context_new_bitfield()} @node LIBGCCJIT_ABI_13,LIBGCCJIT_ABI_14,LIBGCCJIT_ABI_12,ABI symbol tags -@anchor{topics/compatibility id14}@anchor{148}@anchor{topics/compatibility libgccjit-abi-13}@anchor{149} +@anchor{topics/compatibility id14}@anchor{14a}@anchor{topics/compatibility libgccjit-abi-13}@anchor{14b} @subsubsection @code{LIBGCCJIT_ABI_13} @@ -8928,26 +8946,26 @@ entrypoints: @itemize * @item -@ref{12e,,gcc_jit_version_major()} +@ref{130,,gcc_jit_version_major()} @item -@ref{12f,,gcc_jit_version_minor()} +@ref{131,,gcc_jit_version_minor()} @item -@ref{130,,gcc_jit_version_patchlevel()} +@ref{132,,gcc_jit_version_patchlevel()} @end itemize @end quotation @node LIBGCCJIT_ABI_14,LIBGCCJIT_ABI_15,LIBGCCJIT_ABI_13,ABI symbol tags -@anchor{topics/compatibility id15}@anchor{14a}@anchor{topics/compatibility libgccjit-abi-14}@anchor{f7} +@anchor{topics/compatibility id15}@anchor{14c}@anchor{topics/compatibility libgccjit-abi-14}@anchor{f9} @subsubsection @code{LIBGCCJIT_ABI_14} @code{LIBGCCJIT_ABI_14} covers the addition of -@ref{f6,,gcc_jit_global_set_initializer()} +@ref{f8,,gcc_jit_global_set_initializer()} @node LIBGCCJIT_ABI_15,LIBGCCJIT_ABI_16,LIBGCCJIT_ABI_14,ABI symbol tags -@anchor{topics/compatibility id16}@anchor{14b}@anchor{topics/compatibility libgccjit-abi-15}@anchor{14c} +@anchor{topics/compatibility id16}@anchor{14d}@anchor{topics/compatibility libgccjit-abi-15}@anchor{14e} @subsubsection @code{LIBGCCJIT_ABI_15} @@ -8960,36 +8978,36 @@ embedding assembler instructions: @itemize * @item -@ref{14d,,gcc_jit_block_add_extended_asm()} +@ref{14f,,gcc_jit_block_add_extended_asm()} @item -@ref{14e,,gcc_jit_block_end_with_extended_asm_goto()} +@ref{150,,gcc_jit_block_end_with_extended_asm_goto()} @item -@ref{14f,,gcc_jit_extended_asm_as_object()} +@ref{151,,gcc_jit_extended_asm_as_object()} @item -@ref{150,,gcc_jit_extended_asm_set_volatile_flag()} +@ref{152,,gcc_jit_extended_asm_set_volatile_flag()} @item -@ref{151,,gcc_jit_extended_asm_set_inline_flag()} +@ref{153,,gcc_jit_extended_asm_set_inline_flag()} @item -@ref{152,,gcc_jit_extended_asm_add_output_operand()} +@ref{154,,gcc_jit_extended_asm_add_output_operand()} @item -@ref{153,,gcc_jit_extended_asm_add_input_operand()} +@ref{155,,gcc_jit_extended_asm_add_input_operand()} @item -@ref{154,,gcc_jit_extended_asm_add_clobber()} +@ref{156,,gcc_jit_extended_asm_add_clobber()} @item -@ref{155,,gcc_jit_context_add_top_level_asm()} +@ref{157,,gcc_jit_context_add_top_level_asm()} @end itemize @end quotation @node LIBGCCJIT_ABI_16,LIBGCCJIT_ABI_17,LIBGCCJIT_ABI_15,ABI symbol tags -@anchor{topics/compatibility id17}@anchor{156}@anchor{topics/compatibility libgccjit-abi-16}@anchor{a6} +@anchor{topics/compatibility id17}@anchor{158}@anchor{topics/compatibility libgccjit-abi-16}@anchor{a8} @subsubsection @code{LIBGCCJIT_ABI_16} @@ -9002,60 +9020,60 @@ entrypoints: @itemize * @item -@ref{10d,,gcc_jit_function_get_return_type()} +@ref{10f,,gcc_jit_function_get_return_type()} @item -@ref{10c,,gcc_jit_function_get_param_count()} +@ref{10e,,gcc_jit_function_get_param_count()} @item -@ref{97,,gcc_jit_type_dyncast_array()} +@ref{99,,gcc_jit_type_dyncast_array()} @item -@ref{98,,gcc_jit_type_is_bool()} +@ref{9a,,gcc_jit_type_is_bool()} @item -@ref{9d,,gcc_jit_type_is_integral()} +@ref{9f,,gcc_jit_type_is_integral()} @item -@ref{9e,,gcc_jit_type_is_pointer()} +@ref{a0,,gcc_jit_type_is_pointer()} @item -@ref{a0,,gcc_jit_type_is_struct()} +@ref{a2,,gcc_jit_type_is_struct()} @item -@ref{9f,,gcc_jit_type_dyncast_vector()} +@ref{a1,,gcc_jit_type_dyncast_vector()} @item -@ref{a3,,gcc_jit_type_unqualified()} +@ref{a5,,gcc_jit_type_unqualified()} @item -@ref{99,,gcc_jit_type_dyncast_function_ptr_type()} +@ref{9b,,gcc_jit_type_dyncast_function_ptr_type()} @item -@ref{9a,,gcc_jit_function_type_get_return_type()} +@ref{9c,,gcc_jit_function_type_get_return_type()} @item -@ref{9b,,gcc_jit_function_type_get_param_count()} +@ref{9d,,gcc_jit_function_type_get_param_count()} @item -@ref{9c,,gcc_jit_function_type_get_param_type()} +@ref{9e,,gcc_jit_function_type_get_param_type()} @item -@ref{a1,,gcc_jit_vector_type_get_num_units()} +@ref{a3,,gcc_jit_vector_type_get_num_units()} @item -@ref{a2,,gcc_jit_vector_type_get_element_type()} +@ref{a4,,gcc_jit_vector_type_get_element_type()} @item -@ref{a4,,gcc_jit_struct_get_field()} +@ref{a6,,gcc_jit_struct_get_field()} @item -@ref{a5,,gcc_jit_struct_get_field_count()} +@ref{a7,,gcc_jit_struct_get_field_count()} @end itemize @end quotation @node LIBGCCJIT_ABI_17,LIBGCCJIT_ABI_18,LIBGCCJIT_ABI_16,ABI symbol tags -@anchor{topics/compatibility id18}@anchor{157}@anchor{topics/compatibility libgccjit-abi-17}@anchor{eb} +@anchor{topics/compatibility id18}@anchor{159}@anchor{topics/compatibility libgccjit-abi-17}@anchor{ed} @subsubsection @code{LIBGCCJIT_ABI_17} @@ -9068,12 +9086,12 @@ thread-local storage model of a variable: @itemize * @item -@ref{e4,,gcc_jit_lvalue_set_tls_model()} +@ref{e6,,gcc_jit_lvalue_set_tls_model()} @end itemize @end quotation @node LIBGCCJIT_ABI_18,LIBGCCJIT_ABI_19,LIBGCCJIT_ABI_17,ABI symbol tags -@anchor{topics/compatibility id19}@anchor{158}@anchor{topics/compatibility libgccjit-abi-18}@anchor{ed} +@anchor{topics/compatibility id19}@anchor{15a}@anchor{topics/compatibility libgccjit-abi-18}@anchor{ef} @subsubsection @code{LIBGCCJIT_ABI_18} @@ -9086,12 +9104,12 @@ section of a variable: @itemize * @item -@ref{ec,,gcc_jit_lvalue_set_link_section()} +@ref{ee,,gcc_jit_lvalue_set_link_section()} @end itemize @end quotation @node LIBGCCJIT_ABI_19,LIBGCCJIT_ABI_20,LIBGCCJIT_ABI_18,ABI symbol tags -@anchor{topics/compatibility id20}@anchor{159}@anchor{topics/compatibility libgccjit-abi-19}@anchor{b6} +@anchor{topics/compatibility id20}@anchor{15b}@anchor{topics/compatibility libgccjit-abi-19}@anchor{b8} @subsubsection @code{LIBGCCJIT_ABI_19} @@ -9104,21 +9122,21 @@ of a global with an rvalue and to use constructors: @itemize * @item -@ref{b7,,gcc_jit_context_new_array_constructor()} +@ref{b9,,gcc_jit_context_new_array_constructor()} @item -@ref{b8,,gcc_jit_context_new_struct_constructor()} +@ref{ba,,gcc_jit_context_new_struct_constructor()} @item -@ref{b9,,gcc_jit_context_new_union_constructor()} +@ref{bb,,gcc_jit_context_new_union_constructor()} @item -@ref{b5,,gcc_jit_global_set_initializer_rvalue()} +@ref{b7,,gcc_jit_global_set_initializer_rvalue()} @end itemize @end quotation @node LIBGCCJIT_ABI_20,LIBGCCJIT_ABI_21,LIBGCCJIT_ABI_19,ABI symbol tags -@anchor{topics/compatibility id21}@anchor{15a}@anchor{topics/compatibility libgccjit-abi-20}@anchor{a9} +@anchor{topics/compatibility id21}@anchor{15c}@anchor{topics/compatibility libgccjit-abi-20}@anchor{ab} @subsubsection @code{LIBGCCJIT_ABI_20} @@ -9131,10 +9149,10 @@ of a global with an rvalue and to use constructors: @itemize * @item -@ref{a8,,gcc_jit_compatible_types()} +@ref{aa,,gcc_jit_compatible_types()} @item -@ref{aa,,gcc_jit_type_get_size()} +@ref{ac,,gcc_jit_type_get_size()} @item @code{GCC_JIT_TYPE_UINT8_T} @@ -9169,7 +9187,7 @@ of a global with an rvalue and to use constructors: @end quotation @node LIBGCCJIT_ABI_21,LIBGCCJIT_ABI_22,LIBGCCJIT_ABI_20,ABI symbol tags -@anchor{topics/compatibility id22}@anchor{15b}@anchor{topics/compatibility libgccjit-abi-21}@anchor{df} +@anchor{topics/compatibility id22}@anchor{15d}@anchor{topics/compatibility libgccjit-abi-21}@anchor{e1} @subsubsection @code{LIBGCCJIT_ABI_21} @@ -9182,12 +9200,12 @@ value from one type to another: @itemize * @item -@ref{de,,gcc_jit_context_new_bitcast()} +@ref{e0,,gcc_jit_context_new_bitcast()} @end itemize @end quotation -@node LIBGCCJIT_ABI_22,,LIBGCCJIT_ABI_21,ABI symbol tags -@anchor{topics/compatibility id23}@anchor{15c}@anchor{topics/compatibility libgccjit-abi-22}@anchor{ee} +@node LIBGCCJIT_ABI_22,LIBGCCJIT_ABI_23,LIBGCCJIT_ABI_21,ABI symbol tags +@anchor{topics/compatibility id23}@anchor{15e}@anchor{topics/compatibility libgccjit-abi-22}@anchor{f0} @subsubsection @code{LIBGCCJIT_ABI_22} @@ -9204,6 +9222,24 @@ register name of a variable: @end itemize @end quotation +@node LIBGCCJIT_ABI_23,,LIBGCCJIT_ABI_22,ABI symbol tags +@anchor{topics/compatibility id24}@anchor{15f}@anchor{topics/compatibility libgccjit-abi-23}@anchor{70} +@subsubsection @code{LIBGCCJIT_ABI_23} + + +@code{LIBGCCJIT_ABI_23} covers the addition of an API entrypoint to hide stderr +logs: + +@quotation + + +@itemize * + +@item +@ref{6f,,gcc_jit_context_set_bool_print_errors_to_stderr()} +@end itemize +@end quotation + @c Copyright (C) 2015-2022 Free Software Foundation, Inc. @c Originally contributed by David Malcolm <dmalcolm@redhat.com> @c @@ -9222,7 +9258,7 @@ register name of a variable: @c <https://www.gnu.org/licenses/>. @node Performance,Using Assembly Language with libgccjit,ABI and API compatibility,Topic Reference -@anchor{topics/performance doc}@anchor{15d}@anchor{topics/performance performance}@anchor{15e} +@anchor{topics/performance doc}@anchor{160}@anchor{topics/performance performance}@anchor{161} @section Performance @@ -9232,14 +9268,14 @@ register name of a variable: @end menu @node The timing API,,,Performance -@anchor{topics/performance the-timing-api}@anchor{15f} +@anchor{topics/performance the-timing-api}@anchor{162} @subsection The timing API As of GCC 6, libgccjit exposes a timing API, for printing reports on how long was spent in different parts of code. -You can create a @ref{160,,gcc_jit_timer} instance, which will +You can create a @ref{163,,gcc_jit_timer} instance, which will measure time spent since its creation. The timer maintains a stack of “timer items”: as control flow moves through your code, you can push and pop named items relating to your code onto the stack, and the timer @@ -9337,7 +9373,7 @@ Client items: The exact format is intended to be human-readable, and is subject to change. @geindex LIBGCCJIT_HAVE_TIMING_API (C macro) -@anchor{topics/performance c LIBGCCJIT_HAVE_TIMING_API}@anchor{161} +@anchor{topics/performance c LIBGCCJIT_HAVE_TIMING_API}@anchor{164} @deffn {C Macro} LIBGCCJIT_HAVE_TIMING_API The timer API was added to libgccjit in GCC 6. @@ -9354,21 +9390,21 @@ gcc_jit_context_set_timer (ctxt, t); @end deffn @geindex gcc_jit_timer (C type) -@anchor{topics/performance c gcc_jit_timer}@anchor{160} +@anchor{topics/performance c gcc_jit_timer}@anchor{163} @deffn {C Type} gcc_jit_timer @end deffn @geindex gcc_jit_timer_new (C function) -@anchor{topics/performance c gcc_jit_timer_new}@anchor{13b} +@anchor{topics/performance c gcc_jit_timer_new}@anchor{13d} @deffn {C Function} gcc_jit_timer * gcc_jit_timer_new (void) -Create a @ref{160,,gcc_jit_timer} instance, and start timing: +Create a @ref{163,,gcc_jit_timer} instance, and start timing: @example gcc_jit_timer *t = gcc_jit_timer_new (); @end example -This API entrypoint was added in @ref{138,,LIBGCCJIT_ABI_4}; you can test +This API entrypoint was added in @ref{13a,,LIBGCCJIT_ABI_4}; you can test for its presence using @example @@ -9377,10 +9413,10 @@ for its presence using @end deffn @geindex gcc_jit_timer_release (C function) -@anchor{topics/performance c gcc_jit_timer_release}@anchor{13c} +@anchor{topics/performance c gcc_jit_timer_release}@anchor{13e} @deffn {C Function} void gcc_jit_timer_release (gcc_jit_timer@w{ }*timer) -Release a @ref{160,,gcc_jit_timer} instance: +Release a @ref{163,,gcc_jit_timer} instance: @example gcc_jit_timer_release (t); @@ -9388,7 +9424,7 @@ gcc_jit_timer_release (t); This should be called exactly once on a timer. -This API entrypoint was added in @ref{138,,LIBGCCJIT_ABI_4}; you can test +This API entrypoint was added in @ref{13a,,LIBGCCJIT_ABI_4}; you can test for its presence using @example @@ -9397,10 +9433,10 @@ for its presence using @end deffn @geindex gcc_jit_context_set_timer (C function) -@anchor{topics/performance c gcc_jit_context_set_timer}@anchor{13a} +@anchor{topics/performance c gcc_jit_context_set_timer}@anchor{13c} @deffn {C Function} void gcc_jit_context_set_timer (gcc_jit_context@w{ }*ctxt, gcc_jit_timer@w{ }*timer) -Associate a @ref{160,,gcc_jit_timer} instance with a context: +Associate a @ref{163,,gcc_jit_timer} instance with a context: @example gcc_jit_context_set_timer (ctxt, t); @@ -9413,7 +9449,7 @@ Timers have no locking, so if you have a multithreaded program, you must provide your own locks if more than one thread could be working with the same timer via timer-associated contexts. -This API entrypoint was added in @ref{138,,LIBGCCJIT_ABI_4}; you can test +This API entrypoint was added in @ref{13a,,LIBGCCJIT_ABI_4}; you can test for its presence using @example @@ -9422,12 +9458,12 @@ for its presence using @end deffn @geindex gcc_jit_context_get_timer (C function) -@anchor{topics/performance c gcc_jit_context_get_timer}@anchor{139} +@anchor{topics/performance c gcc_jit_context_get_timer}@anchor{13b} @deffn {C Function} gcc_jit_timer *gcc_jit_context_get_timer (gcc_jit_context@w{ }*ctxt) Get the timer associated with a context (if any). -This API entrypoint was added in @ref{138,,LIBGCCJIT_ABI_4}; you can test +This API entrypoint was added in @ref{13a,,LIBGCCJIT_ABI_4}; you can test for its presence using @example @@ -9436,7 +9472,7 @@ for its presence using @end deffn @geindex gcc_jit_timer_push (C function) -@anchor{topics/performance c gcc_jit_timer_push}@anchor{13d} +@anchor{topics/performance c gcc_jit_timer_push}@anchor{13f} @deffn {C Function} void gcc_jit_timer_push (gcc_jit_timer@w{ }*timer, const char@w{ }*item_name) Push the given item onto the timer’s stack: @@ -9447,7 +9483,7 @@ run_the_code (ctxt, result); gcc_jit_timer_pop (t, "running code"); @end example -This API entrypoint was added in @ref{138,,LIBGCCJIT_ABI_4}; you can test +This API entrypoint was added in @ref{13a,,LIBGCCJIT_ABI_4}; you can test for its presence using @example @@ -9456,7 +9492,7 @@ for its presence using @end deffn @geindex gcc_jit_timer_pop (C function) -@anchor{topics/performance c gcc_jit_timer_pop}@anchor{13e} +@anchor{topics/performance c gcc_jit_timer_pop}@anchor{140} @deffn {C Function} void gcc_jit_timer_pop (gcc_jit_timer@w{ }*timer, const char@w{ }*item_name) Pop the top item from the timer’s stack. @@ -9464,7 +9500,7 @@ Pop the top item from the timer’s stack. If “item_name” is provided, it must match that of the top item. Alternatively, @code{NULL} can be passed in, to suppress checking. -This API entrypoint was added in @ref{138,,LIBGCCJIT_ABI_4}; you can test +This API entrypoint was added in @ref{13a,,LIBGCCJIT_ABI_4}; you can test for its presence using @example @@ -9473,13 +9509,13 @@ for its presence using @end deffn @geindex gcc_jit_timer_print (C function) -@anchor{topics/performance c gcc_jit_timer_print}@anchor{13f} +@anchor{topics/performance c gcc_jit_timer_print}@anchor{141} @deffn {C Function} void gcc_jit_timer_print (gcc_jit_timer@w{ }*timer, FILE@w{ }*f_out) Print timing information to the given stream about activity since the timer was started. -This API entrypoint was added in @ref{138,,LIBGCCJIT_ABI_4}; you can test +This API entrypoint was added in @ref{13a,,LIBGCCJIT_ABI_4}; you can test for its presence using @example @@ -9505,7 +9541,7 @@ for its presence using @c <https://www.gnu.org/licenses/>. @node Using Assembly Language with libgccjit,,Performance,Topic Reference -@anchor{topics/asm doc}@anchor{162}@anchor{topics/asm using-assembly-language-with-libgccjit}@anchor{163} +@anchor{topics/asm doc}@anchor{165}@anchor{topics/asm using-assembly-language-with-libgccjit}@anchor{166} @section Using Assembly Language with libgccjit @@ -9515,7 +9551,7 @@ following assumes a familiarity with that functionality. See How to Use Inline Assembly Language in C Code@footnote{https://gcc.gnu.org/onlinedocs/gcc/Using-Assembly-Language-with-C.html} in GCC’s documentation, the “Extended Asm” section in particular. -These entrypoints were added in @ref{14c,,LIBGCCJIT_ABI_15}; you can test +These entrypoints were added in @ref{14e,,LIBGCCJIT_ABI_15}; you can test for their presence using @quotation @@ -9532,12 +9568,12 @@ for their presence using @end menu @node Adding assembler instructions within a function,Adding top-level assembler statements,,Using Assembly Language with libgccjit -@anchor{topics/asm adding-assembler-instructions-within-a-function}@anchor{164} +@anchor{topics/asm adding-assembler-instructions-within-a-function}@anchor{167} @subsection Adding assembler instructions within a function @geindex gcc_jit_extended_asm (C type) -@anchor{topics/asm c gcc_jit_extended_asm}@anchor{11b} +@anchor{topics/asm c gcc_jit_extended_asm}@anchor{11d} @deffn {C Type} gcc_jit_extended_asm A @cite{gcc_jit_extended_asm} represents an extended @code{asm} statement: a @@ -9546,21 +9582,21 @@ to outputs. To avoid having an API entrypoint with a very large number of parameters, an extended @code{asm} statement is made in stages: -an initial call to create the @ref{11b,,gcc_jit_extended_asm}, +an initial call to create the @ref{11d,,gcc_jit_extended_asm}, followed by calls to add operands and set other properties of the statement. -There are two API entrypoints for creating a @ref{11b,,gcc_jit_extended_asm}: +There are two API entrypoints for creating a @ref{11d,,gcc_jit_extended_asm}: @itemize * @item -@ref{14d,,gcc_jit_block_add_extended_asm()} for an @code{asm} statement with +@ref{14f,,gcc_jit_block_add_extended_asm()} for an @code{asm} statement with no control flow, and @item -@ref{14e,,gcc_jit_block_end_with_extended_asm_goto()} for an @code{asm goto}. +@ref{150,,gcc_jit_block_end_with_extended_asm_goto()} for an @code{asm goto}. @end itemize For example, to create the equivalent of: @@ -9591,8 +9627,8 @@ extended @code{asm} statement (e.g. the @code{%0} and @code{%1} above), the equivalent to the C syntax is followed i.e. all output operands, then all input operands, regardless of what order the calls to -@ref{152,,gcc_jit_extended_asm_add_output_operand()} and -@ref{153,,gcc_jit_extended_asm_add_input_operand()} were made in. +@ref{154,,gcc_jit_extended_asm_add_output_operand()} and +@ref{155,,gcc_jit_extended_asm_add_input_operand()} were made in. @end quotation @end cartouche @@ -9620,10 +9656,10 @@ the following API calls could be used: @end deffn @geindex gcc_jit_block_add_extended_asm (C function) -@anchor{topics/asm c gcc_jit_block_add_extended_asm}@anchor{14d} +@anchor{topics/asm c gcc_jit_block_add_extended_asm}@anchor{14f} @deffn {C Function} gcc_jit_extended_asm * gcc_jit_block_add_extended_asm (gcc_jit_block@w{ }*block, gcc_jit_location@w{ }*loc, const char@w{ }*asm_template) -Create a @ref{11b,,gcc_jit_extended_asm} for an extended @code{asm} statement +Create a @ref{11d,,gcc_jit_extended_asm} for an extended @code{asm} statement with no control flow (i.e. without the @code{goto} qualifier). The parameter @code{asm_template} corresponds to the @cite{AssemblerTemplate} @@ -9633,10 +9669,10 @@ an on-stack buffer. @end deffn @geindex gcc_jit_block_end_with_extended_asm_goto (C function) -@anchor{topics/asm c gcc_jit_block_end_with_extended_asm_goto}@anchor{14e} +@anchor{topics/asm c gcc_jit_block_end_with_extended_asm_goto}@anchor{150} @deffn {C Function} gcc_jit_extended_asm * gcc_jit_block_end_with_extended_asm_goto (gcc_jit_block@w{ }*block, gcc_jit_location@w{ }*loc, const char@w{ }*asm_template, int@w{ }num_goto_blocks, gcc_jit_block@w{ }**goto_blocks, gcc_jit_block@w{ }*fallthrough_block) -Create a @ref{11b,,gcc_jit_extended_asm} for an extended @code{asm} statement +Create a @ref{11d,,gcc_jit_extended_asm} for an extended @code{asm} statement that may perform jumps, and use it to terminate the given block. This is equivalent to the @code{goto} qualifier in C’s extended @code{asm} syntax. @@ -9699,10 +9735,10 @@ would have happened in the C case. @end deffn @geindex gcc_jit_extended_asm_set_volatile_flag (C function) -@anchor{topics/asm c gcc_jit_extended_asm_set_volatile_flag}@anchor{150} +@anchor{topics/asm c gcc_jit_extended_asm_set_volatile_flag}@anchor{152} @deffn {C Function} void gcc_jit_extended_asm_set_volatile_flag (gcc_jit_extended_asm@w{ }*ext_asm, int@w{ }flag) -Set whether the @ref{11b,,gcc_jit_extended_asm} has side-effects, equivalent to the +Set whether the @ref{11d,,gcc_jit_extended_asm} has side-effects, equivalent to the volatile@footnote{https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html#Volatile} qualifier in C’s extended asm syntax. @@ -9731,11 +9767,11 @@ the following API calls could be used: gcc_jit_extended_asm_add_clobber (ext_asm, "rdx"); @end example -where the @ref{11b,,gcc_jit_extended_asm} is flagged as volatile. +where the @ref{11d,,gcc_jit_extended_asm} is flagged as volatile. @end deffn @geindex gcc_jit_extended_asm_set_inline_flag (C function) -@anchor{topics/asm c gcc_jit_extended_asm_set_inline_flag}@anchor{151} +@anchor{topics/asm c gcc_jit_extended_asm_set_inline_flag}@anchor{153} @deffn {C Function} void gcc_jit_extended_asm_set_inline_flag (gcc_jit_extended_asm@w{ }*ext_asm, int@w{ }flag) Set the equivalent of the @@ -9744,7 +9780,7 @@ qualifier in C’s extended @code{asm} syntax. @end deffn @geindex gcc_jit_extended_asm_add_output_operand (C function) -@anchor{topics/asm c gcc_jit_extended_asm_add_output_operand}@anchor{152} +@anchor{topics/asm c gcc_jit_extended_asm_add_output_operand}@anchor{154} @deffn {C Function} void gcc_jit_extended_asm_add_output_operand (gcc_jit_extended_asm@w{ }*ext_asm, const char@w{ }*asm_symbolic_name, const char@w{ }*constraint, gcc_jit_lvalue@w{ }*dest) Add an output operand to the extended @code{asm} statement. See the @@ -9778,7 +9814,7 @@ section of GCC’s “Extended Asm” documentation. @end deffn @geindex gcc_jit_extended_asm_add_input_operand (C function) -@anchor{topics/asm c gcc_jit_extended_asm_add_input_operand}@anchor{153} +@anchor{topics/asm c gcc_jit_extended_asm_add_input_operand}@anchor{155} @deffn {C Function} void gcc_jit_extended_asm_add_input_operand (gcc_jit_extended_asm@w{ }*ext_asm, const char@w{ }*asm_symbolic_name, const char@w{ }*constraint, gcc_jit_rvalue@w{ }*src) Add an input operand to the extended @code{asm} statement. See the @@ -9809,7 +9845,7 @@ gcc_jit_extended_asm_add_input_operand (ext_asm, "aMask", "r", @end deffn @geindex gcc_jit_extended_asm_add_clobber (C function) -@anchor{topics/asm c gcc_jit_extended_asm_add_clobber}@anchor{154} +@anchor{topics/asm c gcc_jit_extended_asm_add_clobber}@anchor{156} @deffn {C Function} void gcc_jit_extended_asm_add_clobber (gcc_jit_extended_asm@w{ }*ext_asm, const char@w{ }*victim) Add @cite{victim} to the list of registers clobbered by the extended @code{asm} @@ -9829,18 +9865,18 @@ gcc_jit_extended_asm_add_clobber (ext_asm, "memory"); @end example @end deffn -A @ref{11b,,gcc_jit_extended_asm} is a @ref{e,,gcc_jit_object} “owned” by +A @ref{11d,,gcc_jit_extended_asm} is a @ref{e,,gcc_jit_object} “owned” by the block’s context. The following upcast is available: @geindex gcc_jit_extended_asm_as_object (C function) -@anchor{topics/asm c gcc_jit_extended_asm_as_object}@anchor{14f} +@anchor{topics/asm c gcc_jit_extended_asm_as_object}@anchor{151} @deffn {C Function} gcc_jit_object * gcc_jit_extended_asm_as_object (gcc_jit_extended_asm@w{ }*ext_asm) Upcast from extended @code{asm} to object. @end deffn @node Adding top-level assembler statements,,Adding assembler instructions within a function,Using Assembly Language with libgccjit -@anchor{topics/asm adding-top-level-assembler-statements}@anchor{165} +@anchor{topics/asm adding-top-level-assembler-statements}@anchor{168} @subsection Adding top-level assembler statements @@ -9849,7 +9885,7 @@ there is support for creating “top-level” assembler statements, outside of any function. @geindex gcc_jit_context_add_top_level_asm (C function) -@anchor{topics/asm c gcc_jit_context_add_top_level_asm}@anchor{155} +@anchor{topics/asm c gcc_jit_context_add_top_level_asm}@anchor{157} @deffn {C Function} void gcc_jit_context_add_top_level_asm (gcc_jit_context@w{ }*ctxt, gcc_jit_location@w{ }*loc, const char@w{ }*asm_stmts) Create a set of top-level asm statements, analogous to those created @@ -9902,7 +9938,7 @@ the following API calls could be used: @c <https://www.gnu.org/licenses/>. @node C++ bindings for libgccjit,Internals,Topic Reference,Top -@anchor{cp/index doc}@anchor{166}@anchor{cp/index c-bindings-for-libgccjit}@anchor{167} +@anchor{cp/index doc}@anchor{169}@anchor{cp/index c-bindings-for-libgccjit}@anchor{16a} @chapter C++ bindings for libgccjit @@ -9942,7 +9978,7 @@ Contents: @end menu @node Tutorial<2>,Topic Reference<2>,,C++ bindings for libgccjit -@anchor{cp/intro/index doc}@anchor{168}@anchor{cp/intro/index tutorial}@anchor{169} +@anchor{cp/intro/index doc}@anchor{16b}@anchor{cp/intro/index tutorial}@anchor{16c} @section Tutorial @@ -9972,7 +10008,7 @@ Contents: @end menu @node Tutorial part 1 “Hello world”<2>,Tutorial part 2 Creating a trivial machine code function<2>,,Tutorial<2> -@anchor{cp/intro/tutorial01 doc}@anchor{16a}@anchor{cp/intro/tutorial01 tutorial-part-1-hello-world}@anchor{16b} +@anchor{cp/intro/tutorial01 doc}@anchor{16d}@anchor{cp/intro/tutorial01 tutorial-part-1-hello-world}@anchor{16e} @subsection Tutorial part 1: “Hello world” @@ -10135,7 +10171,7 @@ hello world @c <https://www.gnu.org/licenses/>. @node Tutorial part 2 Creating a trivial machine code function<2>,Tutorial part 3 Loops and variables<2>,Tutorial part 1 “Hello world”<2>,Tutorial<2> -@anchor{cp/intro/tutorial02 doc}@anchor{16c}@anchor{cp/intro/tutorial02 tutorial-part-2-creating-a-trivial-machine-code-function}@anchor{16d} +@anchor{cp/intro/tutorial02 doc}@anchor{16f}@anchor{cp/intro/tutorial02 tutorial-part-2-creating-a-trivial-machine-code-function}@anchor{170} @subsection Tutorial part 2: Creating a trivial machine code function @@ -10157,10 +10193,10 @@ First we need to include the relevant header: @end example All state associated with compilation is associated with a -@ref{16e,,gccjit;;context}, which is a thin C++ wrapper around the C API’s +@ref{171,,gccjit;;context}, which is a thin C++ wrapper around the C API’s @ref{8,,gcc_jit_context *}. -Create one using @ref{16f,,gccjit;;context;;acquire()}: +Create one using @ref{172,,gccjit;;context;;acquire()}: @example gccjit::context ctxt; @@ -10170,19 +10206,19 @@ ctxt = gccjit::context::acquire (); The JIT library has a system of types. It is statically-typed: every expression is of a specific type, fixed at compile-time. In our example, all of the expressions are of the C @cite{int} type, so let’s obtain this from -the context, as a @ref{170,,gccjit;;type}, using -@ref{171,,gccjit;;context;;get_type()}: +the context, as a @ref{173,,gccjit;;type}, using +@ref{174,,gccjit;;context;;get_type()}: @example gccjit::type int_type = ctxt.get_type (GCC_JIT_TYPE_INT); @end example -@ref{170,,gccjit;;type} is an example of a “contextual” object: every -entity in the API is associated with a @ref{16e,,gccjit;;context}. +@ref{173,,gccjit;;type} is an example of a “contextual” object: every +entity in the API is associated with a @ref{171,,gccjit;;context}. Memory management is easy: all such “contextual” objects are automatically cleaned up for you when the context is released, using -@ref{172,,gccjit;;context;;release()}: +@ref{175,,gccjit;;context;;release()}: @example ctxt.release (); @@ -10209,9 +10245,9 @@ The C++ class hierarchy within the @code{gccjit} namespace looks like this: +- param @end example -One thing you can do with a @ref{173,,gccjit;;object} is +One thing you can do with a @ref{176,,gccjit;;object} is to ask it for a human-readable description as a @code{std::string}, using -@ref{174,,gccjit;;object;;get_debug_string()}: +@ref{177,,gccjit;;object;;get_debug_string()}: @example printf ("obj: %s\n", obj.get_debug_string ().c_str ()); @@ -10227,7 +10263,7 @@ This is invaluable when debugging. Let’s create the function. To do so, we first need to construct its single parameter, specifying its type and giving it a name, -using @ref{175,,gccjit;;context;;new_param()}: +using @ref{178,,gccjit;;context;;new_param()}: @example gccjit::param param_i = ctxt.new_param (int_type, "i"); @@ -10268,7 +10304,7 @@ gccjit::block block = func.new_block (); Our basic block is relatively simple: it immediately terminates by returning the value of an expression. -We can build the expression using @ref{176,,gccjit;;context;;new_binary_op()}: +We can build the expression using @ref{179,,gccjit;;context;;new_binary_op()}: @example gccjit::rvalue expr = @@ -10277,9 +10313,9 @@ gccjit::rvalue expr = param_i, param_i); @end example -A @ref{177,,gccjit;;rvalue} is another example of a -@ref{173,,gccjit;;object} subclass. As before, we can print it with -@ref{174,,gccjit;;object;;get_debug_string()}. +A @ref{17a,,gccjit;;rvalue} is another example of a +@ref{176,,gccjit;;object} subclass. As before, we can print it with +@ref{177,,gccjit;;object;;get_debug_string()}. @example printf ("expr: %s\n", expr.get_debug_string ().c_str ()); @@ -10291,7 +10327,7 @@ giving this output: expr: i * i @end example -Note that @ref{177,,gccjit;;rvalue} provides numerous overloaded operators +Note that @ref{17a,,gccjit;;rvalue} provides numerous overloaded operators which can be used to dramatically reduce the amount of typing needed. We can build the above binary operation more directly with this one-liner: @@ -10308,7 +10344,7 @@ block.end_with_return (expr); @end example OK, we’ve populated the context. We can now compile it using -@ref{178,,gccjit;;context;;compile()}: +@ref{17b,,gccjit;;context;;compile()}: @example gcc_jit_result *result; @@ -10350,12 +10386,12 @@ result: 25 @end menu @node Options<3>,Full example<3>,,Tutorial part 2 Creating a trivial machine code function<2> -@anchor{cp/intro/tutorial02 options}@anchor{179} +@anchor{cp/intro/tutorial02 options}@anchor{17c} @subsubsection Options To get more information on what’s going on, you can set debugging flags -on the context using @ref{17a,,gccjit;;context;;set_bool_option()}. +on the context using @ref{17d,,gccjit;;context;;set_bool_option()}. @c (I'm deliberately not mentioning @c :c:macro:`GCC_JIT_BOOL_OPTION_DUMP_INITIAL_TREE` here since I think @@ -10419,7 +10455,7 @@ square: By default, no optimizations are performed, the equivalent of GCC’s @cite{-O0} option. We can turn things up to e.g. @cite{-O3} by calling -@ref{17b,,gccjit;;context;;set_int_option()} with +@ref{17e,,gccjit;;context;;set_int_option()} with @ref{1f,,GCC_JIT_INT_OPTION_OPTIMIZATION_LEVEL}: @example @@ -10449,7 +10485,7 @@ square: Naturally this has only a small effect on such a trivial function. @node Full example<3>,,Options<3>,Tutorial part 2 Creating a trivial machine code function<2> -@anchor{cp/intro/tutorial02 full-example}@anchor{17c} +@anchor{cp/intro/tutorial02 full-example}@anchor{17f} @subsubsection Full example @@ -10587,7 +10623,7 @@ result: 25 @c <https://www.gnu.org/licenses/>. @node Tutorial part 3 Loops and variables<2>,Tutorial part 4 Adding JIT-compilation to a toy interpreter<2>,Tutorial part 2 Creating a trivial machine code function<2>,Tutorial<2> -@anchor{cp/intro/tutorial03 doc}@anchor{17d}@anchor{cp/intro/tutorial03 tutorial-part-3-loops-and-variables}@anchor{17e} +@anchor{cp/intro/tutorial03 doc}@anchor{180}@anchor{cp/intro/tutorial03 tutorial-part-3-loops-and-variables}@anchor{181} @subsection Tutorial part 3: Loops and variables @@ -10643,7 +10679,7 @@ Here’s what the final control flow graph will look like: @end quotation As before, we include the libgccjit++ header and make a -@ref{16e,,gccjit;;context}. +@ref{171,,gccjit;;context}. @example #include <libgccjit++.h> @@ -10697,18 +10733,18 @@ gccjit::function func = @end menu @node Expressions lvalues and rvalues<2>,Control flow<2>,,Tutorial part 3 Loops and variables<2> -@anchor{cp/intro/tutorial03 expressions-lvalues-and-rvalues}@anchor{17f} +@anchor{cp/intro/tutorial03 expressions-lvalues-and-rvalues}@anchor{182} @subsubsection Expressions: lvalues and rvalues -The base class of expression is the @ref{177,,gccjit;;rvalue}, +The base class of expression is the @ref{17a,,gccjit;;rvalue}, representing an expression that can be on the @emph{right}-hand side of an assignment: a value that can be computed somehow, and assigned @emph{to} a storage area (such as a variable). It has a specific -@ref{170,,gccjit;;type}. +@ref{173,,gccjit;;type}. -Anothe important class is @ref{180,,gccjit;;lvalue}. -A @ref{180,,gccjit;;lvalue}. is something that can of the @emph{left}-hand +Anothe important class is @ref{183,,gccjit;;lvalue}. +A @ref{183,,gccjit;;lvalue}. is something that can of the @emph{left}-hand side of an assignment: a storage area (such as a variable). In other words, every assignment can be thought of as: @@ -10717,8 +10753,8 @@ In other words, every assignment can be thought of as: LVALUE = RVALUE; @end example -Note that @ref{180,,gccjit;;lvalue} is a subclass of -@ref{177,,gccjit;;rvalue}, where in an assignment of the form: +Note that @ref{183,,gccjit;;lvalue} is a subclass of +@ref{17a,,gccjit;;rvalue}, where in an assignment of the form: @example LVALUE_A = LVALUE_B; @@ -10748,7 +10784,7 @@ gccjit::rvalue expr = gccjit::rvalue expr = param_i * param_i; @end example -which is a @ref{177,,gccjit;;rvalue}, and +which is a @ref{17a,,gccjit;;rvalue}, and @end quotation @@ -10756,15 +10792,15 @@ which is a @ref{177,,gccjit;;rvalue}, and @item the various function parameters: @cite{param_i} and @cite{param_n}, instances of -@ref{181,,gccjit;;param}, which is a subclass of @ref{180,,gccjit;;lvalue} -(and, in turn, of @ref{177,,gccjit;;rvalue}): +@ref{184,,gccjit;;param}, which is a subclass of @ref{183,,gccjit;;lvalue} +(and, in turn, of @ref{17a,,gccjit;;rvalue}): we can both read from and write to function parameters within the body of a function. @end enumerate Our new example has a new kind of expression: we have two local variables. We create them by calling -@ref{182,,gccjit;;function;;new_local()}, supplying a type and a name: +@ref{185,,gccjit;;function;;new_local()}, supplying a type and a name: @example /* Build locals: */ @@ -10772,7 +10808,7 @@ gccjit::lvalue i = func.new_local (the_type, "i"); gccjit::lvalue sum = func.new_local (the_type, "sum"); @end example -These are instances of @ref{180,,gccjit;;lvalue} - they can be read from +These are instances of @ref{183,,gccjit;;lvalue} - they can be read from and written to. Note that there is no precanned way to create @emph{and} initialize a variable @@ -10786,7 +10822,7 @@ Instead, having added the local to the function, we have to separately add an assignment of @cite{0} to @cite{local_i} at the beginning of the function. @node Control flow<2>,Visualizing the control flow graph<2>,Expressions lvalues and rvalues<2>,Tutorial part 3 Loops and variables<2> -@anchor{cp/intro/tutorial03 control-flow}@anchor{183} +@anchor{cp/intro/tutorial03 control-flow}@anchor{186} @subsubsection Control flow @@ -10809,8 +10845,8 @@ the body of the loop after the loop terminates (@cite{return sum}) @end enumerate -so we create these as @ref{184,,gccjit;;block} instances within the -@ref{185,,gccjit;;function}: +so we create these as @ref{187,,gccjit;;block} instances within the +@ref{188,,gccjit;;function}: @example gccjit::block b_initial = func.new_block ("initial"); @@ -10823,8 +10859,8 @@ We now populate each block with statements. The entry block @cite{b_initial} consists of initializations followed by a jump to the conditional. We assign @cite{0} to @cite{i} and to @cite{sum}, using -@ref{186,,gccjit;;block;;add_assignment()} to add -an assignment statement, and using @ref{187,,gccjit;;context;;zero()} to get +@ref{189,,gccjit;;block;;add_assignment()} to add +an assignment statement, and using @ref{18a,,gccjit;;context;;zero()} to get the constant value @cite{0} for the relevant type for the right-hand side of the assignment: @@ -10845,9 +10881,9 @@ b_initial.end_with_jump (b_loop_cond); The conditional block is equivalent to the line @cite{while (i < n)} from our C example. It contains a single statement: a conditional, which jumps to one of two destination blocks depending on a boolean -@ref{177,,gccjit;;rvalue}, in this case the comparison of @cite{i} and @cite{n}. +@ref{17a,,gccjit;;rvalue}, in this case the comparison of @cite{i} and @cite{n}. -We could build the comparison using @ref{188,,gccjit;;context;;new_comparison()}: +We could build the comparison using @ref{18b,,gccjit;;context;;new_comparison()}: @example gccjit::rvalue guard = @@ -10856,7 +10892,7 @@ gccjit::rvalue guard = @end example and can then use this to add @cite{b_loop_cond}’s sole statement, via -@ref{189,,gccjit;;block;;end_with_conditional()}: +@ref{18c,,gccjit;;block;;end_with_conditional()}: @example b_loop_cond.end_with_conditional (guard, @@ -10864,7 +10900,7 @@ b_loop_cond.end_with_conditional (guard, b_loop_body); // on_false @end example -However @ref{177,,gccjit;;rvalue} has overloaded operators for this, so we +However @ref{17a,,gccjit;;rvalue} has overloaded operators for this, so we express the conditional as @example @@ -10884,7 +10920,7 @@ Next, we populate the body of the loop. The C statement @cite{sum += i * i;} is an assignment operation, where an lvalue is modified “in-place”. We use -@ref{18a,,gccjit;;block;;add_assignment_op()} to handle these operations: +@ref{18d,,gccjit;;block;;add_assignment_op()} to handle these operations: @example /* sum += i * i */ @@ -10908,7 +10944,7 @@ b_loop_body.add_assignment_op (i, @cartouche @quotation Note For numeric constants other than 0 or 1, we could use -@ref{18b,,gccjit;;context;;new_rvalue()}, which has overloads +@ref{18e,,gccjit;;context;;new_rvalue()}, which has overloads for both @code{int} and @code{double}. @end quotation @end cartouche @@ -10974,12 +11010,12 @@ result: 285 @end example @node Visualizing the control flow graph<2>,Full example<4>,Control flow<2>,Tutorial part 3 Loops and variables<2> -@anchor{cp/intro/tutorial03 visualizing-the-control-flow-graph}@anchor{18c} +@anchor{cp/intro/tutorial03 visualizing-the-control-flow-graph}@anchor{18f} @subsubsection Visualizing the control flow graph You can see the control flow graph of a function using -@ref{18d,,gccjit;;function;;dump_to_dot()}: +@ref{190,,gccjit;;function;;dump_to_dot()}: @example func.dump_to_dot ("/tmp/sum-of-squares.dot"); @@ -11009,7 +11045,7 @@ install it with @cite{yum install python-xdot}): @end quotation @node Full example<4>,,Visualizing the control flow graph<2>,Tutorial part 3 Loops and variables<2> -@anchor{cp/intro/tutorial03 full-example}@anchor{18e} +@anchor{cp/intro/tutorial03 full-example}@anchor{191} @subsubsection Full example @@ -11187,7 +11223,7 @@ loop_test returned: 285 @c <https://www.gnu.org/licenses/>. @node Tutorial part 4 Adding JIT-compilation to a toy interpreter<2>,,Tutorial part 3 Loops and variables<2>,Tutorial<2> -@anchor{cp/intro/tutorial04 doc}@anchor{18f}@anchor{cp/intro/tutorial04 tutorial-part-4-adding-jit-compilation-to-a-toy-interpreter}@anchor{190} +@anchor{cp/intro/tutorial04 doc}@anchor{192}@anchor{cp/intro/tutorial04 tutorial-part-4-adding-jit-compilation-to-a-toy-interpreter}@anchor{193} @subsection Tutorial part 4: Adding JIT-compilation to a toy interpreter @@ -11209,7 +11245,7 @@ to it. @end menu @node Our toy interpreter<2>,Compiling to machine code<2>,,Tutorial part 4 Adding JIT-compilation to a toy interpreter<2> -@anchor{cp/intro/tutorial04 our-toy-interpreter}@anchor{191} +@anchor{cp/intro/tutorial04 our-toy-interpreter}@anchor{194} @subsubsection Our toy interpreter @@ -11611,7 +11647,7 @@ toyvm_function::interpret (int arg, FILE *trace) @end quotation @node Compiling to machine code<2>,Setting things up<2>,Our toy interpreter<2>,Tutorial part 4 Adding JIT-compilation to a toy interpreter<2> -@anchor{cp/intro/tutorial04 compiling-to-machine-code}@anchor{192} +@anchor{cp/intro/tutorial04 compiling-to-machine-code}@anchor{195} @subsubsection Compiling to machine code @@ -11681,7 +11717,7 @@ This means our compiler has the following state: @end quotation @node Setting things up<2>,Populating the function<2>,Compiling to machine code<2>,Tutorial part 4 Adding JIT-compilation to a toy interpreter<2> -@anchor{cp/intro/tutorial04 setting-things-up}@anchor{193} +@anchor{cp/intro/tutorial04 setting-things-up}@anchor{196} @subsubsection Setting things up @@ -11771,7 +11807,7 @@ compilation_state::add_pop (gccjit::block block, @end quotation We will support single-stepping through the generated code in the -debugger, so we need to create @ref{194,,gccjit;;location} instances, one +debugger, so we need to create @ref{197,,gccjit;;location} instances, one per operation in the source code. These will reference the lines of e.g. @code{factorial.toy}. @@ -11831,7 +11867,7 @@ We create the locals within the function. @end quotation @node Populating the function<2>,Verifying the control flow graph<2>,Setting things up<2>,Tutorial part 4 Adding JIT-compilation to a toy interpreter<2> -@anchor{cp/intro/tutorial04 populating-the-function}@anchor{195} +@anchor{cp/intro/tutorial04 populating-the-function}@anchor{198} @subsubsection Populating the function @@ -11944,7 +11980,7 @@ stack into @code{y} instead erroneously assigned it to @code{x}, leaving @code{y uninitialized. To track this kind of thing down, we can use -@ref{196,,gccjit;;block;;add_comment()} to add descriptive comments +@ref{199,,gccjit;;block;;add_comment()} to add descriptive comments to the internal representation. This is invaluable when looking through the generated IR for, say @code{factorial}: @@ -12084,14 +12120,14 @@ to the next block. This is analogous to simply incrementing the program counter. @node Verifying the control flow graph<2>,Compiling the context<2>,Populating the function<2>,Tutorial part 4 Adding JIT-compilation to a toy interpreter<2> -@anchor{cp/intro/tutorial04 verifying-the-control-flow-graph}@anchor{197} +@anchor{cp/intro/tutorial04 verifying-the-control-flow-graph}@anchor{19a} @subsubsection Verifying the control flow graph Having finished looping over the blocks, the context is complete. As before, we can verify that the control flow and statements are sane by -using @ref{18d,,gccjit;;function;;dump_to_dot()}: +using @ref{190,,gccjit;;function;;dump_to_dot()}: @example fn.dump_to_dot ("/tmp/factorial.dot"); @@ -12113,7 +12149,7 @@ errors in our compiler. @end quotation @node Compiling the context<2>,Single-stepping through the generated code<2>,Verifying the control flow graph<2>,Tutorial part 4 Adding JIT-compilation to a toy interpreter<2> -@anchor{cp/intro/tutorial04 compiling-the-context}@anchor{198} +@anchor{cp/intro/tutorial04 compiling-the-context}@anchor{19b} @subsubsection Compiling the context @@ -12164,7 +12200,7 @@ private: @end quotation @node Single-stepping through the generated code<2>,Examining the generated code<2>,Compiling the context<2>,Tutorial part 4 Adding JIT-compilation to a toy interpreter<2> -@anchor{cp/intro/tutorial04 single-stepping-through-the-generated-code}@anchor{199} +@anchor{cp/intro/tutorial04 single-stepping-through-the-generated-code}@anchor{19c} @subsubsection Single-stepping through the generated code @@ -12178,14 +12214,14 @@ It’s possible to debug the generated code. To do this we need to both: @item Set up source code locations for our statements, so that we can meaningfully step through the code. We did this above by -calling @ref{19a,,gccjit;;context;;new_location()} and using the +calling @ref{19d,,gccjit;;context;;new_location()} and using the results. @item Enable the generation of debugging information, by setting @ref{42,,GCC_JIT_BOOL_OPTION_DEBUGINFO} on the -@ref{16e,,gccjit;;context} via -@ref{17a,,gccjit;;context;;set_bool_option()}: +@ref{171,,gccjit;;context} via +@ref{17d,,gccjit;;context;;set_bool_option()}: @example ctxt.set_bool_option (GCC_JIT_BOOL_OPTION_DEBUGINFO, 1); @@ -12249,14 +12285,14 @@ optimization level in a regular compiler. @end cartouche @node Examining the generated code<2>,Putting it all together<2>,Single-stepping through the generated code<2>,Tutorial part 4 Adding JIT-compilation to a toy interpreter<2> -@anchor{cp/intro/tutorial04 examining-the-generated-code}@anchor{19b} +@anchor{cp/intro/tutorial04 examining-the-generated-code}@anchor{19e} @subsubsection Examining the generated code How good is the optimized code? We can turn up optimizations, by calling -@ref{17b,,gccjit;;context;;set_int_option()} with +@ref{17e,,gccjit;;context;;set_int_option()} with @ref{1f,,GCC_JIT_INT_OPTION_OPTIMIZATION_LEVEL}: @example @@ -12424,7 +12460,7 @@ Note that the stack pushing and popping have been eliminated, as has the recursive call (in favor of an iteration). @node Putting it all together<2>,Behind the curtain How does our code get optimized?<2>,Examining the generated code<2>,Tutorial part 4 Adding JIT-compilation to a toy interpreter<2> -@anchor{cp/intro/tutorial04 putting-it-all-together}@anchor{19c} +@anchor{cp/intro/tutorial04 putting-it-all-together}@anchor{19f} @subsubsection Putting it all together @@ -12455,7 +12491,7 @@ compiler result: 55 @end example @node Behind the curtain How does our code get optimized?<2>,,Putting it all together<2>,Tutorial part 4 Adding JIT-compilation to a toy interpreter<2> -@anchor{cp/intro/tutorial04 behind-the-curtain-how-does-our-code-get-optimized}@anchor{19d} +@anchor{cp/intro/tutorial04 behind-the-curtain-how-does-our-code-get-optimized}@anchor{1a0} @subsubsection Behind the curtain: How does our code get optimized? @@ -12633,7 +12669,7 @@ instr9: @} @end example -Note in the above how all the @ref{184,,gccjit;;block} instances we +Note in the above how all the @ref{187,,gccjit;;block} instances we created have been consolidated into just 3 blocks in GCC’s internal representation: @code{initial}, @code{instr4} and @code{instr9}. @@ -12644,7 +12680,7 @@ representation: @code{initial}, @code{instr4} and @code{instr9}. @end menu @node Optimizing away stack manipulation<2>,Elimination of tail recursion<2>,,Behind the curtain How does our code get optimized?<2> -@anchor{cp/intro/tutorial04 optimizing-away-stack-manipulation}@anchor{19e} +@anchor{cp/intro/tutorial04 optimizing-away-stack-manipulation}@anchor{1a1} @subsubsection Optimizing away stack manipulation @@ -12908,7 +12944,7 @@ instr9: @end example @node Elimination of tail recursion<2>,,Optimizing away stack manipulation<2>,Behind the curtain How does our code get optimized?<2> -@anchor{cp/intro/tutorial04 elimination-of-tail-recursion}@anchor{19f} +@anchor{cp/intro/tutorial04 elimination-of-tail-recursion}@anchor{1a2} @subsubsection Elimination of tail recursion @@ -12991,7 +13027,7 @@ instr9: @c <https://www.gnu.org/licenses/>. @node Topic Reference<2>,,Tutorial<2>,C++ bindings for libgccjit -@anchor{cp/topics/index doc}@anchor{1a0}@anchor{cp/topics/index topic-reference}@anchor{1a1} +@anchor{cp/topics/index doc}@anchor{1a3}@anchor{cp/topics/index topic-reference}@anchor{1a4} @section Topic Reference @@ -13025,22 +13061,22 @@ instr9: @end menu @node Compilation contexts<2>,Objects<2>,,Topic Reference<2> -@anchor{cp/topics/contexts doc}@anchor{1a2}@anchor{cp/topics/contexts compilation-contexts}@anchor{1a3} +@anchor{cp/topics/contexts doc}@anchor{1a5}@anchor{cp/topics/contexts compilation-contexts}@anchor{1a6} @subsection Compilation contexts @geindex gccjit;;context (C++ class) -@anchor{cp/topics/contexts _CPPv4N6gccjit7contextE}@anchor{16e}@anchor{cp/topics/contexts _CPPv3N6gccjit7contextE}@anchor{1a4}@anchor{cp/topics/contexts _CPPv2N6gccjit7contextE}@anchor{1a5}@anchor{cp/topics/contexts gccjit context}@anchor{1a6} +@anchor{cp/topics/contexts _CPPv4N6gccjit7contextE}@anchor{171}@anchor{cp/topics/contexts _CPPv3N6gccjit7contextE}@anchor{1a7}@anchor{cp/topics/contexts _CPPv2N6gccjit7contextE}@anchor{1a8}@anchor{cp/topics/contexts gccjit context}@anchor{1a9} @deffn {C++ Class} gccjit::context @end deffn -The top-level of the C++ API is the @ref{16e,,gccjit;;context} type. +The top-level of the C++ API is the @ref{171,,gccjit;;context} type. -A @ref{16e,,gccjit;;context} instance encapsulates the state of a +A @ref{171,,gccjit;;context} instance encapsulates the state of a compilation. You can set up options on it, and add types, functions and code. -Invoking @ref{178,,gccjit;;context;;compile()} on it gives you a +Invoking @ref{17b,,gccjit;;context;;compile()} on it gives you a @ref{16,,gcc_jit_result *}. It is a thin wrapper around the C API’s @ref{8,,gcc_jit_context *}. @@ -13055,7 +13091,7 @@ It is a thin wrapper around the C API’s @ref{8,,gcc_jit_context *}. @end menu @node Lifetime-management<2>,Thread-safety<2>,,Compilation contexts<2> -@anchor{cp/topics/contexts lifetime-management}@anchor{1a7} +@anchor{cp/topics/contexts lifetime-management}@anchor{1aa} @subsubsection Lifetime-management @@ -13064,17 +13100,17 @@ have their lifetime bounded by the context they are created within, and cleanup of such objects is done for you when the context is released. @geindex gccjit;;context;;acquire (C++ function) -@anchor{cp/topics/contexts _CPPv4N6gccjit7context7acquireEv}@anchor{16f}@anchor{cp/topics/contexts _CPPv3N6gccjit7context7acquireEv}@anchor{1a8}@anchor{cp/topics/contexts _CPPv2N6gccjit7context7acquireEv}@anchor{1a9}@anchor{cp/topics/contexts gccjit context acquire}@anchor{1aa} -@deffn {C++ Function} gccjit::@ref{16e,,context} gccjit::@ref{16e,,context}::acquire () +@anchor{cp/topics/contexts _CPPv4N6gccjit7context7acquireEv}@anchor{172}@anchor{cp/topics/contexts _CPPv3N6gccjit7context7acquireEv}@anchor{1ab}@anchor{cp/topics/contexts _CPPv2N6gccjit7context7acquireEv}@anchor{1ac}@anchor{cp/topics/contexts gccjit context acquire}@anchor{1ad} +@deffn {C++ Function} gccjit::@ref{171,,context} gccjit::@ref{171,,context}::acquire () -This function acquires a new @ref{16e,,gccjit;;context} instance, +This function acquires a new @ref{171,,gccjit;;context} instance, which is independent of any others that may be present within this process. @end deffn @geindex gccjit;;context;;release (C++ function) -@anchor{cp/topics/contexts _CPPv4N6gccjit7context7releaseEv}@anchor{172}@anchor{cp/topics/contexts _CPPv3N6gccjit7context7releaseEv}@anchor{1ab}@anchor{cp/topics/contexts _CPPv2N6gccjit7context7releaseEv}@anchor{1ac}@anchor{cp/topics/contexts gccjit context release}@anchor{1ad} -@deffn {C++ Function} void gccjit::@ref{16e,,context}::release () +@anchor{cp/topics/contexts _CPPv4N6gccjit7context7releaseEv}@anchor{175}@anchor{cp/topics/contexts _CPPv3N6gccjit7context7releaseEv}@anchor{1ae}@anchor{cp/topics/contexts _CPPv2N6gccjit7context7releaseEv}@anchor{1af}@anchor{cp/topics/contexts gccjit context release}@anchor{1b0} +@deffn {C++ Function} void gccjit::@ref{171,,context}::release () This function releases all resources associated with the given context. Both the context itself and all of its @code{gccjit::object *} @@ -13090,8 +13126,8 @@ ctxt.release (); @end deffn @geindex gccjit;;context;;new_child_context (C++ function) -@anchor{cp/topics/contexts _CPPv4N6gccjit7context17new_child_contextEv}@anchor{1ae}@anchor{cp/topics/contexts _CPPv3N6gccjit7context17new_child_contextEv}@anchor{1af}@anchor{cp/topics/contexts _CPPv2N6gccjit7context17new_child_contextEv}@anchor{1b0}@anchor{cp/topics/contexts gccjit context new_child_context}@anchor{1b1} -@deffn {C++ Function} gccjit::@ref{16e,,context} gccjit::@ref{16e,,context}::new_child_context () +@anchor{cp/topics/contexts _CPPv4N6gccjit7context17new_child_contextEv}@anchor{1b1}@anchor{cp/topics/contexts _CPPv3N6gccjit7context17new_child_contextEv}@anchor{1b2}@anchor{cp/topics/contexts _CPPv2N6gccjit7context17new_child_contextEv}@anchor{1b3}@anchor{cp/topics/contexts gccjit context new_child_context}@anchor{1b4} +@deffn {C++ Function} gccjit::@ref{171,,context} gccjit::@ref{171,,context}::new_child_context () Given an existing JIT context, create a child context. @@ -13122,16 +13158,16 @@ there will likely be a performance hit for such nesting. @end deffn @node Thread-safety<2>,Error-handling<3>,Lifetime-management<2>,Compilation contexts<2> -@anchor{cp/topics/contexts thread-safety}@anchor{1b2} +@anchor{cp/topics/contexts thread-safety}@anchor{1b5} @subsubsection Thread-safety -Instances of @ref{16e,,gccjit;;context} created via -@ref{16f,,gccjit;;context;;acquire()} are independent from each other: +Instances of @ref{171,,gccjit;;context} created via +@ref{172,,gccjit;;context;;acquire()} are independent from each other: only one thread may use a given context at once, but multiple threads could each have their own contexts without needing locks. -Contexts created via @ref{1ae,,gccjit;;context;;new_child_context()} are +Contexts created via @ref{1b1,,gccjit;;context;;new_child_context()} are related to their parent context. They can be partitioned by their ultimate ancestor into independent “family trees”. Only one thread within a process may use a given “family tree” of such contexts at once, @@ -13139,7 +13175,7 @@ and if you’re using multiple threads you should provide your own locking around entire such context partitions. @node Error-handling<3>,Debugging<2>,Thread-safety<2>,Compilation contexts<2> -@anchor{cp/topics/contexts error-handling}@anchor{1b3} +@anchor{cp/topics/contexts error-handling}@anchor{1b6} @subsubsection Error-handling @@ -13152,11 +13188,11 @@ NULL. You don’t have to check everywhere for NULL results, since the API gracefully handles a NULL being passed in for any argument. Errors are printed on stderr and can be queried using -@ref{1b4,,gccjit;;context;;get_first_error()}. +@ref{1b7,,gccjit;;context;;get_first_error()}. @geindex gccjit;;context;;get_first_error (C++ function) -@anchor{cp/topics/contexts _CPPv4N6gccjit7context15get_first_errorEPN6gccjit7contextE}@anchor{1b4}@anchor{cp/topics/contexts _CPPv3N6gccjit7context15get_first_errorEPN6gccjit7contextE}@anchor{1b5}@anchor{cp/topics/contexts _CPPv2N6gccjit7context15get_first_errorEPN6gccjit7contextE}@anchor{1b6}@anchor{cp/topics/contexts gccjit context get_first_error__gccjit contextP}@anchor{1b7} -@deffn {C++ Function} const char *gccjit::@ref{16e,,context}::get_first_error (gccjit::context *ctxt) +@anchor{cp/topics/contexts _CPPv4N6gccjit7context15get_first_errorEPN6gccjit7contextE}@anchor{1b7}@anchor{cp/topics/contexts _CPPv3N6gccjit7context15get_first_errorEPN6gccjit7contextE}@anchor{1b8}@anchor{cp/topics/contexts _CPPv2N6gccjit7context15get_first_errorEPN6gccjit7contextE}@anchor{1b9}@anchor{cp/topics/contexts gccjit context get_first_error__gccjit contextP}@anchor{1ba} +@deffn {C++ Function} const char *gccjit::@ref{171,,context}::get_first_error (gccjit::context *ctxt) Returns the first error message that occurred on the context. @@ -13167,18 +13203,18 @@ If no errors occurred, this will be NULL. @end deffn @node Debugging<2>,Options<4>,Error-handling<3>,Compilation contexts<2> -@anchor{cp/topics/contexts debugging}@anchor{1b8} +@anchor{cp/topics/contexts debugging}@anchor{1bb} @subsubsection Debugging @geindex gccjit;;context;;dump_to_file (C++ function) -@anchor{cp/topics/contexts _CPPv4N6gccjit7context12dump_to_fileERKNSt6stringEi}@anchor{1b9}@anchor{cp/topics/contexts _CPPv3N6gccjit7context12dump_to_fileERKNSt6stringEi}@anchor{1ba}@anchor{cp/topics/contexts _CPPv2N6gccjit7context12dump_to_fileERKNSt6stringEi}@anchor{1bb}@anchor{cp/topics/contexts gccjit context dump_to_file__ssCR i}@anchor{1bc} -@deffn {C++ Function} void gccjit::@ref{16e,,context}::dump_to_file (const std::string &path, int update_locations) +@anchor{cp/topics/contexts _CPPv4N6gccjit7context12dump_to_fileERKNSt6stringEi}@anchor{1bc}@anchor{cp/topics/contexts _CPPv3N6gccjit7context12dump_to_fileERKNSt6stringEi}@anchor{1bd}@anchor{cp/topics/contexts _CPPv2N6gccjit7context12dump_to_fileERKNSt6stringEi}@anchor{1be}@anchor{cp/topics/contexts gccjit context dump_to_file__ssCR i}@anchor{1bf} +@deffn {C++ Function} void gccjit::@ref{171,,context}::dump_to_file (const std::string &path, int update_locations) To help with debugging: dump a C-like representation to the given path, describing what’s been set up on the context. -If “update_locations” is true, then also set up @ref{194,,gccjit;;location} +If “update_locations” is true, then also set up @ref{197,,gccjit;;location} information throughout the context, pointing at the dump file as if it were a source file. This may be of use in conjunction with @code{GCCJIT::BOOL_OPTION_DEBUGINFO} to allow stepping through the @@ -13186,8 +13222,8 @@ code in a debugger. @end deffn @geindex gccjit;;context;;dump_reproducer_to_file (C++ function) -@anchor{cp/topics/contexts _CPPv4N6gccjit7context23dump_reproducer_to_fileEP15gcc_jit_contextPKc}@anchor{1bd}@anchor{cp/topics/contexts _CPPv3N6gccjit7context23dump_reproducer_to_fileEP15gcc_jit_contextPKc}@anchor{1be}@anchor{cp/topics/contexts _CPPv2N6gccjit7context23dump_reproducer_to_fileEP15gcc_jit_contextPKc}@anchor{1bf}@anchor{cp/topics/contexts gccjit context dump_reproducer_to_file__gcc_jit_contextP cCP}@anchor{1c0} -@deffn {C++ Function} void gccjit::@ref{16e,,context}::dump_reproducer_to_file (gcc_jit_context *ctxt, const char *path) +@anchor{cp/topics/contexts _CPPv4N6gccjit7context23dump_reproducer_to_fileEP15gcc_jit_contextPKc}@anchor{1c0}@anchor{cp/topics/contexts _CPPv3N6gccjit7context23dump_reproducer_to_fileEP15gcc_jit_contextPKc}@anchor{1c1}@anchor{cp/topics/contexts _CPPv2N6gccjit7context23dump_reproducer_to_fileEP15gcc_jit_contextPKc}@anchor{1c2}@anchor{cp/topics/contexts gccjit context dump_reproducer_to_file__gcc_jit_contextP cCP}@anchor{1c3} +@deffn {C++ Function} void gccjit::@ref{171,,context}::dump_reproducer_to_file (gcc_jit_context *ctxt, const char *path) This is a thin wrapper around the C API @ref{5d,,gcc_jit_context_dump_reproducer_to_file()}, and hence works the @@ -13198,7 +13234,7 @@ for seeing what the C++ bindings are doing at the C level. @end deffn @node Options<4>,,Debugging<2>,Compilation contexts<2> -@anchor{cp/topics/contexts options}@anchor{1c1} +@anchor{cp/topics/contexts options}@anchor{1c4} @subsubsection Options @@ -13211,13 +13247,13 @@ for seeing what the C++ bindings are doing at the C level. @end menu @node String Options<2>,Boolean options<2>,,Options<4> -@anchor{cp/topics/contexts string-options}@anchor{1c2} +@anchor{cp/topics/contexts string-options}@anchor{1c5} @subsubsection String Options @geindex gccjit;;context;;set_str_option (C++ function) -@anchor{cp/topics/contexts _CPPv4N6gccjit7context14set_str_optionE18gcc_jit_str_optionPKc}@anchor{1c3}@anchor{cp/topics/contexts _CPPv3N6gccjit7context14set_str_optionE18gcc_jit_str_optionPKc}@anchor{1c4}@anchor{cp/topics/contexts _CPPv2N6gccjit7context14set_str_optionE18gcc_jit_str_optionPKc}@anchor{1c5}@anchor{cp/topics/contexts gccjit context set_str_option__gcc_jit_str_option cCP}@anchor{1c6} -@deffn {C++ Function} void gccjit::@ref{16e,,context}::set_str_option (enum gcc_jit_str_option, const char *value) +@anchor{cp/topics/contexts _CPPv4N6gccjit7context14set_str_optionE18gcc_jit_str_optionPKc}@anchor{1c6}@anchor{cp/topics/contexts _CPPv3N6gccjit7context14set_str_optionE18gcc_jit_str_optionPKc}@anchor{1c7}@anchor{cp/topics/contexts _CPPv2N6gccjit7context14set_str_optionE18gcc_jit_str_optionPKc}@anchor{1c8}@anchor{cp/topics/contexts gccjit context set_str_option__gcc_jit_str_option cCP}@anchor{1c9} +@deffn {C++ Function} void gccjit::@ref{171,,context}::set_str_option (enum gcc_jit_str_option, const char *value) Set a string option of the context. @@ -13227,13 +13263,13 @@ meaning. @end deffn @node Boolean options<2>,Integer options<2>,String Options<2>,Options<4> -@anchor{cp/topics/contexts boolean-options}@anchor{1c7} +@anchor{cp/topics/contexts boolean-options}@anchor{1ca} @subsubsection Boolean options @geindex gccjit;;context;;set_bool_option (C++ function) -@anchor{cp/topics/contexts _CPPv4N6gccjit7context15set_bool_optionE19gcc_jit_bool_optioni}@anchor{17a}@anchor{cp/topics/contexts _CPPv3N6gccjit7context15set_bool_optionE19gcc_jit_bool_optioni}@anchor{1c8}@anchor{cp/topics/contexts _CPPv2N6gccjit7context15set_bool_optionE19gcc_jit_bool_optioni}@anchor{1c9}@anchor{cp/topics/contexts gccjit context set_bool_option__gcc_jit_bool_option i}@anchor{1ca} -@deffn {C++ Function} void gccjit::@ref{16e,,context}::set_bool_option (enum gcc_jit_bool_option, int value) +@anchor{cp/topics/contexts _CPPv4N6gccjit7context15set_bool_optionE19gcc_jit_bool_optioni}@anchor{17d}@anchor{cp/topics/contexts _CPPv3N6gccjit7context15set_bool_optionE19gcc_jit_bool_optioni}@anchor{1cb}@anchor{cp/topics/contexts _CPPv2N6gccjit7context15set_bool_optionE19gcc_jit_bool_optioni}@anchor{1cc}@anchor{cp/topics/contexts gccjit context set_bool_option__gcc_jit_bool_option i}@anchor{1cd} +@deffn {C++ Function} void gccjit::@ref{171,,context}::set_bool_option (enum gcc_jit_bool_option, int value) Set a boolean option of the context. @@ -13243,8 +13279,8 @@ meaning. @end deffn @geindex gccjit;;context;;set_bool_allow_unreachable_blocks (C++ function) -@anchor{cp/topics/contexts _CPPv4N6gccjit7context33set_bool_allow_unreachable_blocksEi}@anchor{1cb}@anchor{cp/topics/contexts _CPPv3N6gccjit7context33set_bool_allow_unreachable_blocksEi}@anchor{1cc}@anchor{cp/topics/contexts _CPPv2N6gccjit7context33set_bool_allow_unreachable_blocksEi}@anchor{1cd}@anchor{cp/topics/contexts gccjit context set_bool_allow_unreachable_blocks__i}@anchor{1ce} -@deffn {C++ Function} void gccjit::@ref{16e,,context}::set_bool_allow_unreachable_blocks (int bool_value) +@anchor{cp/topics/contexts _CPPv4N6gccjit7context33set_bool_allow_unreachable_blocksEi}@anchor{1ce}@anchor{cp/topics/contexts _CPPv3N6gccjit7context33set_bool_allow_unreachable_blocksEi}@anchor{1cf}@anchor{cp/topics/contexts _CPPv2N6gccjit7context33set_bool_allow_unreachable_blocksEi}@anchor{1d0}@anchor{cp/topics/contexts gccjit context set_bool_allow_unreachable_blocks__i}@anchor{1d1} +@deffn {C++ Function} void gccjit::@ref{171,,context}::set_bool_allow_unreachable_blocks (int bool_value) By default, libgccjit will issue an error about unreachable blocks within a function. @@ -13262,8 +13298,8 @@ its presence using @end deffn @geindex gccjit;;context;;set_bool_use_external_driver (C++ function) -@anchor{cp/topics/contexts _CPPv4N6gccjit7context28set_bool_use_external_driverEi}@anchor{1cf}@anchor{cp/topics/contexts _CPPv3N6gccjit7context28set_bool_use_external_driverEi}@anchor{1d0}@anchor{cp/topics/contexts _CPPv2N6gccjit7context28set_bool_use_external_driverEi}@anchor{1d1}@anchor{cp/topics/contexts gccjit context set_bool_use_external_driver__i}@anchor{1d2} -@deffn {C++ Function} void gccjit::@ref{16e,,context}::set_bool_use_external_driver (int bool_value) +@anchor{cp/topics/contexts _CPPv4N6gccjit7context28set_bool_use_external_driverEi}@anchor{1d2}@anchor{cp/topics/contexts _CPPv3N6gccjit7context28set_bool_use_external_driverEi}@anchor{1d3}@anchor{cp/topics/contexts _CPPv2N6gccjit7context28set_bool_use_external_driverEi}@anchor{1d4}@anchor{cp/topics/contexts gccjit context set_bool_use_external_driver__i}@anchor{1d5} +@deffn {C++ Function} void gccjit::@ref{171,,context}::set_bool_use_external_driver (int bool_value) libgccjit internally generates assembler, and uses “driver” code for converting it to other formats (e.g. shared libraries). @@ -13284,13 +13320,13 @@ its presence using @end deffn @node Integer options<2>,Additional command-line options<2>,Boolean options<2>,Options<4> -@anchor{cp/topics/contexts integer-options}@anchor{1d3} +@anchor{cp/topics/contexts integer-options}@anchor{1d6} @subsubsection Integer options @geindex gccjit;;context;;set_int_option (C++ function) -@anchor{cp/topics/contexts _CPPv4N6gccjit7context14set_int_optionE18gcc_jit_int_optioni}@anchor{17b}@anchor{cp/topics/contexts _CPPv3N6gccjit7context14set_int_optionE18gcc_jit_int_optioni}@anchor{1d4}@anchor{cp/topics/contexts _CPPv2N6gccjit7context14set_int_optionE18gcc_jit_int_optioni}@anchor{1d5}@anchor{cp/topics/contexts gccjit context set_int_option__gcc_jit_int_option i}@anchor{1d6} -@deffn {C++ Function} void gccjit::@ref{16e,,context}::set_int_option (enum gcc_jit_int_option, int value) +@anchor{cp/topics/contexts _CPPv4N6gccjit7context14set_int_optionE18gcc_jit_int_optioni}@anchor{17e}@anchor{cp/topics/contexts _CPPv3N6gccjit7context14set_int_optionE18gcc_jit_int_optioni}@anchor{1d7}@anchor{cp/topics/contexts _CPPv2N6gccjit7context14set_int_optionE18gcc_jit_int_optioni}@anchor{1d8}@anchor{cp/topics/contexts gccjit context set_int_option__gcc_jit_int_option i}@anchor{1d9} +@deffn {C++ Function} void gccjit::@ref{171,,context}::set_int_option (enum gcc_jit_int_option, int value) Set an integer option of the context. @@ -13300,21 +13336,21 @@ meaning. @end deffn @node Additional command-line options<2>,,Integer options<2>,Options<4> -@anchor{cp/topics/contexts additional-command-line-options}@anchor{1d7} +@anchor{cp/topics/contexts additional-command-line-options}@anchor{1da} @subsubsection Additional command-line options @geindex gccjit;;context;;add_command_line_option (C++ function) -@anchor{cp/topics/contexts _CPPv4N6gccjit7context23add_command_line_optionEPKc}@anchor{1d8}@anchor{cp/topics/contexts _CPPv3N6gccjit7context23add_command_line_optionEPKc}@anchor{1d9}@anchor{cp/topics/contexts _CPPv2N6gccjit7context23add_command_line_optionEPKc}@anchor{1da}@anchor{cp/topics/contexts gccjit context add_command_line_option__cCP}@anchor{1db} -@deffn {C++ Function} void gccjit::@ref{16e,,context}::add_command_line_option (const char *optname) +@anchor{cp/topics/contexts _CPPv4N6gccjit7context23add_command_line_optionEPKc}@anchor{1db}@anchor{cp/topics/contexts _CPPv3N6gccjit7context23add_command_line_optionEPKc}@anchor{1dc}@anchor{cp/topics/contexts _CPPv2N6gccjit7context23add_command_line_optionEPKc}@anchor{1dd}@anchor{cp/topics/contexts gccjit context add_command_line_option__cCP}@anchor{1de} +@deffn {C++ Function} void gccjit::@ref{171,,context}::add_command_line_option (const char *optname) Add an arbitrary gcc command-line option to the context for use when compiling. This is a thin wrapper around the C API -@ref{72,,gcc_jit_context_add_command_line_option()}. +@ref{74,,gcc_jit_context_add_command_line_option()}. -This entrypoint was added in @ref{73,,LIBGCCJIT_ABI_1}; you can test for +This entrypoint was added in @ref{75,,LIBGCCJIT_ABI_1}; you can test for its presence using @example @@ -13340,18 +13376,18 @@ its presence using @c <https://www.gnu.org/licenses/>. @node Objects<2>,Types<2>,Compilation contexts<2>,Topic Reference<2> -@anchor{cp/topics/objects doc}@anchor{1dc}@anchor{cp/topics/objects objects}@anchor{1dd} +@anchor{cp/topics/objects doc}@anchor{1df}@anchor{cp/topics/objects objects}@anchor{1e0} @subsection Objects @geindex gccjit;;object (C++ class) -@anchor{cp/topics/objects _CPPv4N6gccjit6objectE}@anchor{173}@anchor{cp/topics/objects _CPPv3N6gccjit6objectE}@anchor{1de}@anchor{cp/topics/objects _CPPv2N6gccjit6objectE}@anchor{1df}@anchor{cp/topics/objects gccjit object}@anchor{1e0} +@anchor{cp/topics/objects _CPPv4N6gccjit6objectE}@anchor{176}@anchor{cp/topics/objects _CPPv3N6gccjit6objectE}@anchor{1e1}@anchor{cp/topics/objects _CPPv2N6gccjit6objectE}@anchor{1e2}@anchor{cp/topics/objects gccjit object}@anchor{1e3} @deffn {C++ Class} gccjit::object @end deffn Almost every entity in the API (with the exception of -@ref{16e,,gccjit;;context} and @ref{16,,gcc_jit_result *}) is a -“contextual” object, a @ref{173,,gccjit;;object}. +@ref{171,,gccjit;;context} and @ref{16,,gcc_jit_result *}) is a +“contextual” object, a @ref{176,,gccjit;;object}. A JIT object: @@ -13361,7 +13397,7 @@ A JIT object: @itemize * @item -is associated with a @ref{16e,,gccjit;;context}. +is associated with a @ref{171,,gccjit;;context}. @item is automatically cleaned up for you when its context is released so @@ -13386,18 +13422,18 @@ The C++ class hierarchy within the @code{gccjit} namespace looks like this: +- case_ @end example -The @ref{173,,gccjit;;object} base class has the following operations: +The @ref{176,,gccjit;;object} base class has the following operations: @geindex gccjit;;object;;get_context (C++ function) -@anchor{cp/topics/objects _CPPv4NK6gccjit6object11get_contextEv}@anchor{1e1}@anchor{cp/topics/objects _CPPv3NK6gccjit6object11get_contextEv}@anchor{1e2}@anchor{cp/topics/objects _CPPv2NK6gccjit6object11get_contextEv}@anchor{1e3}@anchor{cp/topics/objects gccjit object get_contextC}@anchor{1e4} -@deffn {C++ Function} gccjit::@ref{16e,,context} gccjit::@ref{173,,object}::get_context () const +@anchor{cp/topics/objects _CPPv4NK6gccjit6object11get_contextEv}@anchor{1e4}@anchor{cp/topics/objects _CPPv3NK6gccjit6object11get_contextEv}@anchor{1e5}@anchor{cp/topics/objects _CPPv2NK6gccjit6object11get_contextEv}@anchor{1e6}@anchor{cp/topics/objects gccjit object get_contextC}@anchor{1e7} +@deffn {C++ Function} gccjit::@ref{171,,context} gccjit::@ref{176,,object}::get_context () const Which context is the obj within? @end deffn @geindex gccjit;;object;;get_debug_string (C++ function) -@anchor{cp/topics/objects _CPPv4NK6gccjit6object16get_debug_stringEv}@anchor{174}@anchor{cp/topics/objects _CPPv3NK6gccjit6object16get_debug_stringEv}@anchor{1e5}@anchor{cp/topics/objects _CPPv2NK6gccjit6object16get_debug_stringEv}@anchor{1e6}@anchor{cp/topics/objects gccjit object get_debug_stringC}@anchor{1e7} -@deffn {C++ Function} std::string gccjit::@ref{173,,object}::get_debug_string () const +@anchor{cp/topics/objects _CPPv4NK6gccjit6object16get_debug_stringEv}@anchor{177}@anchor{cp/topics/objects _CPPv3NK6gccjit6object16get_debug_stringEv}@anchor{1e8}@anchor{cp/topics/objects _CPPv2NK6gccjit6object16get_debug_stringEv}@anchor{1e9}@anchor{cp/topics/objects gccjit object get_debug_stringC}@anchor{1ea} +@deffn {C++ Function} std::string gccjit::@ref{176,,object}::get_debug_string () const Generate a human-readable description for the given object. @@ -13432,16 +13468,16 @@ obj: 4.0 * (float)i @c <https://www.gnu.org/licenses/>. @node Types<2>,Expressions<2>,Objects<2>,Topic Reference<2> -@anchor{cp/topics/types doc}@anchor{1e8}@anchor{cp/topics/types types}@anchor{1e9} +@anchor{cp/topics/types doc}@anchor{1eb}@anchor{cp/topics/types types}@anchor{1ec} @subsection Types @geindex gccjit;;type (C++ class) -@anchor{cp/topics/types _CPPv4N6gccjit4typeE}@anchor{170}@anchor{cp/topics/types _CPPv3N6gccjit4typeE}@anchor{1ea}@anchor{cp/topics/types _CPPv2N6gccjit4typeE}@anchor{1eb}@anchor{cp/topics/types gccjit type}@anchor{1ec} +@anchor{cp/topics/types _CPPv4N6gccjit4typeE}@anchor{173}@anchor{cp/topics/types _CPPv3N6gccjit4typeE}@anchor{1ed}@anchor{cp/topics/types _CPPv2N6gccjit4typeE}@anchor{1ee}@anchor{cp/topics/types gccjit type}@anchor{1ef} @deffn {C++ Class} gccjit::type gccjit::type represents a type within the library. It is a subclass -of @ref{173,,gccjit;;object}. +of @ref{176,,gccjit;;object}. @end deffn Types can be created in several ways: @@ -13451,7 +13487,7 @@ Types can be created in several ways: @item fundamental types can be accessed using -@ref{171,,gccjit;;context;;get_type()}: +@ref{174,,gccjit;;context;;get_type()}: @example gccjit::type int_type = ctxt.get_type (GCC_JIT_TYPE_INT); @@ -13467,7 +13503,7 @@ See @ref{b,,gcc_jit_context_get_type()} for the available types. @item derived types can be accessed by using functions such as -@ref{1ed,,gccjit;;type;;get_pointer()} and @ref{1ee,,gccjit;;type;;get_const()}: +@ref{1f0,,gccjit;;type;;get_pointer()} and @ref{1f1,,gccjit;;type;;get_const()}: @example gccjit::type const_int_star = int_type.get_const ().get_pointer (); @@ -13487,28 +13523,28 @@ by creating structures (see below). @end menu @node Standard types<2>,Pointers const and volatile<2>,,Types<2> -@anchor{cp/topics/types standard-types}@anchor{1ef} +@anchor{cp/topics/types standard-types}@anchor{1f2} @subsubsection Standard types @geindex gccjit;;context;;get_type (C++ function) -@anchor{cp/topics/types _CPPv4N6gccjit7context8get_typeE13gcc_jit_types}@anchor{171}@anchor{cp/topics/types _CPPv3N6gccjit7context8get_typeE13gcc_jit_types}@anchor{1f0}@anchor{cp/topics/types _CPPv2N6gccjit7context8get_typeE13gcc_jit_types}@anchor{1f1}@anchor{cp/topics/types gccjit context get_type__gcc_jit_types}@anchor{1f2} -@deffn {C++ Function} gccjit::@ref{170,,type} gccjit::@ref{16e,,context}::get_type (enum gcc_jit_types) +@anchor{cp/topics/types _CPPv4N6gccjit7context8get_typeE13gcc_jit_types}@anchor{174}@anchor{cp/topics/types _CPPv3N6gccjit7context8get_typeE13gcc_jit_types}@anchor{1f3}@anchor{cp/topics/types _CPPv2N6gccjit7context8get_typeE13gcc_jit_types}@anchor{1f4}@anchor{cp/topics/types gccjit context get_type__gcc_jit_types}@anchor{1f5} +@deffn {C++ Function} gccjit::@ref{173,,type} gccjit::@ref{171,,context}::get_type (enum gcc_jit_types) Access a specific type. This is a thin wrapper around @ref{b,,gcc_jit_context_get_type()}; the parameter has the same meaning. @end deffn @geindex gccjit;;context;;get_int_type (C++ function) -@anchor{cp/topics/types _CPPv4N6gccjit7context12get_int_typeE6size_ti}@anchor{1f3}@anchor{cp/topics/types _CPPv3N6gccjit7context12get_int_typeE6size_ti}@anchor{1f4}@anchor{cp/topics/types _CPPv2N6gccjit7context12get_int_typeE6size_ti}@anchor{1f5}@anchor{cp/topics/types gccjit context get_int_type__s i}@anchor{1f6} -@deffn {C++ Function} gccjit::@ref{170,,type} gccjit::@ref{16e,,context}::get_int_type (size_t num_bytes, int is_signed) +@anchor{cp/topics/types _CPPv4N6gccjit7context12get_int_typeE6size_ti}@anchor{1f6}@anchor{cp/topics/types _CPPv3N6gccjit7context12get_int_typeE6size_ti}@anchor{1f7}@anchor{cp/topics/types _CPPv2N6gccjit7context12get_int_typeE6size_ti}@anchor{1f8}@anchor{cp/topics/types gccjit context get_int_type__s i}@anchor{1f9} +@deffn {C++ Function} gccjit::@ref{173,,type} gccjit::@ref{171,,context}::get_int_type (size_t num_bytes, int is_signed) Access the integer type of the given size. @end deffn @geindex gccjit;;context;;get_int_type<T> (C++ function) -@anchor{cp/topics/types _CPPv4IEN6gccjit7context12get_int_typeI1TEEN6gccjit4typeEv}@anchor{1f7}@anchor{cp/topics/types _CPPv3IEN6gccjit7context12get_int_typeI1TEEv}@anchor{1f8}@anchor{cp/topics/types _CPPv2IEN6gccjit7context12get_int_typeI1TEEv}@anchor{1f9} -@deffn {C++ Function} template<>gccjit::@ref{170,,type} gccjit::@ref{16e,,context}::get_int_type<T> () +@anchor{cp/topics/types _CPPv4IEN6gccjit7context12get_int_typeI1TEEN6gccjit4typeEv}@anchor{1fa}@anchor{cp/topics/types _CPPv3IEN6gccjit7context12get_int_typeI1TEEv}@anchor{1fb}@anchor{cp/topics/types _CPPv2IEN6gccjit7context12get_int_typeI1TEEv}@anchor{1fc} +@deffn {C++ Function} template<>gccjit::@ref{173,,type} gccjit::@ref{171,,context}::get_int_type<T> () Access the given integer type. For example, you could map the @code{unsigned short} type into a gccjit::type via: @@ -13519,34 +13555,34 @@ gccjit::type t = ctxt.get_int_type <unsigned short> (); @end deffn @node Pointers const and volatile<2>,Vector types<2>,Standard types<2>,Types<2> -@anchor{cp/topics/types pointers-const-and-volatile}@anchor{1fa} +@anchor{cp/topics/types pointers-const-and-volatile}@anchor{1fd} @subsubsection Pointers, @cite{const}, and @cite{volatile} @geindex gccjit;;type;;get_pointer (C++ function) -@anchor{cp/topics/types _CPPv4N6gccjit4type11get_pointerEv}@anchor{1ed}@anchor{cp/topics/types _CPPv3N6gccjit4type11get_pointerEv}@anchor{1fb}@anchor{cp/topics/types _CPPv2N6gccjit4type11get_pointerEv}@anchor{1fc}@anchor{cp/topics/types gccjit type get_pointer}@anchor{1fd} -@deffn {C++ Function} gccjit::@ref{170,,type} gccjit::@ref{170,,type}::get_pointer () +@anchor{cp/topics/types _CPPv4N6gccjit4type11get_pointerEv}@anchor{1f0}@anchor{cp/topics/types _CPPv3N6gccjit4type11get_pointerEv}@anchor{1fe}@anchor{cp/topics/types _CPPv2N6gccjit4type11get_pointerEv}@anchor{1ff}@anchor{cp/topics/types gccjit type get_pointer}@anchor{200} +@deffn {C++ Function} gccjit::@ref{173,,type} gccjit::@ref{173,,type}::get_pointer () Given type “T”, get type “T*”. @end deffn @geindex gccjit;;type;;get_const (C++ function) -@anchor{cp/topics/types _CPPv4N6gccjit4type9get_constEv}@anchor{1ee}@anchor{cp/topics/types _CPPv3N6gccjit4type9get_constEv}@anchor{1fe}@anchor{cp/topics/types _CPPv2N6gccjit4type9get_constEv}@anchor{1ff}@anchor{cp/topics/types gccjit type get_const}@anchor{200} -@deffn {C++ Function} gccjit::@ref{170,,type} gccjit::@ref{170,,type}::get_const () +@anchor{cp/topics/types _CPPv4N6gccjit4type9get_constEv}@anchor{1f1}@anchor{cp/topics/types _CPPv3N6gccjit4type9get_constEv}@anchor{201}@anchor{cp/topics/types _CPPv2N6gccjit4type9get_constEv}@anchor{202}@anchor{cp/topics/types gccjit type get_const}@anchor{203} +@deffn {C++ Function} gccjit::@ref{173,,type} gccjit::@ref{173,,type}::get_const () Given type “T”, get type “const T”. @end deffn @geindex gccjit;;type;;get_volatile (C++ function) -@anchor{cp/topics/types _CPPv4N6gccjit4type12get_volatileEv}@anchor{201}@anchor{cp/topics/types _CPPv3N6gccjit4type12get_volatileEv}@anchor{202}@anchor{cp/topics/types _CPPv2N6gccjit4type12get_volatileEv}@anchor{203}@anchor{cp/topics/types gccjit type get_volatile}@anchor{204} -@deffn {C++ Function} gccjit::@ref{170,,type} gccjit::@ref{170,,type}::get_volatile () +@anchor{cp/topics/types _CPPv4N6gccjit4type12get_volatileEv}@anchor{204}@anchor{cp/topics/types _CPPv3N6gccjit4type12get_volatileEv}@anchor{205}@anchor{cp/topics/types _CPPv2N6gccjit4type12get_volatileEv}@anchor{206}@anchor{cp/topics/types gccjit type get_volatile}@anchor{207} +@deffn {C++ Function} gccjit::@ref{173,,type} gccjit::@ref{173,,type}::get_volatile () Given type “T”, get type “volatile T”. @end deffn @geindex gccjit;;type;;get_aligned (C++ function) -@anchor{cp/topics/types _CPPv4N6gccjit4type11get_alignedE6size_t}@anchor{205}@anchor{cp/topics/types _CPPv3N6gccjit4type11get_alignedE6size_t}@anchor{206}@anchor{cp/topics/types _CPPv2N6gccjit4type11get_alignedE6size_t}@anchor{207}@anchor{cp/topics/types gccjit type get_aligned__s}@anchor{208} -@deffn {C++ Function} gccjit::@ref{170,,type} gccjit::@ref{170,,type}::get_aligned (size_t alignment_in_bytes) +@anchor{cp/topics/types _CPPv4N6gccjit4type11get_alignedE6size_t}@anchor{208}@anchor{cp/topics/types _CPPv3N6gccjit4type11get_alignedE6size_t}@anchor{209}@anchor{cp/topics/types _CPPv2N6gccjit4type11get_alignedE6size_t}@anchor{20a}@anchor{cp/topics/types gccjit type get_aligned__s}@anchor{20b} +@deffn {C++ Function} gccjit::@ref{173,,type} gccjit::@ref{173,,type}::get_aligned (size_t alignment_in_bytes) Given type “T”, get type: @@ -13558,21 +13594,21 @@ The alignment must be a power of two. @end deffn @geindex gccjit;;context;;new_array_type (C++ function) -@anchor{cp/topics/types _CPPv4N6gccjit7context14new_array_typeEN6gccjit4typeEiN6gccjit8locationE}@anchor{209}@anchor{cp/topics/types _CPPv3N6gccjit7context14new_array_typeEN6gccjit4typeEiN6gccjit8locationE}@anchor{20a}@anchor{cp/topics/types _CPPv2N6gccjit7context14new_array_typeEN6gccjit4typeEiN6gccjit8locationE}@anchor{20b}@anchor{cp/topics/types gccjit context new_array_type__gccjit type i gccjit location}@anchor{20c} -@deffn {C++ Function} gccjit::@ref{170,,type} gccjit::@ref{16e,,context}::new_array_type (gccjit::type element_type, int num_elements, gccjit::location loc) +@anchor{cp/topics/types _CPPv4N6gccjit7context14new_array_typeEN6gccjit4typeEiN6gccjit8locationE}@anchor{20c}@anchor{cp/topics/types _CPPv3N6gccjit7context14new_array_typeEN6gccjit4typeEiN6gccjit8locationE}@anchor{20d}@anchor{cp/topics/types _CPPv2N6gccjit7context14new_array_typeEN6gccjit4typeEiN6gccjit8locationE}@anchor{20e}@anchor{cp/topics/types gccjit context new_array_type__gccjit type i gccjit location}@anchor{20f} +@deffn {C++ Function} gccjit::@ref{173,,type} gccjit::@ref{171,,context}::new_array_type (gccjit::type element_type, int num_elements, gccjit::location loc) Given type “T”, get type “T[N]” (for a constant N). Param “loc” is optional. @end deffn @node Vector types<2>,Structures and unions<2>,Pointers const and volatile<2>,Types<2> -@anchor{cp/topics/types vector-types}@anchor{20d} +@anchor{cp/topics/types vector-types}@anchor{210} @subsubsection Vector types @geindex gccjit;;type;;get_vector (C++ function) -@anchor{cp/topics/types _CPPv4N6gccjit4type10get_vectorE6size_t}@anchor{20e}@anchor{cp/topics/types _CPPv3N6gccjit4type10get_vectorE6size_t}@anchor{20f}@anchor{cp/topics/types _CPPv2N6gccjit4type10get_vectorE6size_t}@anchor{210}@anchor{cp/topics/types gccjit type get_vector__s}@anchor{211} -@deffn {C++ Function} gccjit::@ref{170,,type} gccjit::@ref{170,,type}::get_vector (size_t num_units) +@anchor{cp/topics/types _CPPv4N6gccjit4type10get_vectorE6size_t}@anchor{211}@anchor{cp/topics/types _CPPv3N6gccjit4type10get_vectorE6size_t}@anchor{212}@anchor{cp/topics/types _CPPv2N6gccjit4type10get_vectorE6size_t}@anchor{213}@anchor{cp/topics/types gccjit type get_vector__s}@anchor{214} +@deffn {C++ Function} gccjit::@ref{173,,type} gccjit::@ref{173,,type}::get_vector (size_t num_units) Given type “T”, get type: @@ -13584,31 +13620,31 @@ T must be integral or floating point; num_units must be a power of two. @end deffn @node Structures and unions<2>,,Vector types<2>,Types<2> -@anchor{cp/topics/types structures-and-unions}@anchor{212} +@anchor{cp/topics/types structures-and-unions}@anchor{215} @subsubsection Structures and unions @geindex gccjit;;struct_ (C++ class) -@anchor{cp/topics/types _CPPv4N6gccjit7struct_E}@anchor{213}@anchor{cp/topics/types _CPPv3N6gccjit7struct_E}@anchor{214}@anchor{cp/topics/types _CPPv2N6gccjit7struct_E}@anchor{215}@anchor{cp/topics/types gccjit struct_}@anchor{216} +@anchor{cp/topics/types _CPPv4N6gccjit7struct_E}@anchor{216}@anchor{cp/topics/types _CPPv3N6gccjit7struct_E}@anchor{217}@anchor{cp/topics/types _CPPv2N6gccjit7struct_E}@anchor{218}@anchor{cp/topics/types gccjit struct_}@anchor{219} @deffn {C++ Class} gccjit::struct_ @end deffn A compound type analagous to a C @cite{struct}. -@ref{213,,gccjit;;struct_} is a subclass of @ref{170,,gccjit;;type} (and thus -of @ref{173,,gccjit;;object} in turn). +@ref{216,,gccjit;;struct_} is a subclass of @ref{173,,gccjit;;type} (and thus +of @ref{176,,gccjit;;object} in turn). @geindex gccjit;;field (C++ class) -@anchor{cp/topics/types _CPPv4N6gccjit5fieldE}@anchor{217}@anchor{cp/topics/types _CPPv3N6gccjit5fieldE}@anchor{218}@anchor{cp/topics/types _CPPv2N6gccjit5fieldE}@anchor{219}@anchor{cp/topics/types gccjit field}@anchor{21a} +@anchor{cp/topics/types _CPPv4N6gccjit5fieldE}@anchor{21a}@anchor{cp/topics/types _CPPv3N6gccjit5fieldE}@anchor{21b}@anchor{cp/topics/types _CPPv2N6gccjit5fieldE}@anchor{21c}@anchor{cp/topics/types gccjit field}@anchor{21d} @deffn {C++ Class} gccjit::field @end deffn -A field within a @ref{213,,gccjit;;struct_}. +A field within a @ref{216,,gccjit;;struct_}. -@ref{217,,gccjit;;field} is a subclass of @ref{173,,gccjit;;object}. +@ref{21a,,gccjit;;field} is a subclass of @ref{176,,gccjit;;object}. -You can model C @cite{struct} types by creating @ref{213,,gccjit;;struct_} and -@ref{217,,gccjit;;field} instances, in either order: +You can model C @cite{struct} types by creating @ref{216,,gccjit;;struct_} and +@ref{21a,,gccjit;;field} instances, in either order: @itemize * @@ -13656,15 +13692,15 @@ node.set_fields (fields); @c FIXME: the above API doesn't seem to exist yet @geindex gccjit;;context;;new_field (C++ function) -@anchor{cp/topics/types _CPPv4N6gccjit7context9new_fieldEN6gccjit4typeEPKcN6gccjit8locationE}@anchor{21b}@anchor{cp/topics/types _CPPv3N6gccjit7context9new_fieldEN6gccjit4typeEPKcN6gccjit8locationE}@anchor{21c}@anchor{cp/topics/types _CPPv2N6gccjit7context9new_fieldEN6gccjit4typeEPKcN6gccjit8locationE}@anchor{21d}@anchor{cp/topics/types gccjit context new_field__gccjit type cCP gccjit location}@anchor{21e} -@deffn {C++ Function} gccjit::@ref{217,,field} gccjit::@ref{16e,,context}::new_field (gccjit::type type, const char *name, gccjit::location loc) +@anchor{cp/topics/types _CPPv4N6gccjit7context9new_fieldEN6gccjit4typeEPKcN6gccjit8locationE}@anchor{21e}@anchor{cp/topics/types _CPPv3N6gccjit7context9new_fieldEN6gccjit4typeEPKcN6gccjit8locationE}@anchor{21f}@anchor{cp/topics/types _CPPv2N6gccjit7context9new_fieldEN6gccjit4typeEPKcN6gccjit8locationE}@anchor{220}@anchor{cp/topics/types gccjit context new_field__gccjit type cCP gccjit location}@anchor{221} +@deffn {C++ Function} gccjit::@ref{21a,,field} gccjit::@ref{171,,context}::new_field (gccjit::type type, const char *name, gccjit::location loc) Construct a new field, with the given type and name. @end deffn @geindex gccjit;;context;;new_struct_type (C++ function) -@anchor{cp/topics/types _CPPv4N6gccjit7context15new_struct_typeERKNSt6stringERNSt6vectorI5fieldEEN6gccjit8locationE}@anchor{21f}@anchor{cp/topics/types _CPPv3N6gccjit7context15new_struct_typeERKNSt6stringERNSt6vectorI5fieldEEN6gccjit8locationE}@anchor{220}@anchor{cp/topics/types _CPPv2N6gccjit7context15new_struct_typeERKNSt6stringERNSt6vectorI5fieldEEN6gccjit8locationE}@anchor{221}@anchor{cp/topics/types gccjit context new_struct_type__ssCR std vector field R gccjit location}@anchor{222} -@deffn {C++ Function} gccjit::@ref{213,,struct_} gccjit::@ref{16e,,context}::new_struct_type (const std::string &name, std::vector<field> &fields, gccjit::location loc) +@anchor{cp/topics/types _CPPv4N6gccjit7context15new_struct_typeERKNSt6stringERNSt6vectorI5fieldEEN6gccjit8locationE}@anchor{222}@anchor{cp/topics/types _CPPv3N6gccjit7context15new_struct_typeERKNSt6stringERNSt6vectorI5fieldEEN6gccjit8locationE}@anchor{223}@anchor{cp/topics/types _CPPv2N6gccjit7context15new_struct_typeERKNSt6stringERNSt6vectorI5fieldEEN6gccjit8locationE}@anchor{224}@anchor{cp/topics/types gccjit context new_struct_type__ssCR std vector field R gccjit location}@anchor{225} +@deffn {C++ Function} gccjit::@ref{216,,struct_} gccjit::@ref{171,,context}::new_struct_type (const std::string &name, std::vector<field> &fields, gccjit::location loc) @quotation @@ -13673,13 +13709,13 @@ Construct a new struct type, with the given name and fields. @end deffn @geindex gccjit;;context;;new_opaque_struct (C++ function) -@anchor{cp/topics/types _CPPv4N6gccjit7context17new_opaque_structERKNSt6stringEN6gccjit8locationE}@anchor{223}@anchor{cp/topics/types _CPPv3N6gccjit7context17new_opaque_structERKNSt6stringEN6gccjit8locationE}@anchor{224}@anchor{cp/topics/types _CPPv2N6gccjit7context17new_opaque_structERKNSt6stringEN6gccjit8locationE}@anchor{225}@anchor{cp/topics/types gccjit context new_opaque_struct__ssCR gccjit location}@anchor{226} -@deffn {C++ Function} gccjit::@ref{213,,struct_} gccjit::@ref{16e,,context}::new_opaque_struct (const std::string &name, gccjit::location loc) +@anchor{cp/topics/types _CPPv4N6gccjit7context17new_opaque_structERKNSt6stringEN6gccjit8locationE}@anchor{226}@anchor{cp/topics/types _CPPv3N6gccjit7context17new_opaque_structERKNSt6stringEN6gccjit8locationE}@anchor{227}@anchor{cp/topics/types _CPPv2N6gccjit7context17new_opaque_structERKNSt6stringEN6gccjit8locationE}@anchor{228}@anchor{cp/topics/types gccjit context new_opaque_struct__ssCR gccjit location}@anchor{229} +@deffn {C++ Function} gccjit::@ref{216,,struct_} gccjit::@ref{171,,context}::new_opaque_struct (const std::string &name, gccjit::location loc) Construct a new struct type, with the given name, but without specifying the fields. The fields can be omitted (in which case the size of the struct is not known), or later specified using -@ref{91,,gcc_jit_struct_set_fields()}. +@ref{93,,gcc_jit_struct_set_fields()}. @end deffn @c Copyright (C) 2014-2022 Free Software Foundation, Inc. @@ -13700,7 +13736,7 @@ size of the struct is not known), or later specified using @c <https://www.gnu.org/licenses/>. @node Expressions<2>,Creating and using functions<2>,Types<2>,Topic Reference<2> -@anchor{cp/topics/expressions doc}@anchor{227}@anchor{cp/topics/expressions expressions}@anchor{228} +@anchor{cp/topics/expressions doc}@anchor{22a}@anchor{cp/topics/expressions expressions}@anchor{22b} @subsection Expressions @@ -13712,17 +13748,17 @@ size of the struct is not known), or later specified using @end menu @node Rvalues<2>,Lvalues<2>,,Expressions<2> -@anchor{cp/topics/expressions rvalues}@anchor{229} +@anchor{cp/topics/expressions rvalues}@anchor{22c} @subsubsection Rvalues @geindex gccjit;;rvalue (C++ class) -@anchor{cp/topics/expressions _CPPv4N6gccjit6rvalueE}@anchor{177}@anchor{cp/topics/expressions _CPPv3N6gccjit6rvalueE}@anchor{22a}@anchor{cp/topics/expressions _CPPv2N6gccjit6rvalueE}@anchor{22b}@anchor{cp/topics/expressions gccjit rvalue}@anchor{22c} +@anchor{cp/topics/expressions _CPPv4N6gccjit6rvalueE}@anchor{17a}@anchor{cp/topics/expressions _CPPv3N6gccjit6rvalueE}@anchor{22d}@anchor{cp/topics/expressions _CPPv2N6gccjit6rvalueE}@anchor{22e}@anchor{cp/topics/expressions gccjit rvalue}@anchor{22f} @deffn {C++ Class} gccjit::rvalue @end deffn -A @ref{177,,gccjit;;rvalue} is an expression that can be computed. It is a -subclass of @ref{173,,gccjit;;object}, and is a thin wrapper around +A @ref{17a,,gccjit;;rvalue} is an expression that can be computed. It is a +subclass of @ref{176,,gccjit;;object}, and is a thin wrapper around @ref{13,,gcc_jit_rvalue *} from the C API. It can be simple, e.g.: @@ -13768,8 +13804,8 @@ Every rvalue has an associated type, and the API will check to ensure that types match up correctly (otherwise the context will emit an error). @geindex gccjit;;rvalue;;get_type (C++ function) -@anchor{cp/topics/expressions _CPPv4N6gccjit6rvalue8get_typeEv}@anchor{22d}@anchor{cp/topics/expressions _CPPv3N6gccjit6rvalue8get_typeEv}@anchor{22e}@anchor{cp/topics/expressions _CPPv2N6gccjit6rvalue8get_typeEv}@anchor{22f}@anchor{cp/topics/expressions gccjit rvalue get_type}@anchor{230} -@deffn {C++ Function} gccjit::@ref{170,,type} gccjit::@ref{177,,rvalue}::get_type () +@anchor{cp/topics/expressions _CPPv4N6gccjit6rvalue8get_typeEv}@anchor{230}@anchor{cp/topics/expressions _CPPv3N6gccjit6rvalue8get_typeEv}@anchor{231}@anchor{cp/topics/expressions _CPPv2N6gccjit6rvalue8get_typeEv}@anchor{232}@anchor{cp/topics/expressions gccjit rvalue get_type}@anchor{233} +@deffn {C++ Function} gccjit::@ref{173,,type} gccjit::@ref{17a,,rvalue}::get_type () Get the type of this rvalue. @end deffn @@ -13787,29 +13823,29 @@ Get the type of this rvalue. @end menu @node Simple expressions<2>,Vector expressions<2>,,Rvalues<2> -@anchor{cp/topics/expressions simple-expressions}@anchor{231} +@anchor{cp/topics/expressions simple-expressions}@anchor{234} @subsubsection Simple expressions @geindex gccjit;;context;;new_rvalue (C++ function) -@anchor{cp/topics/expressions _CPPv4NK6gccjit7context10new_rvalueEN6gccjit4typeEi}@anchor{18b}@anchor{cp/topics/expressions _CPPv3NK6gccjit7context10new_rvalueEN6gccjit4typeEi}@anchor{232}@anchor{cp/topics/expressions _CPPv2NK6gccjit7context10new_rvalueEN6gccjit4typeEi}@anchor{233}@anchor{cp/topics/expressions gccjit context new_rvalue__gccjit type iC}@anchor{234} -@deffn {C++ Function} gccjit::@ref{177,,rvalue} gccjit::@ref{16e,,context}::new_rvalue (gccjit::type numeric_type, int value) const +@anchor{cp/topics/expressions _CPPv4NK6gccjit7context10new_rvalueEN6gccjit4typeEi}@anchor{18e}@anchor{cp/topics/expressions _CPPv3NK6gccjit7context10new_rvalueEN6gccjit4typeEi}@anchor{235}@anchor{cp/topics/expressions _CPPv2NK6gccjit7context10new_rvalueEN6gccjit4typeEi}@anchor{236}@anchor{cp/topics/expressions gccjit context new_rvalue__gccjit type iC}@anchor{237} +@deffn {C++ Function} gccjit::@ref{17a,,rvalue} gccjit::@ref{171,,context}::new_rvalue (gccjit::type numeric_type, int value) const Given a numeric type (integer or floating point), build an rvalue for the given constant @code{int} value. @end deffn @geindex gccjit;;context;;new_rvalue (C++ function) -@anchor{cp/topics/expressions _CPPv4NK6gccjit7context10new_rvalueEN6gccjit4typeEl}@anchor{235}@anchor{cp/topics/expressions _CPPv3NK6gccjit7context10new_rvalueEN6gccjit4typeEl}@anchor{236}@anchor{cp/topics/expressions _CPPv2NK6gccjit7context10new_rvalueEN6gccjit4typeEl}@anchor{237}@anchor{cp/topics/expressions gccjit context new_rvalue__gccjit type lC}@anchor{238} -@deffn {C++ Function} gccjit::@ref{177,,rvalue} gccjit::@ref{16e,,context}::new_rvalue (gccjit::type numeric_type, long value) const +@anchor{cp/topics/expressions _CPPv4NK6gccjit7context10new_rvalueEN6gccjit4typeEl}@anchor{238}@anchor{cp/topics/expressions _CPPv3NK6gccjit7context10new_rvalueEN6gccjit4typeEl}@anchor{239}@anchor{cp/topics/expressions _CPPv2NK6gccjit7context10new_rvalueEN6gccjit4typeEl}@anchor{23a}@anchor{cp/topics/expressions gccjit context new_rvalue__gccjit type lC}@anchor{23b} +@deffn {C++ Function} gccjit::@ref{17a,,rvalue} gccjit::@ref{171,,context}::new_rvalue (gccjit::type numeric_type, long value) const Given a numeric type (integer or floating point), build an rvalue for the given constant @code{long} value. @end deffn @geindex gccjit;;context;;zero (C++ function) -@anchor{cp/topics/expressions _CPPv4NK6gccjit7context4zeroEN6gccjit4typeE}@anchor{187}@anchor{cp/topics/expressions _CPPv3NK6gccjit7context4zeroEN6gccjit4typeE}@anchor{239}@anchor{cp/topics/expressions _CPPv2NK6gccjit7context4zeroEN6gccjit4typeE}@anchor{23a}@anchor{cp/topics/expressions gccjit context zero__gccjit typeC}@anchor{23b} -@deffn {C++ Function} gccjit::@ref{177,,rvalue} gccjit::@ref{16e,,context}::zero (gccjit::type numeric_type) const +@anchor{cp/topics/expressions _CPPv4NK6gccjit7context4zeroEN6gccjit4typeE}@anchor{18a}@anchor{cp/topics/expressions _CPPv3NK6gccjit7context4zeroEN6gccjit4typeE}@anchor{23c}@anchor{cp/topics/expressions _CPPv2NK6gccjit7context4zeroEN6gccjit4typeE}@anchor{23d}@anchor{cp/topics/expressions gccjit context zero__gccjit typeC}@anchor{23e} +@deffn {C++ Function} gccjit::@ref{17a,,rvalue} gccjit::@ref{171,,context}::zero (gccjit::type numeric_type) const Given a numeric type (integer or floating point), get the rvalue for zero. Essentially this is just a shortcut for: @@ -13820,8 +13856,8 @@ ctxt.new_rvalue (numeric_type, 0) @end deffn @geindex gccjit;;context;;one (C++ function) -@anchor{cp/topics/expressions _CPPv4NK6gccjit7context3oneEN6gccjit4typeE}@anchor{23c}@anchor{cp/topics/expressions _CPPv3NK6gccjit7context3oneEN6gccjit4typeE}@anchor{23d}@anchor{cp/topics/expressions _CPPv2NK6gccjit7context3oneEN6gccjit4typeE}@anchor{23e}@anchor{cp/topics/expressions gccjit context one__gccjit typeC}@anchor{23f} -@deffn {C++ Function} gccjit::@ref{177,,rvalue} gccjit::@ref{16e,,context}::one (gccjit::type numeric_type) const +@anchor{cp/topics/expressions _CPPv4NK6gccjit7context3oneEN6gccjit4typeE}@anchor{23f}@anchor{cp/topics/expressions _CPPv3NK6gccjit7context3oneEN6gccjit4typeE}@anchor{240}@anchor{cp/topics/expressions _CPPv2NK6gccjit7context3oneEN6gccjit4typeE}@anchor{241}@anchor{cp/topics/expressions gccjit context one__gccjit typeC}@anchor{242} +@deffn {C++ Function} gccjit::@ref{17a,,rvalue} gccjit::@ref{171,,context}::one (gccjit::type numeric_type) const Given a numeric type (integer or floating point), get the rvalue for one. Essentially this is just a shortcut for: @@ -13832,36 +13868,36 @@ ctxt.new_rvalue (numeric_type, 1) @end deffn @geindex gccjit;;context;;new_rvalue (C++ function) -@anchor{cp/topics/expressions _CPPv4NK6gccjit7context10new_rvalueEN6gccjit4typeEd}@anchor{240}@anchor{cp/topics/expressions _CPPv3NK6gccjit7context10new_rvalueEN6gccjit4typeEd}@anchor{241}@anchor{cp/topics/expressions _CPPv2NK6gccjit7context10new_rvalueEN6gccjit4typeEd}@anchor{242}@anchor{cp/topics/expressions gccjit context new_rvalue__gccjit type doubleC}@anchor{243} -@deffn {C++ Function} gccjit::@ref{177,,rvalue} gccjit::@ref{16e,,context}::new_rvalue (gccjit::type numeric_type, double value) const +@anchor{cp/topics/expressions _CPPv4NK6gccjit7context10new_rvalueEN6gccjit4typeEd}@anchor{243}@anchor{cp/topics/expressions _CPPv3NK6gccjit7context10new_rvalueEN6gccjit4typeEd}@anchor{244}@anchor{cp/topics/expressions _CPPv2NK6gccjit7context10new_rvalueEN6gccjit4typeEd}@anchor{245}@anchor{cp/topics/expressions gccjit context new_rvalue__gccjit type doubleC}@anchor{246} +@deffn {C++ Function} gccjit::@ref{17a,,rvalue} gccjit::@ref{171,,context}::new_rvalue (gccjit::type numeric_type, double value) const Given a numeric type (integer or floating point), build an rvalue for the given constant @code{double} value. @end deffn @geindex gccjit;;context;;new_rvalue (C++ function) -@anchor{cp/topics/expressions _CPPv4NK6gccjit7context10new_rvalueEN6gccjit4typeEPv}@anchor{244}@anchor{cp/topics/expressions _CPPv3NK6gccjit7context10new_rvalueEN6gccjit4typeEPv}@anchor{245}@anchor{cp/topics/expressions _CPPv2NK6gccjit7context10new_rvalueEN6gccjit4typeEPv}@anchor{246}@anchor{cp/topics/expressions gccjit context new_rvalue__gccjit type voidPC}@anchor{247} -@deffn {C++ Function} gccjit::@ref{177,,rvalue} gccjit::@ref{16e,,context}::new_rvalue (gccjit::type pointer_type, void *value) const +@anchor{cp/topics/expressions _CPPv4NK6gccjit7context10new_rvalueEN6gccjit4typeEPv}@anchor{247}@anchor{cp/topics/expressions _CPPv3NK6gccjit7context10new_rvalueEN6gccjit4typeEPv}@anchor{248}@anchor{cp/topics/expressions _CPPv2NK6gccjit7context10new_rvalueEN6gccjit4typeEPv}@anchor{249}@anchor{cp/topics/expressions gccjit context new_rvalue__gccjit type voidPC}@anchor{24a} +@deffn {C++ Function} gccjit::@ref{17a,,rvalue} gccjit::@ref{171,,context}::new_rvalue (gccjit::type pointer_type, void *value) const Given a pointer type, build an rvalue for the given address. @end deffn @geindex gccjit;;context;;new_rvalue (C++ function) -@anchor{cp/topics/expressions _CPPv4NK6gccjit7context10new_rvalueERKNSt6stringE}@anchor{248}@anchor{cp/topics/expressions _CPPv3NK6gccjit7context10new_rvalueERKNSt6stringE}@anchor{249}@anchor{cp/topics/expressions _CPPv2NK6gccjit7context10new_rvalueERKNSt6stringE}@anchor{24a}@anchor{cp/topics/expressions gccjit context new_rvalue__ssCRC}@anchor{24b} -@deffn {C++ Function} gccjit::@ref{177,,rvalue} gccjit::@ref{16e,,context}::new_rvalue (const std::string &value) const +@anchor{cp/topics/expressions _CPPv4NK6gccjit7context10new_rvalueERKNSt6stringE}@anchor{24b}@anchor{cp/topics/expressions _CPPv3NK6gccjit7context10new_rvalueERKNSt6stringE}@anchor{24c}@anchor{cp/topics/expressions _CPPv2NK6gccjit7context10new_rvalueERKNSt6stringE}@anchor{24d}@anchor{cp/topics/expressions gccjit context new_rvalue__ssCRC}@anchor{24e} +@deffn {C++ Function} gccjit::@ref{17a,,rvalue} gccjit::@ref{171,,context}::new_rvalue (const std::string &value) const Generate an rvalue of type @code{GCC_JIT_TYPE_CONST_CHAR_PTR} for the given string. This is akin to a string literal. @end deffn @node Vector expressions<2>,Unary Operations<2>,Simple expressions<2>,Rvalues<2> -@anchor{cp/topics/expressions vector-expressions}@anchor{24c} +@anchor{cp/topics/expressions vector-expressions}@anchor{24f} @subsubsection Vector expressions @geindex gccjit;;context;;new_rvalue (C++ function) -@anchor{cp/topics/expressions _CPPv4NK6gccjit7context10new_rvalueEN6gccjit4typeENSt6vectorIN6gccjit6rvalueEEE}@anchor{24d}@anchor{cp/topics/expressions _CPPv3NK6gccjit7context10new_rvalueEN6gccjit4typeENSt6vectorIN6gccjit6rvalueEEE}@anchor{24e}@anchor{cp/topics/expressions _CPPv2NK6gccjit7context10new_rvalueEN6gccjit4typeENSt6vectorIN6gccjit6rvalueEEE}@anchor{24f}@anchor{cp/topics/expressions gccjit context new_rvalue__gccjit type std vector gccjit rvalue C}@anchor{250} -@deffn {C++ Function} gccjit::@ref{177,,rvalue} gccjit::@ref{16e,,context}::new_rvalue (gccjit::type vector_type, std::vector<gccjit::rvalue> elements) const +@anchor{cp/topics/expressions _CPPv4NK6gccjit7context10new_rvalueEN6gccjit4typeENSt6vectorIN6gccjit6rvalueEEE}@anchor{250}@anchor{cp/topics/expressions _CPPv3NK6gccjit7context10new_rvalueEN6gccjit4typeENSt6vectorIN6gccjit6rvalueEEE}@anchor{251}@anchor{cp/topics/expressions _CPPv2NK6gccjit7context10new_rvalueEN6gccjit4typeENSt6vectorIN6gccjit6rvalueEEE}@anchor{252}@anchor{cp/topics/expressions gccjit context new_rvalue__gccjit type std vector gccjit rvalue C}@anchor{253} +@deffn {C++ Function} gccjit::@ref{17a,,rvalue} gccjit::@ref{171,,context}::new_rvalue (gccjit::type vector_type, std::vector<gccjit::rvalue> elements) const Given a vector type, and a vector of scalar rvalue elements, generate a vector rvalue. @@ -13870,20 +13906,20 @@ The number of elements needs to match that of the vector type. @end deffn @node Unary Operations<2>,Binary Operations<2>,Vector expressions<2>,Rvalues<2> -@anchor{cp/topics/expressions unary-operations}@anchor{251} +@anchor{cp/topics/expressions unary-operations}@anchor{254} @subsubsection Unary Operations @geindex gccjit;;context;;new_unary_op (C++ function) -@anchor{cp/topics/expressions _CPPv4N6gccjit7context12new_unary_opE16gcc_jit_unary_opN6gccjit4typeEN6gccjit6rvalueEN6gccjit8locationE}@anchor{252}@anchor{cp/topics/expressions _CPPv3N6gccjit7context12new_unary_opE16gcc_jit_unary_opN6gccjit4typeEN6gccjit6rvalueEN6gccjit8locationE}@anchor{253}@anchor{cp/topics/expressions _CPPv2N6gccjit7context12new_unary_opE16gcc_jit_unary_opN6gccjit4typeEN6gccjit6rvalueEN6gccjit8locationE}@anchor{254}@anchor{cp/topics/expressions gccjit context new_unary_op__gcc_jit_unary_op gccjit type gccjit rvalue gccjit location}@anchor{255} -@deffn {C++ Function} gccjit::@ref{177,,rvalue} gccjit::@ref{16e,,context}::new_unary_op (enum gcc_jit_unary_op, gccjit::type result_type, gccjit::rvalue rvalue, gccjit::location loc) +@anchor{cp/topics/expressions _CPPv4N6gccjit7context12new_unary_opE16gcc_jit_unary_opN6gccjit4typeEN6gccjit6rvalueEN6gccjit8locationE}@anchor{255}@anchor{cp/topics/expressions _CPPv3N6gccjit7context12new_unary_opE16gcc_jit_unary_opN6gccjit4typeEN6gccjit6rvalueEN6gccjit8locationE}@anchor{256}@anchor{cp/topics/expressions _CPPv2N6gccjit7context12new_unary_opE16gcc_jit_unary_opN6gccjit4typeEN6gccjit6rvalueEN6gccjit8locationE}@anchor{257}@anchor{cp/topics/expressions gccjit context new_unary_op__gcc_jit_unary_op gccjit type gccjit rvalue gccjit location}@anchor{258} +@deffn {C++ Function} gccjit::@ref{17a,,rvalue} gccjit::@ref{171,,context}::new_unary_op (enum gcc_jit_unary_op, gccjit::type result_type, gccjit::rvalue rvalue, gccjit::location loc) Build a unary operation out of an input rvalue. Parameter @code{loc} is optional. This is a thin wrapper around the C API’s -@ref{bd,,gcc_jit_context_new_unary_op()} and the available unary +@ref{bf,,gcc_jit_context_new_unary_op()} and the available unary operations are documented there. @end deffn @@ -13891,8 +13927,8 @@ There are shorter ways to spell the various specific kinds of unary operation: @geindex gccjit;;context;;new_minus (C++ function) -@anchor{cp/topics/expressions _CPPv4N6gccjit7context9new_minusEN6gccjit4typeEN6gccjit6rvalueEN6gccjit8locationE}@anchor{256}@anchor{cp/topics/expressions _CPPv3N6gccjit7context9new_minusEN6gccjit4typeEN6gccjit6rvalueEN6gccjit8locationE}@anchor{257}@anchor{cp/topics/expressions _CPPv2N6gccjit7context9new_minusEN6gccjit4typeEN6gccjit6rvalueEN6gccjit8locationE}@anchor{258}@anchor{cp/topics/expressions gccjit context new_minus__gccjit type gccjit rvalue gccjit location}@anchor{259} -@deffn {C++ Function} gccjit::@ref{177,,rvalue} gccjit::@ref{16e,,context}::new_minus (gccjit::type result_type, gccjit::rvalue a, gccjit::location loc) +@anchor{cp/topics/expressions _CPPv4N6gccjit7context9new_minusEN6gccjit4typeEN6gccjit6rvalueEN6gccjit8locationE}@anchor{259}@anchor{cp/topics/expressions _CPPv3N6gccjit7context9new_minusEN6gccjit4typeEN6gccjit6rvalueEN6gccjit8locationE}@anchor{25a}@anchor{cp/topics/expressions _CPPv2N6gccjit7context9new_minusEN6gccjit4typeEN6gccjit6rvalueEN6gccjit8locationE}@anchor{25b}@anchor{cp/topics/expressions gccjit context new_minus__gccjit type gccjit rvalue gccjit location}@anchor{25c} +@deffn {C++ Function} gccjit::@ref{17a,,rvalue} gccjit::@ref{171,,context}::new_minus (gccjit::type result_type, gccjit::rvalue a, gccjit::location loc) Negate an arithmetic value; for example: @@ -13908,8 +13944,8 @@ builds the equivalent of this C expression: @end deffn @geindex new_bitwise_negate (C++ function) -@anchor{cp/topics/expressions _CPPv418new_bitwise_negateN6gccjit4typeEN6gccjit6rvalueEN6gccjit8locationE}@anchor{25a}@anchor{cp/topics/expressions _CPPv318new_bitwise_negateN6gccjit4typeEN6gccjit6rvalueEN6gccjit8locationE}@anchor{25b}@anchor{cp/topics/expressions _CPPv218new_bitwise_negateN6gccjit4typeEN6gccjit6rvalueEN6gccjit8locationE}@anchor{25c}@anchor{cp/topics/expressions new_bitwise_negate__gccjit type gccjit rvalue gccjit location}@anchor{25d} -@deffn {C++ Function} gccjit::@ref{177,,rvalue} new_bitwise_negate (gccjit::type result_type, gccjit::rvalue a, gccjit::location loc) +@anchor{cp/topics/expressions _CPPv418new_bitwise_negateN6gccjit4typeEN6gccjit6rvalueEN6gccjit8locationE}@anchor{25d}@anchor{cp/topics/expressions _CPPv318new_bitwise_negateN6gccjit4typeEN6gccjit6rvalueEN6gccjit8locationE}@anchor{25e}@anchor{cp/topics/expressions _CPPv218new_bitwise_negateN6gccjit4typeEN6gccjit6rvalueEN6gccjit8locationE}@anchor{25f}@anchor{cp/topics/expressions new_bitwise_negate__gccjit type gccjit rvalue gccjit location}@anchor{260} +@deffn {C++ Function} gccjit::@ref{17a,,rvalue} new_bitwise_negate (gccjit::type result_type, gccjit::rvalue a, gccjit::location loc) Bitwise negation of an integer value (one’s complement); for example: @@ -13925,8 +13961,8 @@ builds the equivalent of this C expression: @end deffn @geindex new_logical_negate (C++ function) -@anchor{cp/topics/expressions _CPPv418new_logical_negateN6gccjit4typeEN6gccjit6rvalueEN6gccjit8locationE}@anchor{25e}@anchor{cp/topics/expressions _CPPv318new_logical_negateN6gccjit4typeEN6gccjit6rvalueEN6gccjit8locationE}@anchor{25f}@anchor{cp/topics/expressions _CPPv218new_logical_negateN6gccjit4typeEN6gccjit6rvalueEN6gccjit8locationE}@anchor{260}@anchor{cp/topics/expressions new_logical_negate__gccjit type gccjit rvalue gccjit location}@anchor{261} -@deffn {C++ Function} gccjit::@ref{177,,rvalue} new_logical_negate (gccjit::type result_type, gccjit::rvalue a, gccjit::location loc) +@anchor{cp/topics/expressions _CPPv418new_logical_negateN6gccjit4typeEN6gccjit6rvalueEN6gccjit8locationE}@anchor{261}@anchor{cp/topics/expressions _CPPv318new_logical_negateN6gccjit4typeEN6gccjit6rvalueEN6gccjit8locationE}@anchor{262}@anchor{cp/topics/expressions _CPPv218new_logical_negateN6gccjit4typeEN6gccjit6rvalueEN6gccjit8locationE}@anchor{263}@anchor{cp/topics/expressions new_logical_negate__gccjit type gccjit rvalue gccjit location}@anchor{264} +@deffn {C++ Function} gccjit::@ref{17a,,rvalue} new_logical_negate (gccjit::type result_type, gccjit::rvalue a, gccjit::location loc) Logical negation of an arithmetic or pointer value; for example: @@ -13944,8 +13980,8 @@ builds the equivalent of this C expression: The most concise way to spell them is with overloaded operators: @geindex operator- (C++ function) -@anchor{cp/topics/expressions _CPPv4miN6gccjit6rvalueE}@anchor{262}@anchor{cp/topics/expressions _CPPv3miN6gccjit6rvalueE}@anchor{263}@anchor{cp/topics/expressions _CPPv2miN6gccjit6rvalueE}@anchor{264}@anchor{cp/topics/expressions sub-operator__gccjit rvalue}@anchor{265} -@deffn {C++ Function} gccjit::@ref{177,,rvalue} operator@w{-} (gccjit::rvalue a) +@anchor{cp/topics/expressions _CPPv4miN6gccjit6rvalueE}@anchor{265}@anchor{cp/topics/expressions _CPPv3miN6gccjit6rvalueE}@anchor{266}@anchor{cp/topics/expressions _CPPv2miN6gccjit6rvalueE}@anchor{267}@anchor{cp/topics/expressions sub-operator__gccjit rvalue}@anchor{268} +@deffn {C++ Function} gccjit::@ref{17a,,rvalue} operator@w{-} (gccjit::rvalue a) @example gccjit::rvalue negpi = -pi; @@ -13953,8 +13989,8 @@ gccjit::rvalue negpi = -pi; @end deffn @geindex operator~ (C++ function) -@anchor{cp/topics/expressions _CPPv4coN6gccjit6rvalueE}@anchor{266}@anchor{cp/topics/expressions _CPPv3coN6gccjit6rvalueE}@anchor{267}@anchor{cp/topics/expressions _CPPv2coN6gccjit6rvalueE}@anchor{268}@anchor{cp/topics/expressions inv-operator__gccjit rvalue}@anchor{269} -@deffn {C++ Function} gccjit::@ref{177,,rvalue} operator~ (gccjit::rvalue a) +@anchor{cp/topics/expressions _CPPv4coN6gccjit6rvalueE}@anchor{269}@anchor{cp/topics/expressions _CPPv3coN6gccjit6rvalueE}@anchor{26a}@anchor{cp/topics/expressions _CPPv2coN6gccjit6rvalueE}@anchor{26b}@anchor{cp/topics/expressions inv-operator__gccjit rvalue}@anchor{26c} +@deffn {C++ Function} gccjit::@ref{17a,,rvalue} operator~ (gccjit::rvalue a) @example gccjit::rvalue mask = ~a; @@ -13962,8 +13998,8 @@ gccjit::rvalue mask = ~a; @end deffn @geindex operator! (C++ function) -@anchor{cp/topics/expressions _CPPv4ntN6gccjit6rvalueE}@anchor{26a}@anchor{cp/topics/expressions _CPPv3ntN6gccjit6rvalueE}@anchor{26b}@anchor{cp/topics/expressions _CPPv2ntN6gccjit6rvalueE}@anchor{26c}@anchor{cp/topics/expressions not-operator__gccjit rvalue}@anchor{26d} -@deffn {C++ Function} gccjit::@ref{177,,rvalue} operator! (gccjit::rvalue a) +@anchor{cp/topics/expressions _CPPv4ntN6gccjit6rvalueE}@anchor{26d}@anchor{cp/topics/expressions _CPPv3ntN6gccjit6rvalueE}@anchor{26e}@anchor{cp/topics/expressions _CPPv2ntN6gccjit6rvalueE}@anchor{26f}@anchor{cp/topics/expressions not-operator__gccjit rvalue}@anchor{270} +@deffn {C++ Function} gccjit::@ref{17a,,rvalue} operator! (gccjit::rvalue a) @example gccjit::rvalue guard = !cond; @@ -13971,13 +14007,13 @@ gccjit::rvalue guard = !cond; @end deffn @node Binary Operations<2>,Comparisons<2>,Unary Operations<2>,Rvalues<2> -@anchor{cp/topics/expressions binary-operations}@anchor{26e} +@anchor{cp/topics/expressions binary-operations}@anchor{271} @subsubsection Binary Operations @geindex gccjit;;context;;new_binary_op (C++ function) -@anchor{cp/topics/expressions _CPPv4N6gccjit7context13new_binary_opE17gcc_jit_binary_opN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{176}@anchor{cp/topics/expressions _CPPv3N6gccjit7context13new_binary_opE17gcc_jit_binary_opN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{26f}@anchor{cp/topics/expressions _CPPv2N6gccjit7context13new_binary_opE17gcc_jit_binary_opN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{270}@anchor{cp/topics/expressions gccjit context new_binary_op__gcc_jit_binary_op gccjit type gccjit rvalue gccjit rvalue gccjit location}@anchor{271} -@deffn {C++ Function} gccjit::@ref{177,,rvalue} gccjit::@ref{16e,,context}::new_binary_op (enum gcc_jit_binary_op, gccjit::type result_type, gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc) +@anchor{cp/topics/expressions _CPPv4N6gccjit7context13new_binary_opE17gcc_jit_binary_opN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{179}@anchor{cp/topics/expressions _CPPv3N6gccjit7context13new_binary_opE17gcc_jit_binary_opN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{272}@anchor{cp/topics/expressions _CPPv2N6gccjit7context13new_binary_opE17gcc_jit_binary_opN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{273}@anchor{cp/topics/expressions gccjit context new_binary_op__gcc_jit_binary_op gccjit type gccjit rvalue gccjit rvalue gccjit location}@anchor{274} +@deffn {C++ Function} gccjit::@ref{17a,,rvalue} gccjit::@ref{171,,context}::new_binary_op (enum gcc_jit_binary_op, gccjit::type result_type, gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc) Build a binary operation out of two constituent rvalues. @@ -13992,60 +14028,60 @@ There are shorter ways to spell the various specific kinds of binary operation: @geindex gccjit;;context;;new_plus (C++ function) -@anchor{cp/topics/expressions _CPPv4N6gccjit7context8new_plusEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{272}@anchor{cp/topics/expressions _CPPv3N6gccjit7context8new_plusEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{273}@anchor{cp/topics/expressions _CPPv2N6gccjit7context8new_plusEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{274}@anchor{cp/topics/expressions gccjit context new_plus__gccjit type gccjit rvalue gccjit rvalue gccjit location}@anchor{275} -@deffn {C++ Function} gccjit::@ref{177,,rvalue} gccjit::@ref{16e,,context}::new_plus (gccjit::type result_type, gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc) +@anchor{cp/topics/expressions _CPPv4N6gccjit7context8new_plusEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{275}@anchor{cp/topics/expressions _CPPv3N6gccjit7context8new_plusEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{276}@anchor{cp/topics/expressions _CPPv2N6gccjit7context8new_plusEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{277}@anchor{cp/topics/expressions gccjit context new_plus__gccjit type gccjit rvalue gccjit rvalue gccjit location}@anchor{278} +@deffn {C++ Function} gccjit::@ref{17a,,rvalue} gccjit::@ref{171,,context}::new_plus (gccjit::type result_type, gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc) @end deffn @geindex gccjit;;context;;new_minus (C++ function) -@anchor{cp/topics/expressions _CPPv4N6gccjit7context9new_minusEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{276}@anchor{cp/topics/expressions _CPPv3N6gccjit7context9new_minusEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{277}@anchor{cp/topics/expressions _CPPv2N6gccjit7context9new_minusEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{278}@anchor{cp/topics/expressions gccjit context new_minus__gccjit type gccjit rvalue gccjit rvalue gccjit location}@anchor{279} -@deffn {C++ Function} gccjit::@ref{177,,rvalue} gccjit::@ref{16e,,context}::new_minus (gccjit::type result_type, gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc) +@anchor{cp/topics/expressions _CPPv4N6gccjit7context9new_minusEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{279}@anchor{cp/topics/expressions _CPPv3N6gccjit7context9new_minusEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{27a}@anchor{cp/topics/expressions _CPPv2N6gccjit7context9new_minusEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{27b}@anchor{cp/topics/expressions gccjit context new_minus__gccjit type gccjit rvalue gccjit rvalue gccjit location}@anchor{27c} +@deffn {C++ Function} gccjit::@ref{17a,,rvalue} gccjit::@ref{171,,context}::new_minus (gccjit::type result_type, gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc) @end deffn @geindex gccjit;;context;;new_mult (C++ function) -@anchor{cp/topics/expressions _CPPv4N6gccjit7context8new_multEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{27a}@anchor{cp/topics/expressions _CPPv3N6gccjit7context8new_multEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{27b}@anchor{cp/topics/expressions _CPPv2N6gccjit7context8new_multEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{27c}@anchor{cp/topics/expressions gccjit context new_mult__gccjit type gccjit rvalue gccjit rvalue gccjit location}@anchor{27d} -@deffn {C++ Function} gccjit::@ref{177,,rvalue} gccjit::@ref{16e,,context}::new_mult (gccjit::type result_type, gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc) +@anchor{cp/topics/expressions _CPPv4N6gccjit7context8new_multEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{27d}@anchor{cp/topics/expressions _CPPv3N6gccjit7context8new_multEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{27e}@anchor{cp/topics/expressions _CPPv2N6gccjit7context8new_multEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{27f}@anchor{cp/topics/expressions gccjit context new_mult__gccjit type gccjit rvalue gccjit rvalue gccjit location}@anchor{280} +@deffn {C++ Function} gccjit::@ref{17a,,rvalue} gccjit::@ref{171,,context}::new_mult (gccjit::type result_type, gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc) @end deffn @geindex gccjit;;context;;new_divide (C++ function) -@anchor{cp/topics/expressions _CPPv4N6gccjit7context10new_divideEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{27e}@anchor{cp/topics/expressions _CPPv3N6gccjit7context10new_divideEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{27f}@anchor{cp/topics/expressions _CPPv2N6gccjit7context10new_divideEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{280}@anchor{cp/topics/expressions gccjit context new_divide__gccjit type gccjit rvalue gccjit rvalue gccjit location}@anchor{281} -@deffn {C++ Function} gccjit::@ref{177,,rvalue} gccjit::@ref{16e,,context}::new_divide (gccjit::type result_type, gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc) +@anchor{cp/topics/expressions _CPPv4N6gccjit7context10new_divideEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{281}@anchor{cp/topics/expressions _CPPv3N6gccjit7context10new_divideEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{282}@anchor{cp/topics/expressions _CPPv2N6gccjit7context10new_divideEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{283}@anchor{cp/topics/expressions gccjit context new_divide__gccjit type gccjit rvalue gccjit rvalue gccjit location}@anchor{284} +@deffn {C++ Function} gccjit::@ref{17a,,rvalue} gccjit::@ref{171,,context}::new_divide (gccjit::type result_type, gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc) @end deffn @geindex gccjit;;context;;new_modulo (C++ function) -@anchor{cp/topics/expressions _CPPv4N6gccjit7context10new_moduloEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{282}@anchor{cp/topics/expressions _CPPv3N6gccjit7context10new_moduloEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{283}@anchor{cp/topics/expressions _CPPv2N6gccjit7context10new_moduloEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{284}@anchor{cp/topics/expressions gccjit context new_modulo__gccjit type gccjit rvalue gccjit rvalue gccjit location}@anchor{285} -@deffn {C++ Function} gccjit::@ref{177,,rvalue} gccjit::@ref{16e,,context}::new_modulo (gccjit::type result_type, gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc) +@anchor{cp/topics/expressions _CPPv4N6gccjit7context10new_moduloEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{285}@anchor{cp/topics/expressions _CPPv3N6gccjit7context10new_moduloEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{286}@anchor{cp/topics/expressions _CPPv2N6gccjit7context10new_moduloEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{287}@anchor{cp/topics/expressions gccjit context new_modulo__gccjit type gccjit rvalue gccjit rvalue gccjit location}@anchor{288} +@deffn {C++ Function} gccjit::@ref{17a,,rvalue} gccjit::@ref{171,,context}::new_modulo (gccjit::type result_type, gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc) @end deffn @geindex gccjit;;context;;new_bitwise_and (C++ function) -@anchor{cp/topics/expressions _CPPv4N6gccjit7context15new_bitwise_andEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{286}@anchor{cp/topics/expressions _CPPv3N6gccjit7context15new_bitwise_andEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{287}@anchor{cp/topics/expressions _CPPv2N6gccjit7context15new_bitwise_andEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{288}@anchor{cp/topics/expressions gccjit context new_bitwise_and__gccjit type gccjit rvalue gccjit rvalue gccjit location}@anchor{289} -@deffn {C++ Function} gccjit::@ref{177,,rvalue} gccjit::@ref{16e,,context}::new_bitwise_and (gccjit::type result_type, gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc) +@anchor{cp/topics/expressions _CPPv4N6gccjit7context15new_bitwise_andEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{289}@anchor{cp/topics/expressions _CPPv3N6gccjit7context15new_bitwise_andEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{28a}@anchor{cp/topics/expressions _CPPv2N6gccjit7context15new_bitwise_andEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{28b}@anchor{cp/topics/expressions gccjit context new_bitwise_and__gccjit type gccjit rvalue gccjit rvalue gccjit location}@anchor{28c} +@deffn {C++ Function} gccjit::@ref{17a,,rvalue} gccjit::@ref{171,,context}::new_bitwise_and (gccjit::type result_type, gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc) @end deffn @geindex gccjit;;context;;new_bitwise_xor (C++ function) -@anchor{cp/topics/expressions _CPPv4N6gccjit7context15new_bitwise_xorEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{28a}@anchor{cp/topics/expressions _CPPv3N6gccjit7context15new_bitwise_xorEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{28b}@anchor{cp/topics/expressions _CPPv2N6gccjit7context15new_bitwise_xorEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{28c}@anchor{cp/topics/expressions gccjit context new_bitwise_xor__gccjit type gccjit rvalue gccjit rvalue gccjit location}@anchor{28d} -@deffn {C++ Function} gccjit::@ref{177,,rvalue} gccjit::@ref{16e,,context}::new_bitwise_xor (gccjit::type result_type, gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc) +@anchor{cp/topics/expressions _CPPv4N6gccjit7context15new_bitwise_xorEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{28d}@anchor{cp/topics/expressions _CPPv3N6gccjit7context15new_bitwise_xorEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{28e}@anchor{cp/topics/expressions _CPPv2N6gccjit7context15new_bitwise_xorEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{28f}@anchor{cp/topics/expressions gccjit context new_bitwise_xor__gccjit type gccjit rvalue gccjit rvalue gccjit location}@anchor{290} +@deffn {C++ Function} gccjit::@ref{17a,,rvalue} gccjit::@ref{171,,context}::new_bitwise_xor (gccjit::type result_type, gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc) @end deffn @geindex gccjit;;context;;new_bitwise_or (C++ function) -@anchor{cp/topics/expressions _CPPv4N6gccjit7context14new_bitwise_orEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{28e}@anchor{cp/topics/expressions _CPPv3N6gccjit7context14new_bitwise_orEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{28f}@anchor{cp/topics/expressions _CPPv2N6gccjit7context14new_bitwise_orEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{290}@anchor{cp/topics/expressions gccjit context new_bitwise_or__gccjit type gccjit rvalue gccjit rvalue gccjit location}@anchor{291} -@deffn {C++ Function} gccjit::@ref{177,,rvalue} gccjit::@ref{16e,,context}::new_bitwise_or (gccjit::type result_type, gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc) +@anchor{cp/topics/expressions _CPPv4N6gccjit7context14new_bitwise_orEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{291}@anchor{cp/topics/expressions _CPPv3N6gccjit7context14new_bitwise_orEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{292}@anchor{cp/topics/expressions _CPPv2N6gccjit7context14new_bitwise_orEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{293}@anchor{cp/topics/expressions gccjit context new_bitwise_or__gccjit type gccjit rvalue gccjit rvalue gccjit location}@anchor{294} +@deffn {C++ Function} gccjit::@ref{17a,,rvalue} gccjit::@ref{171,,context}::new_bitwise_or (gccjit::type result_type, gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc) @end deffn @geindex gccjit;;context;;new_logical_and (C++ function) -@anchor{cp/topics/expressions _CPPv4N6gccjit7context15new_logical_andEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{292}@anchor{cp/topics/expressions _CPPv3N6gccjit7context15new_logical_andEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{293}@anchor{cp/topics/expressions _CPPv2N6gccjit7context15new_logical_andEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{294}@anchor{cp/topics/expressions gccjit context new_logical_and__gccjit type gccjit rvalue gccjit rvalue gccjit location}@anchor{295} -@deffn {C++ Function} gccjit::@ref{177,,rvalue} gccjit::@ref{16e,,context}::new_logical_and (gccjit::type result_type, gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc) +@anchor{cp/topics/expressions _CPPv4N6gccjit7context15new_logical_andEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{295}@anchor{cp/topics/expressions _CPPv3N6gccjit7context15new_logical_andEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{296}@anchor{cp/topics/expressions _CPPv2N6gccjit7context15new_logical_andEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{297}@anchor{cp/topics/expressions gccjit context new_logical_and__gccjit type gccjit rvalue gccjit rvalue gccjit location}@anchor{298} +@deffn {C++ Function} gccjit::@ref{17a,,rvalue} gccjit::@ref{171,,context}::new_logical_and (gccjit::type result_type, gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc) @end deffn @geindex gccjit;;context;;new_logical_or (C++ function) -@anchor{cp/topics/expressions _CPPv4N6gccjit7context14new_logical_orEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{296}@anchor{cp/topics/expressions _CPPv3N6gccjit7context14new_logical_orEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{297}@anchor{cp/topics/expressions _CPPv2N6gccjit7context14new_logical_orEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{298}@anchor{cp/topics/expressions gccjit context new_logical_or__gccjit type gccjit rvalue gccjit rvalue gccjit location}@anchor{299} -@deffn {C++ Function} gccjit::@ref{177,,rvalue} gccjit::@ref{16e,,context}::new_logical_or (gccjit::type result_type, gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc) +@anchor{cp/topics/expressions _CPPv4N6gccjit7context14new_logical_orEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{299}@anchor{cp/topics/expressions _CPPv3N6gccjit7context14new_logical_orEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{29a}@anchor{cp/topics/expressions _CPPv2N6gccjit7context14new_logical_orEN6gccjit4typeEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{29b}@anchor{cp/topics/expressions gccjit context new_logical_or__gccjit type gccjit rvalue gccjit rvalue gccjit location}@anchor{29c} +@deffn {C++ Function} gccjit::@ref{17a,,rvalue} gccjit::@ref{171,,context}::new_logical_or (gccjit::type result_type, gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc) @end deffn The most concise way to spell them is with overloaded operators: @geindex operator+ (C++ function) -@anchor{cp/topics/expressions _CPPv4plN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{29a}@anchor{cp/topics/expressions _CPPv3plN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{29b}@anchor{cp/topics/expressions _CPPv2plN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{29c}@anchor{cp/topics/expressions add-operator__gccjit rvalue gccjit rvalue}@anchor{29d} -@deffn {C++ Function} gccjit::@ref{177,,rvalue} operator+ (gccjit::rvalue a, gccjit::rvalue b) +@anchor{cp/topics/expressions _CPPv4plN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{29d}@anchor{cp/topics/expressions _CPPv3plN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{29e}@anchor{cp/topics/expressions _CPPv2plN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{29f}@anchor{cp/topics/expressions add-operator__gccjit rvalue gccjit rvalue}@anchor{2a0} +@deffn {C++ Function} gccjit::@ref{17a,,rvalue} operator+ (gccjit::rvalue a, gccjit::rvalue b) @example gccjit::rvalue sum = a + b; @@ -14053,8 +14089,8 @@ gccjit::rvalue sum = a + b; @end deffn @geindex operator- (C++ function) -@anchor{cp/topics/expressions _CPPv4miN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{29e}@anchor{cp/topics/expressions _CPPv3miN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{29f}@anchor{cp/topics/expressions _CPPv2miN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2a0}@anchor{cp/topics/expressions sub-operator__gccjit rvalue gccjit rvalue}@anchor{2a1} -@deffn {C++ Function} gccjit::@ref{177,,rvalue} operator@w{-} (gccjit::rvalue a, gccjit::rvalue b) +@anchor{cp/topics/expressions _CPPv4miN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2a1}@anchor{cp/topics/expressions _CPPv3miN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2a2}@anchor{cp/topics/expressions _CPPv2miN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2a3}@anchor{cp/topics/expressions sub-operator__gccjit rvalue gccjit rvalue}@anchor{2a4} +@deffn {C++ Function} gccjit::@ref{17a,,rvalue} operator@w{-} (gccjit::rvalue a, gccjit::rvalue b) @example gccjit::rvalue diff = a - b; @@ -14062,8 +14098,8 @@ gccjit::rvalue diff = a - b; @end deffn @geindex operator* (C++ function) -@anchor{cp/topics/expressions _CPPv4mlN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2a2}@anchor{cp/topics/expressions _CPPv3mlN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2a3}@anchor{cp/topics/expressions _CPPv2mlN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2a4}@anchor{cp/topics/expressions mul-operator__gccjit rvalue gccjit rvalue}@anchor{2a5} -@deffn {C++ Function} gccjit::@ref{177,,rvalue} operator* (gccjit::rvalue a, gccjit::rvalue b) +@anchor{cp/topics/expressions _CPPv4mlN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2a5}@anchor{cp/topics/expressions _CPPv3mlN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2a6}@anchor{cp/topics/expressions _CPPv2mlN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2a7}@anchor{cp/topics/expressions mul-operator__gccjit rvalue gccjit rvalue}@anchor{2a8} +@deffn {C++ Function} gccjit::@ref{17a,,rvalue} operator* (gccjit::rvalue a, gccjit::rvalue b) @example gccjit::rvalue prod = a * b; @@ -14071,8 +14107,8 @@ gccjit::rvalue prod = a * b; @end deffn @geindex operator/ (C++ function) -@anchor{cp/topics/expressions _CPPv4dvN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2a6}@anchor{cp/topics/expressions _CPPv3dvN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2a7}@anchor{cp/topics/expressions _CPPv2dvN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2a8}@anchor{cp/topics/expressions div-operator__gccjit rvalue gccjit rvalue}@anchor{2a9} -@deffn {C++ Function} gccjit::@ref{177,,rvalue} operator/ (gccjit::rvalue a, gccjit::rvalue b) +@anchor{cp/topics/expressions _CPPv4dvN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2a9}@anchor{cp/topics/expressions _CPPv3dvN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2aa}@anchor{cp/topics/expressions _CPPv2dvN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2ab}@anchor{cp/topics/expressions div-operator__gccjit rvalue gccjit rvalue}@anchor{2ac} +@deffn {C++ Function} gccjit::@ref{17a,,rvalue} operator/ (gccjit::rvalue a, gccjit::rvalue b) @example gccjit::rvalue result = a / b; @@ -14080,8 +14116,8 @@ gccjit::rvalue result = a / b; @end deffn @geindex operator% (C++ function) -@anchor{cp/topics/expressions _CPPv4rmN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2aa}@anchor{cp/topics/expressions _CPPv3rmN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2ab}@anchor{cp/topics/expressions _CPPv2rmN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2ac}@anchor{cp/topics/expressions mod-operator__gccjit rvalue gccjit rvalue}@anchor{2ad} -@deffn {C++ Function} gccjit::@ref{177,,rvalue} operator% (gccjit::rvalue a, gccjit::rvalue b) +@anchor{cp/topics/expressions _CPPv4rmN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2ad}@anchor{cp/topics/expressions _CPPv3rmN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2ae}@anchor{cp/topics/expressions _CPPv2rmN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2af}@anchor{cp/topics/expressions mod-operator__gccjit rvalue gccjit rvalue}@anchor{2b0} +@deffn {C++ Function} gccjit::@ref{17a,,rvalue} operator% (gccjit::rvalue a, gccjit::rvalue b) @example gccjit::rvalue mod = a % b; @@ -14089,8 +14125,8 @@ gccjit::rvalue mod = a % b; @end deffn @geindex operator& (C++ function) -@anchor{cp/topics/expressions _CPPv4anN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2ae}@anchor{cp/topics/expressions _CPPv3anN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2af}@anchor{cp/topics/expressions _CPPv2anN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2b0}@anchor{cp/topics/expressions and-operator__gccjit rvalue gccjit rvalue}@anchor{2b1} -@deffn {C++ Function} gccjit::@ref{177,,rvalue} operator& (gccjit::rvalue a, gccjit::rvalue b) +@anchor{cp/topics/expressions _CPPv4anN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2b1}@anchor{cp/topics/expressions _CPPv3anN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2b2}@anchor{cp/topics/expressions _CPPv2anN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2b3}@anchor{cp/topics/expressions and-operator__gccjit rvalue gccjit rvalue}@anchor{2b4} +@deffn {C++ Function} gccjit::@ref{17a,,rvalue} operator& (gccjit::rvalue a, gccjit::rvalue b) @example gccjit::rvalue x = a & b; @@ -14098,8 +14134,8 @@ gccjit::rvalue x = a & b; @end deffn @geindex operator^ (C++ function) -@anchor{cp/topics/expressions _CPPv4eoN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2b2}@anchor{cp/topics/expressions _CPPv3eoN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2b3}@anchor{cp/topics/expressions _CPPv2eoN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2b4}@anchor{cp/topics/expressions xor-operator__gccjit rvalue gccjit rvalue}@anchor{2b5} -@deffn {C++ Function} gccjit::@ref{177,,rvalue} operator^ (gccjit::rvalue a, gccjit::rvalue b) +@anchor{cp/topics/expressions _CPPv4eoN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2b5}@anchor{cp/topics/expressions _CPPv3eoN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2b6}@anchor{cp/topics/expressions _CPPv2eoN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2b7}@anchor{cp/topics/expressions xor-operator__gccjit rvalue gccjit rvalue}@anchor{2b8} +@deffn {C++ Function} gccjit::@ref{17a,,rvalue} operator^ (gccjit::rvalue a, gccjit::rvalue b) @example gccjit::rvalue x = a ^ b; @@ -14107,8 +14143,8 @@ gccjit::rvalue x = a ^ b; @end deffn @geindex operator| (C++ function) -@anchor{cp/topics/expressions _CPPv4orN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2b6}@anchor{cp/topics/expressions _CPPv3orN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2b7}@anchor{cp/topics/expressions _CPPv2orN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2b8}@anchor{cp/topics/expressions or-operator__gccjit rvalue gccjit rvalue}@anchor{2b9} -@deffn {C++ Function} gccjit::@ref{177,,rvalue} operator| (gccjit::rvalue a, gccjit::rvalue b) +@anchor{cp/topics/expressions _CPPv4orN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2b9}@anchor{cp/topics/expressions _CPPv3orN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2ba}@anchor{cp/topics/expressions _CPPv2orN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2bb}@anchor{cp/topics/expressions or-operator__gccjit rvalue gccjit rvalue}@anchor{2bc} +@deffn {C++ Function} gccjit::@ref{17a,,rvalue} operator| (gccjit::rvalue a, gccjit::rvalue b) @example gccjit::rvalue x = a | b; @@ -14116,8 +14152,8 @@ gccjit::rvalue x = a | b; @end deffn @geindex operator&& (C++ function) -@anchor{cp/topics/expressions _CPPv4aaN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2ba}@anchor{cp/topics/expressions _CPPv3aaN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2bb}@anchor{cp/topics/expressions _CPPv2aaN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2bc}@anchor{cp/topics/expressions sand-operator__gccjit rvalue gccjit rvalue}@anchor{2bd} -@deffn {C++ Function} gccjit::@ref{177,,rvalue} operator&& (gccjit::rvalue a, gccjit::rvalue b) +@anchor{cp/topics/expressions _CPPv4aaN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2bd}@anchor{cp/topics/expressions _CPPv3aaN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2be}@anchor{cp/topics/expressions _CPPv2aaN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2bf}@anchor{cp/topics/expressions sand-operator__gccjit rvalue gccjit rvalue}@anchor{2c0} +@deffn {C++ Function} gccjit::@ref{17a,,rvalue} operator&& (gccjit::rvalue a, gccjit::rvalue b) @example gccjit::rvalue cond = a && b; @@ -14125,8 +14161,8 @@ gccjit::rvalue cond = a && b; @end deffn @geindex operator|| (C++ function) -@anchor{cp/topics/expressions _CPPv4ooN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2be}@anchor{cp/topics/expressions _CPPv3ooN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2bf}@anchor{cp/topics/expressions _CPPv2ooN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2c0}@anchor{cp/topics/expressions sor-operator__gccjit rvalue gccjit rvalue}@anchor{2c1} -@deffn {C++ Function} gccjit::@ref{177,,rvalue} operator|| (gccjit::rvalue a, gccjit::rvalue b) +@anchor{cp/topics/expressions _CPPv4ooN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2c1}@anchor{cp/topics/expressions _CPPv3ooN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2c2}@anchor{cp/topics/expressions _CPPv2ooN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2c3}@anchor{cp/topics/expressions sor-operator__gccjit rvalue gccjit rvalue}@anchor{2c4} +@deffn {C++ Function} gccjit::@ref{17a,,rvalue} operator|| (gccjit::rvalue a, gccjit::rvalue b) @example gccjit::rvalue cond = a || b; @@ -14144,13 +14180,13 @@ gccjit::rvalue discriminant = (b * b) - (four * a * c); @end quotation @node Comparisons<2>,Function calls<2>,Binary Operations<2>,Rvalues<2> -@anchor{cp/topics/expressions comparisons}@anchor{2c2} +@anchor{cp/topics/expressions comparisons}@anchor{2c5} @subsubsection Comparisons @geindex gccjit;;context;;new_comparison (C++ function) -@anchor{cp/topics/expressions _CPPv4N6gccjit7context14new_comparisonE18gcc_jit_comparisonN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{188}@anchor{cp/topics/expressions _CPPv3N6gccjit7context14new_comparisonE18gcc_jit_comparisonN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{2c3}@anchor{cp/topics/expressions _CPPv2N6gccjit7context14new_comparisonE18gcc_jit_comparisonN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{2c4}@anchor{cp/topics/expressions gccjit context new_comparison__gcc_jit_comparison gccjit rvalue gccjit rvalue gccjit location}@anchor{2c5} -@deffn {C++ Function} gccjit::@ref{177,,rvalue} gccjit::@ref{16e,,context}::new_comparison (enum gcc_jit_comparison, gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc) +@anchor{cp/topics/expressions _CPPv4N6gccjit7context14new_comparisonE18gcc_jit_comparisonN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{18b}@anchor{cp/topics/expressions _CPPv3N6gccjit7context14new_comparisonE18gcc_jit_comparisonN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{2c6}@anchor{cp/topics/expressions _CPPv2N6gccjit7context14new_comparisonE18gcc_jit_comparisonN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{2c7}@anchor{cp/topics/expressions gccjit context new_comparison__gcc_jit_comparison gccjit rvalue gccjit rvalue gccjit location}@anchor{2c8} +@deffn {C++ Function} gccjit::@ref{17a,,rvalue} gccjit::@ref{171,,context}::new_comparison (enum gcc_jit_comparison, gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc) Build a boolean rvalue out of the comparison of two other rvalues. @@ -14165,40 +14201,40 @@ There are shorter ways to spell the various specific kinds of binary operation: @geindex gccjit;;context;;new_eq (C++ function) -@anchor{cp/topics/expressions _CPPv4N6gccjit7context6new_eqEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{2c6}@anchor{cp/topics/expressions _CPPv3N6gccjit7context6new_eqEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{2c7}@anchor{cp/topics/expressions _CPPv2N6gccjit7context6new_eqEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{2c8}@anchor{cp/topics/expressions gccjit context new_eq__gccjit rvalue gccjit rvalue gccjit location}@anchor{2c9} -@deffn {C++ Function} gccjit::@ref{177,,rvalue} gccjit::@ref{16e,,context}::new_eq (gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc) +@anchor{cp/topics/expressions _CPPv4N6gccjit7context6new_eqEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{2c9}@anchor{cp/topics/expressions _CPPv3N6gccjit7context6new_eqEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{2ca}@anchor{cp/topics/expressions _CPPv2N6gccjit7context6new_eqEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{2cb}@anchor{cp/topics/expressions gccjit context new_eq__gccjit rvalue gccjit rvalue gccjit location}@anchor{2cc} +@deffn {C++ Function} gccjit::@ref{17a,,rvalue} gccjit::@ref{171,,context}::new_eq (gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc) @end deffn @geindex gccjit;;context;;new_ne (C++ function) -@anchor{cp/topics/expressions _CPPv4N6gccjit7context6new_neEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{2ca}@anchor{cp/topics/expressions _CPPv3N6gccjit7context6new_neEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{2cb}@anchor{cp/topics/expressions _CPPv2N6gccjit7context6new_neEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{2cc}@anchor{cp/topics/expressions gccjit context new_ne__gccjit rvalue gccjit rvalue gccjit location}@anchor{2cd} -@deffn {C++ Function} gccjit::@ref{177,,rvalue} gccjit::@ref{16e,,context}::new_ne (gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc) +@anchor{cp/topics/expressions _CPPv4N6gccjit7context6new_neEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{2cd}@anchor{cp/topics/expressions _CPPv3N6gccjit7context6new_neEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{2ce}@anchor{cp/topics/expressions _CPPv2N6gccjit7context6new_neEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{2cf}@anchor{cp/topics/expressions gccjit context new_ne__gccjit rvalue gccjit rvalue gccjit location}@anchor{2d0} +@deffn {C++ Function} gccjit::@ref{17a,,rvalue} gccjit::@ref{171,,context}::new_ne (gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc) @end deffn @geindex gccjit;;context;;new_lt (C++ function) -@anchor{cp/topics/expressions _CPPv4N6gccjit7context6new_ltEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{2ce}@anchor{cp/topics/expressions _CPPv3N6gccjit7context6new_ltEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{2cf}@anchor{cp/topics/expressions _CPPv2N6gccjit7context6new_ltEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{2d0}@anchor{cp/topics/expressions gccjit context new_lt__gccjit rvalue gccjit rvalue gccjit location}@anchor{2d1} -@deffn {C++ Function} gccjit::@ref{177,,rvalue} gccjit::@ref{16e,,context}::new_lt (gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc) +@anchor{cp/topics/expressions _CPPv4N6gccjit7context6new_ltEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{2d1}@anchor{cp/topics/expressions _CPPv3N6gccjit7context6new_ltEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{2d2}@anchor{cp/topics/expressions _CPPv2N6gccjit7context6new_ltEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{2d3}@anchor{cp/topics/expressions gccjit context new_lt__gccjit rvalue gccjit rvalue gccjit location}@anchor{2d4} +@deffn {C++ Function} gccjit::@ref{17a,,rvalue} gccjit::@ref{171,,context}::new_lt (gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc) @end deffn @geindex gccjit;;context;;new_le (C++ function) -@anchor{cp/topics/expressions _CPPv4N6gccjit7context6new_leEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{2d2}@anchor{cp/topics/expressions _CPPv3N6gccjit7context6new_leEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{2d3}@anchor{cp/topics/expressions _CPPv2N6gccjit7context6new_leEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{2d4}@anchor{cp/topics/expressions gccjit context new_le__gccjit rvalue gccjit rvalue gccjit location}@anchor{2d5} -@deffn {C++ Function} gccjit::@ref{177,,rvalue} gccjit::@ref{16e,,context}::new_le (gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc) +@anchor{cp/topics/expressions _CPPv4N6gccjit7context6new_leEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{2d5}@anchor{cp/topics/expressions _CPPv3N6gccjit7context6new_leEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{2d6}@anchor{cp/topics/expressions _CPPv2N6gccjit7context6new_leEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{2d7}@anchor{cp/topics/expressions gccjit context new_le__gccjit rvalue gccjit rvalue gccjit location}@anchor{2d8} +@deffn {C++ Function} gccjit::@ref{17a,,rvalue} gccjit::@ref{171,,context}::new_le (gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc) @end deffn @geindex gccjit;;context;;new_gt (C++ function) -@anchor{cp/topics/expressions _CPPv4N6gccjit7context6new_gtEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{2d6}@anchor{cp/topics/expressions _CPPv3N6gccjit7context6new_gtEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{2d7}@anchor{cp/topics/expressions _CPPv2N6gccjit7context6new_gtEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{2d8}@anchor{cp/topics/expressions gccjit context new_gt__gccjit rvalue gccjit rvalue gccjit location}@anchor{2d9} -@deffn {C++ Function} gccjit::@ref{177,,rvalue} gccjit::@ref{16e,,context}::new_gt (gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc) +@anchor{cp/topics/expressions _CPPv4N6gccjit7context6new_gtEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{2d9}@anchor{cp/topics/expressions _CPPv3N6gccjit7context6new_gtEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{2da}@anchor{cp/topics/expressions _CPPv2N6gccjit7context6new_gtEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{2db}@anchor{cp/topics/expressions gccjit context new_gt__gccjit rvalue gccjit rvalue gccjit location}@anchor{2dc} +@deffn {C++ Function} gccjit::@ref{17a,,rvalue} gccjit::@ref{171,,context}::new_gt (gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc) @end deffn @geindex gccjit;;context;;new_ge (C++ function) -@anchor{cp/topics/expressions _CPPv4N6gccjit7context6new_geEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{2da}@anchor{cp/topics/expressions _CPPv3N6gccjit7context6new_geEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{2db}@anchor{cp/topics/expressions _CPPv2N6gccjit7context6new_geEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{2dc}@anchor{cp/topics/expressions gccjit context new_ge__gccjit rvalue gccjit rvalue gccjit location}@anchor{2dd} -@deffn {C++ Function} gccjit::@ref{177,,rvalue} gccjit::@ref{16e,,context}::new_ge (gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc) +@anchor{cp/topics/expressions _CPPv4N6gccjit7context6new_geEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{2dd}@anchor{cp/topics/expressions _CPPv3N6gccjit7context6new_geEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{2de}@anchor{cp/topics/expressions _CPPv2N6gccjit7context6new_geEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{2df}@anchor{cp/topics/expressions gccjit context new_ge__gccjit rvalue gccjit rvalue gccjit location}@anchor{2e0} +@deffn {C++ Function} gccjit::@ref{17a,,rvalue} gccjit::@ref{171,,context}::new_ge (gccjit::rvalue a, gccjit::rvalue b, gccjit::location loc) @end deffn The most concise way to spell them is with overloaded operators: @geindex operator== (C++ function) -@anchor{cp/topics/expressions _CPPv4eqN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2de}@anchor{cp/topics/expressions _CPPv3eqN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2df}@anchor{cp/topics/expressions _CPPv2eqN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2e0}@anchor{cp/topics/expressions eq-operator__gccjit rvalue gccjit rvalue}@anchor{2e1} -@deffn {C++ Function} gccjit::@ref{177,,rvalue} operator== (gccjit::rvalue a, gccjit::rvalue b) +@anchor{cp/topics/expressions _CPPv4eqN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2e1}@anchor{cp/topics/expressions _CPPv3eqN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2e2}@anchor{cp/topics/expressions _CPPv2eqN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2e3}@anchor{cp/topics/expressions eq-operator__gccjit rvalue gccjit rvalue}@anchor{2e4} +@deffn {C++ Function} gccjit::@ref{17a,,rvalue} operator== (gccjit::rvalue a, gccjit::rvalue b) @example gccjit::rvalue cond = (a == ctxt.zero (t_int)); @@ -14206,8 +14242,8 @@ gccjit::rvalue cond = (a == ctxt.zero (t_int)); @end deffn @geindex operator!= (C++ function) -@anchor{cp/topics/expressions _CPPv4neN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2e2}@anchor{cp/topics/expressions _CPPv3neN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2e3}@anchor{cp/topics/expressions _CPPv2neN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2e4}@anchor{cp/topics/expressions neq-operator__gccjit rvalue gccjit rvalue}@anchor{2e5} -@deffn {C++ Function} gccjit::@ref{177,,rvalue} operator!= (gccjit::rvalue a, gccjit::rvalue b) +@anchor{cp/topics/expressions _CPPv4neN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2e5}@anchor{cp/topics/expressions _CPPv3neN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2e6}@anchor{cp/topics/expressions _CPPv2neN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2e7}@anchor{cp/topics/expressions neq-operator__gccjit rvalue gccjit rvalue}@anchor{2e8} +@deffn {C++ Function} gccjit::@ref{17a,,rvalue} operator!= (gccjit::rvalue a, gccjit::rvalue b) @example gccjit::rvalue cond = (i != j); @@ -14215,8 +14251,8 @@ gccjit::rvalue cond = (i != j); @end deffn @geindex operator< (C++ function) -@anchor{cp/topics/expressions _CPPv4ltN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2e6}@anchor{cp/topics/expressions _CPPv3ltN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2e7}@anchor{cp/topics/expressions _CPPv2ltN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2e8}@anchor{cp/topics/expressions lt-operator__gccjit rvalue gccjit rvalue}@anchor{2e9} -@deffn {C++ Function} gccjit::@ref{177,,rvalue} operator< (gccjit::rvalue a, gccjit::rvalue b) +@anchor{cp/topics/expressions _CPPv4ltN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2e9}@anchor{cp/topics/expressions _CPPv3ltN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2ea}@anchor{cp/topics/expressions _CPPv2ltN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2eb}@anchor{cp/topics/expressions lt-operator__gccjit rvalue gccjit rvalue}@anchor{2ec} +@deffn {C++ Function} gccjit::@ref{17a,,rvalue} operator< (gccjit::rvalue a, gccjit::rvalue b) @example gccjit::rvalue cond = i < n; @@ -14224,8 +14260,8 @@ gccjit::rvalue cond = i < n; @end deffn @geindex operator<= (C++ function) -@anchor{cp/topics/expressions _CPPv4leN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2ea}@anchor{cp/topics/expressions _CPPv3leN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2eb}@anchor{cp/topics/expressions _CPPv2leN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2ec}@anchor{cp/topics/expressions lte-operator__gccjit rvalue gccjit rvalue}@anchor{2ed} -@deffn {C++ Function} gccjit::@ref{177,,rvalue} operator<= (gccjit::rvalue a, gccjit::rvalue b) +@anchor{cp/topics/expressions _CPPv4leN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2ed}@anchor{cp/topics/expressions _CPPv3leN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2ee}@anchor{cp/topics/expressions _CPPv2leN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2ef}@anchor{cp/topics/expressions lte-operator__gccjit rvalue gccjit rvalue}@anchor{2f0} +@deffn {C++ Function} gccjit::@ref{17a,,rvalue} operator<= (gccjit::rvalue a, gccjit::rvalue b) @example gccjit::rvalue cond = i <= n; @@ -14233,8 +14269,8 @@ gccjit::rvalue cond = i <= n; @end deffn @geindex operator> (C++ function) -@anchor{cp/topics/expressions _CPPv4gtN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2ee}@anchor{cp/topics/expressions _CPPv3gtN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2ef}@anchor{cp/topics/expressions _CPPv2gtN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2f0}@anchor{cp/topics/expressions gt-operator__gccjit rvalue gccjit rvalue}@anchor{2f1} -@deffn {C++ Function} gccjit::@ref{177,,rvalue} operator> (gccjit::rvalue a, gccjit::rvalue b) +@anchor{cp/topics/expressions _CPPv4gtN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2f1}@anchor{cp/topics/expressions _CPPv3gtN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2f2}@anchor{cp/topics/expressions _CPPv2gtN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2f3}@anchor{cp/topics/expressions gt-operator__gccjit rvalue gccjit rvalue}@anchor{2f4} +@deffn {C++ Function} gccjit::@ref{17a,,rvalue} operator> (gccjit::rvalue a, gccjit::rvalue b) @example gccjit::rvalue cond = (ch > limit); @@ -14242,8 +14278,8 @@ gccjit::rvalue cond = (ch > limit); @end deffn @geindex operator>= (C++ function) -@anchor{cp/topics/expressions _CPPv4geN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2f2}@anchor{cp/topics/expressions _CPPv3geN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2f3}@anchor{cp/topics/expressions _CPPv2geN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2f4}@anchor{cp/topics/expressions gte-operator__gccjit rvalue gccjit rvalue}@anchor{2f5} -@deffn {C++ Function} gccjit::@ref{177,,rvalue} operator>= (gccjit::rvalue a, gccjit::rvalue b) +@anchor{cp/topics/expressions _CPPv4geN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2f5}@anchor{cp/topics/expressions _CPPv3geN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2f6}@anchor{cp/topics/expressions _CPPv2geN6gccjit6rvalueEN6gccjit6rvalueE}@anchor{2f7}@anchor{cp/topics/expressions gte-operator__gccjit rvalue gccjit rvalue}@anchor{2f8} +@deffn {C++ Function} gccjit::@ref{17a,,rvalue} operator>= (gccjit::rvalue a, gccjit::rvalue b) @example gccjit::rvalue cond = (score >= ctxt.new_rvalue (t_int, 100)); @@ -14253,12 +14289,12 @@ gccjit::rvalue cond = (score >= ctxt.new_rvalue (t_int, 100)); @c TODO: beyond this point @node Function calls<2>,Function pointers<3>,Comparisons<2>,Rvalues<2> -@anchor{cp/topics/expressions function-calls}@anchor{2f6} +@anchor{cp/topics/expressions function-calls}@anchor{2f9} @subsubsection Function calls @geindex gcc_jit_context_new_call (C++ function) -@anchor{cp/topics/expressions _CPPv424gcc_jit_context_new_callP15gcc_jit_contextP16gcc_jit_locationP16gcc_jit_functioniPP14gcc_jit_rvalue}@anchor{2f7}@anchor{cp/topics/expressions _CPPv324gcc_jit_context_new_callP15gcc_jit_contextP16gcc_jit_locationP16gcc_jit_functioniPP14gcc_jit_rvalue}@anchor{2f8}@anchor{cp/topics/expressions _CPPv224gcc_jit_context_new_callP15gcc_jit_contextP16gcc_jit_locationP16gcc_jit_functioniPP14gcc_jit_rvalue}@anchor{2f9}@anchor{cp/topics/expressions gcc_jit_context_new_call__gcc_jit_contextP gcc_jit_locationP gcc_jit_functionP i gcc_jit_rvaluePP}@anchor{2fa} +@anchor{cp/topics/expressions _CPPv424gcc_jit_context_new_callP15gcc_jit_contextP16gcc_jit_locationP16gcc_jit_functioniPP14gcc_jit_rvalue}@anchor{2fa}@anchor{cp/topics/expressions _CPPv324gcc_jit_context_new_callP15gcc_jit_contextP16gcc_jit_locationP16gcc_jit_functioniPP14gcc_jit_rvalue}@anchor{2fb}@anchor{cp/topics/expressions _CPPv224gcc_jit_context_new_callP15gcc_jit_contextP16gcc_jit_locationP16gcc_jit_functioniPP14gcc_jit_rvalue}@anchor{2fc}@anchor{cp/topics/expressions gcc_jit_context_new_call__gcc_jit_contextP gcc_jit_locationP gcc_jit_functionP i gcc_jit_rvaluePP}@anchor{2fd} @deffn {C++ Function} gcc_jit_rvalue *gcc_jit_context_new_call (gcc_jit_context *ctxt, gcc_jit_location *loc, gcc_jit_function *func, int numargs, gcc_jit_rvalue **args) Given a function and the given table of argument rvalues, construct a @@ -14267,14 +14303,14 @@ call to the function, with the result as an rvalue. @cartouche @quotation Note @code{gccjit::context::new_call()} merely builds a -@ref{177,,gccjit;;rvalue} i.e. an expression that can be evaluated, +@ref{17a,,gccjit;;rvalue} i.e. an expression that can be evaluated, perhaps as part of a more complicated expression. The call @emph{won’t} happen unless you add a statement to a function that evaluates the expression. For example, if you want to call a function and discard the result (or to call a function with @code{void} return type), use -@ref{2fb,,gccjit;;block;;add_eval()}: +@ref{2fe,,gccjit;;block;;add_eval()}: @example /* Add "(void)printf (arg0, arg1);". */ @@ -14285,26 +14321,26 @@ block.add_eval (ctxt.new_call (printf_func, arg0, arg1)); @end deffn @node Function pointers<3>,Type-coercion<2>,Function calls<2>,Rvalues<2> -@anchor{cp/topics/expressions function-pointers}@anchor{2fc} +@anchor{cp/topics/expressions function-pointers}@anchor{2ff} @subsubsection Function pointers @geindex gccjit;;function;;get_address (C++ function) -@anchor{cp/topics/expressions _CPPv4N6gccjit8function11get_addressEN6gccjit8locationE}@anchor{2fd}@anchor{cp/topics/expressions _CPPv3N6gccjit8function11get_addressEN6gccjit8locationE}@anchor{2fe}@anchor{cp/topics/expressions _CPPv2N6gccjit8function11get_addressEN6gccjit8locationE}@anchor{2ff}@anchor{cp/topics/expressions gccjit function get_address__gccjit location}@anchor{300} -@deffn {C++ Function} gccjit::@ref{177,,rvalue} gccjit::@ref{185,,function}::get_address (gccjit::location loc) +@anchor{cp/topics/expressions _CPPv4N6gccjit8function11get_addressEN6gccjit8locationE}@anchor{300}@anchor{cp/topics/expressions _CPPv3N6gccjit8function11get_addressEN6gccjit8locationE}@anchor{301}@anchor{cp/topics/expressions _CPPv2N6gccjit8function11get_addressEN6gccjit8locationE}@anchor{302}@anchor{cp/topics/expressions gccjit function get_address__gccjit location}@anchor{303} +@deffn {C++ Function} gccjit::@ref{17a,,rvalue} gccjit::@ref{188,,function}::get_address (gccjit::location loc) Get the address of a function as an rvalue, of function pointer type. @end deffn @node Type-coercion<2>,,Function pointers<3>,Rvalues<2> -@anchor{cp/topics/expressions type-coercion}@anchor{301} +@anchor{cp/topics/expressions type-coercion}@anchor{304} @subsubsection Type-coercion @geindex gccjit;;context;;new_cast (C++ function) -@anchor{cp/topics/expressions _CPPv4N6gccjit7context8new_castEN6gccjit6rvalueEN6gccjit4typeEN6gccjit8locationE}@anchor{302}@anchor{cp/topics/expressions _CPPv3N6gccjit7context8new_castEN6gccjit6rvalueEN6gccjit4typeEN6gccjit8locationE}@anchor{303}@anchor{cp/topics/expressions _CPPv2N6gccjit7context8new_castEN6gccjit6rvalueEN6gccjit4typeEN6gccjit8locationE}@anchor{304}@anchor{cp/topics/expressions gccjit context new_cast__gccjit rvalue gccjit type gccjit location}@anchor{305} -@deffn {C++ Function} gccjit::@ref{177,,rvalue} gccjit::@ref{16e,,context}::new_cast (gccjit::rvalue rvalue, gccjit::type type, gccjit::location loc) +@anchor{cp/topics/expressions _CPPv4N6gccjit7context8new_castEN6gccjit6rvalueEN6gccjit4typeEN6gccjit8locationE}@anchor{305}@anchor{cp/topics/expressions _CPPv3N6gccjit7context8new_castEN6gccjit6rvalueEN6gccjit4typeEN6gccjit8locationE}@anchor{306}@anchor{cp/topics/expressions _CPPv2N6gccjit7context8new_castEN6gccjit6rvalueEN6gccjit4typeEN6gccjit8locationE}@anchor{307}@anchor{cp/topics/expressions gccjit context new_cast__gccjit rvalue gccjit type gccjit location}@anchor{308} +@deffn {C++ Function} gccjit::@ref{17a,,rvalue} gccjit::@ref{171,,context}::new_cast (gccjit::rvalue rvalue, gccjit::type type, gccjit::location loc) Given an rvalue of T, construct another rvalue of another type. @@ -14328,25 +14364,25 @@ P* <-> Q*, for pointer types P and Q @end deffn @node Lvalues<2>,Working with pointers structs and unions<2>,Rvalues<2>,Expressions<2> -@anchor{cp/topics/expressions lvalues}@anchor{306} +@anchor{cp/topics/expressions lvalues}@anchor{309} @subsubsection Lvalues @geindex gccjit;;lvalue (C++ class) -@anchor{cp/topics/expressions _CPPv4N6gccjit6lvalueE}@anchor{180}@anchor{cp/topics/expressions _CPPv3N6gccjit6lvalueE}@anchor{307}@anchor{cp/topics/expressions _CPPv2N6gccjit6lvalueE}@anchor{308}@anchor{cp/topics/expressions gccjit lvalue}@anchor{309} +@anchor{cp/topics/expressions _CPPv4N6gccjit6lvalueE}@anchor{183}@anchor{cp/topics/expressions _CPPv3N6gccjit6lvalueE}@anchor{30a}@anchor{cp/topics/expressions _CPPv2N6gccjit6lvalueE}@anchor{30b}@anchor{cp/topics/expressions gccjit lvalue}@anchor{30c} @deffn {C++ Class} gccjit::lvalue @end deffn An lvalue is something that can of the @emph{left}-hand side of an assignment: a storage area (such as a variable). It is a subclass of -@ref{177,,gccjit;;rvalue}, where the rvalue is computed by reading from the +@ref{17a,,gccjit;;rvalue}, where the rvalue is computed by reading from the storage area. It iss a thin wrapper around @ref{24,,gcc_jit_lvalue *} from the C API. @geindex gccjit;;lvalue;;get_address (C++ function) -@anchor{cp/topics/expressions _CPPv4N6gccjit6lvalue11get_addressEN6gccjit8locationE}@anchor{30a}@anchor{cp/topics/expressions _CPPv3N6gccjit6lvalue11get_addressEN6gccjit8locationE}@anchor{30b}@anchor{cp/topics/expressions _CPPv2N6gccjit6lvalue11get_addressEN6gccjit8locationE}@anchor{30c}@anchor{cp/topics/expressions gccjit lvalue get_address__gccjit location}@anchor{30d} -@deffn {C++ Function} gccjit::@ref{177,,rvalue} gccjit::@ref{180,,lvalue}::get_address (gccjit::location loc) +@anchor{cp/topics/expressions _CPPv4N6gccjit6lvalue11get_addressEN6gccjit8locationE}@anchor{30d}@anchor{cp/topics/expressions _CPPv3N6gccjit6lvalue11get_addressEN6gccjit8locationE}@anchor{30e}@anchor{cp/topics/expressions _CPPv2N6gccjit6lvalue11get_addressEN6gccjit8locationE}@anchor{30f}@anchor{cp/topics/expressions gccjit lvalue get_address__gccjit location}@anchor{310} +@deffn {C++ Function} gccjit::@ref{17a,,rvalue} gccjit::@ref{183,,lvalue}::get_address (gccjit::location loc) Take the address of an lvalue; analogous to: @@ -14365,28 +14401,28 @@ Parameter “loc” is optional. @end menu @node Global variables<2>,,,Lvalues<2> -@anchor{cp/topics/expressions global-variables}@anchor{30e} +@anchor{cp/topics/expressions global-variables}@anchor{311} @subsubsection Global variables @geindex gccjit;;context;;new_global (C++ function) -@anchor{cp/topics/expressions _CPPv4N6gccjit7context10new_globalE19gcc_jit_global_kindN6gccjit4typeEPKcN6gccjit8locationE}@anchor{30f}@anchor{cp/topics/expressions _CPPv3N6gccjit7context10new_globalE19gcc_jit_global_kindN6gccjit4typeEPKcN6gccjit8locationE}@anchor{310}@anchor{cp/topics/expressions _CPPv2N6gccjit7context10new_globalE19gcc_jit_global_kindN6gccjit4typeEPKcN6gccjit8locationE}@anchor{311}@anchor{cp/topics/expressions gccjit context new_global__gcc_jit_global_kind gccjit type cCP gccjit location}@anchor{312} -@deffn {C++ Function} gccjit::@ref{180,,lvalue} gccjit::@ref{16e,,context}::new_global (enum gcc_jit_global_kind, gccjit::type type, const char *name, gccjit::location loc) +@anchor{cp/topics/expressions _CPPv4N6gccjit7context10new_globalE19gcc_jit_global_kindN6gccjit4typeEPKcN6gccjit8locationE}@anchor{312}@anchor{cp/topics/expressions _CPPv3N6gccjit7context10new_globalE19gcc_jit_global_kindN6gccjit4typeEPKcN6gccjit8locationE}@anchor{313}@anchor{cp/topics/expressions _CPPv2N6gccjit7context10new_globalE19gcc_jit_global_kindN6gccjit4typeEPKcN6gccjit8locationE}@anchor{314}@anchor{cp/topics/expressions gccjit context new_global__gcc_jit_global_kind gccjit type cCP gccjit location}@anchor{315} +@deffn {C++ Function} gccjit::@ref{183,,lvalue} gccjit::@ref{171,,context}::new_global (enum gcc_jit_global_kind, gccjit::type type, const char *name, gccjit::location loc) Add a new global variable of the given type and name to the context. -This is a thin wrapper around @ref{f0,,gcc_jit_context_new_global()} from +This is a thin wrapper around @ref{f2,,gcc_jit_context_new_global()} from the C API; the “kind” parameter has the same meaning as there. @end deffn @node Working with pointers structs and unions<2>,,Lvalues<2>,Expressions<2> -@anchor{cp/topics/expressions working-with-pointers-structs-and-unions}@anchor{313} +@anchor{cp/topics/expressions working-with-pointers-structs-and-unions}@anchor{316} @subsubsection Working with pointers, structs and unions @geindex gccjit;;rvalue;;dereference (C++ function) -@anchor{cp/topics/expressions _CPPv4N6gccjit6rvalue11dereferenceEN6gccjit8locationE}@anchor{314}@anchor{cp/topics/expressions _CPPv3N6gccjit6rvalue11dereferenceEN6gccjit8locationE}@anchor{315}@anchor{cp/topics/expressions _CPPv2N6gccjit6rvalue11dereferenceEN6gccjit8locationE}@anchor{316}@anchor{cp/topics/expressions gccjit rvalue dereference__gccjit location}@anchor{317} -@deffn {C++ Function} gccjit::@ref{180,,lvalue} gccjit::@ref{177,,rvalue}::dereference (gccjit::location loc) +@anchor{cp/topics/expressions _CPPv4N6gccjit6rvalue11dereferenceEN6gccjit8locationE}@anchor{317}@anchor{cp/topics/expressions _CPPv3N6gccjit6rvalue11dereferenceEN6gccjit8locationE}@anchor{318}@anchor{cp/topics/expressions _CPPv2N6gccjit6rvalue11dereferenceEN6gccjit8locationE}@anchor{319}@anchor{cp/topics/expressions gccjit rvalue dereference__gccjit location}@anchor{31a} +@deffn {C++ Function} gccjit::@ref{183,,lvalue} gccjit::@ref{17a,,rvalue}::dereference (gccjit::location loc) Given an rvalue of pointer type @code{T *}, dereferencing the pointer, getting an lvalue of type @code{T}. Analogous to: @@ -14404,8 +14440,8 @@ If you don’t need to specify the location, this can also be expressed using an overloaded operator: @geindex gccjit;;rvalue;;operator* (C++ function) -@anchor{cp/topics/expressions _CPPv4N6gccjit6rvaluemlEv}@anchor{318}@anchor{cp/topics/expressions _CPPv3N6gccjit6rvaluemlEv}@anchor{319}@anchor{cp/topics/expressions _CPPv2N6gccjit6rvaluemlEv}@anchor{31a}@anchor{cp/topics/expressions gccjit rvalue mul-operator}@anchor{31b} -@deffn {C++ Function} gccjit::@ref{180,,lvalue} gccjit::@ref{177,,rvalue}::operator* () +@anchor{cp/topics/expressions _CPPv4N6gccjit6rvaluemlEv}@anchor{31b}@anchor{cp/topics/expressions _CPPv3N6gccjit6rvaluemlEv}@anchor{31c}@anchor{cp/topics/expressions _CPPv2N6gccjit6rvaluemlEv}@anchor{31d}@anchor{cp/topics/expressions gccjit rvalue mul-operator}@anchor{31e} +@deffn {C++ Function} gccjit::@ref{183,,lvalue} gccjit::@ref{17a,,rvalue}::operator* () @example gccjit::lvalue content = *ptr; @@ -14415,8 +14451,8 @@ gccjit::lvalue content = *ptr; Field access is provided separately for both lvalues and rvalues: @geindex gccjit;;lvalue;;access_field (C++ function) -@anchor{cp/topics/expressions _CPPv4N6gccjit6lvalue12access_fieldEN6gccjit5fieldEN6gccjit8locationE}@anchor{31c}@anchor{cp/topics/expressions _CPPv3N6gccjit6lvalue12access_fieldEN6gccjit5fieldEN6gccjit8locationE}@anchor{31d}@anchor{cp/topics/expressions _CPPv2N6gccjit6lvalue12access_fieldEN6gccjit5fieldEN6gccjit8locationE}@anchor{31e}@anchor{cp/topics/expressions gccjit lvalue access_field__gccjit field gccjit location}@anchor{31f} -@deffn {C++ Function} gccjit::@ref{180,,lvalue} gccjit::@ref{180,,lvalue}::access_field (gccjit::field field, gccjit::location loc) +@anchor{cp/topics/expressions _CPPv4N6gccjit6lvalue12access_fieldEN6gccjit5fieldEN6gccjit8locationE}@anchor{31f}@anchor{cp/topics/expressions _CPPv3N6gccjit6lvalue12access_fieldEN6gccjit5fieldEN6gccjit8locationE}@anchor{320}@anchor{cp/topics/expressions _CPPv2N6gccjit6lvalue12access_fieldEN6gccjit5fieldEN6gccjit8locationE}@anchor{321}@anchor{cp/topics/expressions gccjit lvalue access_field__gccjit field gccjit location}@anchor{322} +@deffn {C++ Function} gccjit::@ref{183,,lvalue} gccjit::@ref{183,,lvalue}::access_field (gccjit::field field, gccjit::location loc) Given an lvalue of struct or union type, access the given field, getting an lvalue of the field’s type. Analogous to: @@ -14429,8 +14465,8 @@ in C. @end deffn @geindex gccjit;;rvalue;;access_field (C++ function) -@anchor{cp/topics/expressions _CPPv4N6gccjit6rvalue12access_fieldEN6gccjit5fieldEN6gccjit8locationE}@anchor{320}@anchor{cp/topics/expressions _CPPv3N6gccjit6rvalue12access_fieldEN6gccjit5fieldEN6gccjit8locationE}@anchor{321}@anchor{cp/topics/expressions _CPPv2N6gccjit6rvalue12access_fieldEN6gccjit5fieldEN6gccjit8locationE}@anchor{322}@anchor{cp/topics/expressions gccjit rvalue access_field__gccjit field gccjit location}@anchor{323} -@deffn {C++ Function} gccjit::@ref{177,,rvalue} gccjit::@ref{177,,rvalue}::access_field (gccjit::field field, gccjit::location loc) +@anchor{cp/topics/expressions _CPPv4N6gccjit6rvalue12access_fieldEN6gccjit5fieldEN6gccjit8locationE}@anchor{323}@anchor{cp/topics/expressions _CPPv3N6gccjit6rvalue12access_fieldEN6gccjit5fieldEN6gccjit8locationE}@anchor{324}@anchor{cp/topics/expressions _CPPv2N6gccjit6rvalue12access_fieldEN6gccjit5fieldEN6gccjit8locationE}@anchor{325}@anchor{cp/topics/expressions gccjit rvalue access_field__gccjit field gccjit location}@anchor{326} +@deffn {C++ Function} gccjit::@ref{17a,,rvalue} gccjit::@ref{17a,,rvalue}::access_field (gccjit::field field, gccjit::location loc) Given an rvalue of struct or union type, access the given field as an rvalue. Analogous to: @@ -14443,8 +14479,8 @@ in C. @end deffn @geindex gccjit;;rvalue;;dereference_field (C++ function) -@anchor{cp/topics/expressions _CPPv4N6gccjit6rvalue17dereference_fieldEN6gccjit5fieldEN6gccjit8locationE}@anchor{324}@anchor{cp/topics/expressions _CPPv3N6gccjit6rvalue17dereference_fieldEN6gccjit5fieldEN6gccjit8locationE}@anchor{325}@anchor{cp/topics/expressions _CPPv2N6gccjit6rvalue17dereference_fieldEN6gccjit5fieldEN6gccjit8locationE}@anchor{326}@anchor{cp/topics/expressions gccjit rvalue dereference_field__gccjit field gccjit location}@anchor{327} -@deffn {C++ Function} gccjit::@ref{180,,lvalue} gccjit::@ref{177,,rvalue}::dereference_field (gccjit::field field, gccjit::location loc) +@anchor{cp/topics/expressions _CPPv4N6gccjit6rvalue17dereference_fieldEN6gccjit5fieldEN6gccjit8locationE}@anchor{327}@anchor{cp/topics/expressions _CPPv3N6gccjit6rvalue17dereference_fieldEN6gccjit5fieldEN6gccjit8locationE}@anchor{328}@anchor{cp/topics/expressions _CPPv2N6gccjit6rvalue17dereference_fieldEN6gccjit5fieldEN6gccjit8locationE}@anchor{329}@anchor{cp/topics/expressions gccjit rvalue dereference_field__gccjit field gccjit location}@anchor{32a} +@deffn {C++ Function} gccjit::@ref{183,,lvalue} gccjit::@ref{17a,,rvalue}::dereference_field (gccjit::field field, gccjit::location loc) Given an rvalue of pointer type @code{T *} where T is of struct or union type, access the given field as an lvalue. Analogous to: @@ -14457,8 +14493,8 @@ in C, itself equivalent to @code{(*EXPR).FIELD}. @end deffn @geindex gccjit;;context;;new_array_access (C++ function) -@anchor{cp/topics/expressions _CPPv4N6gccjit7context16new_array_accessEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{328}@anchor{cp/topics/expressions _CPPv3N6gccjit7context16new_array_accessEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{329}@anchor{cp/topics/expressions _CPPv2N6gccjit7context16new_array_accessEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{32a}@anchor{cp/topics/expressions gccjit context new_array_access__gccjit rvalue gccjit rvalue gccjit location}@anchor{32b} -@deffn {C++ Function} gccjit::@ref{180,,lvalue} gccjit::@ref{16e,,context}::new_array_access (gccjit::rvalue ptr, gccjit::rvalue index, gccjit::location loc) +@anchor{cp/topics/expressions _CPPv4N6gccjit7context16new_array_accessEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{32b}@anchor{cp/topics/expressions _CPPv3N6gccjit7context16new_array_accessEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{32c}@anchor{cp/topics/expressions _CPPv2N6gccjit7context16new_array_accessEN6gccjit6rvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{32d}@anchor{cp/topics/expressions gccjit context new_array_access__gccjit rvalue gccjit rvalue gccjit location}@anchor{32e} +@deffn {C++ Function} gccjit::@ref{183,,lvalue} gccjit::@ref{171,,context}::new_array_access (gccjit::rvalue ptr, gccjit::rvalue index, gccjit::location loc) Given an rvalue of pointer type @code{T *}, get at the element @cite{T} at the given index, using standard C array indexing rules i.e. each @@ -14474,7 +14510,7 @@ in C (or, indeed, to @code{PTR + INDEX}). Parameter “loc” is optional. @end deffn -For array accesses where you don’t need to specify a @ref{194,,gccjit;;location}, +For array accesses where you don’t need to specify a @ref{197,,gccjit;;location}, two overloaded operators are available: @quotation @@ -14510,7 +14546,7 @@ gccjit::lvalue element = array[0]; @c <https://www.gnu.org/licenses/>. @node Creating and using functions<2>,Source Locations<2>,Expressions<2>,Topic Reference<2> -@anchor{cp/topics/functions doc}@anchor{32c}@anchor{cp/topics/functions creating-and-using-functions}@anchor{32d} +@anchor{cp/topics/functions doc}@anchor{32f}@anchor{cp/topics/functions creating-and-using-functions}@anchor{330} @subsection Creating and using functions @@ -14523,36 +14559,36 @@ gccjit::lvalue element = array[0]; @end menu @node Params<2>,Functions<2>,,Creating and using functions<2> -@anchor{cp/topics/functions params}@anchor{32e} +@anchor{cp/topics/functions params}@anchor{331} @subsubsection Params @geindex gccjit;;param (C++ class) -@anchor{cp/topics/functions _CPPv4N6gccjit5paramE}@anchor{181}@anchor{cp/topics/functions _CPPv3N6gccjit5paramE}@anchor{32f}@anchor{cp/topics/functions _CPPv2N6gccjit5paramE}@anchor{330}@anchor{cp/topics/functions gccjit param}@anchor{331} +@anchor{cp/topics/functions _CPPv4N6gccjit5paramE}@anchor{184}@anchor{cp/topics/functions _CPPv3N6gccjit5paramE}@anchor{332}@anchor{cp/topics/functions _CPPv2N6gccjit5paramE}@anchor{333}@anchor{cp/topics/functions gccjit param}@anchor{334} @deffn {C++ Class} gccjit::param A @cite{gccjit::param} represents a parameter to a function. @end deffn @geindex gccjit;;context;;new_param (C++ function) -@anchor{cp/topics/functions _CPPv4N6gccjit7context9new_paramEN6gccjit4typeEPKcN6gccjit8locationE}@anchor{175}@anchor{cp/topics/functions _CPPv3N6gccjit7context9new_paramEN6gccjit4typeEPKcN6gccjit8locationE}@anchor{332}@anchor{cp/topics/functions _CPPv2N6gccjit7context9new_paramEN6gccjit4typeEPKcN6gccjit8locationE}@anchor{333}@anchor{cp/topics/functions gccjit context new_param__gccjit type cCP gccjit location}@anchor{334} -@deffn {C++ Function} gccjit::@ref{181,,param} gccjit::@ref{16e,,context}::new_param (gccjit::type type, const char *name, gccjit::location loc) +@anchor{cp/topics/functions _CPPv4N6gccjit7context9new_paramEN6gccjit4typeEPKcN6gccjit8locationE}@anchor{178}@anchor{cp/topics/functions _CPPv3N6gccjit7context9new_paramEN6gccjit4typeEPKcN6gccjit8locationE}@anchor{335}@anchor{cp/topics/functions _CPPv2N6gccjit7context9new_paramEN6gccjit4typeEPKcN6gccjit8locationE}@anchor{336}@anchor{cp/topics/functions gccjit context new_param__gccjit type cCP gccjit location}@anchor{337} +@deffn {C++ Function} gccjit::@ref{184,,param} gccjit::@ref{171,,context}::new_param (gccjit::type type, const char *name, gccjit::location loc) In preparation for creating a function, create a new parameter of the given type and name. @end deffn -@ref{181,,gccjit;;param} is a subclass of @ref{180,,gccjit;;lvalue} (and thus -of @ref{177,,gccjit;;rvalue} and @ref{173,,gccjit;;object}). It is a thin +@ref{184,,gccjit;;param} is a subclass of @ref{183,,gccjit;;lvalue} (and thus +of @ref{17a,,gccjit;;rvalue} and @ref{176,,gccjit;;object}). It is a thin wrapper around the C API’s @ref{25,,gcc_jit_param *}. @node Functions<2>,Blocks<2>,Params<2>,Creating and using functions<2> -@anchor{cp/topics/functions functions}@anchor{335} +@anchor{cp/topics/functions functions}@anchor{338} @subsubsection Functions @geindex gccjit;;function (C++ class) -@anchor{cp/topics/functions _CPPv4N6gccjit8functionE}@anchor{185}@anchor{cp/topics/functions _CPPv3N6gccjit8functionE}@anchor{336}@anchor{cp/topics/functions _CPPv2N6gccjit8functionE}@anchor{337}@anchor{cp/topics/functions gccjit function}@anchor{338} +@anchor{cp/topics/functions _CPPv4N6gccjit8functionE}@anchor{188}@anchor{cp/topics/functions _CPPv3N6gccjit8functionE}@anchor{339}@anchor{cp/topics/functions _CPPv2N6gccjit8functionE}@anchor{33a}@anchor{cp/topics/functions gccjit function}@anchor{33b} @deffn {C++ Class} gccjit::function A @cite{gccjit::function} represents a function - either one that we’re @@ -14560,8 +14596,8 @@ creating ourselves, or one that we’re referencing. @end deffn @geindex gccjit;;context;;new_function (C++ function) -@anchor{cp/topics/functions _CPPv4N6gccjit7context12new_functionE21gcc_jit_function_kindN6gccjit4typeEPKcRNSt6vectorI5paramEEiN6gccjit8locationE}@anchor{339}@anchor{cp/topics/functions _CPPv3N6gccjit7context12new_functionE21gcc_jit_function_kindN6gccjit4typeEPKcRNSt6vectorI5paramEEiN6gccjit8locationE}@anchor{33a}@anchor{cp/topics/functions _CPPv2N6gccjit7context12new_functionE21gcc_jit_function_kindN6gccjit4typeEPKcRNSt6vectorI5paramEEiN6gccjit8locationE}@anchor{33b}@anchor{cp/topics/functions gccjit context new_function__gcc_jit_function_kind gccjit type cCP std vector param R i gccjit location}@anchor{33c} -@deffn {C++ Function} gccjit::@ref{185,,function} gccjit::@ref{16e,,context}::new_function (enum gcc_jit_function_kind, gccjit::type return_type, const char *name, std::vector<param> ¶ms, int is_variadic, gccjit::location loc) +@anchor{cp/topics/functions _CPPv4N6gccjit7context12new_functionE21gcc_jit_function_kindN6gccjit4typeEPKcRNSt6vectorI5paramEEiN6gccjit8locationE}@anchor{33c}@anchor{cp/topics/functions _CPPv3N6gccjit7context12new_functionE21gcc_jit_function_kindN6gccjit4typeEPKcRNSt6vectorI5paramEEiN6gccjit8locationE}@anchor{33d}@anchor{cp/topics/functions _CPPv2N6gccjit7context12new_functionE21gcc_jit_function_kindN6gccjit4typeEPKcRNSt6vectorI5paramEEiN6gccjit8locationE}@anchor{33e}@anchor{cp/topics/functions gccjit context new_function__gcc_jit_function_kind gccjit type cCP std vector param R i gccjit location}@anchor{33f} +@deffn {C++ Function} gccjit::@ref{188,,function} gccjit::@ref{171,,context}::new_function (enum gcc_jit_function_kind, gccjit::type return_type, const char *name, std::vector<param> ¶ms, int is_variadic, gccjit::location loc) Create a gcc_jit_function with the given name and parameters. @@ -14571,49 +14607,49 @@ This is a wrapper around the C API’s @ref{11,,gcc_jit_context_new_function()}. @end deffn @geindex gccjit;;context;;get_builtin_function (C++ function) -@anchor{cp/topics/functions _CPPv4N6gccjit7context20get_builtin_functionEPKc}@anchor{33d}@anchor{cp/topics/functions _CPPv3N6gccjit7context20get_builtin_functionEPKc}@anchor{33e}@anchor{cp/topics/functions _CPPv2N6gccjit7context20get_builtin_functionEPKc}@anchor{33f}@anchor{cp/topics/functions gccjit context get_builtin_function__cCP}@anchor{340} -@deffn {C++ Function} gccjit::@ref{185,,function} gccjit::@ref{16e,,context}::get_builtin_function (const char *name) +@anchor{cp/topics/functions _CPPv4N6gccjit7context20get_builtin_functionEPKc}@anchor{340}@anchor{cp/topics/functions _CPPv3N6gccjit7context20get_builtin_functionEPKc}@anchor{341}@anchor{cp/topics/functions _CPPv2N6gccjit7context20get_builtin_functionEPKc}@anchor{342}@anchor{cp/topics/functions gccjit context get_builtin_function__cCP}@anchor{343} +@deffn {C++ Function} gccjit::@ref{188,,function} gccjit::@ref{171,,context}::get_builtin_function (const char *name) This is a wrapper around the C API’s -@ref{109,,gcc_jit_context_get_builtin_function()}. +@ref{10b,,gcc_jit_context_get_builtin_function()}. @end deffn @geindex gccjit;;function;;get_param (C++ function) -@anchor{cp/topics/functions _CPPv4NK6gccjit8function9get_paramEi}@anchor{341}@anchor{cp/topics/functions _CPPv3NK6gccjit8function9get_paramEi}@anchor{342}@anchor{cp/topics/functions _CPPv2NK6gccjit8function9get_paramEi}@anchor{343}@anchor{cp/topics/functions gccjit function get_param__iC}@anchor{344} -@deffn {C++ Function} gccjit::@ref{181,,param} gccjit::@ref{185,,function}::get_param (int index) const +@anchor{cp/topics/functions _CPPv4NK6gccjit8function9get_paramEi}@anchor{344}@anchor{cp/topics/functions _CPPv3NK6gccjit8function9get_paramEi}@anchor{345}@anchor{cp/topics/functions _CPPv2NK6gccjit8function9get_paramEi}@anchor{346}@anchor{cp/topics/functions gccjit function get_param__iC}@anchor{347} +@deffn {C++ Function} gccjit::@ref{184,,param} gccjit::@ref{188,,function}::get_param (int index) const Get the param of the given index (0-based). @end deffn @geindex gccjit;;function;;dump_to_dot (C++ function) -@anchor{cp/topics/functions _CPPv4N6gccjit8function11dump_to_dotEPKc}@anchor{18d}@anchor{cp/topics/functions _CPPv3N6gccjit8function11dump_to_dotEPKc}@anchor{345}@anchor{cp/topics/functions _CPPv2N6gccjit8function11dump_to_dotEPKc}@anchor{346}@anchor{cp/topics/functions gccjit function dump_to_dot__cCP}@anchor{347} -@deffn {C++ Function} void gccjit::@ref{185,,function}::dump_to_dot (const char *path) +@anchor{cp/topics/functions _CPPv4N6gccjit8function11dump_to_dotEPKc}@anchor{190}@anchor{cp/topics/functions _CPPv3N6gccjit8function11dump_to_dotEPKc}@anchor{348}@anchor{cp/topics/functions _CPPv2N6gccjit8function11dump_to_dotEPKc}@anchor{349}@anchor{cp/topics/functions gccjit function dump_to_dot__cCP}@anchor{34a} +@deffn {C++ Function} void gccjit::@ref{188,,function}::dump_to_dot (const char *path) Emit the function in graphviz format to the given path. @end deffn @geindex gccjit;;function;;new_local (C++ function) -@anchor{cp/topics/functions _CPPv4N6gccjit8function9new_localEN6gccjit4typeEPKcN6gccjit8locationE}@anchor{182}@anchor{cp/topics/functions _CPPv3N6gccjit8function9new_localEN6gccjit4typeEPKcN6gccjit8locationE}@anchor{348}@anchor{cp/topics/functions _CPPv2N6gccjit8function9new_localEN6gccjit4typeEPKcN6gccjit8locationE}@anchor{349}@anchor{cp/topics/functions gccjit function new_local__gccjit type cCP gccjit location}@anchor{34a} -@deffn {C++ Function} gccjit::@ref{180,,lvalue} gccjit::@ref{185,,function}::new_local (gccjit::type type, const char *name, gccjit::location loc) +@anchor{cp/topics/functions _CPPv4N6gccjit8function9new_localEN6gccjit4typeEPKcN6gccjit8locationE}@anchor{185}@anchor{cp/topics/functions _CPPv3N6gccjit8function9new_localEN6gccjit4typeEPKcN6gccjit8locationE}@anchor{34b}@anchor{cp/topics/functions _CPPv2N6gccjit8function9new_localEN6gccjit4typeEPKcN6gccjit8locationE}@anchor{34c}@anchor{cp/topics/functions gccjit function new_local__gccjit type cCP gccjit location}@anchor{34d} +@deffn {C++ Function} gccjit::@ref{183,,lvalue} gccjit::@ref{188,,function}::new_local (gccjit::type type, const char *name, gccjit::location loc) Create a new local variable within the function, of the given type and name. @end deffn @node Blocks<2>,Statements<2>,Functions<2>,Creating and using functions<2> -@anchor{cp/topics/functions blocks}@anchor{34b} +@anchor{cp/topics/functions blocks}@anchor{34e} @subsubsection Blocks @geindex gccjit;;block (C++ class) -@anchor{cp/topics/functions _CPPv4N6gccjit5blockE}@anchor{184}@anchor{cp/topics/functions _CPPv3N6gccjit5blockE}@anchor{34c}@anchor{cp/topics/functions _CPPv2N6gccjit5blockE}@anchor{34d}@anchor{cp/topics/functions gccjit block}@anchor{34e} +@anchor{cp/topics/functions _CPPv4N6gccjit5blockE}@anchor{187}@anchor{cp/topics/functions _CPPv3N6gccjit5blockE}@anchor{34f}@anchor{cp/topics/functions _CPPv2N6gccjit5blockE}@anchor{350}@anchor{cp/topics/functions gccjit block}@anchor{351} @deffn {C++ Class} gccjit::block A @cite{gccjit::block} represents a basic block within a function i.e. a sequence of statements with a single entry point and a single exit point. -@ref{184,,gccjit;;block} is a subclass of @ref{173,,gccjit;;object}. +@ref{187,,gccjit;;block} is a subclass of @ref{176,,gccjit;;object}. The first basic block that you create within a function will be the entrypoint. @@ -14627,8 +14663,8 @@ one function. @end deffn @geindex gccjit;;function;;new_block (C++ function) -@anchor{cp/topics/functions _CPPv4N6gccjit8function9new_blockEPKc}@anchor{34f}@anchor{cp/topics/functions _CPPv3N6gccjit8function9new_blockEPKc}@anchor{350}@anchor{cp/topics/functions _CPPv2N6gccjit8function9new_blockEPKc}@anchor{351}@anchor{cp/topics/functions gccjit function new_block__cCP}@anchor{352} -@deffn {C++ Function} gccjit::@ref{184,,block} gccjit::@ref{185,,function}::new_block (const char *name) +@anchor{cp/topics/functions _CPPv4N6gccjit8function9new_blockEPKc}@anchor{352}@anchor{cp/topics/functions _CPPv3N6gccjit8function9new_blockEPKc}@anchor{353}@anchor{cp/topics/functions _CPPv2N6gccjit8function9new_blockEPKc}@anchor{354}@anchor{cp/topics/functions gccjit function new_block__cCP}@anchor{355} +@deffn {C++ Function} gccjit::@ref{187,,block} gccjit::@ref{188,,function}::new_block (const char *name) Create a basic block of the given name. The name may be NULL, but providing meaningful names is often helpful when debugging: it may @@ -14637,13 +14673,13 @@ messages. @end deffn @node Statements<2>,,Blocks<2>,Creating and using functions<2> -@anchor{cp/topics/functions statements}@anchor{353} +@anchor{cp/topics/functions statements}@anchor{356} @subsubsection Statements @geindex gccjit;;block;;add_eval (C++ function) -@anchor{cp/topics/functions _CPPv4N6gccjit5block8add_evalEN6gccjit6rvalueEN6gccjit8locationE}@anchor{2fb}@anchor{cp/topics/functions _CPPv3N6gccjit5block8add_evalEN6gccjit6rvalueEN6gccjit8locationE}@anchor{354}@anchor{cp/topics/functions _CPPv2N6gccjit5block8add_evalEN6gccjit6rvalueEN6gccjit8locationE}@anchor{355}@anchor{cp/topics/functions gccjit block add_eval__gccjit rvalue gccjit location}@anchor{356} -@deffn {C++ Function} void gccjit::@ref{184,,block}::add_eval (gccjit::rvalue rvalue, gccjit::location loc) +@anchor{cp/topics/functions _CPPv4N6gccjit5block8add_evalEN6gccjit6rvalueEN6gccjit8locationE}@anchor{2fe}@anchor{cp/topics/functions _CPPv3N6gccjit5block8add_evalEN6gccjit6rvalueEN6gccjit8locationE}@anchor{357}@anchor{cp/topics/functions _CPPv2N6gccjit5block8add_evalEN6gccjit6rvalueEN6gccjit8locationE}@anchor{358}@anchor{cp/topics/functions gccjit block add_eval__gccjit rvalue gccjit location}@anchor{359} +@deffn {C++ Function} void gccjit::@ref{187,,block}::add_eval (gccjit::rvalue rvalue, gccjit::location loc) Add evaluation of an rvalue, discarding the result (e.g. a function call that “returns” void). @@ -14656,8 +14692,8 @@ This is equivalent to this C code: @end deffn @geindex gccjit;;block;;add_assignment (C++ function) -@anchor{cp/topics/functions _CPPv4N6gccjit5block14add_assignmentEN6gccjit6lvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{186}@anchor{cp/topics/functions _CPPv3N6gccjit5block14add_assignmentEN6gccjit6lvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{357}@anchor{cp/topics/functions _CPPv2N6gccjit5block14add_assignmentEN6gccjit6lvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{358}@anchor{cp/topics/functions gccjit block add_assignment__gccjit lvalue gccjit rvalue gccjit location}@anchor{359} -@deffn {C++ Function} void gccjit::@ref{184,,block}::add_assignment (gccjit::lvalue lvalue, gccjit::rvalue rvalue, gccjit::location loc) +@anchor{cp/topics/functions _CPPv4N6gccjit5block14add_assignmentEN6gccjit6lvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{189}@anchor{cp/topics/functions _CPPv3N6gccjit5block14add_assignmentEN6gccjit6lvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{35a}@anchor{cp/topics/functions _CPPv2N6gccjit5block14add_assignmentEN6gccjit6lvalueEN6gccjit6rvalueEN6gccjit8locationE}@anchor{35b}@anchor{cp/topics/functions gccjit block add_assignment__gccjit lvalue gccjit rvalue gccjit location}@anchor{35c} +@deffn {C++ Function} void gccjit::@ref{187,,block}::add_assignment (gccjit::lvalue lvalue, gccjit::rvalue rvalue, gccjit::location loc) Add evaluation of an rvalue, assigning the result to the given lvalue. @@ -14670,8 +14706,8 @@ lvalue = rvalue; @end deffn @geindex gccjit;;block;;add_assignment_op (C++ function) -@anchor{cp/topics/functions _CPPv4N6gccjit5block17add_assignment_opEN6gccjit6lvalueE17gcc_jit_binary_opN6gccjit6rvalueEN6gccjit8locationE}@anchor{18a}@anchor{cp/topics/functions _CPPv3N6gccjit5block17add_assignment_opEN6gccjit6lvalueE17gcc_jit_binary_opN6gccjit6rvalueEN6gccjit8locationE}@anchor{35a}@anchor{cp/topics/functions _CPPv2N6gccjit5block17add_assignment_opEN6gccjit6lvalueE17gcc_jit_binary_opN6gccjit6rvalueEN6gccjit8locationE}@anchor{35b}@anchor{cp/topics/functions gccjit block add_assignment_op__gccjit lvalue gcc_jit_binary_op gccjit rvalue gccjit location}@anchor{35c} -@deffn {C++ Function} void gccjit::@ref{184,,block}::add_assignment_op (gccjit::lvalue lvalue, enum gcc_jit_binary_op, gccjit::rvalue rvalue, gccjit::location loc) +@anchor{cp/topics/functions _CPPv4N6gccjit5block17add_assignment_opEN6gccjit6lvalueE17gcc_jit_binary_opN6gccjit6rvalueEN6gccjit8locationE}@anchor{18d}@anchor{cp/topics/functions _CPPv3N6gccjit5block17add_assignment_opEN6gccjit6lvalueE17gcc_jit_binary_opN6gccjit6rvalueEN6gccjit8locationE}@anchor{35d}@anchor{cp/topics/functions _CPPv2N6gccjit5block17add_assignment_opEN6gccjit6lvalueE17gcc_jit_binary_opN6gccjit6rvalueEN6gccjit8locationE}@anchor{35e}@anchor{cp/topics/functions gccjit block add_assignment_op__gccjit lvalue gcc_jit_binary_op gccjit rvalue gccjit location}@anchor{35f} +@deffn {C++ Function} void gccjit::@ref{187,,block}::add_assignment_op (gccjit::lvalue lvalue, enum gcc_jit_binary_op, gccjit::rvalue rvalue, gccjit::location loc) Add evaluation of an rvalue, using the result to modify an lvalue. @@ -14696,8 +14732,8 @@ loop_body.add_assignment_op ( @end deffn @geindex gccjit;;block;;add_comment (C++ function) -@anchor{cp/topics/functions _CPPv4N6gccjit5block11add_commentEPKcN6gccjit8locationE}@anchor{196}@anchor{cp/topics/functions _CPPv3N6gccjit5block11add_commentEPKcN6gccjit8locationE}@anchor{35d}@anchor{cp/topics/functions _CPPv2N6gccjit5block11add_commentEPKcN6gccjit8locationE}@anchor{35e}@anchor{cp/topics/functions gccjit block add_comment__cCP gccjit location}@anchor{35f} -@deffn {C++ Function} void gccjit::@ref{184,,block}::add_comment (const char *text, gccjit::location loc) +@anchor{cp/topics/functions _CPPv4N6gccjit5block11add_commentEPKcN6gccjit8locationE}@anchor{199}@anchor{cp/topics/functions _CPPv3N6gccjit5block11add_commentEPKcN6gccjit8locationE}@anchor{360}@anchor{cp/topics/functions _CPPv2N6gccjit5block11add_commentEPKcN6gccjit8locationE}@anchor{361}@anchor{cp/topics/functions gccjit block add_comment__cCP gccjit location}@anchor{362} +@deffn {C++ Function} void gccjit::@ref{187,,block}::add_comment (const char *text, gccjit::location loc) Add a no-op textual comment to the internal representation of the code. It will be optimized away, but will be visible in the dumps @@ -14710,8 +14746,8 @@ Parameter “loc” is optional. @end deffn @geindex gccjit;;block;;end_with_conditional (C++ function) -@anchor{cp/topics/functions _CPPv4N6gccjit5block20end_with_conditionalEN6gccjit6rvalueEN6gccjit5blockEN6gccjit5blockEN6gccjit8locationE}@anchor{189}@anchor{cp/topics/functions _CPPv3N6gccjit5block20end_with_conditionalEN6gccjit6rvalueEN6gccjit5blockEN6gccjit5blockEN6gccjit8locationE}@anchor{360}@anchor{cp/topics/functions _CPPv2N6gccjit5block20end_with_conditionalEN6gccjit6rvalueEN6gccjit5blockEN6gccjit5blockEN6gccjit8locationE}@anchor{361}@anchor{cp/topics/functions gccjit block end_with_conditional__gccjit rvalue gccjit block gccjit block gccjit location}@anchor{362} -@deffn {C++ Function} void gccjit::@ref{184,,block}::end_with_conditional (gccjit::rvalue boolval, gccjit::block on_true, gccjit::block on_false, gccjit::location loc) +@anchor{cp/topics/functions _CPPv4N6gccjit5block20end_with_conditionalEN6gccjit6rvalueEN6gccjit5blockEN6gccjit5blockEN6gccjit8locationE}@anchor{18c}@anchor{cp/topics/functions _CPPv3N6gccjit5block20end_with_conditionalEN6gccjit6rvalueEN6gccjit5blockEN6gccjit5blockEN6gccjit8locationE}@anchor{363}@anchor{cp/topics/functions _CPPv2N6gccjit5block20end_with_conditionalEN6gccjit6rvalueEN6gccjit5blockEN6gccjit5blockEN6gccjit8locationE}@anchor{364}@anchor{cp/topics/functions gccjit block end_with_conditional__gccjit rvalue gccjit block gccjit block gccjit location}@anchor{365} +@deffn {C++ Function} void gccjit::@ref{187,,block}::end_with_conditional (gccjit::rvalue boolval, gccjit::block on_true, gccjit::block on_false, gccjit::location loc) Terminate a block by adding evaluation of an rvalue, branching on the result to the appropriate successor block. @@ -14729,8 +14765,8 @@ block, boolval, on_true, and on_false must be non-NULL. @end deffn @geindex gccjit;;block;;end_with_jump (C++ function) -@anchor{cp/topics/functions _CPPv4N6gccjit5block13end_with_jumpEN6gccjit5blockEN6gccjit8locationE}@anchor{363}@anchor{cp/topics/functions _CPPv3N6gccjit5block13end_with_jumpEN6gccjit5blockEN6gccjit8locationE}@anchor{364}@anchor{cp/topics/functions _CPPv2N6gccjit5block13end_with_jumpEN6gccjit5blockEN6gccjit8locationE}@anchor{365}@anchor{cp/topics/functions gccjit block end_with_jump__gccjit block gccjit location}@anchor{366} -@deffn {C++ Function} void gccjit::@ref{184,,block}::end_with_jump (gccjit::block target, gccjit::location loc) +@anchor{cp/topics/functions _CPPv4N6gccjit5block13end_with_jumpEN6gccjit5blockEN6gccjit8locationE}@anchor{366}@anchor{cp/topics/functions _CPPv3N6gccjit5block13end_with_jumpEN6gccjit5blockEN6gccjit8locationE}@anchor{367}@anchor{cp/topics/functions _CPPv2N6gccjit5block13end_with_jumpEN6gccjit5blockEN6gccjit8locationE}@anchor{368}@anchor{cp/topics/functions gccjit block end_with_jump__gccjit block gccjit location}@anchor{369} +@deffn {C++ Function} void gccjit::@ref{187,,block}::end_with_jump (gccjit::block target, gccjit::location loc) Terminate a block by adding a jump to the given target block. @@ -14742,8 +14778,8 @@ goto target; @end deffn @geindex gccjit;;block;;end_with_return (C++ function) -@anchor{cp/topics/functions _CPPv4N6gccjit5block15end_with_returnEN6gccjit6rvalueEN6gccjit8locationE}@anchor{367}@anchor{cp/topics/functions _CPPv3N6gccjit5block15end_with_returnEN6gccjit6rvalueEN6gccjit8locationE}@anchor{368}@anchor{cp/topics/functions _CPPv2N6gccjit5block15end_with_returnEN6gccjit6rvalueEN6gccjit8locationE}@anchor{369}@anchor{cp/topics/functions gccjit block end_with_return__gccjit rvalue gccjit location}@anchor{36a} -@deffn {C++ Function} void gccjit::@ref{184,,block}::end_with_return (gccjit::rvalue rvalue, gccjit::location loc) +@anchor{cp/topics/functions _CPPv4N6gccjit5block15end_with_returnEN6gccjit6rvalueEN6gccjit8locationE}@anchor{36a}@anchor{cp/topics/functions _CPPv3N6gccjit5block15end_with_returnEN6gccjit6rvalueEN6gccjit8locationE}@anchor{36b}@anchor{cp/topics/functions _CPPv2N6gccjit5block15end_with_returnEN6gccjit6rvalueEN6gccjit8locationE}@anchor{36c}@anchor{cp/topics/functions gccjit block end_with_return__gccjit rvalue gccjit location}@anchor{36d} +@deffn {C++ Function} void gccjit::@ref{187,,block}::end_with_return (gccjit::rvalue rvalue, gccjit::location loc) Terminate a block. @@ -14772,8 +14808,8 @@ return; @end deffn @geindex gccjit;;block;;end_with_switch (C++ function) -@anchor{cp/topics/functions _CPPv4N6gccjit5block15end_with_switchEN6gccjit6rvalueEN6gccjit5blockENSt6vectorIN6gccjit5case_EEEN6gccjit8locationE}@anchor{36b}@anchor{cp/topics/functions _CPPv3N6gccjit5block15end_with_switchEN6gccjit6rvalueEN6gccjit5blockENSt6vectorIN6gccjit5case_EEEN6gccjit8locationE}@anchor{36c}@anchor{cp/topics/functions _CPPv2N6gccjit5block15end_with_switchEN6gccjit6rvalueEN6gccjit5blockENSt6vectorIN6gccjit5case_EEEN6gccjit8locationE}@anchor{36d}@anchor{cp/topics/functions gccjit block end_with_switch__gccjit rvalue gccjit block std vector gccjit case_ gccjit location}@anchor{36e} -@deffn {C++ Function} void gccjit::@ref{184,,block}::end_with_switch (gccjit::rvalue expr, gccjit::block default_block, std::vector<gccjit::case_> cases, gccjit::location loc) +@anchor{cp/topics/functions _CPPv4N6gccjit5block15end_with_switchEN6gccjit6rvalueEN6gccjit5blockENSt6vectorIN6gccjit5case_EEEN6gccjit8locationE}@anchor{36e}@anchor{cp/topics/functions _CPPv3N6gccjit5block15end_with_switchEN6gccjit6rvalueEN6gccjit5blockENSt6vectorIN6gccjit5case_EEEN6gccjit8locationE}@anchor{36f}@anchor{cp/topics/functions _CPPv2N6gccjit5block15end_with_switchEN6gccjit6rvalueEN6gccjit5blockENSt6vectorIN6gccjit5case_EEEN6gccjit8locationE}@anchor{370}@anchor{cp/topics/functions gccjit block end_with_switch__gccjit rvalue gccjit block std vector gccjit case_ gccjit location}@anchor{371} +@deffn {C++ Function} void gccjit::@ref{187,,block}::end_with_switch (gccjit::rvalue expr, gccjit::block default_block, std::vector<gccjit::case_> cases, gccjit::location loc) Terminate a block by adding evalation of an rvalue, then performing a multiway branch. @@ -14813,14 +14849,14 @@ The API entrypoints relating to switch statements and cases: @itemize * @item -@ref{36b,,gccjit;;block;;end_with_switch()} +@ref{36e,,gccjit;;block;;end_with_switch()} @item @code{gccjit::context::new_case()} @end itemize @end quotation -were added in @ref{11a,,LIBGCCJIT_ABI_3}; you can test for their presence +were added in @ref{11c,,LIBGCCJIT_ABI_3}; you can test for their presence using @example @@ -14828,9 +14864,9 @@ using @end example A @cite{gccjit::case_} represents a case within a switch statement, and -is created within a particular @ref{16e,,gccjit;;context} using +is created within a particular @ref{171,,gccjit;;context} using @code{gccjit::context::new_case()}. It is a subclass of -@ref{173,,gccjit;;object}. +@ref{176,,gccjit;;object}. Each case expresses a multivalued range of integer values. You can express single-valued cases by passing in the same value for @@ -14933,12 +14969,12 @@ create_code (gcc_jit_context *c_ctxt, void *user_data) @c <https://www.gnu.org/licenses/>. @node Source Locations<2>,Compiling a context<2>,Creating and using functions<2>,Topic Reference<2> -@anchor{cp/topics/locations doc}@anchor{36f}@anchor{cp/topics/locations source-locations}@anchor{370} +@anchor{cp/topics/locations doc}@anchor{372}@anchor{cp/topics/locations source-locations}@anchor{373} @subsection Source Locations @geindex gccjit;;location (C++ class) -@anchor{cp/topics/locations _CPPv4N6gccjit8locationE}@anchor{194}@anchor{cp/topics/locations _CPPv3N6gccjit8locationE}@anchor{371}@anchor{cp/topics/locations _CPPv2N6gccjit8locationE}@anchor{372}@anchor{cp/topics/locations gccjit location}@anchor{373} +@anchor{cp/topics/locations _CPPv4N6gccjit8locationE}@anchor{197}@anchor{cp/topics/locations _CPPv3N6gccjit8locationE}@anchor{374}@anchor{cp/topics/locations _CPPv2N6gccjit8locationE}@anchor{375}@anchor{cp/topics/locations gccjit location}@anchor{376} @deffn {C++ Class} gccjit::location A @cite{gccjit::location} encapsulates a source code location, so that @@ -14949,10 +14985,10 @@ single-step through your language. @cite{gccjit::location} instances are optional: you can always omit them from any C++ API entrypoint accepting one. -You can construct them using @ref{19a,,gccjit;;context;;new_location()}. +You can construct them using @ref{19d,,gccjit;;context;;new_location()}. You need to enable @ref{42,,GCC_JIT_BOOL_OPTION_DEBUGINFO} on the -@ref{16e,,gccjit;;context} for these locations to actually be usable by +@ref{171,,gccjit;;context} for these locations to actually be usable by the debugger: @example @@ -14961,8 +14997,8 @@ ctxt.set_bool_option (GCC_JIT_BOOL_OPTION_DEBUGINFO, 1); @end deffn @geindex gccjit;;context;;new_location (C++ function) -@anchor{cp/topics/locations _CPPv4N6gccjit7context12new_locationEPKcii}@anchor{19a}@anchor{cp/topics/locations _CPPv3N6gccjit7context12new_locationEPKcii}@anchor{374}@anchor{cp/topics/locations _CPPv2N6gccjit7context12new_locationEPKcii}@anchor{375}@anchor{cp/topics/locations gccjit context new_location__cCP i i}@anchor{376} -@deffn {C++ Function} gccjit::@ref{194,,location} gccjit::@ref{16e,,context}::new_location (const char *filename, int line, int column) +@anchor{cp/topics/locations _CPPv4N6gccjit7context12new_locationEPKcii}@anchor{19d}@anchor{cp/topics/locations _CPPv3N6gccjit7context12new_locationEPKcii}@anchor{377}@anchor{cp/topics/locations _CPPv2N6gccjit7context12new_locationEPKcii}@anchor{378}@anchor{cp/topics/locations gccjit context new_location__cCP i i}@anchor{379} +@deffn {C++ Function} gccjit::@ref{197,,location} gccjit::@ref{171,,context}::new_location (const char *filename, int line, int column) Create a @cite{gccjit::location} instance representing the given source location. @@ -14974,13 +15010,13 @@ location. @end menu @node Faking it<2>,,,Source Locations<2> -@anchor{cp/topics/locations faking-it}@anchor{377} +@anchor{cp/topics/locations faking-it}@anchor{37a} @subsubsection Faking it If you don’t have source code for your internal representation, but need to debug, you can generate a C-like representation of the functions in -your context using @ref{1b9,,gccjit;;context;;dump_to_file()}: +your context using @ref{1bc,,gccjit;;context;;dump_to_file()}: @example ctxt.dump_to_file ("/tmp/something.c", @@ -15010,13 +15046,13 @@ file, giving you @emph{something} you can step through in the debugger. @c <https://www.gnu.org/licenses/>. @node Compiling a context<2>,Using Assembly Language with libgccjit++,Source Locations<2>,Topic Reference<2> -@anchor{cp/topics/compilation doc}@anchor{378}@anchor{cp/topics/compilation compiling-a-context}@anchor{379} +@anchor{cp/topics/compilation doc}@anchor{37b}@anchor{cp/topics/compilation compiling-a-context}@anchor{37c} @subsection Compiling a context -Once populated, a @ref{16e,,gccjit;;context} can be compiled to -machine code, either in-memory via @ref{178,,gccjit;;context;;compile()} or -to disk via @ref{37a,,gccjit;;context;;compile_to_file()}. +Once populated, a @ref{171,,gccjit;;context} can be compiled to +machine code, either in-memory via @ref{17b,,gccjit;;context;;compile()} or +to disk via @ref{37d,,gccjit;;context;;compile_to_file()}. You can compile a context multiple times (using either form of compilation), although any errors that occur on the context will @@ -15029,13 +15065,13 @@ prevent any future compilation of that context. @end menu @node In-memory compilation<2>,Ahead-of-time compilation<2>,,Compiling a context<2> -@anchor{cp/topics/compilation in-memory-compilation}@anchor{37b} +@anchor{cp/topics/compilation in-memory-compilation}@anchor{37e} @subsubsection In-memory compilation @geindex gccjit;;context;;compile (C++ function) -@anchor{cp/topics/compilation _CPPv4N6gccjit7context7compileEv}@anchor{178}@anchor{cp/topics/compilation _CPPv3N6gccjit7context7compileEv}@anchor{37c}@anchor{cp/topics/compilation _CPPv2N6gccjit7context7compileEv}@anchor{37d}@anchor{cp/topics/compilation gccjit context compile}@anchor{37e} -@deffn {C++ Function} gcc_jit_result *gccjit::@ref{16e,,context}::compile () +@anchor{cp/topics/compilation _CPPv4N6gccjit7context7compileEv}@anchor{17b}@anchor{cp/topics/compilation _CPPv3N6gccjit7context7compileEv}@anchor{37f}@anchor{cp/topics/compilation _CPPv2N6gccjit7context7compileEv}@anchor{380}@anchor{cp/topics/compilation gccjit context compile}@anchor{381} +@deffn {C++ Function} gcc_jit_result *gccjit::@ref{171,,context}::compile () This calls into GCC and builds the code, returning a @cite{gcc_jit_result *}. @@ -15045,19 +15081,19 @@ This is a thin wrapper around the @end deffn @node Ahead-of-time compilation<2>,,In-memory compilation<2>,Compiling a context<2> -@anchor{cp/topics/compilation ahead-of-time-compilation}@anchor{37f} +@anchor{cp/topics/compilation ahead-of-time-compilation}@anchor{382} @subsubsection Ahead-of-time compilation Although libgccjit is primarily aimed at just-in-time compilation, it can also be used for implementing more traditional ahead-of-time -compilers, via the @ref{37a,,gccjit;;context;;compile_to_file()} method. +compilers, via the @ref{37d,,gccjit;;context;;compile_to_file()} method. @geindex gccjit;;context;;compile_to_file (C++ function) -@anchor{cp/topics/compilation _CPPv4N6gccjit7context15compile_to_fileE19gcc_jit_output_kindPKc}@anchor{37a}@anchor{cp/topics/compilation _CPPv3N6gccjit7context15compile_to_fileE19gcc_jit_output_kindPKc}@anchor{380}@anchor{cp/topics/compilation _CPPv2N6gccjit7context15compile_to_fileE19gcc_jit_output_kindPKc}@anchor{381}@anchor{cp/topics/compilation gccjit context compile_to_file__gcc_jit_output_kind cCP}@anchor{382} -@deffn {C++ Function} void gccjit::@ref{16e,,context}::compile_to_file (enum gcc_jit_output_kind, const char *output_path) +@anchor{cp/topics/compilation _CPPv4N6gccjit7context15compile_to_fileE19gcc_jit_output_kindPKc}@anchor{37d}@anchor{cp/topics/compilation _CPPv3N6gccjit7context15compile_to_fileE19gcc_jit_output_kindPKc}@anchor{383}@anchor{cp/topics/compilation _CPPv2N6gccjit7context15compile_to_fileE19gcc_jit_output_kindPKc}@anchor{384}@anchor{cp/topics/compilation gccjit context compile_to_file__gcc_jit_output_kind cCP}@anchor{385} +@deffn {C++ Function} void gccjit::@ref{171,,context}::compile_to_file (enum gcc_jit_output_kind, const char *output_path) -Compile the @ref{16e,,gccjit;;context} to a file of the given +Compile the @ref{171,,gccjit;;context} to a file of the given kind. This is a thin wrapper around the @@ -15082,7 +15118,7 @@ This is a thin wrapper around the @c <https://www.gnu.org/licenses/>. @node Using Assembly Language with libgccjit++,,Compiling a context<2>,Topic Reference<2> -@anchor{cp/topics/asm doc}@anchor{383}@anchor{cp/topics/asm using-assembly-language-with-libgccjit}@anchor{384} +@anchor{cp/topics/asm doc}@anchor{386}@anchor{cp/topics/asm using-assembly-language-with-libgccjit}@anchor{387} @subsection Using Assembly Language with libgccjit++ @@ -15092,7 +15128,7 @@ following assumes a familiarity with that functionality. See How to Use Inline Assembly Language in C Code@footnote{https://gcc.gnu.org/onlinedocs/gcc/Using-Assembly-Language-with-C.html} in GCC’s documentation, the “Extended Asm” section in particular. -These entrypoints were added in @ref{14c,,LIBGCCJIT_ABI_15}; you can test +These entrypoints were added in @ref{14e,,LIBGCCJIT_ABI_15}; you can test for their presence using @quotation @@ -15109,38 +15145,38 @@ for their presence using @end menu @node Adding assembler instructions within a function<2>,Adding top-level assembler statements<2>,,Using Assembly Language with libgccjit++ -@anchor{cp/topics/asm adding-assembler-instructions-within-a-function}@anchor{385} +@anchor{cp/topics/asm adding-assembler-instructions-within-a-function}@anchor{388} @subsubsection Adding assembler instructions within a function @geindex gccjit;;extended_asm (C++ class) -@anchor{cp/topics/asm _CPPv4N6gccjit12extended_asmE}@anchor{386}@anchor{cp/topics/asm _CPPv3N6gccjit12extended_asmE}@anchor{387}@anchor{cp/topics/asm _CPPv2N6gccjit12extended_asmE}@anchor{388}@anchor{cp/topics/asm gccjit extended_asm}@anchor{389} +@anchor{cp/topics/asm _CPPv4N6gccjit12extended_asmE}@anchor{389}@anchor{cp/topics/asm _CPPv3N6gccjit12extended_asmE}@anchor{38a}@anchor{cp/topics/asm _CPPv2N6gccjit12extended_asmE}@anchor{38b}@anchor{cp/topics/asm gccjit extended_asm}@anchor{38c} @deffn {C++ Class} gccjit::extended_asm A @cite{gccjit::extended_asm} represents an extended @code{asm} statement: a series of low-level instructions inside a function that convert inputs to outputs. -@ref{386,,gccjit;;extended_asm} is a subclass of @ref{173,,gccjit;;object}. -It is a thin wrapper around the C API’s @ref{11b,,gcc_jit_extended_asm *}. +@ref{389,,gccjit;;extended_asm} is a subclass of @ref{176,,gccjit;;object}. +It is a thin wrapper around the C API’s @ref{11d,,gcc_jit_extended_asm *}. To avoid having an API entrypoint with a very large number of parameters, an extended @code{asm} statement is made in stages: -an initial call to create the @ref{386,,gccjit;;extended_asm}, +an initial call to create the @ref{389,,gccjit;;extended_asm}, followed by calls to add operands and set other properties of the statement. -There are two API entrypoints for creating a @ref{386,,gccjit;;extended_asm}: +There are two API entrypoints for creating a @ref{389,,gccjit;;extended_asm}: @itemize * @item -@ref{38a,,gccjit;;block;;add_extended_asm()} for an @code{asm} statement with +@ref{38d,,gccjit;;block;;add_extended_asm()} for an @code{asm} statement with no control flow, and @item -@ref{38b,,gccjit;;block;;end_with_extended_asm_goto()} for an @code{asm goto}. +@ref{38e,,gccjit;;block;;end_with_extended_asm_goto()} for an @code{asm goto}. @end itemize For example, to create the equivalent of: @@ -15168,8 +15204,8 @@ extended @code{asm} statement (e.g. the @code{%0} and @code{%1} above), the equivalent to the C syntax is followed i.e. all output operands, then all input operands, regardless of what order the calls to -@ref{38c,,gccjit;;extended_asm;;add_output_operand()} and -@ref{38d,,gccjit;;extended_asm;;add_input_operand()} were made in. +@ref{38f,,gccjit;;extended_asm;;add_output_operand()} and +@ref{390,,gccjit;;extended_asm;;add_input_operand()} were made in. @end quotation @end cartouche @@ -15194,10 +15230,10 @@ the following API calls could be used: @end deffn @geindex gccjit;;block;;add_extended_asm (C++ function) -@anchor{cp/topics/asm _CPPv4N6gccjit5block16add_extended_asmERKNSt6stringEN6gccjit8locationE}@anchor{38a}@anchor{cp/topics/asm _CPPv3N6gccjit5block16add_extended_asmERKNSt6stringEN6gccjit8locationE}@anchor{38e}@anchor{cp/topics/asm _CPPv2N6gccjit5block16add_extended_asmERKNSt6stringEN6gccjit8locationE}@anchor{38f}@anchor{cp/topics/asm gccjit block add_extended_asm__ssCR gccjit location}@anchor{390} -@deffn {C++ Function} @ref{386,,extended_asm} gccjit::@ref{184,,block}::add_extended_asm (const std::string &asm_template, gccjit::location loc = location()) +@anchor{cp/topics/asm _CPPv4N6gccjit5block16add_extended_asmERKNSt6stringEN6gccjit8locationE}@anchor{38d}@anchor{cp/topics/asm _CPPv3N6gccjit5block16add_extended_asmERKNSt6stringEN6gccjit8locationE}@anchor{391}@anchor{cp/topics/asm _CPPv2N6gccjit5block16add_extended_asmERKNSt6stringEN6gccjit8locationE}@anchor{392}@anchor{cp/topics/asm gccjit block add_extended_asm__ssCR gccjit location}@anchor{393} +@deffn {C++ Function} @ref{389,,extended_asm} gccjit::@ref{187,,block}::add_extended_asm (const std::string &asm_template, gccjit::location loc = location()) -Create a @ref{386,,gccjit;;extended_asm} for an extended @code{asm} statement +Create a @ref{389,,gccjit;;extended_asm} for an extended @code{asm} statement with no control flow (i.e. without the @code{goto} qualifier). The parameter @code{asm_template} corresponds to the @cite{AssemblerTemplate} @@ -15207,10 +15243,10 @@ an on-stack buffer. @end deffn @geindex gccjit;;block;;end_with_extended_asm_goto (C++ function) -@anchor{cp/topics/asm _CPPv4N6gccjit5block26end_with_extended_asm_gotoERKNSt6stringENSt6vectorI5blockEEP5block8location}@anchor{38b}@anchor{cp/topics/asm _CPPv3N6gccjit5block26end_with_extended_asm_gotoERKNSt6stringENSt6vectorI5blockEEP5block8location}@anchor{391}@anchor{cp/topics/asm _CPPv2N6gccjit5block26end_with_extended_asm_gotoERKNSt6stringENSt6vectorI5blockEEP5block8location}@anchor{392}@anchor{cp/topics/asm gccjit block end_with_extended_asm_goto__ssCR std vector block blockP location}@anchor{393} -@deffn {C++ Function} @ref{386,,extended_asm} gccjit::@ref{184,,block}::end_with_extended_asm_goto (const std::string &asm_template, std::vector<block> goto_blocks, block *fallthrough_block, location loc = location()) +@anchor{cp/topics/asm _CPPv4N6gccjit5block26end_with_extended_asm_gotoERKNSt6stringENSt6vectorI5blockEEP5block8location}@anchor{38e}@anchor{cp/topics/asm _CPPv3N6gccjit5block26end_with_extended_asm_gotoERKNSt6stringENSt6vectorI5blockEEP5block8location}@anchor{394}@anchor{cp/topics/asm _CPPv2N6gccjit5block26end_with_extended_asm_gotoERKNSt6stringENSt6vectorI5blockEEP5block8location}@anchor{395}@anchor{cp/topics/asm gccjit block end_with_extended_asm_goto__ssCR std vector block blockP location}@anchor{396} +@deffn {C++ Function} @ref{389,,extended_asm} gccjit::@ref{187,,block}::end_with_extended_asm_goto (const std::string &asm_template, std::vector<block> goto_blocks, block *fallthrough_block, location loc = location()) -Create a @ref{386,,gccjit;;extended_asm} for an extended @code{asm} statement +Create a @ref{389,,gccjit;;extended_asm} for an extended @code{asm} statement that may perform jumps, and use it to terminate the given block. This is equivalent to the @code{goto} qualifier in C’s extended @code{asm} syntax. @@ -15259,7 +15295,7 @@ to fall through to after the statement. @cartouche @quotation Note -This is needed since each @ref{184,,gccjit;;block} must have a +This is needed since each @ref{187,,gccjit;;block} must have a single exit point, as a basic block: you can’t jump from the middle of a block. A “goto” is implicitly added after the asm to handle the fallthrough case, which is equivalent to what @@ -15269,10 +15305,10 @@ would have happened in the C case. @end deffn @geindex gccjit;;extended_asm;;set_volatile_flag (C++ function) -@anchor{cp/topics/asm _CPPv4N6gccjit12extended_asm17set_volatile_flagEb}@anchor{394}@anchor{cp/topics/asm _CPPv3N6gccjit12extended_asm17set_volatile_flagEb}@anchor{395}@anchor{cp/topics/asm _CPPv2N6gccjit12extended_asm17set_volatile_flagEb}@anchor{396}@anchor{cp/topics/asm gccjit extended_asm set_volatile_flag__b}@anchor{397} -@deffn {C++ Function} gccjit::@ref{386,,extended_asm} &gccjit::@ref{386,,extended_asm}::set_volatile_flag (bool flag) +@anchor{cp/topics/asm _CPPv4N6gccjit12extended_asm17set_volatile_flagEb}@anchor{397}@anchor{cp/topics/asm _CPPv3N6gccjit12extended_asm17set_volatile_flagEb}@anchor{398}@anchor{cp/topics/asm _CPPv2N6gccjit12extended_asm17set_volatile_flagEb}@anchor{399}@anchor{cp/topics/asm gccjit extended_asm set_volatile_flag__b}@anchor{39a} +@deffn {C++ Function} gccjit::@ref{389,,extended_asm} &gccjit::@ref{389,,extended_asm}::set_volatile_flag (bool flag) -Set whether the @ref{386,,gccjit;;extended_asm} has side-effects, equivalent to the +Set whether the @ref{389,,gccjit;;extended_asm} has side-effects, equivalent to the volatile@footnote{https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html#Volatile} qualifier in C’s extended asm syntax. @@ -15300,12 +15336,12 @@ the following API calls could be used: .add_clobber ("rdx"); @end example -where the @ref{386,,gccjit;;extended_asm} is flagged as volatile. +where the @ref{389,,gccjit;;extended_asm} is flagged as volatile. @end deffn @geindex gccjit;;extended_asm;;set_inline_flag (C++ function) -@anchor{cp/topics/asm _CPPv4N6gccjit12extended_asm15set_inline_flagEb}@anchor{398}@anchor{cp/topics/asm _CPPv3N6gccjit12extended_asm15set_inline_flagEb}@anchor{399}@anchor{cp/topics/asm _CPPv2N6gccjit12extended_asm15set_inline_flagEb}@anchor{39a}@anchor{cp/topics/asm gccjit extended_asm set_inline_flag__b}@anchor{39b} -@deffn {C++ Function} gccjit::@ref{386,,extended_asm} &gccjit::@ref{386,,extended_asm}::set_inline_flag (bool flag) +@anchor{cp/topics/asm _CPPv4N6gccjit12extended_asm15set_inline_flagEb}@anchor{39b}@anchor{cp/topics/asm _CPPv3N6gccjit12extended_asm15set_inline_flagEb}@anchor{39c}@anchor{cp/topics/asm _CPPv2N6gccjit12extended_asm15set_inline_flagEb}@anchor{39d}@anchor{cp/topics/asm gccjit extended_asm set_inline_flag__b}@anchor{39e} +@deffn {C++ Function} gccjit::@ref{389,,extended_asm} &gccjit::@ref{389,,extended_asm}::set_inline_flag (bool flag) Set the equivalent of the inline@footnote{https://gcc.gnu.org/onlinedocs/gcc/Size-of-an-asm.html#Size-of-an-asm} @@ -15313,8 +15349,8 @@ qualifier in C’s extended @code{asm} syntax. @end deffn @geindex gccjit;;extended_asm;;add_output_operand (C++ function) -@anchor{cp/topics/asm _CPPv4N6gccjit12extended_asm18add_output_operandERKNSt6stringERKNSt6stringEN6gccjit6lvalueE}@anchor{38c}@anchor{cp/topics/asm _CPPv3N6gccjit12extended_asm18add_output_operandERKNSt6stringERKNSt6stringEN6gccjit6lvalueE}@anchor{39c}@anchor{cp/topics/asm _CPPv2N6gccjit12extended_asm18add_output_operandERKNSt6stringERKNSt6stringEN6gccjit6lvalueE}@anchor{39d}@anchor{cp/topics/asm gccjit extended_asm add_output_operand__ssCR ssCR gccjit lvalue}@anchor{39e} -@deffn {C++ Function} gccjit::@ref{386,,extended_asm} &gccjit::@ref{386,,extended_asm}::add_output_operand (const std::string &asm_symbolic_name, const std::string &constraint, gccjit::lvalue dest) +@anchor{cp/topics/asm _CPPv4N6gccjit12extended_asm18add_output_operandERKNSt6stringERKNSt6stringEN6gccjit6lvalueE}@anchor{38f}@anchor{cp/topics/asm _CPPv3N6gccjit12extended_asm18add_output_operandERKNSt6stringERKNSt6stringEN6gccjit6lvalueE}@anchor{39f}@anchor{cp/topics/asm _CPPv2N6gccjit12extended_asm18add_output_operandERKNSt6stringERKNSt6stringEN6gccjit6lvalueE}@anchor{3a0}@anchor{cp/topics/asm gccjit extended_asm add_output_operand__ssCR ssCR gccjit lvalue}@anchor{3a1} +@deffn {C++ Function} gccjit::@ref{389,,extended_asm} &gccjit::@ref{389,,extended_asm}::add_output_operand (const std::string &asm_symbolic_name, const std::string &constraint, gccjit::lvalue dest) Add an output operand to the extended @code{asm} statement. See the Output Operands@footnote{https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html#OutputOperands} @@ -15344,8 +15380,8 @@ section of GCC’s “Extended Asm” documentation. @end deffn @geindex gccjit;;extended_asm;;add_output_operand (C++ function) -@anchor{cp/topics/asm _CPPv4N6gccjit12extended_asm18add_output_operandERKNSt6stringEN6gccjit6lvalueE}@anchor{39f}@anchor{cp/topics/asm _CPPv3N6gccjit12extended_asm18add_output_operandERKNSt6stringEN6gccjit6lvalueE}@anchor{3a0}@anchor{cp/topics/asm _CPPv2N6gccjit12extended_asm18add_output_operandERKNSt6stringEN6gccjit6lvalueE}@anchor{3a1}@anchor{cp/topics/asm gccjit extended_asm add_output_operand__ssCR gccjit lvalue}@anchor{3a2} -@deffn {C++ Function} gccjit::@ref{386,,extended_asm} &gccjit::@ref{386,,extended_asm}::add_output_operand (const std::string &constraint, gccjit::lvalue dest) +@anchor{cp/topics/asm _CPPv4N6gccjit12extended_asm18add_output_operandERKNSt6stringEN6gccjit6lvalueE}@anchor{3a2}@anchor{cp/topics/asm _CPPv3N6gccjit12extended_asm18add_output_operandERKNSt6stringEN6gccjit6lvalueE}@anchor{3a3}@anchor{cp/topics/asm _CPPv2N6gccjit12extended_asm18add_output_operandERKNSt6stringEN6gccjit6lvalueE}@anchor{3a4}@anchor{cp/topics/asm gccjit extended_asm add_output_operand__ssCR gccjit lvalue}@anchor{3a5} +@deffn {C++ Function} gccjit::@ref{389,,extended_asm} &gccjit::@ref{389,,extended_asm}::add_output_operand (const std::string &constraint, gccjit::lvalue dest) As above, but don’t supply a symbolic name for the operand. @@ -15357,8 +15393,8 @@ ext_asm.add_output_operand ("=r", dst); @end deffn @geindex gccjit;;extended_asm;;add_input_operand (C++ function) -@anchor{cp/topics/asm _CPPv4N6gccjit12extended_asm17add_input_operandERKNSt6stringERKNSt6stringEN6gccjit6rvalueE}@anchor{38d}@anchor{cp/topics/asm _CPPv3N6gccjit12extended_asm17add_input_operandERKNSt6stringERKNSt6stringEN6gccjit6rvalueE}@anchor{3a3}@anchor{cp/topics/asm _CPPv2N6gccjit12extended_asm17add_input_operandERKNSt6stringERKNSt6stringEN6gccjit6rvalueE}@anchor{3a4}@anchor{cp/topics/asm gccjit extended_asm add_input_operand__ssCR ssCR gccjit rvalue}@anchor{3a5} -@deffn {C++ Function} gccjit::@ref{386,,extended_asm} &gccjit::@ref{386,,extended_asm}::add_input_operand (const std::string &asm_symbolic_name, const std::string &constraint, gccjit::rvalue src) +@anchor{cp/topics/asm _CPPv4N6gccjit12extended_asm17add_input_operandERKNSt6stringERKNSt6stringEN6gccjit6rvalueE}@anchor{390}@anchor{cp/topics/asm _CPPv3N6gccjit12extended_asm17add_input_operandERKNSt6stringERKNSt6stringEN6gccjit6rvalueE}@anchor{3a6}@anchor{cp/topics/asm _CPPv2N6gccjit12extended_asm17add_input_operandERKNSt6stringERKNSt6stringEN6gccjit6rvalueE}@anchor{3a7}@anchor{cp/topics/asm gccjit extended_asm add_input_operand__ssCR ssCR gccjit rvalue}@anchor{3a8} +@deffn {C++ Function} gccjit::@ref{389,,extended_asm} &gccjit::@ref{389,,extended_asm}::add_input_operand (const std::string &asm_symbolic_name, const std::string &constraint, gccjit::rvalue src) Add an input operand to the extended @code{asm} statement. See the Input Operands@footnote{https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html#InputOperands} @@ -15382,8 +15418,8 @@ ext_asm.add_input_operand ("aMask", "r", mask); @end deffn @geindex gccjit;;extended_asm;;add_input_operand (C++ function) -@anchor{cp/topics/asm _CPPv4N6gccjit12extended_asm17add_input_operandERKNSt6stringEN6gccjit6rvalueE}@anchor{3a6}@anchor{cp/topics/asm _CPPv3N6gccjit12extended_asm17add_input_operandERKNSt6stringEN6gccjit6rvalueE}@anchor{3a7}@anchor{cp/topics/asm _CPPv2N6gccjit12extended_asm17add_input_operandERKNSt6stringEN6gccjit6rvalueE}@anchor{3a8}@anchor{cp/topics/asm gccjit extended_asm add_input_operand__ssCR gccjit rvalue}@anchor{3a9} -@deffn {C++ Function} gccjit::@ref{386,,extended_asm} &gccjit::@ref{386,,extended_asm}::add_input_operand (const std::string &constraint, gccjit::rvalue src) +@anchor{cp/topics/asm _CPPv4N6gccjit12extended_asm17add_input_operandERKNSt6stringEN6gccjit6rvalueE}@anchor{3a9}@anchor{cp/topics/asm _CPPv3N6gccjit12extended_asm17add_input_operandERKNSt6stringEN6gccjit6rvalueE}@anchor{3aa}@anchor{cp/topics/asm _CPPv2N6gccjit12extended_asm17add_input_operandERKNSt6stringEN6gccjit6rvalueE}@anchor{3ab}@anchor{cp/topics/asm gccjit extended_asm add_input_operand__ssCR gccjit rvalue}@anchor{3ac} +@deffn {C++ Function} gccjit::@ref{389,,extended_asm} &gccjit::@ref{389,,extended_asm}::add_input_operand (const std::string &constraint, gccjit::rvalue src) As above, but don’t supply a symbolic name for the operand. @@ -15395,8 +15431,8 @@ ext_asm.add_input_operand ("r", src); @end deffn @geindex gccjit;;extended_asm;;add_clobber (C++ function) -@anchor{cp/topics/asm _CPPv4N6gccjit12extended_asm11add_clobberERKNSt6stringE}@anchor{3aa}@anchor{cp/topics/asm _CPPv3N6gccjit12extended_asm11add_clobberERKNSt6stringE}@anchor{3ab}@anchor{cp/topics/asm _CPPv2N6gccjit12extended_asm11add_clobberERKNSt6stringE}@anchor{3ac}@anchor{cp/topics/asm gccjit extended_asm add_clobber__ssCR}@anchor{3ad} -@deffn {C++ Function} gccjit::@ref{386,,extended_asm} &gccjit::@ref{386,,extended_asm}::add_clobber (const std::string &victim) +@anchor{cp/topics/asm _CPPv4N6gccjit12extended_asm11add_clobberERKNSt6stringE}@anchor{3ad}@anchor{cp/topics/asm _CPPv3N6gccjit12extended_asm11add_clobberERKNSt6stringE}@anchor{3ae}@anchor{cp/topics/asm _CPPv2N6gccjit12extended_asm11add_clobberERKNSt6stringE}@anchor{3af}@anchor{cp/topics/asm gccjit extended_asm add_clobber__ssCR}@anchor{3b0} +@deffn {C++ Function} gccjit::@ref{389,,extended_asm} &gccjit::@ref{389,,extended_asm}::add_clobber (const std::string &victim) Add @cite{victim} to the list of registers clobbered by the extended @code{asm} statement. See the @@ -15414,7 +15450,7 @@ ext_asm.add_clobber ("r0").add_clobber ("cc").add_clobber ("memory"); @end deffn @node Adding top-level assembler statements<2>,,Adding assembler instructions within a function<2>,Using Assembly Language with libgccjit++ -@anchor{cp/topics/asm adding-top-level-assembler-statements}@anchor{3ae} +@anchor{cp/topics/asm adding-top-level-assembler-statements}@anchor{3b1} @subsubsection Adding top-level assembler statements @@ -15423,8 +15459,8 @@ there is support for creating “top-level” assembler statements, outside of any function. @geindex gccjit;;context;;add_top_level_asm (C++ function) -@anchor{cp/topics/asm _CPPv4N6gccjit7context17add_top_level_asmEPKcN6gccjit8locationE}@anchor{3af}@anchor{cp/topics/asm _CPPv3N6gccjit7context17add_top_level_asmEPKcN6gccjit8locationE}@anchor{3b0}@anchor{cp/topics/asm _CPPv2N6gccjit7context17add_top_level_asmEPKcN6gccjit8locationE}@anchor{3b1}@anchor{cp/topics/asm gccjit context add_top_level_asm__cCP gccjit location}@anchor{3b2} -@deffn {C++ Function} void gccjit::@ref{16e,,context}::add_top_level_asm (const char *asm_stmts, gccjit::location loc = location()) +@anchor{cp/topics/asm _CPPv4N6gccjit7context17add_top_level_asmEPKcN6gccjit8locationE}@anchor{3b2}@anchor{cp/topics/asm _CPPv3N6gccjit7context17add_top_level_asmEPKcN6gccjit8locationE}@anchor{3b3}@anchor{cp/topics/asm _CPPv2N6gccjit7context17add_top_level_asmEPKcN6gccjit8locationE}@anchor{3b4}@anchor{cp/topics/asm gccjit context add_top_level_asm__cCP gccjit location}@anchor{3b5} +@deffn {C++ Function} void gccjit::@ref{171,,context}::add_top_level_asm (const char *asm_stmts, gccjit::location loc = location()) Create a set of top-level asm statements, analogous to those created by GCC’s “basic” @code{asm} syntax in C at file scope. @@ -15475,7 +15511,7 @@ the following API calls could be used: @c <https://www.gnu.org/licenses/>. @node Internals,Indices and tables,C++ bindings for libgccjit,Top -@anchor{internals/index doc}@anchor{3b3}@anchor{internals/index internals}@anchor{3b4} +@anchor{internals/index doc}@anchor{3b6}@anchor{internals/index internals}@anchor{3b7} @chapter Internals @@ -15491,7 +15527,7 @@ the following API calls could be used: @end menu @node Working on the JIT library,Running the test suite,,Internals -@anchor{internals/index working-on-the-jit-library}@anchor{3b5} +@anchor{internals/index working-on-the-jit-library}@anchor{3b8} @section Working on the JIT library @@ -15524,7 +15560,7 @@ gcc/libgccjit.so.0.0.1: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), Here’s what those configuration options mean: @geindex command line option; --enable-host-shared -@anchor{internals/index cmdoption-enable-host-shared}@anchor{3b6} +@anchor{internals/index cmdoption-enable-host-shared}@anchor{3b9} @deffn {Option} @w{-}@w{-}enable@w{-}host@w{-}shared Configuring with this option means that the compiler is built as @@ -15533,7 +15569,7 @@ but it necessary for a shared library. @end deffn @geindex command line option; --enable-languages=jit@comma{}c++ -@anchor{internals/index cmdoption-enable-languages}@anchor{3b7} +@anchor{internals/index cmdoption-enable-languages}@anchor{3ba} @deffn {Option} @w{-}@w{-}enable@w{-}languages=jit,c++ This specifies which frontends to build. The JIT library looks like @@ -15550,7 +15586,7 @@ c++: error trying to exec 'cc1plus': execvp: No such file or directory @end deffn @geindex command line option; --disable-bootstrap -@anchor{internals/index cmdoption-disable-bootstrap}@anchor{3b8} +@anchor{internals/index cmdoption-disable-bootstrap}@anchor{3bb} @deffn {Option} @w{-}@w{-}disable@w{-}bootstrap For hacking on the “jit” subdirectory, performing a full @@ -15560,7 +15596,7 @@ the compiler can still bootstrap itself. @end deffn @geindex command line option; --enable-checking=release -@anchor{internals/index cmdoption-enable-checking}@anchor{3b9} +@anchor{internals/index cmdoption-enable-checking}@anchor{3bc} @deffn {Option} @w{-}@w{-}enable@w{-}checking=release The compile can perform extensive self-checking as it runs, useful when @@ -15571,7 +15607,7 @@ disable this self-checking. @end deffn @node Running the test suite,Environment variables,Working on the JIT library,Internals -@anchor{internals/index running-the-test-suite}@anchor{3ba} +@anchor{internals/index running-the-test-suite}@anchor{3bd} @section Running the test suite @@ -15629,7 +15665,7 @@ and once a test has been compiled, you can debug it directly: @end menu @node Running under valgrind,,,Running the test suite -@anchor{internals/index running-under-valgrind}@anchor{3bb} +@anchor{internals/index running-under-valgrind}@anchor{3be} @subsection Running under valgrind @@ -15678,7 +15714,7 @@ When running under valgrind, it’s best to have configured gcc with various known false positives. @node Environment variables,Packaging notes,Running the test suite,Internals -@anchor{internals/index environment-variables}@anchor{3bc} +@anchor{internals/index environment-variables}@anchor{3bf} @section Environment variables @@ -15686,7 +15722,7 @@ When running client code against a locally-built libgccjit, three environment variables need to be set up: @geindex environment variable; LD_LIBRARY_PATH -@anchor{internals/index envvar-LD_LIBRARY_PATH}@anchor{3bd} +@anchor{internals/index envvar-LD_LIBRARY_PATH}@anchor{3c0} @deffn {Environment Variable} LD_LIBRARY_PATH @quotation @@ -15706,7 +15742,7 @@ libgccjit.so.0.0.1: ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), @end deffn @geindex environment variable; PATH -@anchor{internals/index envvar-PATH}@anchor{3be} +@anchor{internals/index envvar-PATH}@anchor{3c1} @deffn {Environment Variable} PATH The library uses a driver executable for converting from .s assembler @@ -15725,7 +15761,7 @@ of development. @end deffn @geindex environment variable; LIBRARY_PATH -@anchor{internals/index envvar-LIBRARY_PATH}@anchor{3bf} +@anchor{internals/index envvar-LIBRARY_PATH}@anchor{3c2} @deffn {Environment Variable} LIBRARY_PATH The driver executable invokes the linker, and the latter needs to locate @@ -15757,11 +15793,11 @@ hello world @end example @node Packaging notes,Overview of code structure,Environment variables,Internals -@anchor{internals/index packaging-notes}@anchor{3c0} +@anchor{internals/index packaging-notes}@anchor{3c3} @section Packaging notes -The configure-time option @ref{3b6,,--enable-host-shared} is needed when +The configure-time option @ref{3b9,,--enable-host-shared} is needed when building the jit in order to get position-independent code. This will slow down the regular compiler by a few percent. Hence when packaging gcc with libgccjit, please configure and build twice: @@ -15772,10 +15808,10 @@ with libgccjit, please configure and build twice: @itemize * @item -once without @ref{3b6,,--enable-host-shared} for most languages, and +once without @ref{3b9,,--enable-host-shared} for most languages, and @item -once with @ref{3b6,,--enable-host-shared} for the jit +once with @ref{3b9,,--enable-host-shared} for the jit @end itemize @end quotation @@ -15817,7 +15853,7 @@ popd @end example @node Overview of code structure,Design notes,Packaging notes,Internals -@anchor{internals/index overview-of-code-structure}@anchor{3c1} +@anchor{internals/index overview-of-code-structure}@anchor{3c4} @section Overview of code structure @@ -16286,7 +16322,7 @@ JIT: gcc::jit::logger::~logger() @end example @node Design notes,Submitting patches,Overview of code structure,Internals -@anchor{internals/index design-notes}@anchor{3c2} +@anchor{internals/index design-notes}@anchor{3c5} @section Design notes @@ -16299,7 +16335,7 @@ close as possible to the error; failing that, a good place is within @code{recording::context::validate ()} in jit-recording.cc. @node Submitting patches,,Design notes,Internals -@anchor{internals/index submitting-patches}@anchor{3c3} +@anchor{internals/index submitting-patches}@anchor{3c6} @section Submitting patches @@ -16433,7 +16469,7 @@ large and inconsequential (e.g. anchor renumbering), rather like generated committing to svn. @node Indices and tables,Index,Internals,Top -@anchor{index indices-and-tables}@anchor{3c4} +@anchor{index indices-and-tables}@anchor{3c7} @unnumbered Indices and tables diff --git a/gcc/jit/docs/topics/compatibility.rst b/gcc/jit/docs/topics/compatibility.rst index 7f2b2dc..3c948ef 100644 --- a/gcc/jit/docs/topics/compatibility.rst +++ b/gcc/jit/docs/topics/compatibility.rst @@ -352,3 +352,12 @@ value from one type to another: register name of a variable: * :func:`gcc_jit_lvalue_set_register_name` + +.. _LIBGCCJIT_ABI_23: + +``LIBGCCJIT_ABI_23`` +-------------------- +``LIBGCCJIT_ABI_23`` covers the addition of an API entrypoint to hide stderr +logs: + + * :func:`gcc_jit_context_set_bool_print_errors_to_stderr` diff --git a/gcc/jit/docs/topics/contexts.rst b/gcc/jit/docs/topics/contexts.rst index 14ee57e..dfbe968 100644 --- a/gcc/jit/docs/topics/contexts.rst +++ b/gcc/jit/docs/topics/contexts.rst @@ -489,6 +489,21 @@ Boolean options #ifdef LIBGCCJIT_HAVE_gcc_jit_context_set_bool_use_external_driver +.. function:: void \ + gcc_jit_context_set_bool_print_errors_to_stderr (gcc_jit_context *ctxt, \ + int enabled) + + By default, libgccjit will print errors to stderr. + + This entrypoint can be used to disable the printing. + + This entrypoint was added in :ref:`LIBGCCJIT_ABI_23`; you can test for + its presence using + + .. code-block:: c + + #ifdef LIBGCCJIT_HAVE_gcc_jit_context_set_bool_print_errors_to_stderr + Integer options *************** diff --git a/gcc/jit/jit-common.h b/gcc/jit/jit-common.h index 8c52ddf..3ff7447f 100644 --- a/gcc/jit/jit-common.h +++ b/gcc/jit/jit-common.h @@ -198,6 +198,7 @@ enum inner_bool_option { INNER_BOOL_OPTION_ALLOW_UNREACHABLE_BLOCKS, INNER_BOOL_OPTION_USE_EXTERNAL_DRIVER, + INNER_BOOL_OPTION_PRINT_ERRORS_TO_STDERR, NUM_INNER_BOOL_OPTIONS }; diff --git a/gcc/jit/jit-recording.cc b/gcc/jit/jit-recording.cc index dd0bdef..8d13ddf 100644 --- a/gcc/jit/jit-recording.cc +++ b/gcc/jit/jit-recording.cc @@ -592,6 +592,7 @@ recording::context::context (context *parent_ctxt) memset (m_int_options, 0, sizeof (m_int_options)); memset (m_bool_options, 0, sizeof (m_bool_options)); memset (m_inner_bool_options, 0, sizeof (m_inner_bool_options)); + m_inner_bool_options[INNER_BOOL_OPTION_PRINT_ERRORS_TO_STDERR] = true; } memset (m_basic_types, 0, sizeof (m_basic_types)); @@ -1571,15 +1572,20 @@ recording::context::add_error_va (location *loc, const char *fmt, va_list ap) if (!ctxt_progname) ctxt_progname = "libgccjit.so"; - if (loc) - fprintf (stderr, "%s: %s: error: %s\n", - ctxt_progname, - loc->get_debug_string (), - errmsg); - else - fprintf (stderr, "%s: error: %s\n", - ctxt_progname, - errmsg); + bool print_errors_to_stderr = + get_inner_bool_option (INNER_BOOL_OPTION_PRINT_ERRORS_TO_STDERR); + if (print_errors_to_stderr) + { + if (loc) + fprintf (stderr, "%s: %s: error: %s\n", + ctxt_progname, + loc->get_debug_string (), + errmsg); + else + fprintf (stderr, "%s: error: %s\n", + ctxt_progname, + errmsg); + } if (!m_error_count) { @@ -1707,7 +1713,8 @@ static const char * const static const char * const inner_bool_option_reproducer_strings[NUM_INNER_BOOL_OPTIONS] = { "gcc_jit_context_set_bool_allow_unreachable_blocks", - "gcc_jit_context_set_bool_use_external_driver" + "gcc_jit_context_set_bool_use_external_driver", + "gcc_jit_context_set_bool_print_errors_to_stderr", }; /* Write the current value of all options to the log file (if any). */ diff --git a/gcc/jit/libgccjit.cc b/gcc/jit/libgccjit.cc index 522593b..1029ca4 100644 --- a/gcc/jit/libgccjit.cc +++ b/gcc/jit/libgccjit.cc @@ -3501,6 +3501,23 @@ gcc_jit_context_set_bool_allow_unreachable_blocks (gcc_jit_context *ctxt, gcc::jit::recording::context::set_inner_bool_option method in jit-recording.cc. */ +void +gcc_jit_context_set_bool_print_errors_to_stderr (gcc_jit_context *ctxt, + int enabled) +{ + RETURN_IF_FAIL (ctxt, NULL, NULL, "NULL context"); + JIT_LOG_FUNC (ctxt->get_logger ()); + ctxt->set_inner_bool_option ( + gcc::jit::INNER_BOOL_OPTION_PRINT_ERRORS_TO_STDERR, + enabled); +} + +/* Public entrypoint. See description in libgccjit.h. + + After error-checking, the real work is done by the + gcc::jit::recording::context::set_inner_bool_option method in + jit-recording.cc. */ + extern void gcc_jit_context_set_bool_use_external_driver (gcc_jit_context *ctxt, int bool_value) diff --git a/gcc/jit/libgccjit.h b/gcc/jit/libgccjit.h index d3fc935..6c663b1 100644 --- a/gcc/jit/libgccjit.h +++ b/gcc/jit/libgccjit.h @@ -293,6 +293,24 @@ gcc_jit_context_set_bool_allow_unreachable_blocks (gcc_jit_context *ctxt, tested for with #ifdef. */ #define LIBGCCJIT_HAVE_gcc_jit_context_set_bool_allow_unreachable_blocks +/* By default, libgccjit will print errors to stderr. + + This option can be used to disable the printing. + + This entrypoint was added in LIBGCCJIT_ABI_23; you can test for + its presence using + #ifdef LIBGCCJIT_HAVE_gcc_jit_context_set_bool_print_errors_to_stderr +*/ + +extern void +gcc_jit_context_set_bool_print_errors_to_stderr (gcc_jit_context *ctxt, + int enabled); + +/* Pre-canned feature macro to indicate the presence of + gcc_jit_context_set_bool_print_errors_to_stderr. This can be + tested for with #ifdef. */ +#define LIBGCCJIT_HAVE_gcc_jit_context_set_bool_print_errors_to_stderr + /* Implementation detail: libgccjit internally generates assembler, and uses "driver" code for converting it to other formats (e.g. shared libraries). diff --git a/gcc/jit/libgccjit.map b/gcc/jit/libgccjit.map index 4b3de8b..7370603 100644 --- a/gcc/jit/libgccjit.map +++ b/gcc/jit/libgccjit.map @@ -260,3 +260,8 @@ LIBGCCJIT_ABI_22 { global: gcc_jit_lvalue_set_register_name; } LIBGCCJIT_ABI_21; + +LIBGCCJIT_ABI_23 { + global: + gcc_jit_context_set_bool_print_errors_to_stderr; +} LIBGCCJIT_ABI_22; |