在 2024/12/16 下午9:20, Xi Ruoyao 写道:
/* snip */
+;; For HImode it's a little complicated...
+(define_expand "rbithi"
I didn't find rtithi's template description. Are there any test cases ?
+ [(match_operand:HI 0 "register_operand")
+ (match_operand:HI 1 "register_operand")]
+ ""
+ {
+ rtx t = gen_reg_rtx (word_mode);
+
+ /* Oh, using paradoxical subreg. I learnt the trick from RISC-V,
+ hoping we won't be blown up altogether one day. */
+ emit_insn (gen_rbit(word_mode, t,
+ gen_lowpart (word_mode, operands[1])));
+ t = expand_simple_binop (word_mode, LSHIFTRT, t,
+ GEN_INT (GET_MODE_BITSIZE (word_mode) - 16),
+ NULL_RTX, false, OPTAB_DIRECT);
+
+ t = gen_lowpart (HImode, t);
+ SUBREG_PROMOTED_VAR_P (t) = 1;
+ SUBREG_PROMOTED_SET (t, SRP_UNSIGNED);
+ emit_move_insn (operands[0], t);
+
+ DONE;
+ })
+
(define_insn "@stack_tie<mode>"
[(set (mem:BLK (scratch))
(unspec:BLK [(match_operand:X 0 "register_operand" "r")