bitkeeper revision 1.1159.212.53 (41fabd0652DGdYKsgWToGTyAOUlZKg)

Fix the direction flag for string I/O instructions -- missing hunk from earlier patch

Signed-off-by: Jun Nakajima <jun.nakajima@intel.com>
Signed-off-by: Chengyuan Li <chengyuan.li@intel.com>
Signed-off-by: ian.pratt@cl.cam.ac.uk
This commit is contained in:
iap10@labyrinth.cl.cam.ac.uk committed 2005-01-28 22:30:30 +00:00
1 parent 68b6e40d21
commit f6f2064455
1 file changed
+9 -6
+9 -6
View File
@@ -83,6 +83,9 @@ ioreq_t* bx_cpu_c::get_ioreq(void)
void bx_cpu_c::dispatch_ioreq(ioreq_t *req)
{
int ret, i;
int sign;
sign = (req->df) ? -1 : 1;
if ((!req->pdata_valid) && (req->dir == IOREQ_WRITE)) {
if (req->size != 4) {
@@ -99,7 +102,7 @@ void bx_cpu_c::dispatch_ioreq(ioreq_t *req)
for (i = 0; i < req->count; i++) {
tmp = BX_INP(req->addr, req->size);
BX_MEM_WRITE_PHYSICAL((Bit32u) req->u.pdata + (i * req->size),
BX_MEM_WRITE_PHYSICAL((Bit32u) req->u.pdata + (sign * i * req->size),
req->size, &tmp);
}
}
@@ -110,7 +113,7 @@ void bx_cpu_c::dispatch_ioreq(ioreq_t *req)
for (i = 0; i < req->count; i++) {
unsigned long tmp;
BX_MEM_READ_PHYSICAL((Bit32u) req->u.pdata + (i * req->size), req->size,
BX_MEM_READ_PHYSICAL((Bit32u) req->u.pdata + (sign * i * req->size), req->size,
&tmp);
BX_OUTP(req->addr, (Bit32u) tmp, req->size);
}
@@ -129,14 +132,14 @@ void bx_cpu_c::dispatch_ioreq(ioreq_t *req)
if (req->dir == IOREQ_READ) {
//BX_INFO(("<READ>addr:%llx, pdata:%llx, size: %x, count: %x\n", req->addr, req->u.pdata, req->size, req->count));
for (i = 0; i < req->count; i++) {
BX_MEM_READ_PHYSICAL(req->addr + (i * req->size), req->size, &tmp);
BX_MEM_WRITE_PHYSICAL((Bit32u) req->u.pdata + (i * req->size), req->size, &tmp);
BX_MEM_READ_PHYSICAL(req->addr + (sign * i * req->size), req->size, &tmp);
BX_MEM_WRITE_PHYSICAL((Bit32u) req->u.pdata + (sign * i * req->size), req->size, &tmp);
}
} else if (req->dir == IOREQ_WRITE) {
//BX_INFO(("<WRITE>addr:%llx, pdata:%llx, size: %x, count: %x\n", req->addr, req->u.pdata, req->size, req->count));
for (i = 0; i < req->count; i++) {
BX_MEM_READ_PHYSICAL((Bit32u)req->u.pdata + (i * req->size), req->size, &tmp);
BX_MEM_WRITE_PHYSICAL(req->addr + (i * req->size), req->size, &tmp);
BX_MEM_READ_PHYSICAL((Bit32u)req->u.pdata + (sign * i * req->size), req->size, &tmp);
BX_MEM_WRITE_PHYSICAL(req->addr + (sign * i * req->size), req->size, &tmp);
}
}
}
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.