Commit db45c29a651ee955a5aad87af4c6676bc33ef6f8

Authored by bellard
1 parent 7d3505c5

faster I/Os - default 16 bit I/O fix


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@801 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 6 additions and 10 deletions
... ... @@ -147,15 +147,17 @@ void default_ioport_writeb(void *opaque, uint32_t address, uint32_t data)
147 147 uint32_t default_ioport_readw(void *opaque, uint32_t address)
148 148 {
149 149 uint32_t data;
150   - data = ioport_read_table[0][address & (MAX_IOPORTS - 1)](opaque, address);
151   - data |= ioport_read_table[0][(address + 1) & (MAX_IOPORTS - 1)](opaque, address + 1) << 8;
  150 + data = ioport_read_table[0][address](ioport_opaque[address], address);
  151 + address = (address + 1) & (MAX_IOPORTS - 1);
  152 + data |= ioport_read_table[0][address](ioport_opaque[address], address) << 8;
152 153 return data;
153 154 }
154 155  
155 156 void default_ioport_writew(void *opaque, uint32_t address, uint32_t data)
156 157 {
157   - ioport_write_table[0][address & (MAX_IOPORTS - 1)](opaque, address, data & 0xff);
158   - ioport_write_table[0][(address + 1) & (MAX_IOPORTS - 1)](opaque, address + 1, (data >> 8) & 0xff);
  158 + ioport_write_table[0][address](ioport_opaque[address], address, data & 0xff);
  159 + address = (address + 1) & (MAX_IOPORTS - 1);
  160 + ioport_write_table[0][address](ioport_opaque[address], address, (data >> 8) & 0xff);
159 161 }
160 162  
161 163 uint32_t default_ioport_readl(void *opaque, uint32_t address)
... ... @@ -283,7 +285,6 @@ int load_image(const char *filename, uint8_t *addr)
283 285  
284 286 void cpu_outb(CPUState *env, int addr, int val)
285 287 {
286   - addr &= (MAX_IOPORTS - 1);
287 288 #ifdef DEBUG_IOPORT
288 289 if (loglevel & CPU_LOG_IOPORT)
289 290 fprintf(logfile, "outb: %04x %02x\n", addr, val);
... ... @@ -293,7 +294,6 @@ void cpu_outb(CPUState *env, int addr, int val)
293 294  
294 295 void cpu_outw(CPUState *env, int addr, int val)
295 296 {
296   - addr &= (MAX_IOPORTS - 1);
297 297 #ifdef DEBUG_IOPORT
298 298 if (loglevel & CPU_LOG_IOPORT)
299 299 fprintf(logfile, "outw: %04x %04x\n", addr, val);
... ... @@ -303,7 +303,6 @@ void cpu_outw(CPUState *env, int addr, int val)
303 303  
304 304 void cpu_outl(CPUState *env, int addr, int val)
305 305 {
306   - addr &= (MAX_IOPORTS - 1);
307 306 #ifdef DEBUG_IOPORT
308 307 if (loglevel & CPU_LOG_IOPORT)
309 308 fprintf(logfile, "outl: %04x %08x\n", addr, val);
... ... @@ -314,7 +313,6 @@ void cpu_outl(CPUState *env, int addr, int val)
314 313 int cpu_inb(CPUState *env, int addr)
315 314 {
316 315 int val;
317   - addr &= (MAX_IOPORTS - 1);
318 316 val = ioport_read_table[0][addr](ioport_opaque[addr], addr);
319 317 #ifdef DEBUG_IOPORT
320 318 if (loglevel & CPU_LOG_IOPORT)
... ... @@ -326,7 +324,6 @@ int cpu_inb(CPUState *env, int addr)
326 324 int cpu_inw(CPUState *env, int addr)
327 325 {
328 326 int val;
329   - addr &= (MAX_IOPORTS - 1);
330 327 val = ioport_read_table[1][addr](ioport_opaque[addr], addr);
331 328 #ifdef DEBUG_IOPORT
332 329 if (loglevel & CPU_LOG_IOPORT)
... ... @@ -338,7 +335,6 @@ int cpu_inw(CPUState *env, int addr)
338 335 int cpu_inl(CPUState *env, int addr)
339 336 {
340 337 int val;
341   - addr &= (MAX_IOPORTS - 1);
342 338 val = ioport_read_table[2][addr](ioport_opaque[addr], addr);
343 339 #ifdef DEBUG_IOPORT
344 340 if (loglevel & CPU_LOG_IOPORT)
... ...