Browse Source

arc: add asm macros

Add a header file with assembler macros to be able to handle in one
place the differences between ARCv2 and ARCv3 ISAs. It is a preparatory
step before the introduction of support for ARCv3 CPUs.

Signed-off-by: Sergey Matyukevich <sergey.matyukevich@synopsys.com>
Signed-off-by: Pavel Kozlov <pavel.kozlov@synopsys.com>
Sergey Matyukevich 2 years ago
parent
commit
a7c587f5cd
2 changed files with 51 additions and 22 deletions
  1. 23 22
      ldso/ldso/arc/resolve.S
  2. 28 0
      libc/sysdeps/linux/arc/asm.h

+ 23 - 22
ldso/ldso/arc/resolve.S

@@ -4,6 +4,7 @@
  * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
  */
 
+#include <asm.h>
 #include <sysdep.h>
 #include <sys/syscall.h>
 
@@ -12,30 +13,30 @@
 ; 	r10-r12 are already clobbered by PLTn, PLT0 thus neednot be saved
 
 .macro	SAVE_CALLER_SAVED
-	push_s	r0
-	push_s	r1
-	push_s	r2
-	push_s	r3
-	st.a	r4, [sp, -4]
-	st.a	r5, [sp, -4]
-	st.a	r6, [sp, -4]
-	st.a	r7, [sp, -4]
-	st.a	r8, [sp, -4]
-	st.a	r9, [sp, -4]
-	push_s	blink
+	PUSHR_S	r0
+	PUSHR_S	r1
+	PUSHR_S	r2
+	PUSHR_S	r3
+	PUSHR	r4
+	PUSHR	r5
+	PUSHR	r6
+	PUSHR	r7
+	PUSHR	r8
+	PUSHR	r9
+	PUSHR_S	blink
 .endm
 
 .macro RESTORE_CALLER_SAVED_BUT_R0
-	ld.ab	blink,[sp, 4]
-	ld.ab	r9, [sp, 4]
-	ld.ab	r8, [sp, 4]
-	ld.ab	r7, [sp, 4]
-	ld.ab	r6, [sp, 4]
-	ld.ab	r5, [sp, 4]
-	ld.ab	r4, [sp, 4]
-	pop_s   r3
-	pop_s   r2
-	pop_s   r1
+	POPR	blink
+	POPR	r9
+	POPR	r8
+	POPR	r7
+	POPR	r6
+	POPR	r5
+	POPR	r4
+	POPR_S	r3
+	POPR_S	r2
+	POPR_S	r1
 .endm
 
 ; Upon entry, PLTn, which led us here, sets up the following regs
@@ -53,5 +54,5 @@ ENTRY(_dl_linux_resolve)
 
 	RESTORE_CALLER_SAVED_BUT_R0
 	j_s.d   [r0]    ; r0 has resolved function addr
-	pop_s   r0      ; restore first arg to resolved call
+	POPR_S	r0      ; restore first arg to resolved call
 END(_dl_linux_resolve)

+ 28 - 0
libc/sysdeps/linux/arc/asm.h

@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2022, Synopsys, Inc. (www.synopsys.com)
+ *
+ * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
+ */
+
+#ifndef _ARC_ASM_H
+#define _ARC_ASM_H
+
+
+.macro PUSHR reg
+	push	\reg
+.endm
+
+.macro PUSHR_S reg
+	push_s	\reg
+.endm
+
+.macro POPR reg
+	pop	\reg
+.endm
+
+.macro POPR_S reg
+	pop_s	\reg
+.endm
+
+
+#endif /* _ARC_ASM_H  */