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