*/
#define CPU_FEATURE_CPUCFG 0 /* CPU has CPUCFG */
#define CPU_FEATURE_LAM 1 /* CPU has Atomic instructions */
-#define CPU_FEATURE_SCQ 2 /* CPU has SC.Q instruction */
-#define CPU_FEATURE_UAL 3 /* CPU supports unaligned access */
-#define CPU_FEATURE_FPU 4 /* CPU has FPU */
-#define CPU_FEATURE_LSX 5 /* CPU has LSX (128-bit SIMD) */
-#define CPU_FEATURE_LASX 6 /* CPU has LASX (256-bit SIMD) */
-#define CPU_FEATURE_CRC32 7 /* CPU has CRC32 instructions */
-#define CPU_FEATURE_COMPLEX 8 /* CPU has Complex instructions */
-#define CPU_FEATURE_CRYPTO 9 /* CPU has Crypto instructions */
-#define CPU_FEATURE_LVZ 10 /* CPU has Virtualization extension */
-#define CPU_FEATURE_LBT_X86 11 /* CPU has X86 Binary Translation */
-#define CPU_FEATURE_LBT_ARM 12 /* CPU has ARM Binary Translation */
-#define CPU_FEATURE_LBT_MIPS 13 /* CPU has MIPS Binary Translation */
-#define CPU_FEATURE_TLB 14 /* CPU has TLB */
-#define CPU_FEATURE_CSR 15 /* CPU has CSR */
-#define CPU_FEATURE_IOCSR 16 /* CPU has IOCSR */
-#define CPU_FEATURE_WATCH 17 /* CPU has watchpoint registers */
-#define CPU_FEATURE_VINT 18 /* CPU has vectored interrupts */
-#define CPU_FEATURE_CSRIPI 19 /* CPU has CSR-IPI */
-#define CPU_FEATURE_EXTIOI 20 /* CPU has EXT-IOI */
-#define CPU_FEATURE_PREFETCH 21 /* CPU has prefetch instructions */
-#define CPU_FEATURE_PMP 22 /* CPU has perfermance counter */
-#define CPU_FEATURE_SCALEFREQ 23 /* CPU supports cpufreq scaling */
-#define CPU_FEATURE_FLATMODE 24 /* CPU has flat mode */
-#define CPU_FEATURE_EIODECODE 25 /* CPU has EXTIOI interrupt pin decode mode */
-#define CPU_FEATURE_GUESTID 26 /* CPU has GuestID feature */
-#define CPU_FEATURE_HYPERVISOR 27 /* CPU has hypervisor (running in VM) */
-#define CPU_FEATURE_PTW 28 /* CPU has hardware page table walker */
-#define CPU_FEATURE_LSPW 29 /* CPU has LSPW (lddir/ldpte instructions) */
-#define CPU_FEATURE_MSGINT 30 /* CPU has MSG interrupt */
-#define CPU_FEATURE_AVECINT 31 /* CPU has AVEC interrupt */
-#define CPU_FEATURE_REDIRECTINT 32 /* CPU has interrupt remapping */
+#define CPU_FEATURE_LAM_BH 2 /* CPU has AM{SWAP/ADD}[_DB].{B/H} instructions */
+#define CPU_FEATURE_SCQ 3 /* CPU has SC.Q instruction */
+#define CPU_FEATURE_UAL 4 /* CPU supports unaligned access */
+#define CPU_FEATURE_FPU 5 /* CPU has FPU */
+#define CPU_FEATURE_LSX 6 /* CPU has LSX (128-bit SIMD) */
+#define CPU_FEATURE_LASX 7 /* CPU has LASX (256-bit SIMD) */
+#define CPU_FEATURE_CRC32 8 /* CPU has CRC32 instructions */
+#define CPU_FEATURE_COMPLEX 9 /* CPU has Complex instructions */
+#define CPU_FEATURE_CRYPTO 10 /* CPU has Crypto instructions */
+#define CPU_FEATURE_LVZ 11 /* CPU has Virtualization extension */
+#define CPU_FEATURE_LBT_X86 12 /* CPU has X86 Binary Translation */
+#define CPU_FEATURE_LBT_ARM 13 /* CPU has ARM Binary Translation */
+#define CPU_FEATURE_LBT_MIPS 14 /* CPU has MIPS Binary Translation */
+#define CPU_FEATURE_TLB 15 /* CPU has TLB */
+#define CPU_FEATURE_CSR 16 /* CPU has CSR */
+#define CPU_FEATURE_IOCSR 17 /* CPU has IOCSR */
+#define CPU_FEATURE_WATCH 18 /* CPU has watchpoint registers */
+#define CPU_FEATURE_VINT 19 /* CPU has vectored interrupts */
+#define CPU_FEATURE_CSRIPI 20 /* CPU has CSR-IPI */
+#define CPU_FEATURE_EXTIOI 21 /* CPU has EXT-IOI */
+#define CPU_FEATURE_PREFETCH 22 /* CPU has prefetch instructions */
+#define CPU_FEATURE_PMP 23 /* CPU has perfermance counter */
+#define CPU_FEATURE_SCALEFREQ 24 /* CPU supports cpufreq scaling */
+#define CPU_FEATURE_FLATMODE 25 /* CPU has flat mode */
+#define CPU_FEATURE_EIODECODE 26 /* CPU has EXTIOI interrupt pin decode mode */
+#define CPU_FEATURE_GUESTID 27 /* CPU has GuestID feature */
+#define CPU_FEATURE_HYPERVISOR 28 /* CPU has hypervisor (running in VM) */
+#define CPU_FEATURE_PTW 29 /* CPU has hardware page table walker */
+#define CPU_FEATURE_LSPW 30 /* CPU has LSPW (lddir/ldpte instructions) */
+#define CPU_FEATURE_MSGINT 31 /* CPU has MSG interrupt */
+#define CPU_FEATURE_AVECINT 32 /* CPU has AVEC interrupt */
+#define CPU_FEATURE_REDIRECTINT 33 /* CPU has interrupt remapping */
#define LOONGARCH_CPU_CPUCFG BIT_ULL(CPU_FEATURE_CPUCFG)
#define LOONGARCH_CPU_LAM BIT_ULL(CPU_FEATURE_LAM)
+#define LOONGARCH_CPU_LAM_BH BIT_ULL(CPU_FEATURE_LAM_BH)
#define LOONGARCH_CPU_SCQ BIT_ULL(CPU_FEATURE_SCQ)
#define LOONGARCH_CPU_UAL BIT_ULL(CPU_FEATURE_UAL)
#define LOONGARCH_CPU_FPU BIT_ULL(CPU_FEATURE_FPU)
enum reg0i15_op {
break_op = 0x54,
+ dbar_op = 0x70e4,
};
enum reg0i26_op {
fstxs_op = 0x7070,
fstxd_op = 0x7078,
scq_op = 0x70ae,
+ amswapb_op = 0x70b8,
+ amswaph_op = 0x70b9,
+ amaddb_op = 0x70ba,
+ amaddh_op = 0x70bb,
amswapw_op = 0x70c0,
amswapd_op = 0x70c1,
amaddw_op = 0x70c2,
}
DEF_EMIT_REG0I15_FORMAT(break, break_op)
+DEF_EMIT_REG0I15_FORMAT(dbar, dbar_op)
/* like emit_break(imm) but returns a constant expression */
#define __emit_break(imm) ((u32)((imm) | (break_op << 15)))
DEF_EMIT_REG3_FORMAT(stxh, stxh_op)
DEF_EMIT_REG3_FORMAT(stxw, stxw_op)
DEF_EMIT_REG3_FORMAT(stxd, stxd_op)
+DEF_EMIT_REG3_FORMAT(amaddb, amaddb_op)
+DEF_EMIT_REG3_FORMAT(amaddh, amaddh_op)
DEF_EMIT_REG3_FORMAT(amaddw, amaddw_op)
DEF_EMIT_REG3_FORMAT(amaddd, amaddd_op)
DEF_EMIT_REG3_FORMAT(amandw, amandw_op)
DEF_EMIT_REG3_FORMAT(amord, amord_op)
DEF_EMIT_REG3_FORMAT(amxorw, amxorw_op)
DEF_EMIT_REG3_FORMAT(amxord, amxord_op)
+DEF_EMIT_REG3_FORMAT(amswapb, amswapb_op)
+DEF_EMIT_REG3_FORMAT(amswaph, amswaph_op)
DEF_EMIT_REG3_FORMAT(amswapw, amswapw_op)
DEF_EMIT_REG3_FORMAT(amswapd, amswapd_op)