Index: libcfa/src/concurrency/invoke.c
===================================================================
--- libcfa/src/concurrency/invoke.c	(revision 9b34766037fcf6a9e66504724d599e583522b849)
+++ libcfa/src/concurrency/invoke.c	(revision 9705ffe96ab9ff98f4aaff4e51429c62e3f827c2)
@@ -10,6 +10,6 @@
 // Created On       : Tue Jan 17 12:27:26 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Feb  9 16:37:42 2018
-// Update Count     : 5
+// Last Modified On : Thu Aug 20 18:54:34 2020
+// Update Count     : 30
 //
 
@@ -109,9 +109,9 @@
 
 	struct FakeStack {
-	    void *fixedRegisters[3];              // fixed registers ebx, edi, esi (popped on 1st uSwitch, values unimportant)
-	    void *rturn;                          // where to go on return from uSwitch
-	    void *dummyReturn;                    // fake return compiler would have pushed on call to uInvoke
-	    void *argument[3];                    // for 16-byte ABI, 16-byte alignment starts here
-	    void *padding;                        // padding to force 16-byte alignment, as "base" is 16-byte aligned
+	    void *fixedRegisters[3];						// fixed registers ebx, edi, esi (popped on 1st uSwitch, values unimportant)
+	    void *rturn;									// where to go on return from uSwitch
+	    void *dummyReturn;								// fake return compiler would have pushed on call to uInvoke
+	    void *argument[3];								// for 16-byte ABI, 16-byte alignment starts here
+	    void *padding;									// padding to force 16-byte alignment, as "base" is 16-byte aligned
 	};
 
@@ -122,6 +122,6 @@
 
 	fs->dummyReturn = NULL;
-	fs->argument[0] = main;     // argument to invoke
-	fs->argument[1] = this;     // argument to invoke
+	fs->argument[0] = main;								// argument to invoke
+	fs->argument[1] = this;								// argument to invoke
 	fs->rturn = invoke;
 
@@ -129,11 +129,11 @@
 
 	struct FakeStack {
-		void *fixedRegisters[5];            // fixed registers rbx, r12, r13, r14, r15
-		void *rturn;                        // where to go on return from uSwitch
-		void *dummyReturn;                  // NULL return address to provide proper alignment
+		void *fixedRegisters[5];						// fixed registers rbx, r12, r13, r14, r15
+		void *rturn;									// where to go on return from uSwitch
+		void *dummyReturn;								// NULL return address to provide proper alignment
 	};
 
 	cor->context.SP = (char *)stack->base - sizeof( struct FakeStack );
-	cor->context.FP = NULL;		// terminate stack with NULL fp
+	cor->context.FP = NULL;								// terminate stack with NULL fp
 
 	struct FakeStack *fs = (struct FakeStack *)cor->context.SP;
@@ -141,14 +141,14 @@
 	fs->dummyReturn = NULL;
 	fs->rturn = __cfactx_invoke_stub;
-	fs->fixedRegisters[0] = main;
-	fs->fixedRegisters[1] = this;
+	fs->fixedRegisters[0] = main;						// argument to invoke
+	fs->fixedRegisters[1] = this;						// argument to invoke
 	fs->fixedRegisters[2] = invoke;
 
-#elif defined( __ARM_ARCH )
-#error ARM needs to be upgrade to use to parameters like X86/X64 (A.K.A. : I broke this and do not know how to fix it)
+#elif defined( __ARM_ARCH_32 )
+#warning ARM needs to be upgrade to use two parameters like X86/X64 (A.K.A. : I broke this and do not know how to fix it)
 	struct FakeStack {
-		float fpRegs[16];			// floating point registers
-		void *intRegs[9];			// integer/pointer registers
-		void *arg[2];				// placeholder for this pointer
+		float fpRegs[16];								// floating point registers
+		void * intRegs[9];								// integer/pointer registers
+		void * arg[2];									// placeholder for this pointer
 	};
 
@@ -162,4 +162,21 @@
 	fs->arg[1] = invoke;
 
+#elif defined( __ARM_ARCH )
+	struct FakeStack {
+		void * intRegs[12];								// x19-x30 integer registers
+		double fpRegs[8];								// v8-v15 floating point
+	};
+
+	cor->context.SP = (char *)stack->base - sizeof( struct FakeStack );
+	cor->context.FP = NULL;
+
+	struct FakeStack *fs = (struct FakeStack *)cor->context.SP;
+
+	fs->intRegs[0] = main;								// argument to invoke x19 => x0
+	fs->intRegs[1] = this;								// argument to invoke x20 => x1
+	fs->intRegs[2] = invoke;
+    //for ( intptr_t i = 3; i < 12; i += 1 ) fs->intRegs[i] = (void *)i;
+	fs->intRegs[11] = __cfactx_invoke_stub;				// link register x30 => ret moves to pc
+    //for ( int i = 0; i < 8; i += 1 ) fs->fpRegs[i] = i + 12;
 #else
 	#error uknown hardware architecture
