The CRIS tests expect that functions marked inline are always inline.
With newer versions of GCC, building them results warnings like the
following and spurious failures when they are run.
In file included from tests/tcg/cris/check_moveq.c:5:0:
tests/tcg/cris/crisutils.h:66:20: warning: inlining failed in call to
'cris_tst_cc.constprop.0': call is unlikely and code size would grow [-Winline]
tests/tcg/cris/check_moveq.c:28:13: warning: called from here [-Winline]
Use the always_inline attribute when building them to fix this.
Reviewed-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com>
Signed-off-by: Rabin Vincent <rabinv@axis.com>
Signed-off-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com>
#include "sys.h"
#include "crisutils.h"
-static inline int cris_abs(int n)
+static always_inline int cris_abs(int n)
{
int r;
asm ("abs\t%1, %0\n" : "=r" (r) : "r" (n));
return r;
}
-static inline void
+static always_inline void
verify_abs(int val, int res,
const int n, const int z, const int v, const int c)
{
#include "sys.h"
#include "crisutils.h"
-static inline int cris_addc(int a, const int b)
+static always_inline int cris_addc(int a, const int b)
{
asm ("addc\t%1, %0\n" : "+r" (a) : "r" (b));
return a;
#include "crisutils.h"
/* need to avoid acr as source here. */
-static inline int cris_addc_m(int a, const int *b)
+static always_inline int cris_addc_m(int a, const int *b)
{
asm volatile ("addc [%1], %0\n" : "+r" (a) : "r" (b));
return a;
}
/* 'b' is a crisv32 constrain to avoid postinc with $acr. */
-static inline int cris_addc_pi_m(int a, int **b)
+static always_inline int cris_addc_pi_m(int a, int **b)
{
asm volatile ("addc [%1+], %0\n" : "+r" (a), "+b" (*b));
return a;
#include "sys.h"
#include "crisutils.h"
-static inline int cris_bound_b(int v, int b)
+static always_inline int cris_bound_b(int v, int b)
{
int r = v;
asm ("bound.b\t%1, %0\n" : "+r" (r) : "ri" (b));
return r;
}
-static inline int cris_bound_w(int v, int b)
+static always_inline int cris_bound_w(int v, int b)
{
int r = v;
asm ("bound.w\t%1, %0\n" : "+r" (r) : "ri" (b));
return r;
}
-static inline int cris_bound_d(int v, int b)
+static always_inline int cris_bound_d(int v, int b)
{
int r = v;
asm ("bound.d\t%1, %0\n" : "+r" (r) : "ri" (b));
#include "sys.h"
#include "crisutils.h"
-static inline void cris_ftag_i(unsigned int x)
+static always_inline void cris_ftag_i(unsigned int x)
{
register unsigned int v asm("$r10") = x;
asm ("ftagi\t[%0]\n" : : "r" (v) );
}
-static inline void cris_ftag_d(unsigned int x)
+static always_inline void cris_ftag_d(unsigned int x)
{
register unsigned int v asm("$r10") = x;
asm ("ftagd\t[%0]\n" : : "r" (v) );
}
-static inline void cris_fidx_i(unsigned int x)
+static always_inline void cris_fidx_i(unsigned int x)
{
register unsigned int v asm("$r10") = x;
asm ("fidxi\t[%0]\n" : : "r" (v) );
}
-static inline void cris_fidx_d(unsigned int x)
+static always_inline void cris_fidx_d(unsigned int x)
{
register unsigned int v asm("$r10") = x;
asm ("fidxd\t[%0]\n" : : "r" (v) );
#include "crisutils.h"
-static inline int64_t add64(const int64_t a, const int64_t b)
+static always_inline int64_t add64(const int64_t a, const int64_t b)
{
return a + b;
}
-static inline int64_t sub64(const int64_t a, const int64_t b)
+static always_inline int64_t sub64(const int64_t a, const int64_t b)
{
return a - b;
}
#include <stdint.h>
#include "sys.h"
-static inline int cris_lz(int x)
+static always_inline int cris_lz(int x)
{
int r;
asm ("lz\t%1, %0\n" : "=r" (r) : "r" (x));
#define B 2
#define R 1
-static inline int cris_swap(const int mode, int x)
+static always_inline int cris_swap(const int mode, int x)
{
switch (mode)
{
_fail(tst_cc_loc);
}
-static inline void cris_tst_cc_n1(void)
+static always_inline void cris_tst_cc_n1(void)
{
asm volatile ("bpl _err\n"
"nop\n");
}
-static inline void cris_tst_cc_n0(void)
+static always_inline void cris_tst_cc_n0(void)
{
asm volatile ("bmi _err\n"
"nop\n");
}
-static inline void cris_tst_cc_z1(void)
+static always_inline void cris_tst_cc_z1(void)
{
asm volatile ("bne _err\n"
"nop\n");
}
-static inline void cris_tst_cc_z0(void)
+static always_inline void cris_tst_cc_z0(void)
{
asm volatile ("beq _err\n"
"nop\n");
}
-static inline void cris_tst_cc_v1(void)
+static always_inline void cris_tst_cc_v1(void)
{
asm volatile ("bvc _err\n"
"nop\n");
}
-static inline void cris_tst_cc_v0(void)
+static always_inline void cris_tst_cc_v0(void)
{
asm volatile ("bvs _err\n"
"nop\n");
}
-static inline void cris_tst_cc_c1(void)
+static always_inline void cris_tst_cc_c1(void)
{
asm volatile ("bcc _err\n"
"nop\n");
}
-static inline void cris_tst_cc_c0(void)
+static always_inline void cris_tst_cc_c0(void)
{
asm volatile ("bcs _err\n"
"nop\n");
}
-static inline void cris_tst_mov_cc(int n, int z)
+static always_inline void cris_tst_mov_cc(int n, int z)
{
if (n) cris_tst_cc_n1(); else cris_tst_cc_n0();
if (z) cris_tst_cc_z1(); else cris_tst_cc_z0();
asm volatile ("" : : "g" (_err));
}
-static inline void cris_tst_cc(const int n, const int z,
+static always_inline void cris_tst_cc(const int n, const int z,
const int v, const int c)
{
if (n) cris_tst_cc_n1(); else cris_tst_cc_n0();
#define STRINGIFY(x) #x
#define TOSTRING(x) STRINGIFY(x)
+#define always_inline inline __attribute__((always_inline))
+
#define CURRENT_LOCATION __FILE__ ":" TOSTRING(__LINE__)
#define err() \