[Openmp-commits] [PATCH] D138704: RFC: [openmp] Provide an assembly implementation of __kmp_invoke_microtask on ARM
    David Spickett via Phabricator via Openmp-commits 
    openmp-commits at lists.llvm.org
       
    Fri Nov 25 07:29:02 PST 2022
    
    
  
DavidSpickett added a comment.
Not trying to end up with more comments than assembly, but it might be the easiest way to do it :)
================
Comment at: openmp/runtime/src/z_Linux_asm.S:1429
+
+	// Pushing one extra register to keep the stack aligned
+	push	{r3-r11,lr}
----------------
You might want to add "for when we call pkfn below".
Since AAPCS32 says align to 4, unless at a public interface where it should be 8. Which includes calling a function.
(which evidently you knew but I did not)
Also worth saying which is the extra register.
================
Comment at: openmp/runtime/src/z_Linux_asm.S:1431
+	push	{r3-r11,lr}
+	ldrd    r4, r5, [sp, #10*4]
+
----------------
What does this load? I think p_argv and exit_frame.
================
Comment at: openmp/runtime/src/z_Linux_asm.S:1452
+	sub	sp, sp, r5, lsl #3
+	sub	r3, r3, #1
+
----------------
r3 is the arg count. So I think you are rounding up for the case where the count is an odd number, which would leave sp at 4 byte alignment? But if that's the case why do you then multiply by 8 not 4.
Because you divided by 2 in the first place? Making the calculation produce a number of 8 byte slots not 4?
Tell me where I'm going wrong there.
================
Comment at: openmp/runtime/src/z_Linux_asm.S:1465
+
+	cmp	r5, #0
+	beq	KMP_LABEL(kmp_1)
----------------
This section you doing:
```
while (argc != 0) {
   copy and argument to the stack
   argc--
}
call pkfn
```
Correct?
================
Comment at: openmp/runtime/src/z_Linux_asm.S:1467
+	beq	KMP_LABEL(kmp_1)
+	ldr	r2, [r6]
+
----------------
What does this `ldr r2` and the `ldr r3` below setup?
================
Comment at: openmp/runtime/src/z_Linux_asm.S:2062
     .size __kmp_unnamed_critical_addr,4
+#endif
 #endif /* KMP_ARCH_ARM */
----------------
And this is an elf/coff difference? No need for a equivalent coff line?
Repository:
  rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D138704/new/
https://reviews.llvm.org/D138704
    
    
More information about the Openmp-commits
mailing list