1
2
3
4
5
6
7#ifndef _XTENSA_ASMMACRO_H
8#define _XTENSA_ASMMACRO_H
9
10#include <asm/arch/core.h>
11
12
13
14
15
16#if defined(__XTENSA_WINDOWED_ABI__)
17#define abi_entry entry sp, 16
18#define abi_ret retw
19#elif defined(__XTENSA_CALL0_ABI__)
20#define abi_entry
21#define abi_ret ret
22#else
23#error Unsupported Xtensa ABI
24#endif
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55#if XCHAL_HAVE_LOOPS
56
57.macro __loopi ar, at, size, incr
58 movi \at, ((\size + \incr - 1) / (\incr))
59 loop \at, 99f
60.endm
61
62
63.macro __loops ar, as, at, incr_log2, mask_log2, cond, ncond
64 .ifgt \incr_log2 - 1
65 addi \at, \as, (1 << \incr_log2) - 1
66 .ifnc \mask_log2,
67 extui \at, \at, \incr_log2, \mask_log2
68 .else
69 srli \at, \at, \incr_log2
70 .endif
71 .endif
72 loop\cond \at, 99f
73.endm
74
75
76.macro __loopt ar, as, at, incr_log2
77 sub \at, \as, \ar
78 .ifgt \incr_log2 - 1
79 addi \at, \at, (1 << \incr_log2) - 1
80 srli \at, \at, \incr_log2
81 .endif
82 loop \at, 99f
83.endm
84
85
86.macro __loop as
87 loop \as, 99f
88.endm
89
90
91.macro __endl ar, as
9299:
93.endm
94
95
96#else
97
98.macro __loopi ar, at, size, incr
99 movi \at, ((\size + \incr - 1) / (\incr))
100 addi \at, \ar, \size
10198:
102.endm
103
104
105.macro __loops ar, as, at, incr_log2, mask_log2, cond, ncond
106 .ifnc \mask_log2,
107 extui \at, \as, \incr_log2, \mask_log2
108 .else
109 .ifnc \ncond,
110 srli \at, \as, \incr_log2
111 .endif
112 .endif
113 .ifnc \ncond,
114 b\ncond \at, 99f
115
116 .endif
117 .ifnc \mask_log2,
118 slli \at, \at, \incr_log2
119 add \at, \ar, \at
120 .else
121 add \at, \ar, \as
122 .endif
12398:
124.endm
125
126.macro __loopt ar, as, at, incr_log2
12798:
128.endm
129
130
131.macro __loop as
13298:
133.endm
134
135
136.macro __endl ar, as
137 bltu \ar, \as, 98b
13899:
139.endm
140
141
142#endif
143
144
145.macro __endla ar, as, incr
146 addi \ar, \ar, \incr
147 __endl \ar \as
148.endm
149
150
151#endif
152