git subrepo pull (merge) --force deps/libchdr
[pcsx_rearmed.git] / deps / libchdr / deps / lzma-24.05 / Asm / arm64 / 7zAsm.S
1 // 7zAsm.S -- ASM macros for arm64
2 // 2021-04-25 : Igor Pavlov : Public domain
3
4 #define  r0 x0
5 #define  r1 x1
6 #define  r2 x2
7 #define  r3 x3
8 #define  r4 x4
9 #define  r5 x5
10 #define  r6 x6
11 #define  r7 x7
12 #define  r8 x8
13 #define  r9 x9
14 #define  r10 x10
15 #define  r11 x11
16 #define  r12 x12
17 #define  r13 x13
18 #define  r14 x14
19 #define  r15 x15
20 #define  r16 x16
21 #define  r17 x17
22 #define  r18 x18
23 #define  r19 x19
24 #define  r20 x20
25 #define  r21 x21
26 #define  r22 x22
27 #define  r23 x23
28 #define  r24 x24
29 #define  r25 x25
30 #define  r26 x26
31 #define  r27 x27
32 #define  r28 x28
33 #define  r29 x29
34 #define  r30 x30
35
36 #define  REG_ABI_PARAM_0 r0
37 #define  REG_ABI_PARAM_1 r1
38 #define  REG_ABI_PARAM_2 r2
39
40
41 .macro p2_add reg:req, param:req
42         add     \reg, \reg, \param
43 .endm
44
45 .macro p2_sub reg:req, param:req
46         sub     \reg, \reg, \param
47 .endm
48
49 .macro p2_sub_s reg:req, param:req
50         subs    \reg, \reg, \param
51 .endm
52
53 .macro p2_and reg:req, param:req
54         and     \reg, \reg, \param
55 .endm
56
57 .macro xor reg:req, param:req
58         eor     \reg, \reg, \param
59 .endm
60
61 .macro or reg:req, param:req
62         orr     \reg, \reg, \param
63 .endm
64
65 .macro shl reg:req, param:req
66         lsl     \reg, \reg, \param
67 .endm
68
69 .macro shr reg:req, param:req
70         lsr     \reg, \reg, \param
71 .endm
72
73 .macro sar reg:req, param:req
74         asr     \reg, \reg, \param
75 .endm
76
77 .macro p1_neg reg:req
78         neg     \reg, \reg
79 .endm
80
81 .macro dec reg:req
82         sub     \reg, \reg, 1
83 .endm
84
85 .macro dec_s reg:req
86         subs    \reg, \reg, 1
87 .endm
88
89 .macro inc reg:req
90         add     \reg, \reg, 1
91 .endm
92
93 .macro inc_s reg:req
94         adds    \reg, \reg, 1
95 .endm
96
97
98 .macro imul reg:req, param:req
99         mul     \reg, \reg, \param
100 .endm
101
102 /*
103 arm64 and arm use reverted c flag after subs/cmp instructions:
104   arm64-arm   :     x86
105  b.lo / b.cc  :  jb  / jc
106  b.hs / b.cs  :  jae / jnc
107 */ 
108
109 .macro jmp lab:req
110         b       \lab
111 .endm
112
113 .macro je lab:req
114         b.eq    \lab
115 .endm
116
117 .macro jz lab:req
118         b.eq    \lab
119 .endm
120
121 .macro jnz lab:req
122         b.ne    \lab
123 .endm
124
125 .macro jne lab:req
126         b.ne    \lab
127 .endm
128
129 .macro jb lab:req
130         b.lo    \lab
131 .endm
132
133 .macro jbe lab:req
134         b.ls    \lab
135 .endm
136
137 .macro ja lab:req
138         b.hi    \lab
139 .endm
140
141 .macro jae lab:req
142         b.hs    \lab
143 .endm
144
145
146 .macro cmove dest:req, srcTrue:req
147         csel    \dest, \srcTrue, \dest, eq
148 .endm
149
150 .macro cmovne dest:req, srcTrue:req
151         csel    \dest, \srcTrue, \dest, ne
152 .endm
153
154 .macro cmovs dest:req, srcTrue:req
155         csel    \dest, \srcTrue, \dest, mi
156 .endm
157
158 .macro cmovns dest:req, srcTrue:req
159         csel    \dest, \srcTrue, \dest, pl
160 .endm
161
162 .macro cmovb dest:req, srcTrue:req
163         csel    \dest, \srcTrue, \dest, lo
164 .endm
165
166 .macro cmovae dest:req, srcTrue:req
167         csel    \dest, \srcTrue, \dest, hs
168 .endm
169
170
171 .macro MY_ALIGN_16 macro
172         .p2align 4,, (1 << 4) - 1
173 .endm
174
175 .macro MY_ALIGN_32 macro
176         .p2align 5,, (1 << 5) - 1
177 .endm
178
179 .macro MY_ALIGN_64 macro
180         .p2align 6,, (1 << 6) - 1
181 .endm