Revision c27004ec exec-all.h

b/exec-all.h
55 55

  
56 56
extern uint16_t gen_opc_buf[OPC_BUF_SIZE];
57 57
extern uint32_t gen_opparam_buf[OPPARAM_BUF_SIZE];
58
extern uint32_t gen_opc_pc[OPC_BUF_SIZE];
59
extern uint32_t gen_opc_npc[OPC_BUF_SIZE];
58
extern long gen_labels[OPC_BUF_SIZE];
59
extern int nb_gen_labels;
60
extern target_ulong gen_opc_pc[OPC_BUF_SIZE];
61
extern target_ulong gen_opc_npc[OPC_BUF_SIZE];
60 62
extern uint8_t gen_opc_cc_op[OPC_BUF_SIZE];
61 63
extern uint8_t gen_opc_instr_start[OPC_BUF_SIZE];
62 64

  
......
186 188
    struct TranslationBlock *jmp_first;
187 189
} TranslationBlock;
188 190

  
189
static inline unsigned int tb_hash_func(unsigned long pc)
191
static inline unsigned int tb_hash_func(target_ulong pc)
190 192
{
191 193
    return pc & (CODE_GEN_HASH_SIZE - 1);
192 194
}
......
196 198
    return pc & (CODE_GEN_PHYS_HASH_SIZE - 1);
197 199
}
198 200

  
199
TranslationBlock *tb_alloc(unsigned long pc);
201
TranslationBlock *tb_alloc(target_ulong pc);
200 202
void tb_flush(CPUState *env);
201 203
void tb_link(TranslationBlock *tb);
202 204
void tb_link_phys(TranslationBlock *tb, 
......
329 331
                  "b " ASM_NAME(__op_jmp) #n "\n"\
330 332
		  "1:\n");\
331 333
    T0 = (long)(tbparam) + (n);\
332
    EIP = eip;\
334
    EIP = (int32_t)eip;\
333 335
    EXIT_TB();\
334 336
} while (0)
335 337

  
......
341 343
#elif defined(__i386__) && defined(USE_DIRECT_JUMP)
342 344

  
343 345
/* we patch the jump instruction directly */
346
#define GOTO_TB(opname, n)\
347
do {\
348
    asm volatile (".section .data\n"\
349
		  ASM_NAME(__op_label) #n "." ASM_NAME(opname) ":\n"\
350
		  ".long 1f\n"\
351
		  ASM_PREVIOUS_SECTION \
352
                  "jmp " ASM_NAME(__op_jmp) #n "\n"\
353
		  "1:\n");\
354
} while (0)
355

  
344 356
#define JUMP_TB(opname, tbparam, n, eip)\
345 357
do {\
346 358
    asm volatile (".section .data\n"\
......
350 362
                  "jmp " ASM_NAME(__op_jmp) #n "\n"\
351 363
		  "1:\n");\
352 364
    T0 = (long)(tbparam) + (n);\
353
    EIP = eip;\
365
    EIP = (int32_t)eip;\
354 366
    EXIT_TB();\
355 367
} while (0)
356 368

  
......
370 382
    goto *(void *)(((TranslationBlock *)tbparam)->tb_next[n]);\
371 383
label ## n:\
372 384
    T0 = (long)(tbparam) + (n);\
373
    EIP = eip;\
385
    EIP = (int32_t)eip;\
374 386
dummy_label ## n:\
375 387
    EXIT_TB();\
376 388
} while (0)
......
544 556

  
545 557
#if !defined(CONFIG_USER_ONLY)
546 558

  
547
void tlb_fill(unsigned long addr, int is_write, int is_user, 
559
void tlb_fill(target_ulong addr, int is_write, int is_user, 
548 560
              void *retaddr);
549 561

  
550 562
#define ACCESS_TYPE 3
......
560 572
#define DATA_SIZE 4
561 573
#include "softmmu_header.h"
562 574

  
575
#define DATA_SIZE 8
576
#include "softmmu_header.h"
577

  
563 578
#undef ACCESS_TYPE
564 579
#undef MEMSUFFIX
565 580
#undef env
......
578 593
/* XXX: i386 target specific */
579 594
static inline target_ulong get_phys_addr_code(CPUState *env, target_ulong addr)
580 595
{
581
    int is_user, index;
596
    int is_user, index, pd;
582 597

  
583 598
    index = (addr >> TARGET_PAGE_BITS) & (CPU_TLB_SIZE - 1);
584 599
#if defined(TARGET_I386)
......
592 607
#endif
593 608
    if (__builtin_expect(env->tlb_read[is_user][index].address != 
594 609
                         (addr & TARGET_PAGE_MASK), 0)) {
595
        ldub_code((void *)addr);
610
        ldub_code(addr);
611
    }
612
    pd = env->tlb_read[is_user][index].address & ~TARGET_PAGE_MASK;
613
    if (pd > IO_MEM_ROM) {
614
        cpu_abort(env, "Trying to execute code outside RAM or ROM at 0x%08lx\n", addr);
596 615
    }
597 616
    return addr + env->tlb_read[is_user][index].addend - (unsigned long)phys_ram_base;
598 617
}

Also available in: Unified diff