Commit 167c6aef authored by Roman Bolshakov's avatar Roman Bolshakov Committed by Paolo Bonzini
Browse files

i386: hvf: Drop regs in HVFX86EmulatorState



HVFX86EmulatorState carries it's own copy of x86 registers. It can be
dropped in favor of regs in generic CPUX86State.

Signed-off-by: default avatarRoman Bolshakov <r.bolshakov@yadro.com>
Message-Id: <20200528193758.51454-11-r.bolshakov@yadro.com>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent ea48ae91
Loading
Loading
Loading
Loading
+7 −6
Original line number Diff line number Diff line
@@ -235,13 +235,14 @@ typedef struct lazy_flags {

/* Definition of hvf_x86_state is here */
struct HVFX86EmulatorState {
    struct x86_register regs[16];
    struct lazy_flags   lflags;
    uint8_t mmio_buf[4096];
};

/* useful register access  macros */
#define RRX(cpu, reg) (cpu->hvf_emul->regs[reg].rrx)
#define x86_reg(cpu, reg) ((x86_register *) &cpu->regs[reg])

#define RRX(cpu, reg)   (x86_reg(cpu, reg)->rrx)
#define RAX(cpu)        RRX(cpu, R_EAX)
#define RCX(cpu)        RRX(cpu, R_ECX)
#define RDX(cpu)        RRX(cpu, R_EDX)
@@ -259,7 +260,7 @@ struct HVFX86EmulatorState {
#define R14(cpu)        RRX(cpu, R_R14)
#define R15(cpu)        RRX(cpu, R_R15)

#define ERX(cpu, reg)   (cpu->hvf_emul->regs[reg].erx)
#define ERX(cpu, reg)   (x86_reg(cpu, reg)->erx)
#define EAX(cpu)        ERX(cpu, R_EAX)
#define ECX(cpu)        ERX(cpu, R_ECX)
#define EDX(cpu)        ERX(cpu, R_EDX)
@@ -269,7 +270,7 @@ struct HVFX86EmulatorState {
#define ESI(cpu)        ERX(cpu, R_ESI)
#define EDI(cpu)        ERX(cpu, R_EDI)

#define RX(cpu, reg)   (cpu->hvf_emul->regs[reg].rx)
#define RX(cpu, reg)   (x86_reg(cpu, reg)->rx)
#define AX(cpu)        RX(cpu, R_EAX)
#define CX(cpu)        RX(cpu, R_ECX)
#define DX(cpu)        RX(cpu, R_EDX)
@@ -279,13 +280,13 @@ struct HVFX86EmulatorState {
#define SI(cpu)        RX(cpu, R_ESI)
#define DI(cpu)        RX(cpu, R_EDI)

#define RL(cpu, reg)   (cpu->hvf_emul->regs[reg].lx)
#define RL(cpu, reg)   (x86_reg(cpu, reg)->lx)
#define AL(cpu)        RL(cpu, R_EAX)
#define CL(cpu)        RL(cpu, R_ECX)
#define DL(cpu)        RL(cpu, R_EDX)
#define BL(cpu)        RL(cpu, R_EBX)

#define RH(cpu, reg)   (cpu->hvf_emul->regs[reg].hx)
#define RH(cpu, reg)   (x86_reg(cpu, reg)->hx)
#define AH(cpu)        RH(cpu, R_EAX)
#define CH(cpu)        RH(cpu, R_ECX)
#define DH(cpu)        RH(cpu, R_EDX)
+9 −9
Original line number Diff line number Diff line
@@ -95,13 +95,13 @@ target_ulong read_reg(CPUX86State *env, int reg, int size)
{
    switch (size) {
    case 1:
        return env->hvf_emul->regs[reg].lx;
        return x86_reg(env, reg)->lx;
    case 2:
        return env->hvf_emul->regs[reg].rx;
        return x86_reg(env, reg)->rx;
    case 4:
        return env->hvf_emul->regs[reg].erx;
        return x86_reg(env, reg)->erx;
    case 8:
        return env->hvf_emul->regs[reg].rrx;
        return x86_reg(env, reg)->rrx;
    default:
        abort();
    }
@@ -112,16 +112,16 @@ void write_reg(CPUX86State *env, int reg, target_ulong val, int size)
{
    switch (size) {
    case 1:
        env->hvf_emul->regs[reg].lx = val;
        x86_reg(env, reg)->lx = val;
        break;
    case 2:
        env->hvf_emul->regs[reg].rx = val;
        x86_reg(env, reg)->rx = val;
        break;
    case 4:
        env->hvf_emul->regs[reg].rrx = (uint32_t)val;
        x86_reg(env, reg)->rrx = (uint32_t)val;
        break;
    case 8:
        env->hvf_emul->regs[reg].rrx = val;
        x86_reg(env, reg)->rrx = val;
        break;
    default:
        abort();
@@ -173,7 +173,7 @@ void write_val_to_reg(target_ulong reg_ptr, target_ulong val, int size)

static bool is_host_reg(struct CPUX86State *env, target_ulong ptr)
{
    return (ptr - (target_ulong)&env->hvf_emul->regs[0]) < sizeof(env->hvf_emul->regs);
    return (ptr - (target_ulong)&env->regs[0]) < sizeof(env->regs);
}

void write_val_ext(struct CPUX86State *env, target_ulong ptr, target_ulong val, int size)