| 3359 | * XJ - 2006/11/13 */ |
| 3360 | |
| 3361 | static void genamode2x (amodes mode, const char *reg, wordsizes size, const char *name, int getv, int movem, int flags, int fetchmode) |
| 3362 | { |
| 3363 | char namea[100]; |
| 3364 | bool rmw = false; |
| 3365 | int pc_68000_offset = m68k_pc_offset; |
| 3366 | int pc_68000_offset_fetch = 0; |
| 3367 | int pc_68000_offset_store = 0; |
| 3368 | bool addr = false; |
| 3369 | // common EA prefetch bus error PC behavior |
| 3370 | int pcflag = !(flags & (GF_PCM2 | GF_PCP2)) ? GF_PCM2 : 0; |
| 3371 | |
| 3372 | sprintf(namea, "%sa", name); |
| 3373 | if ((flags & GF_RMW) && using_mmu == 68060) { |
| 3374 | strcpy (rmw_varname, name); |
| 3375 | candormw = true; |
| 3376 | rmw = true; |
| 3377 | } |
| 3378 | |
| 3379 | if (mode == Ad8r || mode == PC8r) { |
| 3380 | genamode8r_offset[genamode_cnt] = m68k_pc_total + m68k_pc_offset; |
| 3381 | genamode_cnt++; |
| 3382 | } |
| 3383 | |
| 3384 | loopmode_access(); |
| 3385 | |
| 3386 | switch (mode) { |
| 3387 | case Dreg: |
| 3388 | if (movem) |
| 3389 | term(); |
| 3390 | if (getv == 1) |
| 3391 | switch (size) { |
| 3392 | case sz_byte: |
| 3393 | #ifdef USE_DUBIOUS_BIGENDIAN_OPTIMIZATION |
| 3394 | /* This causes the target compiler to generate better code on few systems */ |
| 3395 | out("uae_s8 %s = ((uae_u8*)&m68k_dreg(regs, %s))[3];\n", name, reg); |
| 3396 | #else |
| 3397 | out("uae_s8 %s = m68k_dreg(regs, %s);\n", name, reg); |
| 3398 | #endif |
| 3399 | break; |
| 3400 | case sz_word: |
| 3401 | #ifdef USE_DUBIOUS_BIGENDIAN_OPTIMIZATION |
| 3402 | out("uae_s16 %s = ((uae_s16*)&m68k_dreg(regs, %s))[1];\n", name, reg); |
| 3403 | #else |
| 3404 | out("uae_s16 %s = m68k_dreg(regs, %s);\n", name, reg); |
| 3405 | #endif |
| 3406 | break; |
| 3407 | case sz_long: |
| 3408 | out("uae_s32 %s = m68k_dreg(regs, %s);\n", name, reg); |
| 3409 | break; |
| 3410 | default: |
| 3411 | term(); |
| 3412 | } |
| 3413 | maybeaddop_ce020 (flags); |
| 3414 | syncmovepc (getv, flags); |
| 3415 | strcpy(g_srcname, name); |
| 3416 | return; |
| 3417 | case Areg: |
| 3418 | if (movem) |
no test coverage detected