- const char* Arg;
-
- /* Get next entry and it's input register values */
- CodeEntry* E = CS_GetEntry (S, I);
- const RegContents* In = &E->RI->In;
-
- /* Assume we have no replacement */
- CodeEntry* X = 0;
-
- /* Check the instruction */
- switch (E->OPC) {
-
- case OP65_DEA:
- if (RegValIsKnown (In->RegA)) {
- Arg = MakeHexArg ((In->RegA - 1) & 0xFF);
- X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, E->LI);
- }
- break;
-
- case OP65_DEX:
- if (RegValIsKnown (In->RegX)) {
- Arg = MakeHexArg ((In->RegX - 1) & 0xFF);
- X = NewCodeEntry (OP65_LDX, AM65_IMM, Arg, 0, E->LI);
- }
- break;
-
- case OP65_DEY:
- if (RegValIsKnown (In->RegY)) {
- Arg = MakeHexArg ((In->RegY - 1) & 0xFF);
- X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI);
- }
- break;
-
- case OP65_INA:
- if (RegValIsKnown (In->RegA)) {
- Arg = MakeHexArg ((In->RegA + 1) & 0xFF);
- X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, E->LI);
- }
- break;
-
- case OP65_INX:
- if (RegValIsKnown (In->RegX)) {
- Arg = MakeHexArg ((In->RegX + 1) & 0xFF);
- X = NewCodeEntry (OP65_LDX, AM65_IMM, Arg, 0, E->LI);
- }
- break;
-
- case OP65_INY:
- if (RegValIsKnown (In->RegY)) {
- Arg = MakeHexArg ((In->RegY + 1) & 0xFF);
- X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI);
- }
- break;
-
- case OP65_LDA:
- if (E->AM == AM65_ZP) {
- switch (GetKnownReg (E->Use & REG_ZP, In)) {
- case REG_TMP1:
- Arg = MakeHexArg (In->Tmp1);
- X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, E->LI);
- break;
-
- case REG_PTR1_LO:
- Arg = MakeHexArg (In->Ptr1Lo);
- X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, E->LI);
- break;
-
- case REG_PTR1_HI:
- Arg = MakeHexArg (In->Ptr1Hi);
- X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, E->LI);
- break;
-
- case REG_SREG_LO:
- Arg = MakeHexArg (In->SRegLo);
- X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, E->LI);
- break;
-
- case REG_SREG_HI:
- Arg = MakeHexArg (In->SRegHi);
- X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, E->LI);
- break;
- }
- }
- break;
-
- case OP65_LDX:
- if (E->AM == AM65_ZP) {
- switch (GetKnownReg (E->Use & REG_ZP, In)) {
- case REG_TMP1:
- Arg = MakeHexArg (In->Tmp1);
- X = NewCodeEntry (OP65_LDX, AM65_IMM, Arg, 0, E->LI);
- break;
-
- case REG_PTR1_LO:
- Arg = MakeHexArg (In->Ptr1Lo);
- X = NewCodeEntry (OP65_LDX, AM65_IMM, Arg, 0, E->LI);
- break;
-
- case REG_PTR1_HI:
- Arg = MakeHexArg (In->Ptr1Hi);
- X = NewCodeEntry (OP65_LDX, AM65_IMM, Arg, 0, E->LI);
- break;
-
- case REG_SREG_LO:
- Arg = MakeHexArg (In->SRegLo);
- X = NewCodeEntry (OP65_LDX, AM65_IMM, Arg, 0, E->LI);
- break;
-
- case REG_SREG_HI:
- Arg = MakeHexArg (In->SRegHi);
- X = NewCodeEntry (OP65_LDX, AM65_IMM, Arg, 0, E->LI);
- break;
- }
- }
- break;
-
- case OP65_LDY:
- if (E->AM == AM65_ZP) {
- switch (GetKnownReg (E->Use, In)) {
- case REG_TMP1:
- Arg = MakeHexArg (In->Tmp1);
- X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI);
- break;
-
- case REG_PTR1_LO:
- Arg = MakeHexArg (In->Ptr1Lo);
- X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI);
- break;
-
- case REG_PTR1_HI:
- Arg = MakeHexArg (In->Ptr1Hi);
- X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI);
- break;
-
- case REG_SREG_LO:
- Arg = MakeHexArg (In->SRegLo);
- X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI);
- break;
-
- case REG_SREG_HI:
- Arg = MakeHexArg (In->SRegHi);
- X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI);
- break;
- }
- }
- break;
-
- case OP65_TAX:
- if (E->RI->In.RegA >= 0) {
- Arg = MakeHexArg (In->RegA);
- X = NewCodeEntry (OP65_LDX, AM65_IMM, Arg, 0, E->LI);
- }
- break;
-
- case OP65_TAY:
- if (E->RI->In.RegA >= 0) {
- Arg = MakeHexArg (In->RegA);
- X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI);
- }
- break;
-
- case OP65_TXA:
- if (E->RI->In.RegX >= 0) {
- Arg = MakeHexArg (In->RegX);
- X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, E->LI);
- }
- break;
-
- case OP65_TYA:
- if (E->RI->In.RegY >= 0) {
- Arg = MakeHexArg (In->RegY);
- X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, E->LI);
- }
- break;
-
- default:
- /* Avoid gcc warnings */
- break;
-
- }
-
- /* Insert the replacement if we have one */
- if (X) {
- CS_InsertEntry (S, X, I+1);
- CS_DelEntry (S, I);
- ++Changes;
- }
-
- /* Next entry */
- ++I;
+ const char* Arg;
+
+ /* Get next entry and it's input register values */
+ CodeEntry* E = CS_GetEntry (S, I);
+ const RegContents* In = &E->RI->In;
+
+ /* Assume we have no replacement */
+ CodeEntry* X = 0;
+
+ /* Check the instruction */
+ switch (E->OPC) {
+
+ case OP65_DEA:
+ if (RegValIsKnown (In->RegA)) {
+ Arg = MakeHexArg ((In->RegA - 1) & 0xFF);
+ X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, E->LI);
+ }
+ break;
+
+ case OP65_DEX:
+ if (RegValIsKnown (In->RegX)) {
+ Arg = MakeHexArg ((In->RegX - 1) & 0xFF);
+ X = NewCodeEntry (OP65_LDX, AM65_IMM, Arg, 0, E->LI);
+ }
+ break;
+
+ case OP65_DEY:
+ if (RegValIsKnown (In->RegY)) {
+ Arg = MakeHexArg ((In->RegY - 1) & 0xFF);
+ X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI);
+ }
+ break;
+
+ case OP65_INA:
+ if (RegValIsKnown (In->RegA)) {
+ Arg = MakeHexArg ((In->RegA + 1) & 0xFF);
+ X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, E->LI);
+ }
+ break;
+
+ case OP65_INX:
+ if (RegValIsKnown (In->RegX)) {
+ Arg = MakeHexArg ((In->RegX + 1) & 0xFF);
+ X = NewCodeEntry (OP65_LDX, AM65_IMM, Arg, 0, E->LI);
+ }
+ break;
+
+ case OP65_INY:
+ if (RegValIsKnown (In->RegY)) {
+ Arg = MakeHexArg ((In->RegY + 1) & 0xFF);
+ X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI);
+ }
+ break;
+
+ case OP65_LDA:
+ if (E->AM == AM65_ZP) {
+ switch (GetKnownReg (E->Use & REG_ZP, In)) {
+ case REG_TMP1:
+ Arg = MakeHexArg (In->Tmp1);
+ X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, E->LI);
+ break;
+
+ case REG_PTR1_LO:
+ Arg = MakeHexArg (In->Ptr1Lo);
+ X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, E->LI);
+ break;
+
+ case REG_PTR1_HI:
+ Arg = MakeHexArg (In->Ptr1Hi);
+ X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, E->LI);
+ break;
+
+ case REG_SREG_LO:
+ Arg = MakeHexArg (In->SRegLo);
+ X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, E->LI);
+ break;
+
+ case REG_SREG_HI:
+ Arg = MakeHexArg (In->SRegHi);
+ X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, E->LI);
+ break;
+ }
+ }
+ break;
+
+ case OP65_LDX:
+ if (E->AM == AM65_ZP) {
+ switch (GetKnownReg (E->Use & REG_ZP, In)) {
+ case REG_TMP1:
+ Arg = MakeHexArg (In->Tmp1);
+ X = NewCodeEntry (OP65_LDX, AM65_IMM, Arg, 0, E->LI);
+ break;
+
+ case REG_PTR1_LO:
+ Arg = MakeHexArg (In->Ptr1Lo);
+ X = NewCodeEntry (OP65_LDX, AM65_IMM, Arg, 0, E->LI);
+ break;
+
+ case REG_PTR1_HI:
+ Arg = MakeHexArg (In->Ptr1Hi);
+ X = NewCodeEntry (OP65_LDX, AM65_IMM, Arg, 0, E->LI);
+ break;
+
+ case REG_SREG_LO:
+ Arg = MakeHexArg (In->SRegLo);
+ X = NewCodeEntry (OP65_LDX, AM65_IMM, Arg, 0, E->LI);
+ break;
+
+ case REG_SREG_HI:
+ Arg = MakeHexArg (In->SRegHi);
+ X = NewCodeEntry (OP65_LDX, AM65_IMM, Arg, 0, E->LI);
+ break;
+ }
+ }
+ break;
+
+ case OP65_LDY:
+ if (E->AM == AM65_ZP) {
+ switch (GetKnownReg (E->Use, In)) {
+ case REG_TMP1:
+ Arg = MakeHexArg (In->Tmp1);
+ X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI);
+ break;
+
+ case REG_PTR1_LO:
+ Arg = MakeHexArg (In->Ptr1Lo);
+ X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI);
+ break;
+
+ case REG_PTR1_HI:
+ Arg = MakeHexArg (In->Ptr1Hi);
+ X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI);
+ break;
+
+ case REG_SREG_LO:
+ Arg = MakeHexArg (In->SRegLo);
+ X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI);
+ break;
+
+ case REG_SREG_HI:
+ Arg = MakeHexArg (In->SRegHi);
+ X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI);
+ break;
+ }
+ }
+ break;
+
+ case OP65_TAX:
+ if (E->RI->In.RegA >= 0) {
+ Arg = MakeHexArg (In->RegA);
+ X = NewCodeEntry (OP65_LDX, AM65_IMM, Arg, 0, E->LI);
+ }
+ break;
+
+ case OP65_TAY:
+ if (E->RI->In.RegA >= 0) {
+ Arg = MakeHexArg (In->RegA);
+ X = NewCodeEntry (OP65_LDY, AM65_IMM, Arg, 0, E->LI);
+ }
+ break;
+
+ case OP65_TXA:
+ if (E->RI->In.RegX >= 0) {
+ Arg = MakeHexArg (In->RegX);
+ X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, E->LI);
+ }
+ break;
+
+ case OP65_TYA:
+ if (E->RI->In.RegY >= 0) {
+ Arg = MakeHexArg (In->RegY);
+ X = NewCodeEntry (OP65_LDA, AM65_IMM, Arg, 0, E->LI);
+ }
+ break;
+
+ default:
+ /* Avoid gcc warnings */
+ break;
+
+ }
+
+ /* Insert the replacement if we have one */
+ if (X) {
+ CS_InsertEntry (S, X, I+1);
+ CS_DelEntry (S, I);
+ ++Changes;
+ }
+
+ /* Next entry */
+ ++I;