58 int low_pc = ((
size_t)ic - (size_t)cpu->
cd.
ppc.cur_ic_page)
59 /
sizeof(
struct ppc_instr_call);
64 if ((addr & 0xfff) +
LS_SIZE-1 > 0xfff) {
65 fatal(
"PPC LOAD/STORE misalignment across page boundary: TODO" 66 " (addr=0x%08x, LS_SIZE=%i)\n", (
int)addr,
LS_SIZE);
106 ((
data[0] << 24) + (
data[1] << 16) +
111 (*(uint64_t *)(ic->arg[0])) =
112 ((uint64_t)
data[0] << 56) + ((uint64_t)
data[1] << 48) +
113 ((uint64_t)
data[2] << 40) + ((uint64_t)
data[3] << 32) +
114 ((uint64_t)
data[4] << 24) + (
data[5] << 16) +
124 #ifdef LS_BYTEREVERSE 126 data[1] =
reg(ic->arg[0]) >> 8;
128 data[0] =
reg(ic->arg[0]) >> 8;
133 #ifdef LS_BYTEREVERSE 135 data[1] =
reg(ic->arg[0]) >> 8;
136 data[2] =
reg(ic->arg[0]) >> 16;
137 data[3] =
reg(ic->arg[0]) >> 24;
139 data[0] =
reg(ic->arg[0]) >> 24;
140 data[1] =
reg(ic->arg[0]) >> 16;
141 data[2] =
reg(ic->arg[0]) >> 8;
146 { uint64_t x = *(uint64_t *)(ic->arg[0]);
192 + (int32_t)ic->arg[2]
205 uint32_t new_addr = addr;
231 #ifdef LS_BYTEREVERSE 242 #ifdef LS_BYTEREVERSE 243 ((
page[addr+3] << 24) + (
page[addr+2] << 16) +
252 (
page[addr+2] << 8) +
page[addr+3]);
256 (*(uint64_t *)(ic->arg[0])) =
257 ((uint64_t)
page[addr+0] << 56) +
258 ((uint64_t)
page[addr+1] << 48) +
259 ((uint64_t)
page[addr+2] << 40) +
260 ((uint64_t)
page[addr+3] << 32) +
261 ((uint64_t)
page[addr+4] << 24) + (
page[addr+5] << 16) +
272 #ifdef LS_BYTEREVERSE 274 page[addr+1] =
reg(ic->arg[0]) >> 8;
277 page[addr+1] =
reg(ic->arg[0]);
281 #ifdef LS_BYTEREVERSE 283 page[addr+1] =
reg(ic->arg[0]) >> 8;
284 page[addr+2] =
reg(ic->arg[0]) >> 16;
285 page[addr+3] =
reg(ic->arg[0]) >> 24;
288 page[addr+1] =
reg(ic->arg[0]) >> 16;
289 page[addr+2] =
reg(ic->arg[0]) >> 8;
290 page[addr+3] =
reg(ic->arg[0]);
294 { uint64_t x = *(uint64_t *)(ic->arg[0]);
296 page[addr+1] = x >> 48;
297 page[addr+2] = x >> 40;
298 page[addr+3] = x >> 32;
299 page[addr+4] = x >> 24;
300 page[addr+5] = x >> 16;
301 page[addr+6] = x >> 8;
308 reg(ic->arg[1]) = new_addr;
void fatal(const char *fmt,...)
struct arm_instr_call * ic
int(* memory_rw)(struct cpu *cpu, struct memory *mem, uint64_t vaddr, unsigned char *data, size_t len, int writeflag, int cache_flags)
void LS_N(struct cpu *cpu, struct ppc_instr_call *ic)
void LS_GENERIC_N(struct cpu *cpu, struct ppc_instr_call *ic)
#define PPC_IC_ENTRIES_PER_PAGE
#define PPC_INSTR_ALIGNMENT_SHIFT
addr & if(addr >=0x24 &&page !=NULL)