182 lines
2.9 KiB
ArmAsm
182 lines
2.9 KiB
ArmAsm
|
// 7zAsm.S -- ASM macros for arm64
|
||
|
// 2021-04-25 : Igor Pavlov : Public domain
|
||
|
|
||
|
#define r0 x0
|
||
|
#define r1 x1
|
||
|
#define r2 x2
|
||
|
#define r3 x3
|
||
|
#define r4 x4
|
||
|
#define r5 x5
|
||
|
#define r6 x6
|
||
|
#define r7 x7
|
||
|
#define r8 x8
|
||
|
#define r9 x9
|
||
|
#define r10 x10
|
||
|
#define r11 x11
|
||
|
#define r12 x12
|
||
|
#define r13 x13
|
||
|
#define r14 x14
|
||
|
#define r15 x15
|
||
|
#define r16 x16
|
||
|
#define r17 x17
|
||
|
#define r18 x18
|
||
|
#define r19 x19
|
||
|
#define r20 x20
|
||
|
#define r21 x21
|
||
|
#define r22 x22
|
||
|
#define r23 x23
|
||
|
#define r24 x24
|
||
|
#define r25 x25
|
||
|
#define r26 x26
|
||
|
#define r27 x27
|
||
|
#define r28 x28
|
||
|
#define r29 x29
|
||
|
#define r30 x30
|
||
|
|
||
|
#define REG_ABI_PARAM_0 r0
|
||
|
#define REG_ABI_PARAM_1 r1
|
||
|
#define REG_ABI_PARAM_2 r2
|
||
|
|
||
|
|
||
|
.macro p2_add reg:req, param:req
|
||
|
add \reg, \reg, \param
|
||
|
.endm
|
||
|
|
||
|
.macro p2_sub reg:req, param:req
|
||
|
sub \reg, \reg, \param
|
||
|
.endm
|
||
|
|
||
|
.macro p2_sub_s reg:req, param:req
|
||
|
subs \reg, \reg, \param
|
||
|
.endm
|
||
|
|
||
|
.macro p2_and reg:req, param:req
|
||
|
and \reg, \reg, \param
|
||
|
.endm
|
||
|
|
||
|
.macro xor reg:req, param:req
|
||
|
eor \reg, \reg, \param
|
||
|
.endm
|
||
|
|
||
|
.macro or reg:req, param:req
|
||
|
orr \reg, \reg, \param
|
||
|
.endm
|
||
|
|
||
|
.macro shl reg:req, param:req
|
||
|
lsl \reg, \reg, \param
|
||
|
.endm
|
||
|
|
||
|
.macro shr reg:req, param:req
|
||
|
lsr \reg, \reg, \param
|
||
|
.endm
|
||
|
|
||
|
.macro sar reg:req, param:req
|
||
|
asr \reg, \reg, \param
|
||
|
.endm
|
||
|
|
||
|
.macro p1_neg reg:req
|
||
|
neg \reg, \reg
|
||
|
.endm
|
||
|
|
||
|
.macro dec reg:req
|
||
|
sub \reg, \reg, 1
|
||
|
.endm
|
||
|
|
||
|
.macro dec_s reg:req
|
||
|
subs \reg, \reg, 1
|
||
|
.endm
|
||
|
|
||
|
.macro inc reg:req
|
||
|
add \reg, \reg, 1
|
||
|
.endm
|
||
|
|
||
|
.macro inc_s reg:req
|
||
|
adds \reg, \reg, 1
|
||
|
.endm
|
||
|
|
||
|
|
||
|
.macro imul reg:req, param:req
|
||
|
mul \reg, \reg, \param
|
||
|
.endm
|
||
|
|
||
|
/*
|
||
|
arm64 and arm use reverted c flag after subs/cmp instructions:
|
||
|
arm64-arm : x86
|
||
|
b.lo / b.cc : jb / jc
|
||
|
b.hs / b.cs : jae / jnc
|
||
|
*/
|
||
|
|
||
|
.macro jmp lab:req
|
||
|
b \lab
|
||
|
.endm
|
||
|
|
||
|
.macro je lab:req
|
||
|
b.eq \lab
|
||
|
.endm
|
||
|
|
||
|
.macro jz lab:req
|
||
|
b.eq \lab
|
||
|
.endm
|
||
|
|
||
|
.macro jnz lab:req
|
||
|
b.ne \lab
|
||
|
.endm
|
||
|
|
||
|
.macro jne lab:req
|
||
|
b.ne \lab
|
||
|
.endm
|
||
|
|
||
|
.macro jb lab:req
|
||
|
b.lo \lab
|
||
|
.endm
|
||
|
|
||
|
.macro jbe lab:req
|
||
|
b.ls \lab
|
||
|
.endm
|
||
|
|
||
|
.macro ja lab:req
|
||
|
b.hi \lab
|
||
|
.endm
|
||
|
|
||
|
.macro jae lab:req
|
||
|
b.hs \lab
|
||
|
.endm
|
||
|
|
||
|
|
||
|
.macro cmove dest:req, srcTrue:req
|
||
|
csel \dest, \srcTrue, \dest, eq
|
||
|
.endm
|
||
|
|
||
|
.macro cmovne dest:req, srcTrue:req
|
||
|
csel \dest, \srcTrue, \dest, ne
|
||
|
.endm
|
||
|
|
||
|
.macro cmovs dest:req, srcTrue:req
|
||
|
csel \dest, \srcTrue, \dest, mi
|
||
|
.endm
|
||
|
|
||
|
.macro cmovns dest:req, srcTrue:req
|
||
|
csel \dest, \srcTrue, \dest, pl
|
||
|
.endm
|
||
|
|
||
|
.macro cmovb dest:req, srcTrue:req
|
||
|
csel \dest, \srcTrue, \dest, lo
|
||
|
.endm
|
||
|
|
||
|
.macro cmovae dest:req, srcTrue:req
|
||
|
csel \dest, \srcTrue, \dest, hs
|
||
|
.endm
|
||
|
|
||
|
|
||
|
.macro MY_ALIGN_16 macro
|
||
|
.p2align 4,, (1 << 4) - 1
|
||
|
.endm
|
||
|
|
||
|
.macro MY_ALIGN_32 macro
|
||
|
.p2align 5,, (1 << 5) - 1
|
||
|
.endm
|
||
|
|
||
|
.macro MY_ALIGN_64 macro
|
||
|
.p2align 6,, (1 << 6) - 1
|
||
|
.endm
|