diff --git a/lib/Target/WDC65816/WDC65816InstrInfo.td b/lib/Target/WDC65816/WDC65816InstrInfo.td index 595666ff..ec50da20 100644 --- a/lib/Target/WDC65816/WDC65816InstrInfo.td +++ b/lib/Target/WDC65816/WDC65816InstrInfo.td @@ -104,29 +104,29 @@ def WDCRET : SDNode<"WDCISD::RET_FLAG", SDTNone, [SDNPHasChain, SDNP // Group #1 Instructions -// JSR TODO - Need to set all of the DAG patterns -// JSR TODO - Addresses are 32-bit to llvm but can we toss the upper byte for long addressing modes which are 24-bit -// JSR TODO - Need to specify flag behaviour, especially carry for ADC, SBC, CMP +// WDC_TODO - Need to set all of the DAG patterns +// WDC_TODO - Addresses are 32-bit to llvm but can we toss the upper byte for long addressing modes which are 24-bit +// WDC_TODO - Need to specify flag behaviour, especially carry for ADC, SBC, CMP def ADCimm : Group1$src2", - [(set i16:$dst, (add i16:$src1, i16:$src2))]>; + [(set AccRegs:$dst, (add AccRegs:$src1, i16:$src2))]>; def ADCabs : Group1; + [(set AccRegs:$dst, (add AccRegs:$src1, (load ADDRabs:$src2)))]>; def ADCabsl : Group1$src2", - [(set i16:$dst, (add i16:$src1, (load ADDRabsl:$src2)))]>; + [(set AccRegs:$dst, (add AccRegs:$src1, (load ADDRabsl:$src2)))]>; def ADCdp : Group1; + [(set AccRegs:$dst, (add AccRegs:$src1, (load ADDRdp:$src2)))]>; def ADCdpindir : Group1$src2", - [(set i16:$dst, (and i16:$src1, i16:$src2))]>; + [(set AccRegs:$dst, (and AccRegs:$src1, i16:$src2))]>; def ANDabs : Group1; + [(set AccRegs:$dst, (and AccRegs:$src1, (load ADDRabs:$src2)))]>; def ANDabsl : Group1$src2", - [(set i16:$dst, (and i16:$src1, (load ADDRabsl:$src2)))]>; + [(set AccRegs:$dst, (and AccRegs:$src1, (load ADDRabsl:$src2)))]>; def ANDdp : Group1; + [(set AccRegs:$dst, (and AccRegs:$src1, (load ADDRdp:$src2)))]>; def ANDdpindir : Group1$src2", - [(set i16:$dst, (xor i16:$src1, i16:$src2))]>; + [(set AccRegs:$dst, (xor AccRegs:$src1, i16:$src2))]>; def EORabs : Group1; + [(set AccRegs:$dst, (xor AccRegs:$src1, (load ADDRabs:$src2)))]>; def EORabsl : Group1$src2", - [(set i16:$dst, (xor i16:$src1, (load ADDRabsl:$src2)))]>; + [(set AccRegs:$dst, (xor AccRegs:$src1, (load ADDRabsl:$src2)))]>; def EORdp : Group1; + [(set AccRegs:$dst, (xor AccRegs:$src1, (load ADDRdp:$src2)))]>; def EORdpindir : Group1$src", - [(set i16:$dst, i16:$src)]>; + [(set AccRegs:$dst, i16:$src)]>; def LDAabs : Group1; + [(set AccRegs:$dst, (load ADDRabs:$src))]>; def LDAabsl : Group1$src", - [(set i16:$dst, (load ADDRabsl:$src))]>; + [(set AccRegs:$dst, (load ADDRabsl:$src))]>; def LDAdp : Group1; + [(set AccRegs:$dst, (load ADDRdp:$src))]>; def LDAdpindir : Group1$src2", - [(set i16:$dst, (or i16:$src1, i16:$src2))]>; + [(set AccRegs:$dst, (or AccRegs:$src1, i16:$src2))]>; def ORAabs : Group1; + [(set AccRegs:$dst, (or AccRegs:$src1, (load ADDRabs:$src2)))]>; def ORAabsl : Group1$src2", - [(set i16:$dst, (or i16:$src1, (load ADDRabsl:$src2)))]>; + [(set AccRegs:$dst, (or AccRegs:$src1, (load ADDRabsl:$src2)))]>; def ORAdp : Group1; + [(set AccRegs:$dst, (or AccRegs:$src1, (load ADDRdp:$src2)))]>; def ORAdpindir : Group1$src2", - [(set i16:$dst, (sub i16:$src1, i16:$src2))]>; + [(set AccRegs:$dst, (sub AccRegs:$src1, i16:$src2))]>; def SBCabs : Group1; + [(set AccRegs:$dst, (sub AccRegs:$src1, (load ADDRabs:$src2)))]>; def SBCabsl : Group1$src2", - [(set i16:$dst, (sub i16:$src1, (load ADDRabsl:$src2)))]>; + [(set AccRegs:$dst, (sub AccRegs:$src1, (load ADDRabsl:$src2)))]>; def SBCdp : Group1; + [(set AccRegs:$dst, (sub AccRegs:$src1, (load ADDRdp:$src2)))]>; def SBCdpindir : Group1; + [(store AccRegs:$src, ADDRabs:$dst)]>; def STAabsl : Group1$dst", - [(store i16:$src, ADDRabsl:$dst)]>; + [(store AccRegs:$src, ADDRabsl:$dst)]>; def STAdp : Group1; + [(store AccRegs:$src, ADDRdp:$dst)]>; def STAdpindir : Group1; + [(set AccRegs:$dst, (shl AccRegs:$src, (i16 1)))]>; def ASLabs : Group2; - // JSR TODO - [(store (shl (load ADDRabs:$dst), (i16 1)), ADDRabs:$dst)]>; + // WDC_TODO - [(store (shl (load ADDRabs:$dst), (i16 1)), ADDRabs:$dst)]>; def ASLdp : Group2; - // JSR TODO - [(store (shl (load ADDRdp:$dst), (i8 1)), ADDRdp:$dst)]>; + // WDC_TODO - [(store (shl (load ADDRdp:$dst), (i8 1)), ADDRdp:$dst)]>; def ASLabsix : Group2; + [(set AccRegs:$dst, (sub AccRegs:$src, 1))]>; def DECabs : Group2; - // JSR TODO - [(store (sub (load ADDRabs:$dst), 1), ADDRabs:$dst)]>; + // WDC_TODO - [(store (sub (load ADDRabs:$dst), 1), ADDRabs:$dst)]>; def DECdp : Group2; - // JSR TODO - [(store (sub (load ADDRdp:$dst), 1), ADDRdp:$dst)]>; + // WDC_TODO - [(store (sub (load ADDRdp:$dst), 1), ADDRdp:$dst)]>; def DECabsix : Group2; + [(set AccRegs:$dst, (add AccRegs:$src, 1))]>; def INCabs : Group2; - // JSR TODO - [(store (add (load ADDRabs:$dst), 1), ADDRabs:$dst)]>; + // WDC_TODO - [(store (add (load ADDRabs:$dst), 1), ADDRabs:$dst)]>; def INCdp : Group2; - // JSR TODO - [(store (add (load ADDRdp:$dst), 1), ADDRdp:$dst)]>; + // WDC_TODO - [(store (add (load ADDRdp:$dst), 1), ADDRdp:$dst)]>; def INCabsix : Group2; + [(set IndexXRegs:$dst, i16:$src)]>; def LDXabs : Group2; + [(set IndexXRegs:$dst, (load ADDRabs:$src))]>; def LDXdp : Group2; + [(set IndexXRegs:$dst, (load ADDRdp:$src))]>; def LDXabsiy : Group2; + [(set IndexYRegs:$dst, i16:$src)]>; def LDYabs : Group2_Y; + [(set IndexYRegs:$dst, (load ADDRabs:$src))]>; def LDYdp : Group2_Y; + [(set IndexYRegs:$dst, (load ADDRdp:$src))]>; def LDYabsix : Group2_Y; + [(set AccRegs:$dst, (srl AccRegs:$src, (i8 1)))]>; def LSRabs : Group2; - // JSR TODO - [(store (srl (load ADDRabs:$dst), (i8 1)), ADDRabs:$dst)]>; + // WDC_TODO - [(store (srl (load ADDRabs:$dst), (i8 1)), ADDRabs:$dst)]>; def LSRdp : Group2; - // JSR TODO - [(store (srl (load ADDRdp:$dst), (i8 1)), ADDRdp:$dst)]>; + // WDC_TODO - [(store (srl (load ADDRdp:$dst), (i8 1)), ADDRdp:$dst)]>; def LSRabsix : Group2; + [(set AccRegs:$dst, (rotl AccRegs:$src, (i8 1)))]>; def ROLabs : Group2; - // JSR TODO - [(store (rotl (load ADDRabs:$dst), (i8 1)), ADDRabs:$dst)]>; + // WDC_TODO - [(store (rotl (load ADDRabs:$dst), (i8 1)), ADDRabs:$dst)]>; def ROLdp : Group2; - // JSR TODO - [(store (rotl (load ADDRdp:$dst), (i8 1)), ADDRdp:$dst)]>; + // WDC_TODO - [(store (rotl (load ADDRdp:$dst), (i8 1)), ADDRdp:$dst)]>; def ROLabsix : Group2; + [(set AccRegs:$dst, (rotr AccRegs:$src, (i8 1)))]>; def RORabs : Group2; - // JSR TODO - [(store (rotr (load ADDRabs:$dst), (i8 1)), ADDRabs:$dst)]>; + // WDC_TODO - [(store (rotr (load ADDRabs:$dst), (i8 1)), ADDRabs:$dst)]>; def RORdp : Group2; - // JSR TODO - [(store (rotr (load ADDRdp:$dst), (i8 1)), ADDRdp:$dst)]>; + // WDC_TODO - [(store (rotr (load ADDRdp:$dst), (i8 1)), ADDRdp:$dst)]>; def RORabsix : Group2; + [(store IndexXRegs:$src, ADDRabs:$dst)]>; def STXdp : Group2; + [(store IndexXRegs:$src, ADDRdp:$dst)]>; def STXdpiy : Group2; + [(store IndexYRegs:$src, ADDRabs:$dst)]>; def STYdp : Group2_Y; + [(store IndexYRegs:$src, ADDRdp:$dst)]>; def STYdpix : Group2_Y; + [(set IndexXRegs:$dst, (sub IndexXRegs:$src, 1))]>; def DEY : Group3; + [(set IndexYRegs:$dst, (sub IndexYRegs:$src, 1))]>; def INX : Group3; + [(set IndexXRegs:$dst, (add IndexXRegs:$src, 1))]>; def INY : Group3; + [(set IndexYRegs:$dst, (add IndexYRegs:$src, 1))]>; def JMPabs : Group3; + [(set IndexXRegs:$dst, AccRegs:$src)]>; def TAY : Group3; + [(set IndexYRegs:$dst, AccRegs:$src)]>; def TCD : Group3; + [(set DirectPageRegs:$dst, AccRegs:$src)]>; def TCS : Group3; + [(set StackPointerRegs:$dst, AccRegs:$src)]>; def TDC : Group3; + [(set AccRegs:$dst, DirectPageRegs:$src)]>; def TRBabs : Group3; + [(set AccRegs:$dst, StackPointerRegs:$src)]>; def TSX : Group3; + [(set IndexXRegs:$dst, StackPointerRegs:$src)]>; def TXA : Group3; + [(set AccRegs:$dst, IndexXRegs:$src)]>; def TXS : Group3; + [(set StackPointerRegs:$dst, IndexXRegs:$src)]>; def TXY : Group3; + [(set IndexYRegs:$dst, IndexXRegs:$src)]>; def TYA : Group3; + [(set AccRegs:$dst, IndexYRegs:$src)]>; def TYX : Group3; + [(set IndexXRegs:$dst, IndexYRegs:$src)]>; def WAI : Group3