@@ -714,59 +714,61 @@ let mayLoad = true, mayStore = true in {
714
714
let Defs = [F] in
715
715
multiclass UnOp8RF<OtherPrefix prefix, bits<8> opcode, string mnemonic,
716
716
list<Predicate> Preds = []> {
717
- defvar rc8 = !if(!eq(prefix, CBPre), G8, R8);
718
- def 8r : I <Pre<Idx0Pre, prefix>, opcode, mnemonic, "\t$dst", "$imp = $dst",
719
- (outs rc8:$dst), (ins rc8:$imp),
720
- [(set rc8:$dst, F,
721
- (!cast<SDNode>(!strconcat("Z80", mnemonic, "_flag"))
722
- rc8:$imp))]>,
723
- Requires<Preds>;
717
+ defvar s = !cond(!eq(prefix, NoPre): "r", !eq(prefix, CBPre): "g");
718
+ defvar rc8 = !cond(!eq(prefix, NoPre): R8, !eq(prefix, CBPre): G8);
719
+ def 8#s : I <Pre<Idx0Pre, prefix>, opcode, mnemonic, "\t$dst", "$imp = $dst",
720
+ (outs rc8:$dst), (ins rc8:$imp),
721
+ [(set rc8:$dst, F,
722
+ (!cast<SDNode>(!strconcat("Z80", mnemonic, "_flag"))
723
+ rc8:$imp))]>,
724
+ Requires<Preds>;
724
725
let mayLoad = true, mayStore = true in {
725
- def 8p : I <Pre<Idx0Pre, prefix>, opcode, mnemonic, "\t$adr", "",
726
- (outs), (ins aptr:$adr),
727
- [(store (!cast<SDNode>(!strconcat("Z80", mnemonic, "_flag"))
728
- (i8 (load iPTR:$adr))), iPTR:$adr),
729
- (implicit F)]>,
730
- Requires<Preds>;
731
- def 8o : Io<Pre<Idx0Pre, prefix>, opcode, mnemonic, "\t$adr", "",
732
- (outs), (ins off:$adr),
733
- [(store (!cast<SDNode>(!strconcat("Z80", mnemonic, "_flag"))
734
- (i8 (load offpat:$adr))), offpat:$adr),
735
- (implicit F)]>,
736
- Requires<Preds>;
726
+ def 8p : I <Pre<Idx0Pre, prefix>, opcode, mnemonic, "\t$adr", "",
727
+ (outs), (ins aptr:$adr),
728
+ [(store (!cast<SDNode>(!strconcat("Z80", mnemonic, "_flag"))
729
+ (i8 (load iPTR:$adr))), iPTR:$adr),
730
+ (implicit F)]>,
731
+ Requires<Preds>;
732
+ def 8o : Io<Pre<Idx0Pre, prefix>, opcode, mnemonic, "\t$adr", "",
733
+ (outs), (ins off:$adr),
734
+ [(store (!cast<SDNode>(!strconcat("Z80", mnemonic, "_flag"))
735
+ (i8 (load offpat:$adr))), offpat:$adr),
736
+ (implicit F)]>,
737
+ Requires<Preds>;
737
738
if !eq(prefix, CBPre) then
738
- def 8go : Io<Pre<Idx1Pre, prefix>, opcode, mnemonic, "\t$adr, $dst", "",
739
- (outs rc8:$dst), (ins off:$adr)>,
740
- Requires<!listconcat(Preds, [HaveUndocOps])>;
739
+ def 8#s#o : Io<Pre<Idx1Pre, prefix>, opcode, mnemonic, "\t$adr, $dst", "",
740
+ (outs rc8:$dst), (ins off:$adr)>,
741
+ Requires<!listconcat(Preds, [HaveUndocOps])>;
741
742
}
742
743
}
743
744
let Defs = [F], Uses = [F] in
744
745
multiclass UnOp8RFF<OtherPrefix prefix, bits<8> opcode, string mnemonic,
745
746
list<Predicate> Preds = []> {
746
- defvar rc8 = !if(!eq(prefix, CBPre), G8, R8);
747
- def 8r : I <Pre<Idx0Pre, prefix>, opcode, mnemonic, "\t$dst", "$imp = $dst",
748
- (outs rc8:$dst), (ins rc8:$imp),
749
- [(set rc8:$dst, F,
750
- (!cast<SDNode>(!strconcat("Z80", mnemonic, "_flag"))
751
- rc8:$imp, F))]>,
752
- Requires<Preds>;
747
+ defvar s = !cond(!eq(prefix, NoPre): "r", !eq(prefix, CBPre): "g");
748
+ defvar rc8 = !cond(!eq(prefix, NoPre): R8, !eq(prefix, CBPre): G8);
749
+ def 8#s : I <Pre<Idx0Pre, prefix>, opcode, mnemonic, "\t$dst", "$imp = $dst",
750
+ (outs rc8:$dst), (ins rc8:$imp),
751
+ [(set rc8:$dst, F,
752
+ (!cast<SDNode>(!strconcat("Z80", mnemonic, "_flag"))
753
+ rc8:$imp, F))]>,
754
+ Requires<Preds>;
753
755
let mayLoad = true, mayStore = true in {
754
- def 8p : I <Pre<Idx0Pre, prefix>, opcode, mnemonic, "\t$adr", "",
755
- (outs), (ins aptr:$adr),
756
- [(store (!cast<SDNode>(!strconcat("Z80", mnemonic, "_flag"))
757
- (i8 (load iPTR:$adr)), F), iPTR:$adr),
758
- (implicit F)]>,
759
- Requires<Preds>;
760
- def 8o : Io<Pre<Idx0Pre, prefix>, opcode, mnemonic, "\t$adr", "",
761
- (outs), (ins off:$adr),
762
- [(store (!cast<SDNode>(!strconcat("Z80", mnemonic, "_flag"))
763
- (i8 (load offpat:$adr)), F), offpat:$adr),
764
- (implicit F)]>,
765
- Requires<Preds>;
756
+ def 8p : I <Pre<Idx0Pre, prefix>, opcode, mnemonic, "\t$adr", "",
757
+ (outs), (ins aptr:$adr),
758
+ [(store (!cast<SDNode>(!strconcat("Z80", mnemonic, "_flag"))
759
+ (i8 (load iPTR:$adr)), F), iPTR:$adr),
760
+ (implicit F)]>,
761
+ Requires<Preds>;
762
+ def 8o : Io<Pre<Idx0Pre, prefix>, opcode, mnemonic, "\t$adr", "",
763
+ (outs), (ins off:$adr),
764
+ [(store (!cast<SDNode>(!strconcat("Z80", mnemonic, "_flag"))
765
+ (i8 (load offpat:$adr)), F), offpat:$adr),
766
+ (implicit F)]>,
767
+ Requires<Preds>;
766
768
if !eq(prefix, CBPre) then
767
- def 8go : Io<Pre<Idx1Pre, prefix>, opcode, mnemonic, "\t$adr, $dst", "",
768
- (outs rc8:$dst), (ins off:$adr)>,
769
- Requires<!listconcat(Preds, [HaveUndocOps])>;
769
+ def 8#s#o : Io<Pre<Idx1Pre, prefix>, opcode, mnemonic, "\t$adr, $dst", "",
770
+ (outs rc8:$dst), (ins off:$adr)>,
771
+ Requires<!listconcat(Preds, [HaveUndocOps])>;
770
772
}
771
773
}
772
774
multiclass BinOp8RF<bits<3> opcode, string mnemonic, bit compare = false> {
@@ -839,12 +841,14 @@ multiclass BinOp8RFF<bits<3> opcode, string mnemonic, SDNode node, bit compare =
839
841
}
840
842
multiclass BinOp8F<Prefix prefix, bits<3> opcode, string mnemonic,
841
843
bit compare = false> {
844
+ defvar s = !cond(!eq(prefix, Idx0Pre): "r", !eq(prefix, EDPre): "g");
845
+ defvar rc8 = !cond(!eq(prefix, Idx0Pre): R8, !eq(prefix, EDPre): G8);
842
846
let isCompare = compare, Defs = [F], Uses = [A] in {
843
- def 8ar : I <prefix, {0b10, opcode, 0b000}, mnemonic, "\ta, $src", "",
844
- (outs), (ins R8 :$src),
847
+ def 8a#s : I <prefix, {0b10, opcode, 0b000}, mnemonic, "\ta, $src", "",
848
+ (outs), (ins rc8 :$src),
845
849
[(set F,
846
850
(!cast<SDNode>(!strconcat("Z80", mnemonic, "_flag"))
847
- A, R8 :$src))]>;
851
+ A, rc8 :$src))]>;
848
852
def 8ai : Ii<prefix, {0b11, opcode, 0b110}, mnemonic, "\ta, $src", "",
849
853
(outs), (ins i8imm:$src),
850
854
[(set F,
@@ -940,13 +944,13 @@ defm TST : BinOp8F < EDPre, 4, "tst", true>, Requires<[HaveZ180Ops]>;
940
944
def : MnemonicAlias<"sll", "sli">, Requires<[HaveSliOp]>;
941
945
def : MnemonicAlias<"sl1", "sli">, Requires<[HaveSliOp]>;
942
946
943
- def : Pat<(fshl G8:$reg, G8:$reg, (i8 1)), (RLC8r G8:$reg)>;
944
- def : Pat<(fshl G8:$reg, G8:$reg, (i8 7)), (RRC8r G8:$reg)>;
945
- def : Pat<(shl G8:$reg, (i8 1)), (SLA8r G8:$reg)>;
946
- def : Pat<(sra G8:$reg, (i8 1)), (SRA8r G8:$reg)>;
947
- def : Pat<(or (shl G8:$reg, (i8 1)), (i8 1)), (SLI8r G8:$reg)>,
947
+ def : Pat<(fshl G8:$reg, G8:$reg, (i8 1)), (RLC8g G8:$reg)>;
948
+ def : Pat<(fshl G8:$reg, G8:$reg, (i8 7)), (RRC8g G8:$reg)>;
949
+ def : Pat<(shl G8:$reg, (i8 1)), (SLA8g G8:$reg)>;
950
+ def : Pat<(sra G8:$reg, (i8 1)), (SRA8g G8:$reg)>;
951
+ def : Pat<(or (shl G8:$reg, (i8 1)), (i8 1)), (SLI8g G8:$reg)>,
948
952
Requires<[HaveSliOp]>;
949
- def : Pat<(srl G8:$reg, (i8 1)), (SRL8r G8:$reg)>;
953
+ def : Pat<(srl G8:$reg, (i8 1)), (SRL8g G8:$reg)>;
950
954
def : Pat<(add R8:$reg, (i8 1)), (INC8r R8:$reg)>;
951
955
def : Pat<(add R8:$reg, (i8 -1)), (DEC8r R8:$reg)>;
952
956
0 commit comments