mirror of
git://repo.or.cz/tinycc.git
synced 2026-06-19 19:34:19 +08:00
557 lines
8.0 KiB
C
557 lines
8.0 KiB
C
/* ------------------------------------------------------------------ */
|
|
/* ARM64 (AArch64) assembler token definitions for TCC */
|
|
|
|
/* General purpose registers - 64-bit */
|
|
DEF_ASM(x0)
|
|
DEF_ASM(x1)
|
|
DEF_ASM(x2)
|
|
DEF_ASM(x3)
|
|
DEF_ASM(x4)
|
|
DEF_ASM(x5)
|
|
DEF_ASM(x6)
|
|
DEF_ASM(x7)
|
|
DEF_ASM(x8)
|
|
DEF_ASM(x9)
|
|
DEF_ASM(x10)
|
|
DEF_ASM(x11)
|
|
DEF_ASM(x12)
|
|
DEF_ASM(x13)
|
|
DEF_ASM(x14)
|
|
DEF_ASM(x15)
|
|
DEF_ASM(x16)
|
|
DEF_ASM(x17)
|
|
DEF_ASM(x18)
|
|
DEF_ASM(x19)
|
|
DEF_ASM(x20)
|
|
DEF_ASM(x21)
|
|
DEF_ASM(x22)
|
|
DEF_ASM(x23)
|
|
DEF_ASM(x24)
|
|
DEF_ASM(x25)
|
|
DEF_ASM(x26)
|
|
DEF_ASM(x27)
|
|
DEF_ASM(x28)
|
|
DEF_ASM(x29)
|
|
DEF_ASM(x30)
|
|
|
|
/* General purpose registers - 32-bit */
|
|
DEF_ASM(w0)
|
|
DEF_ASM(w1)
|
|
DEF_ASM(w2)
|
|
DEF_ASM(w3)
|
|
DEF_ASM(w4)
|
|
DEF_ASM(w5)
|
|
DEF_ASM(w6)
|
|
DEF_ASM(w7)
|
|
DEF_ASM(w8)
|
|
DEF_ASM(w9)
|
|
DEF_ASM(w10)
|
|
DEF_ASM(w11)
|
|
DEF_ASM(w12)
|
|
DEF_ASM(w13)
|
|
DEF_ASM(w14)
|
|
DEF_ASM(w15)
|
|
DEF_ASM(w16)
|
|
DEF_ASM(w17)
|
|
DEF_ASM(w18)
|
|
DEF_ASM(w19)
|
|
DEF_ASM(w20)
|
|
DEF_ASM(w21)
|
|
DEF_ASM(w22)
|
|
DEF_ASM(w23)
|
|
DEF_ASM(w24)
|
|
DEF_ASM(w25)
|
|
DEF_ASM(w26)
|
|
DEF_ASM(w27)
|
|
DEF_ASM(w28)
|
|
DEF_ASM(w29)
|
|
DEF_ASM(w30)
|
|
|
|
/* Special registers */
|
|
DEF_ASM(sp)
|
|
DEF_ASM(xzr)
|
|
DEF_ASM(wzr)
|
|
|
|
/* SIMD/FP registers - 128-bit views */
|
|
DEF_ASM(v0)
|
|
DEF_ASM(v1)
|
|
DEF_ASM(v2)
|
|
DEF_ASM(v3)
|
|
DEF_ASM(v4)
|
|
DEF_ASM(v5)
|
|
DEF_ASM(v6)
|
|
DEF_ASM(v7)
|
|
DEF_ASM(v8)
|
|
DEF_ASM(v9)
|
|
DEF_ASM(v10)
|
|
DEF_ASM(v11)
|
|
DEF_ASM(v12)
|
|
DEF_ASM(v13)
|
|
DEF_ASM(v14)
|
|
DEF_ASM(v15)
|
|
DEF_ASM(v16)
|
|
DEF_ASM(v17)
|
|
DEF_ASM(v18)
|
|
DEF_ASM(v19)
|
|
DEF_ASM(v20)
|
|
DEF_ASM(v21)
|
|
DEF_ASM(v22)
|
|
DEF_ASM(v23)
|
|
DEF_ASM(v24)
|
|
DEF_ASM(v25)
|
|
DEF_ASM(v26)
|
|
DEF_ASM(v27)
|
|
DEF_ASM(v28)
|
|
DEF_ASM(v29)
|
|
DEF_ASM(v30)
|
|
DEF_ASM(v31)
|
|
|
|
/* SIMD/FP registers - 64-bit views (double) */
|
|
DEF_ASM(d0)
|
|
DEF_ASM(d1)
|
|
DEF_ASM(d2)
|
|
DEF_ASM(d3)
|
|
DEF_ASM(d4)
|
|
DEF_ASM(d5)
|
|
DEF_ASM(d6)
|
|
DEF_ASM(d7)
|
|
DEF_ASM(d8)
|
|
DEF_ASM(d9)
|
|
DEF_ASM(d10)
|
|
DEF_ASM(d11)
|
|
DEF_ASM(d12)
|
|
DEF_ASM(d13)
|
|
DEF_ASM(d14)
|
|
DEF_ASM(d15)
|
|
DEF_ASM(d16)
|
|
DEF_ASM(d17)
|
|
DEF_ASM(d18)
|
|
DEF_ASM(d19)
|
|
DEF_ASM(d20)
|
|
DEF_ASM(d21)
|
|
DEF_ASM(d22)
|
|
DEF_ASM(d23)
|
|
DEF_ASM(d24)
|
|
DEF_ASM(d25)
|
|
DEF_ASM(d26)
|
|
DEF_ASM(d27)
|
|
DEF_ASM(d28)
|
|
DEF_ASM(d29)
|
|
DEF_ASM(d30)
|
|
DEF_ASM(d31)
|
|
|
|
/* SIMD/FP registers - 32-bit views (single) */
|
|
DEF_ASM(s0)
|
|
DEF_ASM(s1)
|
|
DEF_ASM(s2)
|
|
DEF_ASM(s3)
|
|
DEF_ASM(s4)
|
|
DEF_ASM(s5)
|
|
DEF_ASM(s6)
|
|
DEF_ASM(s7)
|
|
DEF_ASM(s8)
|
|
DEF_ASM(s9)
|
|
DEF_ASM(s10)
|
|
DEF_ASM(s11)
|
|
DEF_ASM(s12)
|
|
DEF_ASM(s13)
|
|
DEF_ASM(s14)
|
|
DEF_ASM(s15)
|
|
DEF_ASM(s16)
|
|
DEF_ASM(s17)
|
|
DEF_ASM(s18)
|
|
DEF_ASM(s19)
|
|
DEF_ASM(s20)
|
|
DEF_ASM(s21)
|
|
DEF_ASM(s22)
|
|
DEF_ASM(s23)
|
|
DEF_ASM(s24)
|
|
DEF_ASM(s25)
|
|
DEF_ASM(s26)
|
|
DEF_ASM(s27)
|
|
DEF_ASM(s28)
|
|
DEF_ASM(s29)
|
|
DEF_ASM(s30)
|
|
DEF_ASM(s31)
|
|
|
|
/* SIMD/FP registers - 16-bit views (half) */
|
|
DEF_ASM(h0)
|
|
DEF_ASM(h1)
|
|
DEF_ASM(h2)
|
|
DEF_ASM(h3)
|
|
DEF_ASM(h4)
|
|
DEF_ASM(h5)
|
|
DEF_ASM(h6)
|
|
DEF_ASM(h7)
|
|
DEF_ASM(h8)
|
|
DEF_ASM(h9)
|
|
DEF_ASM(h10)
|
|
DEF_ASM(h11)
|
|
DEF_ASM(h12)
|
|
DEF_ASM(h13)
|
|
DEF_ASM(h14)
|
|
DEF_ASM(h15)
|
|
DEF_ASM(h16)
|
|
DEF_ASM(h17)
|
|
DEF_ASM(h18)
|
|
DEF_ASM(h19)
|
|
DEF_ASM(h20)
|
|
DEF_ASM(h21)
|
|
DEF_ASM(h22)
|
|
DEF_ASM(h23)
|
|
DEF_ASM(h24)
|
|
DEF_ASM(h25)
|
|
DEF_ASM(h26)
|
|
DEF_ASM(h27)
|
|
DEF_ASM(h28)
|
|
DEF_ASM(h29)
|
|
DEF_ASM(h30)
|
|
DEF_ASM(h31)
|
|
|
|
/* SIMD/FP registers - 8-bit views (byte) */
|
|
DEF_ASM(b0)
|
|
DEF_ASM(b1)
|
|
DEF_ASM(b2)
|
|
DEF_ASM(b3)
|
|
DEF_ASM(b4)
|
|
DEF_ASM(b5)
|
|
DEF_ASM(b6)
|
|
DEF_ASM(b7)
|
|
DEF_ASM(b8)
|
|
DEF_ASM(b9)
|
|
DEF_ASM(b10)
|
|
DEF_ASM(b11)
|
|
DEF_ASM(b12)
|
|
DEF_ASM(b13)
|
|
DEF_ASM(b14)
|
|
DEF_ASM(b15)
|
|
DEF_ASM(b16)
|
|
DEF_ASM(b17)
|
|
DEF_ASM(b18)
|
|
DEF_ASM(b19)
|
|
DEF_ASM(b20)
|
|
DEF_ASM(b21)
|
|
DEF_ASM(b22)
|
|
DEF_ASM(b23)
|
|
DEF_ASM(b24)
|
|
DEF_ASM(b25)
|
|
DEF_ASM(b26)
|
|
DEF_ASM(b27)
|
|
DEF_ASM(b28)
|
|
DEF_ASM(b29)
|
|
DEF_ASM(b30)
|
|
DEF_ASM(b31)
|
|
|
|
/* Condition codes */
|
|
DEF_ASM(eq)
|
|
DEF_ASM(ne)
|
|
DEF_ASM(cs)
|
|
DEF_ASM(hs)
|
|
DEF_ASM(cc)
|
|
DEF_ASM(lo)
|
|
DEF_ASM(mi)
|
|
DEF_ASM(pl)
|
|
DEF_ASM(vs)
|
|
DEF_ASM(vc)
|
|
DEF_ASM(hi)
|
|
DEF_ASM(ls)
|
|
DEF_ASM(ge)
|
|
DEF_ASM(lt)
|
|
DEF_ASM(gt)
|
|
DEF_ASM(le)
|
|
DEF_ASM(al)
|
|
|
|
/* Data processing - arithmetic (no condition suffixes for ARM64) */
|
|
DEF_ASM(add)
|
|
DEF_ASM(adds)
|
|
DEF_ASM(sub)
|
|
DEF_ASM(subs)
|
|
DEF_ASM(cmn)
|
|
DEF_ASM(cmp)
|
|
DEF_ASM(neg)
|
|
DEF_ASM(negs)
|
|
DEF_ASM(adc)
|
|
DEF_ASM(adcs)
|
|
DEF_ASM(sbc)
|
|
DEF_ASM(sbcs)
|
|
DEF_ASM(ngc)
|
|
DEF_ASM(ngcs)
|
|
|
|
/* Data processing - bitwise */
|
|
DEF_ASM(and)
|
|
DEF_ASM(ands)
|
|
DEF_ASM(bic)
|
|
DEF_ASM(bics)
|
|
DEF_ASM(orr)
|
|
DEF_ASM(orn)
|
|
DEF_ASM(eor)
|
|
DEF_ASM(eon)
|
|
DEF_ASM(mvn)
|
|
DEF_ASM(mov)
|
|
|
|
/* Shifts */
|
|
DEF_ASM(lsl)
|
|
DEF_ASM(lsr)
|
|
DEF_ASM(asr)
|
|
DEF_ASM(ror)
|
|
|
|
/* Multiply/divide */
|
|
DEF_ASM(mul)
|
|
DEF_ASM(muls)
|
|
DEF_ASM(madd)
|
|
DEF_ASM(msub)
|
|
DEF_ASM(smaddl)
|
|
DEF_ASM(smsubl)
|
|
DEF_ASM(umaddl)
|
|
DEF_ASM(umsubl)
|
|
DEF_ASM(smulh)
|
|
DEF_ASM(umulh)
|
|
DEF_ASM(udiv)
|
|
DEF_ASM(sdiv)
|
|
|
|
/* Moves */
|
|
DEF_ASM(movz)
|
|
DEF_ASM(movn)
|
|
DEF_ASM(movk)
|
|
|
|
/* Compare/test */
|
|
DEF_ASM(tst)
|
|
DEF_ASM(teq)
|
|
|
|
/* Branch instructions */
|
|
DEF_ASM(b)
|
|
DEF_ASM(bl)
|
|
DEF_ASM(br)
|
|
DEF_ASM(blr)
|
|
DEF_ASM(ret)
|
|
DEF_ASM(cbz)
|
|
DEF_ASM(cbnz)
|
|
DEF_ASM(tbz)
|
|
DEF_ASM(tbnz)
|
|
|
|
/* Conditional branches */
|
|
DEF_ASM(beq)
|
|
DEF_ASM(bne)
|
|
DEF_ASM(bcs)
|
|
DEF_ASM(bhs)
|
|
DEF_ASM(bcc)
|
|
DEF_ASM(blo)
|
|
DEF_ASM(bmi)
|
|
DEF_ASM(bpl)
|
|
DEF_ASM(bvs)
|
|
DEF_ASM(bvc)
|
|
DEF_ASM(bhi)
|
|
DEF_ASM(bls)
|
|
DEF_ASM(bge)
|
|
DEF_ASM(blt)
|
|
DEF_ASM(bgt)
|
|
DEF_ASM(ble)
|
|
|
|
/* Conditional select */
|
|
DEF_ASM(csel)
|
|
DEF_ASM(csinc)
|
|
DEF_ASM(csinv)
|
|
DEF_ASM(csneg)
|
|
|
|
/* Load/Store */
|
|
DEF_ASM(ldr)
|
|
DEF_ASM(ldrb)
|
|
DEF_ASM(ldrh)
|
|
DEF_ASM(ldrsb)
|
|
DEF_ASM(ldrsh)
|
|
DEF_ASM(ldrsw)
|
|
DEF_ASM(str)
|
|
DEF_ASM(strb)
|
|
DEF_ASM(strh)
|
|
|
|
/* Load/Store - pair */
|
|
DEF_ASM(ldp)
|
|
DEF_ASM(stp)
|
|
DEF_ASM(ldpsw)
|
|
|
|
/* Address generation */
|
|
DEF_ASM(adr)
|
|
DEF_ASM(adrp)
|
|
|
|
/* System instructions */
|
|
DEF_ASM(nop)
|
|
DEF_ASM(wfi)
|
|
DEF_ASM(wfe)
|
|
DEF_ASM(sev)
|
|
DEF_ASM(sevl)
|
|
DEF_ASM(isb)
|
|
DEF_ASM(dsb)
|
|
DEF_ASM(dmb)
|
|
|
|
/* Hints */
|
|
DEF_ASM(yield)
|
|
DEF_ASM(clrex)
|
|
|
|
/* Push/pop */
|
|
DEF_ASM(push)
|
|
DEF_ASM(pop)
|
|
|
|
/* Floating point */
|
|
DEF_ASM(fmov)
|
|
DEF_ASM(fadd)
|
|
DEF_ASM(fsub)
|
|
DEF_ASM(fmul)
|
|
DEF_ASM(fnmul)
|
|
DEF_ASM(fdiv)
|
|
DEF_ASM(fmax)
|
|
DEF_ASM(fmin)
|
|
DEF_ASM(fmaxnm)
|
|
DEF_ASM(fminnm)
|
|
DEF_ASM(fsqrt)
|
|
DEF_ASM(fabs)
|
|
DEF_ASM(fneg)
|
|
DEF_ASM(frintn)
|
|
DEF_ASM(frintp)
|
|
DEF_ASM(frintm)
|
|
DEF_ASM(frintz)
|
|
DEF_ASM(frinta)
|
|
DEF_ASM(frintx)
|
|
DEF_ASM(frinti)
|
|
DEF_ASM(fcmp)
|
|
DEF_ASM(fcmpe)
|
|
DEF_ASM(fccmp)
|
|
DEF_ASM(fccmpe)
|
|
DEF_ASM(fcvts)
|
|
DEF_ASM(fcvtd)
|
|
DEF_ASM(fcvth)
|
|
DEF_ASM(fcvtx)
|
|
DEF_ASM(scvtf)
|
|
DEF_ASM(ucvtf)
|
|
DEF_ASM(fcvtns)
|
|
DEF_ASM(fcvtnu)
|
|
DEF_ASM(fcvtps)
|
|
DEF_ASM(fcvtpu)
|
|
|
|
/* SIMD instructions */
|
|
DEF_ASM(addv)
|
|
DEF_ASM(faddp)
|
|
DEF_ASM(fmaxp)
|
|
DEF_ASM(fminp)
|
|
DEF_ASM(fmaxnmp)
|
|
DEF_ASM(fminnmp)
|
|
DEF_ASM(addp)
|
|
DEF_ASM(bif)
|
|
DEF_ASM(bit)
|
|
DEF_ASM(bsl)
|
|
DEF_ASM(dup)
|
|
DEF_ASM(ext)
|
|
DEF_ASM(ins)
|
|
DEF_ASM(movi)
|
|
DEF_ASM(mvni)
|
|
DEF_ASM(not)
|
|
DEF_ASM(shl)
|
|
DEF_ASM(shll)
|
|
DEF_ASM(shll2)
|
|
DEF_ASM(sli)
|
|
DEF_ASM(sri)
|
|
DEF_ASM(sqshl)
|
|
DEF_ASM(sqshlu)
|
|
DEF_ASM(srshl)
|
|
DEF_ASM(sshll)
|
|
DEF_ASM(sshll2)
|
|
DEF_ASM(sshr)
|
|
DEF_ASM(ushll)
|
|
DEF_ASM(ushll2)
|
|
DEF_ASM(ushr)
|
|
|
|
/* Misc */
|
|
DEF_ASM(bfm)
|
|
DEF_ASM(sbfm)
|
|
DEF_ASM(ubfm)
|
|
DEF_ASM(extr)
|
|
DEF_ASM(crc32b)
|
|
DEF_ASM(crc32h)
|
|
DEF_ASM(crc32w)
|
|
DEF_ASM(crc32x)
|
|
DEF_ASM(crc32cb)
|
|
DEF_ASM(crc32ch)
|
|
DEF_ASM(crc32cw)
|
|
DEF_ASM(crc32cx)
|
|
DEF_ASM(rev)
|
|
DEF_ASM(rev16)
|
|
DEF_ASM(rev32)
|
|
DEF_ASM(rev64)
|
|
DEF_ASM(clz)
|
|
DEF_ASM(cls)
|
|
DEF_ASM(rbit)
|
|
|
|
/* Exception generating */
|
|
DEF_ASM(svc)
|
|
DEF_ASM(hvc)
|
|
DEF_ASM(smc)
|
|
DEF_ASM(brk)
|
|
DEF_ASM(hlt)
|
|
DEF_ASM(dcps1)
|
|
DEF_ASM(dcps2)
|
|
DEF_ASM(dcps3)
|
|
|
|
/* Conditional branches */
|
|
DEF_ASM(b_eq)
|
|
DEF_ASM(b_ne)
|
|
DEF_ASM(b_cs)
|
|
DEF_ASM(b_cc)
|
|
DEF_ASM(b_mi)
|
|
DEF_ASM(b_pl)
|
|
DEF_ASM(b_vs)
|
|
DEF_ASM(b_vc)
|
|
DEF_ASM(b_hi)
|
|
DEF_ASM(b_ls)
|
|
DEF_ASM(b_ge)
|
|
DEF_ASM(b_lt)
|
|
DEF_ASM(b_gt)
|
|
DEF_ASM(b_le)
|
|
|
|
/* LD/ST exclusive */
|
|
DEF_ASM(ldxr)
|
|
DEF_ASM(ldxrb)
|
|
DEF_ASM(ldxrh)
|
|
DEF_ASM(stxr)
|
|
DEF_ASM(stxrb)
|
|
DEF_ASM(stxrh)
|
|
DEF_ASM(ldaxr)
|
|
DEF_ASM(ldaxrb)
|
|
DEF_ASM(ldaxrh)
|
|
DEF_ASM(stlxr)
|
|
DEF_ASM(stlxrb)
|
|
DEF_ASM(stlxrh)
|
|
|
|
/* LD/ST acquire-release */
|
|
DEF_ASM(ldar)
|
|
DEF_ASM(ldarb)
|
|
DEF_ASM(ldarh)
|
|
DEF_ASM(stlr)
|
|
DEF_ASM(stlrb)
|
|
DEF_ASM(stlrh)
|
|
DEF_ASM(ldalr)
|
|
DEF_ASM(ldalrb)
|
|
DEF_ASM(ldalrh)
|
|
DEF_ASM(stllr)
|
|
DEF_ASM(stllrb)
|
|
DEF_ASM(stllrh)
|
|
|
|
/* LD/ST unscaled immediate */
|
|
DEF_ASM(ldur)
|
|
DEF_ASM(ldurb)
|
|
DEF_ASM(ldurh)
|
|
DEF_ASM(ldursb)
|
|
DEF_ASM(ldursh)
|
|
DEF_ASM(ldursw)
|
|
DEF_ASM(stur)
|
|
DEF_ASM(sturb)
|
|
DEF_ASM(sturh)
|
|
|
|
/* Vector load/store */
|
|
DEF_ASM(ld1)
|
|
DEF_ASM(st1)
|
|
DEF_ASM(ld2)
|
|
DEF_ASM(st2)
|
|
DEF_ASM(ld3)
|
|
DEF_ASM(st3)
|
|
DEF_ASM(ld4)
|
|
DEF_ASM(st4)
|