1 |
/* |
/* |
2 |
* Copyright (C) 2005 Anders Gavare. All rights reserved. |
* Copyright (C) 2005-2006 Anders Gavare. All rights reserved. |
3 |
* |
* |
4 |
* Redistribution and use in source and binary forms, with or without |
* Redistribution and use in source and binary forms, with or without |
5 |
* modification, are permitted provided that the following conditions are met: |
* modification, are permitted provided that the following conditions are met: |
25 |
* SUCH DAMAGE. |
* SUCH DAMAGE. |
26 |
* |
* |
27 |
* |
* |
28 |
* $Id: cpu_arm_instr_loadstore.c,v 1.15 2005/10/27 14:01:13 debug Exp $ |
* $Id: cpu_arm_instr_loadstore.c,v 1.20 2006/02/16 19:49:04 debug Exp $ |
29 |
* |
* |
30 |
* |
* |
31 |
* TODO: Many things... |
* TODO: Many things... |
53 |
*/ |
*/ |
54 |
|
|
55 |
|
|
56 |
|
#if defined(A__SIGNED) && !defined(A__H) && !defined(A__L) |
57 |
|
#define A__LDRD |
58 |
|
#endif |
59 |
#if defined(A__SIGNED) && defined(A__H) && !defined(A__L) |
#if defined(A__SIGNED) && defined(A__H) && !defined(A__L) |
60 |
#define A__STRD |
#define A__STRD |
61 |
#endif |
#endif |
79 |
= (void *)(size_t)ic->arg[1]; |
= (void *)(size_t)ic->arg[1]; |
80 |
#endif |
#endif |
81 |
|
|
82 |
#ifdef A__STRD |
#if defined(A__STRD) || defined(A__LDRD) |
83 |
unsigned char data[8]; |
unsigned char data[8]; |
84 |
const int datalen = 8; |
const int datalen = 8; |
85 |
#else |
#else |
113 |
|
|
114 |
low_pc = ((size_t)ic - (size_t)cpu->cd.arm. |
low_pc = ((size_t)ic - (size_t)cpu->cd.arm. |
115 |
cur_ic_page) / sizeof(struct arm_instr_call); |
cur_ic_page) / sizeof(struct arm_instr_call); |
116 |
cpu->cd.arm.r[ARM_PC] &= ~((ARM_IC_ENTRIES_PER_PAGE-1) |
cpu->pc &= ~((ARM_IC_ENTRIES_PER_PAGE-1) |
117 |
<< ARM_INSTR_ALIGNMENT_SHIFT); |
<< ARM_INSTR_ALIGNMENT_SHIFT); |
118 |
cpu->cd.arm.r[ARM_PC] += (low_pc << ARM_INSTR_ALIGNMENT_SHIFT); |
cpu->pc += (low_pc << ARM_INSTR_ALIGNMENT_SHIFT); |
|
cpu->pc = cpu->cd.arm.r[ARM_PC]; |
|
119 |
|
|
120 |
addr = reg(ic->arg[0]) |
addr = reg(ic->arg[0]) |
121 |
#ifdef A__P |
#ifdef A__P |
123 |
#endif |
#endif |
124 |
; |
; |
125 |
|
|
126 |
#ifdef A__L |
|
127 |
|
#if defined(A__L) || defined(A__LDRD) |
128 |
/* Load: */ |
/* Load: */ |
129 |
if (!cpu->memory_rw(cpu, cpu->mem, addr, data, datalen, |
if (!cpu->memory_rw(cpu, cpu->mem, addr, data, datalen, |
130 |
MEM_READ, memory_rw_flags)) { |
MEM_READ, memory_rw_flags)) { |
131 |
/* load failed, an exception was generated */ |
/* load failed, an exception was generated */ |
132 |
return; |
return; |
133 |
} |
} |
134 |
#ifdef A__B |
#if defined(A__B) && !defined(A__LDRD) |
135 |
reg(ic->arg[2]) = |
reg(ic->arg[2]) = |
136 |
#ifdef A__SIGNED |
#ifdef A__SIGNED |
137 |
(int32_t)(int8_t) |
(int32_t)(int8_t) |
138 |
#endif |
#endif |
139 |
data[0]; |
data[0]; |
140 |
#else |
#else |
141 |
#ifdef A__H |
#if defined(A__H) && !defined(A__LDRD) |
142 |
reg(ic->arg[2]) = |
reg(ic->arg[2]) = |
143 |
#ifdef A__SIGNED |
#ifdef A__SIGNED |
144 |
(int32_t)(int16_t) |
(int32_t)(int16_t) |
145 |
#endif |
#endif |
146 |
(data[0] + (data[1] << 8)); |
(data[0] + (data[1] << 8)); |
147 |
#else |
#else |
148 |
|
#ifndef A__LDRD |
149 |
#ifdef HOST_LITTLE_ENDIAN |
#ifdef HOST_LITTLE_ENDIAN |
150 |
/* Nothing. */ |
/* Nothing. */ |
151 |
#else |
#else |
152 |
reg(ic->arg[2]) = data[0] + (data[1] << 8) + |
reg(ic->arg[2]) = data[0] + (data[1] << 8) + |
153 |
(data[2] << 16) + (data[3] << 24); |
(data[2] << 16) + (data[3] << 24); |
154 |
#endif |
#endif |
155 |
|
#else |
156 |
|
reg(ic->arg[2]) = data[0] + (data[1] << 8) + |
157 |
|
(data[2] << 16) + (data[3] << 24); |
158 |
|
reg(((uint32_t *)ic->arg[2]) + 1) = data[4] + (data[5] << 8) + |
159 |
|
(data[6] << 16) + (data[7] << 24); |
160 |
|
#endif |
161 |
#endif |
#endif |
162 |
#endif |
#endif |
163 |
#else |
#else |
206 |
*/ |
*/ |
207 |
void A__NAME(struct cpu *cpu, struct arm_instr_call *ic) |
void A__NAME(struct cpu *cpu, struct arm_instr_call *ic) |
208 |
{ |
{ |
209 |
#ifdef A__STRD |
#if defined(A__LDRD) || defined(A__STRD) |
210 |
/* Chicken out, let's do this unoptimized for now: */ |
/* Chicken out, let's do this unoptimized for now: */ |
211 |
A__NAME__general(cpu, ic); |
A__NAME__general(cpu, ic); |
212 |
#else |
#else |
243 |
* is_userpage array. If it is set, then we're ok. Otherwise: use the |
* is_userpage array. If it is set, then we're ok. Otherwise: use the |
244 |
* generic function. |
* generic function. |
245 |
*/ |
*/ |
246 |
unsigned char x = cpu->cd.arm.is_userpage[addr >> 15]; |
uint32_t x = cpu->cd.arm.is_userpage[addr >> 17]; |
247 |
if (!(x & (1 << ((addr >> 12) & 7)))) |
if (!(x & (1 << ((addr >> 12) & 31)))) |
248 |
A__NAME__general(cpu, ic); |
A__NAME__general(cpu, ic); |
249 |
else |
else |
250 |
#endif |
#endif |
337 |
uint32_t low_pc, tmp; |
uint32_t low_pc, tmp; |
338 |
low_pc = ((size_t)ic - (size_t) cpu->cd.arm.cur_ic_page) / |
low_pc = ((size_t)ic - (size_t) cpu->cd.arm.cur_ic_page) / |
339 |
sizeof(struct arm_instr_call); |
sizeof(struct arm_instr_call); |
340 |
tmp = cpu->cd.arm.r[ARM_PC] & ~((ARM_IC_ENTRIES_PER_PAGE-1) << |
tmp = cpu->pc & ~((ARM_IC_ENTRIES_PER_PAGE-1) << |
341 |
ARM_INSTR_ALIGNMENT_SHIFT); |
ARM_INSTR_ALIGNMENT_SHIFT); |
342 |
tmp += (low_pc << ARM_INSTR_ALIGNMENT_SHIFT); |
tmp += (low_pc << ARM_INSTR_ALIGNMENT_SHIFT); |
343 |
cpu->cd.arm.tmp_pc = tmp + 8; |
cpu->cd.arm.tmp_pc = tmp + 8; |
345 |
A__NAME(cpu, ic); |
A__NAME(cpu, ic); |
346 |
if (ic->arg[2] == (size_t)(&cpu->cd.arm.r[ARM_PC])) { |
if (ic->arg[2] == (size_t)(&cpu->cd.arm.r[ARM_PC])) { |
347 |
cpu->pc = cpu->cd.arm.r[ARM_PC]; |
cpu->pc = cpu->cd.arm.r[ARM_PC]; |
348 |
|
quick_pc_to_pointers(cpu); |
349 |
if (cpu->machine->show_trace_tree) |
if (cpu->machine->show_trace_tree) |
350 |
cpu_functioncall_trace(cpu, cpu->pc); |
cpu_functioncall_trace(cpu, cpu->pc); |
|
quick_pc_to_pointers(cpu); |
|
351 |
} |
} |
352 |
#else |
#else |
353 |
/* Store: */ |
/* Store: */ |
355 |
/* Calculate tmp from this instruction's PC + 12 */ |
/* Calculate tmp from this instruction's PC + 12 */ |
356 |
low_pc = ((size_t)ic - (size_t) cpu->cd.arm.cur_ic_page) / |
low_pc = ((size_t)ic - (size_t) cpu->cd.arm.cur_ic_page) / |
357 |
sizeof(struct arm_instr_call); |
sizeof(struct arm_instr_call); |
358 |
tmp = cpu->cd.arm.r[ARM_PC] & ~((ARM_IC_ENTRIES_PER_PAGE-1) << |
tmp = cpu->pc & ~((ARM_IC_ENTRIES_PER_PAGE-1) << |
359 |
ARM_INSTR_ALIGNMENT_SHIFT); |
ARM_INSTR_ALIGNMENT_SHIFT); |
360 |
tmp += (low_pc << ARM_INSTR_ALIGNMENT_SHIFT); |
tmp += (low_pc << ARM_INSTR_ALIGNMENT_SHIFT); |
361 |
cpu->cd.arm.tmp_pc = tmp + 12; |
cpu->cd.arm.tmp_pc = tmp + 12; |
367 |
#ifndef A__NOCONDITIONS |
#ifndef A__NOCONDITIONS |
368 |
/* Load/stores with all registers except the PC register: */ |
/* Load/stores with all registers except the PC register: */ |
369 |
void A__NAME__eq(struct cpu *cpu, struct arm_instr_call *ic) |
void A__NAME__eq(struct cpu *cpu, struct arm_instr_call *ic) |
370 |
{ if (cpu->cd.arm.cpsr & ARM_FLAG_Z) A__NAME(cpu, ic); } |
{ if (cpu->cd.arm.flags & ARM_F_Z) A__NAME(cpu, ic); } |
371 |
void A__NAME__ne(struct cpu *cpu, struct arm_instr_call *ic) |
void A__NAME__ne(struct cpu *cpu, struct arm_instr_call *ic) |
372 |
{ if (!(cpu->cd.arm.cpsr & ARM_FLAG_Z)) A__NAME(cpu, ic); } |
{ if (!(cpu->cd.arm.flags & ARM_F_Z)) A__NAME(cpu, ic); } |
373 |
void A__NAME__cs(struct cpu *cpu, struct arm_instr_call *ic) |
void A__NAME__cs(struct cpu *cpu, struct arm_instr_call *ic) |
374 |
{ if (cpu->cd.arm.cpsr & ARM_FLAG_C) A__NAME(cpu, ic); } |
{ if (cpu->cd.arm.flags & ARM_F_C) A__NAME(cpu, ic); } |
375 |
void A__NAME__cc(struct cpu *cpu, struct arm_instr_call *ic) |
void A__NAME__cc(struct cpu *cpu, struct arm_instr_call *ic) |
376 |
{ if (!(cpu->cd.arm.cpsr & ARM_FLAG_C)) A__NAME(cpu, ic); } |
{ if (!(cpu->cd.arm.flags & ARM_F_C)) A__NAME(cpu, ic); } |
377 |
void A__NAME__mi(struct cpu *cpu, struct arm_instr_call *ic) |
void A__NAME__mi(struct cpu *cpu, struct arm_instr_call *ic) |
378 |
{ if (cpu->cd.arm.cpsr & ARM_FLAG_N) A__NAME(cpu, ic); } |
{ if (cpu->cd.arm.flags & ARM_F_N) A__NAME(cpu, ic); } |
379 |
void A__NAME__pl(struct cpu *cpu, struct arm_instr_call *ic) |
void A__NAME__pl(struct cpu *cpu, struct arm_instr_call *ic) |
380 |
{ if (!(cpu->cd.arm.cpsr & ARM_FLAG_N)) A__NAME(cpu, ic); } |
{ if (!(cpu->cd.arm.flags & ARM_F_N)) A__NAME(cpu, ic); } |
381 |
void A__NAME__vs(struct cpu *cpu, struct arm_instr_call *ic) |
void A__NAME__vs(struct cpu *cpu, struct arm_instr_call *ic) |
382 |
{ if (cpu->cd.arm.cpsr & ARM_FLAG_V) A__NAME(cpu, ic); } |
{ if (cpu->cd.arm.flags & ARM_F_V) A__NAME(cpu, ic); } |
383 |
void A__NAME__vc(struct cpu *cpu, struct arm_instr_call *ic) |
void A__NAME__vc(struct cpu *cpu, struct arm_instr_call *ic) |
384 |
{ if (!(cpu->cd.arm.cpsr & ARM_FLAG_V)) A__NAME(cpu, ic); } |
{ if (!(cpu->cd.arm.flags & ARM_F_V)) A__NAME(cpu, ic); } |
385 |
|
|
386 |
void A__NAME__hi(struct cpu *cpu, struct arm_instr_call *ic) |
void A__NAME__hi(struct cpu *cpu, struct arm_instr_call *ic) |
387 |
{ if (cpu->cd.arm.cpsr & ARM_FLAG_C && |
{ if (cpu->cd.arm.flags & ARM_F_C && |
388 |
!(cpu->cd.arm.cpsr & ARM_FLAG_Z)) A__NAME(cpu, ic); } |
!(cpu->cd.arm.flags & ARM_F_Z)) A__NAME(cpu, ic); } |
389 |
void A__NAME__ls(struct cpu *cpu, struct arm_instr_call *ic) |
void A__NAME__ls(struct cpu *cpu, struct arm_instr_call *ic) |
390 |
{ if (cpu->cd.arm.cpsr & ARM_FLAG_Z || |
{ if (cpu->cd.arm.flags & ARM_F_Z || |
391 |
!(cpu->cd.arm.cpsr & ARM_FLAG_C)) A__NAME(cpu, ic); } |
!(cpu->cd.arm.flags & ARM_F_C)) A__NAME(cpu, ic); } |
392 |
void A__NAME__ge(struct cpu *cpu, struct arm_instr_call *ic) |
void A__NAME__ge(struct cpu *cpu, struct arm_instr_call *ic) |
393 |
{ if (((cpu->cd.arm.cpsr & ARM_FLAG_N)?1:0) == |
{ if (((cpu->cd.arm.flags & ARM_F_N)?1:0) == |
394 |
((cpu->cd.arm.cpsr & ARM_FLAG_V)?1:0)) A__NAME(cpu, ic); } |
((cpu->cd.arm.flags & ARM_F_V)?1:0)) A__NAME(cpu, ic); } |
395 |
void A__NAME__lt(struct cpu *cpu, struct arm_instr_call *ic) |
void A__NAME__lt(struct cpu *cpu, struct arm_instr_call *ic) |
396 |
{ if (((cpu->cd.arm.cpsr & ARM_FLAG_N)?1:0) != |
{ if (((cpu->cd.arm.flags & ARM_F_N)?1:0) != |
397 |
((cpu->cd.arm.cpsr & ARM_FLAG_V)?1:0)) A__NAME(cpu, ic); } |
((cpu->cd.arm.flags & ARM_F_V)?1:0)) A__NAME(cpu, ic); } |
398 |
void A__NAME__gt(struct cpu *cpu, struct arm_instr_call *ic) |
void A__NAME__gt(struct cpu *cpu, struct arm_instr_call *ic) |
399 |
{ if (((cpu->cd.arm.cpsr & ARM_FLAG_N)?1:0) == |
{ if (((cpu->cd.arm.flags & ARM_F_N)?1:0) == |
400 |
((cpu->cd.arm.cpsr & ARM_FLAG_V)?1:0) && |
((cpu->cd.arm.flags & ARM_F_V)?1:0) && |
401 |
!(cpu->cd.arm.cpsr & ARM_FLAG_Z)) A__NAME(cpu, ic); } |
!(cpu->cd.arm.flags & ARM_F_Z)) A__NAME(cpu, ic); } |
402 |
void A__NAME__le(struct cpu *cpu, struct arm_instr_call *ic) |
void A__NAME__le(struct cpu *cpu, struct arm_instr_call *ic) |
403 |
{ if (((cpu->cd.arm.cpsr & ARM_FLAG_N)?1:0) != |
{ if (((cpu->cd.arm.flags & ARM_F_N)?1:0) != |
404 |
((cpu->cd.arm.cpsr & ARM_FLAG_V)?1:0) || |
((cpu->cd.arm.flags & ARM_F_V)?1:0) || |
405 |
(cpu->cd.arm.cpsr & ARM_FLAG_Z)) A__NAME(cpu, ic); } |
(cpu->cd.arm.flags & ARM_F_Z)) A__NAME(cpu, ic); } |
406 |
|
|
407 |
|
|
408 |
/* Load/stores with the PC register: */ |
/* Load/stores with the PC register: */ |
409 |
void A__NAME_PC__eq(struct cpu *cpu, struct arm_instr_call *ic) |
void A__NAME_PC__eq(struct cpu *cpu, struct arm_instr_call *ic) |
410 |
{ if (cpu->cd.arm.cpsr & ARM_FLAG_Z) A__NAME_PC(cpu, ic); } |
{ if (cpu->cd.arm.flags & ARM_F_Z) A__NAME_PC(cpu, ic); } |
411 |
void A__NAME_PC__ne(struct cpu *cpu, struct arm_instr_call *ic) |
void A__NAME_PC__ne(struct cpu *cpu, struct arm_instr_call *ic) |
412 |
{ if (!(cpu->cd.arm.cpsr & ARM_FLAG_Z)) A__NAME_PC(cpu, ic); } |
{ if (!(cpu->cd.arm.flags & ARM_F_Z)) A__NAME_PC(cpu, ic); } |
413 |
void A__NAME_PC__cs(struct cpu *cpu, struct arm_instr_call *ic) |
void A__NAME_PC__cs(struct cpu *cpu, struct arm_instr_call *ic) |
414 |
{ if (cpu->cd.arm.cpsr & ARM_FLAG_C) A__NAME_PC(cpu, ic); } |
{ if (cpu->cd.arm.flags & ARM_F_C) A__NAME_PC(cpu, ic); } |
415 |
void A__NAME_PC__cc(struct cpu *cpu, struct arm_instr_call *ic) |
void A__NAME_PC__cc(struct cpu *cpu, struct arm_instr_call *ic) |
416 |
{ if (!(cpu->cd.arm.cpsr & ARM_FLAG_C)) A__NAME_PC(cpu, ic); } |
{ if (!(cpu->cd.arm.flags & ARM_F_C)) A__NAME_PC(cpu, ic); } |
417 |
void A__NAME_PC__mi(struct cpu *cpu, struct arm_instr_call *ic) |
void A__NAME_PC__mi(struct cpu *cpu, struct arm_instr_call *ic) |
418 |
{ if (cpu->cd.arm.cpsr & ARM_FLAG_N) A__NAME_PC(cpu, ic); } |
{ if (cpu->cd.arm.flags & ARM_F_N) A__NAME_PC(cpu, ic); } |
419 |
void A__NAME_PC__pl(struct cpu *cpu, struct arm_instr_call *ic) |
void A__NAME_PC__pl(struct cpu *cpu, struct arm_instr_call *ic) |
420 |
{ if (!(cpu->cd.arm.cpsr & ARM_FLAG_N)) A__NAME_PC(cpu, ic); } |
{ if (!(cpu->cd.arm.flags & ARM_F_N)) A__NAME_PC(cpu, ic); } |
421 |
void A__NAME_PC__vs(struct cpu *cpu, struct arm_instr_call *ic) |
void A__NAME_PC__vs(struct cpu *cpu, struct arm_instr_call *ic) |
422 |
{ if (cpu->cd.arm.cpsr & ARM_FLAG_V) A__NAME_PC(cpu, ic); } |
{ if (cpu->cd.arm.flags & ARM_F_V) A__NAME_PC(cpu, ic); } |
423 |
void A__NAME_PC__vc(struct cpu *cpu, struct arm_instr_call *ic) |
void A__NAME_PC__vc(struct cpu *cpu, struct arm_instr_call *ic) |
424 |
{ if (!(cpu->cd.arm.cpsr & ARM_FLAG_V)) A__NAME_PC(cpu, ic); } |
{ if (!(cpu->cd.arm.flags & ARM_F_V)) A__NAME_PC(cpu, ic); } |
425 |
|
|
426 |
void A__NAME_PC__hi(struct cpu *cpu, struct arm_instr_call *ic) |
void A__NAME_PC__hi(struct cpu *cpu, struct arm_instr_call *ic) |
427 |
{ if (cpu->cd.arm.cpsr & ARM_FLAG_C && |
{ if (cpu->cd.arm.flags & ARM_F_C && |
428 |
!(cpu->cd.arm.cpsr & ARM_FLAG_Z)) A__NAME_PC(cpu, ic); } |
!(cpu->cd.arm.flags & ARM_F_Z)) A__NAME_PC(cpu, ic); } |
429 |
void A__NAME_PC__ls(struct cpu *cpu, struct arm_instr_call *ic) |
void A__NAME_PC__ls(struct cpu *cpu, struct arm_instr_call *ic) |
430 |
{ if (cpu->cd.arm.cpsr & ARM_FLAG_Z || |
{ if (cpu->cd.arm.flags & ARM_F_Z || |
431 |
!(cpu->cd.arm.cpsr & ARM_FLAG_C)) A__NAME_PC(cpu, ic); } |
!(cpu->cd.arm.flags & ARM_F_C)) A__NAME_PC(cpu, ic); } |
432 |
void A__NAME_PC__ge(struct cpu *cpu, struct arm_instr_call *ic) |
void A__NAME_PC__ge(struct cpu *cpu, struct arm_instr_call *ic) |
433 |
{ if (((cpu->cd.arm.cpsr & ARM_FLAG_N)?1:0) == |
{ if (((cpu->cd.arm.flags & ARM_F_N)?1:0) == |
434 |
((cpu->cd.arm.cpsr & ARM_FLAG_V)?1:0)) A__NAME_PC(cpu, ic); } |
((cpu->cd.arm.flags & ARM_F_V)?1:0)) A__NAME_PC(cpu, ic); } |
435 |
void A__NAME_PC__lt(struct cpu *cpu, struct arm_instr_call *ic) |
void A__NAME_PC__lt(struct cpu *cpu, struct arm_instr_call *ic) |
436 |
{ if (((cpu->cd.arm.cpsr & ARM_FLAG_N)?1:0) != |
{ if (((cpu->cd.arm.flags & ARM_F_N)?1:0) != |
437 |
((cpu->cd.arm.cpsr & ARM_FLAG_V)?1:0)) A__NAME_PC(cpu, ic); } |
((cpu->cd.arm.flags & ARM_F_V)?1:0)) A__NAME_PC(cpu, ic); } |
438 |
void A__NAME_PC__gt(struct cpu *cpu, struct arm_instr_call *ic) |
void A__NAME_PC__gt(struct cpu *cpu, struct arm_instr_call *ic) |
439 |
{ if (((cpu->cd.arm.cpsr & ARM_FLAG_N)?1:0) == |
{ if (((cpu->cd.arm.flags & ARM_F_N)?1:0) == |
440 |
((cpu->cd.arm.cpsr & ARM_FLAG_V)?1:0) && |
((cpu->cd.arm.flags & ARM_F_V)?1:0) && |
441 |
!(cpu->cd.arm.cpsr & ARM_FLAG_Z)) A__NAME_PC(cpu, ic); } |
!(cpu->cd.arm.flags & ARM_F_Z)) A__NAME_PC(cpu, ic); } |
442 |
void A__NAME_PC__le(struct cpu *cpu, struct arm_instr_call *ic) |
void A__NAME_PC__le(struct cpu *cpu, struct arm_instr_call *ic) |
443 |
{ if (((cpu->cd.arm.cpsr & ARM_FLAG_N)?1:0) != |
{ if (((cpu->cd.arm.flags & ARM_F_N)?1:0) != |
444 |
((cpu->cd.arm.cpsr & ARM_FLAG_V)?1:0) || |
((cpu->cd.arm.flags & ARM_F_V)?1:0) || |
445 |
(cpu->cd.arm.cpsr & ARM_FLAG_Z)) A__NAME_PC(cpu, ic); } |
(cpu->cd.arm.flags & ARM_F_Z)) A__NAME_PC(cpu, ic); } |
446 |
#endif |
#endif |
447 |
|
|
448 |
|
|
449 |
|
#ifdef A__LDRD |
450 |
|
#undef A__LDRD |
451 |
|
#endif |
452 |
|
|
453 |
#ifdef A__STRD |
#ifdef A__STRD |
454 |
#undef A__STRD |
#undef A__STRD |
455 |
#endif |
#endif |
456 |
|
|