aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorBernd Schmidt <bernd.schmidt@analog.com>2008-05-15 13:25:26 +0000
committerBernd Schmidt <bernds@gcc.gnu.org>2008-05-15 13:25:26 +0000
commit8fa477f7d5f7ecfc1337351251531c695a900786 (patch)
tree35c62be82cdb0b0781db89031ad59232ab3ed2f3 /gcc
parent4e8c438fe7373ee4a2a223b9efe6fc3b4329dcb6 (diff)
downloadgcc-8fa477f7d5f7ecfc1337351251531c695a900786.zip
gcc-8fa477f7d5f7ecfc1337351251531c695a900786.tar.gz
gcc-8fa477f7d5f7ecfc1337351251531c695a900786.tar.bz2
bfin.md (loadbytes): New pattern.
* 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. From-SVN: r135351
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/bfin/bfin.c15
-rw-r--r--gcc/config/bfin/bfin.md10
3 files changed, 31 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 0e0912d..3135d2c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2008-05-15 Bernd Schmidt <bernd.schmidt@analog.com>
+
+ * 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 Sa Liu <saliu@de.ibm.com>
* testsuite/gfortran.dg/c_kind_int128_test1.f03: New.
diff --git a/gcc/config/bfin/bfin.c b/gcc/config/bfin/bfin.c
index f48ab0f..933b12b 100644
--- a/gcc/config/bfin/bfin.c
+++ b/gcc/config/bfin/bfin.c
@@ -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 bdesc_2arg[] =
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 },
diff --git a/gcc/config/bfin/bfin.md b/gcc/config/bfin/bfin.md
index f535799..6b1c1e8 100644
--- a/gcc/config/bfin/bfin.md
+++ b/gcc/config/bfin/bfin.md
@@ -4253,3 +4253,13 @@
%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")])