"%s_get_type (void)\n"
"{\n"
"\tstatic GType type = 0;\n\n"
- "\tif (type == 0) {\n"
+ "\tif ___GOB_UNLIKELY(type == 0) {\n"
"\t\tstatic const GTypeInfo info = {\n"
"\t\t\tsizeof (%sClass),\n"
"\t\t\t(GBaseInitFunc) NULL,\n"
"%s_get_type (void)\n" /* 1 */
"{\n"
"\tstatic GType type = 0;\n\n"
- "\tif (type == 0) {\n"
+ "\tif ___GOB_UNLIKELY(type == 0) {\n"
"\t\tstatic const GTypeInfo info = {\n"
"\t\t\tsizeof (%sClass),\n" /* 2 */
"\t\t\t(GBaseInitFunc) NULL,\n"
! is_none) {
GList *gl, *al;
const char *sep = "";
- out_printf(out, "\tif(");
+ out_printf(out, "\tif ___GOB_UNLIKELY(");
if(strcmp(m->gtktypes->data, "NONE") != 0) {
out_printf(out, "%s sizeof(", sep);
print_type(out, m->mtype, FALSE);
" */\n");
if ( ! overrode_get_type) {
- out_printf (outh, "GType\t%s_get_type\t(void);", funcbase);
+ out_printf (outh, "GType\t%s_get_type\t(void);\n", funcbase);
}
for(li = c->nodes; li != NULL; li = li->next) {
out_printf (out, "#define selfp (self->_priv)\n\n");
}
+static void
+print_more_useful_macros (void)
+{
+ if (no_gnu) {
+ out_printf (out, "#define ___GOB_LIKELY(expr) (expr)\n");
+ out_printf (out, "#define ___GOB_UNLIKELY(expr) (expr)\n");
+ } else {
+ out_printf (out, "#ifdef G_LIKELY\n");
+ out_printf (out, "#define ___GOB_LIKELY(expr) G_LIKELY(expr)\n");
+ out_printf (out, "#define ___GOB_UNLIKELY(expr) G_UNLIKELY(expr)\n");
+ out_printf (out, "#else /* ! G_LIKELY */\n");
+ out_printf (out, "#define ___GOB_LIKELY(expr) (expr)\n");
+ out_printf (out, "#define ___GOB_UNLIKELY(expr) (expr)\n");
+ out_printf (out, "#endif /* G_LIKELY */\n");
+ }
+}
+
static void
print_file_comments(void)
{
"GType\n%s_get_type (void)\n"
"{\n"
"\tstatic GType type = 0;\n"
- "\tif (type == 0)\n"
+ "\tif ___GOB_UNLIKELY(type == 0)\n"
"\t\ttype = g_enum_register_static (\"%s\", _%s_values);\n"
"\treturn type;\n"
"}\n\n",
"GType\n%s_get_type (void)\n"
"{\n"
"\tstatic GType type = 0;\n"
- "\tif (type == 0)\n"
+ "\tif ___GOB_UNLIKELY(type == 0)\n"
"\t\ttype = g_flags_register_static (\"%s\", _%s_values);\n"
"\treturn type;\n"
"}\n\n",
"GType\n%s_get_type (void)\n"
"{\n"
"\tstatic GType type = 0;\n"
- "\tif (type == 0)\n"
+ "\tif ___GOB_UNLIKELY(type == 0)\n"
"\t\ttype = g_enum_register_static (\"%s\", _%s_values);\n"
"\treturn type;\n"
"}\n\n",
print_includes();
+ print_more_useful_macros ();
+
for (li = nodes; li != NULL; li = li->next) {
Node *node = li->data;
if (node->type == CCODE_NODE) {