1 // 7zAsm.S -- ASM macros for arm64
\r
2 // 2021-04-25 : Igor Pavlov : Public domain
\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
41 .macro p2_add reg:req, param:req
\r
42 add \reg, \reg, \param
\r
45 .macro p2_sub reg:req, param:req
\r
46 sub \reg, \reg, \param
\r
49 .macro p2_sub_s reg:req, param:req
\r
50 subs \reg, \reg, \param
\r
53 .macro p2_and reg:req, param:req
\r
54 and \reg, \reg, \param
\r
57 .macro xor reg:req, param:req
\r
58 eor \reg, \reg, \param
\r
61 .macro or reg:req, param:req
\r
62 orr \reg, \reg, \param
\r
65 .macro shl reg:req, param:req
\r
66 lsl \reg, \reg, \param
\r
69 .macro shr reg:req, param:req
\r
70 lsr \reg, \reg, \param
\r
73 .macro sar reg:req, param:req
\r
74 asr \reg, \reg, \param
\r
77 .macro p1_neg reg:req
\r
85 .macro dec_s reg:req
\r
93 .macro inc_s reg:req
\r
98 .macro imul reg:req, param:req
\r
99 mul \reg, \reg, \param
\r
103 arm64 and arm use reverted c flag after subs/cmp instructions:
\r
105 b.lo / b.cc : jb / jc
\r
106 b.hs / b.cs : jae / jnc
\r
146 .macro cmove dest:req, srcTrue:req
\r
147 csel \dest, \srcTrue, \dest, eq
\r
150 .macro cmovne dest:req, srcTrue:req
\r
151 csel \dest, \srcTrue, \dest, ne
\r
154 .macro cmovs dest:req, srcTrue:req
\r
155 csel \dest, \srcTrue, \dest, mi
\r
158 .macro cmovns dest:req, srcTrue:req
\r
159 csel \dest, \srcTrue, \dest, pl
\r
162 .macro cmovb dest:req, srcTrue:req
\r
163 csel \dest, \srcTrue, \dest, lo
\r
166 .macro cmovae dest:req, srcTrue:req
\r
167 csel \dest, \srcTrue, \dest, hs
\r
171 .macro MY_ALIGN_16 macro
\r
172 .p2align 4,, (1 << 4) - 1
\r
175 .macro MY_ALIGN_32 macro
\r
176 .p2align 5,, (1 << 5) - 1
\r
179 .macro MY_ALIGN_64 macro
\r
180 .p2align 6,, (1 << 6) - 1
\r