Skip to content

Commit 7c47c83

Browse files
committed
fixed rmx500 latencies
1 parent 185aa3b commit 7c47c83

File tree

1 file changed

+13
-12
lines changed

1 file changed

+13
-12
lines changed

gcc/config/riscv/arcv-rmx500.md

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -35,17 +35,18 @@
3535
(define_cpu_unit "arcv_rmx500_issueB_fuse1" "arcv_rmx500")
3636

3737
;; Instruction reservation for arithmetic instructions (pipe A, pipe B).
38+
;; instructions can be issued back to back - after 1 cycle the result is available
3839
(define_insn_reservation "arcv_rmx500_alu_early_arith" 1
3940
(and (eq_attr "tune" "arcv_rmx500")
4041
(eq_attr "type" "unknown,move,const,arith,shift,slt,multi,auipc,nop,logical,\
4142
bitmanip,min,max,minu,maxu,clz,ctz,atomic,\
4243
condmove,mvpair,zicond,cpop,clmul"))
4344
"((arcv_rmx500_issueA_fuse0 + arcv_rmx500_ALU_A_fuse0_early) | (arcv_rmx500_issueA_fuse1 + arcv_rmx500_ALU_A_fuse1_early)) | ((arcv_rmx500_issueB_fuse0 + arcv_rmx500_ALU_B_fuse0_early) | (arcv_rmx500_issueB_fuse1 + arcv_rmx500_ALU_B_fuse1_early))")
4445

45-
(define_insn_reservation "arcv_rmx500_imul_fused" 1
46+
(define_insn_reservation "arcv_rmx500_imul_fused" 3
4647
(and (eq_attr "tune" "arcv_rmx500")
4748
(eq_attr "type" "imul_fused"))
48-
"(arcv_rmx500_issueA_fuse0 + arcv_rmx500_issueA_fuse1 + arcv_rmx500_ALU_A_fuse0_early + arcv_rmx500_ALU_A_fuse1_early + arcv_rmx500_MPY32)")
49+
"(arcv_rmx500_issueA_fuse0 + arcv_rmx500_issueA_fuse1 + arcv_rmx500_ALU_A_fuse0_early + arcv_rmx500_ALU_A_fuse1_early + arcv_rmx500_MPY32), nothing*2")
4950

5051
(define_insn_reservation "arcv_rmx500_alu_fused" 1
5152
(and (eq_attr "tune" "arcv_rmx500")
@@ -58,36 +59,36 @@
5859
(eq_attr "type" "branch,jump,call,jalr,ret,trap"))
5960
"arcv_rmx500_issueA_fuse0 | arcv_rmx500_issueA_fuse1")
6061

61-
(define_insn_reservation "arcv_rmx500_div_insn" 22
62+
(define_insn_reservation "arcv_rmx500_div_insn" 21
6263
(and (eq_attr "tune" "arcv_rmx500")
6364
(eq_attr "type" "idiv"))
64-
"arcv_rmx500_issueA_fuse0 + arcv_rmx500_DIV, nothing*21")
65+
"arcv_rmx500_issueA_fuse0 + arcv_rmx500_DIV, nothing*20")
6566

66-
(define_insn_reservation "arcv_rmx500_mpy32_insn" 10
67+
(define_insn_reservation "arcv_rmx500_mpy32_insn" 3
6768
(and (eq_attr "tune" "arcv_rmx500")
6869
(eq_attr "type" "imul"))
69-
"arcv_rmx500_issueA_fuse0 + arcv_rmx500_MPY32, nothing*9")
70+
"arcv_rmx500_issueA_fuse0 + arcv_rmx500_MPY32, nothing*2")
7071

71-
(define_insn_reservation "arcv_rmx500_load_insn" 1
72+
(define_insn_reservation "arcv_rmx500_load_insn" 2
7273
(and (eq_attr "tune" "arcv_rmx500")
7374
(eq_attr "type" "load,fpload"))
74-
"(arcv_rmx500_issueB_fuse0 + arcv_rmx500_DMP_fuse0) | (arcv_rmx500_issueB_fuse1 + arcv_rmx500_DMP_fuse1)")
75+
"(arcv_rmx500_issueB_fuse0 + arcv_rmx500_DMP_fuse0) | (arcv_rmx500_issueB_fuse1 + arcv_rmx500_DMP_fuse1), nothing")
7576

7677
(define_insn_reservation "arcv_rmx500_store_insn" 1
7778
(and (eq_attr "tune" "arcv_rmx500")
7879
(eq_attr "type" "store,fpstore"))
7980
"(arcv_rmx500_issueB_fuse0 + arcv_rmx500_DMP_fuse0) | (arcv_rmx500_issueB_fuse1 + arcv_rmx500_DMP_fuse1)")
8081

8182
;; (soft) floating points
82-
(define_insn_reservation "arcv_rmx500_xfer" 2
83+
(define_insn_reservation "arcv_rmx500_xfer" 3
8384
(and (eq_attr "tune" "arcv_rmx500")
8485
(eq_attr "type" "mfc,mtc,fcvt,fcvt_i2f,fcvt_f2i,fmove,fcmp"))
85-
"(arcv_rmx500_ALU_A_fuse0_early | arcv_rmx500_ALU_B_fuse0_early), nothing")
86+
"(arcv_rmx500_ALU_A_fuse0_early | arcv_rmx500_ALU_B_fuse0_early), nothing*2")
8687

87-
(define_insn_reservation "arcv_rmx500_fmul" 2
88+
(define_insn_reservation "arcv_rmx500_fmul" 3
8889
(and (eq_attr "tune" "arcv_rmx500")
8990
(eq_attr "type" "fadd,fmul,fmadd"))
90-
"(arcv_rmx500_ALU_A_fuse0_early | arcv_rmx500_ALU_B_fuse0_early,nothing)")
91+
"(arcv_rmx500_ALU_A_fuse0_early | arcv_rmx500_ALU_B_fuse0_early,nothing*2)")
9192

9293
(define_insn_reservation "arcv_rmx500_fdiv" 17
9394
(and (eq_attr "tune" "arcv_rmx500")

0 commit comments

Comments
 (0)