diff --git a/lib/Target/WDC65816/WDC65816InstrInfo.td b/lib/Target/WDC65816/WDC65816InstrInfo.td index 0332aef8..5eb98c2e 100644 --- a/lib/Target/WDC65816/WDC65816InstrInfo.td +++ b/lib/Target/WDC65816/WDC65816InstrInfo.td @@ -32,21 +32,22 @@ include "WDC65816InstrFormats.td" //def ADDRabsl : ComplexPattern; //def ADDRdp : ComplexPattern; +def addr : ComplexPattern; // Address operands def ADDRabs : Operand { let PrintMethod = "printMemOperand"; - let MIOperandInfo = (ops ptr_rc, ptr_rc); + //let MIOperandInfo = (ops ptr_rc, ptr_rc); } def ADDRabsl : Operand { let PrintMethod = "printMemOperand"; - let MIOperandInfo = (ops ptr_rc, ptr_rc); + //let MIOperandInfo = (ops ptr_rc, ptr_rc); } def ADDRdp : Operand { let PrintMethod = "printMemOperand"; - let MIOperandInfo = (ops ptr_rc, ptr_rc); + //let MIOperandInfo = (ops ptr_rc, ptr_rc); } //===----------------------------------------------------------------------===// @@ -77,22 +78,22 @@ def ADDRdp : Operand { def ADCimm : Group1$src2", - [(set AccRegs:$dst, (add AccRegs:$src1, i16imm:$src2))]>; + [(set AccRegs:$dst, (add AccRegs:$src1, i16:$src2))]>; def ADCabs : Group1; + [(set AccRegs:$dst, (add AccRegs:$src1, (load addr:$src2)))]>; def ADCabsl : Group1$src2", - [(set AccRegs:$dst, (add AccRegs:$src1, (load ADDRabsl:$src2)))]>; + [(set AccRegs:$dst, (add AccRegs:$src1, (load addr:$src2)))]>; def ADCdp : Group1; + [(set AccRegs:$dst, (add AccRegs:$src1, (load addr:$src2)))]>; def ADCdpindir : Group1$src2", - [(set AccRegs:$dst, (and AccRegs:$src1, i16imm:$src2))]>; + [(set AccRegs:$dst, (and AccRegs:$src1, i16:$src2))]>; def ANDabs : Group1; + [(set AccRegs:$dst, (and AccRegs:$src1, (load addr:$src2)))]>; def ANDabsl : Group1$src2", - [(set AccRegs:$dst, (and AccRegs:$src1, (load ADDRabsl:$src2)))]>; + [(set AccRegs:$dst, (and AccRegs:$src1, (load addr:$src2)))]>; def ANDdp : Group1; + [(set AccRegs:$dst, (and AccRegs:$src1, (load addr:$src2)))]>; def ANDdpindir : Group1$src2", - [(set AccRegs:$dst, (xor AccRegs:$src1, i16imm:$src2))]>; + [(set AccRegs:$dst, (xor AccRegs:$src1, i16:$src2))]>; def EORabs : Group1; + [(set AccRegs:$dst, (xor AccRegs:$src1, (load addr:$src2)))]>; def EORabsl : Group1$src2", - [(set AccRegs:$dst, (xor AccRegs:$src1, (load ADDRabsl:$src2)))]>; + [(set AccRegs:$dst, (xor AccRegs:$src1, (load addr:$src2)))]>; def EORdp : Group1; + [(set AccRegs:$dst, (xor AccRegs:$src1, (load addr:$src2)))]>; def EORdpindir : Group1; def LDAimm : Group1$src1", - [(set AccRegs:$dst, i16imm:$src)]>; + (outs AccRegs:$dst), (ins i16imm:$src), + "LDA #>$src", + [(set AccRegs:$dst, i16:$src)]>; def LDAabs : Group1; + (outs AccRegs:$dst), (ins ADDRabs:$src), + "LDA |$src", + [(set AccRegs:$dst, (load addr:$src))]>; def LDAabsl : Group1$src2", - [(set AccRegs:$dst, (load ADDRabsl:$src2))]>; + (outs AccRegs:$dst), (ins ADDRabsl:$src), + "LDA >$src", + [(set AccRegs:$dst, (load addr:$src))]>; def LDAdp : Group1; + (outs AccRegs:$dst), (ins ADDRdp:$src), + "LDA <$src", + [(set AccRegs:$dst, (load addr:$src))]>; def LDAdpindir : Group1$src2", - [(set AccRegs:$dst, (or AccRegs:$src1, i16imm:$src2))]>; + [(set AccRegs:$dst, (or AccRegs:$src1, i16:$src2))]>; def ORAabs : Group1; + [(set AccRegs:$dst, (or AccRegs:$src1, (load addr:$src2)))]>; def ORAabsl : Group1$src2", - [(set AccRegs:$dst, (or AccRegs:$src1, (load ADDRabsl:$src2)))]>; + [(set AccRegs:$dst, (or AccRegs:$src1, (load addr:$src2)))]>; def ORAdp : Group1; + [(set AccRegs:$dst, (or AccRegs:$src1, (load addr:$src2)))]>; def ORAdpindir : Group1$src2", - [(set AccRegs:$dst, (sub AccRegs:$src1, i16imm:$src2))]>; + [(set AccRegs:$dst, (sub AccRegs:$src1, i16:$src2))]>; def SBCabs : Group1; + [(set AccRegs:$dst, (sub AccRegs:$src1, (load addr:$src2)))]>; def SBCabsl : Group1$src2", - [(set AccRegs:$dst, (sub AccRegs:$src1, (load ADDRabsl:$src2)))]>; + [(set AccRegs:$dst, (sub AccRegs:$src1, (load addr:$src2)))]>; def SBCdp : Group1; + [(set AccRegs:$dst, (sub AccRegs:$src1, (load addr:$src2)))]>; def SBCdpindir : Group1; + [(store AccRegs:$src, addr:$dst)]>; def STAabsl : Group1; + [(set AccRegs:$dst, (shl AccRegs:$src, (i16 1)))]>; def ASLabs : Group2; + []>; + // JSR TODO - [(store (shl (load addr:$dst), (i16 1)), addr:$dst)]>; def ASLdp : Group2; + []>; + // JSR TODO - [(store (shl (load addr:$dst), (i8 1)), addr:$dst)]>; def ASLabsix : Group2; + []>; + // JSR TODO - [(store (sub (load addr:$dst), 1), addr:$dst)]>; def DECdp : Group2; + []>; + // JSR TODO - [(store (sub (load addr:$dst), 1), addr:$dst)]>; def DECabsix : Group2; + []>; + // JSR TODO - [(store (add (load addr:$dst), 1), addr:$dst)]>; def INCdp : Group2; + []>; + // JSR TODO - [(store (add (load addr:$dst), 1), addr:$dst)]>; def INCabsix : Group2; + [(set IndexXRegs:$dst, i16:$src)]>; def LDXabs : Group2; + [(set IndexXRegs:$dst, (load addr:$src))]>; def LDXdp : Group2; + [(set IndexXRegs:$dst, (load addr:$src))]>; def LDXabsiy : Group2; + [(set IndexYRegs:$dst, i16:$src)]>; def LDYabs : Group2_Y; + [(set IndexYRegs:$dst, (load addr:$src))]>; def LDYdp : Group2_Y; + [(set IndexYRegs:$dst, (load addr:$src))]>; def LDYabsix : Group2_Y; + []>; + // JSR TODO - [(store (srl (load addr:$dst), (i8 1)), addr:$dst)]>; def LSRdp : Group2; + []>; + // JSR TODO - [(store (srl (load addr:$dst), (i8 1)), addr:$dst)]>; def LSRabsix : Group2; + []>; + // JSR TODO - [(store (rotl (load addr:$dst), (i8 1)), addr:$dst)]>; def ROLdp : Group2; + []>; + // JSR TODO - [(store (rotl (load addr:$dst), (i8 1)), addr:$dst)]>; def ROLabsix : Group2; + []>; + // JSR TODO - [(store (rotr (load addr:$dst), (i8 1)), addr:$dst)]>; def RORdp : Group2; + []>; + // JSR TODO - [(store (rotr (load addr:$dst), (i8 1)), addr:$dst)]>; def RORabsix : Group2