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