This patch set adds a BRIG (HSAIL) frontend. It can be used as a core for an HSAIL finalizer implementation for processors with gcc backends.
It is a bit unusual frontend as the consumed format is a binary representation. The textual HSAIL can be compiled to it with a separate assembler. The frontend has been mostly tested with the HSA PRM conformance suite which it now passes. The accompanied GENERIC-scanning test suite is supposed to be only a smoke test. libhsail-rt implements HSAIL specific builtins and includes a simple runtime that implements SPMD execution via either Pth-based fibers or loops to execute multiple work-item work groups without SPMD/SIMD-default hardware. I've split it to 4 patches: 001 - the configuration file changes and misc. 002 - the frontend itself 003 - libhsail-rt 004 - the smoke test suite The diffstat is as follows: Makefile.def | 3 + Makefile.in | 489 + configure | 1 + configure.ac | 1 + gcc/brig/Make-lang.in | 246 + gcc/brig/brig-c.h | 68 + gcc/brig/brig-lang.c | 461 + gcc/brig/brigfrontend/brig-arg-block-handler.cc | 67 + gcc/brig/brigfrontend/brig-atomic-inst-handler.cc | 377 + gcc/brig/brigfrontend/brig-basic-inst-handler.cc | 732 + gcc/brig/brigfrontend/brig-branch-inst-handler.cc | 217 + gcc/brig/brigfrontend/brig-cmp-inst-handler.cc | 212 + gcc/brig/brigfrontend/brig-code-entry-handler.cc | 2319 +++ gcc/brig/brigfrontend/brig-code-entry-handler.h | 449 + gcc/brig/brigfrontend/brig-comment-handler.cc | 39 + gcc/brig/brigfrontend/brig-control-handler.cc | 29 + .../brigfrontend/brig-copy-move-inst-handler.cc | 56 + gcc/brig/brigfrontend/brig-cvt-inst-handler.cc | 249 + gcc/brig/brigfrontend/brig-fbarrier-handler.cc | 44 + gcc/brig/brigfrontend/brig-function-handler.cc | 373 + gcc/brig/brigfrontend/brig-function.cc | 698 + gcc/brig/brigfrontend/brig-function.h | 216 + gcc/brig/brigfrontend/brig-inst-mod-handler.cc | 168 + gcc/brig/brigfrontend/brig-label-handler.cc | 37 + gcc/brig/brigfrontend/brig-lane-inst-handler.cc | 82 + gcc/brig/brigfrontend/brig-machine.c | 37 + gcc/brig/brigfrontend/brig-machine.h | 35 + gcc/brig/brigfrontend/brig-mem-inst-handler.cc | 180 + gcc/brig/brigfrontend/brig-module-handler.cc | 30 + gcc/brig/brigfrontend/brig-queue-inst-handler.cc | 92 + gcc/brig/brigfrontend/brig-seg-inst-handler.cc | 133 + gcc/brig/brigfrontend/brig-signal-inst-handler.cc | 42 + gcc/brig/brigfrontend/brig-util.cc | 347 + gcc/brig/brigfrontend/brig-util.h | 49 + gcc/brig/brigfrontend/brig-variable-handler.cc | 255 + gcc/brig/brigfrontend/brig_to_generic.cc | 773 + gcc/brig/brigfrontend/brig_to_generic.h | 245 + gcc/brig/brigfrontend/phsa.h | 40 + gcc/brig/brigspec.c | 193 + gcc/brig/config-lang.in | 41 + gcc/brig/lang-specs.h | 28 + gcc/brig/lang.opt | 41 + gcc/testsuite/brig.dg/README | 10 + gcc/testsuite/brig.dg/dg.exp | 27 + gcc/testsuite/brig.dg/test/gimple/alloca.hsail | 37 + gcc/testsuite/brig.dg/test/gimple/atomics.hsail | 33 + gcc/testsuite/brig.dg/test/gimple/branches.hsail | 58 + gcc/testsuite/brig.dg/test/gimple/fbarrier.hsail | 74 + .../brig.dg/test/gimple/function_calls.hsail | 59 + gcc/testsuite/brig.dg/test/gimple/mem.hsail | 39 + gcc/testsuite/brig.dg/test/gimple/mulhi.hsail | 33 + gcc/testsuite/brig.dg/test/gimple/packed.hsail | 78 + .../brig.dg/test/gimple/smoke_test.hsail | 91 + gcc/testsuite/brig.dg/test/gimple/variables.hsail | 124 + gcc/testsuite/brig.dg/test/gimple/vector.hsail | 57 + gcc/testsuite/lib/brig-dg.exp | 29 + gcc/testsuite/lib/brig.exp | 40 + include/hsa-interface.h | 630 + libhsail-rt/Makefile.am | 123 + libhsail-rt/Makefile.in | 721 + libhsail-rt/README | 4 + libhsail-rt/aclocal.m4 | 979 + libhsail-rt/config.h.in | 217 + libhsail-rt/configure | 17162 ++++++++++++++++++ libhsail-rt/configure.ac | 150 + libhsail-rt/include/internal/phsa-rt.h | 97 + .../include/internal/phsa_queue_interface.h | 60 + libhsail-rt/include/internal/workitems.h | 103 + libhsail-rt/m4/libtool.m4 | 7997 ++++++++ libhsail-rt/m4/ltoptions.m4 | 384 + libhsail-rt/m4/ltsugar.m4 | 123 + libhsail-rt/m4/ltversion.m4 | 23 + libhsail-rt/m4/lt~obsolete.m4 | 98 + libhsail-rt/m4/pth.m4 | 402 + libhsail-rt/rt/arithmetic.c | 374 + libhsail-rt/rt/atomics.c | 115 + libhsail-rt/rt/bitstring.c | 188 + libhsail-rt/rt/fbarrier.c | 100 + libhsail-rt/rt/fp16.c | 146 + libhsail-rt/rt/misc.c | 86 + libhsail-rt/rt/multimedia.c | 128 + libhsail-rt/rt/queue.c | 71 + libhsail-rt/rt/sat_arithmetic.c | 305 + libhsail-rt/rt/segment.c | 57 + libhsail-rt/rt/workitems.c | 928 + 85 files changed, 42754 insertions(+) BR, -- Pekka Jääskeläinen Parmance