@@ -62,10 +62,10 @@ def : ReadAdvance<ReadAdrBase, 0>;
62
62
def : ReadAdvance<ReadST, 0>;
63
63
def : ReadAdvance<ReadVLD, 0>;
64
64
65
+ // NOTE: Copied from N2.
65
66
def : WriteRes<WriteAtomic, []> { let Unsupported = 1; }
66
- def : WriteRes<WriteFDiv, []> { let Unsupported = 1; }
67
- def : WriteRes<WriteBarrier, []> { let Unsupported = 1; }
68
- def : WriteRes<WriteHint, []> { let Unsupported = 1; }
67
+ def : WriteRes<WriteBarrier, []> { let Latency = 1; }
68
+ def : WriteRes<WriteHint, []> { let Latency = 1; }
69
69
70
70
//===----------------------------------------------------------------------===//
71
71
// Define customized scheduler read/write types specific to the Neoverse N3.
@@ -125,12 +125,6 @@ def N3Write_20c_1M0 : SchedWriteRes<[N3UnitM0]> {
125
125
//===----------------------------------------------------------------------===//
126
126
// Define generic 2 micro-op types
127
127
128
- def N3Write_1c_2I : SchedWriteRes<[N3UnitI]> {
129
- let Latency = 1;
130
- let NumMicroOps = 2;
131
- let ReleaseAtCycles = [2];
132
- }
133
-
134
128
def N3Write_1c_1B_1S : SchedWriteRes<[N3UnitB, N3UnitS]> {
135
129
let Latency = 1;
136
130
let NumMicroOps = 2;
@@ -770,7 +764,7 @@ def : InstRW<[N3Write_4c_2I_2L, WriteLDHi], (instrs LDPSWi)>;
770
764
def : InstRW<[WriteAdr, WriteLD, WriteLDHi], (instrs LDPWpost, LDPWpre)>;
771
765
772
766
// Load pair, immed post-index or immed pre-index, normal, X-form
773
- def : InstRW<[N3Write_1c_2I , N3Write_4c_2L, WriteLDHi], (instrs LDPXpost, LDPXpre)>;
767
+ def : InstRW<[WriteAdr , N3Write_4c_2L, WriteLDHi], (instrs LDPXpost, LDPXpre)>;
774
768
775
769
// Load pair, immed post-index or immed pre-index, signed words
776
770
def : InstRW<[N3Write_0c, N3Write_4c_2I_2L, WriteLDHi], (instrs LDPSWpost, LDPSWpre)>;
@@ -785,7 +779,7 @@ def : SchedAlias<WriteST, N3Write_1c_1L01_1D>;
785
779
786
780
// Store register, immed post-index
787
781
// Store register, immed pre-index
788
- def : InstRW<[N3Write_1c_2I , WriteST], (instregex "^STR(BB|HH|W|X)(post|pre)$")>;
782
+ def : InstRW<[WriteAdr , WriteST], (instregex "^STR(BB|HH|W|X)(post|pre)$")>;
789
783
790
784
// Store register, register offset, basic
791
785
// Store register, register offset, scaled by 4/8
@@ -800,7 +794,7 @@ def : SchedAlias<WriteSTP, N3Write_1c_1L01_1D>;
800
794
801
795
// Store pair, immed post-index
802
796
// Store pair, immed pre-index
803
- def : InstRW<[N3Write_1c_2I , WriteSTP], (instregex "^STP[WX](post|pre)$")>;
797
+ def : InstRW<[WriteAdr , WriteSTP], (instregex "^STP[WX](post|pre)$")>;
804
798
805
799
// Tag Load instructions
806
800
// -----------------------------------------------------------------------------
@@ -856,7 +850,7 @@ def : InstRW<[N3Write_5c_1V0], (instrs FDIVHrr, FSQRTHr)>;
856
850
857
851
// FP divide, S-form
858
852
// FP square root, S-form
859
- def : InstRW<[N3Write_7c_1V0], (instrs FDIVSrr, FSQRTSr) >;
853
+ def : SchedAlias<WriteFDiv , N3Write_7c_1V0 >;
860
854
861
855
// FP divide, D-form
862
856
// FP square root, D-form
@@ -927,7 +921,7 @@ def : InstRW<[N3Write_6c_2L, WriteLDHi], (instrs LDPQi, LDNPQi)>;
927
921
// Load vector pair, immed post-index, Q-form
928
922
// Load vector pair, immed pre-index, S/D-form
929
923
// Load vector pair, immed pre-index, Q-form
930
- def : InstRW<[N3Write_1c_2I , N3Write_6c_2L, WriteLDHi], (instregex "^LDP[SDQ](post|pre)$")>;
924
+ def : InstRW<[WriteAdr , N3Write_6c_2L, WriteLDHi], (instregex "^LDP[SDQ](post|pre)$")>;
931
925
932
926
// FP store instructions
933
927
// -----------------------------------------------------------------------------
@@ -938,13 +932,13 @@ def : InstRW<[N3Write_2c_1L01_1V], (instregex "^STUR[BHSDQ]i$")>;
938
932
939
933
// Store vector reg, immed post-index, B/H/S/D-form
940
934
// Store vector reg, immed post-index, Q-form
941
- def : InstRW<[N3Write_1c_2I , N3Write_2c_1L01_1V], (instregex "^STR[BHSDQ]post$")>;
935
+ def : InstRW<[WriteAdr , N3Write_2c_1L01_1V], (instregex "^STR[BHSDQ]post$")>;
942
936
943
937
// Store vector reg, immed pre-index, B/H/S/D-form
944
- def : InstRW<[N3Write_1c_2I , N3Write_3c_1L01_1V], (instregex "^STR[BHSD]pre$")>;
938
+ def : InstRW<[WriteAdr , N3Write_3c_1L01_1V], (instregex "^STR[BHSD]pre$")>;
945
939
946
940
// Store vector reg, immed pre-index, Q-form
947
- def : InstRW<[N3Write_1c_2I , N3Write_2c_1L01_1V], (instrs STRQpre)>;
941
+ def : InstRW<[WriteAdr , N3Write_2c_1L01_1V], (instrs STRQpre)>;
948
942
949
943
// Store vector reg, unsigned immed, B/H/S/D-form
950
944
// Store vector reg, unsigned immed, Q-form
@@ -979,7 +973,7 @@ def : InstRW<[N3Write_2c_1L01_1V], (instregex "^STN?P[SDQ]i$")>;
979
973
// Store vector pair, immed pre-index, S-form
980
974
// Store vector pair, immed pre-index, D-form
981
975
// Store vector pair, immed pre-index, Q-form
982
- def : InstRW<[N3Write_1c_2I , N3Write_2c_1L01_1V], (instregex "^STP[SDQ](post|pre)$")>;
976
+ def : InstRW<[WriteAdr , N3Write_2c_1L01_1V], (instregex "^STP[SDQ](post|pre)$")>;
983
977
984
978
// ASIMD integer instructions
985
979
// -----------------------------------------------------------------------------
0 commit comments