This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Blackfin: New builtin for unaligned loads
- From: Bernd Schmidt <bernds_cb1 at t-online dot de>
- To: GCC Patches <gcc-patches at gcc dot gnu dot org>
- Date: Thu, 15 May 2008 15:25:32 +0200
- Subject: Blackfin: New builtin for unaligned loads
This adds another builtin, compatible with VDSP, to the Blackfin port.
Committed.
Bernd
--
This footer brought to you by insane German lawmakers.
Analog Devices GmbH Wilhelm-Wagenfeld-Str. 6 80807 Muenchen
Sitz der Gesellschaft Muenchen, Registergericht Muenchen HRB 40368
Geschaeftsfuehrer Thomas Wessel, William A. Martin, Margaret Seif
Index: ChangeLog
===================================================================
--- ChangeLog (revision 135344)
+++ ChangeLog (working copy)
@@ -5,6 +5,11 @@
* config/bfin/bfin.c (bfin_return_in_memory): Now static. Return bool.
(TARGET_RETURN_IN_MEMORY): Define.
+ * config/bfin/bfin.md (loadbytes): New pattern.
+ * config/bfin/bfin.c (enum bfin_builtins): Add BFIN_BUILTIN_LOADBYTES.
+ (bfin_init_builtins): Initialize it.
+ (bdesc_1arg): Add it.
+
2008-05-15 Richard Guenther <rguenther@suse.de>
PR middle-end/36244
Index: config/bfin/bfin.c
===================================================================
--- config/bfin/bfin.c (revision 135344)
+++ config/bfin/bfin.c (working copy)
@@ -5228,6 +5228,8 @@ enum bfin_builtins
BFIN_BUILTIN_CPLX_SQU,
+ BFIN_BUILTIN_LOADBYTES,
+
BFIN_BUILTIN_MAX
};
@@ -5282,7 +5284,11 @@ bfin_init_builtins (void)
tree short_ftype_v2hi
= build_function_type_list (short_integer_type_node, V2HI_type_node,
NULL_TREE);
-
+ tree int_ftype_pint
+ = build_function_type_list (integer_type_node,
+ build_pointer_type (integer_type_node),
+ NULL_TREE);
+
/* Add the remaining MMX insns with somewhat more complicated types. */
def_builtin ("__builtin_bfin_csync", void_ftype_void, BFIN_BUILTIN_CSYNC);
def_builtin ("__builtin_bfin_ssync", void_ftype_void, BFIN_BUILTIN_SSYNC);
@@ -5409,6 +5415,11 @@ bfin_init_builtins (void)
BFIN_BUILTIN_CPLX_MSU_16_S40);
def_builtin ("__builtin_bfin_csqu_fr16", v2hi_ftype_v2hi,
BFIN_BUILTIN_CPLX_SQU);
+
+ /* "Unaligned" load. */
+ def_builtin ("__builtin_bfin_loadbytes", int_ftype_pint,
+ BFIN_BUILTIN_LOADBYTES);
+
}
@@ -5456,6 +5467,8 @@ static const struct builtin_description
static const struct builtin_description bdesc_1arg[] =
{
+ { CODE_FOR_loadbytes, "__builtin_bfin_loadbytes", BFIN_BUILTIN_LOADBYTES, 0 },
+
{ CODE_FOR_ones, "__builtin_bfin_ones", BFIN_BUILTIN_ONES, 0 },
{ CODE_FOR_signbitshi2, "__builtin_bfin_norm_fr1x16", BFIN_BUILTIN_NORM_1X16, 0 },
Index: config/bfin/bfin.md
===================================================================
--- config/bfin/bfin.md (revision 135286)
+++ config/bfin/bfin.md (working copy)
@@ -4253,3 +4253,13 @@ (define_insn "lshifthi3"
%0 = %1 >> %N2 (V)%!"
[(set_attr "type" "dsp32")])
+;; Load without alignment exception (masking off low bits)
+
+(define_insn "loadbytes"
+ [(set (match_operand:SI 0 "register_operand" "=d")
+ (mem:SI (and:SI (match_operand:SI 1 "register_operand" "b")
+ (const_int -4))))]
+ ""
+ "DISALGNEXCPT || %0 = [%1];"
+ [(set_attr "type" "mcld")
+ (set_attr "length" "8")])