1 /*
2  * Copyright (C) 2022, Synopsys, Inc. (www.synopsys.com)
3  *
4  * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
5  */
6 
7 #ifndef _ARC_ASM_H
8 #define _ARC_ASM_H
9 
10 /*
11  * Some 16-bit instructions were excluded from the ARCv3 ISA
12  * the following macros are introduced to handle these changes in one place.
13  * This will allow not to change existing ARCv2 code and use 16-bit versions
14  * of instructions for ARCv2 and replace them with 32-bit vesrions for ARCv3
15  */
16 
17 #if defined (__ARC64_ARCH32__)
18 
19 .macro PUSHR reg
20 	push	\reg
21 .endm
22 
23 .macro PUSHR_S reg
24 	push	\reg
25 .endm
26 
27 .macro POPR reg
28 	pop	\reg
29 .endm
30 
31 .macro POPR_S reg
32 	pop	\reg
33 .endm
34 
35 .macro SUBR_S dst,src1,src2
36 	sub	\dst, \src1, \src2
37 .endm
38 
39 .macro ADDR_S dst,src1,src2
40 	add	\dst, \src1, \src2
41 .endm
42 
43 .macro ASRR_S dst,src1,src2
44 	asr	\dst, \src1, \src2
45 .endm
46 
47 .macro ASLR_S dst,src1,src2
48 	asl	\dst, \src1, \src2
49 .endm
50 
51 #elif defined (__ARC64_ARCH64__)
52 
53 # error ARCv3 64-bit is not supported by uClibc-ng
54 
55 #else /* ARCHS || ARC700 */
56 
57 .macro PUSHR reg
58 	push	\reg
59 .endm
60 
61 .macro PUSHR_S reg
62 	push_s	\reg
63 .endm
64 
65 .macro POPR reg
66 	pop	\reg
67 .endm
68 
69 .macro POPR_S reg
70 	pop_s	\reg
71 .endm
72 
73 .macro SUBR_S dst,src1,src2
74 	sub_s	\dst, \src1, \src2
75 .endm
76 
77 .macro ADDR_S dst,src1,src2
78 	add_s	\dst, \src1, \src2
79 .endm
80 
81 .macro ASRR_S dst,src1,src2
82 	asr_s	\dst, \src1, \src2
83 .endm
84 
85 .macro ASLR_S dst,src1,src2
86 	asl_s	\dst, \src1, \src2
87 .endm
88 
89 #endif
90 
91 #endif /* _ARC_ASM_H  */
92