3 /* Verify that the RX specific builtin functions work. */
8 /* We need to prevent these functions from being inlined
9 as otherwise gcc will attempt to optimize away their
10 arguments and we need the operations on them in order
11 to correctly set the psw flags. */
13 int saturate_add (int, int) __attribute__((__noinline__
));
14 int exchange (int, int) __attribute__((__noinline__
));
17 half_word_swap (int arg
)
19 return __builtin_rx_revw (arg
);
23 multiply_and_accumulate (long arg1
, long arg2
, long arg3
)
25 __builtin_rx_mvtaclo (0);
26 __builtin_rx_mvtachi (0);
28 __builtin_rx_mullo (arg1
, arg2
);
29 __builtin_rx_mulhi (arg1
, arg2
);
30 __builtin_rx_maclo (arg1
, arg3
);
31 __builtin_rx_machi (arg1
, arg3
);
33 __builtin_rx_racw (1);
35 arg1
= __builtin_rx_mvfachi ();
36 arg1
+= __builtin_rx_mvfacmi ();
44 return __builtin_rx_round (arg
);
50 #define CHECK_0ARG(func, result) \
51 if (func () != result) \
53 printf (#func " () fails: %x not %x\n", func (), result); \
57 #define CHECK_1ARG(func, arg, result) \
58 if (func (arg) != result) \
60 printf (#func " (" #arg ") fails: %x not %x\n", func (arg), result); \
64 #define CHECK_2ARG(func, arg1, arg2, result) \
65 if (func (arg1, arg2) != result) \
67 printf (#func " (" #arg1 "," #arg2 ") fails: %x not %x\n", \
68 func (arg1, arg2), result); \
72 #define CHECK_3ARG(func, arg1, arg2, arg3, result) \
73 if (func (arg1, arg2, arg3) != result) \
75 printf (#func " (" #arg1 "," #arg2 "," #arg3 ") fails: %x not %x\n", \
76 func (arg1, arg2, arg3), result); \
80 #define CHECK_0ARG(func, result) \
81 if (func () != result) \
84 #define CHECK_1ARG(func, arg, result) \
85 if (func (arg) != result) \
88 #define CHECK_2ARG(func, arg1, arg2, result) \
89 if (func (arg1, arg2) != result) \
92 #define CHECK_3ARG(func, arg1, arg2, arg3, result) \
93 if (func (arg1, arg2, arg3) != result) \
100 CHECK_1ARG (half_word_swap
, 0x12345678, 0x34127856);
101 CHECK_3ARG (multiply_and_accumulate
, 0x111, 0x222, 0x333, 0x70007);
102 CHECK_1ARG (rxround
, 0.5, 1);
106 /* The following builtins are compiled but
107 not executed because they need OS support. */
118 __builtin_rx_int (0x12);
122 get_stack_pointer (void)
124 return __builtin_rx_mvfc (2);
128 set_stack_pointer (int value
)
130 __builtin_rx_mvtc (2, value
);
131 __builtin_rx_mvtc (2, 0x1234);
137 __builtin_rx_wait ();
140 #ifndef __RX_DISALLOW_STRING_INSNS__
142 rmpa (int * multiplicand
, int * multiplier
, int num
)
144 __builtin_rx_rmpa ();