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