diff --git a/gcc/config.gcc b/gcc/config.gcc
index cecf640a645c..8281584add80 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -341,7 +341,7 @@ arc-*-* | arc[eb]*-*-*)
c_target_objs="arc-c.o"
cxx_target_objs="arc-c.o"
extra_options="${extra_options} arc/arc-tables.opt g.opt"
- extra_headers="arc-simd.h"
+ extra_headers="arc-simd.h arcle.h"
;;
arc64-*-*)
cpu_type=arc64
diff --git a/gcc/config/arc/arcle.h b/gcc/config/arc/arcle.h
new file mode 100644
index 000000000000..16429c150bd7
--- /dev/null
+++ b/gcc/config/arc/arcle.h
@@ -0,0 +1,1651 @@
+/* Copyright (C) 2017 Free Software Foundation, Inc.
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 3, or (at your option) any later
+ version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with GCC; see the file COPYING3. If not see
+ . */
+
+#ifndef _GCC_ARC_CLE_H
+#define _GCC_ARC_CLE_H 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include
+
+/* Recognized data types. */
+#if defined (__ARC_MPY_DMPY__) || defined (__ARC_MPY_QMACW__)
+typedef short __simd32_int2x16_t __attribute__ ((vector_size (4)));
+#endif
+
+#ifdef __ARC_MPY_QMACW_
+typedef char __simd32_int4x8_t __attribute__ ((vector_size (4)));
+typedef short __simd64_int4x16_t __attribute__ ((vector_size (8)));
+typedef int __simd64_int2x32_t __attribute__ ((vector_size (8)));
+#endif
+
+/* Recognized extension functions. */
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_abss (int32_t __a)
+{
+ int32_t __dst;
+ __asm__ ("abss %0,%1\n"
+ : "=r" (__dst)
+ : "r" (__a));
+ return __dst;
+}
+
+__extension__ static __inline int16_t __attribute__ ((__always_inline__))
+_abssh (int16_t __a)
+{
+ int16_t __dst;
+ __asm__ ("abssh %0,%1\n"
+ : "=r" (__dst)
+ : "r" (__a));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_adds (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("adds %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rCal" (__b));
+ return __dst;
+}
+
+__extension__ static __inline void __attribute__ ((__always_inline__))
+_aslacc (int32_t __a)
+{
+ __asm__ ("aslacc %0\n"
+ :
+ : "r" (__a)
+ : "memory");
+}
+
+__extension__ static __inline void __attribute__ ((__always_inline__))
+_aslsacc (int32_t __a)
+{
+ __asm__ ("aslsacc %0\n"
+ :
+ : "r" (__a)
+ : "memory");
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_asls (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("asls %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rCal" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_asrs (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("asrs %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rCal" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_asrsr (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("asrsr %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rCal" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_cbflyhf0r (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("cbflyhf0r %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rCal" (__b)
+ : "memory");
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_cbflyhf1r (int32_t __a)
+{
+ int32_t __dst;
+ __asm__ ("cbflyhf1r %0,%1\n"
+ : "=r" (__dst)
+ : "r" (__a)
+ : "memory");
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_cmacchfr (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("cmacchfr %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rCal" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_cmacchnfr (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("cmacchnfr %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rCal" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_cmachfr (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("cmachfr %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rCal" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_cmachnfr (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("cmachnfr %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rCal" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_cmpychfr (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("cmpychfr %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rCal" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_cmpychnfr (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("cmpychnfr %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rCal" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_cmpyhfmr (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("cmpyhfmr %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rCal" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_cmpyhfr (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("cmpyhfr %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rCal" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_cmpyhnfr (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("cmpyhnfr %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rCal" (__b));
+ return __dst;
+}
+
+#if defined (__ARC_MPY_DMPY__) || defined (__ARC_MPY_QMACW__)
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_dmach (__simd32_int2x16_t __a, __simd32_int2x16_t __b)
+{
+ return __builtin_arc_dmach (__a, __b);
+}
+#endif
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_dmachbl (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("dmachbl %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rCal" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_dmachbm (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("dmachbm %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rCal" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_dmachf (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("dmachf %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rCal" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_dmachfr (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("dmachfr %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rCal" (__b));
+ return __dst;
+}
+
+#if defined (__ARC_MPY_DMPY__) || defined (__ARC_MPY_QMACW__)
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_dmachu (__simd32_int2x16_t __a, __simd32_int2x16_t __b)
+{
+ return __builtin_arc_dmachu (__a, __b);
+}
+
+#ifdef __ARC_MPY_QMACW_
+__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+_dmacwh (__simd64_int2x32_t __a, __simd32_int2x16_t __b)
+{
+ return __builtin_arc_dmacwh (__a, __b);
+}
+
+__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+_dmacwhu (__simd64_int2x32_t __a, __simd32_int2x16_t __b)
+{
+ return __builtin_arc_dmacwhu (__a, __b);
+}
+#endif
+#endif
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_dmacwhf (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("dmacwhf %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rCal" (__b));
+ return __dst;
+}
+
+#if defined (__ARC_MPY_DMPY__) || defined (__ARC_MPY_QMACW__)
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_dmpyh (__simd32_int2x16_t __a, __simd32_int2x16_t __b)
+{
+ return __builtin_arc_dmpyh (__a, __b);
+}
+#endif
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_dmpyhbl (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("dmpyhbl %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rCal" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_dmpyhbm (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("dmpyhbm %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rCal" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_dmpyhf (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("dmpyhf %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rCal" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_dmpyhfr (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("dmpyhfr %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rCal" (__b));
+ return __dst;
+}
+
+#if defined (__ARC_MPY_DMPY__) || defined (__ARC_MPY_QMACW__)
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_dmpyhu (__simd32_int2x16_t __a, __simd32_int2x16_t __b)
+{
+ return __builtin_arc_dmpyhu (__a, __b);
+}
+#endif
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_dmpyhwf (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("dmpyhwf %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rCal" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_dmpywh (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("dmpywh %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rCal" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_dmpywhu (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("dmpywhu %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rCal" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_dmpywhf (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("dmpywhf %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rCal" (__b));
+ return __dst;
+}
+
+__extension__ static __inline void __attribute__ ((__always_inline__))
+_flagacc (int32_t __a)
+{
+ __asm__ ("flagacc %0\n"
+ :
+ : "r" (__a)
+ : "memory" );
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_getacc (int32_t __a)
+{
+ int32_t __dst;
+ __asm__ ("getacc %0,%1\n"
+ : "=r" (__dst)
+ : "r" (__a));
+ return __dst;
+}
+
+__extension__ static __inline void __attribute__ ((__always_inline__))
+_kflag (uint32_t __a)
+{
+ __builtin_arc_kflag (__a);
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_lr (int32_t __a)
+{
+ return __builtin_arc_lr (__a);
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_mac (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("mac %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rCal" (__b)
+ : "r58", "r59");
+ return __dst;
+}
+
+__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+_macd (int32_t __a, int32_t __b)
+{
+ int64_t __dst;
+ __asm__ ("macd %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rCal" (__b)
+ : "r58", "r59");
+ return __dst;
+}
+
+__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+_macdf (int32_t __a, int32_t __b)
+{
+ int64_t __dst;
+ __asm__ ("macdf %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rCal" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+_macdu (int32_t __a, int32_t __b)
+{
+ int64_t __dst;
+ __asm__ ("macdu %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rCal" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_macf (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("macf %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rCal" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_macfr (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("macfr %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rCal" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_macu (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("macu %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rCal" (__b)
+ : "r58", "r59");
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_macwhfm (int32_t __a, int16_t __b)
+{
+ int32_t __dst;
+ __asm__ ("macwhfm %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "r" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_macwhfmr (int32_t __a, int16_t __b)
+{
+ int32_t __dst;
+ __asm__ ("macwhfmr %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "r" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_macwhl (int32_t __a, int16_t __b)
+{
+ int32_t __dst;
+ __asm__ ("macwhl %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "r" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_macwhul (int32_t __a, int16_t __b)
+{
+ int32_t __dst;
+ __asm__ ("macwhul %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "r" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+_mpydf (int32_t __a, int32_t __b)
+{
+ int64_t __dst;
+ __asm__ ("mpydf %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rCal" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_mpyf (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("mpyf %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rCal" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_mpyfr (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("mpyfr %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rCal" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_mpywhfl (int32_t __a, int16_t __b)
+{
+ int32_t __dst;
+ __asm__ ("mpywhfl %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rCal" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_mpywhflr (int32_t __a, int16_t __b)
+{
+ int32_t __dst;
+ __asm__ ("mpywhflr %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rCal" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_mpywhfm (int32_t __a, int16_t __b)
+{
+ int32_t __dst;
+ __asm__ ("mpywhfm %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rCal" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_mpywhfmr (int32_t __a, int16_t __b)
+{
+ int32_t __dst;
+ __asm__ ("mpywhfmr %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rCal" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_mpywhl (int32_t __a, int16_t __b)
+{
+ int32_t __dst;
+ __asm__ ("mpywhl %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rCal" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_mpywhul (int32_t __a, int16_t __b)
+{
+ int32_t __dst;
+ __asm__ ("mpywhul %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rCal" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+_msubdf (int32_t __a, int32_t __b)
+{
+ int64_t __dst;
+ __asm__ ("msubdf %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rCal" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_msubf (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("msubf %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rCal" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_msubfr (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("msubfr %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rCal" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_negs (int32_t __a)
+{
+ int32_t __dst;
+ __asm__ ("negs %0,%1\n"
+ : "=r" (__dst)
+ : "rCal" (__a));
+ return __dst;
+}
+
+__extension__ static __inline int16_t __attribute__ ((__always_inline__))
+_negsh (int16_t __a)
+{
+ int16_t __dst;
+ __asm__ ("negsh %0,%1\n"
+ : "=r" (__dst)
+ : "rCal" (__a));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_normacc (int32_t __a)
+{
+ int32_t __dst;
+ __asm__ ("normacc %0,%1\n"
+ : "=r" (__dst)
+ : "r" (__a));
+ return __dst;
+}
+
+#ifdef __ARC_MPY_QMACW_
+__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+_qmach (__simd64_int4x16_t __a, __simd64_int4x16_t __b)
+{
+ return __builtin_arc_qmach (__a, __b);
+}
+
+__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+_qmachu (__simd64_int4x16_t __a, __simd64_int4x16_t __b)
+{
+ return __builtin_arc_qmachu (__a, __b);
+}
+#endif
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_qmachf (int64_t __a, int64_t __b)
+{
+ int32_t __dst;
+ __asm__ ("qmachf %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "r" (__b));
+ return __dst;
+}
+
+#ifdef __ARC_MPY_QMACW_
+__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+_qmpyh (__simd64_int4x16_t __a, __simd64_int4x16_t __b)
+{
+ return __builtin_arc_qmpyh (__a, __b);
+}
+
+__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+_qmpyhu (__simd64_int4x16_t __a, __simd64_int4x16_t __b)
+{
+ return __builtin_arc_qmpyhu (__a, __b);
+}
+#endif
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_qmpyhf (int64_t __a, int64_t __b)
+{
+ int32_t __dst;
+ __asm__ ("qmpyhf %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rCal" (__b));
+ return __dst;
+}
+
+__extension__ static __inline void __attribute__ ((__always_inline__))
+_sr (int32_t __a, int32_t __b)
+{
+ __builtin_arc_sr (__a, __b);
+}
+
+__extension__ static __inline int16_t __attribute__ ((__always_inline__))
+_rndh (int16_t __a)
+{
+ int16_t __dst;
+ __asm__ ("rndh %0,%1\n"
+ : "=r" (__dst)
+ : "r" (__a) );
+ return __dst;
+}
+
+__extension__ static __inline int16_t __attribute__ ((__always_inline__))
+_sath (int32_t __a)
+{
+ int16_t __dst;
+ __asm__ ("sath %0,%1\n"
+ : "=r" (__dst)
+ : "rCal" (__a));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_setacc (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("setacc %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rCal" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_subs (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("subs %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rCal" (__b));
+ return __dst;
+}
+
+#if defined (__ARC_MPY_DMPY__) || defined (__ARC_MPY_QMACW__)
+__extension__ static __inline __simd32_int2x16_t __attribute__ ((__always_inline__))
+_vabs2h (__simd32_int2x16_t __a)
+{
+ __simd32_int2x16_t __dst;
+ __asm__ ("vabs2h %0,%1\n"
+ : "=r" (__dst)
+ : "r" (__a));
+ return __dst;
+}
+#endif
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_vabss2h (int32_t __a)
+{
+ int32_t __dst;
+ __asm__ ("vabss2h %0,%1\n"
+ : "=r" (__dst)
+ : "r" (__a));
+ return __dst;
+}
+
+#ifdef __ARC_MPY_QMACW_
+__extension__ static __inline __simd64_int2x32_t __attribute__ ((__always_inline__))
+_vadd2 (__simd64_int2x32_t __a, __simd64_int2x32_t __b)
+{
+ return __a + __b;
+}
+#endif
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_vadds2 (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("vadds2 %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "r" (__b));
+ return __dst;
+}
+
+#if defined (__ARC_MPY_DMPY__) || defined (__ARC_MPY_QMACW__)
+__extension__ static __inline __simd32_int2x16_t __attribute__ ((__always_inline__))
+_vadd2h (__simd32_int2x16_t __a, __simd32_int2x16_t __b)
+{
+ return __a + __b;
+}
+#endif
+
+#ifdef __ARC_DSP__
+__extension__ static __inline __simd32_int4x8_t __attribute__ ((__always_inline__))
+_vadd4b (__simd32_int4x8_t __a, __simd32_int4x8_t __b)
+{
+ __simd32_int4x8_t __dst;
+ __asm__ ("vadd4b %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "r" (__b));
+ return __dst;
+}
+#endif
+
+#ifdef __ARC_MPY_QMACW_
+__extension__ static __inline __simd64_int4x16_t __attribute__ ((__always_inline__))
+_vadd4h (__simd64_int4x16_t __a, __simd64_int4x16_t __b)
+{
+ return __a + __b;
+}
+#endif
+
+__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+_vadds4h (int64_t __a, int64_t __b)
+{
+ int64_t __dst;
+ __asm__ ("vadds4h %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "r" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_vadds2h (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("vadds2h %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "r" (__b));
+ return __dst;
+}
+
+#ifdef __ARC_MPY_QMACW_
+__extension__ static __inline __simd64_int2x32_t __attribute__ ((__always_inline__))
+_vaddsub (__simd64_int2x32_t __a, __simd64_int2x32_t __b)
+{
+ return __builtin_arc_vaddsub (__a, __b);
+}
+
+__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+_vaddsubs (int64_t __a, int64_t __b)
+{
+ int64_t __dst;
+ __asm__ ("vaddsubs %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "r" (__b));
+ return __dst;
+}
+#endif
+
+#if defined (__ARC_MPY_DMPY__) || defined (__ARC_MPY_QMACW__)
+__extension__ static __inline __simd32_int2x16_t __attribute__ ((__always_inline__))
+_vaddsub2h (__simd32_int2x16_t __a, __simd32_int2x16_t __b)
+{
+ return __builtin_arc_vaddsub2h (__a, __b);
+}
+#endif
+
+#ifdef __ARC_MPY_QMACW_
+__extension__ static __inline __simd64_int4x16_t __attribute__ ((__always_inline__))
+_vaddsub4h (__simd64_int4x16_t __a, __simd64_int4x16_t __b)
+{
+ return __builtin_arc_vaddsub4h (__a, __b);
+}
+
+__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+_vaddsubs4h (int64_t __a, int64_t __b)
+{
+ int64_t __dst;
+ __asm__ ("vaddsubs4h %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "r" (__b));
+ return __dst;
+}
+#endif
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_vaddsubs2h (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("vaddsubs2h %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rCal" (__b));
+ return __dst;
+}
+
+#if defined (__ARC_MPY_DMPY__) || defined (__ARC_MPY_QMACW__)
+__extension__ static __inline __simd32_int2x16_t __attribute__ ((__always_inline__))
+_valgn2h (__simd32_int2x16_t __a, __simd32_int2x16_t __b)
+{
+ __simd32_int2x16_t __dst;
+ __asm__ ("valgn2h %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "r" (__b));
+ return __dst;
+}
+
+__extension__ static __inline __simd32_int2x16_t __attribute__ ((__always_inline__))
+_vasl2h (__simd32_int2x16_t __a, __simd32_int2x16_t __b)
+{
+ __simd32_int2x16_t __dst;
+ __asm__ ("vasl2h %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rCal" (__b));
+ return __dst;
+}
+#endif
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_vasls2h (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("vasls2h %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "r" (__b));
+ return __dst;
+}
+
+#if defined (__ARC_MPY_DMPY__) || defined (__ARC_MPY_QMACW__)
+__extension__ static __inline __simd32_int2x16_t __attribute__ ((__always_inline__))
+_vasr2h (__simd32_int2x16_t __a, __simd32_int2x16_t __b)
+{
+ __simd32_int2x16_t __dst;
+ __asm__ ("vasr2h %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "r" (__b));
+ return __dst;
+}
+#endif
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_vasrs2h (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("vasrs2h %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "r" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_vasrsr2h (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("vasrsr2h %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "r" (__b));
+ return __dst;
+}
+
+#ifdef __ARC_DSP__
+__extension__ static __inline __simd32_int4x8_t __attribute__ ((__always_inline__))
+_vext2bhl (__simd32_int4x8_t __a)
+{
+ __simd32_int4x8_t __dst;
+ __asm__ ("vext2bhl %0,%1\n"
+ : "=r" (__dst)
+ : "r" (__a));
+ return __dst;
+}
+#endif
+
+#ifdef __ARC_DSP__
+__extension__ static __inline __simd32_int4x8_t __attribute__ ((__always_inline__))
+_vext2bhm (__simd32_int4x8_t __a)
+{
+ __simd32_int4x8_t __dst;
+ __asm__ ("vext2bhm %0,%1\n"
+ : "=r" (__dst)
+ : "r" (__a));
+ return __dst;
+}
+#endif
+
+#if defined (__ARC_MPY_DMPY__) || defined (__ARC_MPY_QMACW__)
+__extension__ static __inline __simd32_int2x16_t __attribute__ ((__always_inline__))
+_vlsr2h (__simd32_int2x16_t __a, __simd32_int2x16_t __b)
+{
+ __simd32_int2x16_t __dst;
+ __asm__ ("vlsr2h %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "r" (__b));
+ return __dst;
+}
+#endif
+
+#ifdef __ARC_MPY_QMACW_
+__extension__ static __inline __simd64_int2x32_t __attribute__ ((__always_inline__))
+_vmac2h (__simd32_int2x16_t __a, __simd32_int2x16_t __b)
+{
+ return __builtin_arc_vmac2h (__a, __b);
+}
+#endif
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_vmac2hf (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("vmac2hf %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "r" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_vmac2hfr (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("vmac2hfr %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "r" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_vmac2hnfr (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("vmac2hnfr %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "r" (__b));
+ return __dst;
+}
+
+#ifdef __ARC_MPY_QMACW_
+__extension__ static __inline __simd64_int2x32_t __attribute__ ((__always_inline__))
+_vmac2hu (__simd32_int2x16_t __a, __simd32_int2x16_t __b)
+{
+ return __builtin_arc_vmac2hu (__a, __b);
+}
+
+__extension__ static __inline __simd64_int2x32_t __attribute__ ((__always_inline__))
+_vmpy2h (__simd32_int2x16_t __a, __simd32_int2x16_t __b)
+{
+ return __builtin_arc_vmpy2h (__a, __b);
+}
+#endif
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_vmpy2hf (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("vmpy2hf %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "r" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_vmpy2hfr (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("vmpy2hfr %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "r" (__b));
+ return __dst;
+}
+
+#ifdef __ARC_MPY_QMACW_
+__extension__ static __inline __simd64_int2x32_t __attribute__ ((__always_inline__))
+_vmpy2hu (__simd32_int2x16_t __a, __simd32_int2x16_t __b)
+{
+ return __builtin_arc_vmpy2hu (__a, __b);
+}
+#endif
+
+__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+_vmpy2hwf (int32_t __a, int32_t __b)
+{
+ int64_t __dst;
+ __asm__ ("vmpy2hwf %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rl" (__b));
+ return __dst;
+}
+
+#if defined (__ARC_MPY_DMPY__) || defined (__ARC_MPY_QMACW__)
+__extension__ static __inline __simd32_int2x16_t __attribute__ ((__always_inline__))
+_vmax2h (__simd32_int2x16_t __a, __simd32_int2x16_t __b)
+{
+ __simd32_int2x16_t __dst;
+ __asm__ ("vmax2h %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "r" (__b));
+ return __dst;
+}
+
+__extension__ static __inline __simd32_int2x16_t __attribute__ ((__always_inline__))
+_vmin2h (__simd32_int2x16_t __a, __simd32_int2x16_t __b)
+{
+ __simd32_int2x16_t __dst;
+ __asm__ ("vmin2h %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "r" (__b));
+ return __dst;
+}
+#endif
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_vmsub2hf (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("vmsub2hf %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "r" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_vmsub2hfr (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("vmsub2hfr %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "r" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_vmsub2hnfr (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("vmsub2hnfr %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "r" (__b));
+ return __dst;
+}
+
+#if defined (__ARC_MPY_DMPY__) || defined (__ARC_MPY_QMACW__)
+__extension__ static __inline __simd32_int2x16_t __attribute__ ((__always_inline__))
+_vneg2h (__simd32_int2x16_t __a)
+{
+ __simd32_int2x16_t __dst;
+ __asm__ ("vneg2h %0,%1\n"
+ : "=r" (__dst)
+ : "r" (__a) );
+ return __dst;
+}
+#endif
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_vnegs2h (int32_t __a)
+{
+ int32_t __dst;
+ __asm__ ("vnegs2h %0,%1\n"
+ : "=r" (__dst)
+ : "r" (__a));
+ return __dst;
+}
+
+#if defined (__ARC_MPY_DMPY__) || defined (__ARC_MPY_QMACW__)
+__extension__ static __inline __simd32_int2x16_t __attribute__ ((__always_inline__))
+_vnorm2h (__simd32_int2x16_t __a)
+{
+ __simd32_int2x16_t __dst;
+ __asm__ ("vnorm2h %0,%1\n"
+ : "=r" (__dst)
+ : "r" (__a));
+ return __dst;
+}
+
+__extension__ static __inline __simd32_int2x16_t __attribute__ ((__always_inline__))
+_vrep2hl (__simd32_int2x16_t __a)
+{
+ __simd32_int2x16_t __dst;
+ __asm__ ("vrep2hl %0,%1\n"
+ : "=r" (__dst)
+ : "r" (__a));
+ return __dst;
+}
+
+__extension__ static __inline __simd32_int2x16_t __attribute__ ((__always_inline__))
+_vrep2hm (__simd32_int2x16_t __a)
+{
+ __simd32_int2x16_t __dst;
+ __asm__ ("vrep2hm %0,%1\n"
+ : "=r" (__dst)
+ : "r" (__a));
+ return __dst;
+}
+#endif
+
+#ifdef __ARC_DSP__
+__extension__ static __inline __simd32_int2x16_t __attribute__ ((__always_inline__))
+_vsext2bhl (__simd32_int4x8_t __a)
+{
+ __simd32_int2x16_t __dst;
+ __asm__ ("vsext2bhl %0,%1\n"
+ : "=r" (__dst)
+ : "r" (__a));
+ return __dst;
+}
+#endif
+
+#ifdef __ARC_DSP__
+__extension__ static __inline __simd32_int2x16_t __attribute__ ((__always_inline__))
+_vsext2bhm (__simd32_int4x8_t __a)
+{
+ __simd32_int2x16_t __dst;
+ __asm__ ("vsext2bhm %0,%1\n"
+ : "=r" (__dst)
+ : "r" (__a));
+ return __dst;
+}
+#endif
+
+#ifdef __ARC_MPY_QMACW_
+__extension__ static __inline __simd64_int2x32_t __attribute__ ((__always_inline__))
+_vsub2 (__simd64_int2x32_t __a, __simd64_int2x32_t __b)
+{
+ return __a - __b;
+}
+#endif
+
+__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+_vsubs2 (int64_t __a, int64_t __b)
+{
+ int64_t __dst;
+ __asm__ ("vsubs2 %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "r" (__b));
+ return __dst;
+}
+
+#if defined (__ARC_MPY_DMPY__) || defined (__ARC_MPY_QMACW__)
+__extension__ static __inline __simd32_int2x16_t __attribute__ ((__always_inline__))
+_vsub2h (__simd32_int2x16_t __a, __simd32_int2x16_t __b)
+{
+ return __a - __b;
+}
+#endif
+
+#ifdef __ARC_DSP__
+__extension__ static __inline __simd32_int4x8_t __attribute__ ((__always_inline__))
+_vsub4b (__simd32_int4x8_t __a, __simd32_int4x8_t __b)
+{
+ __simd32_int4x8_t __dst;
+ __asm__ ("vsub4b %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "r" (__b));
+ return __dst;
+}
+#endif
+
+#ifdef __ARC_MPY_QMACW_
+__extension__ static __inline __simd64_int4x16_t __attribute__ ((__always_inline__))
+_vsub4h (__simd64_int4x16_t __a, __simd64_int4x16_t __b)
+{
+ return __a - __b;
+}
+
+__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+_vsubs4h (int64_t __a, int64_t __b)
+{
+ int64_t __dst;
+ __asm__ ("vsubs4h %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "r" (__b));
+ return __dst;
+}
+
+__extension__ static __inline __simd64_int2x32_t __attribute__ ((__always_inline__))
+_vsubadd (__simd64_int2x32_t __a, __simd64_int2x32_t __b)
+{
+ return __builtin_arc_vsubadd (__a, __b);
+}
+
+__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+_vsubadds (int64_t __a, int64_t __b)
+{
+ int64_t __dst;
+ __asm__ ("vsubadds %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "r" (__b));
+ return __dst;
+}
+#endif
+
+#if defined (__ARC_MPY_DMPY__) || defined (__ARC_MPY_QMACW__)
+__extension__ static __inline __simd32_int2x16_t __attribute__ ((__always_inline__))
+_vsubadd2h (__simd32_int2x16_t __a, __simd32_int2x16_t __b)
+{
+ return __builtin_arc_vsubadd2h (__a, __b);
+}
+#endif
+
+#ifdef __ARC_MPY_QMACW_
+__extension__ static __inline __simd64_int4x16_t __attribute__ ((__always_inline__))
+_vsubadd4h (__simd64_int4x16_t __a, __simd64_int4x16_t __b)
+{
+ return __builtin_arc_vsubadd4h (__a, __b);
+}
+#endif
+
+__extension__ static __inline int64_t __attribute__ ((__always_inline__))
+_vsubadds4h (int64_t __a, int64_t __b)
+{
+ int64_t __dst;
+ __asm__ ("vsubadds4h %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "r" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_vsubadds2h (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("vsubadds2h %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "r" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_vsubs2h (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("vsubs2h %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "r" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_adcs (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("adcs %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rCal" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_sbcs (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("sbcs %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "rCal" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_satf (int32_t __a)
+{
+ int32_t __dst;
+ __asm__ ("satf %0,%1\n"
+ : "=r" (__dst)
+ : "r" (__a));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_macwhfl (int32_t __a, int16_t __b)
+{
+ int32_t __dst;
+ __asm__ ("macwhfl %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "r" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_macwhflr (int32_t __a, int16_t __b)
+{
+ int32_t __dst;
+ __asm__ ("macwhflr %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "r" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_macwhkl (int32_t __a, int16_t __b)
+{
+ int32_t __dst;
+ __asm__ ("macwhkl %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "r" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_macwhkul (int32_t __a, int16_t __b)
+{
+ int32_t __dst;
+ __asm__ ("macwhkul %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "r" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_mpywhkl (int32_t __a, int16_t __b)
+{
+ int32_t __dst;
+ __asm__ ("mpywhkl %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "r" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_mpywhkul (int32_t __a, int16_t __b)
+{
+ int32_t __dst;
+ __asm__ ("mpywhkul %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "r" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_msubwhfl (int32_t __a, int16_t __b)
+{
+ int32_t __dst;
+ __asm__ ("msubwhfl %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "r" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_msubwhflr (int32_t __a, int16_t __b)
+{
+ int32_t __dst;
+ __asm__ ("msubwhflr %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "r" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_msubwhfm (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("msubwhfm %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "r" (__b));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_msubwhfmr (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("msubwhfmr %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "r" (__b));
+ return __dst;
+}
+
+__extension__ static __inline void __attribute__ ((__always_inline__))
+_trap (uint32_t __a)
+{
+ __builtin_arc_trap_s (__a);
+}
+
+#if defined (__ARC_MPY_DMPY__) || defined (__ARC_MPY_QMACW__)
+__extension__ static __inline __simd32_int2x16_t __attribute__ ((__always_inline__))
+_vpack2hl (__simd32_int2x16_t __a, __simd32_int2x16_t __b)
+{
+ __simd32_int2x16_t __dst;
+ __asm__ ("vpack2hl %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "r" (__b));
+ return __dst;
+}
+
+__extension__ static __inline __simd32_int2x16_t __attribute__ ((__always_inline__))
+_vpack2hm (__simd32_int2x16_t __a, __simd32_int2x16_t __b)
+{
+ __simd32_int2x16_t __dst;
+ __asm__ ("vpack2hm %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "r" (__b));
+ return __dst;
+}
+#endif
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_vperm (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("vperm %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "r" (__b));
+ return __dst;
+}
+
+#ifdef __ARC_DSP__
+__extension__ static __inline __simd32_int4x8_t __attribute__ ((__always_inline__))
+_vpack2hbl (__simd32_int4x8_t __a)
+{
+ __simd32_int4x8_t __dst;
+ __asm__ ("vpack2hbl %0,%1\n"
+ : "=r" (__dst)
+ : "r" (__a));
+ return __dst;
+}
+#endif
+
+#ifdef __ARC_DSP__
+__extension__ static __inline __simd32_int4x8_t __attribute__ ((__always_inline__))
+_vpack2hbm (__simd32_int4x8_t __a)
+{
+ __simd32_int4x8_t __dst;
+ __asm__ ("vpack2hbm %0,%1\n"
+ : "=r" (__dst)
+ : "r" (__a));
+ return __dst;
+}
+#endif
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_vpack2hblf (int32_t __a)
+{
+ int32_t __dst;
+ __asm__ ("vpack2hblf %0,%1\n"
+ : "=r" (__dst)
+ : "r" (__a));
+ return __dst;
+}
+
+#ifdef __ARC_DSP__
+__extension__ static __inline __simd32_int4x8_t __attribute__ ((__always_inline__))
+_vpack2hbmf (__simd32_int4x8_t __a)
+{
+ __simd32_int4x8_t __dst;
+ __asm__ ("vpack2hbmf %0,%1\n"
+ : "=r" (__dst)
+ : "r" (__a));
+ return __dst;
+}
+#endif
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_vext2bhlf (int32_t __a)
+{
+ int32_t __dst;
+ __asm__ ("vext2bhlf %0,%1\n"
+ : "=r" (__dst)
+ : "r" (__a));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_vext2bhmf (int32_t __a)
+{
+ int32_t __dst;
+ __asm__ ("vext2bhmf %0,%1\n"
+ : "=r" (__dst)
+ : "r" (__a));
+ return __dst;
+}
+
+__extension__ static __inline int16_t __attribute__ ((__always_inline__))
+_sqrt (int32_t __a)
+{
+ int16_t __dst;
+ __asm__ ("sqrt %0,%1\n"
+ : "=r" (__dst)
+ : "r" (__a));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_sqrtf (int32_t __a)
+{
+ int32_t __dst;
+ __asm__ ("sqrtf %0,%1\n"
+ : "=r" (__dst)
+ : "r" (__a));
+ return __dst;
+}
+
+__extension__ static __inline int32_t __attribute__ ((__always_inline__))
+_divf (int32_t __a, int32_t __b)
+{
+ int32_t __dst;
+ __asm__ ("divf %0,%1,%2\n"
+ : "=r" (__dst)
+ : "r" (__a), "r" (__b));
+ return __dst;
+}
+
+__extension__ static __inline void __attribute__ ((__always_inline__))
+_wevt (int32_t __a)
+{
+ __asm__ ("wevt %0\n"
+ :
+ :"r" (__a)
+ : "memory");
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif