@@ -82,6 +82,7 @@ def Z80rl_flag : SDNode<"Z80ISD::RL", SDTUnOpRFF>;
82
82
def Z80rr_flag : SDNode<"Z80ISD::RR", SDTUnOpRFF>;
83
83
def Z80sla_flag : SDNode<"Z80ISD::SLA", SDTUnOpRF>;
84
84
def Z80sra_flag : SDNode<"Z80ISD::SRA", SDTUnOpRF>;
85
+ def Z80sli_flag : SDNode<"Z80ISD::SLI", SDTUnOpRF>;
85
86
def Z80srl_flag : SDNode<"Z80ISD::SRL", SDTUnOpRF>;
86
87
def Z80bit_flag : SDNode<"Z80ISD::BIT", SDTBitOpF>;
87
88
def Z80res_flag : SDNode<"Z80ISD::RES", SDTBitOpR>;
@@ -132,8 +133,9 @@ def HaveZ180Ops : Predicate<"Subtarget->hasZ180Ops()">,
132
133
def HaveEZ80Ops : Predicate<"Subtarget->hasEZ80Ops()">,
133
134
AssemblerPredicate<(all_of FeatureEZ80), "eZ80 ops">;
134
135
def HaveIdxHalf : Predicate<"Subtarget->hasIndexHalfRegs()">,
135
- AssemblerPredicate<(all_of FeatureIdxHalf),
136
- "index half regs">;
136
+ AssemblerPredicate<"FeatureIdxHalf", "index half regs">;
137
+ def HaveSliOps : Predicate<"Subtarget->hasSliOps()">,
138
+ AssemblerPredicate<"FeatureSli", "sli ops">;
137
139
138
140
//===----------------------------------------------------------------------===//
139
141
// Z80 Instruction Format Definitions.
@@ -805,6 +807,8 @@ defm RL : UnOp8RFF <CBPre, 2, "rl">;
805
807
defm RR : UnOp8RFF <CBPre, 3, "rr">;
806
808
defm SLA : UnOp8RF <CBPre, 4, "sla">;
807
809
defm SRA : UnOp8RF <CBPre, 5, "sra">;
810
+ defm SLI : UnOp8RF <CBPre, 6, "sli">,
811
+ Requires<[HaveSliOps]>;
808
812
defm SRL : UnOp8RF <CBPre, 7, "srl">;
809
813
defm BIT : BitOp8F < 1, "bit">;
810
814
defm RES : BitOp8R < 2, "res">;
@@ -820,7 +824,9 @@ defm XOR : BinOp8RF <NoPre, 5, "xor">;
820
824
defm OR : BinOp8RF <NoPre, 6, "or", 1>;
821
825
defm CP : BinOp8F <NoPre, 7, "cp", 1>;
822
826
defm TST : BinOp8F <EDPre, 4, "tst", 1>,
823
- Requires<[HaveEZ80Ops]>;
827
+ Requires<[HaveZ180Ops]>;
828
+
829
+ def : MnemonicAlias<"sll", "sli">, Requires<[HaveSliOps]>;
824
830
825
831
def : Pat<(fshl G8:$reg, G8:$reg, (i8 1)), (RLC8r G8:$reg)>;
826
832
def : Pat<(fshl G8:$reg, G8:$reg, (i8 7)), (RRC8r G8:$reg)>;
0 commit comments