This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
Hi,
I have implemented the special page vector behavior for M16C and M32C
targets. Please find attached the patch and ChangeLog along with this
mail.
The "function_vector" attribute is implemented to declare a special
page subroutine call function. Use of this attribute will reduce the
code size by 2 bytes per each call generated to the subroutine. The
argument to the attribute is the vector number entry from the special
page vector table which contains the 16 low-order bits of the
subroutine's entry address. Each vector table has special page number
(18 to 255) which are to be used by JSRS instruction. Jump address of
the routines is generated by adding 0F0000H (in case of M16C targets)
or FF0000H (in case of M32C targets), to the 2 byte addresses set in
the vector table. Therefore, user needs to ensure that all the special
page vector routines should get mapped within the address range
0F0000H to 0FFFFFH (for M16C) and FF0000H to FFFFFFH (for M32C).
In the following example, instruction "jsrs #18" gets generated instead
of a regular instruction "jsr.a _foo". Therefore for each call to the
function "foo", 2 bytes are saved.
void foo (void) __attribute__((function_vector(18)));
void foo (void)
{
}
void bar (void)
{
foo();
}
If functions are defined in one file and are called in another file,
then user has to write this attribute declaration in both files.
Please note that, this attribute is ignored for R8C target.
No new regressions found.
The patch is tested on GCC-4.2-20060722 snapshot.
I have tested it on M16C and M32C target hardwares and GDB debugger
also. It is working fine on hardware.
In GDB debugger, it is working fine for M16C target, however it is
giving problem for M32C target. It is not entering into the expected
subroutines using "JSRS" instruction and always jumping to the address
0xFF0000.
=================================================================
ChangeLog:
2006-07-28 Jayant Sonar <jayants@kpitcummins.com>
* config/m32c/m32c.c
(SYMBOL_FLAG_FUNCVEC_FUNCTION): Define.
(TARGET_ENCODE_SECTION_INFO): Re-define.
(m32c_encode_section_info): New
(function_vector_handler): New
(current_function_special_page_vector): New
(m32c_special_page_vector_p): New.
* config/m32c/m32c-protos.h (m32c_special_page_vector_p):
Prototype.
* config/m32c/jump.md: Added instruction JSRS for functions
with attribute "function_vector".
* doc/extend.texi (function_vector): Added description
for M16C, M32C targets.
=================================================================
Regards,
Jayant Sonar
KPIT Cummins Infosystems Ltd,
Pune (INDIA)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Free download of GNU based tool-chains for Renesas' SH, H8, R8C, M16C
and M32C series.
The following site also offers free technical support to its users.
Visit http://www.kpitgnutools.com for details.
Latest versions of KPIT GNU tools were released on June 1, 2006.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Attachment:
special_page_vect_patch.tar.gz
Description: special_page_vect_patch.tar.gz
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |