cdfc3cbce4
* renamed CPU_ID to BX_CPU_ID. with this new name there is no possibility for name contentions and BX_CPU_ID definition could be moved out to NEED_CPU_REG_SHORTCUTS block * returned back `unsigned BX_CPU::which_cpu(void)` function * added BX_CPU_ID parameter for BX_INSTR_PHY_READ(a20addr, len); BX_INSTR_PHY_WRITE(a20addr, len); now it will be BX_INSTR_PHY_READ(cpu_id, a20addr, len); BX_INSTR_PHY_WRITE(cpu_id, a20addr, len);
2007 lines
66 KiB
Plaintext
2007 lines
66 KiB
Plaintext
----------------------------------------------------------------------
|
|
Patch name: patch.perf-regparm-cclark
|
|
Author: Conn Clark
|
|
Date: Wed Feb 12 15:21:37 CET 2003
|
|
Status: applyable, to be updated
|
|
|
|
Detailed description:
|
|
|
|
Here is the patch for my modifications to source in bochs-2.0.1.tar.gz.
|
|
All my changes were done to this code except I did update the vga.cc and
|
|
vga.h files from the CVS tree in a failed attempt to 8 bit color
|
|
working. The patch was generated by using the command "diff -u" if it
|
|
wasn't done right let me know and I will try again. (I have only created
|
|
a patch once before in my life and I did it wrong)
|
|
|
|
Basicly I have found that Bochs, like all other large properly written
|
|
well organized programs (No offense), spends a good portion of its time
|
|
just passing parameters from one function to another. To reduce the
|
|
effect of this I have used the GCC function atribute "regparm(n)" to
|
|
declare that certain functions use the register calling convention. The
|
|
"n" in "regparm(n)" is the number of variables to pass in registers.
|
|
All other code and logic in bochs were left untouched. Note that as far
|
|
as I know this only works on GCC 3.2.X for X86 processors. Also note
|
|
that there is a trick to using it that is not well documented in the gcc
|
|
man pages. See examples below for implementation details.
|
|
|
|
|
|
/**** Normal code ****/
|
|
|
|
/* funct declaration */
|
|
int foo(int a, int b, int c, int d);
|
|
|
|
/* function */
|
|
int
|
|
foo( int a, int b, int c, int d)
|
|
{
|
|
int e;
|
|
|
|
e = a + b + c + d;
|
|
|
|
return e;
|
|
}
|
|
|
|
|
|
|
|
/**** Code using function attribute ****/
|
|
|
|
/* funct declaration */
|
|
int foo(int a, int b, int c, int d) __attribute__((regparm(3)));
|
|
|
|
/* function */
|
|
int __attribute__((regparm(3)))
|
|
foo( int a, int b, int c, int d)
|
|
{
|
|
int e;
|
|
|
|
e = a + b + c;
|
|
e -= d;
|
|
|
|
return e;
|
|
}
|
|
|
|
The trick is you put the function attribute after the function
|
|
declaration and before its terminating semi-colon. However in the
|
|
function you place it after the return type and before the function name.
|
|
|
|
The behavior of the above example is as follows varables a, b, and c
|
|
are passed in registers and d is passed on the stack (I think, if I'm
|
|
wrong a is passed on the stack). The best canidates to apply this
|
|
optimization to are functions that make immeadiate use of the registered
|
|
variables. functions that do not use the registered variables right away
|
|
may have to store the variables to the stack temporarily which may(but
|
|
not always) result in slower code for the function. This may still
|
|
create an overall benefit because using the register calling convention
|
|
may speed up the function calling this one offsetting the penalty.
|
|
|
|
The one place in Bochs where I think the register calling convention
|
|
may do some real good is the individual functions for each instruction
|
|
and the Resolve??Mod?Rm functions. I did not get this to work succesfuly
|
|
when I attempted it the first time so I gave up and applied the
|
|
optimization to everything else I could. It should be possible though I
|
|
just am not quite familiar with the code to pull it off yet.
|
|
|
|
|
|
Here are the extra compiler flags I used to create my executable with.
|
|
|
|
-O2 -march=pentium2 -mmmx -fthread-jumps -fexpensive-optimizations
|
|
-frename-registers -fomit-frame-pointer -finline-functions
|
|
-minline-all-stringops
|
|
|
|
This may effect which functions it pays to use the register calling
|
|
convention with. The only real way to tell is to look at the assembly
|
|
code generated for the function and mabey the calling function or to
|
|
benchmark bochs for each function changed. It tends to help more than
|
|
hinder.
|
|
|
|
Here are some details on the machine I used.
|
|
All the work I did was on an overclocked 416 MHz dual processor ( I
|
|
know the second processor doesn't help) pentium2 with 512MB of 75Mhz
|
|
SDRAM and a PCI Diamond stealth 3D 3000 (Ancient I know, but in its day
|
|
it rocked). The Os is Red hat 8.0 patched up to date as of 1/10/03 .
|
|
Redhat 8.0 uses GCC 3.2.1 .
|
|
|
|
My IPS was about 4000000 before I tampered with the source and now its
|
|
about 5000000.
|
|
|
|
I don't know how you think this could be implemented in a way that looks
|
|
nice and works for every one not using Linux on an X86, but good luck. I
|
|
just hope this helps somebody.
|
|
|
|
If you have any questions let me know,
|
|
|
|
Conn
|
|
|
|
-----------------------------
|
|
|
|
In reading through this one more time I have noticed that I forgot to
|
|
mention what options I specified for ./configure . This patch may not
|
|
work with some of the other configurations. Here they are.
|
|
|
|
--enable-new-pit --enable-ne2000 --enable-pci --enable-4meg-pages
|
|
--enable-pae --enable-guest2host-tlb --enable-repeat-speedups
|
|
--enable-icache --enable-global-pages --enable-host-specific-asms
|
|
--enable-vbe --enable-mmx --enable-fpu --enable-cdrom --enable-sse
|
|
--enable-sb16=linux --with-x11 --enable-all-optimizations --disable-plugins
|
|
|
|
|
|
-----------------------------
|
|
|
|
Notes from cbothamy :
|
|
- add an --enable-regparm option to configure
|
|
- enable-regparm if --enable-all-optimizations
|
|
- change all __attribute__((regparm(X))) to GCC_ATTRIBUTE_REGPARM(X)
|
|
- #define GCC_ATTRIBUTE_REGPARM(X) to GCC_ATTRIBUTE((GCC_REGPARM(X)))
|
|
- #define GCC_REGPARM(X) to regparm(X) only on x86 with gcc > 3.2
|
|
or - #define GCC_FASTCALL to __attribute__((regparm(3))) and only use it
|
|
or something like that
|
|
|
|
Patch was created with:
|
|
cvs diff -u
|
|
Apply patch to what version:
|
|
cvs checked out on Wed Feb 12 15:21:37 CET 2003
|
|
Instructions:
|
|
To patch, go to main bochs directory.
|
|
Type "patch -p0 < THIS_PATCH_FILE".
|
|
----------------------------------------------------------------------
|
|
Index: pc_system.cc
|
|
===================================================================
|
|
RCS file: /cvsroot/bochs/bochs/pc_system.cc,v
|
|
retrieving revision 1.31
|
|
diff -u -r1.31 pc_system.cc
|
|
--- pc_system.cc 25 Oct 2002 11:44:33 -0000 1.31
|
|
+++ pc_system.cc 12 Feb 2003 14:12:31 -0000
|
|
@@ -126,7 +126,7 @@
|
|
// Read from the IO memory address space
|
|
//
|
|
|
|
- Bit32u
|
|
+ Bit32u __attribute__((regparm(2)))
|
|
bx_pc_system_c::inp(Bit16u addr, unsigned io_len)
|
|
{
|
|
Bit32u ret;
|
|
@@ -141,13 +141,13 @@
|
|
// Write to the IO memory address space.
|
|
//
|
|
|
|
- void
|
|
+ void __attribute__((regparm(3)))
|
|
bx_pc_system_c::outp(Bit16u addr, Bit32u value, unsigned io_len)
|
|
{
|
|
bx_devices.outp(addr, value, io_len);
|
|
}
|
|
|
|
- void
|
|
+ void __attribute__((regparm(1)))
|
|
bx_pc_system_c::set_enable_a20(Bit8u value)
|
|
{
|
|
#if BX_CPU_LEVEL < 2
|
|
Index: pc_system.h
|
|
===================================================================
|
|
RCS file: /cvsroot/bochs/bochs/pc_system.h,v
|
|
retrieving revision 1.23
|
|
diff -u -r1.23 pc_system.h
|
|
--- pc_system.h 15 Dec 2002 16:00:41 -0000 1.23
|
|
+++ pc_system.h 12 Feb 2003 14:12:31 -0000
|
|
@@ -187,9 +187,9 @@
|
|
|
|
bx_pc_system_c(void);
|
|
|
|
- Bit32u inp(Bit16u addr, unsigned io_len);
|
|
- void outp(Bit16u addr, Bit32u value, unsigned io_len);
|
|
- void set_enable_a20(Bit8u value);
|
|
+ Bit32u inp(Bit16u addr, unsigned io_len) __attribute__((regparm(2)));
|
|
+ void outp(Bit16u addr, Bit32u value, unsigned io_len) __attribute__((regparm(3)));
|
|
+ void set_enable_a20(Bit8u value) __attribute__((regparm(1)));
|
|
bx_bool get_enable_a20(void);
|
|
void exit(void);
|
|
|
|
Index: cpu/access.cc
|
|
===================================================================
|
|
RCS file: /cvsroot/bochs/bochs/cpu/access.cc,v
|
|
retrieving revision 1.35
|
|
diff -u -r1.35 access.cc
|
|
--- cpu/access.cc 13 Nov 2002 21:00:03 -0000 1.35
|
|
+++ cpu/access.cc 12 Feb 2003 14:12:31 -0000
|
|
@@ -46,7 +46,7 @@
|
|
|
|
|
|
|
|
- void
|
|
+ void __attribute__((regparm(3)))
|
|
BX_CPU_C::write_virtual_checks(bx_segment_reg_t *seg, bx_address offset,
|
|
unsigned length)
|
|
{
|
|
@@ -139,7 +139,7 @@
|
|
}
|
|
}
|
|
|
|
- void
|
|
+ void __attribute__((regparm(3)))
|
|
BX_CPU_C::read_virtual_checks(bx_segment_reg_t *seg, bx_address offset,
|
|
unsigned length)
|
|
{
|
|
@@ -261,7 +261,7 @@
|
|
|
|
|
|
|
|
- char *
|
|
+ char * __attribute__((regparm(1)))
|
|
BX_CPU_C::strseg(bx_segment_reg_t *seg)
|
|
{
|
|
if (seg == &BX_CPU_THIS_PTR sregs[0]) return("ES");
|
|
@@ -277,7 +277,7 @@
|
|
}
|
|
|
|
|
|
- void
|
|
+ void __attribute__((regparm(3)))
|
|
BX_CPU_C::write_virtual_byte(unsigned s, bx_address offset, Bit8u *data)
|
|
{
|
|
bx_address laddr;
|
|
@@ -342,7 +342,7 @@
|
|
goto accessOK;
|
|
}
|
|
|
|
- void
|
|
+ void __attribute__((regparm(3)))
|
|
BX_CPU_C::write_virtual_word(unsigned s, bx_address offset, Bit16u *data)
|
|
{
|
|
bx_address laddr;
|
|
@@ -409,7 +409,7 @@
|
|
goto accessOK;
|
|
}
|
|
|
|
- void
|
|
+ void __attribute__((regparm(3)))
|
|
BX_CPU_C::write_virtual_dword(unsigned s, bx_address offset, Bit32u *data)
|
|
{
|
|
bx_address laddr;
|
|
@@ -477,7 +477,7 @@
|
|
}
|
|
|
|
|
|
- void
|
|
+ void __attribute__((regparm(3)))
|
|
BX_CPU_C::read_virtual_byte(unsigned s, bx_address offset, Bit8u *data)
|
|
{
|
|
bx_address laddr;
|
|
@@ -529,7 +529,7 @@
|
|
}
|
|
|
|
|
|
- void
|
|
+ void __attribute__((regparm(3)))
|
|
BX_CPU_C::read_virtual_word(unsigned s, bx_address offset, Bit16u *data)
|
|
{
|
|
bx_address laddr;
|
|
@@ -583,7 +583,7 @@
|
|
}
|
|
|
|
|
|
- void
|
|
+ void __attribute__((regparm(3)))
|
|
BX_CPU_C::read_virtual_dword(unsigned s, bx_address offset, Bit32u *data)
|
|
{
|
|
bx_address laddr;
|
|
@@ -642,7 +642,7 @@
|
|
// address translation info is kept across read/write calls //
|
|
//////////////////////////////////////////////////////////////
|
|
|
|
- void
|
|
+ void __attribute__((regparm(3)))
|
|
BX_CPU_C::read_RMW_virtual_byte(unsigned s, bx_address offset, Bit8u *data)
|
|
{
|
|
bx_address laddr;
|
|
@@ -711,7 +711,7 @@
|
|
}
|
|
|
|
|
|
- void
|
|
+ void __attribute__((regparm(3)))
|
|
BX_CPU_C::read_RMW_virtual_word(unsigned s, bx_address offset, Bit16u *data)
|
|
{
|
|
bx_address laddr;
|
|
@@ -779,7 +779,7 @@
|
|
goto accessOK;
|
|
}
|
|
|
|
- void
|
|
+ void __attribute__((regparm(3)))
|
|
BX_CPU_C::read_RMW_virtual_dword(unsigned s, bx_address offset, Bit32u *data)
|
|
{
|
|
bx_address laddr;
|
|
@@ -847,7 +847,7 @@
|
|
goto accessOK;
|
|
}
|
|
|
|
- void
|
|
+ void __attribute__((regparm(1)))
|
|
BX_CPU_C::write_RMW_virtual_byte(Bit8u val8)
|
|
{
|
|
BX_INSTR_MEM_DATA(BX_CPU_ID, BX_CPU_THIS_PTR address_xlation.paddress1, 1, BX_WRITE);
|
|
@@ -864,7 +864,7 @@
|
|
}
|
|
}
|
|
|
|
- void
|
|
+ void __attribute__((regparm(1)))
|
|
BX_CPU_C::write_RMW_virtual_word(Bit16u val16)
|
|
{
|
|
BX_INSTR_MEM_DATA(BX_CPU_ID, BX_CPU_THIS_PTR address_xlation.paddress1, 2, BX_WRITE);
|
|
@@ -931,7 +931,7 @@
|
|
}
|
|
|
|
|
|
- void
|
|
+ void __attribute__((regparm(3)))
|
|
BX_CPU_C::write_virtual_qword(unsigned s, bx_address offset, Bit64u *data)
|
|
{
|
|
bx_address laddr;
|
|
@@ -999,7 +999,7 @@
|
|
}
|
|
|
|
|
|
- void
|
|
+ void __attribute__((regparm(3)))
|
|
BX_CPU_C::read_virtual_qword(unsigned s, bx_address offset, Bit64u *data)
|
|
{
|
|
bx_address laddr;
|
|
@@ -1089,7 +1089,7 @@
|
|
}
|
|
}
|
|
|
|
- void
|
|
+ void __attribute__((regparm(3)))
|
|
BX_CPU_C::read_RMW_virtual_qword(unsigned s, bx_address offset, Bit64u *data)
|
|
{
|
|
bx_address laddr;
|
|
Index: cpu/cpu.h
|
|
===================================================================
|
|
RCS file: /cvsroot/bochs/bochs/cpu/cpu.h,v
|
|
retrieving revision 1.127
|
|
diff -u -r1.127 cpu.h
|
|
--- cpu/cpu.h 9 Feb 2003 13:30:39 -0000 1.127
|
|
+++ cpu/cpu.h 12 Feb 2003 14:12:34 -0000
|
|
@@ -2689,23 +2689,23 @@
|
|
BX_CPU_THIS_PTR eipPageWindowSize = 0;
|
|
}
|
|
|
|
- BX_SMF void write_virtual_checks(bx_segment_reg_t *seg, bx_address offset, unsigned length);
|
|
- BX_SMF void read_virtual_checks(bx_segment_reg_t *seg, bx_address offset, unsigned length);
|
|
- BX_SMF void write_virtual_byte(unsigned seg, bx_address offset, Bit8u *data);
|
|
- BX_SMF void write_virtual_word(unsigned seg, bx_address offset, Bit16u *data);
|
|
- BX_SMF void write_virtual_dword(unsigned seg, bx_address offset, Bit32u *data);
|
|
- BX_SMF void write_virtual_qword(unsigned seg, bx_address offset, Bit64u *data);
|
|
- BX_SMF void read_virtual_byte(unsigned seg, bx_address offset, Bit8u *data);
|
|
- BX_SMF void read_virtual_word(unsigned seg, bx_address offset, Bit16u *data);
|
|
- BX_SMF void read_virtual_dword(unsigned seg, bx_address offset, Bit32u *data);
|
|
- BX_SMF void read_virtual_qword(unsigned seg, bx_address offset, Bit64u *data);
|
|
-
|
|
- BX_SMF void read_RMW_virtual_byte(unsigned seg, bx_address offset, Bit8u *data);
|
|
- BX_SMF void read_RMW_virtual_word(unsigned seg, bx_address offset, Bit16u *data);
|
|
- BX_SMF void read_RMW_virtual_dword(unsigned seg, bx_address offset, Bit32u *data);
|
|
- BX_SMF void read_RMW_virtual_qword(unsigned seg, bx_address offset, Bit64u *data);
|
|
- BX_SMF void write_RMW_virtual_byte(Bit8u val8);
|
|
- BX_SMF void write_RMW_virtual_word(Bit16u val16);
|
|
+ BX_SMF void write_virtual_checks(bx_segment_reg_t *seg, bx_address offset, unsigned length) __attribute__((regparm(3)));
|
|
+ BX_SMF void read_virtual_checks(bx_segment_reg_t *seg, bx_address offset, unsigned length) __attribute__((regparm(3)));
|
|
+ BX_SMF void write_virtual_byte(unsigned seg, bx_address offset, Bit8u *data) __attribute__((regparm(3)));
|
|
+ BX_SMF void write_virtual_word(unsigned seg, bx_address offset, Bit16u *data) __attribute__((regparm(3)));
|
|
+ BX_SMF void write_virtual_dword(unsigned seg, bx_address offset, Bit32u *data) __attribute__((regparm(3)));
|
|
+ BX_SMF void write_virtual_qword(unsigned seg, bx_address offset, Bit64u *data) __attribute__((regparm(3)));
|
|
+ BX_SMF void read_virtual_byte(unsigned seg, bx_address offset, Bit8u *data) __attribute__((regparm(3)));
|
|
+ BX_SMF void read_virtual_word(unsigned seg, bx_address offset, Bit16u *data) __attribute__((regparm(3)));
|
|
+ BX_SMF void read_virtual_dword(unsigned seg, bx_address offset, Bit32u *data) __attribute__((regparm(3)));
|
|
+ BX_SMF void read_virtual_qword(unsigned seg, bx_address offset, Bit64u *data) __attribute__((regparm(3)));
|
|
+
|
|
+ BX_SMF void read_RMW_virtual_byte(unsigned seg, bx_address offset, Bit8u *data) __attribute__((regparm(3)));
|
|
+ BX_SMF void read_RMW_virtual_word(unsigned seg, bx_address offset, Bit16u *data) __attribute__((regparm(3)));
|
|
+ BX_SMF void read_RMW_virtual_dword(unsigned seg, bx_address offset, Bit32u *data) __attribute__((regparm(3)));
|
|
+ BX_SMF void read_RMW_virtual_qword(unsigned seg, bx_address offset, Bit64u *data) __attribute__((regparm(3)));
|
|
+ BX_SMF void write_RMW_virtual_byte(Bit8u val8) __attribute__((regparm(1)));
|
|
+ BX_SMF void write_RMW_virtual_word(Bit16u val16) __attribute__((regparm(1)));
|
|
BX_SMF void write_RMW_virtual_dword(Bit32u val32);
|
|
BX_SMF void write_RMW_virtual_qword(Bit64u val64);
|
|
|
|
@@ -2723,13 +2723,13 @@
|
|
|
|
|
|
BX_SMF void access_linear(bx_address address, unsigned length, unsigned pl,
|
|
- unsigned rw, void *data);
|
|
- BX_SMF Bit32u itranslate_linear(bx_address laddr, unsigned pl);
|
|
- BX_SMF Bit32u dtranslate_linear(bx_address laddr, unsigned pl, unsigned rw);
|
|
+ unsigned rw, void *data) __attribute__((regparm(3)));
|
|
+ BX_SMF Bit32u itranslate_linear(bx_address laddr, unsigned pl) __attribute__((regparm(2)));
|
|
+ BX_SMF Bit32u dtranslate_linear(bx_address laddr, unsigned pl, unsigned rw) __attribute__((regparm(3)));
|
|
BX_SMF void TLB_flush(bx_bool invalidateGlobal);
|
|
BX_SMF void TLB_init(void);
|
|
BX_SMF void set_INTR(bx_bool value);
|
|
- BX_SMF char *strseg(bx_segment_reg_t *seg);
|
|
+ BX_SMF char *strseg(bx_segment_reg_t *seg) __attribute__((regparm(1)));
|
|
BX_SMF void interrupt(Bit8u vector, bx_bool is_INT, bx_bool is_error_code,
|
|
Bit16u error_code);
|
|
#if BX_CPU_LEVEL >= 2
|
|
@@ -2738,17 +2738,17 @@
|
|
#endif
|
|
BX_SMF int int_number(bx_segment_reg_t *seg);
|
|
BX_SMF void shutdown_cpu(void);
|
|
- BX_SMF void CR3_change(bx_address value);
|
|
- BX_SMF void pagingCR0Changed(Bit32u oldCR0, Bit32u newCR0);
|
|
- BX_SMF void pagingCR4Changed(Bit32u oldCR4, Bit32u newCR4);
|
|
+ BX_SMF void CR3_change(bx_address value) __attribute__((regparm(1)));
|
|
+ BX_SMF void pagingCR0Changed(Bit32u oldCR0, Bit32u newCR0) __attribute__((regparm(2)));
|
|
+ BX_SMF void pagingCR4Changed(Bit32u oldCR4, Bit32u newCR4) __attribute__((regparm(2)));
|
|
BX_SMF void pagingA20Changed(void);
|
|
|
|
BX_SMF void reset(unsigned source);
|
|
|
|
- BX_SMF void jump_protected(bxInstruction_c *, Bit16u cs, bx_address disp);
|
|
- BX_SMF void call_protected(bxInstruction_c *, Bit16u cs, bx_address disp);
|
|
- BX_SMF void return_protected(bxInstruction_c *, Bit16u pop_bytes);
|
|
- BX_SMF void iret_protected(bxInstruction_c *);
|
|
+ BX_SMF void jump_protected(bxInstruction_c *, Bit16u cs, bx_address disp) __attribute__((regparm(3)));
|
|
+ BX_SMF void call_protected(bxInstruction_c *, Bit16u cs, bx_address disp) __attribute__((regparm(3)));
|
|
+ BX_SMF void return_protected(bxInstruction_c *, Bit16u pop_bytes) __attribute__((regparm(2)));
|
|
+ BX_SMF void iret_protected(bxInstruction_c *) __attribute__((regparm(1)));
|
|
BX_SMF void validate_seg_regs(void);
|
|
BX_SMF void stack_return_to_v86(Bit32u new_eip, Bit32u raw_cs_selector,
|
|
Bit32u flags32);
|
|
@@ -2763,38 +2763,38 @@
|
|
#if BX_SUPPORT_X86_64
|
|
BX_SMF void get_RSP_from_TSS(unsigned pl, Bit64u *rsp);
|
|
#endif
|
|
- BX_SMF void write_flags(Bit16u flags, bx_bool change_IOPL, bx_bool change_IF);
|
|
+ BX_SMF void write_flags(Bit16u flags, bx_bool change_IOPL, bx_bool change_IF) __attribute__((regparm(3)));
|
|
BX_SMF void write_eflags(Bit32u eflags, bx_bool change_IOPL, bx_bool change_IF,
|
|
bx_bool change_VM, bx_bool change_RF);
|
|
- BX_SMF void writeEFlags(Bit32u eflags, Bit32u changeMask); // Newer variant.
|
|
+ BX_SMF void writeEFlags(Bit32u eflags, Bit32u changeMask) __attribute__((regparm(2))); // Newer variant.
|
|
BX_SMF Bit16u read_flags(void);
|
|
BX_SMF Bit32u read_eflags(void);
|
|
BX_SMF Bit32u get_segment_base(unsigned seg);
|
|
|
|
- BX_SMF Bit8u inp8(Bit16u addr);
|
|
- BX_SMF void outp8(Bit16u addr, Bit8u value);
|
|
- BX_SMF Bit16u inp16(Bit16u addr);
|
|
- BX_SMF void outp16(Bit16u addr, Bit16u value);
|
|
- BX_SMF Bit32u inp32(Bit16u addr);
|
|
- BX_SMF void outp32(Bit16u addr, Bit32u value);
|
|
+ BX_SMF Bit8u inp8(Bit16u addr) __attribute__((regparm(1)));
|
|
+ BX_SMF void outp8(Bit16u addr, Bit8u value) __attribute__((regparm(2)));
|
|
+ BX_SMF Bit16u inp16(Bit16u addr) __attribute__((regparm(1)));
|
|
+ BX_SMF void outp16(Bit16u addr, Bit16u value) __attribute__((regparm(2)));
|
|
+ BX_SMF Bit32u inp32(Bit16u addr) __attribute__((regparm(1)));
|
|
+ BX_SMF void outp32(Bit16u addr, Bit32u value) __attribute__((regparm(2)));
|
|
BX_SMF bx_bool allow_io(Bit16u addr, unsigned len);
|
|
BX_SMF void enter_protected_mode(void);
|
|
BX_SMF void enter_real_mode(void);
|
|
- BX_SMF void parse_selector(Bit16u raw_selector, bx_selector_t *selector);
|
|
- BX_SMF void parse_descriptor(Bit32u dword1, Bit32u dword2, bx_descriptor_t *temp);
|
|
+ BX_SMF void parse_selector(Bit16u raw_selector, bx_selector_t *selector) __attribute__((regparm(2)));
|
|
+ BX_SMF void parse_descriptor(Bit32u dword1, Bit32u dword2, bx_descriptor_t *temp) __attribute__((regparm(3)));
|
|
BX_SMF void load_ldtr(bx_selector_t *selector, bx_descriptor_t *descriptor);
|
|
- BX_SMF void load_cs(bx_selector_t *selector, bx_descriptor_t *descriptor, Bit8u cpl);
|
|
- BX_SMF void load_ss(bx_selector_t *selector, bx_descriptor_t *descriptor, Bit8u cpl);
|
|
+ BX_SMF void load_cs(bx_selector_t *selector, bx_descriptor_t *descriptor, Bit8u cpl) __attribute__((regparm(3)));
|
|
+ BX_SMF void load_ss(bx_selector_t *selector, bx_descriptor_t *descriptor, Bit8u cpl) __attribute__((regparm(3)));
|
|
BX_SMF void fetch_raw_descriptor(bx_selector_t *selector,
|
|
- Bit32u *dword1, Bit32u *dword2, Bit8u exception);
|
|
- BX_SMF void load_seg_reg(bx_segment_reg_t *seg, Bit16u new_value);
|
|
+ Bit32u *dword1, Bit32u *dword2, Bit8u exception) __attribute__((regparm(3)));
|
|
+ BX_SMF void load_seg_reg(bx_segment_reg_t *seg, Bit16u new_value) __attribute__((regparm(2)));
|
|
#if BX_SUPPORT_X86_64
|
|
BX_SMF void loadSRegLMNominal(unsigned seg, unsigned selector,
|
|
bx_address base, unsigned dpl);
|
|
#endif
|
|
BX_SMF bx_bool fetch_raw_descriptor2(bx_selector_t *selector,
|
|
- Bit32u *dword1, Bit32u *dword2);
|
|
- BX_SMF void push_16(Bit16u value16);
|
|
+ Bit32u *dword1, Bit32u *dword2) __attribute__((regparm(3)));
|
|
+ BX_SMF void push_16(Bit16u value16) __attribute__((regparm(1)));
|
|
BX_SMF void push_32(Bit32u value32);
|
|
#if BX_SUPPORT_X86_64
|
|
BX_SMF void push_64(Bit64u value64);
|
|
@@ -2804,7 +2804,7 @@
|
|
#if BX_SUPPORT_X86_64
|
|
BX_SMF void pop_64(Bit64u *value64_ptr);
|
|
#endif
|
|
- BX_SMF bx_bool can_push(bx_descriptor_t *descriptor, Bit32u esp, Bit32u bytes);
|
|
+ BX_SMF bx_bool can_push(bx_descriptor_t *descriptor, Bit32u esp, Bit32u bytes) __attribute__((regparm(3)));
|
|
BX_SMF bx_bool can_pop(Bit32u bytes);
|
|
BX_SMF void sanity_checks(void);
|
|
|
|
Index: cpu/ctrl_xfer_pro.cc
|
|
===================================================================
|
|
RCS file: /cvsroot/bochs/bochs/cpu/ctrl_xfer_pro.cc,v
|
|
retrieving revision 1.21
|
|
diff -u -r1.21 ctrl_xfer_pro.cc
|
|
--- cpu/ctrl_xfer_pro.cc 3 Oct 2002 04:49:47 -0000 1.21
|
|
+++ cpu/ctrl_xfer_pro.cc 12 Feb 2003 14:12:35 -0000
|
|
@@ -41,7 +41,7 @@
|
|
|
|
|
|
#if BX_CPU_LEVEL >= 2
|
|
- void
|
|
+ void __attribute__((regparm(3)))
|
|
BX_CPU_C::jump_protected(bxInstruction_c *i, Bit16u cs_raw, bx_address dispBig)
|
|
{
|
|
bx_descriptor_t descriptor;
|
|
@@ -456,7 +456,7 @@
|
|
|
|
|
|
#if BX_CPU_LEVEL >= 2
|
|
- void
|
|
+ void __attribute__((regparm(3)))
|
|
BX_CPU_C::call_protected(bxInstruction_c *i, Bit16u cs_raw, bx_address dispBig)
|
|
{
|
|
bx_selector_t cs_selector;
|
|
@@ -1041,7 +1041,7 @@
|
|
|
|
|
|
#if BX_CPU_LEVEL >= 2
|
|
- void
|
|
+ void __attribute__((regparm(2)))
|
|
BX_CPU_C::return_protected(bxInstruction_c *i, Bit16u pop_bytes)
|
|
{
|
|
Bit16u raw_cs_selector, raw_ss_selector;
|
|
@@ -1379,7 +1379,7 @@
|
|
|
|
|
|
#if BX_CPU_LEVEL >= 2
|
|
- void
|
|
+ void __attribute__((regparm(1)))
|
|
BX_CPU_C::iret_protected(bxInstruction_c *i)
|
|
{
|
|
Bit16u raw_cs_selector, raw_ss_selector;
|
|
Index: cpu/flag_ctrl_pro.cc
|
|
===================================================================
|
|
RCS file: /cvsroot/bochs/bochs/cpu/flag_ctrl_pro.cc,v
|
|
retrieving revision 1.13
|
|
diff -u -r1.13 flag_ctrl_pro.cc
|
|
--- cpu/flag_ctrl_pro.cc 25 Oct 2002 11:44:35 -0000 1.13
|
|
+++ cpu/flag_ctrl_pro.cc 12 Feb 2003 14:12:35 -0000
|
|
@@ -32,7 +32,7 @@
|
|
|
|
|
|
|
|
- void
|
|
+ void __attribute__((regparm(2)))
|
|
BX_CPU_C::writeEFlags(Bit32u flags, Bit32u changeMask)
|
|
{
|
|
Bit32u supportMask, newEFlags;
|
|
@@ -58,7 +58,7 @@
|
|
}
|
|
|
|
|
|
- void
|
|
+ void __attribute__((regparm(3)))
|
|
BX_CPU_C::write_flags(Bit16u flags, bx_bool change_IOPL, bx_bool change_IF)
|
|
{
|
|
Bit32u changeMask = 0x0dd5;
|
|
Index: cpu/io_pro.cc
|
|
===================================================================
|
|
RCS file: /cvsroot/bochs/bochs/cpu/io_pro.cc,v
|
|
retrieving revision 1.11
|
|
diff -u -r1.11 io_pro.cc
|
|
--- cpu/io_pro.cc 25 Oct 2002 11:44:35 -0000 1.11
|
|
+++ cpu/io_pro.cc 12 Feb 2003 14:12:35 -0000
|
|
@@ -37,7 +37,7 @@
|
|
|
|
|
|
|
|
- Bit16u
|
|
+ Bit16u __attribute__((regparm(1)))
|
|
BX_CPU_C::inp16(Bit16u addr)
|
|
{
|
|
Bit16u ret16;
|
|
@@ -54,7 +54,7 @@
|
|
return( ret16 );
|
|
}
|
|
|
|
- void
|
|
+ void __attribute__((regparm(2)))
|
|
BX_CPU_C::outp16(Bit16u addr, Bit16u value)
|
|
{
|
|
/* If CPL <= IOPL, then all IO addresses are accessible.
|
|
@@ -72,7 +72,7 @@
|
|
BX_OUTP(addr, value, 2);
|
|
}
|
|
|
|
- Bit32u
|
|
+ Bit32u __attribute__((regparm(1)))
|
|
BX_CPU_C::inp32(Bit16u addr)
|
|
{
|
|
Bit32u ret32;
|
|
@@ -89,7 +89,7 @@
|
|
return( ret32 );
|
|
}
|
|
|
|
- void
|
|
+ void __attribute__((regparm(2)))
|
|
BX_CPU_C::outp32(Bit16u addr, Bit32u value)
|
|
{
|
|
/* If CPL <= IOPL, then all IO addresses are accessible.
|
|
@@ -107,7 +107,7 @@
|
|
BX_OUTP(addr, value, 4);
|
|
}
|
|
|
|
- Bit8u
|
|
+ Bit8u __attribute__((regparm(1)))
|
|
BX_CPU_C::inp8(Bit16u addr)
|
|
{
|
|
Bit8u ret8;
|
|
@@ -125,7 +125,7 @@
|
|
}
|
|
|
|
|
|
- void
|
|
+ void __attribute__((regparm(2)))
|
|
BX_CPU_C::outp8(Bit16u addr, Bit8u value)
|
|
{
|
|
/* If CPL <= IOPL, then all IO addresses are accessible.
|
|
Index: cpu/mmx.cc
|
|
===================================================================
|
|
RCS file: /cvsroot/bochs/bochs/cpu/mmx.cc,v
|
|
retrieving revision 1.28
|
|
diff -u -r1.28 mmx.cc
|
|
--- cpu/mmx.cc 9 Jan 2003 05:21:22 -0000 1.28
|
|
+++ cpu/mmx.cc 12 Feb 2003 14:12:37 -0000
|
|
@@ -27,7 +27,8 @@
|
|
|
|
#if BX_SUPPORT_MMX || BX_SUPPORT_SSE != 0
|
|
|
|
-Bit8s SaturateWordSToByteS(Bit16s value)
|
|
+Bit8s __attribute__((regparm(1)))
|
|
+SaturateWordSToByteS(Bit16s value)
|
|
{
|
|
/*
|
|
SaturateWordSToByteS converts a signed 16-bit value to a
|
|
@@ -40,7 +41,8 @@
|
|
return value;
|
|
}
|
|
|
|
-Bit16s SaturateDwordSToWordS(Bit32s value)
|
|
+Bit16s __attribute__((regparm(1)))
|
|
+SaturateDwordSToWordS(Bit32s value)
|
|
{
|
|
/*
|
|
SaturateDwordSToWordS converts a signed 32-bit value to a
|
|
@@ -54,7 +56,8 @@
|
|
return value;
|
|
}
|
|
|
|
-Bit8u SaturateWordSToByteU(Bit16s value)
|
|
+Bit8u __attribute__((regparm(1)))
|
|
+SaturateWordSToByteU(Bit16s value)
|
|
{
|
|
/*
|
|
SaturateWordSToByteU converts a signed 16-bit value to an
|
|
@@ -67,7 +70,8 @@
|
|
return value;
|
|
}
|
|
|
|
-Bit16u SaturateDwordSToWordU(Bit32s value)
|
|
+Bit16u __attribute__((regparm(1)))
|
|
+SaturateDwordSToWordU(Bit32s value)
|
|
{
|
|
/*
|
|
SaturateDwordSToWordU converts a signed 32-bit value
|
|
Index: cpu/paging.cc
|
|
===================================================================
|
|
RCS file: /cvsroot/bochs/bochs/cpu/paging.cc,v
|
|
retrieving revision 1.38
|
|
diff -u -r1.38 paging.cc
|
|
--- cpu/paging.cc 4 Nov 2002 05:38:12 -0000 1.38
|
|
+++ cpu/paging.cc 12 Feb 2003 14:12:37 -0000
|
|
@@ -387,7 +387,7 @@
|
|
// ==============================================================
|
|
|
|
|
|
- void
|
|
+ void __attribute__((regparm(2)))
|
|
BX_CPU_C::pagingCR0Changed(Bit32u oldCR0, Bit32u newCR0)
|
|
{
|
|
// Modification of PG,PE flushes TLB cache according to docs.
|
|
@@ -400,7 +400,7 @@
|
|
BX_INFO(("pagingCR0Changed(0x%x -> 0x%x):", oldCR0, newCR0));
|
|
}
|
|
|
|
- void
|
|
+ void __attribute__((regparm(2)))
|
|
BX_CPU_C::pagingCR4Changed(Bit32u oldCR4, Bit32u newCR4)
|
|
{
|
|
// Modification of PGE,PAE,PSE flushes TLB cache according to docs.
|
|
@@ -411,7 +411,7 @@
|
|
BX_INFO(("pagingCR4Changed(0x%x -> 0x%x):", oldCR4, newCR4));
|
|
}
|
|
|
|
- void
|
|
+ void __attribute__((regparm(1)))
|
|
BX_CPU_C::CR3_change(bx_address value)
|
|
{
|
|
if (bx_dbg.paging) {
|
|
@@ -570,7 +570,7 @@
|
|
// Translate a linear address to a physical address, for
|
|
// a data access (D)
|
|
|
|
- Bit32u
|
|
+ Bit32u __attribute__((regparm(3)))
|
|
BX_CPU_C::dtranslate_linear(bx_address laddr, unsigned pl, unsigned rw)
|
|
{
|
|
bx_address lpf;
|
|
@@ -991,7 +991,7 @@
|
|
// Translate a linear address to a physical address, for
|
|
// an instruction fetch access (I)
|
|
|
|
- Bit32u
|
|
+ Bit32u __attribute__((regparm(2)))
|
|
BX_CPU_C::itranslate_linear(bx_address laddr, unsigned pl)
|
|
{
|
|
return dtranslate_linear(laddr, pl, BX_READ);
|
|
@@ -1066,7 +1066,7 @@
|
|
|
|
|
|
|
|
- void
|
|
+ void __attribute__((regparm(3)))
|
|
BX_CPU_C::access_linear(bx_address laddr, unsigned length, unsigned pl,
|
|
unsigned rw, void *data)
|
|
{
|
|
Index: cpu/segment_ctrl_pro.cc
|
|
===================================================================
|
|
RCS file: /cvsroot/bochs/bochs/cpu/segment_ctrl_pro.cc,v
|
|
retrieving revision 1.23
|
|
diff -u -r1.23 segment_ctrl_pro.cc
|
|
--- cpu/segment_ctrl_pro.cc 25 Oct 2002 11:44:35 -0000 1.23
|
|
+++ cpu/segment_ctrl_pro.cc 12 Feb 2003 14:12:37 -0000
|
|
@@ -37,7 +37,7 @@
|
|
|
|
|
|
|
|
- void
|
|
+ void __attribute__((regparm(2)))
|
|
BX_CPU_C::load_seg_reg(bx_segment_reg_t *seg, Bit16u new_value)
|
|
{
|
|
#if BX_CPU_LEVEL >= 3
|
|
@@ -376,7 +376,7 @@
|
|
|
|
|
|
#if BX_CPU_LEVEL >= 2
|
|
- void
|
|
+ void __attribute__((regparm(2)))
|
|
BX_CPU_C::parse_selector(Bit16u raw_selector, bx_selector_t *selector)
|
|
{
|
|
selector->value = raw_selector;
|
|
@@ -386,7 +386,7 @@
|
|
}
|
|
#endif
|
|
|
|
- void
|
|
+ void __attribute__((regparm(3)))
|
|
BX_CPU_C::parse_descriptor(Bit32u dword1, Bit32u dword2, bx_descriptor_t *temp)
|
|
{
|
|
Bit8u AR_byte;
|
|
@@ -504,7 +504,7 @@
|
|
}
|
|
}
|
|
|
|
- void
|
|
+ void __attribute__((regparm(2)))
|
|
BX_CPU_C::load_ldtr(bx_selector_t *selector, bx_descriptor_t *descriptor)
|
|
{
|
|
/* check for null selector, if so invalidate LDTR */
|
|
@@ -527,7 +527,7 @@
|
|
BX_CPU_THIS_PTR ldtr.cache.valid = 1;
|
|
}
|
|
|
|
- void
|
|
+ void __attribute__((regparm(3)))
|
|
BX_CPU_C::load_cs(bx_selector_t *selector, bx_descriptor_t *descriptor,
|
|
Bit8u cpl)
|
|
{
|
|
@@ -559,7 +559,7 @@
|
|
#endif
|
|
}
|
|
|
|
- void
|
|
+ void __attribute__((regparm(3)))
|
|
BX_CPU_C::load_ss(bx_selector_t *selector, bx_descriptor_t *descriptor, Bit8u cpl)
|
|
{
|
|
BX_CPU_THIS_PTR sregs[BX_SEG_REG_SS].selector = *selector;
|
|
@@ -581,7 +581,7 @@
|
|
}
|
|
|
|
#if BX_CPU_LEVEL >= 2
|
|
- void
|
|
+ void __attribute__((regparm(3)))
|
|
BX_CPU_C::fetch_raw_descriptor(bx_selector_t *selector,
|
|
Bit32u *dword1, Bit32u *dword2, Bit8u exception_no)
|
|
{
|
|
@@ -624,7 +624,7 @@
|
|
|
|
|
|
|
|
- bx_bool
|
|
+ bx_bool __attribute__((regparm(3)))
|
|
BX_CPU_C::fetch_raw_descriptor2(bx_selector_t *selector,
|
|
Bit32u *dword1, Bit32u *dword2)
|
|
{
|
|
Index: cpu/stack_pro.cc
|
|
===================================================================
|
|
RCS file: /cvsroot/bochs/bochs/cpu/stack_pro.cc,v
|
|
retrieving revision 1.12
|
|
diff -u -r1.12 stack_pro.cc
|
|
--- cpu/stack_pro.cc 7 Nov 2002 15:42:14 -0000 1.12
|
|
+++ cpu/stack_pro.cc 12 Feb 2003 14:12:37 -0000
|
|
@@ -36,7 +36,7 @@
|
|
|
|
|
|
|
|
- void
|
|
+ void __attribute__((regparm(1)))
|
|
BX_CPU_C::push_16(Bit16u value16)
|
|
{
|
|
BailBigRSP("push_16");
|
|
@@ -238,7 +238,7 @@
|
|
|
|
|
|
#if BX_CPU_LEVEL >= 2
|
|
- bx_bool
|
|
+ bx_bool __attribute__((regparm(3)))
|
|
BX_CPU_C::can_push(bx_descriptor_t *descriptor, Bit32u esp, Bit32u bytes)
|
|
{
|
|
#if BX_SUPPORT_X86_64
|
|
Index: cpu/xmm.h
|
|
===================================================================
|
|
RCS file: /cvsroot/bochs/bochs/cpu/xmm.h,v
|
|
retrieving revision 1.8
|
|
diff -u -r1.8 xmm.h
|
|
--- cpu/xmm.h 23 Jan 2003 18:33:35 -0000 1.8
|
|
+++ cpu/xmm.h 12 Feb 2003 14:12:38 -0000
|
|
@@ -89,7 +89,7 @@
|
|
is represented by the saturated value -128 (0x80). If it is greater
|
|
than 127, it is represented by the saturated value 127 (0x7F).
|
|
*/
|
|
-Bit8s SaturateWordSToByteS(Bit16s value);
|
|
+Bit8s SaturateWordSToByteS(Bit16s value) __attribute__((regparm(1)));
|
|
|
|
/*
|
|
SaturateDwordSToWordS converts a signed 32-bit value to a
|
|
@@ -98,7 +98,7 @@
|
|
greater than 32767, it is represented by the saturated value 32767
|
|
(0x7FFF).
|
|
*/
|
|
-Bit16s SaturateDwordSToWordS(Bit32s value);
|
|
+Bit16s SaturateDwordSToWordS(Bit32s value) __attribute__((regparm(1)));
|
|
|
|
/*
|
|
SaturateWordSToByteU converts a signed 16-bit value to an
|
|
@@ -106,7 +106,7 @@
|
|
is represented by the saturated value zero (0x00).If it is greater
|
|
than 255 it is represented by the saturated value 255 (0xFF).
|
|
*/
|
|
-Bit8u SaturateWordSToByteU(Bit16s value);
|
|
+Bit8u SaturateWordSToByteU(Bit16s value) __attribute__((regparm(1)));
|
|
|
|
/*
|
|
SaturateDwordSToWordU converts a signed 32-bit value
|
|
@@ -115,6 +115,6 @@
|
|
(0x0000). If it is greater than 65535, it is represented by
|
|
the saturated value 65535 (0xFFFF).
|
|
*/
|
|
-Bit16u SaturateDwordSToWordU(Bit32s value);
|
|
+Bit16u SaturateDwordSToWordU(Bit32s value) __attribute__((regparm(1)));
|
|
|
|
#endif
|
|
Index: fpu/fpu_proto.h
|
|
===================================================================
|
|
RCS file: /cvsroot/bochs/bochs/fpu/fpu_proto.h,v
|
|
retrieving revision 1.4
|
|
diff -u -r1.4 fpu_proto.h
|
|
--- fpu/fpu_proto.h 6 Oct 2001 04:35:13 -0000 1.4
|
|
+++ fpu/fpu_proto.h 12 Feb 2003 14:12:38 -0000
|
|
@@ -93,20 +93,20 @@
|
|
extern void FPU_etc(void);
|
|
/* fpu_tags.c */
|
|
extern int FPU_gettag0(void);
|
|
-extern int FPU_gettagi(int stnr);
|
|
-extern int FPU_gettag(int regnr);
|
|
-extern void FPU_settag0(int tag);
|
|
-extern void FPU_settagi(int stnr, int tag);
|
|
-extern void FPU_settag(int regnr, int tag);
|
|
-extern int FPU_Special(FPU_REG const *ptr);
|
|
-extern int isNaN(FPU_REG const *ptr);
|
|
+extern int FPU_gettagi(int stnr) __attribute__((regparm(1)));
|
|
+extern int FPU_gettag(int regnr) __attribute__((regparm(1)));
|
|
+extern void FPU_settag0(int tag) __attribute__((regparm(1)));
|
|
+extern void FPU_settagi(int stnr, int tag) __attribute__((regparm(2)));
|
|
+extern void FPU_settag(int regnr, int tag) __attribute__((regparm(2)));
|
|
+extern int FPU_Special(FPU_REG const *ptr) __attribute__((regparm(1)));
|
|
+extern int isNaN(FPU_REG const *ptr) __attribute__((regparm(1)));
|
|
extern void FPU_pop(void);
|
|
-extern int FPU_empty_i(int stnr);
|
|
+extern int FPU_empty_i(int stnr) __attribute__((regparm(1)));
|
|
extern int FPU_stackoverflow(FPU_REG **st_new_ptr);
|
|
extern void FPU_sync_tags(void);
|
|
-extern void FPU_copy_to_regi(FPU_REG const *r, u_char tag, int stnr);
|
|
-extern void FPU_copy_to_reg1(FPU_REG const *r, u_char tag);
|
|
-extern void FPU_copy_to_reg0(FPU_REG const *r, u_char tag);
|
|
+extern void FPU_copy_to_regi(FPU_REG const *r, u_char tag, int stnr) __attribute__((regparm(3)));
|
|
+extern void FPU_copy_to_reg1(FPU_REG const *r, u_char tag) __attribute__((regparm(2)));
|
|
+extern void FPU_copy_to_reg0(FPU_REG const *r, u_char tag) __attribute__((regparm(2)));
|
|
/* fpu_trig.c */
|
|
extern void FPU_triga(void);
|
|
extern void FPU_trigb(void);
|
|
@@ -146,32 +146,32 @@
|
|
/* reg_constant.c */
|
|
extern void fconst(void);
|
|
/* reg_ld_str.c */
|
|
-extern int FPU_load_extended(long double *s, int stnr);
|
|
-extern int FPU_load_double(double *dfloat, FPU_REG *loaded_data);
|
|
-extern int FPU_load_single(float *single, FPU_REG *loaded_data);
|
|
-extern int FPU_load_int64(s64 *_s);
|
|
-extern int FPU_load_int32(s32 *_s, FPU_REG *loaded_data);
|
|
-extern int FPU_load_int16(s16 *_s, FPU_REG *loaded_data);
|
|
-extern int FPU_load_bcd(u_char *s);
|
|
+extern int FPU_load_extended(long double *s, int stnr) __attribute__((regparm(2)));
|
|
+extern int FPU_load_double(double *dfloat, FPU_REG *loaded_data) __attribute__((regparm(2)));
|
|
+extern int FPU_load_single(float *single, FPU_REG *loaded_data) __attribute__((regparm(2)));
|
|
+extern int FPU_load_int64(s64 *_s) __attribute__((regparm(1)));
|
|
+extern int FPU_load_int32(s32 *_s, FPU_REG *loaded_data) __attribute__((regparm(2)));
|
|
+extern int FPU_load_int16(s16 *_s, FPU_REG *loaded_data) __attribute__((regparm(2)));
|
|
+extern int FPU_load_bcd(u_char *s) __attribute__((regparm(1)));
|
|
extern int FPU_store_extended(FPU_REG *st0_ptr, u_char st0_tag,
|
|
- long double *d);
|
|
-extern int FPU_store_double(FPU_REG *st0_ptr, u_char st0_tag, double *dfloat);
|
|
-extern int FPU_store_single(FPU_REG *st0_ptr, u_char st0_tag, float *single);
|
|
-extern int FPU_store_int64(FPU_REG *st0_ptr, u_char st0_tag, s64 *d);
|
|
-extern int FPU_store_int32(FPU_REG *st0_ptr, u_char st0_tag, s32 *d);
|
|
-extern int FPU_store_int16(FPU_REG *st0_ptr, u_char st0_tag, s16 *d);
|
|
-extern int FPU_store_bcd(FPU_REG *st0_ptr, u_char st0_tag, u_char *d);
|
|
-extern int FPU_round_to_int(FPU_REG *r, u_char tag);
|
|
-extern u_char *fldenv(fpu_addr_modes addr_modes, u_char *s);
|
|
-extern void frstor(fpu_addr_modes addr_modes, u_char *data_address);
|
|
-extern u_char *fstenv(fpu_addr_modes addr_modes, u_char *d);
|
|
-extern void fsave(fpu_addr_modes addr_modes, u_char *data_address);
|
|
-extern int FPU_tagof(FPU_REG *ptr);
|
|
+ long double *d) __attribute__((regparm(3)));
|
|
+extern int FPU_store_double(FPU_REG *st0_ptr, u_char st0_tag, double *dfloat) __attribute__((regparm(3)));
|
|
+extern int FPU_store_single(FPU_REG *st0_ptr, u_char st0_tag, float *single) __attribute__((regparm(3)));
|
|
+extern int FPU_store_int64(FPU_REG *st0_ptr, u_char st0_tag, s64 *d) __attribute__((regparm(3)));
|
|
+extern int FPU_store_int32(FPU_REG *st0_ptr, u_char st0_tag, s32 *d) __attribute__((regparm(3)));
|
|
+extern int FPU_store_int16(FPU_REG *st0_ptr, u_char st0_tag, s16 *d) __attribute__((regparm(3)));
|
|
+extern int FPU_store_bcd(FPU_REG *st0_ptr, u_char st0_tag, u_char *d) __attribute__((regparm(3)));
|
|
+extern int FPU_round_to_int(FPU_REG *r, u_char tag) __attribute__((regparm(2)));
|
|
+extern u_char *fldenv(fpu_addr_modes addr_modes, u_char *s) __attribute__((regparm(2)));
|
|
+extern void frstor(fpu_addr_modes addr_modes, u_char *data_address) __attribute__((regparm(2)));
|
|
+extern u_char *fstenv(fpu_addr_modes addr_modes, u_char *d) __attribute__((regparm(2)));
|
|
+extern void fsave(fpu_addr_modes addr_modes, u_char *data_address) __attribute__((regparm(2)));
|
|
+extern int FPU_tagof(FPU_REG *ptr) __attribute__((regparm(1)));
|
|
/* reg_mul.c */
|
|
extern int FPU_mul(FPU_REG const *b, u_char tagb, int deststnr, int control_w);
|
|
|
|
extern int FPU_div(int flags, FPU_REG *regrm, int control_w); // bbd: changed arg2 from int to FPU_REG*
|
|
/* reg_convert.c */
|
|
-extern int FPU_to_exp16(FPU_REG const *a, FPU_REG *x);
|
|
+extern int FPU_to_exp16(FPU_REG const *a, FPU_REG *x) __attribute__((regparm(2)));
|
|
#endif /* _FPU_PROTO_H */
|
|
|
|
Index: fpu/fpu_system.h
|
|
===================================================================
|
|
RCS file: /cvsroot/bochs/bochs/fpu/fpu_system.h,v
|
|
retrieving revision 1.5
|
|
diff -u -r1.5 fpu_system.h
|
|
--- fpu/fpu_system.h 23 Jan 2003 18:33:35 -0000 1.5
|
|
+++ fpu/fpu_system.h 12 Feb 2003 14:12:38 -0000
|
|
@@ -115,10 +115,10 @@
|
|
#endif
|
|
|
|
|
|
-extern unsigned fpu_get_user(void *ptr, unsigned len);
|
|
-extern void fpu_put_user(unsigned val, void *ptr, unsigned len);
|
|
+extern unsigned fpu_get_user(void *ptr, unsigned len) __attribute__((regparm(2)));
|
|
+extern void fpu_put_user(unsigned val, void *ptr, unsigned len) __attribute__((regparm(2)));
|
|
|
|
-extern void fpu_verify_area(unsigned what, void *ptr, unsigned n);
|
|
+extern void fpu_verify_area(unsigned what, void *ptr, unsigned n) __attribute__((regparm(3)));
|
|
extern void math_emulate_init(void);
|
|
extern unsigned fpu_get_ds(void);
|
|
extern void fpu_set_ax(u16);
|
|
Index: fpu/fpu_tags.c
|
|
===================================================================
|
|
RCS file: /cvsroot/bochs/bochs/fpu/fpu_tags.c,v
|
|
retrieving revision 1.2
|
|
diff -u -r1.2 fpu_tags.c
|
|
--- fpu/fpu_tags.c 6 Oct 2001 03:53:46 -0000 1.2
|
|
+++ fpu/fpu_tags.c 12 Feb 2003 14:12:38 -0000
|
|
@@ -29,19 +29,22 @@
|
|
}
|
|
|
|
|
|
-int FPU_gettagi(int stnr)
|
|
+int __attribute__((regparm(1)))
|
|
+FPU_gettagi(int stnr)
|
|
{
|
|
return (fpu_tag_word >> (((top+stnr) & 7)*2)) & 3;
|
|
}
|
|
|
|
|
|
-int FPU_gettag(int regnr)
|
|
+int __attribute__((regparm(1)))
|
|
+FPU_gettag(int regnr)
|
|
{
|
|
return (fpu_tag_word >> ((regnr & 7)*2)) & 3;
|
|
}
|
|
|
|
|
|
-void FPU_settag0(int tag)
|
|
+void __attribute__((regparm(1)))
|
|
+FPU_settag0(int tag)
|
|
{
|
|
int regnr = top;
|
|
regnr &= 7;
|
|
@@ -50,7 +53,8 @@
|
|
}
|
|
|
|
|
|
-void FPU_settagi(int stnr, int tag)
|
|
+void __attribute__((regparm(2)))
|
|
+FPU_settagi(int stnr, int tag)
|
|
{
|
|
int regnr = stnr+top;
|
|
regnr &= 7;
|
|
@@ -59,7 +63,8 @@
|
|
}
|
|
|
|
|
|
-void FPU_settag(int regnr, int tag)
|
|
+void __attribute__((regparm(2)))
|
|
+FPU_settag(int regnr, int tag)
|
|
{
|
|
regnr &= 7;
|
|
fpu_tag_word &= ~(3 << (regnr*2));
|
|
@@ -67,7 +72,8 @@
|
|
}
|
|
|
|
|
|
-int FPU_Special(FPU_REG const *ptr)
|
|
+int __attribute__((regparm(1)))
|
|
+FPU_Special(FPU_REG const *ptr)
|
|
{
|
|
int exp = exponent(ptr);
|
|
|
|
@@ -81,14 +87,16 @@
|
|
}
|
|
|
|
|
|
-int isNaN(FPU_REG const *ptr)
|
|
+int __attribute__((regparm(1)))
|
|
+isNaN(FPU_REG const *ptr)
|
|
{
|
|
return ( (exponent(ptr) == EXP_BIAS+EXP_OVER)
|
|
&& !((ptr->sigh == 0x80000000) && (ptr->sigl == 0)) );
|
|
}
|
|
|
|
|
|
-int FPU_empty_i(int stnr)
|
|
+int __attribute__((regparm(1)))
|
|
+FPU_empty_i(int stnr)
|
|
{
|
|
int regnr = (top+stnr) & 7;
|
|
|
|
@@ -104,19 +112,22 @@
|
|
}
|
|
|
|
|
|
-void FPU_copy_to_regi(FPU_REG const *r, u_char tag, int stnr)
|
|
+void __attribute__((regparm(3)))
|
|
+FPU_copy_to_regi(FPU_REG const *r, u_char tag, int stnr)
|
|
{
|
|
reg_copy(r, &st(stnr));
|
|
FPU_settagi(stnr, tag);
|
|
}
|
|
|
|
-void FPU_copy_to_reg1(FPU_REG const *r, u_char tag)
|
|
+void __attribute__((regparm(2)))
|
|
+FPU_copy_to_reg1(FPU_REG const *r, u_char tag)
|
|
{
|
|
reg_copy(r, &st(1));
|
|
FPU_settagi(1, tag);
|
|
}
|
|
|
|
-void FPU_copy_to_reg0(FPU_REG const *r, u_char tag)
|
|
+void __attribute__((regparm(2)))
|
|
+FPU_copy_to_reg0(FPU_REG const *r, u_char tag)
|
|
{
|
|
int regnr = top;
|
|
regnr &= 7;
|
|
Index: fpu/reg_convert.c
|
|
===================================================================
|
|
RCS file: /cvsroot/bochs/bochs/fpu/reg_convert.c,v
|
|
retrieving revision 1.2
|
|
diff -u -r1.2 reg_convert.c
|
|
--- fpu/reg_convert.c 6 Oct 2001 03:53:46 -0000 1.2
|
|
+++ fpu/reg_convert.c 12 Feb 2003 14:12:38 -0000
|
|
@@ -15,7 +15,8 @@
|
|
#include "fpu_emu.h"
|
|
|
|
|
|
-int FPU_to_exp16(FPU_REG const *a, FPU_REG *x)
|
|
+int __attribute__((regparm(2)))
|
|
+FPU_to_exp16(FPU_REG const *a, FPU_REG *x)
|
|
{
|
|
int sign = getsign(a);
|
|
|
|
Index: fpu/reg_ld_str.c
|
|
===================================================================
|
|
RCS file: /cvsroot/bochs/bochs/fpu/reg_ld_str.c,v
|
|
retrieving revision 1.5
|
|
diff -u -r1.5 reg_ld_str.c
|
|
--- fpu/reg_ld_str.c 26 Dec 2002 14:47:02 -0000 1.5
|
|
+++ fpu/reg_ld_str.c 12 Feb 2003 14:12:38 -0000
|
|
@@ -38,7 +38,8 @@
|
|
#define SINGLE_Emin (-126) /* smallest valid exponent */
|
|
|
|
|
|
-static u_char normalize_no_excep(FPU_REG *r, int exp, int sign)
|
|
+static u_char __attribute__((regparm(3)))
|
|
+normalize_no_excep(FPU_REG *r, int exp, int sign)
|
|
{
|
|
u_char tag;
|
|
|
|
@@ -53,7 +54,8 @@
|
|
}
|
|
|
|
|
|
-int FPU_tagof(FPU_REG *ptr)
|
|
+int __attribute__((regparm(1)))
|
|
+FPU_tagof(FPU_REG *ptr)
|
|
{
|
|
int exp;
|
|
|
|
@@ -87,7 +89,8 @@
|
|
|
|
|
|
/* Get a long double from user memory */
|
|
-int FPU_load_extended(long double *s, int stnr)
|
|
+int __attribute__((regparm(2)))
|
|
+FPU_load_extended(long double *s, int stnr)
|
|
{
|
|
FPU_REG *sti_ptr = &st(stnr);
|
|
|
|
@@ -107,7 +110,8 @@
|
|
|
|
|
|
/* Get a double from user memory */
|
|
-int FPU_load_double(double *dfloat, FPU_REG *loaded_data)
|
|
+int __attribute__((regparm(2)))
|
|
+FPU_load_double(double *dfloat, FPU_REG *loaded_data)
|
|
{
|
|
int exp, tag, negative;
|
|
u32 m64, l64;
|
|
@@ -179,7 +183,8 @@
|
|
|
|
|
|
/* Get a float from user memory */
|
|
-int FPU_load_single(float *single, FPU_REG *loaded_data)
|
|
+int __attribute__((regparm(2)))
|
|
+FPU_load_single(float *single, FPU_REG *loaded_data)
|
|
{
|
|
u32 m32;
|
|
int exp, tag, negative;
|
|
@@ -243,7 +248,8 @@
|
|
|
|
|
|
/* Get a 64bit quantity from user memory */
|
|
-int FPU_load_int64(s64 *_s)
|
|
+int __attribute__((regparm(1)))
|
|
+FPU_load_int64(s64 *_s)
|
|
{
|
|
s64 s;
|
|
int sign;
|
|
@@ -285,7 +291,8 @@
|
|
|
|
|
|
/* Get a long from user memory */
|
|
-int FPU_load_int32(s32 *_s, FPU_REG *loaded_data)
|
|
+int __attribute__((regparm(2)))
|
|
+FPU_load_int32(s32 *_s, FPU_REG *loaded_data)
|
|
{
|
|
s32 s;
|
|
int negative;
|
|
@@ -314,7 +321,8 @@
|
|
|
|
|
|
/* Get a short from user memory */
|
|
-int FPU_load_int16(s16 *_s, FPU_REG *loaded_data)
|
|
+int __attribute__((regparm(1)))
|
|
+FPU_load_int16(s16 *_s, FPU_REG *loaded_data)
|
|
{
|
|
s16 s, negative;
|
|
|
|
@@ -343,7 +351,8 @@
|
|
|
|
|
|
/* Get a packed bcd array from user memory */
|
|
-int FPU_load_bcd(u_char *s)
|
|
+int __attribute__((regparm(1)))
|
|
+FPU_load_bcd(u_char *s)
|
|
{
|
|
FPU_REG *st0_ptr = &st(0);
|
|
int pos;
|
|
@@ -386,7 +395,8 @@
|
|
/*===========================================================================*/
|
|
|
|
/* Put a long double into user memory */
|
|
-int FPU_store_extended(FPU_REG *st0_ptr, u_char st0_tag, long double *d)
|
|
+int __attribute__((regparm(3)))
|
|
+FPU_store_extended(FPU_REG *st0_ptr, u_char st0_tag, long double *d)
|
|
{
|
|
/*
|
|
The only exception raised by an attempt to store to an
|
|
@@ -428,7 +438,8 @@
|
|
|
|
|
|
/* Put a double into user memory */
|
|
-int FPU_store_double(FPU_REG *st0_ptr, u_char st0_tag, double *dfloat)
|
|
+int __attribute__((regparm(3)))
|
|
+FPU_store_double(FPU_REG *st0_ptr, u_char st0_tag, double *dfloat)
|
|
{
|
|
u32 l[2];
|
|
u32 increment = 0; /* avoid gcc warnings */
|
|
@@ -647,7 +658,8 @@
|
|
|
|
|
|
/* Put a float into user memory */
|
|
-int FPU_store_single(FPU_REG *st0_ptr, u_char st0_tag, float *single)
|
|
+int __attribute__((regparm(3)))
|
|
+FPU_store_single(FPU_REG *st0_ptr, u_char st0_tag, float *single)
|
|
{
|
|
s32 templ;
|
|
u32 increment = 0; /* avoid gcc warnings */
|
|
@@ -871,7 +883,8 @@
|
|
|
|
|
|
/* Put a 64bit quantity into user memory */
|
|
-int FPU_store_int64(FPU_REG *st0_ptr, u_char st0_tag, s64 *d)
|
|
+int __attribute__((regparm(3)))
|
|
+FPU_store_int64(FPU_REG *st0_ptr, u_char st0_tag, s64 *d)
|
|
{
|
|
FPU_REG t;
|
|
s64 tll;
|
|
@@ -942,7 +955,8 @@
|
|
|
|
|
|
/* Put a long into user memory */
|
|
-int FPU_store_int32(FPU_REG *st0_ptr, u_char st0_tag, s32 *d)
|
|
+int __attribute__((regparm(3)))
|
|
+FPU_store_int32(FPU_REG *st0_ptr, u_char st0_tag, s32 *d)
|
|
{
|
|
FPU_REG t;
|
|
int precision_loss;
|
|
@@ -999,7 +1013,8 @@
|
|
|
|
|
|
/* Put a short into user memory */
|
|
-int FPU_store_int16(FPU_REG *st0_ptr, u_char st0_tag, s16 *d)
|
|
+int __attribute__((regparm(3)))
|
|
+FPU_store_int16(FPU_REG *st0_ptr, u_char st0_tag, s16 *d)
|
|
{
|
|
FPU_REG t;
|
|
int precision_loss;
|
|
@@ -1056,7 +1071,8 @@
|
|
|
|
|
|
/* Put a packed bcd array into user memory */
|
|
-int FPU_store_bcd(FPU_REG *st0_ptr, u_char st0_tag, u_char *d)
|
|
+int __attribute__((regparm(3)))
|
|
+FPU_store_bcd(FPU_REG *st0_ptr, u_char st0_tag, u_char *d)
|
|
{
|
|
FPU_REG t;
|
|
u64 ll;
|
|
@@ -1142,7 +1158,8 @@
|
|
/* Overflow is signalled by a non-zero return value (in eax).
|
|
In the case of overflow, the returned significand always has the
|
|
largest possible value */
|
|
-int FPU_round_to_int(FPU_REG *r, u_char tag)
|
|
+int __attribute__((regparm(2)))
|
|
+FPU_round_to_int(FPU_REG *r, u_char tag)
|
|
{
|
|
u_char very_big;
|
|
unsigned eax;
|
|
@@ -1206,7 +1223,8 @@
|
|
|
|
/*===========================================================================*/
|
|
|
|
-u_char *fldenv(fpu_addr_modes addr_modes, u_char *s)
|
|
+u_char __attribute__((regparm(2)))
|
|
+*fldenv(fpu_addr_modes addr_modes, u_char *s)
|
|
{
|
|
u16 tag_word = 0;
|
|
u_char tag;
|
|
@@ -1297,7 +1315,8 @@
|
|
}
|
|
|
|
|
|
-void frstor(fpu_addr_modes addr_modes, u_char *data_address)
|
|
+void __attribute__((regparm(2)))
|
|
+frstor(fpu_addr_modes addr_modes, u_char *data_address)
|
|
{
|
|
int i, regnr;
|
|
u_char *s = fldenv(addr_modes, data_address);
|
|
@@ -1347,7 +1366,8 @@
|
|
}
|
|
|
|
|
|
-u_char *fstenv(fpu_addr_modes addr_modes, u_char *d)
|
|
+u_char __attribute__((regparm(2)))
|
|
+*fstenv(fpu_addr_modes addr_modes, u_char *d)
|
|
{
|
|
if ( (addr_modes.default_mode == VM86) ||
|
|
((addr_modes.default_mode == PM16)
|
|
@@ -1414,7 +1434,8 @@
|
|
}
|
|
|
|
|
|
-void fsave(fpu_addr_modes addr_modes, u_char *data_address)
|
|
+void __attribute__((regparm(2)))
|
|
+fsave(fpu_addr_modes addr_modes, u_char *data_address)
|
|
{
|
|
u_char *d;
|
|
int offset = (top & 7) * sizeof(FPU_REG), other = 8*sizeof(FPU_REG) - offset;
|
|
Index: fpu/wmFPUemu_glue.cc
|
|
===================================================================
|
|
RCS file: /cvsroot/bochs/bochs/fpu/wmFPUemu_glue.cc,v
|
|
retrieving revision 1.17
|
|
diff -u -r1.17 wmFPUemu_glue.cc
|
|
--- fpu/wmFPUemu_glue.cc 6 Jan 2003 02:20:46 -0000 1.17
|
|
+++ fpu/wmFPUemu_glue.cc 12 Feb 2003 14:12:39 -0000
|
|
@@ -189,7 +189,7 @@
|
|
//BX_DEBUG(( "fpu_set_ax(0x%04x)", (unsigned) val16));
|
|
}
|
|
|
|
- void
|
|
+ void __attribute__((regparm(3)))
|
|
fpu_verify_area(unsigned what, void *ptr, unsigned n)
|
|
{
|
|
bx_segment_reg_t *seg;
|
|
@@ -213,7 +213,7 @@
|
|
}
|
|
|
|
|
|
- unsigned
|
|
+ unsigned __attribute__((regparm(2)))
|
|
fpu_get_user(void *ptr, unsigned len)
|
|
{
|
|
Bit32u val32;
|
|
@@ -238,7 +238,7 @@
|
|
return(val32);
|
|
}
|
|
|
|
- void
|
|
+ void __attribute__((regparm(2)))
|
|
fpu_put_user(unsigned val, void *ptr, unsigned len)
|
|
{
|
|
Bit32u val32;
|
|
Index: iodev/cdrom.cc
|
|
===================================================================
|
|
RCS file: /cvsroot/bochs/bochs/iodev/cdrom.cc,v
|
|
retrieving revision 1.58
|
|
diff -u -r1.58 cdrom.cc
|
|
--- iodev/cdrom.cc 30 Jan 2003 20:44:32 -0000 1.58
|
|
+++ iodev/cdrom.cc 12 Feb 2003 14:12:39 -0000
|
|
@@ -1250,7 +1250,7 @@
|
|
#endif
|
|
}
|
|
|
|
- void
|
|
+ void __attribute__((regparm(2)))
|
|
cdrom_interface::read_block(uint8* buf, int lba)
|
|
{
|
|
// Read a single block from the CD
|
|
Index: iodev/cdrom.h
|
|
===================================================================
|
|
RCS file: /cvsroot/bochs/bochs/iodev/cdrom.h,v
|
|
retrieving revision 1.11
|
|
diff -u -r1.11 cdrom.h
|
|
--- iodev/cdrom.h 25 Oct 2002 11:44:38 -0000 1.11
|
|
+++ iodev/cdrom.h 12 Feb 2003 14:12:39 -0000
|
|
@@ -47,7 +47,7 @@
|
|
uint32 capacity();
|
|
|
|
// Read a single block from the CD
|
|
- void read_block(uint8* buf, int lba);
|
|
+ void read_block(uint8* buf, int lba) __attribute__((regparm(1)));
|
|
|
|
private:
|
|
int fd;
|
|
Index: iodev/devices.cc
|
|
===================================================================
|
|
RCS file: /cvsroot/bochs/bochs/iodev/devices.cc,v
|
|
retrieving revision 1.50
|
|
diff -u -r1.50 devices.cc
|
|
--- iodev/devices.cc 28 Jan 2003 16:56:59 -0000 1.50
|
|
+++ iodev/devices.cc 12 Feb 2003 14:12:40 -0000
|
|
@@ -599,7 +599,7 @@
|
|
* Read a byte of data from the IO memory address space
|
|
*/
|
|
|
|
- Bit32u
|
|
+ Bit32u __attribute__((regparm(2)))
|
|
bx_devices_c::inp(Bit16u addr, unsigned io_len)
|
|
{
|
|
Bit8u handle;
|
|
@@ -621,7 +621,7 @@
|
|
* Write a byte of data to the IO memory address space.
|
|
*/
|
|
|
|
- void
|
|
+ void __attribute__((regparm(3)))
|
|
bx_devices_c::outp(Bit16u addr, Bit32u value, unsigned io_len)
|
|
{
|
|
Bit8u handle;
|
|
Index: iodev/dma.cc
|
|
===================================================================
|
|
RCS file: /cvsroot/bochs/bochs/iodev/dma.cc,v
|
|
retrieving revision 1.26
|
|
diff -u -r1.26 dma.cc
|
|
--- iodev/dma.cc 4 Nov 2002 17:29:12 -0000 1.26
|
|
+++ iodev/dma.cc 12 Feb 2003 14:12:40 -0000
|
|
@@ -212,7 +212,7 @@
|
|
// static IO port read callback handler
|
|
// redirects to non-static class handler to avoid virtual functions
|
|
|
|
- Bit32u
|
|
+ Bit32u __attribute__((regparm(3)))
|
|
bx_dma_c::read_handler(void *this_ptr, Bit32u address, unsigned io_len)
|
|
{
|
|
#if !BX_USE_DMA_SMF
|
|
@@ -222,7 +222,7 @@
|
|
}
|
|
|
|
/* 8237 DMA controller */
|
|
- Bit32u
|
|
+ Bit32u __attribute__((regparm(2)))
|
|
bx_dma_c::read( Bit32u address, unsigned io_len)
|
|
{
|
|
#else
|
|
@@ -343,7 +343,7 @@
|
|
// static IO port write callback handler
|
|
// redirects to non-static class handler to avoid virtual functions
|
|
|
|
- void
|
|
+ void __attribute__((regparm(3)))
|
|
bx_dma_c::write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len)
|
|
{
|
|
#if !BX_USE_DMA_SMF
|
|
@@ -354,7 +354,7 @@
|
|
|
|
|
|
/* 8237 DMA controller */
|
|
- void
|
|
+ void __attribute__((regparm(3)))
|
|
bx_dma_c::write(Bit32u address, Bit32u value, unsigned io_len)
|
|
{
|
|
#else
|
|
Index: iodev/dma.h
|
|
===================================================================
|
|
RCS file: /cvsroot/bochs/bochs/iodev/dma.h,v
|
|
retrieving revision 1.12
|
|
diff -u -r1.12 dma.h
|
|
--- iodev/dma.h 25 Oct 2002 11:44:39 -0000 1.12
|
|
+++ iodev/dma.h 12 Feb 2003 14:12:40 -0000
|
|
@@ -63,11 +63,11 @@
|
|
|
|
private:
|
|
|
|
- static Bit32u read_handler(void *this_ptr, Bit32u address, unsigned io_len);
|
|
- static void write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len);
|
|
+ static Bit32u read_handler(void *this_ptr, Bit32u address, unsigned io_len) __attribute__((regparm(3)));
|
|
+ static void write_handler(void *this_ptr, Bit32u address, Bit32u value, unsigned io_len) __attribute__((regparm(3)));
|
|
#if !BX_USE_DMA_SMF
|
|
- Bit32u read( Bit32u address, unsigned io_len);
|
|
- void write(Bit32u address, Bit32u value, unsigned io_len);
|
|
+ Bit32u read( Bit32u address, unsigned io_len) __attribute__((regparm(2)));
|
|
+ void write(Bit32u address, Bit32u value, unsigned io_len) __attribute__((regparm(1)));
|
|
#endif
|
|
BX_DMA_SMF void control_HRQ(bx_bool ma_sl);
|
|
BX_DMA_SMF void reset_controller(unsigned num);
|
|
Index: iodev/harddrv.cc
|
|
===================================================================
|
|
RCS file: /cvsroot/bochs/bochs/iodev/harddrv.cc,v
|
|
retrieving revision 1.95
|
|
diff -u -r1.95 harddrv.cc
|
|
--- iodev/harddrv.cc 1 Feb 2003 12:21:43 -0000 1.95
|
|
+++ iodev/harddrv.cc 12 Feb 2003 14:12:42 -0000
|
|
@@ -2388,7 +2388,7 @@
|
|
}
|
|
|
|
|
|
- bx_bool
|
|
+ bx_bool __attribute__((regparm(2)))
|
|
bx_hard_drive_c::calculate_logical_address(Bit8u channel, off_t *sector)
|
|
{
|
|
off_t logical_sector;
|
|
@@ -2418,7 +2418,7 @@
|
|
return true;
|
|
}
|
|
|
|
- void
|
|
+ void __attribute__((regparm(1)))
|
|
bx_hard_drive_c::increment_address(Bit8u channel)
|
|
{
|
|
BX_SELECTED_CONTROLLER(channel).sector_count--;
|
|
@@ -2887,7 +2887,7 @@
|
|
}
|
|
}
|
|
|
|
- void
|
|
+ void __attribute__((regparm(3)))
|
|
bx_hard_drive_c::init_send_atapi_command(Bit8u channel, Bit8u command, int req_length, int alloc_length, bool lazy)
|
|
{
|
|
// BX_SELECTED_CONTROLLER(channel).byte_count is a union of BX_SELECTED_CONTROLLER(channel).cylinder_no;
|
|
@@ -2961,7 +2961,7 @@
|
|
BX_SELECTED_DRIVE(channel).sense.ascq = 0;
|
|
}
|
|
|
|
-void
|
|
+void __attribute__((regparm(1)))
|
|
bx_hard_drive_c::atapi_cmd_nop(Bit8u channel)
|
|
{
|
|
BX_SELECTED_CONTROLLER(channel).interrupt_reason.i_o = 1;
|
|
@@ -2990,13 +2990,13 @@
|
|
memcpy(BX_SELECTED_CONTROLLER(channel).buffer + 8, src, size);
|
|
}
|
|
|
|
- void
|
|
+ void __attribute__((regparm(1)))
|
|
bx_hard_drive_c::ready_to_send_atapi(Bit8u channel)
|
|
{
|
|
raise_interrupt(channel);
|
|
}
|
|
|
|
-void
|
|
+void __attribute__((regparm(1)))
|
|
bx_hard_drive_c::raise_interrupt(Bit8u channel)
|
|
{
|
|
BX_DEBUG(("raise_interrupt called, disable_irq = %02x", BX_SELECTED_CONTROLLER(channel).control.disable_irq));
|
|
@@ -3387,12 +3387,14 @@
|
|
data[7] = 0x00;
|
|
}
|
|
|
|
-uint16 read_16bit(const uint8* buf)
|
|
+uint16 __attribute__((regparm(1)))
|
|
+read_16bit(const uint8* buf)
|
|
{
|
|
return (buf[0] << 8) | buf[1];
|
|
}
|
|
|
|
-uint32 read_32bit(const uint8* buf)
|
|
+uint32 __attribute__((regparm(1)))
|
|
+read_32bit(const uint8* buf)
|
|
{
|
|
return (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3];
|
|
}
|
|
Index: iodev/harddrv.h
|
|
===================================================================
|
|
RCS file: /cvsroot/bochs/bochs/iodev/harddrv.h,v
|
|
retrieving revision 1.18
|
|
diff -u -r1.18 harddrv.h
|
|
--- iodev/harddrv.h 25 Oct 2002 11:44:40 -0000 1.18
|
|
+++ iodev/harddrv.h 12 Feb 2003 14:12:42 -0000
|
|
@@ -241,8 +241,8 @@
|
|
error_recovery_t ();
|
|
};
|
|
|
|
-uint16 read_16bit(const uint8* buf);
|
|
-uint32 read_32bit(const uint8* buf);
|
|
+uint16 read_16bit(const uint8* buf) __attribute__((regparm(1)));
|
|
+uint32 read_32bit(const uint8* buf) __attribute__((regparm(1)));
|
|
|
|
|
|
#ifdef LOWLEVEL_CDROM
|
|
@@ -315,18 +315,18 @@
|
|
|
|
private:
|
|
|
|
- BX_HD_SMF bx_bool calculate_logical_address(Bit8u channel, off_t *sector);
|
|
- BX_HD_SMF void increment_address(Bit8u channel);
|
|
+ BX_HD_SMF bx_bool calculate_logical_address(Bit8u channel, off_t *sector) __attribute__((regparm(2)));
|
|
+ BX_HD_SMF void increment_address(Bit8u channel) __attribute__((regparm(1)));
|
|
BX_HD_SMF void identify_drive(Bit8u channel);
|
|
BX_HD_SMF void identify_ATAPI_drive(Bit8u channel);
|
|
BX_HD_SMF void command_aborted(Bit8u channel, unsigned command);
|
|
|
|
- BX_HD_SMF void init_send_atapi_command(Bit8u channel, Bit8u command, int req_length, int alloc_length, bool lazy = false);
|
|
- BX_HD_SMF void ready_to_send_atapi(Bit8u channel);
|
|
- BX_HD_SMF void raise_interrupt(Bit8u channel);
|
|
+ BX_HD_SMF void init_send_atapi_command(Bit8u channel, Bit8u command, int req_length, int alloc_length, bool lazy = false) __attribute__((regparm(3)));
|
|
+ BX_HD_SMF void ready_to_send_atapi(Bit8u channel) __attribute__((regparm(1)));
|
|
+ BX_HD_SMF void raise_interrupt(Bit8u channel) __attribute__((regparm(1)));
|
|
BX_HD_SMF void atapi_cmd_error(Bit8u channel, sense_t sense_key, asc_t asc);
|
|
BX_HD_SMF void init_mode_sense_single(Bit8u channel, const void* src, int size);
|
|
- BX_HD_SMF void atapi_cmd_nop(Bit8u channel);
|
|
+ BX_HD_SMF void atapi_cmd_nop(Bit8u channel) __attribute__((regparm(1)));
|
|
|
|
// FIXME:
|
|
// For each ATA channel we should have one controller struct
|
|
Index: iodev/iodev.h
|
|
===================================================================
|
|
RCS file: /cvsroot/bochs/bochs/iodev/iodev.h,v
|
|
retrieving revision 1.29
|
|
diff -u -r1.29 iodev.h
|
|
--- iodev/iodev.h 28 Jan 2003 16:57:00 -0000 1.29
|
|
+++ iodev/iodev.h 12 Feb 2003 14:12:42 -0000
|
|
@@ -287,8 +287,8 @@
|
|
bx_bool register_irq(unsigned irq, const char *name);
|
|
bx_bool unregister_irq(unsigned irq, const char *name);
|
|
void iodev_init(void);
|
|
- Bit32u inp(Bit16u addr, unsigned io_len);
|
|
- void outp(Bit16u addr, Bit32u value, unsigned io_len);
|
|
+ Bit32u inp(Bit16u addr, unsigned io_len) __attribute__((regparm(2)));
|
|
+ void outp(Bit16u addr, Bit32u value, unsigned io_len) __attribute__((regparm(3)));
|
|
|
|
static void timer_handler(void *);
|
|
void timer(void);
|
|
Index: iodev/keyboard.cc
|
|
===================================================================
|
|
RCS file: /cvsroot/bochs/bochs/iodev/keyboard.cc,v
|
|
retrieving revision 1.74
|
|
diff -u -r1.74 keyboard.cc
|
|
--- iodev/keyboard.cc 5 Jan 2003 01:37:21 -0000 1.74
|
|
+++ iodev/keyboard.cc 12 Feb 2003 14:12:43 -0000
|
|
@@ -785,7 +785,7 @@
|
|
|
|
|
|
|
|
- void
|
|
+ void __attribute__((regparm(1)))
|
|
bx_keyb_c::set_kbd_clock_enable(Bit8u value)
|
|
{
|
|
bx_bool prev_kbd_clock_enabled;
|
|
@@ -930,7 +930,7 @@
|
|
//BX_DEBUG(( "# out_buffer = %u", (unsigned) BX_KEY_THIS s.kbd_controller.kbd_output_buffer);
|
|
}
|
|
|
|
- bx_bool
|
|
+ bx_bool __attribute__((regparm(3)))
|
|
bx_keyb_c::mouse_enQ_packet(Bit8u b1, Bit8u b2, Bit8u b3)
|
|
{
|
|
if ((BX_KEY_THIS s.mouse_internal_buffer.num_elements + 3) >= BX_MOUSE_BUFF_SIZE) {
|
|
Index: iodev/keyboard.h
|
|
===================================================================
|
|
RCS file: /cvsroot/bochs/bochs/iodev/keyboard.h,v
|
|
retrieving revision 1.20
|
|
diff -u -r1.20 keyboard.h
|
|
--- iodev/keyboard.h 26 Dec 2002 22:19:44 -0000 1.20
|
|
+++ iodev/keyboard.h 12 Feb 2003 14:12:43 -0000
|
|
@@ -215,7 +215,7 @@
|
|
bx_bool stop_paste; // stop the current paste operation on hardware reset
|
|
|
|
BX_KEY_SMF void resetinternals(bx_bool powerup);
|
|
- BX_KEY_SMF void set_kbd_clock_enable(Bit8u value);
|
|
+ BX_KEY_SMF void set_kbd_clock_enable(Bit8u value) __attribute__((regparm(1)));
|
|
BX_KEY_SMF void set_aux_clock_enable(Bit8u value);
|
|
BX_KEY_SMF void kbd_ctrl_to_kbd(Bit8u value);
|
|
BX_KEY_SMF void kbd_ctrl_to_mouse(Bit8u value);
|
|
@@ -223,7 +223,7 @@
|
|
BX_KEY_SMF void kbd_enQ_imm(Bit8u val);
|
|
BX_KEY_SMF void activate_timer(void);
|
|
BX_KEY_SMF void controller_enQ(Bit8u data, unsigned source);
|
|
- BX_KEY_SMF bx_bool mouse_enQ_packet(Bit8u b1, Bit8u b2, Bit8u b3);
|
|
+ BX_KEY_SMF bx_bool mouse_enQ_packet(Bit8u b1, Bit8u b2, Bit8u b3) __attribute__((regparm(3)));
|
|
BX_KEY_SMF void mouse_enQ(Bit8u mouse_data);
|
|
|
|
static void timer_handler(void *);
|
|
Index: iodev/ne2k.cc
|
|
===================================================================
|
|
RCS file: /cvsroot/bochs/bochs/iodev/ne2k.cc,v
|
|
retrieving revision 1.47
|
|
diff -u -r1.47 ne2k.cc
|
|
--- iodev/ne2k.cc 13 Dec 2002 18:27:07 -0000 1.47
|
|
+++ iodev/ne2k.cc 12 Feb 2003 14:12:43 -0000
|
|
@@ -236,7 +236,7 @@
|
|
// The first 16 bytes contains the MAC address at even locations,
|
|
// and there is 16K of buffer memory starting at 16K
|
|
//
|
|
-Bit32u
|
|
+Bit32u __attribute__((regparm(2)))
|
|
bx_ne2k_c::chipmem_read(Bit32u address, unsigned int io_len)
|
|
{
|
|
Bit32u retval = 0;
|
|
@@ -266,7 +266,7 @@
|
|
return (0xff);
|
|
}
|
|
|
|
-void
|
|
+void __attribute__((regparm(3)))
|
|
bx_ne2k_c::chipmem_write(Bit32u address, Bit32u value, unsigned io_len)
|
|
{
|
|
if ((io_len == 2) && (address & 0x1))
|
|
@@ -290,7 +290,7 @@
|
|
// after that, insw/outsw instructions can be used to move
|
|
// the appropriate number of bytes to/from the device.
|
|
//
|
|
-Bit32u
|
|
+Bit32u __attribute__((regparm(2)))
|
|
bx_ne2k_c::asic_read(Bit32u offset, unsigned int io_len)
|
|
{
|
|
Bit32u retval = 0;
|
|
Index: iodev/ne2k.h
|
|
===================================================================
|
|
RCS file: /cvsroot/bochs/bochs/iodev/ne2k.h,v
|
|
retrieving revision 1.10
|
|
diff -u -r1.10 ne2k.h
|
|
--- iodev/ne2k.h 19 Nov 2002 18:56:39 -0000 1.10
|
|
+++ iodev/ne2k.h 12 Feb 2003 14:12:43 -0000
|
|
@@ -209,14 +209,14 @@
|
|
BX_NE2K_SMF Bit32u read_cr(void);
|
|
BX_NE2K_SMF void write_cr(Bit32u value);
|
|
|
|
- BX_NE2K_SMF Bit32u chipmem_read(Bit32u address, unsigned io_len);
|
|
- BX_NE2K_SMF Bit32u asic_read(Bit32u offset, unsigned io_len);
|
|
+ BX_NE2K_SMF Bit32u chipmem_read(Bit32u address, unsigned io_len) __attribute__((regparm(2)));
|
|
+ BX_NE2K_SMF Bit32u asic_read(Bit32u offset, unsigned io_len) __attribute__((regparm(2)));
|
|
BX_NE2K_SMF Bit32u page0_read(Bit32u offset, unsigned io_len);
|
|
BX_NE2K_SMF Bit32u page1_read(Bit32u offset, unsigned io_len);
|
|
BX_NE2K_SMF Bit32u page2_read(Bit32u offset, unsigned io_len);
|
|
BX_NE2K_SMF Bit32u page3_read(Bit32u offset, unsigned io_len);
|
|
|
|
- BX_NE2K_SMF void chipmem_write(Bit32u address, Bit32u value, unsigned io_len);
|
|
+ BX_NE2K_SMF void chipmem_write(Bit32u address, Bit32u value, unsigned io_len) __attribute__((regparm(3)));
|
|
BX_NE2K_SMF void asic_write(Bit32u address, Bit32u value, unsigned io_len);
|
|
BX_NE2K_SMF void page0_write(Bit32u address, Bit32u value, unsigned io_len);
|
|
BX_NE2K_SMF void page1_write(Bit32u address, Bit32u value, unsigned io_len);
|
|
Index: iodev/pit82c54.cc
|
|
===================================================================
|
|
RCS file: /cvsroot/bochs/bochs/iodev/pit82c54.cc,v
|
|
retrieving revision 1.20
|
|
diff -u -r1.20 pit82c54.cc
|
|
--- iodev/pit82c54.cc 27 Aug 2002 19:54:46 -0000 1.20
|
|
+++ iodev/pit82c54.cc 12 Feb 2003 14:12:43 -0000
|
|
@@ -97,12 +97,14 @@
|
|
thisctr.OUTpin=data;
|
|
}
|
|
|
|
- void pit_82C54::set_count (counter_type & thisctr, Bit32u data) {
|
|
+ void __attribute__((regparm(2)))
|
|
+pit_82C54::set_count (counter_type & thisctr, Bit32u data) {
|
|
thisctr.count=data & 0xFFFF;
|
|
set_binary_to_count(thisctr);
|
|
}
|
|
|
|
- void pit_82C54::set_count_to_binary(counter_type & thisctr) {
|
|
+ void __attribute__((regparm(1)))
|
|
+pit_82C54::set_count_to_binary(counter_type & thisctr) {
|
|
if(thisctr.bcd_mode) {
|
|
thisctr.count=
|
|
(((thisctr.count_binary/1)%10)<<0) |
|
|
@@ -115,7 +117,8 @@
|
|
}
|
|
}
|
|
|
|
- void pit_82C54::set_binary_to_count(counter_type & thisctr) {
|
|
+ void __attribute__((regparm(1)))
|
|
+pit_82C54::set_binary_to_count(counter_type & thisctr) {
|
|
if(thisctr.bcd_mode) {
|
|
thisctr.count_binary=
|
|
(1*((thisctr.count>>0)&0xF)) +
|
|
@@ -128,7 +131,8 @@
|
|
}
|
|
}
|
|
|
|
- void pit_82C54::decrement (counter_type & thisctr) {
|
|
+ void __attribute__((regparm(1)))
|
|
+pit_82C54::decrement (counter_type & thisctr) {
|
|
if(!thisctr.count) {
|
|
if(thisctr.bcd_mode) {
|
|
thisctr.count=0x9999;
|
|
@@ -181,7 +185,8 @@
|
|
void pit_82C54::reset (unsigned type) {
|
|
}
|
|
|
|
-void pit_82C54::decrement_multiple(counter_type & thisctr, Bit32u cycles) {
|
|
+void __attribute__((regparm(2)))
|
|
+pit_82C54::decrement_multiple(counter_type & thisctr, Bit32u cycles) {
|
|
while(cycles>0) {
|
|
if(cycles<=thisctr.count_binary) {
|
|
thisctr.count_binary-=cycles;
|
|
@@ -276,7 +281,8 @@
|
|
}
|
|
}
|
|
|
|
- void pit_82C54::clock(Bit8u cnum) {
|
|
+ void __attribute__((regparm(1)))
|
|
+pit_82C54::clock(Bit8u cnum) {
|
|
if(cnum>MAX_COUNTER) {
|
|
BX_ERROR(("Counter number too high in clock"));
|
|
} else {
|
|
Index: iodev/pit82c54.h
|
|
===================================================================
|
|
RCS file: /cvsroot/bochs/bochs/iodev/pit82c54.h,v
|
|
retrieving revision 1.11
|
|
diff -u -r1.11 pit82c54.h
|
|
--- iodev/pit82c54.h 27 Aug 2002 19:54:46 -0000 1.11
|
|
+++ iodev/pit82c54.h 12 Feb 2003 14:12:43 -0000
|
|
@@ -94,17 +94,17 @@
|
|
|
|
void set_OUT (counter_type & thisctr, bool data);
|
|
|
|
- void set_count (counter_type & thisctr, Bit32u data);
|
|
+ void set_count (counter_type & thisctr, Bit32u data) __attribute__((regparm(2)));
|
|
|
|
- void set_count_to_binary (counter_type & thisctr);
|
|
+ void set_count_to_binary (counter_type & thisctr) __attribute__((regparm(1)));
|
|
|
|
- void set_binary_to_count (counter_type & thisctr);
|
|
+ void set_binary_to_count (counter_type & thisctr) __attribute__((regparm(1)));
|
|
|
|
- void decrement (counter_type & thisctr);
|
|
+ void decrement (counter_type & thisctr) __attribute__((regparm(1)));
|
|
|
|
- void decrement_multiple(counter_type & thisctr, Bit32u cycles);
|
|
+ void decrement_multiple(counter_type & thisctr, Bit32u cycles) __attribute__((regparm(2)));
|
|
|
|
- void clock(Bit8u cnum);
|
|
+ void clock(Bit8u cnum) __attribute__((regparm(1)));
|
|
|
|
void print_counter(counter_type & thisctr);
|
|
|
|
Index: iodev/vga.cc
|
|
===================================================================
|
|
RCS file: /cvsroot/bochs/bochs/iodev/vga.cc,v
|
|
retrieving revision 1.61
|
|
diff -u -r1.61 vga.cc
|
|
--- iodev/vga.cc 9 Feb 2003 08:25:22 -0000 1.61
|
|
+++ iodev/vga.cc 12 Feb 2003 14:12:44 -0000
|
|
@@ -2226,11 +2226,11 @@
|
|
|
|
|
|
#if BX_SUPPORT_VBE
|
|
- Bit8u
|
|
+ Bit8u __attribute__((regparm(1)))
|
|
bx_vga_c::vbe_mem_read(Bit32u addr)
|
|
{
|
|
- Bit32u offset;
|
|
-
|
|
+ Bit32u offset;
|
|
+
|
|
if (addr >= VBE_DISPI_LFB_PHYSICAL_ADDRESS)
|
|
{
|
|
// LFB read
|
|
@@ -2249,12 +2249,12 @@
|
|
return (BX_VGA_THIS s.vbe_memory[offset]);
|
|
}
|
|
|
|
- void
|
|
+ void __attribute__((regparm(2)))
|
|
bx_vga_c::vbe_mem_write(Bit32u addr, Bit8u value)
|
|
{
|
|
- Bit32u offset;
|
|
+ Bit32u offset;
|
|
unsigned x_tileno, y_tileno;
|
|
-
|
|
+
|
|
if (addr >= VBE_DISPI_LFB_PHYSICAL_ADDRESS)
|
|
{
|
|
// LFB write
|
|
Index: iodev/vga.h
|
|
===================================================================
|
|
RCS file: /cvsroot/bochs/bochs/iodev/vga.h,v
|
|
retrieving revision 1.23
|
|
diff -u -r1.23 vga.h
|
|
--- iodev/vga.h 9 Feb 2003 08:25:22 -0000 1.23
|
|
+++ iodev/vga.h 12 Feb 2003 14:12:45 -0000
|
|
@@ -106,11 +106,11 @@
|
|
virtual void mem_write(Bit32u addr, Bit8u value);
|
|
virtual void trigger_timer(void *this_ptr);
|
|
|
|
-#if BX_SUPPORT_VBE
|
|
- BX_VGA_SMF Bit8u vbe_mem_read(Bit32u addr);
|
|
- BX_VGA_SMF void vbe_mem_write(Bit32u addr, Bit8u value);
|
|
+#if BX_SUPPORT_VBE
|
|
+ BX_VGA_SMF Bit8u vbe_mem_read(Bit32u addr) __attribute__((regparm(1)));
|
|
+ BX_VGA_SMF void vbe_mem_write(Bit32u addr, Bit8u value) __attribute__((regparm(2)));
|
|
#endif
|
|
-
|
|
+
|
|
virtual void redraw_area(unsigned x0, unsigned y0,
|
|
unsigned width, unsigned height);
|
|
|
|
Index: memory/memory.cc
|
|
===================================================================
|
|
RCS file: /cvsroot/bochs/bochs/memory/memory.cc,v
|
|
retrieving revision 1.25
|
|
diff -u -r1.25 memory.cc
|
|
--- memory/memory.cc 3 Nov 2002 17:17:11 -0000 1.25
|
|
+++ memory/memory.cc 12 Feb 2003 14:12:45 -0000
|
|
@@ -36,7 +36,7 @@
|
|
|
|
#if BX_PROVIDE_CPU_MEMORY
|
|
|
|
- void
|
|
+ void __attribute__((regparm(3)))
|
|
BX_MEM_C::writePhysicalPage(BX_CPU_C *cpu, Bit32u addr, unsigned len, void *data)
|
|
{
|
|
Bit8u *data_ptr;
|
|
@@ -233,7 +233,7 @@
|
|
}
|
|
|
|
|
|
- void
|
|
+ void __attribute__((regparm(3)))
|
|
BX_MEM_C::readPhysicalPage(BX_CPU_C *cpu, Bit32u addr, unsigned len, void *data)
|
|
{
|
|
Bit8u *data_ptr;
|
|
Index: memory/memory.h
|
|
===================================================================
|
|
RCS file: /cvsroot/bochs/bochs/memory/memory.h,v
|
|
retrieving revision 1.13
|
|
diff -u -r1.13 memory.h
|
|
--- memory/memory.h 25 Oct 2002 11:44:41 -0000 1.13
|
|
+++ memory/memory.h 12 Feb 2003 14:12:45 -0000
|
|
@@ -60,23 +60,23 @@
|
|
BX_MEM_C(void);
|
|
BX_MEM_C(size_t memsize);
|
|
~BX_MEM_C(void);
|
|
- BX_MEM_SMF void alloc_vector_aligned (size_t bytes, size_t alignment);
|
|
+ BX_MEM_SMF void alloc_vector_aligned (size_t bytes, size_t alignment) __attribute__((regparm(2)));
|
|
BX_MEM_SMF void init_memory(int memsize);
|
|
BX_MEM_SMF void readPhysicalPage(BX_CPU_C *cpu, Bit32u addr,
|
|
- unsigned len, void *data);
|
|
+ unsigned len, void *data) __attribute__((regparm(3)));
|
|
BX_MEM_SMF void writePhysicalPage(BX_CPU_C *cpu, Bit32u addr,
|
|
- unsigned len, void *data);
|
|
+ unsigned len, void *data) __attribute__((regparm(3)));
|
|
BX_MEM_SMF void load_ROM(const char *path, Bit32u romaddress);
|
|
BX_MEM_SMF Bit32u get_memory_in_k(void);
|
|
#if BX_PCI_SUPPORT
|
|
- BX_MEM_SMF Bit8u* pci_fetch_ptr(Bit32u addr);
|
|
+ BX_MEM_SMF Bit8u* pci_fetch_ptr(Bit32u addr) __attribute__((regparm(1)));
|
|
#endif
|
|
BX_MEM_SMF bx_bool dbg_fetch_mem(Bit32u addr, unsigned len, Bit8u *buf);
|
|
BX_MEM_SMF bx_bool dbg_set_mem(Bit32u addr, unsigned len, Bit8u *buf);
|
|
BX_MEM_SMF bx_bool dbg_crc32(
|
|
unsigned long (*f)(unsigned char *buf, int len),
|
|
Bit32u addr1, Bit32u addr2, Bit32u *crc);
|
|
- BX_MEM_SMF Bit8u * getHostMemAddr(BX_CPU_C *cpu, Bit32u a20Addr, unsigned op);
|
|
+ BX_MEM_SMF Bit8u * getHostMemAddr(BX_CPU_C *cpu, Bit32u a20Addr, unsigned op) __attribute__((regparm(3)));
|
|
};
|
|
|
|
#if BX_PROVIDE_CPU_MEMORY==1
|
|
Index: memory/misc_mem.cc
|
|
===================================================================
|
|
RCS file: /cvsroot/bochs/bochs/memory/misc_mem.cc,v
|
|
retrieving revision 1.35
|
|
diff -u -r1.35 misc_mem.cc
|
|
--- memory/misc_mem.cc 29 Jan 2003 15:01:16 -0000 1.35
|
|
+++ memory/misc_mem.cc 12 Feb 2003 14:12:45 -0000
|
|
@@ -63,7 +63,7 @@
|
|
|
|
|
|
#if BX_PROVIDE_CPU_MEMORY
|
|
-void
|
|
+void __attribute__((regparm(2)))
|
|
BX_MEM_C::alloc_vector_aligned (size_t bytes, size_t alignment)
|
|
{
|
|
if (actual_vector != NULL) {
|
|
@@ -196,7 +196,7 @@
|
|
#endif // #if BX_PROVIDE_CPU_MEMORY
|
|
|
|
#if BX_PCI_SUPPORT
|
|
- Bit8u*
|
|
+ Bit8u* __attribute__((regparm(1)))
|
|
BX_MEM_C::pci_fetch_ptr(Bit32u addr)
|
|
{
|
|
if (bx_options.Oi440FXSupport->get ()) {
|
|
@@ -306,7 +306,7 @@
|
|
}
|
|
|
|
|
|
- Bit8u *
|
|
+ Bit8u * __attribute__((regparm(3)))
|
|
BX_MEM_C::getHostMemAddr(BX_CPU_C *cpu, Bit32u a20Addr, unsigned op)
|
|
// Return a host address corresponding to the guest physical memory
|
|
// address (with A20 already applied), given that the calling
|