* [PATCH H8300] Add function_vector attribute
@ 2012-03-26 14:18 Ajinkya Dhobale
2012-03-26 15:31 ` Jeff Law
0 siblings, 1 reply; 7+ messages in thread
From: Ajinkya Dhobale @ 2012-03-26 14:18 UTC (permalink / raw)
To: gcc-patches; +Cc: Jayant R. Sonar
[-- Attachment #1: Type: text/plain, Size: 1897 bytes --]
Hi,
Please find the attached "h8300-func-vect.patch" that adds
'function_vector' attribute for H8300 target.
I have taken the reference from previously posted patch for GCC-3.4.2:
http://gcc.gnu.org/ml/gcc-patches/2004-09/msg02529.html
I have updated functionality of the attribute to GCC-4.7.0 source.
Can someone please review the patch and let me know if there should be
any modifications in it?
I will briefly mention about 'function_vector' attribute.
For test code:
void foo (void)
{
}
void bar (void)
{
foo();
}
For regular function call, compiler generates code as:
_bar:
mov.w r6,@-r7
mov.w r7,r6
jsr @_foo [length=4]
mov.w @r7+,r6
rts
Using 'function_vector' attribute, code is generated as:
_bar:
mov.w r6,@-r7
mov.w r7,r6
jsr @@ vector_number:8 [length=2]
mov.w @r7+,r6
rts
I have built the toolchain with 'c' language enabled and did the
regression testing. Results are fine. I could not build the toolchain
for 'c++' language as GCC-4.7.0 build fails for it for H8300 target.
======================================================================
ChangeLog:
2012-26-03 Ajinkya Dhobale <ajinkya.dhobale@kpitcummins.com>
* config/h8300/h8300.c
(h8300_handle_function_vector_attribute): New function.
(print_operand): 'B', new print_operand switch case for jsr
instruction.
(h8300_attrib): Redefined for argument and new function.
* config/h8300/h8300.md
(call): Changed assembly output to get processed by
print_operand function.
(call_value): Same as (call).
* doc/extend.texi
(function_vector): Added description for H8300 target.
=======================================================================
Thanks & Regards,
Ajinkya Dhobale
KPIT Cummins Infosystems Ltd,
Pune (INDIA)
[-- Attachment #2: h8300-func-vect.patch --]
[-- Type: application/octet-stream, Size: 7304 bytes --]
diff -upr old-gcc/config/h8300/h8300.c gcc/config/h8300/h8300.c
--- old-gcc/config/h8300/h8300.c 2012-03-16 12:54:58.000000000 +0530
+++ gcc/config/h8300/h8300.c 2012-03-19 17:55:33.000000000 +0530
@@ -91,6 +91,7 @@ static const char *cond_string (enum rtx
static unsigned int h8300_asm_insn_count (const char *);
static tree h8300_handle_fndecl_attribute (tree *, tree, tree, int, bool *);
static tree h8300_handle_eightbit_data_attribute (tree *, tree, tree, int, bool *);
+static tree h8300_handle_function_vector_attribute (tree *, tree, tree, int, bool *);
static tree h8300_handle_tiny_data_attribute (tree *, tree, tree, int, bool *);
static void h8300_print_operand_address (FILE *, rtx);
static void h8300_print_operand (FILE *, rtx, int);
@@ -1335,6 +1336,7 @@ h8300_rtx_costs (rtx x, int code, int ou
\f
/* Documentation for the machine specific operand escapes:
+ 'B' print jsr operand
'E' like s but negative.
'F' like t but negative.
'G' constant just the negative
@@ -1408,6 +1410,63 @@ h8300_print_operand (FILE *file, rtx x,
switch (code)
{
+ case 'B':
+ switch (GET_CODE (x))
+ {
+ case MEM:
+ {
+ rtx inside = XEXP (x, 0);
+ if (GET_CODE (inside) == SYMBOL_REF
+ && (SYMBOL_REF_FLAGS (inside) & SYMBOL_FLAG_FUNCVEC_FUNCTION))
+ {
+ int func_vect_num;
+ tree t;
+ t = SYMBOL_REF_DECL (inside);
+
+ func_vect_num = TREE_INT_CST_LOW (TREE_VALUE (TREE_VALUE (
+ lookup_attribute (
+ "function_vector",
+ DECL_ATTRIBUTES (t)))));
+ fprintf (file, "@@%d:8", (func_vect_num & 0xff));
+ }
+ else if (GET_CODE (inside) == SYMBOL_REF)
+ {
+ fprintf (file, "@");
+ assemble_name (file, XSTR (inside, 0));
+ }
+ else if (GET_CODE (inside) == REG)
+ {
+ fprintf (file, "@");
+
+ if (TARGET_H8300)
+ fprintf (file, "%s", names_big[REGNO (inside)]);
+ else
+ fprintf (file, "%s", names_extended[REGNO (inside)]);
+ }
+ else if (GET_CODE (inside) == CONST_INT)
+ {
+ fprintf (file,"@");
+
+ if (TARGET_H8300 | TARGET_NORMAL_MODE)
+ fprintf (file, "%d", XINT (inside, 0) & 0xffff);
+ else
+ fprintf (file, "%d", XINT (inside, 0) & 0xffffff);
+ }
+ else if (GET_CODE (inside) == CONST
+ && GET_CODE (XEXP (inside, 0)) == PLUS
+ && GET_CODE (XEXP (XEXP (inside, 0), 0)) == SYMBOL_REF)
+ {
+ fprintf (file, "@");
+ assemble_name (file, XSTR (XEXP (XEXP (inside, 0), 0), 0));
+ fprintf (file, "+%d", XINT (XEXP (XEXP (inside, 0), 1), 0));
+ }
+ }
+ break;
+
+ default:
+ abort ();
+ }
+ break;
case 'E':
switch (GET_CODE (x))
{
@@ -5371,8 +5430,8 @@ static const struct attribute_spec h8300
h8300_handle_fndecl_attribute, false },
{ "monitor", 0, 0, true, false, false,
h8300_handle_fndecl_attribute, false },
- { "function_vector", 0, 0, true, false, false,
- h8300_handle_fndecl_attribute, false },
+ { "function_vector", 1, 1, true, false, false,
+ h8300_handle_function_vector_attribute, false },
{ "eightbit_data", 0, 0, true, false, false,
h8300_handle_eightbit_data_attribute, false },
{ "tiny_data", 0, 0, true, false, false,
@@ -5398,7 +5457,31 @@ h8300_handle_fndecl_attribute (tree *nod
return NULL_TREE;
}
+/* Handle a "function_vector" attribute; arguments as in
+ struct attribute_spec.handler. */
+static tree
+h8300_handle_function_vector_attribute (tree *node, tree name,
+ tree args ATTRIBUTE_UNUSED,
+ int flags ATTRIBUTE_UNUSED,
+ bool *no_add_attrs)
+{
+ if (TREE_CODE (*node) != FUNCTION_DECL)
+ {
+ warning (OPT_Wattributes, "%qE attribute only applies to functions",
+ name);
+ *no_add_attrs = true;
+ }
+ else if (TREE_CODE (TREE_VALUE (args)) != INTEGER_CST)
+ {
+ /* The argument must be a constant integer. */
+ warning (OPT_Wattributes, "%qE attribute argument not an integer constant",
+ name);
+ *no_add_attrs = true;
+ }
+ return NULL_TREE;
+}
+
/* Handle an "eightbit_data" attribute; arguments as in
struct attribute_spec.handler. */
static tree
diff -upr old-gcc/config/h8300/h8300.md gcc/config/h8300/h8300.md
--- old-gcc/config/h8300/h8300.md 2012-03-16 12:54:58.000000000 +0530
+++ gcc/config/h8300/h8300.md 2012-03-16 12:56:52.000000000 +0530
@@ -2489,14 +2489,7 @@
[(call (match_operand:QI 0 "call_insn_operand" "or")
(match_operand:HI 1 "general_operand" "g"))]
""
- "*
-{
- if (GET_CODE (XEXP (operands[0], 0)) == SYMBOL_REF
- && SYMBOL_REF_FLAG (XEXP (operands[0], 0)))
- return \"jsr\\t@%0:8\";
- else
- return \"jsr\\t%0\";
-}"
+ "jsr %B0"
[(set_attr "type" "call")
(set (attr "length")
(if_then_else (match_operand:QI 0 "small_call_insn_operand" "")
@@ -2513,14 +2506,7 @@
(call (match_operand:QI 1 "call_insn_operand" "or")
(match_operand:HI 2 "general_operand" "g")))]
""
- "*
-{
- if (GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF
- && SYMBOL_REF_FLAG (XEXP (operands[1], 0)))
- return \"jsr\\t@%1:8\";
- else
- return \"jsr\\t%1\";
-}"
+ "jsr %B1"
[(set_attr "type" "call")
(set (attr "length")
(if_then_else (match_operand:QI 0 "small_call_insn_operand" "")
diff -upr old-gcc/doc/extend.texi gcc/doc/extend.texi
--- old-gcc/doc/extend.texi 2012-03-16 12:55:45.000000000 +0530
+++ gcc/doc/extend.texi 2012-03-16 12:56:52.000000000 +0530
@@ -2651,13 +2651,17 @@ The target may also allow additional typ
@xref{Target Format Checks,,Format Checks Specific to Particular
Target Machines}.
-@item function_vector
+@item function_vector (@var{vector_address})
@cindex calling functions through the function vector on H8/300, M16C, M32C and SH2A processors
Use this attribute on the H8/300, H8/300H, and H8S to indicate that the specified
function should be called through the function vector. Calling a
function through the function vector will reduce code size, however;
the function vector has a limited size (maximum 128 entries on the H8/300
and 64 entries on the H8/300H and H8S) and shares space with the interrupt vector.
+The "@var{vector_address}" is the vector location in the range from 0 to 255.
+Compiler uses 2 bytes instead of 4 bytes to call a function declared with this
+attribute. For this compiler uses memory indirect call using jsr @@aa:8
+instruction.
In SH2A target, this attribute declares a function to be called using the
TBR relative addressing mode. The argument to this attribute is the entry
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH H8300] Add function_vector attribute
2012-03-26 14:18 [PATCH H8300] Add function_vector attribute Ajinkya Dhobale
@ 2012-03-26 15:31 ` Jeff Law
2012-03-28 15:10 ` Ajinkya Dhobale
0 siblings, 1 reply; 7+ messages in thread
From: Jeff Law @ 2012-03-26 15:31 UTC (permalink / raw)
To: Ajinkya Dhobale; +Cc: gcc-patches, Jayant R. Sonar
On 03/26/2012 08:18 AM, Ajinkya Dhobale wrote:
> Hi,
>
> Please find the attached "h8300-func-vect.patch" that adds
> 'function_vector' attribute for H8300 target.
>
> I have taken the reference from previously posted patch for GCC-3.4.2:
> http://gcc.gnu.org/ml/gcc-patches/2004-09/msg02529.html
>
> I have updated functionality of the attribute to GCC-4.7.0 source.
> Can someone please review the patch and let me know if there should be
> any modifications in it?
>
> I will briefly mention about 'function_vector' attribute.
> For test code:
[ ... ]
How is this different than the function vector support that is already
in GCC for the H8/300 series processors?
Jeff
^ permalink raw reply [flat|nested] 7+ messages in thread
* RE: [PATCH H8300] Add function_vector attribute
2012-03-26 15:31 ` Jeff Law
@ 2012-03-28 15:10 ` Ajinkya Dhobale
2012-03-29 20:13 ` Jeff Law
0 siblings, 1 reply; 7+ messages in thread
From: Ajinkya Dhobale @ 2012-03-28 15:10 UTC (permalink / raw)
To: Jeff Law; +Cc: gcc-patches, Jayant R. Sonar
Hi Jeff,
Thank you for replying to the post.
>> How is this different than the function vector support that is
>> already in GCC for the H8/300 series processors?
Current H8/300 implementation of function vector seems inappropriate.
This patch fixes following problems from it.
1. Attribute syntax:
The function vector attribute is expected to accept one argument i.e.
vector number.
Ref: http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html#index-
calling-functions-through-the-function-vector-on-H8_002f300_002c-
M16C_002c-M32C-and-SH2A-processors-2525
However, with H8/300 target, it does not accept any argument and test case compilation fails with an error message:
error: wrong number of arguments specified for function_vector attribute
This patch fixes this problem.
2. Addressing mode support:
Currently, even for function vectors, GCC generates instruction 'jsr'
in absolute addressing mode which is incorrect. Instead of that, it should be generating 'jsr' in indirect memory addressing mode (@@aa:8).
This patch fixes this problem as well.
Thanks & Regards,
Ajinkya Dhobale
KPIT Cummins Infosystems Ltd,
Pune (INDIA)
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH H8300] Add function_vector attribute
2012-03-28 15:10 ` Ajinkya Dhobale
@ 2012-03-29 20:13 ` Jeff Law
2012-04-05 6:04 ` Ajinkya Dhobale
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: Jeff Law @ 2012-03-29 20:13 UTC (permalink / raw)
To: Ajinkya Dhobale; +Cc: gcc-patches, Jayant R. Sonar
On 03/28/2012 09:10 AM, Ajinkya Dhobale wrote:
> Hi Jeff,
>
> Thank you for replying to the post.
>
>>> How is this different than the function vector support that is
>>> already in GCC for the H8/300 series processors?
>
> Current H8/300 implementation of function vector seems inappropriate.
> This patch fixes following problems from it.
>
> 1. Attribute syntax:
> The function vector attribute is expected to accept one argument i.e.
> vector number.
>
> Ref: http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html#index-
> calling-functions-through-the-function-vector-on-H8_002f300_002c-
> M16C_002c-M32C-and-SH2A-processors-2525
>
> However, with H8/300 target, it does not accept any argument and test case compilation fails with an error message:
> error: wrong number of arguments specified for function_vector attribute
>
> This patch fixes this problem.
Ok. So the fundamental difference is your version of function_vector is
programmer directed. ie, the programmer explicitly assigns slots for
functions to call through the function vector.
The existing implementation relies upon the linker to handle assignment
of a specific slot.
The problem with installing your patch as-is is it will break existing
code which utilizes the linker driven assignment of slots.
ISTM that you either need to use a different attribute name or find a
way to make the argument optional.
>
> 2. Addressing mode support:
> Currently, even for function vectors, GCC generates instruction 'jsr'
> in absolute addressing mode which is incorrect. Instead of that, it should be generating 'jsr' in indirect memory addressing mode (@@aa:8).
>
I think you need to investigate further since functions marked with the
attribute should be called through the function vector.
When the linker assigns the slot, the proper syntax is jsr <name>:8
Obviously for the programmer assigned slots, you'll need to use a
different syntax. But simply removing the linker assigned slot support
is wrong.
Jeff
^ permalink raw reply [flat|nested] 7+ messages in thread
* RE: [PATCH H8300] Add function_vector attribute
2012-03-29 20:13 ` Jeff Law
@ 2012-04-05 6:04 ` Ajinkya Dhobale
2012-04-30 12:28 ` [Ping] " Ajinkya Dhobale
2012-05-21 14:07 ` [Ping 2] " Ajinkya Dhobale
2 siblings, 0 replies; 7+ messages in thread
From: Ajinkya Dhobale @ 2012-04-05 6:04 UTC (permalink / raw)
To: Jeff Law; +Cc: gcc-patches, Jayant R. Sonar
[-- Attachment #1: Type: text/plain, Size: 2025 bytes --]
Hello Jeff,
>> So the fundamental difference is your version of function_vector is
>> programmer directed.
Yes, programmer will need to assign function vector number manually
during declaration of the attribute.
>> I think you need to investigate further since functions marked with
>> the attribute should be called through the function vector.
>>
>> When the linker assigns the slot, the proper syntax is jsr <name>:8
Even I was looking for same. However, when I checked the object dump of
the generated binary it had 'jsr' instruction in absolute addressing format.
Generated assembly was like:
mov.w r7,r6
jsr @_foo
mov.w @r7+,r6
And object dump of output file was like:
0d 76 mov.w r7,r6
5e 00 02 30 jsr @0x230:24
6d 76 mov.w @r7+,r6
Do I need to pass any additional command line options during compilation
to generate 'jsr' in format 'jsr <name>:8'?
>> ISTM that you either need to use a different attribute name or find a
>> way to make the argument optional.
Because of the 'jsr' generated in absolute addressing format,
I thought current implementation might be broken and hence I modified it.
However, if current implementation is to be kept as is then I will prefer
making argument passing optional. In that case, I will repost the modified
patch.
Meanwhile, I have modified the previous patch for following two things:
1. Initially I was generating 'jsr' as 'jsr @@vect-number:8'.
However, I found it was not working on hardware.
H8 programming manuals mention, 'jsr' instruction in memory indirect
format expects 8-bit absolute address to be encoded in instruction code.
Hence I modified the patch to generate it as:
'jsr @@<vect-number x pointer size>:8'.
Now it is working appropriately on hardware.
2. In H8, pointer size is 2 bytes in 'normal' CPU mode and 4 bytes in
other modes. I modified the patch to vary 'jsr' destination generation
accordingly.
Thanks and Regards,
Ajinkya
[-- Attachment #2: modified-h8300-func-vect.patch --]
[-- Type: application/octet-stream, Size: 8034 bytes --]
diff -upr orig-gcc/config/h8300/h8300.c gcc/config/h8300/h8300.c
--- orig-gcc/config/h8300/h8300.c 2012-04-04 18:29:36.000000000 +0530
+++ gcc/config/h8300/h8300.c 2012-04-04 19:35:34.000000000 +0530
@@ -91,6 +91,7 @@ static const char *cond_string (enum rtx
static unsigned int h8300_asm_insn_count (const char *);
static tree h8300_handle_fndecl_attribute (tree *, tree, tree, int, bool *);
static tree h8300_handle_eightbit_data_attribute (tree *, tree, tree, int, bool *);
+static tree h8300_handle_function_vector_attribute (tree *, tree, tree, int, bool *);
static tree h8300_handle_tiny_data_attribute (tree *, tree, tree, int, bool *);
static void h8300_print_operand_address (FILE *, rtx);
static void h8300_print_operand (FILE *, rtx, int);
@@ -1335,6 +1336,7 @@ h8300_rtx_costs (rtx x, int code, int ou
\f
/* Documentation for the machine specific operand escapes:
+ 'B' print jsr operand
'E' like s but negative.
'F' like t but negative.
'G' constant just the negative
@@ -1408,6 +1410,68 @@ h8300_print_operand (FILE *file, rtx x,
switch (code)
{
+ case 'B':
+ switch (GET_CODE (x))
+ {
+ case MEM:
+ {
+ rtx inside = XEXP (x, 0);
+ if (GET_CODE (inside) == SYMBOL_REF
+ && (SYMBOL_REF_FLAGS (inside) & SYMBOL_FLAG_FUNCVEC_FUNCTION))
+ {
+ int func_vect_num;
+ tree t;
+ t = SYMBOL_REF_DECL (inside);
+
+ func_vect_num = TREE_INT_CST_LOW (TREE_VALUE (TREE_VALUE (
+ lookup_attribute (
+ "function_vector",
+ DECL_ATTRIBUTES (t)))));
+ if (TARGET_NORMAL_MODE)
+ func_vect_num*=2;
+ else
+ func_vect_num*=4;
+
+ fprintf (file, "@@%d:8", (func_vect_num & 0xff));
+ }
+ else if (GET_CODE (inside) == SYMBOL_REF)
+ {
+ fprintf (file, "@");
+ assemble_name (file, XSTR (inside, 0));
+ }
+ else if (GET_CODE (inside) == REG)
+ {
+ fprintf (file, "@");
+
+ if (TARGET_H8300)
+ fprintf (file, "%s", names_big[REGNO (inside)]);
+ else
+ fprintf (file, "%s", names_extended[REGNO (inside)]);
+ }
+ else if (GET_CODE (inside) == CONST_INT)
+ {
+ fprintf (file,"@");
+
+ if (TARGET_H8300 | TARGET_NORMAL_MODE)
+ fprintf (file, "%d", XINT (inside, 0) & 0xffff);
+ else
+ fprintf (file, "%d", XINT (inside, 0) & 0xffffff);
+ }
+ else if (GET_CODE (inside) == CONST
+ && GET_CODE (XEXP (inside, 0)) == PLUS
+ && GET_CODE (XEXP (XEXP (inside, 0), 0)) == SYMBOL_REF)
+ {
+ fprintf (file, "@");
+ assemble_name (file, XSTR (XEXP (XEXP (inside, 0), 0), 0));
+ fprintf (file, "+%d", XINT (XEXP (XEXP (inside, 0), 1), 0));
+ }
+ }
+ break;
+
+ default:
+ abort ();
+ }
+ break;
case 'E':
switch (GET_CODE (x))
{
@@ -5371,8 +5435,8 @@ static const struct attribute_spec h8300
h8300_handle_fndecl_attribute, false },
{ "monitor", 0, 0, true, false, false,
h8300_handle_fndecl_attribute, false },
- { "function_vector", 0, 0, true, false, false,
- h8300_handle_fndecl_attribute, false },
+ { "function_vector", 1, 1, true, false, false,
+ h8300_handle_function_vector_attribute, false },
{ "eightbit_data", 0, 0, true, false, false,
h8300_handle_eightbit_data_attribute, false },
{ "tiny_data", 0, 0, true, false, false,
@@ -5398,7 +5462,49 @@ h8300_handle_fndecl_attribute (tree *nod
return NULL_TREE;
}
+/* Handle a "function_vector" attribute; arguments as in
+ struct attribute_spec.handler. */
+
+static tree
+h8300_handle_function_vector_attribute (tree *node, tree name,
+ tree args ATTRIBUTE_UNUSED,
+ int flags ATTRIBUTE_UNUSED,
+ bool *no_add_attrs)
+{
+ int func_vect_num;
+ func_vect_num = TREE_INT_CST_LOW(TREE_VALUE (args));
+
+ if (TREE_CODE (*node) != FUNCTION_DECL)
+ {
+ warning (OPT_Wattributes, "%qE attribute only applies to functions",
+ name);
+ *no_add_attrs = true;
+ }
+ else if (TREE_CODE (TREE_VALUE (args)) != INTEGER_CST)
+ {
+ /* The argument must be a constant integer. */
+ warning (OPT_Wattributes, "%qE attribute argument not an integer constant",
+ name);
+ *no_add_attrs = true;
+ }
+
+ if (TARGET_NORMAL_MODE && func_vect_num > 127)
+ {
+ warning (OPT_Wattributes, "%qE attribute argument should be between 0 to 127 for Normal Mode, directive ignored",
+ name);
+ *no_add_attrs = true;
+ }
+ else if(!TARGET_NORMAL_MODE && func_vect_num > 63)
+ {
+ warning (OPT_Wattributes, "%qE attribute argument should be between 0 to 63, directive ignored",
+ name);
+ *no_add_attrs = true;
+ }
+
+ return NULL_TREE;
+}
+
/* Handle an "eightbit_data" attribute; arguments as in
struct attribute_spec.handler. */
static tree
diff -upr orig-gcc/config/h8300/h8300.md gcc/config/h8300/h8300.md
--- orig-gcc/config/h8300/h8300.md 2012-04-04 18:29:36.000000000 +0530
+++ gcc/config/h8300/h8300.md 2012-04-03 21:31:46.000000000 +0530
@@ -2489,14 +2489,7 @@
[(call (match_operand:QI 0 "call_insn_operand" "or")
(match_operand:HI 1 "general_operand" "g"))]
""
- "*
-{
- if (GET_CODE (XEXP (operands[0], 0)) == SYMBOL_REF
- && SYMBOL_REF_FLAG (XEXP (operands[0], 0)))
- return \"jsr\\t@%0:8\";
- else
- return \"jsr\\t%0\";
-}"
+ "jsr %B0"
[(set_attr "type" "call")
(set (attr "length")
(if_then_else (match_operand:QI 0 "small_call_insn_operand" "")
@@ -2513,14 +2506,7 @@
(call (match_operand:QI 1 "call_insn_operand" "or")
(match_operand:HI 2 "general_operand" "g")))]
""
- "*
-{
- if (GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF
- && SYMBOL_REF_FLAG (XEXP (operands[1], 0)))
- return \"jsr\\t@%1:8\";
- else
- return \"jsr\\t%1\";
-}"
+ "jsr %B1"
[(set_attr "type" "call")
(set (attr "length")
(if_then_else (match_operand:QI 0 "small_call_insn_operand" "")
diff -upr orig-gcc/doc/extend.texi gcc/doc/extend.texi
--- orig-gcc/doc/extend.texi 2012-04-04 18:29:47.000000000 +0530
+++ gcc/doc/extend.texi 2012-04-03 21:31:46.000000000 +0530
@@ -2651,13 +2651,17 @@ The target may also allow additional typ
@xref{Target Format Checks,,Format Checks Specific to Particular
Target Machines}.
-@item function_vector
+@item function_vector (@var{vector_address})
@cindex calling functions through the function vector on H8/300, M16C, M32C and SH2A processors
Use this attribute on the H8/300, H8/300H, and H8S to indicate that the specified
function should be called through the function vector. Calling a
function through the function vector will reduce code size, however;
the function vector has a limited size (maximum 128 entries on the H8/300
and 64 entries on the H8/300H and H8S) and shares space with the interrupt vector.
+The "@var{vector_address}" is the vector location in the range from 0 to 255.
+Compiler uses 2 bytes instead of 4 bytes to call a function declared with this
+attribute. For this compiler uses memory indirect call using jsr @@aa:8
+instruction.
In SH2A target, this attribute declares a function to be called using the
TBR relative addressing mode. The argument to this attribute is the entry
Only in gcc/: tags
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Ping] [PATCH H8300] Add function_vector attribute
2012-03-29 20:13 ` Jeff Law
2012-04-05 6:04 ` Ajinkya Dhobale
@ 2012-04-30 12:28 ` Ajinkya Dhobale
2012-05-21 14:07 ` [Ping 2] " Ajinkya Dhobale
2 siblings, 0 replies; 7+ messages in thread
From: Ajinkya Dhobale @ 2012-04-30 12:28 UTC (permalink / raw)
To: Jeff Law; +Cc: gcc-patches, Jayant R. Sonar
Hi,
This is a ping for the patch that add 'function_vector' attribute for
H8300 targets:
http://gcc.gnu.org/ml/gcc-patches/2012-04/msg00250.html
The patch has been updated to address Jeff's comments which can be referred
at: http://gcc.gnu.org/ml/gcc-patches/2012-03/msg01884.html
Please review the patch.
Thanks & Regards,
Ajinkya Dhobale
KPIT Cummins, Pune.
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Ping 2] [PATCH H8300] Add function_vector attribute
2012-03-29 20:13 ` Jeff Law
2012-04-05 6:04 ` Ajinkya Dhobale
2012-04-30 12:28 ` [Ping] " Ajinkya Dhobale
@ 2012-05-21 14:07 ` Ajinkya Dhobale
2 siblings, 0 replies; 7+ messages in thread
From: Ajinkya Dhobale @ 2012-05-21 14:07 UTC (permalink / raw)
To: Jeff Law; +Cc: gcc-patches, Jayant R. Sonar
PING 2:
This is a ping for the patch that add 'function_vector' attribute for
H8300 targets:
http://gcc.gnu.org/ml/gcc-patches/2012-04/msg00250.html
The patch has been updated to address Jeff's comments which can be referred
at: http://gcc.gnu.org/ml/gcc-patches/2012-03/msg01884.html
Please review the patch.
Thanks & Regards,
Ajinkya Dhobale
KPIT Cummins, Pune.
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2012-05-21 14:07 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-03-26 14:18 [PATCH H8300] Add function_vector attribute Ajinkya Dhobale
2012-03-26 15:31 ` Jeff Law
2012-03-28 15:10 ` Ajinkya Dhobale
2012-03-29 20:13 ` Jeff Law
2012-04-05 6:04 ` Ajinkya Dhobale
2012-04-30 12:28 ` [Ping] " Ajinkya Dhobale
2012-05-21 14:07 ` [Ping 2] " Ajinkya Dhobale
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).