@@ -301,14 +301,6 @@ def C_ADDI4SPN : RVInst16CIW<0b000, 0b00, (outs GPRC:$rd),
301
301
let Inst{5} = imm{3};
302
302
}
303
303
304
- let Predicates = [HasStdExtCOrZcd, HasStdExtD] in
305
- def C_FLD : CLoad_ri<0b001, "c.fld", FPR64C, uimm8_lsb000>,
306
- Sched<[WriteFLD64, ReadFMemBase]> {
307
- bits<8> imm;
308
- let Inst{12-10} = imm{5-3};
309
- let Inst{6-5} = imm{7-6};
310
- }
311
-
312
304
def C_LW : CLoad_ri<0b010, "c.lw", GPRC, uimm7_lsb00>,
313
305
Sched<[WriteLDW, ReadMemBase]> {
314
306
bits<7> imm;
@@ -326,16 +318,6 @@ def C_LW_INX : CLoad_ri<0b010, "c.lw", GPRF32C, uimm7_lsb00>,
326
318
let Inst{5} = imm{6};
327
319
}
328
320
329
- let DecoderNamespace = "RV32Only",
330
- Predicates = [HasStdExtCOrZcfOrZce, HasStdExtF, IsRV32] in
331
- def C_FLW : CLoad_ri<0b011, "c.flw", FPR32C, uimm7_lsb00>,
332
- Sched<[WriteFLD32, ReadFMemBase]> {
333
- bits<7> imm;
334
- let Inst{12-10} = imm{5-3};
335
- let Inst{6} = imm{2};
336
- let Inst{5} = imm{6};
337
- }
338
-
339
321
let Predicates = [HasStdExtZca, IsRV64] in
340
322
def C_LD : CLoad_ri<0b011, "c.ld", GPRC, uimm8_lsb000>,
341
323
Sched<[WriteLDD, ReadMemBase]> {
@@ -344,14 +326,6 @@ def C_LD : CLoad_ri<0b011, "c.ld", GPRC, uimm8_lsb000>,
344
326
let Inst{6-5} = imm{7-6};
345
327
}
346
328
347
- let Predicates = [HasStdExtCOrZcd, HasStdExtD] in
348
- def C_FSD : CStore_rri<0b101, "c.fsd", FPR64C, uimm8_lsb000>,
349
- Sched<[WriteFST64, ReadFStoreData, ReadFMemBase]> {
350
- bits<8> imm;
351
- let Inst{12-10} = imm{5-3};
352
- let Inst{6-5} = imm{7-6};
353
- }
354
-
355
329
def C_SW : CStore_rri<0b110, "c.sw", GPRC, uimm7_lsb00>,
356
330
Sched<[WriteSTW, ReadStoreData, ReadMemBase]> {
357
331
bits<7> imm;
@@ -369,16 +343,6 @@ def C_SW_INX : CStore_rri<0b110, "c.sw", GPRF32C, uimm7_lsb00>,
369
343
let Inst{5} = imm{6};
370
344
}
371
345
372
- let DecoderNamespace = "RV32Only",
373
- Predicates = [HasStdExtCOrZcfOrZce, HasStdExtF, IsRV32] in
374
- def C_FSW : CStore_rri<0b111, "c.fsw", FPR32C, uimm7_lsb00>,
375
- Sched<[WriteFST32, ReadFStoreData, ReadFMemBase]> {
376
- bits<7> imm;
377
- let Inst{12-10} = imm{5-3};
378
- let Inst{6} = imm{2};
379
- let Inst{5} = imm{6};
380
- }
381
-
382
346
let Predicates = [HasStdExtZca, IsRV64] in
383
347
def C_SD : CStore_rri<0b111, "c.sd", GPRC, uimm8_lsb000>,
384
348
Sched<[WriteSTD, ReadStoreData, ReadMemBase]> {
@@ -500,12 +464,6 @@ def C_SLLI : RVInst16CI<0b000, 0b10, (outs GPR:$rd_wb),
500
464
let Constraints = "$rd = $rd_wb";
501
465
}
502
466
503
- let Predicates = [HasStdExtCOrZcd, HasStdExtD] in
504
- def C_FLDSP : CStackLoad<0b001, "c.fldsp", FPR64, uimm9_lsb000>,
505
- Sched<[WriteFLD64, ReadFMemBase]> {
506
- let Inst{4-2} = imm{8-6};
507
- }
508
-
509
467
def C_LWSP : CStackLoad<0b010, "c.lwsp", GPRNoX0, uimm8_lsb00>,
510
468
Sched<[WriteLDW, ReadMemBase]> {
511
469
let Inst{3-2} = imm{7-6};
@@ -517,13 +475,6 @@ def C_LWSP_INX : CStackLoad<0b010, "c.lwsp", GPRF32NoX0, uimm8_lsb00>,
517
475
let Inst{3-2} = imm{7-6};
518
476
}
519
477
520
- let DecoderNamespace = "RV32Only",
521
- Predicates = [HasStdExtCOrZcfOrZce, HasStdExtF, IsRV32] in
522
- def C_FLWSP : CStackLoad<0b011, "c.flwsp", FPR32, uimm8_lsb00>,
523
- Sched<[WriteFLD32, ReadFMemBase]> {
524
- let Inst{3-2} = imm{7-6};
525
- }
526
-
527
478
let Predicates = [HasStdExtZca, IsRV64] in
528
479
def C_LDSP : CStackLoad<0b011, "c.ldsp", GPRNoX0, uimm9_lsb000>,
529
480
Sched<[WriteLDD, ReadMemBase]> {
@@ -560,12 +511,6 @@ def C_ADD : RVInst16CR<0b1001, 0b10, (outs GPR:$rd),
560
511
let Constraints = "$rs1 = $rd";
561
512
}
562
513
563
- let Predicates = [HasStdExtCOrZcd, HasStdExtD] in
564
- def C_FSDSP : CStackStore<0b101, "c.fsdsp", FPR64, uimm9_lsb000>,
565
- Sched<[WriteFST64, ReadFStoreData, ReadFMemBase]> {
566
- let Inst{9-7} = imm{8-6};
567
- }
568
-
569
514
def C_SWSP : CStackStore<0b110, "c.swsp", GPR, uimm8_lsb00>,
570
515
Sched<[WriteSTW, ReadStoreData, ReadMemBase]> {
571
516
let Inst{8-7} = imm{7-6};
@@ -577,13 +522,6 @@ def C_SWSP_INX : CStackStore<0b110, "c.swsp", GPRF32, uimm8_lsb00>,
577
522
let Inst{8-7} = imm{7-6};
578
523
}
579
524
580
- let DecoderNamespace = "RV32Only",
581
- Predicates = [HasStdExtCOrZcfOrZce, HasStdExtF, IsRV32] in
582
- def C_FSWSP : CStackStore<0b111, "c.fswsp", FPR32, uimm8_lsb00>,
583
- Sched<[WriteFST32, ReadFStoreData, ReadFMemBase]> {
584
- let Inst{8-7} = imm{7-6};
585
- }
586
-
587
525
let Predicates = [HasStdExtZca, IsRV64] in
588
526
def C_SDSP : CStackStore<0b111, "c.sdsp", GPR, uimm9_lsb000>,
589
527
Sched<[WriteSTD, ReadStoreData, ReadMemBase]> {
@@ -600,6 +538,61 @@ def C_UNIMP : RVInst16<(outs), (ins), "c.unimp", "", [], InstFormatOther>,
600
538
601
539
} // Predicates = [HasStdExtZca]
602
540
541
+ let DecoderNamespace = "RV32Only",
542
+ Predicates = [HasStdExtCOrZcfOrZce, HasStdExtF, IsRV32] in {
543
+ def C_FLW : CLoad_ri<0b011, "c.flw", FPR32C, uimm7_lsb00>,
544
+ Sched<[WriteFLD32, ReadFMemBase]> {
545
+ bits<7> imm;
546
+ let Inst{12-10} = imm{5-3};
547
+ let Inst{6} = imm{2};
548
+ let Inst{5} = imm{6};
549
+ }
550
+
551
+ def C_FSW : CStore_rri<0b111, "c.fsw", FPR32C, uimm7_lsb00>,
552
+ Sched<[WriteFST32, ReadFStoreData, ReadFMemBase]> {
553
+ bits<7> imm;
554
+ let Inst{12-10} = imm{5-3};
555
+ let Inst{6} = imm{2};
556
+ let Inst{5} = imm{6};
557
+ }
558
+
559
+ def C_FLWSP : CStackLoad<0b011, "c.flwsp", FPR32, uimm8_lsb00>,
560
+ Sched<[WriteFLD32, ReadFMemBase]> {
561
+ let Inst{3-2} = imm{7-6};
562
+ }
563
+
564
+ def C_FSWSP : CStackStore<0b111, "c.fswsp", FPR32, uimm8_lsb00>,
565
+ Sched<[WriteFST32, ReadFStoreData, ReadFMemBase]> {
566
+ let Inst{8-7} = imm{7-6};
567
+ }
568
+ } // DecoderNamespace = "RV32Only", Predicates = [HasStdExtCOrZcfOrZce, HasStdExtF, IsRV32]
569
+
570
+ let Predicates = [HasStdExtCOrZcd, HasStdExtD] in {
571
+ def C_FLD : CLoad_ri<0b001, "c.fld", FPR64C, uimm8_lsb000>,
572
+ Sched<[WriteFLD64, ReadFMemBase]> {
573
+ bits<8> imm;
574
+ let Inst{12-10} = imm{5-3};
575
+ let Inst{6-5} = imm{7-6};
576
+ }
577
+
578
+ def C_FSD : CStore_rri<0b101, "c.fsd", FPR64C, uimm8_lsb000>,
579
+ Sched<[WriteFST64, ReadFStoreData, ReadFMemBase]> {
580
+ bits<8> imm;
581
+ let Inst{12-10} = imm{5-3};
582
+ let Inst{6-5} = imm{7-6};
583
+ }
584
+
585
+ def C_FLDSP : CStackLoad<0b001, "c.fldsp", FPR64, uimm9_lsb000>,
586
+ Sched<[WriteFLD64, ReadFMemBase]> {
587
+ let Inst{4-2} = imm{8-6};
588
+ }
589
+
590
+ def C_FSDSP : CStackStore<0b101, "c.fsdsp", FPR64, uimm9_lsb000>,
591
+ Sched<[WriteFST64, ReadFStoreData, ReadFMemBase]> {
592
+ let Inst{9-7} = imm{8-6};
593
+ }
594
+ } // Predicates = [HasStdExtCOrZcd, HasStdExtD] in {
595
+
603
596
//===----------------------------------------------------------------------===//
604
597
// HINT Instructions
605
598
//===----------------------------------------------------------------------===//
@@ -767,20 +760,17 @@ def : InstAlias<".insn_cj $opcode, $funct3, $imm11",
767
760
// Compress Instruction tablegen backend.
768
761
//===----------------------------------------------------------------------===//
769
762
770
- // Patterns are defined in the same order the compressed instructions appear
763
+ // Zca patterns are defined in the same order the compressed instructions appear
771
764
// under the "RVC Instruction Set Listings" section of the ISA manual.
772
765
766
+ // Zca Instructions
767
+
773
768
// Quadrant 0
774
769
let Predicates = [HasStdExtZca] in {
775
770
def : CompressPat<(ADDI GPRC:$rd, SP:$rs1, uimm10_lsb00nonzero:$imm),
776
771
(C_ADDI4SPN GPRC:$rd, SP:$rs1, uimm10_lsb00nonzero:$imm)>;
777
772
} // Predicates = [HasStdExtZca]
778
773
779
- let Predicates = [HasStdExtCOrZcd, HasStdExtD] in {
780
- def : CompressPat<(FLD FPR64C:$rd, GPRCMem:$rs1, uimm8_lsb000:$imm),
781
- (C_FLD FPR64C:$rd, GPRCMem:$rs1, uimm8_lsb000:$imm)>;
782
- } // Predicates = [HasStdExtCOrZcd, HasStdExtD]
783
-
784
774
let Predicates = [HasStdExtZca] in {
785
775
def : CompressPat<(LW GPRC:$rd, GPRCMem:$rs1, uimm7_lsb00:$imm),
786
776
(C_LW GPRC:$rd, GPRCMem:$rs1, uimm7_lsb00:$imm)>;
@@ -790,21 +780,11 @@ def : CompressPat<(LW_INX GPRF32C:$rd, GPRCMem:$rs1, uimm7_lsb00:$imm),
790
780
(C_LW_INX GPRF32C:$rd, GPRCMem:$rs1, uimm7_lsb00:$imm)>;
791
781
} // Predicates = [HasStdExtZca]
792
782
793
- let Predicates = [HasStdExtCOrZcfOrZce, HasStdExtF, IsRV32] in {
794
- def : CompressPat<(FLW FPR32C:$rd, GPRCMem:$rs1, uimm7_lsb00:$imm),
795
- (C_FLW FPR32C:$rd, GPRCMem:$rs1, uimm7_lsb00:$imm)>;
796
- } // Predicates = [HasStdExtCOrZcfOrZce, HasStdExtF, IsRV32]
797
-
798
783
let Predicates = [HasStdExtZca, IsRV64] in {
799
784
def : CompressPat<(LD GPRC:$rd, GPRCMem:$rs1, uimm8_lsb000:$imm),
800
785
(C_LD GPRC:$rd, GPRCMem:$rs1, uimm8_lsb000:$imm)>;
801
786
} // Predicates = [HasStdExtZca, IsRV64]
802
787
803
- let Predicates = [HasStdExtCOrZcd, HasStdExtD] in {
804
- def : CompressPat<(FSD FPR64C:$rs2, GPRCMem:$rs1, uimm8_lsb000:$imm),
805
- (C_FSD FPR64C:$rs2, GPRCMem:$rs1, uimm8_lsb000:$imm)>;
806
- } // Predicates = [HasStdExtCOrZcd, HasStdExtD]
807
-
808
788
let Predicates = [HasStdExtZca] in {
809
789
def : CompressPat<(SW GPRC:$rs2, GPRCMem:$rs1, uimm7_lsb00:$imm),
810
790
(C_SW GPRC:$rs2, GPRCMem:$rs1, uimm7_lsb00:$imm)>;
@@ -814,11 +794,6 @@ def : CompressPat<(SW_INX GPRF32C:$rs2, GPRCMem:$rs1, uimm7_lsb00:$imm),
814
794
(C_SW_INX GPRF32C:$rs2, GPRCMem:$rs1, uimm7_lsb00:$imm)>;
815
795
} // Predicates = [HasStdExtZca]
816
796
817
- let Predicates = [HasStdExtCOrZcfOrZce, HasStdExtF, IsRV32] in {
818
- def : CompressPat<(FSW FPR32C:$rs2, GPRCMem:$rs1, uimm7_lsb00:$imm),
819
- (C_FSW FPR32C:$rs2, GPRCMem:$rs1, uimm7_lsb00:$imm)>;
820
- } // Predicates = [HasStdExtCOrZcfOrZce, HasStdExtF, IsRV32]
821
-
822
797
let Predicates = [HasStdExtZca, IsRV64] in {
823
798
def : CompressPat<(SD GPRC:$rs2, GPRCMem:$rs1, uimm8_lsb000:$imm),
824
799
(C_SD GPRC:$rs2, GPRCMem:$rs1, uimm8_lsb000:$imm)>;
@@ -907,11 +882,6 @@ def : CompressPat<(SLLI GPRNoX0:$rs1, GPRNoX0:$rs1, uimmlog2xlennonzero:$imm),
907
882
(C_SLLI GPRNoX0:$rs1, uimmlog2xlennonzero:$imm)>;
908
883
} // Predicates = [HasStdExtZca]
909
884
910
- let Predicates = [HasStdExtCOrZcd, HasStdExtD] in {
911
- def : CompressPat<(FLD FPR64:$rd, SPMem:$rs1, uimm9_lsb000:$imm),
912
- (C_FLDSP FPR64:$rd, SPMem:$rs1, uimm9_lsb000:$imm)>;
913
- } // Predicates = [HasStdExtCOrZcd, HasStdExtD]
914
-
915
885
let Predicates = [HasStdExtZca] in {
916
886
def : CompressPat<(LW GPRNoX0:$rd, SPMem:$rs1, uimm8_lsb00:$imm),
917
887
(C_LWSP GPRNoX0:$rd, SPMem:$rs1, uimm8_lsb00:$imm)>;
@@ -921,11 +891,6 @@ def : CompressPat<(LW_INX GPRF32NoX0:$rd, SPMem:$rs1, uimm8_lsb00:$imm),
921
891
(C_LWSP_INX GPRF32NoX0:$rd, SPMem:$rs1, uimm8_lsb00:$imm)>;
922
892
} // Predicates = [HasStdExtZca]
923
893
924
- let Predicates = [HasStdExtCOrZcfOrZce, HasStdExtF, IsRV32] in {
925
- def : CompressPat<(FLW FPR32:$rd, SPMem:$rs1, uimm8_lsb00:$imm),
926
- (C_FLWSP FPR32:$rd, SPMem:$rs1, uimm8_lsb00:$imm)>;
927
- } // Predicates = [HasStdExtCOrZcfOrZce, HasStdExtF, IsRV32]
928
-
929
894
let Predicates = [HasStdExtZca, IsRV64] in {
930
895
def : CompressPat<(LD GPRNoX0:$rd, SPMem:$rs1, uimm9_lsb000:$imm),
931
896
(C_LDSP GPRNoX0:$rd, SPMem:$rs1, uimm9_lsb000:$imm)>;
@@ -953,11 +918,6 @@ def : CompressPat<(ADD GPRNoX0:$rs1, GPRNoX0:$rs2, GPRNoX0:$rs1),
953
918
(C_ADD GPRNoX0:$rs1, GPRNoX0:$rs2)>;
954
919
} // Predicates = [HasStdExtZca]
955
920
956
- let Predicates = [HasStdExtCOrZcd, HasStdExtD] in {
957
- def : CompressPat<(FSD FPR64:$rs2, SPMem:$rs1, uimm9_lsb000:$imm),
958
- (C_FSDSP FPR64:$rs2, SPMem:$rs1, uimm9_lsb000:$imm)>;
959
- } // Predicates = [HasStdExtCOrZcd, HasStdExtD]
960
-
961
921
let Predicates = [HasStdExtZca] in {
962
922
def : CompressPat<(SW GPR:$rs2, SPMem:$rs1, uimm8_lsb00:$imm),
963
923
(C_SWSP GPR:$rs2, SPMem:$rs1, uimm8_lsb00:$imm)>;
@@ -967,12 +927,38 @@ def : CompressPat<(SW_INX GPRF32:$rs2, SPMem:$rs1, uimm8_lsb00:$imm),
967
927
(C_SWSP_INX GPRF32:$rs2, SPMem:$rs1, uimm8_lsb00:$imm)>;
968
928
} // Predicates = [HasStdExtZca]
969
929
970
- let Predicates = [HasStdExtCOrZcfOrZce, HasStdExtF, IsRV32] in {
971
- def : CompressPat<(FSW FPR32:$rs2, SPMem:$rs1, uimm8_lsb00:$imm),
972
- (C_FSWSP FPR32:$rs2, SPMem:$rs1, uimm8_lsb00:$imm)>;
973
- } // Predicates = [HasStdExtCOrZcfOrZce, HasStdExtF, IsRV32]
974
-
975
930
let Predicates = [HasStdExtZca, IsRV64] in {
976
931
def : CompressPat<(SD GPR:$rs2, SPMem:$rs1, uimm9_lsb000:$imm),
977
932
(C_SDSP GPR:$rs2, SPMem:$rs1, uimm9_lsb000:$imm)>;
978
933
} // Predicates = [HasStdExtZca, IsRV64]
934
+
935
+ // Zcf Instructions
936
+ let Predicates = [HasStdExtCOrZcfOrZce, HasStdExtF, IsRV32] in {
937
+ // Quadrant 0
938
+ def : CompressPat<(FLW FPR32C:$rd, GPRCMem:$rs1, uimm7_lsb00:$imm),
939
+ (C_FLW FPR32C:$rd, GPRCMem:$rs1, uimm7_lsb00:$imm)>;
940
+ def : CompressPat<(FSW FPR32C:$rs2, GPRCMem:$rs1, uimm7_lsb00:$imm),
941
+ (C_FSW FPR32C:$rs2, GPRCMem:$rs1, uimm7_lsb00:$imm)>;
942
+
943
+ // Quadrant 2
944
+ def : CompressPat<(FLW FPR32:$rd, SPMem:$rs1, uimm8_lsb00:$imm),
945
+ (C_FLWSP FPR32:$rd, SPMem:$rs1, uimm8_lsb00:$imm)>;
946
+ def : CompressPat<(FSW FPR32:$rs2, SPMem:$rs1, uimm8_lsb00:$imm),
947
+ (C_FSWSP FPR32:$rs2, SPMem:$rs1, uimm8_lsb00:$imm)>;
948
+ } // Predicates = [HasStdExtCOrZcfOrZce, HasStdExtF, IsRV32]
949
+
950
+ // Zcd Instructions
951
+ let Predicates = [HasStdExtCOrZcd, HasStdExtD] in {
952
+ // Quadrant 0
953
+ def : CompressPat<(FLD FPR64C:$rd, GPRCMem:$rs1, uimm8_lsb000:$imm),
954
+ (C_FLD FPR64C:$rd, GPRCMem:$rs1, uimm8_lsb000:$imm)>;
955
+ def : CompressPat<(FSD FPR64C:$rs2, GPRCMem:$rs1, uimm8_lsb000:$imm),
956
+ (C_FSD FPR64C:$rs2, GPRCMem:$rs1, uimm8_lsb000:$imm)>;
957
+
958
+ // Quadrant 2
959
+ def : CompressPat<(FLD FPR64:$rd, SPMem:$rs1, uimm9_lsb000:$imm),
960
+ (C_FLDSP FPR64:$rd, SPMem:$rs1, uimm9_lsb000:$imm)>;
961
+ def : CompressPat<(FSD FPR64:$rs2, SPMem:$rs1, uimm9_lsb000:$imm),
962
+ (C_FSDSP FPR64:$rs2, SPMem:$rs1, uimm9_lsb000:$imm)>;
963
+ } // Predicates = [HasStdExtCOrZcd, HasStdExtD]
964
+
0 commit comments