Import VBCC source snapshot (29/04/2022)
diff --git a/doc/vbccvidcore.texi b/doc/vbccvidcore.texi
new file mode 100644
index 0000000..64430c6
--- /dev/null
+++ b/doc/vbccvidcore.texi
@@ -0,0 +1,157 @@
+This chapter documents the Backend for the VideoCore IV processor family.
+
+The backend is in a very early stage, it is not complete, and it can not
+yet be considered useful!
+
+Also note that it is based on freely available, unofficial, and possibly
+incorrect information on the target processor.
+
+@section Additional options for this version
+
+This backend provides the following additional options:
+
+@table @option
+
+    @item -short-double
+
+                Use native 32bit floating point for double and long double.
+                This is much more efficient, but not ISO C conforming.
+
+    @item -one-section
+
+                Put all code and data in the same section (.text).
+
+
+    @item -no-delayed-popping
+
+                By default arguments of function calls are not always popped
+                from the stack immediately after the call, so that the
+                arguments of several calls may be popped at once.
+                With this option @command{vbcc} can be forced to pop them after every
+                function call.
+                This may simplify debugging and reduce the
+                stack size needed by the compiled program.
+
+    @item -no-peephole
+
+                Disable most backend peephole optimizations.
+                Just for testing.
+
+    @item -noext-regs
+
+                Do not use registers r16-r23. Just for testing.
+
+    @item -cond-limit=<n>
+
+                Set the limit (in number of intermediate code instructions)
+                for the length of code-sequences considered for conditional
+                execution (default: 2).
+
+
+@end table
+
+@section ABI
+
+        This backend supports the following registers:
+
+        @itemize @minus
+        @item @code{r0} through @code{r31} for the general purpose registers
+        @end itemize
+
+        Additionally, the register pairs @code{r0/r1} @code{r2/r3, r4/r5, r6/r7, r8/r9,
+        r10/r11, r12/r13, r14/r15,
+        r16/r17, r18/r19, r20/r21, r22/r23} are
+        available.
+
+        @code{r14, r15, r24-r31} are currently reserved by the
+        backend.
+
+        
+
+    The current version generates assembly output for use with @file{vasm}.
+
+
+    The registers r0-r5 and r14-r15 are used as scratch registers
+    (i.e. they can be destroyed in function calls), all other registers are
+    preserved. r25 is the stack-pointer.
+
+    The first 6 function arguments which have integer, float32 or pointer types
+    are passed in registers r0 through r5. All other arguments
+    are passed on the stack.
+
+    Integers, float32 and pointers are returned in r0.
+    All other types are returned by passing the function the address
+    of the result as a hidden argument - so when you call such a function
+    without a proper declaration in scope you can expect a crash.
+
+    The elementary data types are represented like:
+
+    @example
+    type        size in bits        alignment in bytes
+
+    char                8                       1 
+    short              16                       2 
+    int                32                       4 
+    long               32                       4 
+    long long          64                       8    not yet supported
+    all pointers       32                       4 
+    float              32                       4 
+    double             64 (32)                  4 
+    long double        64 (32)                  4
+    @end example
+
+@section Target-specific variable-attributes
+
+    The vidcore-backend offers the following variable-attributes:
+
+@table @code
+
+    @item __section("name","attr")
+                 Place this function/object in section "name" with
+                 attributes "attr".
+@end table
+
+
+@section Target-specific pragmas
+
+    The vidcore-backend offers the following #pragmas:
+
+@table @code
+
+       @item none at the moment...
+
+@end table
+
+@section Predefined Macros
+
+        This backend defines the following macros:
+
+@table @code
+        @item __VIDEOCORE__
+
+        @item __SHORT_DOUBLE__ (if -short-double is used)        
+@end table
+
+@section Stdarg
+
+stdarg-implementation is not yet fully working. One restriction is that
+when calling a varargs function, the prototype must be in scope (this is
+ISO C conforming). Another one is that the stdarg-macros only work as
+long as all fixed arguments are passed in registers.
+
+This will be fixed in the future.
+
+
+@section Known problems
+
+@itemize @minus
+         @item no support for long long
+         @item no support for 64bit floating point
+         @item stdarg problems mentioned above
+         @item suboptimal code quality
+         @item ...
+@end itemize
+
+
+
+