On 11/17/23 00:33, Jin Ma wrote:
The XTheadInt ISA extension provides acceleration interruption
instructions as defined in T-Head-specific:
* th.ipush
* th.ipop

Ref:
https://github.com/T-head-Semi/thead-extension-spec/releases/download/2.3.0/xthead-2023-11-10-2.3.0.pdf

gcc/ChangeLog:

        * config/riscv/riscv-protos.h (th_int_get_mask): New prototype.
        (th_int_get_save_adjustment): Likewise.
        (th_int_adjust_cfi_prologue): Likewise.
        * config/riscv/riscv.cc (TH_INT_INTERRUPT): New macro.
        (riscv_expand_prologue): Add the processing of XTheadInt.
        (riscv_expand_epilogue): Likewise.
        * config/riscv/riscv.md: New unspec.
        * config/riscv/thead.cc (BITSET_P): New macro.
        * config/riscv/thead.md (th_int_push): New pattern.
        (th_int_pop): New pattern.

gcc/testsuite/ChangeLog:

        * gcc.target/riscv/xtheadint-push-pop.c: New test.
Thanks for the ping earlier today. I've looked at this patch repeatedly over the last few weeks, but never enough to give it a full review.


diff --git a/gcc/config/riscv/thead.md b/gcc/config/riscv/thead.md
index 2babfafb23c..4d6e16c0edc 100644
--- a/gcc/config/riscv/thead.md
+++ b/gcc/config/riscv/thead.md

+(define_insn "th_int_pop"
+  [(unspec_volatile [(const_int 0)] UNSPECV_XTHEADINT_POP)
+   (clobber (reg:SI RETURN_ADDR_REGNUM))
+   (clobber (reg:SI T0_REGNUM))
+   (clobber (reg:SI T1_REGNUM))
+   (clobber (reg:SI T2_REGNUM))
+   (clobber (reg:SI A0_REGNUM))
+   (clobber (reg:SI A1_REGNUM))
+   (clobber (reg:SI A2_REGNUM))
+   (clobber (reg:SI A3_REGNUM))
+   (clobber (reg:SI A4_REGNUM))
+   (clobber (reg:SI A5_REGNUM))
+   (clobber (reg:SI A6_REGNUM))
+   (clobber (reg:SI A7_REGNUM))
+   (clobber (reg:SI T3_REGNUM))
+   (clobber (reg:SI T4_REGNUM))
+   (clobber (reg:SI T5_REGNUM))
+   (clobber (reg:SI T6_REGNUM))
+   (return)]
+  "TARGET_XTHEADINT && !TARGET_64BIT"
+  "th.ipop"
+  [(set_attr "type"  "ret")
+   (set_attr "mode"  "SI")])
I probably would have gone with a load type since its the loads that are most likely to interact existing code in the pipeline. But I doubt it really matters in practice.


OK for the trunk.  Thanks for your patience.

jeff

Reply via email to