jm-insns.c revision 05cf1ebf06561a8b59adae508e7c4bf6c028ee5b
1a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* HOW TO COMPILE:
3a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjgcc -Winline -Wall -O -mregnames -DHAS_ALTIVEC -maltivec
5a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjThis program is useful, but the register usage conventions in
7a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjit are a complete dog.  In particular, _patch_op_imm has to
8a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjbe inlined, else you wind up with it segfaulting in
9a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjcompletely different places due to corruption (of r20 in the
10a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjcase I chased).
11a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj*/
12a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
13a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/*
14a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * test-ppc.c:
15a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * PPC tests for qemu-PPC CPU emulation checks
16a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *
17a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * Copyright (c) 2005 Jocelyn Mayer
18a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *
19a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *   This program is free software; you can redistribute it and/or
20a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *   modify it under the terms of the GNU General Public License V2
21a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *   as published by the Free Software Foundation
22a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *
23a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *   This program is distributed in the hope that it will be useful,
24a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *   but WITHOUT ANY WARRANTY; without even the implied warranty of
25a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
26a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *   GNU General Public License for more details.
27a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *
28a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *   You should have received a copy of the GNU General Public License
29a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *   along with this program; if not, write to the Free Software
30a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
31a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj */
32a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
33a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/*
34a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * Theory of operations:
35a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * a few registers are reserved for the test program:
36a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * r14 => r18
37a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * f14 => f18
38a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * I do preload test values in r14 thru r17 (or less, depending on the number
39a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * of register operands needed), patch the test opcode if any immediate
40a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * operands are required, execute the tested opcode.
41a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * XER, CCR and FPSCR are cleared before every test.
42a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * I always get the result in r17 and also save XER and CCR for fixed-point
43a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * operations. I also check FPSCR for floating points operations.
44a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *
45a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * Improvments:
46a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * a more clever FPSCR management is needed: for now, I always test
47a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * the round-to-zero case. Other rounding modes also need to be tested.
48a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj */
49a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
50a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/*
51a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * Operation details:
52a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *
53a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * The 'test' functions (via all_tests[]) are wrappers of single asm instns
54a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *
55a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * The 'loops' (e.g. int_loops) do the actual work:
56a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *  - loops over as many arguments as the instn needs (regs | imms)
57a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *     - sets up the environment (reset cr,xer, assign src regs...)
58a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *     - maybe modifies the asm instn to test different imm args
59a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *     - calls the test function
60a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *     - retrieves relevant register data (rD,cr,xer,...)
61a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *     - prints argument and result data.
62a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *
63a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * More specifically...
64a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *
65a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * all_tests[i] holds insn tests
66a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *  - of which each holds: {instn_test_arr[], description, flags}
67a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *
68a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * flags hold 3 instn classifiers: {family, type, arg_type}
69a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *
70a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * // The main test loop:
71a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * do_tests( user_ctl_flags ) {
72a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *    foreach(curr_test = all_test[i]) {
73a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *
74a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *       // flags are used to control what tests are run:
75a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *       if (curr_test->flags && !user_ctl_flags)
76a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *          continue;
77a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *
78a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *       // a 'loop_family_arr' is chosen based on the 'family' flag...
79a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *       switch(curr_test->flags->family) {
80a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *       case x: loop_family_arr = int_loops;
81a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *      ...
82a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *       }
83a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *
84a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *       // ...and the actual test_loop to run is found by indexing into
85a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *       // the loop_family_arr with the 'arg_type' flag:
86a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *       test_loop = loop_family[curr_test->flags->arg_type]
87a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *
88a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *       // finally, loop over all instn tests for this test:
89a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *       foreach (instn_test = curr_test->instn_test_arr[i]) {
90a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *
91a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *          // and call the test_loop with the current instn_test function,name
92a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *          test_loop( instn_test->func, instn_test->name )
93a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *       }
94a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *    }
95a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * }
96a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj*/
97a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
98a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#include <stdint.h>
99a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
100a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjregister double f14 __asm__ ("f14");
101a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjregister double f15 __asm__ ("f15");
102a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjregister double f16 __asm__ ("f16");
103a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjregister double f17 __asm__ ("f17");
104a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjregister double f18 __asm__ ("f18");
105a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjregister uint32_t r14 __asm__ ("r14");
106a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjregister uint32_t r15 __asm__ ("r15");
107a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjregister uint32_t r16 __asm__ ("r16");
108a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjregister uint32_t r17 __asm__ ("r17");
109a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjregister uint32_t r18 __asm__ ("r18");
110a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
111a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC)
112a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#   include <altivec.h>
113a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
114a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#include <assert.h>
115a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#include <ctype.h>
116a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#include <fcntl.h>
117a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj//#include <fenv.h>
118a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj//#include <math.h>
119a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#include <stdio.h>
120a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#include <stdlib.h>
121a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#include <string.h>
122a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#include <unistd.h>
123a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#include <malloc.h>
124a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
125a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* -------------- BEGIN #include "test-ppc.h" -------------- */
126a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/*
127a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * test-ppc.h:
128a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * PPC tests for qemu-PPC CPU emulation checks - definitions
129a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *
130a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * Copyright (c) 2005 Jocelyn Mayer
131a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *
132a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *   This program is free software; you can redistribute it and/or
133a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *   modify it under the terms of the GNU General Public License V2
134a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *   as published by the Free Software Foundation
135a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *
136a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *   This program is distributed in the hope that it will be useful,
137a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *   but WITHOUT ANY WARRANTY; without even the implied warranty of
138a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
139a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *   GNU General Public License for more details.
140a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *
141a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *   You should have received a copy of the GNU General Public License
142a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *   along with this program; if not, write to the Free Software
143a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
144a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj */
145a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
146a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (__TEST_PPC_H__)
147a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#define __TEST_PPC_H__
148a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
149a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#include <stdint.h>
150a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
151a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjtypedef void (*test_func_t) (void);
152a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjtypedef struct test_t test_t;
153a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjtypedef struct test_table_t test_table_t;
154a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstruct test_t {
155a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    test_func_t func;
156530f73578552bc876a51fbf90cb6be29769bb362sewardj    const char *name;
157a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
158a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
159a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstruct test_table_t {
160a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    test_t *tests;
161530f73578552bc876a51fbf90cb6be29769bb362sewardj    const char *name;
162a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    uint32_t flags;
163a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
164a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
165530f73578552bc876a51fbf90cb6be29769bb362sewardjtypedef void (*test_loop_t) (const char *name, test_func_t func,
166a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                             uint32_t flags);
167a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
168a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjenum test_flags {
169a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    /* Nb arguments */
170a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_ONE_ARG    = 0x00000001,
171a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_TWO_ARGS   = 0x00000002,
172a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_THREE_ARGS = 0x00000003,
173a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_CMP_ARGS   = 0x00000004,  // family: compare
174a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_CMPI_ARGS  = 0x00000005,  // family: compare
175a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_TWO_I16    = 0x00000006,  // family: arith/logical
176a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_SPECIAL    = 0x00000007,  // family: logical
177a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_LD_ARGS    = 0x00000008,  // family: ldst
178a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_LDX_ARGS   = 0x00000009,  // family: ldst
179a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_ST_ARGS    = 0x0000000A,  // family: ldst
180a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_STX_ARGS   = 0x0000000B,  // family: ldst
181a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_NB_ARGS    = 0x0000000F,
182a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    /* Type */
183a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_ARITH      = 0x00000100,
184a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_LOGICAL    = 0x00000200,
185a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_COMPARE    = 0x00000300,
186a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_CROP       = 0x00000400,
187a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_LDST       = 0x00000500,
188a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_TYPE       = 0x00000F00,
189a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    /* Family */
190a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_INTEGER    = 0x00010000,
191a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_FLOAT      = 0x00020000,
192a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_405        = 0x00030000,
193a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_ALTIVEC    = 0x00040000,
194a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_FALTIVEC   = 0x00050000,
195a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_FAMILY     = 0x000F0000,
196a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    /* Flags: these may be combined, so use separate bitfields. */
197a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_CR         = 0x01000000,
198a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    PPC_XER_CA     = 0x02000000,
199a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
200a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
201a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (__TEST_PPC_H__) */
202a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
203a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* -------------- END #include "test-ppc.h" -------------- */
204a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
205a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
206a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#define USAGE_SIMPLE
207a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj//#define ALTIVEC_ARGS_LARGE
208a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
209a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
210a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj//#define DEBUG_ARGS_BUILD
211a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (DEBUG_ARGS_BUILD)
212a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#define AB_DPRINTF(fmt, args...) do { fprintf(stderr, fmt , ##args); } while (0)
213a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else
214a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#define AB_DPRINTF(fmt, args...) do { } while (0)
215a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
216a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
217a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj//#define DEBUG_FILTER
218a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (DEBUG_FILTER)
219a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#define FDPRINTF(fmt, args...) do { fprintf(stderr, fmt , ##args); } while (0)
220a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else
221a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#define FDPRINTF(fmt, args...) do { } while (0)
222a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
223a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
224a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
225a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#define unused __attribute__ (( unused ))
226a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
227a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* -------------- BEGIN #include "ops-ppc.c" -------------- */
228a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/*
229a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * WARNING:
230a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * This file has been auto-generated by './gen-ppc' program
231a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * Please don't edit by hand
232a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj */
233a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
234a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
235a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* #include "test-ppc.h" */
236a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
237a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_add (void)
238a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
239a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("add          17, 14, 15");
240a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
241a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
242a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addo (void)
243a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
244a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("addo         17, 14, 15");
245a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
246a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
247a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addc (void)
248a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
249a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("addc         17, 14, 15");
250a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
251a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
252a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addco (void)
253a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
254a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("addco        17, 14, 15");
255a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
256a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
257a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_divw (void)
258a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
259a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("divw         17, 14, 15");
260a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
261a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
262a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_divwo (void)
263a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
264a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("divwo        17, 14, 15");
265a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
266a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
267a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_divwu (void)
268a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
269a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("divwu        17, 14, 15");
270a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
271a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
272a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_divwuo (void)
273a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
274a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("divwuo       17, 14, 15");
275a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
276a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
277a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulhw (void)
278a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
279a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mulhw        17, 14, 15");
280a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
281a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
282a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulhwu (void)
283a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
284a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mulhwu       17, 14, 15");
285a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
286a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
287a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mullw (void)
288a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
289a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mullw        17, 14, 15");
290a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
291a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
292a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mullwo (void)
293a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
294a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mullwo       17, 14, 15");
295a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
296a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
297a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subf (void)
298a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
299a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subf         17, 14, 15");
300a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
301a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
302a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfo (void)
303a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
304a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subfo        17, 14, 15");
305a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
306a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
307a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfc (void)
308a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
309a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subfc        17, 14, 15");
310a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
311a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
312a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfco (void)
313a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
314a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subfco       17, 14, 15");
315a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
316a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
317a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ia_ops_two[] = {
318a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_add             , "         add", },
319a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addo            , "        addo", },
320a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addc            , "        addc", },
321a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addco           , "       addco", },
322a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_divw            , "        divw", },
323a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_divwo           , "       divwo", },
324a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_divwu           , "       divwu", },
325a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_divwuo          , "      divwuo", },
326a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mulhw           , "       mulhw", },
327a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mulhwu          , "      mulhwu", },
328a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mullw           , "       mullw", },
329a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mullwo          , "      mullwo", },
330a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subf            , "        subf", },
331a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subfo           , "       subfo", },
332a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subfc           , "       subfc", },
333a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subfco          , "      subfco", },
334a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
335a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
336a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
337a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_add_ (void)
338a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
339a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("add.         17, 14, 15");
340a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
341a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
342a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addo_ (void)
343a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
344a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("addo.        17, 14, 15");
345a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
346a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
347a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addc_ (void)
348a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
349a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("addc.        17, 14, 15");
350a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
351a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
352a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addco_ (void)
353a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
354a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("addco.       17, 14, 15");
355a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
356a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
357a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_divw_ (void)
358a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
359a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("divw.        17, 14, 15");
360a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
361a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
362a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_divwo_ (void)
363a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
364a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("divwo.       17, 14, 15");
365a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
366a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
367a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_divwu_ (void)
368a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
369a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("divwu.       17, 14, 15");
370a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
371a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
372a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_divwuo_ (void)
373a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
374a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("divwuo.      17, 14, 15");
375a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
376a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
377a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulhw_ (void)
378a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
379a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mulhw.       17, 14, 15");
380a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
381a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
382a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulhwu_ (void)
383a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
384a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mulhwu.      17, 14, 15");
385a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
386a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
387a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mullw_ (void)
388a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
389a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mullw.       17, 14, 15");
390a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
391a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
392a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mullwo_ (void)
393a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
394a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mullwo.      17, 14, 15");
395a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
396a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
397a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subf_ (void)
398a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
399a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subf.        17, 14, 15");
400a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
401a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
402a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfo_ (void)
403a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
404a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subfo.       17, 14, 15");
405a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
406a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
407a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfc_ (void)
408a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
409a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subfc.       17, 14, 15");
410a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
411a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
412a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfco_ (void)
413a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
414a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subfco.      17, 14, 15");
415a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
416a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
417a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_iar_ops_two[] = {
418a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_add_            , "        add.", },
419a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addo_           , "       addo.", },
420a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addc_           , "       addc.", },
421a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addco_          , "      addco.", },
422a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_divw_           , "       divw.", },
423a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_divwo_          , "      divwo.", },
424a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_divwu_          , "      divwu.", },
425a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_divwuo_         , "     divwuo.", },
426a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mulhw_          , "      mulhw.", },
427a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mulhwu_         , "     mulhwu.", },
428a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mullw_          , "      mullw.", },
429a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mullwo_         , "     mullwo.", },
430a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subf_           , "       subf.", },
431a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subfo_          , "      subfo.", },
432a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subfc_          , "      subfc.", },
433a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subfco_         , "     subfco.", },
434a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
435a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
436a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
437a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_adde (void)
438a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
439a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("adde         17, 14, 15");
440a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
441a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
442a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addeo (void)
443a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
444a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("addeo        17, 14, 15");
445a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
446a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
447a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfe (void)
448a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
449a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subfe        17, 14, 15");
450a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
451a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
452a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfeo (void)
453a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
454a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subfeo       17, 14, 15");
455a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
456a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
457a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_iac_ops_two[] = {
458a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_adde            , "        adde", },
459a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addeo           , "       addeo", },
460a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subfe           , "       subfe", },
461a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subfeo          , "      subfeo", },
462a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
463a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
464a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
465a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_adde_ (void)
466a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
467a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("adde.        17, 14, 15");
468a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
469a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
470a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addeo_ (void)
471a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
472a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("addeo.       17, 14, 15");
473a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
474a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
475a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfe_ (void)
476a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
477a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subfe.       17, 14, 15");
478a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
479a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
480a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfeo_ (void)
481a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
482a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subfeo.      17, 14, 15");
483a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
484a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
485a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_iacr_ops_two[] = {
486a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_adde_           , "       adde.", },
487a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addeo_          , "      addeo.", },
488a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subfe_          , "      subfe.", },
489a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subfeo_         , "     subfeo.", },
490a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
491a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
492a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
493a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_and (void)
494a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
495a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("and          17, 14, 15");
496a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
497a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
498a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_andc (void)
499a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
500a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("andc         17, 14, 15");
501a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
502a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
503a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_eqv (void)
504a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
505a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("eqv          17, 14, 15");
506a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
507a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
508a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nand (void)
509a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
510a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nand         17, 14, 15");
511a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
512a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
513a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nor (void)
514a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
515a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nor          17, 14, 15");
516a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
517a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
518a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_or (void)
519a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
520a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("or           17, 14, 15");
521a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
522a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
523a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_orc (void)
524a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
525a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("orc          17, 14, 15");
526a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
527a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
528a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_xor (void)
529a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
530a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("xor          17, 14, 15");
531a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
532a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
533a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_slw (void)
534a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
535a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("slw          17, 14, 15");
536a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
537a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
538a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_sraw (void)
539a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
540a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("sraw         17, 14, 15");
541a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
542a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
543a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_srw (void)
544a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
545a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("srw          17, 14, 15");
546a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
547a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
548a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_il_ops_two[] = {
549a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_and             , "         and", },
550a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_andc            , "        andc", },
551a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_eqv             , "         eqv", },
552a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nand            , "        nand", },
553a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nor             , "         nor", },
554a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_or              , "          or", },
555a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_orc             , "         orc", },
556a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_xor             , "         xor", },
557a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_slw             , "         slw", },
558a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_sraw            , "        sraw", },
559a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_srw             , "         srw", },
560a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
561a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
562a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
563a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_and_ (void)
564a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
565a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("and.         17, 14, 15");
566a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
567a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
568a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_andc_ (void)
569a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
570a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("andc.        17, 14, 15");
571a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
572a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
573a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_eqv_ (void)
574a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
575a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("eqv.         17, 14, 15");
576a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
577a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
578a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nand_ (void)
579a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
580a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nand.        17, 14, 15");
581a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
582a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
583a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nor_ (void)
584a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
585a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nor.         17, 14, 15");
586a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
587a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
588a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_or_ (void)
589a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
590a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("or.          17, 14, 15");
591a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
592a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
593a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_orc_ (void)
594a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
595a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("orc.         17, 14, 15");
596a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
597a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
598a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_xor_ (void)
599a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
600a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("xor.         17, 14, 15");
601a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
602a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
603a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_slw_ (void)
604a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
605a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("slw.         17, 14, 15");
606a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
607a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
608a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_sraw_ (void)
609a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
610a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("sraw.        17, 14, 15");
611a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
612a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
613a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_srw_ (void)
614a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
615a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("srw.         17, 14, 15");
616a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
617a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
618a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ilr_ops_two[] = {
619a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_and_            , "        and.", },
620a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_andc_           , "       andc.", },
621a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_eqv_            , "        eqv.", },
622a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nand_           , "       nand.", },
623a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nor_            , "        nor.", },
624a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_or_             , "         or.", },
625a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_orc_            , "        orc.", },
626a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_xor_            , "        xor.", },
627a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_slw_            , "        slw.", },
628a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_sraw_           , "       sraw.", },
629a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_srw_            , "        srw.", },
630a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
631a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
632a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
633a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_cmp (void)
634a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
635a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("cmp          2, 14, 15");
636a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
637a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
638a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_cmpl (void)
639a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
640a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("cmpl         2, 14, 15");
641a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
642a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
643a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_icr_ops_two[] = {
644a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_cmp             , "         cmp", },
645a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_cmpl            , "        cmpl", },
646a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
647a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
648a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
649a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_cmpi (void)
650a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
651a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("cmpi         2, 14, 15");
652a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
653a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
654a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_cmpli (void)
655a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
656a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("cmpli        2, 14, 15");
657a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
658a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
659a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_icr_ops_two_i16[] = {
660a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_cmpi            , "        cmpi", },
661a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_cmpli           , "       cmpli", },
662a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
663a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
664a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
665a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addi (void)
666a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
667a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("addi         17, 14, 0");
668a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
669a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
670a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addic (void)
671a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
672a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("addic        17, 14, 0");
673a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
674a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
675a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addis (void)
676a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
677a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("addis        17, 14, 0");
678a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
679a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
680a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulli (void)
681a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
682a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mulli        17, 14, 0");
683a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
684a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
685a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfic (void)
686a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
687a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subfic       17, 14, 0");
688a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
689a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
690a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ia_ops_two_i16[] = {
691a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addi            , "        addi", },
692a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addic           , "       addic", },
693a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addis           , "       addis", },
694a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mulli           , "       mulli", },
695a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subfic          , "      subfic", },
696a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
697a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
698a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
699a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addic_ (void)
700a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
701a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("addic.       17, 14, 0");
702a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
703a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
704a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_iar_ops_two_i16[] = {
705a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addic_          , "      addic.", },
706a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
707a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
708a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
709a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_ori (void)
710a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
711a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("ori          17, 14, 0");
712a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
713a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
714a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_oris (void)
715a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
716a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("oris         17, 14, 0");
717a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
718a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
719a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_xori (void)
720a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
721a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("xori         17, 14, 0");
722a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
723a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
724a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_xoris (void)
725a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
726a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("xoris        17, 14, 0");
727a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
728a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
729a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_il_ops_two_i16[] = {
730a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_ori             , "         ori", },
731a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_oris            , "        oris", },
732a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_xori            , "        xori", },
733a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_xoris           , "       xoris", },
734a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
735a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
736a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
737a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_andi_ (void)
738a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
739a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("andi.        17, 14, 0");
740a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
741a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
742a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_andis_ (void)
743a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
744a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("andis.       17, 14, 0");
745a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
746a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
747a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ilr_ops_two_i16[] = {
748a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_andi_           , "       andi.", },
749a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_andis_          , "      andis.", },
750a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
751a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
752a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
753a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_crand (void)
754a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
755a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("crand        17, 14, 15");
756a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
757a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
758a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_crandc (void)
759a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
760a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("crandc       17, 14, 15");
761a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
762a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
763a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_creqv (void)
764a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
765a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("creqv        17, 14, 15");
766a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
767a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
768a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_crnand (void)
769a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
770a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("crnand       17, 14, 15");
771a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
772a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
773a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_crnor (void)
774a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
775a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("crnor        17, 14, 15");
776a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
777a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
778a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_cror (void)
779a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
780a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("cror         17, 14, 15");
781a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
782a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
783a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_crorc (void)
784a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
785a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("crorc        17, 14, 15");
786a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
787a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
788a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_crxor (void)
789a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
790a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("crxor        17, 14, 15");
791a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
792a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
793a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_crl_ops_two[] = {
794a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_crand           , "       crand", },
795a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_crandc          , "      crandc", },
796a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_creqv           , "       creqv", },
797a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_crnand          , "      crnand", },
798a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_crnor           , "       crnor", },
799a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_cror            , "        cror", },
800a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_crorc           , "       crorc", },
801a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_crxor           , "       crxor", },
802a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
803a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
804a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
805a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addme (void)
806a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
807a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("addme        17, 14");
808a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
809a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
810a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addmeo (void)
811a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
812a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("addmeo       17, 14");
813a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
814a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
815a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addze (void)
816a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
817a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("addze        17, 14");
818a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
819a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
820a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addzeo (void)
821a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
822a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("addzeo       17, 14");
823a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
824a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
825a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfme (void)
826a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
827a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subfme       17, 14");
828a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
829a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
830a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfmeo (void)
831a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
832a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subfmeo      17, 14");
833a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
834a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
835a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfze (void)
836a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
837a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subfze       17, 14");
838a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
839a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
840a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfzeo (void)
841a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
842a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subfzeo      17, 14");
843a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
844a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
845a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_iac_ops_one[] = {
846a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addme           , "       addme", },
847a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addmeo          , "      addmeo", },
848a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addze           , "       addze", },
849a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addzeo          , "      addzeo", },
850a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subfme          , "      subfme", },
851a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subfmeo         , "     subfmeo", },
852a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subfze          , "      subfze", },
853a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subfzeo         , "     subfzeo", },
854a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
855a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
856a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
857a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addme_ (void)
858a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
859a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("addme.       17, 14");
860a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
861a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
862a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addmeo_ (void)
863a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
864a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("addmeo.      17, 14");
865a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
866a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
867a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addze_ (void)
868a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
869a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("addze.       17, 14");
870a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
871a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
872a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_addzeo_ (void)
873a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
874a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("addzeo.      17, 14");
875a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
876a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
877a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfme_ (void)
878a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
879a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subfme.      17, 14");
880a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
881a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
882a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfmeo_ (void)
883a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
884a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subfmeo.     17, 14");
885a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
886a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
887a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfze_ (void)
888a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
889a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subfze.      17, 14");
890a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
891a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
892a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_subfzeo_ (void)
893a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
894a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("subfzeo.     17, 14");
895a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
896a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
897a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_iacr_ops_one[] = {
898a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addme_          , "      addme.", },
899a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addmeo_         , "     addmeo.", },
900a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addze_          , "      addze.", },
901a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_addzeo_         , "     addzeo.", },
902a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subfme_         , "     subfme.", },
903a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subfmeo_        , "    subfmeo.", },
904a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subfze_         , "     subfze.", },
905a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_subfzeo_        , "    subfzeo.", },
906a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
907a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
908a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
909a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_cntlzw (void)
910a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
911a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("cntlzw       17, 14");
912a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
913a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
914a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_extsb (void)
915a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
916a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("extsb        17, 14");
917a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
918a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
919a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_extsh (void)
920a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
921a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("extsh        17, 14");
922a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
923a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
924a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_neg (void)
925a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
926a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("neg          17, 14");
927a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
928a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
929a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nego (void)
930a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
931a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nego         17, 14");
932a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
933a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
934a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_il_ops_one[] = {
935a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_cntlzw          , "      cntlzw", },
936a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_extsb           , "       extsb", },
937a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_extsh           , "       extsh", },
938a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_neg             , "         neg", },
939a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nego            , "        nego", },
940a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
941a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
942a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
943a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_cntlzw_ (void)
944a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
945a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("cntlzw.      17, 14");
946a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
947a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
948a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_extsb_ (void)
949a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
950a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("extsb.       17, 14");
951a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
952a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
953a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_extsh_ (void)
954a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
955a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("extsh.       17, 14");
956a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
957a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
958a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_neg_ (void)
959a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
960a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("neg.         17, 14");
961a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
962a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
963a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nego_ (void)
964a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
965a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nego.        17, 14");
966a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
967a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
968a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ilr_ops_one[] = {
969a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_cntlzw_         , "     cntlzw.", },
970a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_extsb_          , "      extsb.", },
971a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_extsh_          , "      extsh.", },
972a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_neg_            , "        neg.", },
973a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nego_           , "       nego.", },
974a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
975a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
976a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
977a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_rlwimi (void)
978a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
979a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("rlwimi       17, 14, 0, 0, 0");
980a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
981a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
982a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_rlwinm (void)
983a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
984a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("rlwinm       17, 14, 0, 0, 0");
985a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
986a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
987a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_rlwnm (void)
988a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
989a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("rlwnm        17, 14, 15, 0, 0");
990a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
991a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
992a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_srawi (void)
993a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
994a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("srawi        17, 14, 0");
995a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
996a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
997a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mfcr (void)
998a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
999a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mfcr         17");
1000a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1001a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1002a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mfspr (void)
1003a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1004a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mfspr        17, 1");
1005a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1006a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1007a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mtspr (void)
1008a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1009a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mtspr        1, 14");
1010a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1011a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1012a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_il_ops_spe[] = {
1013a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_rlwimi          , "      rlwimi", },
1014a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_rlwinm          , "      rlwinm", },
1015a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_rlwnm           , "       rlwnm", },
1016a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_srawi           , "       srawi", },
1017a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mfcr            , "        mfcr", },
1018a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mfspr           , "       mfspr", },
1019a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mtspr           , "       mtspr", },
1020a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1021a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1022a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1023a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_rlwimi_ (void)
1024a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1025a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("rlwimi.      17, 14, 0, 0, 0");
1026a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1027a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1028a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_rlwinm_ (void)
1029a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1030a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("rlwinm.      17, 14, 0, 0, 0");
1031a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1032a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1033a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_rlwnm_ (void)
1034a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1035a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("rlwnm.       17, 14, 15, 0, 0");
1036a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1037a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1038a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_srawi_ (void)
1039a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1040a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("srawi.       17, 14, 0");
1041a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1042a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1043a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mcrf (void)
1044a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1045a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mcrf         0, 0");
1046a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1047a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1048a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mcrxr (void)
1049a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1050a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mcrxr        0");
1051a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1052a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1053a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mtcrf (void)
1054a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1055a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mtcrf        0, 14");
1056a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1057a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1058a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ilr_ops_spe[] = {
1059a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_rlwimi_         , "     rlwimi.", },
1060a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_rlwinm_         , "     rlwinm.", },
1061a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_rlwnm_          , "      rlwnm.", },
1062a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_srawi_          , "      srawi.", },
1063a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mcrf            , "        mcrf", },
1064a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mcrxr           , "       mcrxr", },
1065a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mtcrf           , "       mtcrf", },
1066a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1067a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1068a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1069a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lbz (void)
1070a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1071a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("lbz          17,0(14)");
1072a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1073a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1074a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lbzu (void)
1075a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1076a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("lbzu         17,0(14)");
1077a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1078a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1079a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lha (void)
1080a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1081a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("lha          17,0(14)");
1082a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1083a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1084a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lhau (void)
1085a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1086a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("lhau         17,0(14)");
1087a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1088a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1089a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lhz (void)
1090a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1091a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("lhz          17,0(14)");
1092a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1093a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1094a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lhzu (void)
1095a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1096a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("lhzu         17,0(14)");
1097a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1098a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1099a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lwz (void)
1100a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1101a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("lwz          17,0(14)");
1102a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1103a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1104a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lwzu (void)
1105a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1106a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("lwzu         17,0(14)");
1107a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1108a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1109a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ild_ops_two_i16[] = {
1110a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_lbz             , "         lbz", },
1111a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_lbzu            , "        lbzu", },
1112a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_lha             , "         lha", },
1113a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_lhau            , "        lhau", },
1114a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_lhz             , "         lhz", },
1115a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_lhzu            , "        lhzu", },
1116a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_lwz             , "         lwz", },
1117a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_lwzu            , "        lwzu", },
1118a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1119a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1120a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1121a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lbzx (void)
1122a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1123a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("lbzx         17,14,15");
1124a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1125a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1126a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lbzux (void)
1127a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1128a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("lbzux        17,14,15");
1129a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1130a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1131a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lhax (void)
1132a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1133a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("lhax         17,14,15");
1134a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1135a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1136a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lhaux (void)
1137a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1138a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("lhaux        17,14,15");
1139a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1140a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1141a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lhzx (void)
1142a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1143a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("lhzx         17,14,15");
1144a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1145a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1146a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lhzux (void)
1147a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1148a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("lhzux        17,14,15");
1149a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1150a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1151a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lwzx (void)
1152a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1153a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("lwzx         17,14,15");
1154a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1155a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1156a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_lwzux (void)
1157a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1158a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("lwzux        17,14,15");
1159a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1160a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1161a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ild_ops_two[] = {
1162a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_lbzx            , "        lbzx", },
1163a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_lbzux           , "       lbzux", },
1164a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_lhax            , "        lhax", },
1165a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_lhaux           , "       lhaux", },
1166a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_lhzx            , "        lhzx", },
1167a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_lhzux           , "       lhzux", },
1168a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_lwzx            , "        lwzx", },
1169a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_lwzux           , "       lwzux", },
1170a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1171a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1172a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1173a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_stb (void)
1174a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1175a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("stb          14,0(15)");
1176a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1177a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1178a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_stbu (void)
1179a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1180a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("stbu         14,0(15)");
1181a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1182a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1183a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_sth (void)
1184a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1185a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("sth          14,0(15)");
1186a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1187a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1188a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_sthu (void)
1189a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1190a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("sthu         14,0(15)");
1191a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1192a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1193a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_stw (void)
1194a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1195a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("stw          14,0(15)");
1196a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1197a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1198a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_stwu (void)
1199a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1200a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("stwu         14,0(15)");
1201a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1202a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1203a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ist_ops_three_i16[] = {
1204a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_stb             , "         stb", },
1205a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_stbu            , "        stbu", },
1206a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_sth             , "         sth", },
1207a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_sthu            , "        sthu", },
1208a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_stw             , "         stw", },
1209a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_stwu            , "        stwu", },
1210a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1211a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1212a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1213a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_stbx (void)
1214a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1215a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("stbx         14,15,16");
1216a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1217a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1218a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_stbux (void)
1219a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1220a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("stbux        14,15,16");
1221a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1222a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1223a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_sthx (void)
1224a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1225a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("sthx         14,15,16");
1226a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1227a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1228a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_sthux (void)
1229a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1230a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("sthux        14,15,16");
1231a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1232a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1233a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_stwx (void)
1234a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1235a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("stwx         14,15,16");
1236a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1237a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1238a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_stwux (void)
1239a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1240a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("stwux        14,15,16");
1241a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1242a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1243a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ist_ops_three[] = {
1244a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_stbx            , "        stbx", },
1245a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_stbux           , "       stbux", },
1246a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_sthx            , "        sthx", },
1247a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_sthux           , "       sthux", },
1248a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_stwx            , "        stwx", },
1249a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_stwux           , "       stwux", },
1250a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1251a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1252a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1253a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
1254a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fsel (void)
1255a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1256a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fsel         17, 14, 15, 16");
1257a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1258a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1259a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmadd (void)
1260a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1261a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fmadd        17, 14, 15, 16");
1262a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1263a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1264a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmadds (void)
1265a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1266a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fmadds       17, 14, 15, 16");
1267a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1268a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1269a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmsub (void)
1270a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1271a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fmsub        17, 14, 15, 16");
1272a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1273a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1274a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmsubs (void)
1275a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1276a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fmsubs       17, 14, 15, 16");
1277a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1278a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1279a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fnmadd (void)
1280a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1281a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fnmadd       17, 14, 15, 16");
1282a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1283a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1284a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fnmadds (void)
1285a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1286a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fnmadds      17, 14, 15, 16");
1287a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1288a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1289a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fnmsub (void)
1290a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1291a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fnmsub       17, 14, 15, 16");
1292a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1293a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1294a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fnmsubs (void)
1295a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1296a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fnmsubs      17, 14, 15, 16");
1297a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1298a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1299a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_fa_ops_three[] = {
1300a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fsel            , "        fsel", },
1301a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fmadd           , "       fmadd", },
1302a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fmadds          , "      fmadds", },
1303a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fmsub           , "       fmsub", },
1304a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fmsubs          , "      fmsubs", },
1305a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fnmadd          , "      fnmadd", },
1306a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fnmadds         , "     fnmadds", },
1307a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fnmsub          , "      fnmsub", },
1308a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fnmsubs         , "     fnmsubs", },
1309a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1310a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1311a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
1312a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1313a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
1314a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fsel_ (void)
1315a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1316a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fsel.        17, 14, 15, 16");
1317a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1318a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1319a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmadd_ (void)
1320a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1321a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fmadd.       17, 14, 15, 16");
1322a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1323a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1324a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmadds_ (void)
1325a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1326a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fmadds.      17, 14, 15, 16");
1327a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1328a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1329a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmsub_ (void)
1330a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1331a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fmsub.       17, 14, 15, 16");
1332a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1333a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1334a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmsubs_ (void)
1335a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1336a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fmsubs.      17, 14, 15, 16");
1337a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1338a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1339a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fnmadd_ (void)
1340a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1341a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fnmadd.      17, 14, 15, 16");
1342a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1343a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1344a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fnmadds_ (void)
1345a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1346a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fnmadds.     17, 14, 15, 16");
1347a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1348a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1349a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fnmsub_ (void)
1350a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1351a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fnmsub.      17, 14, 15, 16");
1352a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1353a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1354a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fnmsubs_ (void)
1355a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1356a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fnmsubs.     17, 14, 15, 16");
1357a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1358a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1359a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_far_ops_three[] = {
1360a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fsel_           , "       fsel.", },
1361a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fmadd_          , "      fmadd.", },
1362a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fmadds_         , "     fmadds.", },
1363a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fmsub_          , "      fmsub.", },
1364a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fmsubs_         , "     fmsubs.", },
1365a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fnmadd_         , "     fnmadd.", },
1366a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fnmadds_        , "    fnmadds.", },
1367a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fnmsub_         , "     fnmsub.", },
1368a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fnmsubs_        , "    fnmsubs.", },
1369a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1370a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1371a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
1372a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1373a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
1374a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fadd (void)
1375a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1376a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fadd         17, 14, 15");
1377a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1378a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1379a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fadds (void)
1380a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1381a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fadds        17, 14, 15");
1382a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1383a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1384a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fsub (void)
1385a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1386a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fsub         17, 14, 15");
1387a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1388a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1389a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fsubs (void)
1390a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1391a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fsubs        17, 14, 15");
1392a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1393a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1394a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmul (void)
1395a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1396a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fmul         17, 14, 15");
1397a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1398a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1399a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmuls (void)
1400a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1401a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fmuls        17, 14, 15");
1402a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1403a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1404a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fdiv (void)
1405a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1406a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fdiv         17, 14, 15");
1407a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1408a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1409a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fdivs (void)
1410a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1411a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fdivs        17, 14, 15");
1412a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1413a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1414a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_fa_ops_two[] = {
1415a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fadd            , "        fadd", },
1416a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fadds           , "       fadds", },
1417a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fsub            , "        fsub", },
1418a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fsubs           , "       fsubs", },
1419a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fmul            , "        fmul", },
1420a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fmuls           , "       fmuls", },
1421a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fdiv            , "        fdiv", },
1422a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fdivs           , "       fdivs", },
1423a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1424a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1425a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
1426a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1427a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
1428a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fadd_ (void)
1429a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1430a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fadd.        17, 14, 15");
1431a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1432a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1433a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fadds_ (void)
1434a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1435a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fadds.       17, 14, 15");
1436a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1437a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1438a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fsub_ (void)
1439a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1440a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fsub.        17, 14, 15");
1441a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1442a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1443a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fsubs_ (void)
1444a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1445a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fsubs.       17, 14, 15");
1446a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1447a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1448a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmul_ (void)
1449a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1450a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fmul.        17, 14, 15");
1451a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1452a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1453a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmuls_ (void)
1454a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1455a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fmuls.       17, 14, 15");
1456a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1457a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1458a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fdiv_ (void)
1459a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1460a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fdiv.        17, 14, 15");
1461a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1462a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1463a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fdivs_ (void)
1464a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1465a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fdivs.       17, 14, 15");
1466a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1467a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1468a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_far_ops_two[] = {
1469a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fadd_           , "       fadd.", },
1470a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fadds_          , "      fadds.", },
1471a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fsub_           , "       fsub.", },
1472a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fsubs_          , "      fsubs.", },
1473a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fmul_           , "       fmul.", },
1474a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fmuls_          , "      fmuls.", },
1475a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fdiv_           , "       fdiv.", },
1476a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fdivs_          , "      fdivs.", },
1477a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1478a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1479a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
1480a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1481a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
1482a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fcmpo (void)
1483a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1484a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fcmpo        2, 14, 15");
1485a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1486a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1487a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fcmpu (void)
1488a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1489a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fcmpu        2, 14, 15");
1490a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1491a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1492a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_fcr_ops_two[] = {
1493a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fcmpo           , "       fcmpo", },
1494a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fcmpu           , "       fcmpu", },
1495a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1496a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1497a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
1498a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1499a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
150005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
150105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#if 0   // TODO: Not yet supported
1502a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fres (void)
1503a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1504a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fres         17, 14");
1505a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1506a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1507a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_frsqrte (void)
1508a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1509a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("frsqrte      17, 14");
1510a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
151105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#endif
1512a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1513a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_frsp (void)
1514a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1515a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("frsp         17, 14");
1516a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1517a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1518a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fctiw (void)
1519a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1520a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fctiw        17, 14");
1521a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1522a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1523a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fctiwz (void)
1524a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1525a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fctiwz       17, 14");
1526a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1527a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1528a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmr (void)
1529a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1530a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fmr          17, 14");
1531a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1532a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1533a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fneg (void)
1534a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1535a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fneg         17, 14");
1536a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1537a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1538a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fabs (void)
1539a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1540a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fabs         17, 14");
1541a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1542a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1543a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fnabs (void)
1544a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1545a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fnabs        17, 14");
1546a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1547a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1548a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_fa_ops_one[] = {
154905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   //    { &test_fres            , "        fres", },   // TODO: Not yet supported
155005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   //    { &test_frsqrte         , "     frsqrte", },   // TODO: Not yet supported
1551a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_frsp            , "        frsp", },
1552a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fctiw           , "       fctiw", },
1553a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fctiwz          , "      fctiwz", },
1554a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fmr             , "         fmr", },
1555a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fneg            , "        fneg", },
1556a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fabs            , "        fabs", },
1557a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fnabs           , "       fnabs", },
1558a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1559a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1560a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
1561a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1562a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
156305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
156405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#if 0   // TODO: Not yet supported
1565a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fres_ (void)
1566a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1567a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fres.        17, 14");
1568a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1569a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1570a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_frsqrte_ (void)
1571a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1572a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("frsqrte.     17, 14");
1573a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
157405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#endif
1575a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1576a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_frsp_ (void)
1577a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1578a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("frsp.        17, 14");
1579a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1580a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1581a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fctiw_ (void)
1582a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1583a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fctiw.       17, 14");
1584a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1585a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1586a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fctiwz_ (void)
1587a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1588a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fctiwz.      17, 14");
1589a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1590a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1591a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fmr_ (void)
1592a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1593a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fmr.         17, 14");
1594a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1595a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1596a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fneg_ (void)
1597a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1598a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fneg.        17, 14");
1599a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1600a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1601a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fabs_ (void)
1602a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1603a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fabs.        17, 14");
1604a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1605a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1606a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_fnabs_ (void)
1607a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1608a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("fnabs.       17, 14");
1609a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1610a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1611a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_far_ops_one[] = {
161205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   //    { &test_fres_           , "       fres.", },   // TODO: Not yet supported
161305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    //    { &test_frsqrte_        , "    frsqrte.", },   // TODO: Not yet supported
1614a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_frsp_           , "       frsp.", },
1615a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fctiw_          , "      fctiw.", },
1616a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fctiwz_         , "     fctiwz.", },
1617a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fmr_            , "        fmr.", },
1618a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fneg_           , "       fneg.", },
1619a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fabs_           , "       fabs.", },
1620a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_fnabs_          , "      fnabs.", },
1621a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1622a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1623a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
1624a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1625a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
1626a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_fl_ops_spe[] = {
1627a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1628a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1629a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
1630a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1631a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
1632a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_flr_ops_spe[] = {
1633a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1634a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1635a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
1636a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1637a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC)
1638a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmhaddshs (void)
1639a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1640a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmhaddshs    17, 14, 15, 16");
1641a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1642a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1643a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmhraddshs (void)
1644a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1645a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmhraddshs   17, 14, 15, 16");
1646a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1647a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1648a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmladduhm (void)
1649a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1650a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmladduhm    17, 14, 15, 16");
1651a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1652a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1653a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmsumubm (void)
1654a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1655a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmsumubm     17, 14, 15, 16");
1656a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1657a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1658a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmsumuhm (void)
1659a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1660a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmsumuhm     17, 14, 15, 16");
1661a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1662a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1663a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmsumshs (void)
1664a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1665a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmsumshs     17, 14, 15, 16");
1666a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1667a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1668a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmsumuhs (void)
1669a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1670a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmsumuhs     17, 14, 15, 16");
1671a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1672a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1673a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmsummbm (void)
1674a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1675a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmsummbm     17, 14, 15, 16");
1676a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1677a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1678a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmsumshm (void)
1679a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1680a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmsumshm     17, 14, 15, 16");
1681a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1682a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1683a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_aa_ops_three[] = {
1684a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmhaddshs       , "   vmhaddshs", },
1685a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmhraddshs      , "  vmhraddshs", },
1686a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmladduhm       , "   vmladduhm", },
1687a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmsumubm        , "    vmsumubm", },
1688a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmsumuhm        , "    vmsumuhm", },
1689a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmsumshs        , "    vmsumshs", },
1690a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmsumuhs        , "    vmsumuhs", },
1691a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmsummbm        , "    vmsummbm", },
1692a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmsumshm        , "    vmsumshm", },
1693a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1694a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1695a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */
1696a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1697a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC)
1698a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vperm (void)
1699a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1700a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vperm        17, 14, 15, 16");
1701a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1702a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1703a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsel (void)
1704a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1705a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsel         17, 14, 15, 16");
1706a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1707a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1708a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_al_ops_three[] = {
1709a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vperm           , "       vperm", },
1710a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsel            , "        vsel", },
1711a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
1712a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
1713a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */
1714a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1715a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC)
1716a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vaddubm (void)
1717a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1718a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vaddubm      17, 14, 15");
1719a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1720a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1721a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vadduhm (void)
1722a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1723a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vadduhm      17, 14, 15");
1724a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1725a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1726a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vadduwm (void)
1727a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1728a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vadduwm      17, 14, 15");
1729a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1730a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1731a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vaddubs (void)
1732a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1733a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vaddubs      17, 14, 15");
1734a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1735a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1736a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vadduhs (void)
1737a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1738a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vadduhs      17, 14, 15");
1739a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1740a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1741a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vadduws (void)
1742a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1743a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vadduws      17, 14, 15");
1744a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1745a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1746a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vaddsbs (void)
1747a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1748a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vaddsbs      17, 14, 15");
1749a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1750a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1751a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vaddshs (void)
1752a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1753a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vaddshs      17, 14, 15");
1754a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1755a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1756a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vaddsws (void)
1757a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1758a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vaddsws      17, 14, 15");
1759a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1760a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1761a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vaddcuw (void)
1762a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1763a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vaddcuw      17, 14, 15");
1764a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1765a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1766a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsububm (void)
1767a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1768a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsububm      17, 14, 15");
1769a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1770a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1771a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsubuhm (void)
1772a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1773a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsubuhm      17, 14, 15");
1774a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1775a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1776a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsubuwm (void)
1777a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1778a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsubuwm      17, 14, 15");
1779a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1780a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1781a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsububs (void)
1782a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1783a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsububs      17, 14, 15");
1784a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1785a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1786a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsubuhs (void)
1787a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1788a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsubuhs      17, 14, 15");
1789a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1790a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1791a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsubuws (void)
1792a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1793a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsubuws      17, 14, 15");
1794a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1795a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1796a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsubsbs (void)
1797a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1798a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsubsbs      17, 14, 15");
1799a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1800a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1801a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsubshs (void)
1802a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1803a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsubshs      17, 14, 15");
1804a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1805a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1806a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsubsws (void)
1807a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1808a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsubsws      17, 14, 15");
1809a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1810a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1811a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsubcuw (void)
1812a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1813a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsubcuw      17, 14, 15");
1814a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1815a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1816a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmuloub (void)
1817a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1818a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmuloub      17, 14, 15");
1819a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1820a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1821a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmulouh (void)
1822a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1823a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmulouh      17, 14, 15");
1824a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1825a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1826a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmulosb (void)
1827a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1828a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmulosb      17, 14, 15");
1829a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1830a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1831a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmulosh (void)
1832a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1833a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmulosh      17, 14, 15");
1834a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1835a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1836a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmuleub (void)
1837a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1838a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmuleub      17, 14, 15");
1839a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1840a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1841a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmuleuh (void)
1842a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1843a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmuleuh      17, 14, 15");
1844a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1845a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1846a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmulesb (void)
1847a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1848a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmulesb      17, 14, 15");
1849a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1850a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1851a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmulesh (void)
1852a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1853a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmulesh      17, 14, 15");
1854a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1855a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1856a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsumsws (void)
1857a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1858a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsumsws      17, 14, 15");
1859a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1860a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1861a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsum2sws (void)
1862a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1863a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsum2sws     17, 14, 15");
1864a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1865a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1866a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsum4ubs (void)
1867a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1868a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsum4ubs     17, 14, 15");
1869a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1870a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1871a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsum4sbs (void)
1872a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1873a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsum4sbs     17, 14, 15");
1874a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1875a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1876a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsum4shs (void)
1877a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1878a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsum4shs     17, 14, 15");
1879a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1880a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1881a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vavgub (void)
1882a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1883a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vavgub       17, 14, 15");
1884a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1885a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1886a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vavguh (void)
1887a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1888a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vavguh       17, 14, 15");
1889a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1890a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1891a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vavguw (void)
1892a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1893a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vavguw       17, 14, 15");
1894a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1895a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1896a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vavgsb (void)
1897a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1898a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vavgsb       17, 14, 15");
1899a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1900a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1901a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vavgsh (void)
1902a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1903a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vavgsh       17, 14, 15");
1904a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1905a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1906a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vavgsw (void)
1907a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1908a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vavgsw       17, 14, 15");
1909a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1910a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1911a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmaxub (void)
1912a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1913a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmaxub       17, 14, 15");
1914a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1915a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1916a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmaxuh (void)
1917a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1918a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmaxuh       17, 14, 15");
1919a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1920a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1921a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmaxuw (void)
1922a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1923a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmaxuw       17, 14, 15");
1924a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1925a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1926a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmaxsb (void)
1927a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1928a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmaxsb       17, 14, 15");
1929a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1930a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1931a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmaxsh (void)
1932a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1933a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmaxsh       17, 14, 15");
1934a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1935a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1936a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmaxsw (void)
1937a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1938a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmaxsw       17, 14, 15");
1939a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1940a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1941a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vminub (void)
1942a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1943a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vminub       17, 14, 15");
1944a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1945a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1946a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vminuh (void)
1947a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1948a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vminuh       17, 14, 15");
1949a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1950a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1951a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vminuw (void)
1952a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1953a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vminuw       17, 14, 15");
1954a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1955a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1956a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vminsb (void)
1957a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1958a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vminsb       17, 14, 15");
1959a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1960a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1961a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vminsh (void)
1962a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1963a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vminsh       17, 14, 15");
1964a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1965a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1966a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vminsw (void)
1967a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
1968a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vminsw       17, 14, 15");
1969a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
1970a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
1971a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_aa_ops_two[] = {
1972a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vaddubm         , "     vaddubm", },
1973a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vadduhm         , "     vadduhm", },
1974a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vadduwm         , "     vadduwm", },
1975a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vaddubs         , "     vaddubs", },
1976a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vadduhs         , "     vadduhs", },
1977a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vadduws         , "     vadduws", },
1978a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vaddsbs         , "     vaddsbs", },
1979a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vaddshs         , "     vaddshs", },
1980a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vaddsws         , "     vaddsws", },
1981a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vaddcuw         , "     vaddcuw", },
1982a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsububm         , "     vsububm", },
1983a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsubuhm         , "     vsubuhm", },
1984a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsubuwm         , "     vsubuwm", },
1985a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsububs         , "     vsububs", },
1986a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsubuhs         , "     vsubuhs", },
1987a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsubuws         , "     vsubuws", },
1988a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsubsbs         , "     vsubsbs", },
1989a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsubshs         , "     vsubshs", },
1990a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsubsws         , "     vsubsws", },
1991a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsubcuw         , "     vsubcuw", },
1992a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmuloub         , "     vmuloub", },
1993a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmulouh         , "     vmulouh", },
1994a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmulosb         , "     vmulosb", },
1995a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmulosh         , "     vmulosh", },
1996a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmuleub         , "     vmuleub", },
1997a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmuleuh         , "     vmuleuh", },
1998a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmulesb         , "     vmulesb", },
1999a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmulesh         , "     vmulesh", },
2000a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsumsws         , "     vsumsws", },
2001a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsum2sws        , "    vsum2sws", },
2002a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsum4ubs        , "    vsum4ubs", },
2003a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsum4sbs        , "    vsum4sbs", },
2004a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsum4shs        , "    vsum4shs", },
2005a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vavgub          , "      vavgub", },
2006a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vavguh          , "      vavguh", },
2007a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vavguw          , "      vavguw", },
2008a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vavgsb          , "      vavgsb", },
2009a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vavgsh          , "      vavgsh", },
2010a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vavgsw          , "      vavgsw", },
2011a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmaxub          , "      vmaxub", },
2012a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmaxuh          , "      vmaxuh", },
2013a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmaxuw          , "      vmaxuw", },
2014a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmaxsb          , "      vmaxsb", },
2015a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmaxsh          , "      vmaxsh", },
2016a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmaxsw          , "      vmaxsw", },
2017a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vminub          , "      vminub", },
2018a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vminuh          , "      vminuh", },
2019a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vminuw          , "      vminuw", },
2020a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vminsb          , "      vminsb", },
2021a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vminsh          , "      vminsh", },
2022a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vminsw          , "      vminsw", },
2023a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
2024a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
2025a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */
2026a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2027a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC)
2028a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vand (void)
2029a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2030a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vand         17, 14, 15");
2031a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2032a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2033a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vor (void)
2034a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2035a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vor          17, 14, 15");
2036a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2037a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2038a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vxor (void)
2039a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2040a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vxor         17, 14, 15");
2041a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2042a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2043a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vandc (void)
2044a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2045a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vandc        17, 14, 15");
2046a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2047a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2048a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vnor (void)
2049a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2050a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vnor         17, 14, 15");
2051a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2052a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2053a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vrlb (void)
2054a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2055a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vrlb         17, 14, 15");
2056a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2057a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2058a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vrlh (void)
2059a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2060a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vrlh         17, 14, 15");
2061a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2062a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2063a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vrlw (void)
2064a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2065a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vrlw         17, 14, 15");
2066a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2067a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2068a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vslb (void)
2069a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2070a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vslb         17, 14, 15");
2071a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2072a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2073a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vslh (void)
2074a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2075a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vslh         17, 14, 15");
2076a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2077a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2078a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vslw (void)
2079a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2080a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vslw         17, 14, 15");
2081a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2082a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2083a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsrb (void)
2084a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2085a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsrb         17, 14, 15");
2086a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2087a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2088a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsrh (void)
2089a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2090a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsrh         17, 14, 15");
2091a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2092a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2093a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsrw (void)
2094a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2095a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsrw         17, 14, 15");
2096a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2097a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2098a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsrab (void)
2099a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2100a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsrab        17, 14, 15");
2101a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2102a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2103a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsrah (void)
2104a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2105a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsrah        17, 14, 15");
2106a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2107a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2108a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsraw (void)
2109a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2110a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsraw        17, 14, 15");
2111a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2112a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2113a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vpkuhum (void)
2114a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2115a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vpkuhum      17, 14, 15");
2116a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2117a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2118a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vpkuwum (void)
2119a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2120a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vpkuwum      17, 14, 15");
2121a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2122a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2123a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vpkuhus (void)
2124a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2125a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vpkuhus      17, 14, 15");
2126a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2127a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2128a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vpkuwus (void)
2129a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2130a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vpkuwus      17, 14, 15");
2131a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2132a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2133a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vpkshus (void)
2134a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2135a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vpkshus      17, 14, 15");
2136a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2137a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2138a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vpkswus (void)
2139a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2140a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vpkswus      17, 14, 15");
2141a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2142a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2143a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vpkshss (void)
2144a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2145a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vpkshss      17, 14, 15");
2146a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2147a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2148a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vpkswss (void)
2149a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2150a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vpkswss      17, 14, 15");
2151a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2152a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2153a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vpkpx (void)
2154a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2155a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vpkpx        17, 14, 15");
2156a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2157a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2158a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmrghb (void)
2159a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2160a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmrghb       17, 14, 15");
2161a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2162a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2163a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmrghh (void)
2164a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2165a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmrghh       17, 14, 15");
2166a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2167a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2168a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmrghw (void)
2169a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2170a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmrghw       17, 14, 15");
2171a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2172a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2173a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmrglb (void)
2174a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2175a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmrglb       17, 14, 15");
2176a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2177a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2178a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmrglh (void)
2179a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2180a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmrglh       17, 14, 15");
2181a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2182a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2183a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmrglw (void)
2184a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2185a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmrglw       17, 14, 15");
2186a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2187a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2188a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vslo (void)
2189a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2190a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vslo         17, 14, 15");
2191a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2192a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2193a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsro (void)
2194a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2195a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsro         17, 14, 15");
2196a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2197a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2198a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_al_ops_two[] = {
2199a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vand            , "        vand", },
2200a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vor             , "         vor", },
2201a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vxor            , "        vxor", },
2202a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vandc           , "       vandc", },
2203a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vnor            , "        vnor", },
2204a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vrlb            , "        vrlb", },
2205a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vrlh            , "        vrlh", },
2206a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vrlw            , "        vrlw", },
2207a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vslb            , "        vslb", },
2208a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vslh            , "        vslh", },
2209a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vslw            , "        vslw", },
2210a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsrb            , "        vsrb", },
2211a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsrh            , "        vsrh", },
2212a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsrw            , "        vsrw", },
2213a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsrab           , "       vsrab", },
2214a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsrah           , "       vsrah", },
2215a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsraw           , "       vsraw", },
2216a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vpkuhum         , "     vpkuhum", },
2217a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vpkuwum         , "     vpkuwum", },
2218a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vpkuhus         , "     vpkuhus", },
2219a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vpkuwus         , "     vpkuwus", },
2220a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vpkshus         , "     vpkshus", },
2221a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vpkswus         , "     vpkswus", },
2222a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vpkshss         , "     vpkshss", },
2223a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vpkswss         , "     vpkswss", },
2224a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vpkpx           , "       vpkpx", },
2225a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmrghb          , "      vmrghb", },
2226a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmrghh          , "      vmrghh", },
2227a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmrghw          , "      vmrghw", },
2228a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmrglb          , "      vmrglb", },
2229a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmrglh          , "      vmrglh", },
2230a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmrglw          , "      vmrglw", },
2231a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vslo            , "        vslo", },
2232a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsro            , "        vsro", },
2233a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
2234a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
2235a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */
2236a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2237a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC)
2238a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vupkhsb (void)
2239a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2240a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vupkhsb      17, 14");
2241a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2242a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2243a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vupkhsh (void)
2244a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2245a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vupkhsh      17, 14");
2246a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2247a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2248a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vupkhpx (void)
2249a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2250a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vupkhpx      17, 14");
2251a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2252a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2253a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vupklsb (void)
2254a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2255a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vupklsb      17, 14");
2256a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2257a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2258a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vupklsh (void)
2259a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2260a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vupklsh      17, 14");
2261a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2262a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2263a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vupklpx (void)
2264a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2265a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vupklpx      17, 14");
2266a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2267a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2268a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_al_ops_one[] = {
2269a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vupkhsb         , "     vupkhsb", },
2270a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vupkhsh         , "     vupkhsh", },
2271a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vupkhpx         , "     vupkhpx", },
2272a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vupklsb         , "     vupklsb", },
2273a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vupklsh         , "     vupklsh", },
2274a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vupklpx         , "     vupklpx", },
2275a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
2276a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
2277a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */
2278a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2279a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC)
2280a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtub (void)
2281a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2282a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpgtub     17, 14, 15");
2283a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2284a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2285a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtuh (void)
2286a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2287a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpgtuh     17, 14, 15");
2288a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2289a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2290a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtuw (void)
2291a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2292a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpgtuw     17, 14, 15");
2293a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2294a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2295a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtsb (void)
2296a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2297a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpgtsb     17, 14, 15");
2298a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2299a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2300a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtsh (void)
2301a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2302a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpgtsh     17, 14, 15");
2303a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2304a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2305a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtsw (void)
2306a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2307a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpgtsw     17, 14, 15");
2308a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2309a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2310a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpequb (void)
2311a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2312a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpequb     17, 14, 15");
2313a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2314a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2315a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpequh (void)
2316a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2317a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpequh     17, 14, 15");
2318a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2319a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2320a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpequw (void)
2321a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2322a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpequw     17, 14, 15");
2323a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2324a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2325a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_ac_ops_two[] = {
2326a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpgtub        , "    vcmpgtub", },
2327a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpgtuh        , "    vcmpgtuh", },
2328a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpgtuw        , "    vcmpgtuw", },
2329a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpgtsb        , "    vcmpgtsb", },
2330a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpgtsh        , "    vcmpgtsh", },
2331a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpgtsw        , "    vcmpgtsw", },
2332a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpequb        , "    vcmpequb", },
2333a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpequh        , "    vcmpequh", },
2334a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpequw        , "    vcmpequw", },
2335a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
2336a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
2337a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */
2338a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2339a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC)
2340a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtub_ (void)
2341a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2342a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpgtub.    17, 14, 15");
2343a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2344a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2345a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtuh_ (void)
2346a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2347a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpgtuh.    17, 14, 15");
2348a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2349a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2350a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtuw_ (void)
2351a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2352a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpgtuw.    17, 14, 15");
2353a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2354a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2355a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtsb_ (void)
2356a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2357a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpgtsb.    17, 14, 15");
2358a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2359a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2360a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtsh_ (void)
2361a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2362a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpgtsh.    17, 14, 15");
2363a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2364a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2365a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtsw_ (void)
2366a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2367a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpgtsw.    17, 14, 15");
2368a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2369a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2370a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpequb_ (void)
2371a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2372a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpequb.    17, 14, 15");
2373a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2374a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2375a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpequh_ (void)
2376a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2377a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpequh.    17, 14, 15");
2378a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2379a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2380a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpequw_ (void)
2381a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2382a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpequw.    17, 14, 15");
2383a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2384a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2385a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_acr_ops_two[] = {
2386a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpgtub_       , "   vcmpgtub.", },
2387a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpgtuh_       , "   vcmpgtuh.", },
2388a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpgtuw_       , "   vcmpgtuw.", },
2389a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpgtsb_       , "   vcmpgtsb.", },
2390a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpgtsh_       , "   vcmpgtsh.", },
2391a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpgtsw_       , "   vcmpgtsw.", },
2392a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpequb_       , "   vcmpequb.", },
2393a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpequh_       , "   vcmpequh.", },
2394a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpequw_       , "   vcmpequw.", },
2395a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
2396a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
2397a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */
2398a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2399a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC)
2400a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsl (void)
2401a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2402a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsl          17, 14, 15");
2403a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2404a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2405a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsr (void)
2406a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2407a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsr          17, 14, 15");
2408a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2409a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2410a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vspltb (void)
2411a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2412a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vspltb       17, 14, 0");
2413a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2414a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2415a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsplth (void)
2416a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2417a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsplth       17, 14, 0");
2418a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2419a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2420a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vspltw (void)
2421a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2422a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vspltw       17, 14, 0");
2423a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2424a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2425a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vspltisb (void)
2426a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2427a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vspltisb     17, 0");
2428a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2429a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2430a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vspltish (void)
2431a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2432a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vspltish     17, 0");
2433a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2434a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2435a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vspltisw (void)
2436a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2437a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vspltisw     17, 0");
2438a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2439a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2440a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsldoi (void)
2441a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2442a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsldoi       17, 14, 15, 0");
2443a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2444a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
244505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_lvsl (void)
244605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{
244705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    __asm__ __volatile__ ("lvsl         17, 14, 15");
244805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion}
244905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
245005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_lvsr (void)
245105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{
245205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    __asm__ __volatile__ ("lvsr         17, 14, 15");
245305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion}
245405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
2455a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_av_int_ops_spe[] = {
2456a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsl             , "         vsl", },
2457a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsr             , "         vsr", },
2458a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vspltb          , "      vspltb", },
2459a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsplth          , "      vsplth", },
2460a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vspltw          , "      vspltw", },
2461a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vspltisb        , "    vspltisb", },
2462a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vspltish        , "    vspltish", },
2463a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vspltisw        , "    vspltisw", },
2464a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsldoi          , "      vsldoi", },
246505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    { &test_lvsl            , "        lvsl", },
246605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    { &test_lvsr            , "        lvsr", },
2467a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
2468a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
2469a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */
2470a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2471a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC)
247205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_lvebx (void)
247305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{
247405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    __asm__ __volatile__ ("lvebx        17,14,15");
247505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion}
247605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
247705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_lvehx (void)
247805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{
247905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    __asm__ __volatile__ ("lvehx        17,14,15");
248005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion}
248105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
248205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_lvewx (void)
248305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{
248405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    __asm__ __volatile__ ("lvewx        17,14,15");
248505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion}
248605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
248705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_lvx (void)
248805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{
248905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    __asm__ __volatile__ ("lvx          17,14,15");
249005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion}
249105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
249205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic test_t tests_ald_ops_two[] = {
249305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    { &test_lvebx           , "       lvebx", },
249405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    { &test_lvehx           , "       lvehx", },
249505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    { &test_lvewx           , "       lvewx", },
249605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    { &test_lvx             , "         lvx", },
249705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    { NULL,                   NULL,           },
249805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion};
249905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#endif /* defined (HAS_ALTIVEC) */
250005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
250105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#if defined (HAS_ALTIVEC)
250205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_stvebx (void)
250305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{
250405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    __asm__ __volatile__ ("stvebx       14,15,16");
250505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion}
250605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
250705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_stvehx (void)
250805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{
250905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    __asm__ __volatile__ ("stvehx       14,15,16");
251005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion}
251105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
251205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_stvewx (void)
251305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{
251405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    __asm__ __volatile__ ("stvewx       14,15,16");
251505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion}
251605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
251705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_stvx (void)
251805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{
251905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    __asm__ __volatile__ ("stvx         14,15,16");
252005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion}
252105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
252205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic test_t tests_ast_ops_three[] = {
252305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    { &test_stvebx          , "      stvebx", },
252405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    { &test_stvehx          , "      stvehx", },
252505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    { &test_stvewx          , "      stvewx", },
252605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    { &test_stvx            , "        stvx", },
252705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    { NULL,                   NULL,           },
252805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion};
252905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#endif /* defined (HAS_ALTIVEC) */
253005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
253105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#if defined (HAS_ALTIVEC)
253205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#if 0
2533a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmaddfp (void)
2534a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2535a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmaddfp      17, 14, 15, 16");
2536a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2537a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2538a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vnmsubfp (void)
2539a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2540a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vnmsubfp     17, 14, 15, 16");
2541a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
254205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#endif
2543a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2544a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_afa_ops_three[] = {
254505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion//    { &test_vmaddfp         , "     vmaddfp", },   // TODO: Not yet supported
254605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion//    { &test_vnmsubfp        , "    vnmsubfp", },   // TODO: Not yet supported
2547a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
2548a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
2549a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */
2550a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2551a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC)
2552a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vaddfp (void)
2553a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2554a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vaddfp       17, 14, 15");
2555a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2556a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2557a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vsubfp (void)
2558a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2559a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vsubfp       17, 14, 15");
2560a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2561a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2562a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vmaxfp (void)
2563a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2564a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vmaxfp       17, 14, 15");
2565a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2566a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2567a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vminfp (void)
2568a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2569a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vminfp       17, 14, 15");
2570a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2571a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2572a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_afa_ops_two[] = {
2573a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vaddfp          , "      vaddfp", },
2574a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vsubfp          , "      vsubfp", },
2575a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vmaxfp          , "      vmaxfp", },
2576a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vminfp          , "      vminfp", },
2577a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
2578a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
2579a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */
2580a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2581a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC)
258205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
258305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#if 0   // TODO: Not yet supported
2584a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vrfin (void)
2585a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2586a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vrfin        17, 14");
2587a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2588a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2589a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vrfiz (void)
2590a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2591a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vrfiz        17, 14");
2592a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2593a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2594a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vrfip (void)
2595a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2596a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vrfip        17, 14");
2597a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2598a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2599a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vrfim (void)
2600a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2601a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vrfim        17, 14");
2602a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
260305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#endif
2604a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2605a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vrefp (void)
2606a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2607a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vrefp        17, 14");
2608a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2609a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2610a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vrsqrtefp (void)
2611a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2612a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vrsqrtefp    17, 14");
2613a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2614a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
261505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#if 0   // TODO: Not yet supported
2616a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vlogefp (void)
2617a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2618a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vlogefp      17, 14");
2619a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2620a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2621a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vexptefp (void)
2622a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2623a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vexptefp     17, 14");
2624a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
262505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#endif
2626a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2627a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_afa_ops_one[] = {
2628b3eb91bab95bd2d521848510e0b59b4daa49fe73cerion    //    { &test_vrfin           , "       vrfin", },   // TODO: Not yet supported
2629b3eb91bab95bd2d521848510e0b59b4daa49fe73cerion    //    { &test_vrfiz           , "       vrfiz", },   // TODO: Not yet supported
2630b3eb91bab95bd2d521848510e0b59b4daa49fe73cerion    //    { &test_vrfip           , "       vrfip", },   // TODO: Not yet supported
2631b3eb91bab95bd2d521848510e0b59b4daa49fe73cerion    //    { &test_vrfim           , "       vrfim", },   // TODO: Not yet supported
2632a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vrefp           , "       vrefp", },
2633a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vrsqrtefp       , "   vrsqrtefp", },
2634b3eb91bab95bd2d521848510e0b59b4daa49fe73cerion    //    { &test_vlogefp         , "     vlogefp", },   // TODO: Not yet supported
2635b3eb91bab95bd2d521848510e0b59b4daa49fe73cerion    //    { &test_vexptefp        , "    vexptefp", },   // TODO: Not yet supported
2636a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
2637a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
2638a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */
2639a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2640a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC)
2641a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtfp (void)
2642a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2643a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpgtfp     17, 14, 15");
2644a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2645a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2646a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpeqfp (void)
2647a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2648a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpeqfp     17, 14, 15");
2649a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2650a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2651a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgefp (void)
2652a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2653a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpgefp     17, 14, 15");
2654a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2655a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2656a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpbfp (void)
2657a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2658a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpbfp      17, 14, 15");
2659a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2660a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2661a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_afc_ops_two[] = {
2662a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpgtfp        , "    vcmpgtfp", },
2663a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpeqfp        , "    vcmpeqfp", },
2664a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpgefp        , "    vcmpgefp", },
2665a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpbfp         , "     vcmpbfp", },
2666a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
2667a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
2668a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */
2669a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2670a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC)
2671a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgtfp_ (void)
2672a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2673a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpgtfp.    17, 14, 15");
2674a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2675a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2676a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpeqfp_ (void)
2677a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2678a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpeqfp.    17, 14, 15");
2679a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2680a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2681a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpgefp_ (void)
2682a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2683a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpgefp.    17, 14, 15");
2684a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2685a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2686a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_vcmpbfp_ (void)
2687a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2688a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("vcmpbfp.     17, 14, 15");
2689a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2690a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2691a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_afcr_ops_two[] = {
2692a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpgtfp_       , "   vcmpgtfp.", },
2693a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpeqfp_       , "   vcmpeqfp.", },
2694a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpgefp_       , "   vcmpgefp.", },
2695a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_vcmpbfp_        , "    vcmpbfp.", },
2696a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
2697a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
2698a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */
2699a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2700a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (IS_PPC405)
2701a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchw (void)
2702a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2703a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("macchw       17, 14, 15");
2704a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2705a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2706a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwo (void)
2707a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2708a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("macchwo      17, 14, 15");
2709a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2710a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2711a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchws (void)
2712a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2713a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("macchws      17, 14, 15");
2714a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2715a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2716a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwso (void)
2717a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2718a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("macchwso     17, 14, 15");
2719a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2720a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2721a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwsu (void)
2722a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2723a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("macchwsu     17, 14, 15");
2724a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2725a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2726a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwsuo (void)
2727a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2728a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("macchwsuo    17, 14, 15");
2729a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2730a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2731a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwu (void)
2732a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2733a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("macchwu      17, 14, 15");
2734a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2735a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2736a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwuo (void)
2737a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2738a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("macchwuo     17, 14, 15");
2739a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2740a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2741a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhw (void)
2742a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2743a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("machhw       17, 14, 15");
2744a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2745a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2746a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwo (void)
2747a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2748a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("machhwo      17, 14, 15");
2749a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2750a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2751a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhws (void)
2752a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2753a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("machhws      17, 14, 15");
2754a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2755a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2756a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwso (void)
2757a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2758a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("machhwso     17, 14, 15");
2759a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2760a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2761a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwsu (void)
2762a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2763a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("machhwsu     17, 14, 15");
2764a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2765a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2766a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwsuo (void)
2767a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2768a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("machhwsuo    17, 14, 15");
2769a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2770a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2771a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwu (void)
2772a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2773a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("machhwu      17, 14, 15");
2774a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2775a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2776a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwuo (void)
2777a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2778a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("machhwuo     17, 14, 15");
2779a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2780a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2781a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhw (void)
2782a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2783a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("maclhw       17, 14, 15");
2784a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2785a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2786a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwo (void)
2787a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2788a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("maclhwo      17, 14, 15");
2789a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2790a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2791a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhws (void)
2792a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2793a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("maclhws      17, 14, 15");
2794a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2795a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2796a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwso (void)
2797a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2798a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("maclhwso     17, 14, 15");
2799a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2800a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2801a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwsu (void)
2802a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2803a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("maclhwsu     17, 14, 15");
2804a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2805a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2806a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwsuo (void)
2807a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2808a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("maclhwsuo    17, 14, 15");
2809a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2810a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2811a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwu (void)
2812a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2813a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("maclhwu      17, 14, 15");
2814a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2815a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2816a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwuo (void)
2817a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2818a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("maclhwuo     17, 14, 15");
2819a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2820a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2821a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulchw (void)
2822a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2823a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mulchw       17, 14, 15");
2824a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2825a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2826a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulchwu (void)
2827a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2828a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mulchwu      17, 14, 15");
2829a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2830a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2831a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulhhw (void)
2832a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2833a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mulhhw       17, 14, 15");
2834a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2835a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2836a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulhhwu (void)
2837a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2838a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mulhhwu      17, 14, 15");
2839a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2840a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2841a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mullhw (void)
2842a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2843a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mullhw       17, 14, 15");
2844a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2845a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2846a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mullhwu (void)
2847a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2848a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mullhwu      17, 14, 15");
2849a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2850a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2851a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmacchw (void)
2852a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2853a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmacchw      17, 14, 15");
2854a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2855a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2856a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmacchwo (void)
2857a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2858a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmacchwo     17, 14, 15");
2859a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2860a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2861a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmacchws (void)
2862a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2863a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmacchws     17, 14, 15");
2864a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2865a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2866a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmacchwso (void)
2867a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2868a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmacchwso    17, 14, 15");
2869a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2870a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2871a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmachhw (void)
2872a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2873a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmachhw      17, 14, 15");
2874a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2875a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2876a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmachhwo (void)
2877a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2878a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmachhwo     17, 14, 15");
2879a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2880a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2881a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmachhws (void)
2882a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2883a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmachhws     17, 14, 15");
2884a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2885a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2886a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmachhwso (void)
2887a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2888a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmachhwso    17, 14, 15");
2889a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2890a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2891a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmaclhw (void)
2892a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2893a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmaclhw      17, 14, 15");
2894a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2895a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2896a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmaclhwo (void)
2897a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2898a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmaclhwo     17, 14, 15");
2899a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2900a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2901a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmaclhws (void)
2902a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2903a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmaclhws     17, 14, 15");
2904a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2905a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2906a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmaclhwso (void)
2907a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2908a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmaclhwso    17, 14, 15");
2909a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2910a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2911a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_p4m_ops_two[] = {
2912a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_macchw          , "      macchw", },
2913a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_macchwo         , "     macchwo", },
2914a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_macchws         , "     macchws", },
2915a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_macchwso        , "    macchwso", },
2916a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_macchwsu        , "    macchwsu", },
2917a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_macchwsuo       , "   macchwsuo", },
2918a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_macchwu         , "     macchwu", },
2919a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_macchwuo        , "    macchwuo", },
2920a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_machhw          , "      machhw", },
2921a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_machhwo         , "     machhwo", },
2922a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_machhws         , "     machhws", },
2923a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_machhwso        , "    machhwso", },
2924a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_machhwsu        , "    machhwsu", },
2925a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_machhwsuo       , "   machhwsuo", },
2926a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_machhwu         , "     machhwu", },
2927a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_machhwuo        , "    machhwuo", },
2928a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_maclhw          , "      maclhw", },
2929a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_maclhwo         , "     maclhwo", },
2930a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_maclhws         , "     maclhws", },
2931a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_maclhwso        , "    maclhwso", },
2932a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_maclhwsu        , "    maclhwsu", },
2933a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_maclhwsuo       , "   maclhwsuo", },
2934a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_maclhwu         , "     maclhwu", },
2935a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_maclhwuo        , "    maclhwuo", },
2936a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mulchw          , "      mulchw", },
2937a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mulchwu         , "     mulchwu", },
2938a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mulhhw          , "      mulhhw", },
2939a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mulhhwu         , "     mulhhwu", },
2940a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mullhw          , "      mullhw", },
2941a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mullhwu         , "     mullhwu", },
2942a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmacchw         , "     nmacchw", },
2943a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmacchwo        , "    nmacchwo", },
2944a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmacchws        , "    nmacchws", },
2945a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmacchwso       , "   nmacchwso", },
2946a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmachhw         , "     nmachhw", },
2947a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmachhwo        , "    nmachhwo", },
2948a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmachhws        , "    nmachhws", },
2949a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmachhwso       , "   nmachhwso", },
2950a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmaclhw         , "     nmaclhw", },
2951a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmaclhwo        , "    nmaclhwo", },
2952a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmaclhws        , "    nmaclhws", },
2953a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmaclhwso       , "   nmaclhwso", },
2954a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
2955a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
2956a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (IS_PPC405) */
2957a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2958a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (IS_PPC405)
2959a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchw_ (void)
2960a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2961a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("macchw.      17, 14, 15");
2962a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2963a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2964a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwo_ (void)
2965a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2966a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("macchwo.     17, 14, 15");
2967a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2968a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2969a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchws_ (void)
2970a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2971a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("macchws.     17, 14, 15");
2972a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2973a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2974a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwso_ (void)
2975a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2976a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("macchwso.    17, 14, 15");
2977a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2978a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2979a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwsu_ (void)
2980a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2981a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("macchwsu.    17, 14, 15");
2982a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2983a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2984a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwsuo_ (void)
2985a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2986a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("macchwsuo.   17, 14, 15");
2987a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2988a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2989a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwu_ (void)
2990a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2991a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("macchwu.     17, 14, 15");
2992a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2993a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2994a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_macchwuo_ (void)
2995a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
2996a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("macchwuo.    17, 14, 15");
2997a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
2998a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
2999a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhw_ (void)
3000a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3001a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("machhw.      17, 14, 15");
3002a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3003a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3004a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwo_ (void)
3005a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3006a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("machhwo.     17, 14, 15");
3007a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3008a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3009a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhws_ (void)
3010a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3011a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("machhws.     17, 14, 15");
3012a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3013a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3014a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwso_ (void)
3015a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3016a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("machhwso.    17, 14, 15");
3017a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3018a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3019a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwsu_ (void)
3020a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3021a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("machhwsu.    17, 14, 15");
3022a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3023a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3024a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwsuo_ (void)
3025a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3026a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("machhwsuo.   17, 14, 15");
3027a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3028a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3029a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwu_ (void)
3030a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3031a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("machhwu.     17, 14, 15");
3032a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3033a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3034a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_machhwuo_ (void)
3035a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3036a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("machhwuo.    17, 14, 15");
3037a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3038a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3039a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhw_ (void)
3040a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3041a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("maclhw.      17, 14, 15");
3042a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3043a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3044a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwo_ (void)
3045a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3046a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("maclhwo.     17, 14, 15");
3047a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3048a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3049a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhws_ (void)
3050a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3051a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("maclhws.     17, 14, 15");
3052a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3053a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3054a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwso_ (void)
3055a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3056a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("maclhwso.    17, 14, 15");
3057a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3058a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3059a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwsu_ (void)
3060a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3061a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("maclhwsu.    17, 14, 15");
3062a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3063a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3064a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwsuo_ (void)
3065a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3066a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("maclhwsuo.   17, 14, 15");
3067a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3068a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3069a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwu_ (void)
3070a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3071a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("maclhwu.     17, 14, 15");
3072a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3073a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3074a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_maclhwuo_ (void)
3075a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3076a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("maclhwuo.    17, 14, 15");
3077a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3078a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3079a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulchw_ (void)
3080a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3081a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mulchw.      17, 14, 15");
3082a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3083a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3084a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulchwu_ (void)
3085a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3086a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mulchwu.     17, 14, 15");
3087a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3088a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3089a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulhhw_ (void)
3090a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3091a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mulhhw.      17, 14, 15");
3092a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3093a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3094a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mulhhwu_ (void)
3095a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3096a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mulhhwu.     17, 14, 15");
3097a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3098a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3099a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mullhw_ (void)
3100a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3101a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mullhw.      17, 14, 15");
3102a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3103a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3104a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_mullhwu_ (void)
3105a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3106a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("mullhwu.     17, 14, 15");
3107a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3108a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3109a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmacchw_ (void)
3110a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3111a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmacchw.     17, 14, 15");
3112a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3113a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3114a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmacchwo_ (void)
3115a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3116a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmacchwo.    17, 14, 15");
3117a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3118a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3119a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmacchws_ (void)
3120a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3121a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmacchws.    17, 14, 15");
3122a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3123a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3124a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmacchwso_ (void)
3125a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3126a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmacchwso.   17, 14, 15");
3127a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3128a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3129a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmachhw_ (void)
3130a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3131a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmachhw.     17, 14, 15");
3132a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3133a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3134a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmachhwo_ (void)
3135a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3136a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmachhwo.    17, 14, 15");
3137a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3138a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3139a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmachhws_ (void)
3140a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3141a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmachhws.    17, 14, 15");
3142a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3143a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3144a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmachhwso_ (void)
3145a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3146a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmachhwso.   17, 14, 15");
3147a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3148a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3149a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmaclhw_ (void)
3150a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3151a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmaclhw.     17, 14, 15");
3152a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3153a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3154a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmaclhwo_ (void)
3155a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3156a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmaclhwo.    17, 14, 15");
3157a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3158a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3159a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmaclhws_ (void)
3160a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3161a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmaclhws.    17, 14, 15");
3162a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3163a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3164a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_nmaclhwso_ (void)
3165a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3166a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    __asm__ __volatile__ ("nmaclhwso.   17, 14, 15");
3167a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3168a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3169a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_t tests_p4mc_ops_two[] = {
3170a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_macchw_         , "     macchw.", },
3171a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_macchwo_        , "    macchwo.", },
3172a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_macchws_        , "    macchws.", },
3173a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_macchwso_       , "   macchwso.", },
3174a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_macchwsu_       , "   macchwsu.", },
3175a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_macchwsuo_      , "  macchwsuo.", },
3176a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_macchwu_        , "    macchwu.", },
3177a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_macchwuo_       , "   macchwuo.", },
3178a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_machhw_         , "     machhw.", },
3179a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_machhwo_        , "    machhwo.", },
3180a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_machhws_        , "    machhws.", },
3181a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_machhwso_       , "   machhwso.", },
3182a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_machhwsu_       , "   machhwsu.", },
3183a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_machhwsuo_      , "  machhwsuo.", },
3184a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_machhwu_        , "    machhwu.", },
3185a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_machhwuo_       , "   machhwuo.", },
3186a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_maclhw_         , "     maclhw.", },
3187a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_maclhwo_        , "    maclhwo.", },
3188a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_maclhws_        , "    maclhws.", },
3189a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_maclhwso_       , "   maclhwso.", },
3190a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_maclhwsu_       , "   maclhwsu.", },
3191a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_maclhwsuo_      , "  maclhwsuo.", },
3192a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_maclhwu_        , "    maclhwu.", },
3193a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_maclhwuo_       , "   maclhwuo.", },
3194a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mulchw_         , "     mulchw.", },
3195a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mulchwu_        , "    mulchwu.", },
3196a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mulhhw_         , "     mulhhw.", },
3197a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mulhhwu_        , "    mulhhwu.", },
3198a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mullhw_         , "     mullhw.", },
3199a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_mullhwu_        , "    mullhwu.", },
3200a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmacchw_        , "    nmacchw.", },
3201a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmacchwo_       , "   nmacchwo.", },
3202a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmacchws_       , "   nmacchws.", },
3203a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmacchwso_      , "  nmacchwso.", },
3204a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmachhw_        , "    nmachhw.", },
3205a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmachhwo_       , "   nmachhwo.", },
3206a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmachhws_       , "   nmachhws.", },
3207a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmachhwso_      , "  nmachhwso.", },
3208a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmaclhw_        , "    nmaclhw.", },
3209a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmaclhwo_       , "   nmaclhwo.", },
3210a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmaclhws_       , "   nmaclhws.", },
3211a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { &test_nmaclhwso_      , "  nmaclhwso.", },
3212a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,           },
3213a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
3214a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (IS_PPC405) */
3215a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3216a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_table_t all_tests[] = {
3217a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3218a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_ia_ops_two      ,
3219a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer arith insns with two args",
3220a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00010102,
3221a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3222a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3223a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_iar_ops_two     ,
3224a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer arith insns with two args with flags update",
3225a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x01010102,
3226a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3227a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3228a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_iac_ops_two     ,
3229a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer arith insns with two args and carry",
3230a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x02010102,
3231a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3232a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3233a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_iacr_ops_two    ,
3234a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer arith insns with two args and carry with flags update",
3235a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x03010102,
3236a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3237a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3238a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_il_ops_two      ,
3239a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer logical insns with two args",
3240a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00010202,
3241a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3242a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3243a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_ilr_ops_two     ,
3244a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer logical insns with two args with flags update",
3245a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x01010202,
3246a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3247a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3248a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_icr_ops_two     ,
3249a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer compare insns (two args)",
3250a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x01010304,
3251a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3252a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3253a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_icr_ops_two_i16 ,
3254a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer compare with immediate insns (two args)",
3255a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x01010305,
3256a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3257a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3258a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_ia_ops_two_i16  ,
3259a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer arith insns\n    with one register + one 16 bits immediate args",
3260a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00010106,
3261a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3262a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3263a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_iar_ops_two_i16 ,
3264a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer arith insns\n    with one register + one 16 bits immediate args with flags update",
3265a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x01010106,
3266a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3267a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3268a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_il_ops_two_i16  ,
3269a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer logical insns\n    with one register + one 16 bits immediate args",
3270a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00010206,
3271a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3272a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3273a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_ilr_ops_two_i16 ,
3274a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer logical insns\n    with one register + one 16 bits immediate args with flags update",
3275a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x01010206,
3276a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3277a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3278a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_crl_ops_two     ,
3279a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC condition register logical insns - two operands",
3280a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x01010202,
3281a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3282a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3283a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_iac_ops_one     ,
3284a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer arith insns with one arg and carry",
3285a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x02010101,
3286a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3287a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3288a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_iacr_ops_one    ,
3289a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer arith insns with one arg and carry with flags update",
3290a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x03010101,
3291a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3292a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3293a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_il_ops_one      ,
3294a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer logical insns with one arg",
3295a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00010201,
3296a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3297a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3298a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_ilr_ops_one     ,
3299a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer logical insns with one arg with flags update",
3300a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x01010201,
3301a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3302a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3303a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_il_ops_spe      ,
3304a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC logical insns with special forms",
3305a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00010207,
3306a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3307a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3308a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_ilr_ops_spe     ,
3309a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC logical insns with special forms with flags update",
3310a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x01010207,
3311a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3312a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3313a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_ild_ops_two_i16 ,
3314a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer load insns\n    with one register + one 16 bits immediate args with flags update",
3315a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00010508,
3316a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3317a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3318a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_ild_ops_two     ,
3319a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer load insns with two register args",
3320a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00010509,
3321a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3322a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3323a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_ist_ops_three_i16,
3324a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer store insns\n    with one register + one 16 bits immediate args with flags update",
3325a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x0001050a,
3326a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3327a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3328a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_ist_ops_three   ,
3329a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC integer store insns with three register args",
3330a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x0001050b,
3331a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3332a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
3333a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3334a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_fa_ops_three    ,
3335a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC floating point arith insns with three args",
3336a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00020103,
3337a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3338a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
3339a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
3340a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3341a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_far_ops_three   ,
3342a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC floating point arith insns\n    with three args with flags update",
3343a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x01020103,
3344a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3345a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
3346a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
3347a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3348a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_fa_ops_two      ,
3349a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC floating point arith insns with two args",
3350a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00020102,
3351a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3352a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
3353a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
3354a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3355a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_far_ops_two     ,
3356a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC floating point arith insns\n    with two args with flags update",
3357a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x01020102,
3358a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3359a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
3360a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
3361a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3362a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_fcr_ops_two     ,
3363a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC floating point compare insns (two args)",
3364a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x01020304,
3365a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3366a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
3367a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
3368a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3369a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_fa_ops_one      ,
3370a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC floating point arith insns with one arg",
3371a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00020101,
3372a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3373a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
3374a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
3375a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3376a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_far_ops_one     ,
3377a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC floating point arith insns\n    with one arg with flags update",
3378a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x01020101,
3379a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3380a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
3381a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
3382a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3383a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_fl_ops_spe      ,
3384a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC floating point status register manipulation insns",
3385a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00020207,
3386a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3387a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
3388a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
3389a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3390a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_flr_ops_spe     ,
3391a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC floating point status register manipulation insns\n  with flags update",
3392a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x01020207,
3393a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3394a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
3395a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC)
3396a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3397a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_aa_ops_three    ,
3398a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC altivec integer arith insns with three args",
3399a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00040103,
3400a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3401a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */
3402a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC)
3403a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3404a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_al_ops_three    ,
3405a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC altivec integer logical insns with three args",
3406a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00040203,
3407a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3408a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */
3409a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC)
3410a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3411a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_aa_ops_two      ,
3412a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC altivec integer arith insns with two args",
3413a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00040102,
3414a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3415a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */
3416a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC)
3417a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3418a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_al_ops_two      ,
3419a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC altivec integer logical insns with two args",
3420a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00040202,
3421a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3422a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */
3423a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC)
3424a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3425a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_al_ops_one      ,
3426a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC altivec integer logical insns with one arg",
3427a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00040201,
3428a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3429a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */
3430a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC)
3431a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3432a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_ac_ops_two      ,
3433a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "Altivec integer compare insns",
3434a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00040302,
3435a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3436a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */
3437a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC)
3438a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3439a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_acr_ops_two     ,
3440a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "Altivec integer compare insns with flags update",
3441a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x01040302,
3442a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3443a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */
3444a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC)
3445a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3446a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_av_int_ops_spe  ,
3447a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "Altivec integer special insns",
3448a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00040207,
3449a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3450a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */
3451a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC)
3452a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
345305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion        tests_ald_ops_two     ,
345405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion        "Altivec load insns with two register args",
345505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion        0x00040509,
345605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    },
345705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#endif /* defined (HAS_ALTIVEC) */
345805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#if defined (HAS_ALTIVEC)
345905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    {
346005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion        tests_ast_ops_three   ,
346105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion        "Altivec store insns with three register args",
346205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion        0x0004050b,
346305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    },
346405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#endif /* defined (HAS_ALTIVEC) */
346505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#if defined (HAS_ALTIVEC)
346605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion    {
3467a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_afa_ops_three   ,
3468a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "Altivec floating point arith insns with three args",
3469a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00050103,
3470a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3471a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */
3472a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC)
3473a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3474a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_afa_ops_two     ,
3475a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "Altivec floating point arith insns with two args",
3476a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00050102,
3477a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3478a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */
3479a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC)
3480a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3481a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_afa_ops_one     ,
3482a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "Altivec floating point arith insns with one arg",
3483a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00050101,
3484a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3485a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */
3486a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC)
3487a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3488a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_afc_ops_two     ,
3489a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "Altivec floating point compare insns",
3490a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00050302,
3491a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3492a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */
3493a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC)
3494a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3495a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_afcr_ops_two    ,
3496a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "Altivec floating point compare insns with flags update",
3497a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x01050302,
3498a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3499a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */
3500a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (IS_PPC405)
3501a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3502a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_p4m_ops_two     ,
3503a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC 405 mac insns with three args",
3504a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x00030102,
3505a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3506a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (IS_PPC405) */
3507a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (IS_PPC405)
3508a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    {
3509a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        tests_p4mc_ops_two    ,
3510a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        "PPC 405 mac insns with three args with flags update",
3511a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        0x01030102,
3512a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    },
3513a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (IS_PPC405) */
3514a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    { NULL,                   NULL,               0x00000000, },
3515a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
3516a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3517a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* -------------- END #include "ops-ppc.c" -------------- */
3518a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3519a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic int verbose = 0;
3520a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic int arg_list_size = 0;
3521a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3522a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic double *fargs;
3523a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic int nb_fargs;
3524a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic uint32_t *iargs;
3525a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic int nb_iargs;
3526a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic uint16_t *ii16;
3527a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic int nb_ii16;
3528a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC)
3529a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic vector unsigned int* viargs;
3530a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic int nb_viargs;
3531a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic vector float* vfargs;
3532a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic int nb_vfargs;
3533a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3534a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj//#define TEST_VSCR_SAT
3535a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
3536a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3537a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic inline void register_farg (void *farg,
3538a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                  int s, uint16_t exp, uint64_t mant)
3539a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3540a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   uint64_t tmp;
3541a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3542a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   tmp = ((uint64_t)s << 63) | ((uint64_t)exp << 52) | mant;
3543a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   *(uint64_t *)farg = tmp;
3544a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   AB_DPRINTF("%d %03x %013llx => %016llx %0e\n",
3545a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj              s, exp, mant, *(uint64_t *)farg, *(double *)farg);
3546a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3547a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3548a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void build_fargs_table (void)
3549a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3550a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   /* Sign goes from zero to one
3551a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    * Exponent goes from 0 to ((1 << 12) - 1)
3552a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    * Mantissa goes from 1 to ((1 << 52) - 1)
3553a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    * + special values:
3554a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    * +0.0      : 0 0x000 0x0000000000000
3555a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    * -0.0      : 1 0x000 0x0000000000000
3556a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    * +infinity : 0 0x7FF 0x0000000000000
3557a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    * -infinity : 1 0x7FF 0x0000000000000
3558a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    * +SNaN     : 0 0x7FF 0x7FFFFFFFFFFFF
3559a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    * -SNaN     : 1 0x7FF 0x7FFFFFFFFFFFF
3560a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    * +QNaN     : 0 0x7FF 0x8000000000000
3561a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    * -QNaN     : 1 0x7FF 0x8000000000000
3562a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    * (8 values)
3563a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    */
3564a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   uint64_t mant;
3565a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   uint16_t exp, e0, e1;
3566a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int s;
3567a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i=0;
3568a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3569a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   if ( arg_list_size == 1 ) {   // Large
3570a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      fargs = malloc(200 * sizeof(double));
3571a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (s=0; s<2; s++) {
3572a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         for (e0=0; e0<2; e0++) {
3573a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            for (e1=0x000; ; e1 = ((e1 + 1) << 2) + 6) {
3574a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               if (e1 >= 0x400)
3575a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                  e1 = 0x3fe;
3576a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               exp = (e0 << 10) | e1;
3577a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               for (mant = 0x0000000000001ULL; mant < (1ULL << 52);
3578a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                    /* Add 'random' bits */
3579a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                    mant = ((mant + 0x4A6) << 13) + 0x359) {
3580a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                  register_farg(&fargs[i++], s, exp, mant);
3581a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               }
3582a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               if (e1 == 0x3fe)
3583a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                  break;
3584a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            }
3585a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         }
3586a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
3587a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   } else {                      // Default
3588a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      fargs = malloc(16 * sizeof(double));
3589a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (s=0; s<2; s++) {                                // x2
3590a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj//       for (e0=0; e0<2; e0++) {
3591a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            for (e1=0x001; ; e1 = ((e1 + 1) << 13) + 7) {  // x2
3592a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj//          for (e1=0x000; ; e1 = ((e1 + 1) << 5) + 7) {   // x3
3593a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               if (e1 >= 0x400)
3594a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                  e1 = 0x3fe;
3595a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj//             exp = (e0 << 10) | e1;
3596a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               exp = e1;
3597a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               for (mant = 0x0000000000001ULL; mant < (1ULL << 52);
3598a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                    /* Add 'random' bits */
3599a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                    mant = ((mant + 0x4A6) << 29) + 0x359) {  // x2
3600a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                  register_farg(&fargs[i++], s, exp, mant);
3601a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               }
3602a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               if (e1 == 0x3fe)
3603a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                  break;
3604a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            }
3605a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj//       }
3606a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
3607a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
3608a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3609a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   /* Special values */
3610a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   /* +0.0      : 0 0x000 0x0000000000000 */
3611a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   s = 0;
3612a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   exp = 0x000;
3613a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   mant = 0x0000000000000ULL;
3614a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   register_farg(&fargs[i++], s, exp, mant);
3615a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   /* -0.0      : 1 0x000 0x0000000000000 */
3616a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   s = 1;
3617a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   exp = 0x000;
3618a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   mant = 0x0000000000000ULL;
3619a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   register_farg(&fargs[i++], s, exp, mant);
3620a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   /* +infinity : 0 0x7FF 0x0000000000000  */
3621a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   s = 0;
3622a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   exp = 0x7FF;
3623a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   mant = 0x0000000000000ULL;
3624a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   register_farg(&fargs[i++], s, exp, mant);
3625a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   /* -infinity : 1 0x7FF 0x0000000000000 */
3626a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   s = 1;
3627a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   exp = 0x7FF;
3628a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   mant = 0x0000000000000ULL;
3629a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   register_farg(&fargs[i++], s, exp, mant);
3630a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   /* +SNaN     : 0 0x7FF 0x7FFFFFFFFFFFF */
3631a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   s = 0;
3632a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   exp = 0x7FF;
3633a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   mant = 0x7FFFFFFFFFFFFULL;
3634a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   register_farg(&fargs[i++], s, exp, mant);
3635a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   /* -SNaN     : 1 0x7FF 0x7FFFFFFFFFFFF */
3636a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   s = 1;
3637a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   exp = 0x7FF;
3638a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   mant = 0x7FFFFFFFFFFFFULL;
3639a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   register_farg(&fargs[i++], s, exp, mant);
3640a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   /* +QNaN     : 0 0x7FF 0x8000000000000 */
3641a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   s = 0;
3642a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   exp = 0x7FF;
3643a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   mant = 0x8000000000000ULL;
3644a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   register_farg(&fargs[i++], s, exp, mant);
3645a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   /* -QNaN     : 1 0x7FF 0x8000000000000 */
3646a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   s = 1;
3647a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   exp = 0x7FF;
3648a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   mant = 0x8000000000000ULL;
3649a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   register_farg(&fargs[i++], s, exp, mant);
3650a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   AB_DPRINTF("Registered %d fargs values\n", i);
3651a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   nb_fargs = i;
3652a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3653a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3654a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void build_iargs_table (void)
3655a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3656a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   uint64_t tmp;
3657a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i=0;
3658a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3659a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   if (arg_list_size == 1) {                   // Large
3660a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      iargs = malloc(400 * sizeof(uint32_t));
3661a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (tmp=0; ; tmp = tmp + 1 + (tmp >> 1)) {
3662a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (tmp >= 0x100000000ULL)
3663a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            tmp = 0xFFFFFFFF;
3664a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         iargs[i++] = tmp;
3665a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         AB_DPRINTF("val %08llx\n", tmp);
3666a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (tmp == 0xFFFFFFFF)
3667a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            break;
3668a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
3669a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   } else {                                    // Default
3670a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      iargs = malloc(10 * sizeof(uint32_t));
3671a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      // for (tmp = 0; ; tmp = 71*tmp + 1 + (tmp>>1)) {  // gives 8
3672a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      // for (tmp = 0; ; tmp = 100000*tmp + 1 + (tmp>>1)) {  // gives 4
3673a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (tmp=0; ; tmp = 999999*tmp + 999999) {  // gives 3
3674a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (tmp >= 0x100000000ULL)
3675a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            tmp = 0xFFFFFFFF;
3676a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         iargs[i++] = tmp;
3677a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         AB_DPRINTF("val %08llx\n", tmp);
3678a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (tmp == 0xFFFFFFFF)
3679a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            break;
3680a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
3681a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
3682a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   AB_DPRINTF("Registered %d iargs values\n", i);
3683a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   nb_iargs = i;
3684a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3685a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3686a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void build_ii16_table (void)
3687a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3688a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   uint32_t tmp;
3689a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i=0;
3690a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3691a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   if (arg_list_size == 1) {                   // Large
3692a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      ii16 = malloc(200 * sizeof(uint32_t));
3693a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (tmp=0; ; tmp = tmp + 1 + (tmp >> 2)) {
3694a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (tmp >= 0x10000)
3695a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            tmp = 0xFFFF;
3696a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         ii16[i++] = tmp;
3697a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         AB_DPRINTF("val %08x\n", tmp);
3698a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (tmp == 0xFFFF)
3699a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            break;
3700a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
3701a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   } else {                                    // Default
3702a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      ii16 = malloc(10 * sizeof(uint32_t));
3703a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (tmp=0; ; tmp = 999*tmp + 999) {  // gives 3
3704a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (tmp >= 0x10000)
3705a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            tmp = 0xFFFF;
3706a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         ii16[i++] = tmp;
3707a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         AB_DPRINTF("val %08x\n", tmp);
3708a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (tmp == 0xFFFF)
3709a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            break;
3710a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
3711a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
3712a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   AB_DPRINTF("Registered %d ii16 values\n", i);
3713a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   nb_ii16 = i;
3714a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3715a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3716a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC)
3717a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void build_viargs_table (void)
3718a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3719a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   unsigned int i=0;
3720a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3721a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (ALTIVEC_ARGS_LARGE)
3722a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   i=2;
3723a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   viargs = memalign(16, i * sizeof(vector unsigned int));
3724a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   viargs[0] = (vector unsigned int) { 0x01020304,0x05060708,0x090A0B0C,0x0E0D0E0F };
3725a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   viargs[1] = (vector unsigned int) { 0xF1F2F3F4,0xF5F6F7F8,0xF9FAFBFC,0xFEFDFEFF };
3726a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else
3727a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // build from iargs table (large/default already set)
3728a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   viargs = malloc(nb_iargs * sizeof(vector unsigned int));
3729a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_iargs; i++) {
3730a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      unsigned int j = iargs[i];
3731a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      viargs[i] = (vector unsigned int){ j, j*2, j*3, j*4 };
3732a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
3733a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
3734a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   AB_DPRINTF("Registered %d viargs values\n", i);
3735a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   nb_viargs = i;
3736a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3737a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3738a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic inline void register_vfarg (vector float* vfarg,
3739a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                  int s, uint8_t exp, uint32_t mant)
3740a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3741a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   uint32_t tmp;
3742a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3743a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   tmp = ((uint64_t)s << 31) | ((uint64_t)exp << 23) | mant;
3744a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   float f = *(float*)&tmp;
3745a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   *vfarg = (vector float){ f,f,f,f };
3746a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   AB_DPRINTF("%d %02x %06x => %08x %0e\n",
3747a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj              s, exp, mant, *((uint32_t*)&tmp), f);
3748a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3749a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3750a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void build_vfargs_table (void)
3751a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3752a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   /* Sign goes from zero to one
3753a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    * Exponent goes from 0 to ((1 << 9) - 1)
3754a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    * Mantissa goes from 1 to ((1 << 24) - 1)
3755a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    * + special values:
3756a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    * +0.0      : 0 0x00 0x00000000
3757a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    * -0.0      : 1 0x00 0x00000000
3758a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    * +infinity : 0 0xFF 0x00000000
3759a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    * -infinity : 1 0xFF 0x00000000
3760a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    * +SNaN     : 0 0xFF 0x7FFFFFFF
3761a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    * -SNaN     : 1 0xFF 0x7FFFFFFF
3762a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    * +QNaN     : 0 0xFF 0x80000000
3763a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    * -QNaN     : 1 0xFF 0x80000000
3764a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    * (8 values)
3765a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    */
3766a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   uint32_t mant;
376705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   uint16_t exp;
3768a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int s;
3769a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i=0;
3770a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3771a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
377205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#if !defined (ALTIVEC_ARGS_LARGE)
377305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   nb_vfargs = 12;
3774a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   vfargs = memalign(16, nb_vfargs * sizeof(vector float));
3775a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
377605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   // 4 values:
377705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   for (s=0; s<2; s++) {
377805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      for (exp=0x5; ; exp += 0x9D ) {
377905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         if (exp > 0xDF)
378005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion            break;
378105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         for (mant = 0x3FFFFF; mant < 0x7FFFFF;
378205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion              mant = /* random */ ((mant + 0x1A6) << 31) + 0x159) {
378305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion            register_vfarg(&vfargs[i++], s, (uint8_t)exp, mant);
378405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         }
378505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      }
378605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   }
378705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#else
378805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   nb_vfargs = 50;
378905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   vfargs = memalign(16, nb_vfargs * sizeof(vector float));
379005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
379105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   for (s=0; s<2; s++) {
379205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      for (exp=0x0; ; exp += 0x3F ) {
379305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         //      for (exp=0; ; exp = ((exp + 1) << 1) + 3) {
379405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         if (exp >= 0xFE)
379505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion            exp = 0xFE;
379605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         for (mant = 0x0; mant < 0x7FFFFF;
379705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion              mant = /* random */ ((mant + 0x4A6) << 5) + 0x359) {
379805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion            register_vfarg(&vfargs[i++], s, (uint8_t)exp, mant);
379905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         }
380005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         if (exp >= 0xFE)
380105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion            break;
380205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      }
380305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   }
380405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion#endif
380505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
3806a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   /* Special values */
3807a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   /* +0.0      : 0 0x00 0x000000 */
3808a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   s = 0;
3809a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   exp = 0x00;
3810a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   mant = 0x000000;
3811a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   register_vfarg(&vfargs[i++], s, exp, mant);
3812a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   /* -0.0      : 1 0x00 0x000000 */
3813a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   s = 1;
3814a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   exp = 0x00;
3815a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   mant = 0x000000;
3816a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   register_vfarg(&vfargs[i++], s, exp, mant);
3817a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3818a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   /* +infinity : 0 0xFF 0x000000  */
3819a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   s = 0;
3820a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   exp = 0xFF;
3821a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   mant = 0x000000;
3822a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   register_vfarg(&vfargs[i++], s, exp, mant);
3823a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   /* -infinity : 1 0xFF 0x000000 */
3824a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   s = 1;
3825a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   exp = 0xFF;
3826a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   mant = 0x000000;
3827a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   register_vfarg(&vfargs[i++], s, exp, mant);
3828a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3829a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   /* NaN: exponent all 1s, non-zero fraction */
3830a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   /* SNaN is a NaN with the most significant fraction bit clear.*/
3831a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   /* +SNaN     : 0 0xFF 0x3FFFFF */
3832a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   s = 0;
3833a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   exp = 0xFF;
3834a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   mant = 0x3FFFFF;
3835a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   register_vfarg(&vfargs[i++], s, exp, mant);
3836a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   /* -SNaN     : 1 0xFF 0x3FFFFF */
3837a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   s = 1;
3838a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   exp = 0xFF;
3839a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   mant = 0x3FFFFF;
3840a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   register_vfarg(&vfargs[i++], s, exp, mant);
3841a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3842a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   /* QNaN is a NaN with the most significant fraction bit set */
3843a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   /* +QNaN     : 0 0xFF 0x400000 */
3844a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   s = 0;
3845a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   exp = 0xFF;
3846a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   mant = 0x400000;
3847a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   register_vfarg(&vfargs[i++], s, exp, mant);
3848a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   /* -QNaN     : 1 0xFF 0x400000 */
3849a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   s = 1;
3850a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   exp = 0xFF;
3851a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   mant = 0x400000;
3852a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   register_vfarg(&vfargs[i++], s, exp, mant);
3853a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   AB_DPRINTF("Registered %d vfargs values\n", i);
3854a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
385505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   assert(i <= nb_vfargs);
385605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   nb_vfargs = i;
3857a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3858a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
3859a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3860a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if 0
3861a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void dump_iargs (void)
3862a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3863a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i;
3864a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i = 0; i < nb_iargs; i++) {
3865a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("iarg %d: %08x %08x %08x\n", i, iargs[i],
3866a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj             (unsigned int)&iargs[i], (unsigned int)iargs);
3867a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
3868a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3869a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3870a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void dump_iargs16 (void)
3871a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3872a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i;
3873a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i = 0; i < nb_ii16; i++) {
3874a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("iarg16 %d: %08x %08x %08x\n", i, ii16[i],
3875a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj             (unsigned int)&ii16[i], (unsigned int)ii16);
3876a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
3877a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3878a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3879a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void dump_vfargs (void)
3880a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3881a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i=0;
3882a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_vfargs; i++) {
3883a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      vector float vf = (vector float)vfargs[i];
3884a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      float f = ((float*)&vf)[0];
3885a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("vfarg %3d: %24f : %08x\n", i, f, ((unsigned int*)&f)[0]);
3886a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
3887a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3888a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
3889a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3890530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_int_three_args (const char* name, test_func_t func,
3891a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                 unused uint32_t test_flags)
3892a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3893a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t res, flags, xer, tmpcr, tmpxer;
3894a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i, j, k;
3895a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3896a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_iargs; i++) {
3897a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; j<nb_iargs; j++) {
3898a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         for (k=0; k<nb_iargs; k++) {
3899a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            r14 = iargs[i];
3900a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            r15 = iargs[j];
3901a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            r16 = iargs[k];
3902a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            /* Save flags */
3903a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfcr 18");
3904a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            tmpcr = r18;
3905a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfxer 18");
3906a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            tmpxer = r18;
3907a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            /* Set up flags for test */
3908a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            r18 = 0;
3909a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mtcr 18");
3910a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mtxer 18");
3911a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            (*func)();
3912a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfcr 18");
3913a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            flags = r18;
3914a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfxer 18");
3915a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            xer = r18;
3916a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            res = r17;
3917a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            /* Restore flags */
3918a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            r18 = tmpcr;
3919a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mtcr 18");
3920a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            r18 = tmpxer;
3921a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mtxer 18");
3922a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("%s %08x, %08x, %08x => %08x (%08x %08x)\n",
3923a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                   name, iargs[i], iargs[j], iargs[k], res, flags, xer);
3924a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         }
3925a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (verbose) printf("\n");
3926a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
3927a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
3928a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3929a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3930530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_int_two_args (const char* name, test_func_t func,
3931a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                               uint32_t test_flags)
3932a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3933a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t res, flags, xer, xer_orig, tmpcr, tmpxer;
3934a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i, j;
3935a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3936a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   xer_orig = 0x00000000;
3937a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj redo:
3938a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_iargs; i++) {
3939a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; j<nb_iargs; j++) {
3940a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         r14 = iargs[i];
3941a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         r15 = iargs[j];
3942a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         /* Save flags */
3943a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfcr 18");
3944a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         tmpcr = r18;
3945a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfxer 18");
3946a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         tmpxer = r18;
3947a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         /* Set up flags for test */
3948a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         r18 = 0;
3949a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtcr 18");
3950a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         r18 = xer_orig;
3951a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtxer 18");
3952a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         (*func)();
3953a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfcr 18");
3954a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         flags = r18;
3955a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfxer 18");
3956a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         xer = r18;
3957a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         res = r17;
3958a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         /* Restore flags */
3959a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         r18 = tmpcr;
3960a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtcr 18");
3961a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         r18 = tmpxer;
3962a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtxer 18");
3963a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%s %08x, %08x => %08x (%08x %08x)\n",
3964a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                name, iargs[i], iargs[j], res, flags, xer);
3965a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
3966a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if (verbose) printf("\n");
3967a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
3968a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   if (test_flags & PPC_XER_CA && xer_orig == 0x00000000) {
3969a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      xer_orig = 0x20000000;
3970a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      goto redo;
3971a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
3972a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
3973a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3974530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_int_one_arg (const char* name, test_func_t func,
3975a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                               uint32_t test_flags)
3976a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
3977a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t res, flags, xer, xer_orig, tmpcr, tmpxer;
3978a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i;
3979a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
3980a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   xer_orig = 0x00000000;
3981a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj redo:
3982a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_iargs; i++) {
3983a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r14 = iargs[i];
3984a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Save flags */
3985a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfcr 18");
3986a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      tmpcr = r18;
3987a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfxer 18");
3988a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      tmpxer = r18;
3989a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Set up flags for test */
3990a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r18 = 0;
3991a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtcr 18");
3992a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r18 = xer_orig;
3993a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtxer 18");
3994a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      (*func)();
3995a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      res = r17;
3996a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfcr 18");
3997a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags = r18;
3998a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfxer 18");
3999a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      xer = r18;
4000a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Restore flags */
4001a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r18 = tmpcr;
4002a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtcr 18");
4003a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r18 = tmpxer;
4004a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtxer 18");
4005a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("%s %08x => %08x (%08x %08x)\n",
4006a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj             name, iargs[i], res, flags, xer);
4007a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
4008a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   if (test_flags & PPC_XER_CA && xer_orig == 0x00000000) {
4009a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      xer_orig = 0x20000000;
4010a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      goto redo;
4011a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
4012a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4013a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4014a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic inline void invalidate_icache ( void *ptr, int nbytes )
4015a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
4016a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   unsigned int startaddr = (unsigned int) ptr;
4017a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   unsigned int endaddr   = startaddr + nbytes;
4018a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   unsigned int cls       = 32; /*VG_(cache_line_size_ppc32);*/
4019a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   unsigned int addr;
4020a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4021a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   startaddr &= ~(cls - 1);
4022a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (addr = startaddr; addr < endaddr; addr += cls)
4023a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      asm volatile("dcbst 0,%0" : : "r" (addr));
4024a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   asm volatile("sync");
4025a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (addr = startaddr; addr < endaddr; addr += cls)
4026a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      asm volatile("icbi 0,%0" : : "r" (addr));
4027a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   asm volatile("sync; isync");
4028a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4029a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4030a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* for god knows what reason, if this isn't inlined, the
4031a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   program segfaults. */
4032a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic inline void _patch_op_imm (void *out, void *in,
4033a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                  uint16_t imm, int sh, int len)
4034a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
4035a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t *p, *q;
4036a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4037a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   p = out;
4038a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   q = in;
4039a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   *p = (*q & ~(((1 << len) - 1) << sh)) | ((imm & ((1 << len) - 1)) << sh);
4040a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4041a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4042a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic inline void patch_op_imm (void *out, void *in,
4043a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                 uint16_t imm, int sh, int len)
4044a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
4045a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t *p;
4046a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4047a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   p = out;
4048a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   _patch_op_imm(out, in, imm, sh, len);
4049a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   invalidate_icache(out, 4);
4050a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4051a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4052a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic inline void patch_op_imm16 (void *out, void *in, uint16_t imm)
4053a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
4054a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   patch_op_imm(out, in, imm, 0, 16);
4055a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4056a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4057530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_int_one_reg_imm16 (const char* name,
4058a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                    test_func_t func,
4059a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                    unused uint32_t test_flags)
4060a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
4061a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   uint32_t func_buf[2], *p;
4062a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t res, flags, xer, tmpcr, tmpxer;
4063a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i, j;
4064a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4065a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_iargs; i++) {
4066a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; j<nb_ii16; j++) {
4067a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         p = (void *)func;
4068a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if 0
4069a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("copy func %s from %p to %p (%08x %08x)\n",
4070a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                name, func, func_buf, p[0], p[1]);
4071a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
4072a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         func_buf[1] = p[1];
4073a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         patch_op_imm16(func_buf, p, ii16[j]);
4074a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         func = (void *)func_buf;
4075a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if 0
4076a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf(" =>  func %s from %p to %p (%08x %08x)\n",
4077a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                name, func, func_buf, func_buf[0], func_buf[1]);
4078a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
4079a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         r14 = iargs[i];
4080a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         /* Save flags */
4081a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfcr 18");
4082a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         tmpcr = r18;
4083a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfxer 18");
4084a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         tmpxer = r18;
4085a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         /* Set up flags for test */
4086a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         r18 = 0;
4087a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtcr 18");
4088a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtxer 18");
4089a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         (*func)();
4090a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfcr 18");
4091a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         flags = r18;
4092a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfxer 18");
4093a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         xer = r18;
4094a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         res = r17;
4095a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         /* Restore flags */
4096a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         r18 = tmpcr;
4097a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtcr 18");
4098a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         r18 = tmpxer;
4099a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtxer 18");
4100a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%s %08x, %08x => %08x (%08x %08x)\n",
4101a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                name, iargs[i], ii16[j], res, flags, xer);
4102a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
4103a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if (verbose) printf("\n");
4104a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
4105a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4106a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4107a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* Special test cases for:
4108a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * rlwimi
4109a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * rlwinm
4110a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * rlwnm
4111a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * srawi
4112a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mcrf
4113a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mcrfs
4114a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mcrxr_cb
4115a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mfcr_cb
4116a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mfspr_cb
4117a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mftb_cb
4118a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mtcrf_cb
4119a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mtspr_cb
4120a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj */
4121a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4122530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void rlwi_cb (const char* name, test_func_t func,
4123a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                     unused uint32_t test_flags)
4124a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
4125a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   uint32_t func_buf[2], *p;
4126a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t res, flags, xer, tmpcr, tmpxer;
4127a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i, j, k, l;
4128a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4129a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int arg_step = (arg_list_size == 0) ? 31 : 3;
4130a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4131a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_iargs; i++) {
4132a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; j<32; j+=arg_step) {
4133a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         for (k=0; k<32; k+=arg_step) {
4134a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            for (l=0; l<32; l+=arg_step) {
4135a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               p = (void *)func;
4136a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               func_buf[1] = p[1];
4137a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               _patch_op_imm(func_buf, p, j, 11, 5);
4138a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               _patch_op_imm(func_buf, p, k, 6, 5);
4139a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               patch_op_imm(func_buf, p, l, 1, 5);
4140a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               func = (void *)func_buf;
4141a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               r14 = iargs[i];
4142a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               /* Save flags */
4143a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               __asm__ __volatile__ ("mfcr 18");
4144a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               tmpcr = r18;
4145a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               __asm__ __volatile__ ("mfxer 18");
4146a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               tmpxer = r18;
4147a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               /* Set up flags for test */
4148a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               r18 = 0;
4149a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               __asm__ __volatile__ ("mtcr 18");
4150a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               __asm__ __volatile__ ("mtxer 18");
4151a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               (*func)();
4152a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               __asm__ __volatile__ ("mfcr 18");
4153a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               flags = r18;
4154a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               __asm__ __volatile__ ("mfxer 18");
4155a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               xer = r18;
4156a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               res = r17;
4157a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               /* Restore flags */
4158a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               r18 = tmpcr;
4159a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               __asm__ __volatile__ ("mtcr 18");
4160a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               r18 = tmpxer;
4161a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               __asm__ __volatile__ ("mtxer 18");
4162a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               printf("%s %08x, %d, %d, %d => %08x (%08x %08x)\n",
4163a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                      name, iargs[i], j, k, l, res, flags, xer);
4164a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            }
4165a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            if (verbose) printf("\n");
4166a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         }
4167a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
4168a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
4169a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4170a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4171530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void rlwnm_cb (const char* name, test_func_t func,
4172a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                      unused uint32_t test_flags)
4173a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
4174a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   uint32_t func_buf[2], *p;
4175a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t res, flags, xer, tmpcr, tmpxer;
4176a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i, j, k, l;
4177a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4178a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int arg_step = (arg_list_size == 0) ? 31 : 3;
4179a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4180a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_iargs; i++) {
4181a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; j<nb_iargs; j++) {
4182a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         for (k=0; k<32; k+=arg_step) {
4183a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            for (l=0; l<32; l+=arg_step) {
4184a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               p = (void *)func;
4185a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               func_buf[1] = p[1];
4186a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               _patch_op_imm(func_buf, p, k, 6, 5);
4187a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               patch_op_imm(func_buf, p, l, 1, 5);
4188a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               func = (void *)func_buf;
4189a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               r14 = iargs[i];
4190a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               r15 = iargs[j];
4191a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               /* Save flags */
4192a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               __asm__ __volatile__ ("mfcr 18");
4193a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               tmpcr = r18;
4194a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               __asm__ __volatile__ ("mfxer 18");
4195a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               tmpxer = r18;
4196a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               /* Set up flags for test */
4197a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               r18 = 0;
4198a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               __asm__ __volatile__ ("mtcr 18");
4199a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               __asm__ __volatile__ ("mtxer 18");
4200a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               (*func)();
4201a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               __asm__ __volatile__ ("mfcr 18");
4202a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               flags = r18;
4203a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               __asm__ __volatile__ ("mfxer 18");
4204a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               xer = r18;
4205a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               res = r17;
4206a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               /* Restore flags */
4207a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               r18 = tmpcr;
4208a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               __asm__ __volatile__ ("mtcr 18");
4209a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               r18 = tmpxer;
4210a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               __asm__ __volatile__ ("mtxer 18");
4211a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               printf("%s %08x, %08x, %d, %d => %08x (%08x %08x)\n",
4212a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                      name, iargs[i], iargs[j], k, l, res, flags, xer);
4213a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            }
4214a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            if (verbose) printf("\n");
4215a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         }
4216a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
4217a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
4218a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4219a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4220530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void srawi_cb (const char* name, test_func_t func,
4221a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                      unused uint32_t test_flags)
4222a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
4223a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   uint32_t func_buf[2], *p;
4224a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t res, flags, xer, tmpcr, tmpxer;
4225a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i, j;
4226a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4227a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int arg_step = (arg_list_size == 0) ? 31 : 1;
4228a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4229a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_iargs; i++) {
4230a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; j<32; j+=arg_step) {
4231a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         p = (void *)func;
4232a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         func_buf[1] = p[1];
4233a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         patch_op_imm(func_buf, p, j, 11, 5);
4234a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         func = (void *)func_buf;
4235a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         r14 = iargs[i];
4236a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         /* Save flags */
4237a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfcr 18");
4238a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         tmpcr = r18;
4239a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfxer 18");
4240a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         tmpxer = r18;
4241a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         /* Set up flags for test */
4242a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         r18 = 0;
4243a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtcr 18");
4244a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtxer 18");
4245a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         (*func)();
4246a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfcr 18");
4247a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         flags = r18;
4248a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfxer 18");
4249a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         xer = r18;
4250a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         res = r17;
4251a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         /* Restore flags */
4252a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         r18 = tmpcr;
4253a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtcr 18");
4254a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         r18 = tmpxer;
4255a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtxer 18");
4256a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%s %08x, %d => %08x (%08x %08x)\n",
4257a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                name, iargs[i], j, res, flags, xer);
4258a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
4259a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if (verbose) printf("\n");
4260a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
4261a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4262a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4263530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void mcrf_cb (const char* name, test_func_t func,
4264a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                      unused uint32_t test_flags)
4265a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
4266a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   uint32_t func_buf[2], *p;
4267a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t flags, xer, tmpcr, tmpxer;
4268a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i, j, k;
4269a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4270a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int arg_step = (arg_list_size == 0) ? 7 : 1;
4271a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4272a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_iargs; i++) {
4273a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; j<8; j+=arg_step) {
4274a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         for (k=0; k<8; k+=arg_step) {
4275a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            p = (void *)func;
4276a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            func_buf[1] = p[1];
4277a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            _patch_op_imm(func_buf, p, j, 23, 3);
4278a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            patch_op_imm(func_buf, p, k, 18, 3);
4279a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            func = (void *)func_buf;
4280a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            r14 = iargs[i];
4281a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            /* Save flags */
4282a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfcr 18");
4283a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            tmpcr = r18;
4284a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfxer 18");
4285a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            tmpxer = r18;
4286a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            /* Set up flags for test */
4287a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            r18 = 0;
4288a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mtcr 14");
4289a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mtxer 18");
4290a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            (*func)();
4291a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfcr 18");
4292a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            flags = r18;
4293a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfxer 18");
4294a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            xer = r18;
4295a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            /* Restore flags */
4296a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            r18 = tmpcr;
4297a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mtcr 18");
4298a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            r18 = tmpxer;
4299a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mtxer 18");
4300a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("%s %d, %d (%08x) => (%08x %08x)\n",
4301a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                   name, j, k, iargs[i], flags, xer);
4302a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         }
4303a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (verbose) printf("\n");
4304a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
4305a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
4306a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4307a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4308a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if 0
4309530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void mcrfs_cb (const char* name, test_func_t func,
4310a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                      unused uint32_t test_flags)
4311a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{}
4312a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
4313a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4314a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4315530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void mcrxr_cb (const char* name, test_func_t func,
4316a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                      unused uint32_t test_flags)
4317a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
4318a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   uint32_t func_buf[2], *p;
4319a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t flags, xer, tmpcr, tmpxer;
4320a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i, j, k;
4321a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4322a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int arg_step = 1; //(arg_list_size == 0) ? 7 : 1;
4323a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4324a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<16; i+=arg_step) {
4325a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      j = i << 28;
4326a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (k=0; k<8; k+=arg_step) {
4327a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         p = (void *)func;
4328a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         func_buf[1] = p[1];
4329a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         patch_op_imm(func_buf, p, k, 23, 3);
4330a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         func = (void *)func_buf;
4331a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         r14 = j;
4332a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         /* Save flags */
4333a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfcr 18");
4334a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         tmpcr = r18;
4335a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfxer 18");
4336a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         tmpxer = r18;
4337a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         /* Set up flags for test */
4338a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         r18 = 0;
4339a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtcr 18");
4340a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtxer 14");
4341a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         (*func)();
4342a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfcr 18");
4343a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         flags = r18;
4344a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfxer 18");
4345a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         xer = r18;
4346a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         /* Restore flags */
4347a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         r18 = tmpcr;
4348a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtcr 18");
4349a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         r18 = tmpxer;
4350a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtxer 18");
4351a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%s %d (%08x) => (%08x %08x)\n",
4352a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                name, k, j, flags, xer);
4353a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
4354a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if (verbose) printf("\n");
4355a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
4356a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4357a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4358530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void mfcr_cb (const char* name, test_func_t func,
4359a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                     unused uint32_t test_flags)
4360a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
4361a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t res, flags, xer, tmpcr, tmpxer;
4362a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i;
4363a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4364a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_iargs; i++) {
4365a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r14 = iargs[i];
4366a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Save flags */
4367a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfcr 18");
4368a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      tmpcr = r18;
4369a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfxer 18");
4370a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      tmpxer = r18;
4371a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Set up flags for test */
4372a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r18 = 0;
4373a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtcr 14");
4374a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtxer 18");
4375a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      (*func)();
4376a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfcr 18");
4377a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags = r18;
4378a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfxer 18");
4379a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      xer = r18;
4380a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      res = r17;
4381a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Restore flags */
4382a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r18 = tmpcr;
4383a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtcr 18");
4384a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r18 = tmpxer;
4385a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtxer 18");
4386a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("%s (%08x) => %08x (%08x %08x)\n",
4387a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj             name, iargs[i], res, flags, xer);
4388a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
4389a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4390a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4391a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj// NOTE: Not using func: calling function kills lr
4392530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void mfspr_cb (const char* name, test_func_t func,
4393a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                      unused uint32_t test_flags)
4394a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
4395a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t res, flags, xer, ctr, lr, tmpcr, tmpxer;
4396a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int j, k;
4397a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4398a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // Call func, just to stop compiler complaining
4399a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   (*func)();
4400a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4401a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // mfxer
4402a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   j = 1;
4403a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (k=0; k<nb_iargs; k++) {
4404a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r14 = iargs[k];
4405a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Save flags */
4406a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfcr 18");
4407a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      tmpcr = r18;
4408a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfxer 18");
4409a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      tmpxer = r18;
4410a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4411a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Set up flags for test */
4412a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r18 = 0;
4413a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      // Only valid bits of xer: 0xE000007F
4414a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("lis  15,0xE000");
4415a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("addi 15,15,0x007F");
4416a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("and  16,15,14");
4417a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4418a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtcr  18");
4419a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtxer 16");
4420a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtlr  18");
4421a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtctr 18");
4422a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4423a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfspr 17, 1");   // func()
4424a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4425a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfxer 18");
4426a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      xer = r18;
4427a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfcr  18");
4428a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags = r18;
4429a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mflr  18");
4430a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      lr = r18;
4431a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfctr 18");
4432a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      ctr = r18;
4433a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      res = r17;
4434a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4435a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Restore flags */
4436a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r18 = tmpcr;
4437a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtcr 18");
4438a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r18 = tmpxer;
4439a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtxer 18");
4440a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4441a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("%s %d (%08x) => %08x (%08x %08x, %08x, %08x)\n",
4442a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj             name, j, iargs[k], res, flags, xer, lr, ctr);
4443a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
4444a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   if (verbose) printf("\n");
4445a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4446a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // mflr
4447a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   j = 8;
4448a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (k=0; k<nb_iargs; k++) {
4449a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r14 = iargs[k];
4450a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4451a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Save flags */
4452a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfcr 18");
4453a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      tmpcr = r18;
4454a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfxer 18");
4455a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      tmpxer = r18;
4456a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4457a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Set up flags for test */
4458a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r18 = 0;
4459a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtcr  18");
4460a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtlr  14");
4461a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtctr 18");
4462a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtxer 18");
4463a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4464a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfspr 17, 8");   // func()
4465a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4466a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfxer 18");
4467a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      xer = r18;
4468a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfcr  18");
4469a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags = r18;
4470a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mflr  18");
4471a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      lr = r18;
4472a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfctr 18");
4473a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      ctr = r18;
4474a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      res = r17;
4475a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4476a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Restore flags */
4477a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r18 = tmpcr;
4478a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtcr 18");
4479a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r18 = tmpxer;
4480a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtxer 18");
4481a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4482a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("%s %d (%08x) => %08x (%08x %08x, %08x, %08x)\n",
4483a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj             name, j, iargs[k], res, flags, xer, lr, ctr);
4484a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
4485a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   if (verbose) printf("\n");
4486a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4487a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // mfctr
4488a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   j = 9;
4489a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (k=0; k<nb_iargs; k++) {
4490a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r14 = iargs[k];
4491a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4492a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Save flags */
4493a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfcr 18");
4494a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      tmpcr = r18;
4495a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfxer 18");
4496a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      tmpxer = r18;
4497a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4498a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Set up flags for test */
4499a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r18 = 0;
4500a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtcr  18");
4501a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtctr 14");
4502a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtxer 18");
4503a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtlr  18");
4504a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4505a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfspr 17, 9");   // func()
4506a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4507a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfcr  18");
4508a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags = r18;
4509a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfxer 18");
4510a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      xer = r18;
4511a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mflr  18");
4512a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      lr = r18;
4513a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfctr 18");
4514a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      ctr = r18;
4515a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      res = r17;
4516a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4517a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Restore flags */
4518a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r18 = tmpcr;
4519a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtcr 18");
4520a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r18 = tmpxer;
4521a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtxer 18");
4522a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4523a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("%s %d (%08x) => %08x (%08x %08x, %08x, %08x)\n",
4524a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj             name, 9, iargs[k], res, flags, xer, lr, ctr);
4525a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
4526a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4527a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4528a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if 0
4529530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void mftb_cb (const char* name, test_func_t func,
4530a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                     unused uint32_t test_flags)
4531a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
4532a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj// How to test this?
4533a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj// 1) TBU won't change for a while
4534a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj// 2) TBL will have changed every loop iter
4535a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4536a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t res, flags, xer, tmpcr, tmpxer;
4537a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i, j;
4538a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4539a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   i = 269;
4540a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (j=0; j<16; j++) {
4541a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Save flags */
4542a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfcr 18");
4543a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      tmpcr = r18;
4544a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfxer 18");
4545a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      tmpxer = r18;
4546a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Set up flags for test */
4547a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r18 = 0;
4548a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtcr 18");
4549a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtxer 18");
4550a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4551a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mftb 17, 269");  // func
4552a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4553a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfcr 18");
4554a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags = r18;
4555a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfxer 18");
4556a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      xer = r18;
4557a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      res = r17;
4558a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Restore flags */
4559a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r18 = tmpcr;
4560a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtcr 18");
4561a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r18 = tmpxer;
4562a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtxer 18");
4563a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("%s %d => %08x (%08x %08x)\n",
4564a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj             name, i, res, flags, xer);
4565a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
4566a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   if (verbose) printf("\n");
4567a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4568a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   i = 268;
4569a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (j=0; j<16; j++) {
4570a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Save flags */
4571a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfcr 18");
4572a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      tmpcr = r18;
4573a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfxer 18");
4574a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      tmpxer = r18;
4575a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Set up flags for test */
4576a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r18 = 0;
4577a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtcr 18");
4578a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtxer 18");
4579a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4580a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mftb 17, 268");  // func
4581a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4582a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfcr 18");
4583a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags = r18;
4584a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfxer 18");
4585a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      xer = r18;
4586a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      res = r17;
4587a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Restore flags */
4588a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r18 = tmpcr;
4589a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtcr 18");
4590a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r18 = tmpxer;
4591a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtxer 18");
4592a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("%s %d => %08x (%08x %08x)\n",
4593a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj             name, i, res, flags, xer);
4594a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
4595a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4596a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
4597a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4598530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void mtcrf_cb (const char* name, test_func_t func,
4599a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                      unused uint32_t test_flags)
4600a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
4601a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   uint32_t func_buf[2], *p;
4602a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t flags, xer, tmpcr, tmpxer;
4603a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i, j;
4604a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4605a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int arg_step = (arg_list_size == 0) ? 99 : 1;
4606a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4607a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_iargs; i++) {
4608a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; j<256; j+=arg_step) {
4609a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         p = (void *)func;
4610a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         func_buf[1] = p[1];
4611a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         patch_op_imm(func_buf, p, j, 12, 8);
4612a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         func = (void *)func_buf;
4613a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         r14 = iargs[i];
4614a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         /* Save flags */
4615a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfcr 18");
4616a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         tmpcr = r18;
4617a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfxer 18");
4618a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         tmpxer = r18;
4619a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         /* Set up flags for test */
4620a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         r18 = 0;
4621a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtcr 18");
4622a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtxer 18");
4623a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         (*func)();
4624a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfcr 18");
4625a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         flags = r18;
4626a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfxer 18");
4627a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         xer = r18;
4628a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         /* Restore flags */
4629a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         r18 = tmpcr;
4630a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtcr 18");
4631a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         r18 = tmpxer;
4632a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtxer 18");
4633a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%s %d, %08x => (%08x %08x)\n",
4634a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                name, j, iargs[i], flags, xer);
4635a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
4636a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if (verbose) printf("\n");
4637a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
4638a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4639a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4640a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj// NOTE: Not using func: calling function kills lr
4641530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void mtspr_cb (const char* name, test_func_t func,
4642a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                      unused uint32_t test_flags)
4643a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
4644a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t flags, xer, ctr, lr, tmpcr, tmpxer;
4645a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int j, k;
4646a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4647a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // Call func, just to stop compiler complaining
4648a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   (*func)();
4649a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4650a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // mtxer
4651a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   j = 1;
4652a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (k=0; k<nb_iargs; k++) {
4653a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r14 = iargs[k];
4654a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4655a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Save flags */
4656a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfcr 18");
4657a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      tmpcr = r18;
4658a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfxer 18");
4659a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      tmpxer = r18;
4660a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4661a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Set up flags for test */
4662a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r18 = 0;
4663a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4664a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      // Only valid bits of xer: 0xE000007F
4665a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      // VEX masks these (maybe it shouldn't?), so let's do it first:
4666a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("lis  15,0xE000");
4667a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("addi 15,15,0x007F");
4668a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("and  16,15,14");
4669a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4670a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtcr  18");
4671a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtxer 18");
4672a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtlr  18");
4673a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtctr 18");
4674a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4675a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtxer 16");   // func()
4676a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4677a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfxer 18");
4678a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      xer = r18;
4679a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfcr  18");
4680a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags = r18;
4681a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mflr  18");
4682a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      lr = r18;
4683a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfctr 18");
4684a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      ctr = r18;
4685a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4686a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Restore flags */
4687a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r18 = tmpcr;
4688a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtcr 18");
4689a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r18 = tmpxer;
4690a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtxer 18");
4691a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4692a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("%s %d, %08x => (%08x %08x, %08x, %08x)\n",
4693a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj             name, j, iargs[k], flags, xer, lr, ctr);
4694a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
4695a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   if (verbose) printf("\n");
4696a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4697a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // mtlr
4698a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   j = 8;
4699a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (k=0; k<nb_iargs; k++) {
4700a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r14 = iargs[k];
4701a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4702a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Save flags */
4703a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfcr 18");
4704a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      tmpcr = r18;
4705a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfxer 18");
4706a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      tmpxer = r18;
4707a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4708a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Set up flags for test */
4709a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r18 = 0x0;
4710a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtcr  18");
4711a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtlr  18");
4712a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtctr 18");
4713a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtxer 18");
4714a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4715a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtlr  14");   // func()
4716a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4717a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfxer 18");
4718a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      xer = r18;
4719a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfcr  18");
4720a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags = r18;
4721a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mflr  18");
4722a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      lr = r18;
4723a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfctr 17");  // CAB: if 18, bashes lr - bad gcc opt?
4724a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      ctr = r17;
4725a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4726a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Restore flags */
4727a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r18 = tmpcr;
4728a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtcr 18");
4729a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r18 = tmpxer;
4730a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtxer 18");
4731a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4732a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("%s %d, %08x => (%08x %08x, %08x, %08x)\n",
4733a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj             name, j, iargs[k], flags, xer, lr, ctr);
4734a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
4735a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   if (verbose) printf("\n");
4736a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4737a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // mtctr
4738a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   j = 9;
4739a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (k=0; k<nb_iargs; k++) {
4740a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r14 = iargs[k];
4741a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4742a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Save flags */
4743a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfcr 18");
4744a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      tmpcr = r18;
4745a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfxer 18");
4746a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      tmpxer = r18;
4747a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4748a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Set up flags for test */
4749a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r18 = 0;
4750a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtcr  18");
4751a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtctr 18");
4752a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtxer 18");
4753a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtlr  18");
4754a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4755a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtctr 14");   // func()
4756a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4757a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfxer 18");
4758a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      xer = r18;
4759a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfcr  18");
4760a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags = r18;
4761a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mflr  18");
4762a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      lr = r18;
4763a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfctr 17");
4764a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      ctr = r17;
4765a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4766a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Restore flags */
4767a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r18 = tmpcr;
4768a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtcr 18");
4769a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r18 = tmpxer;
4770a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtxer 18");
4771a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4772a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("%s %d, %08x => (%08x %08x, %08x, %08x)\n",
4773a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj             name, j, iargs[k], flags, xer, lr, ctr);
4774a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
4775a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4776a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4777a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4778a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4779a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjtypedef struct special_t special_t;
4780a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4781a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstruct special_t {
4782530f73578552bc876a51fbf90cb6be29769bb362sewardj   const char *name;
4783530f73578552bc876a51fbf90cb6be29769bb362sewardj   void (*test_cb)(const char* name, test_func_t func,
4784a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                   unused uint32_t test_flags);
4785a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
4786a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4787a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void test_special (special_t *table,
4788530f73578552bc876a51fbf90cb6be29769bb362sewardj                          const char* name, test_func_t func,
4789a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                          unused uint32_t test_flags)
4790a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
4791530f73578552bc876a51fbf90cb6be29769bb362sewardj   const char *tmp;
4792a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i;
4793a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4794a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (tmp = name; isspace(*tmp); tmp++)
4795a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      continue;
4796a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; table[i].name != NULL; i++) {
4797a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if 0
4798a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      fprintf(stderr, "look for handler for '%s' (%s)\n", name,
4799a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj              table[i].name);
4800a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
4801a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if (strcmp(table[i].name, tmp) == 0) {
4802a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         (*table[i].test_cb)(name, func, test_flags);
4803a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         return;
4804a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
4805a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
4806a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   fprintf(stderr, "ERROR: no test found for op '%s'\n", name);
4807a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4808a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4809a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic special_t special_int_ops[] = {
4810a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
4811a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "rlwimi", /* One register + 3 5 bits immediate arguments */
4812a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &rlwi_cb,
4813a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
4814a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
4815a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "rlwimi.", /* One register + 3 5 bits immediate arguments */
4816a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &rlwi_cb,
4817a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
4818a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
4819a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "rlwinm", /* One register + 3 5 bits immediate arguments */
4820a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &rlwi_cb,
4821a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
4822a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
4823a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "rlwinm.", /* One register + 3 5 bits immediate arguments */
4824a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &rlwi_cb,
4825a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
4826a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
4827a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "rlwnm",  /* Two registers + 2 5 bits immediate arguments */
4828a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &rlwnm_cb,
4829a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
4830a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
4831a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "rlwnm.",  /* Two registers + 2 5 bits immediate arguments */
4832a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &rlwnm_cb,
4833a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
4834a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
4835a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "srawi",  /* One register + 1 5 bits immediate arguments */
4836a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &srawi_cb,
4837a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
4838a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
4839a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "srawi.",  /* One register + 1 5 bits immediate arguments */
4840a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &srawi_cb,
4841a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
4842a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
4843a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mcrf",  /* 2 3 bits immediate arguments */
4844a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mcrf_cb,
4845a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
4846a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if 0
4847a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
4848a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mcrfs",  /* 2 3 bits immediate arguments */
4849a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mcrfs_cb,
4850a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
4851a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
4852a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
4853a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mcrxr",  /* 1 3 bits immediate argument */
4854a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mcrxr_cb,
4855a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
4856a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
4857a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mfcr",  /* No arguments */
4858a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mfcr_cb,
4859a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
4860a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
4861a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mfspr",  /* 1 10 bits immediate argument */
4862a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mfspr_cb,
4863a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
4864a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if 0
4865a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {   // Move from time base
4866a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mftb",  /* 1 10 bits immediate arguments */
4867a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mftb_cb,
4868a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
4869a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
4870a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
4871a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mtcrf",  /* One register + 1 8 bits immediate arguments */
4872a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mtcrf_cb,
4873a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
4874a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
4875a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mtspr",  /* One register + 1 10 bits immediate arguments */
4876a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mtspr_cb,
4877a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
4878a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
4879a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      NULL,
4880a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      NULL,
4881a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
4882a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
4883a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4884530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_int_special (const char* name, test_func_t func,
4885a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                              uint32_t test_flags)
4886a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
4887a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   test_special(special_int_ops, name, func, test_flags);
4888a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4889a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4890a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4891530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_int_ld_one_reg_imm16 (const char* name,
4892a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                       test_func_t func,
4893a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                       unused uint32_t test_flags)
4894a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
4895a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   uint32_t func_buf[2], *p;
4896a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t res, rA, flags, xer, tmpcr, tmpxer;
4897a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i, j;
4898a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4899a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // +ve d
4900a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_iargs; i++) {
4901a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      j = i * 4;          // sizeof(uint32_t)
4902a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      p = (void *)func;
4903a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      func_buf[1] = p[1];
4904a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      patch_op_imm16(func_buf, p, j);
4905a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      func = (void *)func_buf;
4906a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r14 = (uint32_t)&iargs[0];
4907a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4908a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Save flags */
4909a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfcr 18");
4910a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      tmpcr = r18;
4911a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfxer 18");
4912a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      tmpxer = r18;
4913a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4914a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Set up flags for test */
4915a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r18 = 0;
4916a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtcr 18");
4917a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtxer 18");
4918a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      (*func)();
4919a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfcr 18");
4920a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags = r18;
4921a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfxer 18");
4922a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      xer = r18;
4923a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      res = r17;
4924a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      rA = r14;
4925a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4926a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Restore flags */
4927a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r18 = tmpcr;
4928a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtcr 18");
4929a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r18 = tmpxer;
4930a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtxer 18");
4931a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4932a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("%s %d, (%08x) => %08x, (%08x %08x)\n",
4933a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj             name, j, /*&iargs[0], */ iargs[i], res, /*rA, */ flags, xer);
4934a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
4935a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   if (verbose) printf("\n");
4936a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4937a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // -ve d
4938a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i = -nb_iargs+1; i<=0; i++) {
4939a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      j = i * 4;          // sizeof(uint32_t)
4940a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      p = (void *)func;
4941a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      func_buf[1] = p[1];
4942a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      patch_op_imm16(func_buf, p, j);
4943a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      func = (void *)func_buf;
4944a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r14 = (uint32_t)&iargs[nb_iargs-1];
4945a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4946a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Save flags */
4947a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfcr 18");
4948a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      tmpcr = r18;
4949a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfxer 18");
4950a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      tmpxer = r18;
4951a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4952a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Set up flags for test */
4953a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r18 = 0;
4954a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtcr 18");
4955a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtxer 18");
4956a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      (*func)();
4957a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfcr 18");
4958a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags = r18;
4959a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfxer 18");
4960a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      xer = r18;
4961a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      res = r17;
4962a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      rA = r14;
4963a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4964a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Restore flags */
4965a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r18 = tmpcr;
4966a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtcr 18");
4967a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r18 = tmpxer;
4968a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtxer 18");
4969a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4970a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("%s %d, (%08x) => %08x (%08x %08x)\n",
4971a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj             name, j, /*&iargs[nb_iargs-1], */ iargs[nb_iargs-1+i], res, /*rA, */ flags, xer);
4972a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
4973a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
4974a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4975530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_int_ld_two_regs (const char* name,
4976a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                  test_func_t func,
4977a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                  unused uint32_t test_flags)
4978a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
4979a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t res, rA, flags, xer, tmpcr, tmpxer;
4980a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i, j;
4981a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4982a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // +ve d
4983a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_iargs; i++) {
4984a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      j = i * 4;          // sizeof(uint32_t)
4985a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r14 = (uint32_t)&iargs[0];
4986a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r15 = j;
4987a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4988a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Save flags */
4989a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfcr 18");
4990a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      tmpcr = r18;
4991a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfxer 18");
4992a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      tmpxer = r18;
4993a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
4994a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Set up flags for test */
4995a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r18 = 0;
4996a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtcr 18");
4997a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtxer 18");
4998a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      (*func)();
4999a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfcr 18");
5000a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags = r18;
5001a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfxer 18");
5002a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      xer = r18;
5003a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      res = r17;
5004a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      rA = r14;
5005a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5006a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Restore flags */
5007a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r18 = tmpcr;
5008a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtcr 18");
5009a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r18 = tmpxer;
5010a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtxer 18");
5011a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5012a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("%s %d (%08x) => %08x (%08x %08x)\n",
5013a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj             name, /*&iargs[0], */ j, iargs[i], res, /*rA, */ flags, xer);
5014a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
5015a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
5016a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5017530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_int_st_two_regs_imm16 (const char* name,
5018a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                        test_func_t func,
5019a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                        unused uint32_t test_flags)
5020a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
5021a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   uint32_t func_buf[2], *p;
5022a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t rA, flags, xer, tmpcr, tmpxer;
5023a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i, j;
5024a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   uint32_t *iargs_priv;
5025a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5026a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // private iargs table to store to
5027a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   iargs_priv = malloc(nb_iargs * sizeof(uint32_t));
5028a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_iargs; i++)
5029a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      iargs_priv[i] = 0;
5030a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5031a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   //     __asm__ __volatile__ ("stwu         14,0(15)");
5032a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5033a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // +ve d
5034a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_iargs; i++) {
5035a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      j = i * 4;          // sizeof(uint32_t)
5036a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      p = (void *)func;
5037a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      func_buf[1] = p[1];
5038a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      patch_op_imm16(func_buf, p, j);
5039a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      func = (void *)func_buf;
5040a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r14 = iargs[i];                      // read from iargs
5041a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r15 = (uint32_t)&iargs_priv[0];      // store to r15 + j
5042a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5043a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Save flags */
5044a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfcr 18");
5045a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      tmpcr = r18;
5046a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfxer 18");
5047a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      tmpxer = r18;
5048a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5049a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Set up flags for test */
5050a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r18 = 0;
5051a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtcr 18");
5052a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtxer 18");
5053a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      (*func)();
5054a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfcr 18");
5055a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags = r18;
5056a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfxer 18");
5057a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      xer = r18;
5058a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      rA = r15;
5059a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5060a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Restore flags */
5061a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r18 = tmpcr;
5062a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtcr 18");
5063a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r18 = tmpxer;
5064a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtxer 18");
5065a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5066a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("%s %08x, %d => %08x, (%08x %08x)\n",
5067a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj             name, iargs[i], j, /*&iargs_priv[0], */ iargs_priv[i], /*rA, */ flags, xer);
5068a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
5069a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   if (verbose) printf("\n");
5070a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5071a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // -ve d
5072a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i = -nb_iargs+1; i<=0; i++) {
5073a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      j = i * 4;          // sizeof(uint32_t)
5074a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      p = (void *)func;
5075a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      func_buf[1] = p[1];
5076a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      patch_op_imm16(func_buf, p, j);
5077a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      func = (void *)func_buf;
5078a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r14 = iargs[nb_iargs-1+i];                // read from iargs
5079a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r15 = (uint32_t)&iargs_priv[nb_iargs-1];  // store to r15 + j
5080a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5081a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Save flags */
5082a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfcr 18");
5083a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      tmpcr = r18;
5084a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfxer 18");
5085a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      tmpxer = r18;
5086a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5087a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Set up flags for test */
5088a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r18 = 0;
5089a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtcr 18");
5090a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtxer 18");
5091a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      (*func)();
5092a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfcr 18");
5093a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags = r18;
5094a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfxer 18");
5095a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      xer = r18;
5096a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      rA = r15;
5097a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5098a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Restore flags */
5099a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r18 = tmpcr;
5100a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtcr 18");
5101a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r18 = tmpxer;
5102a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtxer 18");
5103a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5104a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("%s %08x, %d => %08x, (%08x %08x)\n",
5105a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj             name, iargs[nb_iargs-1+i], j, /*&iargs_priv[nb_iargs-1], */ iargs_priv[nb_iargs-1+i], /*rA, */ flags, xer);
5106a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
5107a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   free(iargs_priv);
5108a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
5109a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5110530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_int_st_three_regs (const char* name,
5111a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                    test_func_t func,
5112a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                    unused uint32_t test_flags)
5113a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
5114a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t rA, flags, xer, tmpcr, tmpxer;
5115a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i, j;
5116a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   uint32_t *iargs_priv;
5117a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5118a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // private iargs table to store to
5119a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   iargs_priv = malloc(nb_iargs * sizeof(uint32_t));
5120a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_iargs; i++)
5121a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      iargs_priv[i] = 0;
5122a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5123a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_iargs; i++) {
5124a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      j = i * 4;          // sizeof(uint32_t)
5125a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r14 = iargs[i];                      // read from iargs
5126a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r15 = (uint32_t)&iargs_priv[0];      // store to r15 + j
5127a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r16 = j;
5128a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5129a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Save flags */
5130a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfcr 18");
5131a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      tmpcr = r18;
5132a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfxer 18");
5133a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      tmpxer = r18;
5134a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5135a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Set up flags for test */
5136a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r18 = 0;
5137a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtcr 18");
5138a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtxer 18");
5139a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      (*func)();
5140a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfcr 18");
5141a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags = r18;
5142a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfxer 18");
5143a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      xer = r18;
5144a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      rA = r15;
5145a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5146a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Restore flags */
5147a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r18 = tmpcr;
5148a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtcr 18");
5149a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r18 = tmpxer;
5150a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtxer 18");
5151a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5152a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("%s %08x, %d => %08x, (%08x %08x)\n",
5153a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj             name, iargs[i], /*&iargs_priv[0], */ j, iargs_priv[i], /*rA, */ flags, xer);
5154a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
5155a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   free(iargs_priv);
5156a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
5157a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5158a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5159a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* Used in do_tests, indexed by flags->nb_args
5160a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   Elements correspond to enum test_flags::num args
5161a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj*/
5162a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_loop_t int_loops[] = {
5163a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_int_one_arg,
5164a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_int_two_args,
5165a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_int_three_args,
5166a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_int_two_args,
5167a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_int_one_reg_imm16,
5168a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_int_one_reg_imm16,
5169a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_int_special,
5170a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_int_ld_one_reg_imm16,
5171a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_int_ld_two_regs,
5172a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_int_st_two_regs_imm16,
5173a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_int_st_three_regs,
5174a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
5175a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5176a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
5177530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_float_three_args (const char* name, test_func_t func,
5178a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                   unused uint32_t test_flags)
5179a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
5180a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   double res;
5181a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   uint64_t u0, u1, u2, ur;
5182a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t flags, tmpcr, tmpxer;
5183a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i, j, k;
5184a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5185a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_fargs; i+=3) {
5186a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; j<nb_fargs; j+=5) {
5187a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         for (k=0; k<nb_fargs; k+=7) {
5188a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            u0 = *(uint64_t *)(&fargs[i]);
5189a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            u1 = *(uint64_t *)(&fargs[j]);
5190a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            u2 = *(uint64_t *)(&fargs[k]);
5191a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            f14 = fargs[i];
5192a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            f15 = fargs[j];
5193a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            f16 = fargs[k];
5194a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            /* Save flags */
5195a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfcr 18");
5196a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            tmpcr = r18;
5197a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfxer 18");
5198a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            tmpxer = r18;
5199a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            /* Set up flags for test */
5200a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            r18 = 0;
5201a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mtcr 18");
5202a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mtxer 18");
5203a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            f18 = +0.0;
5204a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mtfsf 0xFF, 18");
5205a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            (*func)();
5206a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfcr 18");
5207a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            flags = r18;
5208a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            res = f17;
5209a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            ur = *(uint64_t *)(&res);
5210a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            /* Restore flags */
5211a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            r18 = tmpcr;
5212a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mtcr 18");
5213a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            r18 = tmpxer;
5214a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mtxer 18");
5215a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("%s %016llx, %016llx, %016llx => %016llx (%08x)\n",
5216a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                   name, u0, u1, u2, ur, flags);
5217a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         }
5218a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (verbose) printf("\n");
5219a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
5220a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
5221a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
5222a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5223530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_float_two_args (const char* name, test_func_t func,
5224a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                 unused uint32_t test_flags)
5225a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
5226a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   double res;
5227a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   uint64_t u0, u1, ur;
5228a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t flags, tmpcr, tmpxer;
5229a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i, j;
5230a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5231a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_fargs; i+=3) {
5232a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; j<nb_fargs; j+=5) {
5233a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         u0 = *(uint64_t *)(&fargs[i]);
5234a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         u1 = *(uint64_t *)(&fargs[j]);
5235a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         f14 = fargs[i];
5236a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         f15 = fargs[j];
5237a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         /* Save flags */
5238a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfcr 18");
5239a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         tmpcr = r18;
5240a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfxer 18");
5241a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         tmpxer = r18;
5242a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         /* Set up flags for test */
5243a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         r18 = 0;
5244a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtcr 18");
5245a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtxer 18");
5246a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         f18 = +0.0;
5247a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtfsf 0xFF, 18");
5248a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         (*func)();
5249a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfcr 18");
5250a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         flags = r18;
5251a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         res = f17;
5252a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         ur = *(uint64_t *)(&res);
5253a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         /* Restore flags */
5254a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         r18 = tmpcr;
5255a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtcr 18");
5256a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         r18 = tmpxer;
5257a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtxer 18");
5258a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%s %016llx, %016llx => %016llx (%08x)\n",
5259a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                name, u0, u1, ur, flags);
5260a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
5261a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if (verbose) printf("\n");
5262a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
5263a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
5264a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5265530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_float_one_arg (const char* name, test_func_t func,
5266a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                unused uint32_t test_flags)
5267a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
5268a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   double res;
5269a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   uint64_t u0, ur;
5270a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t flags, tmpcr, tmpxer;
5271a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i;
5272a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5273a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_fargs; i++) {
5274a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      u0 = *(uint64_t *)(&fargs[i]);
5275a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      f14 = fargs[i];
5276a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Save flags */
5277a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfcr 18");
5278a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      tmpcr = r18;
5279a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfxer 18");
5280a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      tmpxer = r18;
5281a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Set up flags for test */
5282a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r18 = 0;
5283a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtcr 18");
5284a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtxer 18");
5285a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      f18 = +0.0;
5286a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtfsf 0xFF, 18");
5287a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      (*func)();
5288a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfcr 18");
5289a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags = r18;
5290a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      res = f17;
5291a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      ur = *(uint64_t *)(&res);
5292a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Restore flags */
5293a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r18 = tmpcr;
5294a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtcr 18");
5295a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      r18 = tmpxer;
5296a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtxer 18");
5297a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("%s %016llx => %016llx (%08x)\n", name, u0, ur, flags);
5298a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj    }
5299a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
5300a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5301a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* Special test cases for:
5302a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mffs
5303a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mtfsb0
5304a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj * mtfsb1
5305a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj */
5306a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic special_t special_float_ops[] = {
5307a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if 0
5308a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5309a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mffs",   /* One 5 bits immediate argument */
5310a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mffs_cb,
5311a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5312a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5313a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mffs.",   /* One 5 bits immediate argument */
5314a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mffs_cb,
5315a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5316a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5317a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mtfsb0", /* One 5 bits immediate argument */
5318a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mffs_cb,
5319a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5320a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5321a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mtfsb0.", /* One 5 bits immediate argument */
5322a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mffs_cb,
5323a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5324a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5325a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mtfsb1", /* One 5 bits immediate argument */
5326a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mffs_cb,
5327a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5328a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5329a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mtfsb1.", /* One 5 bits immediate argument */
5330a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mffs_cb,
5331a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5332a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5333a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mtfsf",  /* One register + 1 8 bits immediate argument */
5334a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mtfsf_cb,
5335a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5336a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5337a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mtfsf.",  /* One register + 1 8 bits immediate argument */
5338a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mtfsf_cb,
5339a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5340a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5341a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mtfsfi", /* One 5 bits argument + 1 5 bits argument */
5342a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mtfsfi_cb,
5343a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5344a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5345a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "mtfsfi.", /* One 5 bits argument + 1 5 bits argument */
5346a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &mtfsfi_cb,
5347a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5348a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
5349a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5350a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      NULL,
5351a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      NULL,
5352a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5353a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
5354a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5355530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_float_special (const char* name, test_func_t func,
5356a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                uint32_t test_flags)
5357a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
5358a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   test_special(special_float_ops, name, func, test_flags);
5359a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
5360a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5361a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* Used in do_tests, indexed by flags->nb_args
5362a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   Elements correspond to enum test_flags::num args
5363a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj*/
5364a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_loop_t float_loops[] = {
5365a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_float_one_arg,
5366a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_float_two_args,
5367a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_float_three_args,
5368a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_float_two_args,
5369a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   NULL,
5370a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   NULL,
5371a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_float_special,
5372a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   NULL,
5373a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   NULL,
5374a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   NULL,
5375a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   NULL,
5376a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
5377a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
5378a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5379a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5380a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC)
5381a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5382a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* Ref: vector insns to test setting CR, VSCR:
5383a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         volatile vector unsigned int v1 =
5384a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            //            (vector unsigned int){ 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF };
5385a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            (vector unsigned int){ 0x80808080,0x80808080,0x80808080,0x80808080 };
5386a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         volatile vector unsigned int v2 =
5387a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            //            (vector unsigned int){ 0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF,0xFFFFFFFF };
5388a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            (vector unsigned int){ 0x01010101,0x01010101,0x01010101,0x01010101 };
5389a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         //__asm__ __volatile__ ("vcmpequw. 31,%0,%1" : : "vr" (v1), "vr" (v2));   // sets CR[6]
5390a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         //__asm__ __volatile__ ("vpkswss 31,%0,%1" : : "vr" (v1), "vr" (v2));     // sets VSCR[SAT]
5391a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("vsubsbs 31,%0,%1" : : "vr" (v1), "vr" (v2));       // sets VSCR[SAT]
5392a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj*/
5393a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5394a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#define DEFAULT_VSCR 0x00010000
5395a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5396530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_av_int_one_arg (const char* name, test_func_t func,
5397a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                 unused uint32_t test_flags)
5398a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
5399a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t flags, tmpcr;
5400a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile vector unsigned int tmpvscr;
5401a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i;
5402a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5403a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_viargs; i++) {
5404a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Save flags */
5405a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfcr   %0" : "=r"  (tmpcr));
5406a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr));
5407a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5408a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      vector unsigned int vec_in  = (vector unsigned int)viargs[i];
5409a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      vector unsigned int vec_out = (vector unsigned int){ 0,0,0,0 };
5410a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5411a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      // reset VSCR and CR
5412a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      vector unsigned int vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR };
5413a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags = 0;
5414a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtvscr %0" : : "vr" (vscr) );
5415a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtcr   %0" : : "r" (flags));
5416a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5417a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      // load input -> r14
5418a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("vor 14,%0,%0" : : "vr" (vec_in));
5419a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5420a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      // do stuff
5421a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      (*func)();
5422a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5423a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      // retrieve output <- r17
5424a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out));
5425a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5426a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      // get CR,VSCR flags
5427a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfcr   %0" : "=r" (flags));
5428a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr));
5429a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5430a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Restore flags */
5431a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtcr   %0" : : "r"  (tmpcr));
5432a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtvscr %0" : : "vr" (tmpvscr));
5433a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5434a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      unsigned int* src = (unsigned int*)&vec_in;
5435a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      unsigned int* dst = (unsigned int*)&vec_out;
5436a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("%s: %08x %08x %08x %08x\n", name,
5437a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj             src[0], src[1], src[2], src[3]);
5438a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("%s:  => %08x %08x %08x %08x ", name,
5439a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj             dst[0], dst[1], dst[2], dst[3]);
5440a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined TEST_VSCR_SAT
5441a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      unsigned int* p_vscr = (unsigned int*)&vscr;
5442a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("(%08x, %08x)\n", flags, p_vscr[3]);
5443a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else
5444a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("(%08x)\n", flags);
5445a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
5446a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
5447a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
5448a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5449530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_av_int_two_args (const char* name, test_func_t func,
5450a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                  unused uint32_t test_flags)
5451a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
5452a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t flags, tmpcr;
5453a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile vector unsigned int tmpvscr;
5454a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i,j;
5455a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5456a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_viargs; i++) {
5457a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      volatile vector unsigned int vec_in1 = (vector unsigned int)viargs[i];
5458a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; j<nb_viargs; j++) {
5459a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         volatile vector unsigned int vec_in2 = (vector unsigned int)viargs[j];
5460a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         volatile vector unsigned int vec_out = (vector unsigned int){ 0,0,0,0 };
5461a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5462a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         /* Save flags */
5463a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfcr   %0" : "=r"  (tmpcr));
5464a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr));
5465a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5466a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // reset VSCR and CR
5467a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         volatile vector unsigned int vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR };
5468a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         flags = 0;
5469a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtvscr %0" : : "vr" (vscr) );
5470a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtcr   %0" : : "r" (flags));
5471a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5472a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // load inputs -> r14,r15
5473a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("vor 14,%0,%0" : : "vr" (vec_in1));
5474a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("vor 15,%0,%0" : : "vr" (vec_in2));
5475a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5476a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // do stuff
5477a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         (*func)();
5478a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5479a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // retrieve output <- r17
5480a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out));
5481a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5482a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // get CR,VSCR flags
5483a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfcr   %0" : "=r" (flags));
5484a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr));
5485a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5486a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         /* Restore flags */
5487a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtcr   %0" : : "r"  (tmpcr));
5488a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtvscr %0" : : "vr" (tmpvscr));
5489a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5490a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         unsigned int* src1   = (unsigned int*)&vec_in1;
5491a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         unsigned int* src2   = (unsigned int*)&vec_in2;
5492a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         unsigned int* dst    = (unsigned int*)&vec_out;
5493a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%s: ", name);
5494a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%08x%08x%08x%08x, ", src1[0], src1[1], src1[2], src1[3]);
5495a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%08x%08x%08x%08x\n", src2[0], src2[1], src2[2], src2[3]);
5496a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%s:  => %08x %08x %08x %08x ", name,
5497a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                dst[0], dst[1], dst[2], dst[3]);
5498a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined TEST_VSCR_SAT
5499a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         unsigned int* p_vscr = (unsigned int*)&vscr;
5500a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("(%08x, %08x)\n", flags, p_vscr[3]);
5501a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else
5502a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("(%08x)\n", flags);
5503a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
5504a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
5505a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if (verbose) printf("\n");
5506a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
5507a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
5508a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5509530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_av_int_three_args (const char* name, test_func_t func,
5510a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                    unused uint32_t test_flags)
5511a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
5512a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t flags, tmpcr;
5513a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile vector unsigned int tmpvscr;
5514a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i,j,k;
5515a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5516a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_viargs; i++) {
5517a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      vector unsigned int vec_in1 = (vector unsigned int)viargs[i];
5518a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; j<nb_viargs; j++) {
5519a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         vector unsigned int vec_in2 = (vector unsigned int)viargs[j];
5520a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         for (k=0; k<nb_viargs; k++) {
5521a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            vector unsigned int vec_in3 = (vector unsigned int)viargs[k];
5522a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            vector unsigned int vec_out = (vector unsigned int){ 0,0,0,0 };
5523a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5524a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            /* Save flags */
5525a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfcr   %0" : "=r"  (tmpcr));
5526a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr));
5527a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5528a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            // reset VSCR and CR
5529a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            vector unsigned int vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR };
5530a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            flags = 0;
5531a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mtvscr %0" : : "vr" (vscr) );
5532a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mtcr   %0" : : "r" (flags));
5533a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5534a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            // load inputs -> r14,r15,r16
5535a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("vor 14,%0,%0" : : "vr" (vec_in1));
5536a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("vor 15,%0,%0" : : "vr" (vec_in2));
5537a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("vor 16,%0,%0" : : "vr" (vec_in3));
5538a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5539a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            // do stuff
5540a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            (*func)();
5541a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5542a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            // retrieve output <- r17
5543a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out));
5544a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5545a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            // get CR,VSCR flags
5546a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfcr   %0" : "=r" (flags));
5547a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr));
5548a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5549a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            /* Restore flags */
5550a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mtcr   %0" : : "r"  (tmpcr));
5551a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mtvscr %0" : : "vr" (tmpvscr));
5552a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5553a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            unsigned int* src1 = (unsigned int*)&vec_in1;
5554a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            unsigned int* src2 = (unsigned int*)&vec_in2;
5555a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            unsigned int* src3 = (unsigned int*)&vec_in3;
5556a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            unsigned int* dst = (unsigned int*)&vec_out;
5557a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("%s: %08x%08x%08x%08x, %08x%08x%08x%08x, %08x%08x%08x%08x\n", name,
5558a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                   src1[0], src1[1], src1[2], src1[3],
5559a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                   src2[0], src2[1], src2[2], src2[3],
5560a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                   src3[0], src3[1], src3[2], src3[3]);
5561a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5562a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("%s:  => %08x%08x%08x%08x ", name,
5563a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                   dst[0], dst[1], dst[2], dst[3]);
5564a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined TEST_VSCR_SAT
5565a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            unsigned int* p_vscr = (unsigned int*)&vscr;
5566a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("(%08x, %08x)\n", flags, p_vscr[3]);
5567a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else
5568a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("(%08x)\n", flags);
5569a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
5570a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         }
5571a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (verbose) printf("\n");
5572a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
5573a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
5574a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
5575a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5576a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5577530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void vs128_cb (const char* name, test_func_t func,
5578a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                      unused uint32_t test_flags)
5579a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
5580a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t flags, tmpcr;
5581a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile vector unsigned int tmpvscr;
5582a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i,j;
5583a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5584a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_viargs; i++) {
5585a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      vector unsigned int vec_in1 = (vector unsigned int)viargs[i];
5586a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; j<8; j++) {
5587a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         /* low-order 3bits of every byte must be the same for the shift vector */
5588a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         vector unsigned char vec_shft = (vector unsigned char) { j,j,j,j, j,j,j,j, j,j,j,j, j,j,j,j };
5589a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         vector unsigned int vec_out = (vector unsigned int){ 0,0,0,0 };
5590a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5591a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         /* Save flags */
5592a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfcr   %0" : "=r"  (tmpcr));
5593a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr));
5594a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5595a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // reset VSCR and CR
5596a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         vector unsigned int vscr = (vector unsigned int){ 0,0,0,0x00010000 };
5597a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         flags = 0;
5598a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtvscr %0" : : "vr" (vscr) );
5599a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtcr   %0" : : "r" (flags));
5600a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5601a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // load inputs -> r14,r15
5602a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("vor 14,%0,%0" : : "vr" (vec_in1));
5603a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("vor 15,%0,%0" : : "vr" (vec_shft));
5604a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5605a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // do stuff
5606a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         (*func)();
5607a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5608a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // retrieve output <- r17
5609a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out));
5610a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5611a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // get CR,VSCR flags
5612a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfcr   %0" : "=r" (flags));
5613a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr));
5614a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5615a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         /* Restore flags */
5616a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtcr   %0" : : "r"  (tmpcr));
5617a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtvscr %0" : : "vr" (tmpvscr));
5618a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5619a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         unsigned int* src1   = (unsigned int*)&vec_in1;
5620a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         unsigned int* src2   = (unsigned int*)&vec_shft;
5621a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         unsigned int* dst    = (unsigned int*)&vec_out;
5622a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%s: ", name);
5623a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%08x%08x%08x%08x, ", src1[0], src1[1], src1[2], src1[3]);
5624a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%08x%08x%08x%08x\n", src2[0], src2[1], src2[2], src2[3]);
5625a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5626a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%s:  => %08x %08x %08x %08x ", name,
5627a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                dst[0], dst[1], dst[2], dst[3]);
5628a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined TEST_VSCR_SAT
5629a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            unsigned int* p_vscr = (unsigned int*)&vscr;
5630a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("(%08x, %08x)\n", flags, p_vscr[3]);
5631a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else
5632a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("(%08x)\n", flags);
5633a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
5634a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
5635a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if (verbose) printf("\n");
5636a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
5637a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
5638a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5639530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void vsplt_cb (const char* name, test_func_t func,
5640a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                      unused uint32_t test_flags)
5641a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
5642a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t flags, tmpcr;
5643a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile vector unsigned int tmpvscr;
5644a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   uint32_t func_buf[2], *p;
5645a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i,j;
5646a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5647a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_viargs; i++) {
5648a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      vector unsigned int vec_in1 = (vector unsigned int)viargs[i];
5649a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5650a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; j<16; j+=3) {
5651a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         vector unsigned int vec_out = (vector unsigned int){ 0,0,0,0 };
5652a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5653a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         /* Patch up the instruction */
5654a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         p = (void *)func;
5655a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         func_buf[1] = p[1];
5656a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         patch_op_imm(func_buf, p, j, 16, 5);
5657a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         func = (void *)func_buf;
5658a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5659a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         /* Save flags */
5660a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfcr   %0" : "=r"  (tmpcr));
5661a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr));
5662a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5663a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // reset VSCR and CR
5664a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         vector unsigned int vscr = (vector unsigned int){ 0,0,0,0x00010000 };
5665a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         flags = 0;
5666a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtvscr %0" : : "vr" (vscr) );
5667a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtcr   %0" : : "r" (flags));
5668a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5669a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // load input -> r14
5670a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("vor 14,%0,%0" : : "vr" (vec_in1));
5671a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5672a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // do stuff
5673a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         (*func)();
5674a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5675a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // retrieve output <- r17
5676a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out));
5677a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5678a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // get CR,VSCR flags
5679a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfcr   %0" : "=r" (flags));
5680a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr));
5681a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5682a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         /* Restore flags */
5683a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtcr   %0" : : "r"  (tmpcr));
5684a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtvscr %0" : : "vr" (tmpvscr));
5685a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5686a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         unsigned int* src1   = (unsigned int*)&vec_in1;
5687a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         unsigned int* dst    = (unsigned int*)&vec_out;
5688a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%s: ", name);
5689a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%08x %08x %08x %08x, %u\n", src1[0], src1[1], src1[2], src1[3], j);
5690a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5691a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%s:  => %08x %08x %08x %08x ", name,
5692a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                dst[0], dst[1], dst[2], dst[3]);
5693a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined TEST_VSCR_SAT
5694a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            unsigned int* p_vscr = (unsigned int*)&vscr;
5695a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("(%08x, %08x)\n", flags, p_vscr[3]);
5696a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else
5697a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("(%08x)\n", flags);
5698a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
5699a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
5700a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if (verbose) printf("\n");
5701a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
5702a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
5703a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5704530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void vspltis_cb (const char* name, test_func_t func,
5705a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                      unused uint32_t test_flags)
5706a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
5707a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t flags, tmpcr;
5708a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile vector unsigned int tmpvscr;
5709a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   uint32_t func_buf[2], *p;
5710a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i;
5711a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5712a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<32; i++) {
5713a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      vector unsigned int vec_out = (vector unsigned int){ 0,0,0,0 };
5714a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5715a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Patch up the instruction */
5716a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      p = (void *)func;
5717a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      func_buf[1] = p[1];
5718a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      patch_op_imm(func_buf, p, i, 16, 5);
5719a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      func = (void *)func_buf;
5720a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5721a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Save flags */
5722a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfcr   %0" : "=r"  (tmpcr));
5723a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr));
5724a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5725a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      // reset VSCR and CR
5726a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      vector unsigned int vscr = (vector unsigned int){ 0,0,0,0x00010000 };
5727a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags = 0;
5728a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtvscr %0" : : "vr" (vscr) );
5729a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtcr   %0" : : "r" (flags));
5730a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5731a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      // do stuff
5732a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      (*func)();
5733a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5734a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      // retrieve output <- r17
5735a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out));
5736a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5737a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      // get CR,VSCR flags
5738a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfcr   %0" : "=r" (flags));
5739a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr));
5740a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5741a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Restore flags */
5742a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtcr   %0" : : "r"  (tmpcr));
5743a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtvscr %0" : : "vr" (tmpvscr));
5744a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5745a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      unsigned int* dst    = (unsigned int*)&vec_out;
5746a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("%s: %2d => ", name, i);
5747a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5748a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("%08x %08x %08x %08x ", dst[0], dst[1], dst[2], dst[3]);
5749a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined TEST_VSCR_SAT
5750a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      unsigned int* p_vscr = (unsigned int*)&vscr;
5751a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("(%08x, %08x)\n", flags, p_vscr[3]);
5752a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else
5753a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("(%08x)\n", flags);
5754a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
5755a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
5756a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
5757a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5758530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void vsldoi_cb (const char* name, test_func_t func,
5759a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                       unused uint32_t test_flags)
5760a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
5761a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t flags, tmpcr;
5762a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile vector unsigned int tmpvscr;
5763a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   uint32_t func_buf[2], *p;
5764a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i,j,k;
5765a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5766a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_viargs; i++) {
5767a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      vector unsigned int vec_in1 = (vector unsigned int)viargs[i];
5768a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; j<nb_viargs; j++) {
5769a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         vector unsigned int vec_in2 = (vector unsigned int)viargs[j];
5770a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         for (k=0; k<16; k+=14) {
5771a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            vector unsigned int vec_out = (vector unsigned int){ 0,0,0,0 };
5772a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5773a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            /* Patch up the instruction */
5774a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            p = (void *)func;
5775a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            func_buf[1] = p[1];
5776a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            patch_op_imm(func_buf, p, k, 6, 4);
5777a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            func = (void *)func_buf;
5778a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5779a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            /* Save flags */
5780a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfcr   %0" : "=r"  (tmpcr));
5781a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr));
5782a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5783a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            // reset VSCR and CR
5784a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            vector unsigned int vscr = (vector unsigned int){ 0,0,0,0x00010000 };
5785a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            flags = 0;
5786a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mtvscr %0" : : "vr" (vscr) );
5787a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mtcr   %0" : : "r" (flags));
5788a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5789a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            // load inputs -> r14,r15
5790a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("vor 14,%0,%0" : : "vr" (vec_in1));
5791a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("vor 15,%0,%0" : : "vr" (vec_in2));
5792a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5793a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            // do stuff
5794a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            (*func)();
5795a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5796a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            // retrieve output <- r17
5797a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out));
5798a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5799a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            // get CR,VSCR flags
5800a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfcr   %0" : "=r" (flags));
5801a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr));
5802a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5803a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            /* Restore flags */
5804a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mtcr   %0" : : "r"  (tmpcr));
5805a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mtvscr %0" : : "vr" (tmpvscr));
5806a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5807a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            unsigned int* src1   = (unsigned int*)&vec_in1;
5808a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            unsigned int* src2   = (unsigned int*)&vec_in2;
5809a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            unsigned int* dst    = (unsigned int*)&vec_out;
5810a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("%s: ", name);
5811a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("%08x%08x%08x%08x, %08x%08x%08x%08x, %u\n",
5812a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                   src1[0], src1[1], src1[2], src1[3],
5813a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                   src2[0], src2[1], src2[2], src2[3], k);
5814a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5815a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("%s:  => %08x %08x %08x %08x] ", name,
5816a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                   dst[0], dst[1], dst[2], dst[3]);
5817a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined TEST_VSCR_SAT
5818a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            unsigned int* p_vscr = (unsigned int*)&vscr;
5819a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("(%08x, %08x)\n", flags, p_vscr[3]);
5820a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else
5821a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("(%08x)\n", flags);
5822a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
5823a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         }
5824a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (verbose) printf("\n");
5825a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
5826a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
5827a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
5828a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
582905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion/* lvsl, lvsr */
583005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void lvs_cb (const char *name, test_func_t func,
583105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion                    unused uint32_t test_flags)
583205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{
583305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   volatile uint32_t flags, tmpcr;
583405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   volatile vector unsigned int tmpvscr;
583505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   int i;
583605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
583705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   for (i=-1; i<17; i++) {
583805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      vector unsigned int vec_out = (vector unsigned int){ 0,0,0,0 };
583905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
584005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      // make sure start address is 16 aligned - use viargs[0]
584105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      r15 = (uint32_t)&viargs[0];
584205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      r14 = i;
584305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
584405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      /* Save flags */
584505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      __asm__ __volatile__ ("mfcr   %0" : "=r"  (tmpcr));
584605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr));
584705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
584805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      // reset VSCR and CR
584905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      vector unsigned int vscr = (vector unsigned int){ 0,0,0,0x00010000 };
585005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      flags = 0;
585105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      __asm__ __volatile__ ("mtvscr %0" : : "vr" (vscr) );
585205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      __asm__ __volatile__ ("mtcr   %0" : : "r" (flags));
585305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
585405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      // do stuff
585505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      (*func)();
585605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
585705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      // retrieve output <- r17
585805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out));
585905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
586005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      // get CR,VSCR flags
586105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      __asm__ __volatile__ ("mfcr   %0" : "=r" (flags));
586205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr));
586305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
586405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      /* Restore flags */
586505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      __asm__ __volatile__ ("mtcr   %0" : : "r"  (tmpcr));
586605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      __asm__ __volatile__ ("mtvscr %0" : : "vr" (tmpvscr));
586705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
586805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      unsigned int* dst    = (unsigned int*)&vec_out;
586905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      printf("%s %3d, %3d", name, i, 0);
587005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      printf(" => %08x %08x %08x %08x ", dst[0], dst[1], dst[2], dst[3]);
587105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      printf("(%08x)\n", flags);
587205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   }
587305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   if (verbose) printf("\n");
587405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion}
587505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
5876a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic special_t special_av_int_ops[] = {
5877a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5878a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "vsr", /* Two registers arguments */
5879a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &vs128_cb,
5880a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5881a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5882a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "vsl", /* Two registers arguments */
5883a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &vs128_cb,
5884a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5885a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5886a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "vspltb", /* One reg, one 5-bit uimm arguments */
5887a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &vsplt_cb,
5888a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5889a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5890a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "vsplth", /* One reg, one 5-bit uimm arguments */
5891a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &vsplt_cb,
5892a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5893a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5894a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "vspltw", /* One reg, one 5-bit uimm arguments */
5895a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &vsplt_cb,
5896a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5897a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5898a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "vspltisb", /* One reg, one 5-bit uimm arguments */
5899a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &vspltis_cb,
5900a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5901a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5902a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "vspltish", /* One reg, one 5-bit uimm arguments */
5903a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &vspltis_cb,
5904a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5905a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5906a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "vspltisw", /* One reg, one 5-bit uimm arguments */
5907a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &vspltis_cb,
5908a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
5909a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   {
5910a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      "vsldoi", /* Two regs, one 4-bit uimm arguments */
5911a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      &vsldoi_cb,
5912a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   },
591305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   {
591405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      "lvsl", /* Two regs */
591505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      &lvs_cb,
591605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   },
591705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   {
591805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      "lvsr", /* Two regs */
591905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      &lvs_cb,
592005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   },
592105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   {
592205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      NULL,
592305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      NULL,
592405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   },
5925a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
5926a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
5927530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_av_int_special (const char* name, test_func_t func,
5928a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                 uint32_t test_flags)
5929a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
5930a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   test_special(special_av_int_ops, name, func, test_flags);
5931a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
5932a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
593305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_av_int_ld_two_regs (const char *name,
593405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion                                  test_func_t func,
593505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion                                  unused uint32_t test_flags)
593605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{
593705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   volatile uint32_t flags, tmpcr;
593805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   volatile vector unsigned int tmpvscr;
593905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   int i,j;
594005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
594105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   for (i=0; i<nb_viargs; i++) {
594205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      for (j=0; j<16; j+=7) {
594305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         volatile vector unsigned int vec_out = (vector unsigned int){ 0,0,0,0 };
594405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
594505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         // load from viargs array + some dis-alignment
594605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         r15 = (uint32_t)&viargs[0];
594705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         r14 = i*16 + j;
594805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
594905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         /* Save flags */
595005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         __asm__ __volatile__ ("mfcr   %0" : "=r"  (tmpcr));
595105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr));
595205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
595305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         // reset VSCR and CR
595405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         volatile vector unsigned int vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR };
595505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         flags = 0;
595605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         __asm__ __volatile__ ("mtvscr %0" : : "vr" (vscr) );
595705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         __asm__ __volatile__ ("mtcr   %0" : : "r" (flags));
595805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
595905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         // do stuff
596005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         (*func)();
596105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
596205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         // retrieve output <- r17
596305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out));
596405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
596505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         // get CR,VSCR flags
596605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         __asm__ __volatile__ ("mfcr   %0" : "=r" (flags));
596705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr));
596805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
596905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         /* Restore flags */
597005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         __asm__ __volatile__ ("mtcr   %0" : : "r"  (tmpcr));
597105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         __asm__ __volatile__ ("mtvscr %0" : : "vr" (tmpvscr));
597205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
597305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         volatile vector unsigned int vec_in = (vector unsigned int)viargs[i];
597405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         unsigned int* src = (unsigned int*)&vec_in;
597505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         unsigned int* dst = (unsigned int*)&vec_out;
597605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         printf("%s %3d, %08x %08x %08x %08x", name, j, src[0], src[1], src[2], src[3]);
597705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         printf(" => %08x %08x %08x %08x ", dst[0], dst[1], dst[2], dst[3]);
597805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         printf("(%08x)\n", flags);
597905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      }
598005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      if (verbose) printf("\n");
598105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   }
598205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion}
598305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
598405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
598505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerionstatic void test_av_int_st_three_regs (const char *name,
598605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion                                       test_func_t func,
598705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion                                       unused uint32_t test_flags)
598805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion{
598905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   volatile uint32_t flags, tmpcr;
599005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   volatile vector unsigned int tmpvscr;
599105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   int i,j;
599205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   vector unsigned int* viargs_priv;
599305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
599405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   // private viargs table to store to
599505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   viargs_priv = memalign(16,(nb_viargs * sizeof(uint32_t)));
599605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   for (i=0; i<nb_viargs; i++)
599705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      viargs_priv[i] = (vector unsigned int) { 0,0,0,0 };
599805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
599905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   for (i=0; i<nb_viargs; i++) {
600005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      for (j=0; j<16; j+=7) {
600105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         // read from viargs
600205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         volatile vector unsigned int vec_in = (vector unsigned int)viargs[i];
600305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
600405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         // store to viargs_priv[0] + some dis-alignment
600505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         r16 = (uint32_t)&viargs_priv[0];
600605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         r15 = i*16 + j;
600705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
600805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         /* Save flags */
600905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         __asm__ __volatile__ ("mfcr   %0" : "=r"  (tmpcr));
601005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr));
601105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
601205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         // reset VSCR and CR
601305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         volatile vector unsigned int vscr = (vector unsigned int){ 0,0,0,DEFAULT_VSCR };
601405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         flags = 0;
601505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         __asm__ __volatile__ ("mtvscr %0" : : "vr" (vscr) );
601605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         __asm__ __volatile__ ("mtcr   %0" : : "r" (flags));
601705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
601805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         // load inputs -> r14
601905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         __asm__ __volatile__ ("vor 14,%0,%0" : : "vr" (vec_in));
602005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
602105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         // do stuff
602205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         (*func)();
602305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
602405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         // Output stored in viargs_priv
602505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
602605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         // get CR,VSCR flags
602705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         __asm__ __volatile__ ("mfcr   %0" : "=r" (flags));
602805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr));
602905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
603005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         /* Restore flags */
603105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         __asm__ __volatile__ ("mtcr   %0" : : "r"  (tmpcr));
603205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         __asm__ __volatile__ ("mtvscr %0" : : "vr" (tmpvscr));
603305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
603405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         volatile vector unsigned int vec_out = (vector unsigned int)viargs_priv[i];
603505cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         unsigned int* src = (unsigned int*)&vec_in;
603605cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         unsigned int* dst = (unsigned int*)&vec_out;
603705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         printf("%s %3d, %08x %08x %08x %08x", name, j, src[0], src[1], src[2], src[3]);
603805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         printf(" => %08x %08x %08x %08x ", dst[0], dst[1], dst[2], dst[3]);
603905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         printf("(%08x)\n", flags);
604005cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      }
604105cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion      if (verbose) printf("\n");
604205cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   }
604305cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion}
604405cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion
6045a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* Used in do_tests, indexed by flags->nb_args
6046a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   Elements correspond to enum test_flags::num args
6047a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj*/
6048a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_loop_t altivec_int_loops[] = {
6049a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_av_int_one_arg,
6050a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_av_int_two_args,
6051a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_av_int_three_args,
6052a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_av_int_two_args,
6053a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   NULL,
6054a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   NULL,
6055a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_av_int_special,
6056a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   NULL,
605705cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   &test_av_int_ld_two_regs,
6058a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   NULL,
605905cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion   test_av_int_st_three_regs,
6060a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
6061a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6062a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6063530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_av_float_one_arg (const char* name, test_func_t func,
6064a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                   unused uint32_t test_flags)
6065a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
6066a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t flags, tmpcr;
6067a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile vector unsigned int tmpvscr;
6068a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i;
6069a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6070a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_vfargs; i++) {
6071a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      vector float vec_in  = (vector float)vfargs[i];
6072a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      vector float vec_out = (vector float){ 0.0, 0.0, 0.0, 0.0 };
6073a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6074a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Save flags */
6075a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfcr   %0" : "=r"  (tmpcr));
6076a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr));
6077a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6078a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      // reset VSCR and CR
6079a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      vector unsigned int vscr = (vector unsigned int){ 0,0,0,0 };
6080a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags = 0;
6081a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtvscr %0" : : "vr" (vscr) );
6082a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtcr   %0" : : "r" (flags));
6083a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6084a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      // load input -> r14
6085a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("vor 14,%0,%0" : : "vr" (vec_in));
6086a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6087a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      // do stuff
6088a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      (*func)();
6089a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6090a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      // retrieve output <- r17
6091a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out));
6092a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6093a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      // get CR,VSCR flags
6094a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfcr   %0" : "=r" (flags));
6095a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr));
6096a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6097a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Restore flags */
6098a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtcr   %0" : : "r"  (tmpcr));
6099a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      __asm__ __volatile__ ("mtvscr %0" : : "vr" (tmpvscr));
6100a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6101a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      unsigned int* src = (unsigned int*)&vec_in;
6102a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      unsigned int* dst = (unsigned int*)&vec_out;
6103a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("%s: %08x %08x %08x %08x\n", name,
6104a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj             src[0], src[1], src[2], src[3]);
6105a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6106a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("%s:  => %08x %08x %08x %08x ", name,
6107a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj             dst[0], dst[1], dst[2], dst[3]);
6108a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined TEST_VSCR_SAT
6109a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      unsigned int* p_vscr = (unsigned int*)&vscr;
6110a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("(%08x, %08x)\n", flags, p_vscr[3]);
6111a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else
6112a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("(%08x)\n", flags);
6113a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
6114a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
6115a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
6116a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6117530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_av_float_two_args (const char* name, test_func_t func,
6118a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                    unused uint32_t test_flags)
6119a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
6120a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t flags, tmpcr;
6121a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile vector unsigned int tmpvscr;
6122a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i,j;
6123a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6124a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_vfargs; i++) {
6125a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; j<nb_vfargs; j+=3) {
6126a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         vector float vec_in1 = (vector float)vfargs[i];
6127a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         vector float vec_in2 = (vector float)vfargs[j];
6128a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         vector float vec_out = (vector float){ 0.0, 0.0, 0.0, 0.0 };
6129a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6130a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         /* Save flags */
6131a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfcr   %0" : "=r"  (tmpcr));
6132a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr));
6133a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6134a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // reset VSCR and CR
6135a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         vector unsigned int vscr = (vector unsigned int){ 0,0,0,0 };
6136a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         flags = 0;
6137a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtvscr %0" : : "vr" (vscr) );
6138a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtcr   %0" : : "r" (flags));
6139a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6140a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // load inputs -> r14,r15
6141a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("vor 14,%0,%0" : : "vr" (vec_in1));
6142a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("vor 15,%0,%0" : : "vr" (vec_in2));
6143a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6144a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // do stuff
6145a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         (*func)();
6146a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6147a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // retrieve output <- r17
6148a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out));
6149a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6150a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         // get CR,VSCR flags
6151a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfcr   %0" : "=r" (flags));
6152a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr));
6153a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6154a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         /* Restore flags */
6155a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtcr   %0" : : "r"  (tmpcr));
6156a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         __asm__ __volatile__ ("mtvscr %0" : : "vr" (tmpvscr));
6157a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6158a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         unsigned int* src1 = (unsigned int*)&vec_in1;
6159a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         unsigned int* src2 = (unsigned int*)&vec_in2;
6160a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         unsigned int* dst = (unsigned int*)&vec_out;
6161a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%s: %08x%08x%08x%08x, %08x%08x%08x%08x\n", name,
6162a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                src1[0], src1[1], src1[2], src1[3],
6163a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                src2[0], src2[1], src2[2], src2[3]);
6164a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6165a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%s:  => %08x %08x %08x %08x ", name,
6166a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                dst[0], dst[1], dst[2], dst[3]);
6167a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined TEST_VSCR_SAT
6168a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         unsigned int* p_vscr = (unsigned int*)&vscr;
6169a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("(%08x, %08x)\n", flags, p_vscr[3]);
6170a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else
6171a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("(%08x)\n", flags);
6172a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
6173a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
6174a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if (verbose) printf("\n");
6175a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
6176a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
6177a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6178530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_av_float_three_args (const char* name, test_func_t func,
6179a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                                      unused uint32_t test_flags)
6180a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
6181a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t flags, tmpcr;
6182a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile vector unsigned int tmpvscr;
6183a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i,j,k;
6184a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6185a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_vfargs; i++) {
6186a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; j<nb_vfargs; j+=3) {
6187a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         for (k=0; k<nb_vfargs; k+=5) {
6188a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            vector float vec_in1 = (vector float)vfargs[i];
6189a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            vector float vec_in2 = (vector float)vfargs[j];
6190a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            vector float vec_in3 = (vector float)vfargs[k];
6191a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            vector float vec_out = (vector float){ 0.0, 0.0, 0.0, 0.0 };
6192a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6193a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            /* Save flags */
6194a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfcr   %0" : "=r"  (tmpcr));
6195a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfvscr %0" : "=vr" (tmpvscr));
6196a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6197a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            // reset VSCR and CR
6198a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            vector unsigned int vscr = (vector unsigned int){ 0,0,0,0 };
6199a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            flags = 0;
6200a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mtvscr %0" : : "vr" (vscr) );
6201a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mtcr   %0" : : "r" (flags));
6202a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6203a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            // load inputs -> r14,r15,r16
6204a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("vor 14,%0,%0" : : "vr" (vec_in1));
6205a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("vor 15,%0,%0" : : "vr" (vec_in2));
6206a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("vor 16,%0,%0" : : "vr" (vec_in3));
6207a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6208a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            // do stuff
6209a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            (*func)();
6210a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6211a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            // retrieve output <- r17
6212a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("vor %0,17,17" : "=vr" (vec_out));
6213a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6214a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            // get CR,VSCR flags
6215a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfcr   %0" : "=r" (flags));
6216a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfvscr %0" : "=vr" (vscr));
6217a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6218a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            /* Restore flags */
6219a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mtcr   %0" : : "r"  (tmpcr));
6220a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mtvscr %0" : : "vr" (tmpvscr));
6221a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6222a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            unsigned int* src1 = (unsigned int*)&vec_in1;
6223a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            unsigned int* src2 = (unsigned int*)&vec_in2;
6224a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            unsigned int* src3 = (unsigned int*)&vec_in3;
6225a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            unsigned int* dst = (unsigned int*)&vec_out;
6226a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("%s: %08x%08x%08x%08x, %08x%08x%08x%08x, %08x%08x%08x%08x\n", name,
6227a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                   src1[0], src1[1], src1[2], src1[3],
6228a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                   src2[0], src2[1], src2[2], src2[3],
6229a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                   src3[0], src3[1], src3[2], src3[3]);
6230a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6231a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("%s:  => %08x %08x %08x %08x ", name,
6232a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                   dst[0], dst[1], dst[2], dst[3]);
6233a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined TEST_VSCR_SAT
6234a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            unsigned int* p_vscr = (unsigned int*)&vscr;
6235a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("(%08x, %08x)\n", flags, p_vscr[3]);
6236a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else
6237a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("(%08x)\n", flags);
6238a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
6239a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         }
6240a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (verbose) printf("\n");
6241a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
6242a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
6243a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
6244a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6245a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj/* Used in do_tests, indexed by flags->nb_args
6246a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   Elements correspond to enum test_flags::num args
6247a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj*/
6248a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic test_loop_t altivec_float_loops[] = {
6249a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_av_float_one_arg,
6250a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_av_float_two_args,
6251a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_av_float_three_args,
6252a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   &test_av_float_two_args,
6253a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   NULL,
6254a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   NULL,
6255a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   NULL,
6256a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   NULL,
6257a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   NULL,
6258a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   NULL,
6259a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   NULL,
6260a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj};
6261a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6262a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (HAS_ALTIVEC) */
6263a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6264a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6265a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (IS_PPC405)
6266530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic void test_ppc405 (const char* name, test_func_t func,
6267a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                         unused uint32_t test_flags)
6268a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
6269a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   volatile uint32_t res, flags, xer, tmpcr, tmpxer;
6270a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i, j, k;
6271a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6272a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; i<nb_iargs; i++) {
6273a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; j<nb_iargs; j++) {
6274a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         for (k=0; k<nb_iargs; k++) {
6275a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            r14 = iargs[i];
6276a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            r15 = iargs[j];
6277a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            /* Beware: the third argument and the result
6278a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj             * are in the same register
6279a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj             */
6280a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            r17 = iargs[k];
6281a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            /* Save flags */
6282a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfcr 18");
6283a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            tmpcr = r18;
6284a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfxer 18");
6285a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            tmpxer = r18;
6286a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            /* Set up flags for test */
6287a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            r18 = 0;
6288a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mtcr 18");
6289a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mtxer 18");
6290a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            (*func)();
6291a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfcr 18");
6292a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            flags = r18;
6293a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mfxer 18");
6294a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            xer = r18;
6295a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            res = r17;
6296a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            /* Restore flags */
6297a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            r18 = tmpcr;
6298a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mtcr 18");
6299a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            r18 = tmpxer;
6300a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            __asm__ __volatile__ ("mtxer 18");
6301a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("%s %08x, %08x, %08x => %08x (%08x %08x)\n",
6302a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                   name, iargs[i], iargs[j], iargs[k], res, flags, xer);
6303a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         }
6304a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (verbose) printf("\n");
6305a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
6306a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
6307a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
6308a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (IS_PPC405) */
6309a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6310530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic int check_filter (char *filter)
6311a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
6312530f73578552bc876a51fbf90cb6be29769bb362sewardj   char *c;
6313a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int ret = 1;
6314a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6315a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   if (filter != NULL) {
6316a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      c = strchr(filter, '*');
6317a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if (c != NULL) {
6318a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         *c = '\0';
6319a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         ret = 0;
6320a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
6321a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
6322a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6323a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   return ret;
6324a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
6325a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6326530f73578552bc876a51fbf90cb6be29769bb362sewardjstatic int check_name (const char* name, const char *filter,
6327a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                       int exact)
6328a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
6329a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int nlen, flen;
6330a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int ret = 0;
6331a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6332a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   if (filter != NULL) {
6333a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (; isspace(*name); name++)
6334a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         continue;
6335a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      FDPRINTF("Check '%s' againt '%s' (%s match)\n",
6336a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               name, filter, exact ? "exact" : "starting");
6337a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      nlen = strlen(name);
6338a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flen = strlen(filter);
6339a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if (exact) {
6340a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (nlen == flen && memcmp(name, filter, flen) == 0)
6341a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            ret = 1;
6342a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      } else {
6343a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (flen <= nlen && memcmp(name, filter, flen) == 0)
6344a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            ret = 1;
6345a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
6346a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   } else {
6347a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      ret = 1;
6348a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
6349a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   return ret;
6350a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
6351a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6352a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6353a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6354a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjtypedef struct insn_sel_flags_t_struct {
6355a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int one_arg, two_args, three_args;
6356a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int arith, logical, compare, ldst;
6357a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int integer, floats, p405, altivec, faltivec;
6358a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int cr;
6359a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj} insn_sel_flags_t;
6360a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6361a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void do_tests ( insn_sel_flags_t seln_flags,
6362530f73578552bc876a51fbf90cb6be29769bb362sewardj                       char *filter)
6363a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
6364a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (IS_PPC405)
6365a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   test_loop_t tmpl;
6366a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
6367a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   test_loop_t *loop;
6368a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   test_t *tests;
6369a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int nb_args, type, family;
6370a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int i, j, n;
6371a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int exact;
6372a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6373a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   exact = check_filter(filter);
6374a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   n = 0;
6375a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   for (i=0; all_tests[i].name != NULL; i++) {
6376a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      nb_args = all_tests[i].flags & PPC_NB_ARGS;
6377a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Check number of arguments */
6378a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if ((nb_args == 1 && !seln_flags.one_arg) ||
6379a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj          (nb_args == 2 && !seln_flags.two_args) ||
6380a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj          (nb_args == 3 && !seln_flags.three_args))
6381a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         continue;
6382a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Check instruction type */
6383a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      type = all_tests[i].flags & PPC_TYPE;
6384a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if ((type == PPC_ARITH   && !seln_flags.arith) ||
6385a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj          (type == PPC_LOGICAL && !seln_flags.logical) ||
6386a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj          (type == PPC_COMPARE && !seln_flags.compare) ||
6387a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj          (type == PPC_LDST && !seln_flags.ldst))
6388a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         continue;
6389a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Check instruction family */
6390a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      family = all_tests[i].flags & PPC_FAMILY;
6391a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if ((family == PPC_INTEGER  && !seln_flags.integer) ||
6392a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj          (family == PPC_FLOAT    && !seln_flags.floats) ||
6393a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj          (family == PPC_405      && !seln_flags.p405) ||
6394a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj          (family == PPC_ALTIVEC  && !seln_flags.altivec) ||
6395a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj          (family == PPC_FALTIVEC && !seln_flags.faltivec))
6396a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         continue;
6397a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Check flags update */
6398a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if (((all_tests[i].flags & PPC_CR)  && seln_flags.cr == 0) ||
6399a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj          (!(all_tests[i].flags & PPC_CR) && seln_flags.cr == 1))
6400a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         continue;
6401a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* All passed, do the tests */
6402a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      tests = all_tests[i].tests;
6403a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      /* Select the test loop */
6404a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      switch (family) {
6405a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case PPC_INTEGER:
6406a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         loop = &int_loops[nb_args - 1];
6407a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         break;
6408a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case PPC_FLOAT:
6409a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (NO_FLOAT)
6410a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         loop = &float_loops[nb_args - 1];
6411a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         break;
6412a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else
6413a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         fprintf(stderr, "Sorry. "
6414a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                 "PPC floating point instructions tests "
6415a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                 "are disabled on your host\n");
6416a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* !defined (NO_FLOAT) */
6417a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6418a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case PPC_405:
6419a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (IS_PPC405)
6420a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         tmpl = &test_ppc405;
6421a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         loop = &tmpl;
6422a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         break;
6423a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else
6424a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         fprintf(stderr, "Sorry. "
6425a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                 "PPC405 instructions tests are disabled on your host\n");
6426a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         continue;
6427a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif /* defined (IS_PPC405) */
6428a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case PPC_ALTIVEC:
6429a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC)
6430a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         loop = &altivec_int_loops[nb_args - 1];
6431a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         break;
6432a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else
6433a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         fprintf(stderr, "Sorry. "
6434a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                 "Altivec instructions tests are disabled on your host\n");
6435a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         continue;
6436a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
6437a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case PPC_FALTIVEC:
6438a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC)
6439a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         loop = &altivec_float_loops[nb_args - 1];
6440a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         break;
6441a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else
6442a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         fprintf(stderr, "Sorry. "
6443a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                 "Altivec float instructions tests "
6444a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj                 "are disabled on your host\n");
6445a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
6446a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         continue;
6447a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      default:
6448a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("ERROR: unknown insn family %08x\n", family);
6449a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         continue;
6450a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
6451a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if (1 || verbose > 0)
6452a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         printf("%s:\n", all_tests[i].name);
6453a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      for (j=0; tests[j].name != NULL; j++) {
6454a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (check_name(tests[j].name, filter, exact)) {
6455a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            if (verbose > 1)
6456a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj               printf("Test instruction %s\n", tests[j].name);
6457a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            (*loop)(tests[j].name, tests[j].func, all_tests[i].flags);
6458a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            printf("\n");
6459a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            n++;
6460a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         }
6461a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj        }
6462a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      if (verbose) printf("\n");
6463a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
6464a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   printf("All done. Tested %d different instructions\n", n);
6465a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
6466a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6467a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6468a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjstatic void usage (void)
6469a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
6470a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (USAGE_SIMPLE)
6471a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   fprintf(stderr,
6472a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "test-ppc [-1] [-2] [-3] [-*] [-t <type>] [-f <family>] [-u] "
6473a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "[-n <filter>] [-r <test_rigour>] [-h]\n"
6474a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t-1: test opcodes with one argument\n"
6475a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t-2: test opcodes with two arguments\n"
6476a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t-3: test opcodes with three arguments\n"
6477a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t-*: launch test without checking the number of arguments\n"
6478a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t-t: launch test for instructions of type <type>\n"
6479a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t    recognized types:\n"
6480a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t\tarith (or a)\n"
6481a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t\tlogical (or l)\n"
6482a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t\tcompare (or c)\n"
6483a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t\tstoreload (or s)\n"
6484a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t-f: launch test for instructions of family <family>\n"
6485a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t    recognized families:\n"
6486a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t\tinteger (or i)\n"
6487a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t\tfloat (or f)\n"
6488a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t\tppc405 (or mac)\n"
6489a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t\taltivec (or a)\n"
6490a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t-u: test instructions that update flags\n"
6491a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t-n: filter instructions with <filter>\n"
6492a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t    <filter> can be in two forms:\n"
6493a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t\tname  : filter functions that exactly match <name>\n"
6494a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t\tname* : filter functions that start with <name>\n"
6495a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t-r: set size of arg tables to use to define <test_rigour>\n"
6496a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t    recognized types:\n"
6497a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t\tlarge (or l)\n"
6498a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t\tsmall (or s) - default\n"
6499a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t-v: verbose (-v -v for more)\n"
6500a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t-h: print this help\n"
6501a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           );
6502a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else
6503a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   fprintf(stderr,
6504a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "test-ppc [-a]\n"
6505a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           "\t-a: include tests for altivec instructions\n"
6506a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj           );
6507a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
6508a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
6509a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6510a29a9081631d4af1d07e5e66cdfc870e971f998fsewardjint main (int argc, char **argv)
6511a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj{
6512a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if !defined (USAGE_SIMPLE)
6513a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   unsigned char *tmp, *filter = NULL;
6514a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   insn_sel_flags_t flags;
6515a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int c;
6516a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6517a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.one_arg    = 0;
6518a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.two_args   = 0;
6519a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.three_args = 0;
6520a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.arith      = 0;
6521a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.logical    = 0;
6522a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.compare    = 0;
6523a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.ldst       = 0;
6524a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.integer    = 0;
6525a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.floats     = 0;
6526a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.p405       = 0;
6527a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.altivec    = 0;
6528a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.faltivec   = 0;
6529a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.cr         = -1;
6530a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6531a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   while ((c = getopt(argc, argv, "123t:f:n:r:uvh")) != -1) {
6532a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      switch (c) {
6533a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case '1':
6534a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         flags.one_arg = 1;
6535a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         break;
6536a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case '2':
6537a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         flags.two_args = 1;
6538a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         break;
6539a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case '3':
6540a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         flags.three_args = 1;
6541a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         break;
6542a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case 't':
6543a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         tmp = optarg;
6544a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (strcmp(tmp, "arith") == 0 || strcmp(tmp, "a") == 0) {
6545a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            flags.arith = 1;
6546a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         } else if (strcmp(tmp, "logical") == 0 || strcmp(tmp, "l") == 0) {
6547a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            flags.logical = 1;
6548a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         } else if (strcmp(tmp, "compare") == 0 || strcmp(tmp, "c") == 0) {
6549a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            flags.compare = 1;
6550a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         } else if (strcmp(tmp, "storeload") == 0 || strcmp(tmp, "s") == 0) {
6551a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            flags.ldst = 1;
6552a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         } else {
6553a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            goto bad_arg;
6554a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         }
6555a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         break;
6556a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case 'f':
6557a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         tmp = optarg;
6558a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (strcmp(tmp, "integer") == 0 || strcmp(tmp, "i") == 0) {
6559a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            flags.integer = 1;
6560a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         } else if (strcmp(tmp, "float") == 0 || strcmp(tmp, "f") == 0) {
6561a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            flags.floats = 1;
6562a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         } else if (strcmp(tmp, "ppc405") == 0 || strcmp(tmp, "mac") == 0) {
6563a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            flags.p405 = 1;
6564a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         } else if (strcmp(tmp, "altivec") == 0 || strcmp(tmp, "a") == 0) {
6565a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            flags.altivec = 1;
6566a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            flags.faltivec = 1;
6567a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         } else {
6568a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            goto bad_arg;
6569a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         }
6570a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         break;
6571a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case 'n':
6572a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         filter = optarg;
6573a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         break;
6574a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case 'r':
6575a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         tmp = optarg;
6576a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         if (strcmp(tmp, "large") == 0 || strcmp(tmp, "l") == 0) {
6577a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            arg_list_size = 1;
6578a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         } else if (strcmp(tmp, "small") == 0 || strcmp(tmp, "s") == 0) {
6579a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            arg_list_size = 0;
6580a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         } else {
6581a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj            goto bad_arg;
6582a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         }
6583a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         break;
6584a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6585a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case 'u':
6586a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         flags.cr = 1;
6587a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         break;
6588a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case 'h':
6589a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         usage();
6590a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         return 0;
6591a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case 'v':
6592a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         verbose++;
6593a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         break;
6594a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      default:
6595a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         usage();
6596a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         fprintf(stderr, "Unknown argument: '%c'\n", c);
6597a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         return 1;
6598a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      bad_arg:
6599a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         usage();
6600a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         fprintf(stderr, "Bad argument for '%c': '%s'\n", c, tmp);
6601a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         return 1;
6602a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
6603a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
6604a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   if (argc != optind) {
6605a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      usage();
6606a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      fprintf(stderr, "Bad number of arguments\n");
6607a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      return 1;
6608a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
6609a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6610a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // Default n_args
6611a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   if (flags.one_arg == 0 && flags.two_args == 0 && flags.three_args == 0) {
6612a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags.one_arg = 1;
6613a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags.two_args = 1;
6614a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags.three_args = 1;
6615a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
6616a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // Default type
6617a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   if (flags.arith == 0 && flags.logical == 0 &&
6618a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj       flags.compare == 0 && flags.ldst == 0) {
6619a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags.arith   = 1;
6620a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags.logical = 1;
6621a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags.compare = 1;
6622a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags.ldst    = 1;
6623a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
6624a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // Default family
6625a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   if (flags.integer == 0 && flags.floats == 0 &&
6626a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj       flags.p405 == 0 && flags.altivec == 0 && flags.faltivec == 0) {
6627a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags.integer  = 1;
6628a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags.floats   = 1;
6629a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags.p405     = 1;
6630a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags.altivec  = 1;
6631a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags.faltivec = 1;
6632a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
6633a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // Default cr update
6634a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   if (flags.cr == -1)
6635a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      flags.cr = 2;       // both
6636a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6637a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#else
6638a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   /* Simple usage:
6639a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      ./test-ppc      => all insns, except AV
6640a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      ./test-ppc -a   => all insns, including AV
6641a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   */
6642530f73578552bc876a51fbf90cb6be29769bb362sewardj   char *filter = NULL;
6643a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   insn_sel_flags_t flags;
6644a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   int c;
6645a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6646a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // Args
6647a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.one_arg    = 1;
6648a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.two_args   = 1;
6649a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.three_args = 1;
6650a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // Type
6651a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.arith      = 1;
6652a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.logical    = 1;
6653a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.compare    = 1;
6654a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.ldst       = 1;
6655a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // Family
6656a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.integer    = 1;
6657a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.floats     = 0;
6658a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.p405       = 0;
6659a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.altivec    = 0;
6660a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.faltivec   = 0;
6661a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // Flags
6662a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   flags.cr         = 2;
6663a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6664a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   while ((c = getopt(argc, argv, "ahv")) != -1) {
6665a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      switch (c) {
6666a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case 'a':
6667a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         flags.altivec  = 1;
666805cf1ebf06561a8b59adae508e7c4bf6c028ee5bcerion         flags.faltivec = 1;
6669a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         break;
6670a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case 'h':
6671a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         usage();
6672a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         return 0;
6673a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      case 'v':
6674a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         verbose++;
6675a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         break;
6676a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      default:
6677a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         usage();
6678a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         fprintf(stderr, "Unknown argument: '%c'\n", c);
6679a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj         return 1;
6680a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      }
6681a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
6682a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6683a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   arg_list_size = 0;
6684a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
6685a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6686a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6687a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   build_iargs_table();
6688a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   build_fargs_table();
6689a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   build_ii16_table();
6690a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC)
6691a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   build_viargs_table();
6692a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   build_vfargs_table();
6693a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
6694a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // dump_iargs();
6695a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // dump_iargs16();
6696a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   // dump_vfargs();
6697a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6698a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   if (verbose > 1) {
6699a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("\nInstruction Selection:\n");
6700a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("  n_args: \n");
6701a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("    one_arg    = %d\n", flags.one_arg);
6702a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("    two_args   = %d\n", flags.two_args);
6703a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("    three_args = %d\n", flags.three_args);
6704a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("  type: \n");
6705a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("    arith      = %d\n", flags.arith);
6706a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("    logical    = %d\n", flags.logical);
6707a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("    compare    = %d\n", flags.compare);
6708a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("    ldst       = %d\n", flags.ldst);
6709a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("  family: \n");
6710a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("    integer    = %d\n", flags.integer);
6711a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("    floats     = %d\n", flags.floats);
6712a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("    p405       = %d\n", flags.p405);
6713a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("    altivec    = %d\n", flags.altivec);
6714a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("    faltivec   = %d\n", flags.faltivec);
6715a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("  cr update: \n");
6716a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("    cr         = %d\n", flags.cr);
6717a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("\n");
6718a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("  num args: \n");
6719a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("    iargs      - %d\n", nb_iargs);
6720a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("    fargs      - %d\n", nb_fargs);
6721a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#if defined (HAS_ALTIVEC)
6722a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("    viargs     - %d\n", nb_viargs);
6723a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("    vfargs     - %d\n", nb_vfargs);
6724a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj#endif
6725a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj      printf("\n");
6726a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   }
6727a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6728a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   do_tests( flags, filter );
6729a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj
6730a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj   return 0;
6731a29a9081631d4af1d07e5e66cdfc870e971f998fsewardj}
6732