optimize sr params

This commit is contained in:
Stanislav Shwartsman 2009-10-16 18:29:45 +00:00
parent ab3f2cb6d3
commit da4722e257
8 changed files with 47 additions and 48 deletions

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: cpu.h,v 1.613 2009-10-12 20:50:14 sshwarts Exp $
// $Id: cpu.h,v 1.614 2009-10-16 18:29:45 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2001 MandrakeSoft S.A.
@ -1067,11 +1067,11 @@ public: // for now...
#if BX_WITH_WX
void register_wx_state(void);
#endif
static Bit64s param_save_handler(void *devptr, bx_param_c *param, Bit64s val);
static Bit64s param_restore_handler(void *devptr, bx_param_c *param, Bit64s val);
static Bit64s param_save_handler(void *devptr, bx_param_c *param);
static void param_restore_handler(void *devptr, bx_param_c *param, Bit64s val);
#if !BX_USE_CPU_SMF
Bit64s param_save(bx_param_c *param, Bit64s val);
Bit64s param_restore(bx_param_c *param, Bit64s val);
Bit64s param_save(bx_param_c *param);
void param_restore(bx_param_c *param, Bit64s val);
#endif
// <TAG-CLASS-CPU-START>

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: init.cc,v 1.217 2009-08-19 09:59:30 sshwarts Exp $
// $Id: init.cc,v 1.218 2009-10-16 18:29:45 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2001 MandrakeSoft S.A.
@ -540,20 +540,21 @@ void BX_CPU_C::register_state(void)
BXRS_PARAM_BOOL(cpu, trace, trace);
}
Bit64s BX_CPU_C::param_save_handler(void *devptr, bx_param_c *param, Bit64s val)
Bit64s BX_CPU_C::param_save_handler(void *devptr, bx_param_c *param)
{
#if !BX_USE_CPU_SMF
BX_CPU_C *class_ptr = (BX_CPU_C *) devptr;
return class_ptr->param_save(param, val);
return class_ptr->param_save(param);
}
Bit64s BX_CPU_C::param_save(bx_param_c *param, Bit64s val)
Bit64s BX_CPU_C::param_save(bx_param_c *param)
{
#else
UNUSED(devptr);
#endif // !BX_USE_CPU_SMF
const char *pname, *segname;
bx_segment_reg_t *segment = NULL;
Bit64s val = 0;
pname = param->get_name();
if (!strcmp(pname, "cpu_version")) {
@ -598,14 +599,14 @@ Bit64s BX_CPU_C::param_save(bx_param_c *param, Bit64s val)
return val;
}
Bit64s BX_CPU_C::param_restore_handler(void *devptr, bx_param_c *param, Bit64s val)
void BX_CPU_C::param_restore_handler(void *devptr, bx_param_c *param, Bit64s val)
{
#if !BX_USE_CPU_SMF
BX_CPU_C *class_ptr = (BX_CPU_C *) devptr;
return class_ptr->param_restore(param, val);
class_ptr->param_restore(param, val);
}
Bit64s BX_CPU_C::param_restore(bx_param_c *param, Bit64s val)
void BX_CPU_C::param_restore(bx_param_c *param, Bit64s val)
{
#else
UNUSED(devptr);
@ -664,7 +665,6 @@ Bit64s BX_CPU_C::param_restore(bx_param_c *param, Bit64s val)
else {
BX_PANIC(("Unknown param %s in param_restore handler !", pname));
}
return val;
}
void BX_CPU_C::after_restore_state(void)

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: siminterface.cc,v 1.206 2009-03-29 11:13:49 vruppert Exp $
// $Id: siminterface.cc,v 1.207 2009-10-16 18:29:45 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2009 The Bochs Project
@ -1412,11 +1412,11 @@ void bx_param_num_c::set_handler(param_event_handler handler)
//set (get ());
}
void bx_param_num_c::set_sr_handlers(void *devptr, param_sr_handler save, param_sr_handler restore)
void bx_param_num_c::set_sr_handlers(void *devptr, param_save_handler save, param_restore_handler restore)
{
this->sr_devptr = devptr;
this->save_handler = save;
this->restore_handler = restore;
sr_devptr = devptr;
save_handler = save;
restore_handler = restore;
}
void bx_param_num_c::set_dependent_list(bx_list_c *l)
@ -1428,7 +1428,7 @@ void bx_param_num_c::set_dependent_list(bx_list_c *l)
Bit64s bx_param_num_c::get64()
{
if (save_handler) {
return (*save_handler)(sr_devptr, this, val.number);
return (*save_handler)(sr_devptr, this);
}
if (handler) {
// the handler can decide what value to return and/or do some side effect

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: siminterface.h,v 1.242 2009-04-26 06:56:27 vruppert Exp $
// $Id: siminterface.h,v 1.243 2009-10-16 18:29:45 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2009 The Bochs Project
@ -684,7 +684,8 @@ public:
};
typedef Bit64s (*param_event_handler)(class bx_param_c *, int set, Bit64s val);
typedef Bit64s (*param_sr_handler)(void *devptr, class bx_param_c *, Bit64s val);
typedef Bit64s (*param_save_handler)(void *devptr, class bx_param_c *);
typedef void (*param_restore_handler)(void *devptr, class bx_param_c *, Bit64s val);
typedef int (*param_enable_handler)(class bx_param_c *, int en);
class BOCHSAPI bx_param_num_c : public bx_param_c {
@ -702,8 +703,8 @@ protected:
} val;
param_event_handler handler;
void *sr_devptr;
param_sr_handler save_handler;
param_sr_handler restore_handler;
param_save_handler save_handler;
param_restore_handler restore_handler;
param_enable_handler enable_handler;
int base;
bx_bool is_shadow;
@ -721,7 +722,7 @@ public:
bx_bool is_shadow = 0);
virtual void reset() { val.number = initial_val; }
void set_handler(param_event_handler handler);
void set_sr_handlers(void *devptr, param_sr_handler save, param_sr_handler restore);
void set_sr_handlers(void *devptr, param_save_handler save, param_restore_handler restore);
void set_enable_handler(param_enable_handler handler) { enable_handler = handler; }
void set_dependent_list(bx_list_c *l);
virtual void set_enabled(int enabled);

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: pci_ide.cc,v 1.44 2009-08-16 19:59:03 vruppert Exp $
// $Id: pci_ide.cc,v 1.45 2009-10-16 18:29:45 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2002 MandrakeSoft S.A.
@ -175,19 +175,20 @@ void bx_pci_ide_c::after_restore_state(void)
}
}
Bit64s bx_pci_ide_c::param_save_handler(void *devptr, bx_param_c *param, Bit64s val)
Bit64s bx_pci_ide_c::param_save_handler(void *devptr, bx_param_c *param)
{
#if !BX_USE_PIDE_SMF
bx_pci_ide_c *class_ptr = (bx_pci_ide_c *) devptr;
return class_ptr->param_save(param, val);
}
Bit64s bx_pci_ide_c::param_save(bx_param_c *param, Bit64s val)
Bit64s bx_pci_ide_c::param_save(bx_param_c *param)
{
#else
UNUSED(devptr);
#endif // !BX_USE_PIDE_SMF
int chan = atoi(param->get_parent()->get_name());
Bit64s val = 0;
if (!strcmp(param->get_name(), "buffer_top")) {
val = (Bit32u)(BX_PIDE_THIS s.bmdma[chan].buffer_top - BX_PIDE_THIS s.bmdma[chan].buffer);
} else if (!strcmp(param->get_name(), "buffer_idx")) {
@ -196,14 +197,14 @@ Bit64s bx_pci_ide_c::param_save(bx_param_c *param, Bit64s val)
return val;
}
Bit64s bx_pci_ide_c::param_restore_handler(void *devptr, bx_param_c *param, Bit64s val)
void bx_pci_ide_c::param_restore_handler(void *devptr, bx_param_c *param, Bit64s val)
{
#if !BX_USE_PIDE_SMF
bx_pci_ide_c *class_ptr = (bx_pci_ide_c *) devptr;
return class_ptr->param_restore(param, val);
class_ptr->param_restore(param, val);
}
Bit64s bx_pci_ide_c::param_restore(bx_param_c *param, Bit64s val)
void bx_pci_ide_c::param_restore(bx_param_c *param, Bit64s val)
{
#else
UNUSED(devptr);
@ -214,7 +215,6 @@ Bit64s bx_pci_ide_c::param_restore(bx_param_c *param, Bit64s val)
} else if (!strcmp(param->get_name(), "buffer_idx")) {
BX_PIDE_THIS s.bmdma[chan].buffer_idx = BX_PIDE_THIS s.bmdma[chan].buffer + val;
}
return val;
}
// save/restore code end

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: pci_ide.h,v 1.14 2009-02-08 09:05:52 vruppert Exp $
// $Id: pci_ide.h,v 1.15 2009-10-16 18:29:45 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2004 MandrakeSoft S.A.
@ -47,11 +47,11 @@ public:
virtual void bmdma_set_irq(Bit8u channel);
virtual void register_state(void);
virtual void after_restore_state(void);
static Bit64s param_save_handler(void *devptr, bx_param_c *param, Bit64s val);
static Bit64s param_restore_handler(void *devptr, bx_param_c *param, Bit64s val);
static Bit64s param_save_handler(void *devptr, bx_param_c *param);
static void param_restore_handler(void *devptr, bx_param_c *param, Bit64s val);
#if !BX_USE_PIDE_SMF
Bit64s param_save(bx_param_c *param, Bit64s val);
Bit64s param_restore(bx_param_c *param, Bit64s val);
Bit64s param_save(bx_param_c *param);
void param_restore(bx_param_c *param, Bit64s val);
#endif
virtual Bit32u pci_read_handler(Bit8u address, unsigned io_len);

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: memory.h,v 1.63 2009-10-16 17:10:36 sshwarts Exp $
// $Id: memory.h,v 1.64 2009-10-16 18:29:45 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2001 MandrakeSoft S.A.
@ -123,8 +123,8 @@ public:
void register_state(void);
friend Bit64s memory_param_save_handler(void *devptr, bx_param_c *param, Bit64s val);
friend Bit64s memory_param_restore_handler(void *devptr, bx_param_c *param, Bit64s val);
friend Bit64s memory_param_save_handler(void *devptr, bx_param_c *param);
friend void memory_param_restore_handler(void *devptr, bx_param_c *param, Bit64s val);
};
BOCHSAPI extern BX_MEM_C bx_mem;

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: misc_mem.cc,v 1.135 2009-10-16 17:21:49 sshwarts Exp $
// $Id: misc_mem.cc,v 1.136 2009-10-16 18:29:45 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2002 MandrakeSoft S.A.
@ -74,7 +74,7 @@ void BX_MEM_C::init_memory(Bit64u guest, Bit64u host)
{
unsigned idx;
BX_DEBUG(("Init $Id: misc_mem.cc,v 1.135 2009-10-16 17:21:49 sshwarts Exp $"));
BX_DEBUG(("Init $Id: misc_mem.cc,v 1.136 2009-10-16 18:29:45 sshwarts Exp $"));
// accept only memory size which is multiply of 1M
BX_ASSERT((host & 0xfffff) == 0);
@ -153,7 +153,7 @@ void BX_MEM_C::allocate_block(Bit32u block)
}
}
Bit64s memory_param_save_handler(void *devptr, bx_param_c *param, Bit64s val)
Bit64s memory_param_save_handler(void *devptr, bx_param_c *param)
{
const char *pname = param->get_name();
if (! strncmp(pname, "blk", 3)) {
@ -162,16 +162,16 @@ Bit64s memory_param_save_handler(void *devptr, bx_param_c *param, Bit64s val)
return -1;
}
else {
val = (Bit32u) (BX_MEM(0)->blocks[blk_index] - BX_MEM(0)->vector);
if (val & (BX_MEM_BLOCK_LEN-1)) return -2;
return val / BX_MEM_BLOCK_LEN;
Bit32u val = (Bit32u) (BX_MEM(0)->blocks[blk_index] - BX_MEM(0)->vector);
if ((val & (BX_MEM_BLOCK_LEN-1)) == 0)
return val / BX_MEM_BLOCK_LEN;
}
}
return -1;
}
Bit64s memory_param_restore_handler(void *devptr, bx_param_c *param, Bit64s val)
void memory_param_restore_handler(void *devptr, bx_param_c *param, Bit64s val)
{
const char *pname = param->get_name();
if (! strncmp(pname, "blk", 3)) {
@ -181,8 +181,6 @@ Bit64s memory_param_restore_handler(void *devptr, bx_param_c *param, Bit64s val)
else
BX_MEM(0)->blocks[blk_index] = BX_MEM(0)->vector + val * BX_MEM_BLOCK_LEN;
}
return -1;
}
void BX_MEM_C::register_state()