53 #if defined(A__SIGNED) && !defined(A__H) && !defined(A__L) 56 #if defined(A__SIGNED) && defined(A__H) && !defined(A__L) 68 #if !defined(A__P) && defined(A__W) 75 uint32_t (*reg_func)(
struct cpu *,
struct arm_instr_call *)
76 = (uint32_t (*)(
struct cpu *,
struct arm_instr_call *))
77 (
void *)(
size_t)ic->arg[1];
80 #if defined(A__STRD) || defined(A__LDRD) 81 unsigned char data[8];
82 const int datalen = 8;
85 unsigned char data[1];
86 const int datalen = 1;
89 unsigned char data[2];
90 const int datalen = 2;
92 const int datalen = 4;
93 #ifdef HOST_LITTLE_ENDIAN 94 unsigned char *data = (
unsigned char *) ic->arg[2];
96 unsigned char data[4];
102 uint32_t
addr, low_pc, offset =
112 low_pc = ((size_t)ic - (
size_t)cpu->
cd.
arm.
113 cur_ic_page) /
sizeof(
struct arm_instr_call);
118 addr =
reg(ic->arg[0])
125 #if defined(A__L) || defined(A__LDRD) 132 #if defined(A__B) && !defined(A__LDRD) 139 #if defined(A__H) && !defined(A__LDRD) 144 (data[0] + (data[1] << 8));
147 #ifdef HOST_LITTLE_ENDIAN 150 reg(ic->arg[2]) = data[0] + (data[1] << 8) +
151 (data[2] << 16) + (data[3] << 24);
154 reg(ic->arg[2]) = data[0] + (data[1] << 8) +
155 (data[2] << 16) + (data[3] << 24);
156 reg(((uint32_t *)ic->arg[2]) + 1) = data[4] + (data[5] << 8) +
157 (data[6] << 16) + (data[7] << 24);
163 #if !defined(A__B) && !defined(A__H) && defined(HOST_LITTLE_ENDIAN) 165 *(uint32_t *)data =
reg(ic->arg[2]);
166 *(uint32_t *)(data + 4) =
reg(ic->arg[2] + 4);
169 data[0] =
reg(ic->arg[2]);
171 data[1] =
reg(ic->arg[2]) >> 8;
172 #if !defined(A__H) || defined(A__STRD) 173 data[1] =
reg(ic->arg[2]) >> 8;
174 data[2] =
reg(ic->arg[2]) >> 16;
175 data[3] =
reg(ic->arg[2]) >> 24;
177 data[4] =
reg(ic->arg[2] + 4);
178 data[5] =
reg(ic->arg[2] + 4) >> 8;
179 data[6] =
reg(ic->arg[2] + 4) >> 16;
180 data[7] =
reg(ic->arg[2] + 4) >> 24;
197 reg(ic->arg[0]) = addr + offset;
207 #if defined(A__LDRD) || defined(A__STRD) 212 uint32_t (*reg_func)(
struct cpu *,
struct arm_instr_call *)
213 = (uint32_t (*)(
struct cpu *,
struct arm_instr_call *))
214 (
void *)(
size_t)ic->arg[1];
225 uint32_t
addr =
reg(ic->arg[0])
239 #if !defined(A__P) && defined(A__W) 246 if (!(x & (1 << ((addr >> 12) & 31))))
268 (page[addr & 0xfff] + (page[(addr & 0xfff) + 1] << 8));
270 #ifdef HOST_LITTLE_ENDIAN 271 reg(ic->arg[2]) = *(uint32_t *)(page + (addr & 0xffc));
273 reg(ic->arg[2]) = page[addr & 0xfff] +
274 (page[(addr & 0xfff) + 1] << 8) +
275 (page[(addr & 0xfff) + 2] << 16) +
276 (page[(addr & 0xfff) + 3] << 24);
282 page[addr & 0xfff] =
reg(ic->arg[2]);
285 page[addr & 0xfff] =
reg(ic->arg[2]);
286 page[(addr & 0xfff)+1] =
reg(ic->arg[2]) >> 8;
288 #ifdef HOST_LITTLE_ENDIAN 289 *(uint32_t *)(page + (addr & 0xffc)) =
reg(ic->arg[2]);
291 page[addr & 0xfff] =
reg(ic->arg[2]);
292 page[(addr & 0xfff)+1] =
reg(ic->arg[2]) >> 8;
293 page[(addr & 0xfff)+2] =
reg(ic->arg[2]) >> 16;
294 page[(addr & 0xfff)+3] =
reg(ic->arg[2]) >> 24;
307 reg(ic->arg[0]) = addr + offset;
336 uint32_t low_pc, tmp;
337 low_pc = ((size_t)ic - (
size_t) cpu->
cd.
arm.cur_ic_page) /
338 sizeof(
struct arm_instr_call);
353 uint32_t low_pc, tmp;
355 low_pc = ((size_t)ic - (
size_t) cpu->
cd.
arm.cur_ic_page) /
356 sizeof(
struct arm_instr_call);
366 #ifndef A__NOCONDITIONS void A__NAME_PC__ge(struct cpu *cpu, struct arm_instr_call *ic)
void A__NAME__cs(struct cpu *cpu, struct arm_instr_call *ic)
void A__NAME_PC__vc(struct cpu *cpu, struct arm_instr_call *ic)
void A__NAME(struct cpu *cpu, struct arm_instr_call *ic)
void A__NAME__general(struct cpu *cpu, struct arm_instr_call *ic)
struct arm_instr_call * ic
void A__NAME__pl(struct cpu *cpu, struct arm_instr_call *ic)
void A__NAME_PC__mi(struct cpu *cpu, struct arm_instr_call *ic)
void A__NAME__eq(struct cpu *cpu, struct arm_instr_call *ic)
void A__NAME_PC__cc(struct cpu *cpu, struct arm_instr_call *ic)
void A__NAME__cc(struct cpu *cpu, struct arm_instr_call *ic)
uint32_t is_userpage[N_VPH32_ENTRIES/32]
#define ARM_IC_ENTRIES_PER_PAGE
void A__NAME_PC__ne(struct cpu *cpu, struct arm_instr_call *ic)
void A__NAME_PC__hi(struct cpu *cpu, struct arm_instr_call *ic)
#define quick_pc_to_pointers(cpu)
#define ARM_INSTR_ALIGNMENT_SHIFT
void A__NAME_PC__ls(struct cpu *cpu, 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 A__NAME_PC__le(struct cpu *cpu, struct arm_instr_call *ic)
void A__NAME_PC__eq(struct cpu *cpu, struct arm_instr_call *ic)
void A__NAME__vc(struct cpu *cpu, struct arm_instr_call *ic)
void A__NAME__ne(struct cpu *cpu, struct arm_instr_call *ic)
void A__NAME__lt(struct cpu *cpu, struct arm_instr_call *ic)
void A__NAME_PC__pl(struct cpu *cpu, struct arm_instr_call *ic)
void A__NAME_PC__gt(struct cpu *cpu, struct arm_instr_call *ic)
void A__NAME__ls(struct cpu *cpu, struct arm_instr_call *ic)
void cpu_functioncall_trace(struct cpu *cpu, uint64_t f)
void A__NAME_PC__vs(struct cpu *cpu, struct arm_instr_call *ic)
#define MEMORY_USER_ACCESS
void A__NAME__gt(struct cpu *cpu, struct arm_instr_call *ic)
void A__NAME__ge(struct cpu *cpu, struct arm_instr_call *ic)
void A__NAME__vs(struct cpu *cpu, struct arm_instr_call *ic)
void A__NAME__le(struct cpu *cpu, struct arm_instr_call *ic)
void A__NAME__hi(struct cpu *cpu, struct arm_instr_call *ic)
void A__NAME_PC__lt(struct cpu *cpu, struct arm_instr_call *ic)
void A__NAME_PC(struct cpu *cpu, struct arm_instr_call *ic)
void A__NAME__mi(struct cpu *cpu, struct arm_instr_call *ic)
void A__NAME_PC__cs(struct cpu *cpu, struct arm_instr_call *ic)