[gomp] implement a handfull of easy directives

classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|

[gomp] implement a handfull of easy directives

Richard Henderson-2
Adds "built-in" decls for the functions used from the libgomp library.
They're not realy built in of course, but it's easy to re-use the same
bits for building decls.

Then it uses some of those to implement master, critical, ordered,
barrier, atomic, and flush.

Diego, did you say you were doing compile-only test cases in gcc.dg?
I should write a bunch for this...


r~


        * c-omp.c: New file.
        * Makefile.in (c-omp.o): New.
        * builtin-types.def (BT_PTR_LONG, BT_PTR_PTR, BT_FN_BOOL, BT_FN_INT,
        BT_FN_VOID_PTRPTR, BT_PTR_FN_VOID_PTR, BT_FN_VOID_UINT_UINT,
        BT_FN_BOOL_LONGPTR_LONGPTR, BT_FN_VOID_OMPFN_PTR_UINT,
        BT_FN_VOID_OMPFN_PTR_UINT_UINT,
        BT_FN_BOOL_LONG_LONG_LONG_LONGPTR_LONGPTR,
        BT_FN_BOOL_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR,
        BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG,
        BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_LONG): New.
        * builtins.def (DEF_GOMP_BUILTIN): New.
        (BUILT_IN_OMP_GET_THREAD_NUM, BUILT_IN_GOMP_BARRIER,
        BUILT_IN_GOMP_CRITICAL_START, BUILT_IN_GOMP_CRITICAL_END,
        BUILT_IN_GOMP_CRITICAL_NAME_START, BUILT_IN_GOMP_CRITICAL_NAME_END,
        BUILT_IN_GOMP_LOOP_STATIC_START, BUILT_IN_GOMP_LOOP_DYNAMIC_START,
        BUILT_IN_GOMP_LOOP_GUIDED_START, BUILT_IN_GOMP_LOOP_RUNTIME_START,
        BUILT_IN_GOMP_LOOP_ORDERED_STATIC_START,
        BUILT_IN_GOMP_LOOP_ORDERED_DYNAMIC_START,
        BUILT_IN_GOMP_LOOP_ORDERED_GUIDED_START,
        BUILT_IN_GOMP_LOOP_ORDERED_RUNTIME_START,
        BUILT_IN_GOMP_LOOP_STATIC_NEXT, BUILT_IN_GOMP_LOOP_DYNAMIC_NEXT,
        BUILT_IN_GOMP_LOOP_GUIDED_NEXT, BUILT_IN_GOMP_LOOP_RUNTIME_NEXT,
        BUILT_IN_GOMP_LOOP_ORDERED_STATIC_NEXT,
        BUILT_IN_GOMP_LOOP_ORDERED_DYNAMIC_NEXT,
        BUILT_IN_GOMP_LOOP_ORDERED_GUIDED_NEXT,
        BUILT_IN_GOMP_LOOP_ORDERED_RUNTIME_NEXT,
        BUILT_IN_GOMP_PARALLEL_LOOP_STATIC_START,
        BUILT_IN_GOMP_PARALLEL_LOOP_DYNAMIC_START,
        BUILT_IN_GOMP_PARALLEL_LOOP_GUIDED_START,
        BUILT_IN_GOMP_PARALLEL_LOOP_RUNTIME_START,
        BUILT_IN_GOMP_LOOP_END, BUILT_IN_GOMP_LOOP_END_NOWAIT,
        BUILT_IN_GOMP_ORDERED_START, BUILT_IN_GOMP_ORDERED_END,
        BUILT_IN_GOMP_PARALLEL_START, BUILT_IN_GOMP_PARALLEL_END,
        BUILT_IN_GOMP_SECTIONS_START, BUILT_IN_GOMP_SECTIONS_NEXT,
        BUILT_IN_GOMP_PARALLEL_SECTIONS_START, BUILT_IN_GOMP_SECTIONS_END,
        BUILT_IN_GOMP_SECTIONS_END_NOWAIT, BUILT_IN_GOMP_SINGLE_START,
        BUILT_IN_GOMP_SINGLE_COPY_START, BUILT_IN_GOMP_SINGLE_COPY_END): New.
        * c-common.c (DEF_FUNCTION_TYPE_7): New.
        * c-tree.h (pushdecl_top_level): Move declaration ...
        * c-common.h (pushdecl_top_level): ... here.
        (c_finish_omp_master, c_finish_omp_critical, c_finish_omp_ordered,
        c_finish_omp_barrier, c_finish_omp_atomic, c_finish_omp_flush): Declare.
        * c-parser.c (c_parser_compound_statement_nostart): Don't special
        case omp barrier or omp flush.
        (c_parser_omp_directive): Implement master, critical, orered,
        barrier, atomic, flush.
        (c_parser_pragma_omp_no_args): New.
        (c_parser_pragma_omp_critical): Remove printf debugging.
        (c_parser_pragma_omp_flush): Likewise.
        (c_parser_pragma_omp_atomic, c_parser_pragma_omp_barrier,
        c_parser_pragma_omp_master, c_parser_pragma_omp_ordered): Remove.

Index: Makefile.in
===================================================================
RCS file: /cvs/gcc/gcc/gcc/Makefile.in,v
retrieving revision 1.1501.4.6
diff -u -p -r1.1501.4.6 Makefile.in
--- Makefile.in 20 Sep 2005 21:19:17 -0000 1.1501.4.6
+++ Makefile.in 21 Sep 2005 23:36:06 -0000
@@ -923,7 +923,7 @@ C_AND_OBJC_OBJS = attribs.o c-errors.o c
   c-convert.o c-aux-info.o c-common.o c-opts.o c-format.o c-semantics.o \
   c-incpath.o cppdefault.o c-ppoutput.o c-cppbuiltin.o prefix.o \
   c-objc-common.o c-dump.o c-pch.o c-parser.o $(C_TARGET_OBJS) \
-  c-gimplify.o tree-mudflap.o c-pretty-print.o
+  c-gimplify.o tree-mudflap.o c-pretty-print.o c-omp.o
 
 # Language-specific object files for C.
 C_OBJS = c-lang.o stub-objc.o $(C_AND_OBJC_OBJS)
@@ -1578,6 +1578,9 @@ c-pch.o : c-pch.c $(CONFIG_H) $(SYSTEM_H
   -DHOST_MACHINE=\"$(host)\" -DTARGET_MACHINE=\"$(target)\" \
   $< $(OUTPUT_OPTION)
 
+c-omp.o : c-omp.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
+ $(FUNCTION_H) $(C_COMMON_H) toplev.h $(TREE_GIMPLE_H)
+
 # Language-independent files.
 
 DRIVER_DEFINES = \
Index: builtin-types.def
===================================================================
RCS file: /cvs/gcc/gcc/gcc/builtin-types.def,v
retrieving revision 1.31.4.1
diff -u -p -r1.31.4.1 builtin-types.def
--- builtin-types.def 6 Jul 2005 17:37:24 -0000 1.31.4.1
+++ builtin-types.def 21 Sep 2005 23:36:06 -0000
@@ -107,10 +107,14 @@ DEF_PRIMITIVE_TYPE (BT_I4, builtin_type_
 DEF_PRIMITIVE_TYPE (BT_I8, builtin_type_for_size (BITS_PER_UNIT*8, 1))
 
 DEF_POINTER_TYPE (BT_PTR_CONST_STRING, BT_CONST_STRING)
+DEF_POINTER_TYPE (BT_PTR_LONG, BT_LONG)
+DEF_POINTER_TYPE (BT_PTR_PTR, BT_PTR)
 
 DEF_FUNCTION_TYPE_0 (BT_FN_VOID, BT_VOID)
+DEF_FUNCTION_TYPE_0 (BT_FN_BOOL, BT_BOOL)
 DEF_FUNCTION_TYPE_0 (BT_FN_PTR, BT_PTR)
 DEF_FUNCTION_TYPE_0 (BT_FN_PID, BT_PID)
+DEF_FUNCTION_TYPE_0 (BT_FN_INT, BT_INT)
 DEF_FUNCTION_TYPE_0 (BT_FN_UINT, BT_UINT)
 DEF_FUNCTION_TYPE_0 (BT_FN_FLOAT, BT_FLOAT)
 DEF_FUNCTION_TYPE_0 (BT_FN_DOUBLE, BT_DOUBLE)
@@ -173,6 +177,9 @@ DEF_FUNCTION_TYPE_1 (BT_FN_WORD_PTR, BT_
 DEF_FUNCTION_TYPE_1 (BT_FN_INT_WINT, BT_INT, BT_WINT)
 DEF_FUNCTION_TYPE_1 (BT_FN_WINT_WINT, BT_WINT, BT_WINT)
 DEF_FUNCTION_TYPE_1 (BT_FN_VOID_VPTR, BT_VOID, BT_VOLATILE_PTR)
+DEF_FUNCTION_TYPE_1 (BT_FN_VOID_PTRPTR, BT_VOID, BT_PTR_PTR)
+
+DEF_POINTER_TYPE (BT_PTR_FN_VOID_PTR, BT_FN_VOID_PTR)
 
 DEF_FUNCTION_TYPE_2 (BT_FN_VOID_PTR_INT, BT_VOID, BT_PTR, BT_INT)
 DEF_FUNCTION_TYPE_2 (BT_FN_STRING_STRING_CONST_STRING,
@@ -259,6 +266,9 @@ DEF_FUNCTION_TYPE_2 (BT_FN_I1_VPTR_I1, B
 DEF_FUNCTION_TYPE_2 (BT_FN_I2_VPTR_I2, BT_I2, BT_VOLATILE_PTR, BT_I2)
 DEF_FUNCTION_TYPE_2 (BT_FN_I4_VPTR_I4, BT_I4, BT_VOLATILE_PTR, BT_I4)
 DEF_FUNCTION_TYPE_2 (BT_FN_I8_VPTR_I8, BT_I8, BT_VOLATILE_PTR, BT_I8)
+DEF_FUNCTION_TYPE_2 (BT_FN_VOID_UINT_UINT, BT_VOID, BT_UINT, BT_UINT)
+DEF_FUNCTION_TYPE_2 (BT_FN_BOOL_LONGPTR_LONGPTR,
+     BT_BOOL, BT_PTR_LONG, BT_PTR_LONG)
 
 DEF_FUNCTION_TYPE_3 (BT_FN_STRING_STRING_CONST_STRING_SIZE,
      BT_STRING, BT_STRING, BT_CONST_STRING, BT_SIZE)
@@ -317,6 +327,8 @@ DEF_FUNCTION_TYPE_3 (BT_FN_I1_VPTR_I1_I1
 DEF_FUNCTION_TYPE_3 (BT_FN_I2_VPTR_I2_I2, BT_I2, BT_VOLATILE_PTR, BT_I2, BT_I2)
 DEF_FUNCTION_TYPE_3 (BT_FN_I4_VPTR_I4_I4, BT_I4, BT_VOLATILE_PTR, BT_I4, BT_I4)
 DEF_FUNCTION_TYPE_3 (BT_FN_I8_VPTR_I8_I8, BT_I8, BT_VOLATILE_PTR, BT_I8, BT_I8)
+DEF_FUNCTION_TYPE_3 (BT_FN_VOID_OMPFN_PTR_UINT, BT_VOID, BT_PTR_FN_VOID_PTR,
+     BT_PTR, BT_UINT)
 
 DEF_FUNCTION_TYPE_4 (BT_FN_SIZE_CONST_PTR_SIZE_SIZE_FILEPTR,
      BT_SIZE, BT_CONST_PTR, BT_SIZE, BT_SIZE, BT_FILEPTR)
@@ -332,14 +344,29 @@ DEF_FUNCTION_TYPE_4 (BT_FN_STRING_STRING
      BT_STRING, BT_STRING, BT_CONST_STRING, BT_SIZE, BT_SIZE)
 DEF_FUNCTION_TYPE_4 (BT_FN_INT_FILEPTR_INT_CONST_STRING_VALIST_ARG,
      BT_INT, BT_FILEPTR, BT_INT, BT_CONST_STRING, BT_VALIST_ARG)
+DEF_FUNCTION_TYPE_4 (BT_FN_VOID_OMPFN_PTR_UINT_UINT,
+     BT_VOID, BT_PTR_FN_VOID_PTR, BT_PTR, BT_UINT, BT_UINT)
 
 DEF_FUNCTION_TYPE_5 (BT_FN_INT_STRING_INT_SIZE_CONST_STRING_VALIST_ARG,
      BT_INT, BT_STRING, BT_INT, BT_SIZE, BT_CONST_STRING,
      BT_VALIST_ARG)
+DEF_FUNCTION_TYPE_5 (BT_FN_BOOL_LONG_LONG_LONG_LONGPTR_LONGPTR,
+     BT_BOOL, BT_LONG, BT_LONG, BT_LONG,
+     BT_PTR_LONG, BT_PTR_LONG)
 
 DEF_FUNCTION_TYPE_6 (BT_FN_INT_STRING_SIZE_INT_SIZE_CONST_STRING_VALIST_ARG,
      BT_INT, BT_STRING, BT_SIZE, BT_INT, BT_SIZE,
      BT_CONST_STRING, BT_VALIST_ARG)
+DEF_FUNCTION_TYPE_6 (BT_FN_BOOL_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR,
+     BT_BOOL, BT_LONG, BT_LONG, BT_LONG, BT_LONG,
+     BT_PTR_LONG, BT_PTR_LONG)
+DEF_FUNCTION_TYPE_6 (BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG,
+     BT_VOID, BT_PTR_FN_VOID_PTR, BT_PTR, BT_UINT,
+     BT_LONG, BT_LONG, BT_LONG)
+
+DEF_FUNCTION_TYPE_7 (BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_LONG,
+     BT_VOID, BT_PTR_FN_VOID_PTR, BT_PTR, BT_UINT,
+     BT_LONG, BT_LONG, BT_LONG, BT_LONG)
 
 DEF_FUNCTION_TYPE_VAR_0 (BT_FN_VOID_VAR, BT_VOID)
 DEF_FUNCTION_TYPE_VAR_0 (BT_FN_INT_VAR, BT_INT)
@@ -378,3 +405,4 @@ DEF_FUNCTION_TYPE_VAR_5 (BT_FN_INT_STRIN
 DEF_POINTER_TYPE (BT_PTR_FN_VOID_VAR, BT_FN_VOID_VAR)
 DEF_FUNCTION_TYPE_3 (BT_FN_PTR_PTR_FN_VOID_VAR_PTR_SIZE,
      BT_PTR, BT_PTR_FN_VOID_VAR, BT_PTR, BT_SIZE)
+
Index: builtins.def
===================================================================
RCS file: /cvs/gcc/gcc/gcc/builtins.def,v
retrieving revision 1.103.4.2
diff -u -p -r1.103.4.2 builtins.def
--- builtins.def 28 Jul 2005 19:28:15 -0000 1.103.4.2
+++ builtins.def 21 Sep 2005 23:36:07 -0000
@@ -133,6 +133,13 @@ Software Foundation, 51 Franklin Street,
   DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, 0, 0, false, false, \
        false, 0, false, false)
 
+/* Builtin used by the implementation of GNU OpenMP.  None of these are
+   actually implemented in the compiler; they're all in libgomp.  */
+#undef DEF_GOMP_BUILTIN
+#define DEF_GOMP_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
+  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,    \
+               false, true, true, ATTRS, false, flag_openmp)
+
 /* Define an attribute list for math functions that are normally
    "impure" because some of them may write into global memory for
    `errno'.  If !flag_errno_math they are instead "const".  */
@@ -884,3 +891,117 @@ DEF_SYNC_BUILTIN (BUILT_IN_LOCK_RELEASE_
 
 DEF_SYNC_BUILTIN (BUILT_IN_SYNCHRONIZE, "__sync_synchronize",
   BT_FN_VOID, ATTR_NOTHROW_LIST)
+
+DEF_GOMP_BUILTIN (BUILT_IN_OMP_GET_THREAD_NUM, "omp_get_thread_num",
+     BT_FN_INT, ATTR_CONST_NOTHROW_LIST)
+
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_BARRIER, "GOMP_barrier",
+  BT_FN_VOID, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_CRITICAL_START, "GOMP_critical_start",
+  BT_FN_VOID, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_CRITICAL_END, "GOMP_critical_end",
+  BT_FN_VOID, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_CRITICAL_NAME_START,
+  "GOMP_critical_name_start",
+  BT_FN_VOID_PTRPTR, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_CRITICAL_NAME_END,
+  "GOMP_critical_name_end",
+  BT_FN_VOID_PTRPTR, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_STATIC_START,
+  "GOMP_loop_static_start",
+  BT_FN_BOOL_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR,
+  ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_DYNAMIC_START,
+  "GOMP_loop_dynamic_start",
+  BT_FN_BOOL_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR,
+  ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_GUIDED_START,
+  "GOMP_loop_guided_start",
+  BT_FN_BOOL_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR,
+  ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_RUNTIME_START,
+  "GOMP_loop_runtime_start",
+  BT_FN_BOOL_LONG_LONG_LONG_LONGPTR_LONGPTR,
+  ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ORDERED_STATIC_START,
+  "GOMP_loop_ordered_static_start",
+  BT_FN_BOOL_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR,
+  ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ORDERED_DYNAMIC_START,
+  "GOMP_loop_ordered_dynamic_start",
+  BT_FN_BOOL_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR,
+  ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ORDERED_GUIDED_START,
+  "GOMP_loop_ordered_guided_start",
+  BT_FN_BOOL_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR,
+  ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ORDERED_RUNTIME_START,
+  "GOMP_loop_ordered_runtime_start",
+  BT_FN_BOOL_LONG_LONG_LONG_LONGPTR_LONGPTR,
+  ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_STATIC_NEXT, "GOMP_loop_static_next",
+  BT_FN_BOOL_LONGPTR_LONGPTR, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_DYNAMIC_NEXT, "GOMP_loop_dynamic_next",
+  BT_FN_BOOL_LONGPTR_LONGPTR, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_GUIDED_NEXT, "GOMP_loop_guided_next",
+  BT_FN_BOOL_LONGPTR_LONGPTR, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_RUNTIME_NEXT, "GOMP_loop_runtime_next",
+  BT_FN_BOOL_LONGPTR_LONGPTR, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ORDERED_STATIC_NEXT,
+  "GOMP_loop_ordered_static_next",
+  BT_FN_BOOL_LONGPTR_LONGPTR, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ORDERED_DYNAMIC_NEXT,
+  "GOMP_loop_ordered_dynamic_next",
+  BT_FN_BOOL_LONGPTR_LONGPTR, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ORDERED_GUIDED_NEXT,
+  "GOMP_loop_ordered_guided_next",
+  BT_FN_BOOL_LONGPTR_LONGPTR, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ORDERED_RUNTIME_NEXT,
+  "GOMP_loop_ordered_runtime_next",
+  BT_FN_BOOL_LONGPTR_LONGPTR, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_LOOP_STATIC_START,
+  "GOMP_parallel_loop_static_start",
+  BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_LONG,
+  ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_LOOP_DYNAMIC_START,
+  "GOMP_parallel_loop_dynamic_start",
+  BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_LONG,
+  ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_LOOP_GUIDED_START,
+  "GOMP_parallel_loop_guided_start",
+  BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_LONG,
+  ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_LOOP_RUNTIME_START,
+  "GOMP_parallel_loop_runtime_start",
+  BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG,
+  ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_END, "GOMP_loop_end",
+  BT_FN_VOID, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_END_NOWAIT, "GOMP_loop_end_nowait",
+  BT_FN_VOID, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_ORDERED_START, "GOMP_ordered_start",
+  BT_FN_VOID, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_ORDERED_END, "GOMP_ordered_end",
+  BT_FN_VOID, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_START, "GOMP_parallel_start",
+  BT_FN_VOID_OMPFN_PTR_UINT, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_END, "GOMP_parallel_end",
+  BT_FN_VOID, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SECTIONS_START, "GOMP_sections_start",
+  BT_FN_VOID_UINT_UINT, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SECTIONS_NEXT, "GOMP_sections_next",
+  BT_FN_UINT, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_SECTIONS_START,
+  "GOMP_parallel_sections_start",
+  BT_FN_VOID_OMPFN_PTR_UINT_UINT, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SECTIONS_END, "GOMP_sections_end",
+  BT_FN_VOID, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SECTIONS_END_NOWAIT,
+  "GOMP_sections_end_nowait",
+  BT_FN_VOID, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SINGLE_START, "GOMP_single_start",
+  BT_FN_BOOL, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SINGLE_COPY_START, "GOMP_single_copy_start",
+  BT_FN_PTR, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SINGLE_COPY_END, "GOMP_single_copy_end",
+  BT_FN_VOID_PTR, ATTR_NOTHROW_LIST)
Index: c-common.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/c-common.c,v
retrieving revision 1.634.4.3
diff -u -p -r1.634.4.3 c-common.c
--- c-common.c 2 Sep 2005 03:36:56 -0000 1.634.4.3
+++ c-common.c 21 Sep 2005 23:36:07 -0000
@@ -2920,8 +2920,8 @@ c_common_nodes_and_builtins (void)
 #define DEF_FUNCTION_TYPE_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
 #define DEF_FUNCTION_TYPE_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
 #define DEF_FUNCTION_TYPE_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) NAME,
-#define DEF_FUNCTION_TYPE_6(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6) \
-  NAME,
+#define DEF_FUNCTION_TYPE_6(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6) NAME,
+#define DEF_FUNCTION_TYPE_7(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7) NAME,
 #define DEF_FUNCTION_TYPE_VAR_0(NAME, RETURN) NAME,
 #define DEF_FUNCTION_TYPE_VAR_1(NAME, RETURN, ARG1) NAME,
 #define DEF_FUNCTION_TYPE_VAR_2(NAME, RETURN, ARG1, ARG2) NAME,
@@ -2939,6 +2939,7 @@ c_common_nodes_and_builtins (void)
 #undef DEF_FUNCTION_TYPE_4
 #undef DEF_FUNCTION_TYPE_5
 #undef DEF_FUNCTION_TYPE_6
+#undef DEF_FUNCTION_TYPE_7
 #undef DEF_FUNCTION_TYPE_VAR_0
 #undef DEF_FUNCTION_TYPE_VAR_1
 #undef DEF_FUNCTION_TYPE_VAR_2
@@ -3229,6 +3230,28 @@ c_common_nodes_and_builtins (void)
  tree_cons (NULL_TREE, \
       builtin_types[(int) ARG6],\
       void_list_node)))))));
+#define DEF_FUNCTION_TYPE_7(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
+    ARG6, ARG7) \
+  builtin_types[(int) ENUM] \
+    = build_function_type \
+      (builtin_types[(int) RETURN], \
+       tree_cons (NULL_TREE, \
+  builtin_types[(int) ARG1], \
+  tree_cons (NULL_TREE, \
+     builtin_types[(int) ARG2], \
+     tree_cons \
+     (NULL_TREE, \
+      builtin_types[(int) ARG3], \
+      tree_cons \
+      (NULL_TREE, \
+       builtin_types[(int) ARG4], \
+       tree_cons (NULL_TREE, \
+ builtin_types[(int) ARG5], \
+ tree_cons (NULL_TREE, \
+      builtin_types[(int) ARG6],\
+ tree_cons (NULL_TREE, \
+      builtin_types[(int) ARG6], \
+      void_list_node))))))));
 #define DEF_FUNCTION_TYPE_VAR_0(ENUM, RETURN) \
   builtin_types[(int) ENUM] \
     = build_function_type (builtin_types[(int) RETURN], NULL_TREE);
Index: c-common.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/c-common.h,v
retrieving revision 1.294.4.2
diff -u -p -r1.294.4.2 c-common.h
--- c-common.h 28 Jul 2005 19:28:20 -0000 1.294.4.2
+++ c-common.h 21 Sep 2005 23:36:07 -0000
@@ -295,6 +295,7 @@ extern tree push_stmt_list (void);
 extern tree pop_stmt_list (tree);
 extern tree add_stmt (tree);
 extern void push_cleanup (tree, tree, bool);
+extern tree pushdecl_top_level (tree);
 
 extern int c_expand_decl (tree);
 
@@ -927,6 +928,14 @@ extern void pp_file_change (const struct
 extern void pp_dir_change (cpp_reader *, const char *);
 extern bool check_missing_format_attribute (tree, tree);
 
+/* In c-omp.c  */
+extern void c_finish_omp_master (tree);
+extern void c_finish_omp_critical (tree, tree);
+extern void c_finish_omp_ordered (tree);
+extern void c_finish_omp_barrier (void);
+extern void c_finish_omp_atomic (tree);
+extern void c_finish_omp_flush (void);
+
 /* In order for the format checking to accept the C frontend
    diagnostic framework extensions, you must include this file before
    toplev.h, not after.  The C front end formats are a subset of those
Index: c-omp.c
===================================================================
RCS file: c-omp.c
diff -N c-omp.c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ c-omp.c 21 Sep 2005 23:36:07 -0000
@@ -0,0 +1,296 @@
+/* This file contains routines to construct GNU OpenMP constructs,
+   called from parsing in the C and C++ front ends.
+
+   Copyright (C) 2005 Free Software Foundation, Inc.
+   Contributed by Richard Henderson <[hidden email]>,
+  Diego Novillo <[hidden email]>.
+  
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING.  If not, write to the Free
+Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301, USA.  */
+
+#include "config.h"
+#include "system.h"
+#include "coretypes.h"
+#include "tm.h"
+#include "tree.h"
+#include "function.h"
+#include "c-common.h"
+#include "toplev.h"
+#include "tree-gimple.h"
+
+
+/* Complete a #pragma omp master construct.  STMT is the structured-block
+   that follows the pragma.  In this case all we need to do is wrap the
+   block in a conditional that verifies that this is the master thread for
+   the parallel team.  */
+
+void
+c_finish_omp_master (tree stmt)
+{
+  tree x;
+
+  x = built_in_decls[BUILT_IN_OMP_GET_THREAD_NUM];
+  x = build_function_call_expr (x, NULL);
+  x = build2 (EQ_EXPR, boolean_type_node, x, integer_zero_node);
+  x = build3 (COND_EXPR, void_type_node, x, stmt, NULL);
+  add_stmt (x);
+}
+
+
+/* Complete a #pragma omp critical construct.  STMT is the structured-block
+   that follows the pragma, NAME is the identifier in the pragma, or null
+   if it was omitted.  */
+
+void
+c_finish_omp_critical (tree stmt, tree name)
+{
+  tree lock, unlock;
+
+  if (name)
+    {
+      char *new_str;
+      tree decl, args;
+
+      new_str = ACONCAT ((".gomp_critical_user_",
+  IDENTIFIER_POINTER (name), NULL));
+      name = get_identifier (new_str);
+      decl = identifier_global_value (name);
+      if (decl == NULL)
+ {
+  decl = build_decl (VAR_DECL, name, ptr_type_node);
+  TREE_PUBLIC (decl) = 1;
+  TREE_STATIC (decl) = 1;
+  DECL_COMMON (decl) = 1;
+  DECL_ARTIFICIAL (decl) = 1;
+  DECL_IGNORED_P (decl) = 1;
+  decl = pushdecl_top_level (decl);
+ }
+
+      args = tree_cons (NULL, build_fold_addr_expr (decl), NULL);
+      lock = built_in_decls[BUILT_IN_GOMP_CRITICAL_NAME_START];
+      lock = build_function_call_expr (lock, args);
+
+      args = tree_cons (NULL, build_fold_addr_expr (decl), NULL);
+      unlock = built_in_decls[BUILT_IN_GOMP_CRITICAL_NAME_END];
+      unlock = build_function_call_expr (unlock, args);
+    }
+  else
+    {
+      lock = built_in_decls[BUILT_IN_GOMP_CRITICAL_START];
+      lock = build_function_call_expr (lock, NULL);
+
+      unlock = built_in_decls[BUILT_IN_GOMP_CRITICAL_END];
+      unlock = build_function_call_expr (unlock, NULL);
+    }
+
+  add_stmt (lock);
+  add_stmt (stmt);
+  add_stmt (unlock);
+}
+
+
+/* Complete a #pragma omp ordered construct.  STMT is the structured-block
+   that follows the pragma.  */
+
+void
+c_finish_omp_ordered (tree stmt)
+{
+  tree x;
+
+  x = built_in_decls[BUILT_IN_GOMP_ORDERED_START];
+  x = build_function_call_expr (x, NULL);
+  add_stmt (x);
+
+  add_stmt (stmt);
+
+  x = built_in_decls[BUILT_IN_GOMP_ORDERED_END];
+  x = build_function_call_expr (x, NULL);
+  add_stmt (x);
+}
+
+
+/* Complete a #pragma omp barrier construct.  */
+
+void
+c_finish_omp_barrier (void)
+{
+  tree x;
+
+  x = built_in_decls[BUILT_IN_GOMP_BARRIER];
+  x = build_function_call_expr (x, NULL);
+  add_stmt (x);
+}
+
+
+/* Complete a #pragma omp atomic construct.  The expression to be
+   implemented atomically is LHS code= RHS.  */
+
+void
+c_finish_omp_atomic (tree expr)
+{
+  tree lhs, rhs, decl, x, y;
+  enum tree_code code;
+  tree oldval, newval, rhsval, lhsaddr, type, label;
+
+  switch (TREE_CODE (expr))
+    {
+    case PREINCREMENT_EXPR:
+    case POSTINCREMENT_EXPR:
+      code = PLUS_EXPR;
+      lhs = TREE_OPERAND (expr, 0);
+      rhs = fold_convert (TREE_TYPE (lhs), integer_one_node);
+      break;
+
+    case PREDECREMENT_EXPR:
+    case POSTDECREMENT_EXPR:
+      code = MINUS_EXPR;
+      lhs = TREE_OPERAND (expr, 0);
+      rhs = fold_convert (TREE_TYPE (lhs), integer_one_node);
+      break;
+
+    case MODIFY_EXPR:
+      lhs = TREE_OPERAND (expr, 0);
+      expr = TREE_OPERAND (expr, 1);
+      code = TREE_CODE (expr);
+      switch (code)
+ {
+ case PLUS_EXPR:
+ case MINUS_EXPR:
+ case BIT_AND_EXPR:
+ case BIT_IOR_EXPR:
+ case BIT_XOR_EXPR:
+ case MULT_EXPR:
+ case TRUNC_DIV_EXPR:
+ case RDIV_EXPR:
+ case LSHIFT_EXPR:
+ case RSHIFT_EXPR:
+  x = TREE_OPERAND (expr, 0);
+  y = TREE_OPERAND (expr, 1);
+  break;
+
+ default:
+  goto invalid;
+ }
+
+      if (operand_equal_p (lhs, x, 0))
+ ;
+      else if (commutative_tree_code (code)
+       && operand_equal_p (lhs, rhs, 0))
+ rhs = x;
+      else
+ goto invalid;
+      break;
+
+    default:
+      goto invalid;
+    }
+
+  /* ??? The OpenMP spec appears to allow floating-point types.  */
+  type = TREE_TYPE (lhs);
+  if (!INTEGRAL_TYPE_P (type))
+    goto invalid;
+
+  lhsaddr = build_unary_op (ADDR_EXPR, lhs, 0);
+
+  switch (code)
+    {
+    case PLUS_EXPR:
+      decl = built_in_decls[BUILT_IN_FETCH_AND_ADD_N];
+      goto do_fetch_op;
+    case MINUS_EXPR:
+      decl = built_in_decls[BUILT_IN_FETCH_AND_SUB_N];
+      goto do_fetch_op;
+    case BIT_AND_EXPR:
+      decl = built_in_decls[BUILT_IN_FETCH_AND_AND_N];
+      goto do_fetch_op;
+    case BIT_IOR_EXPR:
+      decl = built_in_decls[BUILT_IN_FETCH_AND_OR_N];
+      goto do_fetch_op;
+    case BIT_XOR_EXPR:
+      decl = built_in_decls[BUILT_IN_FETCH_AND_XOR_N];
+      goto do_fetch_op;
+
+    do_fetch_op:
+      y = tree_cons (NULL, rhs, NULL);
+      y = tree_cons (NULL, lhsaddr, y);
+      x = resolve_overloaded_builtin (decl, y);
+      add_stmt (x);
+      return;
+
+    default:
+      break;
+    }
+
+  /* In these cases, we don't have specialized __sync builtins,
+     so we need to implement a compare and swap loop.  */
+
+  oldval = create_tmp_var_raw (type, NULL);
+  newval = create_tmp_var_raw (type, NULL);
+  rhsval = create_tmp_var_raw (type, NULL);
+  label = create_artificial_label ();
+  lhsaddr = save_expr (lhsaddr);
+
+  x = build_fold_indirect_ref (lhsaddr);
+  x = build2 (MODIFY_EXPR, void_type_node, oldval, x);
+  add_stmt (x);
+
+  if (TREE_CONSTANT (rhs))
+    rhsval = rhs;
+  else
+    {
+      x = build2 (MODIFY_EXPR, void_type_node, rhsval, rhs);
+      add_stmt (x);
+    }
+
+  add_stmt (build_stmt (LABEL_EXPR, label));
+
+  x = build2 (code, type, oldval, rhsval);
+  x = build2 (MODIFY_EXPR, void_type_node, newval, x);
+  add_stmt (x);
+
+  y = tree_cons (NULL, newval, NULL);
+  y = tree_cons (NULL, oldval, y);
+  y = tree_cons (NULL, lhsaddr, y);
+  decl = built_in_decls[BUILT_IN_VAL_COMPARE_AND_SWAP_N];
+  x = resolve_overloaded_builtin (decl, y);
+  x = build2 (MODIFY_EXPR, void_type_node, oldval, x);
+  add_stmt (x);
+
+  x = build2 (NE_EXPR, boolean_type_node, oldval, newval);
+  y = build1 (GOTO_EXPR, void_type_node, label);
+  x = build3 (COND_EXPR, void_type_node, x, y, NULL);
+  add_stmt (x);
+  return;
+
+ invalid:
+  error ("invalid expression for %<omp atomic%>");
+  add_stmt (expr);
+}
+
+
+/* Complete a #pragma omp flush construct.  We don't do anything with the
+   variable list that the syntax allows.  */
+
+void
+c_finish_omp_flush (void)
+{
+  tree x;
+
+  x = built_in_decls[BUILT_IN_SYNCHRONIZE];
+  x = build_function_call_expr (x, NULL);
+  add_stmt (x);
+}
Index: c-parser.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/c-parser.c,v
retrieving revision 2.17.4.7
diff -u -p -r2.17.4.7 c-parser.c
--- c-parser.c 21 Sep 2005 13:12:36 -0000 2.17.4.7
+++ c-parser.c 21 Sep 2005 23:36:07 -0000
@@ -195,20 +195,17 @@ static const struct resword reswords[] =
 #define N_reswords (sizeof reswords / sizeof (struct resword))
 
 /* Handlers for parsing OpenMP pragmas.  */
-static void c_parser_pragma_omp_atomic (cpp_reader *);
-static void c_parser_pragma_omp_barrier (cpp_reader *);
 static void c_parser_pragma_omp_critical (cpp_reader *);
 static void c_parser_pragma_omp_flush (cpp_reader *);
 static void c_parser_pragma_omp_for (cpp_reader *);
-static void c_parser_pragma_omp_master (cpp_reader *);
-static void c_parser_pragma_omp_ordered (cpp_reader *);
 static void c_parser_pragma_omp_parallel (cpp_reader *);
 static void c_parser_pragma_omp_section (cpp_reader *);
 static void c_parser_pragma_omp_sections (cpp_reader *);
 static void c_parser_pragma_omp_single (cpp_reader *);
 static void c_parser_pragma_omp_threadprivate (cpp_reader *);
+static void c_parser_pragma_omp_no_args (cpp_reader *);
 
-/* All OpenMP pragmas.  OpenMP draft 2.5.  */
+/* All OpenMP pragmas.  OpenMP 2.5.  */
 typedef enum pragma_omp_kind {
   PRAGMA_OMP_NONE = 0,
 
@@ -229,7 +226,7 @@ typedef enum pragma_omp_kind {
 } pragma_omp_kind;
 
 
-/* All OpenMP clauses.  OpenMP draft 2.5.  */
+/* All OpenMP clauses.  OpenMP 2.5.  */
 typedef enum pragma_omp_clause {
   PRAGMA_OMP_CLAUSE_NONE = 0,
 
@@ -283,13 +280,13 @@ c_parse_init (void)
       /* we want to handle deferred pragmas */
       cpp_get_options (parse_in)->defer_pragmas = true;
 
-      c_register_pragma ("omp", "atomic", c_parser_pragma_omp_atomic);
-      c_register_pragma ("omp", "barrier", c_parser_pragma_omp_barrier);
+      c_register_pragma ("omp", "atomic", c_parser_pragma_omp_no_args);
+      c_register_pragma ("omp", "barrier", c_parser_pragma_omp_no_args);
       c_register_pragma ("omp", "critical", c_parser_pragma_omp_critical);
       c_register_pragma ("omp", "flush", c_parser_pragma_omp_flush);
       c_register_pragma ("omp", "for", c_parser_pragma_omp_for);
-      c_register_pragma ("omp", "master", c_parser_pragma_omp_master);
-      c_register_pragma ("omp", "ordered", c_parser_pragma_omp_ordered);
+      c_register_pragma ("omp", "master", c_parser_pragma_omp_no_args);
+      c_register_pragma ("omp", "ordered", c_parser_pragma_omp_no_args);
       c_register_pragma ("omp", "parallel", c_parser_pragma_omp_parallel);
       c_register_pragma ("omp", "section", c_parser_pragma_omp_section);
       c_register_pragma ("omp", "sections", c_parser_pragma_omp_sections);
@@ -3573,9 +3570,6 @@ c_parser_compound_statement_nostart (c_p
   else
     goto statement;
  }
-      else if (c_parser_peek_token (parser)->omp_kind == PRAGMA_OMP_BARRIER
-       || c_parser_peek_token (parser)->omp_kind == PRAGMA_OMP_FLUSH)
- c_parser_pragma (parser);
       else
  {
  statement:
@@ -3767,10 +3761,10 @@ c_parser_statement (c_parser *parser)
   c_parser_statement_after_labels (parser);
 }
 
-static void c_parser_omp_directive (c_parser *parser);
-
 /* Parse a statement, other than a labeled statement.  */
 
+static void c_parser_omp_directive (c_parser *parser);
+
 static void
 c_parser_statement_after_labels (c_parser *parser)
 {
@@ -6571,7 +6565,7 @@ c_parser_objc_keywordexpr (c_parser *par
 }
 
 
-/* OpenMP draft 2.5:
+/* OpenMP 2.5:
 
    section-scope:
      { section-sequence }
@@ -6616,7 +6610,7 @@ c_parser_section_scope (c_parser *parser
 static void
 c_parser_omp_directive (c_parser *parser)
 {
-  tree stmt;
+  tree stmt, clause;
   enum pragma_omp_kind code = c_parser_peek_token (parser)->omp_kind;
 
   /* Parse the pragma header.  */
@@ -6630,13 +6624,6 @@ c_parser_omp_directive (c_parser *parser
   stmt));
  break;
 
-      case PRAGMA_OMP_CRITICAL:
-      case PRAGMA_OMP_MASTER:
-      case PRAGMA_OMP_ORDERED:
-      case PRAGMA_OMP_SINGLE:
- c_parser_statement (parser);
- break;
-
       case PRAGMA_OMP_FOR:
       case PRAGMA_OMP_PARALLEL_FOR:
  if (c_parser_next_token_is_keyword (parser, RID_FOR))
@@ -6650,6 +6637,45 @@ c_parser_omp_directive (c_parser *parser
  add_stmt (c_parser_section_scope (parser));
  break;
 
+      case PRAGMA_OMP_SINGLE:
+ c_parser_statement (parser);
+ break;
+
+      case PRAGMA_OMP_MASTER:
+ stmt = push_stmt_list ();
+ c_parser_statement (parser);
+ stmt = pop_stmt_list (stmt);
+ c_finish_omp_master (stmt);
+ break;
+
+      case PRAGMA_OMP_CRITICAL:
+ clause = curr_clause_set;
+ stmt = push_stmt_list ();
+ c_parser_statement (parser);
+ stmt = pop_stmt_list (stmt);
+ c_finish_omp_critical (stmt, clause);
+ break;
+
+      case PRAGMA_OMP_ORDERED:
+ stmt = push_stmt_list ();
+ c_parser_statement (parser);
+ stmt = pop_stmt_list (stmt);
+ c_finish_omp_ordered (stmt);
+ break;
+
+      case PRAGMA_OMP_BARRIER:
+ c_finish_omp_barrier ();
+ break;
+
+      case PRAGMA_OMP_ATOMIC:
+ c_finish_omp_atomic (c_parser_expr_no_commas (parser, NULL).value);
+ c_parser_skip_until_found (parser, CPP_SEMICOLON, "expected %<;%>");
+ break;
+
+      case PRAGMA_OMP_FLUSH:
+ c_finish_omp_flush ();
+ break;
+
       default:
  c_finish_expr_stmt (c_parser_expression (parser).value);
     }
@@ -6738,7 +6764,7 @@ c_parser_pragma_omp_clause (c_parser *pa
   return result;
 }
 
-/* OpenMP draft 2.5:
+/* OpenMP 2.5:
    variable-list:
      identifier
      variable-list , identifier */
@@ -6775,7 +6801,7 @@ c_parser_pragma_omp_variable_list (c_par
 }
 
 
-/* OpenMP draft 2.5:
+/* OpenMP 2.5:
    copyin ( variable-list ) */
 
 static void
@@ -6789,7 +6815,7 @@ c_parser_pragma_omp_clause_copyin (c_par
     }
 }
 
-/* OpenMP draft 2.5:
+/* OpenMP 2.5:
    copyprivate ( variable-list ) */
 
 static void
@@ -6803,7 +6829,7 @@ c_parser_pragma_omp_clause_copyprivate (
     }
 }
 
-/* OpenMP draft 2.5:
+/* OpenMP 2.5:
    default ( shared | none ) */
 
 static void
@@ -6841,7 +6867,7 @@ c_parser_pragma_omp_clause_default (c_pa
   }
 }
 
-/* OpenMP draft 2.5:
+/* OpenMP 2.5:
    firstprivate ( variable-list ) */
 
 static void
@@ -6855,7 +6881,7 @@ c_parser_pragma_omp_clause_firstprivate
     }
 }
 
-/* OpenMP draft 2.5:
+/* OpenMP 2.5:
    if ( expression ) */
 
 static void
@@ -6875,7 +6901,7 @@ c_parser_pragma_omp_clause_if (c_parser
     }
 }
 
-/* OpenMP draft 2.5:
+/* OpenMP 2.5:
    lastprivate ( variable-list ) */
 
 static void
@@ -6889,7 +6915,7 @@ c_parser_pragma_omp_clause_lastprivate (
     }
 }
 
-/* OpenMP draft 2.5:
+/* OpenMP 2.5:
    nowait */
 
 static void
@@ -6898,7 +6924,7 @@ c_parser_pragma_omp_clause_nowait (c_par
   printf ("nowait\n");
 }
 
-/* OpenMP draft 2.5:
+/* OpenMP 2.5:
    num_threads ( expression ) */
 
 static void
@@ -6923,7 +6949,7 @@ c_parser_pragma_omp_clause_num_threads (
   printf ("\n");
 }
 
-/* OpenMP draft 2.5:
+/* OpenMP 2.5:
    ordered */
 
 static void
@@ -6932,7 +6958,7 @@ c_parser_pragma_omp_clause_ordered (c_pa
   printf ("ordered\n");
 }
 
-/* OpenMP draft 2.5:
+/* OpenMP 2.5:
    private ( variable-list ) */
 
 static void
@@ -6946,7 +6972,7 @@ c_parser_pragma_omp_clause_private (c_pa
     }
 }
 
-/* OpenMP draft 2.5:
+/* OpenMP 2.5:
    reduction ( reduction-operator : variable-list )
 
    reduction-operator:
@@ -7001,7 +7027,7 @@ c_parser_pragma_omp_clause_reduction (c_
     }
 }
 
-/* OpenMP draft 2.5:
+/* OpenMP 2.5:
    schedule ( schedule-kind )
    schedule ( schedule-kind , expression )
 
@@ -7076,7 +7102,7 @@ c_parser_pragma_omp_clause_schedule (c_p
     }
 }
 
-/* OpenMP draft 2.5:
+/* OpenMP 2.5:
    shared ( variable-list ) */
 
 static void
@@ -7103,34 +7129,21 @@ static GTY (()) c_parser *the_parser;
 
 /* OpenMP pragma handlers. */
 
-/* OpenMP draft 2.5:
-   # pragma omp atomic new-line */
+/* OpenMP 2.5
+   # pragma omp atomic new-line
+   # pragma omp barrier new-line
+   # pragma omp master new-line
+   # pragma omp ordered new-line
+*/
 
 static void
-c_parser_pragma_omp_atomic (cpp_reader *pfile ATTRIBUTE_UNUSED)
+c_parser_pragma_omp_no_args (cpp_reader *pfile ATTRIBUTE_UNUSED)
 {
-  printf ("#pragma omp atomic");
-
   if (c_parser_next_token_is_not (the_parser, CPP_EOF))
     c_parser_error (the_parser, "expected new-line");
 }
 
-
-/* OpenMP draft 2.5:
-   # pragma omp barrier new-line */
-
-static void
-c_parser_pragma_omp_barrier (cpp_reader *pfile ATTRIBUTE_UNUSED)
-{
-  printf ("#pragma omp barrier\n");
-
-  if (c_parser_next_token_is_not (the_parser, CPP_EOF))
-    {
-      c_parser_error (the_parser, "expected new-line");
-    }
-}
-
-/* OpenMP draft 2.5:
+/* OpenMP 2.5:
    # pragma omp critical region-phrase[opt] new-line
 
    region-phrase:
@@ -7139,15 +7152,13 @@ c_parser_pragma_omp_barrier (cpp_reader
 static void
 c_parser_pragma_omp_critical (cpp_reader *pfile ATTRIBUTE_UNUSED)
 {
-  printf ("#pragma omp critical\n");
-
+  curr_clause_set = NULL;
   if (c_parser_next_token_is (the_parser, CPP_OPEN_PAREN))
     {
       c_parser_consume_token (the_parser);
       if (c_parser_next_token_is (the_parser, CPP_NAME))
  {
-  printf ("region-phrase: %s\n",
-  IDENTIFIER_POINTER (c_parser_peek_token (the_parser)->value));
+  curr_clause_set = c_parser_peek_token (the_parser)->value;
   c_parser_consume_token (the_parser);
   c_parser_require (the_parser, CPP_CLOSE_PAREN, "expected %<)%>");
  }
@@ -7164,7 +7175,7 @@ c_parser_pragma_omp_critical (cpp_reader
     }
 }
 
-/* OpenMP draft 2.5:
+/* OpenMP 2.5:
    # pragma omp flush flush-vars[opt] new-line
 
    flush-vars:
@@ -7173,8 +7184,6 @@ c_parser_pragma_omp_critical (cpp_reader
 static void
 c_parser_pragma_omp_flush (cpp_reader *pfile ATTRIBUTE_UNUSED)
 {
-  printf ("#pragma omp flush\n");
-
   if (c_parser_next_token_is (the_parser, CPP_OPEN_PAREN))
     {
       c_parser_consume_token (the_parser);
@@ -7183,12 +7192,10 @@ c_parser_pragma_omp_flush (cpp_reader *p
     }
 
   if (c_parser_next_token_is_not (the_parser, CPP_EOF))
-    {
-      c_parser_error (the_parser, "expected new-line");
-    }
+    c_parser_error (the_parser, "expected new-line");
 }
 
-/* OpenMP draft 2.5:
+/* OpenMP 2.5:
    # pragma omp for for-clause[optseq] */
 
 static void
@@ -7230,36 +7237,7 @@ c_parser_pragma_omp_for (cpp_reader *pfi
     }
 }
 
-/* OpenMP draft 2.5
-   # pragma omp master new-line */
-
-static void
-c_parser_pragma_omp_master (cpp_reader *pfile ATTRIBUTE_UNUSED)
-{
-  printf ("#pragma omp master\n");
-
-  if (c_parser_next_token_is_not (the_parser, CPP_EOF))
-    {
-      c_parser_error (the_parser, "expected new-line");
-    }
-}
-
-/* OpenMP draft 2.5:
-   # pragma omp ordered new-line */
-
-static void
-c_parser_pragma_omp_ordered (cpp_reader *pfile ATTRIBUTE_UNUSED)
-{
-  printf ("#pragma omp ordered\n");
-
-  if (c_parser_next_token_is_not (the_parser, CPP_EOF))
-    {
-      c_parser_error (the_parser, "expected new-line");
-    }
-}
-
-
-/* OpenMP draft 2.5.
+/* OpenMP 2.5.
 
    # pragma omp parallel for parallel-for-clause[optseq] new-line  */
 
@@ -7313,7 +7291,7 @@ c_parser_pragma_omp_parallel_for (c_pars
 }
 
 
-/* OpenMP draft 2.5:
+/* OpenMP 2.5:
 
    #pragma omp parallel sections parallel-sections-clause[optseq] new-line  */
 
@@ -7361,7 +7339,7 @@ c_parser_pragma_omp_parallel_sections (c
 }
 
 
-/* OpenMP draft 2.5:
+/* OpenMP 2.5:
 
    #pragma omp parallel parallel-clause[optseq] new-line
    #pragma omp parallel for parallel-for-clause[optseq] new-line
@@ -7428,7 +7406,7 @@ c_parser_pragma_omp_parallel (cpp_reader
     }
 }
 
-/* OpenMP draft 2.5:
+/* OpenMP 2.5:
    # pragma omp section new-line */
 
 static void
@@ -7442,7 +7420,7 @@ c_parser_pragma_omp_section (cpp_reader
     }
 }
 
-/* OpenMP draft 2.5:
+/* OpenMP 2.5:
    # pragma omp sections sections-clause[optseq] */
 
 static void
@@ -7479,7 +7457,7 @@ c_parser_pragma_omp_sections (cpp_reader
 }
 
 
-/* OpenMP draft 2.5:
+/* OpenMP 2.5:
    # pragma omp single single-clause[optseq] new-line */
 
 static void
@@ -7513,7 +7491,7 @@ c_parser_pragma_omp_single (cpp_reader *
 }
 
 
-/* OpenMP draft 2.5:
+/* OpenMP 2.5:
    # pragma omp threadprivate (variable-list) */
 
 static void
Index: c-tree.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/c-tree.h,v
retrieving revision 1.203.4.2
diff -u -p -r1.203.4.2 c-tree.h
--- c-tree.h 28 Jul 2005 19:28:31 -0000 1.203.4.2
+++ c-tree.h 21 Sep 2005 23:36:07 -0000
@@ -459,7 +459,6 @@ extern void pending_xref_error (void);
 extern void c_push_function_context (struct function *);
 extern void c_pop_function_context (struct function *);
 extern void push_parm_decl (const struct c_parm *);
-extern tree pushdecl_top_level (tree);
 extern struct c_declarator *set_array_declarator_inner (struct c_declarator *,
  struct c_declarator *,
  bool);
Reply | Threaded
Open this post in threaded view
|

Re: [gomp] implement a handfull of easy directives

Diego Novillo
On 09/21/05 19:49, Richard Henderson wrote:

>Diego, did you say you were doing compile-only test cases in gcc.dg?
>I should write a bunch for this...
>  
>
Yes.
Reply | Threaded
Open this post in threaded view
|

Re: [gomp] implement a handfull of easy directives

Jakub Jelinek
In reply to this post by Richard Henderson-2
On Wed, Sep 21, 2005 at 04:49:17PM -0700, Richard Henderson wrote:
> Adds "built-in" decls for the functions used from the libgomp library.
> They're not realy built in of course, but it's easy to re-use the same
> bits for building decls.

Unfortunately, the DEF_GOMP_BUILTIN as well as DEF_SYNC_BUILTIN builtins
will be needed in the Fortran FE as well (both so that they can be
created by the Fortran FE and also by gimple-low.c etc. when gimplifying
Fortran code.  But f951 probably doesn't want to create all builtins
that are in builtins.def.

Would you be ok with separating the SYNC and GOMP builtin
DEF_{SYNC,GOMP}_BUILTIN lines into separate files (say sync-builtins.def
and gomp-builtins.def) that builtins.def would #include, so that gfortran
FE wouldn't have to duplicate everything you wrote added to builtins.def
for the sync/gomp builtins?

        Jakub
Reply | Threaded
Open this post in threaded view
|

Re: [gomp] implement a handfull of easy directives

Richard Henderson-2
On Thu, Sep 22, 2005 at 09:24:03AM -0400, Jakub Jelinek wrote:
> Would you be ok with separating the SYNC and GOMP builtin
> DEF_{SYNC,GOMP}_BUILTIN lines into separate files (say sync-builtins.def
> and gomp-builtins.def) that builtins.def would #include, so that gfortran
> FE wouldn't have to duplicate everything you wrote added to builtins.def
> for the sync/gomp builtins?

If you can make that work, yes.

Or if Ian wants to rearrange everything with his improved mechanism,
and so that it can be used by non-C front ends at the same time, that
would be cool too.


r~
Reply | Threaded
Open this post in threaded view
|

Re: [gomp] implement a handfull of easy directives

Jakub Jelinek
On Thu, Sep 22, 2005 at 08:31:54AM -0700, Richard Henderson wrote:
> On Thu, Sep 22, 2005 at 09:24:03AM -0400, Jakub Jelinek wrote:
> > Would you be ok with separating the SYNC and GOMP builtin
> > DEF_{SYNC,GOMP}_BUILTIN lines into separate files (say sync-builtins.def
> > and gomp-builtins.def) that builtins.def would #include, so that gfortran
> > FE wouldn't have to duplicate everything you wrote added to builtins.def
> > for the sync/gomp builtins?
>
> If you can make that work, yes.

This seems to work (tested by visual inspection so far, follow up patches
will start using it).
I can't include whole ../builtin-types.def, as it contains a bunch of
{,ObjC}C{,++} specific types, so fortran/types.def contains just those
needed ATM.
If Ian has something later on, it can be replaced.

Ok?

2005-09-23  Jakub Jelinek  <[hidden email]>

        * builtins.def: Update DEF_BUILTIN comment to include COND argument.
        Move all DEF_SYNC_BUILTIN () and DEF_GOMP_BUILTIN () builtins
        into separate files.
        * sync-builtins.def: New file, moved from builtins.def.
        * omp-builtins.def: New file, moved from builtins.def.
        * builtin-types.def (DEF_FUNCTION_TYPE_6, DEF_FUNCTION_TYPE_7,
        DEF_FUNCTION_TYPE_VAR_4): Document.
        * Makefile.in (BUILTINS_DEF): New variable.
        (TREE_H, c-common.o, builtins.o): Use it instead of builtins.def.

        * f95-lang.c (builtin_type_for_size): New function.
        (gfc_init_builtin_functions): Initialize synchronization and
        OpenMP builtins.
        * types.def: New file.
        * Make-lang.in (f95-lang.o): Depend on $(BUILTINS_DEF) and
        fortran/types.def.

--- gcc/Makefile.in.jj 2005-09-23 09:18:43.000000000 +0200
+++ gcc/Makefile.in 2005-09-23 15:15:24.000000000 +0200
@@ -719,7 +719,8 @@ RTL_BASE_H = rtl.h rtl.def $(MACHMODE_H)
   input.h real.h statistics.h
 RTL_H = $(RTL_BASE_H) genrtl.h
 PARAMS_H = params.h params.def
-TREE_H = tree.h tree.def $(MACHMODE_H) tree-check.h builtins.def \
+BUILTINS_DEF = builtins.def sync-builtins.def omp-builtins.def
+TREE_H = tree.h tree.def $(MACHMODE_H) tree-check.h $(BUILTINS_DEF) \
           input.h statistics.h vec.h treestruct.def
 BASIC_BLOCK_H = basic-block.h bitmap.h sbitmap.h varray.h $(PARTITION_H) \
           hard-reg-set.h cfghooks.h $(OBSTACK_H)
@@ -1536,7 +1537,7 @@ c-common.o : c-common.c $(CONFIG_H) $(SY
  $(DIAGNOSTIC_H) gt-c-common.h langhooks.h $(VARRAY_H) $(RTL_H) \
  $(TARGET_H) $(C_TREE_H) tree-iterator.h langhooks.h tree-mudflap.h \
  intl.h opts.h real.h $(CPPLIB_H) tree-inline.h $(HASHTAB_H) \
- builtins.def
+ $(BUILTINS_DEF)
 
 c-pretty-print.o : c-pretty-print.c $(C_PRETTY_PRINT_H) \
  $(C_TREE_H) $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) real.h \
@@ -2092,7 +2093,7 @@ builtins.o : builtins.c $(CONFIG_H) $(SY
    $(EXPR_H) $(OPTABS_H) insn-config.h $(RECOG_H) output.h typeclass.h \
    hard-reg-set.h toplev.h hard-reg-set.h except.h $(TM_P_H) $(PREDICT_H) \
    libfuncs.h real.h langhooks.h $(BASIC_BLOCK_H) tree-mudflap.h \
-   builtins.def $(MACHMODE_H)
+   $(BUILTINS_DEF) $(MACHMODE_H)
 calls.o : calls.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
    $(TREE_H) $(FLAGS_H) $(EXPR_H) $(OPTABS_H) langhooks.h $(TARGET_H) \
    libfuncs.h $(REGS_H) toplev.h output.h function.h $(TIMEVAR_H) $(TM_P_H) \
--- gcc/builtin-types.def.jj 2005-09-22 08:05:52.000000000 +0200
+++ gcc/builtin-types.def 2005-09-23 12:46:06.000000000 +0200
@@ -33,6 +33,8 @@ Software Foundation, 51 Franklin Street,
    DEF_FUNCTION_TYPE_3 (ENUM, RETURN, ARG1, ARG2, ARG3)
    DEF_FUNCTION_TYPE_4 (ENUM, RETURN, ARG1, ARG2, ARG3, ARG4)
    DEF_FUNCTION_TYPE_5 (ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5)
+   DEF_FUNCTION_TYPE_6 (ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6)
+   DEF_FUNCTION_TYPE_7 (ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7)
 
      These macros describe function types.  ENUM is as above.  The
      RETURN type is one of the enumerals already defined.  ARG1, ARG2,
@@ -43,6 +45,7 @@ Software Foundation, 51 Franklin Street,
    DEF_FUNCTION_TYPE_VAR_2 (ENUM, RETURN, ARG1, ARG2)
    DEF_FUNCTION_TYPE_VAR_3 (ENUM, RETURN, ARG1, ARG2, ARG3)
    DEF_FUNCTION_TYPE_VAR_4 (ENUM, RETURN, ARG1, ARG2, ARG3, ARG4)
+   DEF_FUNCTION_TYPE_VAR_4 (ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5)
 
      Similar, but for function types that take variable arguments.
      For example:
--- gcc/builtins.def.jj 2005-09-22 08:05:52.000000000 +0200
+++ gcc/builtins.def 2005-09-23 12:12:09.000000000 +0200
@@ -23,7 +23,7 @@ Software Foundation, 51 Franklin Street,
 /* Before including this file, you should define a macro:
 
      DEF_BUILTIN (ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P,
-                  FALLBACK_P, NONANSI_P, ATTRS, IMPLICIT)
+                  FALLBACK_P, NONANSI_P, ATTRS, IMPLICIT, COND)
 
    This macro will be called once for each builtin function.  The
    ENUM will be of type `enum built_in_function', and will indicate
@@ -61,8 +61,10 @@ Software Foundation, 51 Franklin Street,
    define it's meaning.  When user uses floorf we may assume that the
    floorf has the meaning we expect, but we can't produce floorf by
    simplifying floor((double)float) since the runtime need not implement
-   it.  */
-  
+   it.
+
+   The builtins is registered only if COND is true.  */
+
 /* A GCC builtin (like __builtin_saveregs) is provided by the
    compiler, but does not correspond to a function in the standard
    library.  */
@@ -699,309 +701,8 @@ DEF_EXT_LIB_BUILTIN    (BUILT_IN_VPRINTF
 DEF_BUILTIN_STUB (BUILT_IN_PROFILE_FUNC_ENTER, "profile_func_enter")
 DEF_BUILTIN_STUB (BUILT_IN_PROFILE_FUNC_EXIT, "profile_func_exit")
 
-/* Synchronization Primitives.  The "_N" version is the one that the user
-   is supposed to be using.  It's overloaded, and is resolved to one of the
-   "_1" through "_8" versions, plus some extra casts.  */
-
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_ADD_N, "__sync_fetch_and_add",
-  BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_ADD_1, "__sync_fetch_and_add_1",
-  BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_ADD_2, "__sync_fetch_and_add_2",
-  BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_ADD_4, "__sync_fetch_and_add_4",
-  BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_ADD_8, "__sync_fetch_and_add_8",
-  BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_SUB_N, "__sync_fetch_and_sub",
-  BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_SUB_1, "__sync_fetch_and_sub_1",
-  BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_SUB_2, "__sync_fetch_and_sub_2",
-  BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_SUB_4, "__sync_fetch_and_sub_4",
-  BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_SUB_8, "__sync_fetch_and_sub_8",
-  BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_OR_N, "__sync_fetch_and_or",
-  BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_OR_1, "__sync_fetch_and_or_1",
-  BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_OR_2, "__sync_fetch_and_or_2",
-  BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_OR_4, "__sync_fetch_and_or_4",
-  BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_OR_8, "__sync_fetch_and_or_8",
-  BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_AND_N, "__sync_fetch_and_and",
-  BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_AND_1, "__sync_fetch_and_and_1",
-  BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_AND_2, "__sync_fetch_and_and_2",
-  BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_AND_4, "__sync_fetch_and_and_4",
-  BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_AND_8, "__sync_fetch_and_and_8",
-  BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_XOR_N, "__sync_fetch_and_xor",
-  BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_XOR_1, "__sync_fetch_and_xor_1",
-  BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_XOR_2, "__sync_fetch_and_xor_2",
-  BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_XOR_4, "__sync_fetch_and_xor_4",
-  BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_XOR_8, "__sync_fetch_and_xor_8",
-  BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_NAND_N, "__sync_fetch_and_nand",
-  BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_NAND_1, "__sync_fetch_and_nand_1",
-  BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_NAND_2, "__sync_fetch_and_nand_2",
-  BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_NAND_4, "__sync_fetch_and_nand_4",
-  BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_NAND_8, "__sync_fetch_and_nand_8",
-  BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_ADD_AND_FETCH_N, "__sync_add_and_fetch",
-  BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ADD_AND_FETCH_1, "__sync_add_and_fetch_1",
-  BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ADD_AND_FETCH_2, "__sync_add_and_fetch_2",
-  BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ADD_AND_FETCH_4, "__sync_add_and_fetch_4",
-  BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_ADD_AND_FETCH_8, "__sync_add_and_fetch_8",
-  BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_SUB_AND_FETCH_N, "__sync_sub_and_fetch",
-  BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SUB_AND_FETCH_1, "__sync_sub_and_fetch_1",
-  BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SUB_AND_FETCH_2, "__sync_sub_and_fetch_2",
-  BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SUB_AND_FETCH_4, "__sync_sub_and_fetch_4",
-  BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_SUB_AND_FETCH_8, "__sync_sub_and_fetch_8",
-  BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_OR_AND_FETCH_N, "__sync_or_and_fetch",
-  BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_OR_AND_FETCH_1, "__sync_or_and_fetch_1",
-  BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_OR_AND_FETCH_2, "__sync_or_and_fetch_2",
-  BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_OR_AND_FETCH_4, "__sync_or_and_fetch_4",
-  BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_OR_AND_FETCH_8, "__sync_or_and_fetch_8",
-  BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_AND_AND_FETCH_N, "__sync_and_and_fetch",
-  BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_AND_AND_FETCH_1, "__sync_and_and_fetch_1",
-  BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_AND_AND_FETCH_2, "__sync_and_and_fetch_2",
-  BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_AND_AND_FETCH_4, "__sync_and_and_fetch_4",
-  BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_AND_AND_FETCH_8, "__sync_and_and_fetch_8",
-  BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_XOR_AND_FETCH_N, "__sync_xor_and_fetch",
-  BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_XOR_AND_FETCH_1, "__sync_xor_and_fetch_1",
-  BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_XOR_AND_FETCH_2, "__sync_xor_and_fetch_2",
-  BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_XOR_AND_FETCH_4, "__sync_xor_and_fetch_4",
-  BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_XOR_AND_FETCH_8, "__sync_xor_and_fetch_8",
-  BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_NAND_AND_FETCH_N, "__sync_nand_and_fetch",
-  BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_NAND_AND_FETCH_1, "__sync_nand_and_fetch_1",
-  BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_NAND_AND_FETCH_2, "__sync_nand_and_fetch_2",
-  BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_NAND_AND_FETCH_4, "__sync_nand_and_fetch_4",
-  BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_NAND_AND_FETCH_8, "__sync_nand_and_fetch_8",
-  BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_BOOL_COMPARE_AND_SWAP_N,
-  "__sync_bool_compare_and_swap",
-  BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_BOOL_COMPARE_AND_SWAP_1,
-  "__sync_bool_compare_and_swap_1",
-  BT_FN_BOOL_VPTR_I1_I1, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_BOOL_COMPARE_AND_SWAP_2,
-  "__sync_bool_compare_and_swap_2",
-  BT_FN_BOOL_VPTR_I2_I2, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_BOOL_COMPARE_AND_SWAP_4,
-  "__sync_bool_compare_and_swap_4",
-  BT_FN_BOOL_VPTR_I4_I4, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_BOOL_COMPARE_AND_SWAP_8,
-  "__sync_bool_compare_and_swap_8",
-  BT_FN_BOOL_VPTR_I8_I8, ATTR_NOTHROW_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_VAL_COMPARE_AND_SWAP_N,
-  "__sync_val_compare_and_swap",
-  BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_VAL_COMPARE_AND_SWAP_1,
-  "__sync_val_compare_and_swap_1",
-  BT_FN_I1_VPTR_I1_I1, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_VAL_COMPARE_AND_SWAP_2,
-  "__sync_val_compare_and_swap_2",
-  BT_FN_I2_VPTR_I2_I2, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_VAL_COMPARE_AND_SWAP_4,
-  "__sync_val_compare_and_swap_4",
-  BT_FN_I4_VPTR_I4_I4, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_VAL_COMPARE_AND_SWAP_8,
-  "__sync_val_compare_and_swap_8",
-  BT_FN_I8_VPTR_I8_I8, ATTR_NOTHROW_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_LOCK_TEST_AND_SET_N, "__sync_lock_test_and_set",
-  BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_LOCK_TEST_AND_SET_1, "__sync_lock_test_and_set_1",
-  BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_LOCK_TEST_AND_SET_2, "__sync_lock_test_and_set_2",
-  BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_LOCK_TEST_AND_SET_4, "__sync_lock_test_and_set_4",
-  BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_LOCK_TEST_AND_SET_8, "__sync_lock_test_and_set_8",
-  BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_LOCK_RELEASE_N, "__sync_lock_release",
-  BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_LOCK_RELEASE_1, "__sync_lock_release_1",
-  BT_FN_VOID_VPTR, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_LOCK_RELEASE_2, "__sync_lock_release_2",
-  BT_FN_VOID_VPTR, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_LOCK_RELEASE_4, "__sync_lock_release_4",
-  BT_FN_VOID_VPTR, ATTR_NOTHROW_LIST)
-DEF_SYNC_BUILTIN (BUILT_IN_LOCK_RELEASE_8, "__sync_lock_release_8",
-  BT_FN_VOID_VPTR, ATTR_NOTHROW_LIST)
-
-DEF_SYNC_BUILTIN (BUILT_IN_SYNCHRONIZE, "__sync_synchronize",
-  BT_FN_VOID, ATTR_NOTHROW_LIST)
-
-DEF_GOMP_BUILTIN (BUILT_IN_OMP_GET_THREAD_NUM, "omp_get_thread_num",
-     BT_FN_INT, ATTR_CONST_NOTHROW_LIST)
-
-DEF_GOMP_BUILTIN (BUILT_IN_GOMP_BARRIER, "GOMP_barrier",
-  BT_FN_VOID, ATTR_NOTHROW_LIST)
-DEF_GOMP_BUILTIN (BUILT_IN_GOMP_CRITICAL_START, "GOMP_critical_start",
-  BT_FN_VOID, ATTR_NOTHROW_LIST)
-DEF_GOMP_BUILTIN (BUILT_IN_GOMP_CRITICAL_END, "GOMP_critical_end",
-  BT_FN_VOID, ATTR_NOTHROW_LIST)
-DEF_GOMP_BUILTIN (BUILT_IN_GOMP_CRITICAL_NAME_START,
-  "GOMP_critical_name_start",
-  BT_FN_VOID_PTRPTR, ATTR_NOTHROW_LIST)
-DEF_GOMP_BUILTIN (BUILT_IN_GOMP_CRITICAL_NAME_END,
-  "GOMP_critical_name_end",
-  BT_FN_VOID_PTRPTR, ATTR_NOTHROW_LIST)
-DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_STATIC_START,
-  "GOMP_loop_static_start",
-  BT_FN_BOOL_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR,
-  ATTR_NOTHROW_LIST)
-DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_DYNAMIC_START,
-  "GOMP_loop_dynamic_start",
-  BT_FN_BOOL_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR,
-  ATTR_NOTHROW_LIST)
-DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_GUIDED_START,
-  "GOMP_loop_guided_start",
-  BT_FN_BOOL_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR,
-  ATTR_NOTHROW_LIST)
-DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_RUNTIME_START,
-  "GOMP_loop_runtime_start",
-  BT_FN_BOOL_LONG_LONG_LONG_LONGPTR_LONGPTR,
-  ATTR_NOTHROW_LIST)
-DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ORDERED_STATIC_START,
-  "GOMP_loop_ordered_static_start",
-  BT_FN_BOOL_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR,
-  ATTR_NOTHROW_LIST)
-DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ORDERED_DYNAMIC_START,
-  "GOMP_loop_ordered_dynamic_start",
-  BT_FN_BOOL_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR,
-  ATTR_NOTHROW_LIST)
-DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ORDERED_GUIDED_START,
-  "GOMP_loop_ordered_guided_start",
-  BT_FN_BOOL_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR,
-  ATTR_NOTHROW_LIST)
-DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ORDERED_RUNTIME_START,
-  "GOMP_loop_ordered_runtime_start",
-  BT_FN_BOOL_LONG_LONG_LONG_LONGPTR_LONGPTR,
-  ATTR_NOTHROW_LIST)
-DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_STATIC_NEXT, "GOMP_loop_static_next",
-  BT_FN_BOOL_LONGPTR_LONGPTR, ATTR_NOTHROW_LIST)
-DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_DYNAMIC_NEXT, "GOMP_loop_dynamic_next",
-  BT_FN_BOOL_LONGPTR_LONGPTR, ATTR_NOTHROW_LIST)
-DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_GUIDED_NEXT, "GOMP_loop_guided_next",
-  BT_FN_BOOL_LONGPTR_LONGPTR, ATTR_NOTHROW_LIST)
-DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_RUNTIME_NEXT, "GOMP_loop_runtime_next",
-  BT_FN_BOOL_LONGPTR_LONGPTR, ATTR_NOTHROW_LIST)
-DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ORDERED_STATIC_NEXT,
-  "GOMP_loop_ordered_static_next",
-  BT_FN_BOOL_LONGPTR_LONGPTR, ATTR_NOTHROW_LIST)
-DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ORDERED_DYNAMIC_NEXT,
-  "GOMP_loop_ordered_dynamic_next",
-  BT_FN_BOOL_LONGPTR_LONGPTR, ATTR_NOTHROW_LIST)
-DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ORDERED_GUIDED_NEXT,
-  "GOMP_loop_ordered_guided_next",
-  BT_FN_BOOL_LONGPTR_LONGPTR, ATTR_NOTHROW_LIST)
-DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ORDERED_RUNTIME_NEXT,
-  "GOMP_loop_ordered_runtime_next",
-  BT_FN_BOOL_LONGPTR_LONGPTR, ATTR_NOTHROW_LIST)
-DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_LOOP_STATIC_START,
-  "GOMP_parallel_loop_static_start",
-  BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_LONG,
-  ATTR_NOTHROW_LIST)
-DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_LOOP_DYNAMIC_START,
-  "GOMP_parallel_loop_dynamic_start",
-  BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_LONG,
-  ATTR_NOTHROW_LIST)
-DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_LOOP_GUIDED_START,
-  "GOMP_parallel_loop_guided_start",
-  BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_LONG,
-  ATTR_NOTHROW_LIST)
-DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_LOOP_RUNTIME_START,
-  "GOMP_parallel_loop_runtime_start",
-  BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG,
-  ATTR_NOTHROW_LIST)
-DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_END, "GOMP_loop_end",
-  BT_FN_VOID, ATTR_NOTHROW_LIST)
-DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_END_NOWAIT, "GOMP_loop_end_nowait",
-  BT_FN_VOID, ATTR_NOTHROW_LIST)
-DEF_GOMP_BUILTIN (BUILT_IN_GOMP_ORDERED_START, "GOMP_ordered_start",
-  BT_FN_VOID, ATTR_NOTHROW_LIST)
-DEF_GOMP_BUILTIN (BUILT_IN_GOMP_ORDERED_END, "GOMP_ordered_end",
-  BT_FN_VOID, ATTR_NOTHROW_LIST)
-DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_START, "GOMP_parallel_start",
-  BT_FN_VOID_OMPFN_PTR_UINT, ATTR_NOTHROW_LIST)
-DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_END, "GOMP_parallel_end",
-  BT_FN_VOID, ATTR_NOTHROW_LIST)
-DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SECTIONS_START, "GOMP_sections_start",
-  BT_FN_VOID_UINT_UINT, ATTR_NOTHROW_LIST)
-DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SECTIONS_NEXT, "GOMP_sections_next",
-  BT_FN_UINT, ATTR_NOTHROW_LIST)
-DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_SECTIONS_START,
-  "GOMP_parallel_sections_start",
-  BT_FN_VOID_OMPFN_PTR_UINT_UINT, ATTR_NOTHROW_LIST)
-DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SECTIONS_END, "GOMP_sections_end",
-  BT_FN_VOID, ATTR_NOTHROW_LIST)
-DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SECTIONS_END_NOWAIT,
-  "GOMP_sections_end_nowait",
-  BT_FN_VOID, ATTR_NOTHROW_LIST)
-DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SINGLE_START, "GOMP_single_start",
-  BT_FN_BOOL, ATTR_NOTHROW_LIST)
-DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SINGLE_COPY_START, "GOMP_single_copy_start",
-  BT_FN_PTR, ATTR_NOTHROW_LIST)
-DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SINGLE_COPY_END, "GOMP_single_copy_end",
-  BT_FN_VOID_PTR, ATTR_NOTHROW_LIST)
+/* Synchronization Primitives.  */
+#include "sync-builtins.def"
+
+/* OpenMP builtins.  */
+#include "omp-builtins.def"
--- gcc/sync-builtins.def.jj 2005-09-22 15:19:29.000000000 +0200
+++ gcc/sync-builtins.def 2005-09-22 15:24:19.000000000 +0200
@@ -0,0 +1,219 @@
+/* This file contains the definitions and documentation for the
+   synchronization builtins used in the GNU compiler.
+   Copyright (C) 2005 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING.  If not, write to the Free
+Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301, USA.  */
+
+/* Before including this file, you should define a macro:
+
+     DEF_SYNC_BUILTIN (ENUM, NAME, TYPE, ATTRS)
+
+   See builtins.def for details.  */
+  
+/* Synchronization Primitives.  The "_N" version is the one that the user
+   is supposed to be using.  It's overloaded, and is resolved to one of the
+   "_1" through "_8" versions, plus some extra casts.  */
+
+DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_ADD_N, "__sync_fetch_and_add",
+  BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_ADD_1, "__sync_fetch_and_add_1",
+  BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_ADD_2, "__sync_fetch_and_add_2",
+  BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_ADD_4, "__sync_fetch_and_add_4",
+  BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_ADD_8, "__sync_fetch_and_add_8",
+  BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_SUB_N, "__sync_fetch_and_sub",
+  BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_SUB_1, "__sync_fetch_and_sub_1",
+  BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_SUB_2, "__sync_fetch_and_sub_2",
+  BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_SUB_4, "__sync_fetch_and_sub_4",
+  BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_SUB_8, "__sync_fetch_and_sub_8",
+  BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_OR_N, "__sync_fetch_and_or",
+  BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_OR_1, "__sync_fetch_and_or_1",
+  BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_OR_2, "__sync_fetch_and_or_2",
+  BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_OR_4, "__sync_fetch_and_or_4",
+  BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_OR_8, "__sync_fetch_and_or_8",
+  BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_AND_N, "__sync_fetch_and_and",
+  BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_AND_1, "__sync_fetch_and_and_1",
+  BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_AND_2, "__sync_fetch_and_and_2",
+  BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_AND_4, "__sync_fetch_and_and_4",
+  BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_AND_8, "__sync_fetch_and_and_8",
+  BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_XOR_N, "__sync_fetch_and_xor",
+  BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_XOR_1, "__sync_fetch_and_xor_1",
+  BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_XOR_2, "__sync_fetch_and_xor_2",
+  BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_XOR_4, "__sync_fetch_and_xor_4",
+  BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_XOR_8, "__sync_fetch_and_xor_8",
+  BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_NAND_N, "__sync_fetch_and_nand",
+  BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_NAND_1, "__sync_fetch_and_nand_1",
+  BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_NAND_2, "__sync_fetch_and_nand_2",
+  BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_NAND_4, "__sync_fetch_and_nand_4",
+  BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_FETCH_AND_NAND_8, "__sync_fetch_and_nand_8",
+  BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_ADD_AND_FETCH_N, "__sync_add_and_fetch",
+  BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ADD_AND_FETCH_1, "__sync_add_and_fetch_1",
+  BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ADD_AND_FETCH_2, "__sync_add_and_fetch_2",
+  BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ADD_AND_FETCH_4, "__sync_add_and_fetch_4",
+  BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ADD_AND_FETCH_8, "__sync_add_and_fetch_8",
+  BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_SUB_AND_FETCH_N, "__sync_sub_and_fetch",
+  BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SUB_AND_FETCH_1, "__sync_sub_and_fetch_1",
+  BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SUB_AND_FETCH_2, "__sync_sub_and_fetch_2",
+  BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SUB_AND_FETCH_4, "__sync_sub_and_fetch_4",
+  BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SUB_AND_FETCH_8, "__sync_sub_and_fetch_8",
+  BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_OR_AND_FETCH_N, "__sync_or_and_fetch",
+  BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_OR_AND_FETCH_1, "__sync_or_and_fetch_1",
+  BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_OR_AND_FETCH_2, "__sync_or_and_fetch_2",
+  BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_OR_AND_FETCH_4, "__sync_or_and_fetch_4",
+  BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_OR_AND_FETCH_8, "__sync_or_and_fetch_8",
+  BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_AND_AND_FETCH_N, "__sync_and_and_fetch",
+  BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_AND_AND_FETCH_1, "__sync_and_and_fetch_1",
+  BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_AND_AND_FETCH_2, "__sync_and_and_fetch_2",
+  BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_AND_AND_FETCH_4, "__sync_and_and_fetch_4",
+  BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_AND_AND_FETCH_8, "__sync_and_and_fetch_8",
+  BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_XOR_AND_FETCH_N, "__sync_xor_and_fetch",
+  BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_XOR_AND_FETCH_1, "__sync_xor_and_fetch_1",
+  BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_XOR_AND_FETCH_2, "__sync_xor_and_fetch_2",
+  BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_XOR_AND_FETCH_4, "__sync_xor_and_fetch_4",
+  BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_XOR_AND_FETCH_8, "__sync_xor_and_fetch_8",
+  BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_NAND_AND_FETCH_N, "__sync_nand_and_fetch",
+  BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_NAND_AND_FETCH_1, "__sync_nand_and_fetch_1",
+  BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_NAND_AND_FETCH_2, "__sync_nand_and_fetch_2",
+  BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_NAND_AND_FETCH_4, "__sync_nand_and_fetch_4",
+  BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_NAND_AND_FETCH_8, "__sync_nand_and_fetch_8",
+  BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_BOOL_COMPARE_AND_SWAP_N,
+  "__sync_bool_compare_and_swap",
+  BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_BOOL_COMPARE_AND_SWAP_1,
+  "__sync_bool_compare_and_swap_1",
+  BT_FN_BOOL_VPTR_I1_I1, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_BOOL_COMPARE_AND_SWAP_2,
+  "__sync_bool_compare_and_swap_2",
+  BT_FN_BOOL_VPTR_I2_I2, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_BOOL_COMPARE_AND_SWAP_4,
+  "__sync_bool_compare_and_swap_4",
+  BT_FN_BOOL_VPTR_I4_I4, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_BOOL_COMPARE_AND_SWAP_8,
+  "__sync_bool_compare_and_swap_8",
+  BT_FN_BOOL_VPTR_I8_I8, ATTR_NOTHROW_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_VAL_COMPARE_AND_SWAP_N,
+  "__sync_val_compare_and_swap",
+  BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_VAL_COMPARE_AND_SWAP_1,
+  "__sync_val_compare_and_swap_1",
+  BT_FN_I1_VPTR_I1_I1, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_VAL_COMPARE_AND_SWAP_2,
+  "__sync_val_compare_and_swap_2",
+  BT_FN_I2_VPTR_I2_I2, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_VAL_COMPARE_AND_SWAP_4,
+  "__sync_val_compare_and_swap_4",
+  BT_FN_I4_VPTR_I4_I4, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_VAL_COMPARE_AND_SWAP_8,
+  "__sync_val_compare_and_swap_8",
+  BT_FN_I8_VPTR_I8_I8, ATTR_NOTHROW_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_LOCK_TEST_AND_SET_N, "__sync_lock_test_and_set",
+  BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_LOCK_TEST_AND_SET_1, "__sync_lock_test_and_set_1",
+  BT_FN_I1_VPTR_I1, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_LOCK_TEST_AND_SET_2, "__sync_lock_test_and_set_2",
+  BT_FN_I2_VPTR_I2, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_LOCK_TEST_AND_SET_4, "__sync_lock_test_and_set_4",
+  BT_FN_I4_VPTR_I4, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_LOCK_TEST_AND_SET_8, "__sync_lock_test_and_set_8",
+  BT_FN_I8_VPTR_I8, ATTR_NOTHROW_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_LOCK_RELEASE_N, "__sync_lock_release",
+  BT_FN_VOID_VAR, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_LOCK_RELEASE_1, "__sync_lock_release_1",
+  BT_FN_VOID_VPTR, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_LOCK_RELEASE_2, "__sync_lock_release_2",
+  BT_FN_VOID_VPTR, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_LOCK_RELEASE_4, "__sync_lock_release_4",
+  BT_FN_VOID_VPTR, ATTR_NOTHROW_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_LOCK_RELEASE_8, "__sync_lock_release_8",
+  BT_FN_VOID_VPTR, ATTR_NOTHROW_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_SYNCHRONIZE, "__sync_synchronize",
+  BT_FN_VOID, ATTR_NOTHROW_LIST)
--- gcc/omp-builtins.def.jj 2005-09-23 11:30:16.000000000 +0200
+++ gcc/omp-builtins.def 2005-09-23 12:03:37.000000000 +0200
@@ -0,0 +1,140 @@
+/* This file contains the definitions and documentation for the
+   OpenMP builtins used in the GNU compiler.
+   Copyright (C) 2005 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING.  If not, write to the Free
+Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301, USA.  */
+
+/* Before including this file, you should define a macro:
+
+     DEF_GOMP_BUILTIN (ENUM, NAME, TYPE, ATTRS)
+
+   See builtins.def for details.  */
+
+DEF_GOMP_BUILTIN (BUILT_IN_OMP_GET_THREAD_NUM, "omp_get_thread_num",
+     BT_FN_INT, ATTR_CONST_NOTHROW_LIST)
+
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_BARRIER, "GOMP_barrier",
+  BT_FN_VOID, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_CRITICAL_START, "GOMP_critical_start",
+  BT_FN_VOID, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_CRITICAL_END, "GOMP_critical_end",
+  BT_FN_VOID, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_CRITICAL_NAME_START,
+  "GOMP_critical_name_start",
+  BT_FN_VOID_PTRPTR, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_CRITICAL_NAME_END,
+  "GOMP_critical_name_end",
+  BT_FN_VOID_PTRPTR, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_STATIC_START,
+  "GOMP_loop_static_start",
+  BT_FN_BOOL_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR,
+  ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_DYNAMIC_START,
+  "GOMP_loop_dynamic_start",
+  BT_FN_BOOL_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR,
+  ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_GUIDED_START,
+  "GOMP_loop_guided_start",
+  BT_FN_BOOL_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR,
+  ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_RUNTIME_START,
+  "GOMP_loop_runtime_start",
+  BT_FN_BOOL_LONG_LONG_LONG_LONGPTR_LONGPTR,
+  ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ORDERED_STATIC_START,
+  "GOMP_loop_ordered_static_start",
+  BT_FN_BOOL_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR,
+  ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ORDERED_DYNAMIC_START,
+  "GOMP_loop_ordered_dynamic_start",
+  BT_FN_BOOL_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR,
+  ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ORDERED_GUIDED_START,
+  "GOMP_loop_ordered_guided_start",
+  BT_FN_BOOL_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR,
+  ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ORDERED_RUNTIME_START,
+  "GOMP_loop_ordered_runtime_start",
+  BT_FN_BOOL_LONG_LONG_LONG_LONGPTR_LONGPTR,
+  ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_STATIC_NEXT, "GOMP_loop_static_next",
+  BT_FN_BOOL_LONGPTR_LONGPTR, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_DYNAMIC_NEXT, "GOMP_loop_dynamic_next",
+  BT_FN_BOOL_LONGPTR_LONGPTR, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_GUIDED_NEXT, "GOMP_loop_guided_next",
+  BT_FN_BOOL_LONGPTR_LONGPTR, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_RUNTIME_NEXT, "GOMP_loop_runtime_next",
+  BT_FN_BOOL_LONGPTR_LONGPTR, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ORDERED_STATIC_NEXT,
+  "GOMP_loop_ordered_static_next",
+  BT_FN_BOOL_LONGPTR_LONGPTR, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ORDERED_DYNAMIC_NEXT,
+  "GOMP_loop_ordered_dynamic_next",
+  BT_FN_BOOL_LONGPTR_LONGPTR, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ORDERED_GUIDED_NEXT,
+  "GOMP_loop_ordered_guided_next",
+  BT_FN_BOOL_LONGPTR_LONGPTR, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_ORDERED_RUNTIME_NEXT,
+  "GOMP_loop_ordered_runtime_next",
+  BT_FN_BOOL_LONGPTR_LONGPTR, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_LOOP_STATIC_START,
+  "GOMP_parallel_loop_static_start",
+  BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_LONG,
+  ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_LOOP_DYNAMIC_START,
+  "GOMP_parallel_loop_dynamic_start",
+  BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_LONG,
+  ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_LOOP_GUIDED_START,
+  "GOMP_parallel_loop_guided_start",
+  BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_LONG,
+  ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_LOOP_RUNTIME_START,
+  "GOMP_parallel_loop_runtime_start",
+  BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG,
+  ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_END, "GOMP_loop_end",
+  BT_FN_VOID, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_LOOP_END_NOWAIT, "GOMP_loop_end_nowait",
+  BT_FN_VOID, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_ORDERED_START, "GOMP_ordered_start",
+  BT_FN_VOID, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_ORDERED_END, "GOMP_ordered_end",
+  BT_FN_VOID, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_START, "GOMP_parallel_start",
+  BT_FN_VOID_OMPFN_PTR_UINT, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_END, "GOMP_parallel_end",
+  BT_FN_VOID, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SECTIONS_START, "GOMP_sections_start",
+  BT_FN_VOID_UINT_UINT, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SECTIONS_NEXT, "GOMP_sections_next",
+  BT_FN_UINT, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_PARALLEL_SECTIONS_START,
+  "GOMP_parallel_sections_start",
+  BT_FN_VOID_OMPFN_PTR_UINT_UINT, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SECTIONS_END, "GOMP_sections_end",
+  BT_FN_VOID, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SECTIONS_END_NOWAIT,
+  "GOMP_sections_end_nowait",
+  BT_FN_VOID, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SINGLE_START, "GOMP_single_start",
+  BT_FN_BOOL, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SINGLE_COPY_START, "GOMP_single_copy_start",
+  BT_FN_PTR, ATTR_NOTHROW_LIST)
+DEF_GOMP_BUILTIN (BUILT_IN_GOMP_SINGLE_COPY_END, "GOMP_single_copy_end",
+  BT_FN_VOID_PTR, ATTR_NOTHROW_LIST)
--- gcc/fortran/f95-lang.c.jj 2005-09-13 15:16:39.000000000 +0200
+++ gcc/fortran/f95-lang.c 2005-09-23 14:14:12.000000000 +0200
@@ -752,12 +752,53 @@ build_builtin_fntypes (tree * fntype, tr
   fntype[2] = build_function_type (type, tmp);
 }
 
+static tree
+builtin_type_for_size (int size, bool unsignedp)
+{
+  tree type = lang_hooks.types.type_for_size (size, unsignedp);
+  return type ? type : error_mark_node;
+}
 
 /* Initialization of builtin function nodes.  */
 
 static void
 gfc_init_builtin_functions (void)
 {
+  enum builtin_type
+  {
+#define DEF_PRIMITIVE_TYPE(NAME, VALUE) NAME,
+#define DEF_FUNCTION_TYPE_0(NAME, RETURN) NAME,
+#define DEF_FUNCTION_TYPE_1(NAME, RETURN, ARG1) NAME,
+#define DEF_FUNCTION_TYPE_2(NAME, RETURN, ARG1, ARG2) NAME,
+#define DEF_FUNCTION_TYPE_3(NAME, RETURN, ARG1, ARG2, ARG3) NAME,
+#define DEF_FUNCTION_TYPE_4(NAME, RETURN, ARG1, ARG2, ARG3, ARG4) NAME,
+#define DEF_FUNCTION_TYPE_5(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) NAME,
+#define DEF_FUNCTION_TYPE_6(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6) NAME,
+#define DEF_FUNCTION_TYPE_7(NAME, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7) NAME,
+#define DEF_FUNCTION_TYPE_VAR_0(NAME, RETURN) NAME,
+#define DEF_POINTER_TYPE(NAME, TYPE) NAME,
+#include "types.def"
+#undef DEF_PRIMITIVE_TYPE
+#undef DEF_FUNCTION_TYPE_0
+#undef DEF_FUNCTION_TYPE_1
+#undef DEF_FUNCTION_TYPE_2
+#undef DEF_FUNCTION_TYPE_3
+#undef DEF_FUNCTION_TYPE_4
+#undef DEF_FUNCTION_TYPE_5
+#undef DEF_FUNCTION_TYPE_6
+#undef DEF_FUNCTION_TYPE_7
+#undef DEF_FUNCTION_TYPE_VAR_0
+#undef DEF_POINTER_TYPE
+    BT_LAST
+  };
+  typedef enum builtin_type builtin_type;
+  enum
+  {
+    /* So far we need just these 2 attribute types.  */
+    ATTR_NOTHROW_LIST,
+    ATTR_CONST_NOTHROW_LIST
+  };
+
   tree mfunc_float[3];
   tree mfunc_double[3];
   tree mfunc_cfloat[3];
@@ -766,6 +807,7 @@ gfc_init_builtin_functions (void)
   tree func_cdouble_double;
   tree ftype;
   tree tmp;
+  tree builtin_types[(int) BT_LAST + 1];
 
   build_builtin_fntypes (mfunc_float, float_type_node);
   build_builtin_fntypes (mfunc_double, double_type_node);
@@ -830,6 +872,146 @@ gfc_init_builtin_functions (void)
   gfc_define_builtin ("__builtin_expect", ftype, BUILT_IN_EXPECT,
       "__builtin_expect", true);
 
+#define DEF_PRIMITIVE_TYPE(ENUM, VALUE) \
+  builtin_types[(int) ENUM] = VALUE;
+#define DEF_FUNCTION_TYPE_0(ENUM, RETURN) \
+  builtin_types[(int) ENUM] \
+    = build_function_type (builtin_types[(int) RETURN], \
+   void_list_node);
+#define DEF_FUNCTION_TYPE_1(ENUM, RETURN, ARG1) \
+  builtin_types[(int) ENUM] \
+    = build_function_type (builtin_types[(int) RETURN], \
+   tree_cons (NULL_TREE, \
+      builtin_types[(int) ARG1], \
+      void_list_node));
+#define DEF_FUNCTION_TYPE_2(ENUM, RETURN, ARG1, ARG2) \
+  builtin_types[(int) ENUM] \
+    = build_function_type \
+      (builtin_types[(int) RETURN], \
+       tree_cons (NULL_TREE, \
+  builtin_types[(int) ARG1], \
+  tree_cons (NULL_TREE, \
+     builtin_types[(int) ARG2], \
+     void_list_node)));
+#define DEF_FUNCTION_TYPE_3(ENUM, RETURN, ARG1, ARG2, ARG3) \
+  builtin_types[(int) ENUM] \
+    = build_function_type \
+      (builtin_types[(int) RETURN], \
+       tree_cons (NULL_TREE, \
+  builtin_types[(int) ARG1], \
+  tree_cons (NULL_TREE, \
+     builtin_types[(int) ARG2], \
+     tree_cons (NULL_TREE, \
+ builtin_types[(int) ARG3], \
+ void_list_node))));
+#define DEF_FUNCTION_TYPE_4(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4) \
+  builtin_types[(int) ENUM] \
+    = build_function_type \
+      (builtin_types[(int) RETURN], \
+       tree_cons (NULL_TREE, \
+  builtin_types[(int) ARG1], \
+  tree_cons (NULL_TREE, \
+     builtin_types[(int) ARG2], \
+     tree_cons \
+     (NULL_TREE, \
+      builtin_types[(int) ARG3], \
+      tree_cons (NULL_TREE, \
+ builtin_types[(int) ARG4], \
+ void_list_node)))));
+#define DEF_FUNCTION_TYPE_5(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5) \
+  builtin_types[(int) ENUM] \
+    = build_function_type \
+      (builtin_types[(int) RETURN], \
+       tree_cons (NULL_TREE, \
+  builtin_types[(int) ARG1], \
+  tree_cons (NULL_TREE, \
+     builtin_types[(int) ARG2], \
+     tree_cons \
+     (NULL_TREE, \
+      builtin_types[(int) ARG3], \
+      tree_cons (NULL_TREE, \
+ builtin_types[(int) ARG4], \
+ tree_cons (NULL_TREE, \
+      builtin_types[(int) ARG5],\
+      void_list_node))))));
+#define DEF_FUNCTION_TYPE_6(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
+    ARG6) \
+  builtin_types[(int) ENUM] \
+    = build_function_type \
+      (builtin_types[(int) RETURN], \
+       tree_cons (NULL_TREE, \
+  builtin_types[(int) ARG1], \
+  tree_cons (NULL_TREE, \
+     builtin_types[(int) ARG2], \
+     tree_cons \
+     (NULL_TREE, \
+      builtin_types[(int) ARG3], \
+      tree_cons \
+      (NULL_TREE, \
+       builtin_types[(int) ARG4], \
+       tree_cons (NULL_TREE, \
+ builtin_types[(int) ARG5], \
+ tree_cons (NULL_TREE, \
+      builtin_types[(int) ARG6],\
+      void_list_node)))))));
+#define DEF_FUNCTION_TYPE_7(ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, \
+    ARG6, ARG7) \
+  builtin_types[(int) ENUM] \
+    = build_function_type \
+      (builtin_types[(int) RETURN], \
+       tree_cons (NULL_TREE, \
+  builtin_types[(int) ARG1], \
+  tree_cons (NULL_TREE, \
+     builtin_types[(int) ARG2], \
+     tree_cons \
+     (NULL_TREE, \
+      builtin_types[(int) ARG3], \
+      tree_cons \
+      (NULL_TREE, \
+       builtin_types[(int) ARG4], \
+       tree_cons (NULL_TREE, \
+ builtin_types[(int) ARG5], \
+ tree_cons (NULL_TREE, \
+      builtin_types[(int) ARG6],\
+ tree_cons (NULL_TREE, \
+      builtin_types[(int) ARG6], \
+      void_list_node))))))));
+#define DEF_FUNCTION_TYPE_VAR_0(ENUM, RETURN) \
+  builtin_types[(int) ENUM] \
+    = build_function_type (builtin_types[(int) RETURN], NULL_TREE);
+#define DEF_POINTER_TYPE(ENUM, TYPE) \
+  builtin_types[(int) ENUM] \
+    = build_pointer_type (builtin_types[(int) TYPE]);
+#include "types.def"
+#undef DEF_PRIMITIVE_TYPE
+#undef DEF_FUNCTION_TYPE_1
+#undef DEF_FUNCTION_TYPE_2
+#undef DEF_FUNCTION_TYPE_3
+#undef DEF_FUNCTION_TYPE_4
+#undef DEF_FUNCTION_TYPE_5
+#undef DEF_FUNCTION_TYPE_6
+#undef DEF_FUNCTION_TYPE_VAR_0
+#undef DEF_POINTER_TYPE
+  builtin_types[(int) BT_LAST] = NULL_TREE;
+
+  /* Initialize synchronization builtins.  */
+#undef DEF_SYNC_BUILTIN
+#define DEF_SYNC_BUILTIN(code, name, type, attr) \
+    gfc_define_builtin (name, builtin_types[type], code, name, \
+ attr == ATTR_CONST_NOTHROW_LIST);
+#include "../sync-builtins.def"
+#undef DEF_SYNC_BUILTIN
+
+  if (gfc_option.flag_openmp)
+    {
+#undef DEF_GOMP_BUILTIN
+#define DEF_GOMP_BUILTIN(code, name, type, attr) \
+    gfc_define_builtin ("__builtin_" name, builtin_types[type], \
+ code, name, attr == ATTR_CONST_NOTHROW_LIST);
+#include "../omp-builtins.def"
+#undef DEF_GOMP_BUILTIN
+    }
+
   build_common_builtin_nodes ();
   targetm.init_builtins ();
 }
--- gcc/fortran/Make-lang.in.jj 2005-09-20 10:25:18.000000000 +0200
+++ gcc/fortran/Make-lang.in 2005-09-23 15:16:20.000000000 +0200
@@ -281,7 +281,8 @@ GFORTRAN_TRANS_DEPS = fortran/gfortran.h
     $(CONFIG_H) $(SYSTEM_H) $(TREE_H) $(TM_H) coretypes.h $(GGC_H)
 
 fortran/f95-lang.o: $(GFORTRAN_TRANS_DEPS) fortran/mathbuiltins.def \
-  gt-fortran-f95-lang.h gtype-fortran.h cgraph.h $(TARGET_H)
+  gt-fortran-f95-lang.h gtype-fortran.h cgraph.h $(TARGET_H) \
+  $(BUILTINS_DEF) fortran/types.def
 fortran/convert.o: $(GFORTRAN_TRANS_DEPS)
 fortran/trans.o: $(GFORTRAN_TRANS_DEPS)
 fortran/trans-decl.o: $(GFORTRAN_TRANS_DEPS) gt-fortran-trans-decl.h \
--- gcc/fortran/types.def.jj 2005-09-23 12:53:31.000000000 +0200
+++ gcc/fortran/types.def 2005-09-23 13:56:19.000000000 +0200
@@ -0,0 +1,125 @@
+/* Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING.  If not, write to the Free
+Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301, USA.  */
+
+/* This header contains a subset of ../builtin-types.def needed for
+   Fortran frontend builtins.
+
+   Before including this header, you must define the following macros:
+
+   DEF_PRIMITIVE_TYPE (ENUM, TYPE)
+
+     The ENUM is an identifier indicating which type is being defined.
+     TYPE is an expression for a `tree' that represents the type.
+
+   DEF_FUNCTION_TYPE_0 (ENUM, RETURN)
+   DEF_FUNCTION_TYPE_1 (ENUM, RETURN, ARG1)
+   DEF_FUNCTION_TYPE_2 (ENUM, RETURN, ARG1, ARG2)
+   DEF_FUNCTION_TYPE_3 (ENUM, RETURN, ARG1, ARG2, ARG3)
+   DEF_FUNCTION_TYPE_4 (ENUM, RETURN, ARG1, ARG2, ARG3, ARG4)
+   DEF_FUNCTION_TYPE_5 (ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5)
+   DEF_FUNCTION_TYPE_6 (ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6)
+   DEF_FUNCTION_TYPE_7 (ENUM, RETURN, ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7)
+
+     These macros describe function types.  ENUM is as above.  The
+     RETURN type is one of the enumerals already defined.  ARG1, ARG2,
+     and ARG3 give the types of the arguments, similarly.
+
+   DEF_FUNCTION_TYPE_VAR_0 (ENUM, RETURN)
+
+     Similar, but for function types that take variable arguments.
+
+  DEF_POINTER_TYPE (ENUM, TYPE)
+
+    This macro describes a pointer type.  ENUM is as above; TYPE is
+    the type pointed to.  */
+
+DEF_PRIMITIVE_TYPE (BT_VOID, void_type_node)
+DEF_PRIMITIVE_TYPE (BT_BOOL, boolean_type_node)
+DEF_PRIMITIVE_TYPE (BT_INT, integer_type_node)
+DEF_PRIMITIVE_TYPE (BT_UINT, unsigned_type_node)
+DEF_PRIMITIVE_TYPE (BT_LONG, long_integer_type_node)
+
+DEF_PRIMITIVE_TYPE (BT_I1, builtin_type_for_size (BITS_PER_UNIT*1, 1))
+DEF_PRIMITIVE_TYPE (BT_I2, builtin_type_for_size (BITS_PER_UNIT*2, 1))
+DEF_PRIMITIVE_TYPE (BT_I4, builtin_type_for_size (BITS_PER_UNIT*4, 1))
+DEF_PRIMITIVE_TYPE (BT_I8, builtin_type_for_size (BITS_PER_UNIT*8, 1))
+
+DEF_PRIMITIVE_TYPE (BT_PTR, ptr_type_node)
+DEF_PRIMITIVE_TYPE (BT_CONST_PTR, const_ptr_type_node)
+DEF_PRIMITIVE_TYPE (BT_VOLATILE_PTR,
+                    build_pointer_type
+                     (build_qualified_type (void_type_node,
+                                            TYPE_QUAL_VOLATILE)))
+
+DEF_POINTER_TYPE (BT_PTR_LONG, BT_LONG)
+DEF_POINTER_TYPE (BT_PTR_PTR, BT_PTR)
+DEF_FUNCTION_TYPE_0 (BT_FN_BOOL, BT_BOOL)
+DEF_FUNCTION_TYPE_0 (BT_FN_PTR, BT_PTR)
+DEF_FUNCTION_TYPE_0 (BT_FN_INT, BT_INT)
+DEF_FUNCTION_TYPE_0 (BT_FN_UINT, BT_UINT)
+DEF_FUNCTION_TYPE_0 (BT_FN_VOID, BT_VOID)
+
+DEF_FUNCTION_TYPE_1 (BT_FN_VOID_PTR, BT_VOID, BT_PTR)
+DEF_FUNCTION_TYPE_1 (BT_FN_VOID_PTRPTR, BT_VOID, BT_PTR_PTR)
+DEF_FUNCTION_TYPE_1 (BT_FN_VOID_VPTR, BT_VOID, BT_VOLATILE_PTR)
+
+DEF_POINTER_TYPE (BT_PTR_FN_VOID_PTR, BT_FN_VOID_PTR)
+
+DEF_FUNCTION_TYPE_2 (BT_FN_BOOL_LONGPTR_LONGPTR,
+                     BT_BOOL, BT_PTR_LONG, BT_PTR_LONG)
+DEF_FUNCTION_TYPE_2 (BT_FN_I1_VPTR_I1, BT_I1, BT_VOLATILE_PTR, BT_I1)
+DEF_FUNCTION_TYPE_2 (BT_FN_I2_VPTR_I2, BT_I2, BT_VOLATILE_PTR, BT_I2)
+DEF_FUNCTION_TYPE_2 (BT_FN_I4_VPTR_I4, BT_I4, BT_VOLATILE_PTR, BT_I4)
+DEF_FUNCTION_TYPE_2 (BT_FN_I8_VPTR_I8, BT_I8, BT_VOLATILE_PTR, BT_I8)
+DEF_FUNCTION_TYPE_2 (BT_FN_VOID_UINT_UINT, BT_VOID, BT_UINT, BT_UINT)
+
+DEF_FUNCTION_TYPE_3 (BT_FN_BOOL_VPTR_I1_I1, BT_BOOL, BT_VOLATILE_PTR,
+                     BT_I1, BT_I1)
+DEF_FUNCTION_TYPE_3 (BT_FN_BOOL_VPTR_I2_I2, BT_BOOL, BT_VOLATILE_PTR,
+                     BT_I2, BT_I2)
+DEF_FUNCTION_TYPE_3 (BT_FN_BOOL_VPTR_I4_I4, BT_BOOL, BT_VOLATILE_PTR,
+                     BT_I4, BT_I4)
+DEF_FUNCTION_TYPE_3 (BT_FN_BOOL_VPTR_I8_I8, BT_BOOL, BT_VOLATILE_PTR,
+                     BT_I8, BT_I8)
+DEF_FUNCTION_TYPE_3 (BT_FN_I1_VPTR_I1_I1, BT_I1, BT_VOLATILE_PTR, BT_I1, BT_I1)
+DEF_FUNCTION_TYPE_3 (BT_FN_I2_VPTR_I2_I2, BT_I2, BT_VOLATILE_PTR, BT_I2, BT_I2)
+DEF_FUNCTION_TYPE_3 (BT_FN_I4_VPTR_I4_I4, BT_I4, BT_VOLATILE_PTR, BT_I4, BT_I4)
+DEF_FUNCTION_TYPE_3 (BT_FN_I8_VPTR_I8_I8, BT_I8, BT_VOLATILE_PTR, BT_I8, BT_I8)
+DEF_FUNCTION_TYPE_3 (BT_FN_VOID_OMPFN_PTR_UINT, BT_VOID, BT_PTR_FN_VOID_PTR,
+                     BT_PTR, BT_UINT)
+
+DEF_FUNCTION_TYPE_4 (BT_FN_VOID_OMPFN_PTR_UINT_UINT,
+                     BT_VOID, BT_PTR_FN_VOID_PTR, BT_PTR, BT_UINT, BT_UINT)
+
+DEF_FUNCTION_TYPE_5 (BT_FN_BOOL_LONG_LONG_LONG_LONGPTR_LONGPTR,
+                     BT_BOOL, BT_LONG, BT_LONG, BT_LONG,
+     BT_PTR_LONG, BT_PTR_LONG)
+
+DEF_FUNCTION_TYPE_6 (BT_FN_BOOL_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR,
+                     BT_BOOL, BT_LONG, BT_LONG, BT_LONG, BT_LONG,
+     BT_PTR_LONG, BT_PTR_LONG)
+DEF_FUNCTION_TYPE_6 (BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG,
+                     BT_VOID, BT_PTR_FN_VOID_PTR, BT_PTR, BT_UINT,
+                     BT_LONG, BT_LONG, BT_LONG)
+
+DEF_FUNCTION_TYPE_7 (BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_LONG,
+                     BT_VOID, BT_PTR_FN_VOID_PTR, BT_PTR, BT_UINT,
+                     BT_LONG, BT_LONG, BT_LONG, BT_LONG)
+
+DEF_FUNCTION_TYPE_VAR_0 (BT_FN_VOID_VAR, BT_VOID)


        Jakub
Reply | Threaded
Open this post in threaded view
|

Re: [gomp] implement a handfull of easy directives

Richard Henderson-2
On Fri, Sep 23, 2005 at 09:30:36AM -0400, Jakub Jelinek wrote:
> I can't include whole ../builtin-types.def, as it contains a bunch of
> {,ObjC}C{,++} specific types, so fortran/types.def contains just those
> needed ATM.

Ok.

> If Ian has something later on, it can be replaced.
>
> Ok?

Ok.


r~
Reply | Threaded
Open this post in threaded view
|

Re: [gomp] implement a handfull of easy directives

Richard Kenner
In reply to this post by Richard Henderson-2
    Or if Ian wants to rearrange everything with his improved mechanism,
    and so that it can be used by non-C front ends at the same time, that
    would be cool too.

I would certainly find that useful.  On my plate for a long time has been
making as many builtins as possible visible to Ada.