MCPcopy Create free account
hub / github.com/BlitterStudio/amiberry / PPCDisasm

Function PPCDisasm

src/ppc/ppcd.cpp:1101–1780  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1099// ---------------------------------------------------------------------------
1100
1101void PPCDisasm(PPCD_CB *discb)
1102{
1103 // Save parameters in local variables for static calls
1104 o = discb;
1105 if(o == NULL) return;
1106
1107 // Detect endianness order.
1108 if(bigendian == -1)
1109 {
1110 u8 test_value[2] = { 0xAA, 0xBB };
1111 u16 *value = (u16 *)test_value;
1112 if(*value == 0xAABB) bigendian = 1;
1113 else bigendian = 0;
1114 }
1115
1116 // Reset output parameters
1117 o->iclass = PPC_DISA_OTHER;
1118 o->r[0] = o->r[1] = o->r[2] = o->r[3] = 0;
1119 o->immed = 0;
1120 o->target = 0;
1121 o->mnemonic[0] = o->operands[0] = '\0';
1122
1123 // Lets go!
1124
1125 /*
1126 * Main table
1127 */
1128
1129 switch(Instr >> 26 /* Main opcode, base 8 */) {
1130#ifdef POWERPC_64
1131 case 002: trap(1, 1); break; // tdi
1132#endif
1133 case 003: trap(0, 1); break; // twi
1134 case 007: integer("mulli", 'D', DAB_D|DAB_A); break; // mulli
1135 case 010: integer("subfic", 'D', DAB_D|DAB_A); break; // subfic
1136 case 012: cmp("l", "i"); break; // cmpli
1137 case 013: cmp("", "i"); break; // cmpi
1138 case 014: addi("c"); break; // addic
1139 case 015: addi("c."); break; // addic.
1140 case 016: addi(""); break; // addi
1141 case 017: addi("s"); break; // addis
1142 case 020: bcx(1, 0); break; // bcx
1143 case 021: put("sc", 0x03ffffff, 2); break; // sc
1144 case 022: bx(); break; // bx
1145 case 024: rlw("imi", 0, 1); break; // rlwimix
1146 case 025: rlw("inm", 0); break; // rlwinmx
1147 case 027: rlw("nm", 1); break; // rlwnmx
1148 case 030: // ori
1149#ifdef SIMPLIFIED
1150 if(Instr == 0x60000000) put("nop", 0, 0, PPC_DISA_INTEGER | PPC_DISA_SIMPLIFIED);
1151 else
1152#endif
1153 integer("ori", 'S', ASB_A|ASB_S, 1, 0); break;
1154 case 031: integer("oris", 'S', ASB_A|ASB_S, 1, 0); break; // oris
1155 case 032: integer("xori", 'S', ASB_A|ASB_S, 1, 0); break; // xori
1156 case 033: integer("xoris", 'S', ASB_A|ASB_S, 1, 0); break; // xoris
1157 case 034: integer("andi.", 'S', ASB_A|ASB_S, 1, 0); break; // andi.
1158 case 035: integer("andis.", 'S', ASB_A|ASB_S, 1, 0); break; // andis.

Callers 2

ppc_disasmFunction · 0.85
PPCDisasmSimpleFunction · 0.85

Calls 15

integerFunction · 0.85
cmpFunction · 0.85
addiFunction · 0.85
bcxFunction · 0.85
putFunction · 0.85
bxFunction · 0.85
rlwFunction · 0.85
ldstFunction · 0.85
mcrfFunction · 0.85
cropFunction · 0.85
illFunction · 0.85
rldFunction · 0.85

Tested by

no test coverage detected