Files
kunlun/dtest/bee_ai_test/wq_bee_custom.h
2024-09-28 14:24:04 +08:00

578 lines
32 KiB
C
Executable File

#define STR1(x) #x
#define STR(x) STR1(x)
#define TYPE_UIB 0b00000
#define TYPE_SIB 0b00001
#define TYPE_UIH 0b00010
#define TYPE_SIH 0b00011
#define TYPE_UIW 0b00100
#define TYPE_SIW 0b00101
#define TYPE_FPH 0b01010
#define TYPE_FPW 0b01100
#define INST_VADD 0b00100000000000000000000000001011
#define INST_VSUB 0b00100010000000000000000000001011
#define INST_VADDW 0b00100100000000000000000000001011
#define INST_VSUBW 0b00100110000000000000000000001011
#define INST_VSEQ 0b00101000000000000000000000001011
#define INST_VSNE 0b00101010000000000000000000001011
#define INST_VSLT 0b00101100000000000000000000001011
#define INST_VSGE 0b00101110000000000000000000001011
#define INST_VMIN 0b00110000000000000000000000001011
#define INST_VMAX 0b00110010000000000000000000001011
//#define INST_R 0b00110100000000000000000000001011
//#define INST_R 0b00111000000000000000000000001011
#define INST_VMULL 0b01000000000000000000000000001011
#define INST_VMULH 0b01000010000000000000000000001011
#define INST_VMULW 0b01000100000000000000000000001011
//#define INST_R 0b01000110000000000000000000001011
//#define INST_VDIV 0b01001000000000000000000000001011
//#define INST_VREM 0b01001010000000000000000000001011
//#define INST_R 0b01001100000000000000000000001011
//#define INST_R 0b01010000000000000000000000001011
#define INST_VMADD 0b01100000000000000000000000001011
#define INST_VMADDW 0b01100010000000000000000000001011
#define INST_VMSUB 0b01100100000000000000000000001011
#define INST_VMSUBW 0b01100110000000000000000000001011
#define INST_VSLL 0b10000000000000000000000000001011
#define INST_VSRL 0b10000010000000000000000000001011
#define INST_VSLA 0b10000100000000000000000000001011
#define INST_VSRA 0b10000110000000000000000000001011
#define INST_VAND 0b10001000000000000000000000001011
#define INST_VOR 0b10001010000000000000000000001011
#define INST_VXOR 0b10001100000000000000000000001011
#define INST_VXNOR 0b10001110000000000000000000001011
#define INST_VNWL 0b10010000000000000000000000001011
#define INST_VNWH 0b10010010000000000000000000001011
#define INST_VLD 0b00000000000000000000000000101011
#define INST_VLDS 0b00000000000000000001000000101011
#define INST_VLDX 0b00000000000000000010000000101011
#define INST_VST 0b00000000000000000100000000101011
#define INST_VSTS 0b00000000000000000101000000101011
#define INST_VSTX 0b00000000000000000110000000101011
#define INST_VCSRC 0b00000000000000000011000000101011
#define INST_VCSRW 0b00000000000000000111000000101011
#define CUSTOM0_VCSR(inst, rd, rs1, vcsr_addr) \
inst | \
((rd & 0b11111) << (7)) | \
((rs1 & 0b11111) << (7+5+3)) | \
((vcsr_addr & 0b111111111111) << (7+5+3+5))
#define CUSTOM0_VD_VS12(inst, vd, vs1, vs2) \
inst | \
((vd & 0b11111) << (7)) | \
((vs1 & 0b11111) << (7+5+3)) | \
((vs2 & 0b11111) << (7+5+3+5))
#define CUSTOM0_RS1_VS3(inst, rs1, vs3) \
inst | \
((rs1 & 0b11111) << (7+5+3)) | \
((vs3 & 0b11111) << (7+5+3+5+5))
#define CUSTOM0_VST(inst, type, rs1, str, vs3) \
inst | \
((type & 0b11111) << (7)) | \
((rs1 & 0b11111) << (7+5+3)) | \
((str & 0b11111) << (7+5+3+5)) | \
((vs3 & 0b11111) << (7+5+3+5+5+2))
#define CUSTOM0_VSTS(inst, type, rs1, rs2, vs3) \
inst | \
((type & 0b11111) << (7)) | \
((rs1 & 0b11111) << (7+5+3)) | \
((rs2 & 0b11111) << (7+5+3+5)) | \
((vs3 & 0b11111) << (7+5+3+5+5+2))
#define CUSTOM0_VSTX(inst, type, rs1, vs2, vs3) \
inst | \
((type & 0b11111) << (7)) | \
((rs1 & 0b11111) << (7+5+3)) | \
((vs2 & 0b11111) << (7+5+3+5)) | \
((vs3 & 0b11111) << (7+5+3+5+5+2))
#define CUSTOM0_VD_RS1(inst, vd, rs1) \
inst | \
((vd & 0b11111) << (7)) | \
((rs1 & 0b11111) << (7+5+3))
#define CUSTOM0_VLD(inst, type, vd, rs1, str) \
inst | \
((vd & 0b11111) << (7)) | \
((rs1 & 0b11111) << (7+5+3)) | \
((str & 0b11111) << (7+5+3+5)) | \
((type & 0b11111) << (7+5+3+5+5+2))
#define CUSTOM0_VLDS(inst, type, vd, rs1, rs2) \
inst | \
((vd & 0b11111) << (7)) | \
((rs1 & 0b11111) << (7+5+3)) | \
((rs2 & 0b11111) << (7+5+3+5)) | \
((type & 0b11111) << (7+5+3+5+5+2))
#define CUSTOM0_VLDX(inst, type, vd, rs1, vs2) \
inst | \
((vd & 0b11111) << (7)) | \
((rs1 & 0b11111) << (7+5+3)) | \
((vs2 & 0b11111) << (7+5+3+5)) | \
((type & 0b11111) << (7+5+3+5+5+2))
#define CUSTOM0_VD_RS12(inst, vd, rs1, rs2) \
inst | \
((vd & 0b11111) << (7)) | \
((rs1 & 0b11111) << (7+5+3)) | \
((rs2 & 0b11111) << (7+5+3+5))
#define vcsrw(rd, rs1, vcsr_addr) \
{ \
register uint32_t rd_ asm ("x10"); \
register uint32_t rs1_ asm ("x11") = (uint32_t) rs1; \
asm volatile ( \
".word " STR(CUSTOM0_VCSR(INST_VCSRW, 10, 11, vcsr_addr)) "\n\t" \
: "=r" (rd_) \
: [_rs1] "r" (rs1_)); \
rd = rd_; \
}
#define vcsrr(rd, vcsr_addr) \
{ \
register uint32_t rd_ asm ("x10"); \
asm volatile ( \
".word " STR(CUSTOM0_VCSR(INST_VCSRC, 10, 0, vcsr_addr)) "\n\t" \
: "=r" (rd_) \
:); \
rd = rd_; \
}
#define vadd(vd_n, vs1_n, vs2_n) \
asm volatile (".word " STR(CUSTOM0_VD_VS12(INST_VADD, vd_n, vs1_n, vs2_n)));
#define vsub(vd_n, vs1_n, vs2_n) \
asm volatile (".word " STR(CUSTOM0_VD_VS12(INST_VSUB, vd_n, vs1_n, vs2_n)));
#define vseq(vd_n, vs1_n, vs2_n) \
asm volatile (".word " STR(CUSTOM0_VD_VS12(INST_VSEQ, vd_n, vs1_n, vs2_n)));
#define vsne(vd_n, vs1_n, vs2_n) \
asm volatile (".word " STR(CUSTOM0_VD_VS12(INST_VSNE, vd_n, vs1_n, vs2_n)));
#define vslt(vd_n, vs1_n, vs2_n) \
asm volatile (".word " STR(CUSTOM0_VD_VS12(INST_VSLT, vd_n, vs1_n, vs2_n)));
#define vsge(vd_n, vs1_n, vs2_n) \
asm volatile (".word " STR(CUSTOM0_VD_VS12(INST_VSGE, vd_n, vs1_n, vs2_n)));
#define vmin(vd_n, vs1_n, vs2_n) \
asm volatile (".word " STR(CUSTOM0_VD_VS12(INST_VMIN, vd_n, vs1_n, vs2_n)));
#define vmax(vd_n, vs1_n, vs2_n) \
asm volatile (".word " STR(CUSTOM0_VD_VS12(INST_VMAX, vd_n, vs1_n, vs2_n)));
#define vmull(vd_n, vs1_n, vs2_n) \
asm volatile (".word " STR(CUSTOM0_VD_VS12(INST_VMULL, vd_n, vs1_n, vs2_n)));
#define vmulh(vd_n, vs1_n, vs2_n) \
asm volatile (".word " STR(CUSTOM0_VD_VS12(INST_VMULH, vd_n, vs1_n, vs2_n)));
#define vmulw(vd_n, vs1_n, vs2_n) \
asm volatile (".word " STR(CUSTOM0_VD_VS12(INST_VMULW, vd_n, vs1_n, vs2_n)));
#define vmadd(vd_n, vs1_n, vs2_n) \
asm volatile (".word " STR(CUSTOM0_VD_VS12(INST_VMADD, vd_n, vs1_n, vs2_n)));
#define vmaddw(vd_n, vs1_n, vs2_n) \
asm volatile (".word " STR(CUSTOM0_VD_VS12(INST_VMADDW, vd_n, vs1_n, vs2_n)));
#define vmsub(vd_n, vs1_n, vs2_n) \
asm volatile (".word " STR(CUSTOM0_VD_VS12(INST_VMSUB, vd_n, vs1_n, vs2_n)));
#define vmsubw(vd_n, vs1_n, vs2_n) \
asm volatile (".word " STR(CUSTOM0_VD_VS12(INST_VMSUBW, vd_n, vs1_n, vs2_n)));
#define vsll(vd_n, vs1_n, vs2_n) \
asm volatile (".word " STR(CUSTOM0_VD_VS12(INST_VSLL, vd_n, vs1_n, vs2_n)));
#define vsrl(vd_n, vs1_n, vs2_n) \
asm volatile (".word " STR(CUSTOM0_VD_VS12(INST_VSRL, vd_n, vs1_n, vs2_n)));
#define vsla(vd_n, vs1_n, vs2_n) \
asm volatile (".word " STR(CUSTOM0_VD_VS12(INST_VSLA, vd_n, vs1_n, vs2_n)));
#define vsra(vd_n, vs1_n, vs2_n) \
asm volatile (".word " STR(CUSTOM0_VD_VS12(INST_VSRA, vd_n, vs1_n, vs2_n)));
#define vand(vd_n, vs1_n, vs2_n) \
asm volatile (".word " STR(CUSTOM0_VD_VS12(INST_VAND, vd_n, vs1_n, vs2_n)));
#define vor(vd_n, vs1_n, vs2_n) \
asm volatile (".word " STR(CUSTOM0_VD_VS12(INST_VOR, vd_n, vs1_n, vs2_n)));
#define vxor(vd_n, vs1_n, vs2_n) \
asm volatile (".word " STR(CUSTOM0_VD_VS12(INST_VXOR, vd_n, vs1_n, vs2_n)));
#define vxnor(vd_n, vs1_n, vs2_n) \
asm volatile (".word " STR(CUSTOM0_VD_VS12(INST_VXNOR, vd_n, vs1_n, vs2_n)));
#define vnwl(vd_n, vs1_n, vs2_n) \
asm volatile (".word " STR(CUSTOM0_VD_VS12(INST_VNWL, vd_n, vs1_n, vs2_n)));
#define vnwh(vd_n, vs1_n, vs2_n) \
asm volatile (".word " STR(CUSTOM0_VD_VS12(INST_VNWH, vd_n, vs1_n, vs2_n)));
#define vld_uib(vd_n, rs1, str) \
{ \
register uint32_t rs1_ asm ("x10") = (uint32_t) rs1; \
asm volatile ( \
".word " STR(CUSTOM0_VLD(INST_VLD, TYPE_UIB, vd_n, 10, str)) "\n\t" \
:: [_rs1] "r" (rs1_)); \
}
#define vld_sib(vd_n, rs1, str) \
{ \
register uint32_t rs1_ asm ("x10") = (uint32_t) rs1; \
asm volatile ( \
".word " STR(CUSTOM0_VLD(INST_VLD, TYPE_SIB, vd_n, 10, str)) "\n\t" \
:: [_rs1] "r" (rs1_)); \
}
#define vld_uih(vd_n, rs1, str) \
{ \
register uint32_t rs1_ asm ("x10") = (uint32_t) rs1; \
asm volatile ( \
".word " STR(CUSTOM0_VLD(INST_VLD, TYPE_UIH, vd_n, 10, str)) "\n\t" \
:: [_rs1] "r" (rs1_)); \
}
#define vld_sih(vd_n, rs1, str) \
{ \
register uint32_t rs1_ asm ("x10") = (uint32_t) rs1; \
asm volatile ( \
".word " STR(CUSTOM0_VLD(INST_VLD, TYPE_SIH, vd_n, 10, str)) "\n\t" \
:: [_rs1] "r" (rs1_)); \
}
#define vld_uiw(vd_n, rs1, str) \
{ \
register uint32_t rs1_ asm ("x10") = (uint32_t) rs1; \
asm volatile ( \
".word " STR(CUSTOM0_VLD(INST_VLD, TYPE_UIW, vd_n, 10, str)) "\n\t" \
:: [_rs1] "r" (rs1_)); \
}
#define vld_siw(vd_n, rs1, str) \
{ \
register uint32_t rs1_ asm ("x10") = (uint32_t) rs1; \
asm volatile ( \
".word " STR(CUSTOM0_VLD(INST_VLD, TYPE_SIW, vd_n, 10, str)) "\n\t" \
:: [_rs1] "r" (rs1_)); \
}
#define vld_fpw(vd_n, rs1, str) \
{ \
register uint32_t rs1_ asm ("x10") = (uint32_t) rs1; \
asm volatile ( \
".word " STR(CUSTOM0_VLD(INST_VLD, TYPE_FPW, vd_n, 10, str)) "\n\t" \
:: [_rs1] "r" (rs1_)); \
}
#define vst_uib(rs1, str, vs3_n) \
{ \
register uint32_t rs1_ asm ("x10") = (uint32_t) rs1; \
asm volatile ( \
".word " STR(CUSTOM0_VST(INST_VST, TYPE_UIB, 10, str, vs3_n)) "\n\t" \
:: [_rs1] "r" (rs1_)); \
}
#define vst_sib(rs1, str, vs3_n) \
{ \
register uint32_t rs1_ asm ("x10") = (uint32_t) rs1; \
asm volatile ( \
".word " STR(CUSTOM0_VST(INST_VST, TYPE_SIB, 10, str, vs3_n)) "\n\t" \
:: [_rs1] "r" (rs1_)); \
}
#define vst_uih(rs1, str, vs3_n) \
{ \
register uint32_t rs1_ asm ("x10") = (uint32_t) rs1; \
asm volatile ( \
".word " STR(CUSTOM0_VST(INST_VST, TYPE_UIH, 10, str, vs3_n)) "\n\t" \
:: [_rs1] "r" (rs1_)); \
}
#define vst_sih(rs1, str, vs3_n) \
{ \
register uint32_t rs1_ asm ("x10") = (uint32_t) rs1; \
asm volatile ( \
".word " STR(CUSTOM0_VST(INST_VST, TYPE_SIH, 10, str, vs3_n)) "\n\t" \
:: [_rs1] "r" (rs1_)); \
}
#define vst_uiw(rs1, str, vs3_n) \
{ \
register uint32_t rs1_ asm ("x10") = (uint32_t) rs1; \
asm volatile ( \
".word " STR(CUSTOM0_VST(INST_VST, TYPE_UIW, 10, str, vs3_n)) "\n\t" \
:: [_rs1] "r" (rs1_)); \
}
#define vst_siw(rs1, str, vs3_n) \
{ \
register uint32_t rs1_ asm ("x10") = (uint32_t) rs1; \
asm volatile ( \
".word " STR(CUSTOM0_VST(INST_VST, TYPE_SIW, 10, str, vs3_n)) "\n\t" \
:: [_rs1] "r" (rs1_)); \
}
#define vst_fpw(rs1, str, vs3_n) \
{ \
register uint32_t rs1_ asm ("x10") = (uint32_t) rs1; \
asm volatile ( \
".word " STR(CUSTOM0_VST(INST_VST, TYPE_FPW, 10, str, vs3_n)) "\n\t" \
:: [_rs1] "r" (rs1_)); \
}
#define vlds_uib(vd_n, rs1, rs2) \
{ \
register uint32_t rs1_ asm ("x10") = (uint32_t) rs1; \
register uint32_t rs2_ asm ("x11") = (uint32_t) rs2; \
asm volatile ( \
".word " STR(CUSTOM0_VLDS(INST_VLDS, TYPE_UIB, vd_n, 10, 11)) "\n\t" \
:: [_rs1] "r" (rs1_), [_rs2] "r" (rs2_)); \
}
#define vlds_sib(vd_n, rs1, rs2) \
{ \
register uint32_t rs1_ asm ("x10") = (uint32_t) rs1; \
register uint32_t rs2_ asm ("x11") = (uint32_t) rs2; \
asm volatile ( \
".word " STR(CUSTOM0_VLDS(INST_VLDS, TYPE_SIB, vd_n, 10, 11)) "\n\t" \
:: [_rs1] "r" (rs1_), [_rs2] "r" (rs2_)); \
}
#define vlds_uih(vd_n, rs1, rs2) \
{ \
register uint32_t rs1_ asm ("x10") = (uint32_t) rs1; \
register uint32_t rs2_ asm ("x11") = (uint32_t) rs2; \
asm volatile ( \
".word " STR(CUSTOM0_VLDS(INST_VLDS, TYPE_UIH, vd_n, 10, 11)) "\n\t" \
:: [_rs1] "r" (rs1_), [_rs2] "r" (rs2_)); \
}
#define vlds_sih(vd_n, rs1, rs2) \
{ \
register uint32_t rs1_ asm ("x10") = (uint32_t) rs1; \
register uint32_t rs2_ asm ("x11") = (uint32_t) rs2; \
asm volatile ( \
".word " STR(CUSTOM0_VLDS(INST_VLDS, TYPE_SIH, vd_n, 10, 11)) "\n\t" \
:: [_rs1] "r" (rs1_), [_rs2] "r" (rs2_)); \
}
#define vlds_uiw(vd_n, rs1, rs2) \
{ \
register uint32_t rs1_ asm ("x10") = (uint32_t) rs1; \
register uint32_t rs2_ asm ("x11") = (uint32_t) rs2; \
asm volatile ( \
".word " STR(CUSTOM0_VLDS(INST_VLDS, TYPE_UIW, vd_n, 10, 11)) "\n\t" \
:: [_rs1] "r" (rs1_), [_rs2] "r" (rs2_)); \
}
#define vlds_siw(vd_n, rs1, rs2) \
{ \
register uint32_t rs1_ asm ("x10") = (uint32_t) rs1; \
register uint32_t rs2_ asm ("x11") = (uint32_t) rs2; \
asm volatile ( \
".word " STR(CUSTOM0_VLDS(INST_VLDS, TYPE_SIW, vd_n, 10, 11)) "\n\t" \
:: [_rs1] "r" (rs1_), [_rs2] "r" (rs2_)); \
}
#define vlds_fpw(vd_n, rs1, rs2) \
{ \
register uint32_t rs1_ asm ("x10") = (uint32_t) rs1; \
register uint32_t rs2_ asm ("x11") = (uint32_t) rs2; \
asm volatile ( \
".word " STR(CUSTOM0_VLDS(INST_VLDS, TYPE_FPW, vd_n, 10, 11)) "\n\t" \
:: [_rs1] "r" (rs1_), [_rs2] "r" (rs2_)); \
}
#define vsts_uib(rs1, rs2, vs3_n) \
{ \
register uint32_t rs1_ asm ("x10") = (uint32_t) rs1; \
register uint32_t rs2_ asm ("x11") = (uint32_t) rs2; \
asm volatile ( \
".word " STR(CUSTOM0_VSTS(INST_VSTS, TYPE_UIB, 10, 11, vs3_n)) "\n\t" \
:: [_rs1] "r" (rs1_), [_rs2] "r" (rs2_)); \
}
#define vsts_sib(rs1, rs2, vs3_n) \
{ \
register uint32_t rs1_ asm ("x10") = (uint32_t) rs1; \
register uint32_t rs2_ asm ("x11") = (uint32_t) rs2; \
asm volatile ( \
".word " STR(CUSTOM0_VSTS(INST_VSTS, TYPE_SIB, 10, 11, vs3_n)) "\n\t" \
:: [_rs1] "r" (rs1_), [_rs2] "r" (rs2_)); \
}
#define vsts_uih(rs1, rs2, vs3_n) \
{ \
register uint32_t rs1_ asm ("x10") = (uint32_t) rs1; \
register uint32_t rs2_ asm ("x11") = (uint32_t) rs2; \
asm volatile ( \
".word " STR(CUSTOM0_VSTS(INST_VSTS, TYPE_UIH, 10, 11, vs3_n)) "\n\t" \
:: [_rs1] "r" (rs1_), [_rs2] "r" (rs2_)); \
}
#define vsts_sih(rs1, rs2, vs3_n) \
{ \
register uint32_t rs1_ asm ("x10") = (uint32_t) rs1; \
register uint32_t rs2_ asm ("x11") = (uint32_t) rs2; \
asm volatile ( \
".word " STR(CUSTOM0_VSTS(INST_VSTS, TYPE_SIH, 10, 11, vs3_n)) "\n\t" \
:: [_rs1] "r" (rs1_), [_rs2] "r" (rs2_)); \
}
#define vsts_uiw(rs1, rs2, vs3_n) \
{ \
register uint32_t rs1_ asm ("x10") = (uint32_t) rs1; \
register uint32_t rs2_ asm ("x11") = (uint32_t) rs2; \
asm volatile ( \
".word " STR(CUSTOM0_VSTS(INST_VSTS, TYPE_UIW, 10, 11, vs3_n)) "\n\t" \
:: [_rs1] "r" (rs1_), [_rs2] "r" (rs2_)); \
}
#define vsts_siw(rs1, rs2, vs3_n) \
{ \
register uint32_t rs1_ asm ("x10") = (uint32_t) rs1; \
register uint32_t rs2_ asm ("x11") = (uint32_t) rs2; \
asm volatile ( \
".word " STR(CUSTOM0_VSTS(INST_VSTS, TYPE_SIW, 10, 11, vs3_n)) "\n\t" \
:: [_rs1] "r" (rs1_), [_rs2] "r" (rs2_)); \
}
#define vsts_fpw(rs1, rs2, vs3_n) \
{ \
register uint32_t rs1_ asm ("x10") = (uint32_t) rs1; \
register uint32_t rs2_ asm ("x11") = (uint32_t) rs2; \
asm volatile ( \
".word " STR(CUSTOM0_VSTS(INST_VSTS, TYPE_FPW, 10, 11, vs3_n)) "\n\t" \
:: [_rs1] "r" (rs1_), [_rs2] "r" (rs2_)); \
}
#define vldx_uib(vd_n, rs1, vs2_n) \
{ \
register uint32_t rs1_ asm ("x10") = (uint32_t) rs1; \
asm volatile ( \
".word " STR(CUSTOM0_VLDX(INST_VLDX, TYPE_UIB, vd_n, 10, vs2_n)) "\n\t" \
:: [_rs1] "r" (rs1_)); \
}
#define vldx_sib(vd_n, rs1, vs2_n) \
{ \
register uint32_t rs1_ asm ("x10") = (uint32_t) rs1; \
asm volatile ( \
".word " STR(CUSTOM0_VLDX(INST_VLDX, TYPE_SIB, vd_n, 10, vs2_n)) "\n\t" \
:: [_rs1] "r" (rs1_)); \
}
#define vldx_uih(vd_n, rs1, vs2_n) \
{ \
register uint32_t rs1_ asm ("x10") = (uint32_t) rs1; \
asm volatile ( \
".word " STR(CUSTOM0_VLDX(INST_VLDX, TYPE_UIH, vd_n, 10, vs2_n)) "\n\t" \
:: [_rs1] "r" (rs1_)); \
}
#define vldx_sih(vd_n, rs1, vs2_n) \
{ \
register uint32_t rs1_ asm ("x10") = (uint32_t) rs1; \
asm volatile ( \
".word " STR(CUSTOM0_VLDX(INST_VLDX, TYPE_SIH, vd_n, 10, vs2_n)) "\n\t" \
:: [_rs1] "r" (rs1_)); \
}
#define vldx_uiw(vd_n, rs1, vs2_n) \
{ \
register uint32_t rs1_ asm ("x10") = (uint32_t) rs1; \
asm volatile ( \
".word " STR(CUSTOM0_VLDX(INST_VLDX, TYPE_UIW, vd_n, 10, vs2_n)) "\n\t" \
:: [_rs1] "r" (rs1_)); \
}
#define vldx_siw(vd_n, rs1, vs2_n) \
{ \
register uint32_t rs1_ asm ("x10") = (uint32_t) rs1; \
asm volatile ( \
".word " STR(CUSTOM0_VLDX(INST_VLDX, TYPE_SIW, vd_n, 10, vs2_n)) "\n\t" \
:: [_rs1] "r" (rs1_)); \
}
#define vldx_fpw(vd_n, rs1, vs2_n) \
{ \
register uint32_t rs1_ asm ("x10") = (uint32_t) rs1; \
asm volatile ( \
".word " STR(CUSTOM0_VLDX(INST_VLDX, TYPE_FPW, vd_n, 10, vs2_n)) "\n\t" \
:: [_rs1] "r" (rs1_)); \
}
#define vstx_uib(rs1, vs2_n, vs3_n) \
{ \
register uint32_t rs1_ asm ("x10") = (uint32_t) rs1; \
asm volatile ( \
".word " STR(CUSTOM0_VSTX(INST_VSTX, TYPE_UIB, 10, vs2_n, vs3_n)) "\n\t" \
:: [_rs1] "r" (rs1_)); \
}
#define vstx_sib(rs1, vs2_n, vs3_n) \
{ \
register uint32_t rs1_ asm ("x10") = (uint32_t) rs1; \
asm volatile ( \
".word " STR(CUSTOM0_VSTX(INST_VSTX, TYPE_SIB, 10, vs2_n, vs3_n)) "\n\t" \
:: [_rs1] "r" (rs1_)); \
}
#define vstx_uih(rs1, vs2_n, vs3_n) \
{ \
register uint32_t rs1_ asm ("x10") = (uint32_t) rs1; \
asm volatile ( \
".word " STR(CUSTOM0_VSTX(INST_VSTX, TYPE_UIH, 10, vs2_n, vs3_n)) "\n\t" \
:: [_rs1] "r" (rs1_)); \
}
#define vstx_sih(rs1, vs2_n, vs3_n) \
{ \
register uint32_t rs1_ asm ("x10") = (uint32_t) rs1; \
asm volatile ( \
".word " STR(CUSTOM0_VSTX(INST_VSTX, TYPE_SIH, 10, vs2_n, vs3_n)) "\n\t" \
:: [_rs1] "r" (rs1_)); \
}
#define vstx_uiw(rs1, vs2_n, vs3_n) \
{ \
register uint32_t rs1_ asm ("x10") = (uint32_t) rs1; \
asm volatile ( \
".word " STR(CUSTOM0_VSTX(INST_VSTX, TYPE_UIW, 10, vs2_n, vs3_n)) "\n\t" \
:: [_rs1] "r" (rs1_)); \
}
#define vstx_siw(rs1, vs2_n, vs3_n) \
{ \
register uint32_t rs1_ asm ("x10") = (uint32_t) rs1; \
asm volatile ( \
".word " STR(CUSTOM0_VSTX(INST_VSTX, TYPE_SIW, 10, vs2_n, vs3_n)) "\n\t" \
:: [_rs1] "r" (rs1_)); \
}
#define vstx_fpw(rs1, vs2_n, vs3_n) \
{ \
register uint32_t rs1_ asm ("x10") = (uint32_t) rs1; \
asm volatile ( \
".word " STR(CUSTOM0_VSTX(INST_VSTX, TYPE_FPW, 10, vs2_n, vs3_n)) "\n\t" \
:: [_rs1] "r" (rs1_)); \
}