https://github.com/realqhc updated https://github.com/llvm/llvm-project/pull/150379
>From e1c4cdd3a5ec6e3188a316c49079aae5b1fb302a Mon Sep 17 00:00:00 2001 From: Qihan Cai <caiqihan...@hotmail.com> Date: Fri, 18 Jul 2025 16:28:20 +1000 Subject: [PATCH] [RISCV] Support Remaining P Extension Instructions for RV32/64 This patch implements pages 15-17 from jhauser.us/RISCV/ext-P/RVP-instrEncodings-015.pdf Documentation: https://jhauser.us/RISCV/ext-P/RVP-baseInstrs-014.pdf https://jhauser.us/RISCV/ext-P/RVP-instrEncodings-015.pdf --- .../Driver/print-supported-extensions-riscv.c | 2 +- llvm/lib/Target/RISCV/RISCVFeatures.td | 2 +- llvm/lib/Target/RISCV/RISCVInstrInfoP.td | 201 +++++++++ llvm/test/MC/RISCV/attribute-arch.s | 8 +- llvm/test/MC/RISCV/rv32p-valid.s | 275 ++++++++++++ llvm/test/MC/RISCV/rv64p-valid.s | 399 ++++++++++++++++++ .../TargetParser/RISCVISAInfoTest.cpp | 2 +- 7 files changed, 882 insertions(+), 7 deletions(-) diff --git a/clang/test/Driver/print-supported-extensions-riscv.c b/clang/test/Driver/print-supported-extensions-riscv.c index 2503f2473d64a..2e4d7cfa82c80 100644 --- a/clang/test/Driver/print-supported-extensions-riscv.c +++ b/clang/test/Driver/print-supported-extensions-riscv.c @@ -207,7 +207,7 @@ // CHECK-NEXT: xwchc 2.2 'Xwchc' (WCH/QingKe additional compressed opcodes) // CHECK-EMPTY: // CHECK-NEXT: Experimental extensions -// CHECK-NEXT: p 0.14 'P' ('Base P' (Packed SIMD)) +// CHECK-NEXT: p 0.15 'P' ('Base P' (Packed SIMD)) // CHECK-NEXT: zicfilp 1.0 'Zicfilp' (Landing pad) // CHECK-NEXT: zicfiss 1.0 'Zicfiss' (Shadow stack) // CHECK-NEXT: zalasr 0.1 'Zalasr' (Load-Acquire and Store-Release Instructions) diff --git a/llvm/lib/Target/RISCV/RISCVFeatures.td b/llvm/lib/Target/RISCV/RISCVFeatures.td index a7329d201f880..2163b063610af 100644 --- a/llvm/lib/Target/RISCV/RISCVFeatures.td +++ b/llvm/lib/Target/RISCV/RISCVFeatures.td @@ -1069,7 +1069,7 @@ def HasStdExtSmctrOrSsctr : Predicate<"Subtarget->hasStdExtSmctrOrSsctr()">, // Packed SIMD Extensions def FeatureStdExtP - : RISCVExperimentalExtension<0, 14, + : RISCVExperimentalExtension<0, 15, "'Base P' (Packed SIMD)">; def HasStdExtP : Predicate<"Subtarget->hasStdExtP()">, AssemblerPredicate<(all_of FeatureStdExtP), diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoP.td b/llvm/lib/Target/RISCV/RISCVInstrInfoP.td index e67417035963a..9e19ffb00c9ab 100644 --- a/llvm/lib/Target/RISCV/RISCVInstrInfoP.td +++ b/llvm/lib/Target/RISCV/RISCVInstrInfoP.td @@ -559,3 +559,204 @@ let Predicates = [HasStdExtP, IsRV64] in { def PPACKT_W : RVPBinary_rr<0b0110, 0b01, 0b100, "ppackt.w">; def PACKT_RV64 : RVPBinary_rr<0b0110, 0b11, 0b100, "packt">; } // Predicates = [HasStdExtP, IsRV64] +let Predicates = [HasStdExtP] in { + def PM2ADD_H : RVPBinary_rr<0b0000, 0b00, 0b101, "pm2add.h">; + def PM4ADD_B : RVPBinary_rr<0b0000, 0b10, 0b101, "pm4add.b">; + def PM2ADDA_H : RVPBinary_rr<0b0001, 0b00, 0b101, "pm2adda.h">; + def PM4ADDA_B : RVPBinary_rr<0b0001, 0b10, 0b101, "pm4adda.b">; + def PM2ADD_HX : RVPBinary_rr<0b0010, 0b00, 0b101, "pm2add.hx">; + def PM2ADDA_HX : RVPBinary_rr<0b0011, 0b00, 0b101, "pm2adda.hx">; + + def PM2ADDU_H : RVPBinary_rr<0b0100, 0b00, 0b101, "pm2addu.h">; + def PM4ADDU_B : RVPBinary_rr<0b0100, 0b10, 0b101, "pm4addu.b">; + def PM2ADDAU_H : RVPBinary_rr<0b0101, 0b00, 0b101, "pm2addau.h">; + def PM4ADDAU_B : RVPBinary_rr<0b0101, 0b10, 0b101, "pm4addau.b">; + def PMQ2ADD_H : RVPBinary_rr<0b0110, 0b00, 0b101, "pmq2add.h">; + def PMQR2ADD_H : RVPBinary_rr<0b0110, 0b10, 0b101, "pmqr2add.h">; + def PMQ2ADDA_H : RVPBinary_rr<0b0111, 0b00, 0b101, "pmq2adda.h">; + def PMQR2ADDA_H : RVPBinary_rr<0b0111, 0b10, 0b101, "pmqr2adda.h">; + + def PM2SUB_H : RVPBinary_rr<0b1000, 0b00, 0b101, "pm2sub.h">; + def PM2SADD_H : RVPBinary_rr<0b1000, 0b10, 0b101, "pm2sadd.h">; + def PM2SUBA_H : RVPBinary_rr<0b1001, 0b00, 0b101, "pm2suba.h">; + def PM2SUB_HX : RVPBinary_rr<0b1010, 0b00, 0b101, "pm2sub.hx">; + def PM2SADD_HX : RVPBinary_rr<0b1010, 0b10, 0b101, "pm2sadd.hx">; + def PM2SUBA_HX : RVPBinary_rr<0b1011, 0b00, 0b101, "pm2suba.hx">; + + def PM2ADDSU_H : RVPBinary_rr<0b1100, 0b00, 0b101, "pm2addsu.h">; + def PM4ADDSU_B : RVPBinary_rr<0b1100, 0b10, 0b101, "pm4addsu.b">; + def PM2ADDASU_H : RVPBinary_rr<0b1101, 0b00, 0b101, "pm2addasu.h">; + def PM4ADDASU_B : RVPBinary_rr<0b1101, 0b10, 0b101, "pm4addasu.b">; +} // Predicates = [HasStdExtP] +let Predicates = [HasStdExtP, IsRV32], DecoderNamespace = "RV32Only" in { + def MQACC_H01 : RVPBinary_rr<0b1111, 0b00, 0b101, "mqacc.h01">; + def MQRACC_H01 : RVPBinary_rr<0b1111, 0b10, 0b101, "mqracc.h01">; +} // // Predicates = [HasStdExtP, IsRV32], DecoderNamespace = "RV32Only" +let Predicates = [HasStdExtP, IsRV64] in { + def PM2ADD_W : RVPBinary_rr<0b0000, 0b01, 0b101, "pm2add.w">; + def PM4ADD_H : RVPBinary_rr<0b0000, 0b11, 0b101, "pm4add.h">; + def PM2ADDA_W : RVPBinary_rr<0b0001, 0b01, 0b101, "pm2adda.w">; + def PM4ADDA_H : RVPBinary_rr<0b0001, 0b11, 0b101, "pm4adda.h">; + def PM2ADD_WX : RVPBinary_rr<0b0010, 0b01, 0b101, "pm2add.wx">; + def PM2ADDA_WX : RVPBinary_rr<0b0011, 0b01, 0b101, "pm2adda.wx">; + + def PM2ADDU_W : RVPBinary_rr<0b0100, 0b01, 0b101, "pm2addu.w">; + def PM4ADDU_H : RVPBinary_rr<0b0100, 0b11, 0b101, "pm4addu.h">; + def PM2ADDAU_W : RVPBinary_rr<0b0101, 0b01, 0b101, "pm2addau.w">; + def PM4ADDAU_H : RVPBinary_rr<0b0101, 0b11, 0b101, "pm4addau.h">; + def PMQ2ADD_W : RVPBinary_rr<0b0110, 0b01, 0b101, "pmq2add.w">; + def PMQR2ADD_W : RVPBinary_rr<0b0110, 0b11, 0b101, "pmqr2add.w">; + def PMQ2ADDA_W : RVPBinary_rr<0b0111, 0b01, 0b101, "pmq2adda.w">; + def PMQR2ADDA_W : RVPBinary_rr<0b0111, 0b11, 0b101, "pmqr2adda.w">; + + def PM2SUB_W : RVPBinary_rr<0b1000, 0b01, 0b101, "pm2sub.w">; + def PM2SUBA_W : RVPBinary_rr<0b1001, 0b01, 0b101, "pm2suba.w">; + def PM2SUB_WX : RVPBinary_rr<0b1010, 0b01, 0b101, "pm2sub.wx">; + def PM2SUBA_WX : RVPBinary_rr<0b1011, 0b01, 0b101, "pm2suba.wx">; + + def PM2ADDSU_W : RVPBinary_rr<0b1100, 0b01, 0b101, "pm2addsu.w">; + def PM4ADDSU_H : RVPBinary_rr<0b1100, 0b11, 0b101, "pm4addsu.h">; + def PM2ADDASU_W : RVPBinary_rr<0b1101, 0b01, 0b101, "pm2addasu.w">; + def PM4ADDASU_H : RVPBinary_rr<0b1101, 0b11, 0b101, "pm4addasu.h">; + + def PMQACC_W_H01 : RVPBinary_rr<0b1111, 0b00, 0b101, "pmqacc.w.h01">; + def MQACC_W01 : RVPBinary_rr<0b1111, 0b01, 0b101, "mqacc.w01">; + def PMQRACC_W_H01 : RVPBinary_rr<0b1111, 0b10, 0b101, "pmqracc.w.h01">; + def MQRACC_W01 : RVPBinary_rr<0b1111, 0b11, 0b101, "mqracc.w01">; +} // Predicates = [HasStdExtP, IsRV64] +let Predicates = [HasStdExtP] in { + def PAS_HX : RVPBinary_rr<0b0000, 0b00, 0b110, "pas.hx">; + def PSA_HX : RVPBinary_rr<0b0000, 0b10, 0b110, "psa.hx">; + def PSAS_HX : RVPBinary_rr<0b0010, 0b00, 0b110, "psas.hx">; + def PSSA_HX : RVPBinary_rr<0b0010, 0b10, 0b110, "pssa.hx">; + + def PMSEQ_H : RVPBinary_rr<0b1000, 0b00, 0b110, "pmseq.h">; + def PMSEQ_B : RVPBinary_rr<0b1000, 0b10, 0b110, "pmseq.b">; + def PMSLT_H : RVPBinary_rr<0b1010, 0b00, 0b110, "pmslt.h">; + def PMSLT_B : RVPBinary_rr<0b1010, 0b10, 0b110, "pmslt.b">; + def PMSLTU_H : RVPBinary_rr<0b1011, 0b00, 0b110, "pmsltu.h">; + def PMSLTU_B : RVPBinary_rr<0b1011, 0b10, 0b110, "pmsltu.b">; + + def PMIN_H : RVPBinary_rr<0b1100, 0b00, 0b110, "pmin.h">; + def PMIN_B : RVPBinary_rr<0b1100, 0b10, 0b110, "pmin.b">; + def PMINU_H : RVPBinary_rr<0b1101, 0b00, 0b110, "pminu.h">; + def PMINU_B : RVPBinary_rr<0b1101, 0b10, 0b110, "pminu.b">; + def PMAX_H : RVPBinary_rr<0b1110, 0b00, 0b110, "pmax.h">; + def PMAX_B : RVPBinary_rr<0b1110, 0b10, 0b110, "pmax.b">; + def PMAXU_H : RVPBinary_rr<0b1111, 0b00, 0b110, "pmaxu.h">; + def PMAXU_B : RVPBinary_rr<0b1111, 0b10, 0b110, "pmaxu.b">; +} // Predicates = [HasStdExtP] +let Predicates = [HasStdExtP, IsRV32], DecoderNamespace = "RV32Only" in { + def MSEQ : RVPBinary_rr<0b1000, 0b01, 0b110, "mseq">; + def MSLT : RVPBinary_rr<0b1010, 0b01, 0b110, "mslt">; + def MSLTU : RVPBinary_rr<0b1011, 0b01, 0b110, "msltu">; +} // Predicates = [HasStdExtP, IsRV32], DecoderNamespace = "RV32Only" +let Predicates = [HasStdExtP, IsRV64] in { + def PAS_WX : RVPBinary_rr<0b0000, 0b01, 0b110, "pas.wx">; + def PSA_WX : RVPBinary_rr<0b0000, 0b11, 0b110, "psa.wx">; + def PSAS_WX : RVPBinary_rr<0b0010, 0b01, 0b110, "psas.wx">; + def PSSA_WX : RVPBinary_rr<0b0010, 0b11, 0b110, "pssa.wx">; + def PAAS_WX : RVPBinary_rr<0b0011, 0b01, 0b110, "paas.wx">; + def PASA_WX : RVPBinary_rr<0b0011, 0b11, 0b110, "pasa.wx">; + + def PMSEQ_W : RVPBinary_rr<0b1000, 0b01, 0b110, "pmseq.w">; + def PMSLT_W : RVPBinary_rr<0b1010, 0b01, 0b110, "pmslt.w">; + def PMSLTU_W : RVPBinary_rr<0b1011, 0b01, 0b110, "pmsltu.w">; + + def PMIN_W : RVPBinary_rr<0b1100, 0b01, 0b110, "pmin.w">; + def PMINU_W : RVPBinary_rr<0b1101, 0b01, 0b110, "pminu.w">; + def PMAX_W : RVPBinary_rr<0b1110, 0b01, 0b110, "pmax.w">; + def PMAXU_W : RVPBinary_rr<0b1111, 0b01, 0b110, "pmaxu.w">; +} // Predicates = [HasStdExtP, IsRV64] + + +let Predicates = [HasStdExtP] in { + def PMULH_H : RVPBinary_rr<0b0000, 0b00, 0b111, "pmulh.h">; + def PMULHR_H : RVPBinary_rr<0b0000, 0b10, 0b111, "pmulhr.h">; + def PMHACC_H : RVPBinary_rr<0b0001, 0b00, 0b111, "pmhacc.h">; + def PMHRACC_H : RVPBinary_rr<0b0001, 0b10, 0b111, "pmhracc.h">; + def PMULHU_H : RVPBinary_rr<0b0010, 0b00, 0b111, "pmulhu.h">; + def PMULHRU_H : RVPBinary_rr<0b0010, 0b10, 0b111, "pmulhru.h">; + def PMHACCU_H : RVPBinary_rr<0b0011, 0b00, 0b111, "pmhaccu.h">; + def PMHRACCU_H : RVPBinary_rr<0b0011, 0b10, 0b111, "pmhraccu.h">; + + def PMULH_H_B0 : RVPBinary_rr<0b0100, 0b00, 0b111, "pmulh.h.b0">; + def PMULHSU_H_B0 : RVPBinary_rr<0b0100, 0b10, 0b111, "pmulhsu.h.b0">; + def PMHACCU_H_B0 : RVPBinary_rr<0b0101, 0b00, 0b111, "pmhaccu.h.b0">; + def PMHACCSU_H_B0 : RVPBinary_rr<0b0101, 0b10, 0b111, "pmhaccsu.h.b0">; + def PMULH_H_B1 : RVPBinary_rr<0b0110, 0b00, 0b111, "pmulh.h.b1">; + def PMULHSU_H_B1 : RVPBinary_rr<0b0110, 0b10, 0b111, "pmulhsu.h.b1">; + def PMHACC_H_B1 : RVPBinary_rr<0b0111, 0b00, 0b111, "pmhacc.h.b1">; + def PMHACCSU_H_B1 : RVPBinary_rr<0b0111, 0b10, 0b111, "pmhaccsu.h.b1">; + + def PMULHSU_H : RVPBinary_rr<0b1000, 0b00, 0b111, "pmulhsu.h">; + def PMULHRSU_H : RVPBinary_rr<0b1000, 0b10, 0b111, "pmulhrsu.h">; + def PMHACCSU_H : RVPBinary_rr<0b1001, 0b00, 0b111, "pmhaccsu.h">; + def PMHRACCSU_H : RVPBinary_rr<0b1001, 0b10, 0b111, "pmhraccsu.h">; + def PMULQ_H : RVPBinary_rr<0b1010, 0b00, 0b111, "pmulq.h">; + def PMULQR_H : RVPBinary_rr<0b1010, 0b10, 0b111, "pmulqr.h">; +} // Predicates = [HasStdExtP] + +let Predicates = [HasStdExtP, IsRV32], DecoderNamespace = "RV32Only" in { + def MULHR : RVPBinary_rr<0b0000, 0b11, 0b111, "mulhr">; + def MHACC : RVPBinary_rr<0b0001, 0b01, 0b111, "mhacc">; + def MHRACC : RVPBinary_rr<0b0001, 0b11, 0b111, "mhracc">; + def MULHRU : RVPBinary_rr<0b0010, 0b11, 0b111, "mulhru">; + def MHACCU : RVPBinary_rr<0b0011, 0b01, 0b111, "mhaccu">; + def MHRACCU : RVPBinary_rr<0b0011, 0b11, 0b111, "mhraccu">; + + def MULH_H0 : RVPBinary_rr<0b0100, 0b01, 0b111, "mulh.h0">; + def MULHSU_H0 : RVPBinary_rr<0b0100, 0b11, 0b111, "mulhsu.h0">; + def MHACC_H0 : RVPBinary_rr<0b0101, 0b01, 0b111, "mhacc.h0">; + def MHACCSU_H0 : RVPBinary_rr<0b0101, 0b11, 0b111, "mhaccsu.h0">; + def MULH_H1 : RVPBinary_rr<0b0110, 0b01, 0b111, "mulh.h1">; + def MULHSU_H1 : RVPBinary_rr<0b0110, 0b11, 0b111, "mulhsu.h1">; + def MHACC_H1 : RVPBinary_rr<0b0111, 0b01, 0b111, "mhacc.h1">; + def MHACCSU_H1 : RVPBinary_rr<0b0111, 0b11, 0b111, "mhaccsu.h1">; + + def MULHRSU_H : RVPBinary_rr<0b1000, 0b11, 0b111, "mulhrsu.h">; + def MHACCSU : RVPBinary_rr<0b1001, 0b01, 0b111, "mhaccsu">; + def MHRACCSU : RVPBinary_rr<0b1001, 0b11, 0b111, "mhraccsu">; + def MULQ : RVPBinary_rr<0b1010, 0b01, 0b111, "mulq">; + def MULQR : RVPBinary_rr<0b1010, 0b11, 0b111, "mulqr">; + + def MQACC_H00 : RVPBinary_rr<0b1101, 0b00, 0b111, "mqacc.h00">; + def MQRACC_H00 : RVPBinary_rr<0b1101, 0b10, 0b111, "mqracc.h00">; + def MQACC_H11 : RVPBinary_rr<0b1111, 0b00, 0b111, "mqacc.h11">; + def MQRACC_H11 : RVPBinary_rr<0b1111, 0b10, 0b111, "mqracc.h11">; +} // Predicates = [HasStdExtP, IsRV32], DecoderNamespace = "RV32Only" in +let Predicates = [HasStdExtP, IsRV64] in { + def PMULH_W : RVPBinary_rr<0b0000, 0b01, 0b111, "pmulh.w">; + def PMULHR_W : RVPBinary_rr<0b0000, 0b11, 0b111, "pmulhr.w">; + def PMHACC_W : RVPBinary_rr<0b0001, 0b01, 0b111, "pmhacc.w">; + def PMHRACC_W : RVPBinary_rr<0b0001, 0b11, 0b111, "pmhracc.w">; + def PMULHU_W : RVPBinary_rr<0b0010, 0b01, 0b111, "pmulhu.w">; + def PMULHRU_W : RVPBinary_rr<0b0010, 0b11, 0b111, "pmulhru.w">; + def PMHACCU_W : RVPBinary_rr<0b0011, 0b01, 0b111, "pmhaccu.w">; + def PMHRACCU_W : RVPBinary_rr<0b0011, 0b11, 0b111, "pmhraccu.w">; + + def PMULH_W_H0 : RVPBinary_rr<0b0100, 0b01, 0b111, "pmulh.w.h0">; + def PMULHSU_W_H0 : RVPBinary_rr<0b0100, 0b11, 0b111, "pmulhsu.w.h0">; + def PMHACC_W_H0 : RVPBinary_rr<0b0101, 0b01, 0b111, "pmhacc.w.h0">; + def PMHACCSU_W_H0 : RVPBinary_rr<0b0101, 0b11, 0b111, "pmhaccsu.w.h0">; + def PMULH_W_H1 : RVPBinary_rr<0b0110, 0b01, 0b111, "pmulh.w.h1">; + def PMULHSU_W_H1 : RVPBinary_rr<0b0110, 0b11, 0b111, "pmulhsu.w.h1">; + def PMHACC_W_H1 : RVPBinary_rr<0b0111, 0b01, 0b111, "pmhacc.w.h1">; + def PMHACCSU_W_H1 : RVPBinary_rr<0b0111, 0b11, 0b111, "pmhaccsu.w.h1">; + + def PMULHSU_W : RVPBinary_rr<0b1000, 0b01, 0b111, "pmulhsu.w">; + def PMULHRSU_W : RVPBinary_rr<0b1000, 0b11, 0b111, "pmulhrsu.w">; + def PMHACCSU_W : RVPBinary_rr<0b1001, 0b01, 0b111, "pmhaccsu.w">; + def PMHRACCSU_W : RVPBinary_rr<0b1001, 0b11, 0b111, "pmhraccsu.w">; + def PMULQ_W : RVPBinary_rr<0b1010, 0b01, 0b111, "pmulq.w">; + def PMULQR_W : RVPBinary_rr<0b1010, 0b11, 0b111, "pmulqr.w">; + + def PMQACC_W_H00 : RVPBinary_rr<0b1101, 0b00, 0b111, "pmqacc.w.h00">; + def MQACC_W00 : RVPBinary_rr<0b1101, 0b01, 0b111, "mqacc.w00">; + def PMQRACC_W_H00 : RVPBinary_rr<0b1101, 0b10, 0b111, "pmqracc.w.h00">; + def MQRACC_W00 : RVPBinary_rr<0b1101, 0b11, 0b111, "mqracc.w00">; + def PMQACC_W_H11 : RVPBinary_rr<0b1111, 0b00, 0b111, "pmqacc.w.h11">; + def MQACC_W11 : RVPBinary_rr<0b1111, 0b01, 0b111, "mqacc.w11">; + def PMQRACC_W_H11 : RVPBinary_rr<0b1111, 0b10, 0b111, "pmqracc.w.h11">; + def MQRACC_W11 : RVPBinary_rr<0b1111, 0b11, 0b111, "mqracc.w11">; +} // Predicates = [HasStdExtP, IsRV64] \ No newline at end of file diff --git a/llvm/test/MC/RISCV/attribute-arch.s b/llvm/test/MC/RISCV/attribute-arch.s index 19cc4d5ba1675..03a8957b5b5ca 100644 --- a/llvm/test/MC/RISCV/attribute-arch.s +++ b/llvm/test/MC/RISCV/attribute-arch.s @@ -492,8 +492,8 @@ .attribute arch, "rv32i_sdtrig1p0" # CHECK: attribute 5, "rv32i2p1_sdtrig1p0" -.attribute arch, "rv32i_p0p14" -# CHECK: attribute 5, "rv32i2p1_p0p14" +.attribute arch, "rv32i_p0p15" +# CHECK: attribute 5, "rv32i2p1_p0p15" -.attribute arch, "rv64i_p0p14" -# CHECK: attribute 5, "rv64i2p1_p0p14" +.attribute arch, "rv64i_p0p15" +# CHECK: attribute 5, "rv64i2p1_p0p15" diff --git a/llvm/test/MC/RISCV/rv32p-valid.s b/llvm/test/MC/RISCV/rv32p-valid.s index 0383e4ec1ea62..c1d5914192fad 100644 --- a/llvm/test/MC/RISCV/rv32p-valid.s +++ b/llvm/test/MC/RISCV/rv32p-valid.s @@ -373,3 +373,278 @@ ppackt.h t3, s0, s0 # CHECK-ASM-AND-OBJ: packt a2, t3, t1 # CHECK-ASM: encoding: [0x3b,0x46,0x6e,0xb2] packt a2, t3, t1 +# CHECK-ASM: encoding: [0x3b,0x5e,0x83,0x80] +pm2add.h t3, t1, s0 +# CHECK-ASM-AND-OBJ: pm4add.b t1, s2, t5 +# CHECK-ASM: encoding: [0x3b,0x53,0xe9,0x85] +pm4add.b t1, s2, t5 +# CHECK-ASM-AND-OBJ: pm2adda.h t1, s2, a4 +# CHECK-ASM: encoding: [0x3b,0x53,0xe9,0x88] +pm2adda.h t1, s2, a4 +# CHECK-ASM-AND-OBJ: pm4adda.b t3, a0, t5 +# CHECK-ASM: encoding: [0x3b,0x5e,0xe5,0x8d] +pm4adda.b t3, a0, t5 +# CHECK-ASM-AND-OBJ: pm2add.hx s0, t5, a4 +# CHECK-ASM: encoding: [0x3b,0x54,0xef,0x90] +pm2add.hx s0, t5, a4 +# CHECK-ASM-AND-OBJ: pm2adda.hx a0, a0, t1 +# CHECK-ASM: encoding: [0x3b,0x55,0x65,0x98] +pm2adda.hx a0, a0, t1 +# CHECK-ASM-AND-OBJ: pm2addu.h s2, t5, a2 +# CHECK-ASM: encoding: [0x3b,0x59,0xcf,0xa0] +pm2addu.h s2, t5, a2 +# CHECK-ASM-AND-OBJ: pm4addu.b t5, s0, t1 +# CHECK-ASM: encoding: [0x3b,0x5f,0x64,0xa4] +pm4addu.b t5, s0, t1 +# CHECK-ASM-AND-OBJ: pm2addau.h t3, t1, t5 +# CHECK-ASM: encoding: [0x3b,0x5e,0xe3,0xa9] +pm2addau.h t3, t1, t5 +# CHECK-ASM-AND-OBJ: pm4addau.b a4, t3, a0 +# CHECK-ASM: encoding: [0x3b,0x57,0xae,0xac] +pm4addau.b a4, t3, a0 +# CHECK-ASM-AND-OBJ: pmq2add.h t1, a2, t1 +# CHECK-ASM: encoding: [0x3b,0x53,0x66,0xb0] +pmq2add.h t1, a2, t1 +# CHECK-ASM-AND-OBJ: pmqr2add.h a2, a4, s2 +# CHECK-ASM: encoding: [0x3b,0x56,0x27,0xb5] +pmqr2add.h a2, a4, s2 +# CHECK-ASM-AND-OBJ: pmq2adda.h a2, s2, t1 +# CHECK-ASM: encoding: [0x3b,0x56,0x69,0xb8] +pmq2adda.h a2, s2, t1 +# CHECK-ASM-AND-OBJ: pmqr2adda.h t1, s0, a2 +# CHECK-ASM: encoding: [0x3b,0x53,0xc4,0xbc] +pmqr2adda.h t1, s0, a2 +# CHECK-ASM-AND-OBJ: pm2sub.h t1, a0, a4 +# CHECK-ASM: encoding: [0x3b,0x53,0xe5,0xc0] +pm2sub.h t1, a0, a4 +# CHECK-ASM-AND-OBJ: pm2sadd.h s2, s2, t3 +# CHECK-ASM: encoding: [0x3b,0x59,0xc9,0xc5] +pm2sadd.h s2, s2, t3 +# CHECK-ASM-AND-OBJ: pm2suba.h s0, s0, t3 +# CHECK-ASM: encoding: [0x3b,0x54,0xc4,0xc9] +pm2suba.h s0, s0, t3 +# CHECK-ASM-AND-OBJ: pm2sub.hx a2, a2, a0 +# CHECK-ASM: encoding: [0x3b,0x56,0xa6,0xd0] +pm2sub.hx a2, a2, a0 +# CHECK-ASM-AND-OBJ: pm2sadd.hx t5, s2, a0 +# CHECK-ASM: encoding: [0x3b,0x5f,0xa9,0xd4] +pm2sadd.hx t5, s2, a0 +# CHECK-ASM-AND-OBJ: pm2suba.hx a4, a2, t5 +# CHECK-ASM: encoding: [0x3b,0x57,0xe6,0xd9] +pm2suba.hx a4, a2, t5 +# CHECK-ASM-AND-OBJ: pm2addsu.h s0, s0, s2 +# CHECK-ASM: encoding: [0x3b,0x54,0x24,0xe1] +pm2addsu.h s0, s0, s2 +# CHECK-ASM-AND-OBJ: pm4addsu.b a0, s0, t3 +# CHECK-ASM: encoding: [0x3b,0x55,0xc4,0xe5] +pm4addsu.b a0, s0, t3 +# CHECK-ASM-AND-OBJ: pm2addasu.h a4, t1, a2 +# CHECK-ASM: encoding: [0x3b,0x57,0xc3,0xe8] +pm2addasu.h a4, t1, a2 +# CHECK-ASM-AND-OBJ: pm4addasu.b s2, s0, a2 +# CHECK-ASM: encoding: [0x3b,0x59,0xc4,0xec] +pm4addasu.b s2, s0, a2 +# CHECK-ASM-AND-OBJ: mqacc.h01 a4, t1, a0 +# CHECK-ASM: encoding: [0x3b,0x57,0xa3,0xf8] +mqacc.h01 a4, t1, a0 +# CHECK-ASM-AND-OBJ: mqracc.h01 s0, a0, t5 +# CHECK-ASM: encoding: [0x3b,0x54,0xe5,0xfd] +mqracc.h01 s0, a0, t5 +# CHECK-ASM-AND-OBJ: pas.hx t5, s2, t5 +# CHECK-ASM: encoding: [0x3b,0x6f,0xe9,0x81] +pas.hx t5, s2, t5 +# CHECK-ASM-AND-OBJ: psa.hx s0, t1, t3 +# CHECK-ASM: encoding: [0x3b,0x64,0xc3,0x85] +psa.hx s0, t1, t3 +# CHECK-ASM-AND-OBJ: psas.hx t5, s2, a2 +# CHECK-ASM: encoding: [0x3b,0x6f,0xc9,0x90] +psas.hx t5, s2, a2 +# CHECK-ASM-AND-OBJ: pssa.hx s2, t3, t5 +# CHECK-ASM: encoding: [0x3b,0x69,0xee,0x95] +pssa.hx s2, t3, t5 +# CHECK-ASM-AND-OBJ: pmseq.h a0, t1, s0 +# CHECK-ASM: encoding: [0x3b,0x65,0x83,0xc0] +pmseq.h a0, t1, s0 +# CHECK-ASM-AND-OBJ: pmseq.b s0, s2, s0 +# CHECK-ASM: encoding: [0x3b,0x64,0x89,0xc4] +pmseq.b s0, s2, s0 +# CHECK-ASM-AND-OBJ: pmslt.h t3, a2, a4 +# CHECK-ASM: encoding: [0x3b,0x6e,0xe6,0xd0] +pmslt.h t3, a2, a4 +# CHECK-ASM-AND-OBJ: pmslt.b t5, a4, t1 +# CHECK-ASM: encoding: [0x3b,0x6f,0x67,0xd4] +pmslt.b t5, a4, t1 +# CHECK-ASM-AND-OBJ: pmsltu.h s2, s0, s2 +# CHECK-ASM: encoding: [0x3b,0x69,0x24,0xd9] +pmsltu.h s2, s0, s2 +# CHECK-ASM-AND-OBJ: pmsltu.b s0, s2, t5 +# CHECK-ASM: encoding: [0x3b,0x64,0xe9,0xdd] +pmsltu.b s0, s2, t5 +# CHECK-ASM-AND-OBJ: pmin.h s2, t3, s2 +# CHECK-ASM: encoding: [0x3b,0x69,0x2e,0xe1] +pmin.h s2, t3, s2 +# CHECK-ASM-AND-OBJ: pmin.b a2, a2, t5 +# CHECK-ASM: encoding: [0x3b,0x66,0xe6,0xe5] +pmin.b a2, a2, t5 +# CHECK-ASM-AND-OBJ: pminu.h a0, a4, a2 +# CHECK-ASM: encoding: [0x3b,0x65,0xc7,0xe8] +pminu.h a0, a4, a2 +# CHECK-ASM-AND-OBJ: pminu.b a4, t3, s2 +# CHECK-ASM: encoding: [0x3b,0x67,0x2e,0xed] +pminu.b a4, t3, s2 +# CHECK-ASM-AND-OBJ: pmax.h a4, s2, a0 +# CHECK-ASM: encoding: [0x3b,0x67,0xa9,0xf0] +pmax.h a4, s2, a0 +# CHECK-ASM-AND-OBJ: pmax.b t1, s0, s0 +# CHECK-ASM: encoding: [0x3b,0x63,0x84,0xf4] +pmax.b t1, s0, s0 +# CHECK-ASM-AND-OBJ: pmaxu.h a0, s0, s0 +# CHECK-ASM: encoding: [0x3b,0x65,0x84,0xf8] +pmaxu.h a0, s0, s0 +# CHECK-ASM-AND-OBJ: pmaxu.b t3, a0, t1 +# CHECK-ASM: encoding: [0x3b,0x6e,0x65,0xfc] +pmaxu.b t3, a0, t1 +# CHECK-ASM-AND-OBJ: mseq a4, t1, s0 +# CHECK-ASM: encoding: [0x3b,0x67,0x83,0xc2] +mseq a4, t1, s0 +# CHECK-ASM-AND-OBJ: mslt t5, t5, t1 +# CHECK-ASM: encoding: [0x3b,0x6f,0x6f,0xd2] +mslt t5, t5, t1 +# CHECK-ASM-AND-OBJ: msltu s2, a0, t3 +# CHECK-ASM: encoding: [0x3b,0x69,0xc5,0xdb] +msltu s2, a0, t3 +# CHECK-ASM-AND-OBJ: pmulh.h s0, t3, t3 +# CHECK-ASM: encoding: [0x3b,0x74,0xce,0x81] +pmulh.h s0, t3, t3 +# CHECK-ASM-AND-OBJ: pmulhr.h t1, t5, s0 +# CHECK-ASM: encoding: [0x3b,0x73,0x8f,0x84] +pmulhr.h t1, t5, s0 +# CHECK-ASM-AND-OBJ: pmhacc.h s0, t5, s2 +# CHECK-ASM: encoding: [0x3b,0x74,0x2f,0x89] +pmhacc.h s0, t5, s2 +# CHECK-ASM-AND-OBJ: pmhracc.h a4, t3, a2 +# CHECK-ASM: encoding: [0x3b,0x77,0xce,0x8c] +pmhracc.h a4, t3, a2 +# CHECK-ASM-AND-OBJ: pmulhu.h a4, t5, a2 +# CHECK-ASM: encoding: [0x3b,0x77,0xcf,0x90] +pmulhu.h a4, t5, a2 +# CHECK-ASM-AND-OBJ: pmulhru.h a4, a2, a4 +# CHECK-ASM: encoding: [0x3b,0x77,0xe6,0x94] +pmulhru.h a4, a2, a4 +# CHECK-ASM-AND-OBJ: pmhaccu.h a4, t1, t3 +# CHECK-ASM: encoding: [0x3b,0x77,0xc3,0x99] +pmhaccu.h a4, t1, t3 +# CHECK-ASM-AND-OBJ: pmhraccu.h s2, s0, t1 +# CHECK-ASM: encoding: [0x3b,0x79,0x64,0x9c] +pmhraccu.h s2, s0, t1 +# CHECK-ASM-AND-OBJ: pmulh.h.b0 a0, t5, a4 +# CHECK-ASM: encoding: [0x3b,0x75,0xef,0xa0] +pmulh.h.b0 a0, t5, a4 +# CHECK-ASM-AND-OBJ: pmulhsu.h.b0 s0, a4, s2 +# CHECK-ASM: encoding: [0x3b,0x74,0x27,0xa5] +pmulhsu.h.b0 s0, a4, s2 +# CHECK-ASM-AND-OBJ: pmhaccu.h.b0 s0, a0, t5 +# CHECK-ASM: encoding: [0x3b,0x74,0xe5,0xa9] +pmhaccu.h.b0 s0, a0, t5 +# CHECK-ASM-AND-OBJ: pmhaccsu.h.b0 t3, s0, a4 +# CHECK-ASM: encoding: [0x3b,0x7e,0xe4,0xac] +pmhaccsu.h.b0 t3, s0, a4 +# CHECK-ASM-AND-OBJ: pmulh.h.b1 a0, a4, s2 +# CHECK-ASM: encoding: [0x3b,0x75,0x27,0xb1] +pmulh.h.b1 a0, a4, s2 +# CHECK-ASM-AND-OBJ: pmulhsu.h.b1 t5, t3, t1 +# CHECK-ASM: encoding: [0x3b,0x7f,0x6e,0xb4] +pmulhsu.h.b1 t5, t3, t1 +# CHECK-ASM-AND-OBJ: pmhacc.h.b1 t1, t5, a2 +# CHECK-ASM: encoding: [0x3b,0x73,0xcf,0xb8] +pmhacc.h.b1 t1, t5, a2 +# CHECK-ASM-AND-OBJ: pmhaccsu.h.b1 a2, a0, a4 +# CHECK-ASM: encoding: [0x3b,0x76,0xe5,0xbc] +pmhaccsu.h.b1 a2, a0, a4 +# CHECK-ASM-AND-OBJ: pmulhsu.h s0, a0, t1 +# CHECK-ASM: encoding: [0x3b,0x74,0x65,0xc0] +pmulhsu.h s0, a0, t1 +# CHECK-ASM-AND-OBJ: pmulhrsu.h t3, t5, a4 +# CHECK-ASM: encoding: [0x3b,0x7e,0xef,0xc4] +pmulhrsu.h t3, t5, a4 +# CHECK-ASM-AND-OBJ: pmhaccsu.h s0, s0, a4 +# CHECK-ASM: encoding: [0x3b,0x74,0xe4,0xc8] +pmhaccsu.h s0, s0, a4 +# CHECK-ASM-AND-OBJ: pmhraccsu.h a2, a2, a0 +# CHECK-ASM: encoding: [0x3b,0x76,0xa6,0xcc] +pmhraccsu.h a2, a2, a0 +# CHECK-ASM-AND-OBJ: pmulq.h a0, t1, t1 +# CHECK-ASM: encoding: [0x3b,0x75,0x63,0xd0] +pmulq.h a0, t1, t1 +# CHECK-ASM-AND-OBJ: pmulqr.h s2, s0, s2 +# CHECK-ASM: encoding: [0x3b,0x79,0x24,0xd5] +pmulqr.h s2, s0, s2 +# CHECK-ASM-AND-OBJ: mulhr a4, s2, t5 +# CHECK-ASM: encoding: [0x3b,0x77,0xe9,0x87] +mulhr a4, s2, t5 +# CHECK-ASM-AND-OBJ: mhacc t1, s0, a2 +# CHECK-ASM: encoding: [0x3b,0x73,0xc4,0x8a] +mhacc t1, s0, a2 +# CHECK-ASM-AND-OBJ: mhracc t1, t5, s0 +# CHECK-ASM: encoding: [0x3b,0x73,0x8f,0x8e] +mhracc t1, t5, s0 +# CHECK-ASM-AND-OBJ: mulhru t1, t5, s0 +# CHECK-ASM: encoding: [0x3b,0x73,0x8f,0x96] +mulhru t1, t5, s0 +# CHECK-ASM-AND-OBJ: mhaccu t3, a2, s2 +# CHECK-ASM: encoding: [0x3b,0x7e,0x26,0x9b] +mhaccu t3, a2, s2 +# CHECK-ASM-AND-OBJ: mhraccu a0, t1, a4 +# CHECK-ASM: encoding: [0x3b,0x75,0xe3,0x9e] +mhraccu a0, t1, a4 +# CHECK-ASM-AND-OBJ: mulh.h0 t3, a4, t1 +# CHECK-ASM: encoding: [0x3b,0x7e,0x67,0xa2] +mulh.h0 t3, a4, t1 +# CHECK-ASM-AND-OBJ: mulhsu.h0 t1, a2, a0 +# CHECK-ASM: encoding: [0x3b,0x73,0xa6,0xa6] +mulhsu.h0 t1, a2, a0 +# CHECK-ASM-AND-OBJ: mhacc.h0 s0, a2, t3 +# CHECK-ASM: encoding: [0x3b,0x74,0xc6,0xab] +mhacc.h0 s0, a2, t3 +# CHECK-ASM-AND-OBJ: mhaccsu.h0 a2, t1, s0 +# CHECK-ASM: encoding: [0x3b,0x76,0x83,0xae] +mhaccsu.h0 a2, t1, s0 +# CHECK-ASM-AND-OBJ: mulh.h1 t1, t1, t3 +# CHECK-ASM: encoding: [0x3b,0x73,0xc3,0xb3] +mulh.h1 t1, t1, t3 +# CHECK-ASM-AND-OBJ: mulhsu.h1 t3, a2, t1 +# CHECK-ASM: encoding: [0x3b,0x7e,0x66,0xb6] +mulhsu.h1 t3, a2, t1 +# CHECK-ASM-AND-OBJ: mhacc.h1 t3, a2, a0 +# CHECK-ASM: encoding: [0x3b,0x7e,0xa6,0xba] +mhacc.h1 t3, a2, a0 +# CHECK-ASM-AND-OBJ: mhaccsu.h1 s0, s2, s0 +# CHECK-ASM: encoding: [0x3b,0x74,0x89,0xbe] +mhaccsu.h1 s0, s2, s0 +# CHECK-ASM-AND-OBJ: mulhrsu.h t5, a4, t5 +# CHECK-ASM: encoding: [0x3b,0x7f,0xe7,0xc7] +mulhrsu.h t5, a4, t5 +# CHECK-ASM-AND-OBJ: mhaccsu a0, a2, s2 +# CHECK-ASM: encoding: [0x3b,0x75,0x26,0xcb] +mhaccsu a0, a2, s2 +# CHECK-ASM-AND-OBJ: mhraccsu a0, a0, t1 +# CHECK-ASM: encoding: [0x3b,0x75,0x65,0xce] +mhraccsu a0, a0, t1 +# CHECK-ASM-AND-OBJ: mulq t1, a2, a2 +# CHECK-ASM: encoding: [0x3b,0x73,0xc6,0xd2] +mulq t1, a2, a2 +# CHECK-ASM-AND-OBJ: mulqr a4, a4, t3 +# CHECK-ASM: encoding: [0x3b,0x77,0xc7,0xd7] +mulqr a4, a4, t3 +# CHECK-ASM-AND-OBJ: mqacc.h00 a2, t3, t3 +# CHECK-ASM: encoding: [0x3b,0x76,0xce,0xe9] +mqacc.h00 a2, t3, t3 +# CHECK-ASM-AND-OBJ: mqracc.h00 t5, a4, t3 +# CHECK-ASM: encoding: [0x3b,0x7f,0xc7,0xed] +mqracc.h00 t5, a4, t3 +# CHECK-ASM-AND-OBJ: mqacc.h11 t5, t5, s0 +# CHECK-ASM: encoding: [0x3b,0x7f,0x8f,0xf8] +mqacc.h11 t5, t5, s0 +# CHECK-ASM-AND-OBJ: mqracc.h11 s0, t5, s2 +# CHECK-ASM: encoding: [0x3b,0x74,0x2f,0xfd] +mqracc.h11 s0, t5, s2 \ No newline at end of file diff --git a/llvm/test/MC/RISCV/rv64p-valid.s b/llvm/test/MC/RISCV/rv64p-valid.s index 5e0b22759abf4..4035028f230ec 100644 --- a/llvm/test/MC/RISCV/rv64p-valid.s +++ b/llvm/test/MC/RISCV/rv64p-valid.s @@ -523,3 +523,402 @@ ppackt.w t3, a0, s2 # CHECK-ASM-AND-OBJ: packt a2, t3, t1 # CHECK-ASM: encoding: [0x3b,0x46,0x6e,0xb6] packt a2, t3, t1 +# CHECK-ASM-AND-OBJ: pm2add.h a4, t3, t5 +# CHECK-ASM: encoding: [0x3b,0x57,0xee,0x81] +pm2add.h a4, t3, t5 +# CHECK-ASM-AND-OBJ: pm4add.b t1, s2, s2 +# CHECK-ASM: encoding: [0x3b,0x53,0x29,0x85] +pm4add.b t1, s2, s2 +# CHECK-ASM-AND-OBJ: pm2adda.h a0, t5, s0 +# CHECK-ASM: encoding: [0x3b,0x55,0x8f,0x88] +pm2adda.h a0, t5, s0 +# CHECK-ASM-AND-OBJ: pm4adda.b a0, t5, a2 +# CHECK-ASM: encoding: [0x3b,0x55,0xcf,0x8c] +pm4adda.b a0, t5, a2 +# CHECK-ASM-AND-OBJ: pm2add.hx a0, s0, t3 +# CHECK-ASM: encoding: [0x3b,0x55,0xc4,0x91] +pm2add.hx a0, s0, t3 +# CHECK-ASM-AND-OBJ: pm2adda.hx s0, a0, s2 +# CHECK-ASM: encoding: [0x3b,0x54,0x25,0x99] +pm2adda.hx s0, a0, s2 +# CHECK-ASM-AND-OBJ: pm2addu.h t1, a4, a0 +# CHECK-ASM: encoding: [0x3b,0x53,0xa7,0xa0] +pm2addu.h t1, a4, a0 +# CHECK-ASM-AND-OBJ: pm4addu.b a0, t1, t3 +# CHECK-ASM: encoding: [0x3b,0x55,0xc3,0xa5] +pm4addu.b a0, t1, t3 +# CHECK-ASM-AND-OBJ: pm2addau.h s2, a2, a0 +# CHECK-ASM: encoding: [0x3b,0x59,0xa6,0xa8] +pm2addau.h s2, a2, a0 +# CHECK-ASM-AND-OBJ: pm4addau.b s2, s2, t5 +# CHECK-ASM: encoding: [0x3b,0x59,0xe9,0xad] +pm4addau.b s2, s2, t5 +# CHECK-ASM-AND-OBJ: pmq2add.h s2, s2, t3 +# CHECK-ASM: encoding: [0x3b,0x59,0xc9,0xb1] +pmq2add.h s2, s2, t3 +# CHECK-ASM-AND-OBJ: pmqr2add.h a4, a2, a0 +# CHECK-ASM: encoding: [0x3b,0x57,0xa6,0xb4] +pmqr2add.h a4, a2, a0 +# CHECK-ASM-AND-OBJ: pmq2adda.h a2, s2, t1 +# CHECK-ASM: encoding: [0x3b,0x56,0x69,0xb8] +pmq2adda.h a2, s2, t1 +# CHECK-ASM-AND-OBJ: pmqr2adda.h a2, a0, a0 +# CHECK-ASM: encoding: [0x3b,0x56,0xa5,0xbc] +pmqr2adda.h a2, a0, a0 +# CHECK-ASM-AND-OBJ: pm2sub.h t5, s0, s0 +# CHECK-ASM: encoding: [0x3b,0x5f,0x84,0xc0] +pm2sub.h t5, s0, s0 +# CHECK-ASM-AND-OBJ: pm2sadd.h a0, t5, a0 +# CHECK-ASM: encoding: [0x3b,0x55,0xaf,0xc4] +pm2sadd.h a0, t5, a0 +# CHECK-ASM-AND-OBJ: pm2suba.h s0, a4, t5 +# CHECK-ASM: encoding: [0x3b,0x54,0xe7,0xc9] +pm2suba.h s0, a4, t5 +# CHECK-ASM-AND-OBJ: pm2sub.hx t3, t5, a0 +# CHECK-ASM: encoding: [0x3b,0x5e,0xaf,0xd0] +pm2sub.hx t3, t5, a0 +# CHECK-ASM-AND-OBJ: pm2sadd.hx t1, a0, t3 +# CHECK-ASM: encoding: [0x3b,0x53,0xc5,0xd5] +pm2sadd.hx t1, a0, t3 +# CHECK-ASM-AND-OBJ: pm2suba.hx t3, a0, a4 +# CHECK-ASM: encoding: [0x3b,0x5e,0xe5,0xd8] +pm2suba.hx t3, a0, a4 +# CHECK-ASM-AND-OBJ: pm2addsu.h t3, a0, t3 +# CHECK-ASM: encoding: [0x3b,0x5e,0xc5,0xe1] +pm2addsu.h t3, a0, t3 +# CHECK-ASM-AND-OBJ: pm4addsu.b t1, t5, s0 +# CHECK-ASM: encoding: [0x3b,0x53,0x8f,0xe4] +pm4addsu.b t1, t5, s0 +# CHECK-ASM-AND-OBJ: pm2addasu.h t1, t3, t3 +# CHECK-ASM: encoding: [0x3b,0x53,0xce,0xe9] +pm2addasu.h t1, t3, t3 +# CHECK-ASM-AND-OBJ: pm4addasu.b t3, a0, a0 +# CHECK-ASM: encoding: [0x3b,0x5e,0xa5,0xec] +pm4addasu.b t3, a0, a0 +# CHECK-ASM-AND-OBJ: pm2add.w t3, s0, t5 +# CHECK-ASM: encoding: [0x3b,0x5e,0xe4,0x83] +pm2add.w t3, s0, t5 +# CHECK-ASM-AND-OBJ: pm4add.h s2, s2, t3 +# CHECK-ASM: encoding: [0x3b,0x59,0xc9,0x87] +pm4add.h s2, s2, t3 +# CHECK-ASM-AND-OBJ: pm2adda.w a2, a0, s0 +# CHECK-ASM: encoding: [0x3b,0x56,0x85,0x8a] +pm2adda.w a2, a0, s0 +# CHECK-ASM-AND-OBJ: pm4adda.h s2, s0, t1 +# CHECK-ASM: encoding: [0x3b,0x59,0x64,0x8e] +pm4adda.h s2, s0, t1 +# CHECK-ASM-AND-OBJ: pm2add.wx t1, s0, a4 +# CHECK-ASM: encoding: [0x3b,0x53,0xe4,0x92] +pm2add.wx t1, s0, a4 +# CHECK-ASM-AND-OBJ: pm2adda.wx t5, t3, s0 +# CHECK-ASM: encoding: [0x3b,0x5f,0x8e,0x9a] +pm2adda.wx t5, t3, s0 +# CHECK-ASM-AND-OBJ: pm2addu.w s2, a0, s2 +# CHECK-ASM: encoding: [0x3b,0x59,0x25,0xa3] +pm2addu.w s2, a0, s2 +# CHECK-ASM-AND-OBJ: pm4addu.h a4, a2, a2 +# CHECK-ASM: encoding: [0x3b,0x57,0xc6,0xa6] +pm4addu.h a4, a2, a2 +# CHECK-ASM-AND-OBJ: pm2addau.w s0, s0, a4 +# CHECK-ASM: encoding: [0x3b,0x54,0xe4,0xaa] +pm2addau.w s0, s0, a4 +# CHECK-ASM-AND-OBJ: pm4addau.h a2, a4, t5 +# CHECK-ASM: encoding: [0x3b,0x56,0xe7,0xaf] +pm4addau.h a2, a4, t5 +# CHECK-ASM-AND-OBJ: pmq2add.w t5, t1, t1 +# CHECK-ASM: encoding: [0x3b,0x5f,0x63,0xb2] +pmq2add.w t5, t1, t1 +# CHECK-ASM-AND-OBJ: pmqr2add.w s0, t1, a4 +# CHECK-ASM: encoding: [0x3b,0x54,0xe3,0xb6] +pmqr2add.w s0, t1, a4 +# CHECK-ASM-AND-OBJ: pmq2adda.w a4, s0, t1 +# CHECK-ASM: encoding: [0x3b,0x57,0x64,0xba] +pmq2adda.w a4, s0, t1 +# CHECK-ASM-AND-OBJ: pmqr2adda.w a4, t5, s0 +# CHECK-ASM: encoding: [0x3b,0x57,0x8f,0xbe] +pmqr2adda.w a4, t5, s0 +# CHECK-ASM-AND-OBJ: pm2sub.w t3, a2, t1 +# CHECK-ASM: encoding: [0x3b,0x5e,0x66,0xc2] +pm2sub.w t3, a2, t1 +# CHECK-ASM-AND-OBJ: pm2suba.w t5, t5, t3 +# CHECK-ASM: encoding: [0x3b,0x5f,0xcf,0xcb] +pm2suba.w t5, t5, t3 +# CHECK-ASM-AND-OBJ: pm2sub.wx t5, s2, s0 +# CHECK-ASM: encoding: [0x3b,0x5f,0x89,0xd2] +pm2sub.wx t5, s2, s0 +# CHECK-ASM-AND-OBJ: pm2suba.wx a2, a0, a4 +# CHECK-ASM: encoding: [0x3b,0x56,0xe5,0xda] +pm2suba.wx a2, a0, a4 +# CHECK-ASM-AND-OBJ: pm2addsu.w s0, s0, s2 +# CHECK-ASM: encoding: [0x3b,0x54,0x24,0xe3] +pm2addsu.w s0, s0, s2 +# CHECK-ASM-AND-OBJ: pm4addsu.h a2, s2, s0 +# CHECK-ASM: encoding: [0x3b,0x56,0x89,0xe6] +pm4addsu.h a2, s2, s0 +# CHECK-ASM-AND-OBJ: pm2addasu.w a0, a2, a0 +# CHECK-ASM: encoding: [0x3b,0x55,0xa6,0xea] +pm2addasu.w a0, a2, a0 +# CHECK-ASM-AND-OBJ: pm4addasu.h a0, s0, t5 +# CHECK-ASM: encoding: [0x3b,0x55,0xe4,0xef] +pm4addasu.h a0, s0, t5 +# CHECK-ASM-AND-OBJ: pmqacc.w.h01 t5, t1, a4 +# CHECK-ASM: encoding: [0x3b,0x5f,0xe3,0xf8] +pmqacc.w.h01 t5, t1, a4 +# CHECK-ASM-AND-OBJ: mqacc.w01 a0, a2, t3 +# CHECK-ASM: encoding: [0x3b,0x55,0xc6,0xfb] +mqacc.w01 a0, a2, t3 +# CHECK-ASM-AND-OBJ: pmqracc.w.h01 a4, t1, s2 +# CHECK-ASM: encoding: [0x3b,0x57,0x23,0xfd] +pmqracc.w.h01 a4, t1, s2 +# CHECK-ASM-AND-OBJ: mqracc.w01 s0, t5, a4 +# CHECK-ASM: encoding: [0x3b,0x54,0xef,0xfe] +mqracc.w01 s0, t5, a4 +# CHECK-ASM-AND-OBJ: pas.hx a0, t5, t1 +# CHECK-ASM: encoding: [0x3b,0x65,0x6f,0x80] +pas.hx a0, t5, t1 +# CHECK-ASM-AND-OBJ: psa.hx a2, t3, a0 +# CHECK-ASM: encoding: [0x3b,0x66,0xae,0x84] +psa.hx a2, t3, a0 +# CHECK-ASM-AND-OBJ: psas.hx s0, a0, a2 +# CHECK-ASM: encoding: [0x3b,0x64,0xc5,0x90] +psas.hx s0, a0, a2 +# CHECK-ASM-AND-OBJ: pssa.hx a0, t1, t5 +# CHECK-ASM: encoding: [0x3b,0x65,0xe3,0x95] +pssa.hx a0, t1, t5 +# CHECK-ASM-AND-OBJ: pmseq.h t3, s0, t1 +# CHECK-ASM: encoding: [0x3b,0x6e,0x64,0xc0] +pmseq.h t3, s0, t1 +# CHECK-ASM-AND-OBJ: pmseq.b t5, s2, a2 +# CHECK-ASM: encoding: [0x3b,0x6f,0xc9,0xc4] +pmseq.b t5, s2, a2 +# CHECK-ASM-AND-OBJ: pmslt.h t1, a0, a4 +# CHECK-ASM: encoding: [0x3b,0x63,0xe5,0xd0] +pmslt.h t1, a0, a4 +# CHECK-ASM-AND-OBJ: pmslt.b s2, t3, t1 +# CHECK-ASM: encoding: [0x3b,0x69,0x6e,0xd4] +pmslt.b s2, t3, t1 +# CHECK-ASM-AND-OBJ: pmsltu.h t1, a0, t5 +# CHECK-ASM: encoding: [0x3b,0x63,0xe5,0xd9] +pmsltu.h t1, a0, t5 +# CHECK-ASM-AND-OBJ: pmsltu.b t3, a4, s2 +# CHECK-ASM: encoding: [0x3b,0x6e,0x27,0xdd] +pmsltu.b t3, a4, s2 +# CHECK-ASM-AND-OBJ: pmin.h a2, a2, s2 +# CHECK-ASM: encoding: [0x3b,0x66,0x26,0xe1] +pmin.h a2, a2, s2 +# CHECK-ASM-AND-OBJ: pmin.b t3, a2, a0 +# CHECK-ASM: encoding: [0x3b,0x6e,0xa6,0xe4] +pmin.b t3, a2, a0 +# CHECK-ASM-AND-OBJ: pminu.h a2, s2, t1 +# CHECK-ASM: encoding: [0x3b,0x66,0x69,0xe8] +pminu.h a2, s2, t1 +# CHECK-ASM-AND-OBJ: pminu.b a0, t1, a0 +# CHECK-ASM: encoding: [0x3b,0x65,0xa3,0xec] +pminu.b a0, t1, a0 +# CHECK-ASM-AND-OBJ: pmax.h a0, s0, a4 +# CHECK-ASM: encoding: [0x3b,0x65,0xe4,0xf0] +pmax.h a0, s0, a4 +# CHECK-ASM-AND-OBJ: pmax.b t1, t3, a2 +# CHECK-ASM: encoding: [0x3b,0x63,0xce,0xf4] +pmax.b t1, t3, a2 +# CHECK-ASM-AND-OBJ: pmaxu.h t1, a0, s2 +# CHECK-ASM: encoding: [0x3b,0x63,0x25,0xf9] +pmaxu.h t1, a0, s2 +# CHECK-ASM-AND-OBJ: pmaxu.b t1, t3, s2 +# CHECK-ASM: encoding: [0x3b,0x63,0x2e,0xfd] +pmaxu.b t1, t3, s2 +# CHECK-ASM-AND-OBJ: pas.wx t1, a2, s0 +# CHECK-ASM: encoding: [0x3b,0x63,0x86,0x82] +pas.wx t1, a2, s0 +# CHECK-ASM-AND-OBJ: psa.wx t3, t3, a2 +# CHECK-ASM: encoding: [0x3b,0x6e,0xce,0x86] +psa.wx t3, t3, a2 +# CHECK-ASM-AND-OBJ: psas.wx a4, a4, s2 +# CHECK-ASM: encoding: [0x3b,0x67,0x27,0x93] +psas.wx a4, a4, s2 +# CHECK-ASM-AND-OBJ: pssa.wx a0, a2, a0 +# CHECK-ASM: encoding: [0x3b,0x65,0xa6,0x96] +pssa.wx a0, a2, a0 +# CHECK-ASM-AND-OBJ: paas.wx s0, a4, t1 +# CHECK-ASM: encoding: [0x3b,0x64,0x67,0x9a] +paas.wx s0, a4, t1 +# CHECK-ASM-AND-OBJ: pasa.wx t1, s2, s2 +# CHECK-ASM: encoding: [0x3b,0x63,0x29,0x9f] +pasa.wx t1, s2, s2 +# CHECK-ASM-AND-OBJ: pmseq.w t1, a4, s2 +# CHECK-ASM: encoding: [0x3b,0x63,0x27,0xc3] +pmseq.w t1, a4, s2 +# CHECK-ASM-AND-OBJ: pmslt.w t5, t5, t3 +# CHECK-ASM: encoding: [0x3b,0x6f,0xcf,0xd3] +pmslt.w t5, t5, t3 +# CHECK-ASM-AND-OBJ: pmsltu.w s2, a4, t1 +# CHECK-ASM: encoding: [0x3b,0x69,0x67,0xda] +pmsltu.w s2, a4, t1 +# CHECK-ASM-AND-OBJ: pmin.w t5, a4, t5 +# CHECK-ASM: encoding: [0x3b,0x6f,0xe7,0xe3] +pmin.w t5, a4, t5 +# CHECK-ASM-AND-OBJ: pminu.w a0, a2, a0 +# CHECK-ASM: encoding: [0x3b,0x65,0xa6,0xea] +pminu.w a0, a2, a0 +# CHECK-ASM-AND-OBJ: pmax.w a0, s2, t1 +# CHECK-ASM: encoding: [0x3b,0x65,0x69,0xf2] +pmax.w a0, s2, t1 +# CHECK-ASM-AND-OBJ: pmaxu.w a0, a4, a4 +# CHECK-ASM: encoding: [0x3b,0x65,0xe7,0xfa] +pmaxu.w a0, a4, a4 +# CHECK-ASM-AND-OBJ: pmulh.h a0, t5, t1 +# CHECK-ASM: encoding: [0x3b,0x75,0x6f,0x80] +pmulh.h a0, t5, t1 +# CHECK-ASM-AND-OBJ: pmulhr.h s2, t5, t3 +# CHECK-ASM: encoding: [0x3b,0x79,0xcf,0x85] +pmulhr.h s2, t5, t3 +# CHECK-ASM-AND-OBJ: pmhacc.h t5, t3, a4 +# CHECK-ASM: encoding: [0x3b,0x7f,0xee,0x88] +pmhacc.h t5, t3, a4 +# CHECK-ASM-AND-OBJ: pmhracc.h s2, t5, s2 +# CHECK-ASM: encoding: [0x3b,0x79,0x2f,0x8d] +pmhracc.h s2, t5, s2 +# CHECK-ASM-AND-OBJ: pmulhu.h t3, t1, t1 +# CHECK-ASM: encoding: [0x3b,0x7e,0x63,0x90] +pmulhu.h t3, t1, t1 +# CHECK-ASM-AND-OBJ: pmulhru.h s0, t5, t1 +# CHECK-ASM: encoding: [0x3b,0x74,0x6f,0x94] +pmulhru.h s0, t5, t1 +# CHECK-ASM-AND-OBJ: pmhaccu.h t3, a0, t3 +# CHECK-ASM: encoding: [0x3b,0x7e,0xc5,0x99] +pmhaccu.h t3, a0, t3 +# CHECK-ASM-AND-OBJ: pmhraccu.h t5, t3, a2 +# CHECK-ASM: encoding: [0x3b,0x7f,0xce,0x9c] +pmhraccu.h t5, t3, a2 +# CHECK-ASM-AND-OBJ: pmulh.h.b0 t1, a0, a0 +# CHECK-ASM: encoding: [0x3b,0x73,0xa5,0xa0] +pmulh.h.b0 t1, a0, a0 +# CHECK-ASM-AND-OBJ: pmulhsu.h.b0 t3, s0, a4 +# CHECK-ASM: encoding: [0x3b,0x7e,0xe4,0xa4] +pmulhsu.h.b0 t3, s0, a4 +# CHECK-ASM-AND-OBJ: pmhaccu.h.b0 t1, a0, a4 +# CHECK-ASM: encoding: [0x3b,0x73,0xe5,0xa8] +pmhaccu.h.b0 t1, a0, a4 +# CHECK-ASM-AND-OBJ: pmhaccsu.h.b0 s2, t5, t3 +# CHECK-ASM: encoding: [0x3b,0x79,0xcf,0xad] +pmhaccsu.h.b0 s2, t5, t3 +# CHECK-ASM-AND-OBJ: pmulh.h.b1 a0, s0, a2 +# CHECK-ASM: encoding: [0x3b,0x75,0xc4,0xb0] +pmulh.h.b1 a0, s0, a2 +# CHECK-ASM-AND-OBJ: pmulhsu.h.b1 t1, t3, t3 +# CHECK-ASM: encoding: [0x3b,0x73,0xce,0xb5] +pmulhsu.h.b1 t1, t3, t3 +# CHECK-ASM-AND-OBJ: pmhacc.h.b1 t3, t5, s2 +# CHECK-ASM: encoding: [0x3b,0x7e,0x2f,0xb9] +pmhacc.h.b1 t3, t5, s2 +# CHECK-ASM-AND-OBJ: pmhaccsu.h.b1 t5, t5, t1 +# CHECK-ASM: encoding: [0x3b,0x7f,0x6f,0xbc] +pmhaccsu.h.b1 t5, t5, t1 +# CHECK-ASM-AND-OBJ: pmulhsu.h s2, t3, a4 +# CHECK-ASM: encoding: [0x3b,0x79,0xee,0xc0] +pmulhsu.h s2, t3, a4 +# CHECK-ASM-AND-OBJ: pmulhrsu.h a0, a0, t5 +# CHECK-ASM: encoding: [0x3b,0x75,0xe5,0xc5] +pmulhrsu.h a0, a0, t5 +# CHECK-ASM-AND-OBJ: pmhaccsu.h s0, t3, t1 +# CHECK-ASM: encoding: [0x3b,0x74,0x6e,0xc8] +pmhaccsu.h s0, t3, t1 +# CHECK-ASM-AND-OBJ: pmhraccsu.h s0, t5, a4 +# CHECK-ASM: encoding: [0x3b,0x74,0xef,0xcc] +pmhraccsu.h s0, t5, a4 +# CHECK-ASM-AND-OBJ: pmulq.h t3, t1, s0 +# CHECK-ASM: encoding: [0x3b,0x7e,0x83,0xd0] +pmulq.h t3, t1, s0 +# CHECK-ASM-AND-OBJ: pmulqr.h t1, s2, s0 +# CHECK-ASM: encoding: [0x3b,0x73,0x89,0xd4] +pmulqr.h t1, s2, s0 +# CHECK-ASM-AND-OBJ: pmulh.w t5, a4, a4 +# CHECK-ASM: encoding: [0x3b,0x7f,0xe7,0x82] +pmulh.w t5, a4, a4 +# CHECK-ASM-AND-OBJ: pmulhr.w t1, t5, t1 +# CHECK-ASM: encoding: [0x3b,0x73,0x6f,0x86] +pmulhr.w t1, t5, t1 +# CHECK-ASM-AND-OBJ: pmhacc.w t5, s0, t5 +# CHECK-ASM: encoding: [0x3b,0x7f,0xe4,0x8b] +pmhacc.w t5, s0, t5 +# CHECK-ASM-AND-OBJ: pmhracc.w s0, s2, t5 +# CHECK-ASM: encoding: [0x3b,0x74,0xe9,0x8f] +pmhracc.w s0, s2, t5 +# CHECK-ASM-AND-OBJ: pmulhu.w a2, a0, a4 +# CHECK-ASM: encoding: [0x3b,0x76,0xe5,0x92] +pmulhu.w a2, a0, a4 +# CHECK-ASM-AND-OBJ: pmulhru.w t1, t1, a4 +# CHECK-ASM: encoding: [0x3b,0x73,0xe3,0x96] +pmulhru.w t1, t1, a4 +# CHECK-ASM-AND-OBJ: pmhaccu.w a0, s0, a0 +# CHECK-ASM: encoding: [0x3b,0x75,0xa4,0x9a] +pmhaccu.w a0, s0, a0 +# CHECK-ASM-AND-OBJ: pmhraccu.w s2, s0, t3 +# CHECK-ASM: encoding: [0x3b,0x79,0xc4,0x9f] +pmhraccu.w s2, s0, t3 +# CHECK-ASM-AND-OBJ: pmulh.w.h0 t5, s0, t5 +# CHECK-ASM: encoding: [0x3b,0x7f,0xe4,0xa3] +pmulh.w.h0 t5, s0, t5 +# CHECK-ASM-AND-OBJ: pmulhsu.w.h0 a2, t3, a2 +# CHECK-ASM: encoding: [0x3b,0x76,0xce,0xa6] +pmulhsu.w.h0 a2, t3, a2 +# CHECK-ASM-AND-OBJ: pmhacc.w.h0 a2, a0, t1 +# CHECK-ASM: encoding: [0x3b,0x76,0x65,0xaa] +pmhacc.w.h0 a2, a0, t1 +# CHECK-ASM-AND-OBJ: pmhaccsu.w.h0 t1, a4, t1 +# CHECK-ASM: encoding: [0x3b,0x73,0x67,0xae] +pmhaccsu.w.h0 t1, a4, t1 +# CHECK-ASM-AND-OBJ: pmulh.w.h1 t1, a0, t3 +# CHECK-ASM: encoding: [0x3b,0x73,0xc5,0xb3] +pmulh.w.h1 t1, a0, t3 +# CHECK-ASM-AND-OBJ: pmulhsu.w.h1 s2, t3, a4 +# CHECK-ASM: encoding: [0x3b,0x79,0xee,0xb6] +pmulhsu.w.h1 s2, t3, a4 +# CHECK-ASM-AND-OBJ: pmhacc.w.h1 s0, t5, a2 +# CHECK-ASM: encoding: [0x3b,0x74,0xcf,0xba] +pmhacc.w.h1 s0, t5, a2 +# CHECK-ASM-AND-OBJ: pmhaccsu.w.h1 a0, a0, a0 +# CHECK-ASM: encoding: [0x3b,0x75,0xa5,0xbe] +pmhaccsu.w.h1 a0, a0, a0 +# CHECK-ASM-AND-OBJ: pmulhsu.w t3, a2, a4 +# CHECK-ASM: encoding: [0x3b,0x7e,0xe6,0xc2] +pmulhsu.w t3, a2, a4 +# CHECK-ASM-AND-OBJ: pmulhrsu.w t5, a0, a0 +# CHECK-ASM: encoding: [0x3b,0x7f,0xa5,0xc6] +pmulhrsu.w t5, a0, a0 +# CHECK-ASM-AND-OBJ: pmhaccsu.w a4, a0, a0 +# CHECK-ASM: encoding: [0x3b,0x77,0xa5,0xca] +pmhaccsu.w a4, a0, a0 +# CHECK-ASM-AND-OBJ: pmhraccsu.w t5, t1, t3 +# CHECK-ASM: encoding: [0x3b,0x7f,0xc3,0xcf] +pmhraccsu.w t5, t1, t3 +# CHECK-ASM-AND-OBJ: pmulq.w a2, a2, t5 +# CHECK-ASM: encoding: [0x3b,0x76,0xe6,0xd3] +pmulq.w a2, a2, t5 +# CHECK-ASM-AND-OBJ: pmulqr.w a0, t3, t5 +# CHECK-ASM: encoding: [0x3b,0x75,0xee,0xd7] +pmulqr.w a0, t3, t5 +# CHECK-ASM-AND-OBJ: pmqacc.w.h00 t5, a4, t1 +# CHECK-ASM: encoding: [0x3b,0x7f,0x67,0xe8] +pmqacc.w.h00 t5, a4, t1 +# CHECK-ASM-AND-OBJ: mqacc.w00 t1, t1, a0 +# CHECK-ASM: encoding: [0x3b,0x73,0xa3,0xea] +mqacc.w00 t1, t1, a0 +# CHECK-ASM-AND-OBJ: pmqracc.w.h00 t1, a2, t5 +# CHECK-ASM: encoding: [0x3b,0x73,0xe6,0xed] +pmqracc.w.h00 t1, a2, t5 +# CHECK-ASM-AND-OBJ: mqracc.w00 s2, s2, a2 +# CHECK-ASM: encoding: [0x3b,0x79,0xc9,0xee] +mqracc.w00 s2, s2, a2 +# CHECK-ASM-AND-OBJ: pmqacc.w.h11 a2, a0, a0 +# CHECK-ASM: encoding: [0x3b,0x76,0xa5,0xf8] +pmqacc.w.h11 a2, a0, a0 +# CHECK-ASM-AND-OBJ: mqacc.w11 a4, a2, a2 +# CHECK-ASM: encoding: [0x3b,0x77,0xc6,0xfa] +mqacc.w11 a4, a2, a2 +# CHECK-ASM-AND-OBJ: pmqracc.w.h11 s0, t1, t3 +# CHECK-ASM: encoding: [0x3b,0x74,0xc3,0xfd] +pmqracc.w.h11 s0, t1, t3 +# CHECK-ASM-AND-OBJ: mqracc.w11 s2, t1, a4 +# CHECK-ASM: encoding: [0x3b,0x79,0xe3,0xfe] +mqracc.w11 s2, t1, a4 diff --git a/llvm/unittests/TargetParser/RISCVISAInfoTest.cpp b/llvm/unittests/TargetParser/RISCVISAInfoTest.cpp index 319538eaea135..51a820819e294 100644 --- a/llvm/unittests/TargetParser/RISCVISAInfoTest.cpp +++ b/llvm/unittests/TargetParser/RISCVISAInfoTest.cpp @@ -1178,7 +1178,7 @@ R"(All available -march extensions for RISC-V xwchc 2.2 Experimental extensions - p 0.14 + p 0.15 zicfilp 1.0 This is a long dummy description zicfiss 1.0 zalasr 0.1 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits